From 8a966c1e544bcb8805d79cc92a7ccdf3e0cdc3a2 Mon Sep 17 00:00:00 2001 From: voodoos <5031221+voodoos@users.noreply.github.com> Date: Sun, 19 May 2024 21:22:52 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20voodoos/?= =?UTF-8?q?ocamix@f4f153803da8f9362f456dac7bd88c49431c9374=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db_worker.bc.js | 5039 ++++++++++++++++++++------------------- main.bc.js | 5949 ++++++++++++++++++++++++----------------------- 2 files changed, 5514 insertions(+), 5474 deletions(-) diff --git a/db_worker.bc.js b/db_worker.bc.js index 35b3597..31f7b91 100644 --- a/db_worker.bc.js +++ b/db_worker.bc.js @@ -1,5 +1,5 @@ // Generated by js_of_ocaml -//# buildInfo:effects=false, kind=exe, use-js-string=true, version=5.7.2+5.7.2 +//# buildInfo:effects=false, kind=exe, use-js-string=true, version=5.8.1+5.8.1 (function (Object){ typeof globalThis !== "object" @@ -2843,8 +2843,9 @@ return 0; } var caml_ml_channels = new Array(); + function caml_ml_channel_get(id){return caml_ml_channels[id];} function caml_ml_flush(chanid){ - var chan = caml_ml_channels[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) @@ -2856,7 +2857,7 @@ return 0; } function caml_ml_close_channel(chanid){ - var chan = caml_ml_channels[chanid]; + var chan = caml_ml_channel_get(chanid); if(chan.opened){ chan.opened = false; caml_sys_close(chan.fd); @@ -2898,7 +2899,7 @@ } function caml_ml_input_block(chanid, ba, i, l){ var - chan = caml_ml_channels[chanid], + chan = caml_ml_channel_get(chanid), n = l, avail = chan.buffer_max - chan.buffer_curr; if(l <= avail){ @@ -3066,7 +3067,7 @@ return l; } function caml_ml_output_ta(chanid, buffer, offset, len){ - var chan = caml_ml_channels[chanid]; + 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); @@ -3118,7 +3119,7 @@ return 0; } function caml_ml_set_channel_name(chanid, name){ - var chan = caml_ml_channels[chanid]; + var chan = caml_ml_channel_get(chanid); chan.name = name; return 0; } @@ -3167,7 +3168,6 @@ caml_named_values[caml_jsbytes_of_string(nm)] = v; return 0; } - function caml_string_equal(s1, s2){if(s1 === s2) return 1; return 0;} function caml_string_bound_error(){ caml_invalid_argument("index out of bounds"); } @@ -3175,9 +3175,6 @@ if(i >>> 0 >= caml_ml_string_length(s)) caml_string_bound_error(); return caml_string_unsafe_get(s, i); } - 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); @@ -3870,9 +3867,8 @@ "(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"], _cf_ = "Fun.Finally_raised: ", _ce_ = "Stdlib.Fun.Finally_raised", - _ch_ = "Random.int", _cg_ = "x", - _ci_ = + _ch_ = [0, 987910699, 495797812, @@ -3929,135 +3925,135 @@ 652377910, 409934019, 801085050], - _cn_ = "Hashtbl: unsupported hash table format", - _cl_ = cst$1, - _cG_ = [3, 0, 3], - _cH_ = cst, - _cD_ = cst$5, - _cE_ = "<\/", - _cF_ = cst$1, - _cA_ = cst$5, - _cB_ = cst$6, - _cC_ = cst$1, - _cz_ = "\n", + _cm_ = "Hashtbl: unsupported hash table format", + _ck_ = cst$1, + _cF_ = [3, 0, 3], + _cG_ = cst, + _cC_ = cst$5, + _cD_ = "<\/", + _cE_ = cst$1, + _cz_ = cst$5, + _cA_ = cst$6, + _cB_ = cst$1, + _cy_ = "\n", + _cu_ = cst$1, _cv_ = cst$1, _cw_ = cst$1, _cx_ = cst$1, - _cy_ = cst$1, - _cu_ = [0, cst$1], + _ct_ = [0, cst$1], + _cp_ = cst$1, _cq_ = cst$1, _cr_ = cst$1, _cs_ = cst$1, - _ct_ = cst$1, - _cp_ = [0, cst$1, 0, cst$1], - _co_ = "Stdlib.Format.String_tag", - _cI_ = "Jsoo_runtime.Error.Exn", - _cJ_ = "jsError", - _cM_ = [0, "src/fut.ml", 34, 25], - _cR_ = "info", - _cQ_ = cst_error, - _cP_ = "log", - _cN_ = "search", - _cS_ = "isSecureContext", - _cT_ = "cache", - _cU_ = "credentials", - _cV_ = "headers", - _cW_ = "integrity", - _cX_ = "keepalive", - _cY_ = "method", - _cZ_ = "mode", - _c0_ = "redirect", - _c1_ = "referrer", - _c2_ = "referrerPolicy", - _db_ = "open", - _c__ = "autoIncrement", - _c$_ = "keyPath", - _da_ = "new object store with options:", - _c7_ = "readonly", - _c8_ = "readwrite", - _c9_ = "readwriteflush", - _c3_ = "next", - _c4_ = "nextUnique", - _c5_ = "prev", - _c6_ = "prevUnique", - _de_ = "CCResult.Get_error", - _di_ = [0, cst_src_core_CCString_pp_ml, 116, 10], - _dh_ = [0, cst_src_core_CCString_pp_ml, 89, 10], - _dg_ = cst$1, - _ds_ = "expected low surrogate escape sequence (u)", - _dt_ = "invalid low surrogate for code point beyond U+FFFF'", - _du_ = "expected low surrogate escape char (\\)", - _dv_ = "invalid escape in string", - _dr_ = "end of string in escape sequence", - _dm_ = "' ", - _dn_ = " '", - _dq_ = cst$1, - _do_ = cst$4, - _dp_ = " at offset ", - _dk_ = cst$7, - _dl_ = "invalid hex char in unicode escape: '", - _dj_ = "Jsonxt__Lexxer_utils.Lex_error", - _dw_ = [6, 1], - _dx_ = [6, 0], - _dy_ = cst$7, - _dz_ = cst_unexpected_character, - _dA_ = cst$7, - _dB_ = cst_unexpected_character, - _dC_ = cst$7, - _dD_ = cst_unexpected_character, - _dE_ = cst$7, - _dF_ = cst_unexpected_character, - _dG_ = [0, cst$1], - _dH_ = cst$7, - _dI_ = cst_unexpected_character, - _dJ_ = "unexpected EOF in comment", - _dK_ = "Jsonxt__Error_info.Json_error_info", + _co_ = [0, cst$1, 0, cst$1], + _cn_ = "Stdlib.Format.String_tag", + _cH_ = "Jsoo_runtime.Error.Exn", + _cI_ = "jsError", + _cL_ = [0, "src/fut.ml", 34, 25], + _cQ_ = "info", + _cP_ = cst_error, + _cO_ = "log", + _cM_ = "search", + _cR_ = "isSecureContext", + _cS_ = "cache", + _cT_ = "credentials", + _cU_ = "headers", + _cV_ = "integrity", + _cW_ = "keepalive", + _cX_ = "method", + _cY_ = "mode", + _cZ_ = "redirect", + _c0_ = "referrer", + _c1_ = "referrerPolicy", + _da_ = "open", + _c9_ = "autoIncrement", + _c__ = "keyPath", + _c$_ = "new object store with options:", + _c6_ = "readonly", + _c7_ = "readwrite", + _c8_ = "readwriteflush", + _c2_ = "next", + _c3_ = "nextUnique", + _c4_ = "prev", + _c5_ = "prevUnique", + _dd_ = "CCResult.Get_error", + _dh_ = [0, cst_src_core_CCString_pp_ml, 116, 10], + _dg_ = [0, cst_src_core_CCString_pp_ml, 89, 10], + _df_ = cst$1, + _dr_ = "expected low surrogate escape sequence (u)", + _ds_ = "invalid low surrogate for code point beyond U+FFFF'", + _dt_ = "expected low surrogate escape char (\\)", + _du_ = "invalid escape in string", + _dq_ = "end of string in escape sequence", + _dl_ = "' ", + _dm_ = " '", + _dp_ = cst$1, + _dn_ = cst$4, + _do_ = " at offset ", + _dj_ = cst$7, + _dk_ = "invalid hex char in unicode escape: '", + _di_ = "Jsonxt__Lexxer_utils.Lex_error", + _dv_ = [6, 1], + _dw_ = [6, 0], + _dx_ = cst$7, + _dy_ = cst_unexpected_character, + _dz_ = cst$7, + _dA_ = cst_unexpected_character, + _dB_ = cst$7, + _dC_ = cst_unexpected_character, + _dD_ = cst$7, + _dE_ = cst_unexpected_character, + _dF_ = [0, cst$1], + _dG_ = cst$7, + _dH_ = cst_unexpected_character, + _dI_ = "unexpected EOF in comment", + _dJ_ = "Jsonxt__Error_info.Json_error_info", + _dK_ = cst_0, _dL_ = cst_0, - _dM_ = cst_0, - _dN_ = "unexpected '{'", - _dO_ = "unexpected '}'", - _dP_ = "unexpected null value", - _dQ_ = "unexpected negative infinity", - _dR_ = "unexpected Not-a-Number", - _dS_ = "unexpected infinity", - _dT_ = "unexpected end-of-input", - _dU_ = "unexpected ','", - _dV_ = "unexpected ':'", - _dW_ = "unexpected '['", - _dX_ = "unexpected ']'", - _dY_ = "unexpected '<'", - _dZ_ = "unexpected '>'", - _d0_ = "unexpected '('", - _d1_ = "unexpected ')'", - _d2_ = cst$7, - _d3_ = "unexpected string '", - _d4_ = cst$7, - _d5_ = "unexpected large integer '", - _d6_ = cst$7, - _d7_ = "unexpected integer '", - _d8_ = cst$7, - _d9_ = "unexpected float '", - _d__ = cst$7, - _d$_ = "compliance error '", - _ea_ = cst$7, - _eb_ = cst_true, - _ed_ = cst_false, - _ec_ = "unexpected boolean '", - _eh_ = [1, "Unexpected end-of-input"], - _ef_ = [0, 148000204, "tuple must have at least 2 elements"], - _eg_ = [0, 148000204, "variant must have at least a string"], - _ee_ = "Jsonxt__Parser.Make(Compliance).Parse_error", - _ek_ = cst_b, - _el_ = cst_t, - _em_ = cst_n, - _en_ = cst_f, - _eo_ = cst_r, - _ep_ = cst$8, - _ei_ = cst$0, - _ej_ = cst_u00, - _er_ = cst_null, - _es_ = cst$9, - _et_ = + _dM_ = "unexpected '{'", + _dN_ = "unexpected '}'", + _dO_ = "unexpected null value", + _dP_ = "unexpected negative infinity", + _dQ_ = "unexpected Not-a-Number", + _dR_ = "unexpected infinity", + _dS_ = "unexpected end-of-input", + _dT_ = "unexpected ','", + _dU_ = "unexpected ':'", + _dV_ = "unexpected '['", + _dW_ = "unexpected ']'", + _dX_ = "unexpected '<'", + _dY_ = "unexpected '>'", + _dZ_ = "unexpected '('", + _d0_ = "unexpected ')'", + _d1_ = cst$7, + _d2_ = "unexpected string '", + _d3_ = cst$7, + _d4_ = "unexpected large integer '", + _d5_ = cst$7, + _d6_ = "unexpected integer '", + _d7_ = cst$7, + _d8_ = "unexpected float '", + _d9_ = cst$7, + _d__ = "compliance error '", + _d$_ = cst$7, + _ea_ = cst_true, + _ec_ = cst_false, + _eb_ = "unexpected boolean '", + _eg_ = [1, "Unexpected end-of-input"], + _ee_ = [0, 148000204, "tuple must have at least 2 elements"], + _ef_ = [0, 148000204, "variant must have at least a string"], + _ed_ = "Jsonxt__Parser.Make(Compliance).Parse_error", + _ej_ = cst_b, + _ek_ = cst_t, + _el_ = cst_n, + _em_ = cst_f, + _en_ = cst_r, + _eo_ = cst$8, + _eh_ = cst$0, + _ei_ = cst_u00, + _eq_ = cst_null, + _er_ = cst$9, + _es_ = [0, [12, 123, @@ -4065,9 +4061,9 @@ [0, cst_1_0, 1, 0], [15, [17, [0, cst_1_2, 1, -2], [12, 125, 0]]]]], "{@;<1 0>%a@;<1 -2>}"], - _eu_ = "{}", - _ev_ = cst$9, - _ew_ = + _et_ = "{}", + _eu_ = cst$9, + _ev_ = [0, [12, 91, @@ -4077,16 +4073,16 @@ [1, [0, [11, cst_hov, 0], cst_hov]], [15, [17, 0, [17, [0, cst_1_2, 1, -2], [12, 93, 0]]]]]]], "[@;<1 0>@[%a@]@;<1 -2>]"], - _ex_ = "[]", - _ey_ = "()", - _ez_ = cst$9, - _eA_ = + _ew_ = "[]", + _ex_ = "()", + _ey_ = cst$9, + _ez_ = [0, [12, 40, [17, [0, "@,", 0, 0], [15, [17, [0, "@;<0 -2>", 0, -2], [12, 41, 0]]]]], "(@,%a@;<0 -2>)"], - _eB_ = + _eA_ = [0, [12, 60, @@ -4094,103 +4090,103 @@ [1, [0, [11, cst_hv2, 0], cst_hv2]], [2, 0, [11, cst$4, [15, [17, 0, [12, 62, 0]]]]]]], "<@[%s: %a@]>"], - _eC_ = [0, [12, 60, [2, 0, [12, 62, 0]]], "<%s>"], - _eD_ = + _eB_ = [0, [12, 60, [2, 0, [12, 62, 0]]], "<%s>"], + _eC_ = [0, [18, [1, [0, [11, cst_hv2, 0], cst_hv2]], [2, 0, [11, cst$4, [15, [17, 0, 0]]]]], "@[%s: %a@]"], - _eG_ = [0, [15, [17, 2, 0]], "%a@?"], - _eF_ = [0, [15, 0], cst_a], - _eE_ = + _eF_ = [0, [15, [17, 2, 0]], "%a@?"], + _eE_ = [0, [15, 0], cst_a], + _eD_ = [0, [18, [1, [0, [11, cst_hv2, 0], cst_hv2]], [15, [17, 0, 0]]], "@[%a@]"], - _eq_ = [0, [2, 0, [17, [0, "@ ", 1, 0], 0]], "%s@ "], - _eJ_ = "Expected `String", - _eI_ = "Expected `Assoc", - _eL_ = "{", - _eM_ = "}", - _eN_ = "Null", - _eO_ = cst_Infinity, - _eP_ = "NAN", - _eQ_ = cst_Infinity$0, - _eR_ = "end-of-file", - _eS_ = cst$9, - _eT_ = cst$10, - _eU_ = "[", - _eV_ = "]", - _eW_ = cst$6, - _eX_ = cst$5, - _eY_ = "(", - _eZ_ = ")", - _e0_ = cst$7, - _e1_ = "input error '", - _e2_ = cst_true, - _e3_ = cst_false, - _e6_ = cst_junk_after_end_of_JSON_val, - _e7_ = [0, 0], - _e8_ = [1, cst_empty_input], - _e4_ = cst_junk_after_end_of_JSON_val, - _e5_ = [1, cst_empty_input], + _ep_ = [0, [2, 0, [17, [0, "@ ", 1, 0], 0]], "%s@ "], + _eI_ = "Expected `String", + _eH_ = "Expected `Assoc", + _eK_ = "{", + _eL_ = "}", + _eM_ = "Null", + _eN_ = cst_Infinity, + _eO_ = "NAN", + _eP_ = cst_Infinity$0, + _eQ_ = "end-of-file", + _eR_ = cst$9, + _eS_ = cst$10, + _eT_ = "[", + _eU_ = "]", + _eV_ = cst$6, + _eW_ = cst$5, + _eX_ = "(", + _eY_ = ")", + _eZ_ = cst$7, + _e0_ = "input error '", + _e1_ = cst_true, + _e2_ = cst_false, + _e5_ = cst_junk_after_end_of_JSON_val, + _e6_ = [0, 0], + _e7_ = [1, cst_empty_input], + _e3_ = cst_junk_after_end_of_JSON_val, + _e4_ = [1, cst_empty_input], + _fi_ = cst$1, _fj_ = cst$1, - _fk_ = cst$1, - _fg_ = cst_null, + _ff_ = cst_null, + _fg_ = cst$9, _fh_ = cst$9, - _fi_ = cst$9, - _ff_ = cst$10, - _e$_ = cst_b, - _fa_ = cst_t, - _fb_ = cst_n, - _fc_ = cst_f, - _fd_ = cst_r, - _fe_ = cst$8, - _e9_ = cst$0, - _e__ = cst_u00, - _ft_ = cst_null, - _fv_ = cst$9, - _fu_ = cst$1, - _fx_ = cst$9, - _fw_ = cst$1, - _fn_ = cst_b, - _fo_ = cst_t, - _fp_ = cst_n, - _fq_ = cst_f, - _fr_ = cst_r, - _fs_ = cst$8, - _fl_ = cst$0, - _fm_ = cst_u00, - _f1_ = [0, 928231259, cst_Infinity$0], - _f2_ = [0, 928231259, cst_Infinity], - _f0_ = [0, 928231259, cst_NaN], - _fZ_ = cst_NaN, - _fX_ = cst_Infinity, - _fY_ = cst_Infinity$0, - _fW_ = [0, 0], + _fe_ = cst$10, + _e__ = cst_b, + _e$_ = cst_t, + _fa_ = cst_n, + _fb_ = cst_f, + _fc_ = cst_r, + _fd_ = cst$8, + _e8_ = cst$0, + _e9_ = cst_u00, + _fs_ = cst_null, + _fu_ = cst$9, + _ft_ = cst$1, + _fw_ = cst$9, + _fv_ = cst$1, + _fm_ = cst_b, + _fn_ = cst_t, + _fo_ = cst_n, + _fp_ = cst_f, + _fq_ = cst_r, + _fr_ = cst$8, + _fk_ = cst$0, + _fl_ = cst_u00, + _f0_ = [0, 928231259, cst_Infinity$0], + _f1_ = [0, 928231259, cst_Infinity], + _fZ_ = [0, 928231259, cst_NaN], + _fY_ = cst_NaN, + _fW_ = cst_Infinity, + _fX_ = cst_Infinity$0, + _fV_ = [0, 0], + _fT_ = cst$11, _fU_ = cst$11, - _fV_ = cst$11, - _fT_ = "floatlit not supported in yojson safe mode", - _fS_ = cst_NaN, - _fQ_ = cst_Infinity, - _fR_ = cst_Infinity$0, - _fP_ = [0, 0], - _fO_ = cst_variants_not_supported_in_, + _fS_ = "floatlit not supported in yojson safe mode", + _fR_ = cst_NaN, + _fP_ = cst_Infinity, + _fQ_ = cst_Infinity$0, + _fO_ = [0, 0], _fN_ = cst_variants_not_supported_in_, - _fM_ = cst_tuples_not_supported_in_yo, + _fM_ = cst_variants_not_supported_in_, _fL_ = cst_tuples_not_supported_in_yo, - _fK_ = "floatlit not supported in yojson basic mode", - _fJ_ = cst_variants_not_supported_in_, - _fI_ = cst_tuples_not_supported_in_yo, - _fH_ = cst_NaN, - _fF_ = cst_Infinity, - _fG_ = cst_Infinity$0, - _fE_ = [0, 0], - _fD_ = [5, "Integer out of bounds"], - _fz_ = ", line", - _fA_ = "File ", - _fC_ = "Line", - _fB_ = + _fK_ = cst_tuples_not_supported_in_yo, + _fJ_ = "floatlit not supported in yojson basic mode", + _fI_ = cst_variants_not_supported_in_, + _fH_ = cst_tuples_not_supported_in_yo, + _fG_ = cst_NaN, + _fE_ = cst_Infinity, + _fF_ = cst_Infinity$0, + _fD_ = [0, 0], + _fC_ = [5, "Integer out of bounds"], + _fy_ = ", line", + _fz_ = "File ", + _fB_ = "Line", + _fA_ = [0, [2, 0, @@ -4204,16 +4200,16 @@ " chars ", [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$4, 0]]]]]]]], "%s %d chars %d-%d: "], - _fy_ = "Jsonxt__Yojson.Json_error", - _f3_ = [1, [0, 3854881, "Failed to unmarshal data"]], - _f8_ = "list_of_yojson: list needed", - _f7_ = "int_of_yojson: integer needed", - _f6_ = "string_of_yojson: string needed", - _f5_ = "bool_of_yojson: true/false needed", - _f4_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", - _gf_ = cst$12, - _gh_ = "_of_yojson: list instead of atom for record expected", - _gg_ = + _fx_ = "Jsonxt__Yojson.Json_error", + _f2_ = [1, [0, 3854881, "Failed to unmarshal data"]], + _f7_ = "list_of_yojson: list needed", + _f6_ = "int_of_yojson: integer needed", + _f5_ = "string_of_yojson: string needed", + _f4_ = "bool_of_yojson: true/false needed", + _f3_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", + _ge_ = cst$12, + _gg_ = "_of_yojson: list instead of atom for record expected", + _gf_ = [0, [2, 0, @@ -4221,275 +4217,275 @@ "_of_yojson: the following record elements were undefined: ", [2, 0, 0]]], "%s_of_yojson: the following record elements were undefined: %s"], - _ge_ = "extra fields", - _gd_ = "duplicate fields", - _gb_ = cst$12, - _gc_ = + _gd_ = "extra fields", + _gc_ = "duplicate fields", + _ga_ = cst$12, + _gb_ = [0, [2, 0, [11, "_of_yojson: ", [2, 0, [11, cst$4, [2, 0, 0]]]]], "%s_of_yojson: %s: %s"], - _ga_ = "_of_yojson: unexpected variant constructor", - _f$_ = "_of_yojson: expected a variant type, saw an empty list", - _f__ = "_of_yojson: expected a variant type, saw a nested list", - _f9_ = "_of_yojson: this constructor does not take arguments", - _i5_ = "An error occured while decoding response: ", - _i1_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], - _i4_ = cst$1, - _i2_ = cst$1, - _i3_ = + _f$_ = "_of_yojson: unexpected variant constructor", + _f__ = "_of_yojson: expected a variant type, saw an empty list", + _f9_ = "_of_yojson: expected a variant type, saw a nested list", + _f8_ = "_of_yojson: this constructor does not take arguments", + _i4_ = "An error occured while decoding response: ", + _i0_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], + _i3_ = cst$1, + _i1_ = cst$1, + _i2_ = [0, [11, 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="', [2, 0, [11, '", Version="0.1"', [2, 0, 0]]]], 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'], - _iY_ = cst_ItemId, - _iZ_ = cst_Locations, - _i0_ = cst_Name, - _iV_ = "item_id", - _iW_ = "locations", - _iX_ = cst_name, - _iU_ = [0, [11, "/Users/", [2, 0, [11, "/Views", 0]]], "/Users/%s/Views"], - _iR_ = cst_StartIndex, - _iS_ = cst_TotalRecordCount, - _iT_ = cst_Items, - _iO_ = cst_start_index, - _iP_ = cst_total_record_count, - _iQ_ = cst_items, - _iN_ = cst_includeExternalContent, - _iM_ = "include_external_content", - _iL_ = "/Items", - _iI_ = cst_StartIndex, - _iJ_ = cst_TotalRecordCount, - _iK_ = cst_Items, - _iF_ = cst_start_index, - _iG_ = cst_total_record_count, - _iH_ = cst_items, - _it_ = cst_enableImages, - _iu_ = cst_enableUserData, - _iv_ = cst_recursive, - _iw_ = cst_sortBy, - _ix_ = cst_sortOrder, - _iy_ = cst_limit, - _iz_ = cst_startIndex, - _iA_ = cst_includeItemTypes, - _iB_ = cst_fields, - _iC_ = cst_userId, - _iD_ = cst_parentId, - _iE_ = cst_ids, - _im_ = "enable_images", - _in_ = "enable_user_data", - _io_ = cst_recursive, - _ip_ = "sort_by", - _iq_ = "include_item_types", - _ir_ = cst_fields, - _is_ = "user_id", - _il_ = cst_CollectionType, - _ic_ = cst_Type, - _id_ = cst_ImageBlurHashes, - _ie_ = cst_ServerId, - _if_ = cst_ParentId, - _ig_ = cst_AlbumId, - _ih_ = cst_Path, - _ii_ = cst_Id, - _ij_ = cst_SortName, - _ik_ = cst_Name, - _h9_ = "type_", - _h__ = "image_blur_hashes", - _h$_ = "server_id", - _ia_ = cst_id, - _ib_ = cst_name, - _h8_ = [0, "lib/data_source/jellyfin_api.ml", 193, 64], - _g$_ = [0, 848054398, [0, [0, -976970511, cst_AirTime], 0]], - _ha_ = [0, 848054398, [0, [0, -976970511, cst_BasicSyncInfo], 0]], - _hb_ = [0, 848054398, [0, [0, -976970511, cst_CanDelete], 0]], - _hc_ = [0, 848054398, [0, [0, -976970511, cst_CanDownload], 0]], - _hd_ = [0, 848054398, [0, [0, -976970511, cst_ChannelImage], 0]], - _he_ = [0, 848054398, [0, [0, -976970511, cst_ChannelInfo], 0]], - _hf_ = [0, 848054398, [0, [0, -976970511, cst_Chapters], 0]], - _hg_ = [0, 848054398, [0, [0, -976970511, cst_ChildCount], 0]], - _hh_ = [0, 848054398, [0, [0, -976970511, cst_CumulativeRunTimeTicks], 0]], - _hi_ = [0, 848054398, [0, [0, -976970511, cst_CustomRating], 0]], - _hj_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], - _hk_ = [0, 848054398, [0, [0, -976970511, cst_DateLastMediaAdded], 0]], - _hl_ = [0, 848054398, [0, [0, -976970511, cst_DateLastRefreshed], 0]], - _hm_ = [0, 848054398, [0, [0, -976970511, cst_DateLastSaved], 0]], - _hn_ = [0, 848054398, [0, [0, -976970511, cst_DisplayPreferencesId], 0]], - _ho_ = + _iX_ = cst_ItemId, + _iY_ = cst_Locations, + _iZ_ = cst_Name, + _iU_ = "item_id", + _iV_ = "locations", + _iW_ = cst_name, + _iT_ = [0, [11, "/Users/", [2, 0, [11, "/Views", 0]]], "/Users/%s/Views"], + _iQ_ = cst_StartIndex, + _iR_ = cst_TotalRecordCount, + _iS_ = cst_Items, + _iN_ = cst_start_index, + _iO_ = cst_total_record_count, + _iP_ = cst_items, + _iM_ = cst_includeExternalContent, + _iL_ = "include_external_content", + _iK_ = "/Items", + _iH_ = cst_StartIndex, + _iI_ = cst_TotalRecordCount, + _iJ_ = cst_Items, + _iE_ = cst_start_index, + _iF_ = cst_total_record_count, + _iG_ = cst_items, + _is_ = cst_enableImages, + _it_ = cst_enableUserData, + _iu_ = cst_recursive, + _iv_ = cst_sortBy, + _iw_ = cst_sortOrder, + _ix_ = cst_limit, + _iy_ = cst_startIndex, + _iz_ = cst_includeItemTypes, + _iA_ = cst_fields, + _iB_ = cst_userId, + _iC_ = cst_parentId, + _iD_ = cst_ids, + _il_ = "enable_images", + _im_ = "enable_user_data", + _in_ = cst_recursive, + _io_ = "sort_by", + _ip_ = "include_item_types", + _iq_ = cst_fields, + _ir_ = "user_id", + _ik_ = cst_CollectionType, + _ib_ = cst_Type, + _ic_ = cst_ImageBlurHashes, + _id_ = cst_ServerId, + _ie_ = cst_ParentId, + _if_ = cst_AlbumId, + _ig_ = cst_Path, + _ih_ = cst_Id, + _ii_ = cst_SortName, + _ij_ = cst_Name, + _h8_ = "type_", + _h9_ = "image_blur_hashes", + _h__ = "server_id", + _h$_ = cst_id, + _ia_ = cst_name, + _h7_ = [0, "lib/data_source/jellyfin_api.ml", 193, 64], + _g__ = [0, 848054398, [0, [0, -976970511, cst_AirTime], 0]], + _g$_ = [0, 848054398, [0, [0, -976970511, cst_BasicSyncInfo], 0]], + _ha_ = [0, 848054398, [0, [0, -976970511, cst_CanDelete], 0]], + _hb_ = [0, 848054398, [0, [0, -976970511, cst_CanDownload], 0]], + _hc_ = [0, 848054398, [0, [0, -976970511, cst_ChannelImage], 0]], + _hd_ = [0, 848054398, [0, [0, -976970511, cst_ChannelInfo], 0]], + _he_ = [0, 848054398, [0, [0, -976970511, cst_Chapters], 0]], + _hf_ = [0, 848054398, [0, [0, -976970511, cst_ChildCount], 0]], + _hg_ = [0, 848054398, [0, [0, -976970511, cst_CumulativeRunTimeTicks], 0]], + _hh_ = [0, 848054398, [0, [0, -976970511, cst_CustomRating], 0]], + _hi_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], + _hj_ = [0, 848054398, [0, [0, -976970511, cst_DateLastMediaAdded], 0]], + _hk_ = [0, 848054398, [0, [0, -976970511, cst_DateLastRefreshed], 0]], + _hl_ = [0, 848054398, [0, [0, -976970511, cst_DateLastSaved], 0]], + _hm_ = [0, 848054398, [0, [0, -976970511, cst_DisplayPreferencesId], 0]], + _hn_ = [0, 848054398, [0, [0, -976970511, cst_EnableMediaSourceDisplay], 0]], - _hp_ = [0, 848054398, [0, [0, -976970511, cst_Etag], 0]], - _hq_ = [0, 848054398, [0, [0, -976970511, cst_ExternalEtag], 0]], - _hr_ = [0, 848054398, [0, [0, -976970511, cst_ExternalSeriesId], 0]], - _hs_ = [0, 848054398, [0, [0, -976970511, cst_ExternalUrls], 0]], - _ht_ = [0, 848054398, [0, [0, -976970511, cst_ExtraIds], 0]], - _hu_ = [0, 848054398, [0, [0, -976970511, cst_Genres], 0]], - _hv_ = [0, 848054398, [0, [0, -976970511, cst_Height], 0]], - _hw_ = [0, 848054398, [0, [0, -976970511, cst_HomePageUrl], 0]], - _hx_ = + _ho_ = [0, 848054398, [0, [0, -976970511, cst_Etag], 0]], + _hp_ = [0, 848054398, [0, [0, -976970511, cst_ExternalEtag], 0]], + _hq_ = [0, 848054398, [0, [0, -976970511, cst_ExternalSeriesId], 0]], + _hr_ = [0, 848054398, [0, [0, -976970511, cst_ExternalUrls], 0]], + _hs_ = [0, 848054398, [0, [0, -976970511, cst_ExtraIds], 0]], + _ht_ = [0, 848054398, [0, [0, -976970511, cst_Genres], 0]], + _hu_ = [0, 848054398, [0, [0, -976970511, cst_Height], 0]], + _hv_ = [0, 848054398, [0, [0, -976970511, cst_HomePageUrl], 0]], + _hw_ = [0, 848054398, [0, [0, -976970511, cst_InheritedParentalRatingVal], 0]], - _hy_ = [0, 848054398, [0, [0, -976970511, cst_IsHD], 0]], - _hz_ = [0, 848054398, [0, [0, -976970511, cst_ItemCounts], 0]], - _hA_ = [0, 848054398, [0, [0, -976970511, cst_LocalTrailerCount], 0]], - _hB_ = [0, 848054398, [0, [0, -976970511, cst_MediaSourceCount], 0]], - _hC_ = [0, 848054398, [0, [0, -976970511, cst_MediaSources], 0]], - _hD_ = [0, 848054398, [0, [0, -976970511, cst_MediaStreams], 0]], - _hE_ = [0, 848054398, [0, [0, -976970511, cst_OriginalTitle], 0]], - _hF_ = [0, 848054398, [0, [0, -976970511, cst_Overview], 0]], - _hG_ = [0, 848054398, [0, [0, -976970511, cst_ParentId], 0]], - _hH_ = [0, 848054398, [0, [0, -976970511, cst_Path], 0]], - _hI_ = [0, 848054398, [0, [0, -976970511, cst_People], 0]], - _hJ_ = [0, 848054398, [0, [0, -976970511, cst_PlayAccess], 0]], - _hK_ = [0, 848054398, [0, [0, -976970511, cst_PresentationUniqueKey], 0]], - _hL_ = + _hx_ = [0, 848054398, [0, [0, -976970511, cst_IsHD], 0]], + _hy_ = [0, 848054398, [0, [0, -976970511, cst_ItemCounts], 0]], + _hz_ = [0, 848054398, [0, [0, -976970511, cst_LocalTrailerCount], 0]], + _hA_ = [0, 848054398, [0, [0, -976970511, cst_MediaSourceCount], 0]], + _hB_ = [0, 848054398, [0, [0, -976970511, cst_MediaSources], 0]], + _hC_ = [0, 848054398, [0, [0, -976970511, cst_MediaStreams], 0]], + _hD_ = [0, 848054398, [0, [0, -976970511, cst_OriginalTitle], 0]], + _hE_ = [0, 848054398, [0, [0, -976970511, cst_Overview], 0]], + _hF_ = [0, 848054398, [0, [0, -976970511, cst_ParentId], 0]], + _hG_ = [0, 848054398, [0, [0, -976970511, cst_Path], 0]], + _hH_ = [0, 848054398, [0, [0, -976970511, cst_People], 0]], + _hI_ = [0, 848054398, [0, [0, -976970511, cst_PlayAccess], 0]], + _hJ_ = [0, 848054398, [0, [0, -976970511, cst_PresentationUniqueKey], 0]], + _hK_ = [0, 848054398, [0, [0, -976970511, cst_PrimaryImageAspectRatio], 0]], - _hM_ = [0, 848054398, [0, [0, -976970511, cst_ProductionLocations], 0]], - _hN_ = [0, 848054398, [0, [0, -976970511, cst_ProviderIds], 0]], - _hO_ = [0, 848054398, [0, [0, -976970511, cst_RecursiveItemCount], 0]], - _hP_ = [0, 848054398, [0, [0, -976970511, cst_RefreshState], 0]], - _hQ_ = [0, 848054398, [0, [0, -976970511, cst_RemoteTrailers], 0]], - _hR_ = [0, 848054398, [0, [0, -976970511, cst_ScreenshotImageTags], 0]], - _hS_ = [0, 848054398, [0, [0, -976970511, cst_SeasonUserData], 0]], - _hT_ = + _hL_ = [0, 848054398, [0, [0, -976970511, cst_ProductionLocations], 0]], + _hM_ = [0, 848054398, [0, [0, -976970511, cst_ProviderIds], 0]], + _hN_ = [0, 848054398, [0, [0, -976970511, cst_RecursiveItemCount], 0]], + _hO_ = [0, 848054398, [0, [0, -976970511, cst_RefreshState], 0]], + _hP_ = [0, 848054398, [0, [0, -976970511, cst_RemoteTrailers], 0]], + _hQ_ = [0, 848054398, [0, [0, -976970511, cst_ScreenshotImageTags], 0]], + _hR_ = [0, 848054398, [0, [0, -976970511, cst_SeasonUserData], 0]], + _hS_ = [0, 848054398, [0, [0, -976970511, cst_SeriesPresentationUniqueKe], 0]], - _hU_ = [0, 848054398, [0, [0, -976970511, cst_SeriesPrimaryImage], 0]], - _hV_ = [0, 848054398, [0, [0, -976970511, cst_SeriesStudio], 0]], - _hW_ = [0, 848054398, [0, [0, -976970511, cst_ServiceName], 0]], - _hX_ = [0, 848054398, [0, [0, -976970511, cst_Settings], 0]], - _hY_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], - _hZ_ = [0, 848054398, [0, [0, -976970511, cst_SpecialEpisodeNumbers], 0]], - _h0_ = [0, 848054398, [0, [0, -976970511, cst_SpecialFeatureCount], 0]], - _h1_ = [0, 848054398, [0, [0, -976970511, cst_Studios], 0]], - _h2_ = [0, 848054398, [0, [0, -976970511, cst_SyncInfo], 0]], - _h3_ = [0, 848054398, [0, [0, -976970511, cst_Taglines], 0]], - _h4_ = [0, 848054398, [0, [0, -976970511, cst_Tags], 0]], - _h5_ = [0, 848054398, [0, [0, -976970511, cst_ThemeSongIds], 0]], - _h6_ = [0, 848054398, [0, [0, -976970511, cst_ThemeVideoIds], 0]], - _h7_ = [0, 848054398, [0, [0, -976970511, cst_Width], 0]], - _gA_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], - _gB_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], - _gC_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], - _gD_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], - _gE_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], - _gF_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], - _gG_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], - _gH_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], - _gI_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], - _gJ_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], - _gK_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], - _gL_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], - _gM_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], - _gN_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], - _gO_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], - _gP_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], - _gQ_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], - _gR_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], - _gS_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], - _gT_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], - _gU_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], - _gV_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], - _gW_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], - _gX_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], - _gY_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], - _gZ_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], - _g0_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], - _g1_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], - _g2_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], - _g3_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], - _g4_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], - _g5_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], - _g6_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], - _g7_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], - _g8_ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], - _g9_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], - _g__ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], - _gz_ = cst_Primary, - _gk_ = [0, 848054398, [0, [0, -976970511, cst_Album], 0]], - _gl_ = [0, 848054398, [0, [0, -976970511, cst_AlbumArtist], 0]], - _gm_ = [0, 848054398, [0, [0, -976970511, cst_Artist], 0]], - _gn_ = [0, 848054398, [0, [0, -976970511, cst_Budget], 0]], - _go_ = [0, 848054398, [0, [0, -976970511, cst_CommunityRating], 0]], - _gp_ = [0, 848054398, [0, [0, -976970511, cst_CriticRating], 0]], - _gq_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], - _gr_ = [0, 848054398, [0, [0, -976970511, cst_DatePlayed], 0]], - _gs_ = [0, 848054398, [0, [0, -976970511, cst_PlayCount], 0]], - _gt_ = [0, 848054398, [0, [0, -976970511, cst_PremiereDate], 0]], - _gu_ = [0, 848054398, [0, [0, -976970511, cst_ProductionYear], 0]], - _gv_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], - _gw_ = [0, 848054398, [0, [0, -976970511, cst_Random], 0]], - _gx_ = [0, 848054398, [0, [0, -976970511, cst_Revenue], 0]], - _gy_ = [0, 848054398, [0, [0, -976970511, cst_Runtime], 0]], - _gi_ = [0, 848054398, [0, [0, -976970511, cst_Descending], 0]], - _gj_ = [0, 848054398, [0, [0, -976970511, cst_Ascending], 0]], - _js_ = [0, cst_lib_db_stores_ml, 116, 13], - _jr_ = [0, cst_lib_db_stores_ml, 107, 19], - _jo_ = [0, cst_lib_db_stores_ml, 99, 13], - _jn_ = [0, cst_lib_db_stores_ml, 93, 19], - _jj_ = [0, cst_lib_db_stores_ml, 66, 13], - _jh_ = cst_item, - _ji_ = cst_sorts, - _jf_ = cst_item, - _jg_ = cst_sorts, - _jc_ = cst_sort_name, - _jd_ = cst_views, - _je_ = cst_date_added, - _i$_ = cst_sort_name, - _ja_ = cst_views, - _jb_ = cst_date_added, - _i9_ = cst_item, - _i__ = cst_id, - _i7_ = cst_item, - _i8_ = cst_id, - _jk_ = [0, cst_sorts_views], - _jl_ = [0, "item.Name"], - _jm_ = [0, cst_item_Id], - _jp_ = [0, cst_sorts_views], - _jq_ = [0, "item.Type"], - _jt_ = [0, "sorts.sort_name"], - _ju_ = [0, "item.CollectionType"], - _j0_ = [0, 1, 0], - _jU_ = [0, 6, 0], - _jV_ = [0, 0], - _jW_ = [0, 33, [0, 34, 0]], - _jY_ = cst$1, - _jX_ = [0, 1], - _jZ_ = [0, "lib/db/sync.ml", 313, 6], - _jR_ = [0, cst$10, 0], - _jS_ = cst_to, - _jT_ = "Fetching items", - _jQ_ = [0, 1], - _jP_ = [0, 34, 0], - _jO_ = [0, 33, 0], - _jM_ = [0, 1], - _jN_ = [0, 0], - _jK_ = [0, 0], - _jL_ = [0, 2], - _jH_ = [0, 6, 0], - _jI_ = [0, 0], + _hT_ = [0, 848054398, [0, [0, -976970511, cst_SeriesPrimaryImage], 0]], + _hU_ = [0, 848054398, [0, [0, -976970511, cst_SeriesStudio], 0]], + _hV_ = [0, 848054398, [0, [0, -976970511, cst_ServiceName], 0]], + _hW_ = [0, 848054398, [0, [0, -976970511, cst_Settings], 0]], + _hX_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], + _hY_ = [0, 848054398, [0, [0, -976970511, cst_SpecialEpisodeNumbers], 0]], + _hZ_ = [0, 848054398, [0, [0, -976970511, cst_SpecialFeatureCount], 0]], + _h0_ = [0, 848054398, [0, [0, -976970511, cst_Studios], 0]], + _h1_ = [0, 848054398, [0, [0, -976970511, cst_SyncInfo], 0]], + _h2_ = [0, 848054398, [0, [0, -976970511, cst_Taglines], 0]], + _h3_ = [0, 848054398, [0, [0, -976970511, cst_Tags], 0]], + _h4_ = [0, 848054398, [0, [0, -976970511, cst_ThemeSongIds], 0]], + _h5_ = [0, 848054398, [0, [0, -976970511, cst_ThemeVideoIds], 0]], + _h6_ = [0, 848054398, [0, [0, -976970511, cst_Width], 0]], + _gz_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], + _gA_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], + _gB_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], + _gC_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], + _gD_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], + _gE_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], + _gF_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], + _gG_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], + _gH_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], + _gI_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], + _gJ_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], + _gK_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], + _gL_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], + _gM_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], + _gN_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], + _gO_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], + _gP_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], + _gQ_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], + _gR_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], + _gS_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], + _gT_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], + _gU_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], + _gV_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], + _gW_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], + _gX_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], + _gY_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], + _gZ_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], + _g0_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], + _g1_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], + _g2_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], + _g3_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], + _g4_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], + _g5_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], + _g6_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], + _g7_ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], + _g8_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], + _g9_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], + _gy_ = cst_Primary, + _gj_ = [0, 848054398, [0, [0, -976970511, cst_Album], 0]], + _gk_ = [0, 848054398, [0, [0, -976970511, cst_AlbumArtist], 0]], + _gl_ = [0, 848054398, [0, [0, -976970511, cst_Artist], 0]], + _gm_ = [0, 848054398, [0, [0, -976970511, cst_Budget], 0]], + _gn_ = [0, 848054398, [0, [0, -976970511, cst_CommunityRating], 0]], + _go_ = [0, 848054398, [0, [0, -976970511, cst_CriticRating], 0]], + _gp_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], + _gq_ = [0, 848054398, [0, [0, -976970511, cst_DatePlayed], 0]], + _gr_ = [0, 848054398, [0, [0, -976970511, cst_PlayCount], 0]], + _gs_ = [0, 848054398, [0, [0, -976970511, cst_PremiereDate], 0]], + _gt_ = [0, 848054398, [0, [0, -976970511, cst_ProductionYear], 0]], + _gu_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], + _gv_ = [0, 848054398, [0, [0, -976970511, cst_Random], 0]], + _gw_ = [0, 848054398, [0, [0, -976970511, cst_Revenue], 0]], + _gx_ = [0, 848054398, [0, [0, -976970511, cst_Runtime], 0]], + _gh_ = [0, 848054398, [0, [0, -976970511, cst_Descending], 0]], + _gi_ = [0, 848054398, [0, [0, -976970511, cst_Ascending], 0]], + _jr_ = [0, cst_lib_db_stores_ml, 116, 13], + _jq_ = [0, cst_lib_db_stores_ml, 107, 19], + _jn_ = [0, cst_lib_db_stores_ml, 99, 13], + _jm_ = [0, cst_lib_db_stores_ml, 93, 19], + _ji_ = [0, cst_lib_db_stores_ml, 66, 13], + _jg_ = cst_item, + _jh_ = cst_sorts, + _je_ = cst_item, + _jf_ = cst_sorts, + _jb_ = cst_sort_name, + _jc_ = cst_views, + _jd_ = cst_date_added, + _i__ = cst_sort_name, + _i$_ = cst_views, + _ja_ = cst_date_added, + _i8_ = cst_item, + _i9_ = cst_id, + _i6_ = cst_item, + _i7_ = cst_id, + _jj_ = [0, cst_sorts_views], + _jk_ = [0, "item.Name"], + _jl_ = [0, cst_item_Id], + _jo_ = [0, cst_sorts_views], + _jp_ = [0, "item.Type"], + _js_ = [0, "sorts.sort_name"], + _jt_ = [0, "item.CollectionType"], + _jZ_ = [0, 1, 0], + _jT_ = [0, 6, 0], + _jU_ = [0, 0], + _jV_ = [0, 33, [0, 34, 0]], + _jX_ = cst$1, + _jW_ = [0, 1], + _jY_ = [0, "lib/db/sync.ml", 313, 6], + _jQ_ = [0, cst$10, 0], + _jR_ = cst_to, + _jS_ = "Fetching items", + _jP_ = [0, 1], + _jO_ = [0, 34, 0], + _jN_ = [0, 33, 0], + _jL_ = [0, 1], + _jM_ = [0, 0], _jJ_ = [0, 0], - _j1_ = cst_to, - _j2_ = "Upgrading indexed_db schema from version", - _j3_ = [0, "Erasing existing stores", 0], + _jK_ = [0, 2], + _jG_ = [0, 6, 0], + _jH_ = [0, 0], + _jI_ = [0, 0], + _j0_ = cst_to, + _j1_ = "Upgrading indexed_db schema from version", + _j2_ = [0, "Erasing existing stores", 0], + _j3_ = [0, 0], _j4_ = [0, 0], _j5_ = [0, 0], - _j6_ = [0, 0], - _j7_ = "Stores created:", - _kn_ = "An error occured while loading item", - _kj_ = cst_music, - _kk_ = cst_music$0, - _kl_ = [0, 0], - _km_ = [0, 1], - _ki_ = "Item should exists.", - _ke_ = cst_music, - _kf_ = cst_music$0, - _kg_ = [0, 0], - _kh_ = [0, 1], - _j$_ = [0, [2, 0, 0], cst_s], - _ka_ = cst_Audio, - _kb_ = "Audio\0", - _kc_ = [0, 0], - _kd_ = [0, 1], - _j__ = [0, 0], - _j8_ = "tracks", - _j9_ = [0, 1]; + _j6_ = "Stores created:", + _km_ = "An error occured while loading item", + _ki_ = cst_music, + _kj_ = cst_music$0, + _kk_ = [0, 0], + _kl_ = [0, 1], + _kh_ = "Item should exists.", + _kd_ = cst_music, + _ke_ = cst_music$0, + _kf_ = [0, 0], + _kg_ = [0, 1], + _j__ = [0, [2, 0, 0], cst_s], + _j$_ = cst_Audio, + _ka_ = "Audio\0", + _kb_ = [0, 0], + _kc_ = [0, 1], + _j9_ = [0, 0], + _j7_ = "tracks", + _j8_ = [0, 1]; function erase_rel(param){ if(typeof param === "number") return 0; switch(param[0]){ @@ -4667,15 +4663,7 @@ function min(x, y){return caml_lessequal(x, y) ? x : y;} function abs(x){return 0 <= x ? x : - x | 0;} var max_int = 2147483647; - function symbol(s1, s2){ - var - l1 = caml_ml_string_length(s1), - l2 = caml_ml_string_length(s2), - s = caml_create_bytes(l1 + l2 | 0); - caml_blit_string(s1, 0, s, 0, l1); - caml_blit_string(s2, 0, s, l1, l2); - return caml_string_of_bytes(s); - } + function symbol_concat(s1, s2){return s1 + s2;} function char_of_int(n){ if(0 <= n && 255 >= n) return n; return invalid_arg(_a_); @@ -4687,14 +4675,15 @@ function loop(i){ var i$0 = i; for(;;){ - if(l <= i$0) return symbol(s, _d_); + if(l <= i$0) return symbol_concat(s, _d_); var match = caml_string_get(s, i$0); a: { if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; return s; } - var i$1 = i$0 + 1 | 0, i$0 = i$1; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; } } return loop(0); @@ -4719,11 +4708,11 @@ if(! param$0) return 0; var l = param$0[2], a = param$0[1]; try{caml_ml_flush(a);} - catch(_tS_){ - var _tR_ = caml_wrap_exception(_tS_); - if(_tR_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_tR_, 0); + catch(_tN_){ + var _tM_ = caml_wrap_exception(_tN_); + if(_tM_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_tM_, 0); } - var param$0 = l; + param$0 = l; } } return iter(caml_ml_out_channels_list(0)); @@ -4769,15 +4758,15 @@ return caml_call1(old_exit$0, 0); }, success = compare_and_set(exit_function, old_exit, new_exit), - _tQ_ = 1 - success; - if(! _tQ_) return _tQ_; + _tL_ = 1 - success; + if(! _tL_) return _tL_; } } function do_at_exit(param){return caml_call1(get(exit_function), 0);} caml_register_named_value("Pervasives.do_at_exit", do_at_exit); - function _i_(_tP_){return caml_ml_close_channel(_tP_);} - function _j_(_tO_, _tN_){return caml_ml_output_char(_tO_, _tN_);} - function _k_(_tM_){return caml_ml_flush(_tM_);} + function _i_(_tK_){return caml_ml_close_channel(_tK_);} + function _j_(_tJ_, _tI_){return caml_ml_output_char(_tJ_, _tI_);} + function _k_(_tH_){return caml_ml_flush(_tH_);} var max_array_length = caml_sys_const_max_wosize(0), max_string_length = (4 * max_array_length | 0) - 1 | 0; @@ -4869,12 +4858,9 @@ var l1$0 = l1, l2$0 = l2; for(;;){ if(! l1$0) return l2$0; - var - l1$1 = l1$0[2], - a = l1$0[1], - l2$1 = [0, a, l2$0], - l1$0 = l1$1, - l2$0 = l2$1; + var l1$1 = l1$0[2], a = l1$0[1], l2$1 = [0, a, l2$0]; + l1$0 = l1$1; + l2$0 = l2$1; } } function rev(l){return rev_append(l, 0);} @@ -4882,11 +4868,9 @@ var acc$0 = acc, i$0 = i; for(;;){ if(n <= i$0) return acc$0; - var - i$1 = i$0 + 1 | 0, - acc$1 = [0, caml_call1(f, i$0), acc$0], - acc$0 = acc$1, - i$0 = i$1; + var i$1 = i$0 + 1 | 0, acc$1 = [0, caml_call1(f, i$0), acc$0]; + acc$0 = acc$1; + i$0 = i$1; } } function init_aux(i, n, f){ @@ -4915,9 +4899,9 @@ var l = param$0[2], a = param$0[1], - accu$1 = [0, caml_call1(f, a), accu$0], - accu$0 = accu$1, - param$0 = l; + accu$1 = [0, caml_call1(f, a), accu$0]; + accu$0 = accu$1; + param$0 = l; } } return rmap_f(0, l); @@ -4928,37 +4912,34 @@ if(! param$0) return 0; var l = param$0[2], a = param$0[1]; caml_call1(f, a); - var param$0 = l; + param$0 = l; } } function fold_left(f, accu, l){ var accu$0 = accu, l$0 = l; for(;;){ if(! l$0) return accu$0; - var - l$1 = l$0[2], - a = l$0[1], - accu$1 = caml_call2(f, accu$0, a), - accu$0 = accu$1, - l$0 = l$1; + var l$1 = l$0[2], a = l$0[1], accu$1 = caml_call2(f, accu$0, a); + accu$0 = accu$1; + l$0 = l$1; } } function exists(p, param){ var param$0 = param; for(;;){ if(! param$0) return 0; - var l = param$0[2], a = param$0[1], _tL_ = caml_call1(p, a); - if(_tL_) return _tL_; - var param$0 = l; + var l = param$0[2], a = param$0[1], _tG_ = caml_call1(p, a); + if(_tG_) return _tG_; + param$0 = l; } } function memq(x, param){ var param$0 = param; for(;;){ if(! param$0) return 0; - var l = param$0[2], a = param$0[1], _tK_ = a === x ? 1 : 0; - if(_tK_) return _tK_; - var param$0 = l; + var l = param$0[2], a = param$0[1], _tF_ = a === x ? 1 : 0; + if(_tF_) return _tF_; + param$0 = l; } } function min$0(x, y){return x <= y ? x : y;} @@ -5007,9 +4988,9 @@ return invalid_arg(_y_); } function escaped$0(s){ - var n = [0, 0], _tD_ = caml_ml_bytes_length(s) - 1 | 0, _tC_ = 0; - if(_tD_ >= 0){ - var i$0 = _tC_; + var n = [0, 0], _ty_ = caml_ml_bytes_length(s) - 1 | 0, _tx_ = 0; + if(_ty_ >= 0){ + var i$0 = _tx_; for(;;){ var match = caml_bytes_unsafe_get(s, i$0); a: @@ -5019,12 +5000,12 @@ c: { if(32 <= match){ - var _tH_ = match - 34 | 0; - if(58 < _tH_ >>> 0){ - if(93 <= _tH_) break c; + var _tC_ = match - 34 | 0; + if(58 < _tC_ >>> 0){ + if(93 <= _tC_) break c; } - else if(56 < _tH_ - 1 >>> 0) break b; - var _tI_ = 1; + else if(56 < _tC_ - 1 >>> 0) break b; + var _tD_ = 1; break a; } if(11 <= match){ @@ -5032,23 +5013,23 @@ } else if(8 <= match) break b; } - var _tI_ = 4; + var _tD_ = 4; break a; } - var _tI_ = 2; + var _tD_ = 2; } - n[1] = n[1] + _tI_ | 0; - var _tJ_ = i$0 + 1 | 0; - if(_tD_ === i$0) break; - var i$0 = _tJ_; + n[1] = n[1] + _tD_ | 0; + var _tE_ = i$0 + 1 | 0; + if(_ty_ === i$0) break; + i$0 = _tE_; } } if(n[1] === caml_ml_bytes_length(s)) return copy(s); var s$0 = caml_create_bytes(n[1]); n[1] = 0; - var _tF_ = caml_ml_bytes_length(s) - 1 | 0, _tE_ = 0; - if(_tF_ >= 0){ - var i = _tE_; + var _tA_ = caml_ml_bytes_length(s) - 1 | 0, _tz_ = 0; + if(_tA_ >= 0){ + var i = _tz_; for(;;){ var c = caml_bytes_unsafe_get(s, i); a: @@ -5106,9 +5087,9 @@ caml_bytes_unsafe_set(s$0, n[1], c); } n[1]++; - var _tG_ = i + 1 | 0; - if(_tF_ === i) break; - var i = _tG_; + var _tB_ = i + 1 | 0; + if(_tA_ === i) break; + i = _tB_; } } return s$0; @@ -5116,22 +5097,22 @@ function map$2(f, s){ var l = caml_ml_bytes_length(s); if(0 === l) return s; - var r = caml_create_bytes(l), _tA_ = l - 1 | 0, _tz_ = 0; - if(_tA_ >= 0){ - var i = _tz_; + var r = caml_create_bytes(l), _tv_ = l - 1 | 0, _tu_ = 0; + if(_tv_ >= 0){ + var i = _tu_; for(;;){ caml_bytes_unsafe_set(r, i, caml_call1(f, caml_bytes_unsafe_get(s, i))); - var _tB_ = i + 1 | 0; - if(_tA_ === i) break; - var i = _tB_; + var _tw_ = i + 1 | 0; + if(_tv_ === i) break; + i = _tw_; } } return r; } function uppercase_ascii$0(s){return map$2(uppercase_ascii, s);} function lowercase_ascii$0(s){return map$2(lowercase_ascii, s);} - function unsafe_of_string(_ty_){return caml_bytes_of_string(_ty_);} - function unsafe_to_string(_tx_){return caml_string_of_bytes(_tx_);} + function unsafe_of_string(_tt_){return caml_bytes_of_string(_tt_);} + function unsafe_to_string(_ts_){return caml_string_of_bytes(_ts_);} function make$1(n, c){return unsafe_to_string(make$0(n, c));} function sub$0(s, ofs, len){ return unsafe_to_string(sub(unsafe_of_string(s), ofs, len)); @@ -5146,9 +5127,9 @@ var tl = param$0[2], acc$1 = - ensure_ge((caml_ml_string_length(hd) + seplen | 0) + acc$0 | 0, acc$0), - acc$0 = acc$1, - param$0 = tl; + ensure_ge((caml_ml_string_length(hd) + seplen | 0) + acc$0 | 0, acc$0); + acc$0 = acc$1; + param$0 = tl; } } function unsafe_blits(dst, pos, sep, seplen, param){ @@ -5164,10 +5145,9 @@ caml_blit_string(hd, 0, dst, pos$0, caml_ml_string_length(hd)); caml_blit_string (sep, 0, dst, pos$0 + caml_ml_string_length(hd) | 0, seplen); - var - pos$1 = (pos$0 + caml_ml_string_length(hd) | 0) + seplen | 0, - pos$0 = pos$1, - param$0 = tl; + var pos$1 = (pos$0 + caml_ml_string_length(hd) | 0) + seplen | 0; + pos$0 = pos$1; + param$0 = tl; } } function concat(sep, l){ @@ -5186,14 +5166,15 @@ var i$0 = i; for(;;){ if(n <= i$0) return s; - var _tw_ = caml_string_unsafe_get(s, i$0) - 32 | 0; + var _tr_ = caml_string_unsafe_get(s, i$0) - 32 | 0; a: { - if(59 < _tw_ >>> 0){ - if(33 < _tw_ - 61 >>> 0) break a; + if(59 < _tr_ >>> 0){ + if(33 < _tr_ - 61 >>> 0) break a; } - else if(2 === _tw_) break a; - var i$1 = i$0 + 1 | 0, i$0 = i$1; + else if(2 === _tr_) break a; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; continue; } return unsafe_to_string(escaped$0(unsafe_of_string(s))); @@ -5206,7 +5187,8 @@ for(;;){ if(lim <= i$0) throw caml_maybe_attach_backtrace(Not_found, 1); if(caml_string_unsafe_get(s, i$0) === c) return i$0; - var i$1 = i$0 + 1 | 0, i$0 = i$1; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; } } function index_from(s, i, c){ @@ -5217,11 +5199,11 @@ 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); var _tu_ = 1; return _tu_;} - catch(_tv_){ - var _tt_ = caml_wrap_exception(_tv_); - if(_tt_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_tt_, 0); + try{index_rec(s, l, i, c); var _tp_ = 1; return _tp_;} + catch(_tq_){ + var _to_ = caml_wrap_exception(_tq_); + if(_to_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_to_, 0); } return invalid_arg(_C_); } @@ -5233,18 +5215,18 @@ return unsafe_to_string(lowercase_ascii$0(unsafe_of_string(s))); } function compare$0(x, y){return caml_string_compare(x, y);} - function symbol$0(_ts_, _tr_){return caml_string_equal(_ts_, _tr_);} + function symbol(_tn_, _tm_){return _tn_ == _tm_ ? 1 : 0;} function init$0(l, f){ if(0 === l) return [0]; if(0 > l) return invalid_arg(_D_); - var res = caml_make_vect(l, caml_call1(f, 0)), _tp_ = l - 1 | 0, _to_ = 1; - if(_tp_ >= 1){ - var i = _to_; + var res = caml_make_vect(l, caml_call1(f, 0)), _tk_ = l - 1 | 0, _tj_ = 1; + if(_tk_ >= 1){ + var i = _tj_; for(;;){ res[1 + i] = caml_call1(f, i); - var _tq_ = i + 1 | 0; - if(_tp_ === i) break; - var i = _tq_; + var _tl_ = i + 1 | 0; + if(_tk_ === i) break; + i = _tl_; } } return res; @@ -5263,14 +5245,14 @@ return invalid_arg(_E_); } function iter$0(f, a){ - var _tm_ = a.length - 1 - 1 | 0, _tl_ = 0; - if(_tm_ >= 0){ - var i = _tl_; + var _th_ = a.length - 2 | 0, _tg_ = 0; + if(_th_ >= 0){ + var i = _tg_; for(;;){ caml_call1(f, a[1 + i]); - var _tn_ = i + 1 | 0; - if(_tm_ === i) break; - var i = _tn_; + var _ti_ = i + 1 | 0; + if(_th_ === i) break; + i = _ti_; } } return; @@ -5280,15 +5262,15 @@ if(0 === l) return [0]; var r = caml_make_vect(l, caml_call1(f, a[1])), - _tj_ = l - 1 | 0, - _ti_ = 1; - if(_tj_ >= 1){ - var i = _ti_; + _te_ = l - 1 | 0, + _td_ = 1; + if(_te_ >= 1){ + var i = _td_; for(;;){ r[1 + i] = caml_call1(f, a[1 + i]); - var _tk_ = i + 1 | 0; - if(_tj_ === i) break; - var i = _tk_; + var _tf_ = i + 1 | 0; + if(_te_ === i) break; + i = _tf_; } } return r; @@ -5298,24 +5280,20 @@ var i$0 = i, res$0 = res; for(;;){ if(0 > i$0) return res$0; - var - res$1 = [0, a[1 + i$0], res$0], - i$1 = i$0 - 1 | 0, - i$0 = i$1, - res$0 = res$1; + var res$1 = [0, a[1 + i$0], res$0], i$1 = i$0 - 1 | 0; + i$0 = i$1; + res$0 = res$1; } } - return tolist(a.length - 1 - 1 | 0, 0); + return tolist(a.length - 2 | 0, 0); } function list_length(accu, param){ var accu$0 = accu, param$0 = param; for(;;){ if(! param$0) return accu$0; - var - t = param$0[2], - accu$1 = accu$0 + 1 | 0, - accu$0 = accu$1, - param$0 = t; + var t = param$0[2], accu$1 = accu$0 + 1 | 0; + accu$0 = accu$1; + param$0 = t; } } function of_list(l){ @@ -5327,7 +5305,9 @@ if(! param$0) return a; var tl = param$0[2], hd = param$0[1]; a[1 + i$0] = hd; - var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = tl; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; + param$0 = tl; } } return fill(1, tl); @@ -5337,20 +5317,20 @@ function maxson(l, i){ var i31 = ((i + i | 0) + i | 0) + 1 | 0, x = [0, i31]; if((i31 + 2 | 0) < l){ - var _tb_ = i31 + 1 | 0, _tc_ = caml_check_bound(a, _tb_)[1 + _tb_]; - if(caml_call2(cmp, caml_check_bound(a, i31)[1 + i31], _tc_) < 0) + var _s8_ = i31 + 1 | 0, _s9_ = caml_check_bound(a, _s8_)[1 + _s8_]; + if(caml_call2(cmp, caml_check_bound(a, i31)[1 + i31], _s9_) < 0) x[1] = i31 + 1 | 0; var - _td_ = i31 + 2 | 0, - _te_ = caml_check_bound(a, _td_)[1 + _td_], - _tf_ = x[1]; - if(caml_call2(cmp, caml_check_bound(a, _tf_)[1 + _tf_], _te_) < 0) + _s__ = i31 + 2 | 0, + _s$_ = caml_check_bound(a, _s__)[1 + _s__], + _ta_ = x[1]; + if(caml_call2(cmp, caml_check_bound(a, _ta_)[1 + _ta_], _s$_) < 0) x[1] = i31 + 2 | 0; return x[1]; } if((i31 + 1 | 0) < l){ - var _tg_ = i31 + 1 | 0, _th_ = caml_check_bound(a, _tg_)[1 + _tg_]; - if(0 > caml_call2(cmp, caml_check_bound(a, i31)[1 + i31], _th_)) + var _tb_ = i31 + 1 | 0, _tc_ = caml_check_bound(a, _tb_)[1 + _tb_]; + if(0 > caml_call2(cmp, caml_check_bound(a, i31)[1 + i31], _tc_)) return i31 + 1 | 0; } if(i31 < l) return i31; @@ -5361,9 +5341,9 @@ for(;;){ var j = maxson(l, i$0); if(0 >= caml_call2(cmp, caml_check_bound(a, j)[1 + j], e)){caml_check_bound(a, i$0)[1 + i$0] = e; return;} - var _ta_ = caml_check_bound(a, j)[1 + j]; - caml_check_bound(a, i$0)[1 + i$0] = _ta_; - var i$0 = j; + var _s7_ = caml_check_bound(a, j)[1 + j]; + caml_check_bound(a, i$0)[1 + i$0] = _s7_; + i$0 = j; } } function trickle(l, i, e){ @@ -5379,13 +5359,13 @@ function bubbledown(l, i){ var i$0 = i; for(;;){ - var j = maxson(l, i$0), _s$_ = caml_check_bound(a, j)[1 + j]; - caml_check_bound(a, i$0)[1 + i$0] = _s$_; - var i$0 = j; + var j = maxson(l, i$0), _s6_ = caml_check_bound(a, j)[1 + j]; + caml_check_bound(a, i$0)[1 + i$0] = _s6_; + i$0 = j; } } function bubble(l, i){ - try{var _s__ = bubbledown(l, i); return _s__;} + try{var _s5_ = bubbledown(l, i); return _s5_;} catch(exn$0){ var exn = caml_wrap_exception(exn$0); if(exn[1] !== Bottom) throw caml_maybe_attach_backtrace(exn, 0); @@ -5400,32 +5380,32 @@ if(i$0 === father) throw caml_maybe_attach_backtrace([0, Assert_failure, _G_], 1); if(0 <= caml_call2(cmp, caml_check_bound(a, father)[1 + father], e)){caml_check_bound(a, i$0)[1 + i$0] = e; return;} - var _s9_ = caml_check_bound(a, father)[1 + father]; - caml_check_bound(a, i$0)[1 + i$0] = _s9_; + var _s4_ = caml_check_bound(a, father)[1 + father]; + caml_check_bound(a, i$0)[1 + i$0] = _s4_; if(0 >= father){caml_check_bound(a, 0)[1] = e; return;} - var i$0 = father; + i$0 = father; } } - var l = a.length - 1, _s5_ = ((l + 1 | 0) / 3 | 0) - 1 | 0; - if(_s5_ >= 0){ - var i$0 = _s5_; + var l = a.length - 1, _s0_ = ((l + 1 | 0) / 3 | 0) - 1 | 0; + if(_s0_ >= 0){ + var i$0 = _s0_; for(;;){ trickle(l, i$0, caml_check_bound(a, i$0)[1 + i$0]); - var _s8_ = i$0 - 1 | 0; + var _s3_ = i$0 - 1 | 0; if(0 === i$0) break; - var i$0 = _s8_; + i$0 = _s3_; } } - var _s6_ = l - 1 | 0; - if(_s6_ >= 2){ - var i = _s6_; + var _s1_ = l - 1 | 0; + if(_s1_ >= 2){ + var i = _s1_; for(;;){ var e$0 = caml_check_bound(a, i)[1 + i]; a[1 + i] = caml_check_bound(a, 0)[1]; trickleup(bubble(i, 0), e$0); - var _s7_ = i - 1 | 0; + var _s2_ = i - 1 | 0; if(2 === i) break; - var i = _s7_; + i = _s2_; } } if(1 < l){ @@ -5459,15 +5439,15 @@ lexbuf[5] = 0; lexbuf[7] = lexbuf[7] - s | 0; lexbuf[3] = lexbuf[3] - s | 0; - var t = lexbuf[10], _s3_ = t.length - 1 - 1 | 0, _s2_ = 0; - if(_s3_ >= 0){ - var i = _s2_; + var t = lexbuf[10], _sY_ = t.length - 2 | 0, _sX_ = 0; + if(_sY_ >= 0){ + var i = _sX_; for(;;){ var v = caml_check_bound(t, i)[1 + i]; if(0 <= v) caml_check_bound(t, i)[1 + i] = v - s | 0; - var _s4_ = i + 1 | 0; - if(_s3_ === i) break; - var i = _s4_; + var _sZ_ = i + 1 | 0; + if(_sY_ === i) break; + i = _sZ_; } } } @@ -5481,11 +5461,11 @@ else var with_positions = 1; var - _sY_ = with_positions ? zero_pos : dummy_pos, - _sZ_ = with_positions ? zero_pos : dummy_pos, - _s0_ = caml_create_bytes(512); + _sT_ = with_positions ? zero_pos : dummy_pos, + _sU_ = with_positions ? zero_pos : dummy_pos, + _sV_ = caml_create_bytes(512); return [0, - function(_s1_){return lex_refill(f, _s0_, _s1_);}, + function(_sW_){return lex_refill(f, _sV_, _sW_);}, caml_create_bytes(1024), 0, 0, @@ -5495,8 +5475,8 @@ 0, 0, [0], - _sZ_, - _sY_]; + _sU_, + _sT_]; } function from_channel(with_positions, ic){ return from_function @@ -5508,8 +5488,8 @@ else var with_positions = 1; var - _sW_ = with_positions ? zero_pos : dummy_pos, - _sX_ = with_positions ? zero_pos : dummy_pos; + _sR_ = with_positions ? zero_pos : dummy_pos, + _sS_ = with_positions ? zero_pos : dummy_pos; return [0, function(lexbuf){lexbuf[9] = 1; return 0;}, of_string(s), @@ -5521,8 +5501,8 @@ 0, 1, [0], - _sX_, - _sW_]; + _sS_, + _sR_]; } function lexeme(lexbuf){ var len = lexbuf[6] - lexbuf[5] | 0; @@ -5537,30 +5517,30 @@ 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 _sV_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _sV_]; + var _sQ_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _sQ_]; } 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; if((hr + 2 | 0) < hl){ if(! l) return invalid_arg(_J_); - var lr = l[3], lv = l[2], ll = l[1], _sQ_ = height(lr); - if(_sQ_ <= height(ll)) return create(ll, lv, create(lr, v, r)); + var lr = l[3], lv = l[2], ll = l[1], _sL_ = height(lr); + if(_sL_ <= height(ll)) return create(ll, lv, create(lr, v, r)); if(! lr) return invalid_arg(_I_); - var lrr = lr[3], lrv = lr[2], lrl = lr[1], _sR_ = create(lrr, v, r); - return create(create(ll, lv, lrl), lrv, _sR_); + var lrr = lr[3], lrv = lr[2], lrl = lr[1], _sM_ = create(lrr, v, r); + return create(create(ll, lv, lrl), lrv, _sM_); } if((hl + 2 | 0) >= hr){ - var _sU_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _sU_]; + var _sP_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _sP_]; } if(! r) return invalid_arg(_L_); - var rr = r[3], rv = r[2], rl = r[1], _sS_ = height(rl); - if(_sS_ <= height(rr)) return create(create(l, v, rl), rv, rr); + var rr = r[3], rv = r[2], rl = r[1], _sN_ = height(rl); + if(_sN_ <= height(rr)) return create(create(l, v, rl), rv, rr); if(! rl) return invalid_arg(_K_); - var rlr = rl[3], rlv = rl[2], rll = rl[1], _sT_ = create(rlr, rv, rr); - return create(create(l, v, rll), rlv, _sT_); + var rlr = rl[3], rlv = rl[2], rll = rl[1], _sO_ = create(rlr, rv, rr); + return create(create(l, v, rll), rlv, _sO_); } function add(x, t){ if(! t) return [0, 0, x, 0, 1]; @@ -5577,7 +5557,7 @@ var r = param$0[3], v = param$0[2], l = param$0[1]; iter(f, l); caml_call1(f, v); - var param$0 = r; + param$0 = r; } } function elements_aux(accu, param){ @@ -5588,9 +5568,9 @@ r = param$0[3], v = param$0[2], l = param$0[1], - accu$1 = [0, v, elements_aux(accu$0, r)], - accu$0 = accu$1, - param$0 = l; + accu$1 = [0, v, elements_aux(accu$0, r)]; + accu$0 = accu$1; + param$0 = l; } } function elements(s){return elements_aux(0, s);} @@ -5598,11 +5578,8 @@ var param$0 = param; for(;;){ if(! param$0) return; - var - r = param$0[3], - v0$0 = param$0[2], - l = param$0[1], - param$0 = caml_call1(f, v0$0) ? r : l; + var r = param$0[3], v0$0 = param$0[2], l = param$0[1]; + param$0 = caml_call1(f, v0$0) ? r : l; } } function find_last_opt(f, param){ @@ -5611,7 +5588,7 @@ if(! param$0) return; var r = param$0[3], v = param$0[2], l = param$0[1]; if(caml_call1(f, v)) return find_last_opt_aux(v, f, r); - var param$0 = l; + param$0 = l; } } return [0, @@ -5666,13 +5643,13 @@ , find_last_opt]; } - function _M_(_sO_){ - var _sP_ = Make(_sO_); + function _M_(_sJ_){ + var _sK_ = Make(_sJ_); return [0, - _sP_[17], + _sK_[17], , , - _sP_[4], + _sK_[4], , , , @@ -5682,7 +5659,7 @@ , , , - _sP_[31], + _sK_[31], , , , @@ -5691,7 +5668,7 @@ , , , - _sP_[39], + _sK_[39], , , , @@ -5704,7 +5681,7 @@ , , , - _sP_[50]]; + _sK_[50]]; } function create(param){return [0, 0, 0];} function clear(s){s[1] = 0; s[2] = 0; return;} @@ -5740,18 +5717,18 @@ return [0, content]; } function take(q){ - var _sN_ = q[2]; - if(! _sN_) throw caml_maybe_attach_backtrace(Empty, 1); - if(_sN_[2]){var next = _sN_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return;} + var _sI_ = q[2]; + if(! _sI_) throw caml_maybe_attach_backtrace(Empty, 1); + if(_sI_[2]){var next = _sI_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return;} clear$0(q); return; } function take_opt(q){ - var _sM_ = q[2]; - if(! _sM_) return 0; - var content = _sM_[1]; - if(_sM_[2]){ - var next = _sM_[2]; + var _sH_ = q[2]; + if(! _sH_) return 0; + var content = _sH_[1]; + if(_sH_[2]){ + var next = _sH_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return [0, content]; @@ -5809,14 +5786,14 @@ return 0; } function add_substring(b, s, offset, len){ - var _sJ_ = offset < 0 ? 1 : 0; - if(_sJ_) - var _sK_ = _sJ_; + var _sE_ = offset < 0 ? 1 : 0; + if(_sE_) + var _sF_ = _sE_; else var - _sL_ = len < 0 ? 1 : 0, - _sK_ = _sL_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); - if(_sK_) invalid_arg(_S_); + _sG_ = len < 0 ? 1 : 0, + _sF_ = _sG_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); + if(_sF_) invalid_arg(_S_); var new_position = b[2] + len | 0; if(b[3] < new_position) resize(b, len); caml_blit_string(s, offset, b[1], b[2], len); @@ -5913,7 +5890,8 @@ var str = formatting_lit[1]; return str; case 1: var str$0 = formatting_lit[1]; return str$0; - default: var c = formatting_lit[1]; return symbol(_$_, make$1(1, c)); + default: + var c = formatting_lit[1]; return symbol_concat(_$_, make$1(1, c)); } } function bprint_fmtty(buf, fmtty){ @@ -5924,81 +5902,81 @@ case 0: var fmtty$1 = fmtty$0[1]; buffer_add_string(buf, _aa_); - var fmtty$0 = fmtty$1; + fmtty$0 = fmtty$1; break; case 1: var fmtty$2 = fmtty$0[1]; buffer_add_string(buf, _ab_); - var fmtty$0 = fmtty$2; + fmtty$0 = fmtty$2; break; case 2: var fmtty$3 = fmtty$0[1]; buffer_add_string(buf, _ac_); - var fmtty$0 = fmtty$3; + fmtty$0 = fmtty$3; break; case 3: var fmtty$4 = fmtty$0[1]; buffer_add_string(buf, _ad_); - var fmtty$0 = fmtty$4; + fmtty$0 = fmtty$4; break; case 4: var fmtty$5 = fmtty$0[1]; buffer_add_string(buf, _ae_); - var fmtty$0 = fmtty$5; + fmtty$0 = fmtty$5; break; case 5: var fmtty$6 = fmtty$0[1]; buffer_add_string(buf, _af_); - var fmtty$0 = fmtty$6; + fmtty$0 = fmtty$6; break; case 6: var fmtty$7 = fmtty$0[1]; buffer_add_string(buf, _ag_); - var fmtty$0 = fmtty$7; + fmtty$0 = fmtty$7; break; case 7: var fmtty$8 = fmtty$0[1]; buffer_add_string(buf, _ah_); - var fmtty$0 = fmtty$8; + fmtty$0 = fmtty$8; break; case 8: var fmtty$9 = fmtty$0[2], sub_fmtty = fmtty$0[1]; buffer_add_string(buf, _ai_); bprint_fmtty(buf, sub_fmtty); buffer_add_string(buf, _aj_); - var fmtty$0 = fmtty$9; + fmtty$0 = fmtty$9; break; case 9: var fmtty$10 = fmtty$0[3], sub_fmtty$0 = fmtty$0[1]; buffer_add_string(buf, _ak_); bprint_fmtty(buf, sub_fmtty$0); buffer_add_string(buf, _al_); - var fmtty$0 = fmtty$10; + fmtty$0 = fmtty$10; break; case 10: var fmtty$11 = fmtty$0[1]; buffer_add_string(buf, _am_); - var fmtty$0 = fmtty$11; + fmtty$0 = fmtty$11; break; case 11: var fmtty$12 = fmtty$0[1]; buffer_add_string(buf, _an_); - var fmtty$0 = fmtty$12; + fmtty$0 = fmtty$12; break; case 12: var fmtty$13 = fmtty$0[1]; buffer_add_string(buf, _ao_); - var fmtty$0 = fmtty$13; + fmtty$0 = fmtty$13; break; case 13: var fmtty$14 = fmtty$0[1]; buffer_add_string(buf, _ap_); - var fmtty$0 = fmtty$14; + fmtty$0 = fmtty$14; break; default: var fmtty$15 = fmtty$0[1]; buffer_add_string(buf, _aq_); - var fmtty$0 = fmtty$15; + fmtty$0 = fmtty$15; } } } @@ -6451,8 +6429,8 @@ var rest2$7 = ty2[2], ty2$0 = ty2[1], - _sI_ = trans(rest1$7, rest2$7); - return [8, trans(ty1$0, ty2$0), _sI_]; + _sD_ = trans(rest1$7, rest2$7); + return [8, trans(ty1$0, ty2$0), _sD_]; case 10: break a; case 11: @@ -6625,10 +6603,10 @@ throw caml_maybe_attach_backtrace(Type_mismatch, 1); } function type_format(fmt, fmtty){ - var _sH_ = type_format_gen(fmt, fmtty); - if(typeof _sH_[2] !== "number") + var _sC_ = type_format_gen(fmt, fmtty); + if(typeof _sC_[2] !== "number") throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var fmt$0 = _sH_[1]; + var fmt$0 = _sC_[1]; return fmt$0; } function type_format_gen(fmt, fmtty){ @@ -6847,8 +6825,8 @@ fmt_rest$13 = fmt[3], sub_fmtty$1 = fmt[2], pad_opt$0 = fmt[1], - _sG_ = [0, erase_rel(sub_fmtty1)]; - if(caml_notequal([0, erase_rel(sub_fmtty$1)], _sG_)) + _sB_ = [0, erase_rel(sub_fmtty1)]; + if(caml_notequal([0, erase_rel(sub_fmtty$1)], _sB_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); var match$29 = type_format_gen(fmt_rest$13, erase_rel(fmtty_rest$10)), @@ -6984,11 +6962,11 @@ var sub_fmtty$0 = ign[2], pad_opt$0 = ign[1], - _sF_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), - match$0 = _sF_[2], + _sA_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), + match$0 = _sA_[2], fmtty$1 = match$0[2], fmt$1 = match$0[1], - sub_fmtty$1 = _sF_[1]; + sub_fmtty$1 = _sA_[1]; return [0, [23, [9, pad_opt$0, sub_fmtty$1], fmt$1], fmtty$1]; case 10: return type_ignored_param_one(ign, fmt, fmtty); @@ -7148,11 +7126,11 @@ sub_fmtty_rest$17 = sub_fmtty[3], sub2_fmtty$2 = sub_fmtty[2], sub1_fmtty$0 = sub_fmtty[1], - _sD_ = [0, erase_rel(sub1_fmtty)]; - if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _sD_)) + _sy_ = [0, erase_rel(sub1_fmtty)]; + if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _sy_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var _sE_ = [0, erase_rel(sub2_fmtty$1)]; - if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _sE_)) + var _sz_ = [0, erase_rel(sub2_fmtty$1)]; + if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _sz_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); var sub_fmtty$0 = trans(symm(sub1_fmtty), sub2_fmtty$1), @@ -7236,7 +7214,7 @@ padty$0 = 0 <= width ? padty : 0, width$0 = abs(width); if(width$0 <= len) return str; - var _sC_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _sC_); + var _sx_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _sx_); switch(padty$0){ case 0: blit_string(str, 0, res, 0, len); break; @@ -7463,14 +7441,14 @@ } function transform_int_alt(iconv, s){ if(13 > iconv) return s; - var n = [0, 0], _sx_ = caml_ml_string_length(s) - 1 | 0, _sw_ = 0; - if(_sx_ >= 0){ - var i$0 = _sw_; + var n = [0, 0], _ss_ = caml_ml_string_length(s) - 1 | 0, _sr_ = 0; + if(_ss_ >= 0){ + var i$0 = _sr_; for(;;){ if(9 >= caml_string_unsafe_get(s, i$0) - 48 >>> 0) n[1]++; - var _sB_ = i$0 + 1 | 0; - if(_sx_ === i$0) break; - var i$0 = _sB_; + var _sw_ = i$0 + 1 | 0; + if(_ss_ === i$0) break; + i$0 = _sw_; } } var @@ -7482,18 +7460,18 @@ function put(c){caml_bytes_set(buf, pos[1], c); pos[1]++; return;} var left = [0, ((digits - 1 | 0) % 3 | 0) + 1 | 0], - _sz_ = caml_ml_string_length(s) - 1 | 0, - _sy_ = 0; - if(_sz_ >= 0){ - var i = _sy_; + _su_ = caml_ml_string_length(s) - 1 | 0, + _st_ = 0; + if(_su_ >= 0){ + var i = _st_; for(;;){ var c = caml_string_unsafe_get(s, i); if(9 < c - 48 >>> 0) put(c); - else{if(0 === left[1]){put(95); left[1] = 3;} left[1] += -1; put(c);} - var _sA_ = i + 1 | 0; - if(_sz_ === i) break; - var i = _sA_; + else{if(0 === left[1]){put(95); left[1] = 3;} left[1]--; put(c);} + var _sv_ = i + 1 | 0; + if(_su_ === i) break; + i = _sv_; } } return unsafe_to_string(buf); @@ -7531,20 +7509,21 @@ var i$0 = i; for(;;){ if(i$0 === len) return 0; - var _sv_ = caml_string_get(str, i$0) - 46 | 0; + var _sq_ = caml_string_get(str, i$0) - 46 | 0; a: { - if(23 < _sv_ >>> 0){ - if(55 === _sv_) break a; + if(23 < _sq_ >>> 0){ + if(55 === _sq_) break a; } - else if(21 < _sv_ - 1 >>> 0) break a; - var i$1 = i$0 + 1 | 0, i$0 = i$1; + else if(21 < _sq_ - 1 >>> 0) break a; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; continue; } return 1; } } - return is_valid(0) ? str : symbol(str, _bx_); + return is_valid(0) ? str : symbol_concat(str, _bx_); } function caml_special_val(str){ var match = caml_classify_float(x); @@ -7648,27 +7627,19 @@ var rest$8 = fmt$0[2], pad$6 = fmt$0[1]; return make_padding(k$0, acc$0, rest$8, pad$6, string_of_bool); case 10: - var - rest$9 = fmt$0[1], - acc$1 = [7, acc$0], - acc$0 = acc$1, - fmt$0 = rest$9; + var rest$9 = fmt$0[1], acc$1 = [7, acc$0]; + acc$0 = acc$1; + fmt$0 = rest$9; break; case 11: - var - rest$10 = fmt$0[2], - str = fmt$0[1], - acc$2 = [2, acc$0, str], - acc$0 = acc$2, - fmt$0 = rest$10; + var rest$10 = fmt$0[2], str = fmt$0[1], acc$2 = [2, acc$0, str]; + acc$0 = acc$2; + fmt$0 = rest$10; break; case 12: - var - rest$11 = fmt$0[2], - chr = fmt$0[1], - acc$3 = [3, acc$0, chr], - acc$0 = acc$3, - fmt$0 = rest$11; + var rest$11 = fmt$0[2], chr = fmt$0[1], acc$3 = [3, acc$0, chr]; + acc$0 = acc$3; + fmt$0 = rest$11; break; case 13: var @@ -7697,31 +7668,31 @@ var rest$16 = fmt$0[2], fmting_lit = fmt$0[1], - acc$4 = [0, acc$0, fmting_lit], - acc$0 = acc$4, - fmt$0 = rest$16; + acc$4 = [0, acc$0, fmting_lit]; + acc$0 = acc$4; + fmt$0 = rest$16; break; case 18: - var _st_ = fmt$0[1]; - if(0 === _st_[0]){ - var rest$17 = fmt$0[2], fmt$1 = _st_[1][1]; + var _so_ = fmt$0[1]; + if(0 === _so_[0]){ + var rest$17 = fmt$0[2], fmt$1 = _so_[1][1]; let acc = acc$0, k = k$0, rest = rest$17; var k$1 = - function(kacc){return make_printf(k, [1, acc, [0, kacc]], rest);}, - k$0 = k$1, - acc$0 = 0, - fmt$0 = fmt$1; + function(kacc){return make_printf(k, [1, acc, [0, kacc]], rest);}; + k$0 = k$1; + acc$0 = 0; + fmt$0 = fmt$1; } else{ - var rest$18 = fmt$0[2], fmt$2 = _st_[1][1]; + var rest$18 = fmt$0[2], fmt$2 = _so_[1][1]; let acc = acc$0, k = k$0, rest = rest$18; var k$2 = - function(kacc){return make_printf(k, [1, acc, [1, kacc]], rest);}, - k$0 = k$2, - acc$0 = 0, - fmt$0 = fmt$2; + function(kacc){return make_printf(k, [1, acc, [1, kacc]], rest);}; + k$0 = k$2; + acc$0 = 0; + fmt$0 = fmt$2; } break; case 19: @@ -7751,12 +7722,12 @@ rest$23 = fmt$0[3], f = fmt$0[2], arity = fmt$0[1], - _su_ = caml_call1(f, 0); + _sp_ = caml_call1(f, 0); if(counter >= 50) return caml_trampoline_return - (make_custom$0, [0, k$0, acc$0, rest$23, arity, _su_]); + (make_custom$0, [0, k$0, acc$0, rest$23, arity, _sp_]); var counter$0 = counter + 1 | 0; - return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _su_); + return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _sp_); } } } @@ -7889,7 +7860,7 @@ return make_from_fmtty(k, acc, concat_fmtty(ty, rest$8), fmt);}; case 10: var rest$9 = fmtty[1]; - return function(param, _ss_){ + return function(param, _sn_){ return make_from_fmtty(k, acc, rest$9, fmt);}; case 11: var rest$10 = fmtty[1]; @@ -7911,11 +7882,11 @@ return caml_trampoline(make_from_fmtty$0(0, k, acc, fmtty, fmt)); } function make_invalid_arg(counter, k, acc, fmt){ - var _sr_ = [8, acc, _bG_]; + var _sm_ = [8, acc, _bG_]; if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _sr_, fmt]); + return caml_trampoline_return(make_printf$0, [0, k, _sm_, fmt]); var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _sr_, fmt); + return make_printf$0(counter$0, k, _sm_, fmt); } function make_padding(k, acc, fmt, pad, trans){ if(typeof pad === "number") @@ -8072,11 +8043,11 @@ return function(x){ return make_custom(k, acc, rest, arity$0, caml_call1(f, x));}; } - var _sq_ = [4, acc, f]; + var _sl_ = [4, acc, f]; if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _sq_, rest]); + return caml_trampoline_return(make_printf$0, [0, k, _sl_, rest]); var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _sq_, rest); + return make_printf$0(counter$0, k, _sl_, rest); } function make_custom(k, acc, rest, arity, f){ return caml_trampoline(make_custom$0(0, k, acc, rest, arity, f)); @@ -8099,13 +8070,13 @@ var acc$1 = match[1]; output_acc(o, p$0); output_string(o, _bH_); - var acc$0 = acc$1; + acc$0 = acc$1; } else{ var acc$2 = match[1]; output_acc(o, p$0); output_string(o, _bI_); - var acc$0 = acc$2; + acc$0 = acc$2; } break; case 6: @@ -8148,13 +8119,13 @@ var acc$1 = match[1]; strput_acc(b, p$0); add_string(b, _bJ_); - var acc$0 = acc$1; + acc$0 = acc$1; } else{ var acc$2 = match[1]; strput_acc(b, p$0); add_string(b, _bK_); - var acc$0 = acc$2; + acc$0 = acc$2; } break; case 6: @@ -8162,7 +8133,7 @@ strput_acc(b, p$3); return add_string(b, caml_call1(f, 0)); case 7: - var acc$3 = acc$0[1], acc$0 = acc$3; break; + var acc$3 = acc$0[1]; acc$0 = acc$3; break; case 8: var msg = acc$0[2], p$4 = acc$0[1]; strput_acc(b, p$4); @@ -8185,7 +8156,7 @@ return make_printf(k, 0, fmt); } function open_box_of_string(str){ - if(caml_string_equal(str, cst$1)) return _bL_; + if(str == cst$1) return _bL_; var len = caml_ml_string_length(str); function invalid_box(param){ return caml_call1(failwith_message(_bM_), str); @@ -8196,7 +8167,8 @@ if(i$0 === len) return i$0; var match = caml_string_get(str, i$0); if(9 !== match && 32 !== match) return i$0; - var i$1 = i$0 + 1 | 0, i$0 = i$1; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; } } function parse_lword(i, j){ @@ -8204,7 +8176,8 @@ for(;;){ if(j$0 === len) return j$0; if(25 < caml_string_get(str, j$0) - 97 >>> 0) return j$0; - var j$1 = j$0 + 1 | 0, j$0 = j$1; + var j$1 = j$0 + 1 | 0; + j$0 = j$1; } } function parse_int(i, j){ @@ -8217,7 +8190,8 @@ if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; return j$0; } - var j$1 = j$0 + 1 | 0, j$0 = j$1; + var j$1 = j$0 + 1 | 0; + j$0 = j$1; } } var @@ -8231,28 +8205,23 @@ else try{ var - _so_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), - indent = _so_; + _sj_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), + indent = _sj_; } - catch(_sp_){ - var _sm_ = caml_wrap_exception(_sp_); - if(_sm_[1] !== Failure) throw caml_maybe_attach_backtrace(_sm_, 0); - var _sn_ = invalid_box(0), indent = _sn_; + catch(_sk_){ + var _sh_ = caml_wrap_exception(_sk_); + if(_sh_[1] !== Failure) throw caml_maybe_attach_backtrace(_sh_, 0); + var _si_ = invalid_box(0), indent = _si_; } var exp_end = parse_spaces(nend); if(exp_end !== len) invalid_box(0); a: { - if - (caml_string_notequal(box_name, cst$1) - && caml_string_notequal(box_name, "b")){ - if(! caml_string_notequal(box_name, "h")){var box_type = 0; break a;} - if(! caml_string_notequal(box_name, "hov")){var box_type = 3; break a;} - if(! caml_string_notequal(box_name, "hv")){var box_type = 2; break a;} - if(caml_string_notequal(box_name, "v")){ - var box_type = invalid_box(0); - break 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; } @@ -8268,7 +8237,7 @@ fmt); } function fprintf(oc, fmt){ - return kfprintf(function(_sl_){return 0;}, oc, fmt); + return kfprintf(function(_sg_){return 0;}, oc, fmt); } function eprintf(fmt){return fprintf(stderr, fmt);} function ksprintf(k, param){ @@ -8294,8 +8263,8 @@ } function other_fields(x, i){ if(x.length - 1 <= i) return _bQ_; - var _sj_ = other_fields(x, i + 1 | 0), _sk_ = field(x, i); - return caml_call2(sprintf(_bR_), _sk_, _sj_); + var _se_ = other_fields(x, i + 1 | 0), _sf_ = field(x, i); + return caml_call2(sprintf(_bR_), _sf_, _se_); } function fields(x){ var match = x.length - 1; @@ -8306,10 +8275,10 @@ case 1: return _bU_; default: - var _si_ = field(x, 1); return caml_call1(sprintf(_bV_), _si_); + var _sd_ = field(x, 1); return caml_call1(sprintf(_bV_), _sd_); } - var _sg_ = other_fields(x, 2), _sh_ = field(x, 1); - return caml_call2(sprintf(_bS_), _sh_, _sg_); + var _sb_ = other_fields(x, 2), _sc_ = field(x, 1); + return caml_call2(sprintf(_bS_), _sc_, _sb_); } function use_printers(x){ function conv(param){ @@ -8319,10 +8288,10 @@ var tl = param$0[2], hd = param$0[1]; a: { - try{var val = caml_call1(hd, x);}catch(_sf_){break a;} + try{var val = caml_call1(hd, x);}catch(_sa_){break a;} if(val){var s = val[1]; return [0, s];} } - var param$0 = tl; + param$0 = tl; } } return conv(get(printers)); @@ -8355,7 +8324,7 @@ } if(0 !== caml_obj_tag(x)) return x[1]; var constructor = x[1][1]; - return symbol(constructor, fields(x)); + return symbol_concat(constructor, fields(x)); } function to_string$0(e){ var match = use_printers(e); @@ -8364,8 +8333,8 @@ return s; } function convert_raw_backtrace(bt){ - var _se_ = [0, caml_convert_raw_backtrace(bt)]; - return _se_; + var _r$_ = [0, caml_convert_raw_backtrace(bt)]; + return _r$_; } function format_backtrace_slot(pos, slot){ function info(is_raise){ @@ -8373,32 +8342,32 @@ } if(0 === slot[0]){ var - _r8_ = slot[5], - _r9_ = slot[4], - _r__ = slot[3], - _r$_ = slot[6] ? _b5_ : _b7_, - _sa_ = slot[2], - _sb_ = slot[7], - _sc_ = info(slot[1]); + _r3_ = slot[5], + _r4_ = slot[4], + _r5_ = slot[3], + _r6_ = slot[6] ? _b5_ : _b7_, + _r7_ = slot[2], + _r8_ = slot[7], + _r9_ = info(slot[1]); return [0, caml_call7 - (sprintf(_b6_), _sc_, _sb_, _sa_, _r$_, _r__, _r9_, _r8_)]; + (sprintf(_b6_), _r9_, _r8_, _r7_, _r6_, _r5_, _r4_, _r3_)]; } if(slot[1]) return 0; - var _sd_ = info(0); - return [0, caml_call1(sprintf(_b8_), _sd_)]; + var _r__ = info(0); + return [0, caml_call1(sprintf(_b8_), _r__)]; } function print_exception_backtrace(outchan, backtrace){ if(! backtrace) return fprintf(outchan, _b__); - var a = backtrace[1], _r6_ = a.length - 1 - 1 | 0, _r5_ = 0; - if(_r6_ >= 0){ - var i = _r5_; + var a = backtrace[1], _r1_ = a.length - 2 | 0, _r0_ = 0; + if(_r1_ >= 0){ + var i = _r0_; for(;;){ var match = format_backtrace_slot(i, caml_check_bound(a, i)[1 + i]); if(match){var str = match[1]; caml_call1(fprintf(outchan, _b9_), str);} - var _r7_ = i + 1 | 0; - if(_r6_ === i) break; - var i = _r7_; + var _r2_ = i + 1 | 0; + if(_r1_ === i) break; + i = _r2_; } } return; @@ -8413,64 +8382,64 @@ old_printers = get(printers), new_printers = [0, fn, old_printers], success = compare_and_set(printers, old_printers, new_printers), - _r4_ = 1 - success; - if(! _r4_) return _r4_; + _rZ_ = 1 - success; + if(! _rZ_) return _rZ_; } } var errors = _b$_.slice(); function default_uncaught_exception_han(exn, raw_backtrace){ - var _r2_ = to_string$0(exn); - caml_call1(eprintf(_ca_), _r2_); + var _rX_ = to_string$0(exn); + caml_call1(eprintf(_ca_), _rX_); print_raw_backtrace(stderr, raw_backtrace); var status = caml_ml_debug_info_status(0); if(status < 0){ - var _r3_ = abs(status); - prerr_endline(caml_check_bound(errors, _r3_)[1 + _r3_]); + var _rY_ = abs(status); + prerr_endline(caml_check_bound(errors, _rY_)[1 + _rY_]); } return _k_(stderr); } var empty_backtrace = [0]; function try_get_raw_backtrace(param){ - var _r1_ = caml_get_exception_raw_backtrace(0); - return _r1_; + var _rW_ = caml_get_exception_raw_backtrace(0); + return _rW_; } function handle_uncaught_exception(exn, debugger_in_use){ try{ var raw_backtrace = debugger_in_use ? empty_backtrace : try_get_raw_backtrace(0); - try{do_at_exit(0);}catch(_r0_){} + try{do_at_exit(0);}catch(_rV_){} try{ var - _rY_ = default_uncaught_exception_han(exn, raw_backtrace), - _rX_ = _rY_; + _rT_ = default_uncaught_exception_han(exn, raw_backtrace), + _rS_ = _rT_; } catch(exn$1){ var exn$0 = caml_wrap_exception(exn$1), raw_backtrace$0 = try_get_raw_backtrace(0), - _rV_ = to_string$0(exn); - caml_call1(eprintf(_cc_), _rV_); + _rQ_ = to_string$0(exn); + caml_call1(eprintf(_cc_), _rQ_); print_raw_backtrace(stderr, raw_backtrace); - var _rW_ = to_string$0(exn$0); - caml_call1(eprintf(_cd_), _rW_); + var _rR_ = to_string$0(exn$0); + caml_call1(eprintf(_cd_), _rR_); print_raw_backtrace(stderr, raw_backtrace$0); - var _rX_ = _k_(stderr); + var _rS_ = _k_(stderr); } - return _rX_; + return _rS_; } - catch(_rZ_){ - var _rU_ = caml_wrap_exception(_rZ_); - if(_rU_ === Out_of_memory) return prerr_endline(_cb_); - throw caml_maybe_attach_backtrace(_rU_, 0); + catch(_rU_){ + var _rP_ = caml_wrap_exception(_rU_); + if(_rP_ === Out_of_memory) return prerr_endline(_cb_); + throw caml_maybe_attach_backtrace(_rP_, 0); } } function handle_uncaught_exception$0(exn, debugger_in_use){ try{ - var _rS_ = handle_uncaught_exception(exn, debugger_in_use); - return _rS_; + var _rN_ = handle_uncaught_exception(exn, debugger_in_use); + return _rN_; } - catch(_rT_){return 0;} + catch(_rO_){return 0;} } caml_register_named_value ("Printexc.handle_uncaught_exception", handle_uncaught_exception$0); @@ -8479,7 +8448,7 @@ (function(param){ if(param[1] !== Finally_raised) return 0; var exn = param[2]; - return [0, symbol(_cf_, to_string$0(exn))]; + return [0, symbol_concat(_cf_, to_string$0(exn))]; }); function string(str){ return caml_md5_string(str, 0, caml_ml_string_length(str)); @@ -8491,13 +8460,15 @@ return; } function full_init(s, seed){ - function combine(accu, x){return string(symbol(accu, to_string(x)));} + function combine(accu, x){ + return string(symbol_concat(accu, to_string(x))); + } function extract(d){ var - _rP_ = caml_string_get(d, 3) << 24, - _rQ_ = caml_string_get(d, 2) << 16, - _rR_ = caml_string_get(d, 1) << 8; - return ((caml_string_get(d, 0) + _rR_ | 0) + _rQ_ | 0) + _rP_ | 0; + _rK_ = caml_string_get(d, 3) << 24, + _rL_ = caml_string_get(d, 2) << 16, + _rM_ = caml_string_get(d, 1) << 8; + return ((caml_string_get(d, 0) + _rM_ | 0) + _rL_ | 0) + _rK_ | 0; } var seed$0 = 0 === seed.length - 1 ? [0, 0] : seed, @@ -8505,26 +8476,26 @@ i$0 = 0; for(;;){ caml_check_bound(s[1], i$0)[1 + i$0] = i$0; - var _rO_ = i$0 + 1 | 0; + var _rJ_ = i$0 + 1 | 0; if(54 === i$0) break; - var i$0 = _rO_; + i$0 = _rJ_; } - var accu = [0, _cg_], _rJ_ = 54 + max(55, l) | 0, _rI_ = 0; - if(_rJ_ >= 0){ - var i = _rI_; + var accu = [0, _cg_], _rE_ = 54 + max(55, l) | 0, _rD_ = 0; + if(_rE_ >= 0){ + var i = _rD_; for(;;){ var j = i % 55 | 0, k = caml_mod(i, l), - _rK_ = caml_check_bound(seed$0, k)[1 + k]; - accu[1] = combine(accu[1], _rK_); + _rF_ = caml_check_bound(seed$0, k)[1 + k]; + accu[1] = combine(accu[1], _rF_); var - _rL_ = extract(accu[1]), - _rM_ = (caml_check_bound(s[1], j)[1 + j] ^ _rL_) & 1073741823; - caml_check_bound(s[1], j)[1 + j] = _rM_; - var _rN_ = i + 1 | 0; - if(_rJ_ === i) break; - var i = _rN_; + _rG_ = extract(accu[1]), + _rH_ = (caml_check_bound(s[1], j)[1 + j] ^ _rG_) & 1073741823; + caml_check_bound(s[1], j)[1 + j] = _rH_; + var _rI_ = i + 1 | 0; + if(_rE_ === i) break; + i = _rI_; } } s[2] = 0; @@ -8544,58 +8515,48 @@ function bits(s){ s[2] = (s[2] + 1 | 0) % 55 | 0; var - _rF_ = s[2], - curval = caml_check_bound(s[1], _rF_)[1 + _rF_], - _rG_ = (s[2] + 24 | 0) % 55 | 0, + _rA_ = s[2], + curval = caml_check_bound(s[1], _rA_)[1 + _rA_], + _rB_ = (s[2] + 24 | 0) % 55 | 0, newval = - caml_check_bound(s[1], _rG_)[1 + _rG_] + caml_check_bound(s[1], _rB_)[1 + _rB_] + (curval ^ (curval >>> 25 | 0) & 31) | 0, newval30 = newval & 1073741823, - _rH_ = s[2]; - caml_check_bound(s[1], _rH_)[1 + _rH_] = newval30; + _rC_ = s[2]; + caml_check_bound(s[1], _rC_)[1 + _rC_] = newval30; return newval30; } - function intaux(s, n){ - for(;;){ - var r = bits(s), v = caml_mod(r, n); - if(((1073741823 - n | 0) + 1 | 0) >= (r - v | 0)) return v; - } - } - function int$0(s, bound){ - if(1073741823 >= bound && 0 < bound) return intaux(s, bound); - return invalid_arg(_ch_); - } - var default$0 = [0, _ci_.slice(), 0]; - function int$1(bound){return int$0(default$0, bound);} + var default$0 = [0, _ch_.slice(), 0]; function full_init$0(seed){return full_init(default$0, seed);} function self_init(param){return full_init$0(caml_sys_random_seed(0));} function get_state(param){return copy$0(default$0);} function ongoing_traversal(h){ - var _rD_ = h.length - 1 < 4 ? 1 : 0, _rE_ = _rD_ || (h[4] < 0 ? 1 : 0); - return _rE_; + var _ry_ = h.length - 1 < 4 ? 1 : 0, _rz_ = _ry_ || (h[4] < 0 ? 1 : 0); + return _rz_; } - try{var _kp_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _kp_;} - catch(_rB_){ - var _cj_ = caml_wrap_exception(_rB_); - if(_cj_ !== Not_found) throw caml_maybe_attach_backtrace(_cj_, 0); - try{var _ko_ = caml_sys_getenv("CAMLRUNPARAM"), _cm_ = _ko_;} - catch(_rC_){ - var _ck_ = caml_wrap_exception(_rC_); - if(_ck_ !== Not_found) throw caml_maybe_attach_backtrace(_ck_, 0); - var _cm_ = _cl_; + try{var _ko_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _ko_;} + catch(_rw_){ + var _ci_ = caml_wrap_exception(_rw_); + if(_ci_ !== Not_found) throw caml_maybe_attach_backtrace(_ci_, 0); + try{var _kn_ = caml_sys_getenv("CAMLRUNPARAM"), _cl_ = _kn_;} + catch(_rx_){ + var _cj_ = caml_wrap_exception(_rx_); + if(_cj_ !== Not_found) throw caml_maybe_attach_backtrace(_cj_, 0); + var _cl_ = _ck_; } - var params = _cm_; + var params = _cl_; } var randomized_default = contains(params, 82), - prng = [246, function(_rA_){return make_self_init(0);}]; + prng = [246, function(_rv_){return make_self_init(0);}]; function power_2_above(x, n){ var x$0 = x; for(;;){ if(n <= x$0) return x$0; if(max_array_length < (x$0 * 2 | 0)) return x$0; - var x$1 = x$0 * 2 | 0, x$0 = x$1; + var x$1 = x$0 * 2 | 0; + x$0 = x$1; } } function create$2(opt, initial_size){ @@ -8606,10 +8567,10 @@ var s = power_2_above(16, initial_size); if(random) var - _ry_ = caml_obj_tag(prng), - _rz_ = - 250 === _ry_ ? prng[1] : 246 === _ry_ ? force_lazy_block(prng) : prng, - seed = bits(_rz_); + _rt_ = caml_obj_tag(prng), + _ru_ = + 250 === _rt_ ? prng[1] : 246 === _rt_ ? force_lazy_block(prng) : prng, + seed = bits(_ru_); else var seed = 0; return [0, 0, caml_make_vect(s, 0), seed, s]; @@ -8632,29 +8593,29 @@ else caml_check_bound(ndata, nidx)[1 + nidx] = cell$1; caml_check_bound(ndata_tail, nidx)[1 + nidx] = cell$1; - var cell$0 = next; + cell$0 = next; } } - var _rt_ = odata.length - 1 - 1 | 0, _rs_ = 0; - if(_rt_ >= 0){ - var i$0 = _rs_; + var _ro_ = odata.length - 2 | 0, _rn_ = 0; + if(_ro_ >= 0){ + var i$0 = _rn_; for(;;){ insert_bucket(caml_check_bound(odata, i$0)[1 + i$0]); - var _rx_ = i$0 + 1 | 0; - if(_rt_ === i$0) break; - var i$0 = _rx_; + var _rs_ = i$0 + 1 | 0; + if(_ro_ === i$0) break; + i$0 = _rs_; } } if(inplace){ - var _rv_ = nsize - 1 | 0, _ru_ = 0; - if(_rv_ >= 0){ - var i = _ru_; + var _rq_ = nsize - 1 | 0, _rp_ = 0; + if(_rq_ >= 0){ + var i = _rp_; for(;;){ var match = caml_check_bound(ndata_tail, i)[1 + i]; if(match) match[3] = 0; - var _rw_ = i + 1 | 0; - if(_rv_ === i) break; - var i = _rw_; + var _rr_ = i + 1 | 0; + if(_rq_ === i) break; + i = _rr_; } } } @@ -8665,8 +8626,8 @@ odata = h[2], osize = odata.length - 1, nsize = osize * 2 | 0, - _rr_ = nsize < max_array_length ? 1 : 0; - if(! _rr_) return _rr_; + _rm_ = nsize < max_array_length ? 1 : 0; + if(! _rm_) return _rm_; 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); @@ -8674,8 +8635,8 @@ function hash(x){return caml_hash(10, 100, 0, x);} function key_index(h, key){ return 4 <= h.length - 1 - ? caml_hash(10, 100, h[3], key) & (h[2].length - 1 - 1 | 0) - : invalid_arg(_cn_); + ? caml_hash(10, 100, h[3], key) & (h[2].length - 2 | 0) + : invalid_arg(_cm_); } function add$0(h, key, data){ var @@ -8683,8 +8644,8 @@ bucket = [0, key, data, caml_check_bound(h[2], i)[1 + i]]; caml_check_bound(h[2], i)[1 + i] = bucket; h[1] = h[1] + 1 | 0; - var _rq_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; - return _rq_ ? resize$0(key_index, h) : _rq_; + var _rl_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; + return _rl_ ? resize$0(key_index, h) : _rl_; } function remove_bucket(h, i, key, prec, c){ var prec$1 = prec, prec$0 = c; @@ -8697,7 +8658,8 @@ caml_check_bound(h[2], i)[1 + i] = next; return; } - var prec$1 = prec$0, prec$0 = next; + prec$1 = prec$0; + prec$0 = next; } } function remove(h, key){ @@ -8710,13 +8672,13 @@ if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); var k = param$0[1], data = param$0[2], next = param$0[3]; if(0 === caml_compare(key, k)) return data; - var param$0 = next; + param$0 = next; } } function find(h, key){ var - _rp_ = key_index(h, key), - match = caml_check_bound(h[2], _rp_)[1 + _rp_]; + _rk_ = key_index(h, key), + match = caml_check_bound(h[2], _rk_)[1 + _rk_]; if(! match) throw caml_maybe_attach_backtrace(Not_found, 1); var k1 = match[1], d1 = match[2], next1 = match[3]; if(0 === caml_compare(key, k1)) return d1; @@ -8734,16 +8696,16 @@ if(! param$0) return 0; var k = param$0[1], data = param$0[2], next = param$0[3]; if(0 === caml_compare(k, key)) return [0, data, find_in_bucket(next)]; - var param$0 = next; + param$0 = next; } } - var _ro_ = key_index(h, key); - return find_in_bucket(caml_check_bound(h[2], _ro_)[1 + _ro_]); + var _rj_ = key_index(h, key); + return find_in_bucket(caml_check_bound(h[2], _rj_)[1 + _rj_]); } function id(x){return x;} var zero = 0, unknown = -1; function is_known(n){return 0 <= n ? 1 : 0;} - var String_tag = [248, _co_, caml_fresh_oo_id(0)]; + var String_tag = [248, _cn_, caml_fresh_oo_id(0)]; function pp_enqueue(state, token){ state[13] = state[13] + token[3] | 0; return add(token, state[28]); @@ -8767,8 +8729,8 @@ return; } function format_string(state, s){ - var _rn_ = caml_string_notequal(s, cst$1); - return _rn_ ? format_pp_text(state, caml_ml_string_length(s), s) : _rn_; + var _ri_ = s !== cst$1 ? 1 : 0; + return _ri_ ? format_pp_text(state, caml_ml_string_length(s), s) : _ri_; } function break_new_line(state, param, width){ var after = param[3], offset = param[2], before = param[1]; @@ -8784,7 +8746,7 @@ return format_string(state, after); } function break_line(state, width){ - return break_new_line(state, _cp_, width); + return break_new_line(state, _co_, width); } function break_same_line(state, param){ var after = param[3], width = param[2], before = param[1]; @@ -8800,8 +8762,8 @@ match$0 = match[1], width = match$0[2], box_type = match$0[1], - _rm_ = state[9] < width ? 1 : 0; - if(! _rm_) return _rm_; + _rh_ = state[9] < width ? 1 : 0; + if(! _rh_) return _rh_; if(3 < box_type - 1 >>> 0) return; return break_line(state, width); } @@ -8810,8 +8772,8 @@ if(! match) return; var match$0 = match[1], size = match$0[1], length = match$0[3]; state[12] = state[12] - length | 0; - var _rl_ = id(size); - state[9] = state[9] + _rl_ | 0; + var _rg_ = id(size); + state[9] = state[9] + _rg_ | 0; return; } function format_pp_token(state, size, param){ @@ -8840,8 +8802,8 @@ var width = match$0[1][2]; return break_line(state, width); case 4: - var _rk_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; - return _rk_ ? pp_skip_token(state) : _rk_; + var _rf_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; + return _rf_ ? pp_skip_token(state) : _rf_; default: var match$1 = pop_opt(state[5]); if(! match$1) return; @@ -8907,7 +8869,7 @@ if(! param$0) return first; var tail = param$0[2], head = param$0[1]; if(insertion_point <= head) return head; - var param$0 = tail; + param$0 = tail; } }, tab = find(tabs$0[1]); @@ -8915,9 +8877,9 @@ var tab = insertion_point; var offset = tab - insertion_point | 0; return 0 <= offset - ? break_same_line(state, [0, _cr_, offset + n | 0, _cq_]) + ? break_same_line(state, [0, _cq_, offset + n | 0, _cp_]) : break_new_line - (state, [0, _ct_, tab + off$0 | 0, _cs_], state[6]); + (state, [0, _cs_, tab + off$0 | 0, _cr_], state[6]); case 3: var ty = param[2], @@ -8948,9 +8910,9 @@ length = match$0[3], token = match$0[2], pending_count = state[13] - state[12] | 0, - _ri_ = is_known(size), - _rj_ = _ri_ || (state[9] <= pending_count ? 1 : 0); - if(! _rj_) return _rj_; + _rd_ = is_known(size), + _re_ = _rd_ || (state[9] <= pending_count ? 1 : 0); + if(! _re_) return _re_; take(state[28]); var size$0 = is_known(size) ? id(size) : pp_infinity; format_pp_token(state, size$0, token); @@ -8969,7 +8931,7 @@ } function initialize_scan_stack(stack){ clear(stack); - var queue_elem = [0, unknown, _cu_, 0]; + var queue_elem = [0, unknown, _ct_, 0]; return push([0, -1, queue_elem], stack); } function set_size(state, ty){ @@ -8981,9 +8943,9 @@ left_total = match$0[1], size = id(queue_elem[1]); if(left_total < state[12]) return initialize_scan_stack(state[1]); - var _rh_ = queue_elem[2]; - if(typeof _rh_ !== "number") - switch(_rh_[0]){ + var _rc_ = queue_elem[2]; + if(typeof _rc_ !== "number") + switch(_rc_[0]){ case 3: if(1 - ty){ queue_elem[1] = id(state[13] + size | 0); @@ -9009,46 +8971,46 @@ var size = id(- state[13] | 0), elem = [0, size, [3, indent, br_ty], 0]; return scan_push(state, 0, elem); } - var _rg_ = state[14] === state[15] ? 1 : 0; - return _rg_ ? enqueue_string(state, state[16]) : _rg_; + var _rb_ = state[14] === state[15] ? 1 : 0; + return _rb_ ? enqueue_string(state, state[16]) : _rb_; } function pp_open_sys_box(state){return pp_open_box_gen(state, 0, 3);} function pp_close_box(state, param){ - var _re_ = 1 < state[14] ? 1 : 0; - if(_re_){ + var _q$_ = 1 < state[14] ? 1 : 0; + if(_q$_){ 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 _rf_ = 0; + var _ra_ = 0; } else - var _rf_ = _re_; - return _rf_; + var _ra_ = _q$_; + return _ra_; } function pp_open_stag(state, tag_name){ if(state[22]){push(tag_name, state[4]); caml_call1(state[26], tag_name);} - var _rd_ = state[23]; - if(! _rd_) return _rd_; + var _q__ = state[23]; + if(! _q__) return _q__; 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 _rb_ = state[22]; - if(_rb_){ + var _q8_ = state[22]; + if(_q8_){ var match = pop_opt(state[4]); if(match){ var tag_name = match[1]; return caml_call1(state[27], tag_name); } - var _rc_ = 0; + var _q9_ = 0; } else - var _rc_ = _rb_; - return _rc_; + var _q9_ = _q8_; + return _q9_; } function pp_close_tag(state, param){return pp_close_stag(state, 0);} function pp_rinit(state){ @@ -9079,8 +9041,8 @@ } } function pp_print_as_size(state, size, s){ - var _ra_ = state[14] < state[15] ? 1 : 0; - return _ra_ ? enqueue_string_as(state, size, s) : _ra_; + var _q7_ = state[14] < state[15] ? 1 : 0; + return _q7_ ? enqueue_string_as(state, size, s) : _q7_; } function pp_print_as(state, isize, s){ return pp_print_as_size(state, id(isize), s); @@ -9103,16 +9065,16 @@ return caml_call1(state[18], 0); } function pp_force_newline(state, param){ - var _q$_ = state[14] < state[15] ? 1 : 0; - return _q$_ ? enqueue_advance(state, [0, zero, 3, 0]) : _q$_; + var _q6_ = state[14] < state[15] ? 1 : 0; + return _q6_ ? enqueue_advance(state, [0, zero, 3, 0]) : _q6_; } function pp_print_custom_break(state, fits, breaks){ var after = fits[3], width = fits[2], before = fits[1], - _q__ = state[14] < state[15] ? 1 : 0; - if(! _q__) return _q__; + _q5_ = state[14] < state[15] ? 1 : 0; + if(! _q5_) return _q5_; var size = id(- state[13] | 0), token = [1, fits, breaks], @@ -9125,48 +9087,49 @@ } function pp_print_break(state, width, offset){ return pp_print_custom_break - (state, [0, _cy_, width, _cx_], [0, _cw_, offset, _cv_]); + (state, [0, _cx_, width, _cw_], [0, _cv_, offset, _cu_]); } function pp_print_cut(state, param){return pp_print_break(state, 0, 0);} function display_newline(state, param){ - return caml_call3(state[17], _cz_, 0, 1); + return caml_call3(state[17], _cy_, 0, 1); } var blank_line = make$1(80, 32); function display_blanks(state, n){ var n$0 = n; for(;;){ - var _q9_ = 0 < n$0 ? 1 : 0; - if(! _q9_) return _q9_; + var _q4_ = 0 < n$0 ? 1 : 0; + if(! _q4_) return _q4_; if(80 >= n$0) return caml_call3(state[17], blank_line, 0, n$0); caml_call3(state[17], blank_line, 0, 80); - var n$1 = n$0 - 80 | 0, n$0 = n$1; + var n$1 = n$0 - 80 | 0; + n$0 = n$1; } } function default_pp_mark_open_tag(param){ - if(param[1] !== String_tag) return _cC_; + if(param[1] !== String_tag) return _cB_; var s = param[2]; - return symbol(_cB_, symbol(s, _cA_)); + return symbol_concat(_cA_, symbol_concat(s, _cz_)); } function default_pp_mark_close_tag(param){ - if(param[1] !== String_tag) return _cF_; + if(param[1] !== String_tag) return _cE_; var s = param[2]; - return symbol(_cE_, symbol(s, _cD_)); + return symbol_concat(_cD_, symbol_concat(s, _cC_)); } - function default_pp_print_open_tag(_q8_){return 0;} - function default_pp_print_close_tag(_q7_){return 0;} + function default_pp_print_open_tag(_q3_){return 0;} + function default_pp_print_close_tag(_q2_){return 0;} function pp_make_formatter(f, g, h, i, j){ - var pp_queue = create$0(0), sys_tok = [0, unknown, _cG_, 0]; + var pp_queue = create$0(0), sys_tok = [0, unknown, _cF_, 0]; add(sys_tok, pp_queue); var scan_stack = create(0); initialize_scan_stack(scan_stack); push([0, 1, sys_tok], scan_stack); - var pp_margin = 78, _q4_ = create(0), _q5_ = create(0), _q6_ = create(0); + var pp_margin = 78, _qZ_ = create(0), _q0_ = create(0), _q1_ = create(0); return [0, scan_stack, create(0), - _q6_, - _q5_, - _q4_, + _q1_, + _q0_, + _qZ_, pp_margin, 10, 68, @@ -9177,7 +9140,7 @@ 1, 1, max_int, - _cH_, + _cG_, f, g, h, @@ -9197,27 +9160,27 @@ pp_make_formatter (output, flush, - function(_q3_){return 0;}, - function(_q2_){return 0;}, - function(_q1_){return 0;}); - ppf[19] = function(_q0_){return display_newline(ppf, _q0_);}; - ppf[20] = function(_qZ_){return display_blanks(ppf, _qZ_);}; - ppf[21] = function(_qY_){return display_blanks(ppf, _qY_);}; + function(_qY_){return 0;}, + function(_qX_){return 0;}, + function(_qW_){return 0;}); + ppf[19] = function(_qV_){return display_newline(ppf, _qV_);}; + ppf[20] = function(_qU_){return display_blanks(ppf, _qU_);}; + ppf[21] = function(_qT_){return display_blanks(ppf, _qT_);}; return ppf; } function formatter_of_out_channel(oc){ return make_formatter - (function(_qV_, _qW_, _qX_){ - return output_substring(oc, _qV_, _qW_, _qX_); + (function(_qQ_, _qR_, _qS_){ + return output_substring(oc, _qQ_, _qR_, _qS_); }, function(param){return _k_(oc);}); } function formatter_of_buffer(b){ return make_formatter - (function(_qS_, _qT_, _qU_){ - return add_substring(b, _qS_, _qT_, _qU_); + (function(_qN_, _qO_, _qP_){ + return add_substring(b, _qN_, _qO_, _qP_); }, - function(_qR_){return 0;}); + function(_qM_){return 0;}); } var pp_buffer_size = 512; function pp_make_buffer(param){return create$1(pp_buffer_size);} @@ -9245,7 +9208,9 @@ var vs = param$0[2]; caml_call2(pp_v, ppf, v); caml_call2(pp_sep, ppf, 0); - var opt$1 = [0, pp_sep], opt$0 = opt$1, param$0 = vs; + var opt$1 = [0, pp_sep]; + opt$0 = opt$1; + param$0 = vs; } } function compute_tag(output, tag_acc){ @@ -9313,6 +9278,28 @@ indent = match$0[1]; return pp_open_box_gen(ppf, indent, bty); case 2: + var _qD_ = acc[1]; + if(typeof _qD_ !== "number" && 0 === _qD_[0]){ + var _qE_ = _qD_[2]; + if(typeof _qE_ !== "number" && 1 === _qE_[0]){ + var s$0 = acc[2], size = _qE_[2], p$2 = _qD_[1]; + break b; + } + } + var s = acc[2], p$1 = _qD_; + break a; + case 3: + var _qF_ = acc[1]; + if(typeof _qF_ !== "number" && 0 === _qF_[0]){ + var _qG_ = _qF_[2]; + if(typeof _qG_ !== "number" && 1 === _qG_[0]){ + var c$0 = acc[2], size$0 = _qG_[2], p$4 = _qF_[1]; + break; + } + } + var c = acc[2], p$3 = _qF_; + break c; + case 4: var _qI_ = acc[1]; if(typeof _qI_ !== "number" && 0 === _qI_[0]){ var _qJ_ = _qI_[2]; @@ -9323,7 +9310,7 @@ } var s = acc[2], p$1 = _qI_; break a; - case 3: + case 5: var _qK_ = acc[1]; if(typeof _qK_ !== "number" && 0 === _qK_[0]){ var _qL_ = _qK_[2]; @@ -9334,28 +9321,6 @@ } var c = acc[2], p$3 = _qK_; break c; - case 4: - var _qN_ = acc[1]; - if(typeof _qN_ !== "number" && 0 === _qN_[0]){ - var _qO_ = _qN_[2]; - if(typeof _qO_ !== "number" && 1 === _qO_[0]){ - var s$0 = acc[2], size = _qO_[2], p$2 = _qN_[1]; - break b; - } - } - var s = acc[2], p$1 = _qN_; - break a; - case 5: - var _qP_ = acc[1]; - if(typeof _qP_ !== "number" && 0 === _qP_[0]){ - var _qQ_ = _qP_[2]; - if(typeof _qQ_ !== "number" && 1 === _qQ_[0]){ - var c$0 = acc[2], size$0 = _qQ_[2], p$4 = _qP_[1]; - break; - } - } - var c = acc[2], p$3 = _qP_; - break c; case 6: var f$0 = acc[2], p$5 = acc[1]; output_acc$0(ppf, p$5); @@ -9370,8 +9335,8 @@ return invalid_arg(msg); } output_acc$0(ppf, p$4); - var _qM_ = make$1(1, c$0); - return pp_print_as_size(ppf, id(size$0), _qM_); + var _qH_ = make$1(1, c$0); + return pp_print_as_size(ppf, id(size$0), _qH_); } output_acc$0(ppf, p$3); return pp_print_char(ppf, c); @@ -9390,8 +9355,8 @@ fmt); } function fprintf$0(ppf){ - function _qF_(_qH_){return 0;} - return function(_qG_){return kfprintf$0(_qF_, ppf, _qG_);}; + function _qA_(_qC_){return 0;} + return function(_qB_){return kfprintf$0(_qA_, ppf, _qB_);}; } function kasprintf(k, param){ var fmt = param[1], b = pp_make_buffer(0), ppf = formatter_of_buffer(b); @@ -9412,8 +9377,8 @@ caml_register_named_value(name, slot); return; } - var Error = [248, _cI_, caml_fresh_oo_id(0)]; - register_exception(_cJ_, [0, Error, [0]]); + var Error = [248, _cH_, caml_fresh_oo_id(0)]; + register_exception(_cI_, [0, Error, [0]]); (function(exn){throw exn;}); var jv_global = globalThis; jv_global["Number"]; @@ -9421,8 +9386,8 @@ function is_null(v){return v === null$0 ? 1 : 0;} function is_undefined(v){return v === undefined$0 ? 1 : 0;} function is_none(v){ - var _qE_ = is_null(v); - return _qE_ ? _qE_ : is_undefined(v); + var _qz_ = is_null(v); + return _qz_ ? _qz_ : is_undefined(v); } function to_option(conv, v){ return is_none(v) ? 0 : [0, caml_call1(conv, v)]; @@ -9459,14 +9424,14 @@ return init$0(len, function(i){return caml_call1(conv, v[i]);}); } function of_array(conv, a){ - var len = a.length - 1, ja = create$3(len), _qC_ = len - 1 | 0, _qB_ = 0; - if(_qC_ >= 0){ - var i = _qB_; + var len = a.length - 1, ja = create$3(len), _qx_ = len - 1 | 0, _qw_ = 0; + if(_qx_ >= 0){ + var i = _qw_; for(;;){ ja[i] = caml_call1(conv, caml_check_bound(a, i)[1 + i]); - var _qD_ = i + 1 | 0; - if(_qC_ === i) break; - var i = _qD_; + var _qy_ = i + 1 | 0; + if(_qx_ === i) break; + i = _qy_; } } return ja; @@ -9482,7 +9447,9 @@ if(! param$0) return ja; var vs = param$0[2], v = param$0[1]; ja[i$0] = caml_call1(conv, v); - var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = vs; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; + param$0 = vs; } } return loop(0, create$3(0), l); @@ -9514,14 +9481,14 @@ caml_js_wrap_callback_strict(1, rej)); } function all(arr){return promise.all(arr);} - function _cK_(_qA_){return caml_string_of_jsstring(_qA_);} - function _cL_(_qz_){return caml_jsstring_of_string(_qz_);} + function _cJ_(_qv_){return caml_string_of_jsstring(_qv_);} + function _cK_(_qu_){return caml_jsstring_of_string(_qu_);} function fut(p){return {fut: p};} function promise$0(f){return f[cst_fut];} function promise$1(f){return f[cst_fut];} function create$5(param){ function not_set(param){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _cM_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _cL_], 1); } function is_set(param){return throw$0(0, "The future is already set");} var setter = [0, not_set]; @@ -9543,7 +9510,7 @@ function of_list$1(fs){ var arr = of_list$0(promise$1, fs), all$0 = all(arr); function to_list(l){ - return resolve(to_list$0(function(_qy_){return _qy_;}, l)); + return resolve(to_list$0(function(_qt_){return _qt_;}, l)); } return fut(bind(all$0, to_list)); } @@ -9554,11 +9521,11 @@ return fut(then(p, ok$0, error$0)); } function of_promise$0(ok, v){ - return of_promise(ok, function(_qx_){return _qx_;}, v); + return of_promise(ok, function(_qs_){return _qs_;}, v); } function let$0(f, fn){return map$4(fn, f);} function let$1(f, fn){ - return function(_qw_){return bind$0(f, _qw_);} + return function(_qr_){return bind$0(f, _qr_);} (function(e){ if(0 !== e[0]) return return$0(e); var v = e[1]; @@ -9566,7 +9533,7 @@ }); } function let$2(f, fn){ - return map$4(function(_qv_){return map$0(fn, _qv_);}, f); + return map$4(function(_qq_){return map$0(fn, _qq_);}, f); } global["Event"]; function current_target(e){return e["currentTarget"];} @@ -9607,7 +9574,7 @@ function of_obj(o){return new usp(o);} function with_query_params(u, ps){ var u$0 = new url(u); - set$0(u$0, _cN_, to_jstr(ps)); + set$0(u$0, _cM_, to_jstr(ps)); return u$0; } function to_jstr$0(u){return u.toString();} @@ -9624,7 +9591,7 @@ var global_document = global["document"]; if(! is_none(global_document)) global_document["documentElement"]; function call(c, meth, args){caml_js_meth_call(c, meth, args); return 0;} - var _cO_ = global[cst_console]; + var _cN_ = global[cst_console]; function msg_to_jv_array(msg){ function loop(a, i, param){ var i$0 = i, param$0 = param; @@ -9632,24 +9599,26 @@ if(! param$0) return a; var vs = param$0[2], v = param$0[1]; a[i$0] = v; - var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = vs; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; + param$0 = vs; } } return caml_js_to_array(loop(create$3(0), 0, msg)); } - function log(msg){return call(_cO_, _cP_, msg_to_jv_array(msg));} - function error(msg){return call(_cO_, _cQ_, msg_to_jv_array(msg));} - function info(msg){return call(_cO_, _cR_, msg_to_jv_array(msg));} + function log(msg){return call(_cN_, _cO_, msg_to_jv_array(msg));} + function error(msg){return call(_cN_, _cP_, msg_to_jv_array(msg));} + function info(msg){return call(_cN_, _cQ_, msg_to_jv_array(msg));} global[cst_console]; global["navigator"]; global["performance"]; global["window"]; - get$0(global, _cS_); + get$0(global, _cR_); global["ClipboardItem"]; global["FormData"]; - function of_jstr$0(_qu_){return _qu_;} + function of_jstr$0(_qp_){return _qp_;} function text(r){ - return of_promise$0(function(_qt_){return _qt_;}, r.text()); + return of_promise$0(function(_qo_){return _qo_;}, r.text()); } var headers = global["Headers"]; function of_assoc(init, l){ @@ -9660,7 +9629,7 @@ hs.append(k, v); return 0; } - iter(function(_qs_){return add(hs, _qs_);}, l); + iter(function(_qn_){return add(hs, _qn_);}, l); return hs; } function init$1 @@ -9678,18 +9647,18 @@ signal, param){ var o = {}; - o["body"] = of_option(undefined$0, function(_qr_){return _qr_;}, body); - set_if_some$1(o, _cT_, cache); - set_if_some$1(o, _cU_, credentials); - set_if_some(o, _cV_, map(function(_qq_){return _qq_;}, headers)); - set_if_some$1(o, _cW_, integrity); - set_if_some$0(o, _cX_, keepalive); - set_if_some$1(o, _cY_, method); - set_if_some$1(o, _cZ_, mode); - set_if_some$1(o, _c0_, redirect); - set_if_some$1(o, _c1_, referrer); - set_if_some$1(o, _c2_, referrer_policy); - o["signal"] = of_option(undefined$0, function(_qp_){return _qp_;}, signal); + o["body"] = of_option(undefined$0, function(_qm_){return _qm_;}, body); + set_if_some$1(o, _cS_, cache); + set_if_some$1(o, _cT_, credentials); + set_if_some(o, _cU_, map(function(_ql_){return _ql_;}, headers)); + set_if_some$1(o, _cV_, integrity); + set_if_some$0(o, _cW_, keepalive); + set_if_some$1(o, _cX_, method); + set_if_some$1(o, _cY_, mode); + set_if_some$1(o, _cZ_, redirect); + set_if_some$1(o, _c0_, referrer); + set_if_some$1(o, _c1_, referrer_policy); + o["signal"] = of_option(undefined$0, function(_qk_){return _qk_;}, signal); return o; } var request = global["Request"]; @@ -9700,8 +9669,8 @@ global["Response"]; var fetch = global["fetch"]; function request$0(r){ - function _qm_(_qo_){return _qo_;} - return function(_qn_){return of_promise$0(_qm_, _qn_);}(fetch(r)); + function _qh_(_qj_){return _qj_;} + return function(_qi_){return of_promise$0(_qh_, _qi_);}(fetch(r)); } global["MediaStream"]; global["MediaRecorder"]; @@ -9726,13 +9695,13 @@ global["registration"]; global["serviceWorker"]; function to_jv(param){ - if(0 === param[0]){var p = param[1]; return _cL_(p);} + if(0 === param[0]){var p = param[1]; return _cK_(p);} var keys = param[1]; return of_array(to_jv, keys); } - function bound(lower, upper, opt, _ql_, param){ + function bound(lower, upper, opt, _qg_, param){ if(opt) var sth = opt[1], lower_open = sth; else var lower_open = 0; - if(_ql_) var sth$0 = _ql_[1], upper_open = sth$0; else var upper_open = 0; + if(_qg_) var sth$0 = _qg_[1], upper_open = sth$0; else var upper_open = 0; var c = global["IDBKeyRange"]; return c.bound(lower, upper, ! ! lower_open, ! ! upper_open); } @@ -9745,8 +9714,8 @@ function of_jv(f, j){return [0, j, f];} function error$1(t){return t[1][cst_error];} function result(t){ - var _qk_ = t[1]["result"]; - return caml_call1(t[2], _qk_); + var _qf_ = t[1]["result"]; + return caml_call1(t[2], _qf_); } function on_success(f, t){ function f$0(ev){return caml_call2(f, ev, t);} @@ -9767,28 +9736,28 @@ function to_string$1(param){ switch(param){ case 0: - return _c3_; + return _c2_; case 1: - return _c4_; + return _c3_; case 2: - return _c5_; - default: return _c6_; + return _c4_; + default: return _c5_; } } - function to_jv$0(d){return _cL_(to_string$1(d));} + function to_jv$0(d){return _cK_(to_string$1(d));} function Content_access(Content, Key){ function get(key, t){ function f(jv){ return to_option(function(j){return caml_call1(Content[4], j);}, jv); } - return function(_qj_){return of_jv(f, _qj_);} + return function(_qe_){return of_jv(f, _qe_);} (t.get(caml_call1(Key[2], key))); } function get_all(t){ function f(jv){ return to_array(function(c){return caml_call1(Content[4], c);}, jv); } - return function(_qi_){return of_jv(f, _qi_);}(t.getAll()); + return function(_qd_){return of_jv(f, _qd_);}(t.getAll()); } function get_all_keys(query, t){ if(query) @@ -9798,16 +9767,16 @@ function f(jv){ return to_array(function(c){return caml_call1(Content[1][3], c);}, jv); } - return function(_qh_){return of_jv(f, _qh_);} + return function(_qc_){return of_jv(f, _qc_);} (caml_js_meth_call(t, "getAllKeys", args)); } function key(t){ - var _qe_ = t["key"], _qf_ = Key[3]; - return function(_qg_){return to_option(_qf_, _qg_);}(_qe_); + var _p$_ = t["key"], _qa_ = Key[3]; + return function(_qb_){return to_option(_qa_, _qb_);}(_p$_); } function primary_key(t){ - var _qb_ = t["primaryKey"], _qc_ = Content[1][3]; - return function(_qd_){return to_option(_qc_, _qd_);}(_qb_); + var _p8_ = t["primaryKey"], _p9_ = Content[1][3]; + return function(_p__){return to_option(_p9_, _p__);}(_p8_); } function advance(count, t){t.advance(count); return t;} function continue$0(key, t){ @@ -9830,12 +9799,12 @@ return to_option(of_jv, v); } function delete$0(t){ - function _p$_(param){return 0;} - return function(_qa_){return of_jv(_p$_, _qa_);}(t.delete()); + function _p6_(param){return 0;} + return function(_p7_){return of_jv(_p6_, _p7_);}(t.delete()); } function update(v, t){ - var _p8_ = t.update(caml_call1(Content[3], v)), _p9_ = Content[1][3]; - return function(_p__){return of_jv(_p9_, _p__);}(_p8_); + var _p3_ = t.update(caml_call1(Content[3], v)), _p4_ = Content[1][3]; + return function(_p5_){return of_jv(_p4_, _p5_);}(_p3_); } var Cursor_with_value = @@ -9852,30 +9821,30 @@ if(query){ var q = query[1]; if(direction$0) - var d = direction$0[1], _p5_ = [0, q, d]; + var d = direction$0[1], _p0_ = [0, q, d]; else - var _p5_ = [0, q]; - var args = _p5_; + var _p0_ = [0, q]; + var args = _p0_; } else if(direction$0) var d$0 = direction$0[1], args = [0, null$0, d$0]; else var args = [0]; - function f(jv){return to_option(function(_p7_){return _p7_;}, jv);} - return function(_p6_){return of_jv(f, _p6_);} + function f(jv){return to_option(function(_p2_){return _p2_;}, jv);} + return function(_p1_){return of_jv(f, _p1_);} (caml_js_meth_call(t, "openCursor", args)); } return [0, , get, get_all, get_all_keys, , Cursor_with_value, open_cursor]; } function Make_index(P, C, K){ var - get_all_keys = function(_p4_){return Content_access(C, _p4_);}(K)[4], + get_all_keys = function(_pZ_){return Content_access(C, _pZ_);}(K)[4], name = P[1]; return [0, , K, , , , get_all_keys, , , , , , name]; } function Make_object_store(C){ var - include = function(_p3_){return Content_access(C, _p3_);}(C[1]), + include = function(_pY_){return Content_access(C, _pY_);}(C[1]), get = include[2], get_all = include[3], Cursor_with_value = include[6], @@ -9884,24 +9853,24 @@ return function(t){ var key_path = to_jv(I[3][1]), - _p2_ = t.createIndex(_cL_(I[2]), key_path); - return caml_call1(I[1], _p2_);}; + _pX_ = t.createIndex(_cK_(I[2]), key_path); + return caml_call1(I[1], _pX_);}; } function index(I){ return function(t){ - var _p1_ = t.index(_cL_(I[2])); - return caml_call1(I[1], _p1_);}; + var _pW_ = t.index(_cK_(I[2])); + return caml_call1(I[1], _pW_);}; } function put(v, key, t){ if(key) var key$0 = key[1], - _pX_ = caml_call1(C[1][2], key$0), - args = [0, caml_call1(C[3], v), _pX_]; + _pS_ = caml_call1(C[1][2], key$0), + args = [0, caml_call1(C[3], v), _pS_]; else var args = [0, caml_call1(C[3], v)]; - var _pY_ = caml_js_meth_call(t, "put", args), _pZ_ = C[1][3]; - return function(_p0_){return of_jv(_pZ_, _p0_);}(_pY_); + var _pT_ = caml_js_meth_call(t, "put", args), _pU_ = C[1][3]; + return function(_pV_){return of_jv(_pU_, _pV_);}(_pT_); } return [0, C, @@ -9922,16 +9891,16 @@ function string_of_mode(param){ switch(param){ case 0: - return _c7_; + return _c6_; case 1: - return _c8_; - default: return _c9_; + return _c7_; + default: return _c8_; } } function object_store(S){ return function(t){ - var _pW_ = t.objectStore(_cL_(S[2][2])); - return caml_call1(S[1], _pW_);}; + var _pR_ = t.objectStore(_cK_(S[2][2])); + return caml_call1(S[1], _pR_);}; } function create_object_store(S){ return function(opt, db){ @@ -9940,31 +9909,31 @@ else var auto_increment = 0; var - opts = [0, [0, _c__, ! ! auto_increment], 0], + opts = [0, [0, _c9_, ! ! auto_increment], 0], key_path = to_jv(S[2][1][1]), - opts$0 = [0, [0, _c$_, key_path], opts], + opts$0 = [0, [0, _c__, key_path], opts], options = caml_js_object(of_list(opts$0)); - info([0, _da_, [0, options, 0]]); - var _pV_ = db.createObjectStore(_cL_(S[2][2]), options); - return caml_call1(S[1], _pV_);}; + info([0, _c$_, [0, options, 0]]); + var _pQ_ = db.createObjectStore(_cK_(S[2][2]), options); + return caml_call1(S[1], _pQ_);}; } function delete_object_store(t, name){ - t.deleteObjectStore(_cL_(name)); + t.deleteObjectStore(_cK_(name)); return 0; } function transaction(stores, opt, t){ if(opt) var sth = opt[1], mode = sth; else var mode = 0; - var mode$0 = _cL_(string_of_mode(mode)); - function jv_of_store(S){return _cL_(S[2][2]);} + var mode$0 = _cK_(string_of_mode(mode)); + function jv_of_store(S){return _cK_(S[2][2]);} return t.transaction(of_list$0(jv_of_store, stores), mode$0); } function object_store_names(t){ - return function(_pU_){return to_array(_cK_, _pU_);}(t["objectStoreNames"]); + return function(_pP_){return to_array(_cJ_, _pP_);}(t["objectStoreNames"]); } function on_upgrade_needed(f, t){ function f$0(ev){ - function _pR_(_pT_){return _pT_;} - var req = function(_pS_){return of_jv(_pR_, _pS_);}(current_target(ev)); + function _pM_(_pO_){return _pO_;} + var req = function(_pN_){return of_jv(_pM_, _pN_);}(current_target(ev)); return caml_call2(f, ev, req); } listen(0, upgrade_needed, f$0, t[1]); @@ -9975,57 +9944,57 @@ var v = version[1], args = [0, name, string_of_int(v)]; else var args = [0, name]; - function _pJ_(_pQ_, _pP_, _pO_){ - return caml_js_meth_call(_pQ_, _pP_, _pO_); + function _pE_(_pL_, _pK_, _pJ_){ + return caml_js_meth_call(_pL_, _pK_, _pJ_); } - function _pK_(_pN_){return _pN_;} - return function(_pL_){return of_jv(_pK_, _pL_);} - (function(_pM_){return _pJ_(t, _db_, _pM_);}(map$3(_cL_, args))); + function _pF_(_pI_){return _pI_;} + return function(_pG_){return of_jv(_pF_, _pG_);} + (function(_pH_){return _pE_(t, _da_, _pH_);}(map$3(_cK_, args))); } function get_factory(opt, param){ if(opt) var sth = opt[1], global$0 = sth; else var global$0 = global; return global$0["indexedDB"]; } - function _dc_(_pH_){ - var _pI_ = Make_object_store(_pH_); + function _db_(_pC_){ + var _pD_ = Make_object_store(_pC_); return [0, - _pI_[1], + _pD_[1], , - _pI_[7], + _pD_[7], , - _pI_[3], - _pI_[4], + _pD_[3], + _pD_[4], , , - _pI_[8], + _pD_[8], , , - _pI_[12], - _pI_[13], - _pI_[14]]; + _pD_[12], + _pD_[13], + _pD_[14]]; } - function _dd_(_pF_, _pE_, _pD_){ - var _pG_ = Make_index(_pF_, _pE_, _pD_); - return [0, , _pG_[2], , , , , , _pG_[6], , , , _pG_[12]]; + function _dc_(_pA_, _pz_, _py_){ + var _pB_ = Make_index(_pA_, _pz_, _py_); + return [0, , _pB_[2], , , , , , _pB_[6], , , , _pB_[12]]; } - function symbol$1(_pC_, _pB_){return _pC_ === _pB_ ? 1 : 0;} - function symbol$2(_pA_, _pz_){return _pA_ < _pz_ ? 1 : 0;} - function symbol$3(_py_, _px_){return _px_ < _py_ ? 1 : 0;} - function symbol$4(_pw_, _pv_){return _pv_ <= _pw_ ? 1 : 0;} + function symbol$0(_px_, _pw_){return _px_ === _pw_ ? 1 : 0;} + function symbol$1(_pv_, _pu_){return _pv_ < _pu_ ? 1 : 0;} + function symbol$2(_pt_, _ps_){return _ps_ < _pt_ ? 1 : 0;} + function symbol$3(_pr_, _pq_){return _pq_ <= _pr_ ? 1 : 0;} function reverse_in_place(a){ var len = a.length - 1; - if(symbol$3(len, 0)){ - var _pr_ = (len - 1 | 0) / 2 | 0, _pq_ = 0; - if(_pr_ >= 0){ - var k = _pq_; + if(symbol$2(len, 0)){ + var _pm_ = (len - 1 | 0) / 2 | 0, _pl_ = 0; + if(_pm_ >= 0){ + var k = _pl_; for(;;){ - var t = caml_check_bound(a, k)[1 + k], _ps_ = (len - 1 | 0) - k | 0; - a[1 + k] = caml_check_bound(a, _ps_)[1 + _ps_]; - var _pt_ = (len - 1 | 0) - k | 0; - caml_check_bound(a, _pt_)[1 + _pt_] = t; - var _pu_ = k + 1 | 0; - if(_pr_ === k) break; - var k = _pu_; + var t = caml_check_bound(a, k)[1 + k], _pn_ = (len - 1 | 0) - k | 0; + a[1 + k] = caml_check_bound(a, _pn_)[1 + _pn_]; + var _po_ = (len - 1 | 0) - k | 0; + caml_check_bound(a, _po_)[1 + _po_] = t; + var _pp_ = k + 1 | 0; + if(_pm_ === k) break; + k = _pp_; } } } @@ -10035,21 +10004,18 @@ function aux(acc, i){ var acc$0 = acc, i$0 = i; for(;;){ - if(symbol$1(i$0, a.length - 1)){ + if(symbol$0(i$0, a.length - 1)){ var a$0 = of_list(acc$0); reverse_in_place(a$0); return a$0; } var match = caml_call1(f, caml_check_bound(a, i$0)[1 + i$0]); - if(match) - var - x = match[1], - i$1 = i$0 + 1 | 0, - acc$1 = [0, x, acc$0], - acc$0 = acc$1, - i$0 = i$1; - else - var i$2 = i$0 + 1 | 0, i$0 = i$2; + if(match){ + var x = match[1], i$1 = i$0 + 1 | 0, acc$1 = [0, x, acc$0]; + acc$0 = acc$1; + i$0 = i$1; + } + else{var i$2 = i$0 + 1 | 0; i$0 = i$2;} } } return aux(0, 0); @@ -10057,27 +10023,9 @@ function filter(p, a){ return filter_map(function(x){return caml_call1(p, x) ? [0, x] : 0;}, a); } - function shuffle(rand_int, a, i, j){ - var _pn_ = j - 1 | 0, _po_ = i + 1 | 0; - if(_pn_ >= _po_){ - var k = _pn_; - for(;;){ - var - l = caml_call1(rand_int, k + 1 | 0), - tmp = caml_check_bound(a, l)[1 + l]; - a[1 + l] = caml_check_bound(a, k)[1 + k]; - a[1 + k] = tmp; - var _pp_ = k - 1 | 0; - if(_po_ === k) break; - var k = _pp_; - } - } - return; - } - function shuffle$0(a){return shuffle(int$1, a, 0, a.length - 1);} function equal$0(a, b){return a === b ? 1 : 0;} function is_empty(param){return param ? 0 : 1;} - function symbol$5(f, l){ + function symbol$4(f, l){ if(! l) return 0; var tl = l[2], x = l[1], x$0 = caml_call1(f, x), block = [0, x$0, 24029]; map_dps(block, 1, f, tl); @@ -10093,7 +10041,9 @@ x$0 = caml_call1(f, x), dst$1 = [0, x$0, 24029]; dst$0[1 + offset$0] = dst$1; - var dst$0 = dst$1, offset$0 = 1, l$0 = tl; + dst$0 = dst$1; + offset$0 = 1; + l$0 = tl; } } function filter_map$0(f, l){ @@ -10106,7 +10056,8 @@ var y = match[1], acc$1 = [0, y, acc$0]; else var acc$1 = acc$0; - var acc$0 = acc$1, l$0 = l$1; + acc$0 = acc$1; + l$0 = l$1; } } return recurse(0, l); @@ -10118,12 +10069,14 @@ if(! l$0) return 0; var l$1 = l$0[2], x = l$0[1]; caml_call2(f, i$0, x); - var i$1 = i$0 + 1 | 0, i$0 = i$1, l$0 = l$1; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; + l$0 = l$1; } } return aux(f, 0, l); } - function symbol$6(f, param){ + function symbol$5(f, param){ if(! param) return 0; var x = param[1]; return [0, caml_call1(f, x)]; @@ -10145,7 +10098,7 @@ return x; } make_self_init(0); - function symbol$7(f, e){ + function symbol$6(f, e){ if(0 === e[0]){var x = e[1]; return [0, caml_call1(f, x)];} var s = e[1]; return [1, s]; @@ -10155,7 +10108,7 @@ var y = e[1]; return [1, caml_call1(f, y)]; } - var Get_error = [248, _de_, caml_fresh_oo_id(0)]; + var Get_error = [248, _dd_, caml_fresh_oo_id(0)]; function get_exn(param){ if(0 !== param[0]) throw caml_maybe_attach_backtrace(Get_error, 1); var x = param[1]; @@ -10168,17 +10121,14 @@ if(! l$0) return [0, rev(acc$0)]; var match = l$0[1]; if(0 !== match[0]){var e = match[1]; return [1, e];} - var - l$1 = l$0[2], - x = match[1], - acc$1 = [0, x, acc$0], - acc$0 = acc$1, - l$0 = l$1; + var l$1 = l$0[2], x = match[1], acc$1 = [0, x, acc$0]; + acc$0 = acc$1; + l$0 = l$1; } } return loop(0, l); } - function symbol$8(e, f){return symbol$7(f, e);} + function symbol$7(e, f){return symbol$6(f, e);} function Make$0(O){ var S = _M_(O), empty = S[1], add = S[4], elements = S[23]; return [0, @@ -10234,13 +10184,13 @@ , elements]; } - function _df_(_pl_){ - var _pm_ = Make$0(_pl_); + function _de_(_pj_){ + var _pk_ = Make$0(_pj_); return [0, - _pm_[4], + _pk_[4], , , - _pm_[7], + _pk_[7], , , , @@ -10285,10 +10235,10 @@ , , , - _pm_[51]]; + _pk_[51]]; } - function length$2(_pk_){return caml_ml_string_length(_pk_);} - function is_empty$0(s){return symbol$0(s, _dg_);} + function length$2(_pi_){return caml_ml_string_length(_pi_);} + function is_empty$0(s){return symbol(s, _df_);} function kmp_pattern_length(p){return caml_ml_string_length(p[2]);} function get$1(dir){ return dir @@ -10297,7 +10247,7 @@ return caml_string_get (s, (caml_ml_string_length(s) - i | 0) - 1 | 0); } - : function(_pj_, _pi_){return caml_string_get(_pj_, _pi_);}; + : function(_ph_, _pg_){return caml_string_get(_ph_, _pg_);}; } function kmp_compile(dir, str){ var len = length$2(str), get = get$1(dir); @@ -10307,24 +10257,24 @@ caml_check_bound(failure, 0)[1] = -1; var i = [0, 2], j = [0, 0]; for(;;){ - if(! symbol$2(i[1], len)) return [0, failure, str]; - var match = j[1], _pd_ = get(str, j[1]); - if(equal(get(str, i[1] - 1 | 0), _pd_)){ + if(! symbol$1(i[1], len)) return [0, failure, str]; + var match = j[1], _pb_ = get(str, j[1]); + if(equal(get(str, i[1] - 1 | 0), _pb_)){ j[1]++; - var _pf_ = i[1], _pe_ = j[1]; - caml_check_bound(failure, _pf_)[1 + _pf_] = _pe_; + var _pd_ = i[1], _pc_ = j[1]; + caml_check_bound(failure, _pd_)[1 + _pd_] = _pc_; i[1]++; } else if(0 === match){ - var _pg_ = i[1]; - caml_check_bound(failure, _pg_)[1 + _pg_] = 0; + var _pe_ = i[1]; + caml_check_bound(failure, _pe_)[1 + _pe_] = 0; i[1]++; } else{ - if(! symbol$3(j[1], 0)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dh_], 1); - var _ph_ = j[1]; - j[1] = caml_check_bound(failure, _ph_)[1 + _ph_]; + if(! symbol$2(j[1], 0)) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dg_], 1); + var _pf_ = j[1]; + j[1] = caml_check_bound(failure, _pf_)[1 + _pf_]; } } } @@ -10336,7 +10286,7 @@ j = [0, 0], pat_len = kmp_pattern_length(pattern); for(;;){ - if(symbol$2(j[1], pat_len) && symbol$2(i[1] + j[1] | 0, len)){ + if(symbol$1(j[1], pat_len) && symbol$1(i[1] + j[1] | 0, len)){ var c = caml_string_get(s, i[1] + j[1] | 0), expected = caml_string_get(pattern[2], j[1]); @@ -10344,11 +10294,11 @@ j[1]++; else{ var - _pc_ = j[1], - fail_offset = caml_check_bound(pattern[1], _pc_)[1 + _pc_]; - if(symbol$4(fail_offset, 0)){ - if(! symbol$2(fail_offset, j[1])) - throw caml_maybe_attach_backtrace([0, Assert_failure, _di_], 1); + _pa_ = j[1], + fail_offset = caml_check_bound(pattern[1], _pa_)[1 + _pa_]; + if(symbol$3(fail_offset, 0)){ + if(! symbol$1(fail_offset, j[1])) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dh_], 1); i[1] = (i[1] + j[1] | 0) - fail_offset | 0; j[1] = fail_offset; } @@ -10356,11 +10306,11 @@ } continue; } - return symbol$1(j[1], pat_len) ? i[1] : -1; + return symbol$0(j[1], pat_len) ? i[1] : -1; } } function compile(sub){ - return symbol$1(length$2(sub), 1) + return symbol$0(length$2(sub), 1) ? [0, caml_string_get(sub, 0)] : [1, kmp_compile$0(sub)]; } @@ -10372,28 +10322,29 @@ return kmp_find(pattern$0, s, start); } var c = pattern[1]; - try{var _pa_ = index_from(s, start, c); return _pa_;} - catch(_pb_){ - var _o$_ = caml_wrap_exception(_pb_); - if(_o$_ === Not_found) return -1; - throw caml_maybe_attach_backtrace(_o$_, 0); + try{var _o__ = index_from(s, start, c); return _o__;} + catch(_o$_){ + var _o9_ = caml_wrap_exception(_o$_); + if(_o9_ === Not_found) return -1; + throw caml_maybe_attach_backtrace(_o9_, 0); }}; } function prefix(pre, s){ var len = caml_ml_string_length(pre); - if(symbol$3(len, caml_ml_string_length(s))) return 0; + if(symbol$2(len, caml_ml_string_length(s))) return 0; function check(i){ var i$0 = i; for(;;){ - if(symbol$1(i$0, len)) return 1; + if(symbol$0(i$0, len)) return 1; if(caml_string_unsafe_get(s, i$0) !== caml_string_unsafe_get(pre, i$0)) return 0; - var i$1 = i$0 + 1 | 0, i$0 = i$1; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; } } return check(0); } - var Lex_error = [248, _dj_, caml_fresh_oo_id(0)]; + var Lex_error = [248, _di_, caml_fresh_oo_id(0)]; function lex_error(err){ throw caml_maybe_attach_backtrace([0, Lex_error, err], 1); } @@ -10405,11 +10356,11 @@ return [0, start[2], cnum, enum$0]; } function string2num(s){ - try{var _o9_ = [3, caml_int_of_string(s)]; return _o9_;} - catch(_o__){ - var _o8_ = caml_wrap_exception(_o__); - if(_o8_[1] === Failure) return [2, s]; - throw caml_maybe_attach_backtrace(_o8_, 0); + try{var _o7_ = [3, caml_int_of_string(s)]; return _o7_;} + catch(_o8_){ + var _o6_ = caml_wrap_exception(_o8_); + if(_o6_[1] === Failure) return [2, s]; + throw caml_maybe_attach_backtrace(_o6_, 0); } } function update_pos(lexbuf){ @@ -10425,7 +10376,7 @@ else if(71 > c) return (c - 65 | 0) + 10 | 0; } else if(9 >= c - 48 >>> 0) return c - 48 | 0; - return lex_error(symbol(_dl_, symbol(make$1(1, c), _dk_))); + return lex_error(symbol_concat(_dk_, symbol_concat(make$1(1, c), _dj_))); } function utf8_of_code(buf, idx, u){ var i = [0, idx]; @@ -10479,12 +10430,18 @@ function escaping_error(msg, s, c, off){ var offs = string_of_int(off); if(c) - var c$0 = c[1], cs = symbol(_dn_, symbol(make$1(1, c$0), _dm_)); + var + c$0 = c[1], + cs = symbol_concat(_dm_, symbol_concat(make$1(1, c$0), _dl_)); else - var cs = _dq_; + var cs = _dp_; return lex_error - (symbol - (msg, symbol(_dp_, symbol(offs, symbol(cs, symbol(_do_, s)))))); + (symbol_concat + (msg, + symbol_concat + (_do_, + symbol_concat + (offs, symbol_concat(cs, symbol_concat(_dn_, s)))))); } function unescape_string(s){ var @@ -10494,76 +10451,76 @@ u1 = [0, 0], u2 = [0, 0], state = [0, 748194550], - _oZ_ = l - 1 | 0, - _oY_ = 0; - if(_oZ_ >= 0){ - var i = _oY_; + _oX_ = l - 1 | 0, + _oW_ = 0; + if(_oX_ >= 0){ + var i = _oW_; for(;;){ - var _o0_ = state[1]; + var _oY_ = state[1]; a: - if(308570827 <= _o0_) - if(308570829 <= _o0_) - if(748194550 <= _o0_) - if(945120947 <= _o0_) + if(308570827 <= _oY_) + if(308570829 <= _oY_) + if(748194550 <= _oY_) + if(945120947 <= _oY_) if(117 === caml_string_get(s, i)) state[1] = 308570827; else - escaping_error(_ds_, s, [0, caml_string_get(s, i)], i); + escaping_error(_dr_, s, [0, caml_string_get(s, i)], i); else{ var c = caml_string_get(s, i); if(92 === c) state[1] = 258914209; else{caml_bytes_unsafe_set(s$0, j[1], c); j[1] = j[1] + 1 | 0;} } - else if(308570830 <= _o0_){ + else if(308570830 <= _oY_){ state[1] = 748194550; - var _o2_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _o2_; + var _o0_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _o0_; if(56320 <= u2[1] && 57343 >= u2[1]){ j[1] = utf8_of_surrogate_pair(s$0, j[1], u1[1], u2[1]); break a; } - escaping_error(_dt_, s, 0, i); + escaping_error(_ds_, s, 0, i); } else{ - var _o3_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _o3_; + var _o1_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _o1_; state[1] = 308570830; } - else if(308570828 <= _o0_){ - var _o4_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _o4_; + else if(308570828 <= _oY_){ + var _o2_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _o2_; state[1] = 308570829; } else{ u2[1] = int_of_hexchar(caml_string_get(s, i)); state[1] = 308570828; } - else if(297481261 <= _o0_) - if(297481263 <= _o0_) - if(308569555 <= _o0_) + else if(297481261 <= _oY_) + if(297481263 <= _oY_) + if(308569555 <= _oY_) if(92 === caml_string_get(s, i)) state[1] = 945120947; else - escaping_error(_du_, s, [0, caml_string_get(s, i)], i); + escaping_error(_dt_, s, [0, caml_string_get(s, i)], i); else{ - var _o5_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _o5_; + var _o3_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _o3_; if(55296 <= u1[1] && 56319 >= u1[1]){state[1] = 308569555; break a;} j[1] = utf8_of_code(s$0, j[1], u1[1]); state[1] = 748194550; } - else if(297481262 <= _o0_){ - var _o6_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _o6_; + else if(297481262 <= _oY_){ + var _o4_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _o4_; state[1] = 297481263; } else{ - var _o7_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _o7_; + var _o5_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _o5_; state[1] = 297481262; } - else if(297481260 <= _o0_){ + else if(297481260 <= _oY_){ u1[1] = int_of_hexchar(caml_string_get(s, i)); state[1] = 297481261; } @@ -10623,15 +10580,15 @@ j[1] = j[1] + 1 | 0; break b; } - escaping_error(_dv_, s, [0, caml_string_get(s, i)], i); + escaping_error(_du_, s, [0, caml_string_get(s, i)], i); } } - var _o1_ = i + 1 | 0; - if(_oZ_ === i) break; - var i = _o1_; + var _oZ_ = i + 1 | 0; + if(_oX_ === i) break; + i = _oZ_; } } - if(748194550 !== state[1]) escaping_error(_dr_, s, 0, l); + if(748194550 !== state[1]) escaping_error(_dq_, s, 0, l); return j[1] !== l ? unsafe_to_string(sub(s$0, 0, j[1])) : s; } function engine(tbl, state, buf){ @@ -10640,11 +10597,11 @@ } function Make$1(Compliance){ function read$0(counter, lexbuf){ - var _oX_ = 0; + var _oV_ = 0; if(counter >= 50) - return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _oX_]); + return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _oV_]); var counter$0 = counter + 1 | 0; - return ocaml_lex_read_rec(counter$0, lexbuf, _oX_); + return ocaml_lex_read_rec(counter$0, lexbuf, _oV_); } function read(lexbuf){return caml_trampoline(read$0(0, lexbuf));} function ocaml_lex_read_rec(counter, lexbuf, ocaml_lex_state){ @@ -10655,9 +10612,9 @@ if(26 >= ocaml_lex_state$1 >>> 0) switch(ocaml_lex_state$1){ case 0: - return _dw_; + return _dv_; case 1: - return _dx_; + return _dw_; case 2: return 2; case 3: @@ -10671,19 +10628,23 @@ case 7: return caml_call1(Compliance[5], 13) ? 13 - : lex_error(symbol(_dz_, symbol(lexeme(lexbuf), _dy_))); + : lex_error + (symbol_concat(_dy_, symbol_concat(lexeme(lexbuf), _dx_))); case 8: return caml_call1(Compliance[5], 14) ? 14 - : lex_error(symbol(_dB_, symbol(lexeme(lexbuf), _dA_))); + : lex_error + (symbol_concat(_dA_, symbol_concat(lexeme(lexbuf), _dz_))); case 9: return caml_call1(Compliance[6], 11) ? 11 - : lex_error(symbol(_dD_, symbol(lexeme(lexbuf), _dC_))); + : lex_error + (symbol_concat(_dC_, symbol_concat(lexeme(lexbuf), _dB_))); case 10: return caml_call1(Compliance[6], 12) ? 12 - : lex_error(symbol(_dF_, symbol(lexeme(lexbuf), _dE_))); + : lex_error + (symbol_concat(_dE_, symbol_concat(lexeme(lexbuf), _dD_))); case 11: return 7; case 12: @@ -10707,10 +10668,10 @@ } return tok; case 18: - var _oW_ = [4, caml_float_of_string(lexeme(lexbuf))]; - return caml_call1(Compliance[2], _oW_); + var _oU_ = [4, caml_float_of_string(lexeme(lexbuf))]; + return caml_call1(Compliance[2], _oU_); case 19: - return _dG_; + return _dF_; case 20: var s = sub_lexeme(lexbuf, lexbuf[5] + 1 | 0, lexbuf[6] - 1 | 0); return [0, unescape_string(s)]; @@ -10743,19 +10704,20 @@ var counter$3 = counter + 1 | 0; return read$0(counter$3, lexbuf); default: - return lex_error(symbol(_dI_, symbol(lexeme(lexbuf), _dH_))); + return lex_error + (symbol_concat(_dH_, symbol_concat(lexeme(lexbuf), _dG_))); } caml_call1(lexbuf[1], lexbuf); - var ocaml_lex_state$0 = ocaml_lex_state$1; + ocaml_lex_state$0 = ocaml_lex_state$1; } } function read_comment$0(counter, lexbuf){ - var _oV_ = 88; + var _oT_ = 88; if(counter >= 50) return caml_trampoline_return - (ocaml_lex_read_comment_rec, [0, lexbuf, _oV_]); + (ocaml_lex_read_comment_rec, [0, lexbuf, _oT_]); var counter$0 = counter + 1 | 0; - return ocaml_lex_read_comment_rec(counter$0, lexbuf, _oV_); + return ocaml_lex_read_comment_rec(counter$0, lexbuf, _oT_); } function read_comment(lexbuf){ return caml_trampoline(read_comment$0(0, lexbuf)); @@ -10776,7 +10738,7 @@ var counter$0 = counter + 1 | 0; return read_comment$0(counter$0, lexbuf); case 2: - return lex_error(_dJ_); + return lex_error(_dI_); default: if(counter >= 50) return caml_trampoline_return(read_comment$0, [0, lexbuf]); @@ -10784,12 +10746,12 @@ return read_comment$0(counter$1, lexbuf); } caml_call1(lexbuf[1], lexbuf); - var ocaml_lex_state$0 = ocaml_lex_state$1; + ocaml_lex_state$0 = ocaml_lex_state$1; } } return [0, read]; } - var Json_error_info = [248, _dK_, caml_fresh_oo_id(0)]; + var Json_error_info = [248, _dJ_, caml_fresh_oo_id(0)]; function create_from_lexbuf(lexbuf, emsg){ var match = error_pos(lexbuf), @@ -10805,73 +10767,81 @@ var is_int = (f | 0) == f ? 1 : 0; if(is_int && Math.abs(f) <= max_json_int){ var int_value = f | 0; - return symbol(string_of_int(int_value), _dL_); + return symbol_concat(string_of_int(int_value), _dK_); } var s = caml_format_float("%.16g", f), s$0 = caml_float_of_string(s) == f ? s : caml_format_float("%.17g", f); - if(! contains(s$0, 46) && ! contains(s$0, 101)) return symbol(s$0, _dM_); + if(! contains(s$0, 46) && ! contains(s$0, 101)) + return symbol_concat(s$0, _dL_); return s$0; } function token_error(tok){ if(typeof tok === "number") switch(tok){ case 0: - var err = _dN_; break; + var err = _dM_; break; case 1: - var err = _dO_; break; + var err = _dN_; break; case 2: - var err = _dP_; break; + var err = _dO_; break; case 3: - var err = _dQ_; break; + var err = _dP_; break; case 4: - var err = _dR_; break; + var err = _dQ_; break; case 5: - var err = _dS_; break; + var err = _dR_; break; case 6: - var err = _dT_; break; + var err = _dS_; break; case 7: - var err = _dU_; break; + var err = _dT_; break; case 8: - var err = _dV_; break; + var err = _dU_; break; case 9: - var err = _dW_; break; + var err = _dV_; break; case 10: - var err = _dX_; break; + var err = _dW_; break; case 11: - var err = _dY_; break; + var err = _dX_; break; case 12: - var err = _dZ_; break; + var err = _dY_; break; case 13: - var err = _d0_; break; - default: var err = _d1_; + var err = _dZ_; break; + default: var err = _d0_; } else switch(tok[0]){ case 0: - var s = tok[1], err = symbol(_d3_, symbol(s, _d2_)); break; + var s = tok[1], err = symbol_concat(_d2_, symbol_concat(s, _d1_)); + break; case 1: var s$0 = tok[1], err = s$0; break; case 2: - var s$1 = tok[1], err = symbol(_d5_, symbol(s$1, _d4_)); break; + var s$1 = tok[1], err = symbol_concat(_d4_, symbol_concat(s$1, _d3_)); + break; case 3: - var i = tok[1], err = symbol(_d7_, symbol(string_of_int(i), _d6_)); + var + i = tok[1], + err = symbol_concat(_d6_, symbol_concat(string_of_int(i), _d5_)); break; case 4: - var f = tok[1], err = symbol(_d9_, symbol(string_of_float(f), _d8_)); + var + f = tok[1], + err = symbol_concat(_d8_, symbol_concat(string_of_float(f), _d7_)); break; case 5: - var s$2 = tok[1], err = symbol(_d$_, symbol(s$2, _d__)); break; + var s$2 = tok[1], err = symbol_concat(_d__, symbol_concat(s$2, _d9_)); + break; default: var b = tok[1], - _oU_ = b ? _eb_ : _ed_, - err = symbol(_ec_, symbol(_oU_, _ea_)); + _oS_ = b ? _ea_ : _ec_, + err = symbol_concat(_eb_, symbol_concat(_oS_, _d$_)); } return [0, 148000204, err]; } function Make$2(Compliance){ - var Parse_error = [248, _ee_, caml_fresh_oo_id(0)]; + var Parse_error = [248, _ed_, caml_fresh_oo_id(0)]; function json_value(reader){ function token_value(tok){ if(typeof tok === "number") @@ -10922,8 +10892,8 @@ if(typeof tok$0 === "number"){ if(7 === tok$0) return array_values([0, v, acc]); if(10 === tok$0){ - var _oT_ = rev([0, v, acc]); - return caml_call1(Compliance[16], _oT_); + var _oR_ = rev([0, v, acc]); + return caml_call1(Compliance[16], _oR_); } } throw caml_maybe_attach_backtrace @@ -10934,10 +10904,10 @@ for(;;){ var v = value(0), tok = caml_call1(reader, 0); if(typeof tok === "number"){ - if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} if(10 === tok){ - var _oS_ = rev([0, v, acc$0]); - return caml_call1(Compliance[16], _oS_); + var _oQ_ = rev([0, v, acc$0]); + return caml_call1(Compliance[16], _oQ_); } } throw caml_maybe_attach_backtrace @@ -10954,8 +10924,8 @@ var v = colon_value(tok, 0), tok$0 = caml_call1(reader, 0); if(typeof tok$0 === "number"){ if(1 === tok$0){ - var _oR_ = rev([0, v, acc]); - return caml_call1(Compliance[15], _oR_); + var _oP_ = rev([0, v, acc]); + return caml_call1(Compliance[15], _oP_); } if(7 === tok$0) return object_values([0, v, acc]); } @@ -10968,10 +10938,10 @@ var v = key_colon_value(0), tok = caml_call1(reader, 0); if(typeof tok === "number"){ if(1 === tok){ - var _oQ_ = rev([0, v, acc$0]); - return caml_call1(Compliance[15], _oQ_); + var _oO_ = rev([0, v, acc$0]); + return caml_call1(Compliance[15], _oO_); } - if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} } throw caml_maybe_attach_backtrace ([0, Parse_error, token_error(tok)], 1); @@ -11010,7 +10980,7 @@ ([0, Parse_error, token_error(tok$0)], 1); } if(14 <= tok) - throw caml_maybe_attach_backtrace([0, Parse_error, _ef_], 1); + throw caml_maybe_attach_backtrace([0, Parse_error, _ee_], 1); } throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); } @@ -11019,10 +10989,10 @@ for(;;){ var v = value(0), tok = caml_call1(reader, 0); if(typeof tok === "number"){ - if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} if(14 <= tok){ - var _oP_ = rev([0, v, acc$0]); - return caml_call1(Compliance[17], _oP_); + var _oN_ = rev([0, v, acc$0]); + return caml_call1(Compliance[17], _oN_); } } throw caml_maybe_attach_backtrace @@ -11033,7 +11003,7 @@ var tok = caml_call1(reader, 0); if(typeof tok === "number"){ if(12 === tok) - throw caml_maybe_attach_backtrace([0, Parse_error, _eg_], 1); + throw caml_maybe_attach_backtrace([0, Parse_error, _ef_], 1); } else if(0 === tok[0]){ var k = tok[1], tok$0 = caml_call1(reader, 0); @@ -11067,7 +11037,7 @@ var exn = caml_wrap_exception(exn$0); if(exn[1] === Parse_error){ var match = exn[2]; - if(typeof match === "number") return _eh_; + if(typeof match === "number") return _eg_; var err = match[2]; return [1, err]; } @@ -11080,22 +11050,22 @@ return [0, Compliance, decode]; } function nibble_to_hex(i){ - var _oO_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_oO_); + var _oM_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_oM_); } function add_hex_byte(add_char, i){ caml_call1(add_char, nibble_to_hex((i >>> 4 | 0) & 15)); return caml_call1(add_char, nibble_to_hex(i & 15)); } function escape(add_char, add_string, s){ - var l = caml_ml_string_length(s), _oM_ = l - 1 | 0, _oL_ = 0; - if(_oM_ >= 0){ - var i = _oL_; + var l = caml_ml_string_length(s), _oK_ = l - 1 | 0, _oJ_ = 0; + if(_oK_ >= 0){ + var i = _oJ_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - caml_call1(add_string, _ei_); + caml_call1(add_string, _eh_); else{ b: { @@ -11105,17 +11075,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - caml_call1(add_string, _ek_); break; + caml_call1(add_string, _ej_); break; case 1: - caml_call1(add_string, _el_); break; + caml_call1(add_string, _ek_); break; case 2: - caml_call1(add_string, _em_); break; + caml_call1(add_string, _el_); break; case 4: - caml_call1(add_string, _en_); break; + caml_call1(add_string, _em_); break; case 5: - caml_call1(add_string, _eo_); break; + caml_call1(add_string, _en_); break; case 26: - caml_call1(add_string, _ep_); break; + caml_call1(add_string, _eo_); break; case 24: case 25: break c; @@ -11128,12 +11098,12 @@ caml_call1(add_char, caml_string_get(s, i)); break a; } - caml_call1(add_string, _ej_); + caml_call1(add_string, _ei_); add_hex_byte(add_char, c); } - var _oN_ = i + 1 | 0; - if(_oM_ === i) break; - var i = _oN_; + var _oL_ = i + 1 | 0; + if(_oK_ === i) break; + i = _oL_; } } return; @@ -11141,8 +11111,8 @@ function Make$3(Compliance){ function to_json_string(s){ var buf = create$1(100); - function add_char$0(_oK_){return add_char(buf, _oK_);} - function add_string$0(_oJ_){return add_string(buf, _oJ_);} + function add_char$0(_oI_){return add_char(buf, _oI_);} + function add_string$0(_oH_){return add_string(buf, _oH_);} function add_quote_string(s){ add_char$0(34); escape(add_char$0, add_string$0, s); @@ -11153,68 +11123,68 @@ } function pp_list(sep, ppx, out, l){ function pp_sep(out, param){ - return caml_call1(fprintf$0(out)(_eq_), sep); + return caml_call1(fprintf$0(out)(_ep_), sep); } return pp_print_list([0, pp_sep], ppx, out, l); } function format(out, json){ - if(typeof json === "number") return pp_print_string(out, _er_); - var _oA_ = json[1]; - if(726928360 <= _oA_){ - if(737456202 === _oA_){var b = json[2]; return pp_print_bool(out, b);} - if(928231259 > _oA_){ - if(848054398 <= _oA_){ + if(typeof json === "number") return pp_print_string(out, _eq_); + var _oy_ = json[1]; + if(726928360 <= _oy_){ + if(737456202 === _oy_){var b = json[2]; return pp_print_bool(out, b);} + if(928231259 > _oy_){ + if(848054398 <= _oy_){ var l$0 = json[2]; return l$0 ? caml_call2 - (fprintf$0(out)(_ew_), - function(_oH_, _oI_){ - return pp_list(_ev_, format, _oH_, _oI_); + (fprintf$0(out)(_ev_), + function(_oF_, _oG_){ + return pp_list(_eu_, format, _oF_, _oG_); }, l$0) - : pp_print_string(out, _ex_); + : pp_print_string(out, _ew_); } var l$1 = json[2]; return 0 === l$1 - ? pp_print_string(out, _ey_) + ? pp_print_string(out, _ex_) : caml_call2 - (fprintf$0(out)(_eA_), - function(_oF_, _oG_){ - return pp_list(_ez_, format, _oF_, _oG_); + (fprintf$0(out)(_ez_), + function(_oD_, _oE_){ + return pp_list(_ey_, format, _oD_, _oE_); }, l$1); } - if(963043957 <= _oA_){ + if(963043957 <= _oy_){ var l = json[2]; return l ? caml_call2 - (fprintf$0(out)(_et_), - function(_oD_, _oE_){ - return pp_list(_es_, format_field, _oD_, _oE_); + (fprintf$0(out)(_es_), + function(_oB_, _oC_){ + return pp_list(_er_, format_field, _oB_, _oC_); }, l) - : pp_print_string(out, _eu_); + : pp_print_string(out, _et_); } } else{ - if(3654863 === _oA_){ + if(3654863 === _oy_){ var i = json[2]; return pp_print_string(out, string_of_int(i)); } - if(365180284 <= _oA_){ - if(708012133 > _oA_){ + if(365180284 <= _oy_){ + if(708012133 > _oy_){ var f = json[2], s$2 = caml_call1(Compliance[8], f); return pp_print_string(out, s$2); } - var _oB_ = json[2], match = _oB_[2], s$0 = _oB_[1]; + var _oz_ = json[2], match = _oz_[2], s$0 = _oz_[1]; if(match){ var json$0 = match[1], s$1 = to_json_string(s$0); - return caml_call3(fprintf$0(out)(_eB_), s$1, format, json$0); + return caml_call3(fprintf$0(out)(_eA_), s$1, format, json$0); } - var _oC_ = to_json_string(s$0); - return caml_call1(fprintf$0(out)(_eC_), _oC_); + var _oA_ = to_json_string(s$0); + return caml_call1(fprintf$0(out)(_eB_), _oA_); } - if(-752863768 > _oA_){ + if(-752863768 > _oy_){ var s$3 = json[2]; return pp_print_string(out, to_json_string(s$3)); } @@ -11223,18 +11193,18 @@ return pp_print_string(out, s); } function format_field(out, param){ - var json = param[2], name = param[1], _oz_ = to_json_string(name); - return caml_call3(fprintf$0(out)(_eD_), _oz_, format, json); + var json = param[2], name = param[1], _ox_ = to_json_string(name); + return caml_call3(fprintf$0(out)(_eC_), _ox_, format, json); } function pretty_print(out, json){ - return caml_call2(fprintf$0(out)(_eE_), format, json); + return caml_call2(fprintf$0(out)(_eD_), format, json); } function pretty_print_to_string(json){ - return caml_call2(asprintf(_eF_), pretty_print, json); + return caml_call2(asprintf(_eE_), pretty_print, json); } function pretty_print_to_channel(oc, json){ var fmt = formatter_of_out_channel(oc); - return caml_call2(fprintf$0(fmt)(_eG_), pretty_print, json); + return caml_call2(fprintf$0(fmt)(_eF_), pretty_print, json); } return [0, , @@ -11245,9 +11215,9 @@ pretty_print_to_string, pretty_print_to_channel]; } - function _eH_(_ox_){ - var _oy_ = Make$3(_ox_); - return [0, _oy_[5], _oy_[6], _oy_[7]]; + function _eG_(_ov_){ + var _ow_ = Make$3(_ov_); + return [0, _ow_[5], _ow_[6], _ow_[7]]; } function error$2(msg, json){ throw caml_maybe_attach_backtrace([0, Failure, msg], 1); @@ -11255,58 +11225,58 @@ function Strict(M){ function to_assoc(json){ if(typeof json !== "number" && 963043957 === json[1]){var obj = json[2]; return obj;} - return error$2(_eI_, json); + return error$2(_eH_, json); } function to_string(json){ if(typeof json !== "number" && -976970511 === json[1]){var s = json[2]; return s;} - return error$2(_eJ_, json); + return error$2(_eI_, json); } return [0, , , , to_assoc, , , to_string]; } function null$1(param){return 870828711;} var M = [0, null$1], - _eK_ = Strict(M), - to_assoc = _eK_[4], - to_string$2 = _eK_[7]; + _eJ_ = Strict(M), + to_assoc = _eJ_[4], + to_string$2 = _eJ_[7]; function token_to_string(tok){ if(typeof tok === "number") switch(tok){ case 0: - return _eL_; + return _eK_; case 1: - return _eM_; + return _eL_; case 2: - return _eN_; + return _eM_; case 3: - return _eO_; + return _eN_; case 4: - return _eP_; + return _eO_; case 5: - return _eQ_; + return _eP_; case 6: - return _eR_; + return _eQ_; case 7: - return _eS_; + return _eR_; case 8: - return _eT_; + return _eS_; case 9: - return _eU_; + return _eT_; case 10: - return _eV_; + return _eU_; case 11: - return _eW_; + return _eV_; case 12: - return _eX_; + return _eW_; case 13: - return _eY_; - default: return _eZ_; + return _eX_; + default: return _eY_; } switch(tok[0]){ case 0: var s = tok[1]; return s; case 1: - var err = tok[1]; return symbol(_e1_, symbol(err, _e0_)); + var err = tok[1]; return symbol_concat(_e0_, symbol_concat(err, _eZ_)); case 2: var s$0 = tok[1]; return s$0; case 3: @@ -11315,7 +11285,7 @@ var f = tok[1]; return string_of_float(f); case 5: var err$0 = tok[1]; return err$0; - default: var b = tok[1]; return b ? _e2_ : _e3_; + default: var b = tok[1]; return b ? _e1_ : _e2_; } } function Make$4(Lexxer, Parser){ @@ -11324,7 +11294,7 @@ var match = caml_call1(Parser[2], reader); if(0 !== match[0]){var s = match[1]; return [1, s];} var match$0 = match[1]; - if(! match$0) return _e5_; + if(! match$0) return _e4_; var res = match$0[1]; try{var tok = reader(0);} catch(exn$0){ @@ -11334,7 +11304,7 @@ return [1, err]; } if(typeof tok === "number" && 6 === tok) return [0, res]; - return [1, symbol(_e4_, token_to_string(tok))]; + return [1, symbol_concat(_e3_, token_to_string(tok))]; } function read_json_error_info(lexbuf){ var res = read_json(lexbuf); @@ -11373,27 +11343,27 @@ var res = match$0[1]; a: if(stream) - var _ot_ = [0, [0, res]]; + var _or_ = [0, [0, res]]; else{ try{var tok = reader(0);} catch(exn$0){ var exn = caml_wrap_exception(exn$0); if(exn[1] !== Lex_error) throw caml_maybe_attach_backtrace(exn, 0); - var err = exn[2], _ov_ = [1, err], _ot_ = _ov_; + var err = exn[2], _ot_ = [1, err], _or_ = _ot_; break a; } b: { - if(typeof tok === "number" && 6 === tok){var _ow_ = [0, [0, res]]; break b;} - var _ow_ = [1, symbol(_e6_, token_to_string(tok))]; + if(typeof tok === "number" && 6 === tok){var _ou_ = [0, [0, res]]; break b;} + var _ou_ = [1, symbol_concat(_e5_, token_to_string(tok))]; } - var _ot_ = _ow_; + var _or_ = _ou_; } - var _ou_ = _ot_; + var _os_ = _or_; } else - var _ou_ = stream ? _e7_ : _e8_; - var res$0 = _ou_; + var _os_ = stream ? _e6_ : _e7_; + var res$0 = _os_; } else var s$0 = match[1], res$0 = [1, s$0]; @@ -11472,24 +11442,24 @@ } function Make$5(Compliance){ function nibble_to_hex(i){ - var _os_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_os_); + var _oq_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_oq_); } function add_hex_byte(oc, i){ _j_(oc, nibble_to_hex((i >>> 4 | 0) & 15)); return _j_(oc, nibble_to_hex(i & 15)); } function escape(oc, s){ - function add_char(_or_){return _j_(oc, _or_);} - function add_string(_oq_){return output_string(oc, _oq_);} - var l = caml_ml_string_length(s), _oo_ = l - 1 | 0, _on_ = 0; - if(_oo_ >= 0){ - var i = _on_; + function add_char(_op_){return _j_(oc, _op_);} + function add_string(_oo_){return output_string(oc, _oo_);} + var l = caml_ml_string_length(s), _om_ = l - 1 | 0, _ol_ = 0; + if(_om_ >= 0){ + var i = _ol_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - add_string(_e9_); + add_string(_e8_); else{ b: { @@ -11499,17 +11469,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - add_string(_e$_); break; + add_string(_e__); break; case 1: - add_string(_fa_); break; + add_string(_e$_); break; case 2: - add_string(_fb_); break; + add_string(_fa_); break; case 4: - add_string(_fc_); break; + add_string(_fb_); break; case 5: - add_string(_fd_); break; + add_string(_fc_); break; case 26: - add_string(_fe_); break; + add_string(_fd_); break; case 24: case 25: break c; @@ -11522,19 +11492,19 @@ add_char(caml_string_get(s, i)); break a; } - add_string(_e__); + add_string(_e9_); add_hex_byte(oc, c); } - var _op_ = i + 1 | 0; - if(_oo_ === i) break; - var i = _op_; + var _on_ = i + 1 | 0; + if(_om_ === i) break; + i = _on_; } } return; } function json_to_channel_fmt(oc, json, eol, incr, psep){ - function add_char(_om_){return _j_(oc, _om_);} - function add_string(_ol_){return output_string(oc, _ol_);} + function add_char(_ok_){return _j_(oc, _ok_);} + function add_string(_oj_){return output_string(oc, _oj_);} function add_quote_string(s){ add_char(34); escape(oc, s); @@ -11542,13 +11512,13 @@ } function add_int(i){return add_string(string_of_int(i));} function add_float(f){return add_string(caml_call1(Compliance[8], f));} - var psep$0 = symbol(_ff_, psep); + var psep$0 = symbol_concat(_fe_, psep); function fmt(off, value){ - if(typeof value === "number") return add_string(_fg_); - var _ok_ = value[1]; - if(708012133 <= _ok_){ - if(737456202 > _ok_){ - if(726928360 <= _ok_){ + if(typeof value === "number") return add_string(_ff_); + var _oi_ = value[1]; + if(708012133 <= _oi_){ + if(737456202 > _oi_){ + if(726928360 <= _oi_){ var t = value[2], ldr$1 = make$1(off, 32); add_char(40); add_string(eol); @@ -11565,8 +11535,8 @@ add_string(ldr$2); return add_char(62); } - if(928231259 <= _ok_){ - if(963043957 <= _ok_){ + if(928231259 <= _oi_){ + if(963043957 <= _oi_){ var o = value[2], ldr = make$1(off, 32); add_char(123); add_string(eol); @@ -11578,7 +11548,7 @@ var s = value[2]; return add_string(s); } - if(848054398 <= _ok_){ + if(848054398 <= _oi_){ var l = value[2], ldr$0 = make$1(off, 32); add_char(91); add_string(eol); @@ -11590,13 +11560,13 @@ var b = value[2]; return add_string(string_of_bool(b)); } - if(-752863768 === _ok_){var s$0 = value[2]; return add_string(s$0);} - if(3654863 <= _ok_){ - if(365180284 <= _ok_){var f = value[2]; return add_float(f);} + if(-752863768 === _oi_){var s$0 = value[2]; return add_string(s$0);} + if(3654863 <= _oi_){ + if(365180284 <= _oi_){var f = value[2]; return add_float(f);} var i = value[2]; return add_int(i); } - if(-375152890 <= _ok_){var s$1 = value[2]; return add_string(s$1);} + if(-375152890 <= _oi_){var s$1 = value[2]; return add_string(s$1);} var s$2 = value[2]; return add_quote_string(s$2); } @@ -11604,7 +11574,7 @@ var ldr = make$1(off, 32), sep = [0, ldr], - newsep = symbol(_fh_, symbol(eol, ldr)); + newsep = symbol_concat(_fg_, symbol_concat(eol, ldr)); return iter (function(v){ add_string(sep[1]); @@ -11623,7 +11593,7 @@ var ldr = make$1(off, 32), sep = [0, ldr], - newsep = symbol(_fi_, symbol(eol, ldr)); + newsep = symbol_concat(_fh_, symbol_concat(eol, ldr)); return iter (function(v){ add_string(sep[1]); @@ -11643,11 +11613,11 @@ fmt(0, json); return add_string(eol); } - function json_to_channel(_od_){ - function _oe_(_og_, _oh_, _oi_, _oj_){ - return json_to_channel_fmt(_od_, _og_, _oh_, _oi_, _oj_); + function json_to_channel(_ob_){ + function _oc_(_oe_, _of_, _og_, _oh_){ + return json_to_channel_fmt(_ob_, _oe_, _of_, _og_, _oh_); } - return function(_of_){return _oe_(_of_, _fk_, 0, _fj_);}; + return function(_od_){return _oc_(_od_, _fj_, 0, _fi_);}; } function json_to_file_exn(file, json){ var oc = open_out(file); @@ -11662,24 +11632,24 @@ } function Make$6(Compliance){ function nibble_to_hex(i){ - var _oc_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_oc_); + var _oa_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_oa_); } function add_hex_byte(buf, i){ add_char(buf, nibble_to_hex((i >>> 4 | 0) & 15)); return add_char(buf, nibble_to_hex(i & 15)); } function escape(buf, s){ - function add_char$0(_ob_){return add_char(buf, _ob_);} - function add_string$0(_oa_){return add_string(buf, _oa_);} - var l = caml_ml_string_length(s), _n__ = l - 1 | 0, _n9_ = 0; - if(_n__ >= 0){ - var i = _n9_; + function add_char$0(_n$_){return add_char(buf, _n$_);} + function add_string$0(_n__){return add_string(buf, _n__);} + var l = caml_ml_string_length(s), _n8_ = l - 1 | 0, _n7_ = 0; + if(_n8_ >= 0){ + var i = _n7_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - add_string$0(_fl_); + add_string$0(_fk_); else{ b: { @@ -11689,17 +11659,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - add_string$0(_fn_); break; + add_string$0(_fm_); break; case 1: - add_string$0(_fo_); break; + add_string$0(_fn_); break; case 2: - add_string$0(_fp_); break; + add_string$0(_fo_); break; case 4: - add_string$0(_fq_); break; + add_string$0(_fp_); break; case 5: - add_string$0(_fr_); break; + add_string$0(_fq_); break; case 26: - add_string$0(_fs_); break; + add_string$0(_fr_); break; case 24: case 25: break c; @@ -11712,19 +11682,19 @@ add_char$0(caml_string_get(s, i)); break a; } - add_string$0(_fm_); + add_string$0(_fl_); add_hex_byte(buf, c); } - var _n$_ = i + 1 | 0; - if(_n__ === i) break; - var i = _n$_; + var _n9_ = i + 1 | 0; + if(_n8_ === i) break; + i = _n9_; } } return; } function json_to_buffer(buf, json){ - function add_char$0(_n8_){return add_char(buf, _n8_);} - function add_string$0(_n7_){return add_string(buf, _n7_);} + function add_char$0(_n6_){return add_char(buf, _n6_);} + function add_string$0(_n5_){return add_string(buf, _n5_);} function add_quote_string(s){ add_char$0(34); escape(buf, s); @@ -11733,11 +11703,11 @@ function add_int(i){return add_string$0(string_of_int(i));} function add_float(f){return add_string$0(caml_call1(Compliance[8], f));} function fmt(value){ - if(typeof value === "number") return add_string$0(_ft_); - var _n6_ = value[1]; - if(708012133 <= _n6_){ - if(737456202 > _n6_){ - if(726928360 <= _n6_){ + if(typeof value === "number") return add_string$0(_fs_); + var _n4_ = value[1]; + if(708012133 <= _n4_){ + if(737456202 > _n4_){ + if(726928360 <= _n4_){ var t = value[2]; add_char$0(40); json_list(t); @@ -11748,8 +11718,8 @@ variant(v); return add_char$0(62); } - if(928231259 <= _n6_){ - if(963043957 <= _n6_){ + if(928231259 <= _n4_){ + if(963043957 <= _n4_){ var o = value[2]; add_char$0(123); json_assoc(o); @@ -11758,7 +11728,7 @@ var s = value[2]; return add_string$0(s); } - if(848054398 <= _n6_){ + if(848054398 <= _n4_){ var l = value[2]; add_char$0(91); json_list(l); @@ -11767,22 +11737,22 @@ var b = value[2]; return add_string$0(string_of_bool(b)); } - if(-752863768 === _n6_){var s$0 = value[2]; return add_string$0(s$0);} - if(3654863 <= _n6_){ - if(365180284 <= _n6_){var f = value[2]; return add_float(f);} + if(-752863768 === _n4_){var s$0 = value[2]; return add_string$0(s$0);} + if(3654863 <= _n4_){ + if(365180284 <= _n4_){var f = value[2]; return add_float(f);} var i = value[2]; return add_int(i); } - if(-375152890 <= _n6_){var s$1 = value[2]; return add_string$0(s$1);} + if(-375152890 <= _n4_){var s$1 = value[2]; return add_string$0(s$1);} var s$2 = value[2]; return add_quote_string(s$2); } function json_assoc(o){ - var sep = [0, _fu_]; + var sep = [0, _ft_]; return iter (function(v){ add_string$0(sep[1]); - sep[1] = _fv_; + sep[1] = _fu_; return pair(v); }, o); @@ -11794,11 +11764,11 @@ return fmt(v); } function json_list(l){ - var sep = [0, _fw_]; + var sep = [0, _fv_]; return iter (function(v){ add_string$0(sep[1]); - sep[1] = _fx_; + sep[1] = _fw_; return fmt(v); }, l); @@ -11820,7 +11790,7 @@ } return [0, , , json_to_string, , , , , , , , json_to_buffer]; } - var Json_error = [248, _fy_, caml_fresh_oo_id(0)]; + var Json_error = [248, _fx_, caml_fresh_oo_id(0)]; function json_error(msg){ throw caml_maybe_attach_backtrace([0, Json_error, msg], 1); } @@ -11828,7 +11798,7 @@ var Lexxer = Make$1(Compliance), Parser = Make$2(Compliance), - include = function(_n5_){return Make$4(Lexxer, _n5_);}(Parser), + include = function(_n3_){return Make$4(Lexxer, _n3_);}(Parser), json_of_string_error_info = include[15], json_of_file_error_info = include[16], json_of_channel_error_info = include[17], @@ -11874,16 +11844,18 @@ function error_to_string(error_info, fname, lnum){ if(lnum) var lnum$0 = lnum[1], lnum$1 = lnum$0; else var lnum$1 = 1; var - _n1_ = error_info[4], - _n2_ = error_info[3], - _n3_ = error_info[2], - _n4_ = (lnum$1 + error_info[1] | 0) - 1 | 0; + _nZ_ = error_info[4], + _n0_ = error_info[3], + _n1_ = error_info[2], + _n2_ = (lnum$1 + error_info[1] | 0) - 1 | 0; if(fname) - var name = fname[1], fname$0 = symbol(_fA_, symbol(name, _fz_)); + var + name = fname[1], + fname$0 = symbol_concat(_fz_, symbol_concat(name, _fy_)); else - var fname$0 = _fC_; - var loc = caml_call4(sprintf(_fB_), fname$0, _n4_, _n3_, _n2_); - return symbol(loc, _n1_); + var fname$0 = _fB_; + var loc = caml_call4(sprintf(_fA_), fname$0, _n2_, _n1_, _n0_); + return symbol_concat(loc, _nZ_); } function apply_and_handle_errors(f, a, fname, lnum){ var match = caml_call1(f, a); @@ -11898,13 +11870,13 @@ } function Common_writer(Compliance){ var - _nW_ = Make$6(Compliance), - to_string = _nW_[3], - to_buffer = _nW_[11], - _nX_ = Make$5(Compliance), - to_file = _nX_[9], - to_channel = _nX_[11], - include = _eH_(Compliance), + _nU_ = Make$6(Compliance), + to_string = _nU_[3], + to_buffer = _nU_[11], + _nV_ = Make$5(Compliance), + to_file = _nV_[9], + to_channel = _nV_[11], + include = _eG_(Compliance), pretty_print = include[1], pretty_print_to_string = include[2], pretty_print_to_channel = include[3], @@ -11944,14 +11916,14 @@ function to_standard(json){ function map(node){ if(typeof node === "number") return 870828711; - var _n0_ = node[1]; - if(708012133 > _n0_){ - if(-752863768 === _n0_){ + var _nY_ = node[1]; + if(708012133 > _nY_){ + if(-752863768 === _nY_){ var v$1 = node[2]; return [0, -976970511, v$1]; } - if(3654863 <= _n0_) return 365180284 <= _n0_ ? node : node; - if(-375152890 > _n0_) return node; + if(3654863 <= _nY_) return 365180284 <= _nY_ ? node : node; + if(-375152890 > _nY_) return node; var s = node[2]; return 1 < caml_ml_string_length(s) >>> 0 ? [0, @@ -11959,8 +11931,8 @@ sub$0(s, 1, caml_ml_string_length(s) - 2 | 0)] : [0, -976970511, s]; } - if(737456202 > _n0_){ - if(726928360 <= _n0_){ + if(737456202 > _nY_){ + if(726928360 <= _nY_){ var tpl = node[2]; return [0, 848054398, map$1(map, tpl)]; } @@ -11969,12 +11941,12 @@ var v$0 = jopt[1]; return [0, 848054398, [0, [0, -976970511, name], [0, map(v$0), 0]]]; } - if(928231259 > _n0_){ - if(848054398 > _n0_) return node; + if(928231259 > _nY_){ + if(848054398 > _nY_) return node; var l = node[2]; return [0, 848054398, map$1(map, l)]; } - if(963043957 <= _n0_){ + if(963043957 <= _nY_){ var a = node[2]; return [0, 963043957, @@ -11990,26 +11962,26 @@ } return map(json); } - function to_string$0(param, _nY_, opt, json){ + function to_string$0(param, _nW_, opt, json){ if(opt) var sth = opt[1], std = sth; else var std = 0; if(! std) return Internal_writer[3].call(null, json); - var _nZ_ = to_standard(json); - return Internal_writer[3].call(null, _nZ_); + var _nX_ = to_standard(json); + return Internal_writer[3].call(null, _nX_); } return [0, , , to_string$0]; } function lex_string(s){return unescape_string(s);} function lex_number(token){return token;} function lex_integer(token){return token;} - function lex_largeint(param){return _fD_;} + function lex_largeint(param){return _fC_;} function lex_variant(param){return 0;} function lex_tuple(param){return 0;} - function comment_check(param){return _fE_;} + function comment_check(param){return _fD_;} function number_to_string(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _fF_ : _fG_ - : 4 <= match ? _fH_ : string_of_float_json(f); + ? f < 0. ? _fE_ : _fF_ + : 4 <= match ? _fG_ : string_of_float_json(f); } function largeint(s){return [0, 365180284, caml_float_of_string(s)];} function integer(i){return [0, 3654863, i];} @@ -12019,10 +11991,10 @@ function assoc(a){return [0, 963043957, a];} function list(l){return [0, 848054398, l];} function tuple(l){ - throw caml_maybe_attach_backtrace([0, Failure, _fI_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fH_], 1); } function variant(l){ - throw caml_maybe_attach_backtrace([0, Failure, _fJ_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fI_], 1); } function number(param){ if(typeof param === "number") @@ -12033,7 +12005,7 @@ ? [0, 365180284, Infinity] : [0, 365180284, -Infinity]; if(928231259 <= param[1]) - throw caml_maybe_attach_backtrace([0, Failure, _fK_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fJ_], 1); var f = param[2]; return [0, 365180284, f]; } @@ -12042,16 +12014,16 @@ function object_start(param){return 17732;} function object_end(param){return 17718;} function tuple_start(param){ - throw caml_maybe_attach_backtrace([0, Failure, _fL_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fK_], 1); } function tuple_end(param){ - throw caml_maybe_attach_backtrace([0, Failure, _fM_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fL_], 1); } function variant_start(param){ - throw caml_maybe_attach_backtrace([0, Failure, _fN_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fM_], 1); } function variant_end(param){ - throw caml_maybe_attach_backtrace([0, Failure, _fO_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fN_], 1); } function name(s){return [0, 869834347, s];} Common_reader @@ -12132,12 +12104,12 @@ function lex_largeint$0(token){return token;} function lex_variant$0(param){return 1;} function lex_tuple$0(param){return 1;} - function comment_check$0(param){return _fP_;} + function comment_check$0(param){return _fO_;} function number_to_string$0(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _fQ_ : _fR_ - : 4 <= match ? _fS_ : string_of_float_json(f); + ? f < 0. ? _fP_ : _fQ_ + : 4 <= match ? _fR_ : string_of_float_json(f); } function largeint$0(s){return [0, -752863768, s];} function integer$0(i){return [0, 3654863, i];} @@ -12157,7 +12129,7 @@ ? [0, 365180284, Infinity] : [0, 365180284, -Infinity]; if(928231259 <= param[1]) - throw caml_maybe_attach_backtrace([0, Failure, _fT_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fS_], 1); var f = param[2]; return [0, 365180284, f]; } @@ -12247,18 +12219,20 @@ variant_end$0, name$0]]), to_string$3 = include[3]; - function lex_string$1(s){return symbol(_fV_, symbol(s, _fU_));} + function lex_string$1(s){ + return symbol_concat(_fU_, symbol_concat(s, _fT_)); + } function lex_number$1(token){return token;} function lex_integer$1(token){return token;} function lex_largeint$1(token){return token;} function lex_variant$1(param){return 1;} function lex_tuple$1(param){return 1;} - function comment_check$1(param){return _fW_;} + function comment_check$1(param){return _fV_;} function number_to_string$1(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _fX_ : _fY_ - : 4 <= match ? _fZ_ : string_of_float_json(f); + ? f < 0. ? _fW_ : _fX_ + : 4 <= match ? _fY_ : string_of_float_json(f); } function largeint$1(s){return [0, -752863768, s];} function integer$1(i){return [0, -752863768, string_of_int(i)];} @@ -12271,7 +12245,7 @@ function variant$1(k, v){return [0, 708012133, [0, k, v]];} function number$1(param){ if(typeof param === "number") - return 3900603 === param ? _f0_ : 874173192 <= param ? _f1_ : _f2_; + return 3900603 === param ? _fZ_ : 874173192 <= param ? _f0_ : _f1_; if(928231259 <= param[1]){var f = param[2]; return [0, 928231259, f];} var f$0 = param[2]; return [0, 928231259, string_of_float(f$0)]; @@ -12367,68 +12341,68 @@ r3 = caml_call1(rand, 0), r4 = caml_call1(rand, 0), u = caml_create_bytes(16), - _mq_ = 0; - function _mr_(_nV_, _nU_, _nT_){caml_bytes_set(_nV_, _nU_, _nT_); return;} - (function(_nS_){return _mr_(u, _mq_, _nS_);}(r0 & 255)); - var _ms_ = 1; - function _mt_(_nR_, _nQ_, _nP_){caml_bytes_set(_nR_, _nQ_, _nP_); return;} - (function(_nO_){return _mt_(u, _ms_, _nO_);}((r0 >>> 8 | 0) & 255)); - var _mu_ = 2; - function _mv_(_nN_, _nM_, _nL_){caml_bytes_set(_nN_, _nM_, _nL_); return;} - (function(_nK_){return _mv_(u, _mu_, _nK_);}((r0 >>> 16 | 0) & 255)); - var _mw_ = 3; - function _mx_(_nJ_, _nI_, _nH_){caml_bytes_set(_nJ_, _nI_, _nH_); return;} - (function(_nG_){return _mx_(u, _mw_, _nG_);}(r1 & 255)); - var _my_ = 4; - function _mz_(_nF_, _nE_, _nD_){caml_bytes_set(_nF_, _nE_, _nD_); return;} - (function(_nC_){return _mz_(u, _my_, _nC_);}((r1 >>> 8 | 0) & 255)); - var _mA_ = 5; - function _mB_(_nB_, _nA_, _nz_){caml_bytes_set(_nB_, _nA_, _nz_); return;} - (function(_ny_){return _mB_(u, _mA_, _ny_);}((r1 >>> 16 | 0) & 255)); - var _mC_ = 6; - function _mD_(_nx_, _nw_, _nv_){caml_bytes_set(_nx_, _nw_, _nv_); return;} - (function(_nu_){return _mD_(u, _mC_, _nu_);}(64 | (r1 >>> 24 | 0) & 15)); - var _mE_ = 7; - function _mF_(_nt_, _ns_, _nr_){caml_bytes_set(_nt_, _ns_, _nr_); return;} - (function(_nq_){return _mF_(u, _mE_, _nq_);}(r2 & 255)); - var _mG_ = 8; - function _mH_(_np_, _no_, _nn_){caml_bytes_set(_np_, _no_, _nn_); return;} - (function(_nm_){return _mH_(u, _mG_, _nm_);}(128 | (r2 >>> 24 | 0) & 63)); - var _mI_ = 9; - function _mJ_(_nl_, _nk_, _nj_){caml_bytes_set(_nl_, _nk_, _nj_); return;} - (function(_ni_){return _mJ_(u, _mI_, _ni_);}((r2 >>> 8 | 0) & 255)); - var _mK_ = 10; - function _mL_(_nh_, _ng_, _nf_){caml_bytes_set(_nh_, _ng_, _nf_); return;} - (function(_ne_){return _mL_(u, _mK_, _ne_);}((r2 >>> 16 | 0) & 255)); - var _mM_ = 11; - function _mN_(_nd_, _nc_, _nb_){caml_bytes_set(_nd_, _nc_, _nb_); return;} - (function(_na_){return _mN_(u, _mM_, _na_);}(r3 & 255)); - var _mO_ = 12; - function _mP_(_m$_, _m__, _m9_){caml_bytes_set(_m$_, _m__, _m9_); return;} - (function(_m8_){return _mP_(u, _mO_, _m8_);}((r3 >>> 8 | 0) & 255)); - var _mQ_ = 13; - function _mR_(_m7_, _m6_, _m5_){caml_bytes_set(_m7_, _m6_, _m5_); return;} - (function(_m4_){return _mR_(u, _mQ_, _m4_);}((r3 >>> 16 | 0) & 255)); - var _mS_ = 14; - function _mT_(_m3_, _m2_, _m1_){caml_bytes_set(_m3_, _m2_, _m1_); return;} - (function(_m0_){return _mT_(u, _mS_, _m0_);}(r4 & 255)); - var _mU_ = 15; - function _mV_(_mZ_, _mY_, _mX_){caml_bytes_set(_mZ_, _mY_, _mX_); return;} - (function(_mW_){return _mV_(u, _mU_, _mW_);}((r4 >>> 8 | 0) & 255)); + _mo_ = 0; + function _mp_(_nT_, _nS_, _nR_){caml_bytes_set(_nT_, _nS_, _nR_); return;} + (function(_nQ_){return _mp_(u, _mo_, _nQ_);}(r0 & 255)); + var _mq_ = 1; + function _mr_(_nP_, _nO_, _nN_){caml_bytes_set(_nP_, _nO_, _nN_); return;} + (function(_nM_){return _mr_(u, _mq_, _nM_);}((r0 >>> 8 | 0) & 255)); + var _ms_ = 2; + function _mt_(_nL_, _nK_, _nJ_){caml_bytes_set(_nL_, _nK_, _nJ_); return;} + (function(_nI_){return _mt_(u, _ms_, _nI_);}((r0 >>> 16 | 0) & 255)); + var _mu_ = 3; + function _mv_(_nH_, _nG_, _nF_){caml_bytes_set(_nH_, _nG_, _nF_); return;} + (function(_nE_){return _mv_(u, _mu_, _nE_);}(r1 & 255)); + var _mw_ = 4; + function _mx_(_nD_, _nC_, _nB_){caml_bytes_set(_nD_, _nC_, _nB_); return;} + (function(_nA_){return _mx_(u, _mw_, _nA_);}((r1 >>> 8 | 0) & 255)); + var _my_ = 5; + function _mz_(_nz_, _ny_, _nx_){caml_bytes_set(_nz_, _ny_, _nx_); return;} + (function(_nw_){return _mz_(u, _my_, _nw_);}((r1 >>> 16 | 0) & 255)); + var _mA_ = 6; + function _mB_(_nv_, _nu_, _nt_){caml_bytes_set(_nv_, _nu_, _nt_); return;} + (function(_ns_){return _mB_(u, _mA_, _ns_);}(64 | (r1 >>> 24 | 0) & 15)); + var _mC_ = 7; + function _mD_(_nr_, _nq_, _np_){caml_bytes_set(_nr_, _nq_, _np_); return;} + (function(_no_){return _mD_(u, _mC_, _no_);}(r2 & 255)); + var _mE_ = 8; + function _mF_(_nn_, _nm_, _nl_){caml_bytes_set(_nn_, _nm_, _nl_); return;} + (function(_nk_){return _mF_(u, _mE_, _nk_);}(128 | (r2 >>> 24 | 0) & 63)); + var _mG_ = 9; + function _mH_(_nj_, _ni_, _nh_){caml_bytes_set(_nj_, _ni_, _nh_); return;} + (function(_ng_){return _mH_(u, _mG_, _ng_);}((r2 >>> 8 | 0) & 255)); + var _mI_ = 10; + function _mJ_(_nf_, _ne_, _nd_){caml_bytes_set(_nf_, _ne_, _nd_); return;} + (function(_nc_){return _mJ_(u, _mI_, _nc_);}((r2 >>> 16 | 0) & 255)); + var _mK_ = 11; + function _mL_(_nb_, _na_, _m$_){caml_bytes_set(_nb_, _na_, _m$_); return;} + (function(_m__){return _mL_(u, _mK_, _m__);}(r3 & 255)); + var _mM_ = 12; + function _mN_(_m9_, _m8_, _m7_){caml_bytes_set(_m9_, _m8_, _m7_); return;} + (function(_m6_){return _mN_(u, _mM_, _m6_);}((r3 >>> 8 | 0) & 255)); + var _mO_ = 13; + function _mP_(_m5_, _m4_, _m3_){caml_bytes_set(_m5_, _m4_, _m3_); return;} + (function(_m2_){return _mP_(u, _mO_, _m2_);}((r3 >>> 16 | 0) & 255)); + var _mQ_ = 14; + function _mR_(_m1_, _m0_, _mZ_){caml_bytes_set(_m1_, _m0_, _mZ_); return;} + (function(_mY_){return _mR_(u, _mQ_, _mY_);}(r4 & 255)); + var _mS_ = 15; + function _mT_(_mX_, _mW_, _mV_){caml_bytes_set(_mX_, _mW_, _mV_); return;} + (function(_mU_){return _mT_(u, _mS_, _mU_);}((r4 >>> 8 | 0) & 255)); return unsafe_to_string(u); } function v4_gen(seed){ - function rand$0(_mp_){return rand(seed, _mp_);} + function rand$0(_mn_){return rand(seed, _mn_);} return function(param){return v4_ocaml_random_uuid(rand$0);}; } - var Set = _df_([0, compare$0]); + var Set = _de_([0, compare$0]); function to_jstr$1(t){return encode(t);} function of_jstr$1(jstr){ var match = decode(jstr); if(0 === match[0]){var v = match[1]; return [0, v];} var err = match[1]; error([0, err, 0]); - return _f3_; + return _f2_; } var random_state = get_state(0); function new_uuid_v4(param){return v4_gen(random_state)(0);} @@ -12444,7 +12418,7 @@ return [0, 848054398, rev(rev_map(yojson_of_a, lst))]; } var - Of_yojson_error = [248, _f4_, caml_fresh_oo_id(0)], + Of_yojson_error = [248, _f3_, caml_fresh_oo_id(0)], record_check_extra_fields = [0, 1]; function of_yojson_error(what, yojson){ throw caml_maybe_attach_backtrace @@ -12452,15 +12426,15 @@ } function bool_of_yojson(yojson){ if(typeof yojson !== "number" && 737456202 === yojson[1]){var v = yojson[2]; return v;} - return of_yojson_error(_f5_, yojson); + return of_yojson_error(_f4_, yojson); } function string_of_yojson(yojson){ if(typeof yojson !== "number" && -976970511 === yojson[1]){var str = yojson[2]; return str;} - return of_yojson_error(_f6_, yojson); + return of_yojson_error(_f5_, yojson); } function int_of_yojson(yojson){ if(typeof yojson !== "number" && 3654863 === yojson[1]){var v = yojson[2]; return v;} - return of_yojson_error(_f7_, yojson); + return of_yojson_error(_f6_, yojson); } function option_of_yojson(a_of_yojson, yojson){ return 870828711 === yojson ? 0 : [0, caml_call1(a_of_yojson, yojson)]; @@ -12470,127 +12444,124 @@ var lst = yojson[2], rev_lst = rev_map(a_of_yojson, lst); return rev(rev_lst); } - return of_yojson_error(_f8_, yojson); + return of_yojson_error(_f7_, yojson); } function stag_no_args(loc, yojson){ - return of_yojson_error(symbol(loc, _f9_), yojson); + return of_yojson_error(symbol_concat(loc, _f8_), yojson); } function nested_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol(loc, _f__), yojson); + return of_yojson_error(symbol_concat(loc, _f9_), yojson); } function empty_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol(loc, _f$_), yojson); + return of_yojson_error(symbol_concat(loc, _f__), yojson); } function unexpected_stag(loc, yojson){ - return of_yojson_error(symbol(loc, _ga_), yojson); + return of_yojson_error(symbol_concat(loc, _f$_), yojson); } function record_superfluous_fields(what, loc, rev_fld_names, yojson){ var - fld_names_str = concat(_gb_, rev(rev_fld_names)), - msg = caml_call3(sprintf(_gc_), loc, what, fld_names_str); + fld_names_str = concat(_ga_, rev(rev_fld_names)), + msg = caml_call3(sprintf(_gb_), loc, what, fld_names_str); return of_yojson_error(msg, yojson); } function record_duplicate_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_gd_, loc, rev_fld_names, yojson); + return record_superfluous_fields(_gc_, loc, rev_fld_names, yojson); } function record_extra_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_ge_, loc, rev_fld_names, yojson); + return record_superfluous_fields(_gd_, loc, rev_fld_names, yojson); } function record_get_undefined_loop(fields, param){ var fields$0 = fields, param$0 = param; for(;;){ - if(! param$0) return concat(_gf_, rev(fields$0)); - var _mo_ = param$0[1]; - if(_mo_[1]) - var - rest = param$0[2], - field = _mo_[2], - fields$1 = [0, field, fields$0], - fields$0 = fields$1, - param$0 = rest; - else - var rest$0 = param$0[2], param$0 = rest$0; + if(! param$0) return concat(_ge_, rev(fields$0)); + var _mm_ = param$0[1]; + if(_mm_[1]){ + var rest = param$0[2], field = _mm_[2], fields$1 = [0, field, fields$0]; + fields$0 = fields$1; + param$0 = rest; + } + else{var rest$0 = param$0[2]; param$0 = rest$0;} } } function record_undefined_elements(loc, yojson, lst){ var undefined$0 = record_get_undefined_loop(0, lst), - msg = caml_call2(sprintf(_gg_), loc, undefined$0); + msg = caml_call2(sprintf(_gf_), loc, undefined$0); return of_yojson_error(msg, yojson); } function record_list_instead_atom(loc, yojson){ - var msg = symbol(loc, _gh_); + var msg = symbol_concat(loc, _gg_); return of_yojson_error(msg, yojson); } - function symbol$9(x){return x[1];} + function symbol$8(x){return x[1];} function jstr_of_method(param){return param ? "POST" : "GET";} function order_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _mk_ = yojson[2]; - if(! _mk_) return empty_list_invalid_sum(tp_loc, yojson); - var _ml_ = _mk_[1]; - if(typeof _ml_ !== "number"){ - var _mm_ = _ml_[1]; - if(-976970511 === _mm_){ - var _mn_ = _ml_[2]; - if(! caml_string_notequal(_mn_, cst_Ascending)) - return _mk_[2] ? stag_no_args(tp_loc, yojson) : 0; - if(! caml_string_notequal(_mn_, cst_Descending)) - return _mk_[2] ? stag_no_args(tp_loc, yojson) : 1; + var _mi_ = yojson[2]; + if(! _mi_) return empty_list_invalid_sum(tp_loc, yojson); + var _mj_ = _mi_[1]; + if(typeof _mj_ !== "number"){ + var _mk_ = _mj_[1]; + if(-976970511 === _mk_){ + var _ml_ = _mj_[2]; + if(_ml_ === cst_Ascending) + return _mi_[2] ? stag_no_args(tp_loc, yojson) : 0; + if(_ml_ === cst_Descending) + return _mi_[2] ? stag_no_args(tp_loc, yojson) : 1; } - else if(848054398 === _mm_) + else if(848054398 === _mk_) return nested_list_invalid_sum(tp_loc, yojson); } } return unexpected_stag(tp_loc, yojson); } - function yojson_of_order(param){return param ? _gi_ : _gj_;} + function yojson_of_order(param){return param ? _gh_ : _gi_;} function sort_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _mg_ = yojson[2]; - if(! _mg_) return empty_list_invalid_sum(tp_loc$0, yojson); - var _mh_ = _mg_[1]; - if(typeof _mh_ !== "number"){ - var _mi_ = _mh_[1]; - if(-976970511 === _mi_){ + var _me_ = yojson[2]; + if(! _me_) return empty_list_invalid_sum(tp_loc$0, yojson); + var _mf_ = _me_[1]; + if(typeof _mf_ !== "number"){ + var _mg_ = _mf_[1]; + if(-976970511 === _mg_){ var - _mj_ = _mh_[2], - switch$0 = caml_string_compare(_mj_, cst_DatePlayed); + _mh_ = _mf_[2], + switch$0 = caml_string_compare(_mh_, cst_DatePlayed); if(0 <= switch$0){ - if(0 >= switch$0) return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 7; - if(! caml_string_notequal(_mj_, cst_PlayCount)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 8; - if(! caml_string_notequal(_mj_, cst_PremiereDate)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 9; - if(! caml_string_notequal(_mj_, cst_ProductionYear)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 10; - if(! caml_string_notequal(_mj_, cst_Random)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 12; - if(! caml_string_notequal(_mj_, cst_Revenue)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 13; - if(! caml_string_notequal(_mj_, cst_Runtime)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 14; - if(! caml_string_notequal(_mj_, cst_SortName)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 11; + if(0 >= switch$0) return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 7; + if(_mh_ === cst_PlayCount) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 8; + if(_mh_ === cst_PremiereDate) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 9; + if(_mh_ === cst_ProductionYear) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 10; + if(_mh_ === cst_Random) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 12; + if(_mh_ === cst_Revenue) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 13; + if(_mh_ === cst_Runtime) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 14; + if(_mh_ === cst_SortName) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 11; } else{ - if(! caml_string_notequal(_mj_, cst_Album)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 0; - if(! caml_string_notequal(_mj_, cst_AlbumArtist)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 1; - if(! caml_string_notequal(_mj_, cst_Artist)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 2; - if(! caml_string_notequal(_mj_, cst_Budget)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 3; - if(! caml_string_notequal(_mj_, cst_CommunityRating)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 4; - if(! caml_string_notequal(_mj_, cst_CriticRating)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 5; - if(! caml_string_notequal(_mj_, cst_DateCreated)) - return _mg_[2] ? stag_no_args(tp_loc$0, yojson) : 6; + if(_mh_ === cst_Album) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 0; + if(_mh_ === cst_AlbumArtist) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 1; + if(_mh_ === cst_Artist) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 2; + if(_mh_ === cst_Budget) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 3; + if(_mh_ === cst_CommunityRating) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 4; + if(_mh_ === cst_CriticRating) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 5; + if(_mh_ === cst_DateCreated) + return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 6; } } - else if(848054398 === _mi_) + else if(848054398 === _mg_) return nested_list_invalid_sum(tp_loc$0, yojson); } } @@ -12599,34 +12570,34 @@ function yojson_of_sort(param){ switch(param){ case 0: - return _gk_; + return _gj_; case 1: - return _gl_; + return _gk_; case 2: - return _gm_; + return _gl_; case 3: - return _gn_; + return _gm_; case 4: - return _go_; + return _gn_; case 5: - return _gp_; + return _go_; case 6: - return _gq_; + return _gp_; case 7: - return _gr_; + return _gq_; case 8: - return _gs_; + return _gr_; case 9: - return _gt_; + return _gs_; case 10: - return _gu_; + return _gt_; case 11: - return _gv_; + return _gu_; case 12: - return _gw_; + return _gv_; case 13: - return _gx_; - default: return _gy_; + return _gw_; + default: return _gx_; } } function image_blur_hash_of_yojson(y){ @@ -12666,22 +12637,22 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(! caml_string_notequal(field_name, cst_Primary)) - if(symbol$9(primary_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + if(field_name === cst_Primary) + if(symbol$8(primary_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue = image_blur_hash_of_yojson(field_yojson); primary_field[1] = [0, fvalue]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$1, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$1, symbol$9(extra), yojson); - var primary_value = symbol$9(primary_field); + if(symbol$8(duplicates)) + return record_duplicate_fields(tp_loc$1, symbol$8(duplicates), yojson); + if(symbol$8(extra)) + return record_extra_fields(tp_loc$1, symbol$8(extra), yojson); + var primary_value = symbol$8(primary_field); return [0, primary_value]; } return record_list_instead_atom(tp_loc$1, yojson); @@ -12692,7 +12663,7 @@ var v = v_primary[1], arg = yojson_of_image_blur_hash(v), - bnd = [0, _gz_, arg], + bnd = [0, _gy_, arg], bnds$0 = [0, bnd, bnds]; else var bnds$0 = bnds; @@ -12700,105 +12671,105 @@ } function type_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _mc_ = yojson[2]; - if(! _mc_) return empty_list_invalid_sum(tp_loc$2, yojson); - var _md_ = _mc_[1]; - if(typeof _md_ !== "number"){ - var _me_ = _md_[1]; - if(-976970511 === _me_){ + var _ma_ = yojson[2]; + if(! _ma_) return empty_list_invalid_sum(tp_loc$2, yojson); + var _mb_ = _ma_[1]; + if(typeof _mb_ !== "number"){ + var _mc_ = _mb_[1]; + if(-976970511 === _mc_){ var - _mf_ = _md_[2], - switch$0 = caml_string_compare(_mf_, cst_MusicGenre); + _md_ = _mb_[2], + switch$0 = caml_string_compare(_md_, cst_MusicGenre); if(0 <= switch$0){ if(0 >= switch$0) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 18; - var switch$1 = caml_string_compare(_mf_, cst_Series); + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 18; + var switch$1 = caml_string_compare(_md_, cst_Series); if(0 <= switch$1){ if(0 >= switch$1) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 28; - if(! caml_string_notequal(_mf_, cst_Studio)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 29; - if(! caml_string_notequal(_mf_, cst_Trailer)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 30; - if(! caml_string_notequal(_mf_, cst_TvChannel)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 31; - if(! caml_string_notequal(_mf_, cst_TvProgram)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 32; - if(! caml_string_notequal(_mf_, cst_UserRootFolder)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 33; - if(! caml_string_notequal(_mf_, cst_UserView)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 34; - if(! caml_string_notequal(_mf_, cst_Video)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 35; - if(! caml_string_notequal(_mf_, cst_Year)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 36; + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 28; + if(_md_ === cst_Studio) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 29; + if(_md_ === cst_Trailer) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 30; + if(_md_ === cst_TvChannel) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 31; + if(_md_ === cst_TvProgram) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 32; + if(_md_ === cst_UserRootFolder) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 33; + if(_md_ === cst_UserView) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 34; + if(_md_ === cst_Video) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 35; + if(_md_ === cst_Year) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 36; } else{ - if(! caml_string_notequal(_mf_, cst_MusicVideo)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 19; - if(! caml_string_notequal(_mf_, cst_Person)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 20; - if(! caml_string_notequal(_mf_, cst_Photo)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 21; - if(! caml_string_notequal(_mf_, cst_PhotoAlbum)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 22; - if(! caml_string_notequal(_mf_, cst_Playlist)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 23; - if(! caml_string_notequal(_mf_, cst_PlaylistsFolder)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 24; - if(! caml_string_notequal(_mf_, cst_Program)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 25; - if(! caml_string_notequal(_mf_, cst_Recording)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 26; - if(! caml_string_notequal(_mf_, cst_Season)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 27; + if(_md_ === cst_MusicVideo) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 19; + if(_md_ === cst_Person) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 20; + if(_md_ === cst_Photo) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 21; + if(_md_ === cst_PhotoAlbum) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 22; + if(_md_ === cst_Playlist) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 23; + if(_md_ === cst_PlaylistsFolder) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 24; + if(_md_ === cst_Program) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 25; + if(_md_ === cst_Recording) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 26; + if(_md_ === cst_Season) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 27; } } else{ - var switch$2 = caml_string_compare(_mf_, cst_Episode); + var switch$2 = caml_string_compare(_md_, cst_Episode); if(0 <= switch$2){ if(0 >= switch$2) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 9; - if(! caml_string_notequal(_mf_, cst_Folder)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 10; - if(! caml_string_notequal(_mf_, cst_Genre)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 11; - if(! caml_string_notequal(_mf_, cst_LiveTvChannel)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 12; - if(! caml_string_notequal(_mf_, cst_LiveTvProgram)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 13; - if(! caml_string_notequal(_mf_, cst_ManualPlaylistsFolder)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 14; - if(! caml_string_notequal(_mf_, cst_Movie)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 15; - if(! caml_string_notequal(_mf_, cst_MusicAlbum)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 16; - if(! caml_string_notequal(_mf_, cst_MusicArtist)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 17; + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 9; + if(_md_ === cst_Folder) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 10; + if(_md_ === cst_Genre) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 11; + if(_md_ === cst_LiveTvChannel) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 12; + if(_md_ === cst_LiveTvProgram) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 13; + if(_md_ === cst_ManualPlaylistsFolder) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 14; + if(_md_ === cst_Movie) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 15; + if(_md_ === cst_MusicAlbum) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 16; + if(_md_ === cst_MusicArtist) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 17; } else{ - if(! caml_string_notequal(_mf_, cst_AggregateFolder)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 0; - if(! caml_string_notequal(_mf_, cst_Audio)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 1; - if(! caml_string_notequal(_mf_, cst_AudioBook)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 2; - if(! caml_string_notequal(_mf_, cst_BasePluginFolder)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 3; - if(! caml_string_notequal(_mf_, cst_Book)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 4; - if(! caml_string_notequal(_mf_, cst_BoxSet)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 5; - if(! caml_string_notequal(_mf_, cst_Channel)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 6; - if(! caml_string_notequal(_mf_, cst_ChannelFolderItem)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 7; - if(! caml_string_notequal(_mf_, cst_CollectionFolder)) - return _mc_[2] ? stag_no_args(tp_loc$2, yojson) : 8; + if(_md_ === cst_AggregateFolder) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 0; + if(_md_ === cst_Audio) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 1; + if(_md_ === cst_AudioBook) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 2; + if(_md_ === cst_BasePluginFolder) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 3; + if(_md_ === cst_Book) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 4; + if(_md_ === cst_BoxSet) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 5; + if(_md_ === cst_Channel) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 6; + if(_md_ === cst_ChannelFolderItem) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 7; + if(_md_ === cst_CollectionFolder) + return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 8; } } } - else if(848054398 === _me_) + else if(848054398 === _mc_) return nested_list_invalid_sum(tp_loc$2, yojson); } } @@ -12807,383 +12778,383 @@ function yojson_of_type(param){ switch(param){ case 0: - return _gA_; + return _gz_; case 1: - return _gB_; + return _gA_; case 2: - return _gC_; + return _gB_; case 3: - return _gD_; + return _gC_; case 4: - return _gE_; + return _gD_; case 5: - return _gF_; + return _gE_; case 6: - return _gG_; + return _gF_; case 7: - return _gH_; + return _gG_; case 8: - return _gI_; + return _gH_; case 9: - return _gJ_; + return _gI_; case 10: - return _gK_; + return _gJ_; case 11: - return _gL_; + return _gK_; case 12: - return _gM_; + return _gL_; case 13: - return _gN_; + return _gM_; case 14: - return _gO_; + return _gN_; case 15: - return _gP_; + return _gO_; case 16: - return _gQ_; + return _gP_; case 17: - return _gR_; + return _gQ_; case 18: - return _gS_; + return _gR_; case 19: - return _gT_; + return _gS_; case 20: - return _gU_; + return _gT_; case 21: - return _gV_; + return _gU_; case 22: - return _gW_; + return _gV_; case 23: - return _gX_; + return _gW_; case 24: - return _gY_; + return _gX_; case 25: - return _gZ_; + return _gY_; case 26: - return _g0_; + return _gZ_; case 27: - return _g1_; + return _g0_; case 28: - return _g2_; + return _g1_; case 29: - return _g3_; + return _g2_; case 30: - return _g4_; + return _g3_; case 31: - return _g5_; + return _g4_; case 32: - return _g6_; + return _g5_; case 33: - return _g7_; + return _g6_; case 34: - return _g8_; + return _g7_; case 35: - return _g9_; - default: return _g__; + return _g8_; + default: return _g9_; } } function field_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _l__ = yojson[2]; - if(! _l__) return empty_list_invalid_sum(tp_loc$3, yojson); - var _l$_ = _l__[1]; - if(typeof _l$_ !== "number"){ - var _ma_ = _l$_[1]; - if(-976970511 === _ma_){ + var _l8_ = yojson[2]; + if(! _l8_) return empty_list_invalid_sum(tp_loc$3, yojson); + var _l9_ = _l8_[1]; + if(typeof _l9_ !== "number"){ + var _l__ = _l9_[1]; + if(-976970511 === _l__){ var - _mb_ = _l$_[2], - switch$0 = caml_string_compare(_mb_, cst_MediaStreams); + _l$_ = _l9_[2], + switch$0 = caml_string_compare(_l$_, cst_MediaStreams); if(0 <= switch$0){ if(0 >= switch$0) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 30; + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 30; var - switch$1 = caml_string_compare(_mb_, cst_SeriesPresentationUniqueKe); + switch$1 = caml_string_compare(_l$_, cst_SeriesPresentationUniqueKe); if(0 <= switch$1){ if(0 >= switch$1) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 46; - var switch$2 = caml_string_compare(_mb_, cst_Studios); + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 46; + var switch$2 = caml_string_compare(_l$_, cst_Studios); if(0 <= switch$2){ if(0 >= switch$2) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 54; - if(! caml_string_notequal(_mb_, cst_SyncInfo)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 55; - if(! caml_string_notequal(_mb_, cst_Taglines)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 56; - if(! caml_string_notequal(_mb_, cst_Tags)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 57; - if(! caml_string_notequal(_mb_, cst_ThemeSongIds)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 58; - if(! caml_string_notequal(_mb_, cst_ThemeVideoIds)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 59; - if(! caml_string_notequal(_mb_, cst_Width)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 60; + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 54; + if(_l$_ === cst_SyncInfo) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 55; + if(_l$_ === cst_Taglines) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 56; + if(_l$_ === cst_Tags) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 57; + if(_l$_ === cst_ThemeSongIds) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 58; + if(_l$_ === cst_ThemeVideoIds) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 59; + if(_l$_ === cst_Width) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 60; } else{ - if(! caml_string_notequal(_mb_, cst_SeriesPrimaryImage)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 47; - if(! caml_string_notequal(_mb_, cst_SeriesStudio)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 48; - if(! caml_string_notequal(_mb_, cst_ServiceName)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 49; - if(! caml_string_notequal(_mb_, cst_Settings)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 50; - if(! caml_string_notequal(_mb_, cst_SortName)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 51; - if(! caml_string_notequal(_mb_, cst_SpecialEpisodeNumbers)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 52; - if(! caml_string_notequal(_mb_, cst_SpecialFeatureCount)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 53; + if(_l$_ === cst_SeriesPrimaryImage) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 47; + if(_l$_ === cst_SeriesStudio) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 48; + if(_l$_ === cst_ServiceName) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 49; + if(_l$_ === cst_Settings) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 50; + if(_l$_ === cst_SortName) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 51; + if(_l$_ === cst_SpecialEpisodeNumbers) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 52; + if(_l$_ === cst_SpecialFeatureCount) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 53; } } else{ var - switch$3 = caml_string_compare(_mb_, cst_PrimaryImageAspectRatio); + switch$3 = caml_string_compare(_l$_, cst_PrimaryImageAspectRatio); if(0 <= switch$3){ if(0 >= switch$3) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 38; - if(! caml_string_notequal(_mb_, cst_ProductionLocations)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 39; - if(! caml_string_notequal(_mb_, cst_ProviderIds)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 40; - if(! caml_string_notequal(_mb_, cst_RecursiveItemCount)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 41; - if(! caml_string_notequal(_mb_, cst_RefreshState)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 42; - if(! caml_string_notequal(_mb_, cst_RemoteTrailers)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 43; - if(! caml_string_notequal(_mb_, cst_ScreenshotImageTags)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 44; - if(! caml_string_notequal(_mb_, cst_SeasonUserData)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 45; + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 38; + if(_l$_ === cst_ProductionLocations) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 39; + if(_l$_ === cst_ProviderIds) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 40; + if(_l$_ === cst_RecursiveItemCount) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 41; + if(_l$_ === cst_RefreshState) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 42; + if(_l$_ === cst_RemoteTrailers) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 43; + if(_l$_ === cst_ScreenshotImageTags) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 44; + if(_l$_ === cst_SeasonUserData) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 45; } else{ - if(! caml_string_notequal(_mb_, cst_OriginalTitle)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 31; - if(! caml_string_notequal(_mb_, cst_Overview)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 32; - if(! caml_string_notequal(_mb_, cst_ParentId)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 33; - if(! caml_string_notequal(_mb_, cst_Path)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 34; - if(! caml_string_notequal(_mb_, cst_People)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 35; - if(! caml_string_notequal(_mb_, cst_PlayAccess)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 36; - if(! caml_string_notequal(_mb_, cst_PresentationUniqueKey)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 37; + if(_l$_ === cst_OriginalTitle) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 31; + if(_l$_ === cst_Overview) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 32; + if(_l$_ === cst_ParentId) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 33; + if(_l$_ === cst_Path) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 34; + if(_l$_ === cst_People) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 35; + if(_l$_ === cst_PlayAccess) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 36; + if(_l$_ === cst_PresentationUniqueKey) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 37; } } } else{ var - switch$4 = caml_string_compare(_mb_, cst_EnableMediaSourceDisplay); + switch$4 = caml_string_compare(_l$_, cst_EnableMediaSourceDisplay); if(0 <= switch$4){ if(0 >= switch$4) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 15; - var switch$5 = caml_string_compare(_mb_, cst_HomePageUrl); + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 15; + var switch$5 = caml_string_compare(_l$_, cst_HomePageUrl); if(0 <= switch$5){ if(0 >= switch$5) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 23; - if(! caml_string_notequal(_mb_, cst_InheritedParentalRatingVal)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 24; - if(! caml_string_notequal(_mb_, cst_IsHD)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 25; - if(! caml_string_notequal(_mb_, cst_ItemCounts)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 26; - if(! caml_string_notequal(_mb_, cst_LocalTrailerCount)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 27; - if(! caml_string_notequal(_mb_, cst_MediaSourceCount)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 28; - if(! caml_string_notequal(_mb_, cst_MediaSources)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 29; + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 23; + if(_l$_ === cst_InheritedParentalRatingVal) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 24; + if(_l$_ === cst_IsHD) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 25; + if(_l$_ === cst_ItemCounts) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 26; + if(_l$_ === cst_LocalTrailerCount) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 27; + if(_l$_ === cst_MediaSourceCount) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 28; + if(_l$_ === cst_MediaSources) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 29; } else{ - if(! caml_string_notequal(_mb_, cst_Etag)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 16; - if(! caml_string_notequal(_mb_, cst_ExternalEtag)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 17; - if(! caml_string_notequal(_mb_, cst_ExternalSeriesId)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 18; - if(! caml_string_notequal(_mb_, cst_ExternalUrls)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 19; - if(! caml_string_notequal(_mb_, cst_ExtraIds)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 20; - if(! caml_string_notequal(_mb_, cst_Genres)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 21; - if(! caml_string_notequal(_mb_, cst_Height)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 22; + if(_l$_ === cst_Etag) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 16; + if(_l$_ === cst_ExternalEtag) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 17; + if(_l$_ === cst_ExternalSeriesId) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 18; + if(_l$_ === cst_ExternalUrls) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 19; + if(_l$_ === cst_ExtraIds) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 20; + if(_l$_ === cst_Genres) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 21; + if(_l$_ === cst_Height) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 22; } } else{ - var switch$6 = caml_string_compare(_mb_, cst_ChildCount); + var switch$6 = caml_string_compare(_l$_, cst_ChildCount); if(0 <= switch$6){ if(0 >= switch$6) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 7; - if(! caml_string_notequal(_mb_, cst_CumulativeRunTimeTicks)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 8; - if(! caml_string_notequal(_mb_, cst_CustomRating)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 9; - if(! caml_string_notequal(_mb_, cst_DateCreated)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 10; - if(! caml_string_notequal(_mb_, cst_DateLastMediaAdded)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 11; - if(! caml_string_notequal(_mb_, cst_DateLastRefreshed)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 12; - if(! caml_string_notequal(_mb_, cst_DateLastSaved)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 13; - if(! caml_string_notequal(_mb_, cst_DisplayPreferencesId)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 14; + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 7; + if(_l$_ === cst_CumulativeRunTimeTicks) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 8; + if(_l$_ === cst_CustomRating) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 9; + if(_l$_ === cst_DateCreated) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 10; + if(_l$_ === cst_DateLastMediaAdded) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 11; + if(_l$_ === cst_DateLastRefreshed) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 12; + if(_l$_ === cst_DateLastSaved) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 13; + if(_l$_ === cst_DisplayPreferencesId) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 14; } else{ - if(! caml_string_notequal(_mb_, cst_AirTime)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 0; - if(! caml_string_notequal(_mb_, cst_BasicSyncInfo)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 1; - if(! caml_string_notequal(_mb_, cst_CanDelete)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 2; - if(! caml_string_notequal(_mb_, cst_CanDownload)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 3; - if(! caml_string_notequal(_mb_, cst_ChannelImage)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 4; - if(! caml_string_notequal(_mb_, cst_ChannelInfo)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 5; - if(! caml_string_notequal(_mb_, cst_Chapters)) - return _l__[2] ? stag_no_args(tp_loc$3, yojson) : 6; + if(_l$_ === cst_AirTime) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 0; + if(_l$_ === cst_BasicSyncInfo) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 1; + if(_l$_ === cst_CanDelete) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 2; + if(_l$_ === cst_CanDownload) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 3; + if(_l$_ === cst_ChannelImage) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 4; + if(_l$_ === cst_ChannelInfo) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 5; + if(_l$_ === cst_Chapters) + return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 6; } } } } - else if(848054398 === _ma_) + else if(848054398 === _l__) return nested_list_invalid_sum(tp_loc$3, yojson); } } return unexpected_stag(tp_loc$3, yojson); } function yojson_of_field(param){ - var _l9_ = param; - if(31 <= _l9_) - switch(_l9_){ + var _l7_ = param; + if(31 <= _l7_) + switch(_l7_){ case 31: - return _hE_; + return _hD_; case 32: - return _hF_; + return _hE_; case 33: - return _hG_; + return _hF_; case 34: - return _hH_; + return _hG_; case 35: - return _hI_; + return _hH_; case 36: - return _hJ_; + return _hI_; case 37: - return _hK_; + return _hJ_; case 38: - return _hL_; + return _hK_; case 39: - return _hM_; + return _hL_; case 40: - return _hN_; + return _hM_; case 41: - return _hO_; + return _hN_; case 42: - return _hP_; + return _hO_; case 43: - return _hQ_; + return _hP_; case 44: - return _hR_; + return _hQ_; case 45: - return _hS_; + return _hR_; case 46: - return _hT_; + return _hS_; case 47: - return _hU_; + return _hT_; case 48: - return _hV_; + return _hU_; case 49: - return _hW_; + return _hV_; case 50: - return _hX_; + return _hW_; case 51: - return _hY_; + return _hX_; case 52: - return _hZ_; + return _hY_; case 53: - return _h0_; + return _hZ_; case 54: - return _h1_; + return _h0_; case 55: - return _h2_; + return _h1_; case 56: - return _h3_; + return _h2_; case 57: - return _h4_; + return _h3_; case 58: - return _h5_; + return _h4_; case 59: - return _h6_; - default: return _h7_; + return _h5_; + default: return _h6_; } - switch(_l9_){ + switch(_l7_){ case 0: - return _g$_; + return _g__; case 1: - return _ha_; + return _g$_; case 2: - return _hb_; + return _ha_; case 3: - return _hc_; + return _hb_; case 4: - return _hd_; + return _hc_; case 5: - return _he_; + return _hd_; case 6: - return _hf_; + return _he_; case 7: - return _hg_; + return _hf_; case 8: - return _hh_; + return _hg_; case 9: - return _hi_; + return _hh_; case 10: - return _hj_; + return _hi_; case 11: - return _hk_; + return _hj_; case 12: - return _hl_; + return _hk_; case 13: - return _hm_; + return _hl_; case 14: - return _hn_; + return _hm_; case 15: - return _ho_; + return _hn_; case 16: - return _hp_; + return _ho_; case 17: - return _hq_; + return _hp_; case 18: - return _hr_; + return _hq_; case 19: - return _hs_; + return _hr_; case 20: - return _ht_; + return _hs_; case 21: - return _hu_; + return _ht_; case 22: - return _hv_; + return _hu_; case 23: - return _hw_; + return _hv_; case 24: - return _hx_; + return _hw_; case 25: - return _hy_; + return _hx_; case 26: - return _hz_; + return _hy_; case 27: - return _hA_; + return _hz_; case 28: - return _hB_; + return _hA_; case 29: - return _hC_; - default: return _hD_; + return _hB_; + default: return _hC_; } } function type_str_of_yojson(j){ @@ -13193,10 +13164,10 @@ function yojson_of_type_str(ts){ var match = yojson_of_type(ts); if(typeof match !== "number" && 848054398 === match[1]){ - var _l8_ = match[2]; - if(_l8_ && ! _l8_[2]){var json = _l8_[1]; return json;} + var _l6_ = match[2]; + if(_l6_ && ! _l6_[2]){var json = _l6_[1]; return json;} } - throw caml_maybe_attach_backtrace([0, Assert_failure, _h8_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _h7_], 1); } function t_of_yojson(yojson){ if(typeof yojson !== "number" && 963043957 === yojson[1]){ @@ -13230,98 +13201,98 @@ { if(0 <= switch$0) if(0 < switch$0) - if(caml_string_notequal(field_name, cst_Path)) - if(caml_string_notequal(field_name, cst_ServerId)) - if(caml_string_notequal(field_name, cst_SortName)){ - if(caml_string_notequal(field_name, cst_Type)) break b; - if(symbol$9(type_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + if(field_name !== cst_Path) + if(field_name !== cst_ServerId) + if(field_name !== cst_SortName){ + if(field_name !== cst_Type) break b; + if(symbol$8(type_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue = type_str_of_yojson(field_yojson); type_field[1] = [0, fvalue]; } } - else if(symbol$9(sort_name_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(sort_name_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$0 = string_of_yojson(field_yojson); sort_name_field[1] = [0, fvalue$0]; } - else if(symbol$9(server_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(server_id_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$1 = string_of_yojson(field_yojson); server_id_field[1] = [0, fvalue$1]; } - else if(symbol$9(path_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(path_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$2 = string_of_yojson(field_yojson); path_field[1] = [0, fvalue$2]; } - else if(symbol$9(parent_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(parent_id_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$3 = option_of_yojson(string_of_yojson, field_yojson); parent_id_field[1] = [0, fvalue$3]; } - else if(caml_string_notequal(field_name, cst_AlbumId)) - if(caml_string_notequal(field_name, cst_CollectionType)) - if(caml_string_notequal(field_name, cst_Id)) - if(caml_string_notequal(field_name, cst_ImageBlurHashes)){ - if(caml_string_notequal(field_name, cst_Name)) break b; - if(symbol$9(name_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(field_name !== cst_AlbumId) + if(field_name !== cst_CollectionType) + if(field_name !== cst_Id) + if(field_name !== cst_ImageBlurHashes){ + if(field_name !== cst_Name) break b; + if(symbol$8(name_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$4 = string_of_yojson(field_yojson); name_field[1] = [0, fvalue$4]; } } - else if(symbol$9(image_blur_hashes_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(image_blur_hashes_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$5 = image_blur_hashes_of_yojson(field_yojson); image_blur_hashes_field[1] = [0, fvalue$5]; } - else if(symbol$9(id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(id_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$6 = string_of_yojson(field_yojson); id_field[1] = [0, fvalue$6]; } - else if(symbol$9(collection_type_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(collection_type_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$7 = option_of_yojson(string_of_yojson, field_yojson); collection_type_field[1] = [0, fvalue$7]; } - else if(symbol$9(album_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(album_id_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$8 = string_of_yojson(field_yojson); album_id_field[1] = [0, fvalue$8]; } break a; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$4, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$4, symbol$9(extra), yojson); + if(symbol$8(duplicates)) + return record_duplicate_fields(tp_loc$4, symbol$8(duplicates), yojson); + if(symbol$8(extra)) + return record_extra_fields(tp_loc$4, symbol$8(extra), yojson); var - match = symbol$9(name_field), - sort_name_value = symbol$9(sort_name_field), - match$0 = symbol$9(id_field), - path_value = symbol$9(path_field), - album_id_value = symbol$9(album_id_field), - parent_id_value = symbol$9(parent_id_field), - match$1 = symbol$9(server_id_field), - match$2 = symbol$9(image_blur_hashes_field), - match$3 = symbol$9(type_field), - collection_type_value = symbol$9(collection_type_field); + match = symbol$8(name_field), + sort_name_value = symbol$8(sort_name_field), + match$0 = symbol$8(id_field), + path_value = symbol$8(path_field), + album_id_value = symbol$8(album_id_field), + parent_id_value = symbol$8(parent_id_field), + match$1 = symbol$8(server_id_field), + match$2 = symbol$8(image_blur_hashes_field), + match$3 = symbol$8(type_field), + collection_type_value = symbol$8(collection_type_field); if(match && match$0 && match$1 && match$2 && match$3){ var type_value = match$3[1], @@ -13346,15 +13317,15 @@ v$0]; } var - _l4_ = [0, [0, 0 === symbol$9(type_field) ? 1 : 0, _h9_], 0], - _l5_ = - [0, [0, 0 === symbol$9(image_blur_hashes_field) ? 1 : 0, _h__], _l4_], - _l6_ = [0, [0, 0 === symbol$9(server_id_field) ? 1 : 0, _h$_], _l5_], - _l7_ = [0, [0, 0 === symbol$9(id_field) ? 1 : 0, _ia_], _l6_]; + _l2_ = [0, [0, 0 === symbol$8(type_field) ? 1 : 0, _h8_], 0], + _l3_ = + [0, [0, 0 === symbol$8(image_blur_hashes_field) ? 1 : 0, _h9_], _l2_], + _l4_ = [0, [0, 0 === symbol$8(server_id_field) ? 1 : 0, _h__], _l3_], + _l5_ = [0, [0, 0 === symbol$8(id_field) ? 1 : 0, _h$_], _l4_]; return record_undefined_elements (tp_loc$4, yojson, - [0, [0, 0 === symbol$9(name_field) ? 1 : 0, _ib_], _l7_]); + [0, [0, 0 === symbol$8(name_field) ? 1 : 0, _ia_], _l5_]); } return record_list_instead_atom(tp_loc$4, yojson); } @@ -13376,22 +13347,22 @@ else var arg$8 = - function(_l3_){return yojson_of_option(yojson_of_string, _l3_);} + function(_l1_){return yojson_of_option(yojson_of_string, _l1_);} (v_collection_type), - bnd$3 = [0, _il_, arg$8], + bnd$3 = [0, _ik_, arg$8], bnds$0 = [0, bnd$3, bnds]; var arg = yojson_of_type_str(v_type), - bnds$1 = [0, [0, _ic_, arg], bnds$0], + bnds$1 = [0, [0, _ib_, arg], bnds$0], arg$0 = yojson_of_image_blur_hashes(v_image_blur_hashes), - bnds$2 = [0, [0, _id_, arg$0], bnds$1], + bnds$2 = [0, [0, _ic_, arg$0], bnds$1], arg$1 = yojson_of_string(v_server_id), - bnds$3 = [0, [0, _ie_, arg$1], bnds$2]; + bnds$3 = [0, [0, _id_, arg$1], bnds$2]; if(v_parent_id) var v = v_parent_id[1], arg$2 = yojson_of_option(yojson_of_string, v), - bnd = [0, _if_, arg$2], + bnd = [0, _ie_, arg$2], bnds$4 = [0, bnd, bnds$3]; else var bnds$4 = bnds$3; @@ -13399,7 +13370,7 @@ var v$0 = v_album_id[1], arg$3 = yojson_of_string(v$0), - bnd$0 = [0, _ig_, arg$3], + bnd$0 = [0, _if_, arg$3], bnds$5 = [0, bnd$0, bnds$4]; else var bnds$5 = bnds$4; @@ -13407,24 +13378,24 @@ var v$1 = v_path[1], arg$4 = yojson_of_string(v$1), - bnd$1 = [0, _ih_, arg$4], + bnd$1 = [0, _ig_, arg$4], bnds$6 = [0, bnd$1, bnds$5]; else var bnds$6 = bnds$5; var arg$5 = yojson_of_string(v_id), - bnds$7 = [0, [0, _ii_, arg$5], bnds$6]; + bnds$7 = [0, [0, _ih_, arg$5], bnds$6]; if(v_sort_name) var v$2 = v_sort_name[1], arg$6 = yojson_of_string(v$2), - bnd$2 = [0, _ij_, arg$6], + bnd$2 = [0, _ii_, arg$6], bnds$8 = [0, bnd$2, bnds$7]; else var bnds$8 = bnds$7; var arg$7 = yojson_of_string(v_name), - bnds$9 = [0, [0, _ik_, arg$7], bnds$8]; + bnds$9 = [0, [0, _ij_, arg$7], bnds$8]; return [0, 963043957, bnds$9]; } function params_of_yojson(yojson){ @@ -13462,117 +13433,117 @@ { if(0 <= switch$0) if(0 < switch$0) - if(caml_string_notequal(field_name, cst_recursive)) - if(caml_string_notequal(field_name, cst_sortBy)) - if(caml_string_notequal(field_name, cst_sortOrder)) - if(caml_string_notequal(field_name, cst_startIndex)){ - if(caml_string_notequal(field_name, cst_userId)) break b; - if(symbol$9(user_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + if(field_name !== cst_recursive) + if(field_name !== cst_sortBy) + if(field_name !== cst_sortOrder) + if(field_name !== cst_startIndex){ + if(field_name !== cst_userId) break b; + if(symbol$8(user_id_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue = string_of_yojson(field_yojson); user_id_field[1] = [0, fvalue]; } } - else if(symbol$9(start_index_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(start_index_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$0 = int_of_yojson(field_yojson); start_index_field[1] = [0, fvalue$0]; } - else if(symbol$9(sort_order_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(sort_order_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$1 = order_of_yojson(field_yojson); sort_order_field[1] = [0, fvalue$1]; } - else if(symbol$9(sort_by_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(sort_by_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$2 = list_of_yojson(sort_of_yojson, field_yojson); sort_by_field[1] = [0, fvalue$2]; } - else if(symbol$9(recursive_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(recursive_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$3 = bool_of_yojson(field_yojson); recursive_field[1] = [0, fvalue$3]; } - else if(symbol$9(parent_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(parent_id_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$4 = string_of_yojson(field_yojson); parent_id_field[1] = [0, fvalue$4]; } - else if(caml_string_notequal(field_name, cst_enableImages)) - if(caml_string_notequal(field_name, cst_enableUserData)) - if(caml_string_notequal(field_name, cst_fields)) - if(caml_string_notequal(field_name, cst_ids)) - if(caml_string_notequal(field_name, cst_includeItemTypes)){ - if(caml_string_notequal(field_name, cst_limit)) break b; - if(symbol$9(limit_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(field_name !== cst_enableImages) + if(field_name !== cst_enableUserData) + if(field_name !== cst_fields) + if(field_name !== cst_ids) + if(field_name !== cst_includeItemTypes){ + if(field_name !== cst_limit) break b; + if(symbol$8(limit_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$5 = int_of_yojson(field_yojson); limit_field[1] = [0, fvalue$5]; } } - else if(symbol$9(include_item_types_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(include_item_types_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$6 = list_of_yojson(type_of_yojson, field_yojson); include_item_types_field[1] = [0, fvalue$6]; } - else if(symbol$9(ids_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(ids_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$7 = list_of_yojson(string_of_yojson, field_yojson); ids_field[1] = [0, fvalue$7]; } - else if(symbol$9(fields_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(fields_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$8 = list_of_yojson(field_of_yojson, field_yojson); fields_field[1] = [0, fvalue$8]; } - else if(symbol$9(enable_user_data_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(enable_user_data_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$9 = bool_of_yojson(field_yojson); enable_user_data_field[1] = [0, fvalue$9]; } - else if(symbol$9(enable_images_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(enable_images_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$10 = bool_of_yojson(field_yojson); enable_images_field[1] = [0, fvalue$10]; } break a; } - if(symbol$9(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$9(extra)]; + if(symbol$8(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$8(extra)]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$5, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$5, symbol$9(extra), yojson); + if(symbol$8(duplicates)) + return record_duplicate_fields(tp_loc$5, symbol$8(duplicates), yojson); + if(symbol$8(extra)) + return record_extra_fields(tp_loc$5, symbol$8(extra), yojson); var - ids_value = symbol$9(ids_field), - parent_id_value = symbol$9(parent_id_field), - match = symbol$9(user_id_field), - match$0 = symbol$9(fields_field), - match$1 = symbol$9(include_item_types_field), - start_index_value = symbol$9(start_index_field), - limit_value = symbol$9(limit_field), - sort_order_value = symbol$9(sort_order_field), - match$2 = symbol$9(sort_by_field), - match$3 = symbol$9(recursive_field), - match$4 = symbol$9(enable_user_data_field), - match$5 = symbol$9(enable_images_field); + ids_value = symbol$8(ids_field), + parent_id_value = symbol$8(parent_id_field), + match = symbol$8(user_id_field), + match$0 = symbol$8(fields_field), + match$1 = symbol$8(include_item_types_field), + start_index_value = symbol$8(start_index_field), + limit_value = symbol$8(limit_field), + sort_order_value = symbol$8(sort_order_field), + match$2 = symbol$8(sort_by_field), + match$3 = symbol$8(recursive_field), + match$4 = symbol$8(enable_user_data_field), + match$5 = symbol$8(enable_images_field); if (match && match$0 && match$1 && match$2 && match$3 && match$4 && match$5){ var @@ -13599,18 +13570,18 @@ enable_images_value]; } var - _lX_ = [0, [0, 0 === symbol$9(enable_images_field) ? 1 : 0, _im_], 0], - _lY_ = - [0, [0, 0 === symbol$9(enable_user_data_field) ? 1 : 0, _in_], _lX_], - _lZ_ = [0, [0, 0 === symbol$9(recursive_field) ? 1 : 0, _io_], _lY_], - _l0_ = [0, [0, 0 === symbol$9(sort_by_field) ? 1 : 0, _ip_], _lZ_], - _l1_ = - [0, [0, 0 === symbol$9(include_item_types_field) ? 1 : 0, _iq_], _l0_], - _l2_ = [0, [0, 0 === symbol$9(fields_field) ? 1 : 0, _ir_], _l1_]; + _lV_ = [0, [0, 0 === symbol$8(enable_images_field) ? 1 : 0, _il_], 0], + _lW_ = + [0, [0, 0 === symbol$8(enable_user_data_field) ? 1 : 0, _im_], _lV_], + _lX_ = [0, [0, 0 === symbol$8(recursive_field) ? 1 : 0, _in_], _lW_], + _lY_ = [0, [0, 0 === symbol$8(sort_by_field) ? 1 : 0, _io_], _lX_], + _lZ_ = + [0, [0, 0 === symbol$8(include_item_types_field) ? 1 : 0, _ip_], _lY_], + _l0_ = [0, [0, 0 === symbol$8(fields_field) ? 1 : 0, _iq_], _lZ_]; return record_undefined_elements (tp_loc$5, yojson, - [0, [0, 0 === symbol$9(user_id_field) ? 1 : 0, _is_], _l2_]); + [0, [0, 0 === symbol$8(user_id_field) ? 1 : 0, _ir_], _l0_]); } return record_list_instead_atom(tp_loc$5, yojson); } @@ -13629,18 +13600,18 @@ v_parent_id = param[2], v_ids = param[1], arg = yojson_of_bool(v_enable_images), - bnds = [0, [0, _it_, arg], 0], + bnds = [0, [0, _is_, arg], 0], arg$0 = yojson_of_bool(v_enable_user_data), - bnds$0 = [0, [0, _iu_, arg$0], bnds], + bnds$0 = [0, [0, _it_, arg$0], bnds], arg$1 = yojson_of_bool(v_recursive), - bnds$1 = [0, [0, _iv_, arg$1], bnds$0], + bnds$1 = [0, [0, _iu_, arg$1], bnds$0], arg$2 = yojson_of_list(yojson_of_sort, v_sort_by), - bnds$2 = [0, [0, _iw_, arg$2], bnds$1]; + bnds$2 = [0, [0, _iv_, arg$2], bnds$1]; if(v_sort_order) var v = v_sort_order[1], arg$3 = yojson_of_order(v), - bnd = [0, _ix_, arg$3], + bnd = [0, _iw_, arg$3], bnds$3 = [0, bnd, bnds$2]; else var bnds$3 = bnds$2; @@ -13648,7 +13619,7 @@ var v$0 = v_limit[1], arg$4 = yojson_of_int(v$0), - bnd$0 = [0, _iy_, arg$4], + bnd$0 = [0, _ix_, arg$4], bnds$4 = [0, bnd$0, bnds$3]; else var bnds$4 = bnds$3; @@ -13656,22 +13627,22 @@ var v$1 = v_start_index[1], arg$5 = yojson_of_int(v$1), - bnd$1 = [0, _iz_, arg$5], + bnd$1 = [0, _iy_, arg$5], bnds$5 = [0, bnd$1, bnds$4]; else var bnds$5 = bnds$4; var arg$6 = yojson_of_list(yojson_of_type, v_include_item_types), - bnds$6 = [0, [0, _iA_, arg$6], bnds$5], + bnds$6 = [0, [0, _iz_, arg$6], bnds$5], arg$7 = yojson_of_list(yojson_of_field, v_fields), - bnds$7 = [0, [0, _iB_, arg$7], bnds$6], + bnds$7 = [0, [0, _iA_, arg$7], bnds$6], arg$8 = yojson_of_string(v_user_id), - bnds$8 = [0, [0, _iC_, arg$8], bnds$7]; + bnds$8 = [0, [0, _iB_, arg$8], bnds$7]; if(v_parent_id) var v$2 = v_parent_id[1], arg$9 = yojson_of_string(v$2), - bnd$2 = [0, _iD_, arg$9], + bnd$2 = [0, _iC_, arg$9], bnds$9 = [0, bnd$2, bnds$8]; else var bnds$9 = bnds$8; @@ -13680,8 +13651,8 @@ else var arg$10 = - function(_lW_){return yojson_of_list(yojson_of_string, _lW_);}(v_ids), - bnd$3 = [0, _iE_, arg$10], + function(_lU_){return yojson_of_list(yojson_of_string, _lU_);}(v_ids), + bnd$3 = [0, _iD_, arg$10], bnds$10 = [0, bnd$3, bnds$9]; return [0, 963043957, bnds$10]; } @@ -13704,40 +13675,40 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_Items)) - if(caml_string_notequal(field_name, cst_StartIndex)){ - if(! caml_string_notequal(field_name, cst_TotalRecordCount)) - if(symbol$9(total_record_count_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + if(field_name !== cst_Items) + if(field_name !== cst_StartIndex){ + if(field_name === cst_TotalRecordCount) + if(symbol$8(total_record_count_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue = int_of_yojson(field_yojson); total_record_count_field[1] = [0, fvalue]; } } - else if(symbol$9(start_index_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(start_index_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$0 = int_of_yojson(field_yojson); start_index_field[1] = [0, fvalue$0]; } - else if(symbol$9(items_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(items_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$1 = list_of_yojson(t_of_yojson, field_yojson); items_field[1] = [0, fvalue$1]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$6, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$6, symbol$9(extra), yojson); + if(symbol$8(duplicates)) + return record_duplicate_fields(tp_loc$6, symbol$8(duplicates), yojson); + if(symbol$8(extra)) + return record_extra_fields(tp_loc$6, symbol$8(extra), yojson); var - match = symbol$9(items_field), - match$0 = symbol$9(total_record_count_field), - match$1 = symbol$9(start_index_field); + match = symbol$8(items_field), + match$0 = symbol$8(total_record_count_field), + match$1 = symbol$8(start_index_field); if(match && match$0 && match$1){ var start_index_value = match$1[1], @@ -13746,13 +13717,13 @@ return [0, items_value, total_record_count_value, start_index_value]; } var - _lU_ = [0, [0, 0 === symbol$9(start_index_field) ? 1 : 0, _iF_], 0], - _lV_ = - [0, [0, 0 === symbol$9(total_record_count_field) ? 1 : 0, _iG_], _lU_]; + _lS_ = [0, [0, 0 === symbol$8(start_index_field) ? 1 : 0, _iE_], 0], + _lT_ = + [0, [0, 0 === symbol$8(total_record_count_field) ? 1 : 0, _iF_], _lS_]; return record_undefined_elements (tp_loc$6, yojson, - [0, [0, 0 === symbol$9(items_field) ? 1 : 0, _iH_], _lV_]); + [0, [0, 0 === symbol$8(items_field) ? 1 : 0, _iG_], _lT_]); } return record_list_instead_atom(tp_loc$6, yojson); } @@ -13762,15 +13733,15 @@ v_total_record_count = param[2], v_items = param[1], arg = yojson_of_int(v_start_index), - bnds = [0, [0, _iI_, arg], 0], + bnds = [0, [0, _iH_, arg], 0], arg$0 = yojson_of_int(v_total_record_count), - bnds$0 = [0, [0, _iJ_, arg$0], bnds], + bnds$0 = [0, [0, _iI_, arg$0], bnds], arg$1 = yojson_of_list(yojson_of_t, v_items), - bnds$1 = [0, [0, _iK_, arg$1], bnds$0]; + bnds$1 = [0, [0, _iJ_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } var method = 0; - function endpoint(param){return _iL_;} + function endpoint(param){return _iK_;} function params_of_yojson$0(yojson){ if(typeof yojson !== "number" && 963043957 === yojson[1]){ var @@ -13788,33 +13759,33 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_includeExternalContent)){ - if(symbol$9(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$9(extra)]; + if(field_name !== cst_includeExternalContent){ + if(symbol$8(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$8(extra)]; } - else if(symbol$9(include_external_content_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(include_external_content_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue = bool_of_yojson(field_yojson); include_external_content_field[1] = [0, fvalue]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$7, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$7, symbol$9(extra), yojson); - var match = symbol$9(include_external_content_field); + if(symbol$8(duplicates)) + return record_duplicate_fields(tp_loc$7, symbol$8(duplicates), yojson); + if(symbol$8(extra)) + return record_extra_fields(tp_loc$7, symbol$8(extra), yojson); + var match = symbol$8(include_external_content_field); if(! match) return record_undefined_elements (tp_loc$7, yojson, [0, [0, - 0 === symbol$9(include_external_content_field) ? 1 : 0, - _iM_], + 0 === symbol$8(include_external_content_field) ? 1 : 0, + _iL_], 0]); var include_external_content_value = match[1]; return [0, include_external_content_value]; @@ -13825,7 +13796,7 @@ var v_include_external_content = param[1], arg = yojson_of_bool(v_include_external_content), - bnds = [0, [0, _iN_, arg], 0]; + bnds = [0, [0, _iM_, arg], 0]; return [0, 963043957, bnds]; } function response_of_yojson$0(yojson){ @@ -13847,40 +13818,40 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_Items)) - if(caml_string_notequal(field_name, cst_StartIndex)){ - if(! caml_string_notequal(field_name, cst_TotalRecordCount)) - if(symbol$9(total_record_count_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + if(field_name !== cst_Items) + if(field_name !== cst_StartIndex){ + if(field_name === cst_TotalRecordCount) + if(symbol$8(total_record_count_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue = int_of_yojson(field_yojson); total_record_count_field[1] = [0, fvalue]; } } - else if(symbol$9(start_index_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(start_index_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$0 = int_of_yojson(field_yojson); start_index_field[1] = [0, fvalue$0]; } - else if(symbol$9(items_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(items_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$1 = list_of_yojson(t_of_yojson, field_yojson); items_field[1] = [0, fvalue$1]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$8, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$8, symbol$9(extra), yojson); + if(symbol$8(duplicates)) + return record_duplicate_fields(tp_loc$8, symbol$8(duplicates), yojson); + if(symbol$8(extra)) + return record_extra_fields(tp_loc$8, symbol$8(extra), yojson); var - match = symbol$9(items_field), - match$0 = symbol$9(total_record_count_field), - match$1 = symbol$9(start_index_field); + match = symbol$8(items_field), + match$0 = symbol$8(total_record_count_field), + match$1 = symbol$8(start_index_field); if(match && match$0 && match$1){ var start_index_value = match$1[1], @@ -13889,13 +13860,13 @@ return [0, items_value, total_record_count_value, start_index_value]; } var - _lS_ = [0, [0, 0 === symbol$9(start_index_field) ? 1 : 0, _iO_], 0], - _lT_ = - [0, [0, 0 === symbol$9(total_record_count_field) ? 1 : 0, _iP_], _lS_]; + _lQ_ = [0, [0, 0 === symbol$8(start_index_field) ? 1 : 0, _iN_], 0], + _lR_ = + [0, [0, 0 === symbol$8(total_record_count_field) ? 1 : 0, _iO_], _lQ_]; return record_undefined_elements (tp_loc$8, yojson, - [0, [0, 0 === symbol$9(items_field) ? 1 : 0, _iQ_], _lT_]); + [0, [0, 0 === symbol$8(items_field) ? 1 : 0, _iP_], _lR_]); } return record_list_instead_atom(tp_loc$8, yojson); } @@ -13905,16 +13876,16 @@ v_total_record_count = param[2], v_items = param[1], arg = yojson_of_int(v_start_index), - bnds = [0, [0, _iR_, arg], 0], + bnds = [0, [0, _iQ_, arg], 0], arg$0 = yojson_of_int(v_total_record_count), - bnds$0 = [0, [0, _iS_, arg$0], bnds], + bnds$0 = [0, [0, _iR_, arg$0], bnds], arg$1 = yojson_of_list(yojson_of_t, v_items), - bnds$1 = [0, [0, _iT_, arg$1], bnds$0]; + bnds$1 = [0, [0, _iS_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } function endpoint$0(pp){ - var _lR_ = pp[1]; - return caml_call1(sprintf(_iU_), _lR_); + var _lP_ = pp[1]; + return caml_call1(sprintf(_iT_), _lP_); } function virtual_folder_of_yojson(yojson){ if(typeof yojson !== "number" && 963043957 === yojson[1]){ @@ -13935,40 +13906,40 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_ItemId)) - if(caml_string_notequal(field_name, cst_Locations)){ - if(! caml_string_notequal(field_name, cst_Name)) - if(symbol$9(name_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + if(field_name !== cst_ItemId) + if(field_name !== cst_Locations){ + if(field_name === cst_Name) + if(symbol$8(name_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue = string_of_yojson(field_yojson); name_field[1] = [0, fvalue]; } } - else if(symbol$9(locations_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(locations_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$0 = list_of_yojson(string_of_yojson, field_yojson); locations_field[1] = [0, fvalue$0]; } - else if(symbol$9(item_id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(item_id_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$1 = string_of_yojson(field_yojson); item_id_field[1] = [0, fvalue$1]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$9, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$9, symbol$9(extra), yojson); + if(symbol$8(duplicates)) + return record_duplicate_fields(tp_loc$9, symbol$8(duplicates), yojson); + if(symbol$8(extra)) + return record_extra_fields(tp_loc$9, symbol$8(extra), yojson); var - match = symbol$9(name_field), - match$0 = symbol$9(locations_field), - match$1 = symbol$9(item_id_field); + match = symbol$8(name_field), + match$0 = symbol$8(locations_field), + match$1 = symbol$8(item_id_field); if(match && match$0 && match$1){ var item_id_value = match$1[1], @@ -13977,12 +13948,12 @@ return [0, name_value, locations_value, item_id_value]; } var - _lP_ = [0, [0, 0 === symbol$9(item_id_field) ? 1 : 0, _iV_], 0], - _lQ_ = [0, [0, 0 === symbol$9(locations_field) ? 1 : 0, _iW_], _lP_]; + _lN_ = [0, [0, 0 === symbol$8(item_id_field) ? 1 : 0, _iU_], 0], + _lO_ = [0, [0, 0 === symbol$8(locations_field) ? 1 : 0, _iV_], _lN_]; return record_undefined_elements (tp_loc$9, yojson, - [0, [0, 0 === symbol$9(name_field) ? 1 : 0, _iX_], _lQ_]); + [0, [0, 0 === symbol$8(name_field) ? 1 : 0, _iW_], _lO_]); } return record_list_instead_atom(tp_loc$9, yojson); } @@ -13992,33 +13963,33 @@ v_locations = param[2], v_name = param[1], arg = yojson_of_string(v_item_id), - bnds = [0, [0, _iY_, arg], 0], + bnds = [0, [0, _iX_, arg], 0], arg$0 = yojson_of_list(yojson_of_string, v_locations), - bnds$0 = [0, [0, _iZ_, arg$0], bnds], + bnds$0 = [0, [0, _iY_, arg$0], bnds], arg$1 = yojson_of_string(v_name), - bnds$1 = [0, [0, _i0_, arg$1], bnds$0]; + bnds$1 = [0, [0, _iZ_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } var session_uuid = [0, 0]; function set_session_uuid(s){session_uuid[1] = [0, s]; return;} function authorization(token, param){ if(token) - var t = token[1], token$0 = caml_call1(sprintf(_i1_), t); + var t = token[1], token$0 = caml_call1(sprintf(_i0_), t); else - var token$0 = _i4_; - var session_uuid$0 = value(session_uuid[1], _i2_); - return caml_call2(sprintf(_i3_), session_uuid$0, token$0); + var token$0 = _i3_; + var session_uuid$0 = value(session_uuid[1], _i1_); + return caml_call2(sprintf(_i2_), session_uuid$0, token$0); } function request$1(base_url, token, headers, Q){ return function(params, path_params){ var - _lM_ = caml_jsstring_of_string(caml_call1(Q[6], path_params)), + _lK_ = caml_jsstring_of_string(caml_call1(Q[6], path_params)), uri = get_ok (of_jstr (map - (function(_lO_){return caml_jsstring_of_string(_lO_);}, base_url), - _lM_)), + (function(_lM_){return caml_jsstring_of_string(_lM_);}, base_url), + _lK_)), authorization$0 = authorization(token, 0); log([0, authorization$0, 0]); var @@ -14079,10 +14050,10 @@ var yojson = from_string$0(0, 0, 0, caml_string_of_jsstring(json)); - try{var _lN_ = caml_call1(Q[4], yojson); return _lN_;} + try{var _lL_ = caml_call1(Q[4], yojson); return _lL_;} catch(e$0){ var e = caml_wrap_exception(e$0); - log([0, _i5_, [0, json, 0]]); + log([0, _i4_, [0, json, 0]]); log([0, e, 0]); throw caml_maybe_attach_backtrace(e, 0); } @@ -14095,9 +14066,9 @@ var token = get_token(t), base_url = t[1], - _lI_ = [0, token], - _lJ_ = [0, base_url]; - return function(_lK_, _lL_){return request$1(_lJ_, _lI_, _lK_, _lL_);}; + _lG_ = [0, token], + _lH_ = [0, base_url]; + return function(_lI_, _lJ_){return request$1(_lH_, _lG_, _lI_, _lJ_);}; } function tag_of(obj){ return is_block(obj) ? [0, caml_obj_tag(obj)] : [1, obj]; @@ -14109,7 +14080,7 @@ listeners = create$2(0, 64), worker = create$6(0, caml_jsstring_of_string(P[1])); function on_message(ev){ - symbol$8 + symbol$7 (of_jstr$1(data(ev)), function(message){ if(0 === message[0]){ @@ -14122,21 +14093,21 @@ return caml_call1(f, data); } var match$0 = message[1], v = match$0[2], e = match$0[1]; - function _lG_(f){return caml_call1(f, v);} - return function(_lH_){return iter(_lG_, _lH_);} + function _lE_(f){return caml_call1(f, v);} + return function(_lF_){return iter(_lE_, _lF_);} (find_all(listeners, tag_of(e))); }); return 0; } - var _lE_ = 0; - (function(_lF_){return listen(_lE_, message, on_message, _lF_);}(worker)); + var _lC_ = 0; + (function(_lD_){return listen(_lC_, message, on_message, _lD_);}(worker)); return; } function dispatch_event(e, v){return post(0, to_jstr$1([1, [0, e, v]]));} function Make_worker(W){ var W$0 = caml_call1(W, [0]); function on_message(ev){ - symbol$8 + symbol$7 (of_jstr$1(data(ev)), function(param){ var data = param[2], uuid = param[1]; @@ -14154,18 +14125,12 @@ } return [0, Start_client, dispatch_event, Make_worker]; } - function _i6_(_lA_){ - var _lB_ = Make$7(_lA_), _lC_ = _lB_[3]; - return [0, , _lB_[2], function(_lD_){_lC_(_lD_); return;}]; - } - function of_sort(size, param){ - if(param) return 0; - var tbl = init$0(size, function(_lz_){return _lz_;}); - shuffle$0(tbl); - return [0, tbl]; + function _i5_(_ly_){ + var _lz_ = Make$7(_ly_), _lA_ = _lz_[3]; + return [0, , _lz_[2], function(_lB_){_lA_(_lB_); return;}]; } function apply(t, i){ - if(! t) return i; + if(typeof t === "number") return i; var a = t[1]; return caml_check_bound(a, i)[1 + i]; } @@ -14199,41 +14164,41 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_id)) - if(caml_string_notequal(field_name, cst_item)){ - if(symbol$9(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$9(extra)]; + if(field_name !== cst_id) + if(field_name !== cst_item){ + if(symbol$8(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$8(extra)]; } - else if(symbol$9(item_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(item_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue = option_of_yojson(string_of_yojson, field_yojson); item_field[1] = [0, fvalue]; } - else if(symbol$9(id_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(id_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$0 = int_of_yojson(field_yojson); id_field[1] = [0, fvalue$0]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$10, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$10, symbol$9(extra), yojson); - var match = symbol$9(id_field), match$0 = symbol$9(item_field); + if(symbol$8(duplicates)) + return record_duplicate_fields(tp_loc$10, symbol$8(duplicates), yojson); + if(symbol$8(extra)) + return record_extra_fields(tp_loc$10, symbol$8(extra), yojson); + var match = symbol$8(id_field), match$0 = symbol$8(item_field); if(match && match$0){ var item_value = match$0[1], id_value = match[1]; return [0, id_value, item_value]; } - var _ly_ = [0, [0, 0 === symbol$9(item_field) ? 1 : 0, _i7_], 0]; + var _lx_ = [0, [0, 0 === symbol$8(item_field) ? 1 : 0, _i6_], 0]; return record_undefined_elements (tp_loc$10, yojson, - [0, [0, 0 === symbol$9(id_field) ? 1 : 0, _i8_], _ly_]); + [0, [0, 0 === symbol$8(id_field) ? 1 : 0, _i7_], _lx_]); } return record_list_instead_atom(tp_loc$10, yojson); } @@ -14242,9 +14207,9 @@ v_item = param[2], v_id = param[1], arg = yojson_of_option(yojson_of_string, v_item), - bnds = [0, [0, _i9_, arg], 0], + bnds = [0, [0, _i8_, arg], 0], arg$0 = yojson_of_int(v_id), - bnds$0 = [0, [0, _i__, arg$0], bnds]; + bnds$0 = [0, [0, _i9_, arg$0], bnds]; return [0, 963043957, bnds$0]; } function to_jv$1(k){return k;} @@ -14271,42 +14236,42 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_date_added)) - if(caml_string_notequal(field_name, cst_sort_name)) - if(caml_string_notequal(field_name, cst_views)){ - if(symbol$9(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$9(extra)]; + if(field_name !== cst_date_added) + if(field_name !== cst_sort_name) + if(field_name !== cst_views){ + if(symbol$8(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$8(extra)]; } - else if(symbol$9(views_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(views_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue = list_of_yojson(string_of_yojson, field_yojson); views_field[1] = [0, fvalue]; } - else if(symbol$9(sort_name_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(sort_name_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$0 = string_of_yojson(field_yojson); sort_name_field[1] = [0, fvalue$0]; } - else if(symbol$9(date_added_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(date_added_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$1 = int_of_yojson(field_yojson); date_added_field[1] = [0, fvalue$1]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$11, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$11, symbol$9(extra), yojson); + if(symbol$8(duplicates)) + return record_duplicate_fields(tp_loc$11, symbol$8(duplicates), yojson); + if(symbol$8(extra)) + return record_extra_fields(tp_loc$11, symbol$8(extra), yojson); var - match = symbol$9(date_added_field), - match$0 = symbol$9(views_field), - match$1 = symbol$9(sort_name_field); + match = symbol$8(date_added_field), + match$0 = symbol$8(views_field), + match$1 = symbol$8(sort_name_field); if(match && match$0 && match$1){ var sort_name_value = match$1[1], @@ -14315,12 +14280,12 @@ return [0, date_added_value, views_value, sort_name_value]; } var - _lw_ = [0, [0, 0 === symbol$9(sort_name_field) ? 1 : 0, _i$_], 0], - _lx_ = [0, [0, 0 === symbol$9(views_field) ? 1 : 0, _ja_], _lw_]; + _lv_ = [0, [0, 0 === symbol$8(sort_name_field) ? 1 : 0, _i__], 0], + _lw_ = [0, [0, 0 === symbol$8(views_field) ? 1 : 0, _i$_], _lv_]; return record_undefined_elements (tp_loc$11, yojson, - [0, [0, 0 === symbol$9(date_added_field) ? 1 : 0, _jb_], _lx_]); + [0, [0, 0 === symbol$8(date_added_field) ? 1 : 0, _ja_], _lw_]); } return record_list_instead_atom(tp_loc$11, yojson); } @@ -14330,11 +14295,11 @@ v_views = param[2], v_date_added = param[1], arg = yojson_of_string(v_sort_name), - bnds = [0, [0, _jc_, arg], 0], + bnds = [0, [0, _jb_, arg], 0], arg$0 = yojson_of_list(yojson_of_string, v_views), - bnds$0 = [0, [0, _jd_, arg$0], bnds], + bnds$0 = [0, [0, _jc_, arg$0], bnds], arg$1 = yojson_of_int(v_date_added), - bnds$1 = [0, [0, _je_, arg$1], bnds$0]; + bnds$1 = [0, [0, _jd_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } function t_of_yojson$1(yojson){ @@ -14355,41 +14320,41 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_item)) - if(caml_string_notequal(field_name, cst_sorts)){ - if(symbol$9(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$9(extra)]; + if(field_name !== cst_item) + if(field_name !== cst_sorts){ + if(symbol$8(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$8(extra)]; } - else if(symbol$9(sorts_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(sorts_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue = sorts_of_yojson(field_yojson); sorts_field[1] = [0, fvalue]; } - else if(symbol$9(item_field)) - duplicates[1] = [0, field_name, symbol$9(duplicates)]; + else if(symbol$8(item_field)) + duplicates[1] = [0, field_name, symbol$8(duplicates)]; else{ var fvalue$0 = t_of_yojson(field_yojson); item_field[1] = [0, fvalue$0]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$9(duplicates)) - return record_duplicate_fields(tp_loc$12, symbol$9(duplicates), yojson); - if(symbol$9(extra)) - return record_extra_fields(tp_loc$12, symbol$9(extra), yojson); - var match = symbol$9(sorts_field), match$0 = symbol$9(item_field); + if(symbol$8(duplicates)) + return record_duplicate_fields(tp_loc$12, symbol$8(duplicates), yojson); + if(symbol$8(extra)) + return record_extra_fields(tp_loc$12, symbol$8(extra), yojson); + var match = symbol$8(sorts_field), match$0 = symbol$8(item_field); if(match && match$0){ var item_value = match$0[1], sorts_value = match[1]; return [0, sorts_value, item_value]; } - var _lv_ = [0, [0, 0 === symbol$9(item_field) ? 1 : 0, _jf_], 0]; + var _lu_ = [0, [0, 0 === symbol$8(item_field) ? 1 : 0, _je_], 0]; return record_undefined_elements (tp_loc$12, yojson, - [0, [0, 0 === symbol$9(sorts_field) ? 1 : 0, _jg_], _lv_]); + [0, [0, 0 === symbol$8(sorts_field) ? 1 : 0, _jf_], _lu_]); } return record_list_instead_atom(tp_loc$12, yojson); } @@ -14398,9 +14363,9 @@ v_item = param[2], v_sorts = param[1], arg = yojson_of_t(v_item), - bnds = [0, [0, _jh_, arg], 0], + bnds = [0, [0, _jg_, arg], 0], arg$0 = yojson_of_sorts(v_sorts), - bnds$0 = [0, [0, _ji_, arg$0], bnds]; + bnds$0 = [0, [0, _jh_, arg$0], bnds]; return [0, 963043957, bnds$0]; } function to_jv$3(param){ @@ -14408,68 +14373,68 @@ views = param[3], sort_name = param[2], id = param[1], - id$0 = _cL_(id), - sort_name$0 = _cL_(sort_name), - views$0 = of_list$0(_cL_, views); + id$0 = _cK_(id), + sort_name$0 = _cK_(sort_name), + views$0 = of_list$0(_cK_, views); return caml_js_from_array([0, id$0, sort_name$0, views$0]); } function of_jv$2(j){ var match = caml_js_to_array(j), len = match.length - 1; if(3 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _jj_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ji_], 1); var id = match[1], sort_name = match[2], views = match[3], - id$0 = _cK_(id), - sort_name$0 = _cK_(sort_name), - views$0 = to_list$0(_cK_, views); + id$0 = _cJ_(id), + sort_name$0 = _cJ_(sort_name), + views$0 = to_list$0(_cJ_, views); return [0, id$0, sort_name$0, views$0]; } - var path$0 = [1, [0, _jm_, _jl_, _jk_]]; + var path$0 = [1, [0, _jl_, _jk_, _jj_]]; function to_jv$4(k){return k;} function of_jv$3(j){return j;} - function to_jv$5(k){return _cL_(k);} - function of_jv$4(j){return _cK_(j);} + function to_jv$5(k){return _cK_(k);} + function of_jv$4(j){return _cJ_(j);} function to_jv$6(k){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _jn_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _jm_], 1); } function of_jv$5(j){ var match = caml_js_to_array(j), len = match.length - 1; if(2 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _jo_], 1); - var type = match[1], views = match[2], _lu_ = to_list$0(_cK_, views); - return [0, _cK_(type), _lu_]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _jn_], 1); + var type = match[1], views = match[2], _lt_ = to_list$0(_cJ_, views); + return [0, _cJ_(type), _lt_]; } - var path$3 = [1, [0, _jq_, _jp_]]; + var path$3 = [1, [0, _jp_, _jo_]]; function to_jv$7(t){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _jr_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _jq_], 1); } function of_jv$6(j){ var match = caml_js_to_array(j), len = match.length - 1; if(2 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _js_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _jr_], 1); var collection_type = match[1], sort_name = match[2], - _lt_ = _cK_(sort_name); - return [0, _cK_(collection_type), _lt_]; + _ls_ = _cJ_(sort_name); + return [0, _cJ_(collection_type), _ls_]; } - var path$4 = [1, [0, _ju_, _jt_]]; + var path$4 = [1, [0, _jt_, _js_]]; function to_jv$8(t){return t_to_jv(yojson_of_t$1, t);} function of_jv$7(j){return get_exn(jv_to_t(t_of_yojson$1, j));} function get_key$0(t){return [0, t[2][3], t[1][3], t[1][2]];} - function to_jv$9(k){return _cL_(k);} - function of_jv$8(j){return _cK_(j);} + function to_jv$9(k){return _cK_(k);} + function of_jv$8(j){return _cJ_(j);} function to_jv$10(t){return t_to_jv(yojson_of_virtual_folder, t);} function of_jv$9(j){return get_exn(jv_to_t(virtual_folder_of_yojson, j));} function get_key$1(t){return t[3];} var Orderred_items_store = - _dc_ + _db_ ([0, [0, path, to_jv$1, of_jv$0], name$2, to_jv$2, of_jv$1, get_key]), Items_store = - _dc_ + _db_ ([0, [0, path$0, to_jv$3, of_jv$2], name$3, @@ -14477,45 +14442,45 @@ of_jv$7, get_key$0]), Virtual_folder_store = - _dc_ + _db_ ([0, [0, path$5, to_jv$9, of_jv$8], name$4, to_jv$10, of_jv$9, get_key$1]), - _jv_ = + _ju_ = [0, [0, path$0, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], - _jw_ = [0, name$5]; - function _jx_(_lr_, _ls_){return _dd_(_jw_, _lr_, _ls_);} + _jv_ = [0, name$5]; + function _jw_(_lq_, _lr_){return _dc_(_jv_, _lq_, _lr_);} var ItemsByDateAdded = - function(_lq_){return _jx_(_jv_, _lq_);}([0, path$1, to_jv$4, of_jv$3]), - _jy_ = + function(_lp_){return _jw_(_ju_, _lp_);}([0, path$1, to_jv$4, of_jv$3]), + _jx_ = [0, [0, path$0, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], - _jz_ = [0, name$6]; - function _jA_(_lo_, _lp_){return _dd_(_jz_, _lo_, _lp_);} + _jy_ = [0, name$6]; + function _jz_(_ln_, _lo_){return _dc_(_jy_, _ln_, _lo_);} var ItemsByViewAndKind = - function(_ln_){return _jA_(_jy_, _ln_);}([0, path$3, to_jv$6, of_jv$5]), - _jB_ = + function(_lm_){return _jz_(_jx_, _lm_);}([0, path$3, to_jv$6, of_jv$5]), + _jA_ = [0, [0, path$0, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], - _jC_ = [0, name$7]; - function _jD_(_ll_, _lm_){return _dd_(_jC_, _ll_, _lm_);} + _jB_ = [0, name$7]; + function _jC_(_lk_, _ll_){return _dc_(_jB_, _lk_, _ll_);} var ItemsById = - function(_lk_){return _jD_(_jB_, _lk_);}([0, path$2, to_jv$5, of_jv$4]), - _jE_ = + function(_lj_){return _jC_(_jA_, _lj_);}([0, path$2, to_jv$5, of_jv$4]), + _jD_ = [0, [0, path$0, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], - _jF_ = [0, name$8]; - function _jG_(_li_, _lj_){return _dd_(_jF_, _li_, _lj_);} + _jE_ = [0, name$8]; + function _jF_(_lh_, _li_){return _dc_(_jE_, _lh_, _li_);} var ItemsByTypeAndName = - function(_lh_){return _jG_(_jE_, _lh_);}([0, path$4, to_jv$7, of_jv$6]), + function(_lg_){return _jF_(_jD_, _lg_);}([0, path$4, to_jv$7, of_jv$6]), chunk_size = 500; function fetch_total_item_count(source){ var - _lg_ = + _lf_ = [0, 0, 0, @@ -14523,9 +14488,9 @@ 0, include_item_types, 0, - _jJ_, _jI_, _jH_, + _jG_, 1, 0, 0]; @@ -14540,7 +14505,7 @@ response_of_yojson, method, endpoint]), - _lg_, + _lf_, 0), function(res){return res[2];}); } @@ -14551,14 +14516,14 @@ infos = match[1], transaction$0 = transaction - ([0, [0, function(_lf_){return _lf_;}, Orderred_items_store[1]], 0], - _jK_, + ([0, [0, function(_le_){return _le_;}, Orderred_items_store[1]], 0], + _jJ_, idb), store = object_store - ([0, function(_le_){return _le_;}, Orderred_items_store[1]]) + ([0, function(_ld_){return _ld_;}, Orderred_items_store[1]]) (transaction$0), - req = Orderred_items_store[9].call(null, 0, _jL_, store), + req = Orderred_items_store[9].call(null, 0, _jK_, store), last_key = [0, 0]; on_success (function(param, q){ @@ -14579,7 +14544,7 @@ } function is_db_consistent(param, last_source_item_key, db_sync_infos){ var last_key = value$0(db_sync_infos[1], -1); - return symbol$3(last_key, last_source_item_key) ? 0 : 1; + return symbol$2(last_key, last_source_item_key) ? 0 : 1; } function check_status(source, idb){ return bind$0 @@ -14595,7 +14560,7 @@ var match = db_infos[1]; if(match){ var key = match[1], item = db_infos[2]; - if(symbol$2(key, last_source_item_key)){ + if(symbol$1(key, last_source_item_key)){ if(item) var id = item[1][1], first_unfetched_key = id + 1 | 0; else @@ -14606,10 +14571,10 @@ last_source_item_key]; } var item$0 = db_infos[2]; - if(symbol$1(key, last_source_item_key)){ + if(symbol$0(key, last_source_item_key)){ if(! item$0) return [1, 0, last_source_item_key]; var id$0 = item$0[1][1]; - return symbol$1(id$0, key) + return symbol$0(id$0, key) ? 1 : [1, id$0 + 1 | 0, last_source_item_key]; } @@ -14621,7 +14586,7 @@ }); } function update_views(source, idb){ - var _la_ = [0, source[2][1][4]]; + var _k$_ = [0, source[2][1][4]]; return let$2 (caml_call2 (query(source) @@ -14633,8 +14598,8 @@ response_of_yojson$0, method$0, endpoint$0]), - _jN_, - _la_), + _jM_, + _k$_), function(views){ iter (function(item){ @@ -14642,13 +14607,13 @@ transaction$0 = transaction ([0, - [0, function(_ld_){return _ld_;}, Orderred_items_store[1]], - [0, [0, function(_lc_){return _lc_;}, Items_store[1]], 0]], - _jM_, + [0, function(_lc_){return _lc_;}, Orderred_items_store[1]], + [0, [0, function(_lb_){return _lb_;}, Items_store[1]], 0]], + _jL_, idb), s_items = object_store - ([0, function(_lb_){return _lb_;}, Items_store[1]]) + ([0, function(_la_){return _la_;}, Items_store[1]]) (transaction$0), sort_name = value$0(item[2], item[1]); Items_store[14].call @@ -14663,7 +14628,7 @@ function parent_ids_of_view_children(param){ var id = param[3], - _k$_ = [0, 0, [0, id], source[2][1][4], _jO_, 0, 0, 0, 0, 0, 0, 0, 0]; + _k__ = [0, 0, [0, id], source[2][1][4], _jN_, 0, 0, 0, 0, 0, 0, 0, 0]; return let$2 (caml_call2 (query(source) @@ -14675,7 +14640,7 @@ response_of_yojson, method, endpoint]), - _k$_, + _k__, 0), function(res){ return fold_left @@ -14696,13 +14661,13 @@ } function paths_of_parents(parents){ var - _k9_ = source[2][1][4], - _k__ = + _k8_ = source[2][1][4], + _k9_ = [0, Set[49].call(null, parents), 0, - _k9_, - _jP_, + _k8_, + _jO_, 0, 0, 0, @@ -14722,20 +14687,20 @@ response_of_yojson, method, endpoint]), - _k__, + _k9_, 0), function(res){ return filter_map$0 (function(param){ var path = param[4], id = param[3]; - return symbol$6(function(path){return [0, id, path];}, path); + return symbol$5(function(path){return [0, id, path];}, path); }, res[1]); }); } return let$0 (of_list$1 - (symbol$5 + (symbol$4 (function(view){ var id = view[3]; return let$1 @@ -14774,20 +14739,20 @@ var transaction$0 = transaction - ([0, [0, function(_k8_){return _k8_;}, Orderred_items_store[1]], 0], - _jQ_, + ([0, [0, function(_k7_){return _k7_;}, Orderred_items_store[1]], 0], + _jP_, idb), store = object_store - ([0, function(_k7_){return _k7_;}, Orderred_items_store[1]]) + ([0, function(_k6_){return _k6_;}, Orderred_items_store[1]]) (transaction$0); if(last >= first){ var i = first; for(;;){ Orderred_items_store[14].call(null, [0, i, 0], 0, store); - var _k6_ = i + 1 | 0; + var _k5_ = i + 1 | 0; if(last === i) break; - var i = _k6_; + i = _k5_; } } return; @@ -14799,15 +14764,15 @@ return let$1 (deduce_virtual_folders_from_vi(source, views), function(vfolders){ - info([0, _jT_, [0, first, [0, _jS_, [0, last, _jR_]]]]); + info([0, _jS_, [0, first, [0, _jR_, [0, last, _jQ_]]]]); var fetch_queue = create$0(0), total = (last - first | 0) + 1 | 0; function enqueue(start_index, todo){ var start_index$0 = start_index, todo$0 = todo; for(;;){ - var _k5_ = symbol$3(todo$0, 0); - if(! _k5_) return _k5_; + var _k4_ = symbol$2(todo$0, 0); + if(! _k4_) return _k4_; var limit = min(todo$0, chunk_size), req = @@ -14815,21 +14780,21 @@ 0, 0, source[2][1][4], - _jW_, + _jV_, include_item_types, [0, start_index$0], [0, limit], - _jV_, _jU_, + _jT_, 1, 0, 1]; add(req, fetch_queue); var todo$1 = todo$0 - limit | 0, - start_index$1 = start_index$0 + limit | 0, - start_index$0 = start_index$1, - todo$0 = todo$1; + start_index$1 = start_index$0 + limit | 0; + start_index$0 = start_index$1; + todo$0 = todo$1; } } enqueue(first, total); @@ -14839,21 +14804,21 @@ var sth = opt[1], threads = sth; else var threads = 1; - if(! symbol$3(threads, 0)) + if(! symbol$2(threads, 0)) throw caml_maybe_attach_backtrace - ([0, Assert_failure, _jZ_], 1); + ([0, Assert_failure, _jY_], 1); function take_n(acc, n){ var acc$0 = acc, n$0 = n; for(;;){ - if(symbol$1(n$0, 0)) return rev(acc$0); + if(symbol$0(n$0, 0)) return rev(acc$0); var match = take_opt(q); if(! match) return rev(acc$0); var elt = match[1], n$1 = n$0 - 1 | 0, - acc$1 = [0, elt, acc$0], - acc$0 = acc$1, - n$0 = n$1; + acc$1 = [0, elt, acc$0]; + acc$0 = acc$1; + n$0 = n$1; } } function f(req){ @@ -14879,17 +14844,17 @@ transaction$0 = transaction ([0, - [0, function(_k4_){return _k4_;}, Orderred_items_store[1]], - [0, [0, function(_k3_){return _k3_;}, Items_store[1]], 0]], - _jX_, + [0, function(_k3_){return _k3_;}, Orderred_items_store[1]], + [0, [0, function(_k2_){return _k2_;}, Items_store[1]], 0]], + _jW_, idb), s_list = object_store - ([0, function(_k2_){return _k2_;}, Orderred_items_store[1]]) + ([0, function(_k1_){return _k1_;}, Orderred_items_store[1]]) (transaction$0), s_items = object_store - ([0, function(_k1_){return _k1_;}, Items_store[1]]) + ([0, function(_k0_){return _k0_;}, Items_store[1]]) (transaction$0); return iteri (function(index, item){ @@ -14897,7 +14862,7 @@ path = item[4], id = item[3], index$0 = start_index + index | 0, - path$0 = value$0(path, _jY_), + path$0 = value$0(path, _jX_), views = views_of_path(vfolders, path$0), sort_name = value$0(item[2], item[1]); Orderred_items_store[14].call @@ -14916,7 +14881,7 @@ } var reqs = take_n(0, threads); return bind$0 - (of_list$1(symbol$5(f, reqs)), + (of_list$1(symbol$4(f, reqs)), function(reqs){ return is_empty(reqs) ? ok(0) : run_queue(0, q); }); @@ -14946,7 +14911,7 @@ var initial = [0, status, initial_report[2]], report$0 = - symbol$6 + symbol$5 (function(report){ caml_call1(report, initial); return function(sync_progress){ @@ -14957,41 +14922,41 @@ (caml_call1(sync(report$0, source)(idb), status), function(param){ return iter$2 - (function(report){return caml_call1(report, _j0_);}, report); + (function(report){return caml_call1(report, _jZ_);}, report); }); }); } var Queries = [0], - include$0 = _i6_(Queries), + include$0 = _i5_(Queries), dispatch_event = include$0[2], Make_worker = include$0[3], get$2 = Items_store[5], index = Items_store[13]; function on_upgrade_needed$0(e, q){ var new_version$0 = new_version(e), old_version$0 = old_version(e); - info([0, _j2_, [0, old_version$0, [0, _j1_, [0, new_version$0, 0]]]]); + info([0, _j1_, [0, old_version$0, [0, _j0_, [0, new_version$0, 0]]]]); var db = result(q), stores = object_store_names(db); - info(_j3_); - iter$0(function(_k0_){return delete_object_store(db, _k0_);}, stores); + info(_j2_); + iter$0(function(_kZ_){return delete_object_store(db, _kZ_);}, stores); var list = create_object_store - ([0, function(_kZ_){return _kZ_;}, Orderred_items_store[1]]) - (_j4_, db), + ([0, function(_kY_){return _kY_;}, Orderred_items_store[1]]) + (_j3_, db), items = - create_object_store([0, function(_kY_){return _kY_;}, Items_store[1]]) - (_j5_, db), + create_object_store([0, function(_kX_){return _kX_;}, Items_store[1]]) + (_j4_, db), virtual_folders = create_object_store - ([0, function(_kX_){return _kX_;}, Virtual_folder_store[1]]) - (_j6_, db), + ([0, function(_kW_){return _kW_;}, Virtual_folder_store[1]]) + (_j5_, db), index_date_added = caml_call1 (Items_store[12].call (null, [0, - function(_kW_){return _kW_;}, + function(_kV_){return _kV_;}, ItemsByDateAdded[12], ItemsByDateAdded[2]]), items); @@ -14999,7 +14964,7 @@ (Items_store[12].call (null, [0, - function(_kV_){return _kV_;}, + function(_kU_){return _kU_;}, ItemsByTypeAndName[12], ItemsByTypeAndName[2]]), items); @@ -15007,26 +14972,26 @@ (Items_store[12].call (null, [0, - function(_kU_){return _kU_;}, + function(_kT_){return _kT_;}, ItemsByViewAndKind[12], ItemsByViewAndKind[2]]), items); caml_call1 (Items_store[12].call - (null, [0, function(_kT_){return _kT_;}, ItemsById[12], ItemsById[2]]), + (null, [0, function(_kS_){return _kS_;}, ItemsById[12], ItemsById[2]]), items); return info ([0, - _j7_, + _j6_, [0, list, [0, items, [0, index_date_added, [0, virtual_folders, 0]]]]]); } function with_idb(version, name, f){ function f$0(ev, dbr){var db = result(dbr); return caml_call1(f, db);} - (function(_kQ_){return on_success(f$0, _kQ_);} - (function(_kR_){return on_upgrade_needed(on_upgrade_needed$0, _kR_);} - (function(_kS_){return open(name, version, _kS_);}(get_factory(0, 0))))); + (function(_kP_){return on_success(f$0, _kP_);} + (function(_kQ_){return on_upgrade_needed(on_upgrade_needed$0, _kQ_);} + (function(_kR_){return open(name, version, _kR_);}(get_factory(0, 0))))); return; } self_init(0); @@ -15043,11 +15008,11 @@ function promise(f){return f[cst_fut];} var arr = of_array(promise, fs), all$0 = all(arr); function to_array$0(l){ - return resolve(to_array(function(_kP_){return _kP_;}, l)); + return resolve(to_array(function(_kO_){return _kO_;}, l)); } return fut(bind(all$0, to_array$0)); } - function Worker(symbol){ + function Worker(symbol$0){ function check_db(idb, source){ var source$0 = source[2], server_id = source[1]; function report(status){ @@ -15056,33 +15021,32 @@ return check_and_sync([0, report], source$0, idb); } var match = create$5(0), set_idb = match[2], idb = match[1]; - (function(_kO_){return with_idb(_j9_, _j8_, _kO_);} + (function(_kN_){return with_idb(_j8_, _j7_, _kN_);} (function(idb){set_idb([0, idb]); return 0;})); function read_only_store(param){ return let$2 (idb, function(idb){ var - _kL_ = + _kK_ = transaction - ([0, [0, function(_kN_){return _kN_;}, Items_store[1]], 0], - _j__, + ([0, [0, function(_kM_){return _kM_;}, Items_store[1]], 0], + _j9_, idb); return object_store - ([0, function(_kM_){return _kM_;}, Items_store[1]]) - (_kL_); + ([0, function(_kL_){return _kL_;}, Items_store[1]]) + (_kK_); }); } var view_memo = create$2(0, 64), last_view = [0, [0, -1, [0]]]; function get_view_keys(store, param){ - var filters = param[4], sort$0 = param[3], src_views = param[2]; - if(sort$0) - var criteria = sort$0[1], sort_criteria = [0, criteria]; - else - var sort_criteria = 0; - var hash$0 = hash([0, src_views, sort_criteria, filters]); + var + filters = param[4], + sort$0 = param[3], + src_views = param[2], + hash$0 = hash([0, src_views, sort$0, filters]); if(equal$0(last_view[1][1], hash$0)) return ok(last_view[1][2]); - function _kC_(keys){ + function _kB_(keys){ a: { if(filters && ! filters[2]){ @@ -15090,56 +15054,49 @@ if(! is_empty$0(sub)){ var sub$0 = lowercase_ascii$1(sub), - _kJ_ = + _kI_ = filter (function(param){ var sort_name = param[2], sort_name$0 = lowercase_ascii$1(sort_name), - pattern = compile(caml_call1(sprintf(_j$_), sub$0)); - return symbol$4(find$0(0, pattern)(sort_name$0), 0); + pattern = compile(caml_call1(sprintf(_j__), sub$0)); + return symbol$3(find$0(0, pattern)(sort_name$0), 0); }, keys), - keys$0 = _kJ_; + keys$0 = _kI_; break a; } } var keys$0 = keys; } - a: - if(sort$0 && sort$0[1]){ + if(sort$0) sort - (function(param, _kK_){ - var snb = _kK_[2], sna = param[2]; + (function(param, _kJ_){ + var snb = _kJ_[2], sna = param[2]; return compare$0(sna, snb); }, keys$0); - break a; - } last_view[1] = [0, hash$0, keys$0]; return keys$0; } - try{ + try{var _kF_ = ok(find(view_memo, [0, src_views, sort$0])), _kE_ = _kF_;} + catch(_kG_){ + var _kC_ = caml_wrap_exception(_kG_); + if(_kC_ !== Not_found) throw caml_maybe_attach_backtrace(_kC_, 0); var - _kG_ = ok(find(view_memo, [0, src_views, sort_criteria])), - _kF_ = _kG_; - } - catch(_kH_){ - var _kD_ = caml_wrap_exception(_kH_); - if(_kD_ !== Not_found) throw caml_maybe_attach_backtrace(_kD_, 0); - var - lower = of_array(_cL_, [0, _ka_]), - upper = of_array(_cL_, [0, _kb_]), - query = bound(lower, upper, _kd_, _kc_, 0), + lower = of_array(_cK_, [0, _j$_]), + upper = of_array(_cK_, [0, _ka_]), + query = bound(lower, upper, _kc_, _kb_, 0), idx = caml_call1 (index ([0, - function(_kI_){return _kI_;}, + function(_kH_){return _kH_;}, ItemsByViewAndKind[12], ItemsByViewAndKind[2]]), store), - _kE_ = + _kD_ = let$2 (as_fut(ItemsByViewAndKind[8].call(null, [0, query], idx)), function(all_keys){ @@ -15156,12 +15113,12 @@ all_keys); else var keys = all_keys; - add$0(view_memo, [0, src_views, sort_criteria], keys); + add$0(view_memo, [0, src_views, sort$0], keys); return keys; }), - _kF_ = _kE_; + _kE_ = _kD_; } - return let$2(_kF_, _kC_); + return let$2(_kE_, _kB_); } function on_query(q){ switch(q[0]){ @@ -15197,30 +15154,30 @@ caml_call1 (index ([0, - function(_kB_){return _kB_;}, + function(_kA_){return _kA_;}, ItemsByTypeAndName[12], ItemsByTypeAndName[2]]), store), - lower = of_array(_cL_, [0, _ke_]), - upper = of_array(_cL_, [0, _kf_]), - query = bound(lower, upper, _kh_, _kg_, 0); + lower = of_array(_cK_, [0, _kd_]), + upper = of_array(_cK_, [0, _ke_]), + query = bound(lower, upper, _kg_, _kf_, 0); return let$1 (as_fut (ItemsByTypeAndName[8].call(null, [0, query], index$0)), function(keys){ return let$0 (of_list$1 - (symbol$5 + (symbol$4 (function(k){return as_fut(get$2(k, store));}, to_list(keys))), function(items){ - function _ky_(l){ - return symbol$5 - (function(_kA_){return get_exn_or(_ki_, _kA_);}, l); + function _kx_(l){ + return symbol$4 + (function(_kz_){return get_exn_or(_kh_, _kz_);}, l); } var items$0 = - function(_kz_){return symbol$7(_ky_, _kz_);} + function(_ky_){return symbol$6(_kx_, _ky_);} (flatten_l(items)); return items$0; }); @@ -15236,34 +15193,34 @@ caml_call1 (index ([0, - function(_kx_){return _kx_;}, + function(_kw_){return _kw_;}, ItemsByTypeAndName[12], ItemsByTypeAndName[2]]), store), - lower = of_array(_cL_, [0, _kj_]), - upper = of_array(_cL_, [0, _kk_]), - query = bound(lower, upper, _km_, _kl_, 0); + lower = of_array(_cK_, [0, _ki_]), + upper = of_array(_cK_, [0, _kj_]), + query = bound(lower, upper, _kl_, _kk_, 0); return let$1 (as_fut (ItemsByTypeAndName[8].call(null, [0, query], index$0)), function(keys){ return let$0 (of_list$1 - (symbol$5 + (symbol$4 (function(k){return as_fut(get$2(k, store));}, to_list(keys))), function(items){ - function _kt_(param){ + function _ks_(param){ if(param){ var item = param[1], server_id$0 = item[2][7]; - if(symbol$0(server_id$0, server_id)) return [0, item]; + if(symbol(server_id$0, server_id)) return [0, item]; } return 0; } - function _ku_(_kw_){return filter_map$0(_kt_, _kw_);} + function _kt_(_kv_){return filter_map$0(_ks_, _kv_);} var items$0 = - function(_kv_){return symbol$7(_ku_, _kv_);} + function(_ku_){return symbol$6(_kt_, _ku_);} (flatten_l(items)); return items$0; }); @@ -15277,14 +15234,12 @@ return let$2 (get_view_keys(store, request), function(keys){ - var - item_count = keys.length - 1, - order = of_sort(item_count, request[3]); - return [0, uuid, request, order, 0, item_count]; + var item_count = keys.length - 1; + return [0, uuid, request, 0, item_count]; }); }); default: - var indexes = q[2], view = q[1]; + var indexes = q[3], order = q[2], view = q[1]; return let$1 (read_only_store(0), function(store){ @@ -15297,16 +15252,16 @@ (function(index){ try{ var - index$0 = index + view[4] | 0, - index$1 = apply(view[3], index$0), + index$0 = index + view[3] | 0, + index$1 = apply(order, index$0), key = caml_check_bound(keys, index$1)[1 + index$1], - _kr_ = + _kq_ = let$0 (fut$0(get$2(key, store)), function(result){ if(0 !== result[0]){ var err = result[1]; - error([0, _kn_, [0, key, [0, err, 0]]]); + error([0, _km_, [0, key, [0, err, 0]]]); return 0; } var match = result[1]; @@ -15314,9 +15269,9 @@ var v = match[1]; return [0, v]; }); - return _kr_; + return _kq_; } - catch(_ks_){return return$0(0);} + catch(_kr_){return return$0(0);} }, indexes)), function(results){return [0, results];}); @@ -15326,10 +15281,10 @@ } return [0, , , , , on_query]; } - Make_worker(function(_kq_){return [0, Worker(_kq_)[5]];}); + Make_worker(function(_kp_){return [0, Worker(_kp_)[5]];}); do_at_exit(0); return; } (globalThis)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJkYl93b3JrZXIuYmMuanMiLCJzb3VyY2VSb290IjoiIiwibmFtZXMiOlsiY2FtbF9hcnJheV9ibGl0IiwiYTEiLCJpMSIsImEyIiwiaTIiLCJsZW4iLCJqIiwiY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIiwiYSIsImkiLCJmIiwiU3RyaW5nIiwibnVsbCIsInMiLCJNYXRoIiwiY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IiwiVWludDhBcnJheSIsImIiLCJsIiwiY2FtbF9ibGl0X2J5dGVzIiwiczEiLCJzMiIsImMxIiwiYzIiLCJjYW1sX3N0cl9yZXBlYXQiLCJuIiwiciIsImNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMiLCJqc29vX2lzX2FzY2lpIiwiY2FtbF91dGYxNl9vZl91dGY4IiwidCIsImMiLCJ2IiwiTWxCeXRlcyIsInRhZyIsImNvbnRlbnRzIiwibGVuZ3RoIiwidGhpcyIsImNvbnRlbnQiLCJjYW1sX2J5dGVzX29mX2pzYnl0ZXMiLCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIiwieCIsImNhbWxfYnl0ZXNfb2Zfc3RyaW5nIiwiY2FtbF9ibGl0X3N0cmluZyIsImQiLCJlIiwianNvb19zeXNfZ2V0ZW52IiwicHJvY2VzcyIsImdsb2JhbFRoaXMiLCJ1bmRlZmluZWQiLCJjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyIsImNhbWxfZ2xvYmFsX2RhdGEiLCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZSIsImV4biIsImZvcmNlIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9yYWlzZV93aXRoX2FyZyIsImFyZyIsImNhbWxfc3RyaW5nX29mX2pzYnl0ZXMiLCJjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIiwibXNnIiwiY2FtbF9pbnZhbGlkX2FyZ3VtZW50IiwiY2FtbF9ieXRlc19ib3VuZF9lcnJvciIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9ieXRlc191bnNhZmVfZ2V0IiwiY2FtbF9jYWxsX2dlbiIsImFyZ3MiLCJhcmdzTGVuIiwiZyIsIm5hcmdzIiwiQXJyYXkiLCJ5IiwiZXh0cmFfYXJncyIsImFyZ3VtZW50cyIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX2NoZWNrX2JvdW5kIiwiYXJyYXkiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwib2ZzIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2ZpbGxfYnl0ZXMiLCJjYW1sX2Zsb2F0X29mX3N0cmluZyIsIm0iLCJtMyIsIm1hbnRpc3NhIiwicGFyc2VJbnQiLCJleHBvbmVudCIsImNhbWxfcGFyc2VfZm9ybWF0IiwiZm10IiwiY2FtbF9maW5pc2hfZm9ybWF0dGluZyIsInJhd2J1ZmZlciIsImNhbWxfZm9ybWF0X2Zsb2F0IiwidG9GaXhlZCIsImRwIiwicHJlYyIsInAiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX29vX2xhc3RfaWQiLCJjYW1sX2ZyZXNoX29vX2lkIiwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmciLCJmc19ub2RlX3N1cHBvcnRlZCIsIm1ha2VfcGF0aF9pc19hYnNvbHV0ZSIsInBvc2l4IiwicGF0aCIsIndpbjMyIiwic3BsaXREZXZpY2VSZSIsInJlc3VsdCIsImRldmljZSIsImlzVW5jIiwiQm9vbGVhbiIsInJvb3QiLCJzZXAiLCJwYXRoX2lzX2Fic29sdXRlIiwiY2FtbF90cmFpbGluZ19zbGFzaCIsImNhbWxfY3VycmVudF9kaXIiLCJjYW1sX21ha2VfcGF0aCIsImNvbXAwIiwibmNvbXAiLCJjYW1sX3V0Zjhfb2ZfdXRmMTYiLCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZyIsInVuaXhfZXJyb3IiLCJtYWtlX3VuaXhfZXJyX2FyZ3MiLCJjb2RlIiwic3lzY2FsbCIsImVycm5vIiwidmFyaWFudCIsImNhbWxfbmFtZWRfdmFsdWVzIiwiY2FtbF9uYW1lZF92YWx1ZSIsIm5tIiwiY2FtbF9yYWlzZV93aXRoX2FyZ3MiLCJjYW1sX2J5dGVzX29mX2FycmF5IiwiY2FtbF9yYWlzZV9zeXNfZXJyb3IiLCJjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSIsImNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsIk1sRmlsZSIsIk1sRmFrZUZpbGUiLCJvbGQiLCJidWYiLCJwb3MiLCJjbGVuIiwibmV3X3N0ciIsIm9sZF9kYXRhIiwiTWxGYWtlRmQiLCJmaWxlIiwiZmxhZ3MiLCJNbEZha2VEZXZpY2UiLCJTeW1ib2wiLCJuYW1lX3NsYXNoIiwibW9kZSIsInJhaXNlX3VuaXgiLCJwYXJlbnQiLCJSZWdFeHAiLCJzZWVuIiwiZW50cnkiLCJvayIsImJ5dGVzIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfdW5zYWZlX2dldCIsImNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIiwiTWxOb2RlRmQiLCJmZCIsInJlcXVpcmUiLCJlcnIiLCJidWZfb2Zmc2V0IiwicmVhZCIsIk1sTm9kZURldmljZSIsImNvbnN0cyIsImtleSIsImlzQ2hhcmFjdGVyRGV2aWNlIiwibyIsImpzX3N0YXRzIiwidG9fZGlyIiwidGFyZ2V0IiwibGluayIsImZpbGVfa2luZCIsImNhbWxfZ2V0X3Jvb3QiLCJjYW1sX3Jvb3QiLCJqc29vX21vdW50X3BvaW50IiwicmVzb2x2ZV9mc19kZXZpY2UiLCJjYW1sX2NyZWF0ZV9maWxlIiwianNvb19jcmVhdGVfZmlsZSIsImNhbWxfZnNfaW5pdCIsInRtcCIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9oYXNoX21peF9qc2J5dGVzIiwiY2FtbF9oYXNoX21peF9zdHJpbmciLCJjYW1sX2hhc2hfbWl4X2J5dGVzX2FyciIsImNhbWxfbWxfYnl0ZXNfY29udGVudCIsImNhbWxfaGFzaF9taXhfYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X2ZpbmFsIiwiY2FtbF9oYXNoIiwiY291bnQiLCJsaW1pdCIsInNlZWQiLCJvYmoiLCJxdWV1ZSIsInJkIiwid3IiLCJoaCIsImNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0Iiwic3R5bGUiLCJleHBfc2lnbiIsInNpZ25fc3RyIiwiY3N0IiwieF9zdHIiLCJpZHgiLCJjYW1sX2ludDY0X2lzX3plcm8iLCJjYW1sX2ludDY0X29mX2ludDMyIiwiY2FtbF9pbnQ2NF90b19pbnQzMiIsImNhbWxfaW50NjRfaXNfbmVnYXRpdmUiLCJjYW1sX2ludDY0X25lZyIsImNhbWxfaW50NjRfZm9ybWF0Iiwid2Jhc2UiLCJjdnRibCIsImNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSIsImJhc2UiLCJjYW1sX3BhcnNlX2RpZ2l0IiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwidGhyZXNob2xkIiwiY2FtbF9qc19mcm9tX2FycmF5IiwiY2FtbF9qc19tZXRoX2NhbGwiLCJjYW1sX2pzX25ldyIsIkYiLCJjYW1sX2pzX29iamVjdCIsImNhbWxfanNfdG9fYXJyYXkiLCJjYW1sX2NhbGxiYWNrIiwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCIsImFyaXR5IiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9sZXhfYXJyYXkiLCJjYW1sX2xleF9lbmdpbmUiLCJ0YmwiLCJzdGFydF9zdGF0ZSIsImxleGJ1ZiIsImxleF9idWZmZXIiLCJsZXhfYnVmZmVyX2xlbiIsImxleF9zdGFydF9wb3MiLCJsZXhfY3Vycl9wb3MiLCJsZXhfbGFzdF9wb3MiLCJsZXhfbGFzdF9hY3Rpb24iLCJsZXhfZW9mX3JlYWNoZWQiLCJsZXhfYmFzZSIsImxleF9iYWNrdHJrIiwibGV4X2RlZmF1bHQiLCJsZXhfdHJhbnMiLCJsZXhfY2hlY2siLCJzdGF0ZSIsImJhY2t0cmsiLCJjYW1sX21ha2VfdmVjdCIsImluaXQiLCJjYW1sX01ENUluaXQiLCJBcnJheUJ1ZmZlciIsImIzMiIsIlVpbnQzMkFycmF5IiwiYjgiLCJjYW1sX01ENVRyYW5zZm9ybSIsImFkZCIsInh4IiwiZmYiLCJnZyIsImlpIiwiY2FtbF9NRDVVcGRhdGUiLCJjdHgiLCJpbnB1dCIsImlucHV0X2xlbiIsImluX2J1ZiIsImlucHV0X3BvcyIsIm1pc3NpbmciLCJjYW1sX01ENUZpbmFsIiwiY2FtbF9zdHJpbmdfb2ZfYXJyYXkiLCJjYW1sX21kNV9ieXRlcyIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfc3lzX2ZkcyIsImNhbWxfc3lzX2Nsb3NlIiwiY2FtbF9tbF9jaGFubmVscyIsImNhbWxfbWxfZmx1c2giLCJjaGFuaWQiLCJjaGFuIiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyIsImNhbWxfcmVmaWxsIiwic3RyIiwic3RyX2EiLCJucmVhZCIsImNhbWxfbWxfaW5wdXRfYmxvY2siLCJhdmFpbCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX3N5c19vcGVuX2Zvcl9ub2RlIiwiZnMiLCJmZDIiLCJNbEZha2VGZF9vdXQiLCJjb25zb2xlIiwic3JjIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImNhbWxfc3lzX29wZW4iLCJfcGVybXMiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsInJlZmlsbCIsImNoYW5uZWwiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQiLCJidWZmZXJlZCIsImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QiLCJjYW1sX21sX291dHB1dF90YSIsImlkIiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJjYW1sX21sX291dHB1dCIsImNhbWxfbWxfb3V0cHV0X2NoYXIiLCJjYW1sX21sX3NldF9jaGFubmVsX25hbWUiLCJjYW1sX21vZCIsImNhbWxfbm90ZXF1YWwiLCJjYW1sX29ial9tYWtlX2ZvcndhcmQiLCJjYW1sX29ial90YWciLCJGdW5jdGlvbiIsImNhbWxfYnVpbGRfc3ltYm9scyIsInN5bWIiLCJjYW1sX3JlZ2lzdGVyX2dsb2JhbCIsIm5hbWVfb3B0IiwibmlkIiwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSIsImNhbWxfc3RyaW5nX2VxdWFsIiwiY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ19ub3RlcXVhbCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfcmFpc2Vfbm90X2ZvdW5kIiwiY2FtbF9zeXNfZ2V0ZW52IiwiY2FtbF9zeXNfcmFuZG9tX3NlZWQiLCJub3ciLCJEYXRlIiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uIiwiY2FtbF9mb3JtYXRfZXhjZXB0aW9uIiwiYnVja2V0Iiwic3RhcnQiLCJjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImhhbmRsZXIiLCJhdF9leGl0IiwiY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsIm9yaWdpbiIsImV2ZW50IiwiemVyb19wb3MiLCJsb2NmbXQiLCJvY2FtbF9sZXhfdGFibGVzIiwidHBfbG9jIiwidHBfbG9jJDAiLCJ0cF9sb2MkMSIsInRwX2xvYyQyIiwidHBfbG9jJDMiLCJ0cF9sb2MkNCIsInRwX2xvYyQ1IiwidHBfbG9jJDYiLCJ0cF9sb2MkNyIsInRwX2xvYyQ4IiwidHBfbG9jJDkiLCJ0cF9sb2MkMTAiLCJuYW1lJDIiLCJ0cF9sb2MkMTEiLCJ0cF9sb2MkMTIiLCJwYXRoJDEiLCJwYXRoJDIiLCJuYW1lJDMiLCJwYXRoJDUiLCJuYW1lJDQiLCJuYW1lJDUiLCJuYW1lJDYiLCJuYW1lJDciLCJuYW1lJDgiLCJpbmNsdWRlX2l0ZW1fdHlwZXMiLCJpbml0aWFsX3JlcG9ydCIsImVyYXNlX3JlbCIsInJlc3QiLCJyZXN0JDAiLCJyZXN0JDEiLCJyZXN0JDIiLCJyZXN0JDMiLCJyZXN0JDQiLCJyZXN0JDUiLCJyZXN0JDYiLCJyZXN0JDciLCJ0eSIsInJlc3QkOCIsInR5MSIsInJlc3QkOSIsInJlc3QkMTAiLCJyZXN0JDExIiwicmVzdCQxMiIsInJlc3QkMTMiLCJjb25jYXRfZm10dHkiLCJmbXR0eTEiLCJmbXR0eTIiLCJ0eTIiLCJjb25jYXRfZm10IiwiZm10MSIsImZtdDIiLCJwYWQiLCJwYWQkMCIsInBhZCQxIiwiaWNvbnYiLCJwcmVjJDAiLCJwYWQkMiIsImljb252JDAiLCJwcmVjJDEiLCJwYWQkMyIsImljb252JDEiLCJwcmVjJDIiLCJwYWQkNCIsImljb252JDIiLCJwcmVjJDMiLCJwYWQkNSIsImZjb252IiwicGFkJDYiLCJjaHIiLCJmbXR0eSIsInBhZCQ3IiwiZm10dHkkMCIsInBhZCQ4IiwicmVzdCQxNCIsInJlc3QkMTUiLCJyZXN0JDE2IiwiZm10aW5nX2xpdCIsInJlc3QkMTciLCJmbXRpbmdfZ2VuIiwicmVzdCQxOCIsInJlc3QkMTkiLCJjaGFyX3NldCIsIndpZHRoX29wdCIsInJlc3QkMjAiLCJjb3VudGVyIiwicmVzdCQyMSIsInJlc3QkMjIiLCJpZ24iLCJyZXN0JDIzIiwiY3VyIiwiZmFpbHdpdGgiLCJpbnZhbGlkX2FyZyIsImFicyIsIm1heF9pbnQiLCJsMSIsImwyIiwiY2hhcl9vZl9pbnQiLCJzdHJpbmdfb2ZfYm9vbCIsInN0cmluZ19vZl9pbnQiLCJ2YWxpZF9mbG9hdF9sZXhlbSIsImxvb3AiLCJpJDAiLCJpJDEiLCJzdHJpbmdfb2ZfZmxvYXQiLCJzdGRvdXQiLCJzdGRlcnIiLCJvcGVuX291dF9nZW4iLCJwZXJtIiwib3Blbl9vdXQiLCJmbHVzaF9hbGwiLCJpdGVyIiwib3V0cHV0X3N0cmluZyIsIm9jIiwib3V0cHV0X3N1YnN0cmluZyIsImNsb3NlX291dCIsIm9wZW5faW5fZ2VuIiwib3Blbl9pbiIsImljIiwicHJlcnJfZW5kbGluZSIsImV4aXRfZnVuY3Rpb24iLCJmX3lldF90b19ydW4iLCJvbGRfZXhpdCIsImZfeWV0X3RvX3J1biQwIiwib2xkX2V4aXQkMCIsIm5ld19leGl0Iiwic3VjY2VzcyIsImRvX2F0X2V4aXQiLCJpc19ibG9jayIsInJhaXNlX3VuZGVmaW5lZCIsImZvcmNlX2xhenlfYmxvY2siLCJibGsiLCJjbG9zdXJlIiwiZSQwIiwidmFsdWUiLCJkZWZhdWx0JDAiLCJtYXAiLCJnZXRfb2siLCJtYXAkMCIsIm9mX2ludF9leG4iLCJzJDAiLCJoZCIsInJldl9hcHBlbmQiLCJsMSQwIiwibDIkMCIsImwxJDEiLCJsMiQxIiwicmV2IiwiaW5pdF90YWlscmVjX2F1eCIsImFjYyIsImFjYyQwIiwiYWNjJDEiLCJpbml0X2F1eCIsInJtYXBfZiIsImFjY3UkMCIsImFjY3UiLCJsJDAiLCJsJDEiLCJhY2N1JDEiLCJtaW4kMCIsIm1heCIsInRvX3N0cmluZyIsIm9mczEiLCJvZnMyIiwiZW5zdXJlX2dlIiwic3VtX2xlbmd0aHMiLCJzZXBsZW4iLCJ0bCIsInVuc2FmZV9ibGl0cyIsImRzdCIsInBvcyQwIiwiZXNjYXBlX2lmX25lZWRlZCIsImluZGV4X3JlYyIsImxpbSIsInRvbGlzdCIsInJlcyQwIiwicmVzJDEiLCJsaXN0X2xlbmd0aCIsImZpbGwiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJ0cmlja2xlZG93biIsInRyaWNrbGUiLCJidWJibGVkb3duIiwiYnViYmxlIiwidHJpY2tsZXVwIiwiZmF0aGVyIiwibGV4X3JlZmlsbCIsInJlYWRfZnVuIiwiYXV4X2J1ZmZlciIsIm5ld2xlbiIsIm5ld2J1ZiIsIm9wdCIsInN0aCIsIndpdGhfcG9zaXRpb25zIiwiaGVpZ2h0IiwiY3JlYXRlIiwiaGwiLCJoJDAiLCJociIsImJhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZF9sYXN0X29wdF9hdXgiLCJ2MCQwIiwiZmluZF9sYXN0X29wdCIsImNsZWFyIiwicHVzaCIsInBvcF9vcHQiLCJ0b3Bfb3B0IiwiaXRlciQxIiwiY3JlYXRlJDAiLCJjbGVhciQwIiwiY2VsbCIsIm1hdGNoIiwicGVla19vcHQiLCJ0YWtlIiwibmV4dCIsInRha2Vfb3B0IiwiZnJvbSIsImNyZWF0ZSQxIiwibiQwIiwibiQxIiwic3ViJDEiLCJsZW5ndGgkMCIsInJlc2V0IiwicmVzaXplIiwibW9yZSIsIm9sZF9wb3MiLCJvbGRfbGVuIiwibmV3X2xlbiIsIm5ld19idWZmZXIiLCJhZGRfY2hhciIsImFkZF9zdWJzdHJpbmciLCJuZXdfcG9zaXRpb24iLCJhZGRfc3RyaW5nIiwiZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24iLCJidWZmZXJfY3JlYXRlIiwiaW5pdF9zaXplIiwiYnVmZmVyX2NoZWNrX3NpemUiLCJvdmVyaGVhZCIsIm1pbl9sZW4iLCJidWZmZXJfYWRkX2NoYXIiLCJidWZmZXJfYWRkX3N0cmluZyIsInN0cl9sZW4iLCJidWZmZXJfY29udGVudHMiLCJjaGFyX29mX2Zjb252IiwiY0YiLCJicHJpbnRfZmNvbnZfZmxhZyIsInN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCIsImZvcm1hdHRpbmdfbGl0Iiwic3RyJDAiLCJicHJpbnRfZm10dHkiLCJmbXR0eSQxIiwiZm10dHkkMiIsImZtdHR5JDMiLCJmbXR0eSQ0IiwiZm10dHkkNSIsImZtdHR5JDYiLCJmbXR0eSQ3IiwiZm10dHkkOCIsImZtdHR5JDkiLCJzdWJfZm10dHkiLCJmbXR0eSQxMCIsInN1Yl9mbXR0eSQwIiwiZm10dHkkMTEiLCJmbXR0eSQxMiIsImZtdHR5JDEzIiwiZm10dHkkMTQiLCJmbXR0eSQxNSIsInN5bW0iLCJmbXR0eV9yZWxfZGV0IiwiZGUiLCJlZCIsImFmIiwiZmEiLCJkZSQwIiwiZWQkMCIsImFmJDAiLCJmYSQwIiwiZGUkMSIsImVkJDEiLCJhZiQxIiwiZmEkMSIsImRlJDIiLCJlZCQyIiwiYWYkMiIsImZhJDIiLCJkZSQzIiwiZWQkMyIsImFmJDMiLCJmYSQzIiwiZGUkNCIsImVkJDQiLCJhZiQ0IiwiZmEkNCIsImRlJDUiLCJlZCQ1IiwiYWYkNSIsImZhJDUiLCJkZSQ2IiwiZWQkNiIsImFmJDYiLCJmYSQ2IiwiZGUkNyIsImVkJDciLCJhZiQ3IiwiZmEkNyIsImRlJDgiLCJlZCQ4IiwiYWYkOCIsImZhJDgiLCJ0cmFucyIsImpkIiwiZGoiLCJnYSIsImFnIiwiZGUkOSIsImVkJDkiLCJhZiQ5IiwiZmEkOSIsImRlJDEwIiwiZWQkMTAiLCJhZiQxMCIsImZhJDEwIiwiZGUkMTEiLCJlZCQxMSIsImFmJDExIiwiZmEkMTEiLCJkZSQxMiIsImVkJDEyIiwiYWYkMTIiLCJmYSQxMiIsImRlJDEzIiwiZWQkMTMiLCJhZiQxMyIsImZhJDEzIiwicmVzdDEiLCJyZXN0MiIsInJlc3QxJDAiLCJyZXN0MiQwIiwicmVzdDEkMSIsInJlc3QyJDEiLCJyZXN0MSQyIiwicmVzdDIkMiIsInJlc3QxJDMiLCJyZXN0MiQzIiwicmVzdDEkNCIsInJlc3QyJDQiLCJyZXN0MSQ1IiwicmVzdDIkNSIsInJlc3QxJDYiLCJyZXN0MiQ2IiwicmVzdDEkNyIsInR5MSQwIiwicmVzdDIkNyIsInR5MiQwIiwicmVzdDEkOCIsInR5MTIiLCJ0eTExIiwicmVzdDIkOCIsInR5MjIiLCJ0eTIxIiwiZjQiLCJmMiIsInJlc3QxJDkiLCJyZXN0MiQ5IiwicmVzdDEkMTAiLCJyZXN0MiQxMCIsInJlc3QxJDExIiwicmVzdDIkMTEiLCJyZXN0MSQxMiIsInJlc3QyJDEyIiwicmVzdDEkMTMiLCJyZXN0MiQxMyIsInR5cGVfcGFkZGluZyIsInBhZHR5IiwicGFkdHkkMCIsInR5cGVfcGFkcHJlYyIsInR5cGVfZm9ybWF0IiwidHlwZV9mb3JtYXRfZ2VuIiwiZm10JDAiLCJmbXR0eV9yZXN0IiwiZm10X3Jlc3QiLCJmbXR0eV9yZXN0JDAiLCJmbXRfcmVzdCQwIiwiZm10JDEiLCJmbXRfcmVzdCQxIiwiZm10dHlfcmVzdCQxIiwiZm10JDIiLCJmbXRfcmVzdCQyIiwiZm10dHlfcmVzdCQyIiwiZm10JDMiLCJmbXRfcmVzdCQzIiwiZm10dHlfcmVzdCQzIiwiZm10JDQiLCJmbXRfcmVzdCQ0IiwiZm10dHlfcmVzdCQ0IiwiZm10JDUiLCJmbXRfcmVzdCQ1IiwiZm10dHlfcmVzdCQ1IiwicHJlYyQ0IiwiZm10JDYiLCJmbXRfcmVzdCQ2IiwicHJlYyQ1IiwicGFkJDkiLCJwYWQkMTAiLCJmbXR0eV9yZXN0JDYiLCJwcmVjJDYiLCJmbXQkNyIsImZtdF9yZXN0JDciLCJwcmVjJDciLCJwYWQkMTEiLCJwYWQkMTIiLCJmbXR0eV9yZXN0JDciLCJwcmVjJDgiLCJmbXQkOCIsImZtdF9yZXN0JDgiLCJwYWQkMTMiLCJwYWQkMTQiLCJmbXR0eV9yZXN0JDgiLCJmbXQkOSIsImZtdF9yZXN0JDkiLCJmbXQkMTAiLCJmbXRfcmVzdCQxMCIsImZtdCQxMSIsImZtdF9yZXN0JDExIiwiZm10JDEyIiwiZm10dHlfcmVzdCQ5IiwiZm10X3Jlc3QkMTIiLCJwYWRfb3B0IiwiZm10JDEzIiwiZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eTEiLCJmbXRfcmVzdCQxMyIsInN1Yl9mbXR0eSQxIiwicGFkX29wdCQwIiwiZm10JDE0IiwiZm10dHlfcmVzdCQxMSIsImZtdF9yZXN0JDE0IiwiZm10JDE1IiwiZm10dHlfcmVzdCQxMiIsImZtdF9yZXN0JDE1IiwiZm10dHkkMTYiLCJmbXQkMTYiLCJmbXRfcmVzdCQxNiIsImZtdHR5JDE3IiwiZm10JDE3IiwiZm10X3Jlc3QkMTciLCJmb3JtYXR0aW5nX2dlbiIsInR5cGVfZm9ybWF0dGluZ19nZW4iLCJmbXR0eV9yZXN0JDEzIiwiZm10X3Jlc3QkMTgiLCJmbXR0eSQxOCIsImZtdCQxOCIsImZtdHR5X3Jlc3QkMTQiLCJmbXRfcmVzdCQxOSIsImZtdHR5JDE5IiwiZm10JDE5IiwiZm10dHlfcmVzdCQxNSIsImZtdF9yZXN0JDIwIiwiZm10dHkkMjAiLCJmbXQkMjAiLCJ0eXBlX2lnbm9yZWRfcGFyYW0iLCJmbXQwIiwiZm10dHkwIiwiZm10dHkzIiwiZm10MyIsImZtdDEkMCIsImZtdHR5MiQwIiwiZm10MiQwIiwiZm10dHkzJDAiLCJmbXQzJDAiLCJ0eXBlX2lnbm9yZWRfcGFyYW1fb25lIiwidHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpIiwic3ViX2ZtdHR5X3Jlc3QiLCJzdWJfZm10dHlfcmVzdCQwIiwic3ViX2ZtdHR5X3Jlc3QkMSIsInN1Yl9mbXR0eV9yZXN0JDIiLCJzdWJfZm10dHlfcmVzdCQzIiwic3ViX2ZtdHR5X3Jlc3QkNCIsInN1Yl9mbXR0eV9yZXN0JDUiLCJzdWJfZm10dHlfcmVzdCQ2Iiwic3ViX2ZtdHR5X3Jlc3QkNyIsInN1Yl9mbXR0eV9yZXN0JDgiLCJzdWJfZm10dHlfcmVzdCQ5Iiwic3ViX2ZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHlfcmVzdCQxMSIsInN1Yl9mbXR0eV9yZXN0JDEyIiwic3ViX2ZtdHR5X3Jlc3QkMTMiLCJzdWJfZm10dHlfcmVzdCQxNCIsInN1YjJfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNSIsInN1YjJfZm10dHkkMCIsInN1Yl9mbXR0eV9yZXN0JDE2Iiwic3ViMl9mbXR0eSQxIiwic3ViMV9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE3Iiwic3ViMl9mbXR0eSQyIiwic3ViMV9mbXR0eSQwIiwic3ViX2ZtdHR5X3Jlc3QkMTgiLCJzdWJfZm10dHlfcmVzdCQxOSIsInN1Yl9mbXR0eV9yZXN0JDIwIiwic3ViX2ZtdHR5X3Jlc3QkMjEiLCJzdWJfZm10dHlfcmVzdCQyMiIsInN1Yl9mbXR0eV9yZXN0JDIzIiwic3ViX2ZtdHR5X3Jlc3QkMjQiLCJzdWJfZm10dHlfcmVzdCQyNSIsInN1Yl9mbXR0eV9yZXN0JDI2IiwicmVjYXN0IiwiZml4X3BhZGRpbmciLCJ3aWR0aCIsIndpZHRoJDAiLCJmaXhfaW50X3ByZWNpc2lvbiIsInN0cmluZ190b19jYW1sX3N0cmluZyIsImZvcm1hdF9vZl9pY29udiIsImZvcm1hdF9vZl9pY29udkwiLCJmb3JtYXRfb2ZfaWNvbnZsIiwiZm9ybWF0X29mX2ljb252biIsImZvcm1hdF9vZl9mY29udiIsInRyYW5zZm9ybV9pbnRfYWx0IiwiZGlnaXRzIiwicHV0IiwibGVmdCIsImNvbnZlcnRfaW50IiwiY29udmVydF9pbnQzMiIsImNvbnZlcnRfbmF0aXZlaW50IiwiY29udmVydF9pbnQ2NCIsImNvbnZlcnRfZmxvYXQiLCJoZXgiLCJhZGRfZG90X2lmX25lZWRlZCIsImlzX3ZhbGlkIiwiY2FtbF9zcGVjaWFsX3ZhbCIsImZvcm1hdF9jYW1sX2NoYXIiLCJzdHJpbmdfb2ZfZm10dHkiLCJtYWtlX3ByaW50ZiQwIiwiayQwIiwibmV3X2FjYyIsIm1ha2VfcHJpbnRmIiwibWFrZV9wYWRkaW5nIiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIiwiYWNjJDIiLCJhY2MkMyIsImFjYyQ0IiwiayQxIiwia2FjYyIsImskMiIsIm1ha2VfaWdub3JlZF9wYXJhbSIsIm1ha2VfY3VzdG9tJDAiLCJtYWtlX2ludmFsaWRfYXJnIiwibWFrZV9mcm9tX2ZtdHR5JDAiLCJtYWtlX2Zyb21fZm10dHkiLCJwJDAiLCJwJDEiLCJhcml0eSQwIiwibWFrZV9jdXN0b20iLCJvdXRwdXRfYWNjIiwicCQzIiwicCQ0IiwicCQ1IiwicCQyIiwic3RycHV0X2FjYyIsImZhaWx3aXRoX21lc3NhZ2UiLCJvcGVuX2JveF9vZl9zdHJpbmciLCJpbnZhbGlkX2JveCIsInBhcnNlX3NwYWNlcyIsInBhcnNlX2x3b3JkIiwiaiQwIiwiaiQxIiwicGFyc2VfaW50Iiwid3N0YXJ0Iiwid2VuZCIsImJveF9uYW1lIiwibnN0YXJ0IiwibmVuZCIsImluZGVudCIsImV4cF9lbmQiLCJib3hfdHlwZSIsImtmcHJpbnRmIiwiZnByaW50ZiIsImVwcmludGYiLCJrc3ByaW50ZiIsInNwcmludGYiLCJwcmludGVycyIsImZpZWxkIiwib3RoZXJfZmllbGRzIiwiZmllbGRzIiwidXNlX3ByaW50ZXJzIiwiY29udiIsInRvX3N0cmluZ19kZWZhdWx0IiwiY2hhciQwIiwibGluZSIsImNoYXIkMSIsImxpbmUkMCIsImZpbGUkMCIsImNoYXIkMiIsImxpbmUkMSIsImZpbGUkMSIsImNvbnN0cnVjdG9yIiwidG9fc3RyaW5nJDAiLCJjb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJidCIsImZvcm1hdF9iYWNrdHJhY2Vfc2xvdCIsInNsb3QiLCJpbmZvIiwiaXNfcmFpc2UiLCJwcmludF9leGNlcHRpb25fYmFja3RyYWNlIiwib3V0Y2hhbiIsImJhY2t0cmFjZSIsInByaW50X3Jhd19iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwiZXJyb3JzIiwiZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuIiwic3RhdHVzIiwiZW1wdHlfYmFja3RyYWNlIiwidHJ5X2dldF9yYXdfYmFja3RyYWNlIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImRlYnVnZ2VyX2luX3VzZSIsImV4biQxIiwiZXhuJDAiLCJyYXdfYmFja3RyYWNlJDAiLCJoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJDAiLCJuZXdfc3RhdGUiLCJhc3NpZ24iLCJzdDEiLCJzdDIiLCJmdWxsX2luaXQiLCJjb21iaW5lIiwiZXh0cmFjdCIsInNlZWQkMCIsIm1ha2UkMiIsIm1ha2Vfc2VsZl9pbml0IiwiY29weSQwIiwiYml0cyIsImN1cnZhbCIsIm5ld3ZhbCIsIm5ld3ZhbDMwIiwiaW50YXV4IiwiaW50JDAiLCJib3VuZCIsImludCQxIiwib25nb2luZ190cmF2ZXJzYWwiLCJwYXJhbXMiLCJyYW5kb21pemVkX2RlZmF1bHQiLCJwcm5nIiwicG93ZXJfMl9hYm92ZSIsIngkMCIsIngkMSIsImluaXRpYWxfc2l6ZSIsInJhbmRvbSIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJpbnNlcnRfYnVja2V0IiwiY2VsbCQwIiwiY2VsbCQxIiwibmlkeCIsInJlc2l6ZSQwIiwib3NpemUiLCJrZXlfaW5kZXgiLCJyZW1vdmVfYnVja2V0IiwiZmluZF9yZWMiLCJkMSIsIm5leHQxIiwiZDIiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfaW5fYnVja2V0IiwiemVybyIsInVua25vd24iLCJpc19rbm93biIsInBwX2VucXVldWUiLCJ0b2tlbiIsInBwX2NsZWFyX3F1ZXVlIiwicHBfaW5maW5pdHkiLCJwcF9vdXRwdXRfc3RyaW5nIiwicHBfb3V0cHV0X25ld2xpbmUiLCJwcF9vdXRwdXRfc3BhY2VzIiwicHBfb3V0cHV0X2luZGVudCIsImZvcm1hdF9wcF90ZXh0IiwidGV4dCIsImZvcm1hdF9zdHJpbmciLCJicmVha19uZXdfbGluZSIsImFmdGVyIiwiYmVmb3JlIiwicmVhbF9pbmRlbnQiLCJicmVha19saW5lIiwiYnJlYWtfc2FtZV9saW5lIiwicHBfZm9yY2VfYnJlYWtfbGluZSIsInBwX3NraXBfdG9rZW4iLCJmb3JtYXRfcHBfdG9rZW4iLCJ0YWJzIiwiYWRkX3RhYiIsImxzIiwidGFnX25hbWUiLCJtYXJrZXIiLCJicmVha3MiLCJmaXRzIiwib2ZmIiwib2ZmJDAiLCJpbnNlcnRpb25fcG9pbnQiLCJ0YWJzJDAiLCJmaXJzdCIsImZpbmQiLCJ0YWlsIiwiaGVhZCIsInRhYiIsIm9mZiQxIiwiaW5zZXJ0aW9uX3BvaW50JDAiLCJ3aWR0aCQxIiwiYm94X3R5cGUkMCIsInRib3giLCJ0YWdfbmFtZSQwIiwibWFya2VyJDAiLCJhZHZhbmNlX2xlZnQiLCJwZW5kaW5nX2NvdW50Iiwic2l6ZSQwIiwiZW5xdWV1ZV9hZHZhbmNlIiwidG9rIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJlbnF1ZXVlX3N0cmluZyIsImluaXRpYWxpemVfc2Nhbl9zdGFjayIsInF1ZXVlX2VsZW0iLCJzZXRfc2l6ZSIsImxlZnRfdG90YWwiLCJzY2FuX3B1c2giLCJlbGVtIiwicHBfb3Blbl9ib3hfZ2VuIiwiYnJfdHkiLCJwcF9vcGVuX3N5c19ib3giLCJwcF9jbG9zZV9ib3giLCJwcF9vcGVuX3N0YWciLCJwcF9jbG9zZV9zdGFnIiwicHBfY2xvc2VfdGFnIiwicHBfcmluaXQiLCJjbGVhcl90YWdfc3RhY2siLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYm9vbCIsInBwX3ByaW50X2NoYXIiLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfY3VzdG9tX2JyZWFrIiwicHBfcHJpbnRfYnJlYWsiLCJwcF9wcmludF9jdXQiLCJkaXNwbGF5X25ld2xpbmUiLCJibGFua19saW5lIiwiZGlzcGxheV9ibGFua3MiLCJkZWZhdWx0X3BwX21hcmtfb3Blbl90YWciLCJkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnIiwiZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnIiwicHBfbWFrZV9mb3JtYXR0ZXIiLCJwcF9xdWV1ZSIsInN5c190b2siLCJzY2FuX3N0YWNrIiwicHBfbWFyZ2luIiwibWFrZV9mb3JtYXR0ZXIiLCJvdXRwdXQiLCJmbHVzaCIsInBwZiIsImZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCIsImZvcm1hdHRlcl9vZl9idWZmZXIiLCJwcF9idWZmZXJfc2l6ZSIsInBwX21ha2VfYnVmZmVyIiwic3RkYnVmIiwic3RkX2Zvcm1hdHRlciIsImVycl9mb3JtYXR0ZXIiLCJmbHVzaF9idWZmZXJfZm9ybWF0dGVyIiwicHBfcHJpbnRfbGlzdCIsInBwX3YiLCJvcHQkMCIsInBwX3NlcCIsIm9wdCQxIiwiY29tcHV0ZV90YWciLCJ0YWdfYWNjIiwib3V0cHV0X2Zvcm1hdHRpbmdfbGl0Iiwib3V0cHV0X2FjYyQwIiwiYnR5IiwiYyQwIiwiZiQwIiwicCQ2IiwicCQ3Iiwia2ZwcmludGYkMCIsImZwcmludGYkMCIsImthc3ByaW50ZiIsImFzcHJpbnRmIiwiZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsInRvX2p2Iiwia2V5cyIsImxvd2VyIiwidXBwZXIiLCJsb3dlcl9vcGVuIiwic3RoJDAiLCJ1cHBlcl9vcGVuIiwib2xkX3ZlcnNpb24iLCJuZXdfdmVyc2lvbiIsInVwZ3JhZGVfbmVlZGVkIiwiZXJyb3IkMCIsIm9mX2p2IiwiZXJyb3IkMSIsIm9uX3N1Y2Nlc3MiLCJldiIsIm9uX2Vycm9yIiwiZnV0JDAiLCJzZXQiLCJyZXN1bHRfZnV0IiwidG9fc3RyaW5nJDEiLCJ0b19qdiQwIiwiZ2V0IiwianYiLCJnZXRfYWxsIiwiZ2V0X2FsbF9rZXlzIiwicXVlcnkiLCJxdWVyeSQwIiwicHJpbWFyeV9rZXkiLCJhZHZhbmNlIiwiY29udGludWUkMCIsImtleSQwIiwicHJpbWFyeV9rZXkkMCIsImFkdmFuY2UkMCIsImNvbnRpbnVlJDEiLCJkZWxldGUkMCIsInVwZGF0ZSIsIm9wZW5fY3Vyc29yIiwiZGlyZWN0aW9uIiwiZGlyZWN0aW9uJDAiLCJkJDAiLCJjcmVhdGVfaW5kZXgiLCJJIiwia2V5X3BhdGgiLCJzdHJpbmdfb2ZfbW9kZSIsIm9iamVjdF9zdG9yZSIsIlMiLCJjcmVhdGVfb2JqZWN0X3N0b3JlIiwiYXV0b19pbmNyZW1lbnQiLCJvcHRzIiwib3B0cyQwIiwib3B0aW9ucyIsImRlbGV0ZV9vYmplY3Rfc3RvcmUiLCJ0cmFuc2FjdGlvbiIsInN0b3JlcyIsIm1vZGUkMCIsImp2X29mX3N0b3JlIiwib2JqZWN0X3N0b3JlX25hbWVzIiwib25fdXBncmFkZV9uZWVkZWQiLCJyZXEiLCJvcGVuIiwidmVyc2lvbiIsImdldF9mYWN0b3J5IiwiZ2xvYmFsJDAiLCJhdXgiLCJhJDAiLCJpJDIiLCJzaHVmZmxlIiwicmFuZF9pbnQiLCJlcXVhbCQwIiwicmVjdXJzZSIsInN5bWJvbCQ2IiwiaXNfbm9uZSQwIiwiaXRlciQyIiwidmFsdWUkMCIsImdldF9leG5fb3IiLCJzeW1ib2wkNyIsIm1hcF9lcnIiLCJnZXRfZXhuIiwiZmxhdHRlbl9sIiwic3ltYm9sJDgiLCJrbXBfcGF0dGVybl9sZW5ndGgiLCJnZXQkMSIsImRpciIsImttcF9jb21waWxlIiwiZmFpbHVyZSIsImttcF9jb21waWxlJDAiLCJrbXBfZmluZCIsInBhdHRlcm4iLCJwYXRfbGVuIiwiZXhwZWN0ZWQiLCJmYWlsX29mZnNldCIsImNvbXBpbGUiLCJzdWIiLCJmaW5kJDAiLCJwYXR0ZXJuJDAiLCJwcmUiLCJjaGVjayIsImxleF9lcnJvciIsImVycm9yX3BvcyIsImNudW0iLCJlbnVtJDAiLCJzdHJpbmcybnVtIiwidXBkYXRlX3BvcyIsImludF9vZl9oZXhjaGFyIiwidXRmOF9vZl9jb2RlIiwidSIsIm1heF91c2VkX2JpdHMiLCJ1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIiwiaGlnaCIsImxvdyIsImhpZ2gkMCIsImxvdyQwIiwiZXNjYXBpbmdfZXJyb3IiLCJvZmZzIiwiY3MiLCJ1bmVzY2FwZV9zdHJpbmciLCJ1MSIsInUyIiwicmVhZCQwIiwib2NhbWxfbGV4X3JlYWRfcmVjIiwib2NhbWxfbGV4X3N0YXRlIiwib2NhbWxfbGV4X3N0YXRlJDAiLCJvY2FtbF9sZXhfc3RhdGUkMSIsInJlYWRfY29tbWVudCIsInJlYWRfY29tbWVudCQwIiwib2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMiLCJjcmVhdGVfZnJvbV9sZXhidWYiLCJlbXNnIiwiZWNoYXIiLCJzY2hhciIsImVsaW5lIiwibG9nMiIsImJpdHMkMCIsIm1heF9qc29uX2ludCIsInN0cmluZ19vZl9mbG9hdF9qc29uIiwiaXNfaW50IiwiaW50X3ZhbHVlIiwidG9rZW5fZXJyb3IiLCJzJDEiLCJzJDIiLCJqc29uX3ZhbHVlIiwidG9rZW5fdmFsdWUiLCJvYmplY3RfdmFsdWVfc3RhcnQiLCJhcnJheV92YWx1ZV9zdGFydCIsInZhcmlhbnRfdmFsdWVfc3RhcnQiLCJ0dXBsZV92YWx1ZV9zdGFydCIsImFycmF5X3ZhbHVlc19zdGFydCIsInRvayQwIiwiYXJyYXlfdmFsdWVzIiwib2JqZWN0X3ZhbHVlc19zdGFydCIsImNvbG9uX3ZhbHVlIiwib2JqZWN0X3ZhbHVlcyIsImtleV9jb2xvbl92YWx1ZSIsInYxIiwidjIiLCJ0dXBsZV92YWx1ZXMiLCJ2YXJpYW50X2VuZCIsImRlY29kZSIsImVyciQwIiwibmliYmxlX3RvX2hleCIsImFkZF9oZXhfYnl0ZSIsImVzY2FwZSIsInRvX2pzb25fc3RyaW5nIiwiYWRkX2NoYXIkMCIsImFkZF9zdHJpbmckMCIsImFkZF9xdW90ZV9zdHJpbmciLCJwcF9saXN0IiwicHB4Iiwib3V0IiwiZm9ybWF0IiwianNvbiIsImZvcm1hdF9maWVsZCIsImpzb24kMCIsInMkMyIsInByZXR0eV9wcmludCIsInByZXR0eV9wcmludF90b19zdHJpbmciLCJwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCIsImVycm9yJDIiLCJ0b19hc3NvYyIsIm51bGwkMSIsInRva2VuX3RvX3N0cmluZyIsInJlYWRfanNvbiIsInJlYWRfanNvbl9lcnJvcl9pbmZvIiwiZXJyX2luZm8iLCJqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIiwianNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8iLCJpbmMiLCJqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyIsImZpbGVuYW1lIiwianNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wIiwic3RyZWFtIiwicmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIiwiZmluIiwic3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyIsImpzb25fdG9fY2hhbm5lbF9mbXQiLCJlb2wiLCJpbmNyIiwicHNlcCIsImFkZF9pbnQiLCJhZGRfZmxvYXQiLCJwc2VwJDAiLCJsZHIkMSIsImpzb25fbGlzdCIsImxkciQyIiwibGRyIiwianNvbl9hc3NvYyIsImxkciQwIiwibmV3c2VwIiwicGFpciIsImpzb25fdG9fY2hhbm5lbCIsImpzb25fdG9fZmlsZV9leG4iLCJqc29uX3RvX2J1ZmZlciIsImpzb25fdG9fc3RyaW5nIiwianNvbl9lcnJvciIsImVycm9yX3RvX3N0cmluZyIsImVycm9yX2luZm8iLCJmbmFtZSIsImxudW0iLCJsbnVtJDAiLCJsbnVtJDEiLCJmbmFtZSQwIiwibG9jIiwiYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMiLCJmcm9tX3N0cmluZyIsInRvX3N0YW5kYXJkIiwibm9kZSIsInYkMSIsInRwbCIsImpvcHQiLCJ2JDAiLCJzdGQiLCJsZXhfc3RyaW5nIiwibGV4X251bWJlciIsImxleF9pbnRlZ2VyIiwibGV4X2xhcmdlaW50IiwibGV4X3ZhcmlhbnQiLCJsZXhfdHVwbGUiLCJjb21tZW50X2NoZWNrIiwibnVtYmVyX3RvX3N0cmluZyIsImxhcmdlaW50IiwiaW50ZWdlciIsIm51bGwkMiIsInN0cmluZyQwIiwiYm9vbCIsImFzc29jIiwibGlzdCIsInR1cGxlIiwibnVtYmVyIiwiYXJyYXlfc3RhcnQiLCJhcnJheV9lbmQiLCJvYmplY3Rfc3RhcnQiLCJvYmplY3RfZW5kIiwidHVwbGVfc3RhcnQiLCJ0dXBsZV9lbmQiLCJ2YXJpYW50X3N0YXJ0IiwibGV4X3N0cmluZyQwIiwibGV4X251bWJlciQwIiwibGV4X2ludGVnZXIkMCIsImxleF9sYXJnZWludCQwIiwibGV4X3ZhcmlhbnQkMCIsImxleF90dXBsZSQwIiwiY29tbWVudF9jaGVjayQwIiwibnVtYmVyX3RvX3N0cmluZyQwIiwibGFyZ2VpbnQkMCIsImludGVnZXIkMCIsIm51bGwkMyIsInN0cmluZyQxIiwiYm9vbCQwIiwiYXNzb2MkMCIsImxpc3QkMCIsInR1cGxlJDAiLCJ2YXJpYW50JDAiLCJudW1iZXIkMCIsImFycmF5X3N0YXJ0JDAiLCJhcnJheV9lbmQkMCIsIm9iamVjdF9zdGFydCQwIiwib2JqZWN0X2VuZCQwIiwidHVwbGVfc3RhcnQkMCIsInR1cGxlX2VuZCQwIiwidmFyaWFudF9zdGFydCQwIiwidmFyaWFudF9lbmQkMCIsIm5hbWUkMCIsImZyb21fc3RyaW5nJDAiLCJ0b19zdHJpbmckMyIsImxleF9zdHJpbmckMSIsImxleF9udW1iZXIkMSIsImxleF9pbnRlZ2VyJDEiLCJsZXhfbGFyZ2VpbnQkMSIsImxleF92YXJpYW50JDEiLCJsZXhfdHVwbGUkMSIsImNvbW1lbnRfY2hlY2skMSIsIm51bWJlcl90b19zdHJpbmckMSIsImxhcmdlaW50JDEiLCJpbnRlZ2VyJDEiLCJudWxsJDQiLCJzdHJpbmckMiIsImJvb2wkMSIsImFzc29jJDEiLCJsaXN0JDEiLCJ0dXBsZSQxIiwidmFyaWFudCQxIiwibnVtYmVyJDEiLCJhcnJheV9zdGFydCQxIiwiYXJyYXlfZW5kJDEiLCJvYmplY3Rfc3RhcnQkMSIsIm9iamVjdF9lbmQkMSIsInR1cGxlX3N0YXJ0JDEiLCJ0dXBsZV9lbmQkMSIsInZhcmlhbnRfc3RhcnQkMSIsInZhcmlhbnRfZW5kJDEiLCJuYW1lJDEiLCJ0b19qc3RyJDEiLCJvZl9qc3RyJDEiLCJqc3RyIiwicmFuZG9tX3N0YXRlIiwibmV3X3V1aWRfdjQiLCJ5b2pzb25fb2ZfYm9vbCIsInlvanNvbl9vZl9zdHJpbmciLCJ5b2pzb25fb2ZfaW50IiwieW9qc29uX29mX29wdGlvbiIsInlvanNvbl9vZl9hIiwieW9qc29uX29mX2xpc3QiLCJsc3QiLCJyZWNvcmRfY2hlY2tfZXh0cmFfZmllbGRzIiwib2ZfeW9qc29uX2Vycm9yIiwid2hhdCIsInlvanNvbiIsImJvb2xfb2ZfeW9qc29uIiwic3RyaW5nX29mX3lvanNvbiIsImludF9vZl95b2pzb24iLCJvcHRpb25fb2ZfeW9qc29uIiwiYV9vZl95b2pzb24iLCJsaXN0X29mX3lvanNvbiIsInJldl9sc3QiLCJzdGFnX25vX2FyZ3MiLCJuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSIsImVtcHR5X2xpc3RfaW52YWxpZF9zdW0iLCJ1bmV4cGVjdGVkX3N0YWciLCJyZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIiwicmV2X2ZsZF9uYW1lcyIsImZsZF9uYW1lc19zdHIiLCJyZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyIsInJlY29yZF9leHRyYV9maWVsZHMiLCJyZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIiwiZmllbGRzJDAiLCJyZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIiwidW5kZWZpbmVkJDAiLCJyZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20iLCJzeW1ib2wkOSIsImpzdHJfb2ZfbWV0aG9kIiwib3JkZXJfb2ZfeW9qc29uIiwieW9qc29uX29mX29yZGVyIiwic29ydF9vZl95b2pzb24iLCJ5b2pzb25fb2Zfc29ydCIsImltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24iLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIiwiaW1hZ2VfYmx1cl9oYXNoZXNfb2ZfeW9qc29uIiwiZmllbGRfeW9qc29ucyIsInByaW1hcnlfZmllbGQiLCJkdXBsaWNhdGVzIiwiZXh0cmEiLCJmaWVsZF95b2pzb24iLCJmaWVsZF9uYW1lIiwiZnZhbHVlIiwicHJpbWFyeV92YWx1ZSIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2hlcyIsInZfcHJpbWFyeSIsImJuZHMiLCJibmQiLCJibmRzJDAiLCJ0eXBlX29mX3lvanNvbiIsInlvanNvbl9vZl90eXBlIiwiZmllbGRfb2ZfeW9qc29uIiwieW9qc29uX29mX2ZpZWxkIiwidHlwZV9zdHJfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGVfc3RyIiwidHMiLCJ0X29mX3lvanNvbiIsIm5hbWVfZmllbGQiLCJzb3J0X25hbWVfZmllbGQiLCJpZF9maWVsZCIsInBhdGhfZmllbGQiLCJhbGJ1bV9pZF9maWVsZCIsInBhcmVudF9pZF9maWVsZCIsInNlcnZlcl9pZF9maWVsZCIsImltYWdlX2JsdXJfaGFzaGVzX2ZpZWxkIiwidHlwZV9maWVsZCIsImNvbGxlY3Rpb25fdHlwZV9maWVsZCIsImZ2YWx1ZSQwIiwiZnZhbHVlJDEiLCJmdmFsdWUkMiIsImZ2YWx1ZSQzIiwiZnZhbHVlJDQiLCJmdmFsdWUkNSIsImZ2YWx1ZSQ2IiwiZnZhbHVlJDciLCJmdmFsdWUkOCIsInNvcnRfbmFtZV92YWx1ZSIsInBhdGhfdmFsdWUiLCJhbGJ1bV9pZF92YWx1ZSIsInBhcmVudF9pZF92YWx1ZSIsImNvbGxlY3Rpb25fdHlwZV92YWx1ZSIsInR5cGVfdmFsdWUiLCJpbWFnZV9ibHVyX2hhc2hlc192YWx1ZSIsInNlcnZlcl9pZF92YWx1ZSIsImlkX3ZhbHVlIiwibmFtZV92YWx1ZSIsInlvanNvbl9vZl90Iiwidl9jb2xsZWN0aW9uX3R5cGUiLCJ2X3R5cGUiLCJ2X2ltYWdlX2JsdXJfaGFzaGVzIiwidl9zZXJ2ZXJfaWQiLCJ2X3BhcmVudF9pZCIsInZfYWxidW1faWQiLCJ2X3BhdGgiLCJ2X2lkIiwidl9zb3J0X25hbWUiLCJ2X25hbWUiLCJhcmckOCIsImJuZCQzIiwiYm5kcyQxIiwiYXJnJDAiLCJibmRzJDIiLCJhcmckMSIsImJuZHMkMyIsImFyZyQyIiwiYm5kcyQ0IiwiYXJnJDMiLCJibmQkMCIsImJuZHMkNSIsImFyZyQ0IiwiYm5kJDEiLCJibmRzJDYiLCJhcmckNSIsImJuZHMkNyIsInYkMiIsImFyZyQ2IiwiYm5kJDIiLCJibmRzJDgiLCJhcmckNyIsImJuZHMkOSIsInBhcmFtc19vZl95b2pzb24iLCJpZHNfZmllbGQiLCJ1c2VyX2lkX2ZpZWxkIiwiZmllbGRzX2ZpZWxkIiwiaW5jbHVkZV9pdGVtX3R5cGVzX2ZpZWxkIiwic3RhcnRfaW5kZXhfZmllbGQiLCJsaW1pdF9maWVsZCIsInNvcnRfb3JkZXJfZmllbGQiLCJzb3J0X2J5X2ZpZWxkIiwicmVjdXJzaXZlX2ZpZWxkIiwiZW5hYmxlX3VzZXJfZGF0YV9maWVsZCIsImVuYWJsZV9pbWFnZXNfZmllbGQiLCJmdmFsdWUkOSIsImZ2YWx1ZSQxMCIsImlkc192YWx1ZSIsInN0YXJ0X2luZGV4X3ZhbHVlIiwibGltaXRfdmFsdWUiLCJzb3J0X29yZGVyX3ZhbHVlIiwiZW5hYmxlX2ltYWdlc192YWx1ZSIsImVuYWJsZV91c2VyX2RhdGFfdmFsdWUiLCJyZWN1cnNpdmVfdmFsdWUiLCJzb3J0X2J5X3ZhbHVlIiwiaW5jbHVkZV9pdGVtX3R5cGVzX3ZhbHVlIiwiZmllbGRzX3ZhbHVlIiwidXNlcl9pZF92YWx1ZSIsInlvanNvbl9vZl9wYXJhbXMiLCJ2X2VuYWJsZV9pbWFnZXMiLCJ2X2VuYWJsZV91c2VyX2RhdGEiLCJ2X3JlY3Vyc2l2ZSIsInZfc29ydF9ieSIsInZfc29ydF9vcmRlciIsInZfbGltaXQiLCJ2X3N0YXJ0X2luZGV4Iiwidl9pbmNsdWRlX2l0ZW1fdHlwZXMiLCJ2X2ZpZWxkcyIsInZfdXNlcl9pZCIsInZfaWRzIiwiYXJnJDkiLCJibmRzJDEwIiwiYXJnJDEwIiwicmVzcG9uc2Vfb2ZfeW9qc29uIiwiaXRlbXNfZmllbGQiLCJ0b3RhbF9yZWNvcmRfY291bnRfZmllbGQiLCJ0b3RhbF9yZWNvcmRfY291bnRfdmFsdWUiLCJpdGVtc192YWx1ZSIsInlvanNvbl9vZl9yZXNwb25zZSIsInZfdG90YWxfcmVjb3JkX2NvdW50Iiwidl9pdGVtcyIsIm1ldGhvZCIsImVuZHBvaW50IiwicGFyYW1zX29mX3lvanNvbiQwIiwiaW5jbHVkZV9leHRlcm5hbF9jb250ZW50X2ZpZWxkIiwiaW5jbHVkZV9leHRlcm5hbF9jb250ZW50X3ZhbHVlIiwieW9qc29uX29mX3BhcmFtcyQwIiwidl9pbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQiLCJyZXNwb25zZV9vZl95b2pzb24kMCIsInlvanNvbl9vZl9yZXNwb25zZSQwIiwiZW5kcG9pbnQkMCIsInBwIiwidmlydHVhbF9mb2xkZXJfb2ZfeW9qc29uIiwibG9jYXRpb25zX2ZpZWxkIiwiaXRlbV9pZF9maWVsZCIsIml0ZW1faWRfdmFsdWUiLCJsb2NhdGlvbnNfdmFsdWUiLCJ5b2pzb25fb2ZfdmlydHVhbF9mb2xkZXIiLCJ2X2l0ZW1faWQiLCJ2X2xvY2F0aW9ucyIsInNlc3Npb25fdXVpZCIsInNldF9zZXNzaW9uX3V1aWQiLCJhdXRob3JpemF0aW9uIiwidG9rZW4kMCIsInNlc3Npb25fdXVpZCQwIiwicmVxdWVzdCQxIiwiYmFzZV91cmwiLCJoZWFkZXJzIiwiUSIsInBhdGhfcGFyYW1zIiwidXJpIiwiYXV0aG9yaXphdGlvbiQwIiwiaGVhZGVycyQwIiwiYm9keSIsInVybCQwIiwicGFyYW1zJDAiLCJ1cmlfd2l0aF9wYXJhbXMiLCJ1cmwkMSIsImluaXQkMCIsIm1ldGhvZCQwIiwiZ2V0X3Rva2VuIiwidGFnX29mIiwiZnV0dXJlcyIsImxpc3RlbmVycyIsIndvcmtlciIsIm9uX21lc3NhZ2UiLCJtZXNzYWdlIiwidXVpZCIsImRpc3BhdGNoX2V2ZW50Iiwib2Zfc29ydCIsImFwcGx5IiwidF90b19qdiIsImVuY29kZXIiLCJqdl90b190IiwiZGVjb2RlciIsInRfb2ZfeW9qc29uJDAiLCJpdGVtX2ZpZWxkIiwiaXRlbV92YWx1ZSIsInlvanNvbl9vZl90JDAiLCJ2X2l0ZW0iLCJ0b19qdiQxIiwib2ZfanYkMCIsInRvX2p2JDIiLCJvZl9qdiQxIiwiZ2V0X2tleSIsInNvcnRzX29mX3lvanNvbiIsImRhdGVfYWRkZWRfZmllbGQiLCJ2aWV3c19maWVsZCIsInZpZXdzX3ZhbHVlIiwiZGF0ZV9hZGRlZF92YWx1ZSIsInlvanNvbl9vZl9zb3J0cyIsInZfdmlld3MiLCJ2X2RhdGVfYWRkZWQiLCJ0X29mX3lvanNvbiQxIiwic29ydHNfZmllbGQiLCJzb3J0c192YWx1ZSIsInlvanNvbl9vZl90JDEiLCJ2X3NvcnRzIiwidG9fanYkMyIsInZpZXdzIiwic29ydF9uYW1lIiwiaWQkMCIsInNvcnRfbmFtZSQwIiwidmlld3MkMCIsIm9mX2p2JDIiLCJwYXRoJDAiLCJ0b19qdiQ0Iiwib2ZfanYkMyIsInRvX2p2JDUiLCJvZl9qdiQ0IiwidG9fanYkNiIsIm9mX2p2JDUiLCJ0eXBlIiwicGF0aCQzIiwidG9fanYkNyIsIm9mX2p2JDYiLCJjb2xsZWN0aW9uX3R5cGUiLCJwYXRoJDQiLCJ0b19qdiQ4Iiwib2ZfanYkNyIsImdldF9rZXkkMCIsInRvX2p2JDkiLCJvZl9qdiQ4IiwidG9fanYkMTAiLCJvZl9qdiQ5IiwiZ2V0X2tleSQxIiwiY2h1bmtfc2l6ZSIsImZldGNoX3RvdGFsX2l0ZW1fY291bnQiLCJzb3VyY2UiLCJnZXRfZGJfaW5mb3MiLCJpZGIiLCJzZXRfaW5mb3MiLCJpbmZvcyIsInRyYW5zYWN0aW9uJDAiLCJzdG9yZSIsImxhc3Rfa2V5IiwiY3Vyc29yIiwiaXRlbSIsImlzX2RiX2NvbnNpc3RlbnQiLCJsYXN0X3NvdXJjZV9pdGVtX2tleSIsImRiX3N5bmNfaW5mb3MiLCJjaGVja19zdGF0dXMiLCJkYl9pbmZvcyIsInRvdGFsX2l0ZW1fY291bnQiLCJmaXJzdF91bmZldGNoZWRfa2V5IiwiaXRlbSQwIiwidXBkYXRlX3ZpZXdzIiwic19pdGVtcyIsImRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aSIsInBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiIsInBhcmVudF9pZCIsInBpZCIsInBhdGhzX29mX3BhcmVudHMiLCJwYXJlbnRzIiwicGF0aHMiLCJ2aWV3c19vZl9wYXRoIiwidmZvbGRlcnMiLCJsb2NhdGlvbnMiLCJ2aWV3X2lkIiwic3luYyIsInJlcG9ydCIsIm1ha2VfcGxhY2Vob2xkZXJzIiwibGFzdCIsImZldGNoX21pc3NpbmdfaXRlbXMiLCJmZXRjaF9xdWV1ZSIsImVucXVldWUiLCJzdGFydF9pbmRleCIsInRvZG8iLCJzdGFydF9pbmRleCQwIiwidG9kbyQwIiwidG9kbyQxIiwic3RhcnRfaW5kZXgkMSIsInRvdGFsX3F1ZXJpZXMiLCJydW5fcXVldWUiLCJ0aHJlYWRzIiwidGFrZV9uIiwiZWx0IiwiaXRlbXMiLCJpZGJfcHV0Iiwic19saXN0IiwiaW5kZXgkMCIsInJlcXMiLCJmaXJzdF9taXNzaW5nX2tleSIsImxhc3Rfc291cmNlX2l0ZW1fa2V5JDAiLCJmaXJzdF91bmZldGNoZWRfa2V5JDAiLCJjaGVja19hbmRfc3luYyIsImluaXRpYWwiLCJyZXBvcnQkMCIsInN5bmNfcHJvZ3Jlc3MiLCJvbl91cGdyYWRlX25lZWRlZCQwIiwibmV3X3ZlcnNpb24kMCIsIm9sZF92ZXJzaW9uJDAiLCJkYiIsInZpcnR1YWxfZm9sZGVycyIsImluZGV4X2RhdGVfYWRkZWQiLCJ3aXRoX2lkYiIsImRiciIsIm1hcF9lcnJvciIsImFzX2Z1dCIsImZ1dF9vZl9hcnJheSIsImZ1dCIsInByb21pc2UiLCJhcnIiLCJhbGwkMCIsInRvX2FycmF5JDAiLCJjaGVja19kYiIsInNvdXJjZSQwIiwic2VydmVyX2lkIiwic2V0X2lkYiIsInJlYWRfb25seV9zdG9yZSIsInZpZXdfbWVtbyIsImxhc3RfdmlldyIsImdldF92aWV3X2tleXMiLCJmaWx0ZXJzIiwic29ydCQwIiwic3JjX3ZpZXdzIiwiY3JpdGVyaWEiLCJzb3J0X2NyaXRlcmlhIiwiaGFzaCQwIiwic3ViJDAiLCJrZXlzJDAiLCJzbmIiLCJzbmEiLCJhbGxfa2V5cyIsInNyY192aWV3cyQwIiwib25fcXVlcnkiLCJpdGVtcyQwIiwic2VydmVyX2lkJDAiLCJyZXF1ZXN0IiwiaXRlbV9jb3VudCIsIm9yZGVyIiwiaW5kZXhlcyIsImluZGV4JDEiLCJyZXN1bHRzIl0sInNvdXJjZXMiOlsiL2J1aWx0aW4vK2FycmF5LmpzIiwiL2J1aWx0aW4vK21sQnl0ZXMuanMiLCIvYnVpbHRpbi8rc3lzLmpzIiwiL2J1aWx0aW4vK2JhY2t0cmFjZS5qcyIsIi9idWlsdGluLytzdGRsaWIuanMiLCIvYnVpbHRpbi8ranNsaWIuanMiLCIvYnVpbHRpbi8rZmFpbC5qcyIsIi9idWlsdGluLytpZWVlXzc1NC5qcyIsIi9idWlsdGluLytvYmouanMiLCIvYnVpbHRpbi8raW50NjQuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8raW50cy5qcyIsIi9idWlsdGluLytoYXNoLmpzIiwiL2J1aWx0aW4vK21hcnNoYWwuanMiLCIvYnVpbHRpbi8rY29tcGFyZS5qcyIsIi9idWlsdGluLytmb3JtYXQuanMiLCIvYnVpbHRpbi8rZnNfbm9kZS5qcyIsIi9idWlsdGluLytmcy5qcyIsIi9idWlsdGluLyt1bml4LmpzIiwiL2J1aWx0aW4vK2ZzX2Zha2UuanMiLCIvYnVpbHRpbi8rbGV4aW5nLmpzIiwiL2J1aWx0aW4vK21kNS5qcyIsIi9idWlsdGluLytpby5qcyIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2xleGluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3ByaW50ZXhjLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2NvbXBsaWFudF9sZXh4ZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RhdGFfc291cmNlL2plbGx5ZmluX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvc3RvcmVzLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9zeW5jLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0QmFzaWNzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsQXRvbWljLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RkbGliLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcmFuZG9tLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0ludC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL29iai5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbExhenkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9vcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9yZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDQ2hhci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NoYXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9saXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvaW50Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYnl0ZXMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdHJpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9hcnJheS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3NldC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0YWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcXVldWUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdHJlYW0ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9idWZmZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9wcmludGYubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3lvanNvbl9jb252X2Vycm9yLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZnVuLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZGlnZXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvaGFzaHRibC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2Zvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbGxiYWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNfb2Zfb2NhbWwtY29tcGlsZXIvcnVudGltZS9qc29vX3J1bnRpbWUubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2JycmVyL2luZGV4ZWRfZGIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDQXJyYXkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDTGlzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NPcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDUmFuZG9tLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1Jlc3VsdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NTZXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2xleHhlcl91dGlscy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9lcnJvcl9pbmZvLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2pzb25fZmxvYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcGFyc2VyX3Rvb2xzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3BhcnNlci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC91dGlscy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wcmV0dHkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcHJvY2Vzcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC90b2tlbl91dGlscy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9yZWFkZXJfc3RyaW5nX2ZpbGUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvd3JpdGVyX2ZpbGUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvd3JpdGVyX3N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC95b2pzb24ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N0ZC9zdGQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3lvanNvbl9jb252Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi9wcHhfeW9qc29uX2NvbnZfbGliLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYXRhX3NvdXJjZS9qZWxseWZpbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvd29ya2VyX2FwaS93b3JrZXJfYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi92aWV3Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9kYl93b3JrZXJfYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9kYi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vZGJfd29ya2VyL2RiX3dvcmtlci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0ZF9leGl0Lm1sIl0sIm1hcHBpbmdzIjoiOztBLEM7O0c7OztRO1M7OztHO0k7STtJO0c7RTs7OztHQXFEQSxTQUFTQSxnQkFBZ0JDLElBQUlDLElBQUlDLElBQUlDLElBQUlDO0lBQ3ZDLEdBQUlELE1BQU1GO0tBQUksSUFDRCxJQUFGSSxPQUFPQSxLQUFLRCxLQUFLQyxLQUFLSCxHQUFHQyxLQUFLRSxLQUFLTCxHQUFHQyxLQUFLSTs7S0FDL0MsSUFDTSxJQUFGQSxJQUFJRCxLQUFLQyxRQUFRQSxLQUFLSCxHQUFHQyxLQUFLRSxLQUFLTCxHQUFHQyxLQUFLSTtJQUV0RDtHQUNGO0dDWUEsU0FBU0MseUJBQTBCQyxHQUFHQyxHQUFHSjtJQUNqQyxJQUFGSyxJQUFJQztJQUNSLEdBQUlGLFVBQVVKLGVBQWVBLE9BQU9HLFVBQVUsT0FBT0UsUUFBU0UsTUFBTUo7SUFDOUQsSUFBRks7SUFDSixVQUFXUixLQUFLSSxXQUFVSjtLQUN4QlEsS0FBS0gsUUFBU0UsTUFBTUosUUFBUUMsR0FBRUEsSUFBSUssU0FBU1Q7SUFDN0MsT0FBT1E7R0FDVDtHQXFYQSxTQUFTRSw0QkFBNkJGO0lBRXBDLElBQUlMLFFBQVFRLFdBQVdILE1BQ25CSSxJQUFJSixLQUFLSyxJQUFJRCxVQUFVUjtJQUMzQixNQUFPQSxJQUFJUyxHQUFHVCxLQUFLRCxFQUFFQyxLQUFLUSxhQUFhUjtJQUN2QyxJQUFLUyxJQUFJTCxLQUFLSixJQUFJUyxHQUFHVCxLQUFLRCxFQUFFQztJQUM1QkksTUFBTUw7SUFDTks7SUFD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O0lBY0FDO0lBS0FDO0lBZUFDOztJQ25QQUM7SUFPTWhRO0lBR0ZpUTtJQVNKQztJQUdBQztJQWdDTUM7SUFRQUM7SUFvQ0ZDO0lBdUJFQztJQUdGQztJQWFJQztJQVFBQztJQVFBQztJQVFBQztJQ3JKTkM7SUEyRUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Tzs7SSxZOztJOzsyQixVLE87O0ksWTs7STs7d0IsOEI7d0IsbUI7O0k7SSwrQixPLHVCO0c7O0ksd0Isb0Isb0I7Ozs7TSxRO007Ozs7O0k7Rzs7STtJLDZCLE8sdUI7Rzs7Ozs7b0I7O00sVTs7OztJO0c7O0k7SSxXOztJO0k7Rzs7STtJLE8seUIsVTtHO0c7OztLLE87NkIsTyxPLGUsTyxPO0k7SSxtQjtHO3VCLE8sbUI7eUIsTyxPLHNDOztJLE87YTthO0c7cUIsTyxpQjt1Qjt1QjttQixnQjt5QixrQjt5QixrQjs7STtLLE07STtJLHVCLCtDO0k7SSxxQyw4QjtJO29CLHVEO0k7Rzt3Qix1Qjs7STs7OzJCLGlCLG1CO0c7O0ksNkIsZ0IsbUI7Rzs7SSxJLGdDO0k7Syx3QztJO0k7RztrQix3Qjs7cUIsbUIsb0I7SSxvQixtQix1QjtJO0c7O0kscUM7Rzt5QixvQjs7SSxzQjs7YyxlOztjLE87YTtHOztJLDRCLE9yQnRJckJ0cUI7RztHOzhCLDBCOztJO0ksVTtJO0k7RztHO0c7RztHO0c7c0IsTyxrQjs7SSxJLFE7Ozs7O0s7O0k7RztHO0c7RztHO0c7O0ksVzs7STtHO0c7dUIsTyxhO3NCLGtCOztJO0k7STtHO3lCLE8sYTs7SSxJOzs7OztLOztJO0c7RztHLCtCO2dDLGtDLFM7Rzs7STs7O29COztNO00sSTs7O0ksTztHO3FCLDhDO3VCLDhDO3NCLDhDO0c7RztHO0c7RztHO0c7NEI7O0ksbUMsZTtHO0c7O0k7SSxTO0k7O0s7Szs7SSxvQjtJO0c7Ozs7Ozs7Ozs7Ozs7OztJO0ksa0Q7STtJO0kscUJEREFGLG1CO0k7STtJO0k7STtJO0k7SSxvRDtJO0c7Rzs7STtJO0c7RztHOzt3QjtJLHNCLGtDO0c7RztHO0c7RztHO29CLGlCO0c7RztHOztJO0k7RztHOztJO0k7STtHO0c7RztHO1l1QmxCTXlxQjtJQUFRLHVCQUNUN2lDLGNBQUssWUFBTEE7UUFDRDhpQztJQUFRLGdCQUZORCxPQUVGQztHQUE4QjtZQVFoQ2pLLE1BQU9rSyxPQUFPQyxPQUFRbm5CO0lBQ3hCLEdBRHdCQSxTQUFhQyxN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Q0VDLHNCQURGQztPQUNFRDs7TUFBQXJsRCxJQUFBcWxEO01BQUE1akQsTUFMRWlqRCwwQkFLRjFrRDtNQUFBdWxELGdCQUFBOWpEO01BQUErakQsYUFBQUQsS0FERkQ7O1NBQ0VFLFNBREZGO0lBQUEsc0JBQ0VFO0dBRStDO0dBRWpELFNBQUFDLGVBQUE1QztJQUFBLFVBQUFBLHFDQUFBQTtnQkFBQUE7Z0JBQUEsTzBCNUNFVSx1QjFCNENGaG9DLFVBQUFzbkM7Ozs7Ozs7Ozs7MEIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7Ozs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7OzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzs7Ozs7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7Ozs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7MkIwQi9ERVEsYTFCK0RGOW5DLFVBQUFzbkM7OzJCMEIvREVRLGExQitERjluQyxVQUFBc25DOzsyQjBCL0RFUSxhMUIrREY5bkMsVUFBQXNuQzs7Ozs7T0FBQSxPMEJoREVTLHdCMUJnREYvbkMsVUFBQXNuQzs7O0lBQUEsTzBCeENFVyxnQjFCd0NGam9DLFVBQUFzbkM7R0FzQ21CO1lBdENuQjZDO0lBQUE7O09BQ0U7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7ZUFDQTs7R0FDaUI7R0FFbkIsU0FBQUMsZ0JBQUE5QztJQUFBLFVBQUFBLHFDQUFBQTtnQkFBQUE7Z0JBQUEsTzBCcEZFVSx1QjFCb0ZGL25DLFVBQUFxbkM7Ozs7Ozs7Ozs7MEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7Ozs7OzJCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs7Ozs7Ozs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7Ozs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7Ozs7Ozs7OzsyQjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7Ozs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7Ozs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7Ozs7Ozs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7Ozs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7OzRCMEJ2R0VRLGExQnVHRjduQyxVQUFBcW5DOzs0QjBCdkdFUSxhMUJ1R0Y3bkMsVUFBQXFuQzs7NEIwQnZHRVEsYTFCdUdGN25DLFVBQUFxbkM7Ozs7OztPQUFBLE8wQnhGRVMsd0IxQndGRjluQyxVQUFBcW5DOzs7SUFBQSxPMEJoRkVXLGdCMUJnRkZob0MsVUFBQXFuQztHQThEbUI7WUE5RG5CK0M7SUFBQTs7OztRQWdDRTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFD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Iiwic291cmNlc0NvbnRlbnQiOlsiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YiAoYSwgaSwgbGVuKSB7XG4gIHZhciBhMiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGEyWzBdPTA7XG4gIGZvcih2YXIgaTIgPSAxLCBpMT0gaSsxOyBpMiA8PSBsZW47IGkyKyssaTErKyApe1xuICAgIGEyW2kyXT1hW2kxXTtcbiAgfVxuICByZXR1cm4gYTI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYXBwZW5kIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICB2YXIgbDEgPSBhMS5sZW5ndGgsIGwyID0gYTIubGVuZ3RoO1xuICB2YXIgbCA9IGwxK2wyLTFcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsaiA9IDE7XG4gIGZvcig7aTxsMTtpKyspIGFbaV09YTFbaV07XG4gIGZvcig7aTxsO2krKyxqKyspIGFbaV09YTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NvbmNhdCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2NvbmNhdChsKSB7XG4gIHZhciBhID0gWzBdO1xuICB3aGlsZSAobCAhPT0gMCkge1xuICAgIHZhciBiID0gbFsxXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGIubGVuZ3RoOyBpKyspIGEucHVzaChiW2ldKTtcbiAgICBsID0gbFsyXTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+PSAxOyBqLS0pIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vLy8vLy8vLy8vLy8gUGVydmFzaXZlXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3NldCAobXV0YWJsZSwgY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2FycmF5X3NldCAoYXJyYXksIGluZGV4LCBuZXd2YWwpIHtcbiAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS5sZW5ndGggLSAxKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBhcnJheVtpbmRleCsxXT1uZXd2YWw7IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2dldCBtdXRhYmxlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfZ2V0IChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS5sZW5ndGggLSAxKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXlbaW5kZXgrMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfZmlsbFxuZnVuY3Rpb24gY2FtbF9hcnJheV9maWxsKGFycmF5LCBvZnMsIGxlbiwgdil7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgYXJyYXlbb2ZzK2krMV0gPSB2O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoZWNrX2JvdW5kIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfY2hlY2tfYm91bmQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoaW5kZXggPj4+IDAgPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV92ZWN0IChsZW4sIGluaXQpIHtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSBpbml0O1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX2Zsb2F0X3ZlY3QgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX2Zsb2F0X3ZlY3QobGVuKXtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9jcmVhdGUobGVuKXtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiXG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLyBBbiBPQ2FtbCBzdHJpbmcgaXMgYW4gb2JqZWN0IHdpdGggdGhyZWUgZmllbGRzOlxuLy8gLSB0YWcgJ3QnXG4vLyAtIGxlbmd0aCAnbCdcbi8vIC0gY29udGVudHMgJ2MnXG4vL1xuLy8gVGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcgY2FuIGJlIGVpdGhlciBhIEphdmFTY3JpcHQgYXJyYXkgb3Jcbi8vIGEgSmF2YVNjcmlwdCBzdHJpbmcuIFRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmcgY2FuIGJlIGxlc3MgdGhhbiB0aGVcbi8vIGxlbmd0aCBvZiB0aGUgT0NhbWwgc3RyaW5nLiBJbiB0aGlzIGNhc2UsIHJlbWFpbmluZyBieXRlcyBhcmVcbi8vIGFzc3VtZWQgdG8gYmUgemVyb2VzLiBBcnJheXMgYXJlIG11dGFibGUgYnV0IGNvbnN1bWVzIG1vcmUgbWVtb3J5XG4vLyB0aGFuIHN0cmluZ3MuIEEgY29tbW9uIHBhdHRlcm4gaXMgdG8gc3RhcnQgZnJvbSBhbiBlbXB0eSBzdHJpbmcgYW5kXG4vLyBwcm9ncmVzc2l2ZWx5IGZpbGwgaXQgZnJvbSB0aGUgc3RhcnQuIFBhcnRpYWwgc3RyaW5ncyBtYWtlcyBpdFxuLy8gcG9zc2libGUgdG8gaW1wbGVtZW50IHRoaXMgZWZmaWNpZW50bHkuXG4vL1xuLy8gV2hlbiBjb252ZXJ0aW5nIHRvIGFuZCBmcm9tIFVURi0xNiwgd2Uga2VlcCB0cmFjayBvZiB3aGV0aGVyIHRoZVxuLy8gc3RyaW5nIGlzIGNvbXBvc2VkIG9ubHkgb2YgQVNDSUkgY2hhcmFjdGVycyAoaW4gd2hpY2ggY2FzZSwgbm9cbi8vIGNvbnZlcnNpb24gbmVlZHMgdG8gYmUgcGVyZm9ybWVkKSBvciBub3QuXG4vL1xuLy8gVGhlIHN0cmluZyB0YWcgY2FuIHRodXMgdGFrZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcbi8vICAgZnVsbCBzdHJpbmcgICAgIEJZVEUgfCBVTktOT1dOOiAgICAgIDBcbi8vICAgICAgICAgICAgICAgICAgIEJZVEUgfCBBU0NJSTogICAgICAgIDlcbi8vICAgICAgICAgICAgICAgICAgIEJZVEUgfCBOT1RfQVNDSUk6ICAgIDhcbi8vICAgc3RyaW5nIHByZWZpeCAgIFBBUlRJQUw6ICAgICAgICAgICAgIDJcbi8vICAgYXJyYXkgICAgICAgICAgIEFSUkFZOiAgICAgICAgICAgICAgIDRcbi8vXG4vLyBPbmUgY2FuIHVzZSBiaXQgbWFza2luZyB0byBkaXNjcmltaW5hdGUgdGhlc2UgZGlmZmVyZW50IGNhc2VzOlxuLy8gICBrbm93bl9lbmNvZGluZyh4KSA9IHgmOFxuLy8gICBpc19hc2NpaSh4KSA9ICAgICAgIHgmMVxuLy8gICBraW5kKHgpID0gICAgICAgICAgIHgmNlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfc3RyX3JlcGVhdChuLCBzKSB7XG4gIGlmKG4gPT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChzLnJlcGVhdCkge3JldHVybiBzLnJlcGVhdChuKTt9IC8vIEVDTUFzY3JpcHQgNiBhbmQgRmlyZWZveCAyNCtcbiAgdmFyIHIgPSBcIlwiLCBsID0gMDtcbiAgZm9yKDs7KSB7XG4gICAgaWYgKG4gJiAxKSByICs9IHM7XG4gICAgbiA+Pj0gMTtcbiAgICBpZiAobiA9PSAwKSByZXR1cm4gcjtcbiAgICBzICs9IHM7XG4gICAgbCsrO1xuICAgIGlmIChsID09IDkpIHtcbiAgICAgIHMuc2xpY2UoMCwxKTsgLy8gZmxhdHRlbiB0aGUgc3RyaW5nXG4gICAgICAvLyB0aGVuLCB0aGUgZmxhdHRlbmluZyBvZiB0aGUgd2hvbGUgc3RyaW5nIHdpbGwgYmUgZmFzdGVyLFxuICAgICAgLy8gYXMgaXQgd2lsbCBiZSBjb21wb3NlZCBvZiBsYXJnZXIgcGllY2VzXG4gICAgfVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuLy9XZWFrZGVmXG4vLyBQcmUgRUNNQVNjcmlwdCA1LCBbYXBwbHldIHdvdWxkIG5vdCBzdXBwb3J0IGFycmF5LWxpa2Ugb2JqZWN0LlxuLy8gSW4gc3VjaCBzZXR1cCwgVHlwZWRfYXJyYXkgd291bGQgYmUgaW1wbGVtZW50ZWQgYXMgcG9seWZpbGwsIGFuZCBbZi5hcHBseV0gd291bGRcbi8vIGZhaWwgaGVyZS4gTWFyayB0aGUgcHJpbWl0aXZlIGFzIFdlYWtkZWYsIHNvIHRoYXQgcGVvcGxlIGNhbiBvdmVycmlkZSBpdCBlYXNpbHkuXG5mdW5jdGlvbiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKGEsIGksIGxlbikge1xuICB2YXIgZiA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gIGlmIChpID09IDAgJiYgbGVuIDw9IDQwOTYgJiYgbGVuID09IGEubGVuZ3RoKSByZXR1cm4gZi5hcHBseSAobnVsbCwgYSk7XG4gIHZhciBzID0gXCJcIjtcbiAgZm9yICg7IDAgPCBsZW47IGkgKz0gMTAyNCxsZW4tPTEwMjQpXG4gICAgcyArPSBmLmFwcGx5IChudWxsLCBhLnNsaWNlKGksaSArIE1hdGgubWluKGxlbiwgMTAyNCkpKTtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmOF9vZl91dGYxNlxuZnVuY3Rpb24gY2FtbF91dGY4X29mX3V0ZjE2KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBiLCBjLCBkLCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYyA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgKGogPCBsKSAmJiAoYyA9IHMuY2hhckNvZGVBdChqKSkgPCAweDgwOyBqKyspO1xuICAgICAgaWYgKGogLSBpID4gNTEyKSB7IHQuc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiOyBiICs9IHMuc2xpY2UoaSwgaikgfVxuICAgICAgZWxzZSB0ICs9IHMuc2xpY2UoaSwgaik7XG4gICAgICBpZiAoaiA9PSBsKSBicmVhaztcbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhjMCB8IChjID4+IDYpKTtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfSBlbHNlIGlmIChjIDwgMHhkODAwIHx8IGMgPj0gMHhkZmZmKSB7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhlMCB8IChjID4+IDEyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA+PSAweGRiZmYgfHwgaSArIDEgPT0gbCB8fFxuICAgICAgICAgICAgICAgKGQgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBkID4gMHhkZmZmKSB7XG4gICAgICAvLyBVbm1hdGNoZWQgc3Vycm9nYXRlIHBhaXIsIHJlcGxhY2VkIGJ5IFxcdWZmZmQgKHJlcGxhY2VtZW50IGNoYXJhY3RlcilcbiAgICAgIHQgKz0gXCJcXHhlZlxceGJmXFx4YmRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgYyA9IChjIDw8IDEwKSArIGQgLSAweDM1ZmRjMDA7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhmMCB8IChjID4+IDE4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDEyKSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfVxuICAgIGlmICh0Lmxlbmd0aCA+IDEwMjQpIHt0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjt9XG4gIH1cbiAgcmV0dXJuIGIrdDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91dGYxNl9vZl91dGY4XG5mdW5jdGlvbiBjYW1sX3V0ZjE2X29mX3V0Zjgocykge1xuICBmb3IgKHZhciBiID0gXCJcIiwgdCA9IFwiXCIsIGMsIGMxLCBjMiwgdiwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMxID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjMSA8IDB4ODApIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgKGogPCBsKSAmJiAoYzEgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgdiA9IDE7XG4gICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkpIHtcbiAgICAgIGMgPSBjMiArIChjMSA8PCA2KTtcbiAgICAgIGlmIChjMSA8IDB4ZTApIHtcbiAgICAgICAgdiA9IGMgLSAweDMwODA7XG4gICAgICAgIGlmICh2IDwgMHg4MCkgdiA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2ID0gMjtcbiAgICAgICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkpIHtcbiAgICAgICAgICBjID0gYzIgKyAoYyA8PCA2KTtcbiAgICAgICAgICBpZiAoYzEgPCAweGYwKSB7XG4gICAgICAgICAgICB2ID0gYyAtIDB4ZTIwODA7XG4gICAgICAgICAgICBpZiAoKHYgPCAweDgwMCkgfHwgKCh2ID49IDB4ZDdmZikgJiYgKHYgPCAweGUwMDApKSkgdiA9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHYgPSAzO1xuICAgICAgICAgICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkgJiZcbiAgICAgICAgICAgICAgICAoYzEgPCAweGY1KSkge1xuICAgICAgICAgICAgICB2ID0gYzIgLSAweDNjODIwODAgKyAoYyA8PCA2KTtcbiAgICAgICAgICAgICAgaWYgKHYgPCAweDEwMDAwIHx8IHYgPiAweDEwZmZmZikgdiA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2IDwgNCkgeyAvLyBJbnZhbGlkIHNlcXVlbmNlXG4gICAgICBpIC09IHY7XG4gICAgICB0ICs9IFwiXFx1ZmZmZFwiO1xuICAgIH0gZWxzZSBpZiAodiA+IDB4ZmZmZilcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGQ3YzAgKyAodiA+PiAxMCksIDB4ZGMwMCArICh2ICYgMHgzRkYpKVxuICAgIGVsc2VcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2KTtcbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29faXNfYXNjaWlcbmZ1bmN0aW9uIGpzb29faXNfYXNjaWkgKHMpIHtcbiAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBnZXRzIGJldHRlciBhdCBhcm91bmQgdGhpcyBwb2ludCBmb3IgYWxsIGJyb3dzZXJzXG4gIGlmIChzLmxlbmd0aCA8IDI0KSB7XG4gICAgLy8gU3BpZGVybW9ua2V5IGdldHMgbXVjaCBzbG93ZXIgd2hlbiBzLmxlbmd0aCA+PSAyNCAob24gNjQgYml0IGFyY2hzKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgaWYgKHMuY2hhckNvZGVBdChpKSA+IDEyNykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2VcbiAgICByZXR1cm4gIS9bXlxceDAwLVxceDdmXS8udGVzdChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSkge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGlmIChpID49IHMuYy5sZW5ndGgpIHJldHVybiAwO1xuICBjYXNlIDA6IC8qIEJZVEVTICovXG4gICAgcmV0dXJuIHMuYy5jaGFyQ29kZUF0KGkpO1xuICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgcmV0dXJuIHMuY1tpXVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgLy8gVGhlIE9DYW1sIGNvbXBpbGVyIHVzZXMgQ2hhci51bnNhZmVfY2hyIG9uIGludGVnZXJzIGxhcmdlciB0aGFuIDI1NSFcbiAgYyAmPSAweGZmO1xuICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIHtcbiAgICBpZiAoaSA9PSBzLmMubGVuZ3RoKSB7XG4gICAgICBzLmMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoYyk7XG4gICAgICBpZiAoaSArIDEgPT0gcy5sKSBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LT1dOKi9cbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkgKHMpO1xuICB9XG4gIHMuY1tpXSA9IGM7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvciwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQgKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQxNihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDMyKHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSAzKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDEpLFxuICAgICAgYjMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCB8IGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDMyKHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpLFxuICAgICAgYjMgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAyKSxcbiAgICAgIGI0ID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQ2NChzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gNykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspe1xuICAgIGFbNyAtIGpdID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspe1xuICAgIGFbNyAtIGpdID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldCAocywgaSwgYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMSkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjIgPSAweEZGICYgaTE2ID4+IDgsXG4gICAgICBiMSA9IDB4RkYgJiBpMTY7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMSwgYjIpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQxNihzLGksaTE2KXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDE2XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQxNlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDE2KHMsaSxpMTYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MzIocyxpLGkzMil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGI0ID0gMHhGRiAmIGkzMiA+PiAyNCxcbiAgICAgIGIzID0gMHhGRiAmIGkzMiA+PiAxNixcbiAgICAgIGIyID0gMHhGRiAmIGkzMiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTMyO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMiwgYjMpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAzLCBiNCk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDMyKHMsaSxpMzIpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0MzJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0MzIocyxpLGkzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoaTY0KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKykge1xuICAgIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDcgLSBqLCBhW2pdKTtcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQ2NChzLGksaTY0KXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDY0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQ2NFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDY0KHMsaSxpNjQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldCAocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSwgYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmOF9vZl91dGYxNiwgTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyAocykge1xuICB2YXIgdGFnID0gOSAvKiBCWVRFUyB8IEFTQ0lJICovO1xuICBpZiAoIWpzb29faXNfYXNjaWkocykpXG4gICAgdGFnID0gOCAvKiBCWVRFUyB8IE5PVF9BU0NJSSAqLywgcyA9IGNhbWxfdXRmOF9vZl91dGYxNihzKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRhZywgcywgcy5sZW5ndGgpO1xufVxuXG5cbi8vUHJvdmlkZXM6IE1sQnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIGpzb29faXNfYXNjaWksIGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gTWxCeXRlcyAodGFnLCBjb250ZW50cywgbGVuZ3RoKSB7XG4gIHRoaXMudD10YWc7IHRoaXMuYz1jb250ZW50czsgdGhpcy5sPWxlbmd0aDtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKXtcbiAgc3dpdGNoICh0aGlzLnQpIHtcbiAgY2FzZSA5OiAvKkJZVEVTIHwgQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyh0aGlzKTtcbiAgY2FzZSAwOiAvKkJZVEVTIHwgVU5LT1dOKi9cbiAgICBpZiAoanNvb19pc19hc2NpaSh0aGlzLmMpKSB7XG4gICAgICB0aGlzLnQgPSA5OyAvKkJZVEVTIHwgQVNDSUkqL1xuICAgICAgcmV0dXJuIHRoaXMuYztcbiAgICB9XG4gICAgdGhpcy50ID0gODsgLypCWVRFUyB8IE5PVF9BU0NJSSovXG4gIGNhc2UgODogLypCWVRFUyB8IE5PVF9BU0NJSSovXG4gICAgcmV0dXJuIHRoaXMuYztcbiAgfVxufTtcbk1sQnl0ZXMucHJvdG90eXBlLnRvVXRmMTYgPSBmdW5jdGlvbiAoKXtcbiAgdmFyIHIgPSB0aGlzLnRvU3RyaW5nKCk7XG4gIGlmKHRoaXMudCA9PSA5KSByZXR1cm4gclxuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHIpO1xufVxuTWxCeXRlcy5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoKXtcbiAgdmFyIGNvbnRlbnQgPSB0aGlzLnQgPT0gNCA/IHRoaXMuYy5zbGljZSgpIDogdGhpcy5jO1xuICByZXR1cm4gbmV3IE1sQnl0ZXModGhpcy50LGNvbnRlbnQsdGhpcy5sKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMgKHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQllURVMgKi9cbiAgaWYgKHMudCA9PSAyIC8qIFBBUlRJQUwgKi8pXG4gICAgcy5jICs9IGNhbWxfc3RyX3JlcGVhdChzLmwgLSBzLmMubGVuZ3RoLCAnXFwwJylcbiAgZWxzZVxuICAgIHMuYyA9IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyAocy5jLCAwLCBzLmMubGVuZ3RoKTtcbiAgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEFSUkFZICovXG4gIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkocy5sKTtcbiAgdmFyIGIgPSBzLmMsIGwgPSBiLmxlbmd0aCwgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gYi5jaGFyQ29kZUF0KGkpO1xuICBmb3IgKGwgPSBzLmw7IGkgPCBsOyBpKyspIGFbaV0gPSAwO1xuICBzLmMgPSBhO1xuICBzLnQgPSA0OyAvKiBBUlJBWSAqL1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMgKHMpIHtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gIHJldHVybiBzLmM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyAocykge1xuICB2YXIgbCA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShsKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocyxpKTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGlmKGxlbiA8IDApIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcyxjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2J5dGVzKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQnl0ZXMuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuPzI6OSxcIlwiLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2FycmF5IChhKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhhLDAsYS5sZW5ndGgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9hcnJheSAoYSkge1xuICBpZighIChhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICBhID0gbmV3IFVpbnQ4QXJyYXkoYSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKDQsYSxhLmxlbmd0aCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfY29tcGFyZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2NvbXBhcmUoczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8IHMyLmMpPy0xOihzMS5jID4gczIuYyk/MTowO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jID09IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX25vdGVxdWFsKHMxLCBzMikgeyByZXR1cm4gMS1jYW1sX3N0cmluZ19lcXVhbChzMSwgczIpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9ieXRlc19lcXVhbChzMSwgczIpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPD0gczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMixzMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczIsczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9BbGlhczogY2FtbF9maWxsX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT0gMCAmJiAobCA+PSBzLmwgfHwgKHMudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbCA+PSBzLmMubGVuZ3RoKSkpIHtcbiAgICAgIGlmIChjID09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0IChsLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICAgICAgcy50ID0gKGwgPT0gcy5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JsaXRfYnl0ZXMoczEsIGkxLCBzMiwgaTIsIGxlbikge1xuICBpZiAobGVuID09IDApIHJldHVybiAwO1xuICBpZiAoKGkyID09IDApICYmXG4gICAgICAobGVuID49IHMyLmwgfHwgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpKSB7XG4gICAgczIuYyA9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2UgaWYgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09IHMyLmMubGVuZ3RoKSB7XG4gICAgczIuYyArPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIHtcbiAgICBpZiAoczIudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsIGMyID0gczIuYztcbiAgICBpZiAoczEudCA9PSA0IC8qIEFSUkFZICovKSB7XG4gICAgICBpZiAoaTIgPD0gaTEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGwgPSBNYXRoLm1pbiAobGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzIgW2kyICsgaV0gPSBjMS5jaGFyQ29kZUF0KGkxICsgaSk7XG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2JsaXRfc3RyaW5nKGEsYixjLGQsZSkge1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9zdHJpbmcoYSksYixjLGQsZSk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKSB7IHJldHVybiBzLmwgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ191bnNhZmVfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIHMubGVuZ3RoXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmUgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8tMTooczEgPiBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPD0gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7XG4gIChzLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0Zjhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykge1xuICBpZihqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBzO1xuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocylcbiAgZWxzZSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3V0Zjhfb2ZfdXRmMTYocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7IHJldHVybiBuZXcgTWxCeXRlcygwLHMscy5sZW5ndGgpOyB9XG5cblxuLy8gVGhlIHNlY3Rpb24gYmVsb3cgc2hvdWxkIGJlIHVzZWQgd2hlbiB1c2UtanMtc3RyaW5nPWZhbHNlXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsaSxjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19lcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgeyByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIHMuYyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocyl7XG4gIHJldHVybiBzLnRvVXRmMTYoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfYnl0ZXMocykge1xuICByZXR1cm4gKHMgaW5zdGFuY2VvZiBNbEJ5dGVzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHMuY1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuICh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiAmJiAhL1teXFx4MDAtXFx4ZmZdLy50ZXN0KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfaXNfbWxfYnl0ZXMocyk7XG59XG5cbi8vIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGRlcHJlY2F0ZWRcblxuLy9Qcm92aWRlczogY2FtbF9qc190b19ieXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9qc190b19ieXRlX3N0cmluZyhzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX25ld19zdHJpbmcgKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF90b19qc19zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF90b19qc19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc190b19zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3RvX3N0cmluZyAocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX3N0cmluZyh4KSB7IHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyh4KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2ZfYnl0ZXMoeCkgeyByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyh4KSB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIFN5c1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvciAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5TeXNfZXJyb3IsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdCAoY29kZSkge1xuICBpZihnbG9iYWxUaGlzLnF1aXQpIGdsb2JhbFRoaXMucXVpdChjb2RlKTtcbiAgLy9ub2RlanNcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5leGl0KVxuICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5leGl0KGNvZGUpO1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJGdW5jdGlvbiAnZXhpdCcgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uKGV4bil7XG4gIHN3aXRjaChleG5bMl0pIHtcbiAgY2FzZSAtODogLy8gTWF0Y2hfZmFpbHVyZVxuICBjYXNlIC0xMTogLy8gQXNzZXJ0X2ZhaWx1cmVcbiAgY2FzZSAtMTI6IC8vIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG4gICAgcmV0dXJuIDE7XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9leGNlcHRpb24oZXhuKXtcbiAgdmFyIHIgPSBcIlwiO1xuICBpZihleG5bMF0gPT0gMCkge1xuICAgIHIgKz0gZXhuWzFdWzFdO1xuICAgIGlmKGV4bi5sZW5ndGggPT0gMyAmJiBleG5bMl1bMF0gPT0gMCAmJiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uKGV4blsxXSkpIHtcblxuICAgICAgdmFyIGJ1Y2tldCA9IGV4blsyXTtcbiAgICAgIHZhciBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IDJcbiAgICAgIHZhciBidWNrZXQgPSBleG47XG4gICAgfVxuICAgIHIgKz0gXCIoXCI7XG4gICAgZm9yKHZhciBpID0gc3RhcnQ7IGkgPCBidWNrZXQubGVuZ3RoOyBpICsrKXtcbiAgICAgIGlmKGkgPiBzdGFydCkgcis9XCIsIFwiO1xuICAgICAgdmFyIHYgPSBidWNrZXRbaV1cbiAgICAgIGlmKHR5cGVvZiB2ID09IFwibnVtYmVyXCIpXG4gICAgICAgIHIrPSB2LnRvU3RyaW5nKCk7XG4gICAgICBlbHNlIGlmKHYgaW5zdGFuY2VvZiBNbEJ5dGVzKXtcbiAgICAgICAgcis9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfVxuICAgICAgZWxzZSBpZih0eXBlb2YgdiA9PSBcInN0cmluZ1wiKXtcbiAgICAgICAgcis9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfVxuICAgICAgZWxzZSByICs9IFwiX1wiO1xuICAgIH1cbiAgICByICs9IFwiKVwiXG4gIH0gZWxzZSBpZiAoZXhuWzBdID09IDI0OCl7XG4gICAgciArPSBleG5bMV1cbiAgfVxuICByZXR1cm4gclxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9mb3JtYXRfZXhjZXB0aW9uLCBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihlcnIpe1xuICBpZihlcnIgaW5zdGFuY2VvZiBBcnJheSAmJiAoZXJyWzBdID09IDAgfHwgZXJyWzBdID09IDI0OCkpIHtcbiAgICB2YXIgaGFuZGxlciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCIpO1xuICAgIGlmKGhhbmRsZXIpIGNhbWxfY2FsbGJhY2soaGFuZGxlciwgW2VycixmYWxzZV0pO1xuICAgIGVsc2Uge1xuICAgICAgdmFyIG1zZyA9IGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgdmFyIGF0X2V4aXQgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIpO1xuICAgICAgaWYoYXRfZXhpdCkgY2FtbF9jYWxsYmFjayhhdF9leGl0LCBbMF0pO1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cpO1xuICAgICAgaWYoZXJyLmpzX2Vycm9yKSB0aHJvdyBlcnIuanNfZXJyb3I7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbmZ1bmN0aW9uIGNhbWxfc2V0X3N0YXRpY19lbnYoayx2KXtcbiAgaWYoIWdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52KVxuICAgIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52ID0ge31cbiAgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZba10gPSB2O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczoganNvb19zeXNfZ2V0ZW52IChjb25zdClcbmZ1bmN0aW9uIGpzb29fc3lzX2dldGVudihuKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICAvL25vZGVqcyBlbnZcbiAgaWYocHJvY2Vzc1xuICAgICAmJiBwcm9jZXNzLmVudlxuICAgICAmJiBwcm9jZXNzLmVudltuXSAhPSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W25dO1xuICBpZihnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudlxuICAgICAmJiBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltuXSlcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0ZW52IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29fc3lzX2dldGVudlxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYociA9PT0gdW5kZWZpbmVkKVxuICAgIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdW5zYWZlX2dldGVudlxuLy9SZXF1aXJlczogY2FtbF9zeXNfZ2V0ZW52XG5mdW5jdGlvbiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52KG5hbWUpe1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIGNhbWxfYXJndiA9ICgoZnVuY3Rpb24gKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgdmFyIG1haW4gPSBcImEub3V0XCI7XG4gIHZhciBhcmdzID0gW11cblxuICBpZihwcm9jZXNzXG4gICAgICYmIHByb2Nlc3MuYXJndlxuICAgICAmJiBwcm9jZXNzLmFyZ3YubGVuZ3RoID4gMSkge1xuICAgIHZhciBhcmd2ID0gcHJvY2Vzcy5hcmd2XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspXG4gICAgYXJnczIucHVzaChjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhhcmdzW2ldKSk7XG4gIHJldHVybiBhcmdzMjtcbn0pKCkpXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbnZhciBjYW1sX2V4ZWN1dGFibGVfbmFtZSA9IGNhbWxfYXJndlsxXVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfYXJndiAoYSkge1xuICByZXR1cm4gWzAsIGNhbWxfYXJndlsxXSwgY2FtbF9hcmd2XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19hcmd2IChhKSB7XG4gIHJldHVybiBjYW1sX2FyZ3Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21vZGlmeV9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX21vZGlmeV9hcmd2KGFyZyl7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShhKXtcbiAgcmV0dXJuIGNhbWxfZXhlY3V0YWJsZV9uYW1lXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgdmFyIGNtZCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGNtZCk7XG4gIGlmICh0eXBlb2YgcmVxdWlyZSAhPSBcInVuZGVmaW5lZFwiKXtcbiAgICB2YXIgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbiAgICBpZihjaGlsZF9wcm9jZXNzICYmIGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMpXG4gICAgICB0cnkge1xuICAgICAgICBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGNtZCx7c3RkaW86ICdpbmhlcml0J30pO1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICB9XG4gIGVsc2UgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZChjbWQpe1xuICByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lIG11dGFibGVcbnZhciBjYW1sX2luaXRpYWxfdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgKiAwLjAwMTtcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWUgKCkge1xuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgcmV0dXJuIG5vdyAqIDAuMDAxIC0gY2FtbF9pbml0aWFsX3RpbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlblxuLy9SZXF1aXJlczogY2FtbF9zeXNfdGltZVxuZnVuY3Rpb24gY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuKGIpIHtcbiAgcmV0dXJuIGNhbWxfc3lzX3RpbWUoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQgKCkge1xuICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8pIHtcbiAgICAgaWYgKGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgIHZhciBhID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBJbnQzMkFycmF5KDQpKTtcbiAgICAgICByZXR1cm4gWzAsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM11dO1xuICAgICB9IGVsc2UgaWYgKGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XG4gICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheShnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcygxNikuYnVmZmVyKTtcbiAgICAgICByZXR1cm4gWzAsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM11dO1xuICAgICB9XG4gIH1cbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHZhciB4ID0gbm93XjB4ZmZmZmZmZmYqTWF0aC5yYW5kb20oKTtcbiAgcmV0dXJuIFswLHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuICgpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplICgpIHsgcmV0dXJuIDMyOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSAoKSB7IHJldHVybiAoMHg3RkZGRkZGRi80KSB8IDA7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXggKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIlVuaXhcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiAoKSB7IHJldHVybiBvc190eXBlID09IFwiV2luMzJcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJDeWd3aW5cIiA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwianNfb2Zfb2NhbWxcIildO1xufVxuXG4vL1Byb3ZpZGVzOiBvc190eXBlXG52YXIgb3NfdHlwZSA9IChnbG9iYWxUaGlzLnByb2Nlc3MgJiZcbiAgICAgICAgICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSAmJlxuICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtID09IFwid2luMzJcIikgPyBcIkN5Z3dpblwiIDogXCJVbml4XCI7XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2NvbmZpZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2NvbmZpZyAoKSB7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhvc190eXBlKSwgMzIsIDBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzYXR0eShfY2hhbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3ZhcmlhbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV92YXJpYW50KF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3BhcmFtZXRlcnNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlcigpe3JldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MgKGJvb2wpIHtcbiAgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gYm9vbDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkIChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9ydW50aW1lX3dhcm5pbmdzO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfZW5hYmxlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZShfY2hhbm5lbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiU3BhY2V0aW1lIHByb2ZpbGluZyBvbmx5IHdvcmtzIGZvciBuYXRpdmUgY29kZVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF94ZGdfZGVmYXVsdHNcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX3hkZ19kZWZhdWx0cyhfdW5pdCkge1xuICByZXR1cm4gMDsgLy8gZW1wdHkgbGlzdFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGVcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGUobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuaXNGaWxlKHJvb3QucmVzdCk7XG59XG4vL0Fsd2F5c1xuLy9SZXF1aXJlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICBpZihwcm9jZXNzICYmIHByb2Nlc3Mub24pIHtcbiAgICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIGZ1bmN0aW9uIChlcnIsIG9yaWdpbikge1xuICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCAoMik7XG4gICAgfSlcbiAgfVxuICBlbHNlIGlmKGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7XG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgIGlmKGV2ZW50LmVycm9yKXtcbiAgICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXZlbnQuZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5jYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCk7XG5cblxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSBGTEFHKFwid2l0aC1qcy1lcnJvclwiKTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHIgPSBqc29vX3N5c19nZXRlbnYoXCJPQ0FNTFJVTlBBUkFNXCIpXG4gIGlmKHIgIT09IHVuZGVmaW5lZCl7XG4gICAgdmFyIGwgPSByLnNwbGl0KFwiLFwiKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKyl7XG4gICAgICBpZihsW2ldID09IFwiYlwiKSB7IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gMTsgYnJlYWsgfVxuICAgICAgZWxzZSBpZiAobFtpXS5zdGFydHNXaXRoKFwiYj1cIikpIHtcbiAgICAgICAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSArKGxbaV0uc2xpY2UoMikpfVxuICAgICAgZWxzZSBjb250aW51ZTtcbiAgICB9XG4gIH1cbn0pICgpXG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXNcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX2JhY2t0cmFjZV9zdGF0dXMgKF91bml0KSB7IHJldHVybiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfcmVjb3JkX2JhY2t0cmFjZSAoYikgeyBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IGI7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgKCkgeyByZXR1cm4gWzBdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbGVuZ3RoKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCgpIHsgcmV0dXJuIDAgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZV9zbG90OiBpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlKGV4biwgYnQpIHsgcmV0dXJuIDAgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrICgpIHsgcmV0dXJuIFswXTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90KCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogIWVmZmVjdHNcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIHZhciBuID0gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGQgPSBuIC0gYXJnc0xlbjtcbiAgaWYgKGQgPT0gMClcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgZyA9IGYuYXBwbHkobnVsbCxhcmdzLnNsaWNlKDAsbikpO1xuICAgIGlmKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBnO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsYXJncy5zbGljZShuKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgc3dpdGNoIChkKSB7XG4gICAgY2FzZSAxOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAxKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAyKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgdmFyIGV4dHJhX2FyZ3MgPSAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKT8xOmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzLmxlbmd0aCtleHRyYV9hcmdzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSBuYXJnc1thcmdzLmxlbmd0aCtpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgbmFyZ3MpXG4gICAgICB9O1xuICAgIH19XG4gICAgZy5sID0gZDtcbiAgICByZXR1cm4gZztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuIChjb25zdCwgc2hhbGxvdylcbi8vSWY6IGVmZmVjdHNcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIHZhciBuID0gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGQgPSBuIC0gYXJnc0xlbjtcbiAgaWYgKGQgPT0gMCkge1xuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9IGVsc2UgaWYgKGQgPCAwKSB7XG4gICAgdmFyIHJlc3QgPSBhcmdzLnNsaWNlKG4gLSAxKTtcbiAgICB2YXIgayA9IGFyZ3MgW2FyZ3NMZW4gLSAxXTtcbiAgICBhcmdzID0gYXJncy5zbGljZSgwLCBuKTtcbiAgICBhcmdzW24gLSAxXSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICBpZiAodHlwZW9mIGcgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGsoZyk7XG4gICAgICB2YXIgYXJncyA9IHJlc3Quc2xpY2UoKTtcbiAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGs7XG4gICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihnLCBhcmdzKTsgfTtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzTGVuLS07XG4gICAgdmFyIGsgPSBhcmdzIFthcmdzTGVuXTtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICBjYXNlIDE6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDI6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHksIHope1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDMpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAyXSA9IHo7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICgpe1xuICAgICAgICB2YXIgZXh0cmFfYXJncyA9IChhcmd1bWVudHMubGVuZ3RoID09IDApPzE6YXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyBleHRyYV9hcmdzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApXG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbiArIGldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICAgIH07XG4gICAgfX1cbiAgICBnLmwgPSBkICsgMTtcbiAgICByZXR1cm4gayhnKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlc1xudmFyIGNhbWxfbmFtZWRfdmFsdWVzID0ge307XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUgKGNvbnN0LG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZShubSx2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbnZhciBjYW1sX2dsb2JhbF9kYXRhID0gWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2J1aWxkX3N5bWJvbHNcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J1aWxkX3N5bWJvbHMoc3ltYikge1xuICB2YXIgciA9IHt9O1xuICBpZihzeW1iKSB7XG4gICAgZm9yKHZhciBpID0gMTsgaSA8IHN5bWIubGVuZ3RoOyBpKyspe1xuICAgICAgcltjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzeW1iW2ldWzFdKV0gPSBzeW1iW2ldWzJdXG4gICAgfVxuICB9XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAoY29uc3QsIHNoYWxsb3csIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9jYWxsYmFjaywgY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYgKG5hbWVfb3B0KSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lX29wdDtcbiAgICBpZihnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MpIHtcbiAgICAgIG4gPSBjYW1sX2NhbGxiYWNrKGdsb2JhbFRoaXMudG9wbGV2ZWxSZWxvYywgW25hbWVdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2FtbF9nbG9iYWxfZGF0YS5zeW1ib2xzKSB7XG4gICAgICBpZighY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHgpIHtcbiAgICAgICAgY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHggPSBjYW1sX2J1aWxkX3N5bWJvbHMoY2FtbF9nbG9iYWxfZGF0YS5zeW1ib2xzKVxuICAgICAgfVxuICAgICAgdmFyIG5pZCA9IGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4W25hbWVdXG4gICAgICBpZihuaWQgPj0gMClcbiAgICAgICAgbiA9IG5pZFxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3JlZ2lzdGVyX2dsb2JhbDogY2Fubm90IGxvY2F0ZSBcIiArIG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmKG5hbWVfb3B0KSBjYW1sX2dsb2JhbF9kYXRhW25hbWVfb3B0XSA9IHY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2dsb2JhbF9kYXRhIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZ2V0X2dsb2JhbF9kYXRhICgpIHsgcmV0dXJuIGNhbWxfZ2xvYmFsX2RhdGE7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykgeyByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9tYXliZV9wcmludF9zdGF0c1xuZnVuY3Rpb24gY2FtbF9tYXliZV9wcmludF9zdGF0cyh1bml0KSB7IHJldHVybiAwIH1cbiIsIi8vIEpzX29mX29jYW1sIGxpYnJhcnlcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBKc2xpYlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3B1cmVfZXhwciBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc19wdXJlX2V4cHIgKGYpIHsgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgWzBdKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3NldCAobXV0YWJsZSwgY29uc3QsIG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2pzX3NldChvLGYsdikgeyBvW2ZdPXY7cmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLGYpIHsgcmV0dXJuIG9bZl07IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZGVsZXRlIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZGVsZXRlKG8sZikgeyBkZWxldGUgb1tmXTsgcmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sYykgeyByZXR1cm4gKG8gaW5zdGFuY2VvZiBjKSA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmUocmVzKSB7XG4gIHZhciBjID0gMTtcbiAgd2hpbGUocmVzICYmIHJlcy5qb29fdHJhbXApe1xuICAgIHJlcyA9IHJlcy5qb29fdHJhbXAuYXBwbHkobnVsbCwgcmVzLmpvb19hcmdzKTtcbiAgICBjKys7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVfcmV0dXJuXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGYsYXJncykge1xuICByZXR1cm4ge2pvb190cmFtcDpmLGpvb19hcmdzOmFyZ3N9O1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfc3RhY2tfZGVwdGhcbi8vSWY6IGVmZmVjdHNcbnZhciBjYW1sX3N0YWNrX2RlcHRoID0gMDtcblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2NoZWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfc3RhY2tfZGVwdGhcbmZ1bmN0aW9uIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKSB7XG4gICAgcmV0dXJuIC0tY2FtbF9zdGFja19kZXB0aCA+IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6ICFlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfY2FsbF9nZW5cbnZhciBjYW1sX2NhbGxiYWNrID0gY2FtbF9jYWxsX2dlbjtcblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuLCBjYW1sX2V4bl9zdGFjaywgY2FtbF9maWJlcl9zdGFjaywgY2FtbF93cmFwX2V4Y2VwdGlvbiwgY2FtbF9yZXN1bWVfc3RhY2ssIGNhbWxfZnJlc2hfb29faWQsIGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnRcbmZ1bmN0aW9uIGNhbWxfY2FsbGJhY2soZixhcmdzKSB7XG4gIGZ1bmN0aW9uIHVuY2F1Z2h0X2VmZmVjdF9oYW5kbGVyKGVmZixrLG1zKSB7XG4gICAgLy8gUmVzdW1lcyB0aGUgY29udGludWF0aW9uIGsgYnkgcmFpc2luZyBleGNlcHRpb24gVW5oYW5kbGVkLlxuICAgIGNhbWxfcmVzdW1lX3N0YWNrKGtbMV0sbXMpO1xuICAgIHZhciBleG4gPSBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LlVuaGFuZGxlZFwiKTtcbiAgICBpZihleG4pIGNhbWxfcmFpc2Vfd2l0aF9hcmcoZXhuLCBlZmYpO1xuICAgIGVsc2Uge1xuICAgICAgZXhuID0gWzI0OCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiRWZmZWN0LlVuaGFuZGxlZFwiKSwgY2FtbF9mcmVzaF9vb19pZCgwKV07XG4gICAgICBjYW1sX3JhaXNlX2NvbnN0YW50KGV4bik7XG4gICAgfVxuICB9XG4gIHZhciBzYXZlZF9zdGFja19kZXB0aCA9IGNhbWxfc3RhY2tfZGVwdGg7XG4gIHZhciBzYXZlZF9leG5fc3RhY2sgPSBjYW1sX2V4bl9zdGFjaztcbiAgdmFyIHNhdmVkX2ZpYmVyX3N0YWNrID0gY2FtbF9maWJlcl9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2V4bl9zdGFjayA9IDA7XG4gICAgY2FtbF9maWJlcl9zdGFjayA9XG4gICAgICB7aDpbMCwgMCwgMCwgdW5jYXVnaHRfZWZmZWN0X2hhbmRsZXJdLCByOntrOjAsIHg6MCwgZTowfX07XG4gICAgdmFyIHJlcyA9IHtqb29fdHJhbXA6IGYsXG4gICAgICAgICAgICAgICBqb29fYXJnczogYXJncy5jb25jYXQoZnVuY3Rpb24gKHgpe3JldHVybiB4O30pfTtcbiAgICBkbyB7XG4gICAgICBjYW1sX3N0YWNrX2RlcHRoID0gNDA7XG4gICAgICB0cnkge1xuICAgICAgICByZXMgPSBjYW1sX2NhbGxfZ2VuKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfZXhuX3N0YWNrKSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfZXhuX3N0YWNrWzFdO1xuICAgICAgICBjYW1sX2V4bl9zdGFjayA9IGNhbWxfZXhuX3N0YWNrWzJdO1xuICAgICAgICByZXMgPSB7am9vX3RyYW1wOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgam9vX2FyZ3M6IFtjYW1sX3dyYXBfZXhjZXB0aW9uKGUpXX07XG4gICAgICB9XG4gICAgfSB3aGlsZShyZXMgJiYgcmVzLmpvb19hcmdzKVxuICB9IGZpbmFsbHkge1xuICAgIGNhbWxfc3RhY2tfZGVwdGggPSBzYXZlZF9zdGFja19kZXB0aDtcbiAgICBjYW1sX2V4bl9zdGFjayA9IHNhdmVkX2V4bl9zdGFjaztcbiAgICBjYW1sX2ZpYmVyX3N0YWNrID0gc2F2ZWRfZmliZXJfc3RhY2s7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZyh1bml0KXtcbiAgcmV0dXJuIEZMQUcoXCJ1c2UtanMtc3RyaW5nXCIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc19lZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfZWZmZWN0cyh1bml0KXtcbiAgcmV0dXJuIEZMQUcoXCJlZmZlY3RzXCIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd3JhcF9leGNlcHRpb24gY29uc3QgKG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLGNhbWxfbmFtZWRfdmFsdWVcbmZ1bmN0aW9uIGNhbWxfd3JhcF9leGNlcHRpb24oZSkge1xuICBpZiAoRkxBRyhcImV4Y3dyYXBcIikpIHtcbiAgICBpZihlIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiBlO1xuICAgIHZhciBleG47XG4gICAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgICBpZihnbG9iYWxUaGlzLlJhbmdlRXJyb3JcbiAgICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICAgJiYgZS5tZXNzYWdlXG4gICAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSkpXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgICBlbHNlIGlmKGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvclxuICAgICAgICYmIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkludGVybmFsRXJyb3JcbiAgICAgICAmJiBlLm1lc3NhZ2VcbiAgICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKSlcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICAgIGVsc2UgaWYoZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuRXJyb3IgJiYgY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIikpXG4gICAgICBleG4gPSBbMCxjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSxlXTtcbiAgICBlbHNlXG4gICAgICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgICAgIGV4biA9IFswLGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoU3RyaW5nKGUpKV07XG4gICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGVycm9yIGF0IGhhbmQsIGxldCdzIHVzZSBpdC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuRXJyb3IpXG4gICAgICBleG4uanNfZXJyb3IgPSBlO1xuICAgIHJldHVybiBleG47XG4gIH0gZWxzZVxuICAgIHJldHVybiBlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgaWYoY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcpXG4gICAgcmV0dXJuIGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlKGV4biwgZm9yY2UpO1xuICBlbHNlIHJldHVybiBleG5cbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZighZXhuLmpzX2Vycm9yIHx8IGZvcmNlIHx8IGV4blswXSA9PSAyNDgpIGV4bi5qc19lcnJvciA9IG5ldyBnbG9iYWxUaGlzLkVycm9yKFwiSnMgZXhjZXB0aW9uIGNvbnRhaW5pbmcgYmFja3RyYWNlXCIpO1xuICByZXR1cm4gZXhuO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZihleG4uanNfZXJyb3IpIHsgcmV0dXJuIFswLCBleG4uanNfZXJyb3JdOyB9XG4gIHJldHVybiAwO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Jvb2woeCkgeyByZXR1cm4gISF4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHsgcmV0dXJuICt4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fZmxvYXQgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc19mcm9tX2ludDMyXG4vL0FsaWFzOiBjYW1sX2pzX2Zyb21fbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19mbG9hdCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9faW50MzIgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc190b19uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfdG9faW50MzIoeCkgeyByZXR1cm4geHwwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGJbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGxlbjtpKyspIGJbaSsxXSA9IGFbaV07XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkoYSl7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBpPWEubGVuZ3RoIC0gMTsgaT49MDsgaS0tKXtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLGUsbF07XG4gIH1cbiAgcmV0dXJuIGxcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpe1xuICB2YXIgYSA9IFtdO1xuICBmb3IoOyBsICE9PSAwOyBsID0gbFsyXSkge1xuICAgIGEucHVzaChsWzFdKTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc192YXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdmFyKHgpIHtcbiAgdmFyIHggPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyh4KTtcbiAgLy9DaGVja3MgdGhhdCB4IGhhcyB0aGUgZm9ybSBpZGVudFsuaWRlbnRdKlxuICBpZigheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSl7XG4gICAgY29uc29sZS5lcnJvcihcImNhbWxfanNfdmFyOiBcXFwiXCIgKyB4ICsgXCJcXFwiIGlzIG5vdCBhIHZhbGlkIEphdmFTY3JpcHQgdmFyaWFibGUuIGNvbnRpbnVpbmcgLi5cIik7XG4gICAgLy9jb25zb2xlLmVycm9yKFwiSnMuVW5zYWZlLmV2YWxfc3RyaW5nXCIpXG4gIH1cbiAgcmV0dXJuIGV2YWwoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykgeyByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bl9jYWxsIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19mdW5fY2FsbChmLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gZigpO1xuICBjYXNlIDI6IHJldHVybiBmIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gZiAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX29qc19uZXdfYXJyIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9vanNfbmV3X2FycihjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAwOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjIChhWzBdKTtcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBhKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihsZW4gPiAwKXtcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gW3VuZGVmaW5lZF07XG4gICAgfVxuICAgIHZhciByZXMgPSBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICAgIHJldHVybiAocmVzIGluc3RhbmNlb2YgRnVuY3Rpb24pP2NhbWxfanNfd3JhcF9jYWxsYmFjayhyZXMpOnJlcztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5KTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZik7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpOyB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX3dyYXBfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZixhcmdzKTtcbiAgICByZXR1cm4gKHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKT9jYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKTpyZXM7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLFt0aGlzLGFyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QoYXJpdHksIGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcml0eSArIDEpO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoLCBhcml0eSlcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSAtIDE7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpOyB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbi8vSWY6ICFlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgcmV0dXJuIChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSB7XG4gIC8vIEZ1bmN0aW9ucyBoYXZlIGFuIGFkZGl0aW9uYWwgY29udGludWF0aW9uIHBhcmFtZXRlci4gVGhpcyBzaG91bGRcbiAgLy8gbm90IGJlIHZpc2libGUgd2hlbiBjYWxsaW5nIHRoZW0gZnJvbSBKYXZhU2NyaXB0XG4gIHJldHVybiAoKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKSkgLSAxXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXF1YWxzIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZXF1YWxzICh4LCB5KSB7IHJldHVybiArKHggPT0geSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zdHJpY3RfZXF1YWxzIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfc3RyaWN0X2VxdWFscyAoeCwgeSkgeyByZXR1cm4gKyh4ID09PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V2YWxfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V2YWxfc3RyaW5nIChzKSB7cmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19leHByIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V4cHIocykge1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcHVyZV9qc19leHByIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3B1cmVfanNfZXhwciAocyl7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX3B1cmVfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX29iamVjdCAob2JqZWN0X2xpdGVyYWwpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19vYmplY3QgKGEpIHtcbiAgdmFyIG8gPSB7fTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHAgPSBhW2ldO1xuICAgIG9bY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocFsxXSldID0gcFsyXTtcbiAgfVxuICByZXR1cm4gbztcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUmFpc2UgZXhjZXB0aW9uXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9jb25zdGFudCAodGFnKSB7IHRocm93IHRhZzsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnIChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBhcmcpIHsgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWcsIGFyZ10pOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzIChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZ3MgKHRhZywgYXJncykgeyB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoWzAsIHRhZ10uY29uY2F0KGFyZ3MpKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nICh0YWcsIG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aCAobXNnKSB7XG4gIGlmKCFjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlPVsyNDgsY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkZhaWx1cmVcIiksLTNdO1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSwgbXNnKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkludmFsaWRfYXJndW1lbnQsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRW5kX29mX2ZpbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkRpdmlzaW9uX2J5X3plcm8pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub3RfZm91bmQgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuTm90X2ZvdW5kKTsgfVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczoganNvb19mbG9vcl9sb2cyXG52YXIgbG9nMl9vayA9IE1hdGgubG9nMiAmJiBNYXRoLmxvZzIoMS4xMjM1NTgyMDkyODg5NDc0RSszMDcpID09IDEwMjBcbmZ1bmN0aW9uIGpzb29fZmxvb3JfbG9nMih4KSB7XG4gIGlmKGxvZzJfb2spIHJldHVybiBNYXRoLmZsb29yKE1hdGgubG9nMih4KSlcbiAgdmFyIGkgPSAwO1xuICBpZiAoeCA9PSAwKSByZXR1cm4gLUluZmluaXR5O1xuICBpZih4Pj0xKSB7d2hpbGUgKHg+PTIpIHt4Lz0yOyBpKyt9IH1cbiAgZWxzZSB7d2hpbGUgKHggPCAxKSB7eCo9MjsgaS0tfSB9O1xuICByZXR1cm4gaTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzIsIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXG5mdW5jdGlvbiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSlcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgxLCAwLCAweDdmZjApO1xuICAgIGlmICh4ID4gMClcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgwLCAwLCAweDdmZjApXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4ZmZmMClcbiAgfVxuICB2YXIgc2lnbiA9ICh4PT0wICYmIDEveCA9PSAtSW5maW5pdHkpPzB4ODAwMDooeD49MCk/MDoweDgwMDA7XG4gIGlmIChzaWduKSB4ID0gLXg7XG4gIC8vIEludDY0LmJpdHNfb2ZfZmxvYXQgMS4xMjM1NTgyMDkyODg5NDc0RSszMDcgPSAweDdmYjAwMDAwMDAwMDAwMDBMXG4gIC8vIHVzaW5nIE1hdGguTE9HMkUqTWF0aC5sb2coeCkgaW4gcGxhY2Ugb2YgTWF0aC5sb2cyIHJlc3VsdCBpbiBwcmVjaXNpb24gbG9zdFxuICB2YXIgZXhwID0ganNvb19mbG9vcl9sb2cyKHgpICsgMTAyMztcbiAgaWYgKGV4cCA8PSAwKSB7XG4gICAgZXhwID0gMDtcbiAgICB4IC89IE1hdGgucG93KDIsLTEwMjYpO1xuICB9IGVsc2Uge1xuICAgIHggLz0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gICAgaWYgKHggPCAxNikge1xuICAgICAgeCAqPSAyOyBleHAgLT0xOyB9XG4gICAgaWYgKGV4cCA9PSAwKSB7XG4gICAgICB4IC89IDI7IH1cbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsMjQpO1xuICB2YXIgcjMgPSB4fDA7XG4gIHggPSAoeCAtIHIzKSAqIGs7XG4gIHZhciByMiA9IHh8MDtcbiAgeCA9ICh4IC0gcjIpICogaztcbiAgdmFyIHIxID0geHwwO1xuICByMyA9IChyMyAmMHhmKSB8IHNpZ24gfCBleHAgPDwgNDtcbiAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKHIxLCByMiwgcjMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0ICh4KSB7XG4gIHZhciBmbG9hdDMyYSA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gIGZsb2F0MzJhWzBdID0geDtcbiAgdmFyIGludDMyYSA9IG5ldyBJbnQzMkFycmF5KGZsb2F0MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBpbnQzMmFbMF0gfCAwO1xufVxuXG4vL0ZQIGxpdGVyYWxzIGNhbiBiZSB3cml0dGVuIHVzaW5nIHRoZSBoZXhhZGVjaW1hbFxuLy9ub3RhdGlvbiAweDxtYW50aXNzYSBpbiBoZXg+cDxleHBvbmVudD4gZnJvbSBJU08gQzk5LlxuLy9odHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkvanMtaGV4ZmxvYXQvYmxvYi9tYXN0ZXIvaGV4ZmxvYXQuanNcbi8vUHJvdmlkZXM6IGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCAoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSkgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKFwibmFuXCIpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoKHggPiAwKT9cImluZmluaXR5XCI6XCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8xOih4Pj0wKT8wOjE7XG4gIGlmKHNpZ24pIHggPSAteDtcbiAgdmFyIGV4cCA9IDA7XG4gIGlmICh4ID09IDApIHsgfVxuICBlbHNlIGlmICh4IDwgMSkge1xuICAgIHdoaWxlICh4IDwgMSAmJiBleHAgPiAtMTAyMikgIHsgeCAqPSAyOyBleHAtLSB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikgeyB4IC89IDI7IGV4cCsrIH1cbiAgfVxuICB2YXIgZXhwX3NpZ24gPSBleHAgPCAwID8gJycgOiAnKyc7XG4gIHZhciBzaWduX3N0ciA9ICcnO1xuICBpZiAoc2lnbikgc2lnbl9zdHIgPSAnLSdcbiAgZWxzZSB7XG4gICAgc3dpdGNoKHN0eWxlKXtcbiAgICBjYXNlIDQzIC8qICcrJyAqLzogc2lnbl9zdHIgPSAnKyc7IGJyZWFrO1xuICAgIGNhc2UgMzIgLyogJyAnICovOiBzaWduX3N0ciA9ICcgJzsgYnJlYWs7XG4gICAgZGVmYXVsdDogYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwcmVjID49IDAgJiYgcHJlYyA8IDEzKSB7XG4gICAgLyogSWYgYSBwcmVjaXNpb24gaXMgZ2l2ZW4sIGFuZCBpcyBzbWFsbCwgcm91bmQgbWFudGlzc2EgYWNjb3JkaW5nbHkgKi9cbiAgICB2YXIgY3N0ID0gTWF0aC5wb3coMixwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmKHByZWMgPj0gMCl7XG4gICAgdmFyIGlkeCA9IHhfc3RyLmluZGV4T2YoJy4nKTtcbiAgICBpZihpZHg8MCkge1xuICAgICAgeF9zdHIgKz0gJy4nICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsICcwJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHgrMStwcmVjO1xuICAgICAgaWYoeF9zdHIubGVuZ3RoIDwgc2l6ZSlcbiAgICAgICAgeF9zdHIgKz0gY2FtbF9zdHJfcmVwZWF0KHNpemUgLSB4X3N0ci5sZW5ndGgsICcwJyk7XG4gICAgICBlbHNlXG4gICAgICAgIHhfc3RyID0geF9zdHIuc3Vic3RyKDAsc2l6ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoc2lnbl9zdHIgKyAnMHgnICsgeF9zdHIgKyAncCcgKyBleHBfc2lnbiArIGV4cC50b1N0cmluZygxMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgbG8gPSB4LmxvO1xuICB2YXIgbWkgPSB4Lm1pO1xuICB2YXIgaGkgPSB4LmhpO1xuICB2YXIgZXhwID0gKGhpICYgMHg3ZmZmKSA+PiA0O1xuICBpZiAoZXhwID09IDIwNDcpIHtcbiAgICBpZiAoKGxvfG1pfChoaSYweGYpKSA9PSAwKVxuICAgICAgcmV0dXJuIChoaSAmIDB4ODAwMCk/KC1JbmZpbml0eSk6SW5maW5pdHk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsLTI0KTtcbiAgdmFyIHJlcyA9IChsbyprK21pKSprKyhoaSYweGYpO1xuICBpZiAoZXhwID4gMCkge1xuICAgIHJlcyArPSAxNjtcbiAgICByZXMgKj0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gIH0gZWxzZVxuICAgIHJlcyAqPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgaWYgKGhpICYgMHg4MDAwKSByZXMgPSAtIHJlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9zdWIsY2FtbF9pbnQ2NF9vZl9pbnQzMlxuZnVuY3Rpb24gY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgKHgseSkge1xuICBpZihpc05hTih4KSB8fCBpc05hTih5KSkgcmV0dXJuIE5hTjtcbiAgaWYoeD09eSkgcmV0dXJuIHk7XG4gIGlmKHg9PTApe1xuICAgIGlmKHkgPCAwKVxuICAgICAgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpXG4gIH1cbiAgdmFyIGJpdHMgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoeCk7XG4gIHZhciBvbmUgPSBjYW1sX2ludDY0X29mX2ludDMyKDEpO1xuICBpZiAoKHg8eSkgPT0gKHg+MCkpXG4gICAgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSlcbiAgZWxzZVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X3N1YihiaXRzLCBvbmUpXG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCl7XG4gIHJldHVybiBNYXRoLnRydW5jKHgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgaW50MzJhID0gbmV3IEludDMyQXJyYXkoMSk7XG4gIGludDMyYVswXSA9IHg7XG4gIHZhciBmbG9hdDMyYSA9IG5ldyBGbG9hdDMyQXJyYXkoaW50MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBmbG9hdDMyYVswXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jbGFzc2lmeV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jbGFzc2lmeV9mbG9hdCAoeCkge1xuICBpZiAoaXNGaW5pdGUgKHgpKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpID49IDIuMjI1MDczODU4NTA3MjAxNGUtMzA4KSByZXR1cm4gMDtcbiAgICBpZiAoeCAhPSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuICByZXR1cm4gaXNOYU4oeCk/NDozO1xufVxuLy9Qcm92aWRlczogY2FtbF9tb2RmX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX21vZGZfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIHZhciBuZWcgPSAoMS94KSA8IDA7XG4gICAgeCA9IE1hdGguYWJzKHgpO1xuICAgIHZhciBpID0gTWF0aC5mbG9vciAoeCk7XG4gICAgdmFyIGYgPSB4IC0gaTtcbiAgICBpZiAobmVnKSB7IGkgPSAtaTsgZiA9IC1mOyB9XG4gICAgcmV0dXJuIFswLCBmLCBpXTtcbiAgfVxuICBpZiAoaXNOYU4gKHgpKSByZXR1cm4gWzAsIE5hTiwgTmFOXTtcbiAgcmV0dXJuIFswLCAxL3gsIHhdO1xufVxuLy9Qcm92aWRlczogY2FtbF9sZGV4cF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sZGV4cF9mbG9hdCAoeCxleHApIHtcbiAgZXhwIHw9IDA7XG4gIGlmIChleHAgPiAxMDIzKSB7XG4gICAgZXhwIC09IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICBpZiAoZXhwID4gMTAyMykgeyAgLy8gaW4gY2FzZSB4IGlzIHN1Ym5vcm1hbFxuICAgICAgZXhwIC09IDEwMjM7XG4gICAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIH1cbiAgfVxuICBpZiAoZXhwIDwgLTEwMjMpIHtcbiAgICBleHAgKz0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIC0xMDIzKTtcbiAgfVxuICB4ICo9IE1hdGgucG93KDIsIGV4cCk7XG4gIHJldHVybiB4O1xufVxuLy9Qcm92aWRlczogY2FtbF9mcmV4cF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ZyZXhwX2Zsb2F0ICh4KSB7XG4gIGlmICgoeCA9PSAwKSB8fCAhaXNGaW5pdGUoeCkpIHJldHVybiBbMCwgeCwgMF07XG4gIHZhciBuZWcgPSB4IDwgMDtcbiAgaWYgKG5lZykgeCA9IC0geDtcbiAgdmFyIGV4cCA9IE1hdGgubWF4KC0xMDIzLCBqc29vX2Zsb29yX2xvZzIoeCkgKyAxKTtcbiAgeCAqPSBNYXRoLnBvdygyLC1leHApO1xuICB3aGlsZSAoeCA8IDAuNSkge1xuICAgIHggKj0gMjtcbiAgICBleHAtLTtcbiAgfVxuICB3aGlsZSAoeCA+PSAxKSB7XG4gICAgeCAqPSAwLjU7XG4gICAgZXhwKys7XG4gIH1cbiAgaWYgKG5lZykgeCA9IC0geDtcbiAgcmV0dXJuIFswLCB4LCBleHBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfY29tcGFyZSAoeCwgeSkge1xuICBpZiAoeCA9PT0geSkgcmV0dXJuIDA7XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xO1xuICBpZiAoeCA+IHkpIHJldHVybiAxO1xuICBpZiAoeCA9PT0geCkgcmV0dXJuIDE7XG4gIGlmICh5ID09PSB5KSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvcHlzaWduX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvcHlzaWduX2Zsb2F0ICh4LCB5KSB7XG4gIGlmICh5ID09IDApIHkgPSAxIC8geTtcbiAgeCA9IE1hdGguYWJzKHgpO1xuICByZXR1cm4gKHkgPCAwKT8oLXgpOng7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2lnbmJpdF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaWduYml0X2Zsb2F0KHgpIHtcbiAgaWYgKHggPT0gMCkgeCA9IDEgLyB4O1xuICByZXR1cm4gKHggPCAwKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhwbTFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwbTFfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguZXhwbTEoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZXhwMl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHAyX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgucG93KDIsIHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzFwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzFwX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgubG9nMXAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cyX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgubG9nMih4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9oeXBvdF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9oeXBvdF9mbG9hdCAoeCwgeSkgeyByZXR1cm4gTWF0aC5oeXBvdCh4LCB5KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxMF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxMF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5sb2cxMCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9jb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Nvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguY29zaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hY29zaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hY29zaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9zaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3NpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguc2luaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hc2luaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hc2luaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF90YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3RhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgudGFuaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hdGFuaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hdGFuaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9yb3VuZF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9yb3VuZF9mbG9hdCAoeCkge1xuICBpZiAoeCA+PSAwKSB7XG4gICAgdmFyIHkgPSBNYXRoLmZsb29yKHgpO1xuICAgIHJldHVybiAoeCAtIHkgPj0gMC41KT8oeSArIDEpOnlcbiAgfSBlbHNlIHtcbiAgICB2YXIgeSA9IE1hdGguY2VpbCh4KTtcbiAgICByZXR1cm4gKHkgLSB4ID49IDAuNSk/KHkgLSAxKTp5XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNicnQoeCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9IDEuMCAtICgoKChhNSAqIHQgKyBhNCkgKiB0ICsgYTMpICogdCArIGEyKSAqIHQgKyBhMSkgKiB0ICogTWF0aC5leHAoLXggKiB4KTtcblxuICByZXR1cm4gc2lnbiAqIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmY19mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9lcmZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfZXJmY19mbG9hdCh4KSB7XG4gIHJldHVybiAxIC0gY2FtbF9lcmZfZmxvYXQoeCk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5IChhLCBiKSB7XG4gICAgdmFyIGF0ID0gU1BMSVQgKiBhO1xuICAgIHZhciBhaGkgPSBhdCAtIChhdCAtIGEpO1xuICAgIHZhciBhbG8gPSBhIC0gYWhpO1xuICAgIHZhciBidCA9IFNQTElUICogYjtcbiAgICB2YXIgYmhpID0gYnQgLSAoYnQgLSBiKTtcbiAgICB2YXIgYmxvID0gYiAtIGJoaTtcbiAgICB2YXIgcCA9IGEgKiBiO1xuICAgIHZhciBlID0gKChhaGkgKiBiaGkgLSBwKSArIGFoaSAqIGJsbyArIGFsbyAqIGJoaSkgKyBhbG8gKiBibG87XG4gICAgcmV0dXJuIHtcbiAgICAgIHA6IHAsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSAoYSAtIChzIC0gdikpICsgKGIgLSB2KTtcbiAgICByZXR1cm4ge1xuICAgICAgczogcyxcbiAgICAgIGU6IGVcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkanVzdCAoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4ID8geCAqICgxICsgKHggPCAwID8gLTEgOiArMSkgKiAoeSA8IDAgPyAtMSA6ICsxKSAqIEVQU0lMT04pIDogeDtcbiAgfTtcblxuICBpZiAoeCA9PT0gMCB8fCB4ICE9PSB4IHx8IHggPT09ICsxIC8gMCB8fCB4ID09PSAtMSAvIDAgfHxcbiAgICAgIHkgPT09IDAgfHwgeSAhPT0geSB8fCB5ID09PSArMSAvIDAgfHwgeSA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICsgejtcbiAgfVxuICBpZiAoeiA9PT0gMCkge1xuICAgIHJldHVybiB4ICogeTtcbiAgfVxuICBpZiAoeiAhPT0geiB8fCB6ID09PSArMSAvIDAgfHwgeiA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiBNYXRoLmFicyh4cyAqIHlzKSAqIDQgLyBFUFNJTE9OKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cbiAgaWYgKE1hdGguYWJzKHpzKSA8IE1hdGguYWJzKHhzICogeXMpICogRVBTSUxPTiAvIDQgKiBFUFNJTE9OIC8gNCkge1xuICAgIHpzID0gKHogPCAwID8gLTEgOiArMSkgKiBNSU5fVkFMVUU7XG4gIH1cblxuICB2YXIgeHkgPSBtdWx0aXBseSh4cywgeXMpO1xuICB2YXIgcyA9IGFkZCh4eS5wLCB6cyk7XG4gIHZhciB1ID0gYWRkKHh5LmUsIHMuZSk7XG4gIHZhciBpID0gYWRkKHMucywgdS5zKTtcblxuICB2YXIgZiA9IGkucyArIGFkanVzdChpLmUsIHUuZSk7XG4gIGlmIChmID09PSAwKSB7XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICB2YXIgZnMgPSBmICogc2NhbGU7XG4gIGlmIChNYXRoLmFicyhmcykgPiBNSU5fVkFMVUUpIHtcbiAgICByZXR1cm4gZnM7XG4gIH1cblxuICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdhcyBleHRyYSByb3VuZGluZyBmb3IgYSBkZW5vcm1hbGl6ZWQgdmFsdWUuXG4gIHJldHVybiBmcyArIGFkanVzdChmIC0gZnMgLyBzY2FsZSwgaS5lKSAqIHNjYWxlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2Zsb2F0IChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LGRwKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpIDwgMS4wKSB7XG4gICAgICByZXR1cm4geC50b0ZpeGVkKGRwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGUgPSBwYXJzZUludCh4LnRvU3RyaW5nKCkuc3BsaXQoJysnKVsxXSk7XG4gICAgICBpZiAoZSA+IDIwKSB7XG4gICAgICAgIGUgLT0gMjA7XG4gICAgICAgIHggLz0gTWF0aC5wb3coMTAsZSk7XG4gICAgICAgIHggKz0gKG5ldyBBcnJheShlKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIGlmKGRwID4gMCkge1xuICAgICAgICAgIHggPSB4ICsgJy4nICsgKG5ldyBBcnJheShkcCsxKSkuam9pbignMCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgICAgZWxzZSByZXR1cm4geC50b0ZpeGVkKGRwKVxuICAgIH1cbiAgfVxuICB2YXIgcywgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIHZhciBwcmVjID0gKGYucHJlYyA8IDApPzY6Zi5wcmVjO1xuICBpZiAoeCA8IDAgfHwgKHggPT0gMCAmJiAxL3ggPT0gLUluZmluaXR5KSkgeyBmLnNpZ24gPSAtMTsgeCA9IC14OyB9XG4gIGlmIChpc05hTih4KSkgeyBzID0gXCJuYW5cIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZSBpZiAoIWlzRmluaXRlKHgpKSB7IHMgPSBcImluZlwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlXG4gICAgc3dpdGNoIChmLmNvbnYpIHtcbiAgICBjYXNlICdlJzpcbiAgICAgIHZhciBzID0geC50b0V4cG9uZW50aWFsKHByZWMpO1xuICAgICAgLy8gZXhwb25lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IHR3byBkaWdpdHNcbiAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2YnOlxuICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7IGJyZWFrO1xuICAgIGNhc2UgJ2cnOlxuICAgICAgcHJlYyA9IHByZWM/cHJlYzoxO1xuICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICB2YXIgaiA9IHMuaW5kZXhPZignZScpO1xuICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgIGlmIChleHAgPCAtNCB8fCB4ID49IDFlMjEgfHwgeC50b0ZpeGVkKDApLmxlbmd0aCA+IHByZWMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICB2YXIgaSA9IGogLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgaSA9IHMubGVuZ3RoO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgaWYgKGV4cCA8IDApIHsgcCAtPSBleHAgKyAxOyBzID0geC50b0ZpeGVkKHApOyB9XG4gICAgICAgIGVsc2Ugd2hpbGUgKHMgPSB4LnRvRml4ZWQocCksIHMubGVuZ3RoID4gcHJlYyArIDEpIHAtLTtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgICAgdmFyIGkgPSBzLmxlbmd0aCAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpXG4gIHJlcyA9ICtzO1xuICBpZiAoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLFwiXCIpO1xuICByZXMgPSArcztcbiAgaWYgKCgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSB8fCAvXlsrLV0/bmFuJC9pLnRlc3QocykpIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8vaS5leGVjKHMpO1xuICAvLyAgICAgICAgICAxICAgICAgICAyICAgICAgICAgICAgIDMgICAgICAgICAgIDVcbiAgaWYobSl7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCcnKTtcbiAgICB2YXIgbWFudGlzc2EgPSBwYXJzZUludChtWzFdICsgbVsyXSArIG0zLCAxNik7XG4gICAgdmFyIGV4cG9uZW50ID0gKG1bNV18MCkgLSA0Km0zLmxlbmd0aDtcbiAgICByZXMgPSBtYW50aXNzYSAqIE1hdGgucG93KDIsIGV4cG9uZW50KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmKC9eXFwrP2luZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBJbmZpbml0eTtcbiAgaWYoL14taW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIC1JbmZpbml0eTtcbiAgY2FtbF9mYWlsd2l0aChcImZsb2F0X29mX3N0cmluZ1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdXBkYXRlX2R1bW15XG5mdW5jdGlvbiBjYW1sX3VwZGF0ZV9kdW1teSAoeCwgeSkge1xuICBpZiggeS5mdW4gKSB7IHguZnVuID0geS5mdW47IHJldHVybiAwOyB9XG4gIGlmKCB0eXBlb2YgeT09PVwiZnVuY3Rpb25cIiApIHsgeC5mdW4gPSB5OyByZXR1cm4gMDsgfVxuICB2YXIgaSA9IHkubGVuZ3RoOyB3aGlsZSAoaS0tKSB4W2ldID0geVtpXTsgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYWxsb2NfZHVtbXlfaW5maXhcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfYWxsb2NfZHVtbXlfaW5maXggKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZiAoeCkgeyByZXR1cm4gY2FtbF9jYWxsX2dlbihmLmZ1biwgW3hdKSB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX2Jsb2NrIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX2Jsb2NrICh4KSB7IHJldHVybiArKHggaW5zdGFuY2VvZiBBcnJheSk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial90YWdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX29ial90YWcgKHgpIHtcbiAgaWYgKCh4IGluc3RhbmNlb2YgQXJyYXkpICYmIHhbMF0gPT0gKHhbMF0gPj4+IDApKVxuICAgIHJldHVybiB4WzBdXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh4KSlcbiAgICByZXR1cm4gMjUyXG4gIGVsc2UgaWYgKCh4IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8IHR5cGVvZiB4ID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gMjQ3XG4gIGVsc2UgaWYgKHggJiYgeC5jYW1sX2N1c3RvbSlcbiAgICByZXR1cm4gMjU1XG4gIGVsc2VcbiAgICByZXR1cm4gMTAwMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfdGFnIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF90YWcgKHgsIHRhZykgeyB4WzBdID0gdGFnOyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9vYmpfYmxvY2sgY29uc3QgKGNvbnN0LGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfYmxvY2sgKHRhZywgc2l6ZSkge1xuICB2YXIgbyA9IG5ldyBBcnJheShzaXplKzEpO1xuICBvWzBdPXRhZztcbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gc2l6ZTsgaSsrKSBvW2ldID0gMDtcbiAgcmV0dXJuIG87XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3dpdGhfdGFnXG5mdW5jdGlvbiBjYW1sX29ial93aXRoX3RhZyh0YWcseCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgYVswXSA9IHRhZztcbiAgZm9yKHZhciBpID0gMTsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfZHVwIG11dGFibGUgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX29ial9kdXAgKHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUgKHgsIHMpIHtcbiAgaWYgKHM8PTAgfHwgcyArIDEgPiB4Lmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiT2JqLnRydW5jYXRlXCIpO1xuICBpZiAoeC5sZW5ndGggIT0gcyArIDEpIHgubGVuZ3RoID0gcyArIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9tYWtlX2ZvcndhcmRcbmZ1bmN0aW9uIGNhbWxfb2JqX21ha2VfZm9yd2FyZCAoYix2KSB7XG4gIGJbMF09MjUwO1xuICBiWzFdPXY7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2NvbXBhcmVfYW5kX3N3YXBcbmZ1bmN0aW9uIGNhbWxfb2JqX2NvbXBhcmVfYW5kX3N3YXAoeCxpLG9sZCxuKXtcbiAgaWYoeFtpKzFdID09IG9sZCkge1xuICAgIHhbaSsxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfaXNfc2hhcmVkXG5mdW5jdGlvbiBjYW1sX29ial9pc19zaGFyZWQoeCl7XG4gIHJldHVybiAxXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkICh2KSB7IHJldHVybiBbMjUwLCB2XTsgfVxuXG4vLy8vLy8vLy8vLy8vIENhbWxpbnRlcm5hbE9PXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIGNvbnN0XG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAob2ZzID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycmF5IGlzIG5vdCBzcGFyc2VcbiAgICBmb3IgKHZhciBpID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoOyBpIDwgY2FjaGVpZDsgaSsrKVxuICAgICAgY2FtbF9tZXRob2RfY2FjaGVbaV0gPSAwO1xuICB9IGVsc2UgaWYgKG1ldGhzW29mc10gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgLSAxXTtcbiAgfVxuICB2YXIgbGkgPSAzLCBoaSA9IG1ldGhzWzFdICogMiArIDEsIG1pO1xuICB3aGlsZSAobGkgPCBoaSkge1xuICAgIG1pID0gKChsaStoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSsxXSkgaGkgPSBtaS0yO1xuICAgIGVsc2UgbGkgPSBtaTtcbiAgfVxuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IGxpICsgMTtcbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gKHRhZyA9PSBtZXRoc1tsaSsxXSA/IG1ldGhzW2xpXSA6IDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29vX2xhc3RfaWRcbnZhciBjYW1sX29vX2xhc3RfaWQgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9vb19pZFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX3NldF9vb19pZCAoYikge1xuICBiWzJdPWNhbWxfb29fbGFzdF9pZCsrO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mcmVzaF9vb19pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX2ZyZXNoX29vX2lkKCkge1xuICByZXR1cm4gY2FtbF9vb19sYXN0X2lkKys7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfcmF3X2ZpZWxkKG8saSkgeyByZXR1cm4gb1tpKzFdIH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3Jhd19maWVsZChvLGksdikgeyByZXR1cm4gb1tpKzFdID0gdiB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKG8pIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfYWRkX29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9vYmpfYWRkX29mZnNldCh2LG9mZnNldCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiT2JqLmFkZF9vZmZzZXQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdXBkYXRlX3RhZyhiLG8sbikge1xuICAgIGlmKGJbMF09PW8pIHsgYlswXSA9IG47IHJldHVybiAxIH1cbiAgICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmdcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZyhvKSB7XG4gIGlmICgobyBpbnN0YW5jZW9mIEFycmF5KSAmJiBvWzBdID09IChvWzBdID4+PiAwKSAmJlxuICAgICAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLCAyNDYsIDI0NCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcndhcmRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbiAgZnVuY3Rpb24gY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkKG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLDI0NCwyNTApO1xuICByZXR1cm4gMDsgLy8gdW5pdFxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9yZXNldF90b19sYXp5XG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eShvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywyNDQsMjQ2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9yZWFkX3Jlc3VsdFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfcmVhZF9yZXN1bHQobykge1xuICByZXR1cm4gKGNhbWxfb2JqX3RhZyhvKSA9PSAyNTApP29bMV06bztcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPCA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0KSB7XG4gIHJldHVybiAodCA9PSAyNDUpID8gMSA6IDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZmZzZXRcbnZhciBjYW1sX2ludDY0X29mZnNldCA9IE1hdGgucG93KDIsIC0yNCk7XG5cbi8vUHJvdmlkZXM6IE1sSW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBNbEludDY0IChsbyxtaSxoaSkge1xuICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgdGhpcy5taSA9IG1pICYgMHhmZmZmZmY7XG4gIHRoaXMuaGkgPSBoaSAmIDB4ZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gXCJfalwiXG5NbEludDY0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyx0aGlzLm1pLHRoaXMuaGkpO1xufVxuXG5NbEludDY0LnByb3RvdHlwZS51Y29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIGlmICh0aGlzLmhpID4geC5oaSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmhpIDwgeC5oaSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubG8gPiB4LmxvKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBoaSA9IHRoaXMuaGkgPDwgMTY7XG4gIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICBpZiAoaGkgPiB4aGkpIHJldHVybiAxO1xuICBpZiAoaGkgPCB4aGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxvID0gLSB0aGlzLmxvO1xuICB2YXIgbWkgPSAtIHRoaXMubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSAtIHRoaXMuaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSArIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpICsgeC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gLSB4LmxvO1xuICB2YXIgbWkgPSB0aGlzLm1pIC0geC5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyAqIHgubG87XG4gIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gIHZhciBoaSA9ICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMuaGkgKiB4LmxvICsgdGhpcy5taSAqIHgubWkgKyB0aGlzLmxvICogeC5oaTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMubG98dGhpcy5taXx0aGlzLmhpKSA9PSAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy5oaSA8PCAxNikgPCAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gJiB4LmxvLCB0aGlzLm1pICYgeC5taSwgdGhpcy5oaSAmIHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb3x4LmxvLCB0aGlzLm1pfHgubWksIHRoaXMuaGl8eC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb154LmxvLCB0aGlzLm1pXngubWksIHRoaXMuaGleeC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9sZWZ0ID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMubG8gPDwgcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IHMpIHwgKHRoaXMubG8gPj4gKDI0IC0gcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaGkgPDwgcykgfCAodGhpcy5taSA+PiAoMjQgLSBzKSkpO1xuICB9XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IChzIC0gMjQpKSB8ICh0aGlzLmxvID4+ICg0OCAtIHMpKSk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCgwLCAwLCB0aGlzLmxvIDw8IChzIC0gNDgpKVxufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHRfdW5zaWduZWQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8ICh0aGlzLmhpIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IHMpKTtcbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubWkgPj4gKHMgLSAyNCkpIHwgKHRoaXMuaGkgPDwgKDQ4IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPj4gKHMgLSAyNCkpLFxuICAgICAgMCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAodGhpcy5oaSA+PiAocyAtIDQ4KSwgMCwgMCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9yaWdodCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICB2YXIgaCA9ICh0aGlzLmhpIDw8IDE2KSA+PiAxNjtcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICgodGhpcy5oaSA8PCAxNikgPj4gcykgPj4+IDE2KTtcbiAgdmFyIHNpZ24gPSAodGhpcy5oaSA8PCAxNikgPj4gMzE7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSA+PiAxNixcbiAgICAgIHNpZ24gJiAweGZmZmYpO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDMyKSwgc2lnbiwgc2lnbik7XG59XG5NbEludDY0LnByb3RvdHlwZS5sc2wxID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPDwgMSkgfCAodGhpcy5sbyA+PiAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubG8gPSAodGhpcy5sbyA8PCAxKSAmIDB4ZmZmZmZmO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNyMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPj4+IDEpIHwgKHRoaXMuaGkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gdGhpcy5oaSA+Pj4gMTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnVkaXZtb2QgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgb2Zmc2V0ID0gMDtcbiAgdmFyIG1vZHVsdXMgPSB0aGlzLmNvcHkoKTtcbiAgdmFyIGRpdmlzb3IgPSB4LmNvcHkoKTtcbiAgdmFyIHF1b3RpZW50ID0gbmV3IE1sSW50NjQoMCwwLDApO1xuICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICBvZmZzZXQrKztcbiAgICBkaXZpc29yLmxzbDEoKTtcbiAgfVxuICB3aGlsZSAob2Zmc2V0ID49IDApIHtcbiAgICBvZmZzZXQgLS07XG4gICAgcXVvdGllbnQubHNsMSgpO1xuICAgIGlmIChtb2R1bHVzLnVjb21wYXJlKGRpdmlzb3IpID49IDApIHtcbiAgICAgIHF1b3RpZW50LmxvICsrO1xuICAgICAgbW9kdWx1cyA9IG1vZHVsdXMuc3ViKGRpdmlzb3IpO1xuICAgIH1cbiAgICBkaXZpc29yLmxzcjEoKTtcbiAgfVxuICByZXR1cm4geyBxdW90aWVudCA6IHF1b3RpZW50LCBtb2R1bHVzIDogbW9kdWx1cyB9O1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gKHkpXG57XG4gIHZhciB4ID0gdGhpcztcbiAgaWYgKHkuaXNaZXJvKCkpIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHZhciBzaWduID0geC5oaSBeIHkuaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgcSA9IHgudWRpdm1vZCh5KS5xdW90aWVudDtcbiAgaWYgKHNpZ24gJiAweDgwMDApIHEgPSBxLm5lZygpO1xuICByZXR1cm4gcTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm1vZCA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgciA9IHgudWRpdm1vZCh5KS5tb2R1bHVzO1xuICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gIHJldHVybiByO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxvIHwgKHRoaXMubWkgPDwgMjQpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9GbG9hdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgodGhpcy5oaSA8PCAxNikgKiBNYXRoLnBvdygyLCAzMikgKyB0aGlzLm1pICogTWF0aC5wb3coMiwgMjQpKSArIHRoaXMubG87XG59XG5NbEludDY0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW3RoaXMuaGkgPj4gOCxcbiAgICAgICAgICB0aGlzLmhpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pID4+IDE2LFxuICAgICAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvID4+IDE2LFxuICAgICAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvICYgMHhmZl07XG59XG5NbEludDY0LnByb3RvdHlwZS5sbzMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICgodGhpcy5taSAmIDB4ZmYpIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmhpMzIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMubWkgPj4+IDgpICYgMHhmZmZmKSB8ICh0aGlzLmhpIDw8IDE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgseSkgeyByZXR1cm4geC51Y29tcGFyZSh5KSA8IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NvbXBhcmUoeCx5LCB0b3RhbCkgeyByZXR1cm4geC5jb21wYXJlKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnICh4KSB7IHJldHVybiB4Lm5lZygpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hZGQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYWRkICh4LCB5KSB7IHJldHVybiB4LmFkZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc3ViIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3N1YiAoeCwgeSkgeyByZXR1cm4geC5zdWIoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgseSkgeyByZXR1cm4geC5tdWwoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7IHJldHVybiAreC5pc1plcm8oKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpIHsgcmV0dXJuICt4LmlzTmVnKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hbmQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYW5kICh4LCB5KSB7IHJldHVybiB4LmFuZCh5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29yICh4LCB5KSB7IHJldHVybiB4Lm9yKHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfeG9yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3hvciAoeCwgeSkgeyByZXR1cm4geC54b3IoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9sZWZ0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYgKHgsIHkpIHsgcmV0dXJuIHguZGl2KHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tb2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbW9kICh4LCB5KSB7IHJldHVybiB4Lm1vZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfaW50MzIgKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19pbnQzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMiAoeCkgeyByZXR1cm4geC50b0ludCgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19mbG9hdCAoeCkgeyByZXR1cm4geC50b0Zsb2F0ICgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mb3JtYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF90b19pbnQzMlxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc196ZXJvLCBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZm9ybWF0IChmbXQsIHgpIHtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoZi5zaWduZWRjb252ICYmIGNhbWxfaW50NjRfaXNfbmVnYXRpdmUoeCkpIHtcbiAgICBmLnNpZ24gPSAtMTsgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghIGNhbWxfaW50NjRfaXNfemVybyh4KSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gYnVmZmVyLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIGJ1ZmZlciA9IGNhbWxfc3RyX3JlcGVhdCAobiwgJzAnKSArIGJ1ZmZlcjtcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBidWZmZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3BhcnNlX2RpZ2l0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3VsdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfbXVsLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2Zfc3RyaW5nKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGJhc2U2NCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoYmFzZSk7XG4gIHZhciB0aHJlc2hvbGQgPVxuICAgICAgbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmZiwgMHhmZmZmKS51ZGl2bW9kKGJhc2U2NCkucXVvdGllbnQ7XG4gIHZhciBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gIGZvciAoOzspIHtcbiAgICBpKys7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT0gOTUpIGNvbnRpbnVlO1xuICAgIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICAgIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGJyZWFrO1xuICAgIC8qIERldGVjdCBvdmVyZmxvdyBpbiBtdWx0aXBsaWNhdGlvbiBiYXNlICogcmVzICovXG4gICAgaWYgKGNhbWxfaW50NjRfdWx0KHRocmVzaG9sZCwgcmVzKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gICAgZCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gICAgcmVzID0gY2FtbF9pbnQ2NF9hZGQoY2FtbF9pbnQ2NF9tdWwoYmFzZTY0LCByZXMpLCBkKTtcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gYWRkaXRpb24gKGJhc2UgKiByZXMpICsgZCAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdChyZXMsIGQpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoYmFzZSA9PSAxMCAmJiBjYW1sX2ludDY0X3VsdChuZXcgTWxJbnQ2NCgwLCAwLCAweDgwMDApLCByZXMpKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobG8sIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICBsbyAmIDB4ZmZmZmZmLFxuICAgICgobG8gPj4+IDI0KSAmIDB4ZmYpIHwgKChoaSAmIDB4ZmZmZikgPDwgOCksXG4gICAgKGhpID4+PiAxNikgJiAweGZmZmYpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9sbzMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2xvMzIodil7IHJldHVybiB2LmxvMzIoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGkzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oaTMyKHYpeyByZXR1cm4gdi5oaTMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGFbN10gPDwgMCB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVs0XSA8PCAwIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgICAgICAgICAgICAgICAgICBhWzFdIDw8IDAgfCAoYVswXSA8PCA4KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2J5dGVzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2J5dGVzKHgpIHsgcmV0dXJuIHgudG9BcnJheSgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9oYXNoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2hhc2godil7XG4gIHJldHVybiAodi5sbzMyKCkpIF4gKHYuaGkzMigpKVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmQsIEFuZHkgUmF5XG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG4vL1xuLy8gQmlnYXJyYXkuXG4vL1xuLy8gLSBhbGwgYmlnYXJyYXkgdHlwZXMgaW5jbHVkaW5nIEludDY0IGFuZCBDb21wbGV4LlxuLy8gLSBmb3J0cmFuICsgYyBsYXlvdXRzXG4vLyAtIHN1Yi9zbGljZS9yZXNoYXBlXG4vLyAtIHJldGFpbiBmYXN0IHBhdGggZm9yIDFkIGFycmF5IGFjY2Vzc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2luaXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYmFfaW5pdCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSB7XG4gIHZhciBuX2RpbXMgPSBkaW1zLmxlbmd0aDtcbiAgdmFyIHNpemUgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5fZGltczsgaSsrKSB7XG4gICAgaWYgKGRpbXNbaV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgc2l6ZSA9IHNpemUgKiBkaW1zW2ldO1xuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpe1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgNzogY2FzZSAxMDogY2FzZSAxMTogcmV0dXJuIDI7XG4gIGRlZmF1bHQ6IHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSl7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMDogIHZpZXcgPSBGbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDE6ICB2aWV3ID0gRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAyOiAgdmlldyA9IEludDhBcnJheTsgYnJlYWs7XG4gIGNhc2UgMzogIHZpZXcgPSBVaW50OEFycmF5OyBicmVhaztcbiAgY2FzZSA0OiAgdmlldyA9IEludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDU6ICB2aWV3ID0gVWludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDY6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgNzogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA4OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDk6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTA6IHZpZXcgPSBGbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDExOiB2aWV3ID0gRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAxMjogdmlldyA9IFVpbnQ4QXJyYXk7IGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPCA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycmF5XCJcblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA+PSA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycjAyXCJcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG5mdW5jdGlvbiBNbF9CaWdhcnJheSAoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcblxuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IGNhbWxfYmFfY3VzdG9tX25hbWU7XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHZhciBvZnMgPSAwO1xuICBpZih0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgaWYgKCEgKGFyZyBpbnN0YW5jZW9mIEFycmF5KSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiYmlnYXJyYXkuanM6IGludmFsaWQgb2Zmc2V0XCIpO1xuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBhcmcubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgaWYodGhpcy5sYXlvdXQgPT0gMCAvKiBjX2xheW91dCAqLykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMCB8fCBhcmdbaV0gPj0gdGhpcy5kaW1zW2ldKVxuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIGFyZ1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuZGltcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGFyZ1tpXSA8IDEgfHwgYXJnW2ldID4gdGhpcy5kaW1zW2ldKXtcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgfVxuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyAoYXJnW2ldIC0gMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvZnM7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgbCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGggPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLGgpO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIHIgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gWzI1NCwgciwgaV07XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdXG4gIH1cbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IHZbMV07XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IHZbMl07XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwXG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGEgPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgaWYoYSA9PSBiKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGEgOiBiO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciBpbSA9IHZbMV07XG4gICAgdmFyIHJlID0gdlsyXTtcbiAgICBpZihpbSA9PSByZSl7XG4gICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gaW0gOiByZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhLmZpbGwodik7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIChiLCB0b3RhbCkge1xuICBpZiAodGhpcy5sYXlvdXQgIT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9IGIua2luZCkge1xuICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICB2YXIgazIgPSAgICBiLmtpbmQgfCAoYi5sYXlvdXQgPDwgOCk7XG4gICAgcmV0dXJuIGsyIC0gazE7XG4gIH1cbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYi5kaW1zLmxlbmd0aCkge1xuICAgIHJldHVybiBiLmRpbXMubGVuZ3RoIC0gdGhpcy5kaW1zLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAodGhpcy5kaW1zW2ldICE9IGIuZGltc1tpXSlcbiAgICAgIHJldHVybiAodGhpcy5kaW1zW2ldIDwgYi5kaW1zW2ldKSA/IC0xIDogMTtcbiAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gIGNhc2UgMTA6XG4gIGNhc2UgMTE6XG4gICAgLy8gRmxvYXRzXG4gICAgdmFyIHgsIHk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHggPSB0aGlzLmRhdGFbaV07XG4gICAgICB5ID0gYi5kYXRhW2ldO1xuICAgICAgaWYgKHggPCB5KVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoeCA+IHkpXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKHggIT0geSkge1xuICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICBpZiAoeCA9PSB4KSByZXR1cm4gMTtcbiAgICAgICAgaWYgKHkgPT0geSkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKz0yKSB7XG4gICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA8IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPiBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPCAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApID4gKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAyOlxuICBjYXNlIDM6XG4gIGNhc2UgNDpcbiAgY2FzZSA1OlxuICBjYXNlIDY6XG4gIGNhc2UgODpcbiAgY2FzZSA5OlxuICBjYXNlIDEyOlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldIDwgYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5X2NfMV8xXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgICA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlID0gbmV3IE1sX0JpZ2FycmF5KClcbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIGlmKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpe1xuICAgIGlmKChhcmcgaW5zdGFuY2VvZiBBcnJheSkgJiYgYXJnLmxlbmd0aCA9PSAxKVxuICAgICAgYXJnID0gYXJnWzBdO1xuICAgIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiTWxfQmlnYXJyYXlfY18xXzEub2Zmc2V0XCIpO1xuICB9XG4gIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pXG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJnO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICByZXR1cm4gdGhpcy5kYXRhW29mc107XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgdGhpcy5kYXRhW29mc10gPSB2O1xuICByZXR1cm4gMFxufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHRoaXMuZGF0YS5maWxsKHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLGIsdG90YWwpe1xuICByZXR1cm4gYS5jb21wYXJlKGIsdG90YWwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIE1sX0JpZ2FycmF5X2NfMV8xLCBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpe1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmKGNhbWxfYmFfZ2V0X3NpemUoZGltcykgKiBzaXplX3Blcl9lbGVtZW50ICE9IGRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwibGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggZGltc1wiKTtcbiAgfVxuICBpZihsYXlvdXQgPT0gMCAmJiAvLyBjX2xheW91dFxuICAgICBkaW1zLmxlbmd0aCA9PSAxICYmIC8vIEFycmF5MVxuICAgICBzaXplX3Blcl9lbGVtZW50ID09IDEpIC8vIDEtdG8tMSBtYXBwaW5nXG4gICAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5KGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG5cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGUoa2luZCwgbGF5b3V0LCBkaW1zX21sKSB7XG4gIHZhciBkaW1zID0gY2FtbF9qc19mcm9tX2FycmF5KGRpbXNfbWwpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBjYW1sX2JhX2dldF9zaXplKGRpbXMpKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NoYW5nZV9sYXlvdXRcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9jaGFuZ2VfbGF5b3V0KGJhLCBsYXlvdXQpIHtcbiAgaWYoYmEubGF5b3V0ID09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2JhLmRpbXMubGVuZ3RoIC0gaSAtIDFdO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGxheW91dCwgbmV3X2RpbXMsIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZChiYSkge1xuICByZXR1cm4gYmEua2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9sYXlvdXRcbmZ1bmN0aW9uIGNhbWxfYmFfbGF5b3V0KGJhKSB7XG4gIHJldHVybiBiYS5sYXlvdXQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbnVtX2RpbXNcbmZ1bmN0aW9uIGNhbWxfYmFfbnVtX2RpbXMoYmEpIHtcbiAgcmV0dXJuIGJhLmRpbXMubGVuZ3RoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2RpbShiYSwgaSkge1xuICBpZiAoaSA8IDAgfHwgaSA+PSBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5kaW1cIik7XG4gIHJldHVybiBiYS5kaW1zW2ldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMShiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8yXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMihiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8zXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMyhiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X2dlbmVyaWMoYmEsIGkpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpO1xuICByZXR1cm4gYmEuZ2V0KG9mcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MTYoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiAoYjEgfCAoYjIgPDwgOCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDMyKGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICByZXR1cm4gKCAoYjEgPDwgMCkgIHxcbiAgICAgICAgICAgKGIyIDw8IDgpICB8XG4gICAgICAgICAgIChiMyA8PCAxNikgfFxuICAgICAgICAgICAoYjQgPDwgMjQpICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0NjQoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHZhciBiNSA9IGJhLmdldChvZnMrNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMrNSk7XG4gIHZhciBiNyA9IGJhLmdldChvZnMrNik7XG4gIHZhciBiOCA9IGJhLmdldChvZnMrNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCxiNyxiNixiNSxiNCxiMyxiMixiMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8xKGJhLCBpMCkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChpMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8yXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8yKGJhLCBpMCwgaTEpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8zXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8zKGJhLCBpMCwgaTEsIGkyKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX3NldF9nZW5lcmljKGJhLCBpLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MTYoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDMyKGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMiwgKHYgPj4+IDE2KSAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzMsICh2ID4+PiAyNCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0NjQoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciB2ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcytpLCB2WzctaV0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8xXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8xKGJhLCBpMCwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGkwKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMV0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzMoYmEsIGkwLCBpMSwgaTIsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9IHNyYy5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZHN0LmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKGRzdC5kaW1zW2ldICE9IHNyYy5kaW1zW2ldKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBkc3QuZGF0YS5zZXQoc3JjLmRhdGEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zdWJcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3N1YihiYSwgb2ZzLCBsZW4pIHtcbiAgdmFyIGNoYW5nZWRfZGltO1xuICB2YXIgbXVsID0gMTtcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAoYmEuZGltcy5sZW5ndGggLSAxKTsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IGJhLmRpbXMubGVuZ3RoIC0gMTtcbiAgICBvZnMgPSBvZnMgLSAxO1xuICB9XG4gIGlmIChvZnMgPCAwIHx8IGxlbiA8IDAgfHwgKG9mcyArIGxlbikgPiBiYS5kaW1zW2NoYW5nZWRfZGltXSl7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc3ViOiBiYWQgc3ViLWFycmF5XCIpO1xuICB9XG4gIHZhciBuZXdfZGltcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2ldO1xuICBuZXdfZGltc1tjaGFuZ2VkX2RpbV0gPSBsZW47XG4gIG11bCAqPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIG11bCwgKG9mcyArIGxlbikgKiBtdWwpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zbGljZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zbGljZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbnVtX2luZHMgPSB2aW5kLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gW107XG4gIHZhciBzdWJfZGltcyA9IFtdO1xuICB2YXIgb2ZzO1xuXG4gIGlmIChudW1faW5kcyA+IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnNsaWNlOiB0b28gbWFueSBpbmRpY2VzXCIpO1xuXG4gIC8vIENvbXB1dGUgb2Zmc2V0IGFuZCBjaGVjayBib3VuZHNcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSB2aW5kW2ldO1xuICAgIGZvciAoOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMDtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UobnVtX2luZHMpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2JhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMgKyBpXSA9IHZpbmRbaV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBzaXplX3Blcl9lbGVtZW50LCAob2ZzICsgc2l6ZSkgKiBzaXplX3Blcl9lbGVtZW50KTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIHN1Yl9kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfcmVzaGFwZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuZnVuY3Rpb24gY2FtbF9iYV9yZXNoYXBlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBuZXdfZGltID0gW107XG4gIHZhciBudW1fZGltcyA9IHZpbmQubGVuZ3RoO1xuXG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICB9XG4gIHZhciBudW1fZWx0cyA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgIG5ld19kaW1baV0gPSB2aW5kW2ldO1xuICAgIGlmIChuZXdfZGltW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBudW1fZWx0cyA9IG51bV9lbHRzICogbmV3X2RpbVtpXTtcbiAgfVxuXG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgLy8gQ2hlY2sgdGhhdCBzaXplcyBhZ3JlZVxuICBpZiAobnVtX2VsdHMgIT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgKGJhLmtpbmQgfCAoYmEubGF5b3V0IDw8IDgpKSk7XG4gIGlmKGJhLmNhbWxfY3VzdG9tID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKGJhLmRpbXNbaV0gPCAweGZmZmYpXG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGltc1tpXSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCAweGZmZmYpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIDApO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB3cml0ZXIud3JpdGUoMzIsYmEuZGltc1tpXSlcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgd3JpdGVyLndyaXRlKDgsMCk7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoYmEuZ2V0KGkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGogPSBiYS5nZXQoaSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzJdKSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGNvbXBsZXggPSBiYS5nZXQoaSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMV0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzJdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgbmFtZSl7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmXG4gIHZhciBsYXlvdXQgPSAodGFnID4+IDgpICYgMTtcbiAgdmFyIGRpbXMgPSBbXVxuICBpZihuYW1lID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZV9kaW0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgaWYoc2l6ZV9kaW0gPT0gMHhmZmZmKXtcbiAgICAgICAgdmFyIHNpemVfZGltX2hpID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgdmFyIHNpemVfZGltX2xvID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgaWYoc2l6ZV9kaW1faGkgIT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSBkaW1zLnB1c2gocmVhZGVyLnJlYWQzMnUoKSk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSk7XG4gIHZhciBiYSA9IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHZhciBzaXh0eSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICBpZihzaXh0eSkgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjYW5ub3QgcmVhZCBiaWdhcnJheSB3aXRoIDY0LWJpdCBPQ2FtbCBpbnRzXCIpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW50NjQgPSBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xuICAgICAgYmEuc2V0KGksaW50NjQpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVha1xuICB9XG4gIHN6WzBdID0gKDQgKyBudW1fZGltcykgKiA0O1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vRGVwcmVjYXRlZFxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfZnJvbVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2Zyb20oZGF0YTEsIGRhdGEyLCBqc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKXtcbiAgaWYoZGF0YTIgfHwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSA9PSAyKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiKTtcbiAgfVxuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YTEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2hhc2ggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX2hhc2goYmEpe1xuICB2YXIgbnVtX2VsdHMgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICB2YXIgaCA9IDA7XG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMjU2KSBudW1fZWx0cyA9IDI1NjtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgNCA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9NCl7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCA4KSB8IChiYS5kYXRhW2krMl0gPDwgMTYpIHwgKGJhLmRhdGFbaSszXSA8PCAyNCk7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgdyA9IDA7XG4gICAgc3dpdGNoIChudW1fZWx0cyAmIDMpIHtcbiAgICBjYXNlIDM6IHcgID0gYmEuZGF0YVtpKzJdIDw8IDE2OyAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMjogdyB8PSBiYS5kYXRhW2krMV0gPDwgODsgICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAxOiB3IHw9IGJhLmRhdGFbaSswXTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDIgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTIpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgMTYpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPSAwKVxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIG51bV9lbHRzICo9IDJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYmEpe1xuICByZXR1cm4gYmEuZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGtpbmQ7XG4gIGlmICAgICAgKHRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSBraW5kID0gMDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpIGtpbmQgPSAxO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDhBcnJheSkga2luZCA9IDI7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDhBcnJheSkga2luZCA9IDM7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDE2QXJyYXkpIGtpbmQgPSA0O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSBraW5kID0gNTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQzMkFycmF5KSBraW5kID0gNjtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5OiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICByZXR1cm4ga2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZCA9IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSk7XG4gIHZhciB0YSA9XG4gICAgICAvKiBOZWVkZWQgdG8gYXZvaWQgdW5zaWduZWQgc2V0dGVycyBvdmVyZmxvd2luZ1xuICAgICAgICAgdGhlIHJhbmdlIG9mIE9DYW1sIFtpbnQzMl0gdmFsdWVzLiAqL1xuICAgICAgdGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSA/XG4gICAgICBuZXcgSW50MzJBcnJheSh0YS5idWZmZXIgLHRhLmJ5dGVPZmZzZXQsIHRhLmxlbmd0aCkgOiB0YTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCAwLCBbdGEubGVuZ3RoXSwgdGEpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT0gXCIlZFwiKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiK2kpO1xuICB2YXIgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIGlmIChpIDwgMCkgeyBpZiAoZi5zaWduZWRjb252KSB7IGYuc2lnbiA9IC0xOyBpID0gLWk7IH0gZWxzZSBpID4+Pj0gMDsgfVxuICB2YXIgcyA9IGkudG9TdHJpbmcoZi5iYXNlKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSAnICc7XG4gICAgdmFyIG4gPSBmLnByZWMgLSBzLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIHMgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBzO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Vcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKSB7XG4gIHZhciBpID0gMCwgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLCBiYXNlID0gMTAsIHNpZ24gPSAxO1xuICBpZiAobGVuID4gMCkge1xuICAgIHN3aXRjaCAoY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpKSB7XG4gICAgY2FzZSA0NTogaSsrOyBzaWduID0gLTE7IGJyZWFrO1xuICAgIGNhc2UgNDM6IGkrKzsgc2lnbiA9IDE7IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PSA0OClcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpKSB7XG4gICAgY2FzZSAxMjA6IGNhc2UgODg6IGJhc2UgPSAxNjsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlIDExMTogY2FzZSA3OTogYmFzZSA9ICA4OyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgIDk4OiBjYXNlIDY2OiBiYXNlID0gIDI7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTc6IGNhc2UgODU6IGkgKz0gMjsgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gW2ksIHNpZ24sIGJhc2VdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2RpZ2l0XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2RpZ2l0KGMpIHtcbiAgaWYgKGMgPj0gNDggJiYgYyA8PSA1NykgIHJldHVybiBjIC0gNDg7XG4gIGlmIChjID49IDY1ICYmIGMgPD0gOTApICByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyAocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocyk7XG4gIHZhciBpID0gclswXSwgc2lnbiA9IHJbMV0sIGJhc2UgPSByWzJdO1xuICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICB2YXIgdGhyZXNob2xkID0gLTEgPj4+IDA7XG4gIHZhciBjID0gKGkgPCBsZW4pP2NhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk6MDtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGQ7XG4gIGZvciAoaSsrO2k8bGVuO2krKykge1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAvLyBGb3IgYmFzZSBkaWZmZXJlbnQgZnJvbSAxMCwgd2UgZXhwZWN0IGFuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uLFxuICAvLyBoZW5jZSBhbnkgdmFsdWUgb2YgJ3JlcycgKGxlc3MgdGhhbiAndGhyZXNob2xkJykgaXMgYWNjZXB0YWJsZS5cbiAgLy8gQnV0IHdlIGhhdmUgdG8gY29udmVydCB0aGUgcmVzdWx0IGJhY2sgdG8gYSBzaWduZWQgaW50ZWdlci5cbiAgcmVzID0gc2lnbiAqIHJlcztcbiAgaWYgKChiYXNlID09IDEwKSAmJiAoKHJlcyB8IDApICE9IHJlcykpXG4gICAgLyogU2lnbmVkIHJlcHJlc2VudGF0aW9uIGV4cGVjdGVkLCBhbGxvdyAtMl4obmJpdHMtMSkgdG8gMl4obmJpdHMtMSkgLSAxICovXG4gICAgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX211bCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tdWwoYSxiKXtcbiAgcmV0dXJuIE1hdGguaW11bChhLGIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2RpdlxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9kaXYoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiAoeC95KXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9tb2QoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiB4JXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNlxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoKCh4ICYgMHgwMEZGKSA8PCA4KSB8XG4gICAgICAgICAgICgoeCAmIDB4RkYwMCkgPj4gOCkpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYnN3YXBcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYnN3YXAoeCkge1xuICByZXR1cm4gKCgoeCAmIDB4MDAwMDAwRkYpIDw8IDI0KSB8XG4gICAgICAgICAgKCh4ICYgMHgwMDAwRkYwMCkgPDwgOCkgfFxuICAgICAgICAgICgoeCAmIDB4MDBGRjAwMDApID4+PiA4KSB8XG4gICAgICAgICAgKCh4ICYgMHhGRjAwMDAwMCkgPj4+IDI0KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX3VuaXZfcGFyYW0gbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1ZlcnNpb246IDwgNC4xMlxuZnVuY3Rpb24gY2FtbF9oYXNoX3VuaXZfcGFyYW0gKGNvdW50LCBsaW1pdCwgb2JqKSB7XG4gIHZhciBoYXNoX2FjY3UgPSAwO1xuICBmdW5jdGlvbiBoYXNoX2F1eCAob2JqKSB7XG4gICAgbGltaXQgLS07XG4gICAgaWYgKGNvdW50IDwgMCB8fCBsaW1pdCA8IDApIHJldHVybjtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkgJiYgb2JqWzBdID09PSAob2JqWzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKG9ialswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqWzJdKSB8IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTA6XG4gICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgbGltaXQrKzsgaGFzaF9hdXgob2JqKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgb2JqWzBdKSB8IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSBvYmoubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgaGFzaF9hdXggKG9ialtpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKG9iaikpIHtcbiAgICAgIGNvdW50IC0tO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQob2JqKTtcbiAgICAgIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZvciAodmFyIGIgPSBjb250ZW50LCBsID0gYi5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgICAgfSBlbHNlIHsgLyogQVJSQVkgKi9cbiAgICAgICAgZm9yICh2YXIgYSA9IGNvbnRlbnQsIGwgPSBhLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYVtpXSkgfCAwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcob2JqKSkge1xuICAgICAgdmFyIGpzYnl0ZXMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG9iaik7XG4gICAgICBmb3IgKHZhciBiID0ganNieXRlcywgbCA9IGpzYnl0ZXMubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBmb3IgKHZhciBiID0gb2JqLCBsID0gb2JqLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSAob2JqfDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBjb3VudCAtLTtcbiAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9iaikgfCAwO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSArb2JqKSB7XG4gICAgICAvLyBGbG9hdFxuICAgICAgY291bnQtLTtcbiAgICAgIHZhciBwID0gY2FtbF9pbnQ2NF90b19ieXRlcyAoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IChvYmopKTtcbiAgICAgIGZvciAodmFyIGkgPSA3OyBpID49IDA7IGktLSkgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgcFtpXSkgfCAwO1xuICAgIH0gZWxzZSBpZihvYmogJiYgb2JqLmNhbWxfY3VzdG9tKSB7XG4gICAgICBpZihjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXS5oYXNoKSB7XG4gICAgICAgIHZhciBoID0gY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaChvYmopIHwgMDtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgaCkgfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBoYXNoX2F1eCAob2JqKTtcbiAgcmV0dXJuIGhhc2hfYWNjdSAmIDB4M0ZGRkZGRkY7XG59XG5cbi8vZnVuY3Rpb24gUk9UTDMyKHgsbikgeyByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4+ICgzMi1uKSkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50KGgsZCkge1xuICBkID0gY2FtbF9tdWwoZCwgMHhjYzllMmQ1MXwwKTtcbiAgZCA9ICgoZCA8PCAxNSkgfCAoZCA+Pj4gKDMyLTE1KSkpOyAvLyBST1RMMzIoZCwgMTUpO1xuICBkID0gY2FtbF9tdWwoZCwgMHgxYjg3MzU5Myk7XG4gIGggXj0gZDtcbiAgaCA9ICgoaCA8PCAxMykgfCAoaCA+Pj4gKDMyLTEzKSkpOyAgIC8vUk9UTDMyKGgsIDEzKTtcbiAgcmV0dXJuICgoKGggKyAoaCA8PCAyKSl8MCkgKyAoMHhlNjU0NmI2NHwwKSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmluYWwoaCkge1xuICBoIF49IGggPj4+IDE2O1xuICBoID0gY2FtbF9tdWwgKGgsIDB4ODVlYmNhNmJ8MCk7XG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPSBjYW1sX211bCAoaCwgMHhjMmIyYWUzNXwwKTtcbiAgaCBePSBoID4+PiAxNjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9oYXNoX21peF9pbnQ2NFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9mbG9hdCAoaCwgdjApIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfaW50NjQoaCwgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0ICh2MCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnQ2NFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbG8zMiwgY2FtbF9pbnQ2NF9oaTMyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludDY0IChoLCB2KSB7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2xvMzIodikpO1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9oaTMyKHYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCwgaSwgdztcbiAgZm9yIChpID0gMDsgaSArIDQgPD0gbGVuOyBpICs9IDQpIHtcbiAgICB3ID0gcy5jaGFyQ29kZUF0KGkpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCA4KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMikgPDwgMTYpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSszKSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHMuY2hhckNvZGVBdChpKzIpIDw8IDE2O1xuICBjYXNlIDI6IHcgfD0gcy5jaGFyQ29kZUF0KGkrMSkgPDwgODtcbiAgY2FzZSAxOlxuICAgIHcgfD0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgZGVmYXVsdDpcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHNbaV1cbiAgICAgIHwgKHNbaSsxXSA8PCA4KVxuICAgICAgfCAoc1tpKzJdIDw8IDE2KVxuICAgICAgfCAoc1tpKzNdIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICBjYXNlIDM6IHcgID0gc1tpKzJdIDw8IDE2O1xuICBjYXNlIDI6IHcgfD0gc1tpKzFdIDw8IDg7XG4gIGNhc2UgMTogdyB8PSBzW2ldO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgZGVmYXVsdDpcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlcyhoLCB2KSB7XG4gIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KHYpO1xuICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNvbnRlbnQpXG4gIGVsc2UgLyogQVJSQVkgKi9cbiAgICByZXR1cm4gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgY29udGVudCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsIHYpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHYpKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2ggbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0LCBjYW1sX2hhc2hfbWl4X3N0cmluZywgY2FtbF9oYXNoX21peF9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9oYXNoIChjb3VudCwgbGltaXQsIHNlZWQsIG9iaikge1xuICB2YXIgcXVldWUsIHJkLCB3ciwgc3osIG51bSwgaCwgdiwgaSwgbGVuO1xuICBzeiA9IGxpbWl0O1xuICBpZiAoc3ogPCAwIHx8IHN6ID4gMjU2KSBzeiA9IDI1NjtcbiAgbnVtID0gY291bnQ7XG4gIGggPSBzZWVkO1xuICBxdWV1ZSA9IFtvYmpdOyByZCA9IDA7IHdyID0gMTtcbiAgd2hpbGUgKHJkIDwgd3IgJiYgbnVtID4gMCkge1xuICAgIHYgPSBxdWV1ZVtyZCsrXTtcbiAgICBpZiAodiAmJiB2LmNhbWxfY3VzdG9tKXtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50IChoLCBoaCk7XG4gICAgICAgIG51bSAtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKHZbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHZbMl0pO1xuICAgICAgICBudW0tLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MDpcbiAgICAgICAgLy8gRm9yd2FyZFxuICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKSB7XG4gICAgICAgICAgLyogQWxsIGNvbnRpbnVhdGlvbnMgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZSxcbiAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGRpc3Rpbmd1aXNoIHRoZW0uICovXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdGFnKTtcbiAgICAgICAgZm9yIChpID0gMSwgbGVuID0gdi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgcXVldWVbd3IrK10gPSB2W2ldO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodnwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHYrdisxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLHYpO1xuICAgICAgbnVtLS07XG4gICAgfVxuICB9XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpO1xuICByZXR1cm4gaCAmIDB4M0ZGRkZGRkY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2hhc2hcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfZmluYWwsIGNhbWxfaGFzaF9taXhfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19oYXNoKGgsIHYpe1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdik7XG4gIHZhciBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNGRkZGRkZGO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9jb25zdGFudHNcbnZhciBjYW1sX21hcnNoYWxfY29uc3RhbnRzID0ge1xuICBQUkVGSVhfU01BTExfQkxPQ0s6ICAgICAgICAgMHg4MCxcbiAgUFJFRklYX1NNQUxMX0lOVDogICAgICAgICAgIDB4NDAsXG4gIFBSRUZJWF9TTUFMTF9TVFJJTkc6ICAgICAgICAweDIwLFxuICBDT0RFX0lOVDg6ICAgICAgICAgICAgICAgICAgMHgwMCxcbiAgQ09ERV9JTlQxNjogICAgICAgICAgICAgICAgIDB4MDEsXG4gIENPREVfSU5UMzI6ICAgICAgICAgICAgICAgICAweDAyLFxuICBDT0RFX0lOVDY0OiAgICAgICAgICAgICAgICAgMHgwMyxcbiAgQ09ERV9TSEFSRUQ4OiAgICAgICAgICAgICAgIDB4MDQsXG4gIENPREVfU0hBUkVEMTY6ICAgICAgICAgICAgICAweDA1LFxuICBDT0RFX1NIQVJFRDMyOiAgICAgICAgICAgICAgMHgwNixcbiAgQ09ERV9CTE9DSzMyOiAgICAgICAgICAgICAgIDB4MDgsXG4gIENPREVfQkxPQ0s2NDogICAgICAgICAgICAgICAweDEzLFxuICBDT0RFX1NUUklORzg6ICAgICAgICAgICAgICAgMHgwOSxcbiAgQ09ERV9TVFJJTkczMjogICAgICAgICAgICAgIDB4MEEsXG4gIENPREVfRE9VQkxFX0JJRzogICAgICAgICAgICAweDBCLFxuICBDT0RFX0RPVUJMRV9MSVRUTEU6ICAgICAgICAgMHgwQyxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0JJRzogICAgIDB4MEQsXG4gIENPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6ICAweDBFLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzogICAgMHgwRixcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6IDB4MDcsXG4gIENPREVfQ09ERVBPSU5URVI6ICAgICAgICAgICAweDEwLFxuICBDT0RFX0lORklYUE9JTlRFUjogICAgICAgICAgMHgxMSxcbiAgQ09ERV9DVVNUT006ICAgICAgICAgICAgICAgIDB4MTIsXG4gIENPREVfQ1VTVE9NX0xFTjogICAgICAgICAgICAweDE4LFxuICBDT0RFX0NVU1RPTV9GSVhFRDogICAgICAgICAgMHgxOVxufVxuXG5cbi8vUHJvdmlkZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBVSW50OEFycmF5UmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IHM7IHRoaXMuaSA9IGk7IH1cblVJbnQ4QXJyYXlSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuc1t0aGlzLmkrK10gPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoc1tpXSA8PCA4KSB8IHNbaSArIDFdXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCA+PiAxNikgfCBzW2kgKyAxXTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoc1tpXSA8PCAyNCkgfCAoc1tpKzFdIDw8IDE2KSB8XG4gICAgICAgICAgICAoc1tpKzJdIDw8IDgpIHwgc1tpKzNdKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzW2ldIDw8IDI0KSB8IChzW2krMV0gPDwgMTYpIHxcbiAgICAgIChzW2krMl0gPDwgOCkgfCBzW2krM107XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKSk7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbik7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbFN0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gTWxTdHJpbmdSZWFkZXIgKHMsIGkpIHsgdGhpcy5zID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTsgdGhpcy5pID0gaTsgfVxuTWxTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgocy5jaGFyQ29kZUF0KGkpIDw8IDI0KSB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKHMuY2hhckNvZGVBdChpKzIpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkrMykpID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zdWJzdHJpbmcoaSwgaSArIGxlbikpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIHZhciBzID0gdGhpcy5zO1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIGZvcih2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgYltqXSA9IHMuY2hhckNvZGVBdChpICsgaik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogQmlnU3RyaW5nUmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheSwgY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gQmlnU3RyaW5nUmVhZGVyIChicywgaSkgeyB0aGlzLnMgPSBiczsgdGhpcy5pID0gaTsgfVxuQmlnU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbWxfYmFfZ2V0XzEodGhpcy5zLHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbWxfYmFfZ2V0XzEodGhpcy5zLHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgOCkgfCBjYW1sX2JhX2dldF8xKHMsaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpIDw8IDI0ID4+IDE2KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpICAgICAgICAgKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgICA8PCAyNCkgfCAoY2FtbF9iYV9nZXRfMShzLGkrMSkgPDwgMTYpIHxcbiAgICAgIChjYW1sX2JhX2dldF8xKHMsaSsyKSA8PCA4KSAgfCBjYW1sX2JhX2dldF8xKHMsaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdmFyIGFyciA9IG5ldyBBcnJheShsZW4pXG4gICAgZm9yKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKXtcbiAgICAgIGFycltqXSA9IGNhbWxfYmFfZ2V0XzEodGhpcy5zLCBpK2opO1xuICAgIH1cbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdmFyIG9mZnNldCA9IHRoaXMub2Zmc2V0KGkpO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIHRoaXMucy5kYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKTtcbiAgfVxufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzIChhKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKGNhbWxfaW50NjRfb2ZfYnl0ZXMgKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlclxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChzLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IE1sU3RyaW5nUmVhZGVyLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyLCBjYW1sX3N0cmluZ19vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKHMsb2ZzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgTWxTdHJpbmdSZWFkZXIgKGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICBzaXplWzBdID0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMgKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyAodik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB3cml0ZXIud3JpdGUgKDgsIGJbaV0pO1xuICBzaXplc1swXSA9IDg7IHNpemVzWzFdID0gODtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl91bm1hcnNoYWxcbmZ1bmN0aW9uIGNhbWxfaW50MzJfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHNpemVbMF0gPSA0O1xuICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHN3aXRjaCAocmVhZGVyLnJlYWQ4dSAoKSkge1xuICBjYXNlIDE6XG4gICAgc2l6ZVswXSA9IDQ7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICBjYXNlIDI6XG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBuYXRpdmUgaW50ZWdlciB2YWx1ZSB0b28gbGFyZ2VcIik7XG4gIGRlZmF1bHQ6IGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPVxuICAgIHtcIl9qXCI6IHtcbiAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQ2NF91bm1hcnNoYWwsXG4gICAgICBzZXJpYWxpemUgIDogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgICAgZml4ZWRfbGVuZ3RoIDogOCxcbiAgICAgIGNvbXBhcmUgOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgICBoYXNoIDogY2FtbF9pbnQ2NF9oYXNoXG4gICAgfSxcbiAgICAgXCJfaVwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9uXCI6IHtcbiAgICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9iaWdhcnJheVwiOntcbiAgICAgICBkZXNlcmlhbGl6ZSA6IChmdW5jdGlvbiAocmVhZGVyLCBzeikge3JldHVybiBjYW1sX2JhX2Rlc2VyaWFsaXplIChyZWFkZXIsc3osXCJfYmlnYXJyYXlcIil9KSxcbiAgICAgICBzZXJpYWxpemUgOiBjYW1sX2JhX3NlcmlhbGl6ZSxcbiAgICAgICBjb21wYXJlIDogY2FtbF9iYV9jb21wYXJlLFxuICAgICAgIGhhc2g6IGNhbWxfYmFfaGFzaCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyMDJcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycjAyXCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH1cbiAgICB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9mbG9hdF9vZl9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpIHtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N0Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT0gMCkge1xuICAgICAgYyA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBuNyA9IG4gPDwgNztcbiAgICAgIGlmIChuICE9IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Rik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG4gIHZhciBtYWdpYyA9IHJlYWRlci5yZWFkMzJ1ICgpXG4gIHN3aXRjaChtYWdpYyl7XG4gIGNhc2UgMHg4NDk1QTZCRTogLyogSW50ZXh0X21hZ2ljX251bWJlcl9zbWFsbCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gMjA7XG4gICAgdmFyIGNvbXByZXNzZWQgPSAwO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciB1bmNvbXByZXNzZWRfZGF0YV9sZW4gPSBkYXRhX2xlbjtcbiAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgX3NpemVfMzIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgX3NpemVfNjQgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkQ6IC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gcmVhZGVyLnJlYWQ4dSgpICYgMHgzRjtcbiAgICB2YXIgY29tcHJlc3NlZCA9IDE7XG4gICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIG51bV9vYmplY3RzID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIF9zaXplXzMyID0gcmVhZHZscSAob3ZlcmZsb3cpO1xuICAgIHZhciBfc2l6ZV82NCA9IHJlYWR2bHEgKG92ZXJmbG93KTtcbiAgICBpZihvdmVyZmxvd1swXSl7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIpO1xuICAgIH1cbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkY6IC8qIEludGV4dF9tYWdpY19udW1iZXJfYmlnICovXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIGEgMzItYml0IHBsYXRmb3JtXCIpO1xuICAgIGJyZWFrXG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IGJhZCBvYmplY3RcIik7XG4gICAgYnJlYWs7XG4gIH1cbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gKG51bV9vYmplY3RzID4gMCk/W106bnVsbDtcbiAgdmFyIG9ial9jb3VudGVyID0gMDtcbiAgZnVuY3Rpb24gaW50ZXJuX3JlYyAocmVhZGVyKSB7XG4gICAgdmFyIGNvZGUgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgIGlmIChjb2RlID49IDB4NDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovKSB7XG4gICAgICBpZiAoY29kZSA+PSAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovKSB7XG4gICAgICAgIHZhciB0YWcgPSBjb2RlICYgMHhGO1xuICAgICAgICB2YXIgc2l6ZSA9IChjb2RlID4+IDQpICYgMHg3O1xuICAgICAgICB2YXIgdiA9IFt0YWddO1xuICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZVxuICAgICAgICByZXR1cm4gKGNvZGUgJiAweDNGKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvZGUgPj0gMHgyMC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcgKi8pIHtcbiAgICAgICAgdmFyIGxlbiA9IGNvZGUgJiAweDFGO1xuICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoKGNvZGUpIHtcbiAgICAgICAgY2FzZSAweDAwOiAvL2NzdC5DT0RFX0lOVDg6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkOHMgKCk7XG4gICAgICAgIGNhc2UgMHgwMTogLy9jc3QuQ09ERV9JTlQxNjpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQxNnMgKCk7XG4gICAgICAgIGNhc2UgMHgwMjogLy9jc3QuQ09ERV9JTlQzMjpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG4gICAgICAgIGNhc2UgMHgwMzogLy9jc3QuQ09ERV9JTlQ2NDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGludGVnZXIgdG9vIGxhcmdlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MDQ6IC8vY3N0LkNPREVfU0hBUkVEODpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNTogLy9jc3QuQ09ERV9TSEFSRUQxNjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQxNnUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDY6IC8vY3N0LkNPREVfU0hBUkVEMzI6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA4OiAvL2NzdC5DT0RFX0JMT0NLMzI6XG4gICAgICAgICAgdmFyIGhlYWRlciA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgIHZhciB0YWcgPSBoZWFkZXIgJiAweEZGO1xuICAgICAgICAgIHZhciBzaXplID0gaGVhZGVyID4+IDEwO1xuICAgICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIHY7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgxMzogLy9jc3QuQ09ERV9CTE9DSzY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGRhdGEgYmxvY2sgdG9vIGxhcmdlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MDk6IC8vY3N0LkNPREVfU1RSSU5HODpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEE6IC8vY3N0LkNPREVfU1RSSU5HMzI6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQzogLy9jc3QuQ09ERV9ET1VCTEVfTElUVExFOlxuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgODtpKyspIHRbNyAtIGldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBCOiAvL2NzdC5DT0RFX0RPVUJMRV9CSUc6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFtpXSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgdmFyIHYgPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRTogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbNyAtIGpdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBEOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MDc6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbNyAtIGpdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBGOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2IFtpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEwOiAvL2NzdC5DT0RFX0NPREVQT0lOVEVSOlxuICAgICAgICBjYXNlIDB4MTE6IC8vY3N0LkNPREVfSU5GSVhQT0lOVEVSOlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGNvZGUgcG9pbnRlclwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDEyOiAvL2NzdC5DT0RFX0NVU1RPTTpcbiAgICAgICAgY2FzZSAweDE4OiAvL2NzdC5DT0RFX0NVU1RPTV9MRU46XG4gICAgICAgIGNhc2UgMHgxOTogLy9jc3QuQ09ERV9DVVNUT01fRklYRUQ6XG4gICAgICAgICAgdmFyIGMsIHMgPSBcIlwiO1xuICAgICAgICAgIHdoaWxlICgoYyA9IHJlYWRlci5yZWFkOHUgKCkpICE9IDApIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoYyk7XG4gICAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tzXTtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRfc2l6ZTtcbiAgICAgICAgICBpZighb3BzKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB1bmtub3duIGN1c3RvbSBibG9jayBpZGVudGlmaWVyXCIpO1xuICAgICAgICAgIHN3aXRjaChjb2RlKXtcbiAgICAgICAgICBjYXNlIDB4MTI6IC8vIGNzdC5DT0RFX0NVU1RPTSAoZGVwcmVjYXRlZClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxOTogLy8gY3N0LkNPREVfQ1VTVE9NX0ZJWEVEXG4gICAgICAgICAgICBpZighb3BzLmZpeGVkX2xlbmd0aClcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBleHBlY3RlZCBhIGZpeGVkLXNpemUgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IG9wcy5maXhlZF9sZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MTg6IC8vIGNzdC5DT0RFX0NVU1RPTV9MRU5cbiAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICAgIC8vIFNraXAgc2l6ZTY0XG4gICAgICAgICAgICByZWFkZXIucmVhZDMycygpOyByZWFkZXIucmVhZDMycygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvbGRfcG9zID0gcmVhZGVyLmk7XG4gICAgICAgICAgdmFyIHNpemUgPSBbMF07XG4gICAgICAgICAgdmFyIHYgPSBvcHMuZGVzZXJpYWxpemUocmVhZGVyLCBzaXplKTtcbiAgICAgICAgICBpZihleHBlY3RlZF9zaXplICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBpZihleHBlY3RlZF9zaXplICE9IHNpemVbMF0pXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW5jb3JyZWN0IGxlbmd0aCBvZiBzZXJpYWxpemVkIGN1c3RvbSBibG9ja1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbWVzc2FnZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZihjb21wcmVzc2VkKSB7XG4gICAgaWYoY2FtbF9kZWNvbXByZXNzX2lucHV0KSB7XG4gICAgICB2YXIgZGF0YSA9IHJlYWRlci5yZWFkdWludDhhcnJheShkYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gbmV3IFVpbnQ4QXJyYXkodW5jb21wcmVzc2VkX2RhdGFfbGVuKTtcbiAgICAgIHZhciByZXMgPSBjYW1sX2RlY29tcHJlc3NfaW5wdXQoZGF0YSwgcmVzKTtcbiAgICAgIHZhciByZWFkZXIgPSBuZXcgVUludDhBcnJheVJlYWRlcihyZXMsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGNvbXByZXNzZWQgb2JqZWN0LCBjYW5ub3QgZGVjb21wcmVzc1wiKTtcbiAgICB9XG4gIH1cbiAgdmFyIHJlcyA9IGludGVybl9yZWMgKHJlYWRlcik7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjIChyZWFkZXIpO1xuICB9XG4gIGlmICh0eXBlb2Ygb2ZzIT1cIm51bWJlclwiKSBvZnNbMF0gPSByZWFkZXIuaTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG4vL1ZlcnNpb246IDwgNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAyMFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPj0gNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAxNlxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSAocywgb2ZzKSB7XG4gIHZhciByID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKSwgb2ZzKTtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gci5yZWFkOHUoKTtcbiAgICB2YXIgbiA9IGMgJiAweDdGO1xuICAgIHdoaWxlICgoYyAmIDB4ODApICE9IDApIHtcbiAgICAgIGMgPSByLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdGKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cblxuICBzd2l0Y2goci5yZWFkMzJ1KCkpe1xuICBjYXNlIDB4ODQ5NUE2QkU6IC8qIEludGV4dF9tYWdpY19udW1iZXJfc21hbGwgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IDIwO1xuICAgIHZhciBkYXRhX2xlbiA9IHIucmVhZDMydSgpO1xuICAgIGJyZWFrO1xuICBjYXNlIDB4ODQ5NUE2QkQ6IC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gci5yZWFkOHUoKSAmIDB4M0Y7XG4gICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICBpZihvdmVyZmxvd1swXSl7XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIHRoaXMgcGxhdGZvcm1cIik7XG4gICAgfVxuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRjogLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi9cbiAgZGVmYXVsdDpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IGJhZCBvYmplY3RcIik7XG4gICAgYnJlYWtcbiAgfVxuICByZXR1cm4gaGVhZGVyX2xlbiAtIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSArIGRhdGFfbGVuO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE9iamVjdFRhYmxlXG52YXIgTWxPYmplY3RUYWJsZTtcbmlmICh0eXBlb2YgZ2xvYmFsVGhpcy5NYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAvKiBwb2x5ZmlsbCAodXNpbmcgbGluZWFyIHNlYXJjaCkgKi9cbiAgICBmdW5jdGlvbiBOYWl2ZUxvb2t1cChvYmpzKSB7IHRoaXMub2JqcyA9IG9ianM7IH1cbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMub2Jqc1tpXSA9PT0gdikgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfTtcbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGhlcmUuIFtNbE9iamVjdFRhYmxlLnN0b3JlXSB3aWxsIHB1c2ggdG8gW3RoaXMub2Jqc10gZGlyZWN0bHkuXG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IE5haXZlTG9va3VwKHRoaXMub2Jqcyk7XG4gICAgfTtcbiAgfSgpO1xufVxuZWxzZSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBnbG9iYWxUaGlzLk1hcCgpO1xuICB9O1xufVxuXG5NbE9iamVjdFRhYmxlLnByb3RvdHlwZS5zdG9yZSA9IGZ1bmN0aW9uKHYpIHtcbiAgdGhpcy5sb29rdXAuc2V0KHYsIHRoaXMub2Jqcy5sZW5ndGgpO1xuICB0aGlzLm9ianMucHVzaCh2KTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUucmVjYWxsID0gZnVuY3Rpb24odikge1xuICB2YXIgaSA9IHRoaXMubG9va3VwLmdldCh2KTtcbiAgcmV0dXJuIChpID09PSB1bmRlZmluZWQpXG4gICAgPyB1bmRlZmluZWQgOiB0aGlzLm9ianMubGVuZ3RoIC0gaTsgICAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogTWxPYmplY3RUYWJsZSwgY2FtbF9saXN0X3RvX2pzX2FycmF5LCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbnZhciBjYW1sX291dHB1dF92YWwgPSBmdW5jdGlvbiAoKXtcbiAgZnVuY3Rpb24gV3JpdGVyICgpIHsgdGhpcy5jaHVuayA9IFtdOyB9XG4gIFdyaXRlci5wcm90b3R5cGUgPSB7XG4gICAgY2h1bmtfaWR4OjIwLCBibG9ja19sZW46MCwgb2JqX2NvdW50ZXI6MCwgc2l6ZV8zMjowLCBzaXplXzY0OjAsXG4gICAgd3JpdGU6ZnVuY3Rpb24gKHNpemUsIHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9hdDpmdW5jdGlvbiAocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3BvcysrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9jb2RlOmZ1bmN0aW9uIChzaXplLCBjb2RlLCB2YWx1ZSkge1xuICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9IGNvZGU7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9zaGFyZWQ6ZnVuY3Rpb24gKG9mZnNldCkge1xuICAgICAgaWYgKG9mZnNldCA8ICgxIDw8IDgpKSB0aGlzLndyaXRlX2NvZGUoOCwgMHgwNCAvKmNzdC5DT0RFX1NIQVJFRDgqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgaWYgKG9mZnNldCA8ICgxIDw8IDE2KSkgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9LFxuICAgIHBvczpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmNodW5rX2lkeCB9LFxuICAgIGZpbmFsaXplOmZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuYmxvY2tfbGVuID0gdGhpcy5jaHVua19pZHggLSAyMDtcbiAgICAgIHRoaXMuY2h1bmtfaWR4ID0gMDtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCAweDg0OTVBNkJFKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLmJsb2NrX2xlbik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5vYmpfY291bnRlcik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLnNpemVfNjQpO1xuICAgICAgcmV0dXJuIHRoaXMuY2h1bms7XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiAodiwgZmxhZ3MpIHtcbiAgICBmbGFncyA9IGNhbWxfbGlzdF90b19qc19hcnJheShmbGFncyk7XG5cbiAgICB2YXIgbm9fc2hhcmluZyA9IChmbGFncy5pbmRleE9mKDAgLypNYXJzaGFsLk5vX3NoYXJpbmcqLykgIT09IC0xKSxcbiAgICAgICAgY2xvc3VyZXMgPSAgKGZsYWdzLmluZGV4T2YoMSAvKk1hcnNoYWwuQ2xvc3VyZXMqLykgIT09IC0xKTtcbiAgICAvKiBNYXJzaGFsLkNvbXBhdF8zMiBpcyByZWR1bmRhbnQgc2luY2UgaW50ZWdlcnMgYXJlIDMyLWJpdCBhbnl3YXkgKi9cblxuICAgIGlmIChjbG9zdXJlcylcbiAgICAgIGNvbnNvbGUud2FybihcImluIGNhbWxfb3V0cHV0X3ZhbDogZmxhZyBNYXJzaGFsLkNsb3N1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXG4gICAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIgKCk7XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIGludGVybl9vYmpfdGFibGUgPSBub19zaGFyaW5nID8gbnVsbCA6IG5ldyBNbE9iamVjdFRhYmxlKCk7XG5cbiAgICBmdW5jdGlvbiBtZW1vKHYpIHtcbiAgICAgIGlmIChub19zaGFyaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICB2YXIgZXhpc3Rpbmdfb2Zmc2V0ID0gaW50ZXJuX29ial90YWJsZS5yZWNhbGwodik7XG4gICAgICBpZiAoZXhpc3Rpbmdfb2Zmc2V0KSB7IHdyaXRlci53cml0ZV9zaGFyZWQoZXhpc3Rpbmdfb2Zmc2V0KTsgcmV0dXJuIHRydWU7IH1cbiAgICAgIGVsc2UgeyBpbnRlcm5fb2JqX3RhYmxlLnN0b3JlKHYpOyByZXR1cm4gZmFsc2U7IH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlcm5fcmVjICh2KSB7XG4gICAgICBpZiAodi5jYW1sX2N1c3RvbSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbmFtZSA9IHYuY2FtbF9jdXN0b207XG4gICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbbmFtZV07XG4gICAgICAgIHZhciBzel8zMl82NCA9IFswLDBdO1xuICAgICAgICBpZighb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZihvcHMuZml4ZWRfbGVuZ3RoID09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE4IC8qY3N0LkNPREVfQ1VTVE9NX0xFTiovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBoZWFkZXJfcG9zID0gd3JpdGVyLnBvcyAoKTtcbiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zLCAzMiwgc3pfMzJfNjRbMF0pO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgNCwgMzIsIDApOyAvLyB6ZXJvXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA4LCAzMiwgc3pfMzJfNjRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBvbGRfcG9zID0gd3JpdGVyLnBvcygpO1xuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgaWYgKG9wcy5maXhlZF9sZW5ndGggIT0gd3JpdGVyLnBvcygpIC0gb2xkX3BvcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGluY29ycmVjdCBmaXhlZCBzaXplcyBzcGVjaWZpZWQgYnkgXCIgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAyICsgKChzel8zMl82NFswXSArIDMpID4+IDIpO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAyICsgKChzel8zMl82NFsxXSArIDcpID4+IDMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICAgIGlmICh2WzBdID09IDI1MSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChBYnN0cmFjdClcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGNvbnRpbnVhdGlvbiB2YWx1ZVwiKTtcbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSAmJiBtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIGlmICh2WzBdIDwgMTYgJiYgdi5sZW5ndGggLSAxIDwgOClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8gKyB2WzBdICsgKCh2Lmxlbmd0aCAtIDEpPDw0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwOCAvKmNzdC5DT0RFX0JMT0NLMzIqLywgKCh2Lmxlbmd0aC0xKSA8PCAxMCkgfCB2WzBdKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gdi5sZW5ndGg7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IHYubGVuZ3RoO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxKSBzdGFjay5wdXNoICh2LCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgICBpZighKGNhbWxfaXNfbWxfYnl0ZXMoY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKSkpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogW0J5dGVzLnRdIGNhbm5vdCBzYWZlbHkgYmUgbWFyc2hhbGVkIHdpdGggWy0tZW5hYmxlIHVzZS1qcy1zdHJpbmddXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT0gKHZ8MCkpe1xuICAgICAgICAgIHZhciB0eXBlX29mX3YgPSB0eXBlb2YgdjtcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIElmIGEgZmxvYXQgaGFwcGVucyB0byBiZSBhbiBpbnRlZ2VyIGl0IGlzIHNlcmlhbGl6ZWQgYXMgYW4gaW50ZWdlclxuICAgICAgICAgIC8vIChKc19vZl9vY2FtbCBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB0eXBlIG9mIGFuIGludGVnZXIgbnVtYmVyIGlzXG4gICAgICAgICAgLy8gZmxvYXQgb3IgaW50ZWdlci4pIFRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGNyYXNoZXMgd2hlblxuICAgICAgICAgIC8vIHVubWFyc2hhbGxpbmcgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bnRpbWUuIEl0IHNlZW1zIGJldHRlciB0b1xuICAgICAgICAgIC8vIHN5c3RlbWF0aWNhbGx5IGZhaWwgb24gbWFyc2hhbGxpbmcuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyAgICAgICAgICBpZih0eXBlX29mX3YgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoXCIrdHlwZV9vZl92K1wiKVwiKTtcbiAgICAgICAgICAvLyAgICAgICAgICB2YXIgdCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHYpKTtcbiAgICAgICAgICAvLyAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MEIgLypjc3QuQ09ERV9ET1VCTEVfQklHKi8pO1xuICAgICAgICAgIC8vICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGk8ODsgaSsrKXt3cml0ZXIud3JpdGUoOCx0W2ldKX1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID49IDAgJiYgdiA8IDB4NDApIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDBYNDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAoMSA8PCA3KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDAgLypjc3QuQ09ERV9JTlQ4Ki8sIHYpO1xuICAgICAgICAgIGVsc2UgaWYgKHYgPj0gLSgxIDw8IDE1KSAmJiB2IDwgKDEgPDwgMTUpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMTYsIDB4MDEgLypjc3QuQ09ERV9JTlQxNiovLCB2KTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwMiAvKmNzdC5DT0RFX0lOVDMyKi8sIHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGV4dGVybl9yZWMgKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIHZhciB2ID0gc3RhY2sucG9wICgpO1xuICAgICAgaWYgKGkgKyAxIDwgdi5sZW5ndGgpIHN0YWNrLnB1c2ggKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWMgKHZbaV0pO1xuICAgIH1cbiAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgd3JpdGVyLm9ial9jb3VudGVyID0gaW50ZXJuX29ial90YWJsZS5vYmpzLmxlbmd0aDtcbiAgICB3cml0ZXIuZmluYWxpemUoKTtcbiAgICByZXR1cm4gd3JpdGVyLmNodW5rO1xuICB9XG59ICgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfYmxpdF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyIChzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKTtcbiAgaWYgKHQubGVuZ3RoID4gbGVuKSBjYW1sX2ZhaWx3aXRoIChcIk1hcnNoYWwudG9fYnVmZmVyOiBidWZmZXIgb3ZlcmZsb3dcIik7XG4gIGNhbWxfYmxpdF9ieXRlcyh0LCAwLCBzLCBvZnMsIHQubGVuZ3RoKTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfdGFnKGEpe1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKGEpKSByZXR1cm4gMjUyOyAvLyBzdHJpbmdfdGFnXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGEpKSByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIEFycmF5ICYmIGFbMF0gPT09IChhWzBdPj4+MCkgJiYgYVswXSA8PSAyNTUpIHtcbiAgICAvLyBMb29rIGxpa2UgYW4gb2NhbWwgYmxvY2tcbiAgICB2YXIgdGFnID0gYVswXSB8IDA7XG4gICAgLy8gaWdub3JlIGRvdWJsZV9hcnJheV90YWcgYmVjYXVzZSB3ZSBjYW5ub3QgYWNjdXJhdGVseSBzZXRcbiAgICAvLyB0aGlzIHRhZyB3aGVuIHdlIGNyZWF0ZSBhbiBhcnJheSBvZiBmbG9hdC5cbiAgICByZXR1cm4gKHRhZyA9PSAyNTQpPzA6dGFnXG4gIH1cbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIFN0cmluZykgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgTnVtYmVyKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYSAmJiBhLmNhbWxfY3VzdG9tKSByZXR1cm4gMTI1NTsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKGEgJiYgYS5jb21wYXJlKSByZXR1cm4gMTI1NjsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIDEyNDc7IC8vIGxpa2UgY2xvc3VyZV90YWcgKDI0NylcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpe1xuICByZXR1cm4gY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXS5jb21wYXJlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKG51bSwgY3VzdG9tLCBzd2FwLCB0b3RhbCkge1xuICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShjdXN0b20pO1xuICBpZihjb21wKSB7XG4gICAgdmFyIHggPSAoc3dhcCA+IDApP2NvbXAoY3VzdG9tLG51bSx0b3RhbCk6Y29tcChudW0sY3VzdG9tLHRvdGFsKTtcbiAgICBpZih0b3RhbCAmJiB4ICE9IHgpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZigreCAhPSAreCkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZigoeCB8IDApICE9IDApIHJldHVybiAoeCB8IDApOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbCAoY29uc3QsIGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW50X2NvbXBhcmUsIGNhbWxfc3RyaW5nX2NvbXBhcmUsIGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20sIGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvcig7Oykge1xuICAgIGlmICghKHRvdGFsICYmIGEgPT09IGIpKSB7XG4gICAgICB2YXIgdGFnX2EgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19hID09IDI1MCkgeyBhID0gYVsxXTsgY29udGludWUgfVxuXG4gICAgICB2YXIgdGFnX2IgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhiKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19iID09IDI1MCkgeyBiID0gYlsxXTsgY29udGludWUgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmKHRhZ19hICE9PSB0YWdfYikge1xuICAgICAgICBpZih0YWdfYSA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2IgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZih0YWdfYiA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2EgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0YWdfYSA8IHRhZ19iKT8tMToxO1xuICAgICAgfVxuICAgICAgc3dpdGNoKHRhZ19hKXtcbiAgICAgICAgLy8gMjQ2OiBMYXp5X3RhZyBoYW5kbGVkIGJlbGxvd1xuICAgICAgY2FzZSAyNDc6IC8vIENsb3N1cmVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjQ4OiAvLyBPYmplY3RcbiAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pO1xuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0OTogLy8gSW5maXhcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTA6IC8vIEZvcndhcmQgdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW4sIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTE6IC8vQWJzdHJhY3RcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUyOiAvLyBPQ2FtbCBieXRlc1xuICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgIHZhciB4ID0gY2FtbF9ieXRlc19jb21wYXJlKGEsIGIpO1xuICAgICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUzOiAvLyBEb3VibGVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5X3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX2FycmF5X3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI1NTogLy8gQ3VzdG9tX3RhZ1xuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI0NzogLy8gRnVuY3Rpb25cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTU6IC8vIEN1c3RvbVxuICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgaWYoY29tcCAhPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYikpe1xuICAgICAgICAgIHJldHVybiAoYS5jYW1sX2N1c3RvbTxiLmNhbWxfY3VzdG9tKT8tMToxO1xuICAgICAgICB9XG4gICAgICAgIGlmKCFjb21wKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICB2YXIgeCA9IGNvbXAoYSxiLHRvdGFsKTtcbiAgICAgICAgaWYoeCAhPSB4KXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgdmFyIHggPSBhLmNvbXBhcmUoYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCkgeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICByZXR1cm4gdG90YWw/LTE6eDtcbiAgICAgICAgfVxuICAgICAgICBpZih4ICE9PSAoeHwwKSl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMDogLy8gTnVtYmVyXG4gICAgICAgIGEgPSArYTtcbiAgICAgICAgYiA9ICtiO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgIT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgaWYgKGEgPT0gYSkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGIgPT0gYikgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDAxOiAvLyBUaGUgcmVzdFxuICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAvLyAxLiBKYXZhU2NyaXB0IHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAyLiBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvL1xuICAgICAgICAvLyAoMykgd2lsbCByYWlzZSBhIFtUeXBlRXJyb3JdXG4gICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgLy8gKDIpIGFuZCAoMyksIGFmdGVyIGV2ZW50dWFsIGNvZXJjaW9uXG4gICAgICAgIC8vIC0gaWYgYSBhbmQgYiBhcmUgc3RyaW5ncywgYXBwbHkgbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uXG4gICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAvLyAgIGFuZCBhcHBseSBzdGFuZGFyZCBjb21wYXJpc29uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEV4Y2VwdGlvbjogYCE9YCB3aWxsIG5vdCBjb2VyY2UvY29udmVydCBpZiBib3RoIGEgYW5kIGIgYXJlIG9iamVjdHNcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhiKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUyMDogLy8gamF2YXNjcmlwdCBzdHJpbmdzXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICB2YXIgYiA9IGIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDY6IC8vIExhenlfdGFnXG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5XG4gICAgICBkZWZhdWx0OiAvLyBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICBpZihjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodGFnX2EpKSB7XG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIChhLmxlbmd0aCA8IGIubGVuZ3RoKT8tMToxO1xuICAgICAgICBpZiAoYS5sZW5ndGggPiAxKSBzdGFjay5wdXNoKGEsIGIsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKSByZXR1cm4gMDtcbiAgICB2YXIgaSA9IHN0YWNrLnBvcCgpO1xuICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgaWYgKGkgKyAxIDwgYS5sZW5ndGgpIHN0YWNrLnB1c2goYSwgYiwgaSArIDEpO1xuICAgIGEgPSBhW2ldO1xuICAgIGIgPSBiW2ldO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZSAoYSwgYikgeyByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdHJ1ZSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaW50X2NvbXBhcmUgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pbnRfY29tcGFyZSAoYSwgYikge1xuICBpZiAoYSA8IGIpIHJldHVybiAoLTEpOyBpZiAoYSA9PSBiKSByZXR1cm4gMDsgcmV0dXJuIDE7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID09IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbm90ZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpICE9IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPj0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JlYXRlcnRoYW4gbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVydGhhbiAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPiAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpIDw9IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3N0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc3RoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpIDwgMCk7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRm9ybWF0XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZm9ybWF0XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZm9ybWF0IChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID1cbiAgICAgIHsganVzdGlmeTonKycsIHNpZ25zdHlsZTonLScsIGZpbGxlcjonICcsIGFsdGVybmF0ZTpmYWxzZSxcbiAgICAgICAgYmFzZTowLCBzaWduZWRjb252OmZhbHNlLCB3aWR0aDowLCB1cHBlcmNhc2U6ZmFsc2UsXG4gICAgICAgIHNpZ246MSwgcHJlYzotMSwgY29udjonZicgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBjID0gZm10LmNoYXJBdChpKTtcbiAgICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlICctJzpcbiAgICAgIGYuanVzdGlmeSA9ICctJzsgYnJlYWs7XG4gICAgY2FzZSAnKyc6IGNhc2UgJyAnOlxuICAgICAgZi5zaWduc3R5bGUgPSBjOyBicmVhaztcbiAgICBjYXNlICcwJzpcbiAgICAgIGYuZmlsbGVyID0gJzAnOyBicmVhaztcbiAgICBjYXNlICcjJzpcbiAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOlxuICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgZi53aWR0aCA9IDA7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYud2lkdGggPSBmLndpZHRoICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJy4nOlxuICAgICAgZi5wcmVjID0gMDtcbiAgICAgIGkrKztcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi5wcmVjID0gZi5wcmVjICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICBjYXNlICdkJzogY2FzZSAnaSc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgJ3UnOlxuICAgICAgZi5iYXNlID0gMTA7IGJyZWFrO1xuICAgIGNhc2UgJ3gnOlxuICAgICAgZi5iYXNlID0gMTY7IGJyZWFrO1xuICAgIGNhc2UgJ1gnOlxuICAgICAgZi5iYXNlID0gMTY7IGYudXBwZXJjYXNlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnbyc6XG4gICAgICBmLmJhc2UgPSA4OyBicmVhaztcbiAgICBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi5jb252ID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnRSc6IGNhc2UgJ0YnOiBjYXNlICdHJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgIGYuY29udiA9IGMudG9Mb3dlckNhc2UgKCk7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCByYXdidWZmZXIpIHtcbiAgaWYgKGYudXBwZXJjYXNlKSByYXdidWZmZXIgPSByYXdidWZmZXIudG9VcHBlckNhc2UoKTtcbiAgdmFyIGxlbiA9IHJhd2J1ZmZlci5sZW5ndGg7XG4gIC8qIEFkanVzdCBsZW4gdG8gcmVmbGVjdCBhZGRpdGlvbmFsIGNoYXJzIChzaWduLCBldGMpICovXG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgKGYuc2lnbiA8IDAgfHwgZi5zaWduc3R5bGUgIT0gJy0nKSkgbGVuKys7XG4gIGlmIChmLmFsdGVybmF0ZSkge1xuICAgIGlmIChmLmJhc2UgPT0gOCkgbGVuICs9IDE7XG4gICAgaWYgKGYuYmFzZSA9PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcgJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICBpZiAoZi5zaWduZWRjb252KSB7XG4gICAgaWYgKGYuc2lnbiA8IDApIGJ1ZmZlciArPSAnLSc7XG4gICAgZWxzZSBpZiAoZi5zaWduc3R5bGUgIT0gJy0nKSBidWZmZXIgKz0gZi5zaWduc3R5bGU7XG4gIH1cbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSA4KSBidWZmZXIgKz0gJzAnO1xuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDE2KSBidWZmZXIgKz0gZi51cHBlcmNhc2U/XCIwWFwiOlwiMHhcIjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnKycgJiYgZi5maWxsZXIgPT0gJzAnKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnMCc7XG4gIGJ1ZmZlciArPSByYXdidWZmZXI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJy0nKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnICc7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGJ1ZmZlcik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gZnNfbm9kZV9zdXBwb3J0ZWQgKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9PSAndW5kZWZpbmVkJylcbn1cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCAoKSB7XG4gIHJldHVybiBmYWxzZVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9SZXF1aXJlczogTWxOb2RlRmQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX3dpdGhfYXJnc1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKHJvb3QpIHtcbiAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm5tID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gKHRoaXMucm9vdCArIG5hbWUpO1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZXhpc3RzU3luYyh0aGlzLm5tKG5hbWUpKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0ZpbGUoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLHttb2RlOm1vZGV9KTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucm1kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5yZWFkZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNEaXJlY3RvcnkoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGIgPSB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICAgIHRoaXMuZnMudW5saW5rU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gYjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZiwgcmFpc2VfdW5peCkge1xuICB2YXIgY29uc3RzID0gcmVxdWlyZSgnY29uc3RhbnRzJyk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGtleSBpbiBmKXtcbiAgICBzd2l0Y2goa2V5KXtcbiAgICBjYXNlIFwicmRvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1JET05MWTsgYnJlYWs7XG4gICAgY2FzZSBcIndyb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19XUk9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJhcHBlbmRcIiAgOlxuICAgICAgcmVzIHw9IGNvbnN0cy5PX1dST05MWSB8IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjcmVhdGVcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0NSRUFUOyAgICBicmVhaztcbiAgICBjYXNlIFwidHJ1bmNhdGVcIiA6IHJlcyB8PSBjb25zdHMuT19UUlVOQzsgICAgYnJlYWs7XG4gICAgY2FzZSBcImV4Y2xcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fRVhDTDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJiaW5hcnlcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTsgICBicmVhaztcbiAgICBjYXNlIFwidGV4dFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19URVhUOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm5vbmJsb2NrXCIgOiByZXMgfD0gY29uc3RzLk9fTk9OQkxPQ0s7IGJyZWFrO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHZhciBmZCA9IHRoaXMuZnMub3BlblN5bmModGhpcy5ubShuYW1lKSwgcmVzKTtcbiAgICB2YXIgaXNDaGFyYWN0ZXJEZXZpY2UgPSB0aGlzLmZzLmxzdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0NoYXJhY3RlckRldmljZSgpO1xuICAgIGYuaXNDaGFyYWN0ZXJEZXZpY2UgPSBpc0NoYXJhY3RlckRldmljZTtcbiAgICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlbmFtZSA9IGZ1bmN0aW9uKG8sIG4sIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJlbmFtZVN5bmModGhpcy5ubShvKSwgdGhpcy5ubShuKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3RhdCA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiB0aGlzLnN0YXRzX2Zyb21fanMoanNfc3RhdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmxzdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMubHN0YXRTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiB0aGlzLnN0YXRzX2Zyb21fanMoanNfc3RhdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN5bWxpbmsgPSBmdW5jdGlvbih0b19kaXIsIHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMuc3ltbGlua1N5bmModGhpcy5ubSh0YXJnZXQpLCB0aGlzLm5tKHBhdGgpLCB0b19kaXIgPyAnZGlyJyA6ICdmaWxlJyk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGxpbmsgPSB0aGlzLmZzLnJlYWRsaW5rU3luYyh0aGlzLm5tKG5hbWUpLCAndXRmOCcpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhsaW5rKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLm9wZW5kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJhaXNlX25vZGVqc19lcnJvciA9IGZ1bmN0aW9uKGVyciwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpIHtcbiAgICB2YXIgYXJncyA9IG1ha2VfdW5peF9lcnJfYXJncyhlcnIuY29kZSwgZXJyLnN5c2NhbGwsIGVyci5wYXRoLCBlcnIuZXJybm8pO1xuICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0c19mcm9tX2pzID0gZnVuY3Rpb24oanNfc3RhdHMpIHtcbiAgLyogPT09VW5peC5maWxlX2tpbmQ9PT1cbiAgICogdHlwZSBmaWxlX2tpbmQgPVxuICAgKiAgICAgU19SRUcgICAgICAgICAgICAgICAgICAgICAgICgqKiBSZWd1bGFyIGZpbGUgKilcbiAgICogICB8IFNfRElSICAgICAgICAgICAgICAgICAgICAgICAoKiogRGlyZWN0b3J5ICopXG4gICAqICAgfCBTX0NIUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIENoYXJhY3RlciBkZXZpY2UgKilcbiAgICogICB8IFNfQkxLICAgICAgICAgICAgICAgICAgICAgICAoKiogQmxvY2sgZGV2aWNlICopXG4gICAqICAgfCBTX0xOSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFN5bWJvbGljIGxpbmsgKilcbiAgICogICB8IFNfRklGTyAgICAgICAgICAgICAgICAgICAgICAoKiogTmFtZWQgcGlwZSAqKVxuICAgKiAgIHwgU19TT0NLICAgICAgICAgICAgICAgICAgICAgICgqKiBTb2NrZXQgKilcbiAgICovXG4gIHZhciBmaWxlX2tpbmQ7XG4gIGlmIChqc19zdGF0cy5pc0ZpbGUoKSkge1xuICAgIGZpbGVfa2luZCA9IDA7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZpbGVfa2luZCA9IDE7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDI7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNCbG9ja0RldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMztcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgZmlsZV9raW5kID0gNDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0ZJRk8oKSkge1xuICAgIGZpbGVfa2luZCA9IDU7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTb2NrZXQoKSkge1xuICAgIGZpbGVfa2luZCA9IDY7XG4gIH1cbiAgLyogPT09VW5peC5zdGF0cz09PVxuICAgKiB0eXBlIHN0YXRzID1cbiAgICogIHsgc3RfZGV2IDogaW50OyAgICAgICAgICAgICAgICgqKiBEZXZpY2UgbnVtYmVyICopXG4gICAqICAgIHN0X2lubyA6IGludDsgICAgICAgICAgICAgICAoKiogSW5vZGUgbnVtYmVyICopXG4gICAqICAgIHN0X2tpbmQgOiBmaWxlX2tpbmQ7ICAgICAgICAoKiogS2luZCBvZiB0aGUgZmlsZSAqKVxuICAgKiAgICBzdF9wZXJtIDogZmlsZV9wZXJtOyAgICAgICAgKCoqIEFjY2VzcyByaWdodHMgKilcbiAgICogICAgc3RfbmxpbmsgOiBpbnQ7ICAgICAgICAgICAgICgqKiBOdW1iZXIgb2YgbGlua3MgKilcbiAgICogICAgc3RfdWlkIDogaW50OyAgICAgICAgICAgICAgICgqKiBVc2VyIGlkIG9mIHRoZSBvd25lciAqKVxuICAgKiAgICBzdF9naWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAgKilcbiAgICogICAgc3RfcmRldiA6IGludDsgICAgICAgICAgICAgICgqKiBEZXZpY2UgSUQgKGlmIHNwZWNpYWwgZmlsZSkgKilcbiAgICogICAgc3Rfc2l6ZSA6IGludDsgICAgICAgICAgICAgICgqKiBTaXplIGluIGJ5dGVzICopXG4gICAqICAgIHN0X2F0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBhY2Nlc3MgdGltZSAqKVxuICAgKiAgICBzdF9tdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUgKilcbiAgICogICAgc3RfY3RpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IHN0YXR1cyBjaGFuZ2UgdGltZSAqKVxuICAgKiAgfVxuICAgKi9cbiAgcmV0dXJuIEJMT0NLKFxuICAgIDAsXG4gICAganNfc3RhdHMuZGV2LFxuICAgIGpzX3N0YXRzLmlubyxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAganNfc3RhdHMuc2l6ZSxcbiAgICBqc19zdGF0cy5hdGltZU1zLFxuICAgIGpzX3N0YXRzLm10aW1lTXMsXG4gICAganNfc3RhdHMuY3RpbWVNc1xuICApO1xufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKCkge1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGZFxuLy9SZXF1aXJlczogTWxGaWxlLCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZywgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9ieXRlc19zZXQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbE5vZGVGZChmZCwgZmxhZ3Mpe1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5mZCA9IGZkO1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5NbE5vZGVGZC5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuTWxOb2RlRmQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRmQ7XG5cbk1sTm9kZUZkLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5mdHJ1bmNhdGVTeW5jKHRoaXMuZmQsbGVufDApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpLnNpemU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHRyeSB7XG4gICAgaWYodGhpcy5mbGFncy5pc0NoYXJhY3RlckRldmljZSlcbiAgICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZiwgYnVmX29mZnNldCwgbGVuKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLmZzLndyaXRlU3luYyh0aGlzLmZkLCBidWYsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiAwO1xufVxuTWxOb2RlRmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYSxidWZfb2Zmc2V0LGxlbil7XG4gIHRyeSB7XG4gICAgaWYodGhpcy5mbGFncy5pc0NoYXJhY3RlckRldmljZSlcbiAgICAgIHZhciByZWFkID0gdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBhLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgIGVsc2VcbiAgICAgIHZhciByZWFkID0gdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBhLCBidWZfb2Zmc2V0LCBsZW4sIG9mZnNldCk7XG4gICAgcmV0dXJuIHJlYWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmNsb3NlU3luYyh0aGlzLmZkKTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGZFxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRmQoKXtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZFxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3Mpe1xuICBpZihmbGFncy5uYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbiAgICAgIHZhciBmZDIgPSBmcy5vcGVuU3luYyhmbGFncy5uYW1lLCBcInJzXCIpO1xuICAgICAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZDIsIGZsYWdzKTtcbiAgICB9IGNhdGNoKGUpIHsgIH1cbiAgfVxuICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmbGFncyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIER1bW15IGZpbGVzeXN0ZW1cblxuLy9Qcm92aWRlczogY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKXtcbiAgcmV0dXJuIChuYW1lLnNsaWNlKC0xKSAhPT0gXCIvXCIpID8gKG5hbWUgKyBcIi9cIikgOiBuYW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoLCBmc19ub2RlX3N1cHBvcnRlZFxuaWYoZnNfbm9kZV9zdXBwb3J0ZWQgKCkgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QpXG4gIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZCgpLnJlcGxhY2UoL1xcXFwvZywnLycpO1xuZWxzZVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9ICBcIi9zdGF0aWNcIjtcbmNhbWxfY3VycmVudF9kaXIgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKGNhbWxfY3VycmVudF9kaXIpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9yb290XG4vL1JlcXVpcmVzOiBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBjYW1sX2dldF9yb290KHBhdGgpe1xuICB2YXIgeCA9IHBhdGhfaXNfYWJzb2x1dGUocGF0aCk7XG4gIGlmICgheCkgcmV0dXJuO1xuICByZXR1cm4geFswXSArIFwiL1wifVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Jvb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ2V0X3Jvb3QsIGNhbWxfY3VycmVudF9kaXIsIGNhbWxfZmFpbHdpdGhcbnZhciBjYW1sX3Jvb3QgPSBjYW1sX2dldF9yb290KGNhbWxfY3VycmVudF9kaXIpIHx8IGNhbWxfZmFpbHdpdGgoXCJ1bmFibGUgdG8gY29tcHV0ZSBjYW1sX3Jvb3RcIik7XG5cblxuLy9Qcm92aWRlczogTWxGaWxlXG5mdW5jdGlvbiBNbEZpbGUoKXsgIH1cblxuLy9Qcm92aWRlczogcGF0aF9pc19hYnNvbHV0ZVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpIHtcbiAgZnVuY3Rpb24gcG9zaXgocGF0aCkge1xuICAgIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gJy8nKSByZXR1cm4gW1wiXCIsIHBhdGguc3Vic3RyaW5nKDEpXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3aW4zMihwYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcbiAgICB2YXIgc3BsaXREZXZpY2VSZSA9IC9eKFthLXpBLVpdOnxbXFxcXC9dezJ9W15cXFxcL10rW1xcXFwvXStbXlxcXFwvXSspPyhbXFxcXC9dKT8oW1xcc1xcU10qPykkLztcbiAgICB2YXIgcmVzdWx0ID0gc3BsaXREZXZpY2VSZS5leGVjKHBhdGgpO1xuICAgIHZhciBkZXZpY2UgPSByZXN1bHRbMV0gfHwgJyc7XG4gICAgdmFyIGlzVW5jID0gQm9vbGVhbihkZXZpY2UgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gJzonKTtcblxuICAgIC8vIFVOQyBwYXRocyBhcmUgYWx3YXlzIGFic29sdXRlXG4gICAgaWYgKEJvb2xlYW4ocmVzdWx0WzJdIHx8IGlzVW5jKSkge1xuICAgICAgdmFyIHJvb3QgPSAocmVzdWx0WzFdIHx8ICcnKTtcbiAgICAgIHZhciBzZXAgPSAocmVzdWx0WzJdIHx8ICcnKTtcbiAgICAgIHJldHVybiBbcm9vdCwgcGF0aC5zdWJzdHJpbmcocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKV1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luMzIgOiBwb3NpeDtcbiAgfVxuICBlbHNlIHJldHVybiBwb3NpeFxufVxudmFyIHBhdGhfaXNfYWJzb2x1dGUgPSBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX3BhdGhcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBjYW1sX21ha2VfcGF0aCAobmFtZSkge1xuICBuYW1lPWNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZiggIXBhdGhfaXNfYWJzb2x1dGUobmFtZSkgKVxuICAgIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAwID0gcGF0aF9pc19hYnNvbHV0ZShuYW1lKTtcbiAgdmFyIGNvbXAgPSBjb21wMFsxXS5zcGxpdChcIi9cIik7XG4gIHZhciBuY29tcCA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGk8Y29tcC5sZW5ndGg7IGkrKyl7XG4gICAgc3dpdGNoKGNvbXBbaV0pe1xuICAgIGNhc2UgXCIuLlwiOiBpZihuY29tcC5sZW5ndGg+MSkgbmNvbXAucG9wKCk7IGJyZWFrO1xuICAgIGNhc2UgXCIuXCI6IGJyZWFrO1xuICAgIGNhc2UgXCJcIjogYnJlYWs7XG4gICAgZGVmYXVsdDogbmNvbXAucHVzaChjb21wW2ldKTticmVha1xuICAgIH1cbiAgfVxuICBuY29tcC51bnNoaWZ0KGNvbXAwWzBdKTtcbiAgbmNvbXAub3JpZyA9IG5hbWU7XG4gIHJldHVybiBuY29tcDtcbn1cblxuLy9Qcm92aWRlczpqc29vX21vdW50X3BvaW50XG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIE1sTm9kZURldmljZSwgY2FtbF9yb290LCBmc19ub2RlX3N1cHBvcnRlZFxudmFyIGpzb29fbW91bnRfcG9pbnQgPSBbXVxuaWYgKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOmNhbWxfcm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShjYW1sX3Jvb3QpfSk7XG59IGVsc2Uge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn1cbmpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpcIi9zdGF0aWMvXCIsIGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKFwiL3N0YXRpYy9cIil9KTtcblxuLy9Qcm92aWRlczpjYW1sX2xpc3RfbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGlzdF9tb3VudF9wb2ludCgpe1xuICB2YXIgcHJldiA9IDBcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspe1xuICAgIHZhciBvbGQgPSBwcmV2O1xuICAgIHByZXYgPSBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhqc29vX21vdW50X3BvaW50W2ldLnBhdGgpLCBvbGRdXG4gIH1cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8vUHJvdmlkZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2V0X3Jvb3QsIE1sTm9kZURldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IHBhdGguam9pbihcIi9cIik7XG4gIHZhciBuYW1lX3NsYXNoID0gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKTtcbiAgdmFyIHJlcztcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbSA9IGpzb29fbW91bnRfcG9pbnRbaV07XG4gICAgaWYobmFtZV9zbGFzaC5zZWFyY2gobS5wYXRoKSA9PSAwXG4gICAgICAgJiYgKCFyZXMgfHwgcmVzLnBhdGgubGVuZ3RoIDwgbS5wYXRoLmxlbmd0aCkpXG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICB9XG4gIGlmKCAhcmVzICYmIGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICB2YXIgcm9vdCA9IGNhbWxfZ2V0X3Jvb3QobmFtZSk7XG4gICAgaWYgKHJvb3QgJiYgcm9vdC5tYXRjaCgvXlthLXpBLVpdOlxcLyQvKSl7XG4gICAgICB2YXIgbSA9IHtwYXRoOnJvb3QsZGV2aWNlOm5ldyBNbE5vZGVEZXZpY2Uocm9vdCl9O1xuICAgICAganNvb19tb3VudF9wb2ludC5wdXNoKG0pO1xuICAgICAgcmVzID0ge3BhdGg6bS5wYXRoLGRldmljZTptLmRldmljZSxyZXN0Om5hbWUuc3Vic3RyaW5nKG0ucGF0aC5sZW5ndGgsbmFtZS5sZW5ndGgpfTtcbiAgICB9XG4gIH1cbiAgaWYoIHJlcyApIHJldHVybiByZXM7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwibm8gZGV2aWNlIGZvdW5kIGZvciBcIiArIG5hbWVfc2xhc2gpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vdW50X2F1dG9sb2FkXG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX21vdW50X2F1dG9sb2FkKG5hbWUsZil7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gY2FtbF90cmFpbGluZ19zbGFzaChwYXRoLmpvaW4oXCIvXCIpKTtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOm5hbWUsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UobmFtZSxmKX0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VubW91bnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfbWFrZV9wYXRoLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3VubW91bnQobmFtZSl7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gY2FtbF90cmFpbGluZ19zbGFzaChwYXRoLmpvaW4oXCIvXCIpKTtcbiAgdmFyIGlkeCA9IC0xO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKylcbiAgICBpZihqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT0gbmFtZSkgaWR4ID0gaTtcbiAgaWYoaWR4ID4gLTEpIGpzb29fbW91bnRfcG9pbnQuc3BsaWNlKGlkeCwxKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0Y3dkXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfY3VycmVudF9kaXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jaGRpclxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIGlmKHJvb3QucmVzdCkgY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocm9vdC5wYXRoICsgcm9vdC5yZXN0KTtcbiAgICBlbHNlIGNhbWxfY3VycmVudF9kaXIgPSByb290LnBhdGg7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhkaXIpKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKG5hbWUpe1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9hX2RpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2FfZGlyKG5hbWUpe1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2ZpbGVfZXhpc3RzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfZmlsZV9leGlzdHMgKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfYV9kaXIsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5yZWFkZGlyKHJvb3QucmVzdCk7XG4gIHZhciBsID0gbmV3IEFycmF5KGEubGVuZ3RoICsgMSk7XG4gIGxbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGEubGVuZ3RoO2krKylcbiAgICBsW2krMV0gPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGFbaV0pO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVtb3ZlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlbW92ZShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIG9rID0gcm9vdC5kZXZpY2UudW5saW5rKHJvb3QucmVzdCk7XG4gIGlmKG9rID09IDApIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNfZGlyZWN0b3J5XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNfZGlyZWN0b3J5KG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLmlzX2Rpcihyb290LnJlc3QpO1xuICByZXR1cm4gYT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbmFtZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlbmFtZShvLG4pe1xuICB2YXIgb19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobyk7XG4gIHZhciBuX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuKTtcbiAgaWYob19yb290LmRldmljZSAhPSBuX3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N5c19yZW5hbWU6IGNhbm5vdCBtb3ZlIGZpbGUgYmV0d2VlbiB0d28gZmlsZXN5c3RlbVwiKTtcbiAgaWYoIW9fcm9vdC5kZXZpY2UucmVuYW1lKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N5c19yZW5hbWU6IG5vIGltcGxlbWVudGVkXCIpO1xuICBvX3Jvb3QuZGV2aWNlLnJlbmFtZShvX3Jvb3QucmVzdCwgbl9yb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N5c19ta2RpcihuYW1lLCBwZXJtKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcm9vdC5kZXZpY2UubWtkaXIocm9vdC5yZXN0LHBlcm0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub3RfYV9kaXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3JtZGlyKG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ybWRpcihyb290LnJlc3QpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZSh2ZmQsIGtpbmQsIGxheW91dCwgc2hhcmVkLCBkaW1zLCBwb3MpIHtcbiAgLy8gdmFyIGRhdGEgPSBjYW1sX3N5c19mZHNbdmZkXTtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfYmFfbWFwX2ZpbGUgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX21hcF9maWxlXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlKGFyZ3YsYXJnbil7XG4gIHJldHVybiBjYW1sX2JhX21hcF9maWxlKGFyZ3ZbMF0sYXJndlsxXSxhcmd2WzJdLGFyZ3ZbM10sYXJndls0XSxhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsY29udGVudCl7XG4gIGlmKGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSlcbiAgICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KTtcbiAgZWxzZSB7XG4gICAgaWYoIWdsb2JhbFRoaXMuY2FtbF9mc190bXApIGdsb2JhbFRoaXMuY2FtbF9mc190bXAgPSBbXTtcbiAgICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wLnB1c2goe25hbWU6bmFtZSxjb250ZW50OmNvbnRlbnR9KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mc19pbml0XG4vL1JlcXVpcmVzOiBqc29vX2NyZWF0ZV9maWxlXG5mdW5jdGlvbiBjYW1sX2ZzX2luaXQgKCl7XG4gIHZhciB0bXA9Z2xvYmFsVGhpcy5jYW1sX2ZzX3RtcFxuICBpZih0bXApe1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0bXAubGVuZ3RoOyBpKyspe1xuICAgICAganNvb19jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSx0bXBbaV0uY29udGVudCk7XG4gICAgfVxuICB9XG4gIGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSA9IGpzb29fY3JlYXRlX2ZpbGU7XG4gIGdsb2JhbFRoaXMuY2FtbF9mc190bXAgPSBbXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZighIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKSBjYW1sX2ZhaWx3aXRoKFwiY2Fubm90IHJlZ2lzdGVyIGZpbGVcIik7XG4gIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKHJvb3QucmVzdCxjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfZmlsZSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24ganNvb19jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIG5hbWUgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpO1xuICB2YXIgY29udGVudCA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY29udGVudCk7XG4gIHJldHVybiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVhZF9maWxlX2NvbnRlbnRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVhZF9maWxlX2NvbnRlbnQgKG5hbWUpIHtcbiAgdmFyIG5hbWUgPSAodHlwZW9mIG5hbWUgPT0gXCJzdHJpbmdcIik/Y2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTpuYW1lO1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3Qse3Jkb25seToxfSk7XG4gICAgdmFyIGxlbiAgPSBmaWxlLmxlbmd0aCgpO1xuICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIGZpbGUucmVhZCgwLGJ1ZiwwLGxlbik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGJ1ZilcbiAgfVxuICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5ICgpIHtcbiAgcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF90aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZSAoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKGNhbWxfdW5peF9nZXR0aW1lb2ZkYXkgKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ210aW1lXG4vL0FsaWFzOiB1bml4X2dtdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X2dtdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKERhdGUuVVRDKGQuZ2V0VVRDRnVsbFllYXIoKSwgMCwgMSkpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFVUQ1NlY29uZHMoKSwgZC5nZXRVVENNaW51dGVzKCksIGQuZ2V0VVRDSG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0VVRDRGF0ZSgpLCBkLmdldFVUQ01vbnRoKCksIGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RheSgpLCBkb3ksXG4gICAgICAgICAgICAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8pXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbG9jYWx0aW1lICh0KSB7XG4gIHZhciBkID0gbmV3IERhdGUgKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSAobmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICB2YXIgamFuID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgdmFyIGp1bCA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgNiwgMSk7XG4gIHZhciBzdGRUaW1lem9uZU9mZnNldCA9IE1hdGgubWF4KGphbi5nZXRUaW1lem9uZU9mZnNldCgpLCBqdWwuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFNlY29uZHMoKSwgZC5nZXRNaW51dGVzKCksIGQuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0RGF0ZSgpLCBkLmdldE1vbnRoKCksIGQuZ2V0RnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldERheSgpLCBkb3ksXG4gICAgICAgICAgICAgICAoZC5nZXRUaW1lem9uZU9mZnNldCgpIDwgc3RkVGltZXpvbmVPZmZzZXQpIHwgMCAvKiBkYXlsaWdodCBzYXZpbmdzIHRpbWUgIGZpZWxkLiAqLylcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X21rdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvY2FsdGltZVxuLy9BbGlhczogdW5peF9ta3RpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta3RpbWUodG0pe1xuICB2YXIgZCA9IChuZXcgRGF0ZSh0bVs2XSsxOTAwLHRtWzVdLHRtWzRdLHRtWzNdLHRtWzJdLHRtWzFdKSkuZ2V0VGltZSgpO1xuICB2YXIgdCA9IE1hdGguZmxvb3IoZCAvIDEwMDApO1xuICB2YXIgdG0yID0gY2FtbF91bml4X2xvY2FsdGltZSh0KTtcbiAgcmV0dXJuIEJMT0NLKDAsdCx0bTIpO1xufVxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXJ0dXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9zdGFydHVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbGVhbnVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fY2xlYW51cFxuZnVuY3Rpb24gY2FtbF91bml4X2NsZWFudXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkIGNvbnN0XG4vL0FsaWFzOiB3aW5faGFuZGxlX2ZkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkKHgpIHtyZXR1cm4geDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2lzYXR0eVxuZnVuY3Rpb24gY2FtbF91bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuICAgIHJldHVybiB0dHkuaXNhdHR5KGZpbGVEZXNjcmlwdG9yKT8xOjA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaXNhdHR5XG4vL0FsaWFzOiB1bml4X2lzYXR0eVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF91bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLCBcIkVBQ0NFU1wiLCBcIkVBR0FJTlwiLCBcIkVCQURGXCIsIFwiRUJVU1lcIiwgXCJFQ0hJTERcIiwgXCJFREVBRExLXCIsIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLCBcIkVGQVVMVFwiLCBcIkVGQklHXCIsIFwiRUlOVFJcIiwgXCJFSU5WQUxcIiwgXCJFSU9cIiwgXCJFSVNESVJcIiwgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIiwgXCJFTkFNRVRPT0xPTkdcIiwgXCJFTkZJTEVcIiwgXCJFTk9ERVZcIiwgXCJFTk9FTlRcIiwgXCJFTk9FWEVDXCIsIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsIFwiRU5PU1BDXCIsIFwiRU5PU1lTXCIsIFwiRU5PVERJUlwiLCBcIkVOT1RFTVBUWVwiLCBcIkVOT1RUWVwiLCBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIiwgXCJFUElQRVwiLCBcIkVSQU5HRVwiLCBcIkVST0ZTXCIsIFwiRVNQSVBFXCIsIFwiRVNSQ0hcIiwgXCJFWERFVlwiLCBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIiwgXCJFQUxSRUFEWVwiLCBcIkVOT1RTT0NLXCIsIFwiRURFU1RBRERSUkVRXCIsIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsIFwiRU5PUFJPVE9PUFRcIiwgXCJFUFJPVE9OT1NVUFBPUlRcIiwgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsIFwiRVBGTk9TVVBQT1JUXCIsIFwiRUFGTk9TVVBQT1JUXCIsIFwiRUFERFJJTlVTRVwiLCBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLCBcIkVORVRVTlJFQUNIXCIsIFwiRU5FVFJFU0VUXCIsIFwiRUNPTk5BQk9SVEVEXCIsIFwiRUNPTk5SRVNFVFwiLCBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsIFwiRU5PVENPTk5cIiwgXCJFU0hVVERPV05cIiwgXCJFVE9PTUFOWVJFRlNcIiwgXCJFVElNRURPVVRcIiwgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIiwgXCJFSE9TVFVOUkVBQ0hcIiwgXCJFTE9PUFwiLCBcIkVPVkVSRkxPV1wiXG5dO1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5XG4gICAgfVxuICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIHZhcmlhbnRzLCBmYWxsYmFjayB0byBFVU5LTk9XTkVSUihpbnQpXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIGVycm5vKTtcbiAgfVxuICB2YXIgYXJncyA9IFtcbiAgICB2YXJpYW50LFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHN5c2NhbGwgfHwgXCJcIiksXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aCB8fCBcIlwiKVxuICBdO1xuICByZXR1cm4gYXJncztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3N0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnN0YXQocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X3N0YXQsIGNhbWxfaW50NjRfb2ZfaW50MzJcbi8vQWxpYXM6IHVuaXhfc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXRfNjQobmFtZSkge1xuICB2YXIgciA9IGNhbWxfdW5peF9zdGF0KG5hbWUpO1xuICByWzldID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihyWzldKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xzdGF0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbHN0YXQsIGNhbWxfaW50NjRfb2ZfaW50MzJcbi8vQWxpYXM6IHVuaXhfbHN0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdF82NChuYW1lKSB7XG4gIHZhciByID0gY2FtbF91bml4X2xzdGF0KG5hbWUpO1xuICByWzldID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihyWzldKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbWtkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ybWRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3ltbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3ltbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3N5bWxpbmsodG9fZGlyLCBzcmMsIGRzdCkge1xuICB2YXIgc3JjX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShzcmMpO1xuICB2YXIgZHN0X3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkc3QpO1xuICBpZihzcmNfcm9vdC5kZXZpY2UgIT0gZHN0X3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3ltbGluazogY2Fubm90IHN5bWxpbmsgYmV0d2VlbiB0d28gZmlsZXN5c3RlbXNcIik7XG4gIGlmICghc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmsodG9fZGlyLCBzcmNfcm9vdC5yZXN0LCBkc3Rfcm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3JlYWRsaW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZGxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnJlYWRsaW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9yZWFkbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5yZWFkbGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF91bmxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3VubGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3VubGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudW5saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF91bmxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UudW5saW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHVpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0dWlkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dWlkKHVuaXQpIHtcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQpe1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKCk7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHB3dWlkXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9BbGlhczogdW5peF9nZXRwd3VpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldHB3dWlkKHVuaXQpIHtcbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2hhc19zeW1saW5rXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9BbGlhczogdW5peF9oYXNfc3ltbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X2hhc19zeW1saW5rKHVuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCk/MTowXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9vcGVuZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9vcGVuZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfb3BlbmRpcihwYXRoKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UocGF0aCk7XG4gIGlmICghcm9vdC5kZXZpY2Uub3BlbmRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfb3BlbmRpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHZhciBkaXJfaGFuZGxlID0gcm9vdC5kZXZpY2Uub3BlbmRpcihyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiB7IHBvaW50ZXIgOiBkaXJfaGFuZGxlLCBwYXRoOiBwYXRoIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRkaXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL0FsaWFzOiB1bml4X3JlYWRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpIHtcbiAgdmFyIGVudHJ5O1xuICB0cnkge1xuICAgICAgZW50cnkgPSBkaXJfaGFuZGxlLnBvaW50ZXIucmVhZFN5bmMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwicmVhZGRpclwiLCBkaXJfaGFuZGxlLnBhdGgpKTtcbiAgfVxuICBpZiAoZW50cnkgPT09IG51bGwpIHtcbiAgICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhlbnRyeS5uYW1lKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xvc2VkaXJcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vQWxpYXM6IHVuaXhfY2xvc2VkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKSB7XG4gIHRyeSB7XG4gICAgICBkaXJfaGFuZGxlLnBvaW50ZXIuY2xvc2VTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIGRpcl9oYW5kbGUucGF0aCkpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZXdpbmRkaXJcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpciwgY2FtbF91bml4X29wZW5kaXJcbi8vQWxpYXM6IHVuaXhfcmV3aW5kZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmV3aW5kZGlyKGRpcl9oYW5kbGUpIHtcbiAgY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpO1xuICB2YXIgbmV3X2Rpcl9oYW5kbGUgPSBjYW1sX3VuaXhfb3BlbmRpcihkaXJfaGFuZGxlLnBhdGgpO1xuICBkaXJfaGFuZGxlLnBvaW50ZXIgPSBuZXdfZGlyX2hhbmRsZS5wb2ludGVyO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRmaXJzdFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfb3BlbmRpciwgY2FtbF91bml4X3JlYWRkaXJcbi8vQWxpYXM6IHdpbl9maW5kZmlyc3RcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kZmlyc3QocGF0aCkge1xuICAvLyBUaGUgV2luZG93cyBjb2RlIGFkZHMgdGhpcyBnbG9iIHRvIHRoZSBwYXRoLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdFxuICB2YXIgcGF0aF9qcyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHBhdGgpO1xuICBwYXRoX2pzID0gcGF0aF9qcy5yZXBsYWNlKC8oXnxbXFxcXFxcL10pXFwqXFwuXFwqJC8sIFwiXCIpO1xuICBwYXRoID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aF9qcyk7XG4gIC8vICouKiBpcyBub3cgc3RyaXBwZWRcbiAgdmFyIGRpcl9oYW5kbGUgPSBjYW1sX3VuaXhfb3BlbmRpcihwYXRoKTtcbiAgdmFyIGZpcnN0X2VudHJ5ID0gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG4gIC8vIFRoZSBXaW5kb3dzIGJpbmRpbmdzIHR5cGUgZGlyX2hhbmRsZSBhcyBhbiBgaW50YCBidXQgaXQncyBub3QgaW4gSlNcbiAgcmV0dXJuIFswLCBmaXJzdF9lbnRyeSwgZGlyX2hhbmRsZV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kbmV4dFxuLy9SZXF1aXJlczogY2FtbF91bml4X3JlYWRkaXJcbi8vQWxpYXM6IHdpbl9maW5kbmV4dFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRuZXh0KGRpcl9oYW5kbGUpIHtcbiAgcmV0dXJuIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZGNsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXJcbi8vQWxpYXM6IHdpbl9maW5kY2xvc2VcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kY2xvc2UoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIGNvbnN0XG4vL0FsaWFzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nICgpIHtyZXR1cm4gMDt9XG5cblxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBNbEZha2VGZCwgY2FtbF9jcmVhdGVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXksIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZXNcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJnc1xuZnVuY3Rpb24gTWxGYWtlRGV2aWNlIChyb290LCBmKSB7XG4gIHRoaXMuY29udGVudD17fTtcbiAgdGhpcy5yb290ID0gcm9vdDtcbiAgdGhpcy5sb29rdXBGdW4gPSBmO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuY3JlYXRlX2Rpcl9pZl9uZWVkZWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjb21wID0gbmFtZS5zcGxpdChcIi9cIik7XG4gIHZhciByZXMgPSBcIlwiO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgY29tcC5sZW5ndGggLSAxOyBpKyspe1xuICAgIHJlcyArPSBjb21wW2ldICsgXCIvXCI7XG4gICAgaWYodGhpcy5jb250ZW50W3Jlc10pIGNvbnRpbnVlO1xuICAgIHRoaXMuY29udGVudFtyZXNdID0gU3ltYm9sKFwiZGlyZWN0b3J5XCIpO1xuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnNsYXNoID0gZnVuY3Rpb24obmFtZSl7XG4gIHJldHVybiAvXFwvJC8udGVzdChuYW1lKT9uYW1lOihuYW1lICsgXCIvXCIpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5sb29rdXAgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKCF0aGlzLmNvbnRlbnRbbmFtZV0gJiYgdGhpcy5sb29rdXBGdW4pIHtcbiAgICB2YXIgcmVzID0gdGhpcy5sb29rdXBGdW4oY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnJvb3QpLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpKTtcbiAgICBpZihyZXMgIT09IDApIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV09bmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcocmVzWzFdKSk7XG4gICAgfVxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgLy8gVGhlIHJvb3Qgb2YgdGhlIGRldmljZSBleGlzdHNcbiAgaWYobmFtZSA9PSBcIlwiKSByZXR1cm4gMTtcbiAgLy8gQ2hlY2sgaWYgYSBkaXJlY3RvcnkgZXhpc3RzXG4gIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVfc2xhc2hdKSByZXR1cm4gMTtcbiAgLy8gQ2hlY2sgaWYgYSBmaWxlIGV4aXN0c1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lXT8xOjA7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYodGhpcy5leGlzdHMobmFtZSkgJiYgIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm1rZGlyID0gZnVuY3Rpb24obmFtZSxtb2RlLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgaWYodGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUVYSVNUXCIsIFwibWtkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogRmlsZSBleGlzdHNcIik7XG4gICAgfVxuICB9XG4gIHZhciBwYXJlbnQgPSAvXiguKilcXC9bXi9dKy8uZXhlYyhuYW1lKTtcbiAgcGFyZW50ID0gKHBhcmVudCAmJiBwYXJlbnRbMV0pIHx8ICcnO1xuICBpZighdGhpcy5leGlzdHMocGFyZW50KSl7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT0VOVFwiLCBcIm1rZGlyXCIsIHRoaXMubm0ocGFyZW50KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHBhcmVudCArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBpZighdGhpcy5pc19kaXIocGFyZW50KSl7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RESVJcIiwgXCJta2RpclwiLCB0aGlzLm5tKHBhcmVudCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihwYXJlbnQgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKHRoaXMuc2xhc2gobmFtZSkpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ybWRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICB2YXIgbmFtZV9zbGFzaCA9IChuYW1lID09IFwiXCIpP1wiXCI6KHRoaXMuc2xhc2gobmFtZSkpO1xuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSspXCIpO1xuICBpZighdGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PRU5UXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RESVJcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICBpZihuLm1hdGNoKHIpKSB7XG4gICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URU1QVFlcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCI6IERpcmVjdG9yeSBub3QgZW1wdHlcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF07XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJlYWRkaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBuYW1lX3NsYXNoID0gKG5hbWUgPT0gXCJcIik/XCJcIjoodGhpcy5zbGFzaChuYW1lKSk7XG4gIGlmKCF0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgfVxuICBpZighdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgfVxuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSspXCIpO1xuICB2YXIgc2VlbiA9IHt9XG4gIHZhciBhID0gW107XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICB2YXIgbSA9IG4ubWF0Y2gocik7XG4gICAgaWYobSAmJiAhc2VlblttWzFdXSkge3NlZW5bbVsxXV0gPSB0cnVlOyBhLnB1c2gobVsxXSl9XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW5kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcblxuICB2YXIgYSA9IHRoaXMucmVhZGRpcihuYW1lKTtcbiAgdmFyIGMgPSBmYWxzZTtcbiAgdmFyIGkgPSAwO1xuICByZXR1cm4geyByZWFkU3luYyA6IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGMpIHtcbiAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogY2xvc2VkaXIgZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZihpID09IGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgZW50cnkgPSBhW2ldO1xuICAgIGkrKztcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeSB9XG4gIH0pXG4gICAgLCBjbG9zZVN5bmM6IChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoYykge1xuICAgICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogY2xvc2VkaXIgZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjID0gdHJ1ZTtcbiAgICAgIGEgPSBbXTtcbiAgICB9KVxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzX2RpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYobmFtZSA9PSBcIlwiKSAgcmV0dXJuIHRydWU7XG4gIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXT8xOjA7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG9rID0gdGhpcy5jb250ZW50W25hbWVdP3RydWU6ZmFsc2U7XG4gIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIHJldHVybiBvaztcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYpIHtcbiAgdmFyIGZpbGU7XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGlzIGEgZGlyZWN0b3J5XCIpO1xuICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICBpZihmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKCk7XG4gIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlICh0aGlzLm5tKG5hbWUpKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sRmFrZUZkKHRoaXMubm0obmFtZSksIGZpbGUsIGYpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG4gIHZhciBmaWxlO1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gICAgaWYoZi50cnVuY2F0ZSkgZmlsZS50cnVuY2F0ZSgpO1xuICB9IGVsc2UgaWYgKGYuY3JlYXRlKSB7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSAodGhpcy5ubShuYW1lKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWdpc3Rlcj0gZnVuY3Rpb24gKG5hbWUsY29udGVudCl7XG4gIHZhciBmaWxlO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV0pIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gIGlmKGNhbWxfaXNfbWxfYnl0ZXMoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNvbnRlbnQpO1xuICBpZihjYW1sX2lzX21sX3N0cmluZyhjb250ZW50KSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9hcnJheShjb250ZW50KSk7XG4gIGVsc2UgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudC50b1N0cmluZykge1xuICAgIHZhciBieXRlcyA9IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSkpO1xuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShieXRlcyk7XG4gIH1cbiAgaWYoZmlsZSl7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICB9XG4gIGVsc2UgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogcmVnaXN0ZXJpbmcgZmlsZSB3aXRoIGludmFsaWQgY29udGVudCB0eXBlXCIpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IE1sRmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbmZ1bmN0aW9uIE1sRmFrZUZpbGUoY29udGVudCl7XG4gIHRoaXMuZGF0YSA9IGNvbnRlbnQ7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZSA9IG5ldyBNbEZpbGUgKCk7XG5NbEZha2VGaWxlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZUZpbGVcbk1sRmFrZUZpbGUucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdmFyIG9sZCA9IHRoaXMuZGF0YTtcbiAgdGhpcy5kYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICBjYW1sX2JsaXRfYnl0ZXMob2xkLCAwLCB0aGlzLmRhdGEsIDAsIGxlbik7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aCh0aGlzLmRhdGEpO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgdmFyIG5ld19zdHIgPSBjYW1sX2NyZWF0ZV9ieXRlcyhvZmZzZXQgKyBsZW4pO1xuICAgIHZhciBvbGRfZGF0YSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGRfZGF0YSwgMCwgdGhpcy5kYXRhLCAwLCBjbGVuKTtcbiAgfVxuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBwb3MsIHRoaXMuZGF0YSwgb2Zmc2V0LCBsZW4pO1xuICByZXR1cm4gMFxufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKG9mZnNldCxidWYscG9zLGxlbil7XG4gIHZhciBjbGVuID0gdGhpcy5sZW5ndGgoKTtcbiAgaWYob2Zmc2V0ICsgbGVuID49IGNsZW4pIHtcbiAgICBsZW4gPSBjbGVuIC0gb2Zmc2V0O1xuICB9XG4gIGlmKGxlbikge1xuICAgIHZhciBkYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICAgIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgZGF0YSwgMCwgbGVuKTtcbiAgICBidWYuc2V0KGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoZGF0YSksIHBvcyk7XG4gIH1cbiAgcmV0dXJuIGxlblxufVxuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sRmFrZUZkX291dChmZCxmbGFncykge1xuICBNbEZha2VGaWxlLmNhbGwodGhpcywgY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICB0aGlzLmxvZyA9IChmdW5jdGlvbiAocykgeyByZXR1cm4gMCB9KTtcbiAgaWYoZmQgPT0gMSAmJiB0eXBlb2YgY29uc29sZS5sb2cgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5sb2c7XG4gIGVsc2UgaWYoZmQgPT0gMiAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmVycm9yO1xuICBlbHNlIGlmKHR5cGVvZiBjb25zb2xlLmxvZyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmxvZ1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMCB9XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKG9mZnNldCxidWYscG9zLGxlbikge1xuICBpZih0aGlzLmxvZykge1xuICAgIGlmKGxlbiA+IDBcbiAgICAgICAmJiBwb3MgPj0gMFxuICAgICAgICYmIHBvcytsZW4gPD0gYnVmLmxlbmd0aFxuICAgICAgICYmIGJ1Zltwb3MrbGVuLTFdID09IDEwKVxuICAgICAgbGVuIC0tO1xuICAgIC8vIERvIG5vdCBvdXRwdXQgdGhlIGxhc3QgXFxuIGlmIHByZXNlbnRcbiAgICAvLyBhcyBjb25zb2xlIGxvZ2dpbmcgZGlzcGxheSBhIG5ld2xpbmUgYXQgdGhlIGVuZFxuICAgIHZhciBzcmMgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIHBvcywgc3JjLCAwLCBsZW4pO1xuICAgIHRoaXMubG9nKHNyYy50b1V0ZjE2KCkpO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMuZmQgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBhbHJlYWR5IGNsb3NlZFwiKTtcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5mZCAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGlzIHdyaXRlIG9ubHlcIik7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxvZyA9IHVuZGVmaW5lZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGZFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sRmFrZUZkKG5hbWUsIGZpbGUsZmxhZ3MpIHtcbiAgdGhpcy5maWxlID0gZmlsZTtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuXG5NbEZha2VGZC5wcm90b3R5cGUuZXJyX2Nsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5uYW1lICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgYWxyZWFkeSBjbG9zZWRcIik7XG59XG5NbEZha2VGZC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5sZW5ndGggKClcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAob2Zmc2V0LGJ1Zixwb3MsbGVuKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS53cml0ZShvZmZzZXQsYnVmLHBvcyxsZW4pXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAob2Zmc2V0LCBidWYsIHBvcywgbGVuKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5yZWFkKG9mZnNldCwgYnVmLCBwb3MsIGxlbilcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZmlsZSA9IHVuZGVmaW5lZDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKHMuY2hhckNvZGVBdCgyICogaSkgfCAocy5jaGFyQ29kZUF0KDIgKiBpICsgMSkgPDwgOCkpIDw8IDE2ID4+IDE2O1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheSwgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSByZXR1cm4gLWJhc2UtMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKXtcbiAgICAgIGlmIChsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9PSAwKVxuICAgICAgICByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2VcbiAgICAgICAgYyA9IDI1NjtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIFJlYWQgbmV4dCBpbnB1dCBjaGFyICovXG4gICAgICBjID0gYnVmZmVyW2xleGJ1ZltsZXhfY3Vycl9wb3NdXTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdICsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qIE5ldyBsZXhlciBlbmdpbmUsIHdpdGggbWVtb3J5IG9mIHBvc2l0aW9ucyAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl9tZW0ocywgaSwgbWVtLCBjdXJyX3Bvcykge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChkc3QgPT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gY3Vycl9wb3M7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9sZXhfcnVuX3RhZyhzLCBpLCBtZW0pIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybiA7XG4gICAgdmFyIHNyYyA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChzcmMgPT0gMHhmZilcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSAtMTtcbiAgICBlbHNlXG4gICAgICBtZW0gW2RzdCArIDFdID0gbWVtIFtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX25ld19sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfbWVtID0gMTA7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcbiAgdmFyIGxleF9iYXNlX2NvZGUgPSA2O1xuICB2YXIgbGV4X2JhY2t0cmtfY29kZSA9IDc7XG4gIHZhciBsZXhfZGVmYXVsdF9jb2RlID0gODtcbiAgdmFyIGxleF90cmFuc19jb2RlID0gOTtcbiAgdmFyIGxleF9jaGVja19jb2RlID0gMTA7XG4gIHZhciBsZXhfY29kZSA9IDExO1xuXG4gIGlmICghdGJsLmxleF9kZWZhdWx0KSB7XG4gICAgdGJsLmxleF9iYXNlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV0pO1xuICAgIHRibC5sZXhfYmFja3RyayA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF0pO1xuICB9XG4gIGlmICghdGJsLmxleF9kZWZhdWx0X2NvZGUpIHtcbiAgICB0YmwubGV4X2Jhc2VfY29kZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VfY29kZV0pO1xuICAgIHRibC5sZXhfYmFja3Rya19jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0X2NvZGVdKTtcbiAgfVxuICBpZiAodGJsLmxleF9jb2RlID09IG51bGwpIHRibC5sZXhfY29kZSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcodGJsW2xleF9jb2RlXSk7XG5cbiAgdmFyIGMsIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMobGV4YnVmW2xleF9idWZmZXJdKTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvcig7Oykge1xuICAgIC8qIExvb2t1cCBiYXNlIGFkZHJlc3Mgb3IgYWN0aW9uIG51bWJlciBmb3IgY3VycmVudCBzdGF0ZSAqL1xuICAgIHZhciBiYXNlID0gdGJsLmxleF9iYXNlW3N0YXRlXTtcbiAgICBpZiAoYmFzZSA8IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2Jhc2VfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgcmV0dXJuIC1iYXNlLTE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICB2YXIgcHN0YXRlID0gc3RhdGUgO1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSwgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PSBwc3RhdGUpXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfdHJhbnNfY29kZVtiYXNlX2NvZGUgKyBjXTtcbiAgICAgIGVsc2VcbiAgICAgICAgcGNfb2ZmID0gdGJsLmxleF9kZWZhdWx0X2NvZGVbcHN0YXRlXTtcbiAgICAgIGlmIChwY19vZmYgPiAwKVxuICAgICAgICBjYW1sX2xleF9ydW5fbWVtXG4gICAgICAodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSwgbGV4YnVmW2xleF9jdXJyX3Bvc10pO1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfY2hhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUsIGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1SW5pdCwgY2FtbF9NRDVVcGRhdGUsIGNhbWxfTUQ1RmluYWxcbmZ1bmN0aW9uIGNhbWxfbWQ1X2NoYW4oY2hhbmlkLHRvcmVhZCl7XG4gIHZhciBjdHggPSBjYW1sX01ENUluaXQoKTtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDQwOTYpO1xuICBpZih0b3JlYWQgPCAwKXtcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsYnVmZmVyLDAsYnVmZmVyLmxlbmd0aCk7XG4gICAgICBpZihyZWFkID09IDApIGJyZWFrO1xuICAgICAgY2FtbF9NRDVVcGRhdGUoY3R4LGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlKHRvcmVhZCA+IDApIHtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsYnVmZmVyLDAsICh0b3JlYWQgPiBidWZmZXIubGVuZ3RoID8gYnVmZmVyLmxlbmd0aCA6IHRvcmVhZCkpO1xuICAgICAgaWYocmVhZCA9PSAwKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICAgIHRvcmVhZCAtPSByZWFkXG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShjYW1sX01ENUZpbmFsKGN0eCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX21kNV9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tZDVfc3RyaW5nKHMsIG9mcywgbGVuKSB7XG4gIHJldHVybiBjYW1sX21kNV9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhzKSxvZnMsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVUcmFuc2Zvcm1cbnZhciBjYW1sX01ENVRyYW5zZm9ybSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGFkZCAoeCwgeSkgeyByZXR1cm4gKHggKyB5KSB8IDA7IH1cbiAgZnVuY3Rpb24geHgocSxhLGIseCxzLHQpIHtcbiAgICBhID0gYWRkKGFkZChhLCBxKSwgYWRkKHgsIHQpKTtcbiAgICByZXR1cm4gYWRkKChhIDw8IHMpIHwgKGEgPj4+ICgzMiAtIHMpKSwgYik7XG4gIH1cbiAgZnVuY3Rpb24gZmYoYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gZ2coYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGQpIHwgKGMgJiAofmQpKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTsgfVxuICBmdW5jdGlvbiBpaShhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdCk7IH1cblxuICByZXR1cm4gZnVuY3Rpb24gKHcsIGJ1ZmZlcikge1xuICAgIHZhciBhID0gd1swXSwgYiA9IHdbMV0sIGMgPSB3WzJdLCBkID0gd1szXTtcblxuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDBdLCA3LCAweEQ3NkFBNDc4KTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyAxXSwgMTIsIDB4RThDN0I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbIDJdLCAxNywgMHgyNDIwNzBEQik7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsgM10sIDIyLCAweEMxQkRDRUVFKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyA0XSwgNywgMHhGNTdDMEZBRik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNV0sIDEyLCAweDQ3ODdDNjJBKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWyA2XSwgMTcsIDB4QTgzMDQ2MTMpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbIDddLCAyMiwgMHhGRDQ2OTUwMSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOF0sIDcsIDB4Njk4MDk4RDgpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDldLCAxMiwgMHg4QjQ0RjdBRik7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMF0sIDE3LCAweEZGRkY1QkIxKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzExXSwgMjIsIDB4ODk1Q0Q3QkUpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbMTJdLCA3LCAweDZCOTAxMTIyKTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWzEzXSwgMTIsIDB4RkQ5ODcxOTMpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTRdLCAxNywgMHhBNjc5NDM4RSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNV0sIDIyLCAweDQ5QjQwODIxKTtcblxuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDFdLCA1LCAweEY2MUUyNTYyKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWyA2XSwgOSwgMHhDMDQwQjM0MCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMV0sIDE0LCAweDI2NUU1QTUxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyAwXSwgMjAsIDB4RTlCNkM3QUEpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDVdLCA1LCAweEQ2MkYxMDVEKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzEwXSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE0LCAweEQ4QTFFNjgxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyA0XSwgMjAsIDB4RTdEM0ZCQzgpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDldLCA1LCAweDIxRTFDREU2KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzE0XSwgOSwgMHhDMzM3MDdENik7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsgM10sIDE0LCAweEY0RDUwRDg3KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyA4XSwgMjAsIDB4NDU1QTE0RUQpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbMTNdLCA1LCAweEE5RTNFOTA1KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWyAyXSwgOSwgMHhGQ0VGQTNGOCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsgN10sIDE0LCAweDY3NkYwMkQ5KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzEyXSwgMjAsIDB4OEQyQTRDOEEpO1xuXG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNV0sIDQsIDB4RkZGQTM5NDIpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDhdLCAxMSwgMHg4NzcxRjY4MSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMV0sIDE2LCAweDZEOUQ2MTIyKTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzE0XSwgMjMsIDB4RkRFNTM4MEMpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDFdLCA0LCAweEE0QkVFQTQ0KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyA0XSwgMTEsIDB4NEJERUNGQTkpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbIDddLCAxNiwgMHhGNkJCNEI2MCk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMF0sIDIzLCAweEJFQkZCQzcwKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWzEzXSwgNCwgMHgyODlCN0VDNik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMF0sIDExLCAweEVBQTEyN0ZBKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWyAzXSwgMTYsIDB4RDRFRjMwODUpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbIDZdLCAyMywgMHgwNDg4MUQwNSk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOV0sIDQsIDB4RDlENEQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMTJdLCAxMSwgMHhFNkRCOTlFNSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE2LCAweDFGQTI3Q0Y4KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWyAyXSwgMjMsIDB4QzRBQzU2NjUpO1xuXG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMF0sIDYsIDB4RjQyOTIyNDQpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbIDddLCAxMCwgMHg0MzJBRkY5Nyk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE1LCAweEFCOTQyM0E3KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyA1XSwgMjEsIDB4RkM5M0EwMzkpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbMTJdLCA2LCAweDY1NUI1OUMzKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWyAzXSwgMTAsIDB4OEYwQ0NDOTIpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNSwgMHhGRkVGRjQ3RCk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMV0sIDIxLCAweDg1ODQ1REQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyA4XSwgNiwgMHg2RkE4N0U0Rik7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNV0sIDEwLCAweEZFMkNFNkUwKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWyA2XSwgMTUsIDB4QTMwMTQzMTQpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbMTNdLCAyMSwgMHg0RTA4MTFBMSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNF0sIDYsIDB4Rjc1MzdFODIpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTFdLCAxMCwgMHhCRDNBRjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsgMl0sIDE1LCAweDJBRDdEMkJCKTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyA5XSwgMjEsIDB4RUI4NkQzOTEpO1xuXG4gICAgd1swXSA9IGFkZChhLCB3WzBdKTtcbiAgICB3WzFdID0gYWRkKGIsIHdbMV0pO1xuICAgIHdbMl0gPSBhZGQoYywgd1syXSk7XG4gICAgd1szXSA9IGFkZChkLCB3WzNdKTtcbiAgfX0pKClcblxuLy9Qcm92aWRlczogY2FtbF9NRDVJbml0XG5mdW5jdGlvbiBjYW1sX01ENUluaXQoKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoNjQpO1xuICB2YXIgYjMyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gIHZhciBiOCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gIHJldHVybiB7bGVuOjAsXG4gICAgICAgICAgdzpuZXcgVWludDMyQXJyYXkoWzB4Njc0NTIzMDEsIDB4RUZDREFCODksIDB4OThCQURDRkUsIDB4MTAzMjU0NzZdKSxcbiAgICAgICAgICBiMzI6YjMyLFxuICAgICAgICAgIGI4OmI4fVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVVwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1VXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0X2xlbil7XG4gIHZhciBpbl9idWYgPSBjdHgubGVuICYgMHgzZjtcbiAgdmFyIGlucHV0X3BvcyA9IDA7XG4gIGN0eC5sZW4gKz0gaW5wdXRfbGVuO1xuICBpZihpbl9idWYpe1xuICAgIHZhciBtaXNzaW5nID0gNjQgLSBpbl9idWY7XG4gICAgaWYoaW5wdXRfbGVuIDwgbWlzc2luZykge1xuICAgICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLGlucHV0X2xlbiksaW5fYnVmKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KDAsbWlzc2luZyksaW5fYnVmKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IG1pc3Npbmc7XG4gICAgaW5wdXRfcG9zICs9IG1pc3Npbmc7XG4gIH1cbiAgd2hpbGUoaW5wdXRfbGVuID49IDY0KXtcbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KGlucHV0X3BvcyxpbnB1dF9wb3MgKyA2NCksIDApO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gNjQ7XG4gICAgaW5wdXRfcG9zICs9IDY0O1xuICB9XG4gIGlmKGlucHV0X2xlbilcbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KGlucHV0X3BvcyxpbnB1dF9wb3MgKyBpbnB1dF9sZW4pLCAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVGaW5hbFxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1RmluYWwoY3R4KXtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICBjdHguYjhbaW5fYnVmXSA9IDB4ODA7XG4gIGluX2J1ZiArKztcbiAgaWYoaW5fYnVmID4gNTYpIHtcbiAgICBmb3IodmFyIGogPSBpbl9idWY7IGogPCA2NDsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgNTY7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IodmFyIGogPSBpbl9idWY7IGogPCA1NjsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9XG4gIGN0eC5iMzJbMTRdID0gY3R4LmxlbiA8PCAzO1xuICBjdHguYjMyWzE1XSA9IChjdHgubGVuID4+IDI5KSAmIDB4MUZGRkZGRkY7XG4gIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKVxuICAgICAgdFtpICogNCArIGpdID0gKGN0eC53W2ldID4+ICg4ICogaikpICYgMHhGRjtcbiAgcmV0dXJuIHQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9ieXRlcyhzLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKTtcbiAgY2FtbF9NRDVVcGRhdGUoY3R4LGEuc3ViYXJyYXkob2ZzLCBvZnMgKyBsZW4pLCBsZW4pO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoY2FtbF9NRDVGaW5hbChjdHgpKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSW9cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZmRzXG52YXIgY2FtbF9zeXNfZmRzID0gbmV3IEFycmF5KDMpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jbG9zZVxuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG5mdW5jdGlvbiBjYW1sX3N5c19jbG9zZShmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUpIGZpbGUuY2xvc2UoKTtcbiAgZGVsZXRlIGNhbWxfc3lzX2Zkc1tmZF07XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBNbEZha2VGZF9vdXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUsaWR4KSB7XG4gIGlmKGlkeCA9PSB1bmRlZmluZWQpe1xuICAgIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gIH1cbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSBmaWxlO1xuICByZXR1cm4gaWR4IHwgMDtcbn1cbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW4gKG5hbWUsIGZsYWdzLCBfcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUoZmxhZ3Mpe1xuICAgIHN3aXRjaChmbGFnc1sxXSl7XG4gICAgY2FzZSAwOiBmLnJkb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAxOiBmLndyb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAyOiBmLmFwcGVuZCA9IDE7YnJlYWs7XG4gICAgY2FzZSAzOiBmLmNyZWF0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA0OiBmLnRydW5jYXRlID0gMTticmVhaztcbiAgICBjYXNlIDU6IGYuZXhjbCA9IDE7IGJyZWFrO1xuICAgIGNhc2UgNjogZi5iaW5hcnkgPSAxO2JyZWFrO1xuICAgIGNhc2UgNzogZi50ZXh0ID0gMTticmVhaztcbiAgICBjYXNlIDg6IGYubm9uYmxvY2sgPSAxO2JyZWFrO1xuICAgIH1cbiAgICBmbGFncz1mbGFnc1syXTtcbiAgfVxuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3QsZik7XG4gIHJldHVybiBjYW1sX3N5c19vcGVuX2ludGVybmFsIChmaWxlLCB1bmRlZmluZWQpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZmlsZShmZCwgZmxhZ3MpIHtcbiAgICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm4gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICByZXR1cm4gbmV3IE1sRmFrZUZkX291dChmZCwgZmxhZ3MpXG4gIH1cbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDAse3Jkb25seToxLGFsdG5hbWU6XCIvZGV2L3N0ZGluXCIsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAwKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDEse2J1ZmZlcmVkOjIsd3Jvbmx5OjEsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAxKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDIse2J1ZmZlcmVkOjIsd3Jvbmx5OjEsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAyKTtcbn0pKClcblxuXG4vLyBvY2FtbCBDaGFubmVsc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZShjaGFuaWQsIG5hbWUpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGNoYW4ubmFtZSA9IG5hbWU7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxzXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBBcnJheSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dF9jaGFubmVsc19saXN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX291dF9jaGFubmVsc19saXN0ICgpIHtcbiAgdmFyIGwgPSAwO1xuICBmb3IodmFyIGMgPSAwOyBjIDwgY2FtbF9tbF9jaGFubmVscy5sZW5ndGg7IGMrKyl7XG4gICAgaWYoY2FtbF9tbF9jaGFubmVsc1tjXSAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm9wZW5lZCAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm91dClcbiAgICAgIGw9WzAsY2FtbF9tbF9jaGFubmVsc1tjXS5mZCxsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX29wZW5cbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCAoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlLmZsYWdzLnJkb25seSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIisgZmQgKyBcIiBpcyByZWFkb25seVwiKTtcbiAgdmFyIGJ1ZmZlcmVkID0gKGZpbGUuZmxhZ3MuYnVmZmVyZWQgIT09IHVuZGVmaW5lZCkgPyBmaWxlLmZsYWdzLmJ1ZmZlcmVkIDogMTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpmaWxlLFxuICAgIG9mZnNldDpmaWxlLmZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjAsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OnRydWUsXG4gICAgYnVmZmVyX2N1cnI6MCxcbiAgICBidWZmZXI6bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFxuICAgIGJ1ZmZlcmVkOmJ1ZmZlcmVkXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiAoZmQpICB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZS5mbGFncy53cm9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgd3JpdGVvbmx5XCIpO1xuICB2YXIgcmVmaWxsID0gbnVsbDtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpmaWxlLFxuICAgIG9mZnNldDpmaWxlLmZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjAsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICBidWZmZXJfY3VycjowLFxuICAgIGJ1ZmZlcl9tYXg6MCxcbiAgICBidWZmZXI6bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFxuICAgIHJlZmlsbDpyZWZpbGxcbiAgfTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFubmVsLmZkXT1jaGFubmVsO1xuICByZXR1cm4gY2hhbm5lbC5mZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbl93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3MoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luKGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0X3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzKGZkLCBmbGFncyl7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQoZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuLy9BbGlhczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG5mdW5jdGlvbiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvcihjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgcmV0dXJuIGNoYW4uZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZShjaGFuaWQsbW9kZSl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjaGFuLmZpbGUuZmxhZ3MudGV4dCA9ICFtb2RlXG4gIGNoYW4uZmlsZS5mbGFncy5iaW5hcnkgPSBtb2RlXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9pc19iaW5hcnlfbW9kZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2VcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZihjaGFuLm9wZW5lZCkge1xuICAgIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gICAgY2FtbF9zeXNfY2xvc2UoY2hhbi5mZCk7XG4gICAgY2hhbi5mZCA9IC0xO1xuICAgIGNoYW4uYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5sZW5ndGgoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemVfNjQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjaGFuLmZpbGUubGVuZ3RoICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0KGNoYW5pZCxmKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjaGFuLm91dHB1dCA9IChmdW5jdGlvbiAocykge2Yocyl9KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbChjaGFuaWQsZikge1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ucmVmaWxsID0gZjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZmlsbCAoY2hhbikge1xuICBpZihjaGFuLnJlZmlsbCAhPSBudWxsKXtcbiAgICB2YXIgc3RyID0gY2hhbi5yZWZpbGwoKTtcbiAgICB2YXIgc3RyX2EgPSBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyhzdHIpO1xuICAgIGlmIChzdHJfYS5sZW5ndGggPT0gMCkge1xuICAgICAgY2hhbi5yZWZpbGwgPSBudWxsXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoY2hhbi5idWZmZXIubGVuZ3RoIDwgY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKXtcbiAgICAgICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShjaGFuLmJ1ZmZlcl9tYXggKyBzdHJfYS5sZW5ndGgpO1xuICAgICAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgICAgIGNoYW4uYnVmZmVyID0gYjtcbiAgICAgIH1cbiAgICAgIGNoYW4uYnVmZmVyLnNldChzdHJfYSxjaGFuLmJ1ZmZlcl9tYXgpO1xuICAgICAgY2hhbi5vZmZzZXQgKz0gc3RyX2EubGVuZ3RoO1xuICAgICAgY2hhbi5idWZmZXJfbWF4ICs9IHN0cl9hLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5yZWFkID0gY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsIGNoYW4uYnVmZmVyLCBjaGFuLmJ1ZmZlcl9tYXgsIGNoYW4uYnVmZmVyLmxlbmd0aCAtIGNoYW4uYnVmZmVyX21heCk7XG4gICAgY2hhbi5vZmZzZXQgKz0gbnJlYWQ7XG4gICAgY2hhbi5idWZmZXJfbWF4ICs9IG5yZWFkO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQgKGNoYW5pZCwgYiwgaSwgbCkge1xuICB2YXIgYmEgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGIpO1xuICByZXR1cm4gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsIGJhLCBpLCBsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2JpZ2FycmF5IChjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF9iYV90b190eXBlZF9hcnJheShiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfYmxvY2sgKGNoYW5pZCwgYmEsIGksIGwpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciBuID0gbDtcbiAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgaWYobCA8PSBhdmFpbCkge1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBsKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBsO1xuICB9XG4gIGVsc2UgaWYoYXZhaWwgPiAwKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsY2hhbi5idWZmZXJfY3VyciArIGF2YWlsKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBhdmFpbDtcbiAgICBuID0gYXZhaWw7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICBjYW1sX3JlZmlsbChjaGFuKTtcbiAgICB2YXIgYXZhaWwgPSBjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgIGlmKG4gPiBhdmFpbCkgbiA9IGF2YWlsO1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBuKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBuO1xuICB9XG4gIHJldHVybiBuIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVscywgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZSAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgaGVhZGVyID0gbmV3IFVpbnQ4QXJyYXkoY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgZnVuY3Rpb24gYmxvY2soYnVmZmVyLCBvZmZzZXQsIG4pIHtcbiAgICB2YXIgciA9IDA7XG4gICAgd2hpbGUociA8IG4pe1xuICAgICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpe1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICAgICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpXG4gICAgICAgIGJyZWFrO1xuICAgICAgYnVmZmVyW29mZnNldCtyXSA9IGNoYW4uYnVmZmVyW2NoYW4uYnVmZmVyX2N1cnJdO1xuICAgICAgY2hhbi5idWZmZXJfY3VycisrO1xuICAgICAgcisrO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB2YXIgciA9IGJsb2NrKGhlYWRlciwgMCwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgaWYociA9PSAwKVxuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgZWxzZSBpZiAociA8IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHRydW5jYXRlZCBvYmplY3RcIik7XG4gIHZhciBsZW4gPSBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChjYW1sX2J5dGVzX29mX2FycmF5KGhlYWRlciksIDApO1xuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuICsgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgYnVmLnNldChoZWFkZXIsMCk7XG4gIHZhciByID0gYmxvY2soYnVmLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUsIGxlbilcbiAgaWYociA8IGxlbilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHRydW5jYXRlZCBvYmplY3QgXCIgKyByICsgXCIgIFwiICsgbGVuKTtcbiAgdmFyIG9mZnNldCA9IFswXTtcbiAgdmFyIHJlcyA9IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIG9mZnNldCk7XG4gIGNoYW4ub2Zmc2V0ID0gY2hhbi5vZmZzZXQgKyBvZmZzZXRbMF07XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX3RvX291dHNpZGVfaGVhcChjKSB7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlKGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfcmVmaWxsXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2NoYXIgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpe1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gIH1cbiAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KVxuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgdmFyIHJlcyA9IGNoYW4uYnVmZmVyW2NoYW4uYnVmZmVyX2N1cnJdO1xuICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2NoYXIsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfaW50IChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgNDsgaSsrKXtcbiAgICByZXMgPSAocmVzIDw8IDgpICsgY2FtbF9tbF9pbnB1dF9jaGFyKGNoYW5pZCkgfCAwO1xuICB9XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgaWYocG9zID49IGNoYW4ub2Zmc2V0IC0gY2hhbi5idWZmZXJfbWF4XG4gICAgICYmIHBvcyA8PSBjaGFuLm9mZnNldFxuICAgICAmJiBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5KSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IGNoYW4uYnVmZmVyX21heCAtIChjaGFuLm9mZnNldCAtIHBvcyk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbihjaGFuaWQscG9zKXtcbiAgcmV0dXJuIGNhbWxfc2Vla19pbihjaGFuaWQscG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0LCBjYW1sX3NlZWtfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbl82NChjaGFuaWQscG9zKXtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19pbihjaGFuaWQsIHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX3Bvc19pbihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLm9mZnNldCAtIChjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19pbihjaGFuaWQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3NfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luXzY0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjYW1sX3Bvc19pbihjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfcmVmaWxsXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X3NjYW5fbGluZShjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgdmFyIHAgPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBkbyB7XG4gICAgaWYocCA+PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPiAwKSB7XG4gICAgICAgIGNoYW4uYnVmZmVyLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyKSwwKTtcbiAgICAgICAgcCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9tYXggLT0gY2hhbi5idWZmZXJfY3VycjtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgICB9XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9tYXggPj0gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtKGNoYW4uYnVmZmVyX21heCkgfCAwO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZfbWF4ID0gY2hhbi5idWZmZXJfbWF4O1xuICAgICAgY2FtbF9yZWZpbGwgKGNoYW4pO1xuICAgICAgaWYocHJldl9tYXggPT0gY2hhbi5idWZmZXJfbWF4KSB7XG4gICAgICAgIHJldHVybiAtKGNoYW4uYnVmZmVyX21heCkgfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoY2hhbi5idWZmZXJbcCsrXSAhPSAxMCk7XG4gIHJldHVybiAocCAtIGNoYW4uYnVmZmVyX2N1cnIpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9mbHVzaFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbHNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9mbHVzaCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBmbHVzaCBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBpZighY2hhbi5idWZmZXIgfHwgY2hhbi5idWZmZXJfY3VyciA9PSAwKSByZXR1cm4gMDtcbiAgaWYoY2hhbi5vdXRwdXQpIHtcbiAgICBjaGFuLm91dHB1dChjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoY2hhbi5idWZmZXIsIDAsIGNoYW4uYnVmZmVyX2N1cnIpKTtcbiAgfSBlbHNlIHtcbiAgICBjaGFuLmZpbGUud3JpdGUoY2hhbi5vZmZzZXQsIGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgfVxuICBjaGFuLm9mZnNldCArPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vb3V0cHV0IHRvIG91dF9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X3RhXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfdGEoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBvdXRwdXQgdG8gYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKTtcbiAgaWYoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGggPiBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoKTtcbiAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgY2hhbi5idWZmZXIgPSBiXG4gIH1cbiAgc3dpdGNoKGNoYW4uYnVmZmVyZWQpe1xuICBjYXNlIDA6IC8vIFVuYnVmZmVyZWRcbiAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICBicmVha1xuICBjYXNlIDE6IC8vIEJ1ZmZlcmVkICh0aGUgZGVmYXVsdClcbiAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlci5sZW5ndGgpXG4gICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIGJyZWFrO1xuICBjYXNlIDI6IC8vIEJ1ZmZlcmVkIChvbmx5IGZvciBzdGRvdXQgYW5kIHN0ZGVycilcbiAgICB2YXIgaWQgPSBidWZmZXIubGFzdEluZGV4T2YoMTApXG4gICAgaWYoaWQgPCAwKSB7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKVxuICAgICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIuc3ViYXJyYXkoMCwgaWQgKyAxKSwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGlkICsgMTtcbiAgICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLnN1YmFycmF5KGlkICsgMSksIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoIC0gaWQgLSAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfbWxfb3V0cHV0X3RhXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9ieXRlcyhjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbik7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfYmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXksIGNhbWxfbWxfb3V0cHV0X3RhXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9iaWdhcnJheShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbik7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dChjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pe1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksb2Zmc2V0LGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9jaGFyIChjaGFuaWQsYykge1xuICB2YXIgcyA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nLCBjYW1sX21sX291dHB1dCxjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlIChjaGFuaWQsdixmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9zZWVrX291dChjaGFuaWQsIHBvcyl7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9zZWVrX291dFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dChjaGFuaWQscG9zKXtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9zZWVrX291dFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dF82NChjaGFuaWQscG9zKXtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfcG9zX291dChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLm9mZnNldCArIGNoYW4uYnVmZmVyX2N1cnJcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX291dChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfcG9zX291dChjaGFuaWQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX291dFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0XzY0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdCAoY2FtbF9wb3Nfb3V0KGNoYW5pZCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50IChjaGFuaWQsaSkge1xuICB2YXIgYXJyID0gWyhpPj4yNCkgJiAweEZGLChpPj4xNikgJiAweEZGLChpPj44KSAmIDB4RkYsaSAmIDB4RkYgXTtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lzX2J1ZmZlcmVkXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lzX2J1ZmZlcmVkKGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLmJ1ZmZlcmVkID8gMSA6IDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYnVmZmVyZWRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2J1ZmZlcmVkKGNoYW5pZCx2KSB7XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5idWZmZXJlZCA9IHY7XG4gIGlmKCF2KSBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHJldHVybiAwXG59XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBsZXhlcnMgZ2VuZXJhdGVkIGJ5IGNhbWxsZXggKilcblxudHlwZSBwb3NpdGlvbiA9IHtcbiAgcG9zX2ZuYW1lIDogc3RyaW5nO1xuICBwb3NfbG51bSA6IGludDtcbiAgcG9zX2JvbCA6IGludDtcbiAgcG9zX2NudW0gOiBpbnQ7XG59XG5cbmxldCBkdW1teV9wb3MgPSB7XG4gIHBvc19mbmFtZSA9IFwiXCI7XG4gIHBvc19sbnVtID0gMDtcbiAgcG9zX2JvbCA9IDA7XG4gIHBvc19jbnVtID0gLTE7XG59XG5cbnR5cGUgbGV4YnVmID1cbiAgeyByZWZpbGxfYnVmZiA6IGxleGJ1ZiAtPiB1bml0O1xuICAgIG11dGFibGUgbGV4X2J1ZmZlciA6IGJ5dGVzO1xuICAgIG11dGFibGUgbGV4X2J1ZmZlcl9sZW4gOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfYWJzX3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9zdGFydF9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfY3Vycl9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfbGFzdF9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfbGFzdF9hY3Rpb24gOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfZW9mX3JlYWNoZWQgOiBib29sO1xuICAgIG11dGFibGUgbGV4X21lbSA6IGludCBhcnJheTtcbiAgICBtdXRhYmxlIGxleF9zdGFydF9wIDogcG9zaXRpb247XG4gICAgbXV0YWJsZSBsZXhfY3Vycl9wIDogcG9zaXRpb247XG4gIH1cblxudHlwZSBsZXhfdGFibGVzID1cbiAgeyBsZXhfYmFzZTogc3RyaW5nO1xuICAgIGxleF9iYWNrdHJrOiBzdHJpbmc7XG4gICAgbGV4X2RlZmF1bHQ6IHN0cmluZztcbiAgICBsZXhfdHJhbnM6IHN0cmluZztcbiAgICBsZXhfY2hlY2s6IHN0cmluZztcbiAgICBsZXhfYmFzZV9jb2RlIDogc3RyaW5nO1xuICAgIGxleF9iYWNrdHJrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2RlZmF1bHRfY29kZSA6IHN0cmluZztcbiAgICBsZXhfdHJhbnNfY29kZSA6IHN0cmluZztcbiAgICBsZXhfY2hlY2tfY29kZSA6IHN0cmluZztcbiAgICBsZXhfY29kZTogc3RyaW5nO31cblxuZXh0ZXJuYWwgY19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50ID0gXCJjYW1sX2xleF9lbmdpbmVcIlxuZXh0ZXJuYWwgY19uZXdfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX25ld19sZXhfZW5naW5lXCJcblxubGV0IGVuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgbGV0IHJlc3VsdCA9IGNfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgaWYgcmVzdWx0ID49IDAgJiYgYnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zIHRoZW4gYmVnaW5cbiAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgZW5kO1xuICByZXN1bHRcblxuXG5sZXQgbmV3X2VuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgbGV0IHJlc3VsdCA9IGNfbmV3X2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cbmxldCBsZXhfcmVmaWxsIHJlYWRfZnVuIGF1eF9idWZmZXIgbGV4YnVmID1cbiAgbGV0IHJlYWQgPVxuICAgIHJlYWRfZnVuIGF1eF9idWZmZXIgKEJ5dGVzLmxlbmd0aCBhdXhfYnVmZmVyKSBpblxuICBsZXQgbiA9XG4gICAgaWYgcmVhZCA+IDBcbiAgICB0aGVuIHJlYWRcbiAgICBlbHNlIChsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWU7IDApIGluXG4gICgqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1ZmZlcjpcbiAgICAgICAgPC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tPlxuICAgICAgICB8ICBqdW5rIHwgICAgICB2YWxpZCBkYXRhICAgICB8ICAganVuayAgICB8XG4gICAgICAgIF4gICAgICAgXiAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgIF5cbiAgICAgICAgMCAgICBzdGFydF9wb3MgICAgICAgICAgICAgYnVmZmVyX2VuZCAgICBCeXRlcy5sZW5ndGggYnVmZmVyXG4gICopXG4gIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG4gPiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIgdGhlbiBiZWdpblxuICAgICgqIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuXG4gICAgICAgPD0gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyXG4gICAgdGhlbiBiZWdpblxuICAgICAgKCogQnV0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpZiB3ZSByZWNsYWltIHRoZSBqdW5rIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgIG9mIHRoZSBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcylcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgKCogV2UgbXVzdCBncm93IHRoZSBidWZmZXIuICBEb3VibGluZyBpdHMgc2l6ZSB3aWxsIHByb3ZpZGUgZW5vdWdoXG4gICAgICAgICBzcGFjZSBzaW5jZSBuIDw9IFN0cmluZy5sZW5ndGggYXV4X2J1ZmZlciA8PSBTdHJpbmcubGVuZ3RoIGJ1ZmZlci5cbiAgICAgICAgIFdhdGNoIG91dCBmb3Igc3RyaW5nIGxlbmd0aCBvdmVyZmxvdywgdGhvdWdoLiAqKVxuICAgICAgbGV0IG5ld2xlbiA9XG4gICAgICAgIEludC5taW4gKDIgKiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuID4gbmV3bGVuXG4gICAgICB0aGVuIGZhaWx3aXRoIFwiTGV4aW5nLmxleF9yZWZpbGw6IGNhbm5vdCBncm93IGJ1ZmZlclwiO1xuICAgICAgbGV0IG5ld2J1ZiA9IEJ5dGVzLmNyZWF0ZSBuZXdsZW4gaW5cbiAgICAgICgqIENvcHkgdGhlIHZhbGlkIGRhdGEgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGJ1ZmZlciAqKVxuICAgICAgQnl0ZXMuYmxpdCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3Bvc1xuICAgICAgICAgICAgICAgICAgbmV3YnVmIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3Bvcyk7XG4gICAgICBsZXhidWYubGV4X2J1ZmZlciA8LSBuZXdidWZcbiAgICBlbmQ7XG4gICAgKCogUmVhbGxvY2F0aW9uIG9yIG5vdCwgd2UgaGF2ZSBzaGlmdGVkIHRoZSBkYXRhIGxlZnQgYnlcbiAgICAgICBzdGFydF9wb3MgY2hhcmFjdGVyczsgdXBkYXRlIHRoZSBwb3NpdGlvbnMgKilcbiAgICBsZXQgcyA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gICAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIGxleGJ1Zi5sZXhfYWJzX3BvcyArIHM7XG4gICAgbGV4YnVmLmxleF9jdXJyX3BvcyA8LSBsZXhidWYubGV4X2N1cnJfcG9zIC0gcztcbiAgICBsZXhidWYubGV4X3N0YXJ0X3BvcyA8LSAwO1xuICAgIGxleGJ1Zi5sZXhfbGFzdF9wb3MgPC0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIHMgO1xuICAgIGxldCB0ID0gbGV4YnVmLmxleF9tZW0gaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIHQtMSBkb1xuICAgICAgbGV0IHYgPSB0LihpKSBpblxuICAgICAgaWYgdiA+PSAwIHRoZW5cbiAgICAgICAgdC4oaSkgPC0gdi1zXG4gICAgZG9uZVxuICBlbmQ7XG4gICgqIFRoZXJlIGlzIG5vdyBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gIEJ5dGVzLmJsaXQgYXV4X2J1ZmZlciAwIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiBuO1xuICBsZXhidWYubGV4X2J1ZmZlcl9sZW4gPC0gbGV4YnVmLmxleF9idWZmZXJfbGVuICsgblxuXG5sZXQgemVyb19wb3MgPSB7XG4gIHBvc19mbmFtZSA9IFwiXCI7XG4gIHBvc19sbnVtID0gMTtcbiAgcG9zX2JvbCA9IDA7XG4gIHBvc19jbnVtID0gMDtcbn1cblxubGV0IGZyb21fZnVuY3Rpb24gPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIGYgPVxuICB7IHJlZmlsbF9idWZmID0gbGV4X3JlZmlsbCBmIChCeXRlcy5jcmVhdGUgNTEyKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMuY3JlYXRlIDEwMjQ7XG4gICAgbGV4X2J1ZmZlcl9sZW4gPSAwO1xuICAgIGxleF9hYnNfcG9zID0gMDtcbiAgICBsZXhfc3RhcnRfcG9zID0gMDtcbiAgICBsZXhfY3Vycl9wb3MgPSAwO1xuICAgIGxleF9sYXN0X3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfYWN0aW9uID0gMDtcbiAgICBsZXhfbWVtID0gW3x8XTtcbiAgICBsZXhfZW9mX3JlYWNoZWQgPSBmYWxzZTtcbiAgICBsZXhfc3RhcnRfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gICAgbGV4X2N1cnJfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gIH1cblxubGV0IGZyb21fY2hhbm5lbCA/d2l0aF9wb3NpdGlvbnMgaWMgPVxuICBmcm9tX2Z1bmN0aW9uID93aXRoX3Bvc2l0aW9ucyAoZnVuIGJ1ZiBuIC0+IGlucHV0IGljIGJ1ZiAwIG4pXG5cbmxldCBmcm9tX3N0cmluZyA/KHdpdGhfcG9zaXRpb25zID0gdHJ1ZSkgcyA9XG4gIHsgcmVmaWxsX2J1ZmYgPSAoZnVuIGxleGJ1ZiAtPiBsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWUpO1xuICAgIGxleF9idWZmZXIgPSBCeXRlcy5vZl9zdHJpbmcgczsgKCogaGF2ZSB0byBtYWtlIGEgY29weSBmb3IgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB1bnNhZmUtc3RyaW5nIG1vZGUgKilcbiAgICBsZXhfYnVmZmVyX2xlbiA9IFN0cmluZy5sZW5ndGggcztcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gdHJ1ZTtcbiAgICBsZXhfc3RhcnRfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gICAgbGV4X2N1cnJfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gIH1cblxubGV0IHNldF9wb3NpdGlvbiBsZXhidWYgcG9zaXRpb24gPVxuICBsZXhidWYubGV4X2N1cnJfcCAgPC0ge3Bvc2l0aW9uIHdpdGggcG9zX2ZuYW1lID0gbGV4YnVmLmxleF9jdXJyX3AucG9zX2ZuYW1lfTtcbiAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIHBvc2l0aW9uLnBvc19jbnVtXG5cbmxldCBzZXRfZmlsZW5hbWUgbGV4YnVmIGZuYW1lID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgPC0ge2xleGJ1Zi5sZXhfY3Vycl9wIHdpdGggcG9zX2ZuYW1lID0gZm5hbWV9XG5cbmxldCB3aXRoX3Bvc2l0aW9ucyBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3NcblxubGV0IGxleGVtZSBsZXhidWYgPVxuICBsZXQgbGVuID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gIEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3MgbGVuXG5cbmxldCBzdWJfbGV4ZW1lIGxleGJ1ZiBpMSBpMiA9XG4gIGxldCBsZW4gPSBpMi1pMSBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGkxIGxlblxuXG5sZXQgc3ViX2xleGVtZV9vcHQgbGV4YnVmIGkxIGkyID1cbiAgaWYgaTEgPj0gMCB0aGVuIGJlZ2luXG4gICAgbGV0IGxlbiA9IGkyLWkxIGluXG4gICAgU29tZSAoQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW4pXG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgTm9uZVxuICBlbmRcblxubGV0IHN1Yl9sZXhlbWVfY2hhciBsZXhidWYgaSA9IEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciBpXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXJfb3B0IGxleGJ1ZiBpID1cbiAgaWYgaSA+PSAwIHRoZW5cbiAgICBTb21lIChCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxuXG5sZXQgbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPVxuICBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgKGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgaSlcblxubGV0IGxleGVtZV9zdGFydCBsZXhidWYgPSBsZXhidWYubGV4X3N0YXJ0X3AucG9zX2NudW1cbmxldCBsZXhlbWVfZW5kIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19jbnVtXG5cbmxldCBsZXhlbWVfc3RhcnRfcCBsZXhidWYgPSBsZXhidWYubGV4X3N0YXJ0X3BcbmxldCBsZXhlbWVfZW5kX3AgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3BcblxubGV0IG5ld19saW5lIGxleGJ1ZiA9XG4gIGxldCBsY3AgPSBsZXhidWYubGV4X2N1cnJfcCBpblxuICBpZiBsY3AgIT0gZHVtbXlfcG9zIHRoZW5cbiAgICBsZXhidWYubGV4X2N1cnJfcCA8LVxuICAgICAgeyBsY3Agd2l0aFxuICAgICAgICBwb3NfbG51bSA9IGxjcC5wb3NfbG51bSArIDE7XG4gICAgICAgIHBvc19ib2wgPSBsY3AucG9zX2NudW07XG4gICAgICB9XG5cblxuXG4oKiBEaXNjYXJkIGRhdGEgbGVmdCBpbiBsZXhlciBidWZmZXIuICopXG5cbmxldCBmbHVzaF9pbnB1dCBsYiA9XG4gIGxiLmxleF9jdXJyX3BvcyA8LSAwO1xuICBsYi5sZXhfYWJzX3BvcyA8LSAwO1xuICBsZXQgbGNwID0gbGIubGV4X2N1cnJfcCBpblxuICBpZiBsY3AgIT0gZHVtbXlfcG9zIHRoZW5cbiAgICBsYi5sZXhfY3Vycl9wIDwtIHt6ZXJvX3BvcyB3aXRoIHBvc19mbmFtZSA9IGxjcC5wb3NfZm5hbWV9O1xuICBsYi5sZXhfYnVmZmVyX2xlbiA8LSAwO1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIFByaW50ZlxuXG50eXBlIHQgPSBleG4gPSAuLlxuXG5sZXQgcHJpbnRlcnMgPSBBdG9taWMubWFrZSBbXVxuXG5sZXQgbG9jZm10ID0gZm9ybWF0X29mX3N0cmluZyBcIkZpbGUgXFxcIiVzXFxcIiwgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZDogJXNcIlxuXG5sZXQgZmllbGQgeCBpID1cbiAgbGV0IGYgPSBPYmouZmllbGQgeCBpIGluXG4gIGlmIG5vdCAoT2JqLmlzX2Jsb2NrIGYpIHRoZW5cbiAgICBzcHJpbnRmIFwiJWRcIiAoT2JqLm1hZ2ljIGYgOiBpbnQpICAgICAgICAgICAoKiBjYW4gYWxzbyBiZSBhIGNoYXIgKilcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouc3RyaW5nX3RhZyB0aGVuXG4gICAgc3ByaW50ZiBcIiVTXCIgKE9iai5tYWdpYyBmIDogc3RyaW5nKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5kb3VibGVfdGFnIHRoZW5cbiAgICBzdHJpbmdfb2ZfZmxvYXQgKE9iai5tYWdpYyBmIDogZmxvYXQpXG4gIGVsc2VcbiAgICBcIl9cIlxuXG5sZXQgcmVjIG90aGVyX2ZpZWxkcyB4IGkgPVxuICBpZiBpID49IE9iai5zaXplIHggdGhlbiBcIlwiXG4gIGVsc2Ugc3ByaW50ZiBcIiwgJXMlc1wiIChmaWVsZCB4IGkpIChvdGhlcl9maWVsZHMgeCAoaSsxKSlcblxubGV0IGZpZWxkcyB4ID1cbiAgbWF0Y2ggT2JqLnNpemUgeCB3aXRoXG4gIHwgMCAtPiBcIlwiXG4gIHwgMSAtPiBcIlwiXG4gIHwgMiAtPiBzcHJpbnRmIFwiKCVzKVwiIChmaWVsZCB4IDEpXG4gIHwgXyAtPiBzcHJpbnRmIFwiKCVzJXMpXCIgKGZpZWxkIHggMSkgKG90aGVyX2ZpZWxkcyB4IDIpXG5cbmxldCB1c2VfcHJpbnRlcnMgeCA9XG4gIGxldCByZWMgY29udiA9IGZ1bmN0aW9uXG4gICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICAobWF0Y2ggaGQgeCB3aXRoXG4gICAgICAgICB8IE5vbmUgfCBleGNlcHRpb24gXyAtPiBjb252IHRsXG4gICAgICAgICB8IFNvbWUgcyAtPiBTb21lIHMpXG4gICAgfCBbXSAtPiBOb25lIGluXG4gIGNvbnYgKEF0b21pYy5nZXQgcHJpbnRlcnMpXG5cbmxldCB0b19zdHJpbmdfZGVmYXVsdCA9IGZ1bmN0aW9uXG4gIHwgT3V0X29mX21lbW9yeSAtPiBcIk91dCBvZiBtZW1vcnlcIlxuICB8IFN0YWNrX292ZXJmbG93IC0+IFwiU3RhY2sgb3ZlcmZsb3dcIlxuICB8IE1hdGNoX2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzUpIFwiUGF0dGVybiBtYXRjaGluZyBmYWlsZWRcIlxuICB8IEFzc2VydF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIkFzc2VydGlvbiBmYWlsZWRcIlxuICB8IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIlVuZGVmaW5lZCByZWN1cnNpdmUgbW9kdWxlXCJcbiAgfCB4IC0+XG4gICAgICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgICAgIGlmIE9iai50YWcgeCA8PiAwIHRoZW5cbiAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIHggMCkgOiBzdHJpbmcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9XG4gICAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIChPYmouZmllbGQgeCAwKSAwKSA6IHN0cmluZykgaW5cbiAgICAgICAgY29uc3RydWN0b3IgXiAoZmllbGRzIHgpXG5cbmxldCB0b19zdHJpbmcgZSA9XG4gIG1hdGNoIHVzZV9wcmludGVycyBlIHdpdGhcbiAgfCBTb21lIHMgLT4gc1xuICB8IE5vbmUgLT4gdG9fc3RyaW5nX2RlZmF1bHQgZVxuXG5sZXQgcHJpbnQgZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGZsdXNoIHN0ZGVycjtcbiAgICByYWlzZSB4XG5cbmxldCBjYXRjaCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBmbHVzaCBzdGRvdXQ7XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGV4aXQgMlxuXG50eXBlIHJhd19iYWNrdHJhY2Vfc2xvdFxudHlwZSByYXdfYmFja3RyYWNlX2VudHJ5ID0gcHJpdmF0ZSBpbnRcbnR5cGUgcmF3X2JhY2t0cmFjZSA9IHJhd19iYWNrdHJhY2VfZW50cnkgYXJyYXlcblxubGV0IHJhd19iYWNrdHJhY2VfZW50cmllcyBidCA9IGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlOlxuICB1bml0IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlXCJcblxuZXh0ZXJuYWwgcmFpc2Vfd2l0aF9iYWNrdHJhY2U6IGV4biAtPiByYXdfYmFja3RyYWNlIC0+ICdhXG4gID0gXCIlcmFpc2Vfd2l0aF9iYWNrdHJhY2VcIlxuXG50eXBlIGJhY2t0cmFjZV9zbG90ID1cbiAgfCBLbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSAgICA6IGJvb2w7XG4gICAgICBmaWxlbmFtZSAgICA6IHN0cmluZztcbiAgICAgIGxpbmVfbnVtYmVyIDogaW50O1xuICAgICAgc3RhcnRfY2hhciAgOiBpbnQ7XG4gICAgICBlbmRfY2hhciAgICA6IGludDtcbiAgICAgIGlzX2lubGluZSAgIDogYm9vbDtcbiAgICAgIGRlZm5hbWUgICAgIDogc3RyaW5nO1xuICAgIH1cbiAgfCBVbmtub3duX2xvY2F0aW9uIG9mIHtcbiAgICAgIGlzX3JhaXNlIDogYm9vbFxuICAgIH1cblxuKCogdG8gYXZvaWQgd2FybmluZyAqKVxubGV0IF8gPSBbS25vd25fbG9jYXRpb24geyBpc19yYWlzZSA9IGZhbHNlOyBmaWxlbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW5saW5lID0gZmFsc2U7IGRlZm5hbWUgPSBcIlwiIH07XG4gICAgICAgICBVbmtub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZSB9XVxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IGJhY2t0cmFjZV9zbG90ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlOlxuICByYXdfYmFja3RyYWNlIC0+IGJhY2t0cmFjZV9zbG90IGFycmF5ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZVwiXG5cbmxldCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQgPVxuICB0cnkgU29tZSAoY29udmVydF9yYXdfYmFja3RyYWNlIGJ0KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgcG9zIHNsb3QgPVxuICBsZXQgaW5mbyBpc19yYWlzZSA9XG4gICAgaWYgaXNfcmFpc2UgdGhlblxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGF0XCIgZWxzZSBcIlJlLXJhaXNlZCBhdFwiXG4gICAgZWxzZVxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb24gYXRcIiBlbHNlIFwiQ2FsbGVkIGZyb21cIlxuICBpblxuICBtYXRjaCBzbG90IHdpdGhcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGlmIGwuaXNfcmFpc2UgdGhlblxuICAgICAgICAoKiBjb21waWxlci1pbnNlcnRlZCByZS1yYWlzZSwgc2tpcHBlZCAqKSBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIFNvbWUgKHNwcmludGYgXCIlcyB1bmtub3duIGxvY2F0aW9uXCIgKGluZm8gZmFsc2UpKVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIFNvbWUgKHNwcmludGYgXCIlcyAlcyBpbiBmaWxlIFxcXCIlc1xcXCIlcywgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZFwiXG4gICAgICAgICAgICAgIChpbmZvIGwuaXNfcmFpc2UpIGwuZGVmbmFtZSBsLmZpbGVuYW1lXG4gICAgICAgICAgICAgIChpZiBsLmlzX2lubGluZSB0aGVuIFwiIChpbmxpbmVkKVwiIGVsc2UgXCJcIilcbiAgICAgICAgICAgICAgbC5saW5lX251bWJlciBsLnN0YXJ0X2NoYXIgbC5lbmRfY2hhcilcblxubGV0IHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgIGZwcmludGYgb3V0Y2hhblxuICAgICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBmcHJpbnRmIG91dGNoYW4gXCIlc1xcblwiIHN0clxuICAgICAgZG9uZVxuXG5sZXQgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIHJhd19iYWNrdHJhY2UgPVxuICBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDogcHJpbnRzIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBwcmludF9iYWNrdHJhY2Ugb3V0Y2hhbiA9XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmxldCBiYWNrdHJhY2VfdG9fc3RyaW5nIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gYnByaW50ZiBiIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmU7XG4gICAgICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgcmF3X2JhY2t0cmFjZSA9XG4gIGJhY2t0cmFjZV90b19zdHJpbmcgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19pbmxpbmVcbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcblxudHlwZSBsb2NhdGlvbiA9IHtcbiAgZmlsZW5hbWUgOiBzdHJpbmc7XG4gIGxpbmVfbnVtYmVyIDogaW50O1xuICBzdGFydF9jaGFyIDogaW50O1xuICBlbmRfY2hhciA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5saW5lX251bWJlcjtcbiAgICAgIHN0YXJ0X2NoYXIgID0gbC5zdGFydF9jaGFyO1xuICAgICAgZW5kX2NoYXIgICAgPSBsLmVuZF9jaGFyO1xuICAgIH1cblxubGV0IGJhY2t0cmFjZV9zbG90X2RlZm5hbWUgPSBmdW5jdGlvblxuICB8IFVua25vd25fbG9jYXRpb24gX1xuICB8IEtub3duX2xvY2F0aW9uIHsgZGVmbmFtZSA9IFwiXCIgfSAtPiBOb25lXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBTb21lIGwuZGVmbmFtZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzIHJhd19iYWNrdHJhY2UgPVxuICAoKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBTb21lIGlzXG4gICAgIHJldHVybmVkIG9ubHkgaWYgYSBwYXJ0IG9mIHRoZSB0cmFjZSBpcyB1c2FibGUuIFRoaXMgZ2l2ZXMgdXNcbiAgICAgYSBiaXQgbW9yZSB3b3JrIHRoYW4ganVzdCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UsIGJ1dCBpdCBtYWtlcyB0aGVcbiAgICAgQVBJIG1vcmUgdXNlci1mcmllbmRseSAtLSBvdGhlcndpc2UgbW9zdCB1c2VycyB3b3VsZCBoYXZlIHRvXG4gICAgIHJlaW1wbGVtZW50IHRoZSBcIlByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBzb3JyeVwiIGxvZ2ljXG4gICAgIHRoZW1zZWx2ZXMuICopXG4gIG1hdGNoIGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlIHdpdGhcbiAgICB8IE5vbmUgLT4gTm9uZVxuICAgIHwgU29tZSBiYWNrdHJhY2UgLT5cbiAgICAgIGxldCB1c2FibGVfc2xvdCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG4gICAgICAgIHwgS25vd25fbG9jYXRpb24gXyAtPiB0cnVlIGluXG4gICAgICBsZXQgcmVjIGV4aXN0c191c2FibGUgPSBmdW5jdGlvblxuICAgICAgICB8ICgtMSkgLT4gZmFsc2VcbiAgICAgICAgfCBpIC0+IHVzYWJsZV9zbG90IGJhY2t0cmFjZS4oaSkgfHwgZXhpc3RzX3VzYWJsZSAoaSAtIDEpIGluXG4gICAgICBpZiBleGlzdHNfdXNhYmxlIChBcnJheS5sZW5ndGggYmFja3RyYWNlIC0gMSlcbiAgICAgIHRoZW4gU29tZSBiYWNrdHJhY2VcbiAgICAgIGVsc2UgTm9uZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSBlbnRyeSA9XG4gIGJhY2t0cmFjZV9zbG90cyBbfCBlbnRyeSB8XVxuXG5tb2R1bGUgU2xvdCA9IHN0cnVjdFxuICB0eXBlIHQgPSBiYWNrdHJhY2Vfc2xvdFxuICBsZXQgZm9ybWF0ID0gZm9ybWF0X2JhY2t0cmFjZV9zbG90XG4gIGxldCBpc19yYWlzZSA9IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlXG4gIGxldCBpc19pbmxpbmUgPSBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmVcbiAgbGV0IGxvY2F0aW9uID0gYmFja3RyYWNlX3Nsb3RfbG9jYXRpb25cbiAgbGV0IG5hbWUgPSBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lXG5lbmRcblxubGV0IHJhd19iYWNrdHJhY2VfbGVuZ3RoIGJ0ID0gQXJyYXkubGVuZ3RoIGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX3Nsb3QgOlxuICByYXdfYmFja3RyYWNlIC0+IGludCAtPiByYXdfYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCBvcHRpb25cbiAgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcIlxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDpcbiAgIHJldHVybnMgdGhlICpzdHJpbmcqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IGdldF9iYWNrdHJhY2UgKCkgPSByYXdfYmFja3RyYWNlX3RvX3N0cmluZyAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmV4dGVybmFsIHJlY29yZF9iYWNrdHJhY2U6IGJvb2wgLT4gdW5pdCA9IFwiY2FtbF9yZWNvcmRfYmFja3RyYWNlXCJcbmV4dGVybmFsIGJhY2t0cmFjZV9zdGF0dXM6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXCJcblxubGV0IHJlYyByZWdpc3Rlcl9wcmludGVyIGZuID1cbiAgbGV0IG9sZF9wcmludGVycyA9IEF0b21pYy5nZXQgcHJpbnRlcnMgaW5cbiAgbGV0IG5ld19wcmludGVycyA9IGZuIDo6IG9sZF9wcmludGVycyBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgcHJpbnRlcnMgb2xkX3ByaW50ZXJzIG5ld19wcmludGVycyBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIHJlZ2lzdGVyX3ByaW50ZXIgZm5cblxuZXh0ZXJuYWwgZ2V0X2NhbGxzdGFjazogaW50IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrXCJcblxubGV0IGV4bl9zbG90IHggPVxuICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgaWYgT2JqLnRhZyB4ID0gMCB0aGVuIE9iai5maWVsZCB4IDAgZWxzZSB4XG5cbmxldCBleG5fc2xvdF9pZCB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAxKSA6IGludClcblxubGV0IGV4bl9zbG90X25hbWUgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMCkgOiBzdHJpbmcpXG5cbmV4dGVybmFsIGdldF9kZWJ1Z19pbmZvX3N0YXR1cyA6IHVuaXQgLT4gaW50ID0gXCJjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzXCJcblxuKCogRGVzY3JpcHRpb25zIGZvciBlcnJvcnMgaW4gc3RhcnR1cC5oLiBTZWUgYWxzbyBiYWNrdHJhY2UuYyAqKVxubGV0IGVycm9ycyA9IFt8IFwiXCI7XG4gICgqIEZJTEVfTk9UX0ZPVU5EICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBub3QgZm91bmQpXCI7XG4gICgqIEJBRF9CWVRFQ09ERSAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0KVwiO1xuICAoKiBXUk9OR19NQUdJQyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgaGFzIHdyb25nIG1hZ2ljIG51bWJlcilcIjtcbiAgKCogTk9fRkRTICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBjYW5ub3QgYmUgb3BlbmVkO1xcbiBcXFxuICAgICAgLS0gdG9vIG1hbnkgb3BlbiBmaWxlcy4gVHJ5IHJ1bm5pbmcgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MilcIlxufF1cblxubGV0IGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2UgPVxuICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgbGV0IHN0YXR1cyA9IGdldF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSBpblxuICBpZiBzdGF0dXMgPCAwIHRoZW5cbiAgICBwcmVycl9lbmRsaW5lIGVycm9ycy4oYWJzIHN0YXR1cyk7XG4gIGZsdXNoIHN0ZGVyclxuXG5sZXQgdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgPSByZWYgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlclxuXG5sZXQgc2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGZuID0gdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgOj0gZm5cblxubGV0IGVtcHR5X2JhY2t0cmFjZSA6IHJhd19iYWNrdHJhY2UgPSBbfCB8XVxuXG5sZXQgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpID1cbiAgdHJ5XG4gICAgZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgd2l0aCBfICgqIE91dF9vZl9tZW1vcnk/ICopIC0+XG4gICAgZW1wdHlfYmFja3RyYWNlXG5cbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgKCogR2V0IHRoZSBiYWNrdHJhY2Ugbm93LCBpbiBjYXNlIG9uZSBvZiB0aGUgW2F0X2V4aXRdIGZ1bmN0aW9uXG4gICAgICAgZGVzdHJveXMgaXQuICopXG4gICAgbGV0IHJhd19iYWNrdHJhY2UgPVxuICAgICAgaWYgZGVidWdnZXJfaW5fdXNlICgqIFNhbWUgdGVzdCBhcyBpbiBbcnVudGltZS9wcmludGV4Yy5jXSAqKSB0aGVuXG4gICAgICAgIGVtcHR5X2JhY2t0cmFjZVxuICAgICAgZWxzZVxuICAgICAgICB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgICBpblxuICAgICh0cnkgU3RkbGliLmRvX2F0X2V4aXQgKCkgd2l0aCBfIC0+ICgpKTtcbiAgICB0cnlcbiAgICAgICF1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZVxuICAgIHdpdGggZXhuJyAtPlxuICAgICAgbGV0IHJhd19iYWNrdHJhY2UnID0gdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3IgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXI6IGV4Y2VwdGlvbiAlc1xcblwiXG4gICAgICAgICh0b19zdHJpbmcgZXhuJyk7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlJztcbiAgICAgIGZsdXNoIHN0ZGVyclxuICB3aXRoXG4gICAgfCBPdXRfb2ZfbWVtb3J5IC0+XG4gICAgICAgIHByZXJyX2VuZGxpbmVcbiAgICAgICAgICBcIkZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5IGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyXCJcblxuKCogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgW2NhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXSBpblxuICAgW3J1bnRpbWUvcHJpbnRleGMuY10gd2hpY2ggZXhwZWN0cyBubyBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24gZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2VcbiAgd2l0aCBfIC0+XG4gICAgKCogVGhlcmUgaXMgbm90IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgKilcbiAgICAoKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCJcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXG4iLCIjIDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuIFxuICBtb2R1bGUgTGV4aW5nID0gc3RydWN0XG4gICAgKCogT3ZlcnJpZGUgdGhlIExleGluZy5lbmdpbmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgcG9zaXRpb24gcmVjb3JkXG4gICAgICAgZWFjaCB0aW1lIGEgcnVsZSBpcyBtYXRjaGVkLiBSZWR1Y2VzIHRvdGFsIHBhcnNlIHRpbWUgYnkgYXJvdW5kIDMwJS5cbiAgICAgICBJZGVhIHN0b2xlbiBmcm9tIHlvanNvbiAqKVxuXG4gICAgaW5jbHVkZSBMZXhpbmdcblxuICAgIGV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcblxuICAgIGxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gICAgICBsZXQgcmVzdWx0ID0gY19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICAgICAgKCpcbiAgICAgIGlmIHJlc3VsdCA+PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgICAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgICAgIGVuZDtcbiAgICAgICopXG4gICAgICByZXN1bHRcbiAgZW5kXG4gIG9wZW4gVG9rZW5zXG5cblxuICBtb2R1bGUgdHlwZSBMZXggPSBzaWdcbiAgICB2YWwgcmVhZCA6IExleGluZy5sZXhidWYgLT4gVG9rZW5zLnRva2VuXG4gIGVuZFxuXG4gIG1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IExleCA9IHN0cnVjdFxuXG4jIDMzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxubGV0IF9fb2NhbWxfbGV4X3RhYmxlcyA9IHtcbiAgTGV4aW5nLmxleF9iYXNlID1cbiAgIFwiXFwwMDBcXDAwMFxcMjI5XFwyNTVcXDAxN1xcMDAwXFwyMzJcXDI1NVxcMDAzXFwwMDBcXDIzNFxcMjU1XFwxMjZcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMTEzXFwwMDBcXDAwMFxcMDAwXFwwMDFcXDAwMFxcMDAxXFwwMDBcXDAwMlxcMDAwXFwxMjNcXDAwMFxcMjQzXFwyNTVcXDI0NFxcMjU1XFxcbiAgICBcXDI0NVxcMjU1XFwyNDZcXDI1NVxcMjQ3XFwyNTVcXDI0OFxcMjU1XFwyNDlcXDI1NVxcMjUwXFwyNTVcXDI1MVxcMjU1XFwyNTJcXDI1NVxcXG4gICAgXFwwMDFcXDAwMFxcMDAyXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAyXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAzXFwwMDBcXDI1NFxcMjU1XFwwMDNcXDAwMFxcMDAxXFwwMDBcXDAxMVxcMDAwXFwyNTNcXDI1NVxcMjM5XFwyNTVcXDAwM1xcMDAwXFxcbiAgICBcXDAxMFxcMDAwXFwwMTFcXDAwMFxcMDA1XFwwMDBcXDI0MlxcMjU1XFwwMjBcXDAwMFxcMDE5XFwwMDBcXDA0OFxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNjdcXDAwMFxcMDYzXFwwMDBcXDA3NVxcMDAwXFwwODRcXDAwMFxcMjQxXFwyNTVcXDA4NVxcMDAwXFwwODNcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA3NVxcMDAwXFwwNzFcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwOTNcXDAwMFxcMjQwXFwyNTVcXDA5NVxcMDAwXFxcbiAgICBcXDA5M1xcMDAwXFwwODlcXDAwMFxcMDk1XFwwMDBcXDA4NVxcMDAwXFwwODFcXDAwMFxcMDAxXFwwMDBcXDAzMlxcMDAwXFwxNTVcXDAwMFxcXG4gICAgXFwxODZcXDAwMFxcMjA5XFwwMDBcXDIxOVxcMDAwXFwyMjlcXDAwMFxcMjQwXFwwMDBcXDI1MFxcMDAwXFwwMThcXDAwMVxcMDY2XFwwMDFcXFxuICAgIFxcMjM2XFwyNTVcXDIzNVxcMjU1XFwwOTRcXDAwMVxcMTE3XFwwMDFcXDE1NVxcMDAxXFwxNzhcXDAwMVxcMDUzXFwwMDBcXDIzMVxcMjU1XFxcbiAgICBcXDA4OFxcMDAxXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwwMTRcXDAwMFxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrID1cbiAgIFwiXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMDIyXFwwMDBcXDI1NVxcMjU1XFwwMjZcXDAwMFxcMDE3XFwwMDBcXFxuICAgIFxcMDE3XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMThcXDAwMFxcMjU1XFwyNTVcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMDE4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDI1XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDNcXDAwMFxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0ID1cbiAgIFwiXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg2XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA4OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcIjtcbiAgTGV4aW5nLmxleF90cmFucyA9XG4gICBcIlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMDAzXFwwMDBcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDA2XFwwMDBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMTlcXDAwMFxcMDE4XFwwMDBcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDE1XFwwMDBcXDAxM1xcMDAwXFwwNzFcXDAwMFxcMDAyXFwwMDBcXFxuICAgIFxcMDA3XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDE0XFwwMDBcXDA4N1xcMDAwXFwwMTdcXDAwMFxcMDkzXFwwMDBcXDAxNlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwODZcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAxMVxcMDAwXFwwNTlcXDAwMFxcMDc3XFwwMDBcXDAwMFxcMDAwXFwwNzdcXDAwMFxcMDA5XFwwMDBcXDAzOFxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDAwMFxcMDAwXFwwMjFcXDAwMFxcMDAwXFwwMDBcXDAyMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA2OVxcMDAwXFwwMzRcXDAwMFxcMDMwXFwwMDBcXDA1MFxcMDAwXFwwNzBcXDAwMFxcMDI1XFwwMDBcXDAyOVxcMDAwXFxcbiAgICBcXDAzM1xcMDAwXFwwMTJcXDAwMFxcMDYwXFwwMDBcXDA0M1xcMDAwXFwwMzFcXDAwMFxcMDM2XFwwMDBcXDAyNFxcMDAwXFwwNTNcXDAwMFxcXG4gICAgXFwwNTFcXDAwMFxcMDM4XFwwMDBcXDAyN1xcMDAwXFwwMzJcXDAwMFxcMDI2XFwwMDBcXDAyOFxcMDAwXFwwMzVcXDAwMFxcMDM3XFwwMDBcXFxuICAgIFxcMDQ0XFwwMDBcXDA0MlxcMDAwXFwwNDVcXDAwMFxcMDIzXFwwMDBcXDA0NlxcMDAwXFwwMjJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA0N1xcMDAwXFwwNzFcXDAwMFxcXG4gICAgXFwwODBcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA3XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDQ4XFwwMDBcXDA3MFxcMDAwXFwwNDlcXDAwMFxcXG4gICAgXFwwNDNcXDAwMFxcMDM4XFwwMDBcXDA1MlxcMDAwXFwwNTRcXDAwMFxcMDU1XFwwMDBcXDA1NlxcMDAwXFwwNTdcXDAwMFxcMDU4XFwwMDBcXFxuICAgIFxcMDUyXFwwMDBcXDA2M1xcMDAwXFwwNjFcXDAwMFxcMDYyXFwwMDBcXDA0MFxcMDAwXFwwNjRcXDAwMFxcMDY1XFwwMDBcXDA2NlxcMDAwXFxcbiAgICBcXDA2N1xcMDAwXFwwNjhcXDAwMFxcMDYyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDAwMFxcMDAwXFwwNzBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzhcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDM5XFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzVcXDAwMFxcMDAwXFwwMDBcXDA3NVxcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwMDVcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA5MVxcMDAwXFwwMDBcXDAwMFxcMDgxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwOTJcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc4XFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDAwXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDkwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfY2hlY2sgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDA0XFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDA0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDA3XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDJcXDAwMFxcMDAwXFwwMDBcXDA5MlxcMDAwXFwwMDBcXDAwMFxcMDg2XFwwMDBcXFxuICAgIFxcMDAyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDdcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDEwXFwwMDBcXDA3MFxcMDAwXFwyNTVcXDI1NVxcMDcwXFwwMDBcXDAwMFxcMDAwXFwwNjlcXDAwMFxcXG4gICAgXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXFxuICAgIFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDlcXDAwMFxcMDI0XFwwMDBcXDAyNVxcMDAwXFwwMzlcXDAwMFxcMDA3XFwwMDBcXDAwMFxcMDAwXFwwMjhcXDAwMFxcXG4gICAgXFwwMzJcXDAwMFxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwNDJcXDAwMFxcMDMwXFwwMDBcXDAzNVxcMDAwXFwwMDBcXDAwMFxcMDExXFwwMDBcXFxuICAgIFxcMDEyXFwwMDBcXDAzNFxcMDAwXFwwMjZcXDAwMFxcMDMxXFwwMDBcXDAwMFxcMDAwXFwwMjdcXDAwMFxcMDI0XFwwMDBcXDAzNlxcMDAwXFxcbiAgICBcXDA0MFxcMDAwXFwwNDFcXDAwMFxcMDQ0XFwwMDBcXDAwMFxcMDAwXFwwNDVcXDAwMFxcMDAwXFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwNDZcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcXG4gICAgXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDA0N1xcMDAwXFwwMDhcXDAwMFxcMDQ4XFwwMDBcXFxuICAgIFxcMDQ5XFwwMDBcXDA1MFxcMDAwXFwwNTFcXDAwMFxcMDUzXFwwMDBcXDA1NFxcMDAwXFwwNTVcXDAwMFxcMDU2XFwwMDBcXDA1N1xcMDAwXFxcbiAgICBcXDA1OFxcMDAwXFwwNTlcXDAwMFxcMDYwXFwwMDBcXDA2MVxcMDAwXFwwMTNcXDAwMFxcMDYzXFwwMDBcXDA2NFxcMDAwXFwwNjVcXDAwMFxcXG4gICAgXFwwNjZcXDAwMFxcMDY3XFwwMDBcXDA2OFxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXFxuICAgIFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwyNTVcXDI1NVxcMDA4XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDEzXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAxM1xcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDczXFwwMDBcXDI1NVxcMjU1XFwwNzNcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXFxuICAgIFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXFxuICAgIFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3OFxcMDAwXFwwODZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwODhcXDAwMFxcMjU1XFwyNTVcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDc4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA2XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMDg4XFwwMDBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwwNzhcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODJcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDI1NVxcMjU1XFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2Jhc2VfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2JhY2t0cmtfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHRfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X3RyYW5zX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9jaGVja19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY29kZSA9XG4gICBcIlwiO1xufVxuXG5sZXQgcmVjIHJlYWQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiAwXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA1NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBCT09MIHRydWUgKVxuIyAyNzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxIC0+XG4jIDU5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEJPT0wgZmFsc2UgKVxuIyAyNzYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyIC0+XG4jIDYxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE5VTEwgKVxuIyAyODEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAzIC0+XG4jIDYzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE9TIClcbiMgMjg2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNCAtPlxuIyA2NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBPRSApXG4jIDI5MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDUgLT5cbiMgNjcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQVMgKVxuIyAyOTYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA2IC0+XG4jIDY5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEFFIClcbiMgMzAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNyAtPlxuIyA3MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdHVwbGUgVFMgdGhlbiBUU1xuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMwOSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDggLT5cbiMgNzYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3R1cGxlIFRFIHRoZW4gVEVcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA5IC0+XG4jIDgxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF92YXJpYW50IFZTIHRoZW4gVlNcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMjUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMCAtPlxuIyA4NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdmFyaWFudCBWRSB0aGVuIFZFXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzMzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTEgLT5cbiMgOTEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ09NTUEgKVxuIyAzMzggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMiAtPlxuIyA5MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDT0xPTiApXG4jIDM0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEzIC0+XG4jIDk1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBORUdJTkZJTklUWSApXG4jIDM0OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE0IC0+XG4jIDk3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBJTkZJTklUWSApXG4jIDM1MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE1IC0+XG4jIDk5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBJTkZJTklUWSApXG4jIDM1OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE2IC0+XG4jIDEwMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgTkFOIClcbiMgMzYzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTcgLT5cbiMgMTAzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBMZXh4ZXJfdXRpbHMuc3RyaW5nMm51bSAoTGV4aW5nLmxleGVtZSBsZXhidWYpIHdpdGhcbiAgICAgIHwgSU5UIF8gYXMgdG9rIC0+IENvbXBsaWFuY2UubGV4X2ludGVnZXIgdG9rXG4gICAgICB8IExBUkdFSU5UIF8gYXMgdG9rIC0+IENvbXBsaWFuY2UubGV4X2xhcmdlaW50IHRva1xuICAgICAgfCB0b2sgLT4gdG9rXG4gICAgKVxuIyAzNzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxOCAtPlxuIyAxMTAgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIChGTE9BVCAoZmxvYXRfb2Zfc3RyaW5nIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikpKSApXG4jIDM3OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE5IC0+XG4jIDExMiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBTVFJJTkcgXCJcIiApXG4jIDM4MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIwIC0+XG5sZXRcbiMgMTEzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1xuIyAzODkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG49IExleGluZy5zdWJfbGV4ZW1lIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgMSkgKGxleGJ1Zi5MZXhpbmcubGV4X2N1cnJfcG9zICsgLTEpIGluXG4jIDExNCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBTVFJJTkcgKExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgcykgKVxuIyAzOTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMSAtPlxuIyAxMTYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggRU9GIClcbiMgMzk4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjIgLT5cbiMgMTE4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIHJlYWQgbGV4YnVmIClcbiMgNDAzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjMgLT5cbiMgMTIwIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy51cGRhdGVfcG9zIGxleGJ1ZjsgcmVhZCBsZXhidWY7IClcbiMgNDA4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjQgLT5cbiMgMTIyIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBDb21wbGlhbmNlLmNvbW1lbnRfY2hlY2sgKCkgd2l0aFxuICAgICAgfCBPayAoKSAtPiByZWFkX2NvbW1lbnQgbGV4YnVmOyByZWFkIGxleGJ1ZlxuICAgICAgfCBFcnJvciBlcnIgLT4gIENPTVBMSUFOQ0VfRVJST1IgZXJyXG4gICAgKVxuIyA0MTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNSAtPlxuIyAxMjggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIENvbXBsaWFuY2UuY29tbWVudF9jaGVjayAoKSB3aXRoXG4gICAgICB8IE9rICgpIC0+IHJlYWQgbGV4YnVmXG4gICAgICB8IEVycm9yIGVyciAtPiAgQ09NUExJQU5DRV9FUlJPUiBlcnJcbiAgICApXG4jIDQyNiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI2IC0+XG4jIDEzNCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIikgKVxuIyA0MzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9jb21tZW50IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiA4OFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyAxMzkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggKCkgKVxuIyA0NDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxIC0+XG4jIDE0MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMudXBkYXRlX3BvcyBsZXhidWY7IHJlYWRfY29tbWVudCBsZXhidWYgKVxuIyA0NDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyIC0+XG4jIDE0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIFwidW5leHBlY3RlZCBFT0YgaW4gY29tbWVudFwiIClcbiMgNDUzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMyAtPlxuIyAxNDUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggcmVhZF9jb21tZW50IGxleGJ1ZiApXG4jIDQ1OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuOztcblxuIyAxNDcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuIFxuICBlbmRcblxuIyA0NjkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG4iLCJtb2R1bGUgWW9qc29uID0gU3RkLllvanNvblxub3BlbiBCcnJcblxudHlwZSBtZXRob2QnID0gR2V0IHwgUG9zdFxuXG5sZXQganN0cl9vZl9tZXRob2QgPSBmdW5jdGlvbiBHZXQgLT4gSnN0ci52IFwiR0VUXCIgfCBQb3N0IC0+IEpzdHIudiBcIlBPU1RcIlxuXG5tb2R1bGUgVHlwZXMgPSBzdHJ1Y3RcbiAgdHlwZSBvcmRlciA9IEFzY2VuZGluZyB8IERlc2NlbmRpbmcgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgc29ydCA9XG4gICAgfCBBbGJ1bVxuICAgIHwgQWxidW1BcnRpc3RcbiAgICB8IEFydGlzdFxuICAgIHwgQnVkZ2V0XG4gICAgfCBDb21tdW5pdHlSYXRpbmdcbiAgICB8IENyaXRpY1JhdGluZ1xuICAgIHwgRGF0ZUNyZWF0ZWRcbiAgICB8IERhdGVQbGF5ZWRcbiAgICB8IFBsYXlDb3VudFxuICAgIHwgUHJlbWllcmVEYXRlXG4gICAgfCBQcm9kdWN0aW9uWWVhclxuICAgIHwgU29ydE5hbWVcbiAgICB8IFJhbmRvbVxuICAgIHwgUmV2ZW51ZVxuICAgIHwgUnVudGltZVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5lbmRcblxudHlwZSB1c2VyID0ge1xuICBuYW1lIDogc3RyaW5nOyBbQGtleSBcIk5hbWVcIl1cbiAgc2VydmVyX2lkIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlcklkXCJdXG4gIHNlcnZlcl9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiU2VydmVyTmFtZVwiXVxuICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxufVxuW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG5tb2R1bGUgdHlwZSBRdWVyeSA9IHNpZ1xuICB0eXBlIHBhdGhfcGFyYW1zXG4gIHR5cGUgcGFyYW1zIFtAQGRlcml2aW5nIHlvanNvbl1cbiAgdHlwZSByZXNwb25zZSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdmFsIG1ldGhvZCcgOiBtZXRob2QnXG4gIHZhbCBlbmRwb2ludCA6IHBhdGhfcGFyYW1zIC0+IHN0cmluZ1xuZW5kXG5cbm1vZHVsZSBBdXRoZW50aWNhdGVfYnlfbmFtZSA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuXG4gIHR5cGUgcGFyYW1zID0geyB1c2VybmFtZSA6IHN0cmluZzsgW0BrZXkgXCJVc2VybmFtZVwiXSBwdyA6IHN0cmluZyBbQGtleSBcIlB3XCJdIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgdXNlciA6IHVzZXI7IFtAa2V5IFwiVXNlclwiXVxuICAgIGFjY2Vzc190b2tlbiA6IHN0cmluZzsgW0BrZXkgXCJBY2Nlc3NUb2tlblwiXVxuICAgIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICBsZXQgbWV0aG9kJyA9IFBvc3RcbiAgbGV0IGVuZHBvaW50IF8gPSBcIi9Vc2Vycy9BdXRoZW50aWNhdGVCeU5hbWVcIlxuZW5kXG5cbm1vZHVsZSBJdGVtID0gc3RydWN0XG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoID0gKHN0cmluZyAqIHN0cmluZykgbGlzdFxuXG4gIGxldCBpbWFnZV9ibHVyX2hhc2hfb2ZfeW9qc29uIHkgPVxuICAgIGxldCBhc3NvYyA9IFlvanNvbi5TYWZlLlV0aWwudG9fYXNzb2MgeSBpblxuICAgIExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgdikpIGFzc29jXG5cbiAgbGV0IHlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2ggaSA6IFlvanNvbi5TYWZlLnQgPVxuICAgIGxldCBhc3NvYyA9IExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgYFN0cmluZyB2KSkgaSBpblxuICAgIGBBc3NvYyBhc3NvY1xuXG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoZXMgPSB7XG4gICAgcHJpbWFyeSA6IGltYWdlX2JsdXJfaGFzaCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQcmltYXJ5XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgdHlwZV8gPVxuICAgIHwgQWdncmVnYXRlRm9sZGVyXG4gICAgfCBBdWRpb1xuICAgIHwgQXVkaW9Cb29rXG4gICAgfCBCYXNlUGx1Z2luRm9sZGVyXG4gICAgfCBCb29rXG4gICAgfCBCb3hTZXRcbiAgICB8IENoYW5uZWxcbiAgICB8IENoYW5uZWxGb2xkZXJJdGVtXG4gICAgfCBDb2xsZWN0aW9uRm9sZGVyXG4gICAgfCBFcGlzb2RlXG4gICAgfCBGb2xkZXJcbiAgICB8IEdlbnJlXG4gICAgfCBMaXZlVHZDaGFubmVsXG4gICAgfCBMaXZlVHZQcm9ncmFtXG4gICAgfCBNYW51YWxQbGF5bGlzdHNGb2xkZXJcbiAgICB8IE1vdmllXG4gICAgfCBNdXNpY0FsYnVtXG4gICAgfCBNdXNpY0FydGlzdFxuICAgIHwgTXVzaWNHZW5yZVxuICAgIHwgTXVzaWNWaWRlb1xuICAgIHwgUGVyc29uXG4gICAgfCBQaG90b1xuICAgIHwgUGhvdG9BbGJ1bVxuICAgIHwgUGxheWxpc3RcbiAgICB8IFBsYXlsaXN0c0ZvbGRlclxuICAgIHwgUHJvZ3JhbVxuICAgIHwgUmVjb3JkaW5nXG4gICAgfCBTZWFzb25cbiAgICB8IFNlcmllc1xuICAgIHwgU3R1ZGlvXG4gICAgfCBUcmFpbGVyXG4gICAgfCBUdkNoYW5uZWxcbiAgICB8IFR2UHJvZ3JhbVxuICAgIHwgVXNlclJvb3RGb2xkZXJcbiAgICB8IFVzZXJWaWV3XG4gICAgfCBWaWRlb1xuICAgIHwgWWVhclxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBmaWVsZCA9XG4gICAgfCBBaXJUaW1lXG4gICAgfCBCYXNpY1N5bmNJbmZvXG4gICAgfCBDYW5EZWxldGVcbiAgICB8IENhbkRvd25sb2FkXG4gICAgfCBDaGFubmVsSW1hZ2VcbiAgICB8IENoYW5uZWxJbmZvXG4gICAgfCBDaGFwdGVyc1xuICAgIHwgQ2hpbGRDb3VudFxuICAgIHwgQ3VtdWxhdGl2ZVJ1blRpbWVUaWNrc1xuICAgIHwgQ3VzdG9tUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZUxhc3RNZWRpYUFkZGVkXG4gICAgfCBEYXRlTGFzdFJlZnJlc2hlZFxuICAgIHwgRGF0ZUxhc3RTYXZlZFxuICAgIHwgRGlzcGxheVByZWZlcmVuY2VzSWRcbiAgICB8IEVuYWJsZU1lZGlhU291cmNlRGlzcGxheVxuICAgIHwgRXRhZ1xuICAgIHwgRXh0ZXJuYWxFdGFnXG4gICAgfCBFeHRlcm5hbFNlcmllc0lkXG4gICAgfCBFeHRlcm5hbFVybHNcbiAgICB8IEV4dHJhSWRzXG4gICAgfCBHZW5yZXNcbiAgICB8IEhlaWdodFxuICAgIHwgSG9tZVBhZ2VVcmxcbiAgICB8IEluaGVyaXRlZFBhcmVudGFsUmF0aW5nVmFsdWVcbiAgICB8IElzSERcbiAgICB8IEl0ZW1Db3VudHNcbiAgICB8IExvY2FsVHJhaWxlckNvdW50XG4gICAgfCBNZWRpYVNvdXJjZUNvdW50XG4gICAgfCBNZWRpYVNvdXJjZXNcbiAgICB8IE1lZGlhU3RyZWFtc1xuICAgIHwgT3JpZ2luYWxUaXRsZVxuICAgIHwgT3ZlcnZpZXdcbiAgICB8IFBhcmVudElkXG4gICAgfCBQYXRoXG4gICAgfCBQZW9wbGVcbiAgICB8IFBsYXlBY2Nlc3NcbiAgICB8IFByZXNlbnRhdGlvblVuaXF1ZUtleVxuICAgIHwgUHJpbWFyeUltYWdlQXNwZWN0UmF0aW9cbiAgICB8IFByb2R1Y3Rpb25Mb2NhdGlvbnNcbiAgICB8IFByb3ZpZGVySWRzXG4gICAgfCBSZWN1cnNpdmVJdGVtQ291bnRcbiAgICB8IFJlZnJlc2hTdGF0ZVxuICAgIHwgUmVtb3RlVHJhaWxlcnNcbiAgICB8IFNjcmVlbnNob3RJbWFnZVRhZ3NcbiAgICB8IFNlYXNvblVzZXJEYXRhXG4gICAgfCBTZXJpZXNQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFNlcmllc1ByaW1hcnlJbWFnZVxuICAgIHwgU2VyaWVzU3R1ZGlvXG4gICAgfCBTZXJ2aWNlTmFtZVxuICAgIHwgU2V0dGluZ3NcbiAgICB8IFNvcnROYW1lXG4gICAgfCBTcGVjaWFsRXBpc29kZU51bWJlcnNcbiAgICB8IFNwZWNpYWxGZWF0dXJlQ291bnRcbiAgICB8IFN0dWRpb3NcbiAgICB8IFN5bmNJbmZvXG4gICAgfCBUYWdsaW5lc1xuICAgIHwgVGFnc1xuICAgIHwgVGhlbWVTb25nSWRzXG4gICAgfCBUaGVtZVZpZGVvSWRzXG4gICAgfCBXaWR0aFxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgKCogVGhlIFtUeXBlXSBmaWVsZCBpcyBhY3R1YWxseSBhIGpzb24gc3RyaW5nIGJ1dCB3ZSB3YW50IHRvIHNlZSBpdCBhcyBhXG4gICAgIHZhcmlhbnQgKHdoaWNoIGlzIGEgbGlzdCBvZiBvbmUgc3RyaW5nKSAqKVxuICB0eXBlIHR5cGVfc3RyID0gdHlwZV9cblxuICBsZXQgdHlwZV9zdHJfb2ZfeW9qc29uIGogPVxuICAgIGxldCBzID0gWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgaiBpblxuICAgIHR5cGVfX29mX3lvanNvbiAoYExpc3QgWyBgU3RyaW5nIHMgXSlcblxuICBsZXQgeW9qc29uX29mX3R5cGVfc3RyIHRzID1cbiAgICBtYXRjaCB5b2pzb25fb2ZfdHlwZV8gdHMgd2l0aCBgTGlzdCBbIGpzb24gXSAtPiBqc29uIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB0eXBlIHQgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgc29ydF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlNvcnROYW1lXCJdXG4gICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICBwYXRoIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlBhdGhcIl1cbiAgICBhbGJ1bV9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJBbGJ1bUlkXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbiBvcHRpb247XG4gICAgICAgICgqIFtQYXJlbnRJZF0gbWlnaHQgYWJzZW50LCBbbnVsbF0sIG9yIGEgc3RyaW5nICopXG4gICAgICAgIFtAeW9qc29uLm9wdGlvbl1cbiAgICAgICAgW0BrZXkgXCJQYXJlbnRJZFwiXVxuICAgIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICAgIGltYWdlX2JsdXJfaGFzaGVzIDogaW1hZ2VfYmx1cl9oYXNoZXM7IFtAa2V5IFwiSW1hZ2VCbHVySGFzaGVzXCJdXG4gICAgdHlwZV8gOiB0eXBlX3N0cjsgW0BrZXkgXCJUeXBlXCJdXG4gICAgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nIG9wdGlvbjtcbiAgICAgICAgW0BkZWZhdWx0IE5vbmVdIFtAeW9qc29uX2Ryb3BfZGVmYXVsdCAoID0gKV0gW0BrZXkgXCJDb2xsZWN0aW9uVHlwZVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpZHMgOiBzdHJpbmcgbGlzdDsgW0BkZWZhdWx0IFtdXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiaWRzXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInBhcmVudElkXCJdXG4gICAgdXNlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJ1c2VySWRcIl1cbiAgICBmaWVsZHMgOiBJdGVtLmZpZWxkIGxpc3Q7XG4gICAgaW5jbHVkZV9pdGVtX3R5cGVzIDogSXRlbS50eXBlXyBsaXN0OyBbQGtleSBcImluY2x1ZGVJdGVtVHlwZXNcIl1cbiAgICBzdGFydF9pbmRleCA6IGludCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzdGFydEluZGV4XCJdXG4gICAgbGltaXQgOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dXG4gICAgc29ydF9vcmRlciA6IFR5cGVzLm9yZGVyIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInNvcnRPcmRlclwiXVxuICAgIHNvcnRfYnkgOiBUeXBlcy5zb3J0IGxpc3Q7IFtAa2V5IFwic29ydEJ5XCJdXG4gICAgcmVjdXJzaXZlIDogYm9vbDtcbiAgICBlbmFibGVfdXNlcl9kYXRhIDogYm9vbDsgW0BrZXkgXCJlbmFibGVVc2VyRGF0YVwiXVxuICAgIGVuYWJsZV9pbWFnZXMgOiBib29sOyBbQGtleSBcImVuYWJsZUltYWdlc1wiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IF8gPSBcIi9JdGVtc1wiXG5lbmRcblxubW9kdWxlIFZpZXdzID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB7IHVzZXJfaWQgOiBzdHJpbmcgfVxuXG4gIHR5cGUgcGFyYW1zID0ge1xuICAgIGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA6IGJvb2w7IFtAa2V5IFwiaW5jbHVkZUV4dGVybmFsQ29udGVudFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IHBwID0gUHJpbnRmLnNwcmludGYgXCIvVXNlcnMvJXMvVmlld3NcIiBwcC51c2VyX2lkXG5lbmRcblxubW9kdWxlIFZpcnR1YWxfZm9sZGVycyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgdmlydHVhbF9mb2xkZXIgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgbG9jYXRpb25zIDogc3RyaW5nIGxpc3Q7IFtAa2V5IFwiTG9jYXRpb25zXCJdXG4gICAgaXRlbV9pZCA6IHN0cmluZzsgW0BrZXkgXCJJdGVtSWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgdHlwZSByZXNwb25zZSA9IHZpcnR1YWxfZm9sZGVyIGxpc3QgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gUHJpbnRmLnNwcmludGYgXCIvTGlicmFyeS9WaXJ0dWFsRm9sZGVyc1wiXG5lbmRcblxubW9kdWxlIFN5c3RlbSA9IHN0cnVjdFxuICBtb2R1bGUgSW5mbyA9IHN0cnVjdFxuICAgIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG4gICAgdHlwZSBwYXJhbXMgPSB1bml0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICAgIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgICBsb2NhbF9hZGRyZXNzIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiTG9jYWxBZHJlc3NcIl1cbiAgICAgIHNlcnZlcl9uYW1lIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlck5hbWVcIl1cbiAgICAgIHByb2R1Y3RfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIlByb2R1Y3ROYW1lXCJdXG4gICAgICBvcGVyYXRpbmdfc3lzdGVtIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiT3BlcmF0aW5nU3lzdGVtXCJdXG4gICAgICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxuICAgIH1cbiAgICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgICBsZXQgbWV0aG9kJyA9IEdldFxuICAgIGxldCBlbmRwb2ludCBfID0gXCIvU3lzdGVtL0luZm9cIlxuICBlbmRcbmVuZFxuXG4oKiBGb3J3YXJkIGRlY2xhcmF0aW9uIHRvIGJlIGZpbGxlZCBieSB0aGUgYXBwICopXG5sZXQgc2Vzc2lvbl91dWlkID0gcmVmIE5vbmVcbmxldCBzZXRfc2Vzc2lvbl91dWlkIHMgPSBzZXNzaW9uX3V1aWQgOj0gU29tZSBzXG5cbmxldCBhdXRob3JpemF0aW9uID90b2tlbiAoKSA9XG4gIGxldCB0b2tlbiA9XG4gICAgbWF0Y2ggdG9rZW4gd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIHQgLT4gUHJpbnRmLnNwcmludGYgXCIsIFRva2VuPSVTXCIgdFxuICBpblxuICBsZXQgc2Vzc2lvbl91dWlkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OlwiXCIgIXNlc3Npb25fdXVpZCBpblxuICBQcmludGYuc3ByaW50ZlxuICAgIFwiTWVkaWFCcm93c2VyIENsaWVudD1cXFwiT2NhbWl4XFxcIiwgRGV2aWNlPVxcXCJGaXJlZm94XFxcIiwgRGV2aWNlSWQ9XFxcIiVzXFxcIiwgXFxcbiAgICAgVmVyc2lvbj1cXFwiMC4xXFxcIiVzXCJcbiAgICBzZXNzaW9uX3V1aWQgdG9rZW5cblxubGV0IHJlcXVlc3QgKHR5cGUgcHAgcCByKSA/YmFzZV91cmwgP3Rva2VuID9oZWFkZXJzXG4gICAgKG1vZHVsZSBRIDogUXVlcnlcbiAgICAgIHdpdGggdHlwZSBwYXRoX3BhcmFtcyA9IHBwXG4gICAgICAgYW5kIHR5cGUgcGFyYW1zID0gcFxuICAgICAgIGFuZCB0eXBlIHJlc3BvbnNlID0gcikgKHBhcmFtcyA6IHApIChwYXRoX3BhcmFtcyA6IHBwKSA6IHIgRnV0Lm9yX2Vycm9yID1cbiAgbGV0IG9wZW4gQnJyX2lvLkZldGNoIGluXG4gIGxldCB1cmkgPVxuICAgIEpzdHIuKFxuICAgICAgVXJpLm9mX2pzdHIgP2Jhc2U6KE9wdGlvbi5tYXAgdiBiYXNlX3VybCkgKHYgKFEuZW5kcG9pbnQgcGF0aF9wYXJhbXMpKSlcbiAgICB8PiBSZXN1bHQuZ2V0X29rXG4gIGluXG4gIGxldCBhdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgaW5cbiAgQ29uc29sZS5sb2cgWyBhdXRob3JpemF0aW9uIF07XG4gIGxldCBoZWFkZXJzID1cbiAgICBIZWFkZXJzLm9mX2Fzc29jID9pbml0OmhlYWRlcnNcbiAgICAgIEpzdHIuXG4gICAgICAgIFtcbiAgICAgICAgICAodiBcImNvbnRlbnQtdHlwZVwiLCB2IFwidGV4dC9qc29uXCIpO1xuICAgICAgICAgICh2IFwiWC1FbWJ5LUF1dGhvcml6YXRpb25cIiwgdiBhdXRob3JpemF0aW9uKTtcbiAgICAgICAgXVxuICBpblxuICBsZXQgbWV0aG9kJyA9IGpzdHJfb2ZfbWV0aG9kIFEubWV0aG9kJyBpblxuICBsZXQgaW5pdCwgdXJsID1cbiAgICBtYXRjaCBRLm1ldGhvZCcgd2l0aFxuICAgIHwgR2V0IC0+XG4gICAgICAgIGxldCBwYXJhbXMgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEpzb24uZGVjb2RlIHw+IFJlc3VsdC5nZXRfb2sgfD4gVXJpLlBhcmFtcy5vZl9vYmpcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVyaV93aXRoX3BhcmFtcyA9IFVyaS53aXRoX3F1ZXJ5X3BhcmFtcyB1cmkgcGFyYW1zIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgKCksIFVyaS50b19qc3RyIHVyaV93aXRoX3BhcmFtcylcbiAgICB8IFBvc3QgLT5cbiAgICAgICAgbGV0IGJvZHkgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEJvZHkub2ZfanN0clxuICAgICAgICBpblxuICAgICAgICAoUmVxdWVzdC5pbml0IH5oZWFkZXJzIH5tZXRob2QnIH5ib2R5ICgpLCBVcmkudG9fanN0ciB1cmkpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCogcmVzID0gcmVxdWVzdCBAQCBSZXF1ZXN0LnYgfmluaXQgdXJsIGluXG4gIGxldCsganNvbiA9IFJlc3BvbnNlLmFzX2JvZHkgcmVzIHw+IEJvZHkudGV4dCBpblxuICBsZXQgeW9qc29uID0gWW9qc29uLlNhZmUuZnJvbV9zdHJpbmcgKEpzdHIudG9fc3RyaW5nIGpzb24pIGluXG4gIHRyeSBRLnJlc3BvbnNlX29mX3lvanNvbiB5b2pzb25cbiAgd2l0aCBlIC0+XG4gICAgQ29uc29sZS5sb2cgWyBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgZGVjb2RpbmcgcmVzcG9uc2U6IFwiOyBqc29uIF07XG4gICAgQ29uc29sZS5sb2cgWyBlIF07XG4gICAgcmFpc2UgZVxuIiwib3BlbiEgU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJycl9pb1xubW9kdWxlIEFwaSA9IERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4oKiBQcm9wb3NpdGlvbjpcbiAgIC0gVXNlIHByaW1hcnkga2V5IHRvIHByb3ZpZGUgZmlsdGVyaW5nXG4gICAtIFVzZSBpbmRleCBrZXlzIHRvIHByb3ZpZGUgc29ydHNcblxuICAgQmlnIHByaW1hcnkga2V5cyBkcml2ZSB0aGUgY29zdCBvZiBbZ2V0X2FsbF9rZXlzXSB1cC5cbiAgIFdlIGNvdWxkIGRlbGVnYXRlIHNvbWUgZmlsdGVyaW5nIHRvIHRoZSBpbmRleCBrZXlzIGlmIG5lY2Vzc2FyeS5cblxuICAgIFdlIGNvdWxkIGFsc28gdHJpZWQgdG8gcHJlLXByb2Nlc3Mgb3IgY29tcHJlc3MgdGhlIGtleXMgKilcblxubGV0IHRfdG9fanYgZW5jb2RlciB0ID1cbiAgZW5jb2RlciB0IHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLm9mX3N0cmluZyB8PiBCcnIuSnNvbi5kZWNvZGVcbiAgfD4gUmVzdWx0LmdldF9leG5cblxubGV0IGp2X3RvX3QgZGVjb2RlciBqID1cbiAgbGV0IGpzb24gPSBCcnIuSnNvbi5lbmNvZGUgaiBpblxuICBPayAoSnN0ci50b19zdHJpbmcganNvbiB8PiBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyB8PiBkZWNvZGVyKVxuXG5tb2R1bGUgT3JkZXJyZWRfaXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0geyBpZCA6IGludDsgaXRlbSA6IHN0cmluZyBvcHRpb24gfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9pbnQga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9faW50IGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJpZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cbiAgbGV0IGdldF9rZXkgdCA9IHQuaWRcbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbi5BcGlcblxuICB0eXBlIHNvcnRzID0geyBkYXRlX2FkZGVkIDogaW50OyB2aWV3cyA6IHN0cmluZyBsaXN0OyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSB0ID0geyBzb3J0cyA6IHNvcnRzOyBpdGVtIDogSXRlbS50IH0gW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBjb21wYXJlIHQgdCcgPSBTdHJpbmcuY29tcGFyZSB0LnNvcnRzLnNvcnRfbmFtZSB0Jy5zb3J0cy5zb3J0X25hbWVcblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0geyBpZCA6IHN0cmluZzsgc29ydF9uYW1lIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiB7IGlkOyBzb3J0X25hbWU7IHZpZXdzIH0gPVxuICAgICAgbGV0IGlkID0gSnYub2Zfc3RyaW5nIGlkIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gSnYub2Zfc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgbGV0IHZpZXdzID0gSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgdmlld3MgaW5cbiAgICAgIEp2Lm9mX2p2X2FycmF5IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi50b19qdl9hcnJheSBqIHdpdGhcbiAgICAgIHwgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF0gLT5cbiAgICAgICAgICBsZXQgaWQgPSBKdi50b19zdHJpbmcgaWQgaW5cbiAgICAgICAgICBsZXQgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgICAgIGxldCB2aWV3cyA9IEp2LnRvX2xpc3QgSnYudG9fc3RyaW5nIHZpZXdzIGluXG4gICAgICAgICAgeyBpZDsgc29ydF9uYW1lOyB2aWV3cyB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9XG4gICAgICBJbmRleGVkX2RiLktleV9wYXRoLihcbiAgICAgICAgUyBbfCBJZCBcIml0ZW0uSWRcIjsgSWQgXCJpdGVtLk5hbWVcIjsgSWQgXCJzb3J0cy52aWV3c1wiIHxdKVxuICBlbmRcblxuICBtb2R1bGUgS2V5X2RhdGVfYWRkZWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwic29ydHMuZGF0ZV9hZGRlZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfaWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaXRlbS5JZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdmlld19raW5kID0gc3RydWN0XG4gICAgKCogdG9kbzogdXNlIGEgZW51bSBmb3Iga2luZHMgKilcbiAgICB0eXBlIHQgPSB7IHR5cGUnIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiBfayA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgdHlwZSc7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgeyB0eXBlJyA9IEp2LnRvX3N0cmluZyB0eXBlJzsgdmlld3MgPSBKdi4odG9fbGlzdCB0b19zdHJpbmcgdmlld3MpIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5UeXBlXCI7IElkIFwic29ydHMudmlld3NcIiB8XVxuICBlbmRcblxuICBtb2R1bGUgS2V5X3R5cGVfbmFtZSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuXG4gICAgbGV0IHRvX2p2IF90ID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCBjb2xsZWN0aW9uX3R5cGU7IHNvcnRfbmFtZSB8XSAtPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25fdHlwZSA9IEp2LnRvX3N0cmluZyBjb2xsZWN0aW9uX3R5cGU7XG4gICAgICAgICAgICBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lO1xuICAgICAgICAgIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uQ29sbGVjdGlvblR5cGVcIjsgSWQgXCJzb3J0cy5zb3J0X25hbWVcIiB8XVxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuXG4gIGxldCBnZXRfa2V5IHQgPVxuICAgIHtcbiAgICAgIEtleS5zb3J0X25hbWUgPSB0LnNvcnRzLnNvcnRfbmFtZTtcbiAgICAgIGlkID0gdC5pdGVtLkl0ZW0uaWQ7XG4gICAgICB2aWV3cyA9IHQuc29ydHMudmlld3M7XG4gICAgfVxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlciA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4gICgqIHRvZG86IG11bHRpc2VydmVyOiB3ZSBzaG91bGQgYWRkIGEgc2VydmVyX2lkIGtleSAqKVxuICB0eXBlIHQgPSBWaXJ0dWFsX2ZvbGRlcnMudmlydHVhbF9mb2xkZXIgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiSXRlbUlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcInZpcnR1YWxfZm9sZGVyc1wiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG4gIGxldCBnZXRfa2V5IHQgPSB0LlZpcnR1YWxfZm9sZGVycy5pdGVtX2lkXG5lbmRcblxubW9kdWxlIE9yZGVycmVkX2l0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoT3JkZXJyZWRfaXRlbXMpXG5tb2R1bGUgSXRlbXNfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChJdGVtcylcbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcl9zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKFZpcnR1YWxfZm9sZGVyKVxuXG5tb2R1bGUgSXRlbXNCeURhdGVBZGRlZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfZGF0ZV9hZGRlZClcblxubW9kdWxlIEl0ZW1zQnlWaWV3QW5kS2luZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV92aWV3X2FuZF9raW5kXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfdmlld19raW5kKVxuXG5tb2R1bGUgSXRlbXNCeUlkID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2lkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfaWQpXG5cbm1vZHVsZSBJdGVtc0J5VHlwZUFuZE5hbWUgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdHlwZV9hbmRfbmFtZVwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3R5cGVfbmFtZSlcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2lvLkluZGV4ZWRfZGJcbm1vZHVsZSBTb3VyY2UgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIE9JID0gU3RvcmVzLk9yZGVycmVkX2l0ZW1zX3N0b3JlXG5tb2R1bGUgSSA9IFN0b3Jlcy5JdGVtc19zdG9yZVxubW9kdWxlIFZGID0gU3RvcmVzLlZpcnR1YWxfZm9sZGVyX3N0b3JlXG5vcGVuIFNvdXJjZS5BcGlcblxuKCogSXRlbXMgSGllcmFyY2h5XG5cbiAgIFVzZXJSb290Rm9sZGVyIChcIk1lZGlhIEZvbGRlcnNcIiBcImU5ZDUwNzVhNTU1YzFjYmMzOTRlZWM0Y2VmMjk1Mjc0XCIpXG4gICAgICAgICAgICAgICAgICAoR2V0cyB0aGUgcm9vdCBmb2xkZXIgZnJvbSBhIHVzZXIncyBsaWJyYXJ5LiApXG4gICBeIENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIEFnZ3JlZ2F0ZUZvbGRlciAoXCJyb290XCIgXCJmMjdjYWEzN2U1MTQyMjI1Y2NlZGVkNDhmNjU1MzUwMlwiKVxuICAgXiBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpXG4gICBeIEZvbGRlcisgPC0gTXVzaWNBcnRpc3QgPC0gTXVzaWNBbGJ1bSA8LSBBdWRpb1xuXG4gICBKZWxseWZpbiBjb25zaWRlcnMgdGhhdCBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpID09IENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIFRoaXMgZXF1YWxpdHkgY2FuIGJlIHJldHJpdmVkIGJ5IHF1ZXJ5aW5nIHRoZSBcIlZpcnR1YWxGb2xkZXJzXCIgYW5kIGxvb2sgYXRcbiAgIHRoZSBsb2NhdGlvbnMnIHBhdGhzLiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgbm90IGFjY2Vzc2libGUgdG8gdW5wcml2aWxlZGdlZCB1c2Vycy4uLlxuXG4gICBUbyBhY3R1YWxseSBrbm93IHdoaWNoIGZvbGRlcnMgYXJlIHBhcnQgb2YgYSB1c2VyIHZpZXcgd2UgbmVlZCB0byBxdWVyeSB0aGVcbiAgIGl0ZW1zIHRoYXQgaGF2ZSB0aGlzIHZpZXcncyBpZCBhcyBhIFtwYXJlbnRJZF0uIFRoZSBhY3R1YWwgW3BhcmVudElkXSBvZlxuICAgdGhlc2UgaXRlbXMgd2lsbCBiZSBkaWZmZXJlbnQgYW5kIGFyZSB0aGUgaWRzIGFjdHVhbCBmb2xkZXJzIHRoYXRcbiAgIGNvbnN0aXR1dGUgdGhpcyB2aWV3LlxuXG4gICBGb3Igc2ltcGxpY2l0eSAoPykgd2UgY29uc2lkZXIgdGhhdCBhbiBpdGVtIGlzIHBhcnQgb2YgYSB2aWV3IGlmIGl0cyBwYXRoIGlzXG4gICBwcmVmaXhlZCBieSBvbmUgb2YgdGhlIHZpZXcncyB2aXJ0dWFsIGZvbGRlciBsb2NhdGlvbnMuXG4qKVxuXG5sZXQgY2h1bmtfc2l6ZSA9IDUwMFxubGV0IGluY2x1ZGVfaXRlbV90eXBlcyA9IFsgU291cmNlLkFwaS5JdGVtLk11c2ljQXJ0aXN0OyBNdXNpY0FsYnVtOyBBdWRpbyBdXG5cbmxldCBmZXRjaF90b3RhbF9pdGVtX2NvdW50IHNvdXJjZSA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgcmVzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICB7XG4gICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkqKVxuICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgZmllbGRzID0gW107XG4gICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzO1xuICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICBsaW1pdCA9IFNvbWUgMDtcbiAgICAgICAgICBzb3J0X29yZGVyID0gU29tZSBBc2NlbmRpbmc7XG4gICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlO1xuICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICgpXG4gIGluXG4gIHJlcy50b3RhbF9yZWNvcmRfY291bnRcblxudHlwZSBkYl9pbmZvcyA9IHtcbiAgbGFzdF9rZXkgOiBpbnQgb3B0aW9uO1xuICBsYXN0X3ZhbHVlIDogU3RvcmVzLk9yZGVycmVkX2l0ZW1zLnQgb3B0aW9uO1xufVxuXG5sZXQgZ2V0X2RiX2luZm9zIGlkYiA9XG4gIGxldCBpbmZvcywgc2V0X2luZm9zID0gRnV0LmNyZWF0ZSAoKSBpblxuICBsZXQgdHJhbnNhY3Rpb24gPSBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpIF0gfm1vZGU6UmVhZG9ubHkgaWRiIGluXG4gIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICBsZXQgcmVxID0gT0kub3Blbl9jdXJzb3IgfmRpcmVjdGlvbjpQcmV2IHN0b3JlIGluXG4gIGxldCBsYXN0X2tleSA9IHJlZiBOb25lIGluXG4gIGxldCBfID1cbiAgICBSZXF1ZXN0Lm9uX3N1Y2Nlc3MgcmVxIH5mOihmdW4gXyBxIC0+XG4gICAgICAgIG1hdGNoIFJlcXVlc3QucmVzdWx0IHEgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBOb25lIH1cbiAgICAgICAgfCBTb21lIGN1cnNvciAtPiAoXG4gICAgICAgICAgICBpZiBPcHRpb24uaXNfbm9uZSAhbGFzdF9rZXkgdGhlblxuICAgICAgICAgICAgICBsYXN0X2tleSA6PSBPSS5DdXJzb3Jfd2l0aF92YWx1ZS5rZXkgY3Vyc29yO1xuICAgICAgICAgICAgbWF0Y2ggT0kuQ3Vyc29yX3dpdGhfdmFsdWUudmFsdWUgY3Vyc29yIHdpdGhcbiAgICAgICAgICAgIHwgU29tZSAoeyBpdGVtID0gU29tZSBfOyBfIH0gYXMgaXRlbSkgLT5cbiAgICAgICAgICAgICAgICBzZXRfaW5mb3MgeyBsYXN0X2tleSA9ICFsYXN0X2tleTsgbGFzdF92YWx1ZSA9IFNvbWUgaXRlbSB9XG4gICAgICAgICAgICB8IF8gLT4gT0kuQ3Vyc29yX3dpdGhfdmFsdWUuY29udGludWUgY3Vyc29yKSlcbiAgaW5cbiAgaW5mb3NcblxubGV0IGlzX2RiX2NvbnNpc3RlbnQgfnNvdXJjZTpfIH5sYXN0X3NvdXJjZV9pdGVtX2tleSBkYl9zeW5jX2luZm9zID1cbiAgbGV0IGxhc3Rfa2V5ID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OigtMSkgZGJfc3luY19pbmZvcy5sYXN0X2tleSBpblxuICBpZiBsYXN0X2tleSA+IGxhc3Rfc291cmNlX2l0ZW1fa2V5IHRoZW5cbiAgICAoKiBUaGVyZSBhcmUgZmV3ZXIgaXRlbXMgaW4gdGhlIHNvdXJjZSB0aGFuIGV4cGVjdGVkICopXG4gICAgZmFsc2VcbiAgZWxzZVxuICAgICgqIFRvZG86IGNoZWNrIHRoYXQgdGhlIGxhc3Qga25vd24gaXRlbSBpcyB0aGUgc2FtZSB0aGFuIGluIHRoZSBzb3VyY2UgKilcbiAgICB0cnVlXG5cbnR5cGUgc3RhdHVzID1cbiAgfCBVbmtub3duXG4gIHwgSW5fc3luY1xuICB8IEluY29uc2lzdGVudFxuICB8IE5ld19pdGVtcyBvZiB7XG4gICAgICBmaXJzdF9taXNzaW5nX2tleSA6IGludDtcbiAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7XG4gICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludDtcbiAgICB9XG4gIHwgUGFydGlhbF9mZXRjaCBvZiB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IDogaW50IH1cblxudHlwZSBwcm9ncmVzcyA9IHsgdG90YWwgOiBpbnQ7IHJlbWFpbmluZyA6IGludCB9XG50eXBlIHJlcG9ydCA9IHsgc3RhdHVzIDogc3RhdHVzOyBzeW5jX3Byb2dyZXNzIDogcHJvZ3Jlc3Mgb3B0aW9uIH1cblxubGV0IGluaXRpYWxfcmVwb3J0ID0geyBzdGF0dXMgPSBVbmtub3duOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9XG5cbmxldCBsb2dfc3RhdHVzID0gZnVuY3Rpb25cbiAgfCBVbmtub3duIC0+IENvbnNvbGUuaW5mbyBbIFwiRGF0YWJhc2Ugc3RhdHVzIGlzIHVua25vd25cIiBdXG4gIHwgSW5fc3luYyAtPiBDb25zb2xlLmluZm8gWyBcIkRhdGFiYXNlIGlzIHN5bmNocm9uaXplZFwiIF1cbiAgfCBJbmNvbnNpc3RlbnQgLT4gQ29uc29sZS53YXJuIFsgXCJEYXRhYmFzZSBpcyBvdXQtb2Ytc3luY1wiIF1cbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBDb25zb2xlLmluZm9cbiAgICAgICAgW1xuICAgICAgICAgIFwiTmV3IGl0ZW1zIHdlcmUgYWRkZWQgdG8gdGhlIHNvdXJjZS5cIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X21pc3Npbmdfa2V5ICsgMTtcbiAgICAgICAgICBcIm5ldyBpdGVtc1wiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfdW5mZXRjaGVkX2tleSArIDE7XG4gICAgICAgICAgXCJ1bmZldGNoZWQgaXRlbXNcIjtcbiAgICAgICAgXVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9IC0+XG4gICAgICBDb25zb2xlLmluZm9cbiAgICAgICAgW1xuICAgICAgICAgIFwiU29tZSBpdGVtcyBoYXZlIG5vdCBiZWVuIGZldGNoZWQgeWV0LlwiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfdW5mZXRjaGVkX2tleSArIDE7XG4gICAgICAgICAgXCJ1bmZldGNoZWQgaXRlbXNcIjtcbiAgICAgICAgXVxuXG5sZXQgY2hlY2tfc3RhdHVzIH5zb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQqIGRiX2luZm9zID0gZ2V0X2RiX2luZm9zIGlkYiBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHRvdGFsX2l0ZW1fY291bnQgPSBmZXRjaF90b3RhbF9pdGVtX2NvdW50IHNvdXJjZSBpblxuICAoKiBLZXlzIHN0YXJ0IGF0IDAsIGl0J3MgbmF0dXJhbCB0byBjb3VudCBpdGVtIGJ5IHN0YXJ0aW5nIHdpdGggMCAqKVxuICBsZXQgbGFzdF9zb3VyY2VfaXRlbV9rZXkgPSB0b3RhbF9pdGVtX2NvdW50IC0gMSBpblxuICBpZiBub3QgKGlzX2RiX2NvbnNpc3RlbnQgfnNvdXJjZSB+bGFzdF9zb3VyY2VfaXRlbV9rZXkgZGJfaW5mb3MpIHRoZW5cbiAgICBJbmNvbnNpc3RlbnRcbiAgZWxzZVxuICAgIG1hdGNoIGRiX2luZm9zIHdpdGhcbiAgICB8IHsgbGFzdF9rZXkgPSBOb25lOyBsYXN0X3ZhbHVlID0gTm9uZSB9IC0+XG4gICAgICAgICgqIFRoZSBkYiBoYXMgbm90IHlldCBiZWVuIHBvcHVsYXRlZCB3aXRoIHBsYWNlaG9sZGVycyAqKVxuICAgICAgICBOZXdfaXRlbXNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaXJzdF9taXNzaW5nX2tleSA9IDA7XG4gICAgICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5ID0gMDtcbiAgICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgICAgIH1cbiAgICB8IHsgbGFzdF9rZXkgPSBTb21lIGtleTsgbGFzdF92YWx1ZSA9IGl0ZW0gfSB3aGVuIGtleSA8IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gICAgICAtPlxuICAgICAgICAoKiBOZXcgaXRlbXMgd2VyZSBhZGRlZCB0byB0aGUgc291cmNlIHNpbmNlIHRoZSBsYXN0IHN5bmMgKilcbiAgICAgICAgbGV0IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPVxuICAgICAgICAgIG1hdGNoIGl0ZW0gd2l0aCBOb25lIC0+IDAgfCBTb21lIHsgaWQ7IF8gfSAtPiBpZCArIDFcbiAgICAgICAgaW5cbiAgICAgICAgTmV3X2l0ZW1zXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlyc3RfbWlzc2luZ19rZXkgPSBrZXkgKyAxO1xuICAgICAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleTtcbiAgICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgICAgIH1cbiAgICB8IHsgbGFzdF9rZXkgPSBTb21lIGtleTsgbGFzdF92YWx1ZSA9IGl0ZW0gfSB3aGVuIGtleSA9IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gICAgICAtPiAoXG4gICAgICAgIG1hdGNoIGl0ZW0gd2l0aFxuICAgICAgICB8IFNvbWUgeyBpZDsgXyB9IHdoZW4gaWQgPSBrZXkgLT4gSW5fc3luY1xuICAgICAgICB8IFNvbWUgeyBpZDsgXyB9IC0+XG4gICAgICAgICAgICBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA9IGlkICsgMTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgIFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5ID0gMDsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSlcbiAgICB8IF8gLT4gSW5jb25zaXN0ZW50XG5cbmxldCB1cGRhdGVfdmlld3Mgc291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgdmlld3MgPVxuICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgIChtb2R1bGUgU291cmNlLkFwaS5WaWV3cylcbiAgICAgIHsgaW5jbHVkZV9leHRlcm5hbF9jb250ZW50ID0gZmFsc2UgfVxuICAgICAgeyB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZCB9XG4gIGluXG4gIExpc3QuaXRlciB2aWV3cy5pdGVtcyB+ZjooZnVuIChpdGVtIDogSXRlbS50KSAtPlxuICAgICAgbGV0IG9wZW4gQnJyX2lvLkluZGV4ZWRfZGIgaW5cbiAgICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSk7IChtb2R1bGUgSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgICBpblxuICAgICAgbGV0IHNfaXRlbXMgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBJKSB0cmFuc2FjdGlvbiBpblxuICAgICAgbGV0IHNvcnRfbmFtZSA9IE9wdGlvbi52YWx1ZSBpdGVtLnNvcnRfbmFtZSB+ZGVmYXVsdDppdGVtLm5hbWUgaW5cbiAgICAgIEkucHV0IHsgc29ydHMgPSB7IGRhdGVfYWRkZWQgPSAtMTsgdmlld3MgPSBbXTsgc29ydF9uYW1lIH07IGl0ZW0gfSBzX2l0ZW1zXG4gICAgICB8PiBpZ25vcmUpO1xuICB2aWV3c1xuXG5sZXQgZGVkdWNlX3ZpcnR1YWxfZm9sZGVyc19mcm9tX3ZpZXdzIHNvdXJjZSAodmlld3MgOiBWaWV3cy5yZXNwb25zZSkgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgcGFyZW50X2lkc19vZl92aWV3X2NoaWxkcmVuIHsgSXRlbS5pZDsgXyB9ID1cbiAgICBsZXQrIHJlcyA9XG4gICAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICAgIHBhcmVudF9pZCA9IFNvbWUgaWQ7XG4gICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgIGZpZWxkcyA9IFsgUGFyZW50SWQgXTtcbiAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcyA9IFtdO1xuICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgICAgbGltaXQgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9vcmRlciA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X2J5ID0gW107XG4gICAgICAgICAgICByZWN1cnNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICgpXG4gICAgaW5cbiAgICBMaXN0LmZvbGRfbGVmdCB+aW5pdDpTdHJpbmcuU2V0LmVtcHR5IHJlcy5pdGVtc1xuICAgICAgfmY6KGZ1biBzZXQgeyBJdGVtLnBhcmVudF9pZDsgXyB9IC0+XG4gICAgICAgIG1hdGNoIHBhcmVudF9pZCB3aXRoXG4gICAgICAgIHwgTm9uZSB8IFNvbWUgTm9uZSAtPiBzZXRcbiAgICAgICAgfCBTb21lIChTb21lIHBpZCkgLT4gU3RyaW5nLlNldC5hZGQgcGlkIHNldClcbiAgaW5cbiAgbGV0IHBhdGhzX29mX3BhcmVudHMgcGFyZW50cyA9XG4gICAgbGV0KyByZXMgPVxuICAgICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRzID0gU3RyaW5nLlNldC50b19saXN0IHBhcmVudHM7XG4gICAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICBmaWVsZHMgPSBbIFBhdGggXTtcbiAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcyA9IFtdO1xuICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgICAgbGltaXQgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9vcmRlciA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X2J5ID0gW107XG4gICAgICAgICAgICByZWN1cnNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICgpXG4gICAgaW5cbiAgICBMaXN0LmZpbHRlcl9tYXAgcmVzLml0ZW1zIH5mOihmdW4geyBJdGVtLmlkOyBwYXRoOyBfIH0gLT5cbiAgICAgICAgT3B0aW9uLm1hcCAoZnVuIHBhdGggLT4gKGlkLCBwYXRoKSkgcGF0aClcbiAgaW5cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQrIHJlc3VsdCA9XG4gICAgTGlzdC5tYXAgdmlld3MuaXRlbXMgfmY6KGZ1biAoeyBJdGVtLmlkOyBfIH0gYXMgdmlldykgLT5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgbGV0KiBwYXJlbnRzID0gcGFyZW50X2lkc19vZl92aWV3X2NoaWxkcmVuIHZpZXcgaW5cbiAgICAgICAgbGV0KyBwYXRocyA9IHBhdGhzX29mX3BhcmVudHMgcGFyZW50cyBpblxuICAgICAgICAoaWQsIHBhdGhzKSlcbiAgICB8PiBGdXQub2ZfbGlzdFxuICBpblxuICBSZXN1bHQuZmxhdHRlbl9sIHJlc3VsdFxuXG5sZXQgdmlld3Nfb2ZfcGF0aCAodmZvbGRlcnMgOiAoc3RyaW5nICogKHN0cmluZyAqIHN0cmluZykgbGlzdCkgbGlzdCkgcGF0aCA9XG4gICgqIFdlIGxvb2sgYXQgdGhlIHByZWZpeCBvZiBhIHBhdGggdG8gZGV0ZXJtaW5lIHdoaWNoIHZpcnR1YWxfZm9sZGVyIChhbmQgdGh1c1xuICAgICB2aWV3KSBpdCdzIGEgcGFydCBvZi4gKilcbiAgTGlzdC5maWx0ZXJfbWFwIHZmb2xkZXJzIH5mOihmdW4gKHZpZXdfaWQsIGxvY2F0aW9ucykgLT5cbiAgICAgIGlmIExpc3QuZXhpc3RzIGxvY2F0aW9ucyB+ZjooZnVuIChfLCBwcmUpIC0+IFN0cmluZy5wcmVmaXggfnByZSBwYXRoKSB0aGVuXG4gICAgICAgIFNvbWUgdmlld19pZFxuICAgICAgZWxzZSBOb25lKVxuXG5sZXQgc3luYyA/KHJlcG9ydCA9IGZ1biBfIC0+ICgpKSB+KHNvdXJjZSA6IFNvdXJjZS5jb25uZXhpb24pIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCBtYWtlX3BsYWNlaG9sZGVycyBmaXJzdCBsYXN0ID1cbiAgICAoKiB0b2RvOiBlcnJvciBoYW5kbGluZyAqKVxuICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgIGluXG4gICAgbGV0IHN0b3JlID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gICAgZm9yIGkgPSBmaXJzdCB0byBsYXN0IGRvXG4gICAgICBpZ25vcmUgQEAgT0kucHV0IHsgaWQgPSBpOyBpdGVtID0gTm9uZSB9IHN0b3JlXG4gICAgZG9uZVxuICBpblxuICBsZXQgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdCBsYXN0ID1cbiAgICBsZXQgb3BlbiBTb3VyY2UgaW5cbiAgICBsZXQqIHZpZXdzID0gdXBkYXRlX3ZpZXdzIHNvdXJjZSBpZGIgaW5cbiAgICBsZXQqIHZmb2xkZXJzID0gZGVkdWNlX3ZpcnR1YWxfZm9sZGVyc19mcm9tX3ZpZXdzIHNvdXJjZSB2aWV3cyBpblxuICAgIGxldCAoKSA9IENvbnNvbGUuaW5mbyBbIFwiRmV0Y2hpbmcgaXRlbXNcIjsgZmlyc3Q7IFwidG9cIjsgbGFzdDsgXCI6XCIgXSBpblxuICAgIGxldCBmZXRjaF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGxldCB0b3RhbCA9IGxhc3QgLSBmaXJzdCArIDEgaW5cbiAgICBsZXQgcmVjIGVucXVldWUgfnN0YXJ0X2luZGV4IHRvZG8gPVxuICAgICAgaWYgdG9kbyA+IDAgdGhlbiAoXG4gICAgICAgIGxldCBsaW1pdCA9IG1pbiB0b2RvIGNodW5rX3NpemUgaW5cbiAgICAgICAgbGV0IHJlcSA9XG4gICAgICAgICAgQXBpLkl0ZW1zLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAoKiB0b2RvIG1ha2Ugc29ydCBleHBsaWNpdCAoYnkgZGF0ZSBhZGRlZCBkYXRlKSAqKVxuICAgICAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICAgIGZpZWxkcyA9IFsgUGFyZW50SWQ7IFBhdGggXTtcbiAgICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzO1xuICAgICAgICAgICAgICBzdGFydF9pbmRleCA9IFNvbWUgc3RhcnRfaW5kZXg7XG4gICAgICAgICAgICAgIGxpbWl0ID0gU29tZSBsaW1pdDtcbiAgICAgICAgICAgICAgc29ydF9vcmRlciA9IFNvbWUgQXNjZW5kaW5nO1xuICAgICAgICAgICAgICBzb3J0X2J5ID0gWyBEYXRlQ3JlYXRlZCBdO1xuICAgICAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICBpblxuICAgICAgICBRdWV1ZS5hZGQgcmVxIGZldGNoX3F1ZXVlO1xuICAgICAgICBlbnF1ZXVlIH5zdGFydF9pbmRleDooc3RhcnRfaW5kZXggKyBsaW1pdCkgKHRvZG8gLSBsaW1pdCkpXG4gICAgaW5cbiAgICBlbnF1ZXVlIH5zdGFydF9pbmRleDpmaXJzdCB0b3RhbDtcbiAgICBsZXQgdG90YWxfcXVlcmllcyA9IFF1ZXVlLmxlbmd0aCBmZXRjaF9xdWV1ZSBpblxuICAgIGxldCByZWMgcnVuX3F1ZXVlID8odGhyZWFkcyA9IDEpIHEgPVxuICAgICAgYXNzZXJ0ICh0aHJlYWRzID4gMCk7XG4gICAgICBsZXQgcmVjIHRha2VfbiBhY2MgbiA9XG4gICAgICAgIGlmIG4gPSAwIHRoZW4gTGlzdC5yZXYgYWNjXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBtYXRjaCBRdWV1ZS50YWtlX29wdCBxIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgICAgICAgfCBTb21lIGVsdCAtPiB0YWtlX24gKGVsdCA6OiBhY2MpIChuIC0gMSlcbiAgICAgIGluXG4gICAgICBsZXQgZiByZXEgPVxuICAgICAgICBsZXQrIHsgQXBpLkl0ZW1zLnN0YXJ0X2luZGV4OyBpdGVtczsgXyB9ID1cbiAgICAgICAgICBxdWVyeSBzb3VyY2UgKG1vZHVsZSBBcGkuSXRlbXMpIHJlcSAoKVxuICAgICAgICBpblxuICAgICAgICBsZXQgKCkgPVxuICAgICAgICAgIHJlcG9ydFxuICAgICAgICAgIEBAIFNvbWVcbiAgICAgICAgICAgICAgIHsgdG90YWwgPSB0b3RhbF9xdWVyaWVzOyByZW1haW5pbmcgPSBRdWV1ZS5sZW5ndGggZmV0Y2hfcXVldWUgfVxuICAgICAgICBpblxuICAgICAgICBsZXQgaWRiX3B1dCB+c3RhcnRfaW5kZXggaXRlbXMgPVxuICAgICAgICAgIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gICAgICAgICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgICAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSk7IChtb2R1bGUgSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQgc19saXN0ID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gICAgICAgICAgbGV0IHNfaXRlbXMgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBJKSB0cmFuc2FjdGlvbiBpblxuICAgICAgICAgIExpc3QuaXRlcmkgaXRlbXMgfmY6KGZ1biBpbmRleCAoeyBBcGkuSXRlbS5pZDsgcGF0aDsgXyB9IGFzIGl0ZW0pIC0+XG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHN0YXJ0X2luZGV4ICsgaW5kZXggaW5cbiAgICAgICAgICAgICAgbGV0IHBhdGggPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6XCJcIiBwYXRoIGluXG4gICAgICAgICAgICAgIGxldCB2aWV3cyA9IHZpZXdzX29mX3BhdGggdmZvbGRlcnMgcGF0aCBpblxuICAgICAgICAgICAgICBsZXQgc29ydF9uYW1lID0gT3B0aW9uLnZhbHVlIGl0ZW0uc29ydF9uYW1lIH5kZWZhdWx0Oml0ZW0ubmFtZSBpblxuICAgICAgICAgICAgICBpZ25vcmUgKE9JLnB1dCB7IGlkID0gaW5kZXg7IGl0ZW0gPSBTb21lIGlkIH0gc19saXN0KTtcbiAgICAgICAgICAgICAgaWdub3JlXG4gICAgICAgICAgICAgICAgKEkucHV0XG4gICAgICAgICAgICAgICAgICAgeyBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA9IGluZGV4OyB2aWV3czsgc29ydF9uYW1lIH07IGl0ZW0gfVxuICAgICAgICAgICAgICAgICAgIHNfaXRlbXMpKVxuICAgICAgICBpblxuICAgICAgICBpZGJfcHV0IH5zdGFydF9pbmRleCBpdGVtc1xuICAgICAgaW5cbiAgICAgIGxldCByZXFzID0gdGFrZV9uIFtdIHRocmVhZHMgaW5cbiAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgIGxldCogcmVxcyA9IEZ1dC5vZl9saXN0IChMaXN0Lm1hcCB+ZiByZXFzKSBpblxuICAgICAgaWYgTGlzdC5pc19lbXB0eSByZXFzIHRoZW4gRnV0Lm9rICgpIGVsc2UgcnVuX3F1ZXVlIHFcbiAgICBpblxuICAgIHJ1bl9xdWV1ZSBmZXRjaF9xdWV1ZVxuICBpblxuICBmdW5jdGlvblxuICB8IE5ld19pdGVtcyB7IGZpcnN0X21pc3Npbmdfa2V5OyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgLT5cbiAgICAgIG1ha2VfcGxhY2Vob2xkZXJzIGZpcnN0X21pc3Npbmdfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdF91bmZldGNoZWRfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gIHwgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0gLT5cbiAgICAgIGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3RfdW5mZXRjaGVkX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICB8IEluY29uc2lzdGVudCAtPiBGdXQub2sgKClcbiAgfCBfIC0+IEZ1dC5vayAoKVxuXG5sZXQgY2hlY2tfYW5kX3N5bmMgP3JlcG9ydCB+c291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCogc3RhdHVzID0gY2hlY2tfc3RhdHVzIH5zb3VyY2UgaWRiIGluXG4gIGxldCBpbml0aWFsID0geyBpbml0aWFsX3JlcG9ydCB3aXRoIHN0YXR1cyB9IGluXG4gIGxldCByZXBvcnQnID1cbiAgICBPcHRpb24ubWFwXG4gICAgICAoZnVuIHJlcG9ydCAtPlxuICAgICAgICBsZXQgKCkgPSAoKiBTZW5kIGEgZmlyc3QgcmVwb3J0ICopIHJlcG9ydCBpbml0aWFsIGluXG4gICAgICAgIGZ1biBzeW5jX3Byb2dyZXNzIC0+IHJlcG9ydCB7IGluaXRpYWwgd2l0aCBzeW5jX3Byb2dyZXNzIH0pXG4gICAgICByZXBvcnRcbiAgaW5cbiAgbGV0KyAoKSA9IHN5bmMgP3JlcG9ydDpyZXBvcnQnIH5zb3VyY2UgaWRiIHN0YXR1cyBpblxuICBPcHRpb24uaXRlclxuICAgIChmdW4gcmVwb3J0IC0+IHJlcG9ydCB7IHN0YXR1cyA9IEluX3N5bmM7IHN5bmNfcHJvZ3Jlc3MgPSBOb25lIH0pXG4gICAgcmVwb3J0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBhZGRpbmcgcG9zaXRpb24uICopXG50eXBlIHBhZHR5ID1cbiAgfCBMZWZ0ICAgKCogVGV4dCBpcyBsZWZ0IGp1c3RpZmllZCAoJy0nIG9wdGlvbikuICAgICAgICAgICAgICAgKilcbiAgfCBSaWdodCAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgKG5vICctJyBvcHRpb24pLiAgICAgICAgICAgKilcbiAgfCBaZXJvcyAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgYnkgemVyb3MgKHNlZSAnMCcgb3B0aW9uKS4gKilcblxuKCoqKilcblxuKCogSW50ZWdlciBjb252ZXJzaW9uLiAqKVxudHlwZSBpbnRfY29udiA9XG4gIHwgSW50X2QgfCBJbnRfcGQgfCBJbnRfc2QgICAgICAgICgqICAlZCB8ICUrZCB8ICUgZCAgKilcbiAgfCBJbnRfaSB8IEludF9waSB8IEludF9zaSAgICAgICAgKCogICVpIHwgJStpIHwgJSBpICAqKVxuICB8IEludF94IHwgSW50X0N4ICAgICAgICAgICAgICAgICAoKiAgJXggfCAlI3ggICAgICAgICopXG4gIHwgSW50X1ggfCBJbnRfQ1ggICAgICAgICAgICAgICAgICgqICAlWCB8ICUjWCAgICAgICAgKilcbiAgfCBJbnRfbyB8IEludF9DbyAgICAgICAgICAgICAgICAgKCogICVvIHwgJSNvICAgICAgICAqKVxuICB8IEludF91ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJXUgICAgICAgICAgICAgICopXG4gIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1ICAgICAgICgqICAlI2QgfCAlI2kgfCAlI3UgKilcblxuKCogRmxvYXQgY29udmVyc2lvbi4gKilcbnR5cGUgZmxvYXRfZmxhZ19jb252ID1cbiAgfCBGbG9hdF9mbGFnXyAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3AgICAgICAgICAgICAgICAgICAgKCogJStbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19zICAgICAgICAgICAgICAgICAgICgqICUgW2ZlRWdHRmhIXSAqKVxudHlwZSBmbG9hdF9raW5kX2NvbnYgPVxuICB8IEZsb2F0X2YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWYgfCAlK2YgfCAlIGYgICopXG4gIHwgRmxvYXRfZSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZSB8ICUrZSB8ICUgZSAgKilcbiAgfCBGbG9hdF9FICAgICAgICAgICAgICAgICAgICAgICAgKCogICVFIHwgJStFIHwgJSBFICAqKVxuICB8IEZsb2F0X2cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWcgfCAlK2cgfCAlIGcgICopXG4gIHwgRmxvYXRfRyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRyB8ICUrRyB8ICUgRyAgKilcbiAgfCBGbG9hdF9GICAgICAgICAgICAgICAgICAgICAgICAgKCogICVGIHwgJStGIHwgJSBGICAqKVxuICB8IEZsb2F0X2ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWggfCAlK2ggfCAlIGggICopXG4gIHwgRmxvYXRfSCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlSCB8ICUrSCB8ICUgSCAgKilcbiAgfCBGbG9hdF9DRiAgICAgICAgICAgICAgICAgICAgICAgKCogICUjRnwgJSsjRnwgJSAjRiAqKVxudHlwZSBmbG9hdF9jb252ID0gZmxvYXRfZmxhZ19jb252ICogZmxvYXRfa2luZF9jb252XG5cbigqKiopXG5cbigqIENoYXIgc2V0cyAoc2VlICVbLi4uXSkgYXJlIGJpdG1hcHMgaW1wbGVtZW50ZWQgYXMgMzItY2hhciBzdHJpbmdzLiAqKVxudHlwZSBjaGFyX3NldCA9IHN0cmluZ1xuXG4oKioqKVxuXG4oKiBDb3VudGVyIHVzZWQgaW4gU2NhbmYuICopXG50eXBlIGNvdW50ZXIgPVxuICB8IExpbmVfY291bnRlciAgICAgKCogICVsICAgICAgKilcbiAgfCBDaGFyX2NvdW50ZXIgICAgICgqICAlbiAgICAgICopXG4gIHwgVG9rZW5fY291bnRlciAgICAoKiAgJU4sICVMICAqKVxuXG4oKioqKVxuXG4oKiBQYWRkaW5nIG9mIHN0cmluZ3MgYW5kIG51bWJlcnMuICopXG50eXBlICgnYSwgJ2IpIHBhZGRpbmcgPVxuICAoKiBObyBwYWRkaW5nIChleDogXCIlZFwiKSAqKVxuICB8IE5vX3BhZGRpbmcgIDogKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBMaXRlcmFsIHBhZGRpbmcgKGV4OiBcIiU4ZFwiKSAqKVxuICB8IExpdF9wYWRkaW5nIDogcGFkdHkgKiBpbnQgLT4gKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBQYWRkaW5nIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKmRcIikgKilcbiAgfCBBcmdfcGFkZGluZyA6IHBhZHR5IC0+IChpbnQgLT4gJ2EsICdhKSBwYWRkaW5nXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2QsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcGFkZGluZyBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwYWRfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBQcmVjaXNpb24gb2YgZmxvYXRzIGFuZCAnMCctcGFkZGluZyBvZiBpbnRlZ2Vycy4gKilcbnR5cGUgKCdhLCAnYikgcHJlY2lzaW9uID1cbiAgKCogTm8gcHJlY2lzaW9uIChleDogXCIlZlwiKSAqKVxuICB8IE5vX3ByZWNpc2lvbiA6ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBMaXRlcmFsIHByZWNpc2lvbiAoZXg6IFwiJS4zZlwiKSAqKVxuICB8IExpdF9wcmVjaXNpb24gOiBpbnQgLT4gKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIFByZWNpc2lvbiBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKSAqKVxuICB8IEFyZ19wcmVjaXNpb24gOiAoaW50IC0+ICdhLCAnYSkgcHJlY2lzaW9uXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2YsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcHJlY2lzaW9uIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHByZWNfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBzZWUgdGhlIEN1c3RvbSBmb3JtYXQgY29tYmluYXRvciAqKVxudHlwZSAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5ID1cbiAgfCBDdXN0b21femVybyA6ICgnYSwgc3RyaW5nLCAnYSkgY3VzdG9tX2FyaXR5XG4gIHwgQ3VzdG9tX3N1Y2MgOiAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5IC0+XG4gICAgKCdhLCAneCAtPiAnYiwgJ3ggLT4gJ2MpIGN1c3RvbV9hcml0eVxuXG4oKioqKVxuXG4oKiAgICAgICAgUmVsYXRpb25hbCBmb3JtYXQgdHlwZXNcblxuSW4gdGhlIGZpcnN0IGZvcm1hdCtnYWR0cyBpbXBsZW1lbnRhdGlvbiwgdGhlIHR5cGUgZm9yICUoLi4lKSBpbiB0aGVcbmZtdCBHQURUIHdhcyBhcyBmb2xsb3dzOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICogKCdkMSwgJ3ExLCAnZDIsICdxMikgcmVhZGVyX25iX3VuaWZpZXIgKlxuICAgICgneCwgJ2IsICdjLCAnZDEsICdxMSwgJ3UpIGZtdHR5ICpcbiAgICAoJ3UsICdiLCAnYywgJ3ExLCAnZTEsICdmKSBmbXQgLT5cbiAgICAgICgoJ3gsICdiLCAnYywgJ2QyLCAncTIsICd1KSBmb3JtYXQ2IC0+ICd4LCAnYiwgJ2MsICdkMSwgJ2UxLCAnZikgZm10XG5cbk5vdGljZSB0aGF0IHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2YgcG9zaXRpb24gaW4gdGhlIGZvcm1hdCBhcmd1bWVudFxuKCgneCwgLi4sICd1KSBmb3JtYXQ2IC0+IC4uKSBpcyBlcXVhbCB0byB0aGUgJ3UgcGFyYW1ldGVyIGluICdhXG5wb3NpdGlvbiBpbiB0aGUgZm9ybWF0IHRhaWwgKCgndSwgLi4sICdmKSBmbXQpLiBUaGlzIG1lYW5zIHRoYXQgdGhlXG50eXBlIG9mIHRoZSBleHBlY3RlZCBmb3JtYXQgcGFyYW1ldGVyIGRlcGVuZHMgb2Ygd2hlcmUgdGhlICUoLi4uJSlcbmFyZSBpbiB0aGUgZm9ybWF0IHN0cmluZzpcblxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpXCJcbiAgLSA6ICh1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiB1bml0XG4gID0gPGZ1bj5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKSVkXCJcbiAgLSA6IChpbnQgLT4gdW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCBpbnQgLT4gdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IGludCAtPiB1bml0XG4gID0gPGZ1bj5cblxuT24gdGhlIGNvbnRyYXJ5LCB0aGUgbGVnYWN5IHR5cGVyIGdpdmVzIGEgY2xldmVyIHR5cGUgdGhhdCBkb2VzIG5vdFxuZGVwZW5kIG9uIHRoZSBwb3NpdGlvbiBvZiAlKC4uJSkgaW4gdGhlIGZvcm1hdCBzdHJpbmcuIEZvciBleGFtcGxlLFxuJSglKSB3aWxsIGhhdmUgdGhlIHBvbHltb3JwaGljIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpOiBpdCBjYW5cbmJlIGNvbmNhdGVuYXRlZCB0byBhbnkgZm9ybWF0IHR5cGUsIGFuZCBvbmx5IGVuZm9yY2VzIHRoZSBjb25zdHJhaW50XG50aGF0IGl0cyAnYSBhbmQgJ2YgcGFyYW1ldGVycyBhcmUgZXF1YWwgKG5vIGZvcm1hdCBhcmd1bWVudHMpIGFuZCAnZFxuYW5kICdlIGFyZSBlcXVhbCAobm8gcmVhZGVyIGFyZ3VtZW50KS5cblxuVGhlIHdlYWtlbmluZyBvZiB0aGlzIHBhcmFtZXRlciB0eXBlIGluIHRoZSBHQURUIHZlcnNpb24gYnJva2UgdXNlclxuY29kZSAoaW4gZmFjdCBpdCBlc3NlbnRpYWxseSBtYWRlICUoLi4uJSkgdW51c2FibGUgZXhjZXB0IGF0IHRoZSBsYXN0XG5wb3NpdGlvbiBvZiBhIGZvcm1hdCkuIEluIHBhcnRpY3VsYXIsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IHdvcmtcbmFueW1vcmU6XG5cbiAgZnVuIHNlcCAtPlxuICAgIEZvcm1hdC5wcmludGYgXCJmb28lKCUpYmFyJSglKWJhelwiIHNlcCBzZXBcblxuQXMgdGhlIHR5cGUtY2hlY2tlciB3b3VsZCByZXF1aXJlIHR3byAqaW5jb21wYXRpYmxlKiB0eXBlcyBmb3IgdGhlICUoJSlcbmluIGRpZmZlcmVudCBwb3NpdGlvbnMuXG5cblRoZSBzb2x1dGlvbiB0byByZWdhaW4gYSBnZW5lcmFsIHR5cGUgZm9yICUoLi4lKSBpcyB0byBnZW5lcmFsaXplIHRoaXNcbnRlY2huaXF1ZSwgbm90IG9ubHkgb24gdGhlICdkLCAnZSBwYXJhbWV0ZXJzLCBidXQgb24gYWxsIHNpeFxucGFyYW1ldGVycyBvZiBhIGZvcm1hdDogd2UgaW50cm9kdWNlIGEgXCJyZWxhdGlvbmFsXCIgdHlwZVxuICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxud2hvc2UgdmFsdWVzIGFyZSBwcm9vZnMgdGhhdCAoJ2ExLCAuLiwgJ2YxKSBhbmQgKCdhMiwgLi4sICdmMikgbW9yYWxseVxuY29ycmVzcG9uZCB0byB0aGUgc2FtZSBmb3JtYXQgdHlwZTogJ2ExIGlzIG9idGFpbmVkIGZyb20gJ2YxLCdiMSwnYzFcbmluIHRoZSBleGFjdCBzYW1lIHdheSB0aGF0ICdhMiBpcyBvYnRhaW5lZCBmcm9tICdmMiwnYjIsJ2MyLCBldGMuXG5cbkZvciBleGFtcGxlLCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0d28gZm9ybWF0IHR5cGVzIGJlZ2lubmluZyB3aXRoIGEgQ2hhclxucGFyYW1ldGVyIGlzIGFzIGZvbGxvd3M6XG5cbnwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5JbiB0aGUgZ2VuZXJhbCBjYXNlLCB0aGUgdGVybSBzdHJ1Y3R1cmUgb2YgZm10dHlfcmVsIGlzIChhbG1vc3RbMV0pXG5pc29tb3JwaGljIHRvIHRoZSBmbXR0eSBvZiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb246IGV2ZXJ5XG5jb25zdHJ1Y3RvciBpcyByZS1yZWFkIHdpdGggYSBiaW5hcnksIHJlbGF0aW9uYWwgdHlwZSwgaW5zdGVhZCBvZiB0aGVcbnByZXZpb3VzIHVuYXJ5IHR5cGluZy4gZm10dHkgY2FuIHRoZW4gYmUgcmUtZGVmaW5lZCBhcyB0aGUgZGlhZ29uYWwgb2ZcbmZtdHR5X3JlbDpcblxuICB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuXG5PbmNlIHdlIGhhdmUgdGhpcyBmbXR0eV9yZWwgdHlwZSBpbiBwbGFjZSwgd2UgY2FuIGdpdmUgdGhlIG1vcmVcbmdlbmVyYWwgdHlwZSB0byAlKC4uLiUpOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuV2UgYWNjZXB0IGFueSBmb3JtYXQgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2KSAodGhpcyBpc1xuY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZm9ybWF0KSwgYnV0IGFsc29cbnJlcXVpcmUgYSBwcm9vZiB0aGF0IHRoaXMgZm9ybWF0IGlzIGluIHJlbGF0aW9uIHRvIGFub3RoZXIgZm9ybWF0IHRoYXRcbmlzIGNvbmNhdGVuYWJsZSB0byB0aGUgZm9ybWF0IHRhaWwuIFdoZW4gZXhlY3V0aW5nIGEgJSguLi4lKSBmb3JtYXRcbihpbiBjYW1saW50ZXJuYWxGb3JtYXQubWw6bWFrZV9wcmludGYgb3Igc2NhbmYubWw6bWFrZV9zY2FuZiksIHdlXG50cmFuc3R5cGUgdGhlIGZvcm1hdCBhbG9uZyB0aGlzIHJlbGF0aW9uIHVzaW5nIHRoZSAncmVjYXN0JyBmdW5jdGlvblxudG8gdHJhbnNwb3NlIGJldHdlZW4gcmVsYXRlZCBmb3JtYXQgdHlwZXMuXG5cbiAgdmFsIHJlY2FzdCA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxKSBmbXRcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdFxuXG5OT1RFIFsxXTogdGhlIHR5cGluZyBvZiBGb3JtYXRfc3Vic3RfdHkgcmVxdWlyZXMgbm90IG9uZSBmb3JtYXQgdHlwZSwgYnV0XG50d28sIG9uZSB0byBlc3RhYmxpc2ggdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0IGFyZ3VtZW50IGFuZCB0aGVcbmZpcnN0IHNpeCBwYXJhbWV0ZXJzLCBhbmQgdGhlIG90aGVyIGZvciB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXRcbmFyZ3VtZW50IGFuZCB0aGUgbGFzdCBzaXggcGFyYW1ldGVycy5cblxufCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbldoZW4gd2UgZ2VuZXJhdGUgYSBmb3JtYXQgQVNULCB3ZSBnZW5lcmF0ZSBleGFjdGx5IHRoZSBzYW1lIHdpdG5lc3NcbmZvciBib3RoIHJlbGF0aW9ucywgYW5kIHRoZSB3aXRuZXNzLWNvbnZlcnNpb24gZnVuY3Rpb25zIGluXG5jYW1saW50ZXJuYWxGb3JtYXQgZG8gcmVseSBvbiB0aGlzIGludmFyaWFudC4gRm9yIGV4YW1wbGUsIHRoZVxuZnVuY3Rpb24gdGhhdCBwcm92ZXMgdGhhdCB0aGUgcmVsYXRpb24gaXMgdHJhbnNpdGl2ZVxuXG4gIHZhbCB0cmFucyA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG5cbmRvZXMgYXNzdW1lIHRoYXQgdGhlIHR3byBpbnB1dHMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIHRlcm0gc3RydWN0dXJlXG4oYW5kIGlzIG9ubHkgZXZlcnkgdXNlZCBmb3IgYXJndW1lbnQgd2l0bmVzc2VzIG9mIHRoZVxuRm9ybWF0X3N1YnN0X3R5IGNvbnN0cnVjdG9yKS5cbiopXG5cbigqIFR5cGUgb2YgYSBibG9jayB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggICAoKiBIb3Jpem9udGFsIGJsb2NrIG5vIGxpbmUgYnJlYWtpbmcgKilcbiAgfCBQcF92Ym94ICAgKCogVmVydGljYWwgYmxvY2sgZWFjaCBicmVhayBsZWFkcyB0byBhIG5ldyBsaW5lICopXG4gIHwgUHBfaHZib3ggICgqIEhvcml6b250YWwtdmVydGljYWwgYmxvY2s6IHNhbWUgYXMgdmJveCwgZXhjZXB0IGlmIHRoaXMgYmxvY2tcbiAgICAgICAgICAgICAgICAgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBvbiBhIHNpbmdsZSBsaW5lICopXG4gIHwgUHBfaG92Ym94ICgqIEhvcml6b250YWwgb3IgVmVydGljYWwgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrICopXG4gIHwgUHBfYm94ICAgICgqIEhvcml6b250YWwgb3IgSW5kZW50IGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jaywgb3JcbiAgICAgICAgICAgICAgICAgd2hlbiBpdCBsZWFkcyB0byBhIG5ldyBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBsaW5lICopXG4gIHwgUHBfZml0cyAgICgqIEludGVybmFsIHVzYWdlOiB3aGVuIGEgYmxvY2sgZml0cyBvbiBhIHNpbmdsZSBsaW5lICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGZvcm1hdHRpbmdfbGl0ID1cbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF0gICAqKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAfSAgICopXG4gIHwgQnJlYWsgb2Ygc3RyaW5nICogaW50ICogaW50ICAgICAgICAgICgqIEAsIHwgQCAgfCBAOyB8IEA7PD4gKilcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQD8gICAqKVxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXFxuICAqKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBALiAgICopXG4gIHwgTWFnaWNfc2l6ZSBvZiBzdHJpbmcgKiBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA8bj4gKilcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQEAgICAqKVxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAJSUgICopXG4gIHwgU2Nhbl9pbmRpYyBvZiBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBYICAgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuID1cbiAgfCBPcGVuX3RhZyA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQHsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuICB8IE9wZW5fYm94IDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAWyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IHR5cGUgZWxlbWVudHMuICopXG4oKiBJbiBwYXJ0aWN1bGFyIHVzZWQgdG8gcmVwcmVzZW50ICUoLi4uJSkgYW5kICV7Li4uJX0gY29udGVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcbmFuZCAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsID1cbiAgfCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBTdHJpbmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChzdHJpbmcgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBzdHJpbmcgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVkICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDMyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDMyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50MzIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgTmF0aXZlaW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAobmF0aXZlaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgbmF0aXZlaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDY0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDY0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50NjQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgRmxvYXRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVmICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoZmxvYXQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBmbG9hdCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBCb29sX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChib29sIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgYm9vbCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEZvcm1hdF9hcmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcbiAgfCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9ycy4gKilcbiAgfCBBbHBoYV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICd4IC0+ICdjMSkgLT4gJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICd4IC0+ICdjMikgLT4gJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgVGhldGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAnYzEpIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAnYzIpIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEFueV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVXNlZCBmb3IgY3VzdG9tIGZvcm1hdHMgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgUmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEVuZF9vZl9mbXR0eSA6XG4gICAgICAoJ2YxLCAnYjEsICdjMSwgJ2QxLCAnZDEsICdmMSxcbiAgICAgICAnZjIsICdiMiwgJ2MyLCAnZDIsICdkMiwgJ2YyKSBmbXR0eV9yZWxcblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgZWxlbWVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCA9XG4gIHwgQ2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50MzIgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBOYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbltkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIG5hdGl2ZWludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50NjQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICAgICAgZmxvYXRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGZsb2F0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtiQl0gKilcbiAgICAgICgneCwgYm9vbCAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsdXNoIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IFN0cmluZ19saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIGFiYyAqKVxuICAgICAgc3RyaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2hhcl9saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogeCAqKVxuICAgICAgY2hhciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgRm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IEFscGhhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ3ggLT4gJ2MpIC0+ICd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFRoZXRhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ2MpIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcjogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgZm9ybWF0dGluZ19saXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXR0aW5nX2dlbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgICgnYTEsICdiLCAnYywgJ2QxLCAnZTEsICdmMSkgZm9ybWF0dGluZ19nZW4gKlxuICAgICAgKCdmMSwgJ2IsICdjLCAnZTEsICdlMiwgJ2YyKSBmbXQgLT4gKCdhMSwgJ2IsICdjLCAnZDEsICdlMiwgJ2YyKSBmbXRcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4IC0+ICdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVsuLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChzdHJpbmcgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtubE5MXSAqKVxuICAgICAgY291bnRlciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGludCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IElnbm9yZWRfcGFyYW0gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgaWdub3JlZCAqICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEN1c3RvbSBwcmludGluZyBmb3JtYXQgKFBSIzY0NTIsIEdQUiMxNDApXG5cbiAgICAgV2UgaW5jbHVkZSBhIHR5cGUgQ3VzdG9tIG9mIFwiY3VzdG9tIGNvbnZlcnRlcnNcIiwgd2hlcmUgYW5cbiAgICAgYXJiaXRyYXJ5IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgb25lIG9yIG1vcmVcbiAgICAgYXJndW1lbnRzLiBUaGVyZSBpcyBubyBzeW50YXggZm9yIGN1c3RvbSBjb252ZXJ0ZXJzLCBpdCBpcyBvbmx5XG4gICAgIGludGVuZGVkIGZvciBjdXN0b20gcHJvY2Vzc29ycyB0aGF0IHdpc2ggdG8gcmVseSBvbiB0aGVcbiAgICAgc3RkbGliLWRlZmluZWQgZm9ybWF0IEdBRFRzLlxuXG4gICAgIEZvciBpbnN0YW5jZSBhIHByZS1wcm9jZXNzb3IgY291bGQgY2hvb3NlIHRvIGludGVycHJldCBzdHJpbmdzXG4gICAgIHByZWZpeGVkIHdpdGggW1wiIVwiXSBhcyBmb3JtYXQgc3RyaW5ncyB3aGVyZSBbJXt7IC4uLiB9fV0gaXNcbiAgICAgYSBzcGVjaWFsIGZvcm0gdG8gcGFzcyBhIHRvX3N0cmluZyBmdW5jdGlvbiwgc28gdGhhdCBvbmUgY291bGRcbiAgICAgd3JpdGU6XG5cbiAgICAge1tcbiAgICAgICB0eXBlIHQgPSB7IHggOiBpbnQ7IHkgOiBpbnQgfVxuXG4gICAgICAgbGV0IHN0cmluZ19vZl90IHQgPSBQcmludGYuc3ByaW50ZiBcInsgeCA9ICVkOyB5ID0gJWQgfVwiIHQueCB0LnlcblxuICAgICAgIFByaW50Zi5wcmludGYgIVwidCA9ICV7e3N0cmluZ19vZl90fX1cIiB7IHggPSA0MjsgeSA9IDQyIH1cbiAgICAgXX1cbiAgKilcbiAgfCBDdXN0b20gOlxuICAgICAgKCdhLCAneCwgJ3kpIGN1c3RvbV9hcml0eSAqICh1bml0IC0+ICd4KSAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBlbmQgb2YgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiAqKVxuICB8IEVuZF9vZl9mb3JtYXQgOlxuICAgICAgICAoJ2YsICdiLCAnYywgJ2UsICdlLCAnZikgZm10XG5cbigqKiopXG5cbigqIFR5cGUgZm9yIGlnbm9yZWQgcGFyYW1ldGVycyAoc2VlIFwiJV9cIikuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWQgPVxuICB8IElnbm9yZWRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9zICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9TICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX25kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2YgKilcbiAgICAgIHBhZF9vcHRpb24gKiBwcmVjX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfYm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQiAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfey4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8oLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3JlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgKilcbiAgICAgICgnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1suLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1tubE5MXSAqKVxuICAgICAgY291bnRlciAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG5cbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9XG4gIEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ICogc3RyaW5nXG5cbmxldCByZWMgZXJhc2VfcmVsIDogdHlwZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCAuXG4gIChhLCBiLCBjLCBkLCBlLCBmLFxuICAgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eVxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgX3R5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkxLCBlcmFzZV9yZWwgcmVzdClcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwZSBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXQgdHlwZXMuICopXG4oKiBVc2VkIGJ5OlxuICAgKiByZWFkZXJfbmJfdW5pZmllcl9vZl9mbXR0eSB0byBjb3VudCByZWFkZXJzIGluIGFuIGZtdHR5LFxuICAgKiBTY2FuZi50YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIHRvIGV4dHJhY3QgcmVhZGVycyBpbnNpZGUgJSguLi4lKSxcbiAgICogQ2FtbGludGVybmFsRm9ybWF0LmZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IHRvIGV4dHJhY3QgZm9ybWF0IHR5cGUuICopXG5cbigqXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10dHkgPVxuKilcbmxldCByZWMgY29uY2F0X2ZtdHR5IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gICAgICAgZzEgajEgZzIgajJcbiAgLlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZDEsIGExLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZDIsIGEyKSBmbXR0eV9yZWwgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKGcxLCBiMSwgYzEsIGoxLCBlMSwgZjEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBlMiwgZjIpIGZtdHR5X3JlbCA9XG5mdW4gZm10dHkxIGZtdHR5MiAtPiBtYXRjaCBmbXR0eTEgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IGZtdHR5MlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdHMuICopXG5sZXQgcmVjIGNvbmNhdF9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10ID1cbmZ1biBmbXQxIGZtdDIgLT4gbWF0Y2ggZm10MSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgU3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgQ2FtbF9zdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IENoYXIgKHJlc3QpIC0+XG4gICAgQ2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBDYW1sX2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBCb29sIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEFscGhhIHJlc3QgLT5cbiAgICBBbHBoYSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIFRoZXRhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIEN1c3RvbSAoYXJpdHksIGYsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFJlYWRlciByZXN0IC0+XG4gICAgUmVhZGVyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgRmx1c2ggKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBDaGFyX2xpdGVyYWwgICAoY2hyLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdF9hcmcgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZyAgIChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX25leHRfY2hhciAocmVzdCkgLT5cbiAgICBTY2FuX25leHRfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIElnbm9yZWRfcGFyYW0gKGlnbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGZtdDJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIEdhYnJpZWwgU2NoZXJlciwgcHJvamV0IFBhcnRvdXQsIElOUklBIFBhcmlzLVNhY2xheSAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMjAgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2FtbGludGVybmFsQXRvbWljIGlzIGEgZGVwZW5kZW5jeSBvZiBTdGRsaWIsIHNvIGl0IGlzIGNvbXBpbGVkIHdpdGhcbiAgIC1ub3BlcnZhc2l2ZXMuICopXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogV2UgYXJlIG5vdCByZXVzaW5nICgnYSByZWYpIGRpcmVjdGx5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlYXNvblxuICAgYWJvdXQgYXRvbWljaXR5IGlmIHdlIHdpc2ggdG86IGV2ZW4gaW4gYSBzZXF1ZW50aWFsIGltcGxlbWVudGF0aW9uLFxuICAgc2lnbmFscyBhbmQgb3RoZXIgYXN5bmNocm9ub3VzIGNhbGxiYWNrcyBtaWdodCBicmVhayBhdG9taWNpdHkuICopXG50eXBlICdhIHQgPSB7bXV0YWJsZSB2OiAnYX1cblxubGV0IG1ha2UgdiA9IHt2fVxubGV0IGdldCByID0gci52XG5sZXQgc2V0IHIgdiA9IHIudiA8LSB2XG5cbigqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBzZXQgdG8gbmV2ZXIgYmUgaW5saW5lZDogRmxhbWJkYSBpc1xuICAgYWxsb3dlZCB0byBtb3ZlIHN1cnJvdW5kaW5nIGNvZGUgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLFxuICAgaW5jbHVkaW5nIGFsbG9jYXRpb25zLiAqKVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZXhjaGFuZ2UgciB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIHY7XG4gICgqIEVORCBBVE9NSUMgKilcbiAgY3VyXG5cbmxldFtAaW5saW5lIG5ldmVyXSBjb21wYXJlX2FuZF9zZXQgciBzZWVuIHYgPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICBpZiBjdXIgPT0gc2VlbiB0aGVuIChcbiAgICByLnYgPC0gdjtcbiAgICAoKiBFTkQgQVRPTUlDICopXG4gICAgdHJ1ZVxuICApIGVsc2VcbiAgICBmYWxzZVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZmV0Y2hfYW5kX2FkZCByIG4gPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICByLnYgPC0gKGN1ciArIG4pO1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXQgaW5jciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgMSlcbmxldCBkZWNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAoLTEpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCBvciApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+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+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldCByZWMgKCBAICkgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBoZCA6OiB0bCAtPiBoZCA6OiAodGwgQCBsMilcblxuKCogSS9PIG9wZXJhdGlvbnMgKilcblxudHlwZSBpbl9jaGFubmVsXG50eXBlIG91dF9jaGFubmVsXG5cbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9vdXQgOiBpbnQgLT4gb3V0X2NoYW5uZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFwiXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3JfaW4gOiBpbnQgLT4gaW5fY2hhbm5lbCA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cIlxuXG5sZXQgc3RkaW4gPSBvcGVuX2Rlc2NyaXB0b3JfaW4gMFxubGV0IHN0ZG91dCA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMVxubGV0IHN0ZGVyciA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMlxuXG4oKiBHZW5lcmFsIG91dHB1dCBmdW5jdGlvbnMgKilcblxudHlwZSBvcGVuX2ZsYWcgPVxuICAgIE9wZW5fcmRvbmx5IHwgT3Blbl93cm9ubHkgfCBPcGVuX2FwcGVuZFxuICB8IE9wZW5fY3JlYXQgfCBPcGVuX3RydW5jIHwgT3Blbl9leGNsXG4gIHwgT3Blbl9iaW5hcnkgfCBPcGVuX3RleHQgfCBPcGVuX25vbmJsb2NrXG5cbmV4dGVybmFsIG9wZW5fZGVzYyA6IHN0cmluZyAtPiBvcGVuX2ZsYWcgbGlzdCAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX3N5c19vcGVuXCJcblxuZXh0ZXJuYWwgc2V0X291dF9jaGFubmVsX25hbWU6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9vdXRfZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0KG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X291dF9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX291dCBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl90ZXh0XSAwbzY2NiBuYW1lXG5cbmxldCBvcGVuX291dF9iaW4gbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fYmluYXJ5XSAwbzY2NiBuYW1lXG5cbmV4dGVybmFsIGZsdXNoIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9mbHVzaFwiXG5cbmV4dGVybmFsIG91dF9jaGFubmVsc19saXN0IDogdW5pdCAtPiBvdXRfY2hhbm5lbCBsaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFwiXG5cbmxldCBmbHVzaF9hbGwgKCkgPVxuICBsZXQgcmVjIGl0ZXIgPSBmdW5jdGlvblxuICAgICAgW10gLT4gKClcbiAgICB8IGE6OmwgLT5cbiAgICAgICAgYmVnaW4gdHJ5XG4gICAgICAgICAgICBmbHVzaCBhXG4gICAgICAgIHdpdGggU3lzX2Vycm9yIF8gLT5cbiAgICAgICAgICAoKSAoKiBpZ25vcmUgY2hhbm5lbHMgY2xvc2VkIGR1cmluZyBhIHByZWNlZGluZyBmbHVzaC4gKilcbiAgICAgICAgZW5kO1xuICAgICAgICBpdGVyIGxcbiAgaW4gaXRlciAob3V0X2NoYW5uZWxzX2xpc3QgKCkpXG5cbmV4dGVybmFsIHVuc2FmZV9vdXRwdXQgOiBvdXRfY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0X2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9vdXRwdXRfc3RyaW5nIDogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0XCJcblxuZXh0ZXJuYWwgb3V0cHV0X2NoYXIgOiBvdXRfY2hhbm5lbCAtPiBjaGFyIC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuXG5sZXQgb3V0cHV0X2J5dGVzIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0IG9jIHMgMCAoYnl0ZXNfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXRfc3RyaW5nIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIDAgKHN0cmluZ19sZW5ndGggcylcblxubGV0IG91dHB1dCBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dFwiXG4gIGVsc2UgdW5zYWZlX291dHB1dCBvYyBzIG9mcyBsZW5cblxubGV0IG91dHB1dF9zdWJzdHJpbmcgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IHN0cmluZ19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0X3N1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyBvZnMgbGVuXG5cbmV4dGVybmFsIG91dHB1dF9ieXRlIDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuZXh0ZXJuYWwgb3V0cHV0X2JpbmFyeV9pbnQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfaW50XCJcblxuZXh0ZXJuYWwgbWFyc2hhbF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgLT4gdW5pdCBsaXN0IC0+IHVuaXRcbiAgICAgPSBcImNhbWxfb3V0cHV0X3ZhbHVlXCJcbmxldCBvdXRwdXRfdmFsdWUgY2hhbiB2ID0gbWFyc2hhbF90b19jaGFubmVsIGNoYW4gdiBbXVxuXG5leHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XCJcbmV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX291dFwiXG5leHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX291dF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9vdXQgb2MgPSBmbHVzaCBvYzsgY2xvc2Vfb3V0X2NoYW5uZWwgb2NcbmxldCBjbG9zZV9vdXRfbm9lcnIgb2MgPVxuICAodHJ5IGZsdXNoIG9jIHdpdGggXyAtPiAoKSk7XG4gICh0cnkgY2xvc2Vfb3V0X2NoYW5uZWwgb2Mgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX291dCA6IG91dF9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBHZW5lcmFsIGlucHV0IGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBzZXRfaW5fY2hhbm5lbF9uYW1lOiBpbl9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9pbl9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9pbihvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9pbl9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX2luIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fdGV4dF0gMCBuYW1lXG5cbmxldCBvcGVuX2luX2JpbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX2JpbmFyeV0gMCBuYW1lXG5cbmV4dGVybmFsIGlucHV0X2NoYXIgOiBpbl9jaGFubmVsIC0+IGNoYXIgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5cbmV4dGVybmFsIHVuc2FmZV9pbnB1dCA6IGluX2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9pbnB1dFwiXG5cbmxldCBpbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcImlucHV0XCJcbiAgZWxzZSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWMgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBsZW4gPD0gMCB0aGVuICgpIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW4gaW5cbiAgICBpZiByID0gMFxuICAgIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyAob2ZzICsgcikgKGxlbiAtIHIpXG4gIGVuZFxuXG5sZXQgcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwicmVhbGx5X2lucHV0XCJcbiAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVhbGx5X2lucHV0X3N0cmluZyBpYyBsZW4gPVxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSBsZW4gaW5cbiAgcmVhbGx5X2lucHV0IGljIHMgMCBsZW47XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG5leHRlcm5hbCBpbnB1dF9zY2FuX2xpbmUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcIlxuXG5sZXQgaW5wdXRfbGluZSBjaGFuID1cbiAgbGV0IHJlYyBidWlsZF9yZXN1bHQgYnVmIHBvcyA9IGZ1bmN0aW9uXG4gICAgW10gLT4gYnVmXG4gIHwgaGQgOjogdGwgLT5cbiAgICAgIGxldCBsZW4gPSBieXRlc19sZW5ndGggaGQgaW5cbiAgICAgIGJ5dGVzX2JsaXQgaGQgMCBidWYgKHBvcyAtIGxlbikgbGVuO1xuICAgICAgYnVpbGRfcmVzdWx0IGJ1ZiAocG9zIC0gbGVuKSB0bCBpblxuICBsZXQgcmVjIHNjYW4gYWNjdSBsZW4gPVxuICAgIGxldCBuID0gaW5wdXRfc2Nhbl9saW5lIGNoYW4gaW5cbiAgICBpZiBuID0gMCB0aGVuIGJlZ2luICAgICAgICAgICAgICAgICAgICgqIG4gPSAwOiB3ZSBhcmUgYXQgRU9GICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICAgIHwgXyAgLT4gYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gYWNjdVxuICAgIGVuZCBlbHNlIGlmIG4gPiAwIHRoZW4gYmVnaW4gICAgICAgICAgKCogbiA+IDA6IG5ld2xpbmUgZm91bmQgaW4gYnVmZmVyICopXG4gICAgICBsZXQgcmVzID0gYnl0ZXNfY3JlYXRlIChuIC0gMSkgaW5cbiAgICAgIGlnbm9yZSAodW5zYWZlX2lucHV0IGNoYW4gcmVzIDAgKG4gLSAxKSk7XG4gICAgICBpZ25vcmUgKGlucHV0X2NoYXIgY2hhbik7ICAgICAgICAgICAoKiBza2lwIHRoZSBuZXdsaW5lICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmVzXG4gICAgICB8ICBfIC0+IGxldCBsZW4gPSBsZW4gKyBuIC0gMSBpblxuICAgICAgICAgICAgICBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiAocmVzIDo6IGFjY3UpXG4gICAgZW5kIGVsc2UgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAoKiBuIDwgMDogbmV3bGluZSBub3QgZm91bmQgKilcbiAgICAgIGxldCBiZWcgPSBieXRlc19jcmVhdGUgKC1uKSBpblxuICAgICAgaWdub3JlKHVuc2FmZV9pbnB1dCBjaGFuIGJlZyAwICgtbikpO1xuICAgICAgc2NhbiAoYmVnIDo6IGFjY3UpIChsZW4gLSBuKVxuICAgIGVuZFxuICBpbiBieXRlc191bnNhZmVfdG9fc3RyaW5nIChzY2FuIFtdIDApXG5cbmV4dGVybmFsIGlucHV0X2J5dGUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcbmV4dGVybmFsIGlucHV0X2JpbmFyeV9pbnQgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9pbnRcIlxuZXh0ZXJuYWwgaW5wdXRfdmFsdWUgOiBpbl9jaGFubmVsIC0+ICdhID0gXCJjYW1sX2lucHV0X3ZhbHVlXCJcbmV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5cIlxuZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX2luXCJcbmV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX2luIDogaW5fY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX2luX25vZXJyIGljID0gKHRyeSBjbG9zZV9pbiBpYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfaW4gOiBpbl9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgb3V0cHV0ICopXG5cbmxldCBwcmludF9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRvdXQgY1xubGV0IHByaW50X3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgc1xubGV0IHByaW50X2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3Rkb3V0IHNcbmxldCBwcmludF9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJpbnRfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmludF9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzOyBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxubGV0IHByaW50X25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGVycm9yICopXG5cbmxldCBwcmVycl9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRlcnIgY1xubGV0IHByZXJyX3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgc1xubGV0IHByZXJyX2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3RkZXJyIHNcbmxldCBwcmVycl9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJlcnJfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmVycl9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzOyBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxubGV0IHByZXJyX25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxuXG4oKiBJbnB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgaW5wdXQgKilcblxubGV0IHJlYWRfbGluZSAoKSA9IGZsdXNoIHN0ZG91dDsgaW5wdXRfbGluZSBzdGRpblxubGV0IHJlYWRfaW50ICgpID0gaW50X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2ludF9vcHQgKCkgPSBpbnRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0ICgpID0gZmxvYXRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXRfb3B0ICgpID0gZmxvYXRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcblxuKCogT3BlcmF0aW9ucyBvbiBsYXJnZSBmaWxlcyAqKVxuXG5tb2R1bGUgTGFyZ2VGaWxlID1cbiAgc3RydWN0XG4gICAgZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX291dF82NFwiXG4gICAgZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50NjRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgICBleHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5fNjRcIlxuICAgIGV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX2luXzY0XCJcbiAgICBleHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgZW5kXG5cbigqIEZvcm1hdHMgKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NlxuICAgPSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDZcbiAgID0gRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm10XG4gICAgICAgICAgICAgICAqIHN0cmluZ1xuXG50eXBlICgnYSwgJ2IsICdjLCAnZCkgZm9ybWF0NCA9ICgnYSwgJ2IsICdjLCAnYywgJ2MsICdkKSBmb3JtYXQ2XG5cbnR5cGUgKCdhLCAnYiwgJ2MpIGZvcm1hdCA9ICgnYSwgJ2IsICdjLCAnYykgZm9ybWF0NFxuXG5sZXQgc3RyaW5nX29mX2Zvcm1hdCAoRm9ybWF0IChfZm10LCBzdHIpKSA9IHN0clxuXG5leHRlcm5hbCBmb3JtYXRfb2Zfc3RyaW5nIDpcbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgKCBeXiApIChGb3JtYXQgKGZtdDEsIHN0cjEpKSAoRm9ybWF0IChmbXQyLCBzdHIyKSkgPVxuICBGb3JtYXQgKENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5jb25jYXRfZm10IGZtdDEgZm10MixcbiAgICAgICAgICBzdHIxIF4gXCIlLFwiIF4gc3RyMilcblxuKCogTWlzY2VsbGFuZW91cyAqKVxuXG5leHRlcm5hbCBzeXNfZXhpdCA6IGludCAtPiAnYSA9IFwiY2FtbF9zeXNfZXhpdFwiXG5cbmxldCBleGl0X2Z1bmN0aW9uID0gQ2FtbGludGVybmFsQXRvbWljLm1ha2UgZmx1c2hfYWxsXG5cbmxldCByZWMgYXRfZXhpdCBmID1cbiAgbGV0IG1vZHVsZSBBdG9taWMgPSBDYW1saW50ZXJuYWxBdG9taWMgaW5cbiAgKCogTVBSIzcyNTMsIE1QUiM3Nzk2OiBtYWtlIHN1cmUgXCJmXCIgaXMgZXhlY3V0ZWQgb25seSBvbmNlICopXG4gIGxldCBmX3lldF90b19ydW4gPSBBdG9taWMubWFrZSB0cnVlIGluXG4gIGxldCBvbGRfZXhpdCA9IEF0b21pYy5nZXQgZXhpdF9mdW5jdGlvbiBpblxuICBsZXQgbmV3X2V4aXQgKCkgPVxuICAgIGlmIEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZl95ZXRfdG9fcnVuIHRydWUgZmFsc2UgdGhlbiBmICgpIDtcbiAgICBvbGRfZXhpdCAoKVxuICBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZXhpdF9mdW5jdGlvbiBvbGRfZXhpdCBuZXdfZXhpdCBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIGF0X2V4aXQgZlxuXG5sZXQgZG9fYXRfZXhpdCAoKSA9IChDYW1saW50ZXJuYWxBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbmV4dGVybmFsIG1ham9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX21ham9yXCJcbmV4dGVybmFsIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgOiB1bml0IC0+IGJvb2xcbiAgPSBcImNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWRcIlxubGV0ICgpID0gaWYgbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCAoKSB0aGVuIGF0X2V4aXQgbWFqb3JcblxuKCpNT0RVTEVfQUxJQVNFUyopXG5tb2R1bGUgQXJnICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgID0gQXJyYXlcbm1vZHVsZSBBcnJheUxhYmVscyAgPSBBcnJheUxhYmVsc1xubW9kdWxlIEF0b21pYyAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICA9IEJpZ2FycmF5XG5tb2R1bGUgQm9vbCAgICAgICAgID0gQm9vbFxubW9kdWxlIEJ1ZmZlciAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICA9IEJ5dGVzXG5tb2R1bGUgQnl0ZXNMYWJlbHMgID0gQnl0ZXNMYWJlbHNcbm1vZHVsZSBDYWxsYmFjayAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICA9IENoYXJcbm1vZHVsZSBDb21wbGV4ICAgICAgPSBDb21wbGV4XG5tb2R1bGUgRGlnZXN0ICAgICAgID0gRGlnZXN0XG5tb2R1bGUgRWl0aGVyICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgID0gRXBoZW1lcm9uXG5tb2R1bGUgRmlsZW5hbWUgICAgID0gRmlsZW5hbWVcbm1vZHVsZSBGbG9hdCAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICA9IEZvcm1hdFxubW9kdWxlIEZ1biAgICAgICAgICA9IEZ1blxubW9kdWxlIEdjICAgICAgICAgICA9IEdjXG5tb2R1bGUgR2VubGV4ICAgICAgID0gR2VubGV4XG5tb2R1bGUgSGFzaHRibCAgICAgID0gSGFzaHRibFxubW9kdWxlIEluX2NoYW5uZWwgICA9IEluX2NoYW5uZWxcbm1vZHVsZSBJbnQgICAgICAgICAgPSBJbnRcbm1vZHVsZSBJbnQzMiAgICAgICAgPSBJbnQzMlxubW9kdWxlIEludDY0ICAgICAgICA9IEludDY0XG5tb2R1bGUgTGF6eSAgICAgICAgID0gTGF6eVxubW9kdWxlIExleGluZyAgICAgICA9IExleGluZ1xubW9kdWxlIExpc3QgICAgICAgICA9IExpc3Rcbm1vZHVsZSBMaXN0TGFiZWxzICAgPSBMaXN0TGFiZWxzXG5tb2R1bGUgTWFwICAgICAgICAgID0gTWFwXG5tb2R1bGUgTWFyc2hhbCAgICAgID0gTWFyc2hhbFxubW9kdWxlIE1vcmVMYWJlbHMgICA9IE1vcmVMYWJlbHNcbm1vZHVsZSBOYXRpdmVpbnQgICAgPSBOYXRpdmVpbnRcbm1vZHVsZSBPYmogICAgICAgICAgPSBPYmpcbm1vZHVsZSBPbyAgICAgICAgICAgPSBPb1xubW9kdWxlIE9wdGlvbiAgICAgICA9IE9wdGlvblxubW9kdWxlIE91dF9jaGFubmVsICA9IE91dF9jaGFubmVsXG5tb2R1bGUgUGFyc2luZyAgICAgID0gUGFyc2luZ1xubW9kdWxlIFBlcnZhc2l2ZXMgICA9IFBlcnZhc2l2ZXNcbm1vZHVsZSBQcmludGV4YyAgICAgPSBQcmludGV4Y1xubW9kdWxlIFByaW50ZiAgICAgICA9IFByaW50ZlxubW9kdWxlIFF1ZXVlICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgID0gUmFuZG9tXG5tb2R1bGUgUmVzdWx0ICAgICAgID0gUmVzdWx0XG5tb2R1bGUgU2NhbmYgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZXEgICAgICAgICAgPSBTZXFcbm1vZHVsZSBTZXQgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgPSBTdGFja1xubW9kdWxlIFN0ZExhYmVscyAgICA9IFN0ZExhYmVsc1xubW9kdWxlIFN0cmVhbSAgICAgICA9IFN0cmVhbVxubW9kdWxlIFN0cmluZyAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyA9IFN0cmluZ0xhYmVsc1xubW9kdWxlIFN5cyAgICAgICAgICA9IFN5c1xubW9kdWxlIFVjaGFyICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgID0gVW5pdFxubW9kdWxlIFdlYWsgICAgICAgICA9IFdlYWtcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gICBUaGlzIGlzIGEgbGFnZ2VkLUZpYm9uYWNjaSBGKDU1LCAyNCwgKykgd2l0aCBhIG1vZGlmaWVkIGFkZGl0aW9uXG4gICBmdW5jdGlvbiB0byBlbmhhbmNlIHRoZSBtaXhpbmcgb2YgYml0cy5cbiAgIElmIHdlIHVzZSBub3JtYWwgYWRkaXRpb24sIHRoZSBsb3ctb3JkZXIgYml0IGZhaWxzIHRlc3RzIDEgYW5kIDdcbiAgIG9mIHRoZSBEaWVoYXJkIHRlc3Qgc3VpdGUsIGFuZCBiaXRzIDEgYW5kIDIgYWxzbyBmYWlsIHRlc3QgNy5cbiAgIElmIHdlIHVzZSBtdWx0aXBsaWNhdGlvbiBhcyBzdWdnZXN0ZWQgYnkgTWFyc2FnbGlhLCBpdCBkb2Vzbid0IGZhcmVcbiAgIG11Y2ggYmV0dGVyLlxuICAgQnkgbWl4aW5nIHRoZSBiaXRzIG9mIG9uZSBvZiB0aGUgbnVtYmVycyBiZWZvcmUgYWRkaXRpb24gKFhPUiB0aGVcbiAgIDUgaGlnaC1vcmRlciBiaXRzIGludG8gdGhlIGxvdy1vcmRlciBiaXRzKSwgd2UgZ2V0IGEgZ2VuZXJhdG9yIHRoYXRcbiAgIHBhc3NlcyBhbGwgdGhlIERpZWhhcmQgdGVzdHMuXG4qKVxuXG5leHRlcm5hbCByYW5kb21fc2VlZDogdW5pdCAtPiBpbnQgYXJyYXkgPSBcImNhbWxfc3lzX3JhbmRvbV9zZWVkXCJcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG5cbiAgdHlwZSB0ID0geyBzdCA6IGludCBhcnJheTsgbXV0YWJsZSBpZHggOiBpbnQgfVxuXG4gIGxldCBuZXdfc3RhdGUgKCkgPSB7IHN0ID0gQXJyYXkubWFrZSA1NSAwOyBpZHggPSAwIH1cbiAgbGV0IGFzc2lnbiBzdDEgc3QyID1cbiAgICBBcnJheS5ibGl0IHN0Mi5zdCAwIHN0MS5zdCAwIDU1O1xuICAgIHN0MS5pZHggPC0gc3QyLmlkeFxuXG5cbiAgbGV0IGZ1bGxfaW5pdCBzIHNlZWQgPVxuICAgIGxldCBjb21iaW5lIGFjY3UgeCA9IERpZ2VzdC5zdHJpbmcgKGFjY3UgXiBJbnQudG9fc3RyaW5nIHgpIGluXG4gICAgbGV0IGV4dHJhY3QgZCA9XG4gICAgICBDaGFyLmNvZGUgZC5bMF0gKyAoQ2hhci5jb2RlIGQuWzFdIGxzbCA4KSArIChDaGFyLmNvZGUgZC5bMl0gbHNsIDE2KVxuICAgICAgKyAoQ2hhci5jb2RlIGQuWzNdIGxzbCAyNClcbiAgICBpblxuICAgIGxldCBzZWVkID0gaWYgQXJyYXkubGVuZ3RoIHNlZWQgPSAwIHRoZW4gW3wgMCB8XSBlbHNlIHNlZWQgaW5cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBzZWVkIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0IGRvXG4gICAgICBzLnN0LihpKSA8LSBpO1xuICAgIGRvbmU7XG4gICAgbGV0IGFjY3UgPSByZWYgXCJ4XCIgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgKyBJbnQubWF4IDU1IGwgZG9cbiAgICAgIGxldCBqID0gaSBtb2QgNTUgaW5cbiAgICAgIGxldCBrID0gaSBtb2QgbCBpblxuICAgICAgYWNjdSA6PSBjb21iaW5lICFhY2N1IHNlZWQuKGspO1xuICAgICAgcy5zdC4oaikgPC0gKHMuc3QuKGopIGx4b3IgZXh0cmFjdCAhYWNjdSkgbGFuZCAweDNGRkZGRkZGOyAgKCogUFIjNTU3NSAqKVxuICAgIGRvbmU7XG4gICAgcy5pZHggPC0gMFxuXG5cbiAgbGV0IG1ha2Ugc2VlZCA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGZ1bGxfaW5pdCByZXN1bHQgc2VlZDtcbiAgICByZXN1bHRcblxuXG4gIGxldCBtYWtlX3NlbGZfaW5pdCAoKSA9IG1ha2UgKHJhbmRvbV9zZWVkICgpKVxuXG4gIGxldCBjb3B5IHMgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBhc3NpZ24gcmVzdWx0IHM7XG4gICAgcmVzdWx0XG5cblxuICAoKiBSZXR1cm5zIDMwIHJhbmRvbSBiaXRzIGFzIGFuIGludGVnZXIgMCA8PSB4IDwgMTA3Mzc0MTgyNCAqKVxuICBsZXQgYml0cyBzID1cbiAgICBzLmlkeCA8LSAocy5pZHggKyAxKSBtb2QgNTU7XG4gICAgbGV0IGN1cnZhbCA9IHMuc3QuKHMuaWR4KSBpblxuICAgIGxldCBuZXd2YWwgPSBzLnN0Ligocy5pZHggKyAyNCkgbW9kIDU1KVxuICAgICAgICAgICAgICAgICArIChjdXJ2YWwgbHhvciAoKGN1cnZhbCBsc3IgMjUpIGxhbmQgMHgxRikpIGluXG4gICAgbGV0IG5ld3ZhbDMwID0gbmV3dmFsIGxhbmQgMHgzRkZGRkZGRiBpbiAgKCogUFIjNTU3NSAqKVxuICAgIHMuc3QuKHMuaWR4KSA8LSBuZXd2YWwzMDtcbiAgICBuZXd2YWwzMFxuXG5cbiAgbGV0IHJlYyBpbnRhdXggcyBuID1cbiAgICBsZXQgciA9IGJpdHMgcyBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gMHgzRkZGRkZGRiAtIG4gKyAxIHRoZW4gaW50YXV4IHMgbiBlbHNlIHZcblxuICBsZXQgaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB8fCBib3VuZCA8PSAwXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnRcIlxuICAgIGVsc2UgaW50YXV4IHMgYm91bmRcblxuICBsZXQgcmVjIGludDYzYXV4IHMgbiA9XG4gICAgbGV0IG1heF9pbnRfMzIgPSAoMSBsc2wgMzApICsgMHgzRkZGRkZGRiBpbiAoKiAweDdGRkZGRkZGICopXG4gICAgbGV0IGIxID0gYml0cyBzIGluXG4gICAgbGV0IGIyID0gYml0cyBzIGluXG4gICAgbGV0IChyLCBtYXhfaW50KSA9XG4gICAgICBpZiBuIDw9IG1heF9pbnRfMzIgdGhlblxuICAgICAgICAoKiAzMSByYW5kb20gYml0cyBvbiBib3RoIDY0LWJpdCBPQ2FtbCBhbmQgSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDE1IGJpdHMgb2YgYjEgYW5kIDE2IGJpdHMgb2YgYjIuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKChiMiBsYW5kIDB4M0ZGRkMwMDApIGxzbCAxKSBsb3IgKGIxIGxzciAxNSkpXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnRfMzIpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBiMyA9IGJpdHMgcyBpblxuICAgICAgICAoKiA2MiByYW5kb20gYml0cyBvbiA2NC1iaXQgT0NhbWw7IHVucmVhY2hhYmxlIG9uIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAyMCBiaXRzIG9mIGIxIGFuZCAyMSBiaXRzIG9mIGIyIGFuZCBiMy4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKChiMyBsYW5kIDB4M0ZGRkZFMDApIGxzbCAxMikgbG9yIChiMiBsc3IgOSkpIGxzbCAyMClcbiAgICAgICAgICAgIGxvciAoYjEgbHNyIDEwKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50KVxuICAgIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiBtYXhfaW50IC0gbiArIDEgdGhlbiBpbnQ2M2F1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGZ1bGxfaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uZnVsbF9pbnRcIlxuICAgIGVsc2UgaWYgYm91bmQgPiAweDNGRkZGRkZGIHRoZW5cbiAgICAgIGludDYzYXV4IHMgYm91bmRcbiAgICBlbHNlXG4gICAgICBpbnRhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQzMmF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDMyLm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDMyLnNoaWZ0X2xlZnQgKEludDMyLm9mX2ludCAoYml0cyBzIGxhbmQgMSkpIDMwIGluXG4gICAgbGV0IHIgPSBJbnQzMi5sb2dvciBiMSBiMiBpblxuICAgIGxldCB2ID0gSW50MzIucmVtIHIgbiBpblxuICAgIGlmIEludDMyLnN1YiByIHYgPiBJbnQzMi5hZGQgKEludDMyLnN1YiBJbnQzMi5tYXhfaW50IG4pIDFsXG4gICAgdGhlbiBpbnQzMmF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50MzIgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDMyXCJcbiAgICBlbHNlIGludDMyYXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQ2NC5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcykpIDMwIGluXG4gICAgbGV0IGIzID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMgbGFuZCA3KSkgNjAgaW5cbiAgICBsZXQgciA9IEludDY0LmxvZ29yIGIxIChJbnQ2NC5sb2dvciBiMiBiMykgaW5cbiAgICBsZXQgdiA9IEludDY0LnJlbSByIG4gaW5cbiAgICBpZiBJbnQ2NC5zdWIgciB2ID4gSW50NjQuYWRkIChJbnQ2NC5zdWIgSW50NjQubWF4X2ludCBuKSAxTFxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cblxuICBsZXQgbmF0aXZlaW50ID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyBib3VuZCAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGludDMyIHMgKE5hdGl2ZWludC50b19pbnQzMiBib3VuZCkpXG4gICAgZWxzZSBmdW4gcyBib3VuZCAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0IHMgKEludDY0Lm9mX25hdGl2ZWludCBib3VuZCkpXG5cblxuICAoKiBSZXR1cm5zIGEgZmxvYXQgMCA8PSB4IDw9IDEgd2l0aCBhdCBtb3N0IDYwIGJpdHMgb2YgcHJlY2lzaW9uLiAqKVxuICBsZXQgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IHNjYWxlID0gMTA3Mzc0MTgyNC4wICAoKiAyXjMwICopXG4gICAgYW5kIHIxID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgYW5kIHIyID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgaW4gKHIxIC8uIHNjYWxlICsuIHIyKSAvLiBzY2FsZVxuXG5cbiAgbGV0IGZsb2F0IHMgYm91bmQgPSByYXdmbG9hdCBzICouIGJvdW5kXG5cbiAgbGV0IGJvb2wgcyA9IChiaXRzIHMgbGFuZCAxID0gMClcblxuICBsZXQgYml0czMyIHMgPVxuICAgIGxldCBiMSA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIEludDMyLihsb2dvciBiMSAoc2hpZnRfbGVmdCBiMiAxNikpXG5cbiAgbGV0IGJpdHM2NCBzID1cbiAgICBsZXQgYjEgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDkpIGluICAoKiAyMSBiaXRzICopXG4gICAgbGV0IGIzID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOCkgaW4gICgqIDIyIGJpdHMgKilcbiAgICBJbnQ2NC4obG9nb3IgYjEgKGxvZ29yIChzaGlmdF9sZWZ0IGIyIDIxKSAoc2hpZnRfbGVmdCBiMyA0MikpKVxuXG4gIGxldCBuYXRpdmViaXRzID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGJpdHMzMiBzKVxuICAgIGVsc2UgZnVuIHMgLT4gSW50NjQudG9fbmF0aXZlaW50IChiaXRzNjQgcylcblxuZW5kXG5cbigqIFRoaXMgaXMgdGhlIHN0YXRlIHlvdSBnZXQgd2l0aCBbaW5pdCAyNzE4MjgxOF0gYW5kIHRoZW4gYXBwbHlpbmdcbiAgIHRoZSBcImxhbmQgMHgzRkZGRkZGRlwiIGZpbHRlciB0byB0aGVtLiAgU2VlICM1NTc1LCAjNTc5MywgIzU5NzcuICopXG5sZXQgZGVmYXVsdCA9IHtcbiAgU3RhdGUuc3QgPSBbfFxuICAgICAgMHgzYWUyNTIyYjsgMHgxZDhkNDYzNDsgMHgxNWI0ZmFkMDsgMHgxOGIxNGFjZTsgMHgxMmY4YTNjNDsgMHgzYjA4NmM0NztcbiAgICAgIDB4MTZkNDY3ZDY7IDB4MTAxZDkxYzc7IDB4MzIxZGYxNzc7IDB4MDE3NmMxOTM7IDB4MWZmNzJiZjE7IDB4MWU4ODkxMDk7XG4gICAgICAweDBiNDY0YjE4OyAweDJiODZiOTdjOyAweDA4OTFkYTQ4OyAweDAzMTM3NDYzOyAweDA4NWFjNWExOyAweDE1ZDYxZjJmO1xuICAgICAgMHgzYmNlZDM1OTsgMHgyOWMxYzEzMjsgMHgzYTg2NzY2ZTsgMHgzNjZkOGM4NjsgMHgxZjViNjIyMjsgMHgzY2UxYjU5ZjtcbiAgICAgIDB4MmViZjc4ZTE7IDB4MjdjZDFiODY7IDB4MjU4ZjNkYzM7IDB4Mzg5YTgxOTQ7IDB4MDJlNGM0NGM7IDB4MThjNDNmN2Q7XG4gICAgICAweDBmNmU1MzRmOyAweDFlN2RmMzU5OyAweDA1NWQwYjdlOyAweDEwZTg0ZTdlOyAweDEyNjE5OGU0OyAweDBlNzcyMmNiO1xuICAgICAgMHgxY2JlZGUyODsgMHgzMzkxYjk2NDsgMHgzZDQwZTkyYTsgMHgwYzU5OTMzZDsgMHgwYjhjZDBiNzsgMHgyNGVmZmYxYztcbiAgICAgIDB4MjgwM2ZkYWE7IDB4MDhlYmM3MmU7IDB4MGY1MjJlMzI7IDB4MDUzOThlZGM7IDB4MjE0NGEwNGM7IDB4MGFlZjNjYmQ7XG4gICAgICAweDAxYWQ0NzE5OyAweDM1YjkzY2Q2OyAweDJhNTU5ZDRmOyAweDFlNmZkNzY4OyAweDI2ZTI3ZjM2OyAweDE4NmYxOGMzO1xuICAgICAgMHgyZmJmOTY3YTtcbiAgICB8XTtcbiAgU3RhdGUuaWR4ID0gMDtcbn1cblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIGRlZmF1bHRcbmxldCBpbnQgYm91bmQgPSBTdGF0ZS5pbnQgZGVmYXVsdCBib3VuZFxubGV0IGZ1bGxfaW50IGJvdW5kID0gU3RhdGUuZnVsbF9pbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgZGVmYXVsdCBib3VuZFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50NjQgYm91bmQgPSBTdGF0ZS5pbnQ2NCBkZWZhdWx0IGJvdW5kXG5sZXQgZmxvYXQgc2NhbGUgPSBTdGF0ZS5mbG9hdCBkZWZhdWx0IHNjYWxlXG5sZXQgYm9vbCAoKSA9IFN0YXRlLmJvb2wgZGVmYXVsdFxubGV0IGJpdHMzMiAoKSA9IFN0YXRlLmJpdHMzMiBkZWZhdWx0XG5sZXQgYml0czY0ICgpID0gU3RhdGUuYml0czY0IGRlZmF1bHRcbmxldCBuYXRpdmViaXRzICgpID0gU3RhdGUubmF0aXZlYml0cyBkZWZhdWx0XG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IHNlZWRcbmxldCBpbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBNYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuICopXG5cbmxldCBnZXRfc3RhdGUgKCkgPSBTdGF0ZS5jb3B5IGRlZmF1bHRcbmxldCBzZXRfc3RhdGUgcyA9IFN0YXRlLmFzc2lnbiBkZWZhdWx0IHNcblxuKCoqKioqKioqKioqKioqKioqKioqXG5cbigqIFRlc3QgZnVuY3Rpb25zLiAgTm90IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LlxuICAgVGhlIFtjaGlzcXVhcmVdIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBuID4gMTByLlxuICAgSXQgcmV0dXJucyBhIHRyaXBsZSAobG93LCBhY3R1YWwsIGhpZ2gpLlxuICAgSWYgbG93IDw9IGFjdHVhbCA8PSBoaWdoLCB0aGUgW2ddIGZ1bmN0aW9uIHBhc3NlZCB0aGUgdGVzdCxcbiAgIG90aGVyd2lzZSBpdCBmYWlsZWQuXG5cbiAgU29tZSByZXN1bHRzOlxuXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDUwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI5OTc5MjY0MzsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAxNDE0MjEzNjsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMjQ7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAwOyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMjQ7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDE0MTQyMTM2OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMjk5NzkyNjQzOyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbi0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTk3LjUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4OS43NDAwMDAwMDAwMDUyMzg3LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDQ4NTguNTc4NjQzNzYyNjksIDUwNDUuNSwgNTE0MS40MjEzNTYyMzczMSlcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9XG4oOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTQ0LjgwNTk5OTk5OTk4MjMwNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDE5LjE5NzQ0MDAwMDAwMzU1LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU5LjMxNzc2MDAwMDAwNTM2LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDM5Ljk4NDYzOTk5OTk5NTEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU0LjM4MjA3OTk5OTk5NTc3LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDkwLjA5NjAwMDAwMDAwNSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDc2Ljc4NzIwMDAwMDAwNjEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjE3NjAwMDAwMDAwNjc1MjEsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4yMTYwMDAwMDAwMDAzNDkyLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODAuNjIyMDAwMDAwMDAzMDI2OCwgMTIwLilcblxuKilcblxuKCogUmV0dXJuIHRoZSBzdW0gb2YgdGhlIHNxdWFyZXMgb2YgdltpMCxpMVsgKilcbmxldCByZWMgc3Vtc3EgdiBpMCBpMSA9XG4gIGlmIGkwID49IGkxIHRoZW4gMC4wXG4gIGVsc2UgaWYgaTEgPSBpMCArIDEgdGhlbiBTdGRsaWIuZmxvYXQgdi4oaTApICouIFN0ZGxpYi5mbG9hdCB2LihpMClcbiAgZWxzZSBzdW1zcSB2IGkwICgoaTAraTEpLzIpICsuIHN1bXNxIHYgKChpMCtpMSkvMikgaTFcblxuXG5sZXQgY2hpc3F1YXJlIGcgbiByID1cbiAgaWYgbiA8PSAxMCAqIHIgdGhlbiBpbnZhbGlkX2FyZyBcImNoaXNxdWFyZVwiO1xuICBsZXQgZiA9IEFycmF5Lm1ha2UgciAwIGluXG4gIGZvciBpID0gMSB0byBuIGRvXG4gICAgbGV0IHQgPSBnIHIgaW5cbiAgICBmLih0KSA8LSBmLih0KSArIDFcbiAgZG9uZTtcbiAgbGV0IHQgPSBzdW1zcSBmIDAgclxuICBhbmQgciA9IFN0ZGxpYi5mbG9hdCByXG4gIGFuZCBuID0gU3RkbGliLmZsb2F0IG4gaW5cbiAgbGV0IHNyID0gMi4wICouIHNxcnQgciBpblxuICAociAtLiBzciwgICAociAqLiB0IC8uIG4pIC0uIG4sICAgciArLiBzcilcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIGxpbmVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbSBudW1iZXJzLlxuKilcbmxldCBzdCA9IHJlZiAwXG5sZXQgaW5pdF9kaWZmIHIgPSBzdCA6PSBpbnQgclxubGV0IGRpZmYgciA9XG4gIGxldCB4MSA9ICFzdFxuICBhbmQgeDIgPSBpbnQgclxuICBpblxuICBzdCA6PSB4MjtcbiAgaWYgeDEgPj0geDIgdGhlblxuICAgIHgxIC0geDJcbiAgZWxzZVxuICAgIHIgKyB4MSAtIHgyXG5cblxubGV0IHN0MSA9IHJlZiAwXG5hbmQgc3QyID0gcmVmIDBcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIHF1YWRyYXRpYyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbVxuICAgbnVtYmVycy5cbiopXG5sZXQgaW5pdF9kaWZmMiByID0gc3QxIDo9IGludCByOyBzdDIgOj0gaW50IHJcbmxldCBkaWZmMiByID1cbiAgbGV0IHgxID0gIXN0MVxuICBhbmQgeDIgPSAhc3QyXG4gIGFuZCB4MyA9IGludCByXG4gIGluXG4gIHN0MSA6PSB4MjtcbiAgc3QyIDo9IHgzO1xuICAoeDMgLSB4MiAtIHgyICsgeDEgKyAyKnIpIG1vZCByXG5cblxuKioqKioqKioqKioqKioqKioqKiopXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG5pbmNsdWRlIEludFxuXG50eXBlIHQgPSBpbnRcbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbmxldCB6ZXJvID0gMFxubGV0IG9uZSA9IDFcbmxldCBtaW51c19vbmUgPSAtMVxubGV0IGFkZCA9ICggKyApXG5sZXQgc3ViID0gKCAtIClcbmxldCBtdWwgPSAoICogKVxubGV0IGRpdiA9ICggLyApXG5sZXQgc3VjYyA9IHN1Y2NcbmxldCBwcmVkID0gcHJlZFxubGV0IGFicyA9IGFic1xubGV0IG1heF9pbnQgPSBtYXhfaW50XG5sZXQgbWluX2ludCA9IG1pbl9pbnRcbmxldCBlcXVhbCAoYSA6IGludCkgYiA9IFN0ZGxpYi4oID0gKSBhIGJcbmxldCBjb21wYXJlIChhIDogaW50KSBiID0gY29tcGFyZSBhIGJcblxuKCogdXNlIEZOVjpcbiAgIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zvd2xlciVFMiU4MCU5M05vbGwlRTIlODAlOTNWb19oYXNoX2Z1bmN0aW9uICopXG5sZXQgaGFzaCAobiA6IGludCkgOiBpbnQgPVxuICBsZXQgb2Zmc2V0X2Jhc2lzID0gMHhjYmYyOWNlNDg0MjIyMzI1TCBpblxuICBsZXQgcHJpbWUgPSAweDEwMDAwMDAwMWIzTCBpblxuXG4gIGxldCBoID0gcmVmIG9mZnNldF9iYXNpcyBpblxuICBmb3IgayA9IDAgdG8gNyBkb1xuICAgIChoIDo9IEludDY0LihtdWwgIWggcHJpbWUpKTtcbiAgICAoKiBoIDo9IGggeG9yIChrLXRoIGJ5dGUgb2YgbikgKilcbiAgICBoIDo9IEludDY0Lihsb2d4b3IgIWggKG9mX2ludCAoKG4gbHNyIChrICogOCkpIGxhbmQgMHhmZikpKVxuICBkb25lO1xuICAoKiB0cnVuY2F0ZSBiYWNrIHRvIGludCBhbmQgcmVtb3ZlIHNpZ24gKilcbiAgSW50NjQudG9faW50ICFoIGxhbmQgbWF4X2ludFxuXG5sZXQgcmFuZ2UgaSBqIHlpZWxkID1cbiAgbGV0IHJlYyB1cCBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICB1cCAoaSArIDEpIGogeWllbGRcbiAgICApXG4gIGFuZCBkb3duIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIGRvd24gKGkgLSAxKSBqIHlpZWxkXG4gICAgKVxuICBpblxuICBpZiBpIDw9IGogdGhlblxuICAgIHVwIGkgaiB5aWVsZFxuICBlbHNlXG4gICAgZG93biBpIGogeWllbGRcblxubGV0IHJhbmdlJyBpIGogeWllbGQgPVxuICBpZiBpIDwgaiB0aGVuXG4gICAgcmFuZ2UgaSAoaiAtIDEpIHlpZWxkXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgICgpXG4gIGVsc2VcbiAgICByYW5nZSBpIChqICsgMSkgeWllbGRcblxubGV0IHNpZ24gaSA9IGNvbXBhcmUgaSAwXG5sZXQgbmVnIGkgPSAtaVxuXG5sZXQgcG93IGEgYiA9XG4gIGxldCByZWMgYXV4IGFjYyA9IGZ1bmN0aW9uXG4gICAgfCAxIC0+IGFjY1xuICAgIHwgbiAtPlxuICAgICAgaWYgbiBtb2QgMiA9IDAgdGhlblxuICAgICAgICBhdXggKGFjYyAqIGFjYykgKG4gLyAyKVxuICAgICAgZWxzZVxuICAgICAgICBhY2MgKiBhdXggKGFjYyAqIGFjYykgKG4gLyAyKVxuICBpblxuICBtYXRjaCBiIHdpdGhcbiAgfCAwIC0+XG4gICAgaWYgYSA9IDAgdGhlblxuICAgICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJwb3c6IHVuZGVmaW5lZCB2YWx1ZSAwXjBcIilcbiAgICBlbHNlXG4gICAgICAxXG4gIHwgYiB3aGVuIGIgPCAwIC0+XG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJwb3c6IGNhbid0IHJhaXNlIGludCB0byBuZWdhdGl2ZSBwb3dlclwiKVxuICB8IGIgLT4gYXV4IGEgYlxuXG5tb2R1bGUgSW5maXggOiBzaWdcbiAgdmFsICggPSApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPD4gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIDwgKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoID4gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIDw9ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA+PSApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggLS0gKSA6IHQgLT4gdCAtPiB0IGl0ZXJcbiAgdmFsICggLS1eICkgOiB0IC0+IHQgLT4gdCBpdGVyXG4gIHZhbCAoICsgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIC0gKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIH4tICkgOiB0IC0+IHRcbiAgdmFsICggKiApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggLyApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggKiogKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIG1vZCApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbGFuZCApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbG9yICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBseG9yICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgbG5vdCA6IHQgLT4gdFxuICB2YWwgKCBsc2wgKSA6IHQgLT4gaW50IC0+IHRcbiAgdmFsICggbHNyICkgOiB0IC0+IGludCAtPiB0XG4gIHZhbCAoIGFzciApIDogdCAtPiBpbnQgLT4gdFxuZW5kID0gc3RydWN0XG4gIGluY2x1ZGUgU3RkbGliXG5cbiAgbGV0ICggLS0gKSA9IHJhbmdlXG4gIGxldCAoIC0tXiApID0gcmFuZ2UnXG4gIGxldCAoICoqICkgPSBwb3dcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbmxldCBtaW4gOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi5taW5cbmxldCBtYXggOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi5tYXhcblxubGV0IGZsb29yX2RpdiBhIG4gPVxuICBpZiBhIDwgMCAmJiBuID49IDAgdGhlblxuICAgICgoYSArIDEpIC8gbikgLSAxXG4gIGVsc2UgaWYgYSA+IDAgJiYgbiA8IDAgdGhlblxuICAgICgoYSAtIDEpIC8gbikgLSAxXG4gIGVsc2VcbiAgICBhIC8gblxuXG5sZXQgYm9vbF9uZXEgKGEgOiBib29sKSBiID0gU3RkbGliLiggPD4gKSBhIGJcblxubGV0IHJlbSBhIG4gPVxuICBsZXQgeSA9IGEgbW9kIG4gaW5cbiAgaWYgYm9vbF9uZXEgKHkgPCAwKSAobiA8IDApICYmIHkgPD4gMCB0aGVuXG4gICAgeSArIG5cbiAgZWxzZVxuICAgIHlcblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tIG4gc3QgPSBSYW5kb20uU3RhdGUuaW50IHN0IG5cbmxldCByYW5kb21fc21hbGwgPSByYW5kb20gMTAwXG5sZXQgcmFuZG9tX3JhbmdlIGkgaiBzdCA9IGkgKyByYW5kb20gKGogLSBpKSBzdFxubGV0IHBwIGZtdCA9IEZvcm1hdC5wcF9wcmludF9pbnQgZm10XG5sZXQgbW9zdF9zaWduaWZpY2FudF9iaXQgPSAtMSBseG9yICgtMSBsc3IgMSlcbmxldCB0b19zdHJpbmcgPSBzdHJpbmdfb2ZfaW50XG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5sZXQgb2Zfc3RyaW5nX2V4biA9IFN0ZGxpYi5pbnRfb2Zfc3RyaW5nXG5sZXQgdG9fZmxvYXQgPSBmbG9hdF9vZl9pbnRcbmxldCBvZl9mbG9hdCA9IGludF9vZl9mbG9hdFxuXG50eXBlIG91dHB1dCA9IGNoYXIgLT4gdW5pdFxuXG4oKiBhYnN0cmFjdCBwcmludGVyICopXG5sZXQgdG9fYmluYXJ5X2dlbiAob3V0IDogb3V0cHV0KSBuID1cbiAgbGV0IG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gKFxuICAgICAgb3V0ICctJztcbiAgICAgIC1uXG4gICAgKSBlbHNlXG4gICAgICBuXG4gIGluXG4gIG91dCAnMCc7XG4gIG91dCAnYic7XG4gIGxldCByZWMgbG9vcCBzdGFydGVkIGJpdCBuID1cbiAgICBpZiBiaXQgPSAwIHRoZW4gKFxuICAgICAgaWYgbm90IHN0YXJ0ZWQgdGhlbiBvdXQgJzAnXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBiID0gbiBsYW5kIGJpdCBpblxuICAgICAgaWYgYiA9IDAgdGhlbiAoXG4gICAgICAgIGlmIHN0YXJ0ZWQgdGhlbiBvdXQgJzAnO1xuICAgICAgICBsb29wIHN0YXJ0ZWQgKGJpdCBsc3IgMSkgblxuICAgICAgKSBlbHNlIChcbiAgICAgICAgb3V0ICcxJztcbiAgICAgICAgbG9vcCB0cnVlIChiaXQgbHNyIDEpIG5cbiAgICAgIClcbiAgICApXG4gIGluXG4gIGxvb3AgZmFsc2UgbW9zdF9zaWduaWZpY2FudF9iaXQgblxuXG5sZXQgcHBfYmluYXJ5IG91dCBuID0gdG9fYmluYXJ5X2dlbiAoRm9ybWF0LnBwX3ByaW50X2NoYXIgb3V0KSBuXG5cbmxldCB0b19zdHJpbmdfYmluYXJ5IG4gPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICB0b19iaW5hcnlfZ2VuIChCdWZmZXIuYWRkX2NoYXIgYnVmKSBuO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCByYW5nZV9ieSB+c3RlcCBpIGogeWllbGQgPVxuICBsZXQgcmVjIHJhbmdlIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIHJhbmdlIChpICsgc3RlcCkgaiB5aWVsZFxuICAgIClcbiAgaW5cbiAgaWYgc3RlcCA9IDAgdGhlblxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiQ0NJbnQucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgICgpXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIHlpZWxkXG5cbigqXG4gIGZyb20gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGFtbWluZ193ZWlnaHRcblxuICAvL1RoaXMgdXNlcyBmZXdlciBhcml0aG1ldGljIG9wZXJhdGlvbnMgdGhhbiBhbnkgb3RoZXIga25vd25cbiAgLy9pbXBsZW1lbnRhdGlvbiBvbiBtYWNoaW5lcyB3aXRoIHNsb3cgbXVsdGlwbGljYXRpb24uXG4gIC8vSXQgdXNlcyAxNyBhcml0aG1ldGljIG9wZXJhdGlvbnMuXG4gIGludCBwb3Bjb3VudF8yKHVpbnQ2NF90IHgpIHtcbiAgICB4IC09ICh4ID4+IDEpICYgbTE7ICAgICAgICAgICAgIC8vcHV0IGNvdW50IG9mIGVhY2ggMiBiaXRzIGludG8gdGhvc2UgMiBiaXRzXG4gICAgeCA9ICh4ICYgbTIpICsgKCh4ID4+IDIpICYgbTIpOyAvL3B1dCBjb3VudCBvZiBlYWNoIDQgYml0cyBpbnRvIHRob3NlIDQgYml0c1xuICAgIHggPSAoeCArICh4ID4+IDQpKSAmIG00OyAgICAgICAgLy9wdXQgY291bnQgb2YgZWFjaCA4IGJpdHMgaW50byB0aG9zZSA4IGJpdHNcbiAgICB4ICs9IHggPj4gIDg7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDE2IGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgeCArPSB4ID4+IDE2OyAgLy9wdXQgY291bnQgb2YgZWFjaCAzMiBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHggKz0geCA+PiAzMjsgIC8vcHV0IGNvdW50IG9mIGVhY2ggNjQgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICByZXR1cm4geCAmIDB4N2Y7XG4gIH1cblxuICAgbTEgPSAweDU1NTU1NTU1NTU1NTU1NTVcbiAgIG0yID0gMHgzMzMzMzMzMzMzMzMzMzMzXG4gICBtNCA9IDB4MGYwZjBmMGYwZjBmMGYwZlxuKilcbmxldCBwb3Bjb3VudCAoYiA6IGludCkgOiBpbnQgPVxuICBsZXQgbTEgPSAweDU1NTU1NTU1NTU1NTU1NTVMIGluXG4gIGxldCBtMiA9IDB4MzMzMzMzMzMzMzMzMzMzM0wgaW5cbiAgbGV0IG00ID0gMHgwZjBmMGYwZjBmMGYwZjBmTCBpblxuICBsZXQgb3BlbiBJbnQ2NCBpblxuICBsZXQgYiA9IG9mX2ludCBiIGluXG4gICgqIGludC0+aW50NjQgKilcbiAgbGV0IGIgPSBsb2dhbmQgYiAweDdmZmZmZmZmZmZmZmZmZmZMIGluXG5cbiAgKCogcmVtb3ZlIHNpZ24gYml0LCB3ZSBkZWFsIHdpdGggdWludDY0IGhlcmUgKilcbiAgbGV0IGIgPSBzdWIgYiAobG9nYW5kIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMSkgbTEpIGluXG4gIGxldCBiID0gYWRkIChsb2dhbmQgYiBtMikgKGxvZ2FuZCAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDIpIG0yKSBpblxuICBsZXQgYiA9IGxvZ2FuZCAoYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiA0KSkgbTQgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDgpIGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxNikgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDMyKSBpblxuICBsZXQgYiA9IGxvZ2FuZCBiIDB4N2ZMIGluXG4gIHRvX2ludCBiXG5cbmxldCBsb2dhbmQgPSAoIGxhbmQgKVxubGV0IGxvZ29yID0gKCBsb3IgKVxubGV0IGxvZ3hvciA9ICggbHhvciApXG5sZXQgbG9nbm90ID0gbG5vdFxubGV0IHNoaWZ0X2xlZnQgPSAoIGxzbCApXG5sZXQgc2hpZnRfcmlnaHQgPSAoIGFzciApXG5sZXQgc2hpZnRfcmlnaHRfbG9naWNhbCA9ICggbHNyIClcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogT3BlcmF0aW9ucyBvbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbnMgb2YgdmFsdWVzICopXG5cbnR5cGUgdFxuXG50eXBlIHJhd19kYXRhID0gbmF0aXZlaW50XG5cbmV4dGVybmFsIHJlcHIgOiAnYSAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgb2JqIDogdCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG1hZ2ljIDogJ2EgLT4gJ2IgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBpc19pbnQgOiB0IC0+IGJvb2wgPSBcIiVvYmpfaXNfaW50XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGlzX2Jsb2NrIGEgPSBub3QgKGlzX2ludCBhKVxuZXh0ZXJuYWwgdGFnIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3RhZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzZXRfdGFnIDogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfc2V0X3RhZ1wiXG5leHRlcm5hbCBzaXplIDogdCAtPiBpbnQgPSBcIiVvYmpfc2l6ZVwiXG5leHRlcm5hbCByZWFjaGFibGVfd29yZHMgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzXCJcbmV4dGVybmFsIGZpZWxkIDogdCAtPiBpbnQgLT4gdCA9IFwiJW9ial9maWVsZFwiXG5leHRlcm5hbCBzZXRfZmllbGQgOiB0IC0+IGludCAtPiB0IC0+IHVuaXQgPSBcIiVvYmpfc2V0X2ZpZWxkXCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRhcnJheV9nZXRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9zZXQgOlxuICAgIGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcImNhbWxfZmxvYXRhcnJheV9zZXRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gZG91YmxlX2ZpZWxkIHggaSA9IGZsb2F0YXJyYXlfZ2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGlcbmxldCBbQGlubGluZSBhbHdheXNdIHNldF9kb3VibGVfZmllbGQgeCBpIHYgPVxuICBmbG9hdGFycmF5X3NldCAob2JqIHggOiBmbG9hdGFycmF5KSBpIHZcbmV4dGVybmFsIHJhd19maWVsZCA6IHQgLT4gaW50IC0+IHJhd19kYXRhID0gXCJjYW1sX29ial9yYXdfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X3Jhd19maWVsZCA6IHQgLT4gaW50IC0+IHJhd19kYXRhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX29ial9zZXRfcmF3X2ZpZWxkXCJcblxuZXh0ZXJuYWwgbmV3X2Jsb2NrIDogaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX29ial9ibG9ja1wiXG5leHRlcm5hbCBkdXAgOiB0IC0+IHQgPSBcImNhbWxfb2JqX2R1cFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3RydW5jYXRlXCJcbmV4dGVybmFsIGFkZF9vZmZzZXQgOiB0IC0+IEludDMyLnQgLT4gdCA9IFwiY2FtbF9vYmpfYWRkX29mZnNldFwiXG5leHRlcm5hbCB3aXRoX3RhZyA6IGludCAtPiB0IC0+IHQgPSBcImNhbWxfb2JqX3dpdGhfdGFnXCJcblxubGV0IGZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAwXG5sZXQgbGFzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMjQ1XG5cbmxldCBsYXp5X3RhZyA9IDI0NlxubGV0IGNsb3N1cmVfdGFnID0gMjQ3XG5sZXQgb2JqZWN0X3RhZyA9IDI0OFxubGV0IGluZml4X3RhZyA9IDI0OVxubGV0IGZvcndhcmRfdGFnID0gMjUwXG5cbmxldCBub19zY2FuX3RhZyA9IDI1MVxuXG5sZXQgYWJzdHJhY3RfdGFnID0gMjUxXG5sZXQgc3RyaW5nX3RhZyA9IDI1MlxubGV0IGRvdWJsZV90YWcgPSAyNTNcbmxldCBkb3VibGVfYXJyYXlfdGFnID0gMjU0XG5sZXQgY3VzdG9tX3RhZyA9IDI1NVxubGV0IGZpbmFsX3RhZyA9IGN1c3RvbV90YWdcblxuXG5sZXQgaW50X3RhZyA9IDEwMDBcbmxldCBvdXRfb2ZfaGVhcF90YWcgPSAxMDAxXG5sZXQgdW5hbGlnbmVkX3RhZyA9IDEwMDJcblxubW9kdWxlIENsb3N1cmUgPSBzdHJ1Y3RcbiAgdHlwZSBpbmZvID0ge1xuICAgIGFyaXR5OiBpbnQ7XG4gICAgc3RhcnRfZW52OiBpbnQ7XG4gIH1cblxuICBsZXQgaW5mb19vZl9yYXcgKGluZm8gOiBuYXRpdmVpbnQpID1cbiAgICBsZXQgb3BlbiBOYXRpdmVpbnQgaW5cbiAgICBsZXQgYXJpdHkgPVxuICAgICAgKCogc2lnbmVkOiBuZWdhdGl2ZSBmb3IgdHVwbGVkIGZ1bmN0aW9ucyAqKVxuICAgICAgaWYgU3lzLndvcmRfc2l6ZSA9IDY0IHRoZW5cbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDU2KVxuICAgICAgZWxzZVxuICAgICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0IGluZm8gMjQpXG4gICAgaW5cbiAgICBsZXQgc3RhcnRfZW52ID1cbiAgICAgICgqIHN0YXJ0X2VudiBpcyB1bnNpZ25lZCwgYnV0IHdlIGtub3cgaXQgY2FuIGFsd2F5cyBmaXQgYW4gT0NhbWxcbiAgICAgICAgIGludGVnZXIgc28gd2UgdXNlIFt0b19pbnRdIGluc3RlYWQgb2YgW3Vuc2lnbmVkX3RvX2ludF0uICopXG4gICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKHNoaWZ0X2xlZnQgaW5mbyA4KSA5KSBpblxuICAgIHsgYXJpdHk7IHN0YXJ0X2VudiB9XG5cbiAgKCogbm90ZTogd2UgZXhwZWN0IGEgY2xvc3VyZSwgbm90IGFuIGluZml4IHBvaW50ZXIgKilcbiAgbGV0IGluZm8gKG9iaiA6IHQpID1cbiAgICBhc3NlcnQgKHRhZyBvYmogPSBjbG9zdXJlX3RhZyk7XG4gICAgaW5mb19vZl9yYXcgKHJhd19maWVsZCBvYmogMSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5zaW9uX2NvbnN0cnVjdG9yID1cbnN0cnVjdFxuICB0eXBlIHQgPSBleHRlbnNpb25fY29uc3RydWN0b3JcbiAgbGV0IG9mX3ZhbCB4ID1cbiAgICBsZXQgeCA9IHJlcHIgeCBpblxuICAgIGxldCBzbG90ID1cbiAgICAgIGlmIChpc19ibG9jayB4KSAmJiAodGFnIHgpIDw+IG9iamVjdF90YWcgJiYgKHNpemUgeCkgPj0gMSB0aGVuIGZpZWxkIHggMFxuICAgICAgZWxzZSB4XG4gICAgaW5cbiAgICBsZXQgbmFtZSA9XG4gICAgICBpZiAoaXNfYmxvY2sgc2xvdCkgJiYgKHRhZyBzbG90KSA9IG9iamVjdF90YWcgdGhlbiBmaWVsZCBzbG90IDBcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcbiAgICBpblxuICAgICAgaWYgKHRhZyBuYW1lKSA9IHN0cmluZ190YWcgdGhlbiAob2JqIHNsb3QgOiB0KVxuICAgICAgZWxzZSBpbnZhbGlkX2FyZyBcIk9iai5leHRlbnNpb25fY29uc3RydWN0b3JcIlxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIG5hbWUgKHNsb3QgOiB0KSA9XG4gICAgKG9iaiAoZmllbGQgKHJlcHIgc2xvdCkgMCkgOiBzdHJpbmcpXG5cbiAgbGV0IFtAaW5saW5lIGFsd2F5c10gaWQgKHNsb3QgOiB0KSA9XG4gICAgKG9iaiAoZmllbGQgKHJlcHIgc2xvdCkgMSkgOiBpbnQpXG5lbmRcblxubGV0IGV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5vZl92YWxcbmxldCBleHRlbnNpb25fbmFtZSA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5uYW1lXG5sZXQgZXh0ZW5zaW9uX2lkID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLmlkXG5cbm1vZHVsZSBFcGhlbWVyb24gPSBzdHJ1Y3RcbiAgdHlwZSBvYmpfdCA9IHRcblxuICB0eXBlIHQgKCoqIGVwaGVtZXJvbiAqKVxuXG4gICAoKiogVG8gY2hhbmdlIGluIHN5bmMgd2l0aCB3ZWFrLmggKilcbiAgbGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuICBsZXQgbWF4X2VwaGVfbGVuZ3RoID0gU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2VwaGVfY3JlYXRlXCI7O1xuICBsZXQgY3JlYXRlIGwgPVxuICAgIGlmIG5vdCAoMCA8PSBsICYmIGwgPD0gbWF4X2VwaGVfbGVuZ3RoKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIk9iai5FcGhlbWVyb24uY3JlYXRlXCI7XG4gICAgY3JlYXRlIGxcblxuICBsZXQgbGVuZ3RoIHggPSBzaXplKHJlcHIgeCkgLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGxldCByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gbXNnID1cbiAgICBpZiBub3QgKDAgPD0gbyAmJiBvIDwgbGVuZ3RoIGUpIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIG1zZ1xuXG4gIGV4dGVybmFsIGdldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9rZXlcIlxuICBsZXQgZ2V0X2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleVwiO1xuICAgIGdldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgZ2V0X2tleV9jb3B5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5X2NvcHlcIlxuICBsZXQgZ2V0X2tleV9jb3B5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5nZXRfa2V5X2NvcHlcIjtcbiAgICBnZXRfa2V5X2NvcHkgZSBvXG5cbiAgZXh0ZXJuYWwgc2V0X2tleTogdCAtPiBpbnQgLT4gb2JqX3QgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3NldF9rZXlcIlxuICBsZXQgc2V0X2tleSBlIG8geCA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5zZXRfa2V5XCI7XG4gICAgc2V0X2tleSBlIG8geFxuXG4gIGV4dGVybmFsIHVuc2V0X2tleTogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2tleVwiXG4gIGxldCB1bnNldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLnVuc2V0X2tleVwiO1xuICAgIHVuc2V0X2tleSBlIG9cblxuICBleHRlcm5hbCBjaGVja19rZXk6IHQgLT4gaW50IC0+IGJvb2wgPSBcImNhbWxfZXBoZV9jaGVja19rZXlcIlxuICBsZXQgY2hlY2tfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5jaGVja19rZXlcIjtcbiAgICBjaGVja19rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgYmxpdF9rZXkgOiB0IC0+IGludCAtPiB0IC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgID0gXCJjYW1sX2VwaGVfYmxpdF9rZXlcIlxuXG4gIGxldCBibGl0X2tleSBlMSBvMSBlMiBvMiBsID1cbiAgICBpZiBsIDwgMCB8fCBvMSA8IDAgfHwgbzEgPiBsZW5ndGggZTEgLSBsXG4gICAgICAgfHwgbzIgPCAwIHx8IG8yID4gbGVuZ3RoIGUyIC0gbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmJsaXRfa2V5XCJcbiAgICBlbHNlIGlmIGwgPD4gMCB0aGVuIGJsaXRfa2V5IGUxIG8xIGUyIG8yIGxcblxuICBleHRlcm5hbCBnZXRfZGF0YTogdCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfZGF0YVwiXG4gIGV4dGVybmFsIGdldF9kYXRhX2NvcHk6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFfY29weVwiXG4gIGV4dGVybmFsIHNldF9kYXRhOiB0IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfZGF0YVwiXG4gIGV4dGVybmFsIHVuc2V0X2RhdGE6IHQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2RhdGFcIlxuICBleHRlcm5hbCBjaGVja19kYXRhOiB0IC0+IGJvb2wgPSBcImNhbWxfZXBoZV9jaGVja19kYXRhXCJcbiAgZXh0ZXJuYWwgYmxpdF9kYXRhIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9ibGl0X2RhdGFcIlxuXG5lbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSW50ZXJuYWxzIG9mIGZvcmNpbmcgbGF6eSB2YWx1ZXMuICopXG5cbnR5cGUgJ2EgdCA9ICdhIGxhenlfdFxuXG5leGNlcHRpb24gVW5kZWZpbmVkXG5cbmxldCByYWlzZV91bmRlZmluZWQgPSBPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIFVuZGVmaW5lZClcblxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogT2JqLnQgLT4gT2JqLnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfbWFrZV9mb3J3YXJkXCJcblxuKCogQXNzdW1lIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgbGF6eSAqKVxubGV0IGZvcmNlX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgdHJ5XG4gICAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgICBtYWtlX2ZvcndhcmQgKE9iai5yZXByIGJsaykgKE9iai5yZXByIHJlc3VsdCk7XG4gICAgcmVzdWx0XG4gIHdpdGggZSAtPlxuICAgIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCAoT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBlKSk7XG4gICAgcmFpc2UgZVxuXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV92YWxfbGF6eV9ibG9jayAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IGNsb3N1cmUgPSAoT2JqLm9iaiAoT2JqLmZpZWxkIChPYmoucmVwciBibGspIDApIDogdW5pdCAtPiAnYXJnKSBpblxuICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgcmFpc2VfdW5kZWZpbmVkO1xuICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICBtYWtlX2ZvcndhcmQgKE9iai5yZXByIGJsaykgKE9iai5yZXByIHJlc3VsdCk7XG4gIHJlc3VsdFxuXG5cbigqIFtmb3JjZV0gaXMgbm90IHVzZWQsIHNpbmNlIFtMYXp5LmZvcmNlXSBpcyBkZWNsYXJlZCBhcyBhIHByaW1pdGl2ZVxuICAgd2hvc2UgY29kZSBpbmxpbmVzIHRoZSB0YWcgdGVzdHMgb2YgaXRzIGFyZ3VtZW50LCBleGNlcHQgd2hlbiBhZmxcbiAgIGluc3RydW1lbnRhdGlvbiBpcyB0dXJuZWQgb24uICopXG5cbmxldCBmb3JjZSAobHp2IDogJ2FyZyBsYXp5X3QpID1cbiAgKCogVXNpbmcgW1N5cy5vcGFxdWVfaWRlbnRpdHldIHByZXZlbnRzIHR3byBwb3RlbnRpYWwgcHJvYmxlbXM6XG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGhhdmUgRm9yd2FyZF90YWcsIHRoZW4gaXRzIHRhZyBjb3VsZCBoYXZlXG4gICAgICAgY2hhbmdlZCBkdXJpbmcgR0MsIHNvIHRoYXQgaW5mb3JtYXRpb24gbXVzdCBiZSBmb3Jnb3R0ZW4gKHNlZSBHUFIjNzEzXG4gICAgICAgYW5kIGlzc3VlICM3MzAxKVxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBiZSBpbW11dGFibGUsIHRoZW4gaWYgdGhlIGNvbXBpbGVyXG4gICAgICAgY2Fubm90IHByb3ZlIHRoYXQgdGhlIGxhc3QgYnJhbmNoIGlzIG5vdCB0YWtlbiBpdCB3aWxsIGlzc3VlIGFcbiAgICAgICB3YXJuaW5nIDU5IChtb2RpZmljYXRpb24gb2YgYW4gaW1tdXRhYmxlIHZhbHVlKSAqKVxuICBsZXQgbHp2ID0gU3lzLm9wYXF1ZV9pZGVudGl0eSBsenYgaW5cbiAgbGV0IHggPSBPYmoucmVwciBsenYgaW5cbiAgbGV0IHQgPSBPYmoudGFnIHggaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB0aGVuIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpIGVsc2VcbiAgaWYgdCA8PiBPYmoubGF6eV90YWcgdGhlbiAoT2JqLm9iaiB4IDogJ2FyZylcbiAgZWxzZSBmb3JjZV9sYXp5X2Jsb2NrIGx6dlxuXG5cbmxldCBmb3JjZV92YWwgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfdmFsX2xhenlfYmxvY2sgbHp2XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9IE5vbmUgfCBTb21lIG9mICdhXG5cbmxldCBub25lID0gTm9uZVxubGV0IHNvbWUgdiA9IFNvbWUgdlxubGV0IHZhbHVlIG8gfmRlZmF1bHQgPSBtYXRjaCBvIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IGRlZmF1bHRcbmxldCBnZXQgPSBmdW5jdGlvbiBTb21lIHYgLT4gdiB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJvcHRpb24gaXMgTm9uZVwiXG5sZXQgYmluZCBvIGYgPSBtYXRjaCBvIHdpdGggTm9uZSAtPiBOb25lIHwgU29tZSB2IC0+IGYgdlxubGV0IGpvaW4gPSBmdW5jdGlvbiBTb21lIG8gLT4gbyB8IE5vbmUgLT4gTm9uZVxubGV0IG1hcCBmIG8gPSBtYXRjaCBvIHdpdGggTm9uZSAtPiBOb25lIHwgU29tZSB2IC0+IFNvbWUgKGYgdilcbmxldCBmb2xkIH5ub25lIH5zb21lID0gZnVuY3Rpb24gU29tZSB2IC0+IHNvbWUgdiB8IE5vbmUgLT4gbm9uZVxubGV0IGl0ZXIgZiA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBmIHYgfCBOb25lIC0+ICgpXG5sZXQgaXNfbm9uZSA9IGZ1bmN0aW9uIE5vbmUgLT4gdHJ1ZSB8IFNvbWUgXyAtPiBmYWxzZVxubGV0IGlzX3NvbWUgPSBmdW5jdGlvbiBOb25lIC0+IGZhbHNlIHwgU29tZSBfIC0+IHRydWVcblxubGV0IGVxdWFsIGVxIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBlcSB2MCB2MVxufCBOb25lLCBOb25lIC0+IHRydWVcbnwgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSBjbXAgbzAgbzEgPSBtYXRjaCBvMCwgbzEgd2l0aFxufCBTb21lIHYwLCBTb21lIHYxIC0+IGNtcCB2MCB2MVxufCBOb25lLCBOb25lIC0+IDBcbnwgTm9uZSwgU29tZSBfIC0+IC0xXG58IFNvbWUgXywgTm9uZSAtPiAxXG5cbmxldCB0b19yZXN1bHQgfm5vbmUgPSBmdW5jdGlvbiBOb25lIC0+IEVycm9yIG5vbmUgfCBTb21lIHYgLT4gT2sgdlxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBOb25lIC0+IFtdIHwgU29tZSB2IC0+IFt2XVxubGV0IHRvX3NlcSA9IGZ1bmN0aW9uIE5vbmUgLT4gU2VxLmVtcHR5IHwgU29tZSB2IC0+IFNlcS5yZXR1cm4gdlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICgnYSwgJ2UpIHQgPSAoJ2EsICdlKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdlXG5cbmxldCBvayB2ID0gT2sgdlxubGV0IGVycm9yIGUgPSBFcnJvciBlXG5sZXQgdmFsdWUgciB+ZGVmYXVsdCA9IG1hdGNoIHIgd2l0aCBPayB2IC0+IHYgfCBFcnJvciBfIC0+IGRlZmF1bHRcbmxldCBnZXRfb2sgPSBmdW5jdGlvbiBPayB2IC0+IHYgfCBFcnJvciBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIEVycm9yIF9cIlxubGV0IGdldF9lcnJvciA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gZSB8IE9rIF8gLT4gaW52YWxpZF9hcmcgXCJyZXN1bHQgaXMgT2sgX1wiXG5sZXQgYmluZCByIGYgPSBtYXRjaCByIHdpdGggT2sgdiAtPiBmIHYgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IGpvaW4gPSBmdW5jdGlvbiBPayByIC0+IHIgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcCBmID0gZnVuY3Rpb24gT2sgdiAtPiBPayAoZiB2KSB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgbWFwX2Vycm9yIGYgPSBmdW5jdGlvbiBFcnJvciBlIC0+IEVycm9yIChmIGUpIHwgT2sgXyBhcyB2IC0+IHZcbmxldCBmb2xkIH5vayB+ZXJyb3IgPSBmdW5jdGlvbiBPayB2IC0+IG9rIHYgfCBFcnJvciBlIC0+IGVycm9yIGVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBPayB2IC0+IGYgdiB8IEVycm9yIF8gLT4gKClcbmxldCBpdGVyX2Vycm9yIGYgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGYgZSB8IE9rIF8gLT4gKClcbmxldCBpc19vayA9IGZ1bmN0aW9uIE9rIF8gLT4gdHJ1ZSB8IEVycm9yIF8gLT4gZmFsc2VcbmxldCBpc19lcnJvciA9IGZ1bmN0aW9uIEVycm9yIF8gLT4gdHJ1ZSB8IE9rIF8gLT4gZmFsc2VcblxubGV0IGVxdWFsIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IF8sIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgfm9rIH5lcnJvciByMCByMSA9IG1hdGNoIHIwLCByMSB3aXRoXG58IE9rIHYwLCBPayB2MSAtPiBvayB2MCB2MVxufCBFcnJvciBlMCwgRXJyb3IgZTEgLT4gZXJyb3IgZTAgZTFcbnwgT2sgXywgRXJyb3IgXyAtPiAtMVxufCBFcnJvciBfLCBPayBfIC0+IDFcblxubGV0IHRvX29wdGlvbiA9IGZ1bmN0aW9uIE9rIHYgLT4gU29tZSB2IHwgRXJyb3IgXyAtPiBOb25lXG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIE9rIHYgLT4gW3ZdIHwgRXJyb3IgXyAtPiBbXVxubGV0IHRvX3NlcSA9IGZ1bmN0aW9uIE9rIHYgLT4gU2VxLnJldHVybiB2IHwgRXJyb3IgXyAtPiBTZXEuZW1wdHlcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBVdGlscyBhcm91bmQgY2hhcn1cblxuICAgIEBzaW5jZSAwLjE0ICopXG5cbmluY2x1ZGUgQ2hhclxuXG5sZXQgcHBfYnVmID0gQnVmZmVyLmFkZF9jaGFyXG5sZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfY2hhclxubGV0IG9mX2ludF9leG4gPSBDaGFyLmNoclxubGV0IG9mX2ludCBjID0gdHJ5IFNvbWUgKG9mX2ludF9leG4gYykgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxubGV0IHRvX2ludCA9IENoYXIuY29kZVxubGV0IHRvX3N0cmluZyBjID0gU3RyaW5nLm1ha2UgMSBjXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID0gKVxuICBsZXQgKCA8PiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PiApXG4gIGxldCAoIDwgKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPCApXG4gIGxldCAoID4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPiApXG4gIGxldCAoIDw9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw9IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgY29kZTogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGNociBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiQ2hhci5jaHJcIiBlbHNlIHVuc2FmZV9jaHIgblxuXG5leHRlcm5hbCBieXRlc19jcmVhdGU6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcblxubGV0IGVzY2FwZWQgPSBmdW5jdGlvblxuICB8ICdcXCcnIC0+IFwiXFxcXCdcIlxuICB8ICdcXFxcJyAtPiBcIlxcXFxcXFxcXCJcbiAgfCAnXFxuJyAtPiBcIlxcXFxuXCJcbiAgfCAnXFx0JyAtPiBcIlxcXFx0XCJcbiAgfCAnXFxyJyAtPiBcIlxcXFxyXCJcbiAgfCAnXFxiJyAtPiBcIlxcXFxiXCJcbiAgfCAnICcgLi4gJ34nIGFzIGMgLT5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDEgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwIGM7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcbiAgfCBjIC0+XG4gICAgICBsZXQgbiA9IGNvZGUgYyBpblxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgNCBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgJ1xcXFwnO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDEgKHVuc2FmZV9jaHIgKDQ4ICsgbiAvIDEwMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDIgKHVuc2FmZV9jaHIgKDQ4ICsgKG4gLyAxMCkgbW9kIDEwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMyAodW5zYWZlX2NociAoNDggKyBuIG1vZCAxMCkpO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG5cbmxldCBsb3dlcmNhc2UgPSBmdW5jdGlvblxuICB8ICdBJyAuLiAnWidcbiAgfCAnXFwxOTInIC4uICdcXDIxNCdcbiAgfCAnXFwyMTYnIC4uICdcXDIyMicgYXMgYyAtPlxuICAgIHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2UgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneidcbiAgfCAnXFwyMjQnIC4uICdcXDI0NidcbiAgfCAnXFwyNDgnIC4uICdcXDI1NCcgYXMgYyAtPlxuICAgIHVuc2FmZV9jaHIoY29kZSBjIC0gMzIpXG4gIHwgYyAtPiBjXG5cbmxldCBsb3dlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdBJyAuLiAnWicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyArIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgdXBwZXJjYXNlX2FzY2lpID0gZnVuY3Rpb25cbiAgfCAnYScgLi4gJ3onIGFzIGMgLT4gdW5zYWZlX2Nocihjb2RlIGMgLSAzMilcbiAgfCBjIC0+IGNcblxudHlwZSB0ID0gY2hhclxuXG5sZXQgY29tcGFyZSBjMSBjMiA9IGNvZGUgYzEgLSBjb2RlIGMyXG5sZXQgZXF1YWwgKGMxOiB0KSAoYzI6IHQpID0gY29tcGFyZSBjMSBjMiA9IDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQW4gYWxpYXMgZm9yIHRoZSB0eXBlIG9mIGxpc3RzLiAqKVxudHlwZSAnYSB0ID0gJ2EgbGlzdCA9IFtdIHwgKDo6KSBvZiAnYSAqICdhIGxpc3RcblxuKCogTGlzdCBvcGVyYXRpb25zICopXG5cbmxldCByZWMgbGVuZ3RoX2F1eCBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGxlblxuICB8IF86OmwgLT4gbGVuZ3RoX2F1eCAobGVuICsgMSkgbFxuXG5sZXQgbGVuZ3RoIGwgPSBsZW5ndGhfYXV4IDAgbFxuXG5sZXQgY29ucyBhIGwgPSBhOjpsXG5cbmxldCBoZCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFpbHdpdGggXCJoZFwiXG4gIHwgYTo6XyAtPiBhXG5cbmxldCB0bCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFpbHdpdGggXCJ0bFwiXG4gIHwgXzo6bCAtPiBsXG5cbmxldCBudGggbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhaWx3aXRoIFwibnRoXCJcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBhIGVsc2UgbnRoX2F1eCBsIChuLTEpXG4gIGluIG50aF9hdXggbCBuXG5cbmxldCBudGhfb3B0IGwgbiA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0Lm50aFwiIGVsc2VcbiAgbGV0IHJlYyBudGhfYXV4IGwgbiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCBhOjpsIC0+IGlmIG4gPSAwIHRoZW4gU29tZSBhIGVsc2UgbnRoX2F1eCBsIChuLTEpXG4gIGluIG50aF9hdXggbCBuXG5cbmxldCBhcHBlbmQgPSAoQClcblxubGV0IHJlYyByZXZfYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICAgIFtdIC0+IGwyXG4gIHwgYSA6OiBsIC0+IHJldl9hcHBlbmQgbCAoYSA6OiBsMilcblxubGV0IHJldiBsID0gcmV2X2FwcGVuZCBsIFtdXG5cbmxldCByZWMgaW5pdF90YWlscmVjX2F1eCBhY2MgaSBuIGYgPVxuICBpZiBpID49IG4gdGhlbiBhY2NcbiAgZWxzZSBpbml0X3RhaWxyZWNfYXV4IChmIGkgOjogYWNjKSAoaSsxKSBuIGZcblxubGV0IHJlYyBpbml0X2F1eCBpIG4gZiA9XG4gIGlmIGkgPj0gbiB0aGVuIFtdXG4gIGVsc2VcbiAgICBsZXQgciA9IGYgaSBpblxuICAgIHIgOjogaW5pdF9hdXggKGkrMSkgbiBmXG5cbmxldCByZXZfaW5pdF90aHJlc2hvbGQgPVxuICBtYXRjaCBTeXMuYmFja2VuZF90eXBlIHdpdGhcbiAgfCBTeXMuTmF0aXZlIHwgU3lzLkJ5dGVjb2RlIC0+IDEwXzAwMFxuICAoKiBXZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIHRoZSBzdGFjaywgYmV0dGVyIGJlIHNhZmUgYW5kIGFzc3VtZSBpdCdzXG4gICAgIHNtYWxsLiAqKVxuICB8IFN5cy5PdGhlciBfIC0+IDUwXG5cbmxldCBpbml0IGxlbiBmID1cbiAgaWYgbGVuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5pbml0XCIgZWxzZVxuICBpZiBsZW4gPiByZXZfaW5pdF90aHJlc2hvbGQgdGhlbiByZXYgKGluaXRfdGFpbHJlY19hdXggW10gMCBsZW4gZilcbiAgZWxzZSBpbml0X2F1eCAwIGxlbiBmXG5cbmxldCByZWMgZmxhdHRlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBsOjpyIC0+IGwgQCBmbGF0dGVuIHJcblxubGV0IGNvbmNhdCA9IGZsYXR0ZW5cblxubGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBhOjpsIC0+IGxldCByID0gZiBhIGluIHIgOjogbWFwIGYgbFxuXG5sZXQgcmVjIG1hcGkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGE6OmwgLT4gbGV0IHIgPSBmIGkgYSBpbiByIDo6IG1hcGkgKGkgKyAxKSBmIGxcblxubGV0IG1hcGkgZiBsID0gbWFwaSAwIGYgbFxuXG5sZXQgcmV2X21hcCBmIGwgPVxuICBsZXQgcmVjIHJtYXBfZiBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGFjY3VcbiAgICB8IGE6OmwgLT4gcm1hcF9mIChmIGEgOjogYWNjdSkgbFxuICBpblxuICBybWFwX2YgW10gbFxuXG5cbmxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBhOyBpdGVyIGYgbFxuXG5sZXQgcmVjIGl0ZXJpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKClcbiAgfCBhOjpsIC0+IGYgaSBhOyBpdGVyaSAoaSArIDEpIGYgbFxuXG5sZXQgaXRlcmkgZiBsID0gaXRlcmkgMCBmIGxcblxubGV0IHJlYyBmb2xkX2xlZnQgZiBhY2N1IGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmb2xkX2xlZnQgZiAoZiBhY2N1IGEpIGxcblxubGV0IHJlYyBmb2xkX3JpZ2h0IGYgbCBhY2N1ID1cbiAgbWF0Y2ggbCB3aXRoXG4gICAgW10gLT4gYWNjdVxuICB8IGE6OmwgLT4gZiBhIChmb2xkX3JpZ2h0IGYgbCBhY2N1KVxuXG5sZXQgcmVjIG1hcDIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gbGV0IHIgPSBmIGExIGEyIGluIHIgOjogbWFwMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5tYXAyXCJcblxubGV0IHJldl9tYXAyIGYgbDEgbDIgPVxuICBsZXQgcmVjIHJtYXAyX2YgYWNjdSBsMSBsMiA9XG4gICAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIHwgKFtdLCBbXSkgLT4gYWNjdVxuICAgIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBybWFwMl9mIChmIGExIGEyIDo6IGFjY3UpIGwxIGwyXG4gICAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LnJldl9tYXAyXCJcbiAgaW5cbiAgcm1hcDJfZiBbXSBsMSBsMlxuXG5cbmxldCByZWMgaXRlcjIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiAoKVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMjsgaXRlcjIgZiBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuaXRlcjJcIlxuXG5sZXQgcmVjIGZvbGRfbGVmdDIgZiBhY2N1IGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGFjY3VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGZvbGRfbGVmdDIgZiAoZiBhY2N1IGExIGEyKSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9sZWZ0MlwiXG5cbmxldCByZWMgZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1ID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGFjY3VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGYgYTEgYTIgKGZvbGRfcmlnaHQyIGYgbDEgbDIgYWNjdSlcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvbGRfcmlnaHQyXCJcblxubGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IHRydWVcbiAgfCBhOjpsIC0+IHAgYSAmJiBmb3JfYWxsIHAgbFxuXG5sZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gcCBhIHx8IGV4aXN0cyBwIGxcblxubGV0IHJlYyBmb3JfYWxsMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IHRydWVcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHAgYTEgYTIgJiYgZm9yX2FsbDIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9yX2FsbDJcIlxuXG5sZXQgcmVjIGV4aXN0czIgcCBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBmYWxzZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiB8fCBleGlzdHMyIHAgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmV4aXN0czJcIlxuXG5sZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gY29tcGFyZSBhIHggPSAwIHx8IG1lbSB4IGxcblxubGV0IHJlYyBtZW1xIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBhID09IHggfHwgbWVtcSB4IGxcblxubGV0IHJlYyBhc3NvYyB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAoYSxiKTo6bCAtPiBpZiBjb21wYXJlIGEgeCA9IDAgdGhlbiBiIGVsc2UgYXNzb2MgeCBsXG5cbmxldCByZWMgYXNzb2Nfb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBjb21wYXJlIGEgeCA9IDAgdGhlbiBTb21lIGIgZWxzZSBhc3NvY19vcHQgeCBsXG5cbmxldCByZWMgYXNzcSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBiIGVsc2UgYXNzcSB4IGxcblxubGV0IHJlYyBhc3NxX29wdCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBOb25lXG4gIHwgKGEsYik6OmwgLT4gaWYgYSA9PSB4IHRoZW4gU29tZSBiIGVsc2UgYXNzcV9vcHQgeCBsXG5cbmxldCByZWMgbWVtX2Fzc29jIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gY29tcGFyZSBhIHggPSAwIHx8IG1lbV9hc3NvYyB4IGxcblxubGV0IHJlYyBtZW1fYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWxzZVxuICB8IChhLCBfKSA6OiBsIC0+IGEgPT0geCB8fCBtZW1fYXNzcSB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCAoYSwgXyBhcyBwYWlyKSA6OiBsIC0+XG4gICAgICBpZiBjb21wYXJlIGEgeCA9IDAgdGhlbiBsIGVsc2UgcGFpciA6OiByZW1vdmVfYXNzb2MgeCBsXG5cbmxldCByZWMgcmVtb3ZlX2Fzc3EgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCAoYSwgXyBhcyBwYWlyKSA6OiBsIC0+IGlmIGEgPT0geCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NxIHggbFxuXG5sZXQgcmVjIGZpbmQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHggZWxzZSBmaW5kIHAgbFxuXG5sZXQgcmVjIGZpbmRfb3B0IHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gU29tZSB4IGVsc2UgZmluZF9vcHQgcCBsXG5cbmxldCByZWMgZmluZF9tYXAgZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPlxuICAgICBiZWdpbiBtYXRjaCBmIHggd2l0aFxuICAgICAgIHwgU29tZSBfIGFzIHJlc3VsdCAtPiByZXN1bHRcbiAgICAgICB8IE5vbmUgLT4gZmluZF9tYXAgZiBsXG4gICAgIGVuZFxuXG5sZXQgZmluZF9hbGwgcCA9XG4gIGxldCByZWMgZmluZCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByZXYgYWNjdVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBmaW5kICh4IDo6IGFjY3UpIGwgZWxzZSBmaW5kIGFjY3UgbCBpblxuICBmaW5kIFtdXG5cbmxldCBmaWx0ZXIgPSBmaW5kX2FsbFxuXG5sZXQgZmlsdGVyaSBwIGwgPVxuICBsZXQgcmVjIGF1eCBpIGFjYyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmV2IGFjY1xuICB8IHg6OmwgLT4gYXV4IChpICsgMSkgKGlmIHAgaSB4IHRoZW4geDo6YWNjIGVsc2UgYWNjKSBsXG4gIGluXG4gIGF1eCAwIFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiA9XG4gIGxldCByZWMgYXV4IGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmV2IGFjY3VcbiAgICB8IHggOjogbCAtPlxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYXV4IGFjY3UgbFxuICAgICAgICB8IFNvbWUgdiAtPiBhdXggKHYgOjogYWNjdSkgbFxuICBpblxuICBhdXggW11cblxubGV0IGNvbmNhdF9tYXAgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmV2IGFjY1xuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgbGV0IHhzID0gZiB4IGluXG4gICAgICAgYXV4IGYgKHJldl9hcHBlbmQgeHMgYWNjKSBsXG4gIGluIGF1eCBmIFtdIGxcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2N1IGwgPVxuICBsZXQgcmVjIGF1eCBhY2N1IGxfYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1LCByZXYgbF9hY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbGV0IGFjY3UsIHggPSBmIGFjY3UgeCBpblxuICAgICAgICBhdXggYWNjdSAoeCA6OiBsX2FjY3UpIGwgaW5cbiAgYXV4IGFjY3UgW10gbFxuXG5sZXQgcGFydGl0aW9uIHAgbCA9XG4gIGxldCByZWMgcGFydCB5ZXMgbm8gPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgeWVzLCByZXYgbm8pXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHBhcnQgKHggOjogeWVzKSBubyBsIGVsc2UgcGFydCB5ZXMgKHggOjogbm8pIGwgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwIHAgbCA9XG4gIGxldCByZWMgcGFydCBsZWZ0IHJpZ2h0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IGxlZnQsIHJldiByaWdodClcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggcCB4IHdpdGhcbiAgICAgICB8IEVpdGhlci5MZWZ0IHYgLT4gcGFydCAodiA6OiBsZWZ0KSByaWdodCBsXG4gICAgICAgfCBFaXRoZXIuUmlnaHQgdiAtPiBwYXJ0IGxlZnQgKHYgOjogcmlnaHQpIGxcbiAgICAgZW5kXG4gIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcmVjIHNwbGl0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoW10sIFtdKVxuICB8ICh4LHkpOjpsIC0+XG4gICAgICBsZXQgKHJ4LCByeSkgPSBzcGxpdCBsIGluICh4OjpyeCwgeTo6cnkpXG5cbmxldCByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gKGExLCBhMikgOjogY29tYmluZSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuY29tYmluZVwiXG5cbigqKiBzb3J0aW5nICopXG5cbmxldCByZWMgbWVyZ2UgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgbDIgLT4gbDJcbiAgfCBsMSwgW10gLT4gbDFcbiAgfCBoMSA6OiB0MSwgaDIgOjogdDIgLT5cbiAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICB0aGVuIGgxIDo6IG1lcmdlIGNtcCB0MSBsMlxuICAgICAgZWxzZSBoMiA6OiBtZXJnZSBjbXAgbDEgdDJcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyIDw9IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPiAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgc29ydCA9IHN0YWJsZV9zb3J0XG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCogTm90ZTogb24gYSBsaXN0IG9mIGxlbmd0aCBiZXR3ZWVuIGFib3V0IDEwMDAwMCAoZGVwZW5kaW5nIG9uIHRoZSBtaW5vclxuICAgaGVhcCBzaXplIGFuZCB0aGUgdHlwZSBvZiB0aGUgbGlzdCkgYW5kIFN5cy5tYXhfYXJyYXlfc2l6ZSwgaXQgaXNcbiAgIGFjdHVhbGx5IGZhc3RlciB0byB1c2UgdGhlIGZvbGxvd2luZywgYnV0IGl0IG1pZ2h0IGFsc28gdXNlIG1vcmUgbWVtb3J5XG4gICBiZWNhdXNlIHRoZSBhcmd1bWVudCBsaXN0IGNhbm5vdCBiZSBkZWFsbG9jYXRlZCBpbmNyZW1lbnRhbGx5LlxuXG4gICBBbHNvLCB0aGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyBpbiB0aGlzIGNvZGUgb3IgaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiBvYmpfdHJ1bmNhdGUuXG5cbmV4dGVybmFsIG9ial90cnVuY2F0ZSA6ICdhIGFycmF5IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5cbmxldCBhcnJheV90b19saXN0X2luX3BsYWNlIGEgPVxuICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBhY2N1IG4gcCA9XG4gICAgaWYgcCA8PSAwIHRoZW4gYWNjdSBlbHNlIGJlZ2luXG4gICAgICBpZiBwID0gbiB0aGVuIGJlZ2luXG4gICAgICAgIG9ial90cnVuY2F0ZSBhIHA7XG4gICAgICAgIGxvb3AgKGEuKHAtMSkgOjogYWNjdSkgKG4tMTAwMCkgKHAtMSlcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIGxvb3AgKGEuKHAtMSkgOjogYWNjdSkgbiAocC0xKVxuICAgICAgZW5kXG4gICAgZW5kXG4gIGluXG4gIGxvb3AgW10gKGwtMTAwMCkgbFxuXG5cbmxldCBzdGFibGVfc29ydCBjbXAgbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIEFycmF5LnN0YWJsZV9zb3J0IGNtcCBhO1xuICBhcnJheV90b19saXN0X2luX3BsYWNlIGFcblxuKilcblxuXG4oKiogc29ydGluZyArIHJlbW92aW5nIGR1cGxpY2F0ZXMgKilcblxubGV0IHNvcnRfdW5pcSBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZSB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA8IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gLT4gLTFcbiAgfCBfLCBbXSAtPiAxXG4gIHwgXyA6OiBsMSwgXyA6OiBsMiAtPiBjb21wYXJlX2xlbmd0aHMgbDEgbDJcbjs7XG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhfd2l0aCBsIG4gPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPlxuICAgIGlmIG4gPSAwIHRoZW4gMCBlbHNlXG4gICAgICBpZiBuID4gMCB0aGVuIC0xIGVsc2UgMVxuICB8IF8gOjogbCAtPlxuICAgIGlmIG4gPD0gMCB0aGVuIDEgZWxzZVxuICAgICAgY29tcGFyZV9sZW5ndGhfd2l0aCBsIChuLTEpXG47O1xuXG4oKiogezEgQ29tcGFyaXNvbn0gKilcblxuKCogTm90ZTogd2UgYXJlICpub3QqIHNob3J0Y3V0dGluZyB0aGUgbGlzdCBieSB1c2luZ1xuICAgW0xpc3QuY29tcGFyZV9sZW5ndGhzXSBmaXJzdDsgdGhpcyBtYXkgYmUgc2xvd2VyIG9uIGxvbmcgbGlzdHNcbiAgIGltbWVkaWF0ZWx5IHN0YXJ0IHdpdGggZGlzdGluY3QgZWxlbWVudHMuIEl0IGlzIGFsc28gaW5jb3JyZWN0IGZvclxuICAgW2NvbXBhcmVdIGJlbG93LCBhbmQgaXQgaXMgYmV0dGVyIChwcmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2UpIHRvXG4gICB1c2UgdGhlIHNhbWUgYXBwcm9hY2ggZm9yIGJvdGggZnVuY3Rpb25zLiAqKVxubGV0IHJlYyBlcXVhbCBlcSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IHRydWVcbiAgfCBbXSwgXzo6XyB8IF86Ol8sIFtdIC0+IGZhbHNlXG4gIHwgYTE6OmwxLCBhMjo6bDIgLT4gZXEgYTEgYTIgJiYgZXF1YWwgZXEgbDEgbDJcblxubGV0IHJlYyBjb21wYXJlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXzo6XyAtPiAtMVxuICB8IF86Ol8sIFtdIC0+IDFcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPlxuICAgIGxldCBjID0gY21wIGExIGEyIGluXG4gICAgaWYgYyA8PiAwIHRoZW4gY1xuICAgIGVsc2UgY29tcGFyZSBjbXAgbDEgbDJcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBsID1cbiAgbGV0IHJlYyBhdXggbCAoKSA9IG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gU2VxLk5pbFxuICAgIHwgeCA6OiB0YWlsIC0+IFNlcS5Db25zICh4LCBhdXggdGFpbClcbiAgaW5cbiAgYXV4IGxcblxubGV0IG9mX3NlcSBzZXEgPVxuICBsZXQgcmVjIGRpcmVjdCBkZXB0aCBzZXEgOiBfIGxpc3QgPVxuICAgIGlmIGRlcHRoPTBcbiAgICB0aGVuXG4gICAgICBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBzZXFcbiAgICAgIHw+IHJldiAoKiB0YWlscmVjICopXG4gICAgZWxzZSBtYXRjaCBzZXEoKSB3aXRoXG4gICAgICB8IFNlcS5OaWwgLT4gW11cbiAgICAgIHwgU2VxLkNvbnMgKHgsIG5leHQpIC0+IHggOjogZGlyZWN0IChkZXB0aC0xKSBuZXh0XG4gIGluXG4gIGRpcmVjdCA1MDAgc2VxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIHN0cmluZy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIHN0cmluZ19sZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2ZpbGxfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGJ5dGVzID0gXCIlYnl0ZXNfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV9ibGl0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbmxldCBtYWtlIG4gYyA9XG4gIGxldCBzID0gY3JlYXRlIG4gaW5cbiAgdW5zYWZlX2ZpbGwgcyAwIG4gYztcbiAgc1xuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIGZvciBpID0gMCB0byBuIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgcyBpIChmIGkpXG4gIGRvbmU7XG4gIHNcblxubGV0IGVtcHR5ID0gY3JlYXRlIDBcblxubGV0IGNvcHkgcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgdW5zYWZlX2JsaXQgcyAwIHIgMCBsZW47XG4gIHJcblxubGV0IHRvX3N0cmluZyBiID0gdW5zYWZlX3RvX3N0cmluZyAoY29weSBiKVxubGV0IG9mX3N0cmluZyBzID0gY29weSAodW5zYWZlX29mX3N0cmluZyBzKVxuXG5sZXQgc3ViIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLnN1YiAvIEJ5dGVzLnN1YlwiXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgICB1bnNhZmVfYmxpdCBzIG9mcyByIDAgbGVuO1xuICAgIHJcbiAgZW5kXG5cbmxldCBzdWJfc3RyaW5nIGIgb2ZzIGxlbiA9IHVuc2FmZV90b19zdHJpbmcgKHN1YiBiIG9mcyBsZW4pXG5cbigqIGFkZGl0aW9uIHdpdGggYW4gb3ZlcmZsb3cgY2hlY2sgKilcbmxldCAoKyspIGEgYiA9XG4gIGxldCBjID0gYSArIGIgaW5cbiAgbWF0Y2ggYSA8IDAsIGIgPCAwLCBjIDwgMCB3aXRoXG4gIHwgdHJ1ZSAsIHRydWUgLCBmYWxzZVxuICB8IGZhbHNlLCBmYWxzZSwgdHJ1ZSAgLT4gaW52YWxpZF9hcmcgXCJCeXRlcy5leHRlbmRcIiAoKiBvdmVyZmxvdyAqKVxuICB8IF8gLT4gY1xuXG5sZXQgZXh0ZW5kIHMgbGVmdCByaWdodCA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyArKyBsZWZ0ICsrIHJpZ2h0IGluXG4gIGxldCByID0gY3JlYXRlIGxlbiBpblxuICBsZXQgKHNyY29mZiwgZHN0b2ZmKSA9IGlmIGxlZnQgPCAwIHRoZW4gLWxlZnQsIDAgZWxzZSAwLCBsZWZ0IGluXG4gIGxldCBjcHlsZW4gPSBJbnQubWluIChsZW5ndGggcyAtIHNyY29mZikgKGxlbiAtIGRzdG9mZikgaW5cbiAgaWYgY3B5bGVuID4gMCB0aGVuIHVuc2FmZV9ibGl0IHMgc3Jjb2ZmIHIgZHN0b2ZmIGNweWxlbjtcbiAgclxuXG5sZXQgZmlsbCBzIG9mcyBsZW4gYyA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmZpbGwgLyBCeXRlcy5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBzIG9mcyBsZW4gY1xuXG5sZXQgYmxpdCBzMSBvZnMxIHMyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnl0ZXMuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgczEgb2ZzMSBzMiBvZnMyIGxlblxuXG5sZXQgYmxpdF9zdHJpbmcgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IHN0cmluZ19sZW5ndGggczEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIHMyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuYmxpdCAvIEJ5dGVzLmJsaXRfc3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfYmxpdF9zdHJpbmcgczEgb2ZzMSBzMiBvZnMyIGxlblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiQnl0ZXMuY29uY2F0XCJcblxubGV0IHJlYyBzdW1fbGVuZ3RocyBhY2Mgc2VwbGVuID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2NcbiAgfCBoZCA6OiBbXSAtPiBsZW5ndGggaGQgKyBhY2NcbiAgfCBoZCA6OiB0bCAtPiBzdW1fbGVuZ3RocyAoZW5zdXJlX2dlIChsZW5ndGggaGQgKyBzZXBsZW4gKyBhY2MpIGFjYykgc2VwbGVuIHRsXG5cbmxldCByZWMgdW5zYWZlX2JsaXRzIGRzdCBwb3Mgc2VwIHNlcGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZHN0XG4gIHwgaGQgOjogW10gLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7IGRzdFxuICB8IGhkIDo6IHRsIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpO1xuICAgIHVuc2FmZV9ibGl0IHNlcCAwIGRzdCAocG9zICsgbGVuZ3RoIGhkKSBzZXBsZW47XG4gICAgdW5zYWZlX2JsaXRzIGRzdCAocG9zICsgbGVuZ3RoIGhkICsgc2VwbGVuKSBzZXAgc2VwbGVuIHRsXG5cbmxldCBjb25jYXQgc2VwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBlbXB0eVxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW5cbiAgICAgICAgICB1bnNhZmVfYmxpdHNcbiAgICAgICAgICAgIChjcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCBzMSBzMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBzMSBpblxuICBsZXQgbDIgPSBsZW5ndGggczIgaW5cbiAgbGV0IHIgPSBjcmVhdGUgKGwxICsgbDIpIGluXG4gIHVuc2FmZV9ibGl0IHMxIDAgciAwIGwxO1xuICB1bnNhZmVfYmxpdCBzMiAwIHIgbDEgbDI7XG4gIHJcblxuXG5leHRlcm5hbCBjaGFyX2NvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgY2hhcl9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgaXNfc3BhY2UgPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IHRyaW0gcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpIDwgbGVuICYmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGxldCBqID0gcmVmIChsZW4gLSAxKSBpblxuICB3aGlsZSAhaiA+PSAhaSAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFqKSBkb1xuICAgIGRlY3IgalxuICBkb25lO1xuICBpZiAhaiA+PSAhaSB0aGVuXG4gICAgc3ViIHMgIWkgKCFqIC0gIWkgKyAxKVxuICBlbHNlXG4gICAgZW1wdHlcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgIG4gOj0gIW4gK1xuICAgICAgKG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICB8ICdcXFwiJyB8ICdcXFxcJyB8ICdcXG4nIHwgJ1xcdCcgfCAnXFxyJyB8ICdcXGInIC0+IDJcbiAgICAgICB8ICcgJyAuLiAnficgLT4gMVxuICAgICAgIHwgXyAtPiA0KVxuICBkb25lO1xuICBpZiAhbiA9IGxlbmd0aCBzIHRoZW4gY29weSBzIGVsc2UgYmVnaW5cbiAgICBsZXQgcycgPSBjcmVhdGUgIW4gaW5cbiAgICBuIDo9IDA7XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgICAgYmVnaW4gbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAoJ1xcXCInIHwgJ1xcXFwnKSBhcyBjIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiBjXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAnbidcbiAgICAgIHwgJ1xcdCcgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICd0J1xuICAgICAgfCAnXFxyJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3InXG4gICAgICB8ICdcXGInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAnYidcbiAgICAgIHwgKCcgJyAuLiAnficpIGFzIGMgLT4gdW5zYWZlX3NldCBzJyAhbiBjXG4gICAgICB8IGMgLT5cbiAgICAgICAgICBsZXQgYSA9IGNoYXJfY29kZSBjIGluXG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIGEgLyAxMDApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgKGEgLyAxMCkgbW9kIDEwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIGEgbW9kIDEwKSk7XG4gICAgICBlbmQ7XG4gICAgICBpbmNyIG5cbiAgICBkb25lO1xuICAgIHMnXG4gIGVuZFxuXG5sZXQgbWFwIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IHMgaSkpIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IG1hcGkgZiBzID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBsID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG8gdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICBkb25lO1xuICAhclxuXG5sZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDAgZG9cbiAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICBkb25lO1xuICAhclxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsIHAgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBzIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgbG93ZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG5sZXQgYXBwbHkxIGYgcyA9XG4gIGlmIGxlbmd0aCBzID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY29weSBzIGluXG4gICAgdW5zYWZlX3NldCByIDAgKGYodW5zYWZlX2dldCBzIDApKTtcbiAgICByXG4gIGVuZFxuXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlX2FzY2lpIHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZV9hc2NpaSBzXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgZW5kc193aXRoIH5zdWZmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fc3VmID0gbGVuZ3RoIHN1ZmZpeCBpblxuICBsZXQgZGlmZiA9IGxlbl9zIC0gbGVuX3N1ZiBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3N1ZiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyAoZGlmZiArIGkpIDw+IHVuc2FmZV9nZXQgc3VmZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gZGlmZiA+PSAwICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlYyBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSBpbmRleF9yZWMgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X29wdCBzIGMgPSBpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5pbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICBpbmRleF9yZWNfb3B0IHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbSAvIEJ5dGVzLnJpbmRleF9mcm9tXCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWMgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tX29wdCAvIEJ5dGVzLnJpbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjX29wdCBzIGkgY1xuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5jb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKGluZGV4X3JlYyBzIGwgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgY29udGFpbnMgcyBjID0gY29udGFpbnNfZnJvbSBzIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5cbnR5cGUgdCA9IGJ5dGVzXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmV4dGVybmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfYnl0ZXNfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHNwbGl0X29uX2NoYXIgc2VwIHMgPVxuICBsZXQgciA9IHJlZiBbXSBpblxuICBsZXQgaiA9IHJlZiAobGVuZ3RoIHMpIGluXG4gIGZvciBpID0gbGVuZ3RoIHMgLSAxIGRvd250byAwIGRvXG4gICAgaWYgdW5zYWZlX2dldCBzIGkgPSBzZXAgdGhlbiBiZWdpblxuICAgICAgciA6PSBzdWIgcyAoaSArIDEpICghaiAtIGkgLSAxKSA6OiAhcjtcbiAgICAgIGogOj0gaVxuICAgIGVuZFxuICBkb25lO1xuICBzdWIgcyAwICFqIDo6ICFyXG5cbigqIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGltcGxlbWVudGVkIHZpYSBvdGhlciBkZXByZWNhdGVkIGZ1bmN0aW9ucyAqKVxuW0BAQG9jYW1sLndhcm5pbmcgXCItM1wiXVxubGV0IHVwcGVyY2FzZSBzID0gbWFwIENoYXIudXBwZXJjYXNlIHNcbmxldCBsb3dlcmNhc2UgcyA9IG1hcCBDaGFyLmxvd2VyY2FzZSBzXG5cbmxldCBjYXBpdGFsaXplIHMgPSBhcHBseTEgQ2hhci51cHBlcmNhc2Ugc1xubGV0IHVuY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIubG93ZXJjYXNlIHNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGxldCBidWYgPSByZWYgKG1ha2UgMjU2ICdcXDAwMCcpIGluXG4gIGxldCByZXNpemUgKCkgPVxuICAgICgqIHJlc2l6ZSAqKVxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1pbiAoMiAqIGxlbmd0aCAhYnVmKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICBpZiBsZW5ndGggIWJ1ZiA9IG5ld19sZW4gdGhlbiBmYWlsd2l0aCBcIkJ5dGVzLm9mX3NlcTogY2Fubm90IGdyb3cgYnl0ZXNcIjtcbiAgICBsZXQgbmV3X2J1ZiA9IG1ha2UgbmV3X2xlbiAnXFwwMDAnIGluXG4gICAgYmxpdCAhYnVmIDAgbmV3X2J1ZiAwICFuO1xuICAgIGJ1ZiA6PSBuZXdfYnVmXG4gIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBjIC0+XG4gICAgICAgaWYgIW4gPSBsZW5ndGggIWJ1ZiB0aGVuIHJlc2l6ZSgpO1xuICAgICAgIHNldCAhYnVmICFuIGM7XG4gICAgICAgaW5jciBuKVxuICAgIGk7XG4gIHN1YiAhYnVmIDAgIW5cblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuKCogVGhlIGdldF8gZnVuY3Rpb25zIGFyZSBhbGwgZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcblxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZ1XCJcbmV4dGVybmFsIGdldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9ieXRlc19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX2J5dGVzX2dldDY0XCJcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBzZXRfaW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2XCJcbmV4dGVybmFsIHNldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMlwiXG5leHRlcm5hbCBzZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjRcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuICBlbHNlIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuXG5sZXQgZ2V0X2ludDggYiBpID1cbiAgKChnZXRfdWludDggYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDgpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDgpXG5cbmxldCBnZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfaW50MTZfbmUgYiBpID1cbiAgKChnZXRfdWludDE2X25lIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfbGUgYiBpID1cbiAgKChnZXRfdWludDE2X2xlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfYmUgYiBpID1cbiAgKChnZXRfdWludDE2X2JlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MzJfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDMyX2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeFxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfYmUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4IGVsc2VcbiAgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIChzd2FwMTYgeClcblxubGV0IHNldF9pbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MTZfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF91aW50OCA9IHNldF9pbnQ4XG5sZXQgc2V0X3VpbnQxNl9uZSA9IHNldF9pbnQxNl9uZVxubGV0IHNldF91aW50MTZfYmUgPSBzZXRfaW50MTZfYmVcbmxldCBzZXRfdWludDE2X2xlID0gc2V0X2ludDE2X2xlXG5cbigqIFVURiBjb2RlY3MgYW5kIHZhbGlkYXRpb25zICopXG5cbmxldCBkZWNfaW52YWxpZCA9IFVjaGFyLnV0Zl9kZWNvZGVfaW52YWxpZFxubGV0W0BpbmxpbmVdIGRlY19yZXQgbiB1ID0gVWNoYXIudXRmX2RlY29kZSBuIChVY2hhci51bnNhZmVfb2ZfaW50IHUpXG5cbigqIEluIGNhc2Ugb2YgZGVjb2RpbmcgZXJyb3IsIGlmIHdlIGVycm9yIG9uIHRoZSBmaXJzdCBieXRlLCB3ZVxuICAgY29uc3VtZSB0aGUgYnl0ZSwgb3RoZXJ3aXNlIHdlIGNvbnN1bWUgdGhlIFtuXSBieXRlcyBwcmVjZWVkaW5nXG4gICB0aGUgZXJyb3JpbmcgYnl0ZS5cblxuICAgVGhpcyBtZWFucyB0aGF0IGlmIGEgY2xpZW50IHVzZXMgZGVjb2RlcyB3aXRob3V0IGNhcmluZyBhYm91dFxuICAgdmFsaWRpdHkgaXQgbmF0dXJhbGx5IHJlcGxhY2UgYm9ndXMgZGF0YSB3aXRoIFVjaGFyLnJlcCBhY2NvcmRpbmdcbiAgIHRvIHRoZSBXSEFUV0cgRW5jb2Rpbmcgc3RhbmRhcmQuIE90aGVyIHNjaGVtZXMgYXJlIHBvc3NpYmxlIGJ5XG4gICBjb25zdWx0aW5nIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyBvbiBpbnZhbGlkIGRlY29kZXMuIEZvciBtb3JlXG4gICBkZXRhaWxzIHNlZSBodHRwczovL2hzaXZvbmVuLmZpL2Jyb2tlbi11dGYtOC9cblxuICAgRm9yIHRoaXMgcmVhc29uIGluIFtnZXRfdXRmXzhfdWNoYXJdIHdlIGdyYWR1YWxseSBjaGVjayB0aGUgbmV4dFxuICAgYnl0ZSBpcyBhdmFpbGFibGUgcmF0aGVyIHRoYW4gZG9pbmcgaXQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICBmaXJzdCBieXRlLiBDb250cmFzdCB3aXRoIFtpc192YWxpZF91dGZfOF0uICopXG5cbigqIFVURi04ICopXG5cbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3hCRiBiID0gYiBsc3IgNiA8PiAwYjEwXG5sZXRbQGlubGluZV0gbm90X2luX3hBMF90b194QkYgYiA9IGIgbHNyIDUgPD4gMGIxMDFcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g5RiBiID0gYiBsc3IgNSA8PiAwYjEwMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94OTBfdG9feEJGIGIgPSBiIDwgMHg5MCB8fCAweEJGIDwgYlxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feDhGIGIgPSBiIGxzciA0IDw+IDB4OFxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfMiBiMCBiMSA9XG4gICgoYjAgbGFuZCAweDFGKSBsc2wgNikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIgPVxuICAoKGIwIGxhbmQgMHgwRikgbHNsIDEyKSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCA2KSBsb3JcbiAgKChiMiBsYW5kIDB4M0YpKVxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMyA9XG4gICgoYjAgbGFuZCAweDA3KSBsc2wgMTgpIGxvclxuICAoKGIxIGxhbmQgMHgzRikgbHNsIDEyKSBsb3JcbiAgKChiMiBsYW5kIDB4M0YpIGxzbCA2KSBsb3JcbiAgKChiMyBsYW5kIDB4M0YpKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIGIgaSA9XG4gIGxldCBiMCA9IGdldF91aW50OCBiIGkgaW4gKCogcmFpc2VzIGlmIFtpXSBpcyBub3QgYSB2YWxpZCBpbmRleC4gKilcbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgYjAgd2l0aCAoKiBTZWUgVGhlIFVuaWNvZGUgU3RhbmRhcmQsIFRhYmxlIDMuNyAqKVxuICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBkZWNfcmV0IDEgYjBcbiAgfCAnXFx4QzInIC4uICdcXHhERicgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgZGVjX3JldCAyICh1dGZfOF91Y2hhcl8yIGIwIGIxKVxuICB8ICdcXHhFMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feEEwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFRCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3g5RiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEYwJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94OTBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8ICdcXHhGMScgLi4gJ1xceEYzJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8ICdcXHhGNCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3g4RiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCBfIC0+IGRlY19pbnZhbGlkIDFcblxubGV0IHNldF91dGZfOF91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweDAwN0YgLT5cbiAgICAgIHNldF91aW50OCBiIGkgdTtcbiAgICAgIDFcbiAgfCB1IHdoZW4gdSA8PSAweDA3RkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEMwIGxvciAodSBsc3IgNikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDIpXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhFMCBsb3IgKHUgbHNyIDEyKSk7XG4gICAgICAgc2V0IGIgKGkgKyAxKSAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAzKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhGMCBsb3IgKHUgbHNyIDE4KSk7XG4gICAgICAgc2V0IGIgKGkgKyAxKSAoMHg4MCBsb3IgKCh1IGxzciAxMikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgKGkgKyAyKSAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICA0KVxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfOCBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50OCBpblxuICAgIG1hdGNoIENoYXIudW5zYWZlX2NociAoZ2V0IGIgaSkgd2l0aFxuICAgIHwgJ1xceDAwJyAuLiAnXFx4N0YnIC0+IGxvb3AgbWF4IGIgKGkgKyAxKVxuICAgIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3hBMF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RTEnIC4uICdcXHhFQycgfCAnXFx4RUUnIC4uICdcXHhFRicgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEVEJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194OUYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjAnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDkwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGNCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDhGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8IF8gLT4gZmFsc2VcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcblxuKCogVVRGLTE2QkUgKilcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBiIGkgPVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBpZiBpID0gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gIG1hdGNoIGdldCBiIGkgd2l0aFxuICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gZGVjX3JldCAyIHVcbiAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBkZWNfaW52YWxpZCAyXG4gIHwgaGkgLT4gKCogY29tYmluZSBbaGldIHdpdGggYSBsb3cgc3Vycm9nYXRlICopXG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgKG1heCAtIGkgKyAxKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfaW52YWxpZCAyICgqIHJldHJ5IGhlcmUgKilcbiAgICAgIHwgbG8gLT5cbiAgICAgICAgICBsZXQgdSA9ICgoKGhpIGxhbmQgMHgzRkYpIGxzbCAxMCkgbG9yIChsbyBsYW5kIDB4M0ZGKSkgKyAweDEwMDAwIGluXG4gICAgICAgICAgZGVjX3JldCA0IHVcblxubGV0IHNldF91dGZfMTZiZV91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQxNl9iZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlIChzZXQgYiBpIHU7IDIpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgICBsZXQgaGkgPSAoMHhEODAwIGxvciAodScgbHNyIDEwKSkgaW5cbiAgICAgIGxldCBsbyA9ICgweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSkgaW5cbiAgICAgIHNldCBiIGkgaGk7IHNldCBiIChpICsgMikgbG87IDRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfYmUgaW5cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgaWYgaSA9IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gbG9vcCBtYXggYiAoaSArIDIpXG4gICAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBmYWxzZVxuICAgIHwgX2hpIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBmYWxzZVxuICAgICAgICB8IF9sbyAtPiBsb29wIG1heCBiIChpICsgNClcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcblxuKCogVVRGLTE2TEUgKilcblxubGV0IGdldF91dGZfMTZsZV91Y2hhciBiIGkgPVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBpZiBpID0gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gIG1hdGNoIGdldCBiIGkgd2l0aFxuICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gZGVjX3JldCAyIHVcbiAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBkZWNfaW52YWxpZCAyXG4gIHwgaGkgLT4gKCogY29tYmluZSBbaGldIHdpdGggYSBsb3cgc3Vycm9nYXRlICopXG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgKG1heCAtIGkgKyAxKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfaW52YWxpZCAyICgqIHJldHJ5IGhlcmUgKilcbiAgICAgIHwgbG8gLT5cbiAgICAgICAgICBsZXQgdSA9ICgoKGhpIGxhbmQgMHgzRkYpIGxzbCAxMCkgbG9yIChsbyBsYW5kIDB4M0ZGKSkgKyAweDEwMDAwIGluXG4gICAgICAgICAgZGVjX3JldCA0IHVcblxubGV0IHNldF91dGZfMTZsZV91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQxNl9sZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlIChzZXQgYiBpIHU7IDIpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgICBsZXQgaGkgPSAoMHhEODAwIGxvciAodScgbHNyIDEwKSkgaW5cbiAgICAgIGxldCBsbyA9ICgweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSkgaW5cbiAgICAgIHNldCBiIGkgaGk7IHNldCBiIChpICsgMikgbG87IDRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfbGUgaW5cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgaWYgaSA9IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gbG9vcCBtYXggYiAoaSArIDIpXG4gICAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBmYWxzZVxuICAgIHwgX2hpIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBmYWxzZVxuICAgICAgICB8IF9sbyAtPiBsb29wIG1heCBiIChpICsgNClcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IEdhbGxpdW0sIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU3RyaW5nIG9wZXJhdGlvbnMsIGJhc2VkIG9uIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMuIFdoZW4geW91IG1vZGlmeSB0aGUgb25lIGluIHRoaXMgZmlsZSB5b3UgbmVlZCB0b1xuICAgbW9kaWZ5IGl0cyBkdXBsaWNhdGUgaW4gYnl0ZXMubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGdldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlc3RyaW5nX3NhZmVfc2V0XCJcbmV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfc3RyaW5nXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogc3RyaW5nIC0+IGludCAtPiAgYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbm1vZHVsZSBCID0gQnl0ZXNcblxubGV0IGJ0cyA9IEIudW5zYWZlX3RvX3N0cmluZ1xubGV0IGJvcyA9IEIudW5zYWZlX29mX3N0cmluZ1xuXG5sZXQgbWFrZSBuIGMgPVxuICBCLm1ha2UgbiBjIHw+IGJ0c1xubGV0IGluaXQgbiBmID1cbiAgQi5pbml0IG4gZiB8PiBidHNcbmxldCBlbXB0eSA9IFwiXCJcbmxldCBjb3B5IHMgPVxuICBCLmNvcHkgKGJvcyBzKSB8PiBidHNcbmxldCBvZl9ieXRlcyA9IEIudG9fc3RyaW5nXG5sZXQgdG9fYnl0ZXMgPSBCLm9mX3N0cmluZ1xubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBCLnN1YiAoYm9zIHMpIG9mcyBsZW4gfD4gYnRzXG5sZXQgZmlsbCA9XG4gIEIuZmlsbFxubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCA9ICggXiApXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXJpIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG5sZXQgbWFwIGYgcyA9XG4gIEIubWFwIGYgKGJvcyBzKSB8PiBidHNcbmxldCBtYXBpIGYgcyA9XG4gIEIubWFwaSBmIChib3MgcykgfD4gYnRzXG5sZXQgZm9sZF9yaWdodCBmIHggYSA9XG4gIEIuZm9sZF9yaWdodCBmIChib3MgeCkgYVxubGV0IGZvbGRfbGVmdCBmIGEgeCA9XG4gIEIuZm9sZF9sZWZ0IGYgYSAoYm9zIHgpXG5sZXQgZXhpc3RzIGYgcyA9XG4gIEIuZXhpc3RzIGYgKGJvcyBzKVxubGV0IGZvcl9hbGwgZiBzID1cbiAgQi5mb3JfYWxsIGYgKGJvcyBzKVxuXG4oKiBCZXdhcmU6IHdlIGNhbm5vdCB1c2UgQi50cmltIG9yIEIuZXNjYXBlIGJlY2F1c2UgdGhleSBhbHdheXMgbWFrZSBhXG4gICBjb3B5LCBidXQgU3RyaW5nLm1saSBzcGVsbHMgb3V0IHNvbWUgY2FzZXMgd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkXG4gICB0byBtYWtlIGEgY29weS4gKilcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBpZiBzID0gXCJcIiB0aGVuIHNcbiAgZWxzZSBpZiBpc19zcGFjZSAodW5zYWZlX2dldCBzIDApIHx8IGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgKGxlbmd0aCBzIC0gMSkpXG4gICAgdGhlbiBidHMgKEIudHJpbSAoYm9zIHMpKVxuICBlbHNlIHNcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCByZWMgZXNjYXBlX2lmX25lZWRlZCBzIG4gaSA9XG4gICAgaWYgaSA+PSBuIHRoZW4gcyBlbHNlXG4gICAgICBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICdcXFwiJyB8ICdcXFxcJyB8ICdcXDAwMCcuLidcXDAzMScgfCAnXFwxMjcnLi4gJ1xcMjU1JyAtPlxuICAgICAgICAgIGJ0cyAoQi5lc2NhcGVkIChib3MgcykpXG4gICAgICB8IF8gLT4gZXNjYXBlX2lmX25lZWRlZCBzIG4gKGkrMSlcbiAgaW5cbiAgZXNjYXBlX2lmX25lZWRlZCBzIChsZW5ndGggcykgMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIGluZGV4X3JlYyBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSBpbmRleF9yZWMgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleCBzIGMgPSBpbmRleF9yZWMgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X29wdCBzIGMgPSBpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbSAvIEJ5dGVzLmluZGV4X2Zyb21cIiBlbHNlXG4gICAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5pbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICBpbmRleF9yZWNfb3B0IHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjIHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgcmluZGV4X3JlYyBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbSAvIEJ5dGVzLnJpbmRleF9mcm9tXCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWMgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIHJpbmRleF9yZWNfb3B0IHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tX29wdCAvIEJ5dGVzLnJpbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjX29wdCBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5jb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKGluZGV4X3JlYyBzIGwgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgY29udGFpbnMgcyBjID0gY29udGFpbnNfZnJvbSBzIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yY29udGFpbnNfZnJvbSAvIEJ5dGVzLnJjb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKHJpbmRleF9yZWMgcyBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgcyA9XG4gIEIudXBwZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgbG93ZXJjYXNlX2FzY2lpIHMgPVxuICBCLmxvd2VyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IHVuY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi51bmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgZW5kc193aXRoIH5zdWZmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fc3VmID0gbGVuZ3RoIHN1ZmZpeCBpblxuICBsZXQgZGlmZiA9IGxlbl9zIC0gbGVuX3N1ZiBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3N1ZiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyAoZGlmZiArIGkpIDw+IHVuc2FmZV9nZXQgc3VmZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gZGlmZiA+PSAwICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9XG4gIEIudXBwZXJjYXNlIChib3MgcykgfD4gYnRzXG5sZXQgbG93ZXJjYXNlIHMgPVxuICBCLmxvd2VyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGNhcGl0YWxpemUgcyA9XG4gIEIuY2FwaXRhbGl6ZSAoYm9zIHMpIHw+IGJ0c1xubGV0IHVuY2FwaXRhbGl6ZSBzID1cbiAgQi51bmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcblxudHlwZSB0ID0gc3RyaW5nXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmV4dGVybmFsIGVxdWFsIDogc3RyaW5nIC0+IHN0cmluZyAtPiBib29sID0gXCJjYW1sX3N0cmluZ19lcXVhbFwiIFtAQG5vYWxsb2NdXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9IGJvcyBzIHw+IEIudG9fc2VxXG5cbmxldCB0b19zZXFpIHMgPSBib3MgcyB8PiBCLnRvX3NlcWlcblxubGV0IG9mX3NlcSBnID0gQi5vZl9zZXEgZyB8PiBidHNcblxuKCogVVRGIGRlY29kZXJzIGFuZCB2YWxpZGF0b3JzICopXG5cbmxldCBnZXRfdXRmXzhfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzhfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzggcyA9IEIuaXNfdmFsaWRfdXRmXzggKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmJlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmJlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmJlIChib3MgcylcblxubGV0IGdldF91dGZfMTZsZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZsZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZsZSBzID0gQi5pc192YWxpZF91dGZfMTZsZSAoYm9zIHMpXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbmV4dGVybmFsIGdldF91aW50OCA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfc3RyaW5nX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX3N0cmluZ19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9zdHJpbmdfZ2V0NjRcIlxuXG5sZXQgZ2V0X2ludDggcyBpID0gQi5nZXRfaW50OCAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2xlIHMgaSA9IEIuZ2V0X3VpbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2JlIHMgaSA9IEIuZ2V0X3VpbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbmUgcyBpID0gQi5nZXRfaW50MTZfbmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2xlIHMgaSA9IEIuZ2V0X2ludDE2X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9iZSBzIGkgPSBCLmdldF9pbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfbGUgcyBpID0gQi5nZXRfaW50MzJfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2JlIHMgaSA9IEIuZ2V0X2ludDMyX2JlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9sZSBzIGkgPSBCLmdldF9pbnQ2NF9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfYmUgcyBpID0gQi5nZXRfaW50NjRfYmUgKGJvcyBzKSBpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBhcnJheXMuICopXG50eXBlICdhIHQgPSAnYSBhcnJheVxuXG4oKiBBcnJheSBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGxlbmd0aCA6ICdhIGFycmF5IC0+IGludCA9IFwiJWFycmF5X2xlbmd0aFwiXG5leHRlcm5hbCBnZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSA9IFwiJWFycmF5X3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVhcnJheV9zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV91bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfdW5zYWZlX3NldFwiXG5leHRlcm5hbCBtYWtlOiBpbnQgLT4gJ2EgLT4gJ2EgYXJyYXkgPSBcImNhbWxfbWFrZV92ZWN0XCJcbmV4dGVybmFsIGNyZWF0ZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCB1bnNhZmVfc3ViIDogJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9zdWJcIlxuZXh0ZXJuYWwgYXBwZW5kX3ByaW0gOiAnYSBhcnJheSAtPiAnYSBhcnJheSAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9hcHBlbmRcIlxuZXh0ZXJuYWwgY29uY2F0IDogJ2EgYXJyYXkgbGlzdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9jb25jYXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2JsaXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYXJyYXlfZmlsbFwiXG5leHRlcm5hbCBjcmVhdGVfZmxvYXQ6IGludCAtPiBmbG9hdCBhcnJheSA9IFwiY2FtbF9tYWtlX2Zsb2F0X3ZlY3RcIlxubGV0IG1ha2VfZmxvYXQgPSBjcmVhdGVfZmxvYXRcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGZvciB4ID0gMCB0byBwcmVkIHN4IGRvXG4gICAgdW5zYWZlX3NldCByZXMgeCAoY3JlYXRlIHN5IGluaXQpXG4gIGRvbmU7XG4gIHJlc1xuXG5sZXQgY3JlYXRlX21hdHJpeCA9IG1ha2VfbWF0cml4XG5cbmxldCBjb3B5IGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIHVuc2FmZV9zdWIgYSAwIGxcblxubGV0IGFwcGVuZCBhMSBhMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBhMSBpblxuICBpZiBsMSA9IDAgdGhlbiBjb3B5IGEyXG4gIGVsc2UgaWYgbGVuZ3RoIGEyID0gMCB0aGVuIHVuc2FmZV9zdWIgYTEgMCBsMVxuICBlbHNlIGFwcGVuZF9wcmltIGExIGEyXG5cbmxldCBzdWIgYSBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5zdWJcIlxuICBlbHNlIHVuc2FmZV9zdWIgYSBvZnMgbGVuXG5cbmxldCBmaWxsIGEgb2ZzIGxlbiB2ID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBhIG9mcyBsZW4gdlxuXG5sZXQgYmxpdCBhMSBvZnMxIGEyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIGExIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBhMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlblxuXG5sZXQgaXRlciBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IGl0ZXIyIGYgYSBiID1cbiAgaWYgbGVuZ3RoIGEgPD4gbGVuZ3RoIGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkgZG9uZVxuXG5sZXQgbWFwIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcCBmIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIE5vbmVcbiAgICBlbHNlXG4gICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU2V0cyBvdmVyIG9yZGVyZWQgdHlwZXMgKilcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUgZWx0XG4gICAgdHlwZSB0XG4gICAgdmFsIGVtcHR5OiB0XG4gICAgdmFsIGlzX2VtcHR5OiB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBlbHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGFkZDogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCBzaW5nbGV0b246IGVsdCAtPiB0XG4gICAgdmFsIHJlbW92ZTogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCB1bmlvbjogdCAtPiB0IC0+IHRcbiAgICB2YWwgaW50ZXI6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGRpc2pvaW50OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBkaWZmOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBzdWJzZXQ6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChlbHQgLT4gdW5pdCkgLT4gdCAtPiB1bml0XG4gICAgdmFsIG1hcDogKGVsdCAtPiBlbHQpIC0+IHQgLT4gdFxuICAgIHZhbCBmb2xkOiAoZWx0IC0+ICdhIC0+ICdhKSAtPiB0IC0+ICdhIC0+ICdhXG4gICAgdmFsIGZvcl9hbGw6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGV4aXN0czogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZmlsdGVyOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdFxuICAgIHZhbCBmaWx0ZXJfbWFwOiAoZWx0IC0+IGVsdCBvcHRpb24pIC0+IHQgLT4gdFxuICAgIHZhbCBwYXJ0aXRpb246IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0ICogdFxuICAgIHZhbCBjYXJkaW5hbDogdCAtPiBpbnRcbiAgICB2YWwgZWxlbWVudHM6IHQgLT4gZWx0IGxpc3RcbiAgICB2YWwgbWluX2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWluX2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBtYXhfZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtYXhfZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGNob29zZTogdCAtPiBlbHRcbiAgICB2YWwgY2hvb3NlX29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIHNwbGl0OiBlbHQgLT4gdCAtPiB0ICogYm9vbCAqIHRcbiAgICB2YWwgZmluZDogZWx0IC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfb3B0OiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmRfZmlyc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmRfbGFzdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBvZl9saXN0OiBlbHQgbGlzdCAtPiB0XG4gICAgdmFsIHRvX3NlcV9mcm9tIDogZWx0IC0+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+XG4gICAgICAgICAgICBsZXQgcmlnaHQsIGwgPSBzdWIgKG4gLSBubCAtIDEpIGwgaW5cbiAgICAgICAgICAgIGNyZWF0ZSBsZWZ0IG1pZCByaWdodCwgbFxuICAgICAgaW5cbiAgICAgIGZzdCAoc3ViIChMaXN0Lmxlbmd0aCBsKSBsKVxuXG4gICAgbGV0IG9mX2xpc3QgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gZW1wdHlcbiAgICAgIHwgW3gwXSAtPiBzaW5nbGV0b24geDBcbiAgICAgIHwgW3gwOyB4MV0gLT4gYWRkIHgxIChzaW5nbGV0b24geDApXG4gICAgICB8IFt4MDsgeDE7IHgyXSAtPiBhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzXSAtPiBhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzOyB4NF0gLT4gYWRkIHg0IChhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSkpXG4gICAgICB8IF8gLT4gb2Zfc29ydGVkX2xpc3QgKExpc3Quc29ydF91bmlxIE9yZC5jb21wYXJlIGwpXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIHMgeCAtPiBhZGQgeCBzKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgYyA9IHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHJlYyBzbm9jX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gc25vY19lbnVtIHIgKE1vcmUodiwgbCwgZSkpXG5cbiAgICBsZXQgcmVjIHJldl9zZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fcmV2X3NlcSBjID0gcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBzID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBzIGMgPSBtYXRjaCBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgcjsgdjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBzIEVuZClcbiAgZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9IHsgbXV0YWJsZSBjIDogJ2EgbGlzdDsgbXV0YWJsZSBsZW4gOiBpbnQ7IH1cblxuZXhjZXB0aW9uIEVtcHR5XG5cbmxldCBjcmVhdGUgKCkgPSB7IGMgPSBbXTsgbGVuID0gMDsgfVxuXG5sZXQgY2xlYXIgcyA9IHMuYyA8LSBbXTsgcy5sZW4gPC0gMFxuXG5sZXQgY29weSBzID0geyBjID0gcy5jOyBsZW4gPSBzLmxlbjsgfVxuXG5sZXQgcHVzaCB4IHMgPSBzLmMgPC0geCA6OiBzLmM7IHMubGVuIDwtIHMubGVuICsgMVxuXG5sZXQgcG9wIHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgaGRcbiAgfCBbXSAgICAgLT4gcmFpc2UgRW1wdHlcblxubGV0IHBvcF9vcHQgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBTb21lIGhkXG4gIHwgW10gICAgIC0+IE5vbmVcblxubGV0IHRvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBoZFxuICB8IFtdICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCB0b3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IFNvbWUgaGRcbiAgfCBbXSAgICAtPiBOb25lXG5cbmxldCBpc19lbXB0eSBzID0gKHMuYyA9IFtdKVxuXG5sZXQgbGVuZ3RoIHMgPSBzLmxlblxuXG5sZXQgaXRlciBmIHMgPSBMaXN0Lml0ZXIgZiBzLmNcblxubGV0IGZvbGQgZiBhY2MgcyA9IExpc3QuZm9sZF9sZWZ0IGYgYWNjIHMuY1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBMaXN0LnRvX3NlcSBzLmNcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBzID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBzIGc7XG4gIHNcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgRnJhbmNvaXMgUG90dGllciwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgSmVyZW1pZSBEaW1pbm8sIEphbmUgU3RyZWV0IEV1cm9wZSAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXhjZXB0aW9uIEVtcHR5XG5cbnR5cGUgJ2EgY2VsbCA9XG4gIHwgTmlsXG4gIHwgQ29ucyBvZiB7IGNvbnRlbnQ6ICdhOyBtdXRhYmxlIG5leHQ6ICdhIGNlbGwgfVxuXG50eXBlICdhIHQgPSB7XG4gIG11dGFibGUgbGVuZ3RoOiBpbnQ7XG4gIG11dGFibGUgZmlyc3Q6ICdhIGNlbGw7XG4gIG11dGFibGUgbGFzdDogJ2EgY2VsbFxufVxuXG5sZXQgY3JlYXRlICgpID0ge1xuICBsZW5ndGggPSAwO1xuICBmaXJzdCA9IE5pbDtcbiAgbGFzdCA9IE5pbFxufVxuXG5sZXQgY2xlYXIgcSA9XG4gIHEubGVuZ3RoIDwtIDA7XG4gIHEuZmlyc3QgPC0gTmlsO1xuICBxLmxhc3QgPC0gTmlsXG5cbmxldCBhZGQgeCBxID1cbiAgbGV0IGNlbGwgPSBDb25zIHtcbiAgICBjb250ZW50ID0geDtcbiAgICBuZXh0ID0gTmlsXG4gIH0gaW5cbiAgbWF0Y2ggcS5sYXN0IHdpdGhcbiAgfCBOaWwgLT5cbiAgICBxLmxlbmd0aCA8LSAxO1xuICAgIHEuZmlyc3QgPC0gY2VsbDtcbiAgICBxLmxhc3QgPC0gY2VsbFxuICB8IENvbnMgbGFzdCAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoICsgMTtcbiAgICBsYXN0Lm5leHQgPC0gY2VsbDtcbiAgICBxLmxhc3QgPC0gY2VsbFxuXG5sZXQgcHVzaCA9XG4gIGFkZFxuXG5sZXQgcGVlayBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IHJhaXNlIEVtcHR5XG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBjb250ZW50XG5cbmxldCBwZWVrX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudCB9IC0+IFNvbWUgY29udGVudFxuXG5sZXQgdG9wID1cbiAgcGVla1xuXG5sZXQgdGFrZSBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IHJhaXNlIEVtcHR5XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSAtPlxuICAgIGNsZWFyIHE7XG4gICAgY29udGVudFxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCAtIDE7XG4gICAgcS5maXJzdCA8LSBuZXh0O1xuICAgIGNvbnRlbnRcblxubGV0IHRha2Vfb3B0IHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gTm9uZVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIFNvbWUgY29udGVudFxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCAtIDE7XG4gICAgcS5maXJzdCA8LSBuZXh0O1xuICAgIFNvbWUgY29udGVudFxuXG5sZXQgcG9wID1cbiAgdGFrZVxuXG5sZXQgY29weSA9XG4gIGxldCByZWMgY29weSBxX3JlcyBwcmV2IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IHFfcmVzLmxhc3QgPC0gcHJldjsgcV9yZXNcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCByZXMgPSBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IGluXG4gICAgICBiZWdpbiBtYXRjaCBwcmV2IHdpdGhcbiAgICAgIHwgTmlsIC0+IHFfcmVzLmZpcnN0IDwtIHJlc1xuICAgICAgfCBDb25zIHAgLT4gcC5uZXh0IDwtIHJlc1xuICAgICAgZW5kO1xuICAgICAgY29weSBxX3JlcyByZXMgbmV4dFxuICBpblxuICBmdW4gcSAtPiBjb3B5IHsgbGVuZ3RoID0gcS5sZW5ndGg7IGZpcnN0ID0gTmlsOyBsYXN0ID0gTmlsIH0gTmlsIHEuZmlyc3RcblxubGV0IGlzX2VtcHR5IHEgPVxuICBxLmxlbmd0aCA9IDBcblxubGV0IGxlbmd0aCBxID1cbiAgcS5sZW5ndGhcblxubGV0IGl0ZXIgPVxuICBsZXQgcmVjIGl0ZXIgZiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgZiBjb250ZW50O1xuICAgICAgaXRlciBmIG5leHRcbiAgaW5cbiAgZnVuIGYgcSAtPiBpdGVyIGYgcS5maXJzdFxuXG5sZXQgZm9sZCA9XG4gIGxldCByZWMgZm9sZCBmIGFjY3UgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gYWNjdVxuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgbGV0IGFjY3UgPSBmIGFjY3UgY29udGVudCBpblxuICAgICAgZm9sZCBmIGFjY3UgbmV4dFxuICBpblxuICBmdW4gZiBhY2N1IHEgLT4gZm9sZCBmIGFjY3UgcS5maXJzdFxuXG5sZXQgdHJhbnNmZXIgcTEgcTIgPVxuICBpZiBxMS5sZW5ndGggPiAwIHRoZW5cbiAgICBtYXRjaCBxMi5sYXN0IHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgcTIubGVuZ3RoIDwtIHExLmxlbmd0aDtcbiAgICAgIHEyLmZpcnN0IDwtIHExLmZpcnN0O1xuICAgICAgcTIubGFzdCA8LSBxMS5sYXN0O1xuICAgICAgY2xlYXIgcTFcbiAgICB8IENvbnMgbGFzdCAtPlxuICAgICAgcTIubGVuZ3RoIDwtIHEyLmxlbmd0aCArIHExLmxlbmd0aDtcbiAgICAgIGxhc3QubmV4dCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcSA9XG4gIGxldCByZWMgYXV4IGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICB8IE5pbCAtPiBTZXEuTmlsXG4gICAgfCBDb25zIHsgY29udGVudD14OyBuZXh0OyB9IC0+IFNlcS5Db25zICh4LCBhdXggbmV4dClcbiAgaW5cbiAgYXV4IHEuZmlyc3RcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBxID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBxIGc7XG4gIHFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgRGFuaWVsIGRlIFJhdWdsYXVkcmUsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0gJ2EgY2VsbCBvcHRpb25cbmFuZCAnYSBjZWxsID0geyBtdXRhYmxlIGNvdW50IDogaW50OyBtdXRhYmxlIGRhdGEgOiAnYSBkYXRhIH1cbmFuZCAnYSBkYXRhID1cbiAgICBTZW1wdHlcbiAgfCBTY29ucyBvZiAnYSAqICdhIGRhdGFcbiAgfCBTYXBwIG9mICdhIGRhdGEgKiAnYSBkYXRhXG4gIHwgU2xhenkgb2YgJ2EgZGF0YSBMYXp5LnRcbiAgfCBTZ2VuIG9mICdhIGdlblxuICB8IFNidWZmaW8gOiBidWZmaW8gLT4gY2hhciBkYXRhXG5hbmQgJ2EgZ2VuID0geyBtdXRhYmxlIGN1cnIgOiAnYSBvcHRpb24gb3B0aW9uOyBmdW5jIDogaW50IC0+ICdhIG9wdGlvbiB9XG5hbmQgYnVmZmlvID1cbiAgeyBpYyA6IGluX2NoYW5uZWw7IGJ1ZmYgOiBieXRlczsgbXV0YWJsZSBsZW4gOiBpbnQ7IG11dGFibGUgaW5kIDogaW50IH1cblxuZXhjZXB0aW9uIEZhaWx1cmVcbmV4Y2VwdGlvbiBFcnJvciBvZiBzdHJpbmdcblxubGV0IGNvdW50ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IDBcbiAgfCBTb21lIHsgY291bnQgfSAtPiBjb3VudFxubGV0IGRhdGEgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gU2VtcHR5XG4gIHwgU29tZSB7IGRhdGEgfSAtPiBkYXRhXG5cbmxldCBmaWxsX2J1ZmYgYiA9XG4gIGIubGVuIDwtIGlucHV0IGIuaWMgYi5idWZmIDAgKEJ5dGVzLmxlbmd0aCBiLmJ1ZmYpOyBiLmluZCA8LSAwXG5cblxubGV0IHJlYyBnZXRfZGF0YSA6IHR5cGUgdi4gaW50IC0+IHYgZGF0YSAtPiB2IGRhdGEgPSBmdW4gY291bnQgZCAtPiBtYXRjaCBkIHdpdGhcbiAoKiBSZXR1cm5zIGVpdGhlciBTZW1wdHkgb3IgU2NvbnMoYSwgXykgZXZlbiB3aGVuIGQgaXMgYSBnZW5lcmF0b3JcbiAgICBvciBhIGJ1ZmZlci4gSW4gdGhvc2UgY2FzZXMsIHRoZSBpdGVtIGEgaXMgc2VlbiBhcyBleHRyYWN0ZWQgZnJvbVxuIHRoZSBnZW5lcmF0b3IvYnVmZmVyLlxuIFRoZSBjb3VudCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgY2FsbGluZyBgU2dlbi1mdW5jdGlvbnMnLiAgKilcbiAgIFNlbXB0eSB8IFNjb25zIChfLCBfKSAtPiBkXG4gfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIGNvdW50IGQxIHdpdGhcbiAgICAgICBTY29ucyAoYSwgZDExKSAtPiBTY29ucyAoYSwgU2FwcCAoZDExLCBkMikpXG4gICAgIHwgU2VtcHR5IC0+IGdldF9kYXRhIGNvdW50IGQyXG4gICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgZW5kXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBOb25lfSAtPiBTZW1wdHlcbiB8IFNnZW4gKHtjdXJyID0gU29tZShTb21lIGEpfSBhcyBnKSAtPlxuICAgICBnLmN1cnIgPC0gTm9uZTsgU2NvbnMoYSwgZClcbiB8IFNnZW4gZyAtPlxuICAgICBiZWdpbiBtYXRjaCBnLmZ1bmMgY291bnQgd2l0aFxuICAgICAgIE5vbmUgLT4gZy5jdXJyIDwtIFNvbWUoTm9uZSk7IFNlbXB0eVxuICAgICB8IFNvbWUgYSAtPiBTY29ucyhhLCBkKVxuICAgICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgIGVuZFxuIHwgU2J1ZmZpbyBiIC0+XG4gICAgIGlmIGIuaW5kID49IGIubGVuIHRoZW4gZmlsbF9idWZmIGI7XG4gICAgIGlmIGIubGVuID09IDAgdGhlbiBTZW1wdHkgZWxzZVxuICAgICAgIGxldCByID0gQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQgaW5cbiAgICAgICAoKiBXYXJuaW5nOiBhbnlvbmUgdXNpbmcgZyB0aGlua3MgdGhhdCBhbiBpdGVtIGhhcyBiZWVuIHJlYWQgKilcbiAgICAgICBiLmluZCA8LSBzdWNjIGIuaW5kOyBTY29ucyhyLCBkKVxuIHwgU2xhenkgZiAtPiBnZXRfZGF0YSBjb3VudCAoTGF6eS5mb3JjZSBmKVxuXG5cbmxldCByZWMgcGVla19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdiBvcHRpb24gPSBmdW4gcyAtPlxuICgqIGNvbnN1bHQgdGhlIGZpcnN0IGl0ZW0gb2YgcyAqKVxuIG1hdGNoIHMuZGF0YSB3aXRoXG4gICBTZW1wdHkgLT4gTm9uZVxuIHwgU2NvbnMgKGEsIF8pIC0+IFNvbWUgYVxuIHwgU2FwcCAoXywgXykgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZ2V0X2RhdGEgcy5jb3VudCBzLmRhdGEgd2l0aFxuICAgICAgIFNjb25zKGEsIF8pIGFzIGQgLT4gcy5kYXRhIDwtIGQ7IFNvbWUgYVxuICAgICB8IFNlbXB0eSAtPiBOb25lXG4gICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgZW5kXG4gfCBTbGF6eSBmIC0+IHMuZGF0YSA8LSAoTGF6eS5mb3JjZSBmKTsgcGVla19kYXRhIHNcbiB8IFNnZW4ge2N1cnIgPSBTb21lIGF9IC0+IGFcbiB8IFNnZW4gZyAtPiBsZXQgeCA9IGcuZnVuYyBzLmNvdW50IGluIGcuY3VyciA8LSBTb21lIHg7IHhcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gYmVnaW4gcy5kYXRhIDwtIFNlbXB0eTsgTm9uZSBlbmRcbiAgICAgZWxzZSBTb21lIChCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZiBiLmluZClcblxuXG5sZXQgcGVlayA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBOb25lXG4gIHwgU29tZSBzIC0+IHBlZWtfZGF0YSBzXG5cblxubGV0IHJlYyBqdW5rX2RhdGEgOiB0eXBlIHYuIHYgY2VsbCAtPiB1bml0ID0gZnVuIHMgLT5cbiAgbWF0Y2ggcy5kYXRhIHdpdGhcbiAgICBTY29ucyAoXywgZCkgLT4gcy5jb3VudCA8LSAoc3VjYyBzLmNvdW50KTsgcy5kYXRhIDwtIGRcbiAgfCBTZ2VuICh7Y3VyciA9IFNvbWUgX30gYXMgZykgLT4gcy5jb3VudCA8LSAoc3VjYyBzLmNvdW50KTsgZy5jdXJyIDwtIE5vbmVcbiAgfCBTYnVmZmlvIGIgLT5cbiAgICAgIGlmIGIuaW5kID49IGIubGVuIHRoZW4gZmlsbF9idWZmIGI7XG4gICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gcy5kYXRhIDwtIFNlbXB0eVxuICAgICAgZWxzZSAocy5jb3VudCA8LSAoc3VjYyBzLmNvdW50KTsgYi5pbmQgPC0gc3VjYyBiLmluZClcbiAgfCBfIC0+XG4gICAgICBtYXRjaCBwZWVrX2RhdGEgcyB3aXRoXG4gICAgICAgIE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBfIC0+IGp1bmtfZGF0YSBzXG5cblxubGV0IGp1bmsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIGRhdGEgLT4ganVua19kYXRhIGRhdGFcblxubGV0IHJlYyBuZ2V0X2RhdGEgbiBzID1cbiAgaWYgbiA8PSAwIHRoZW4gW10sIHMuZGF0YSwgMFxuICBlbHNlXG4gICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgU29tZSBhIC0+XG4gICAgICAgIGp1bmtfZGF0YSBzO1xuICAgICAgICBsZXQgKGFsLCBkLCBrKSA9IG5nZXRfZGF0YSAocHJlZCBuKSBzIGluIGEgOjogYWwsIFNjb25zIChhLCBkKSwgc3VjYyBrXG4gICAgfCBOb25lIC0+IFtdLCBzLmRhdGEsIDBcblxuXG5sZXQgbnBlZWtfZGF0YSBuIHMgPVxuICBsZXQgKGFsLCBkLCBsZW4pID0gbmdldF9kYXRhIG4gcyBpblxuICBzLmNvdW50IDwtIChzLmNvdW50IC0gbGVuKTtcbiAgcy5kYXRhIDwtIGQ7XG4gIGFsXG5cblxubGV0IG5wZWVrIG4gPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIGQgLT4gbnBlZWtfZGF0YSBuIGRcblxubGV0IG5leHQgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBhIC0+IGp1bmsgczsgYVxuICB8IE5vbmUgLT4gcmFpc2UgRmFpbHVyZVxuXG5cbmxldCBlbXB0eSBzID1cbiAgbWF0Y2ggcGVlayBzIHdpdGhcbiAgICBTb21lIF8gLT4gcmFpc2UgRmFpbHVyZVxuICB8IE5vbmUgLT4gKClcblxuXG5sZXQgaXRlciBmIHN0cm0gPVxuICBsZXQgcmVjIGRvX3JlYyAoKSA9XG4gICAgbWF0Y2ggcGVlayBzdHJtIHdpdGhcbiAgICAgIFNvbWUgYSAtPiBqdW5rIHN0cm07IGlnbm9yZShmIGEpOyBkb19yZWMgKClcbiAgICB8IE5vbmUgLT4gKClcbiAgaW5cbiAgZG9fcmVjICgpXG5cblxuKCogU3RyZWFtIGJ1aWxkaW5nIGZ1bmN0aW9ucyAqKVxuXG5sZXQgZnJvbSBmID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2dlbiB7Y3VyciA9IE5vbmU7IGZ1bmMgPSBmfX1cblxubGV0IG9mX2xpc3QgbCA9XG4gIFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IExpc3QuZm9sZF9yaWdodCAoZnVuIHggbCAtPiBTY29ucyAoeCwgbCkpIGwgU2VtcHR5fVxuXG5cbmxldCBvZl9zdHJpbmcgcyA9XG4gIGxldCBjb3VudCA9IHJlZiAwIGluXG4gIGZyb20gKGZ1biBfIC0+XG4gICAgKCogV2UgY2Fubm90IHVzZSB0aGUgaW5kZXggcGFzc2VkIGJ5IHRoZSBbZnJvbV0gZnVuY3Rpb24gZGlyZWN0bHlcbiAgICAgICBiZWNhdXNlIGl0IHJldHVybnMgdGhlIGN1cnJlbnQgc3RyZWFtIGNvdW50LCB3aXRoIGFic29sdXRlbHkgbm9cbiAgICAgICBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIHN0YXJ0IGZyb20gMC4gRm9yIGV4YW1wbGUsIGluIHRoZSBjYXNlXG4gICAgICAgb2YgW1N0cmVhbS5pY29ucyAnYycgKFN0cmVhbS5mcm9tX3N0cmluZyBcImFiXCIpXSwgdGhlIGZpcnN0XG4gICAgICAgYWNjZXNzIHRvIHRoZSBzdHJpbmcgd2lsbCBiZSBtYWRlIHdpdGggY291bnQgWzFdIGFscmVhZHkuXG4gICAgKilcbiAgICBsZXQgYyA9ICFjb3VudCBpblxuICAgIGlmIGMgPCBTdHJpbmcubGVuZ3RoIHNcbiAgICB0aGVuIChpbmNyIGNvdW50OyBTb21lIHMuW2NdKVxuICAgIGVsc2UgTm9uZSlcblxuXG5sZXQgb2ZfYnl0ZXMgcyA9XG4gIGxldCBjb3VudCA9IHJlZiAwIGluXG4gIGZyb20gKGZ1biBfIC0+XG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgQnl0ZXMubGVuZ3RoIHNcbiAgICB0aGVuIChpbmNyIGNvdW50OyBTb21lIChCeXRlcy5nZXQgcyBjKSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2NoYW5uZWwgaWMgPVxuICBTb21lIHtjb3VudCA9IDA7XG4gICAgICAgIGRhdGEgPSBTYnVmZmlvIHtpYyA9IGljOyBidWZmID0gQnl0ZXMuY3JlYXRlIDQwOTY7IGxlbiA9IDA7IGluZCA9IDB9fVxuXG5cbigqIFN0cmVhbSBleHByZXNzaW9ucyBidWlsZGVycyAqKVxuXG5sZXQgaWFwcCBpIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTYXBwIChkYXRhIGksIGRhdGEgcyl9XG5sZXQgaWNvbnMgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2NvbnMgKGksIGRhdGEgcyl9XG5sZXQgaXNpbmcgaSA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBTZW1wdHkpfVxuXG5sZXQgbGFwcCBmIHMgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTYXBwIChkYXRhIChmICgpKSwgZGF0YSBzKSkpfVxuXG5sZXQgbGNvbnMgZiBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2NvbnMgKGYgKCksIGRhdGEgcykpKX1cbmxldCBsc2luZyBmID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2NvbnMgKGYgKCksIFNlbXB0eSkpKX1cblxubGV0IHNlbXB0eSA9IE5vbmVcbmxldCBzbGF6eSBmID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoZGF0YSAoZiAoKSkpKX1cblxuKCogRm9yIGRlYnVnZ2luZyB1c2UgKilcblxubGV0IHJlYyBkdW1wIDogdHlwZSB2LiAodiAtPiB1bml0KSAtPiB2IHQgLT4gdW5pdCA9IGZ1biBmIHMgLT5cbiAgcHJpbnRfc3RyaW5nIFwie2NvdW50ID0gXCI7XG4gIHByaW50X2ludCAoY291bnQgcyk7XG4gIHByaW50X3N0cmluZyBcIjsgZGF0YSA9IFwiO1xuICBkdW1wX2RhdGEgZiAoZGF0YSBzKTtcbiAgcHJpbnRfc3RyaW5nIFwifVwiO1xuICBwcmludF9uZXdsaW5lICgpXG5hbmQgZHVtcF9kYXRhIDogdHlwZSB2LiAodiAtPiB1bml0KSAtPiB2IGRhdGEgLT4gdW5pdCA9IGZ1biBmIC0+XG4gIGZ1bmN0aW9uXG4gICAgU2VtcHR5IC0+IHByaW50X3N0cmluZyBcIlNlbXB0eVwiXG4gIHwgU2NvbnMgKGEsIGQpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTY29ucyAoXCI7XG4gICAgICBmIGE7XG4gICAgICBwcmludF9zdHJpbmcgXCIsIFwiO1xuICAgICAgZHVtcF9kYXRhIGYgZDtcbiAgICAgIHByaW50X3N0cmluZyBcIilcIlxuICB8IFNhcHAgKGQxLCBkMikgLT5cbiAgICAgIHByaW50X3N0cmluZyBcIlNhcHAgKFwiO1xuICAgICAgZHVtcF9kYXRhIGYgZDE7XG4gICAgICBwcmludF9zdHJpbmcgXCIsIFwiO1xuICAgICAgZHVtcF9kYXRhIGYgZDI7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTbGF6eSBfIC0+IHByaW50X3N0cmluZyBcIlNsYXp5XCJcbiAgfCBTZ2VuIF8gLT4gcHJpbnRfc3RyaW5nIFwiU2dlblwiXG4gIHwgU2J1ZmZpbyBfIC0+IHByaW50X3N0cmluZyBcIlNidWZmaW9cIlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgUGllcnJlIFdlaXMgYW5kIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5OSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeHRlbnNpYmxlIGJ1ZmZlcnMgKilcblxudHlwZSB0ID1cbiB7bXV0YWJsZSBidWZmZXIgOiBieXRlcztcbiAgbXV0YWJsZSBwb3NpdGlvbiA6IGludDtcbiAgbXV0YWJsZSBsZW5ndGggOiBpbnQ7XG4gIGluaXRpYWxfYnVmZmVyIDogYnl0ZXN9XG4oKiBJbnZhcmlhbnRzOiBhbGwgcGFydHMgb2YgdGhlIGNvZGUgcHJlc2VydmUgdGhlIGludmFyaWFudHMgdGhhdDpcbiAgIC0gWzAgPD0gYi5wb3NpdGlvbiA8PSBiLmxlbmd0aF1cbiAgIC0gW2IubGVuZ3RoID0gQnl0ZXMubGVuZ3RoIGIuYnVmZmVyXVxuXG4gICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCBbYi5wb3NpdGlvbiA9IGIubGVuZ3RoXSBpcyBsZWdhbCxcbiAgIGl0IG1lYW5zIHRoYXQgdGhlIGJ1ZmZlciBpcyBmdWxsIGFuZCB3aWxsIGhhdmUgdG8gYmUgZXh0ZW5kZWRcbiAgIGJlZm9yZSBhbnkgZnVydGhlciBhZGRpdGlvbi4gKilcblxubGV0IGNyZWF0ZSBuID1cbiBsZXQgbiA9IGlmIG4gPCAxIHRoZW4gMSBlbHNlIG4gaW5cbiBsZXQgbiA9IGlmIG4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBTeXMubWF4X3N0cmluZ19sZW5ndGggZWxzZSBuIGluXG4gbGV0IHMgPSBCeXRlcy5jcmVhdGUgbiBpblxuIHtidWZmZXIgPSBzOyBwb3NpdGlvbiA9IDA7IGxlbmd0aCA9IG47IGluaXRpYWxfYnVmZmVyID0gc31cblxubGV0IGNvbnRlbnRzIGIgPSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxubGV0IHRvX2J5dGVzIGIgPSBCeXRlcy5zdWIgYi5idWZmZXIgMCBiLnBvc2l0aW9uXG5cbmxldCBzdWIgYiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGIucG9zaXRpb24gLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5zdWJcIlxuICBlbHNlIEJ5dGVzLnN1Yl9zdHJpbmcgYi5idWZmZXIgb2ZzIGxlblxuXG5cbmxldCBibGl0IHNyYyBzcmNvZmYgZHN0IGRzdG9mZiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IHNyY29mZiA8IDAgfHwgc3Jjb2ZmID4gc3JjLnBvc2l0aW9uIC0gbGVuXG4gICAgICAgICAgICAgfHwgZHN0b2ZmIDwgMCB8fCBkc3RvZmYgPiAoQnl0ZXMubGVuZ3RoIGRzdCkgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5ibGl0XCJcbiAgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9ibGl0IHNyYy5idWZmZXIgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuXG5cblxubGV0IG50aCBiIG9mcyA9XG4gIGlmIG9mcyA8IDAgfHwgb2ZzID49IGIucG9zaXRpb24gdGhlblxuICAgaW52YWxpZF9hcmcgXCJCdWZmZXIubnRoXCJcbiAgZWxzZSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIG9mc1xuXG5cbmxldCBsZW5ndGggYiA9IGIucG9zaXRpb25cblxubGV0IGNsZWFyIGIgPSBiLnBvc2l0aW9uIDwtIDBcblxubGV0IHJlc2V0IGIgPVxuICBiLnBvc2l0aW9uIDwtIDA7XG4gIGIuYnVmZmVyIDwtIGIuaW5pdGlhbF9idWZmZXI7XG4gIGIubGVuZ3RoIDwtIEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlclxuXG4oKiBbcmVzaXplIGIgbW9yZV0gZW5zdXJlcyB0aGF0IFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gaG9sZHNcbiAgIGJ5IGR5bmFtaWNhbGx5IGV4dGVuZGluZyBbYi5idWZmZXJdIGlmIG5lY2Vzc2FyeSAtLSBhbmQgdGh1c1xuICAgaW5jcmVhc2luZyBbYi5sZW5ndGhdLlxuXG4gICBJbiBwYXJ0aWN1bGFyLCBhZnRlciBbcmVzaXplIGIgbW9yZV0gaXMgY2FsbGVkLCBhIGRpcmVjdCBhY2Nlc3Mgb2ZcbiAgIHNpemUgW21vcmVdIGF0IFtiLnBvc2l0aW9uXSB3aWxsIGFsd2F5cyBiZSBpbi1ib3VuZHMsIHNvIHRoYXRcbiAgICh1bnNhZmVfe2dldCxzZXR9KSBtYXkgYmUgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG4qKVxubGV0IHJlc2l6ZSBiIG1vcmUgPVxuICBsZXQgb2xkX3BvcyA9IGIucG9zaXRpb24gaW5cbiAgbGV0IG9sZF9sZW4gPSBiLmxlbmd0aCBpblxuICBsZXQgbmV3X2xlbiA9IHJlZiBvbGRfbGVuIGluXG4gIHdoaWxlIG9sZF9wb3MgKyBtb3JlID4gIW5ld19sZW4gZG8gbmV3X2xlbiA6PSAyICogIW5ld19sZW4gZG9uZTtcbiAgaWYgIW5ld19sZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBiZWdpblxuICAgIGlmIG9sZF9wb3MgKyBtb3JlIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgIHRoZW4gbmV3X2xlbiA6PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICBlbHNlIGZhaWx3aXRoIFwiQnVmZmVyLmFkZDogY2Fubm90IGdyb3cgYnVmZmVyXCJcbiAgZW5kO1xuICBsZXQgbmV3X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAhbmV3X2xlbiBpblxuICAoKiBQUiM2MTQ4OiBsZXQncyBrZWVwIHVzaW5nIFtibGl0XSByYXRoZXIgdGhhbiBbdW5zYWZlX2JsaXRdIGluXG4gICAgIHRoaXMgdHJpY2t5IGZ1bmN0aW9uIHRoYXQgaXMgc2xvdyBhbnl3YXkuICopXG4gIEJ5dGVzLmJsaXQgYi5idWZmZXIgMCBuZXdfYnVmZmVyIDAgYi5wb3NpdGlvbjtcbiAgYi5idWZmZXIgPC0gbmV3X2J1ZmZlcjtcbiAgYi5sZW5ndGggPC0gIW5ld19sZW47XG4gIGFzc2VydCAoYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGgpO1xuICBhc3NlcnQgKG9sZF9wb3MgKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgKClcbiAgKCogTm90ZTogdGhlcmUgYXJlIHZhcmlvdXMgc2l0dWF0aW9ucyAocHJlZW1wdGl2ZSB0aHJlYWRzLCBzaWduYWxzIGFuZFxuICAgICBnYyBmaW5hbGl6ZXJzKSB3aGVyZSBPQ2FtbCBjb2RlIG1heSBiZSBydW4gYXN5bmNocm9ub3VzbHk7IGluXG4gICAgIHBhcnRpY3VsYXIsIHRoZXJlIG1heSBiZSBhIHJhY2Ugd2l0aCBhbm90aGVyIHVzZXIgb2YgW2JdLCBjaGFuZ2luZ1xuICAgICBpdHMgbXV0YWJsZSBmaWVsZHMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgW3Jlc2l6ZV0gY2FsbC4gVGhlIEJ1ZmZlclxuICAgICBtb2R1bGUgZG9lcyBub3QgcHJvdmlkZSBhbnkgY29ycmVjdG5lc3MgZ3VhcmFudGVlIGlmIHRoYXQgaGFwcGVucyxcbiAgICAgYnV0IHdlIG11c3Qgc3RpbGwgZW5zdXJlIHRoYXQgdGhlIGRhdGFzdHJ1Y3R1cmUgaW52YXJpYW50cyBob2xkIGZvclxuICAgICBtZW1vcnktc2FmZXR5IC0tIGFzIHdlIHBsYW4gdG8gdXNlIFt1bnNhZmVfe2dldCxzZXR9XS5cblxuICAgICBUaGVyZSBhcmUgdHdvIHBvdGVudGlhbCBhbGxvY2F0aW9uIHBvaW50cyBpbiB0aGlzIGZ1bmN0aW9uLFxuICAgICBbcmVmXSBhbmQgW0J5dGVzLmNyZWF0ZV0sIGJ1dCBhbGwgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgZmllbGRzXG4gICAgIG9mIFtiXSBoYXBwZW4gYmVmb3JlIGJvdGggb2YgdGhlbSBvciBhZnRlciBib3RoIG9mIHRoZW0uXG5cbiAgICAgV2UgdGhlcmVmb3JlIGFzc3VtZSB0aGF0IFtiLnBvc2l0aW9uXSBtYXkgY2hhbmdlIGF0IHRoZXNlIGFsbG9jYXRpb25zLFxuICAgICBhbmQgY2hlY2sgdGhhdCB0aGUgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBwb3N0Y29uZGl0aW9uXG4gICAgIGhvbGRzIGZvciBib3RoIHZhbHVlcyBvZiBbYi5wb3NpdGlvbl0sIGJlZm9yZSBvciBhZnRlciB0aGUgZnVuY3Rpb25cbiAgICAgaXMgY2FsbGVkLiBNb3JlIHByZWNpc2VseSwgdGhlIGZvbGxvd2luZyBpbnZhcmlhbnRzIG11c3QgaG9sZCBpZiB0aGVcbiAgICAgZnVuY3Rpb24gcmV0dXJucyBjb3JyZWN0bHksIGluIGFkZGl0aW9uIHRvIHRoZSB1c3VhbCBidWZmZXIgaW52YXJpYW50czpcbiAgICAgLSBbb2xkKGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtuZXcoYi5wb3NpdGlvbikgKyBtb3JlIDw9IG5ldyhiLmxlbmd0aCldXG4gICAgIC0gW29sZChiLmxlbmd0aCkgPD0gbmV3KGIubGVuZ3RoKV1cblxuICAgICBOb3RlOiBbYi5wb3NpdGlvbiArIG1vcmUgPD0gb2xkKGIubGVuZ3RoKV0gZG9lcyAqbm90KlxuICAgICBob2xkIGluIGdlbmVyYWwsIGFzIGl0IGlzIHByZWNpc2VseSB0aGUgY2FzZSB3aGVyZSB5b3UgbmVlZFxuICAgICB0byBjYWxsIFtyZXNpemVdIHRvIGluY3JlYXNlIFtiLmxlbmd0aF0uXG5cbiAgICAgTm90ZTogW2Fzc2VydF0gYWJvdmUgZG9lcyBub3QgbWVhbiB0aGF0IHdlIGtub3cgdGhlIGNvbmRpdGlvbnNcbiAgICAgYWx3YXlzIGhvbGQsIGJ1dCB0aGF0IHRoZSBmdW5jdGlvbiBtYXkgcmV0dXJuIGNvcnJlY3RseVxuICAgICBvbmx5IGlmIHRoZXkgaG9sZC5cblxuICAgICBOb3RlOiB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIGRvZXMgbm90IG5lZWRcbiAgICAgdG8gYmUgY2hlY2tlZCB3aXRoIHRoaXMgbGV2ZWwgb2Ygc2NydXRpbnksIGdpdmVuIHRoYXQgdGhleVxuICAgICByZWFkL3dyaXRlIHRoZSBidWZmZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgY2hlY2tpbmcgdGhhdFxuICAgICBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGQgb3IgY2FsbGluZyBbcmVzaXplXS5cbiAgKilcblxubGV0IGFkZF9jaGFyIGIgYyA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDE7XG4gIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgcG9zIGM7XG4gIGIucG9zaXRpb24gPC0gcG9zICsgMVxuXG5sZXQgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4ID0gNFxubGV0IHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXggPSA0XG5cbmxldCByZWMgYWRkX3V0Zl84X3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzhfdWNoYXIgYi5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzhfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmJlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmJlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZiZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IHJlYyBhZGRfdXRmXzE2bGVfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzE2bGVfdWNoYXIgYi5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgYWRkX3N1YnN0cmluZyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGlmIG9mZnNldCA8IDAgfHwgbGVuIDwgMCB8fCBvZmZzZXQgPiBTdHJpbmcubGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfc3Vic3RyaW5nL2FkZF9zdWJieXRlc1wiO1xuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIGxlbiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIGxlbjtcbiAgQnl0ZXMudW5zYWZlX2JsaXRfc3RyaW5nIHMgb2Zmc2V0IGIuYnVmZmVyIGIucG9zaXRpb24gbGVuO1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX3N1YmJ5dGVzIGIgcyBvZmZzZXQgbGVuID1cbiAgYWRkX3N1YnN0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpIG9mZnNldCBsZW5cblxubGV0IGFkZF9zdHJpbmcgYiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIGxlbiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIGxlbjtcbiAgQnl0ZXMudW5zYWZlX2JsaXRfc3RyaW5nIHMgMCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9ieXRlcyBiIHMgPSBhZGRfc3RyaW5nIGIgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcylcblxubGV0IGFkZF9idWZmZXIgYiBicyA9XG4gIGFkZF9zdWJieXRlcyBiIGJzLmJ1ZmZlciAwIGJzLnBvc2l0aW9uXG5cbigqIHRoaXMgKHByaXZhdGUpIGZ1bmN0aW9uIGNvdWxkIG1vdmUgaW50byB0aGUgc3RhbmRhcmQgbGlicmFyeSAqKVxubGV0IHJlYWxseV9pbnB1dF91cF90byBpYyBidWYgb2ZzIGxlbiA9XG4gIGxldCByZWMgbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZCB+b2ZzIH50b19yZWFkID1cbiAgICBpZiB0b19yZWFkID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gaW5wdXQgaWMgYnVmIG9mcyB0b19yZWFkIGluXG4gICAgICBpZiByID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBsZXQgYWxyZWFkeV9yZWFkID0gYWxyZWFkeV9yZWFkICsgciBpblxuICAgICAgICBsZXQgb2ZzID0gb2ZzICsgciBpblxuICAgICAgICBsZXQgdG9fcmVhZCA9IHRvX3JlYWQgLSByIGluXG4gICAgICAgIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZFxuICAgICAgZW5kXG4gICAgZW5kXG4gIGluIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQ6MCB+b2ZzIH50b19yZWFkOmxlblxuXG5cbmxldCB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gPVxuICBpZiBiLnBvc2l0aW9uICsgbGVuID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIGxldCBuID0gcmVhbGx5X2lucHV0X3VwX3RvIGljIGIuYnVmZmVyIGIucG9zaXRpb24gbGVuIGluXG4gICgqIFRoZSBhc3NlcnRpb24gYmVsb3cgbWF5IGZhaWwgaW4gd2VpcmQgc2NlbmFyaW8gd2hlcmVcbiAgICAgdGhyZWFkZWQvZmluYWxpemVyIGNvZGUsIHJ1biBhc3luY2hyb25vdXNseSBkdXJpbmcgdGhlXG4gICAgIFtyZWFsbHlfaW5wdXRfdXBfdG9dIGNhbGwsIHJhY2VzIG9uIHRoZSBidWZmZXI7IHdlIGRvbid0IGVuc3VyZVxuICAgICBjb3JyZWN0bmVzcyBpbiB0aGlzIGNhc2UsIGJ1dCBuZWVkIHRvIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIGZvclxuICAgICBtZW1vcnktc2FmZXR5IChzZWUgZGlzY3Vzc2lvbiBvZiBbcmVzaXplXSkuICopXG4gIGFzc2VydCAoYi5wb3NpdGlvbiArIG4gPD0gYi5sZW5ndGgpO1xuICBiLnBvc2l0aW9uIDwtIGIucG9zaXRpb24gKyBuO1xuICBuXG5cbmxldCBhZGRfY2hhbm5lbCBiIGljIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gICAoKiBQUiM1MDA0ICopXG4gICAgaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX2NoYW5uZWxcIjtcbiAgbGV0IG4gPSB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gaW5cbiAgKCogSXQgaXMgaW50ZW50aW9uYWwgdGhhdCBhIGNvbnN1bWVyIGNhdGNoaW5nIEVuZF9vZl9maWxlXG4gICAgIHdpbGwgc2VlIHRoZSBkYXRhIHdyaXR0ZW4gKHNlZSAjNjcxOSwgIzcxMzYpLiAqKVxuICBpZiBuIDwgbGVuIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGU7XG4gICgpXG5cbmxldCBvdXRwdXRfYnVmZmVyIG9jIGIgPVxuICBvdXRwdXQgb2MgYi5idWZmZXIgMCBiLnBvc2l0aW9uXG5cbmxldCBjbG9zaW5nID0gZnVuY3Rpb25cbiAgfCAnKCcgLT4gJyknXG4gIHwgJ3snIC0+ICd9J1xuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbigqIG9wZW5pbmcgYW5kIGNsb3Npbmc6IG9wZW4gYW5kIGNsb3NlIGNoYXJhY3RlcnMsIHR5cGljYWxseSAoIGFuZCApXG4gICBrOiBiYWxhbmNlIG9mIG9wZW5pbmcgYW5kIGNsb3NpbmcgY2hhcnNcbiAgIHM6IHRoZSBzdHJpbmcgd2hlcmUgd2UgYXJlIHNlYXJjaGluZ1xuICAgc3RhcnQ6IHRoZSBpbmRleCB3aGVyZSB3ZSBzdGFydCB0aGUgc2VhcmNoLiAqKVxubGV0IGFkdmFuY2VfdG9fY2xvc2luZyBvcGVuaW5nIGNsb3NpbmcgayBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGsgaSBsaW0gPVxuICAgIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgICBpZiBzLltpXSA9IG9wZW5pbmcgdGhlbiBhZHZhbmNlIChrICsgMSkgKGkgKyAxKSBsaW0gZWxzZVxuICAgIGlmIHMuW2ldID0gY2xvc2luZyB0aGVuXG4gICAgICBpZiBrID0gMCB0aGVuIGkgZWxzZSBhZHZhbmNlIChrIC0gMSkgKGkgKyAxKSBsaW1cbiAgICBlbHNlIGFkdmFuY2UgayAoaSArIDEpIGxpbSBpblxuICBhZHZhbmNlIGsgc3RhcnQgKFN0cmluZy5sZW5ndGggcylcblxubGV0IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgaSBsaW0gPVxuICAgIGlmIGkgPj0gbGltIHRoZW4gbGltIGVsc2VcbiAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgfCAnYScgLi4gJ3onIHwgJ0EnIC4uICdaJyB8ICcwJyAuLiAnOScgfCAnXycgLT4gYWR2YW5jZSAoaSArIDEpIGxpbVxuICAgIHwgXyAtPiBpIGluXG4gIGFkdmFuY2Ugc3RhcnQgKFN0cmluZy5sZW5ndGggcylcblxuKCogV2UgYXJlIGp1c3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBpZGVudCBpbiBzLCBzdGFydGluZyBhdCBzdGFydC4gKilcbmxldCBmaW5kX2lkZW50IHMgc3RhcnQgbGltID1cbiAgaWYgc3RhcnQgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgbWF0Y2ggcy5bc3RhcnRdIHdpdGhcbiAgKCogUGFyZW50aGVzaXplZCBpZGVudCA/ICopXG4gIHwgJygnIHwgJ3snIGFzIGMgLT5cbiAgICAgbGV0IG5ld19zdGFydCA9IHN0YXJ0ICsgMSBpblxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fY2xvc2luZyBjIChjbG9zaW5nIGMpIDAgcyBuZXdfc3RhcnQgaW5cbiAgICAgU3RyaW5nLnN1YiBzIG5ld19zdGFydCAoc3RvcCAtIHN0YXJ0IC0gMSksIHN0b3AgKyAxXG4gICgqIFJlZ3VsYXIgaWRlbnQgKilcbiAgfCBfIC0+XG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19ub25fYWxwaGEgcyAoc3RhcnQgKyAxKSBpblxuICAgICBTdHJpbmcuc3ViIHMgc3RhcnQgKHN0b3AgLSBzdGFydCksIHN0b3BcblxuKCogU3Vic3RpdHV0ZSAkaWRlbnQsICQoaWRlbnQpLCBvciAke2lkZW50fSBpbiBzLFxuICAgIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24gbWFwcGluZyBmLiAqKVxubGV0IGFkZF9zdWJzdGl0dXRlIGIgZiBzID1cbiAgbGV0IGxpbSA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgcmVjIHN1YnN0IHByZXZpb3VzIGkgPVxuICAgIGlmIGkgPCBsaW0gdGhlbiBiZWdpblxuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnJCcgYXMgY3VycmVudCB3aGVuIHByZXZpb3VzID0gJ1xcXFwnIC0+XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnJCcgLT5cbiAgICAgICAgIGxldCBqID0gaSArIDEgaW5cbiAgICAgICAgIGxldCBpZGVudCwgbmV4dF9pID0gZmluZF9pZGVudCBzIGogbGltIGluXG4gICAgICAgICBhZGRfc3RyaW5nIGIgKGYgaWRlbnQpO1xuICAgICAgICAgc3Vic3QgJyAnIG5leHRfaVxuICAgICAgfCBjdXJyZW50IHdoZW4gcHJldmlvdXMgPT0gJ1xcXFwnIC0+XG4gICAgICAgICBhZGRfY2hhciBiICdcXFxcJztcbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0ICcgJyAoaSArIDEpXG4gICAgICB8ICdcXFxcJyBhcyBjdXJyZW50IC0+XG4gICAgICAgICBzdWJzdCBjdXJyZW50IChpICsgMSlcbiAgICAgIHwgY3VycmVudCAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgZW5kIGVsc2VcbiAgICBpZiBwcmV2aW91cyA9ICdcXFxcJyB0aGVuIGFkZF9jaGFyIGIgcHJldmlvdXMgaW5cbiAgc3Vic3QgJyAnIDBcblxubGV0IHRydW5jYXRlIGIgbGVuID1cbiAgICBpZiBsZW4gPCAwIHx8IGxlbiA+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLnRydW5jYXRlXCJcbiAgICBlbHNlXG4gICAgICBiLnBvc2l0aW9uIDwtIGxlblxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBhZGRfc2VxIGIgc2VxID0gU2VxLml0ZXIgKGFkZF9jaGFyIGIpIHNlcVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgYiA9IGNyZWF0ZSAzMiBpblxuICBhZGRfc2VxIGIgaTtcbiAgYlxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50MTYgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDMyIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMydVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDY0IDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0dVwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5cbmxldCBhZGRfaW50OCBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDEgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICB1bnNhZmVfc2V0X2ludDggYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDE2X25lIGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgMiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDI7XG4gIHVuc2FmZV9zZXRfaW50MTYgYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDMyX25lIGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgNCBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDQ7XG4gIHVuc2FmZV9zZXRfaW50MzIgYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDY0X25lIGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgOCBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDg7XG4gIHVuc2FmZV9zZXRfaW50NjQgYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDE2X2xlIGIgeCA9XG4gIGFkZF9pbnQxNl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQxNl9iZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDE2IHgpXG5cbmxldCBhZGRfaW50MzJfbGUgYiB4ID1cbiAgYWRkX2ludDMyX25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDMyX2JlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwMzIgeClcblxubGV0IGFkZF9pbnQ2NF9sZSBiIHggPVxuICBhZGRfaW50NjRfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50NjRfYmUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXA2NCB4KVxuXG5sZXQgYWRkX3VpbnQ4ID0gYWRkX2ludDhcbmxldCBhZGRfdWludDE2X25lID0gYWRkX2ludDE2X25lXG5sZXQgYWRkX3VpbnQxNl9sZSA9IGFkZF9pbnQxNl9sZVxubGV0IGFkZF91aW50MTZfYmUgPSBhZGRfaW50MTZfYmVcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3NcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgKCogVG9vbHMgdG8gbWFuaXB1bGF0ZSBzY2FubmluZyBzZXQgb2YgY2hhcnMgKHNlZSAlWy4uLl0pICopXG5cbnR5cGUgbXV0YWJsZV9jaGFyX3NldCA9IGJ5dGVzXG5cbigqIENyZWF0ZSBhIGZyZXNoLCBlbXB0eSwgbXV0YWJsZSBjaGFyIHNldC4gKilcbmxldCBjcmVhdGVfY2hhcl9zZXQgKCkgPSBCeXRlcy5tYWtlIDMyICdcXDAwMCdcblxuKCogQWRkIGEgY2hhciBpbiBhIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgPVxuICBsZXQgaW5kID0gaW50X29mX2NoYXIgYyBpblxuICBsZXQgc3RyX2luZCA9IGluZCBsc3IgMyBhbmQgbWFzayA9IDEgbHNsIChpbmQgbGFuZCAwYjExMSkgaW5cbiAgQnl0ZXMuc2V0IGNoYXJfc2V0IHN0cl9pbmRcbiAgICAoY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIChCeXRlcy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbG9yIG1hc2spKVxuXG5sZXQgZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgQnl0ZXMudG9fc3RyaW5nIGNoYXJfc2V0XG5cbigqIENvbXB1dGUgdGhlIGNvbXBsZW1lbnQgb2YgYSBjaGFyIHNldC4gKilcbmxldCByZXZfY2hhcl9zZXQgY2hhcl9zZXQgPVxuICBsZXQgY2hhcl9zZXQnID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gIGZvciBpID0gMCB0byAzMSBkb1xuICAgIEJ5dGVzLnNldCBjaGFyX3NldCcgaVxuICAgICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoU3RyaW5nLmdldCBjaGFyX3NldCBpKSBseG9yIDB4RkYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBjaGFyX3NldCdcblxuKCogUmV0dXJuIHRydWUgaWYgYSBgYycgaXMgaW4gYGNoYXJfc2V0Jy4gKilcbmxldCBpc19pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIChpbnRfb2ZfY2hhciAoU3RyaW5nLmdldCBjaGFyX3NldCBzdHJfaW5kKSBsYW5kIG1hc2spIDw+IDBcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIElnbm9yZWQgcGFyYW0gY29udmVyc2lvbiAqKVxuXG4oKiBHQURUIHVzZWQgdG8gYWJzdHJhY3QgYW4gZXhpc3RlbnRpYWwgdHlwZSBwYXJhbWV0ZXIuICopXG4oKiBTZWUgcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0LiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFyYW1fZm9ybWF0X2ViYiA9IFBhcmFtX2Zvcm1hdF9FQkIgOlxuICAgICgneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFyYW1fZm9ybWF0X2ViYlxuXG4oKiBDb21wdXRlIGEgcGFkZGluZyBhc3NvY2lhdGVkIHRvIGEgcGFkX29wdGlvbiAoc2VlIFwiJV80MmRcIikuICopXG5sZXQgcGFkX29mX3BhZF9vcHQgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gTm9fcGFkZGluZ1xuICB8IFNvbWUgd2lkdGggLT4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcblxuKCogQ29tcHV0ZSBhIHByZWNpc2lvbiBhc3NvY2lhdGVkIHRvIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfLjQyZlwiKS4gKilcbmxldCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0ID0gbWF0Y2ggcHJlY19vcHQgd2l0aFxuICB8IE5vbmUgLT4gTm9fcHJlY2lzaW9uXG4gIHwgU29tZSBuZGVjIC0+IExpdF9wcmVjaXNpb24gbmRlY1xuXG4oKiBUdXJuIGFuIGlnbm9yZWQgcGFyYW0gaW50byBpdHMgZXF1aXZhbGVudCBub3QtaWdub3JlZCBmb3JtYXQgbm9kZS4gKilcbigqIFVzZWQgZm9yIGZvcm1hdCBwcmV0dHktcHJpbnRpbmcgYW5kIFNjYW5mLiAqKVxubGV0IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPiAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFyYW1fZm9ybWF0X2ViYiA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENoYXIgZm10KVxuICB8IElnbm9yZWRfY2FtbF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2FtbF9jaGFyIGZtdClcbiAgfCBJZ25vcmVkX3N0cmluZyBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU3RyaW5nIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfc3RyaW5nIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfaW50IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChJbnQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQzMiAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEludDMyIChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoTmF0aXZlaW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50NjQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQ2NCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2Zsb2F0IChwYWRfb3B0LCBwcmVjX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRmxvYXQgKChGbG9hdF9mbGFnXywgRmxvYXRfZiksXG4gICAgICAgICAgICAgIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIHByZWNfb2ZfcHJlY19vcHQgcHJlY19vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9ib29sIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChCb29sIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHkpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHksIGZtdCkpXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfcmVhZGVyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoUmVhZGVyIGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10KSlcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdClcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZXMgKilcblxudHlwZSAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW4gPVxuICB8IEFjY19vcGVuX3RhZyBvZiAoJ2IsICdjKSBhY2NcbiAgfCBBY2Nfb3Blbl9ib3ggb2YgKCdiLCAnYykgYWNjXG5cbigqIFJldmVyc2VkIGxpc3Qgb2YgcHJpbnRpbmcgYXRvbXMuICopXG4oKiBVc2VkIHRvIGFjY3VtdWxhdGUgcHJpbnRmIGFyZ3VtZW50cy4gKilcbmFuZCAoJ2IsICdjKSBhY2MgPVxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCBvZiAoJ2IsICdjKSBhY2MgKiBmb3JtYXR0aW5nX2xpdFxuICAgICAgKCogU3BlY2lhbCBmbXR0aW5nIChib3gpICopXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIG9mICgnYiwgJ2MpIGFjYyAqICgnYiwgJ2MpIGFjY19mb3JtYXR0aW5nX2dlblxuICAgICAgKCogU3BlY2lhbCBmbXR0aW5nIChib3gpICopXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogTGl0ZXJhbCBzdHJpbmcgKilcbiAgfCBBY2NfY2hhcl9saXRlcmFsICAgb2YgKCdiLCAnYykgYWNjICogY2hhciAgICAgICAoKiBMaXRlcmFsIGNoYXIgKilcbiAgfCBBY2NfZGF0YV9zdHJpbmcgICAgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nICAgICAoKiBHZW5lcmF0ZWQgc3RyaW5nICopXG4gIHwgQWNjX2RhdGFfY2hhciAgICAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogR2VuZXJhdGVkIGNoYXIgKilcbiAgfCBBY2NfZGVsYXkgICAgICAgICAgb2YgKCdiLCAnYykgYWNjICogKCdiIC0+ICdjKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRGVsYXllZCBwcmludGluZyAoJWEsICV0KSAqKVxuICB8IEFjY19mbHVzaCAgICAgICAgICBvZiAoJ2IsICdjKSBhY2MgICAgICAgICAgICAgICgqIEZsdXNoICopXG4gIHwgQWNjX2ludmFsaWRfYXJnICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZ1xuICAgICAgKCogUmFpc2UgSW52YWxpZF9hcmd1bWVudCBtc2cgKilcbiAgfCBFbmRfb2ZfYWNjXG5cbigqIExpc3Qgb2YgaGV0ZXJvZ2VuZW91cyB2YWx1ZXMuICopXG4oKiBVc2VkIHRvIGFjY3VtdWxhdGUgc2NhbmYgY2FsbGJhY2sgYXJndW1lbnRzLiAqKVxudHlwZSAoJ2EsICdiKSBoZXRlcl9saXN0ID1cbiAgfCBDb25zIDogJ2MgKiAoJ2EsICdiKSBoZXRlcl9saXN0IC0+ICgnYyAtPiAnYSwgJ2IpIGhldGVyX2xpc3RcbiAgfCBOaWwgOiAoJ2IsICdiKSBoZXRlcl9saXN0XG5cbigqIEV4aXN0ZW50aWFsIEJsYWNrIEJveGVzLiAqKVxuKCogVXNlZCB0byBhYnN0cmFjdCBzb21lIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVycy4gKilcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10dHkuICopXG4oKiBTZWUgdGhlIHR5cGVfcGFkZGluZyBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZGRpbmdfZm10dHlfZWJiID0gUGFkZGluZ19mbXR0eV9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYW4gZm10dHkuICopXG4oKiBTZWUgdGhlIHR5cGVfcGFkcHJlYyBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZHByZWNfZm10dHlfZWJiID0gUGFkcHJlY19mbXR0eV9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAneikgcHJlY2lzaW9uICogKCd6LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYiA9IFBhZGRpbmdfZm10X0VCQiA6XG4gICAgIChfLCAneCAtPiAnYSkgcGFkZGluZyAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdlLCAnZikgcGFkZGluZ19mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHByZWNpc2lvbiBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiID0gUHJlY2lzaW9uX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdlLCAnZikgcHJlY2lzaW9uX2ZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3BhZHByZWNfZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdwLCAnYiwgJ2MsICdlLCAnZikgcGFkcHJlY19mbXRfZWJiID0gUGFkcHJlY19mbXRfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3AgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCdwLCAnYiwgJ2MsICdlLCAnZikgcGFkcHJlY19mbXRfZWJiXG5cbigqIEFic3RyYWN0IHRoZSAnYSBhbmQgJ2QgcGFyYW1ldGVycyBvZiBhbiBmbXQuICopXG4oKiBPdXRwdXQgdHlwZSBvZiB0aGUgZm9ybWF0IHBhcnNpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYiwgJ2MsICdlLCAnZikgZm10X2ViYiA9IEZtdF9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgnYiwgJ2MsICdlLCAnZikgZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9mb3JtYXRfZ2VuIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYiA9IEZtdF9mbXR0eV9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgZm10ICpcbiAgICAgKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhbiBmbXR0eSBhbmQgYW4gZm10LiAqKVxuKCogU2VlIHRoZSB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X2ZtdF9lYmIgPSBGbXR0eV9mbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdHR5ICpcbiAgICAgKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgLT5cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X2ZtdF9lYmJcblxuKCogQWJzdHJhY3QgYWxsIGZtdHR5IHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBmb3JtYXQgdHlwZXMuICopXG50eXBlIGZtdHR5X2ViYiA9IEZtdHR5X0VCQiA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPiBmbXR0eV9lYmJcblxuKCogQWJzdHJhY3QgYWxsIHBhZGRpbmcgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIHBhZGRpbmdzLiAqKVxudHlwZSBwYWRkaW5nX2ViYiA9IFBhZGRpbmdfRUJCIDogKCdhLCAnYikgcGFkZGluZyAtPiBwYWRkaW5nX2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgcHJlY2lzaW9uIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwcmVjaXNpb25zLiAqKVxudHlwZSBwcmVjaXNpb25fZWJiID0gUHJlY2lzaW9uX0VCQiA6ICgnYSwgJ2IpIHByZWNpc2lvbiAtPiBwcmVjaXNpb25fZWJiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29uc3RhbnRzICopXG5cbigqIERlZmF1bHQgcHJlY2lzaW9uIGZvciBmbG9hdCBwcmludGluZy4gKilcbmxldCBkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udiA9XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgfCBGbG9hdF9oIHwgRmxvYXRfSFxuICB8IEZsb2F0X0NGIC0+IC02XG4gICgqIEZvciAlaCAlSCBhbmQgJSNGIGZvcm1hdHMsIGEgbmVnYXRpdmUgcHJlY2lzaW9uIG1lYW5zIFwiYXMgbWFueSBkaWdpdHMgYXNcbiAgICAgbmVjZXNzYXJ5XCIuICBGb3IgdGhlIG90aGVyIEZQIGZvcm1hdHMsIHdlIHRha2UgdGhlIGFic29sdXRlIHZhbHVlXG4gICAgIG9mIHRoZSBwcmVjaXNpb24sIGhlbmNlIDYgZGlnaXRzIGJ5IGRlZmF1bHQuICopXG4gIHwgRmxvYXRfRiAtPiAxMlxuICAoKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgT0NhbWwgZmxvYXQgcHJpbnRpbmcgKCVGKS4gKilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBFeHRlcm5hbHMgKilcblxuZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0OiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5leHRlcm5hbCBmb3JtYXRfaW50OiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQzMjogc3RyaW5nIC0+IGludDMyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9pbnQzMl9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X25hdGl2ZWludDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5leHRlcm5hbCBmb3JtYXRfaW50NjQ6IHN0cmluZyAtPiBpbnQ2NCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50NjRfZm9ybWF0XCJcbmV4dGVybmFsIGhleHN0cmluZ19vZl9mbG9hdDogZmxvYXQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2hleHN0cmluZ19vZl9mbG9hdFwiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAoKiBUb29scyB0byBwcmV0dHktcHJpbnQgZm9ybWF0cyAqKVxuXG4oKiBUeXBlIG9mIGV4dGVuc2libGUgY2hhcmFjdGVyIGJ1ZmZlcnMuICopXG50eXBlIGJ1ZmZlciA9IHtcbiAgbXV0YWJsZSBpbmQgOiBpbnQ7XG4gIG11dGFibGUgYnl0ZXMgOiBieXRlcztcbn1cblxuKCogQ3JlYXRlIGEgZnJlc2ggYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jcmVhdGUgaW5pdF9zaXplID0geyBpbmQgPSAwOyBieXRlcyA9IEJ5dGVzLmNyZWF0ZSBpbml0X3NpemUgfVxuXG4oKiBDaGVjayBzaXplIG9mIHRoZSBidWZmZXIgYW5kIGdyb3cgaXQgaWYgbmVlZGVkLiAqKVxubGV0IGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBvdmVyaGVhZCA9XG4gIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYnVmLmJ5dGVzIGluXG4gIGxldCBtaW5fbGVuID0gYnVmLmluZCArIG92ZXJoZWFkIGluXG4gIGlmIG1pbl9sZW4gPiBsZW4gdGhlbiAoXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWF4IChsZW4gKiAyKSBtaW5fbGVuIGluXG4gICAgbGV0IG5ld19zdHIgPSBCeXRlcy5jcmVhdGUgbmV3X2xlbiBpblxuICAgIEJ5dGVzLmJsaXQgYnVmLmJ5dGVzIDAgbmV3X3N0ciAwIGxlbjtcbiAgICBidWYuYnl0ZXMgPC0gbmV3X3N0cjtcbiAgKVxuXG4oKiBBZGQgdGhlIGNoYXJhY3RlciBgYycgdG8gdGhlIGJ1ZmZlciBgYnVmJy4gKilcbmxldCBidWZmZXJfYWRkX2NoYXIgYnVmIGMgPVxuICBidWZmZXJfY2hlY2tfc2l6ZSBidWYgMTtcbiAgQnl0ZXMuc2V0IGJ1Zi5ieXRlcyBidWYuaW5kIGM7XG4gIGJ1Zi5pbmQgPC0gYnVmLmluZCArIDFcblxuKCogQWRkIHRoZSBzdHJpbmcgYHMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHMgPVxuICBsZXQgc3RyX2xlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBidWZmZXJfY2hlY2tfc2l6ZSBidWYgc3RyX2xlbjtcbiAgU3RyaW5nLmJsaXQgcyAwIGJ1Zi5ieXRlcyBidWYuaW5kIHN0cl9sZW47XG4gIGJ1Zi5pbmQgPC0gYnVmLmluZCArIHN0cl9sZW5cblxuKCogR2V0IHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIuICopXG5sZXQgYnVmZmVyX2NvbnRlbnRzIGJ1ZiA9XG4gIEJ5dGVzLnN1Yl9zdHJpbmcgYnVmLmJ5dGVzIDAgYnVmLmluZFxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgY29udmVyc2lvbiB0byBjaGFyLiAqKVxubGV0IGNoYXJfb2ZfaWNvbnYgaWNvbnYgPSBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X2QgfCBJbnRfcGQgfCBJbnRfc2QgfCBJbnRfQ2QgLT4gJ2QnIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2lcbiAgfCBJbnRfQ2kgLT4gJ2knIHwgSW50X3ggfCBJbnRfQ3ggLT4gJ3gnIHwgSW50X1ggfCBJbnRfQ1ggLT4gJ1gnIHwgSW50X29cbiAgfCBJbnRfQ28gLT4gJ28nIHwgSW50X3UgfCBJbnRfQ3UgLT4gJ3UnXG5cbigqIENvbnZlcnQgYSBmbG9hdCBjb252ZXJzaW9uIHRvIGNoYXIuICopXG4oKiBgY0YnIHdpbGwgYmUgJ0YnIGZvciBkaXNwbGF5aW5nIGZvcm1hdCBhbmQgJ2cnIHRvIGNhbGwgbGliYyBwcmludGYgKilcbmxldCBjaGFyX29mX2Zjb252ID8oY0Y9J0YnKSBmY29udiA9IG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZiAtPiAnZicgfCBGbG9hdF9lIC0+ICdlJ1xuICB8IEZsb2F0X0UgLT4gJ0UnIHwgRmxvYXRfZyAtPiAnZydcbiAgfCBGbG9hdF9HIC0+ICdHJyB8IEZsb2F0X0YgLT4gY0ZcbiAgfCBGbG9hdF9oIC0+ICdoJyB8IEZsb2F0X0ggLT4gJ0gnXG4gIHwgRmxvYXRfQ0YgLT4gJ0YnXG5cblxuKCogQ29udmVydCBhIHNjYW5uaW5nIGNvdW50ZXIgdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2NvdW50ZXIgY291bnRlciA9IG1hdGNoIGNvdW50ZXIgd2l0aFxuICB8IExpbmVfY291bnRlciAgLT4gJ2wnXG4gIHwgQ2hhcl9jb3VudGVyICAtPiAnbidcbiAgfCBUb2tlbl9jb3VudGVyIC0+ICdOJ1xuXG4oKioqKVxuXG4oKiBQcmludCBhIGNoYXJfc2V0IGluIGEgYnVmZmVyIHdpdGggdGhlIE9DYW1sIGZvcm1hdCBsZXhpY2FsIGNvbnZlbnRpb24uICopXG5sZXQgYnByaW50X2NoYXJfc2V0IGJ1ZiBjaGFyX3NldCA9XG4gIGxldCByZWMgcHJpbnRfc3RhcnQgc2V0ID1cbiAgICBsZXQgaXNfYWxvbmUgYyA9XG4gICAgICBsZXQgYmVmb3JlLCBhZnRlciA9IENoYXIuKGNociAoY29kZSBjIC0gMSksIGNociAoY29kZSBjICsgMSkpIGluXG4gICAgICBpc19pbl9jaGFyX3NldCBzZXQgY1xuICAgICAgJiYgbm90IChpc19pbl9jaGFyX3NldCBzZXQgYmVmb3JlICYmIGlzX2luX2NoYXJfc2V0IHNldCBhZnRlcikgaW5cbiAgICBpZiBpc19hbG9uZSAnXScgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICddJztcbiAgICBwcmludF9vdXQgc2V0IDE7XG4gICAgaWYgaXNfYWxvbmUgJy0nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLSc7XG4gIGFuZCBwcmludF9vdXQgc2V0IGkgPVxuICAgIGlmIGkgPCAyNTYgdGhlblxuICAgICAgaWYgaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBpKSB0aGVuIHByaW50X2ZpcnN0IHNldCBpXG4gICAgICBlbHNlIHByaW50X291dCBzZXQgKGkgKyAxKVxuICBhbmQgcHJpbnRfZmlyc3Qgc2V0IGkgPVxuICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgIHwgJ1xcMjU1JyAtPiBwcmludF9jaGFyIGJ1ZiAyNTU7XG4gICAgfCAnXScgfCAnLScgLT4gcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIHwgXyAtPiBwcmludF9zZWNvbmQgc2V0IChpICsgMSk7XG4gIGFuZCBwcmludF9zZWNvbmQgc2V0IGkgPVxuICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlblxuICAgICAgbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgICB8ICdcXDI1NScgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU0O1xuICAgICAgICBwcmludF9jaGFyIGJ1ZiAyNTU7XG4gICAgICB8ICddJyB8ICctJyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgICAgfCBfIHdoZW4gbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IChpICsgMSkpKSAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgICBwcmludF9jaGFyIGJ1ZiBpO1xuICAgICAgICBwcmludF9vdXQgc2V0IChpICsgMik7XG4gICAgICB8IF8gLT5cbiAgICAgICAgcHJpbnRfaW4gc2V0IChpIC0gMSkgKGkgKyAyKTtcbiAgICBlbHNlIChcbiAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgKVxuICBhbmQgcHJpbnRfaW4gc2V0IGkgaiA9XG4gICAgaWYgaiA9IDI1NiB8fCBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaikpIHRoZW4gKFxuICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChpbnRfb2ZfY2hhciAnLScpO1xuICAgICAgcHJpbnRfY2hhciBidWYgKGogLSAxKTtcbiAgICAgIGlmIGogPCAyNTYgdGhlbiBwcmludF9vdXQgc2V0IChqICsgMSk7XG4gICAgKSBlbHNlXG4gICAgICBwcmludF9pbiBzZXQgaSAoaiArIDEpO1xuICBhbmQgcHJpbnRfY2hhciBidWYgaSA9IG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICB8ICdAJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQCc7XG4gICAgfCBjICAgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjO1xuICBpblxuICBidWZmZXJfYWRkX2NoYXIgYnVmICdbJztcbiAgcHJpbnRfc3RhcnQgKFxuICAgIGlmIGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0ICdcXDAwMCdcbiAgICB0aGVuICggYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXic7IHJldl9jaGFyX3NldCBjaGFyX3NldCApXG4gICAgZWxzZSBjaGFyX3NldFxuICApO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmICddJ1xuXG4oKioqKVxuXG4oKiBQcmludCBhIHBhZHR5IGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcGFkdHkgYnVmIHBhZHR5ID0gbWF0Y2ggcGFkdHkgd2l0aFxuICB8IExlZnQgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nXG4gIHwgUmlnaHQgLT4gKClcbiAgfCBaZXJvcyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcwJ1xuXG4oKiBQcmludCB0aGUgJ18nIG9mIGFuIGlnbm9yZWQgZmxhZyBpZiBuZWVkZWQuICopXG5sZXQgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWcgPVxuICBpZiBpZ25fZmxhZyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ18nXG5cbigqKiopXG5cbmxldCBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHdpZHRoIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyB3aWR0aClcblxuKCoqKilcblxuKCogUHJpbnQgcGFkZGluZyBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZGRpbmcgOiB0eXBlIGEgYiAuIGJ1ZmZlciAtPiAoYSwgYikgcGFkZGluZyAtPiB1bml0ID1cbmZ1biBidWYgcGFkIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPiAoKVxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgbikgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBuKTtcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGJwcmludF9wYWR0eSBidWYgcGFkdHk7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKidcblxuKCogUHJpbnQgcHJlY2lzaW9uIGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcHJlY2lzaW9uIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHByZWNpc2lvbiAtPiB1bml0ID1cbiAgZnVuIGJ1ZiBwcmVjIC0+IG1hdGNoIHByZWMgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiAtPiAoKVxuICB8IExpdF9wcmVjaXNpb24gbiAtPlxuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy4nO1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBuKTtcbiAgfCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiLipcIlxuXG4oKioqKVxuXG4oKiBQcmludCB0aGUgb3B0aW9uYWwgJysnLCAnICcgb3IgJyMnIGFzc29jaWF0ZWQgdG8gYW4gaW50IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9wZCB8IEludF9waSAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcrJ1xuICB8IEludF9zZCB8IEludF9zaSAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcgJ1xuICB8IEludF9DeCB8IEludF9DWCB8IEludF9DbyB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBJbnRfZCB8IEludF9pIHwgSW50X3ggfCBJbnRfWCB8IEludF9vIHwgSW50X3UgLT4gKClcblxuKCogUHJpbnQgYW4gY29tcGxldGUgaW50IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJTMuKmRcIikuICopXG5sZXQgYnByaW50X2ludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpXG5cbigqIFByaW50IGEgY29tcGxldGUgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NCBmb3JtYXQgaW4gYSBidWZmZXIuICopXG5sZXQgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjIGMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKioqKVxuXG4oKiBQcmludCB0aGUgb3B0aW9uYWwgJysnLCAnICcgYW5kL29yICcjJyBhc3NvY2lhdGVkIHRvIGEgZmxvYXQgY29udmVyc2lvbi4gKilcbmxldCBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnYgPVxuICBiZWdpbiBtYXRjaCBmc3QgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2ZsYWdfcCAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcrJ1xuICB8IEZsb2F0X2ZsYWdfcyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcgJ1xuICB8IEZsb2F0X2ZsYWdfIC0+ICgpIGVuZDtcbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9DRiAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcjJ1xuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HXG4gIHwgRmxvYXRfRiB8IEZsb2F0X2ggfCBGbG9hdF9IIC0+ICgpXG5cbigqIFByaW50IGEgY29tcGxldGUgZmxvYXQgZm9ybWF0IGluIGEgYnVmZmVyIChleDogXCIlKyouM2ZcIikuICopXG5sZXQgYnByaW50X2Zsb2F0X2ZtdCBidWYgaWduX2ZsYWcgZmNvbnYgcGFkIHByZWMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9mY29udiBmY29udilcblxuKCogQ29tcHV0ZSB0aGUgbGl0ZXJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBGb3JtYXR0aW5nX2xpdC4gKilcbigqIFVzZWQgYnkgUHJpbnRmIGFuZCBTY2FuZiB3aGVyZSBmb3JtYXR0aW5nIGlzIG5vdCBpbnRlcnByZXRlZC4gKilcbmxldCBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm9ybWF0dGluZ19saXQgPSBtYXRjaCBmb3JtYXR0aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgLT4gXCJAXVwiXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgLT4gXCJAfVwiXG4gIHwgQnJlYWsgKHN0ciwgXywgXykgICAgLT4gc3RyXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgLT4gXCJAP1wiXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgLT4gXCJAXFxuXCJcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAtPiBcIkAuXCJcbiAgfCBNYWdpY19zaXplIChzdHIsIF8pICAtPiBzdHJcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAtPiBcIkBAXCJcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAtPiBcIkAlXCJcbiAgfCBTY2FuX2luZGljIGMgLT4gXCJAXCIgXiAoU3RyaW5nLm1ha2UgMSBjKVxuXG4oKioqKVxuXG4oKiBQcmludCBhIGxpdGVyYWwgY2hhciBpbiBhIGJ1ZmZlciwgZXNjYXBlICclJyBieSBcIiUlXCIuICopXG5sZXQgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgY2hyID0gbWF0Y2ggY2hyIHdpdGhcbiAgfCAnJScgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSVcIlxuICB8IF8gLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjaHJcblxuKCogUHJpbnQgYSBsaXRlcmFsIHN0cmluZyBpbiBhIGJ1ZmZlciwgZXNjYXBlIGFsbCAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyID1cbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggc3RyIC0gMSBkb1xuICAgIGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIHN0ci5baV1cbiAgZG9uZVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgcHJldHR5LXByaW50aW5nICopXG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IHR5cGUgKGFuIGZtdHR5KSBpbiBhIGJ1ZmZlci4gKilcbmxldCByZWMgYnByaW50X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCAuXG4gICAgYnVmZmVyIC0+IChhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gdW5pdCA9XG5mdW4gYnVmIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlY1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFN0cmluZ190eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVzXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50X3R5IHJlc3QgICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWlcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnQzMl90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbGlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IE5hdGl2ZWludF90eSByZXN0IC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVuaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJUxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGbG9hdF90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlZlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEJvb2xfdHkgcmVzdCAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVCXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWFcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBUaGV0YV90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIldFwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFueV90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiU/XCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgUmVhZGVyX3R5IHJlc3QgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXJcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlX3JcIjtcbiAgICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHksIHJlc3QpIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXtcIjsgYnByaW50X2ZtdHR5IGJ1ZiBzdWJfZm10dHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJX1cIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViX2ZtdHR5LCBfLCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUoXCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IEVuZF9vZl9mbXR0eSAtPiAoKVxuXG4oKioqKVxuXG5sZXQgcmVjIGludF9vZl9jdXN0b21fYXJpdHkgOiB0eXBlIGEgYiBjIC5cbiAgKGEsIGIsIGMpIGN1c3RvbV9hcml0eSAtPiBpbnQgPVxuICBmdW5jdGlvblxuICB8IEN1c3RvbV96ZXJvIC0+IDBcbiAgfCBDdXN0b21fc3VjYyB4IC0+IDEgKyBpbnRfb2ZfY3VzdG9tX2FyaXR5IHhcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmb3JtYXQgaW4gYSBidWZmZXIuICopXG5sZXQgYnByaW50X2ZtdCBidWYgZm10ID1cbiAgbGV0IHJlYyBmbXRpdGVyIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGJvb2wgLT4gdW5pdCA9XG4gIGZ1biBmbXQgaWduX2ZsYWcgLT4gbWF0Y2ggZm10IHdpdGhcbiAgICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAncyc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnUyc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICdsJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbic7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnTCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQyc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0InO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnYSc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFRoZXRhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3QnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgZm9yIF9pID0gMSB0byBpbnRfb2ZfY3VzdG9tX2FyaXR5IGFyaXR5IGRvXG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnPyc7XG4gICAgICBkb25lO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgUmVhZGVyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3InOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlIVwiO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBzdHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG4gICAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNocjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAneyc7XG4gICAgICBicHJpbnRfZm10dHkgYnVmIGZtdHR5OyBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnfSc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJygnO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyknO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHdpZHRoX29wdDsgYnByaW50X2NoYXJfc2V0IGJ1ZiBjaGFyX3NldDtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2NvdW50ZXIgY291bnRlcik7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIFwiMGNcIjsgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgICBsZXQgUGFyYW1fZm9ybWF0X0VCQiBmbXQnID0gcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0IGluXG4gICAgICBmbXRpdGVyIGZtdCcgdHJ1ZTtcblxuICAgIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIChzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCk7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGZtdGluZ19nZW4gd2l0aFxuICAgICAgfCBPcGVuX3RhZyAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAe1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICB8IE9wZW5fYm94IChGb3JtYXQgKF8sIHN0cikpIC0+XG4gICAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIkBbXCI7IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzdHJcbiAgICAgIGVuZDtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgRW5kX29mX2Zvcm1hdCAtPiAoKVxuXG4gIGluIGZtdGl0ZXIgZm10IGZhbHNlXG5cbigqKiopXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdG8gc3RyaW5nLiAqKVxubGV0IHN0cmluZ19vZl9mbXQgZm10ID1cbiAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgYnByaW50X2ZtdCBidWYgZm10O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGUgZXh0cmFjdGlvbiAqKVxuXG50eXBlIChfLCBfKSBlcSA9IFJlZmwgOiAoJ2EsICdhKSBlcVxuXG4oKiBJbnZhcmlhbnQ6IHRoaXMgZnVuY3Rpb24gaXMgdGhlIGlkZW50aXR5IG9uIHZhbHVlcy5cblxuICAgSW4gcGFydGljdWxhciwgaWYgKHR5MSwgdHkyKSBoYXZlIGVxdWFsIHZhbHVlcywgdGhlblxuICAgKHRyYW5zIChzeW1tIHR5MSkgdHkyKSByZXNwZWN0cyB0aGUgJ3RyYW5zJyBwcmVjb25kaXRpb24uICopXG5sZXQgcmVjIHN5bW0gOiB0eXBlIGExIGIxIGMxIGQxIGUxIGYxIGEyIGIyIGMyIGQyIGUyIGYyIC5cbiAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsXG4gICAgYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10dHlfcmVsXG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+IENoYXJfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnRfdHkgcmVzdCAtPiBJbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+IEludDMyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPiBJbnQ2NF90eSAoc3ltbSByZXN0KVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+IE5hdGl2ZWludF90eSAoc3ltbSByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT4gRmxvYXRfdHkgKHN5bW0gcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT4gQm9vbF90eSAoc3ltbSByZXN0KVxuICB8IFN0cmluZ190eSByZXN0IC0+IFN0cmluZ190eSAoc3ltbSByZXN0KVxuICB8IFRoZXRhX3R5IHJlc3QgLT4gVGhldGFfdHkgKHN5bW0gcmVzdClcbiAgfCBBbHBoYV90eSByZXN0IC0+IEFscGhhX3R5IChzeW1tIHJlc3QpXG4gIHwgQW55X3R5IHJlc3QgLT4gQW55X3R5IChzeW1tIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT4gUmVhZGVyX3R5IChzeW1tIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPiBJZ25vcmVkX3JlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBzeW1tIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MiwgdHkxLCBzeW1tIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG5sZXQgcmVjIGZtdHR5X3JlbF9kZXQgOiB0eXBlIGExIGIgYyBkMSBlMSBmMSBhMiBkMiBlMiBmMiAuXG4gIChhMSwgYiwgYywgZDEsIGUxLCBmMSxcbiAgIGEyLCBiLCBjLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoKGYxLCBmMikgZXEgLT4gKGExLCBhMikgZXEpXG4gICogKChhMSwgYTIpIGVxIC0+IChmMSwgZjIpIGVxKVxuICAqICgoZTEsIGUyKSBlcSAtPiAoZDEsIGQyKSBlcSlcbiAgKiAoKGQxLCBkMikgZXEgLT4gKGUxLCBlMikgZXEpXG49IGZ1bmN0aW9uXG4gIHwgRW5kX29mX2ZtdHR5IC0+XG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcblxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuICB8IEZvcm1hdF9hcmdfdHkgKF90eSwgcmVzdCkgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGxldCBhZywgZ2EsIGRqLCBqZCA9IGZtdHR5X3JlbF9kZXQgdHkgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIGxldCBSZWZsID0gYWcgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBnYSBSZWZsIGluIGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIGxldCBSZWZsID0gZGogUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBqZCBSZWZsIGluIGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuXG4oKiBQcmVjb25kaXRpb246IHdlIGFzc3VtZSB0aGF0IHRoZSB0d28gZm10dHlfcmVsIGFyZ3VtZW50cyBoYXZlIGVxdWFsXG4gICB2YWx1ZXMgKGF0IHBvc3NpYmx5IGRpc3RpbmN0IHR5cGVzKTsgdGhpcyBpbnZhcmlhbnQgY29tZXMgZnJvbSB0aGUgd2F5XG4gICBmbXR0eV9yZWwgd2l0bmVzc2VzIGFyZSBwcm9kdWNlZCBieSB0aGUgdHlwZS1jaGVja2VyXG5cbiAgIFRoZSBjb2RlIGJlbG93IHVzZXMgKGFzc2VydCBmYWxzZSkgd2hlbiB0aGlzIGFzc3VtcHRpb24gaXMgYnJva2VuLiBUaGVcbiAgIGNvZGUgcGF0dGVybiBpcyB0aGUgZm9sbG93aW5nOlxuXG4gICAgIHwgRm9vIHgsIEZvbyB5IC0+XG4gICAgICAgKCogY2FzZSB3aGVyZSBpbmRlZWQgYm90aCB2YWx1ZXNcbiAgICAgICAgICBzdGFydCB3aXRoIGNvbnN0cnVjdG9yIEZvbyAqKVxuICAgICB8IEZvbyBfLCBfXG4gICAgIHwgXywgRm9vIF8gLT5cbiAgICAgICAoKiBkaWZmZXJlbnQgaGVhZCBjb25zdHJ1Y3RvcnM6IGJyb2tlbiBwcmVjb25kaXRpb24gKilcbiAgICAgICBhc3NlcnQgZmFsc2VcbiopXG5hbmQgdHJhbnMgOiB0eXBlXG4gIGExIGIxIGMxIGQxIGUxIGYxXG4gIGEyIGIyIGMyIGQyIGUyIGYyXG4gIGEzIGIzIGMzIGQzIGUzIGYzXG4uXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuLT4gKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHlfcmVsXG49IGZ1biB0eTEgdHkyIC0+IG1hdGNoIHR5MSwgdHkyIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QxLCBDaGFyX3R5IHJlc3QyIC0+IENoYXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFN0cmluZ190eSByZXN0MSwgU3RyaW5nX3R5IHJlc3QyIC0+IFN0cmluZ190eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQm9vbF90eSByZXN0MSwgQm9vbF90eSByZXN0MiAtPiBCb29sX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnRfdHkgcmVzdDEsIEludF90eSByZXN0MiAtPiBJbnRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDMyX3R5IHJlc3QxLCBJbnQzMl90eSByZXN0MiAtPiBJbnQzMl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50NjRfdHkgcmVzdDEsIEludDY0X3R5IHJlc3QyIC0+IEludDY0X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdDEsIE5hdGl2ZWludF90eSByZXN0MiAtPiBOYXRpdmVpbnRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZsb2F0X3R5IHJlc3QxLCBGbG9hdF90eSByZXN0MiAtPiBGbG9hdF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG5cbiAgfCBBbHBoYV90eSByZXN0MSwgQWxwaGFfdHkgcmVzdDIgLT4gQWxwaGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEFscGhhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQWxwaGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IFRoZXRhX3R5IHJlc3QxLCBUaGV0YV90eSByZXN0MiAtPiBUaGV0YV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgVGhldGFfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBUaGV0YV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgQW55X3R5IHJlc3QxLCBBbnlfdHkgcmVzdDIgLT4gQW55X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbnlfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBBbnlfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IFJlYWRlcl90eSByZXN0MSwgUmVhZGVyX3R5IHJlc3QyIC0+IFJlYWRlcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgUmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgUmVhZGVyX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0MSwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDIgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBJZ25vcmVkX3JlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRm9ybWF0X2FyZ190eSAodHkxLCByZXN0MSksIEZvcm1hdF9hcmdfdHkgKHR5MiwgcmVzdDIpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHJhbnMgdHkxIHR5MiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X2FyZ190eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEZvcm1hdF9hcmdfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkxMiwgcmVzdDEpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkyMSwgdHkyMiwgcmVzdDIpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxMikgdHkyMSBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgbGV0IFJlZmwgPSBmMiBSZWZsIGluXG4gICAgbGV0IFJlZmwgPSBmNCBSZWZsIGluXG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTExLCB0eTIyLCB0cmFucyByZXN0MSByZXN0MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfc3Vic3RfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEVuZF9vZl9mbXR0eSwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuICB8IEVuZF9vZl9mbXR0eSwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBFbmRfb2ZfZm10dHkgLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCByZWMgZm10dHlfb2ZfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZvcm1hdHRpbmdfZ2VuIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBmb3JtYXR0aW5nX2dlbiAtPiBtYXRjaCBmb3JtYXR0aW5nX2dlbiB3aXRoXG4gIHwgT3Blbl90YWcgKEZvcm1hdCAoZm10LCBfKSkgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IE9wZW5fYm94IChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogRXh0cmFjdCB0aGUgdHlwZSByZXByZXNlbnRhdGlvbiAoYW4gZm10dHkpIG9mIGEgZm9ybWF0LiAqKVxuYW5kIGZtdHR5X29mX2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm10dHkgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcblxuICB8IEludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50MzIgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50MzJfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKE5hdGl2ZWludF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnQ2NF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBGbG9hdCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChGbG9hdF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcblxuICB8IENoYXIgcmVzdCAgICAgICAgICAgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IENhbWxfY2hhciByZXN0ICAgICAgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEJvb2wgKHBhZCwgcmVzdCkgICAgICAgICAgIC0+XG4gICAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoQm9vbF90eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuICB8IEFscGhhIHJlc3QgICAgICAgICAgICAgICAgIC0+IEFscGhhX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBUaGV0YSByZXN0ICAgICAgICAgICAgICAgICAtPiBUaGV0YV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgICAgLT4gZm10dHlfb2ZfY3VzdG9tIGFyaXR5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBSZWFkZXIgcmVzdCAgICAgICAgICAgICAgICAtPiBSZWFkZXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRm9ybWF0X2FyZyAoXywgdHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdCAoXywgdHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eSwgdHksIGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRmx1c2ggcmVzdCAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG5cbiAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPiBTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+IEludF90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAgLT4gZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAgLT5cbiAgICBjb25jYXRfZm10dHkgKGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIGZtdGluZ19nZW4pIChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEVuZF9vZl9mb3JtYXQgICAgICAgICAgICAgIC0+IEVuZF9vZl9mbXR0eVxuXG5hbmQgZm10dHlfb2ZfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAoeSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGFyaXR5IGZtdHR5IC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBmbXR0eVxuICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+IEFueV90eSAoZm10dHlfb2ZfY3VzdG9tIGFyaXR5IGZtdHR5KVxuXG4oKiBFeHRyYWN0IHRoZSBmbXR0eSBvZiBhbiBpZ25vcmVkIHBhcmFtZXRlciBmb2xsb3dlZCBieSB0aGUgcmVzdCBvZlxuICAgdGhlIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IGNvbmNhdF9mbXR0eSBmbXR0eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IElnbm9yZWRfcmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgZm10KVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuXG4oKiBBZGQgYW4gSW50X3R5IG5vZGUgaWYgcGFkZGluZyBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpzXCIpLiAqKVxuYW5kIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgOiB0eXBlIHggYSBiIGMgZCBlIGYgLlxuICAgICh4LCBhKSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoeCwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuICBmdW4gcGFkIGZtdHR5IC0+IG1hdGNoIHBhZCB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgIC0+IGZtdHR5XG4gICAgfCBMaXRfcGFkZGluZyBfIC0+IGZtdHR5XG4gICAgfCBBcmdfcGFkZGluZyBfIC0+IEludF90eSBmbXR0eVxuXG4oKiBBZGQgYW4gSW50X3R5IG5vZGUgaWYgcHJlY2lzaW9uIGlzIHRha2VuIGFzIGFuIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpLiopXG5hbmQgZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcHJlY2lzaW9uIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoeCwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuICBmdW4gcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgICB8IE5vX3ByZWNpc2lvbiAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3ByZWNpc2lvbiBfIC0+IGZtdHR5XG4gICAgfCBBcmdfcHJlY2lzaW9uICAgLT4gSW50X3R5IGZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGluZyAqKVxuXG4oKiBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSBmb3JtYXQgZG9lcyBub3QgbWF0Y2ggYSBnaXZlbiBmb3JtYXQgdHlwZS4gKilcbmV4Y2VwdGlvbiBUeXBlX21pc21hdGNoXG5cbigqIFR5cGUgYSBwYWRkaW5nLiAqKVxuKCogVGFrZSBhbiBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgdGhlIGludGVnZXIgc2hvdWxkIGJlIGtlcHQgYXMgYXJndW1lbnQuICopXG4oKiBSYWlzZSBUeXBlX21pc21hdGNoIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCB0eXBlX3BhZGRpbmcgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFkZGluZ19mbXR0eV9lYmIgPVxuZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQsIGZtdHR5IHdpdGhcbiAgfCBOb19wYWRkaW5nLCBfIC0+IFBhZGRpbmdfZm10dHlfRUJCIChOb19wYWRkaW5nLCBmbXR0eSlcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBfIC0+IFBhZGRpbmdfZm10dHlfRUJCIChMaXRfcGFkZGluZyAocGFkdHksdyksZm10dHkpXG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEludF90eSByZXN0IC0+IFBhZGRpbmdfZm10dHlfRUJCIChBcmdfcGFkZGluZyBwYWR0eSxyZXN0KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBDb252ZXJ0IGEgKHVwYWRkaW5nLCB1cHJlY2lzaW9uKSB0byBhIChwYWRkaW5nLCBwcmVjaXNpb24pLiAqKVxuKCogVGFrZSBvbmUgb3IgdHdvIEludF90eSBmcm9tIHRoZSBmbXR0eSBpZiBuZWVkZWQuICopXG4oKiBSYWlzZSBUeXBlX21pc21hdGNoIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCB0eXBlX3BhZHByZWMgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSB6IC5cbiAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHopIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFkcHJlY19mbXR0eV9lYmIgPVxuZnVuIHBhZCBwcmVjIGZtdHR5IC0+IG1hdGNoIHByZWMsIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBOb19wcmVjaXNpb24sIHJlc3QpXG4gIHwgTGl0X3ByZWNpc2lvbiBwLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIExpdF9wcmVjaXNpb24gcCwgcmVzdClcbiAgfCBBcmdfcHJlY2lzaW9uLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBJbnRfdHkgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBBcmdfcHJlY2lzaW9uLCByZXN0KVxuICB8IF8sIFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIFR5cGUgYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogSWYgdHlwaW5nIHN1Y2NlZWQsIGdlbmVyYXRlIGEgY29weSBvZiB0aGUgZm9ybWF0IHdpdGggdGhlIHNhbWVcbiAgICB0eXBlIHBhcmFtZXRlcnMgYXMgdGhlIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgcmVjIHR5cGVfZm9ybWF0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5IHdpdGhcbiAgfCBGbXRfZm10dHlfRUJCIChmbXQnLCBFbmRfb2ZfZm10dHkpIC0+IGZtdCdcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0X2dlbiA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gZm10IGZtdHR5IC0+IG1hdGNoIGZtdCwgZm10dHkgd2l0aFxuICB8IENoYXIgZm10X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBDYW1sX2NoYXIgZm10X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDYW1sX2NoYXIgZm10JywgZm10dHknKVxuICB8IFN0cmluZyAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChTdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBDYW1sX3N0cmluZyAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChDYW1sX3N0cmluZyAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludDMyX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQ2NF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50NjQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEZsb2F0X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBCb29sIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBCb29sX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChCb29sIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgRmx1c2ggZm10X3Jlc3QsIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRmx1c2ggZm10JywgZm10dHknKVxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFN0cmluZ19saXRlcmFsIChzdHIsIGZtdCcpLCBmbXR0eScpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDaGFyX2xpdGVyYWwgKGNociwgZm10JyksIGZtdHR5JylcblxuICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpLFxuICAgIEZvcm1hdF9hcmdfdHkgKHN1Yl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1Yl9mbXR0eSA8PiBGbXR0eV9FQkIgc3ViX2ZtdHR5JyB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eScsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eTEsIF9zdWJfZm10dHkyLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViX2ZtdHR5MSkgdGhlblxuICAgICAgcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9XG4gICAgICB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgKGVyYXNlX3JlbCBmbXR0eV9yZXN0KVxuICAgIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHkxLCBmbXQnKSwgZm10dHknKVxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgQWxwaGEgZm10X3Jlc3QsIEFscGhhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQWxwaGEgZm10JywgZm10dHknKVxuICB8IFRoZXRhIGZtdF9yZXN0LCBUaGV0YV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFRoZXRhIGZtdCcsIGZtdHR5JylcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10JyksIGZtdHR5JylcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZ19nZW4sIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfZm9ybWF0dGluZ19nZW4gZm9ybWF0dGluZ19nZW4gZm10X3Jlc3QgZm10dHlfcmVzdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgZm10X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFJlYWRlciBmbXQnLCBmbXR0eScpXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10X3Jlc3QpLCBTdHJpbmdfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXQnKSwgZm10dHknKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10JyksIGZtdHR5JylcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtIGlnbiByZXN0IGZtdHR5X3Jlc3RcblxuICB8IEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QgLT4gRm10X2ZtdHR5X0VCQiAoRW5kX29mX2Zvcm1hdCwgZm10dHlfcmVzdClcblxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG5hbmQgdHlwZV9mb3JtYXR0aW5nX2dlbiA6IHR5cGUgYTEgYTMgYjEgYjMgYzEgYzMgZDEgZDMgZTEgZTIgZTMgZjEgZjIgZjMgLlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChmMSwgYjEsIGMxLCBlMSwgZTIsIGYyKSBmbXQgLT5cbiAgICAoYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHkgLT5cbiAgICAoYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10X2ZtdHR5X2ViYiA9XG5mdW4gZm9ybWF0dGluZ19nZW4gZm10MCBmbXR0eTAgLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdDEsIHN0cikpIC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDIsIGZtdHR5MikgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MSBmbXR0eTAgaW5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MywgZm10dHkzKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQwIGZtdHR5MiBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQyLCBzdHIpKSwgZm10MyksIGZtdHR5MylcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG5cbigqIFR5cGUgYW4gSWdub3JlZF9wYXJhbSBub2RlIGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbmFuZCB0eXBlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHAgcSB4IHkgeiB0IHUgdiBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIHksIHosIHQsIHEsIHApIGlnbm9yZWQgLT5cbiAgICAocCwgeSwgeiwgcSwgdSwgdikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGlnbiBmbXQgZm10dHkgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludCBfICAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludDMyIF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCBfICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludDY0IF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zsb2F0IF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSkgLT5cbiAgICB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIChJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSkpIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eScsIEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eSBmbXQgZm10dHkgaW5cbiAgICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10JyksXG4gICAgICAgICAgICAgICAgICAgZm10dHknKVxuICB8IElnbm9yZWRfcmVhZGVyIC0+IChcbiAgICBtYXRjaCBmbXR0eSB3aXRoXG4gICAgfCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9yZWFkZXIsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSA6IHR5cGUgYTEgYTIgYjEgYjIgYzEgYzIgZDEgZDIgZTEgZTIgZjEgZjIgLlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZDIsIGEyKSBpZ25vcmVkIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdCAtPlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eSAtPlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRfZm10dHlfZWJiXG49IGZ1biBpZ24gZm10IGZtdHR5IC0+XG4gIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSBpblxuICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChpZ24sIGZtdCcpLCBmbXR0eScpXG5cbigqIFR5cGluZyBvZiB0aGUgY29tcGxleCBjYXNlOiBcIiVfKC4uLiUpXCIuICopXG5hbmQgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gOiB0eXBlIHcgeCB5IHogcCBzIHQgdSBhIGIgYyBkIGUgZiAuXG4gICAgKHcsIHgsIHksIHosIHMsIHApIGZtdHR5IC0+XG4gICAgKHAsIHgsIHksIHMsIHQsIHUpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlfZm10X2ViYiA9XG5mdW4gc3ViX2ZtdHR5IGZtdCBmbXR0eSAtPiBtYXRjaCBzdWJfZm10dHksIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKENoYXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFN0cmluZ190eSBzdWJfZm10dHlfcmVzdCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFN0cmluZ190eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnQzMl90eSBzdWJfZm10dHlfcmVzdCwgSW50MzJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IE5hdGl2ZWludF90eSBzdWJfZm10dHlfcmVzdCwgTmF0aXZlaW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKE5hdGl2ZWludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50NjRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDY0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBGbG9hdF90eSBzdWJfZm10dHlfcmVzdCwgRmxvYXRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QsIEJvb2xfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQm9vbF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgQWxwaGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIEFscGhhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBUaGV0YV90eSBzdWJfZm10dHlfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFJlYWRlcl90eSBzdWJfZm10dHlfcmVzdCwgUmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFJlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIElnbm9yZWRfcmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcblxuICB8IEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHksIHN1Yl9mbXR0eV9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgc3ViMl9mbXR0eSA8PiBGbXR0eV9FQkIgc3ViMl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIHN1Yl9mbXR0eV9yZXN0JyksIGZtdCcpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5LCAgc3ViMl9mbXR0eSwgIHN1Yl9mbXR0eV9yZXN0KSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHknLCBzdWIyX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICAoKiBUT0RPIGRlZmluZSBGbXR0eV9yZWxfRUJCIHRvIHJlbW92ZSB0aG9zZSBlcmFzZV9yZWwgKilcbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIxX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIxX2ZtdHR5JylcbiAgICB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMl9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMl9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBzdWJfZm10dHknID0gdHJhbnMgKHN5bW0gc3ViMV9mbXR0eScpIHN1YjJfZm10dHknIGluXG4gICAgbGV0IF8sIGYyLCBfLCBmNCA9IGZtdHR5X3JlbF9kZXQgc3ViX2ZtdHR5JyBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIChlcmFzZV9yZWwgc3ViX2ZtdHR5X3Jlc3QpIGZtdCBmbXR0eV9yZXN0XG4gICAgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHknLCBzdWIyX2ZtdHR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW0gc3ViX2ZtdHR5X3Jlc3QnKSxcbiAgICAgICAgICAgICAgICAgICBmbXQnKVxuICB8IEVuZF9vZl9mbXR0eSwgZm10dHkgLT5cbiAgICBGbXR0eV9mbXRfRUJCIChFbmRfb2ZfZm10dHksIHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkpXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgYHJlY2FzdGAgaXMgYSBiaXQgZGlzYXBwb2ludGluZy4gVGhlXG4gICBpbnZhcmlhbnQgcHJvdmlkZWQgYnkgdGhlIHR5cGUgYXJlIHZlcnkgc3Ryb25nOiB0aGUgaW5wdXQgZm9ybWF0J3NcbiAgIHR5cGUgaXMgaW4gcmVsYXRpb24gdG8gdGhlIG91dHB1dCB0eXBlJ3MgYXMgd2l0bmVzc2VkIGJ5IHRoZVxuICAgZm10dHlfcmVsIGFyZ3VtZW50LiBPbmUgd291bGQgYXQgZmlyc3QgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYmVcbiAgIHRvdGFsLCBhbmQgaW1wbGVtZW50YWJsZSBieSBleGhhdXN0aXZlIHBhdHRlcm4gbWF0Y2hpbmcuIEluc3RlYWQsXG4gICB3ZSByZXVzZSB0aGUgaGlnaGx5IHBhcnRpYWwgYW5kIG11Y2ggbGVzcyB3ZWxsLWRlZmluZWQgZnVuY3Rpb25cbiAgIGB0eXBlX2Zvcm1hdGAgdGhhdCBoYXMgbG9zdCBhbGwga25vd2xlZGdlIG9mIHRoZSBjb3JyZXNwb25kZW5jZVxuICAgYmV0d2VlbiB0aGUgYXJndW1lbnQncyB0eXBlcy5cblxuICAgQmVzaWRlcyB0aGUgZmFjdCB0aGF0IHRoaXMgZnVuY3Rpb24gcmV1c2VzIGEgbG90IG9mIHRoZVxuICAgYHR5cGVfZm9ybWF0YCBsb2dpYyAoZWcuOiBzZWVpbmcgSW50X3R5IGluIHRoZSBmbXR0eSBwYXJhbWV0ZXIgZG9lc1xuICAgbm90IGxldCB5b3UgbWF0Y2ggb24gSW50IG9ubHksIGFzIHlvdSBtYXkgaW4gZmFjdCBoYXZlIEZsb2F0XG4gICAoQXJnX3BhZGRpbmcsIC4uLikgKFwiJS4qZFwiKSBiZWdpbm5pbmcgd2l0aCBhbiBJbnRfdHkpLCBpdCBpcyBhbHNvXG4gICBhIHBhcnRpYWwgZnVuY3Rpb24sIGJlY2F1c2UgdGhlIHR5cGluZyBpbmZvcm1hdGlvbiBpbiBhIGZvcm1hdCBpc1xuICAgbm90IHF1aXRlIGVub3VnaCB0byByZWNvbnN0cnVjdCBpdCB1bmFtYmlndW91c2x5LiBGb3IgZXhhbXBsZSwgdGhlXG4gICBmb3JtYXQgdHlwZXMgb2YgXCIlZCVfclwiIGFuZCBcIiVfciVkXCIgaGF2ZSB0aGUgc2FtZSBmb3JtYXQ2XG4gICBwYXJhbWV0ZXJzLCBidXQgdGhleSBhcmUgbm90IGF0IGFsbCBleGNoYW5nZWFibGUsIGFuZCBwdXR0aW5nIG9uZVxuICAgaW4gcGxhY2Ugb2YgdGhlIG90aGVyIG11c3QgcmVzdWx0IGluIGEgZHluYW1pYyBmYWlsdXJlLlxuXG4gICBHaXZlbiB0aGF0OlxuICAgLSB3ZSdkIGhhdmUgdG8gZHVwbGljYXRlIGEgbG90IG9mIG5vbi10cml2aWFsIHR5cGluZyBsb2dpYyBmcm9tIHR5cGVfZm9ybWF0XG4gICAtIHRoaXMgd291bGRuJ3QgZXZlbiBlbGltaW5hdGUgKGFsbCkgdGhlIGR5bmFtaWMgZmFpbHVyZXNcbiAgIHdlIGRlY2lkZWQgdG8ganVzdCByZXVzZSB0eXBlX2Zvcm1hdCBkaXJlY3RseSBmb3Igbm93LlxuKilcbmxldCByZWNhc3QgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRcbj0gZnVuIGZtdCBmbXR0eSAtPlxuICB0eXBlX2Zvcm1hdCBmbXQgKGVyYXNlX3JlbCAoc3ltbSBmbXR0eSkpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFByaW50aW5nIHRvb2xzICopXG5cbigqIEFkZCBwYWRkaW5nIHNwYWNlcyBhcm91bmQgYSBzdHJpbmcuICopXG5sZXQgZml4X3BhZGRpbmcgcGFkdHkgd2lkdGggc3RyID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCB3aWR0aCwgcGFkdHkgPVxuICAgIGFicyB3aWR0aCxcbiAgICAoKiB3aGlsZSBsaXRlcmFsIHBhZGRpbmcgd2lkdGhzIGFyZSBhbHdheXMgbm9uLW5lZ2F0aXZlLFxuICAgICAgIGR5bmFtaWNhbGx5LXNldCB3aWR0aHMgKEFyZ19wYWRkaW5nLCBlZy4gJSpkKSBtYXkgYmUgbmVnYXRpdmU7XG4gICAgICAgd2UgaW50ZXJwcmV0IHRob3NlIGFzIHNwZWNpZnlpbmcgYSBwYWRkaW5nLXRvLXRoZS1sZWZ0OyB0aGlzXG4gICAgICAgbWVhbnMgdGhhdCAnMCcgbWF5IGdldCBkcm9wcGVkIGV2ZW4gaWYgaXQgd2FzIGV4cGxpY2l0bHkgc2V0LFxuICAgICAgIGJ1dDpcbiAgICAgICAtIHRoaXMgaXMgd2hhdCB0aGUgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRvZXMsIGFuZFxuICAgICAgICAgd2UgcHJlc2VydmUgY29tcGF0aWJpbGl0eSBpZiBwb3NzaWJsZVxuICAgICAgIC0gd2UgY291bGQgb25seSBzaWduYWwgdGhpcyBpc3N1ZSBieSBmYWlsaW5nIGF0IHJ1bnRpbWUsXG4gICAgICAgICB3aGljaCBpcyBub3QgdmVyeSBuaWNlLi4uICopXG4gICAgaWYgd2lkdGggPCAwIHRoZW4gTGVmdCBlbHNlIHBhZHR5IGluXG4gIGlmIHdpZHRoIDw9IGxlbiB0aGVuIHN0ciBlbHNlXG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2Ugd2lkdGggKGlmIHBhZHR5ID0gWmVyb3MgdGhlbiAnMCcgZWxzZSAnICcpIGluXG4gICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgIHwgTGVmdCAgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzIDAgbGVuXG4gICAgfCBSaWdodCAtPiBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHdpZHRoIC0gbGVuKSBsZW5cbiAgICB8IFplcm9zIHdoZW4gbGVuID4gMCAmJiAoc3RyLlswXSA9ICcrJyB8fCBzdHIuWzBdID0gJy0nIHx8IHN0ci5bMF0gPSAnICcpIC0+XG4gICAgICBCeXRlcy5zZXQgcmVzIDAgc3RyLlswXTtcbiAgICAgIFN0cmluZy5ibGl0IHN0ciAxIHJlcyAod2lkdGggLSBsZW4gKyAxKSAobGVuIC0gMSlcbiAgICB8IFplcm9zIHdoZW4gbGVuID4gMSAmJiBzdHIuWzBdID0gJzAnICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICAgIFN0cmluZy5ibGl0IHN0ciAyIHJlcyAod2lkdGggLSBsZW4gKyAyKSAobGVuIC0gMilcbiAgICB8IFplcm9zIC0+XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHdpZHRoIC0gbGVuKSBsZW5cbiAgICBlbmQ7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogQWRkICcwJyBwYWRkaW5nIHRvIGludCwgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NCBzdHJpbmcgcmVwcmVzZW50YXRpb24uICopXG5sZXQgZml4X2ludF9wcmVjaXNpb24gcHJlYyBzdHIgPVxuICBsZXQgcHJlYyA9IGFicyBwcmVjIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBtYXRjaCBzdHIuWzBdIHdpdGhcbiAgfCAoJysnIHwgJy0nIHwgJyAnKSBhcyBjIHdoZW4gcHJlYyArIDEgPiBsZW4gLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSAocHJlYyArIDEpICcwJyBpblxuICAgIEJ5dGVzLnNldCByZXMgMCBjO1xuICAgIFN0cmluZy5ibGl0IHN0ciAxIHJlcyAocHJlYyAtIGxlbiArIDIpIChsZW4gLSAxKTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8ICcwJyB3aGVuIHByZWMgKyAyID4gbGVuICYmIGxlbiA+IDEgJiYgKHN0ci5bMV0gPSAneCcgfHwgc3RyLlsxXSA9ICdYJykgLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSAocHJlYyArIDIpICcwJyBpblxuICAgIEJ5dGVzLnNldCByZXMgMSBzdHIuWzFdO1xuICAgIFN0cmluZy5ibGl0IHN0ciAyIHJlcyAocHJlYyAtIGxlbiArIDQpIChsZW4gLSAyKTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8ICcwJyAuLiAnOScgfCAnYScgLi4gJ2YnIHwgJ0EnIC4uICdGJyB3aGVuIHByZWMgPiBsZW4gLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSBwcmVjICcwJyBpblxuICAgIFN0cmluZy5ibGl0IHN0ciAwIHJlcyAocHJlYyAtIGxlbikgbGVuO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgXyAtPlxuICAgIHN0clxuXG4oKiBFc2NhcGUgYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBPQ2FtbCBsZXhpbmcgY29udmVudGlvbi4gKilcbmxldCBzdHJpbmdfdG9fY2FtbF9zdHJpbmcgc3RyID1cbiAgbGV0IHN0ciA9IFN0cmluZy5lc2NhcGVkIHN0ciBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcXCInIGluXG4gIFN0cmluZy51bnNhZmVfYmxpdCBzdHIgMCByZXMgMSBsO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBHZW5lcmF0ZSB0aGUgZm9ybWF0X2ludC9pbnQzMi9uYXRpdmVpbnQvaW50NjQgZmlyc3QgYXJndW1lbnRcbiAgIGZyb20gYW4gaW50X2NvbnYuICopXG5sZXQgZm9ybWF0X29mX2ljb252ID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVkXCIgfCBJbnRfcGQgLT4gXCIlK2RcIiB8IEludF9zZCAtPiBcIiUgZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlaVwiIHwgSW50X3BpIC0+IFwiJStpXCIgfCBJbnRfc2kgLT4gXCIlIGlcIlxuICB8IEludF94IC0+IFwiJXhcIiB8IEludF9DeCAtPiBcIiUjeFwiXG4gIHwgSW50X1ggLT4gXCIlWFwiIHwgSW50X0NYIC0+IFwiJSNYXCJcbiAgfCBJbnRfbyAtPiBcIiVvXCIgfCBJbnRfQ28gLT4gXCIlI29cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJXVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252TCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlTGRcIiB8IEludF9wZCAtPiBcIiUrTGRcIiB8IEludF9zZCAtPiBcIiUgTGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJUxpXCIgfCBJbnRfcGkgLT4gXCIlK0xpXCIgfCBJbnRfc2kgLT4gXCIlIExpXCJcbiAgfCBJbnRfeCAtPiBcIiVMeFwiIHwgSW50X0N4IC0+IFwiJSNMeFwiXG4gIHwgSW50X1ggLT4gXCIlTFhcIiB8IEludF9DWCAtPiBcIiUjTFhcIlxuICB8IEludF9vIC0+IFwiJUxvXCIgfCBJbnRfQ28gLT4gXCIlI0xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVMdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZsID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVsZFwiIHwgSW50X3BkIC0+IFwiJStsZFwiIHwgSW50X3NkIC0+IFwiJSBsZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbGlcIiB8IEludF9waSAtPiBcIiUrbGlcIiB8IEludF9zaSAtPiBcIiUgbGlcIlxuICB8IEludF94IC0+IFwiJWx4XCIgfCBJbnRfQ3ggLT4gXCIlI2x4XCJcbiAgfCBJbnRfWCAtPiBcIiVsWFwiIHwgSW50X0NYIC0+IFwiJSNsWFwiXG4gIHwgSW50X28gLT4gXCIlbG9cIiB8IEludF9DbyAtPiBcIiUjbG9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJWx1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udm4gPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJW5kXCIgfCBJbnRfcGQgLT4gXCIlK25kXCIgfCBJbnRfc2QgLT4gXCIlIG5kXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVuaVwiIHwgSW50X3BpIC0+IFwiJStuaVwiIHwgSW50X3NpIC0+IFwiJSBuaVwiXG4gIHwgSW50X3ggLT4gXCIlbnhcIiB8IEludF9DeCAtPiBcIiUjbnhcIlxuICB8IEludF9YIC0+IFwiJW5YXCIgfCBJbnRfQ1ggLT4gXCIlI25YXCJcbiAgfCBJbnRfbyAtPiBcIiVub1wiIHwgSW50X0NvIC0+IFwiJSNub1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlbnVcIlxuXG4oKiBHZW5lcmF0ZSB0aGUgZm9ybWF0X2Zsb2F0IGZpcnN0IGFyZ3VtZW50IGZyb20gYSBmbG9hdF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjID1cbiAgICBsZXQgcHJlYyA9IGFicyBwcmVjIGluXG4gICAgbGV0IHN5bWIgPSBjaGFyX29mX2Zjb252IH5jRjonZycgZmNvbnYgaW5cbiAgICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICAgIGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udjtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgcHJlYyk7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBzeW1iO1xuICAgIGJ1ZmZlcl9jb250ZW50cyBidWZcblxubGV0IHRyYW5zZm9ybV9pbnRfYWx0IGljb252IHMgPVxuICBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1IC0+XG4gICAgbGV0IGRpZ2l0cyA9XG4gICAgICBsZXQgbiA9IHJlZiAwIGluXG4gICAgICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgICAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgICB8ICcwJy4uJzknIC0+IGluY3IgblxuICAgICAgICB8IF8gLT4gKClcbiAgICAgIGRvbmU7XG4gICAgICAhblxuICAgIGluXG4gICAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzICsgKGRpZ2l0cyAtIDEpIC8gMykgaW5cbiAgICBsZXQgcG9zID0gcmVmIDAgaW5cbiAgICBsZXQgcHV0IGMgPSBCeXRlcy5zZXQgYnVmICFwb3MgYzsgaW5jciBwb3MgaW5cbiAgICBsZXQgbGVmdCA9IHJlZiAoKGRpZ2l0cyAtIDEpIG1vZCAzICsgMSkgaW5cbiAgICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgJzAnLi4nOScgYXMgYyAtPlxuICAgICAgICAgIGlmICFsZWZ0ID0gMCB0aGVuIChwdXQgJ18nOyBsZWZ0IDo9IDMpOyBkZWNyIGxlZnQ7IHB1dCBjXG4gICAgICB8IGMgLT4gcHV0IGNcbiAgICBkb25lO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmXG4gIHwgXyAtPiBzXG5cbigqIENvbnZlcnQgYW4gaW50ZWdlciB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gYSBjb252ZXJzaW9uLiAqKVxubGV0IGNvbnZlcnRfaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludCAoZm9ybWF0X29mX2ljb252IGljb252KSBuKVxubGV0IGNvbnZlcnRfaW50MzIgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50MzIgKGZvcm1hdF9vZl9pY29udmwgaWNvbnYpIG4pXG5sZXQgY29udmVydF9uYXRpdmVpbnQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfbmF0aXZlaW50IChmb3JtYXRfb2ZfaWNvbnZuIGljb252KSBuKVxubGV0IGNvbnZlcnRfaW50NjQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50NjQgKGZvcm1hdF9vZl9pY29udkwgaWNvbnYpIG4pXG5cbigqIENvbnZlcnQgYSBmbG9hdCB0byBzdHJpbmcuICopXG4oKiBGaXggc3BlY2lhbCBjYXNlIG9mIFwiT0NhbWwgZmxvYXQgZm9ybWF0XCIuICopXG5sZXQgY29udmVydF9mbG9hdCBmY29udiBwcmVjIHggPVxuICBsZXQgaGV4ICgpID1cbiAgICBsZXQgc2lnbiA9XG4gICAgICBtYXRjaCBmc3QgZmNvbnYgd2l0aFxuICAgICAgfCBGbG9hdF9mbGFnX3AgLT4gJysnXG4gICAgICB8IEZsb2F0X2ZsYWdfcyAtPiAnICdcbiAgICAgIHwgXyAtPiAnLScgaW5cbiAgICBoZXhzdHJpbmdfb2ZfZmxvYXQgeCBwcmVjIHNpZ24gaW5cbiAgbGV0IGFkZF9kb3RfaWZfbmVlZGVkIHN0ciA9XG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gICAgbGV0IHJlYyBpc192YWxpZCBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5baV0gd2l0aFxuICAgICAgICB8ICcuJyB8ICdlJyB8ICdFJyAtPiB0cnVlXG4gICAgICAgIHwgXyAtPiBpc192YWxpZCAoaSArIDEpIGluXG4gICAgaWYgaXNfdmFsaWQgMCB0aGVuIHN0ciBlbHNlIHN0ciBeIFwiLlwiIGluXG4gIGxldCBjYW1sX3NwZWNpYWxfdmFsIHN0ciA9IG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IHggd2l0aFxuICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPiBzdHJcbiAgICB8IEZQX2luZmluaXRlIC0+IGlmIHggPCAwLjAgdGhlbiBcIm5lZ19pbmZpbml0eVwiIGVsc2UgXCJpbmZpbml0eVwiXG4gICAgfCBGUF9uYW4gLT4gXCJuYW5cIiBpblxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2ggLT4gaGV4ICgpXG4gIHwgRmxvYXRfSCAtPiBTdHJpbmcudXBwZXJjYXNlX2FzY2lpIChoZXggKCkpXG4gIHwgRmxvYXRfQ0YgLT4gY2FtbF9zcGVjaWFsX3ZhbCAoaGV4ICgpKVxuICB8IEZsb2F0X0YgLT5cbiAgICBsZXQgc3RyID0gZm9ybWF0X2Zsb2F0IChmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYykgeCBpblxuICAgIGNhbWxfc3BlY2lhbF92YWwgKGFkZF9kb3RfaWZfbmVlZGVkIHN0cilcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfRyAtPlxuICAgIGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHhcblxuKCogQ29udmVydCBhIGNoYXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBPQ2FtbCBsZXhpY2FsIGNvbnZlbnRpb24uICopXG5sZXQgZm9ybWF0X2NhbWxfY2hhciBjID1cbiAgbGV0IHN0ciA9IENoYXIuZXNjYXBlZCBjIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKGwgKyAyKSAnXFwnJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogQ29udmVydCBhIGZvcm1hdCB0eXBlIHRvIHN0cmluZyAqKVxubGV0IHN0cmluZ19vZl9mbXR0eSBmbXR0eSA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXR0eSBidWYgZm10dHk7XG4gIGJ1ZmZlcl9jb250ZW50cyBidWZcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICgqIEdlbmVyaWMgcHJpbnRpbmcgZnVuY3Rpb24gKilcblxuKCogTWFrZSBhIGdlbmVyaWMgcHJpbnRpbmcgZnVuY3Rpb24uICopXG4oKiBVc2VkIHRvIGdlbmVyYXRlIFByaW50ZiBhbmQgRm9ybWF0IHByaW50aW5nIGZ1bmN0aW9ucy4gKilcbigqIFBhcmFtZXRlcnM6XG4gICAgIGs6IGEgY29udGludWF0aW9uIGZpbmFsbHkgYXBwbGllZCB0byB0aGUgb3V0cHV0IHN0cmVhbSBhbmQgdGhlIGFjY3VtdWxhdG9yLlxuICAgICBvOiB0aGUgb3V0cHV0IHN0cmVhbSAoc2VlIGssICVhIGFuZCAldCkuXG4gICAgIGFjYzogcmV2IGxpc3Qgb2YgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1c2gsIGZvcm1hdHRpbmcsIC4uLikuXG4gICAgIGZtdDogdGhlIGZvcm1hdC4gKilcbmxldCByZWMgbWFrZV9wcmludGYgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXQgLT4gbWF0Y2ggZm10IHdpdGhcbiAgfCBDaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9jYW1sX2NoYXIgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIChmdW4gc3RyIC0+IHN0cilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCBzdHJpbmdfdG9fY2FtbF9zdHJpbmdcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludCBpY29udlxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQzMiBpY29udlxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfbmF0aXZlaW50IGljb252XG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludDY0IGljb252XG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGZjb252XG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCBzdHJpbmdfb2ZfYm9vbFxuICB8IEFscGhhIHJlc3QgLT5cbiAgICBmdW4gZiB4IC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmdW4gbyAtPiBmIG8geCkpIHJlc3RcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgZnVuIGYgLT4gbWFrZV9wcmludGYgayAoQWNjX2RlbGF5IChhY2MsIGYpKSByZXN0XG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmICgpKVxuICB8IFJlYWRlciBfIC0+XG4gICAgKCogVGhpcyBjYXNlIGlzIGltcG9zc2libGUsIGJ5IHR5cGluZyBvZiBmb3JtYXRzLiAqKVxuICAgICgqIEluZGVlZCwgc2luY2UgcHJpbnRmIGFuZCBjby4gdGFrZSBhIGZvcm1hdDQgYXMgYXJndW1lbnQsIHRoZSAnZCBhbmQgJ2VcbiAgICAgICB0eXBlIHBhcmFtZXRlcnMgb2YgZm10IGFyZSBvYnZpb3VzbHkgZXF1YWxzLiBUaGUgUmVhZGVyIGlzIHRoZVxuICAgICAgIG9ubHkgY29uc3RydWN0b3Igd2hpY2ggdG91Y2ggJ2QgYW5kICdlIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgZm9ybWF0XG4gICAgICAgdHlwZSwgaXQgYWRkcyBhbiAoLT4pIHRvIHRoZSAnZCBwYXJhbWV0ZXJzLiBDb25zZXF1ZW50bHksIGEgZm9ybWF0NFxuICAgICAgIGNhbm5vdCBjb250YWluIGEgUmVhZGVyIG5vZGUsIGV4Y2VwdCBpbiB0aGUgc3ViLWZvcm1hdCBhc3NvY2lhdGVkIHRvXG4gICAgICAgYW4gJXsuLi4lfS4gSXQncyBub3QgYSBwcm9ibGVtIGJlY2F1c2UgbWFrZV9wcmludGYgZG8gbm90IGNhbGxcbiAgICAgICBpdHNlbGYgcmVjdXJzaXZlbHkgb24gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0byAley4uLiV9LiAqKVxuICAgIGFzc2VydCBmYWxzZVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfZmx1c2ggYWNjKSByZXN0XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19zdHJpbmdfbGl0ZXJhbCAoYWNjLCBzdHIpKSByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2NoYXJfbGl0ZXJhbCAoYWNjLCBjaHIpKSByZXN0XG5cbiAgfCBGb3JtYXRfYXJnIChfLCBzdWJfZm10dHksIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gc3RyaW5nX29mX2ZtdHR5IHN1Yl9mbXR0eSBpblxuICAgIChmdW4gc3RyIC0+XG4gICAgICBpZ25vcmUgc3RyO1xuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHR5KSkgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgIGZ1biAoRm9ybWF0IChmbXQsIF8pKSAtPiBtYWtlX3ByaW50ZiBrIGFjY1xuICAgICAgKGNvbmNhdF9mbXQgKHJlY2FzdCBmbXQgZm10dHkpIHJlc3QpXG5cbiAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPlxuICAgIGxldCBuZXdfYWNjID0gQWNjX2ludmFsaWRfYXJnIChhY2MsIFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlW1wiKSBpblxuICAgIGZ1biBfIC0+IG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT5cbiAgICAoKiBUaGlzIGNhc2Ugc2hvdWxkIGJlIHJlZnVzZWQgZm9yIFByaW50Zi4gKilcbiAgICAoKiBBY2NlcHRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKilcbiAgICAoKiBJbnRlcnByZXQgJWwsICVuIGFuZCAlTCBhcyAldS4gKilcbiAgICBmdW4gbiAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZm9ybWF0X2ludCBcIiV1XCIgbikgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX2NoYXIgKGFjYywgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIG1ha2VfaWdub3JlZF9wYXJhbSBrIGFjYyBpZ24gcmVzdFxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfbGl0IChhY2MsIGZtdGluZ19saXQpKSByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBsZXQgaycga2FjYyA9XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19nZW4gKGFjYywgQWNjX29wZW5fdGFnIGthY2MpKSByZXN0IGluXG4gICAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXQnXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBsZXQgaycga2FjYyA9XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19nZW4gKGFjYywgQWNjX29wZW5fYm94IGthY2MpKSByZXN0IGluXG4gICAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXQnXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgayBhY2NcblxuKCogRGVsYXkgdGhlIGVycm9yIChJbnZhbGlkX2FyZ3VtZW50IFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlX1wiKS4gKilcbigqIEdlbmVyYXRlIGZ1bmN0aW9ucyB0byB0YWtlIHJlbWFpbmluZyBhcmd1bWVudHMgKGFmdGVyIHRoZSBcIiVfXCIpLiAqKVxuYW5kIG1ha2VfaWdub3JlZF9wYXJhbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIGZtdHR5IGZtdFxuICB8IElnbm9yZWRfcmVhZGVyICAgICAgICAgICAgICAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG5cblxuKCogU3BlY2lhbCBjYXNlIG9mIHByaW50ZiBcIiVfKFwiLiAqKVxuYW5kIG1ha2VfZnJvbV9mbXR0eSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGZtdHR5IC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXR0eSBmbXQgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFN0cmluZ190eSByZXN0ICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludF90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludDMyX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IE5hdGl2ZWludF90eSByZXN0ICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludDY0X3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEZsb2F0X3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEJvb2xfdHkgcmVzdCAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFscGhhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQW55X3R5IHJlc3QgICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgUmVhZGVyX3R5IF8gICAgICAgICAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgXyAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgRm9ybWF0X2FyZ190eSAoXywgcmVzdCkgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgRW5kX29mX2ZtdHR5ICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIChjb25jYXRfZm10dHkgdHkgcmVzdCkgZm10XG5cbigqIEluc2VydCBhbiBBY2NfaW52YWxpZF9hcmcgaW4gdGhlIGFjY3VtdWxhdG9yIGFuZCBjb250aW51ZSB0byBnZW5lcmF0ZVxuICAgY2xvc3VyZXMgdG8gZ2V0IHRoZSByZW1haW5pbmcgYXJndW1lbnRzLiAqKVxuYW5kIG1ha2VfaW52YWxpZF9hcmcgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXQgLT5cbiAgbWFrZV9wcmludGYgayAoQWNjX2ludmFsaWRfYXJnIChhY2MsIFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlX1wiKSkgZm10XG5cbigqIEZpeCBwYWRkaW5nLCB0YWtlIGl0IGFzIGFuIGV4dHJhIGludGVnZXIgYXJndW1lbnQgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfcGFkZGluZyA6IHR5cGUgeCB6IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB6IC0+IGEpIHBhZGRpbmcgLT4gKHogLT4gc3RyaW5nKSAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgdHJhbnMgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIHRyYW5zIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZml4X3BhZGRpbmcgcGFkdHkgd2lkdGggKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5IC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG5cbigqIEZpeCBwYWRkaW5nIGFuZCBwcmVjaXNpb24gZm9yIGludCwgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NC4gKilcbigqIFRha2Ugb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gOiB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPiAoaW50X2NvbnYgLT4geiAtPiBzdHJpbmcpIC0+XG4gICAgaW50X2NvbnYgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHByZWMgdHJhbnMgaWNvbnYgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IHRyYW5zIGljb252IHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcblxuKCogQ29udmVydCBhIGZsb2F0LCBmaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGlmIG5lZWRlZC4gKilcbigqIFRha2UgdGhlIGZsb2F0IGFyZ3VtZW50IGFuZCBvbmUgb3IgdHdvIGV4dHJhIGludGVnZXIgYXJndW1lbnRzIGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIGZsb2F0IC0+IGEpIHByZWNpc2lvbiAtPiBmbG9hdF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIGZjb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiBwIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbGV0IHN0cicgPSBmaXhfcGFkZGluZyBwYWR0eSB3IHN0ciBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cicpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbGV0IHN0cicgPSBmaXhfcGFkZGluZyBwYWR0eSB3IHN0ciBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cicpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5hbmQgbWFrZV9jdXN0b20gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IHggLT4geSA9XG4gIGZ1biBrIGFjYyByZXN0IGFyaXR5IGYgLT4gbWF0Y2ggYXJpdHkgd2l0aFxuICB8IEN1c3RvbV96ZXJvIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+XG4gICAgZnVuIHggLT5cbiAgICAgIG1ha2VfY3VzdG9tIGsgYWNjIHJlc3QgYXJpdHkgKGYgeClcblxubGV0IGNvbnN0IHggXyA9IHhcblxubGV0IHJlYyBtYWtlX2lwcmludGYgOiB0eXBlIGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbiAgZnVuIGsgbyBmbXQgLT4gbWF0Y2ggZm10IHdpdGhcbiAgICB8IENoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQ2FtbF9zdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfc3RyaW5nIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBOYXRpdmVpbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEludDY0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBGbG9hdCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgQm9vbCAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEJvb2wgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBBbHBoYSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IFRoZXRhIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX2N1c3RvbV9hcml0eSBrIG8gcmVzdCBhcml0eVxuICAgIHwgUmVhZGVyIF8gLT5cbiAgICAgICAgKCogVGhpcyBjYXNlIGlzIGltcG9zc2libGUsIGJ5IHR5cGluZyBvZiBmb3JtYXRzLiAgU2VlIHRoZVxuICAgICAgICAgICBub3RlIGluIHRoZSBjb3JyZXNwb25kaW5nIGNhc2UgZm9yIG1ha2VfcHJpbnRmLiAqKVxuICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICB8IEZsdXNoIHJlc3QgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgRm9ybWF0X2FyZyAoXywgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpIC0+XG4gICAgICAgIGZ1biAoRm9ybWF0IChmbXQsIF8pKSAtPlxuICAgICAgICAgIG1ha2VfaXByaW50ZiBrIG9cbiAgICAgICAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuICAgIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaWdub3JlZF9wYXJhbSAoZnVuIF8gLT4gayBvKSAoRW5kX29mX2FjYykgaWduIHJlc3RcbiAgICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiAoZnVuIGtvYyAtPiBtYWtlX2lwcmludGYgayBrb2MgcmVzdCkgbyBmbXQnXG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgICAgICBrIG9cbmFuZCBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiA6XG4gIHR5cGUgeCB5IHogYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPiBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPiB4ID1cbiAgZnVuIGsgbyBmbXQgcGFkIHByZWMgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgICAsIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBOb19wYWRkaW5nICAgLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgTGl0X3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IExpdF9wYWRkaW5nIF8sIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKSlcbmFuZCBmbl9vZl9jdXN0b21fYXJpdHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+XG4gIHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB5ID1cbiAgZnVuIGsgbyBmbXQgLT4gZnVuY3Rpb25cbiAgICB8IEN1c3RvbV96ZXJvIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gZm10XG4gICAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgICAgICBjb25zdCAoZm5fb2ZfY3VzdG9tX2FyaXR5IGsgbyBmbXQgYXJpdHkpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnRpbnVhdGlvbnMgZm9yIG1ha2VfcHJpbnRmICopXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgbyBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBcIkB7XCI7IG91dHB1dF9hY2MgbyBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBcIkBbXCI7IG91dHB1dF9hY2MgbyBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9jaGFyIG8gY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZiBvXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBmbHVzaCBvXG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgbyBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBidWZwdXRfYWNjIGIgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkB7XCI7IGJ1ZnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAW1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDsgZiBiXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBidWZwdXRfYWNjIGIgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogRGlmZmVyIGZyb20gYnVmcHV0X2FjYyBieSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgJWEgYW5kICV0LiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgc3RycHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBzdHJwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgKGYgKCkpXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBzdHJwdXRfYWNjIGIgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBFcnJvciBtYW5hZ2VtZW50ICopXG5cbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgcHJldHR5LXByaW50ZWQgZXJyb3IgbWVzc2FnZS4gKilcbmxldCBmYWlsd2l0aF9tZXNzYWdlIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBrIGFjYyA9IHN0cnB1dF9hY2MgYnVmIGFjYzsgZmFpbHdpdGggKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXR0aW5nIHRvb2xzICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYW4gb3BlbiBibG9jayBkZXNjcmlwdGlvbiAoaW5kZW50LCBibG9ja190eXBlKSAqKVxubGV0IG9wZW5fYm94X29mX3N0cmluZyBzdHIgPVxuICBpZiBzdHIgPSBcIlwiIHRoZW4gKDAsIFBwX2JveCkgZWxzZVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCBpbnZhbGlkX2JveCAoKSA9IGZhaWx3aXRoX21lc3NhZ2UgXCJpbnZhbGlkIGJveCBkZXNjcmlwdGlvbiAlU1wiIHN0ciBpblxuICAgIGxldCByZWMgcGFyc2Vfc3BhY2VzIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuIGkgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnICcgfCAnXFx0JyAtPiBwYXJzZV9zcGFjZXMgKGkgKyAxKVxuICAgICAgICB8IF8gLT4gaVxuICAgIGFuZCBwYXJzZV9sd29yZCBpIGogPVxuICAgICAgaWYgaiA9IGxlbiB0aGVuIGogZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2pdIHdpdGhcbiAgICAgICAgfCAnYScgLi4gJ3onIC0+IHBhcnNlX2x3b3JkIGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4galxuICAgIGFuZCBwYXJzZV9pbnQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBwYXJzZV9pbnQgaSAoaiArIDEpXG4gICAgICAgIHwgXyAtPiBqIGluXG4gICAgbGV0IHdzdGFydCA9IHBhcnNlX3NwYWNlcyAwIGluXG4gICAgbGV0IHdlbmQgPSBwYXJzZV9sd29yZCB3c3RhcnQgd3N0YXJ0IGluXG4gICAgbGV0IGJveF9uYW1lID0gU3RyaW5nLnN1YiBzdHIgd3N0YXJ0ICh3ZW5kIC0gd3N0YXJ0KSBpblxuICAgIGxldCBuc3RhcnQgPSBwYXJzZV9zcGFjZXMgd2VuZCBpblxuICAgIGxldCBuZW5kID0gcGFyc2VfaW50IG5zdGFydCBuc3RhcnQgaW5cbiAgICBsZXQgaW5kZW50ID1cbiAgICAgIGlmIG5zdGFydCA9IG5lbmQgdGhlbiAwIGVsc2VcbiAgICAgICAgdHJ5IGludF9vZl9zdHJpbmcgKFN0cmluZy5zdWIgc3RyIG5zdGFydCAobmVuZCAtIG5zdGFydCkpXG4gICAgICAgIHdpdGggRmFpbHVyZSBfIC0+IGludmFsaWRfYm94ICgpIGluXG4gICAgbGV0IGV4cF9lbmQgPSBwYXJzZV9zcGFjZXMgbmVuZCBpblxuICAgIGlmIGV4cF9lbmQgPD4gbGVuIHRoZW4gaW52YWxpZF9ib3ggKCk7XG4gICAgbGV0IGJveF90eXBlID0gbWF0Y2ggYm94X25hbWUgd2l0aFxuICAgICAgfCBcIlwiIHwgXCJiXCIgLT4gUHBfYm94XG4gICAgICB8IFwiaFwiICAgICAgLT4gUHBfaGJveFxuICAgICAgfCBcInZcIiAgICAgIC0+IFBwX3Zib3hcbiAgICAgIHwgXCJodlwiICAgICAtPiBQcF9odmJveFxuICAgICAgfCBcImhvdlwiICAgIC0+IFBwX2hvdmJveFxuICAgICAgfCBfICAgICAgICAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIChpbmRlbnQsIGJveF90eXBlKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFBhcnNpbmcgdG9vbHMgKilcblxuKCogQ3JlYXRlIGEgcGFkZGluZ19mbXRfZWJiIGZyb20gYSBwYWRkaW5nIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHBhZGRpbmcgdG8gZGlzam9pbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50IGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgOiB0eXBlIHggeSAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHBhZGRpbmdfZm10X2ViYiA9XG5mdW4gcGFkIGZtdCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgICAgICAgICAtPiBQYWRkaW5nX2ZtdF9FQkIgKE5vX3BhZGRpbmcsIGZtdClcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkZGluZ19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIGZtdClcbiAgfCBBcmdfcGFkZGluZyBzICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChBcmdfcGFkZGluZyBzLCBmbXQpXG5cbigqIENyZWF0ZSBhIHByZWNpc2lvbl9mbXRfZWJiIGZyb20gYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcHJlY2lzaW9uIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgOiB0eXBlIHggeSAuXG4gICAgKHgsIHkpIHByZWNpc2lvbiAtPiAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgICAoXywgXywgXywgXywgXykgcHJlY2lzaW9uX2ZtdF9lYmIgPVxuZnVuIHByZWMgZm10IC0+IG1hdGNoIHByZWMgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiAgICAtPiBQcmVjaXNpb25fZm10X0VCQiAoTm9fcHJlY2lzaW9uLCBmbXQpXG4gIHwgTGl0X3ByZWNpc2lvbiBwIC0+IFByZWNpc2lvbl9mbXRfRUJCIChMaXRfcHJlY2lzaW9uIHAsIGZtdClcbiAgfCBBcmdfcHJlY2lzaW9uICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKEFyZ19wcmVjaXNpb24sIGZtdClcblxuKCogQ3JlYXRlIGEgcGFkcHJlY19mbXRfZWJiIGZyb20gYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIGFuZCB0aGUgcHJlY2lzaW9uIHRvIGRpc2pvaW4gdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50c1xuICAgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3BhZHByZWNfZm10X2ViYiA6IHR5cGUgeCB5IHogdCAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPlxuICAgIChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAoXywgXywgXywgXywgXykgcGFkcHJlY19mbXRfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXQgLT5cbiAgbGV0IFByZWNpc2lvbl9mbXRfRUJCIChwcmVjLCBmbXQnKSA9IG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgcHJlYyBmbXQgaW5cbiAgbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkcHJlY19mbXRfRUJCIChOb19wYWRkaW5nLCBwcmVjLCBmbXQnKVxuICB8IExpdF9wYWRkaW5nIChzLCB3KSAtPiBQYWRwcmVjX2ZtdF9FQkIgKExpdF9wYWRkaW5nIChzLCB3KSwgcHJlYywgZm10JylcbiAgfCBBcmdfcGFkZGluZyBzICAgICAgLT4gUGFkcHJlY19mbXRfRUJCIChBcmdfcGFkZGluZyBzLCBwcmVjLCBmbXQnKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgcGFyc2luZyAqKVxuXG4oKiBQYXJzZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBmb3JtYXQgYW5kIGNyZWF0ZSBhIGZtdF9lYmIuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gaW4gY2FzZSBvZiBpbnZhbGlkIGZvcm1hdC4gKilcbmxldCBmbXRfZWJiX29mX3N0cmluZyA/bGVnYWN5X2JlaGF2aW9yIHN0ciA9XG4gICgqIFBhcmFtZXRlcnMgbmFtaW5nIGNvbnZlbnRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIGxpdF9zdGFydDogc3RhcnQgb2YgdGhlIGxpdGVyYWwgc2VxdWVuY2UuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gc3RyX2luZDogY3VycmVudCBpbmRleCBpbiB0aGUgc3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBlbmRfaW5kOiBlbmQgb2YgdGhlIGN1cnJlbnQgKHN1Yi0pZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHBjdF9pbmQ6IGluZGV4IG9mIHRoZSAnJScgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAqKVxuICAoKiAgIC0gemVybzogIGlzIHRoZSAnMCcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBtaW51czogaXMgdGhlICctJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBsdXM6ICBpcyB0aGUgJysnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gaGFzaDogIGlzIHRoZSAnIycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBzcGFjZTogaXMgdGhlICcgJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGlnbjogICBpcyB0aGUgJ18nIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gcGFkOiBwYWRkaW5nIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwcmVjOiBwcmVjaXNpb24gb2YgdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN5bWI6IGNoYXIgcmVwcmVzZW50aW5nIHRoZSBjb252ZXJzaW9uICgnYycsICdzJywgJ2QnLCAuLi4pLiAqKVxuICAoKiAgIC0gY2hhcl9zZXQ6IHNldCBvZiBjaGFyYWN0ZXJzIGFzIGJpdG1hcCAoc2VlIHNjYW5mICVbLi4uXSkuICAgICopXG5cbiAgbGV0IGxlZ2FjeV9iZWhhdmlvciA9IG1hdGNoIGxlZ2FjeV9iZWhhdmlvciB3aXRoXG4gICAgfCBTb21lIGZsYWcgLT4gZmxhZ1xuICAgIHwgTm9uZSAtPiB0cnVlXG4gICgqICBXaGVuIHRoaXMgZmxhZyBpcyBlbmFibGVkLCB0aGUgZm9ybWF0IHBhcnNlciB0cmllcyB0byBiZWhhdmUgYXNcbiAgICAgIHRoZSA8NC4wMiBpbXBsZW1lbnRhdGlvbnMsIGluIHBhcnRpY3VsYXIgaXQgaWdub3JlcyBtb3N0IGJlbmluZVxuICAgICAgbm9uc2Vuc2ljYWwgZm9ybWF0LiBXaGVuIHRoZSBmbGFnIGlzIGRpc2FibGVkLCBpdCB3aWxsIHJlamVjdCBhbnlcbiAgICAgIGZvcm1hdCB0aGF0IGlzIG5vdCBhY2NlcHRlZCBieSB0aGUgc3BlY2lmaWNhdGlvbi5cblxuICAgICAgQSB0eXBpY2FsIGV4YW1wbGUgd291bGQgYmUgXCIlKyBkXCI6IHNwZWNpZnlpbmcgYm90aCAnKycgKGlmIHRoZVxuICAgICAgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aCBhICcrJyB0byBnZXQgdGhlIHNhbWUgd2lkdGggYXNcbiAgICAgIG5lZ2F0aXZlIG51bWJlcnMpIGFuZCAnICcgKGlmIHRoZSBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoXG4gICAgICBhIHNwYWNlKSBkb2VzIG5vdCBtYWtlIHNlbnNlLCBidXQgdGhlIGxlZ2FjeSAoPCA0LjAyKVxuICAgICAgaW1wbGVtZW50YXRpb24gd2FzIGhhcHB5IHRvIGp1c3QgaWdub3JlIHRoZSBzcGFjZS5cbiAgKilcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UuICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmQgbXNnID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBtc2dcbiAgaW5cblxuICAoKiBVc2VkIHdoZW4gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IChvciB0aGUgY3VycmVudCBzdWItZm9ybWF0KSB3YXMgZW5jb3VudGVyZWRcbiAgICAgIHVuZXhwZWN0ZWRseS4gKilcbiAgbGV0IHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIGVuZF9pbmRcbiAgICAgIFwidW5leHBlY3RlZCBlbmQgb2YgZm9ybWF0XCJcbiAgaW5cblxuICAoKiBVc2VkIGZvciAlMGM6IG5vIG90aGVyIHdpZHRocyBhcmUgaW1wbGVtZW50ZWQgKilcbiAgbGV0IGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZFxuICAgICAgXCJub24temVybyB3aWR0aHMgYXJlIHVuc3VwcG9ydGVkIGZvciAlYyBjb252ZXJzaW9uc1wiXG4gIGluXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiBvcHRpb24gZGVwZW5kZW5jeVxuICAgICBwcm9ibGVtLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfd2l0aG91dCBzdHJfaW5kIGMgcyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJyVjJyB3aXRob3V0ICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIGMgc1xuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiB1bmV4cGVjdGVkXG4gICAgIGNoYXJhY3Rlci4gKilcbiAgbGV0IGV4cGVjdGVkX2NoYXJhY3RlciBzdHJfaW5kIGV4cGVjdGVkIHJlYWQgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXMgZXhwZWN0ZWQsIHJlYWQgJUNcIlxuICAgICAgc3RyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZFxuICBpblxuXG4gICgqIFBhcnNlIHRoZSBzdHJpbmcgZnJvbSBiZWdfaW5kIChpbmNsdWRlZCkgdG8gZW5kX2luZCAoZXhjbHVkZWQpLiAqKVxuICBsZXQgcmVjIHBhcnNlIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGJlZ19pbmQgZW5kX2luZCAtPiBwYXJzZV9saXRlcmFsIGJlZ19pbmQgYmVnX2luZCBlbmRfaW5kXG5cbiAgKCogUmVhZCBsaXRlcmFsIGNoYXJhY3RlcnMgdXAgdG8gJyUnIG9yICdAJyBzcGVjaWFsIGNoYXJhY3RlcnMuICopXG4gIGFuZCBwYXJzZV9saXRlcmFsIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBFbmRfb2ZfZm9ybWF0IGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9mb3JtYXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2FmdGVyX2F0IChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX2xpdGVyYWwgbGl0X3N0YXJ0IChzdHJfaW5kICsgMSkgZW5kX2luZFxuXG4gICgqIFBhcnNlIGEgZm9ybWF0IGFmdGVyICclJyAqKVxuICBhbmQgcGFyc2VfZm9ybWF0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgZW5kX2luZCAtPiBwYXJzZV9pZ24gcGN0X2luZCAocGN0X2luZCArIDEpIGVuZF9pbmRcblxuICBhbmQgcGFyc2VfaWduIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdfJyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIChzdHJfaW5kKzEpIGVuZF9pbmQgdHJ1ZVxuICAgICAgfCBfIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGZhbHNlXG5cbiAgYW5kIHBhcnNlX2ZsYWdzIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiXG4gID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGlnbiAtPlxuICAgIGxldCB6ZXJvID0gcmVmIGZhbHNlIGFuZCBtaW51cyA9IHJlZiBmYWxzZVxuICAgIGFuZCBwbHVzID0gcmVmIGZhbHNlIGFuZCBzcGFjZSA9IHJlZiBmYWxzZVxuICAgIGFuZCBoYXNoID0gcmVmIGZhbHNlIGluXG4gICAgbGV0IHNldF9mbGFnIHN0cl9pbmQgZmxhZyA9XG4gICAgICAoKiBpbiBsZWdhY3kgbW9kZSwgZHVwbGljYXRlIGZsYWdzIGFyZSBhY2NlcHRlZCAqKVxuICAgICAgaWYgIWZsYWcgJiYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBkdXBsaWNhdGUgZmxhZyAlQ1wiXG4gICAgICAgICAgc3RyIHN0cl9pbmQgc3RyLltzdHJfaW5kXTtcbiAgICAgIGZsYWcgOj0gdHJ1ZTtcbiAgICBpblxuICAgIGxldCByZWMgcmVhZF9mbGFncyBzdHJfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzAnIC0+IHNldF9mbGFnIHN0cl9pbmQgemVybzsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnLScgLT4gc2V0X2ZsYWcgc3RyX2luZCBtaW51czsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcrJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHBsdXM7ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyMnIC0+IHNldF9mbGFnIHN0cl9pbmQgaGFzaDsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcgJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHNwYWNlOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kXG4gICAgICAgICAgIXplcm8gIW1pbnVzICFwbHVzICFoYXNoICFzcGFjZSBpZ25cbiAgICAgIGVuZFxuICAgIGluXG4gICAgcmVhZF9mbGFncyBzdHJfaW5kXG5cbiAgKCogVHJ5IHRvIHJlYWQgYSBkaWdpdGFsIG9yIGEgJyonIHBhZGRpbmcuICopXG4gIGFuZCBwYXJzZV9wYWRkaW5nIDogdHlwZSBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgemVybyBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFkdHkgPSBtYXRjaCB6ZXJvLCBtaW51cyB3aXRoXG4gICAgICB8IGZhbHNlLCBmYWxzZSAtPiBSaWdodFxuICAgICAgfCBmYWxzZSwgdHJ1ZSAgLT4gTGVmdFxuICAgICAgfCAgdHJ1ZSwgZmFsc2UgLT4gWmVyb3NcbiAgICAgIHwgIHRydWUsIHRydWUgIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExlZnRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJy0nIFwiMFwiIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICBsZXQgbmV3X2luZCwgd2lkdGggPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIChMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIChBcmdfcGFkZGluZyBwYWR0eSlcbiAgICB8IF8gLT5cbiAgICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICAgIHwgTGVmdCAgLT5cbiAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICctJyBcInBhZGRpbmdcIjtcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgfCBaZXJvcyAtPlxuICAgICAgICAgKCogYSAnMCcgcGFkZGluZyBpbmRpY2F0aW9uIG5vdCBmb2xsb3dlZCBieSBhbnl0aGluZyBzaG91bGRcbiAgICAgICAgICAgYmUgaW50ZXJwcmV0ZWQgYXMgYSBSaWdodCBwYWRkaW5nIG9mIHdpZHRoIDAuIFRoaXMgaXMgdXNlZFxuICAgICAgICAgICBieSBzY2FubmluZyBjb252ZXJzaW9ucyAlMHMgYW5kICUwYyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICAoTGl0X3BhZGRpbmcgKFJpZ2h0LCAwKSlcbiAgICAgIHwgUmlnaHQgLT5cbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgZW5kXG5cbiAgKCogSXMgcHJlY2lzaW9uIGRlZmluZWQ/ICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wYWRkaW5nIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJy4nIC0+XG4gICAgICBwYXJzZV9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWRcbiAgICB8IHN5bWIgLT5cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgTm9fcHJlY2lzaW9uIHBhZCBzeW1iXG5cbiAgKCogUmVhZCB0aGUgZGlnaXRhbCBvciAnKicgcHJlY2lzaW9uLiAqKVxuICBhbmQgcGFyc2VfcHJlY2lzaW9uIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmQgPVxuICAgICAgbGV0IG5ld19pbmQsIHByZWMgPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIHByZWMpIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZFxuICAgIHwgKCcrJyB8ICctJykgYXMgc3ltYiB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPlxuICAgICAgKCogTGVnYWN5IG1vZGUgd291bGQgYWNjZXB0IGFuZCBpZ25vcmUgJysnIG9yICctJyBiZWZvcmUgdGhlXG4gICAgICAgICBpbnRlZ2VyIGRlc2NyaWJpbmcgdGhlIGRlc2lyZWQgcHJlY2lzaW9uOyBub3RlIHRoYXQgdGhpc1xuICAgICAgICAgY2Fubm90IGhhcHBlbiBmb3IgcGFkZGluZyB3aWR0aCwgYXMgJysnIGFuZCAnLScgYWxyZWFkeSBoYXZlXG4gICAgICAgICBhIHNlbWFudGljcyB0aGVyZS5cblxuICAgICAgICAgVGhhdCBzYWlkLCB0aGUgaWRlYSAoc3VwcG9ydGVkIGJ5IHRoaXMgdHdlYWspIHRoYXQgd2lkdGggYW5kXG4gICAgICAgICBwcmVjaXNpb24gbGl0ZXJhbHMgYXJlIFwiaW50ZWdlciBsaXRlcmFsc1wiIGluIHRoZSBPQ2FtbCBzZW5zZSBpc1xuICAgICAgICAgc3RpbGwgYmxhdGFudGx5IHdyb25nLCBhcyAxMjNfNDU2IG9yIDB4RkYgYXJlIHJlamVjdGVkLiAqKVxuICAgICAgcGFyc2VfbGl0ZXJhbCAobWludXMgfHwgc3ltYiA9ICctJykgKHN0cl9pbmQgKyAxKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiBwYWQgQXJnX3ByZWNpc2lvblxuICAgIHwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogbm90ZSB0aGF0IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IGlnbm9yZSAnLicgd2l0aG91dFxuICAgICAgICAgICBhIG51bWJlciAoYXMgaXQgZG9lcyBmb3IgcGFkZGluZyBpbmRpY2F0aW9ucyksIGJ1dFxuICAgICAgICAgICBpbnRlcnByZXRzIGl0IGFzICcuMCcgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gMClcbiAgICAgIGVsc2VcbiAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICcuJyBcInByZWNpc2lvblwiXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wcmVjaXNpb24gOiB0eXBlIHggeSB6IHQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9jb252ICh0eXBlIHUpICh0eXBlIHYpIChwYWRwcmVjIDogKHUsIHYpIHBhZGRpbmcpID1cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgcHJlYyBwYWRwcmVjIHN0ci5bc3RyX2luZF0gaW5cbiAgICAoKiBpbiBsZWdhY3kgbW9kZSwgc29tZSBmb3JtYXRzICglcyBhbmQgJVMpIGFjY2VwdCBhIHdlaXJkIG1peCBvZlxuICAgICAgIHBhZGRpbmcgYW5kIHByZWNpc2lvbiwgd2hpY2ggaXMgbWVyZ2VkIGFzIGEgc2luZ2xlIHBhZGRpbmdcbiAgICAgICBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGluICUuMTBzIHRoZSBwcmVjaXNpb24gaXMgaW1wbGljaXRseVxuICAgICAgIHVuZGVyc3Rvb2QgYXMgcGFkZGluZyAlMTBzLCBidXQgdGhlIGxlZnQtcGFkZGluZyBjb21wb25lbnQgbWF5XG4gICAgICAgYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhIGxlZnQgcGFkZGluZyBvciBhIG5lZ2F0aXZlIHByZWNpc2lvbjpcbiAgICAgICAlLS4zcyBhbmQgJS4tM3MgYXJlIGVxdWl2YWxlbnQgdG8gJS0zcyAqKVxuICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgfCBOb19wYWRkaW5nIC0+IChcbiAgICAgIG1hdGNoIG1pbnVzLCBwcmVjIHdpdGhcbiAgICAgICAgfCBfLCBOb19wcmVjaXNpb24gLT4gcGFyc2VfY29udiBOb19wYWRkaW5nXG4gICAgICAgIHwgZmFsc2UsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoUmlnaHQsIG4pKVxuICAgICAgICB8IHRydWUsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoTGVmdCwgbikpXG4gICAgICAgIHwgZmFsc2UsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgUmlnaHQpXG4gICAgICAgIHwgdHJ1ZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBMZWZ0KVxuICAgIClcbiAgICB8IHBhZCAtPiBwYXJzZV9jb252IHBhZFxuXG4gICgqIENhc2UgYW5hbHlzaXMgb24gY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2NvbnZlcnNpb24gOiB0eXBlIHggeSB6IHQgdSB2IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+ICh4LCB5KSBwYWRkaW5nIC0+XG4gICAgICAgICh6LCB0KSBwcmVjaXNpb24gLT4gKHUsIHYpIHBhZGRpbmcgLT4gY2hhciAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIHBhZHByZWMgc3ltYiAtPlxuICAgICgqIEZsYWdzIHVzZWQgdG8gY2hlY2sgb3B0aW9uIHVzYWdlcy9jb21wYXRpYmlsaXRpZXMuICopXG4gICAgbGV0IHBsdXNfdXNlZCAgPSByZWYgZmFsc2UgYW5kIGhhc2hfdXNlZCA9IHJlZiBmYWxzZVxuICAgIGFuZCBzcGFjZV91c2VkID0gcmVmIGZhbHNlIGFuZCBpZ25fdXNlZCAgID0gcmVmIGZhbHNlXG4gICAgYW5kIHBhZF91c2VkICAgPSByZWYgZmFsc2UgYW5kIHByZWNfdXNlZCAgPSByZWYgZmFsc2UgaW5cblxuICAgICgqIEFjY2VzcyB0byBvcHRpb25zLCB1cGRhdGUgZmxhZ3MuICopXG4gICAgbGV0IGdldF9wbHVzICAgICgpID0gcGx1c191c2VkICA6PSB0cnVlOyBwbHVzXG4gICAgYW5kIGdldF9oYXNoICAgKCkgPSBoYXNoX3VzZWQgOj0gdHJ1ZTsgaGFzaFxuICAgIGFuZCBnZXRfc3BhY2UgICAoKSA9IHNwYWNlX3VzZWQgOj0gdHJ1ZTsgc3BhY2VcbiAgICBhbmQgZ2V0X2lnbiAgICAgKCkgPSBpZ25fdXNlZCAgIDo9IHRydWU7IGlnblxuICAgIGFuZCBnZXRfcGFkICAgICAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkXG4gICAgYW5kIGdldF9wcmVjICAgICgpID0gcHJlY191c2VkICA6PSB0cnVlOyBwcmVjXG4gICAgYW5kIGdldF9wYWRwcmVjICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRwcmVjIGluXG5cbiAgICBsZXQgZ2V0X2ludF9wYWQgKCkgOiAoeCx5KSBwYWRkaW5nID1cbiAgICAgICgqICU1LjNkIGlzIGFjY2VwdGVkIGFuZCBtZWFuaW5nZnVsOiBwYWQgdG8gbGVuZ3RoIDUgd2l0aFxuICAgICAgICAgc3BhY2VzLCBidXQgZmlyc3QgcGFkIHdpdGggemVyb3MgdXB0byBsZW5ndGggMyAoMC1wYWRkaW5nXG4gICAgICAgICBpcyB0aGUgaW50ZXJwcmV0YXRpb24gb2YgXCJwcmVjaXNpb25cIiBmb3IgaW50ZWdlciBmb3JtYXRzKS5cblxuICAgICAgICAgJTA1LjNkIGlzIHJlZHVuZGFudDogcGFkIHRvIGxlbmd0aCA1ICp3aXRoIHplcm9zKiwgYnV0XG4gICAgICAgICBmaXJzdCBwYWQgd2l0aCB6ZXJvcy4uLiBUbyBhZGQgaW5zdWx0IHRvIHRoZSBpbmp1cnksIHRoZVxuICAgICAgICAgbGVnYWN5IGltcGxlbWVudGF0aW9uIGlnbm9yZXMgdGhlIDAtcGFkZGluZyBpbmRpY2F0aW9uIGFuZFxuICAgICAgICAgZG9lcyB0aGUgNSBwYWRkaW5nIHdpdGggc3BhY2VzIGluc3RlYWQuIFdlIHJldXNlIHRoaXNcbiAgICAgICAgIGludGVycHJldGF0aW9uIGZvciBjb21wYXRpYmlsaXR5LCBidXQgc3RhdGljYWxseSByZWplY3QgdGhpc1xuICAgICAgICAgZm9ybWF0IHdoZW4gdGhlIGxlZ2FjeSBtb2RlIGlzIGRpc2FibGVkLCB0byBwcm90ZWN0IHN0cmljdFxuICAgICAgICAgdXNlcnMgZnJvbSB0aGlzIGNvcm5lciBjYXNlLiAqKVxuICAgICAgIG1hdGNoIGdldF9wYWQgKCksIGdldF9wcmVjICgpIHdpdGhcbiAgICAgICAgIHwgcGFkLCBOb19wcmVjaXNpb24gLT4gcGFkXG4gICAgICAgICB8IE5vX3BhZGRpbmcsIF8gICAgIC0+IE5vX3BhZGRpbmdcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCBuKSwgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIG4pXG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIFplcm9zLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IExpdF9wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZFxuICAgICAgICAgfCBBcmdfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWQgaW5cblxuICAgICgqIENoZWNrIHRoYXQgcGFkdHkgPD4gWmVyb3MuICopXG4gICAgbGV0IGNoZWNrX25vXzAgc3ltYiAodHlwZSBhIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgOiAoYSxiKSBwYWRkaW5nID1cbiAgICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nICgoTGVmdCB8IFJpZ2h0KSwgXykgLT4gcGFkXG4gICAgICB8IEFyZ19wYWRkaW5nIChMZWZ0IHwgUmlnaHQpIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgICB8IEFyZ19wYWRkaW5nIFplcm9zIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICBpblxuXG4gICAgKCogR2V0IHBhZGRpbmcgYXMgYSBwYWRfb3B0aW9uIChzZWUgXCIlX1wiLCBcIiV7XCIsIFwiJShcIiBhbmQgXCIlW1wiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBvcHRfb2ZfcGFkIGMgKHR5cGUgYSkgKHR5cGUgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA9IG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gTm9uZVxuICAgICAgfCBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKSAtPiBTb21lIHdpZHRoXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicwJ1wiXG4gICAgICB8IExpdF9wYWRkaW5nIChMZWZ0LCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJy0nXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicqJ1wiXG4gICAgaW5cbiAgICBsZXQgZ2V0X3BhZF9vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZCAoKSkgaW5cbiAgICBsZXQgZ2V0X3BhZHByZWNfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWRwcmVjICgpKSBpblxuXG4gICAgKCogR2V0IHByZWNpc2lvbiBhcyBhIHByZWNfb3B0aW9uIChzZWUgXCIlX2ZcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgZ2V0X3ByZWNfb3B0ICgpID0gbWF0Y2ggZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgfCBOb19wcmVjaXNpb24gICAgICAgLT4gTm9uZVxuICAgICAgfCBMaXRfcHJlY2lzaW9uIG5kZWMgLT4gU29tZSBuZGVjXG4gICAgICB8IEFyZ19wcmVjaXNpb24gICAgICAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJyonXCJcbiAgICBpblxuXG4gICAgbGV0IGZtdF9yZXN1bHQgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICcsJyAtPlxuICAgICAgcGFyc2Ugc3RyX2luZCBlbmRfaW5kXG4gICAgfCAnYycgLT5cbiAgICAgIGxldCBjaGFyX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICVjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChDaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBzY2FuX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICUwYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9zY2FuX25leHRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBiZWdpbiBtYXRjaCBnZXRfcGFkX29wdCAnYycgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIDAgLT4gc2Nhbl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIF9uIC0+XG4gICAgICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3JcbiAgICAgICAgICAgdGhlbiBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kXG4gICAgICAgICAgIGVsc2UgKCogbGVnYWN5IGlnbm9yZXMgJWMgd2lkdGhzICopIGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICBlbmRcbiAgICB8ICdDJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NhbWxfY2hhcixmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKENhbWxfY2hhciBmbXRfcmVzdClcbiAgICB8ICdzJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKFN0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdTJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9jYW1sX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT5cbiAgICAgIGxldCBpY29udiA9IGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdOJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gVG9rZW5fY291bnRlciBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgfCAnbicgfCAnTCcgd2hlbiBzdHJfaW5kPWVuZF9pbmQgfHwgbm90IChpc19pbnRfYmFzZSBzdHIuW3N0cl9pbmRdKSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gY291bnRlcl9vZl9jaGFyIHN5bWIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQzMiAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDMyIChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnbicgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSlcbiAgICAgICAgICAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ0wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQ2NCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDY0IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnZicgfCAnZScgfCAnRScgfCAnZycgfCAnRycgfCAnRicgfCAnaCcgfCAnSCcgLT5cbiAgICAgIGxldCBmY29udiA9XG4gICAgICAgIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmRcbiAgICAgICAgICAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZmxvYXQgKGdldF9wYWRfb3B0ICdfJywgZ2V0X3ByZWNfb3B0ICgpKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChGbG9hdCAoZmNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2InIHwgJ0InIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Jvb2wgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEJvb2wgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnYScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChBbHBoYSBmbXRfcmVzdClcbiAgICB8ICd0JyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKFRoZXRhIGZtdF9yZXN0KVxuICAgIHwgJ3InIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKFJlYWRlciBmbXRfcmVzdClcbiAgICB8ICchJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZsdXNoIGZtdF9yZXN0KVxuICAgIHwgKCclJyB8ICdAJykgYXMgYyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoYywgZm10X3Jlc3QpKVxuICAgIHwgJ3snIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnfScgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ3snLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICcoJyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJyknIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnKCcsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJ1snIC0+XG4gICAgICBsZXQgbmV4dF9pbmQsIGNoYXJfc2V0ID0gcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ18nLCBjaGFyX3NldCkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnWycsIGNoYXJfc2V0LCBmbXRfcmVzdCkpXG4gICAgfCAnLScgfCAnKycgfCAnIycgfCAnICcgfCAnXycgLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGZsYWcgJUMgaXMgb25seSBhbGxvd2VkIGFmdGVyIHRoZSAnJSUnLCBiZWZvcmUgcGFkZGluZyBhbmQgcHJlY2lzaW9uXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgc3ltYlxuICAgIHwgXyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgaW52YWxpZCBjb252ZXJzaW9uIFxcXCIlJSVjXFxcIlwiIHN0ciAoc3RyX2luZCAtIDEpIHN5bWJcbiAgICBpblxuICAgICgqIENoZWNrIGZvciB1bnVzZWQgb3B0aW9ucywgYW5kIHJlamVjdCB0aGVtIGFzIGluY29tcGF0aWJsZS5cblxuICAgICAgIFN1Y2ggY2hlY2tzIG5lZWQgdG8gYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsIGFzIHRoZSBsZWdhY3lcbiAgICAgICBwYXJzZXIgc2lsZW50bHkgaWdub3JlZCBpbmNvbXBhdGlibGUgZmxhZ3MuICopXG4gICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuIGJlZ2luXG4gICAgaWYgbm90ICFwbHVzX3VzZWQgJiYgcGx1cyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiO1xuICAgIGlmIG5vdCAhaGFzaF91c2VkICYmIGhhc2ggdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIjtcbiAgICBpZiBub3QgIXNwYWNlX3VzZWQgJiYgc3BhY2UgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIjtcbiAgICBpZiBub3QgIXBhZF91c2VkICAmJiBQYWRkaW5nX0VCQiBwYWQgPD4gUGFkZGluZ19FQkIgTm9fcGFkZGluZyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcImBwYWRkaW5nJ1wiO1xuICAgIGlmIG5vdCAhcHJlY191c2VkICYmIFByZWNpc2lvbl9FQkIgcHJlYyA8PiBQcmVjaXNpb25fRUJCIE5vX3ByZWNpc2lvbiB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgKGlmIGlnbiB0aGVuICdfJyBlbHNlIHN5bWIpXG4gICAgICAgIFwiYHByZWNpc2lvbidcIjtcbiAgICBpZiBpZ24gJiYgcGx1cyB0aGVuIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKydcIjtcbiAgICBlbmQ7XG4gICAgKCogdGhpcyBsYXN0IHRlc3QgbXVzdCBub3QgYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsXG4gICAgICAgYXMgaWdub3JpbmcgaXQgd291bGQgdHlwaWNhbGx5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0eXBpbmdcbiAgICAgICB0aGFuIHdoYXQgdGhlIGxlZ2FjeSBwYXJzZXIgdXNlZCAqKVxuICAgIGlmIG5vdCAhaWduX3VzZWQgJiYgaWduIHRoZW5cbiAgICAgIGJlZ2luIG1hdGNoIHN5bWIgd2l0aFxuICAgICAgICAoKiBhcmd1bWVudC1sZXNzIGZvcm1hdHMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIGluIGxlZ2FjeSBtb2RlICopXG4gICAgICAgIHwgKCdAJyB8ICclJyB8ICchJyB8ICcsJykgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gKClcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInXydcIlxuICAgICAgZW5kO1xuICAgIGZtdF9yZXN1bHRcblxuICAoKiBQYXJzZSBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIChhZnRlciAnQCcpLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgRW5kX29mX2Zvcm1hdCkpXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdbJyAtPlxuICAgICAgICBwYXJzZV90YWcgZmFsc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICddJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfYm94LCBmbXRfcmVzdCkpXG4gICAgICB8ICd7JyAtPlxuICAgICAgICBwYXJzZV90YWcgdHJ1ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ30nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV90YWcsIGZtdF9yZXN0KSlcbiAgICAgIHwgJywnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJALFwiLCAwLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnICcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAgXCIsIDEsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICc7JyAtPlxuICAgICAgICBwYXJzZV9nb29kX2JyZWFrIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnPycgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZGbHVzaCwgZm10X3Jlc3QpKVxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRm9yY2VfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnLicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZsdXNoX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIHBhcnNlX21hZ2ljX3NpemUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9hdCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgd2hlbiBzdHJfaW5kICsgMSA8IGVuZF9pbmQgJiYgc3RyLltzdHJfaW5kICsgMV0gPSAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfcGVyY2VudCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIGZtdF9yZXN0KSlcbiAgICAgIHwgYyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyBjLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDxuYW1lPiBhZnRlciBcIkB7XCIgb3IgXCJAW1wiLiAqKVxuICBhbmQgcGFyc2VfdGFnIDogdHlwZSBlIGYgLiBib29sIC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gaXNfb3Blbl90YWcgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgdHJ5XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgbGV0IGluZCA9IFN0cmluZy5pbmRleF9mcm9tIHN0ciAoc3RyX2luZCArIDEpICc+JyBpblxuICAgICAgICBpZiBpbmQgPj0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN1Yl9zdHIgPSBTdHJpbmcuc3ViIHN0ciBzdHJfaW5kIChpbmQgLSBzdHJfaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCAoaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKHN1Yl9mbXQsIHN1Yl9zdHIpIGluXG4gICAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoRW5kX29mX2Zvcm1hdCwgXCJcIikgaW5cbiAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPHdpZHRoIG9mZnNldD4gYWZ0ZXIgXCJAO1wiLiAqKVxuICBhbmQgcGFyc2VfZ29vZF9icmVhayA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBsZXQgbmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0ID1cbiAgICAgIHRyeVxuICAgICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB8fCBzdHIuW3N0cl9pbmRdIDw+ICc8JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IChcbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCB3aWR0aCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8zXSB3aXRoXG4gICAgICAgICAgICAgIHwgJz4nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF8zLXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzMgKyAxLCBCcmVhayAocywgd2lkdGgsIDApXG4gICAgICAgICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzQsIG9mZnNldCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8zIGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF81ID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfNCBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzVdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzUtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfNSArIDEsIEJyZWFrIChzLCB3aWR0aCwgb2Zmc2V0KVxuICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgIClcbiAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgc3RyX2luZCwgQnJlYWsgKFwiQDtcIiwgMSwgMClcbiAgICBpblxuICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIHRoZSBzaXplIGluIGEgPG4+LiAqKVxuICBhbmQgcGFyc2VfbWFnaWNfc2l6ZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBtYXRjaFxuICAgICAgdHJ5XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHNpemUgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF8zXSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZCAtIDIpIChzdHJfaW5kXzMgLSBzdHJfaW5kICsgMykgaW5cbiAgICAgICAgICBTb21lIChzdHJfaW5kXzMgKyAxLCBNYWdpY19zaXplIChzLCBzaXplKSlcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIE5vbmVcbiAgICB3aXRoXG4gICAgfCBTb21lIChuZXh0X2luZCwgZm9ybWF0dGluZ19saXQpIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuICAgIHwgTm9uZSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljICc8JywgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIGFuZCBjb25zdHJ1Y3QgYSBjaGFyIHNldC4gKilcbiAgYW5kIHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcblxuICAgIGxldCBjaGFyX3NldCA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICAgIGxldCBhZGRfY2hhciBjID1cbiAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjO1xuICAgIGluXG4gICAgbGV0IGFkZF9yYW5nZSBjIGMnID1cbiAgICAgIGZvciBpID0gaW50X29mX2NoYXIgYyB0byBpbnRfb2ZfY2hhciBjJyBkb1xuICAgICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgKGNoYXJfb2ZfaW50IGkpO1xuICAgICAgZG9uZTtcbiAgICBpblxuXG4gICAgbGV0IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZCA9XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6ICclJScgYWxvbmUgaXMgbm90IGFjY2VwdGVkIGluIGNoYXJhY3RlciBzZXRzLCBcXFxuICAgICAgICAgdXNlICUlJSUgaW5zdGVhZCBhdCBwb3NpdGlvbiAlZC5cIiBzdHIgc3RyX2luZFxuICAgIGluXG5cbiAgICAoKiBQYXJzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgY2hhciBzZXQuICopXG4gICAgbGV0IHJlYyBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGxldCBjID0gc3RyLltzdHJfaW5kXSBpblxuICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogUGFyc2UgdGhlIGNvbnRlbnQgb2YgYSBjaGFyIHNldCB1bnRpbCB0aGUgZmlyc3QgJ10nLiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9jb250ZW50IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFRlc3QgZm9yIHJhbmdlIGluIGNoYXIgc2V0LiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyB3aGVuIGMgPSAnJScgLT5cbiAgICAgICAgYWRkX2NoYXIgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGlmIGMgPSAnJScgdGhlbiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQ7XG4gICAgICAgICgqIG5vdGUgdGhhdCAnQCcgYWxvbmUgaXMgYWNjZXB0ZWQsIGFzIGRvbmUgYnkgdGhlIGxlZ2FjeVxuICAgICAgICAgICBpbXBsZW1lbnRhdGlvbjsgdGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IHJlcXVpcmVzICVAXG4gICAgICAgICAgIHNvIHdlIGNvdWxkIHdhcm4gb24gdGhhdCAqKVxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjJ1xuXG4gICAgKCogTWFuYWdlIHJhbmdlIGluIGNoYXIgc2V0IChleGNlcHQgaWYgdGhlICctJyB0aGUgbGFzdCBjaGFyIGJlZm9yZSAnXScpICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyAtPlxuICAgICAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMikgZW5kX2luZFxuICAgICAgICAgIHwgXyAtPiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmRcbiAgICAgICAgZW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgIGluXG4gICAgbGV0IHN0cl9pbmQsIHJldmVyc2UgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgICB8ICdeJyAtPiBzdHJfaW5kICsgMSwgdHJ1ZVxuICAgICAgICB8IF8gLT4gc3RyX2luZCwgZmFsc2UgaW5cbiAgICBsZXQgbmV4dF9pbmQgPSBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICBsZXQgY2hhcl9zZXQgPSBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgaW5cbiAgICBuZXh0X2luZCwgKGlmIHJldmVyc2UgdGhlbiByZXZfY2hhcl9zZXQgY2hhcl9zZXQgZWxzZSBjaGFyX3NldClcblxuICAoKiBDb25zdW1lIGFsbCBuZXh0IHNwYWNlcywgcmFpc2UgYW4gRmFpbHVyZSBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGlmIHN0ci5bc3RyX2luZF0gPSAnICcgdGhlbiBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGVsc2Ugc3RyX2luZFxuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlIGlmIGVuZF9pbmQgaXNcbiAgICAgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCBhY2MgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gYWNjICogMTAgKyAoaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJykgaW5cbiAgICAgIGlmIG5ld19hY2MgPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogaW50ZWdlciAlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxpbWl0ICVkXCJcbiAgICAgICAgICBzdHIgbmV3X2FjYyBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG5ld19hY2NcbiAgICB8IF8gLT4gc3RyX2luZCwgYWNjXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmVcbiAgICAgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfaW50ZWdlciBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwXG4gICAgfCAnLScgLT4gKFxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgICAgbGV0IG5leHRfaW5kLCBuID0gcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIDAgaW5cbiAgICAgICAgbmV4dF9pbmQsIC1uXG4gICAgICB8IGMgLT5cbiAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJkaWdpdFwiIGNcbiAgICApXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIEFkZCBhIGxpdGVyYWwgdG8gYSBmb3JtYXQgZnJvbSBhIGxpdGVyYWwgY2hhcmFjdGVyIHN1Yi1zZXF1ZW5jZS4gKilcbiAgYW5kIGFkZF9saXRlcmFsIDogdHlwZSBhIGQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gKGEsIF8sIF8sIGQsIGUsIGYpIGZtdCAtPlxuICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZm10IC0+IG1hdGNoIHN0cl9pbmQgLSBsaXRfc3RhcnQgd2l0aFxuICAgIHwgMCAgICAtPiBGbXRfRUJCIGZtdFxuICAgIHwgMSAgICAtPiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKHN0ci5bbGl0X3N0YXJ0XSwgZm10KSlcbiAgICB8IHNpemUgLT4gRm10X0VCQiAoU3RyaW5nX2xpdGVyYWwgKFN0cmluZy5zdWIgc3RyIGxpdF9zdGFydCBzaXplLCBmbXQpKVxuXG4gICgqIFNlYXJjaCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXRcbiAgICAgKGkuZS4gdGhlIGNvcnJlc3BvbmRpbmcgXCIlfVwiIG9yIFwiJSlcIikgKilcbiAgYW5kIHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IHVuY2xvc2VkIHN1Yi1mb3JtYXQsIFxcXG4gICAgICAgICBleHBlY3RlZCBcXFwiJSUlY1xcXCIgYXQgY2hhcmFjdGVyIG51bWJlciAlZFwiIHN0ciBjIGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnJScgLT5cbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgaWYgc3RyLltzdHJfaW5kICsgMV0gPSBjIHRoZW4gKCogRW5kIG9mIGZvcm1hdCBmb3VuZCAqKSBzdHJfaW5kIGVsc2VcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICB8ICdfJyAtPlxuICAgICAgICAgICgqIFNlYXJjaCBmb3IgXCIlXyhcIiBvciBcIiVfe1wiLiAqKVxuICAgICAgICAgIGlmIHN0cl9pbmQgKyAyID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDJdIHdpdGhcbiAgICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCBjXG4gICAgICAgICAgZW5kXG4gICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgKCogJXsuLi4lfSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgKCogJSguLi4lKSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJ30nIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICUoLi4uJX0uICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJyknXCIgJ30nXG4gICAgICAgIHwgJyknIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICV7Li4uJSkuICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJ30nXCIgJyknXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIGVuZFxuICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICgqIENoZWNrIGlmIHN5bWIgaXMgYSB2YWxpZCBpbnQgY29udmVyc2lvbiBhZnRlciBcIiVsXCIsIFwiJW5cIiBvciBcIiVMXCIgKilcbiAgYW5kIGlzX2ludF9iYXNlIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPiB0cnVlXG4gICAgfCBfIC0+IGZhbHNlXG5cbiAgKCogQ29udmVydCBhIGNoYXIgKGwsIG4gb3IgTCkgdG8gaXRzIGFzc29jaWF0ZWQgY291bnRlci4gKilcbiAgYW5kIGNvdW50ZXJfb2ZfY2hhciBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnbCcgLT4gTGluZV9jb3VudGVyICB8ICduJyAtPiBDaGFyX2NvdW50ZXJcbiAgICB8ICdMJyAtPiBUb2tlbl9jb3VudGVyIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBpbnRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBtYXRjaCBwbHVzLCBoYXNoLCBzcGFjZSwgc3ltYiB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X2QgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9pXG4gICAgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnZCcgLT4gSW50X3NkIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2knIC0+IEludF9zaVxuICAgIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9wZCB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfcGlcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd4JyAtPiBJbnRfeCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnWCcgLT4gSW50X1hcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd4JyAtPiBJbnRfQ3ggfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnWCcgLT4gSW50X0NYXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnbycgLT4gSW50X29cbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdvJyAtPiBJbnRfQ29cbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd1JyAtPiBJbnRfdVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2QnIC0+IEludF9DZFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2knIC0+IEludF9DaVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3UnIC0+IEludF9DdVxuICAgIHwgXywgdHJ1ZSwgXywgJ3gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DeFxuICAgIHwgXywgdHJ1ZSwgXywgJ1gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DWFxuICAgIHwgXywgdHJ1ZSwgXywgJ28nIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9Db1xuICAgIHwgXywgdHJ1ZSwgXywgKCdkJyB8ICdpJyB8ICd1JykgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGZhbHNlIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIlxuICAgIHwgdHJ1ZSwgXywgdHJ1ZSwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgdHJ1ZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCJcbiAgICB8IHRydWUsIF8sIGZhbHNlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgZmFsc2UgaGFzaCBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCBmYWxzZSwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzcGFjZSwgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgZmxvYXRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIGxldCBmbGFnID0gbWF0Y2ggcGx1cywgc3BhY2Ugd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfXG4gICAgfCBmYWxzZSwgIHRydWUgLT4gRmxvYXRfZmxhZ19zXG4gICAgfCAgdHJ1ZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19wXG4gICAgfCAgdHJ1ZSwgIHRydWUgLT5cbiAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBGbG9hdF9mbGFnX3BcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiIGluXG4gICAgbGV0IGtpbmQgPSBtYXRjaCBoYXNoLCBzeW1iIHdpdGhcbiAgICB8IF8sICdmJyAtPiBGbG9hdF9mXG4gICAgfCBfLCAnZScgLT4gRmxvYXRfZVxuICAgIHwgXywgJ0UnIC0+IEZsb2F0X0VcbiAgICB8IF8sICdnJyAtPiBGbG9hdF9nXG4gICAgfCBfLCAnRycgLT4gRmxvYXRfR1xuICAgIHwgXywgJ2gnIC0+IEZsb2F0X2hcbiAgICB8IF8sICdIJyAtPiBGbG9hdF9IXG4gICAgfCBmYWxzZSwgJ0YnIC0+IEZsb2F0X0ZcbiAgICB8IHRydWUsICdGJyAtPiBGbG9hdF9DRlxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2UgaW5cbiAgICBmbGFnLCBraW5kXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGluY29tcGF0aWJsZSBvcHRpb25zLiopXG4gIGFuZCBpbmNvbXBhdGlibGVfZmxhZyA6IHR5cGUgYSAuIGludCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmcgLT4gYSA9XG4gICAgZnVuIHBjdF9pbmQgc3RyX2luZCBzeW1iIG9wdGlvbiAtPlxuICAgICAgbGV0IHN1YmZtdCA9IFN0cmluZy5zdWIgc3RyIHBjdF9pbmQgKHN0cl9pbmQgLSBwY3RfaW5kKSBpblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJyVjJyBpbiBzdWItZm9ybWF0ICVTXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgb3B0aW9uIHN5bWIgc3ViZm10XG5cbiAgaW4gcGFyc2UgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAoKiBHdWFyZGVkIHN0cmluZyB0byBmb3JtYXQgY29udmVyc2lvbnMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2ZtdHR5IHN0ciBmbXR0eSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgZm10dHksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCJcbiAgICAgIHN0ciAoc3RyaW5nX29mX2ZtdHR5IGZtdHR5KVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGNvbXBhdGlibGUgd2l0aCBhbiBvdGhlciBmb3JtYXQuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCBzdHIgKEZvcm1hdCAoZm10Jywgc3RyJykpID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCAoZm10dHlfb2ZfZm10IGZtdCcpLCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiIHN0ciBzdHInXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIFhhdmllciBMZXJveSBhbmQgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG5sZXQga2ZwcmludGYgayBvIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBvIGFjYzsgayBvKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGticHJpbnRmIGsgYiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IGJ1ZnB1dF9hY2MgYiBhY2M7IGsgYikgRW5kX29mX2FjYyBmbXRcbmxldCBpa2ZwcmludGYgayBvYyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIG9jIGZtdFxubGV0IGlrYnByaW50ZiA9IGlrZnByaW50ZlxuXG5sZXQgZnByaW50ZiBvYyBmbXQgPSBrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgYnByaW50ZiBiIGZtdCA9IGticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IGlmcHJpbnRmIG9jIGZtdCA9IGlrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgaWJwcmludGYgYiBmbXQgPSBpa2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3Rkb3V0IGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBzdGRlcnIgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGsnIGFjYyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBzdHJwdXRfYWNjIGJ1ZiBhY2M7XG4gICAgayAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXRcblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgKGZ1biBzIC0+IHMpIGZtdFxuXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG4iLCIoKiBDb252X2Vycm9yOiBNb2R1bGUgZm9yIEhhbmRsaW5nIEVycm9ycyBkdXJpbmcgQXV0b21hdGVkIFlvanNvblxuICAgQ29udmVyc2lvbnMgKilcblxub3BlbiEgU3RkTGFiZWxzXG5vcGVuIFlvanNvbl9jb252XG5cbmxldCBzcHJpbnRmID0gUHJpbnRmLnNwcmludGZcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgdHVwbGVzICopXG5cbmxldCB0dXBsZV9vZl9zaXplX25fZXhwZWN0ZWQgbG9jIG4geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiB0dXBsZSBvZiBzaXplICVkIGV4cGVjdGVkXCIgbG9jIG4pIHlvanNvblxuOztcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgc3VtIHR5cGVzICopXG5cbmxldCBzdGFnX25vX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGlzIGNvbnN0cnVjdG9yIGRvZXMgbm90IHRha2UgYXJndW1lbnRzXCIpIHlvanNvblxuOztcblxubGV0IHN0YWdfaW5jb3JyZWN0X25fYXJncyBsb2MgdGFnIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIHNwcmludGYgXCIlc19vZl95b2pzb246IHN1bSB0YWcgJVMgaGFzIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzXCIgbG9jIHRhZ1xuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHN0YWdfdGFrZXNfYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHRoaXMgY29uc3RydWN0b3IgcmVxdWlyZXMgYXJndW1lbnRzXCIpIHlvanNvblxuOztcblxubGV0IG5lc3RlZF9saXN0X2ludmFsaWRfc3VtIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogZXhwZWN0ZWQgYSB2YXJpYW50IHR5cGUsIHNhdyBhIG5lc3RlZCBsaXN0XCIpIHlvanNvblxuOztcblxubGV0IGVtcHR5X2xpc3RfaW52YWxpZF9zdW0gbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBleHBlY3RlZCBhIHZhcmlhbnQgdHlwZSwgc2F3IGFuIGVtcHR5IGxpc3RcIikgeW9qc29uXG47O1xuXG5sZXQgdW5leHBlY3RlZF9zdGFnIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdW5leHBlY3RlZCB2YXJpYW50IGNvbnN0cnVjdG9yXCIpIHlvanNvblxuOztcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgcmVjb3JkcyAqKVxuXG5sZXQgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdCB+bG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgbGV0IGZsZF9uYW1lc19zdHIgPSBTdHJpbmcuY29uY2F0IChMaXN0LnJldiByZXZfZmxkX25hbWVzKSB+c2VwOlwiIFwiIGluXG4gIGxldCBtc2cgPSBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiAlczogJXNcIiBsb2Mgd2hhdCBmbGRfbmFtZXNfc3RyIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX2R1cGxpY2F0ZV9maWVsZHMgbG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdDpcImR1cGxpY2F0ZSBmaWVsZHNcIiB+bG9jIHJldl9mbGRfbmFtZXMgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX2V4dHJhX2ZpZWxkcyBsb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb24gPVxuICByZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIH53aGF0OlwiZXh0cmEgZmllbGRzXCIgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvblxuOztcblxubGV0IHJlYyByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIGZpZWxkcyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gU3RyaW5nLmNvbmNhdCAoTGlzdC5yZXYgZmllbGRzKSB+c2VwOlwiIFwiXG4gIHwgKHRydWUsIGZpZWxkKSA6OiByZXN0IC0+IHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgKGZpZWxkIDo6IGZpZWxkcykgcmVzdFxuICB8IF8gOjogcmVzdCAtPiByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIGZpZWxkcyByZXN0XG47O1xuXG5sZXQgcmVjb3JkX3VuZGVmaW5lZF9lbGVtZW50cyBsb2MgeW9qc29uIGxzdCA9XG4gIGxldCB1bmRlZmluZWQgPSByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIFtdIGxzdCBpblxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiB0aGUgZm9sbG93aW5nIHJlY29yZCBlbGVtZW50cyB3ZXJlIHVuZGVmaW5lZDogJXNcIiBsb2MgdW5kZWZpbmVkXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX2xpc3RfaW5zdGVhZF9hdG9tIGxvYyB5b2pzb24gPVxuICBsZXQgbXNnID0gbG9jIF4gXCJfb2ZfeW9qc29uOiBsaXN0IGluc3RlYWQgb2YgYXRvbSBmb3IgcmVjb3JkIGV4cGVjdGVkXCIgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfcG9seV9maWVsZF92YWx1ZSBsb2MgeW9qc29uID1cbiAgbGV0IG1zZyA9XG4gICAgbG9jXG4gICAgXiBcIl9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IHZhbHVlcyBvZiB0eXBlcyByZXN1bHRpbmcgZnJvbSBwb2x5bW9ycGhpYyByZWNvcmQgXFxcbiAgICAgICBmaWVsZHNcIlxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgcG9seW1vcnBoaWMgdmFyaWFudHMgKilcblxuZXhjZXB0aW9uIE5vX3ZhcmlhbnRfbWF0Y2hcblxubGV0IG5vX3ZhcmlhbnRfbWF0Y2ggKCkgPSByYWlzZSBOb192YXJpYW50X21hdGNoXG5cbmxldCBub19tYXRjaGluZ192YXJpYW50X2ZvdW5kIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogbm8gbWF0Y2hpbmcgdmFyaWFudCBmb3VuZFwiKSB5b2pzb25cbjs7XG5cbmxldCBwdGFnX25vX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IGRvZXMgbm90IHRha2UgYXJndW1lbnRzXCIpIHlvanNvblxuOztcblxubGV0IHB0YWdfaW5jb3JyZWN0X25fYXJncyBsb2MgY25zdHIgeW9qc29uID1cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZlxuICAgICAgXCIlc19vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgdGFnICVTIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c1wiXG4gICAgICBsb2NcbiAgICAgIGNuc3RyXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcHRhZ190YWtlc19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCB0YWcgdGFrZXMgYW4gYXJndW1lbnRcIikgeW9qc29uXG47O1xuXG5sZXQgbmVzdGVkX2xpc3RfaW52YWxpZF9wb2x5X3ZhciBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yXG4gICAgKGxvYyBeIFwiX29mX3lvanNvbjogYSBuZXN0ZWQgbGlzdCBpcyBhbiBpbnZhbGlkIHBvbHltb3JwaGljIHZhcmlhbnRcIilcbiAgICB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV9saXN0X2ludmFsaWRfcG9seV92YXIgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvclxuICAgIChsb2MgXiBcIl9vZl95b2pzb246IHRoZSBlbXB0eSBsaXN0IGlzIGFuIGludmFsaWQgcG9seW1vcnBoaWMgdmFyaWFudFwiKVxuICAgIHlvanNvblxuOztcblxubGV0IGVtcHR5X3R5cGUgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0cnlpbmcgdG8gY29udmVydCBhbiBlbXB0eSB0eXBlXCIpIHlvanNvblxuOztcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXh0ZXJuYWwgaWQgOiAnYSAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmxldCBjb25zdCBjIF8gPSBjXG5sZXQgZmxpcCBmIHggeSA9IGYgeSB4XG5sZXQgbmVnYXRlIHAgdiA9IG5vdCAocCB2KVxuXG5leGNlcHRpb24gRmluYWxseV9yYWlzZWQgb2YgZXhuXG5cbmxldCAoKSA9IFByaW50ZXhjLnJlZ2lzdGVyX3ByaW50ZXIgQEAgZnVuY3Rpb25cbnwgRmluYWxseV9yYWlzZWQgZXhuIC0+IFNvbWUgKFwiRnVuLkZpbmFsbHlfcmFpc2VkOiBcIiBeIFByaW50ZXhjLnRvX3N0cmluZyBleG4pXG58IF8gLT4gTm9uZVxuXG5sZXQgcHJvdGVjdCB+KGZpbmFsbHkgOiB1bml0IC0+IHVuaXQpIHdvcmsgPVxuICBsZXQgZmluYWxseV9ub19leG4gKCkgPVxuICAgIHRyeSBmaW5hbGx5ICgpIHdpdGggZSAtPlxuICAgICAgbGV0IGJ0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIFByaW50ZXhjLnJhaXNlX3dpdGhfYmFja3RyYWNlIChGaW5hbGx5X3JhaXNlZCBlKSBidFxuICBpblxuICBtYXRjaCB3b3JrICgpIHdpdGhcbiAgfCByZXN1bHQgLT4gZmluYWxseV9ub19leG4gKCkgOyByZXN1bHRcbiAgfCBleGNlcHRpb24gd29ya19leG4gLT5cbiAgICAgIGxldCB3b3JrX2J0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIGZpbmFsbHlfbm9fZXhuICgpIDtcbiAgICAgIFByaW50ZXhjLnJhaXNlX3dpdGhfYmFja3RyYWNlIHdvcmtfZXhuIHdvcmtfYnRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTWVzc2FnZSBkaWdlc3QgKE1ENSkgKilcblxudHlwZSB0ID0gc3RyaW5nXG5cbmxldCBjb21wYXJlID0gU3RyaW5nLmNvbXBhcmVcbmxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG5leHRlcm5hbCB1bnNhZmVfc3RyaW5nOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9zdHJpbmdcIlxuZXh0ZXJuYWwgY2hhbm5lbDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfY2hhblwiXG5cbmxldCBzdHJpbmcgc3RyID1cbiAgdW5zYWZlX3N0cmluZyBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbmxldCBieXRlcyBiID0gc3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpXG5cbmxldCBzdWJzdHJpbmcgc3RyIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gU3RyaW5nLmxlbmd0aCBzdHIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9zdHJpbmcgc3RyIG9mcyBsZW5cblxubGV0IHN1YmJ5dGVzIGIgb2ZzIGxlbiA9IHN1YnN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKSBvZnMgbGVuXG5cbmxldCBmaWxlIGZpbGVuYW1lID1cbiAgbGV0IGljID0gb3Blbl9pbl9iaW4gZmlsZW5hbWUgaW5cbiAgbWF0Y2ggY2hhbm5lbCBpYyAoLTEpIHdpdGhcbiAgICB8IGQgLT4gY2xvc2VfaW4gaWM7IGRcbiAgICB8IGV4Y2VwdGlvbiBlIC0+IGNsb3NlX2luIGljOyByYWlzZSBlXG5cbmxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPVxuICBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbmxldCBpbnB1dCBjaGFuID0gcmVhbGx5X2lucHV0X3N0cmluZyBjaGFuIDE2XG5cbmxldCBjaGFyX2hleCBuID1cbiAgQ2hhci51bnNhZmVfY2hyIChuICsgaWYgbiA8IDEwIHRoZW4gQ2hhci5jb2RlICcwJyBlbHNlIChDaGFyLmNvZGUgJ2EnIC0gMTApKVxuXG5sZXQgdG9faGV4IGQgPVxuICBpZiBTdHJpbmcubGVuZ3RoIGQgPD4gMTYgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC50b19oZXhcIjtcbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAzMiBpblxuICBmb3IgaSA9IDAgdG8gMTUgZG9cbiAgICBsZXQgeCA9IENoYXIuY29kZSBkLltpXSBpblxuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIpIChjaGFyX2hleCAoeCBsc3IgNCkpO1xuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIrMSkgKGNoYXJfaGV4ICh4IGxhbmQgMHgwZikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuXG5sZXQgZnJvbV9oZXggcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA8PiAzMiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LmZyb21faGV4XCI7XG4gIGxldCBkaWdpdCBjID1cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8ICcwJy4uJzknIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJ1xuICAgIHwgJ0EnLi4nRicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ0EnICsgMTBcbiAgICB8ICdhJy4uJ2YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdhJyArIDEwXG4gICAgfCBfIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRGlnZXN0LmZyb21faGV4XCIpXG4gIGluXG4gIGxldCBieXRlIGkgPSBkaWdpdCBzLltpXSBsc2wgNCArIGRpZ2l0IHMuW2krMV0gaW5cbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAxNiBpblxuICBmb3IgaSA9IDAgdG8gMTUgZG9cbiAgICBCeXRlcy5zZXQgcmVzdWx0IGkgKENoYXIuY2hyIChieXRlICgyICogaSkpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSGFzaCB0YWJsZXMgKilcblxuKCogV2UgZG8gZHluYW1pYyBoYXNoaW5nLCBhbmQgcmVzaXplIHRoZSB0YWJsZSBhbmQgcmVoYXNoIHRoZSBlbGVtZW50c1xuICAgd2hlbiBidWNrZXRzIGJlY29tZSB0b28gbG9uZy4gKilcblxudHlwZSAoJ2EsICdiKSB0ID1cbiAgeyBtdXRhYmxlIHNpemU6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBudW1iZXIgb2YgZW50cmllcyAqKVxuICAgIG11dGFibGUgZGF0YTogKCdhLCAnYikgYnVja2V0bGlzdCBhcnJheTsgICgqIHRoZSBidWNrZXRzICopXG4gICAgc2VlZDogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIGZvciByYW5kb21pemF0aW9uICopXG4gICAgbXV0YWJsZSBpbml0aWFsX3NpemU6IGludDsgICAgICAgICAgICAgICAgKCogaW5pdGlhbCBhcnJheSBzaXplICopXG4gIH1cblxuYW5kICgnYSwgJ2IpIGJ1Y2tldGxpc3QgPVxuICAgIEVtcHR5XG4gIHwgQ29ucyBvZiB7IG11dGFibGUga2V5OiAnYTtcbiAgICAgICAgICAgICAgbXV0YWJsZSBkYXRhOiAnYjtcbiAgICAgICAgICAgICAgbXV0YWJsZSBuZXh0OiAoJ2EsICdiKSBidWNrZXRsaXN0IH1cblxuKCogVGhlIHNpZ24gb2YgaW5pdGlhbF9zaXplIGVuY29kZXMgdGhlIGZhY3QgdGhhdCBhIHRyYXZlcnNhbCBpc1xuICAgb25nb2luZyBvciBub3QuXG5cbiAgIFRoaXMgZGlzYWJsZXMgdGhlIGVmZmljaWVudCBpbiBwbGFjZSBpbXBsZW1lbnRhdGlvbiBvZiByZXNpemluZy5cbiopXG5cbmxldCBvbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gIHx8IGguaW5pdGlhbF9zaXplIDwgMFxuXG5sZXQgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgaC5pbml0aWFsX3NpemUgPC0gLSBoLmluaXRpYWxfc2l6ZVxuXG4oKiBUbyBwaWNrIHJhbmRvbSBzZWVkcyBpZiByZXF1ZXN0ZWQgKilcblxubGV0IHJhbmRvbWl6ZWRfZGVmYXVsdCA9XG4gIGxldCBwYXJhbXMgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiT0NBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJDQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPiBcIlwiIGluXG4gIFN0cmluZy5jb250YWlucyBwYXJhbXMgJ1InXG5cbmxldCByYW5kb21pemVkID0gcmVmIHJhbmRvbWl6ZWRfZGVmYXVsdFxuXG5sZXQgcmFuZG9taXplICgpID0gcmFuZG9taXplZCA6PSB0cnVlXG5sZXQgaXNfcmFuZG9taXplZCAoKSA9ICFyYW5kb21pemVkXG5cbmxldCBwcm5nID0gbGF6eSAoUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0KCkpXG5cbigqIEZ1bmN0aW9ucyB3aGljaCBhcHBlYXIgYmVmb3JlIHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSBtdXN0IGVpdGhlciBiZVxuICAgaW5kZXBlbmRlbnQgb2YgdGhlIGhhc2ggZnVuY3Rpb24gb3IgdGFrZSBpdCBhcyBhIHBhcmFtZXRlciAoc2VlICMyMjAyIGFuZFxuICAgY29kZSBiZWxvdyB0aGUgZnVuY3RvciBkZWZpbml0aW9ucy4gKilcblxuKCogQ3JlYXRpbmcgYSBmcmVzaCwgZW1wdHkgdGFibGUgKilcblxubGV0IHJlYyBwb3dlcl8yX2Fib3ZlIHggbiA9XG4gIGlmIHggPj0gbiB0aGVuIHhcbiAgZWxzZSBpZiB4ICogMiA+IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4geFxuICBlbHNlIHBvd2VyXzJfYWJvdmUgKHggKiAyKSBuXG5cbmxldCBjcmVhdGUgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaW5pdGlhbF9zaXplID1cbiAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IGluaXRpYWxfc2l6ZSBpblxuICBsZXQgc2VlZCA9IGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpIGVsc2UgMCBpblxuICB7IGluaXRpYWxfc2l6ZSA9IHM7IHNpemUgPSAwOyBzZWVkID0gc2VlZDsgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eSB9XG5cbmxldCBjbGVhciBoID1cbiAgaWYgaC5zaXplID4gMCB0aGVuIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgQXJyYXkuZmlsbCBoLmRhdGEgMCAoQXJyYXkubGVuZ3RoIGguZGF0YSkgRW1wdHlcbiAgZW5kXG5cbmxldCByZXNldCBoID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBoLmRhdGEgaW5cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gICAgfHwgbGVuID0gYWJzIGguaW5pdGlhbF9zaXplIHRoZW5cbiAgICBjbGVhciBoXG4gIGVsc2UgYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBoLmRhdGEgPC0gQXJyYXkubWFrZSAoYWJzIGguaW5pdGlhbF9zaXplKSBFbXB0eVxuICBlbmRcblxubGV0IGNvcHlfYnVja2V0bGlzdCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gRW1wdHlcbiAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICBsZXQgcmVjIGxvb3AgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgIHwgQ29ucyBwcmVjIC0+ICBwcmVjLm5leHQgPC0gclxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgbG9vcCByIG5leHRcbiAgICAgIGluXG4gICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgIGxvb3AgciBuZXh0O1xuICAgICAgclxuXG5sZXQgY29weSBoID0geyBoIHdpdGggZGF0YSA9IEFycmF5Lm1hcCBjb3B5X2J1Y2tldGxpc3QgaC5kYXRhIH1cblxubGV0IGxlbmd0aCBoID0gaC5zaXplXG5cbmxldCBpbnNlcnRfYWxsX2J1Y2tldHMgaW5kZXhmdW4gaW5wbGFjZSBvZGF0YSBuZGF0YSA9XG4gIGxldCBuc2l6ZSA9IEFycmF5Lmxlbmd0aCBuZGF0YSBpblxuICBsZXQgbmRhdGFfdGFpbCA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgbGV0IHJlYyBpbnNlcnRfYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+ICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGFzIGNlbGwgLT5cbiAgICAgICAgbGV0IGNlbGwgPVxuICAgICAgICAgIGlmIGlucGxhY2UgdGhlbiBjZWxsXG4gICAgICAgICAgZWxzZSBDb25zIHtrZXk7IGRhdGE7IG5leHQgPSBFbXB0eX1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG5pZHggPSBpbmRleGZ1biBrZXkgaW5cbiAgICAgICAgYmVnaW4gbWF0Y2ggbmRhdGFfdGFpbC4obmlkeCkgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IG5kYXRhLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gY2VsbDtcbiAgICAgICAgZW5kO1xuICAgICAgICBuZGF0YV90YWlsLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICBpbnNlcnRfYnVja2V0IG5leHRcbiAgaW5cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBvZGF0YSAtIDEgZG9cbiAgICBpbnNlcnRfYnVja2V0IG9kYXRhLihpKVxuICBkb25lO1xuICBpZiBpbnBsYWNlIHRoZW5cbiAgICBmb3IgaSA9IDAgdG8gbnNpemUgLSAxIGRvXG4gICAgICBtYXRjaCBuZGF0YV90YWlsLihpKSB3aXRoXG4gICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gRW1wdHlcbiAgICBkb25lXG5cbmxldCByZXNpemUgaW5kZXhmdW4gaCA9XG4gIGxldCBvZGF0YSA9IGguZGF0YSBpblxuICBsZXQgb3NpemUgPSBBcnJheS5sZW5ndGggb2RhdGEgaW5cbiAgbGV0IG5zaXplID0gb3NpemUgKiAyIGluXG4gIGlmIG5zaXplIDwgU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiBiZWdpblxuICAgIGxldCBuZGF0YSA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgICBsZXQgaW5wbGFjZSA9IG5vdCAob25nb2luZ190cmF2ZXJzYWwgaCkgaW5cbiAgICBoLmRhdGEgPC0gbmRhdGE7ICAgICAgICAgICgqIHNvIHRoYXQgaW5kZXhmdW4gc2VlcyB0aGUgbmV3IGJ1Y2tldCBjb3VudCAqKVxuICAgIGluc2VydF9hbGxfYnVja2V0cyAoaW5kZXhmdW4gaCkgaW5wbGFjZSBvZGF0YSBuZGF0YVxuICBlbmRcblxubGV0IGl0ZXIgZiBoID1cbiAgbGV0IHJlYyBkb19idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgKClcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBmIGtleSBkYXRhOyBkb19idWNrZXQgbmV4dCBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBkb19idWNrZXQgZC4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCByZWMgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gRW1wdHlcbiAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBFbXB0eVxuICAgICAgZW5kXG4gIHwgKENvbnMgKHtrZXk7IGRhdGE7IG5leHR9IGFzIGMpKSBhcyBzbG90IC0+XG4gICAgICBiZWdpbiBtYXRjaCBmIGtleSBkYXRhIHdpdGhcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyBuZXh0XG4gICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBzbG90XG4gICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIHNsb3RcbiAgICAgICAgICBlbmQ7XG4gICAgICAgICAgYy5kYXRhIDwtIGRhdGE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBzbG90IG5leHRcbiAgICAgIGVuZFxuXG5sZXQgZmlsdGVyX21hcF9pbnBsYWNlIGYgaCA9XG4gIGxldCBkID0gaC5kYXRhIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIEVtcHR5IGguZGF0YS4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaFxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IGZvbGQgZiBoIGluaXQgPVxuICBsZXQgcmVjIGRvX2J1Y2tldCBiIGFjY3UgPVxuICAgIG1hdGNoIGIgd2l0aFxuICAgICAgRW1wdHkgLT5cbiAgICAgICAgYWNjdVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGRvX2J1Y2tldCBuZXh0IChmIGtleSBkYXRhIGFjY3UpIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGxldCBhY2N1ID0gcmVmIGluaXQgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBhY2N1IDo9IGRvX2J1Y2tldCBkLihpKSAhYWNjdVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgICFhY2N1XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG50eXBlIHN0YXRpc3RpY3MgPSB7XG4gIG51bV9iaW5kaW5nczogaW50O1xuICBudW1fYnVja2V0czogaW50O1xuICBtYXhfYnVja2V0X2xlbmd0aDogaW50O1xuICBidWNrZXRfaGlzdG9ncmFtOiBpbnQgYXJyYXlcbn1cblxubGV0IHJlYyBidWNrZXRfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFjY3VcbiAgfCBDb25ze25leHR9IC0+IGJ1Y2tldF9sZW5ndGggKGFjY3UgKyAxKSBuZXh0XG5cbmxldCBzdGF0cyBoID1cbiAgbGV0IG1ibCA9XG4gICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gbSBiIC0+IEludC5tYXggbSAoYnVja2V0X2xlbmd0aCAwIGIpKSAwIGguZGF0YSBpblxuICBsZXQgaGlzdG8gPSBBcnJheS5tYWtlIChtYmwgKyAxKSAwIGluXG4gIEFycmF5Lml0ZXJcbiAgICAoZnVuIGIgLT5cbiAgICAgIGxldCBsID0gYnVja2V0X2xlbmd0aCAwIGIgaW5cbiAgICAgIGhpc3RvLihsKSA8LSBoaXN0by4obCkgKyAxKVxuICAgIGguZGF0YTtcbiAgeyBudW1fYmluZGluZ3MgPSBoLnNpemU7XG4gICAgbnVtX2J1Y2tldHMgPSBBcnJheS5sZW5ndGggaC5kYXRhO1xuICAgIG1heF9idWNrZXRfbGVuZ3RoID0gbWJsO1xuICAgIGJ1Y2tldF9oaXN0b2dyYW0gPSBoaXN0byB9XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgdGJsID1cbiAgKCogY2FwdHVyZSBjdXJyZW50IGFycmF5LCBzbyB0aGF0IGV2ZW4gaWYgdGhlIHRhYmxlIGlzIHJlc2l6ZWQgd2VcbiAgICAga2VlcCBpdGVyYXRpbmcgb24gdGhlIHNhbWUgYXJyYXkgKilcbiAgbGV0IHRibF9kYXRhID0gdGJsLmRhdGEgaW5cbiAgKCogc3RhdGU6IGluZGV4ICogbmV4dCBidWNrZXQgdG8gdHJhdmVyc2UgKilcbiAgbGV0IHJlYyBhdXggaSBidWNrICgpID0gbWF0Y2ggYnVjayB3aXRoXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIHRibF9kYXRhXG4gICAgICAgIHRoZW4gU2VxLk5pbFxuICAgICAgICBlbHNlIGF1eChpKzEpIHRibF9kYXRhLihpKSAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBTZXEuQ29ucyAoKGtleSwgZGF0YSksIGF1eCBpIG5leHQpXG4gIGluXG4gIGF1eCAwIEVtcHR5XG5cbmxldCB0b19zZXFfa2V5cyBtID0gU2VxLm1hcCBmc3QgKHRvX3NlcSBtKVxuXG5sZXQgdG9fc2VxX3ZhbHVlcyBtID0gU2VxLm1hcCBzbmQgKHRvX3NlcSBtKVxuXG4oKiBGdW5jdG9yaWFsIGludGVyZmFjZSAqKVxuXG5tb2R1bGUgdHlwZSBIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgU2VlZGVkSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogaW50IC0+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+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZVNlZWRlZChIOiBTZWVkZWRIYXNoZWRUeXBlKTogKFNlZWRlZFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGtleSA9IEgudFxuICAgIHR5cGUgJ2EgaGFzaHRibCA9IChrZXksICdhKSB0XG4gICAgdHlwZSAnYSB0ID0gJ2EgaGFzaHRibFxuICAgIGxldCBjcmVhdGUgPSBjcmVhdGVcbiAgICBsZXQgY2xlYXIgPSBjbGVhclxuICAgIGxldCByZXNldCA9IHJlc2V0XG4gICAgbGV0IGNvcHkgPSBjb3B5XG5cbiAgICBsZXQga2V5X2luZGV4IGgga2V5ID1cbiAgICAgIChILmhhc2ggaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG5cbiAgICBsZXQgYWRkIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICAgICAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxuICAgIGxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICgpXG4gICAgICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBiZWdpblxuICAgICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBuZXh0XG4gICAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2UgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IGMgbmV4dFxuXG4gICAgbGV0IHJlbW92ZSBoIGtleSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IEVtcHR5IGguZGF0YS4oaSlcblxuICAgIGxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbiAgICBsZXQgZmluZCBoIGtleSA9XG4gICAgICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBkMSBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxuICAgIGxldCByZWMgZmluZF9yZWNfb3B0IGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBTb21lIGRhdGEgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHRcblxuICAgIGxldCBmaW5kX29wdCBoIGtleSA9XG4gICAgICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbiAgICBsZXQgZmluZF9hbGwgaCBrZXkgPVxuICAgICAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgW11cbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YT1kOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGQgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICB0cnVlXG4gICAgICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbiAgICBsZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgICAgIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgICAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICAgICAgZW5kXG5cbiAgICBsZXQgbWVtIGgga2V5ID1cbiAgICAgIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgICAgICBILmVxdWFsIGsga2V5IHx8IG1lbV9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCBhZGRfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxuICAgIGxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG5cbiAgICBsZXQgaXRlciA9IGl0ZXJcbiAgICBsZXQgZmlsdGVyX21hcF9pbnBsYWNlID0gZmlsdGVyX21hcF9pbnBsYWNlXG4gICAgbGV0IGZvbGQgPSBmb2xkXG4gICAgbGV0IGxlbmd0aCA9IGxlbmd0aFxuICAgIGxldCBzdGF0cyA9IHN0YXRzXG4gICAgbGV0IHRvX3NlcSA9IHRvX3NlcVxuICAgIGxldCB0b19zZXFfa2V5cyA9IHRvX3NlcV9rZXlzXG4gICAgbGV0IHRvX3NlcV92YWx1ZXMgPSB0b19zZXFfdmFsdWVzXG4gIGVuZFxuXG5tb2R1bGUgTWFrZShIOiBIYXNoZWRUeXBlKTogKFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWQoc3RydWN0XG4gICAgICAgIHR5cGUgdCA9IEgudFxuICAgICAgICBsZXQgZXF1YWwgPSBILmVxdWFsXG4gICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbigqIFBvbHltb3JwaGljIGhhc2ggZnVuY3Rpb24tYmFzZWQgdGFibGVzICopXG4oKiBDb2RlIGluY2x1ZGVkIGJlbG93IHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSB0byBndWFyZCBhZ2FpbnN0IGFjY2lkZW50YWxcbiAgIHVzZSAtIHNlZSAjMjIwMiAqKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cblxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbmxldCBoYXNoX3BhcmFtIG4xIG4yIHggPSBzZWVkZWRfaGFzaF9wYXJhbSBuMSBuMiAwIHhcbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5cbmxldCBrZXlfaW5kZXggaCBrZXkgPVxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNFxuICB0aGVuIChzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJIYXNodGJsOiB1bnN1cHBvcnRlZCBoYXNoIHRhYmxlIGZvcm1hdFwiXG5cbmxldCBhZGQgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxubGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgICgpXG4gIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgZW5kXG4gICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxubGV0IHJlbW92ZSBoIGtleSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbmxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbmxldCBmaW5kIGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG5sZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBOb25lXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbmxldCBmaW5kX29wdCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gTm9uZVxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbmxldCBmaW5kX2FsbCBoIGtleSA9XG4gIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBbXVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiBkYXRhIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxubGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHRydWVcbiAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxubGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBsID0gaC5kYXRhLihpKSBpblxuICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgZW5kXG5cbmxldCBtZW0gaCBrZXkgPVxuICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBmYWxzZVxuICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICBjb21wYXJlIGsga2V5ID0gMCB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxubGV0IGFkZF9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbmxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gIHRibFxuXG5sZXQgcmVidWlsZCA/KHJhbmRvbSA9ICFyYW5kb21pemVkKSBoID1cbiAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IChBcnJheS5sZW5ndGggaC5kYXRhKSBpblxuICBsZXQgc2VlZCA9XG4gICAgaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKExhenkuZm9yY2UgcHJuZylcbiAgICBlbHNlIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5zZWVkXG4gICAgZWxzZSAwIGluXG4gIGxldCBoJyA9IHtcbiAgICBzaXplID0gaC5zaXplO1xuICAgIGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHk7XG4gICAgc2VlZCA9IHNlZWQ7XG4gICAgaW5pdGlhbF9zaXplID0gaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLmluaXRpYWxfc2l6ZSBlbHNlIHNcbiAgfSBpblxuICBpbnNlcnRfYWxsX2J1Y2tldHMgKGtleV9pbmRleCBoJykgZmFsc2UgaC5kYXRhIGgnLmRhdGE7XG4gIGgnXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBQaWVycmUgV2VpcywgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEEgcHJldHR5LXByaW50aW5nIGZhY2lsaXR5IGFuZCBkZWZpbml0aW9uIG9mIGZvcm1hdHRlcnMgZm9yICdwYXJhbGxlbCdcbiAgIChpLmUuIHVucmVsYXRlZCBvciBpbmRlcGVuZGVudCkgcHJldHR5LXByaW50aW5nIG9uIG11bHRpcGxlIG91dCBjaGFubmVscy4gKilcblxuKCpcbiAgIFRoZSBwcmV0dHktcHJpbnRpbmcgZW5naW5lIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy5cbiopXG5cbmxldCBpZCB4ID0geFxuXG4oKiBBIGRldm90ZWQgdHlwZSBmb3Igc2l6ZXMgdG8gYXZvaWQgY29uZnVzaW9uXG4gICBiZXR3ZWVuIHNpemVzIGFuZCBtZXJlIGludGVnZXJzLiAqKVxubW9kdWxlIFNpemUgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHRvX2ludCA6IHQgLT4gaW50XG4gIHZhbCBvZl9pbnQgOiBpbnQgLT4gdFxuICB2YWwgemVybyA6IHRcbiAgdmFsIHVua25vd24gOiB0XG4gIHZhbCBpc19rbm93biA6IHQgLT4gYm9vbFxuZW5kICA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgdG9faW50ID0gaWRcbiAgbGV0IG9mX2ludCA9IGlkXG4gIGxldCB6ZXJvID0gMFxuICBsZXQgdW5rbm93biA9IC0xXG4gIGxldCBpc19rbm93biBuID0gbiA+PSAwXG5lbmRcblxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRpbmcgYm94ZXMgZGVmaW5pdGlvbjpcbiAgIGEgcHJldHR5LXByaW50aW5nIGJveCBpcyBlaXRoZXJcbiAgIC0gaGJveDogaG9yaXpvbnRhbCBib3ggKG5vIGxpbmUgc3BsaXR0aW5nKVxuICAgLSB2Ym94OiB2ZXJ0aWNhbCBib3ggKGV2ZXJ5IGJyZWFrIGhpbnQgc3BsaXRzIHRoZSBsaW5lKVxuICAgLSBodmJveDogaG9yaXpvbnRhbC92ZXJ0aWNhbCBib3hcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIGJveCBpZiBpdCBmaXRzIG9uXG4gICAgICB0aGUgY3VycmVudCBsaW5lLCBvdGhlcndpc2UgdGhlIGJveCBiZWhhdmVzIGFzIGEgdmVydGljYWwgYm94KVxuICAgLSBob3Zib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3hcbiAgICAgKHRoZSBib3ggaXMgY29tcGFjdGluZyBtYXRlcmlhbCwgcHJpbnRpbmcgYXMgbXVjaCBtYXRlcmlhbCBhcyBwb3NzaWJsZVxuICAgICAgb24gZXZlcnkgbGluZXMpXG4gICAtIGJveDogaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjb21wYWN0aW5nIGJveCB3aXRoIGVuaGFuY2VkIGJveCBzdHJ1Y3R1cmVcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGJveCBidXQgYnJlYWsgaGludHMgc3BsaXRcbiAgICAgIHRoZSBsaW5lIGlmIHNwbGl0dGluZyB3b3VsZCBtb3ZlIHRvIHRoZSBsZWZ0KVxuKilcbnR5cGUgYm94X3R5cGUgPSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCB8IFBwX3Zib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHNcblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIHRva2VucyBkZWZpbml0aW9uOlxuICAgYXJlIGVpdGhlciB0ZXh0IHRvIHByaW50IG9yIHByZXR0eSBwcmludGluZ1xuICAgZWxlbWVudHMgdGhhdCBkcml2ZSBpbmRlbnRhdGlvbiBhbmQgbGluZSBzcGxpdHRpbmcuICopXG50eXBlIHBwX3Rva2VuID1cbiAgfCBQcF90ZXh0IG9mIHN0cmluZyAgICAgICAgICAoKiBub3JtYWwgdGV4dCAqKVxuICB8IFBwX2JyZWFrIG9mIHsgICAgICAgICAgICAgICgqIGNvbXBsZXRlIGJyZWFrICopXG4gICAgICBmaXRzOiBzdHJpbmcgKiBpbnQgKiBzdHJpbmc7ICAgKCogbGluZSBpcyBub3Qgc3BsaXQgKilcbiAgICAgIGJyZWFrczogc3RyaW5nICogaW50ICogc3RyaW5nOyAoKiBsaW5lIGlzIHNwbGl0ICopXG4gICAgfVxuICB8IFBwX3RicmVhayBvZiBpbnQgKiBpbnQgICAgICgqIGdvIHRvIG5leHQgdGFidWxhdGlvbiAqKVxuICB8IFBwX3N0YWIgICAgICAgICAgICAgICAgICAgICgqIHNldCBhIHRhYnVsYXRpb24gKilcbiAgfCBQcF9iZWdpbiBvZiBpbnQgKiBib3hfdHlwZSAoKiBiZWdpbm5pbmcgb2YgYSBib3ggKilcbiAgfCBQcF9lbmQgICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSBib3ggKilcbiAgfCBQcF90YmVnaW4gb2YgdGJveCAgICAgICAgICAoKiBiZWdpbm5pbmcgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX3RlbmQgICAgICAgICAgICAgICAgICAgICgqIGVuZCBvZiBhIHRhYnVsYXRpb24gYm94ICopXG4gIHwgUHBfbmV3bGluZSAgICAgICAgICAgICAgICAgKCogdG8gZm9yY2UgYSBuZXdsaW5lIGluc2lkZSBhIGJveCAqKVxuICB8IFBwX2lmX25ld2xpbmUgICAgICAgICAgICAgICgqIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIHRoaXMgdmVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgaGFzIGJlZW4gYnJva2VuICopXG4gIHwgUHBfb3Blbl90YWcgb2Ygc3RhZyAgICAgICAgICgqIG9wZW5pbmcgYSB0YWcgbmFtZSAqKVxuICB8IFBwX2Nsb3NlX3RhZyAgICAgICAgICAgICAgICgqIGNsb3NpbmcgdGhlIG1vc3QgcmVjZW50bHkgb3BlbiB0YWcgKilcblxuYW5kIHN0YWcgPSAuLlxuXG5hbmQgdGJveCA9IFBwX3Rib3ggb2YgaW50IGxpc3QgcmVmICAoKiBUYWJ1bGF0aW9uIGJveCAqKVxuXG50eXBlIHRhZyA9IHN0cmluZ1xudHlwZSBzdGFnICs9IFN0cmluZ190YWcgb2YgdGFnXG5cblxuKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlOlxuICAgcHJldHR5LXByaW50aW5nIG1hdGVyaWFsIGlzIG5vdCB3cml0dGVuIGluIHRoZSBvdXRwdXQgYXMgc29vbiBhcyBlbWl0dGVkO1xuICAgaW5zdGVhZCwgdGhlIG1hdGVyaWFsIGlzIHNpbXBseSByZWNvcmRlZCBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUsXG4gICB1bnRpbCB0aGUgZW5jbG9zaW5nIGJveCBoYXMgYSBrbm93biBjb21wdXRlZCBzaXplIGFuZCBwcm9wZXIgc3BsaXR0aW5nXG4gICBkZWNpc2lvbnMgY2FuIGJlIG1hZGUuXG5cbiAgIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBjb250YWlucyBmb3JtYXR0aW5nIGVsZW1lbnRzIHRvIGJlIHByaW50ZWQuXG4gICBFYWNoIGZvcm1hdHRpbmcgZWxlbWVudCBpcyBhIHR1cGxlIChzaXplLCB0b2tlbiwgbGVuZ3RoKSwgd2hlcmVcbiAgIC0gbGVuZ3RoIGlzIHRoZSBkZWNsYXJlZCBsZW5ndGggb2YgdGhlIHRva2VuLFxuICAgLSBzaXplIGlzIGVmZmVjdGl2ZSBzaXplIG9mIHRoZSB0b2tlbiB3aGVuIGl0IGlzIHByaW50ZWRcbiAgICAgKHNpemUgaXMgc2V0IHdoZW4gdGhlIHNpemUgb2YgdGhlIGJveCBpcyBrbm93biwgc28gdGhhdCBzaXplIG9mIGJyZWFrXG4gICAgICBoaW50cyBhcmUgZGVmaW5pdGl2ZSkuICopXG50eXBlIHBwX3F1ZXVlX2VsZW0gPSB7XG4gIG11dGFibGUgc2l6ZSA6IFNpemUudDtcbiAgdG9rZW4gOiBwcF90b2tlbjtcbiAgbGVuZ3RoIDogaW50O1xufVxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9xdWV1ZSA9IHBwX3F1ZXVlX2VsZW0gUXVldWUudFxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjazogc2Nhbm5pbmcgZWxlbWVudCBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9zY2FuX2VsZW0gPSB7XG4gIGxlZnRfdG90YWwgOiBpbnQ7ICgqIFZhbHVlIG9mIHBwX2xlZnRfdG90YWwgd2hlbiB0aGUgZWxlbWVudCB3YXMgZW5xdWV1ZWQuICopXG4gIHF1ZXVlX2VsZW0gOiBwcF9xdWV1ZV9lbGVtXG59XG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOlxuICAgdGhlIGZvcm1hdHRpbmcgc3RhY2sgY29udGFpbnMgdGhlIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZVxuICAgYm94ZXM7IHRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrIGlzIHVzZWQgdG8gc3BsaXQgdGhlIGxpbmVzXG4gICB3aGlsZSBwcmludGluZyB0b2tlbnMuICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOiBmb3JtYXR0aW5nIHN0YWNrIGVsZW1lbnQgZGVmaW5pdGlvbi5cbiAgIEVhY2ggc3RhY2sgZWxlbWVudCBkZXNjcmliZXMgYSBwcmV0dHktcHJpbnRpbmcgYm94LiAqKVxudHlwZSBwcF9mb3JtYXRfZWxlbSA9IHsgYm94X3R5cGUgOiBib3hfdHlwZTsgd2lkdGggOiBpbnQgfVxuXG4oKiBUaGUgZm9ybWF0dGVyIGRlZmluaXRpb24uXG4gICBFYWNoIGZvcm1hdHRlciB2YWx1ZSBpcyBhIHByZXR0eS1wcmludGVyIGluc3RhbmNlIHdpdGggYWxsIGl0c1xuICAgbWFjaGluZXJ5LiAqKVxudHlwZSBmb3JtYXR0ZXIgPSB7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay4gKilcbiAgcHBfc2Nhbl9zdGFjayA6IHBwX3NjYW5fZWxlbSBTdGFjay50O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjay4gKilcbiAgcHBfZm9ybWF0X3N0YWNrIDogcHBfZm9ybWF0X2VsZW0gU3RhY2sudDtcbiAgcHBfdGJveF9zdGFjayA6IHRib3ggU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHNlbWFudGljcyB0YWcgc3RhY2suICopXG4gIHBwX3RhZ19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgcHBfbWFya19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgKCogVmFsdWUgb2YgcmlnaHQgbWFyZ2luLiAqKVxuICBtdXRhYmxlIHBwX21hcmdpbiA6IGludDtcbiAgKCogTWluaW1hbCBzcGFjZSBsZWZ0IGJlZm9yZSBtYXJnaW4sIHdoZW4gb3BlbmluZyBhIGJveC4gKilcbiAgbXV0YWJsZSBwcF9taW5fc3BhY2VfbGVmdCA6IGludDtcbiAgKCogTWF4aW11bSB2YWx1ZSBvZiBpbmRlbnRhdGlvbjpcbiAgICAgbm8gYm94IGNhbiBiZSBvcGVuZWQgZnVydGhlci4gKilcbiAgbXV0YWJsZSBwcF9tYXhfaW5kZW50IDogaW50O1xuICAoKiBTcGFjZSByZW1haW5pbmcgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbiAgbXV0YWJsZSBwcF9zcGFjZV9sZWZ0IDogaW50O1xuICAoKiBDdXJyZW50IHZhbHVlIG9mIGluZGVudGF0aW9uLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJlbnRfaW5kZW50IDogaW50O1xuICAoKiBUcnVlIHdoZW4gdGhlIGxpbmUgaGFzIGJlZW4gYnJva2VuIGJ5IHRoZSBwcmV0dHktcHJpbnRlci4gKilcbiAgbXV0YWJsZSBwcF9pc19uZXdfbGluZSA6IGJvb2w7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBhbHJlYWR5IHByaW50ZWQuICopXG4gIG11dGFibGUgcHBfbGVmdF90b3RhbCA6IGludDtcbiAgKCogVG90YWwgd2lkdGggb2YgdG9rZW5zIGV2ZXIgcHV0IGluIHF1ZXVlLiAqKVxuICBtdXRhYmxlIHBwX3JpZ2h0X3RvdGFsIDogaW50O1xuICAoKiBDdXJyZW50IG51bWJlciBvZiBvcGVuIGJveGVzLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJfZGVwdGggOiBpbnQ7XG4gICgqIE1heGltdW0gbnVtYmVyIG9mIGJveGVzIHdoaWNoIGNhbiBiZSBzaW11bHRhbmVvdXNseSBvcGVuLiAqKVxuICBtdXRhYmxlIHBwX21heF9ib3hlcyA6IGludDtcbiAgKCogRWxsaXBzaXMgc3RyaW5nLiAqKVxuICBtdXRhYmxlIHBwX2VsbGlwc2lzIDogc3RyaW5nO1xuICAoKiBPdXRwdXQgZnVuY3Rpb24uICopXG4gIG11dGFibGUgcHBfb3V0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQ7XG4gICgqIEZsdXNoaW5nIGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9mbHVzaCA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIG5ldyBsaW5lcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIGJyZWFrIGhpbnRzIHNwYWNlcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X2luZGVudCA6IGludCAtPiB1bml0O1xuICAoKiBBcmUgdGFncyBwcmludGVkID8gKilcbiAgbXV0YWJsZSBwcF9wcmludF90YWdzIDogYm9vbDtcbiAgKCogQXJlIHRhZ3MgbWFya2VkID8gKilcbiAgbXV0YWJsZSBwcF9tYXJrX3RhZ3MgOiBib29sO1xuICAoKiBGaW5kIG9wZW5pbmcgYW5kIGNsb3NpbmcgbWFya2VycyBvZiB0YWdzLiAqKVxuICBtdXRhYmxlIHBwX21hcmtfb3Blbl90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9tYXJrX2Nsb3NlX3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtdXRhYmxlIHBwX3ByaW50X29wZW5fdGFnIDogc3RhZyAtPiB1bml0O1xuICBtdXRhYmxlIHBwX3ByaW50X2Nsb3NlX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxuICBwcF9xdWV1ZSA6IHBwX3F1ZXVlO1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgc3BlY2lmaWMgdGFnIGhhbmRsaW5nIGZ1bmN0aW9ucy4gKilcbnR5cGUgZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fc3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgcHJpbnRfb3Blbl9zdGFnIDogc3RhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV9zdGFnIDogc3RhZyAtPiB1bml0O1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25zIHRvIG91dHB1dCBtYXRlcmlhbC4gKilcbnR5cGUgZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPSB7XG4gIG91dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICBvdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gIG91dF9uZXdsaW5lIDogdW5pdCAtPiB1bml0O1xuICBvdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gIG91dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbn1cblxuXG4oKlxuXG4gIEF1eGlsaWFyaWVzIGFuZCBiYXNpYyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEVudGVyIGEgdG9rZW4gaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2VucXVldWUgc3RhdGUgdG9rZW4gPVxuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBzdGF0ZS5wcF9yaWdodF90b3RhbCArIHRva2VuLmxlbmd0aDtcbiAgUXVldWUuYWRkIHRva2VuIHN0YXRlLnBwX3F1ZXVlXG5cblxubGV0IHBwX2NsZWFyX3F1ZXVlIHN0YXRlID1cbiAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSAxOyBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSAxO1xuICBRdWV1ZS5jbGVhciBzdGF0ZS5wcF9xdWV1ZVxuXG5cbigqIFBwX2luZmluaXR5OiBsYXJnZSB2YWx1ZSBmb3IgZGVmYXVsdCB0b2tlbnMgc2l6ZS5cblxuICAgUHBfaW5maW5pdHkgaXMgZG9jdW1lbnRlZCBhcyBiZWluZyBncmVhdGVyIHRoYW4gMWUxMDsgdG8gYXZvaWRcbiAgIGNvbmZ1c2lvbiBhYm91dCB0aGUgd29yZCAnZ3JlYXRlcicsIHdlIGNob29zZSBwcF9pbmZpbml0eSBncmVhdGVyXG4gICB0aGFuIDFlMTAgKyAxOyBmb3IgY29ycmVjdCBoYW5kbGluZyBvZiB0ZXN0cyBpbiB0aGUgYWxnb3JpdGhtLFxuICAgcHBfaW5maW5pdHkgbXVzdCBiZSBldmVuIG9uZSBtb3JlIHRoYW4gMWUxMCArIDE7IGxldCdzIHN0YW5kIG9uIHRoZVxuICAgc2FmZSBzaWRlIGJ5IGNob29zaW5nIDEuZTEwKzEwLlxuXG4gICBQcF9pbmZpbml0eSBjb3VsZCBwcm9iYWJseSBiZSAxMDczNzQxODIzIHRoYXQgaXMgMl4zMCAtIDEsIHRoYXQgaXNcbiAgIHRoZSBtaW5pbWFsIHVwcGVyIGJvdW5kIGZvciBpbnRlZ2Vyczsgbm93IHRoYXQgbWF4X2ludCBpcyBkZWZpbmVkLFxuICAgdGhpcyBsaW1pdCBjb3VsZCBhbHNvIGJlIGRlZmluZWQgYXMgbWF4X2ludCAtIDEuXG5cbiAgIEhvd2V2ZXIsIGJlZm9yZSBzZXR0aW5nIHBwX2luZmluaXR5IHRvIHNvbWV0aGluZyBhcm91bmQgbWF4X2ludCwgd2VcbiAgIG11c3QgY2FyZWZ1bGx5IGRvdWJsZS1jaGVjayBhbGwgdGhlIGludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zXG4gICB0aGF0IGludm9sdmUgcHBfaW5maW5pdHksIHNpbmNlIGFueSBvdmVyZmxvdyB3b3VsZCB3cmVjayBoYXZvYyB0aGVcbiAgIHByZXR0eS1wcmludGluZyBhbGdvcml0aG0ncyBpbnZhcmlhbnRzLiBHaXZlbiB0aGF0IHRoaXMgYXJpdGhtZXRpY1xuICAgY29ycmVjdG5lc3MgY2hlY2sgaXMgZGlmZmljdWx0IGFuZCBlcnJvciBwcm9uZSBhbmQgZ2l2ZW4gdGhhdCAxZTEwXG4gICArIDEgaXMgaW4gcHJhY3RpY2UgbGFyZ2UgZW5vdWdoLCB0aGVyZSBpcyBubyBuZWVkIHRvIGF0dGVtcHQgdG8gc2V0XG4gICBwcF9pbmZpbml0eSB0byB0aGUgdGhlb3JldGljYWxseSBtYXhpbXVtIGxpbWl0LiBJdCBpcyBub3Qgd29ydGggdGhlXG4gICBidXJkZW4gISAqKVxubGV0IHBwX2luZmluaXR5ID0gMTAwMDAwMDAxMFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIGZvciB0aGUgZm9ybWF0dGVyLiAqKVxubGV0IHBwX291dHB1dF9zdHJpbmcgc3RhdGUgcyA9IHN0YXRlLnBwX291dF9zdHJpbmcgcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5hbmQgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZSAoKVxuYW5kIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9zcGFjZXMgblxuYW5kIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9pbmRlbnQgblxuXG4oKiBGb3JtYXQgYSB0ZXh0dWFsIHRva2VuICopXG5sZXQgZm9ybWF0X3BwX3RleHQgc3RhdGUgc2l6ZSB0ZXh0ID1cbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gc2l6ZTtcbiAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSB0ZXh0O1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSBmYWxzZVxuXG4oKiBGb3JtYXQgYSBzdHJpbmcgYnkgaXRzIGxlbmd0aCwgaWYgbm90IGVtcHR5ICopXG5sZXQgZm9ybWF0X3N0cmluZyBzdGF0ZSBzID1cbiAgaWYgcyA8PiBcIlwiIHRoZW4gZm9ybWF0X3BwX3RleHQgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG4oKiBUbyBmb3JtYXQgYSBicmVhaywgaW5kZW50aW5nIGEgbmV3IGxpbmUuICopXG5sZXQgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKGJlZm9yZSwgb2Zmc2V0LCBhZnRlcikgd2lkdGggPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX2lzX25ld19saW5lIDwtIHRydWU7XG4gIGxldCBpbmRlbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZnNldCBpblxuICAoKiBEb24ndCBpbmRlbnQgbW9yZSB0aGFuIHBwX21heF9pbmRlbnQuICopXG4gIGxldCByZWFsX2luZGVudCA9IEludC5taW4gc3RhdGUucHBfbWF4X2luZGVudCBpbmRlbnQgaW5cbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gcmVhbF9pbmRlbnQ7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfY3VycmVudF9pbmRlbnQ7XG4gIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgc3RhdGUucHBfY3VycmVudF9pbmRlbnQ7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBmb3JjZSBhIGxpbmUgYnJlYWsgaW5zaWRlIGEgYm94OiBubyBvZmZzZXQgaXMgYWRkZWQuICopXG5sZXQgYnJlYWtfbGluZSBzdGF0ZSB3aWR0aCA9IGJyZWFrX25ld19saW5lIHN0YXRlIChcIlwiLCAwLCBcIlwiKSB3aWR0aFxuXG4oKiBUbyBmb3JtYXQgYSBicmVhayB0aGF0IGZpdHMgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbmxldCBicmVha19zYW1lX2xpbmUgc3RhdGUgKGJlZm9yZSwgd2lkdGgsIGFmdGVyKSA9XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYmVmb3JlO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgLSB3aWR0aDtcbiAgcHBfb3V0cHV0X3NwYWNlcyBzdGF0ZSB3aWR0aDtcbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBhZnRlclxuXG5cbigqIFRvIGluZGVudCBubyBtb3JlIHRoYW4gcHBfbWF4X2luZGVudCwgaWYgb25lIHRyaWVzIHRvIG9wZW4gYSBib3hcbiAgIGJleW9uZCBwcF9tYXhfaW5kZW50LCB0aGVuIHRoZSBib3ggaXMgcmVqZWN0ZWQgb24gdGhlIGxlZnRcbiAgIGJ5IHNpbXVsYXRpbmcgYSBicmVhay4gKilcbmxldCBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICB8IE5vbmUgLT4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGVcbiAgfCBTb21lIHsgYm94X3R5cGU7IHdpZHRoIH0gLT5cbiAgICBpZiB3aWR0aCA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlblxuICAgICAgbWF0Y2ggYm94X3R5cGUgd2l0aFxuICAgICAgfCBQcF9maXRzIHwgUHBfaGJveCAtPiAoKVxuICAgICAgfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuXG5cbigqIFRvIHNraXAgYSB0b2tlbiwgaWYgdGhlIHByZXZpb3VzIGxpbmUgaGFzIGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3NraXBfdG9rZW4gc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS50YWtlX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBwcmludF9pZl9uZXdsaW5lIG11c3QgaGF2ZSBiZWVuIHRoZSBsYXN0IHByaW50aW5nIGNvbW1hbmQgKilcbiAgfCBTb21lIHsgc2l6ZTsgbGVuZ3RoOyBfIH0gLT5cbiAgICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIHN0YXRlLnBwX2xlZnRfdG90YWwgLSBsZW5ndGg7XG4gICAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0ICsgU2l6ZS50b19pbnQgc2l6ZVxuXG5cbigqXG5cbiAgVGhlIG1haW4gcHJldHR5IHByaW50aW5nIGZ1bmN0aW9ucy5cblxuKilcblxuKCogRm9ybWF0dGluZyBhIHRva2VuIHdpdGggYSBnaXZlbiBzaXplLiAqKVxubGV0IGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplID0gZnVuY3Rpb25cblxuICB8IFBwX3RleHQgcyAtPlxuICAgIGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgc1xuXG4gIHwgUHBfYmVnaW4gKG9mZiwgdHkpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBpZiBpbnNlcnRpb25fcG9pbnQgPiBzdGF0ZS5wcF9tYXhfaW5kZW50IHRoZW5cbiAgICAgICgqIGNhbiBub3Qgb3BlbiBhIGJveCByaWdodCB0aGVyZS4gKilcbiAgICAgIGJlZ2luIHBwX2ZvcmNlX2JyZWFrX2xpbmUgc3RhdGUgZW5kO1xuICAgIGxldCB3aWR0aCA9IHN0YXRlLnBwX3NwYWNlX2xlZnQgLSBvZmYgaW5cbiAgICBsZXQgYm94X3R5cGUgPVxuICAgICAgbWF0Y2ggdHkgd2l0aFxuICAgICAgfCBQcF92Ym94IC0+IFBwX3Zib3hcbiAgICAgIHwgUHBfaGJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IHwgUHBfZml0cyAtPlxuICAgICAgICBpZiBzaXplID4gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuIHR5IGVsc2UgUHBfZml0cyBpblxuICAgIFN0YWNrLnB1c2ggeyBib3hfdHlwZTsgd2lkdGggfSBzdGF0ZS5wcF9mb3JtYXRfc3RhY2tcblxuICB8IFBwX2VuZCAtPlxuICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHw+IGlnbm9yZVxuXG4gIHwgUHBfdGJlZ2luIChQcF90Ym94IF8gYXMgdGJveCkgLT5cbiAgICBTdGFjay5wdXNoIHRib3ggc3RhdGUucHBfdGJveF9zdGFja1xuXG4gIHwgUHBfdGVuZCAtPlxuICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3N0YWIgLT5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHJlYyBhZGRfdGFiIG4gPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IFtuXVxuICAgICAgICB8IHggOjogbCBhcyBscyAtPiBpZiBuIDwgeCB0aGVuIG4gOjogbHMgZWxzZSB4IDo6IGFkZF90YWIgbiBsIGluXG4gICAgICB0YWJzIDo9IGFkZF90YWIgKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQpICF0YWJzXG4gICAgZW5kXG5cbiAgfCBQcF90YnJlYWsgKG4sIG9mZikgLT5cbiAgICBsZXQgaW5zZXJ0aW9uX3BvaW50ID0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCBpblxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gdGFidWxhdGlvbiBib3guICopXG4gICAgfCBTb21lIChQcF90Ym94IHRhYnMpIC0+XG4gICAgICBsZXQgdGFiID1cbiAgICAgICAgbWF0Y2ggIXRhYnMgd2l0aFxuICAgICAgICB8IFtdIC0+IGluc2VydGlvbl9wb2ludFxuICAgICAgICB8IGZpcnN0IDo6IF8gLT5cbiAgICAgICAgICBsZXQgcmVjIGZpbmQgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCBoZWFkIDo6IHRhaWwgLT5cbiAgICAgICAgICAgICAgaWYgaGVhZCA+PSBpbnNlcnRpb25fcG9pbnQgdGhlbiBoZWFkIGVsc2UgZmluZCB0YWlsXG4gICAgICAgICAgICB8IFtdIC0+IGZpcnN0IGluXG4gICAgICAgICAgZmluZCAhdGFicyBpblxuICAgICAgbGV0IG9mZnNldCA9IHRhYiAtIGluc2VydGlvbl9wb2ludCBpblxuICAgICAgaWYgb2Zmc2V0ID49IDBcbiAgICAgIHRoZW4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIChcIlwiLCBvZmZzZXQgKyBuLCBcIlwiKVxuICAgICAgZWxzZSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgdGFiICsgb2ZmLCBcIlwiKSBzdGF0ZS5wcF9tYXJnaW5cbiAgICBlbmRcblxuICB8IFBwX25ld2xpbmUgLT5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IHdpZHRoOyBffSAtPiBicmVha19saW5lIHN0YXRlIHdpZHRoXG4gICAgZW5kXG5cbiAgfCBQcF9pZl9uZXdsaW5lIC0+XG4gICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgIT0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgIHRoZW4gcHBfc2tpcF90b2tlbiBzdGF0ZVxuXG4gIHwgUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSAtPlxuICAgIGxldCBiZWZvcmUsIG9mZiwgXyA9IGJyZWFrcyBpblxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiBib3guICopXG4gICAgfCBTb21lIHsgYm94X3R5cGU7IHdpZHRoIH0gLT5cbiAgICAgIGJlZ2luIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfaG92Ym94IC0+XG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgICAgZWxzZSBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF9ib3ggLT5cbiAgICAgICAgKCogSGF2ZSB0aGUgbGluZSBqdXN0IGJlZW4gYnJva2VuIGhlcmUgPyAqKVxuICAgICAgICBpZiBzdGF0ZS5wcF9pc19uZXdfbGluZSB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzIGVsc2VcbiAgICAgICAgaWYgc2l6ZSArIFN0cmluZy5sZW5ndGggYmVmb3JlID4gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoIGVsc2VcbiAgICAgICAgKCogYnJlYWsgdGhlIGxpbmUgaGVyZSBsZWFkcyB0byBuZXcgaW5kZW50YXRpb24gPyAqKVxuICAgICAgICBpZiBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA+IHN0YXRlLnBwX21hcmdpbiAtIHdpZHRoICsgb2ZmXG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfaHZib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2ZpdHMgLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfdmJveCAtPiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgIHwgUHBfaGJveCAtPiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgZW5kXG4gICAgZW5kXG5cbiAgIHwgUHBfb3Blbl90YWcgdGFnX25hbWUgLT5cbiAgICAgbGV0IG1hcmtlciA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBtYXJrZXI7XG4gICAgIFN0YWNrLnB1c2ggdGFnX25hbWUgc3RhdGUucHBfbWFya19zdGFja1xuXG4gICB8IFBwX2Nsb3NlX3RhZyAtPlxuICAgICBiZWdpbiBtYXRjaCBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX21hcmtfc3RhY2sgd2l0aFxuICAgICB8IE5vbmUgLT4gKCkgKCogTm8gbW9yZSB0YWcgdG8gY2xvc2UuICopXG4gICAgIHwgU29tZSB0YWdfbmFtZSAtPlxuICAgICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyB0YWdfbmFtZSBpblxuICAgICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyXG4gICAgIGVuZFxuXG5cbigqIFByaW50IGlmIHRva2VuIHNpemUgaXMga25vd24gZWxzZSBwcmludGluZyBpcyBkZWxheWVkLlxuICAgUHJpbnRpbmcgaXMgZGVsYXllZCB3aGVuIHRoZSB0ZXh0IHdhaXRpbmcgaW4gdGhlIHF1ZXVlIHJlcXVpcmVzXG4gICBtb3JlIHJvb20gdG8gZm9ybWF0IHRoYW4gZXhpc3RzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgcmVjIGFkdmFuY2VfbGVmdCBzdGF0ZSA9XG4gIG1hdGNoIFF1ZXVlLnBlZWtfb3B0IHN0YXRlLnBwX3F1ZXVlIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIE5vIHRva2VucyB0byBwcmludCAqKVxuICB8IFNvbWUgeyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gLT5cbiAgICBsZXQgcGVuZGluZ19jb3VudCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsIC0gc3RhdGUucHBfbGVmdF90b3RhbCBpblxuICAgIGlmIFNpemUuaXNfa25vd24gc2l6ZSB8fCBwZW5kaW5nX2NvdW50ID49IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiBiZWdpblxuICAgICAgUXVldWUudGFrZSBzdGF0ZS5wcF9xdWV1ZSB8PiBpZ25vcmU7ICgqIE5vdCBlbXB0eTogd2UgcGVlayBpbnRvIGl0ICopXG4gICAgICBsZXQgc2l6ZSA9IGlmIFNpemUuaXNfa25vd24gc2l6ZSB0aGVuIFNpemUudG9faW50IHNpemUgZWxzZSBwcF9pbmZpbml0eSBpblxuICAgICAgZm9ybWF0X3BwX3Rva2VuIHN0YXRlIHNpemUgdG9rZW47XG4gICAgICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIGxlbmd0aCArIHN0YXRlLnBwX2xlZnRfdG90YWw7XG4gICAgICAoYWR2YW5jZV9sZWZ0IFtAdGFpbGNhbGxdKSBzdGF0ZVxuICAgIGVuZFxuXG5cbigqIFRvIGVucXVldWUgYSB0b2tlbiA6IHRyeSB0byBhZHZhbmNlLiAqKVxubGV0IGVucXVldWVfYWR2YW5jZSBzdGF0ZSB0b2sgPSBwcF9lbnF1ZXVlIHN0YXRlIHRvazsgYWR2YW5jZV9sZWZ0IHN0YXRlXG5cblxuKCogVG8gZW5xdWV1ZSBzdHJpbmdzLiAqKVxubGV0IGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgcyA9XG4gIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemU7IHRva2VuID0gUHBfdGV4dCBzOyBsZW5ndGggPSBTaXplLnRvX2ludCBzaXplIH1cblxuXG5sZXQgZW5xdWV1ZV9zdHJpbmcgc3RhdGUgcyA9XG4gIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIChTaXplLm9mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSkgc1xuXG5cbigqIFJvdXRpbmVzIGZvciBzY2FuIHN0YWNrXG4gICBkZXRlcm1pbmUgc2l6ZSBvZiBib3hlcy4gKilcblxuKCogVGhlIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG5sZXQgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YWNrID1cbiAgU3RhY2suY2xlYXIgc3RhY2s7XG4gIGxldCBxdWV1ZV9lbGVtID0geyBzaXplID0gU2l6ZS51bmtub3duOyB0b2tlbiA9IFBwX3RleHQgXCJcIjsgbGVuZ3RoID0gMCB9IGluXG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gLTE7IHF1ZXVlX2VsZW0gfSBzdGFja1xuXG4oKiBTZXR0aW5nIHRoZSBzaXplIG9mIGJveGVzIG9uIHNjYW4gc3RhY2s6XG4gICBpZiB0eSA9IHRydWUgdGhlbiBzaXplIG9mIGJyZWFrIGlzIHNldCBlbHNlIHNpemUgb2YgYm94IGlzIHNldDtcbiAgIGluIGVhY2ggY2FzZSBwcF9zY2FuX3N0YWNrIGlzIHBvcHBlZC5cblxuICAgTm90ZTpcbiAgIFBhdHRlcm4gbWF0Y2hpbmcgb24gc2NhbiBzdGFjayBpcyBleGhhdXN0aXZlLCBzaW5jZSBzY2FuX3N0YWNrIGlzIG5ldmVyXG4gICBlbXB0eS5cbiAgIFBhdHRlcm4gbWF0Y2hpbmcgb24gdG9rZW4gaW4gc2NhbiBzdGFjayBpcyBhbHNvIGV4aGF1c3RpdmUsXG4gICBzaW5jZSBzY2FuX3B1c2ggaXMgdXNlZCBvbiBicmVha3MgYW5kIG9wZW5pbmcgb2YgYm94ZXMuICopXG5sZXQgc2V0X3NpemUgc3RhdGUgdHkgPVxuICBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogc2Nhbl9zdGFjayBpcyBuZXZlciBlbXB0eS4gKilcbiAgfCBTb21lIHsgbGVmdF90b3RhbDsgcXVldWVfZWxlbSB9IC0+XG4gICAgbGV0IHNpemUgPSBTaXplLnRvX2ludCBxdWV1ZV9lbGVtLnNpemUgaW5cbiAgICAoKiB0ZXN0IGlmIHNjYW4gc3RhY2sgY29udGFpbnMgYW55IGRhdGEgdGhhdCBpcyBub3Qgb2Jzb2xldGUuICopXG4gICAgaWYgbGVmdF90b3RhbCA8IHN0YXRlLnBwX2xlZnRfdG90YWwgdGhlblxuICAgICAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2tcbiAgICBlbHNlXG4gICAgICBtYXRjaCBxdWV1ZV9lbGVtLnRva2VuIHdpdGhcbiAgICAgIHwgUHBfYnJlYWsgXyB8IFBwX3RicmVhayAoXywgXykgLT5cbiAgICAgICAgaWYgdHkgdGhlbiBiZWdpblxuICAgICAgICAgIHF1ZXVlX2VsZW0uc2l6ZSA8LSBTaXplLm9mX2ludCAoc3RhdGUucHBfcmlnaHRfdG90YWwgKyBzaXplKTtcbiAgICAgICAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgfD4gaWdub3JlXG4gICAgICAgIGVuZFxuICAgICAgfCBQcF9iZWdpbiAoXywgXykgLT5cbiAgICAgICAgaWYgbm90IHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfdGV4dCBfIHwgUHBfc3RhYiB8IFBwX3RiZWdpbiBfIHwgUHBfdGVuZCB8IFBwX2VuZFxuICAgICAgfCBQcF9uZXdsaW5lIHwgUHBfaWZfbmV3bGluZSB8IFBwX29wZW5fdGFnIF8gfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgICAgKCkgKCogc2Nhbl9wdXNoIGlzIG9ubHkgdXNlZCBmb3IgYnJlYWtzIGFuZCBib3hlcy4gKilcblxuXG4oKiBQdXNoIGEgdG9rZW4gb24gcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suXG4gICBJZiBiIGlzIHRydWUgc2V0X3NpemUgaXMgY2FsbGVkLiAqKVxubGV0IHNjYW5fcHVzaCBzdGF0ZSBiIHRva2VuID1cbiAgcHBfZW5xdWV1ZSBzdGF0ZSB0b2tlbjtcbiAgaWYgYiB0aGVuIHNldF9zaXplIHN0YXRlIHRydWU7XG4gIGxldCBlbGVtID0geyBsZWZ0X3RvdGFsID0gc3RhdGUucHBfcmlnaHRfdG90YWw7IHF1ZXVlX2VsZW0gPSB0b2tlbiB9IGluXG4gIFN0YWNrLnB1c2ggZWxlbSBzdGF0ZS5wcF9zY2FuX3N0YWNrXG5cblxuKCogVG8gb3BlbiBhIG5ldyBib3ggOlxuICAgdGhlIHVzZXIgbWF5IHNldCB0aGUgZGVwdGggYm91bmQgcHBfbWF4X2JveGVzXG4gICBhbnkgdGV4dCBuZXN0ZWQgZGVlcGVyIGlzIHByaW50ZWQgYXMgdGhlIGVsbGlwc2lzIHN0cmluZy4gKilcbmxldCBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IGJyX3R5ID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF9iZWdpbiAoaW5kZW50LCBicl90eSk7IGxlbmd0aCA9IDAgfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSBmYWxzZSBlbGVtIGVsc2VcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA9IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nIHN0YXRlIHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVGhlIGJveCB3aGljaCBpcyBhbHdheXMgb3Blbi4gKilcbmxldCBwcF9vcGVuX3N5c19ib3ggc3RhdGUgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9ob3Zib3hcblxuKCogQ2xvc2UgYSBib3gsIHNldHRpbmcgc2l6ZXMgb2YgaXRzIHN1YiBib3hlcy4gKilcbmxldCBwcF9jbG9zZV9ib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgYmVnaW5cbiAgICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2VuZDsgbGVuZ3RoID0gMCB9O1xuICAgICAgc2V0X3NpemUgc3RhdGUgdHJ1ZTsgc2V0X3NpemUgc3RhdGUgZmFsc2VcbiAgICBlbmQ7XG4gICAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoIC0gMTtcbiAgZW5kXG5cblxuKCogT3BlbiBhIHRhZywgcHVzaGluZyBpdCBvbiB0aGUgdGFnIHN0YWNrLiAqKVxubGV0IHBwX29wZW5fc3RhZyBzdGF0ZSB0YWdfbmFtZSA9XG4gIGlmIHN0YXRlLnBwX3ByaW50X3RhZ3MgdGhlblxuICBiZWdpblxuICAgIFN0YWNrLnB1c2ggdGFnX25hbWUgc3RhdGUucHBfdGFnX3N0YWNrO1xuICAgIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIHRhZ19uYW1lXG4gIGVuZDtcbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBsZXQgdG9rZW4gPSBQcF9vcGVuX3RhZyB0YWdfbmFtZSBpblxuICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbjsgbGVuZ3RoID0gMCB9XG5cblxuKCogQ2xvc2UgYSB0YWcsIHBvcHBpbmcgaXQgZnJvbSB0aGUgdGFnIHN0YWNrLiAqKVxubGV0IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9tYXJrX3RhZ3MgdGhlblxuICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2Nsb3NlX3RhZzsgbGVuZ3RoID0gMCB9O1xuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgICBtYXRjaCBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3RhZ19zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgIHwgU29tZSB0YWdfbmFtZSAtPlxuICAgICAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIHRhZ19uYW1lXG5cbmxldCBwcF9vcGVuX3RhZyBzdGF0ZSBzID0gcHBfb3Blbl9zdGFnIHN0YXRlIChTdHJpbmdfdGFnIHMpXG5sZXQgcHBfY2xvc2VfdGFnIHN0YXRlICgpID0gcHBfY2xvc2Vfc3RhZyBzdGF0ZSAoKVxuXG5sZXQgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX3ByaW50X3RhZ3MgPC0gYlxubGV0IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX21hcmtfdGFncyA8LSBiXG5sZXQgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9wcmludF90YWdzXG5sZXQgcHBfZ2V0X21hcmtfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmtfdGFnc1xubGV0IHBwX3NldF90YWdzIHN0YXRlIGIgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiOyBwcF9zZXRfbWFya190YWdzIHN0YXRlIGJcblxuXG4oKiBIYW5kbGluZyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zOiBnZXQvc2V0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBtYXJrX29wZW5fc3RhZyA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnO1xuICBwcmludF9vcGVuX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZztcbiAgcHJpbnRfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZztcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl9zdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3N0YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fc3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2Vfc3RhZyA9IHBjdDtcbiAgfSA9XG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gbW90O1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBtY3Q7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHBvdDtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHBjdFxuXG5cbigqIEluaXRpYWxpemUgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfcmluaXQgc3RhdGUgPVxuICBwcF9jbGVhcl9xdWV1ZSBzdGF0ZTtcbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX2Zvcm1hdF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGJveF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGFnX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9tYXJrX3N0YWNrO1xuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSAwO1xuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIDA7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luO1xuICBwcF9vcGVuX3N5c19ib3ggc3RhdGVcblxubGV0IGNsZWFyX3RhZ19zdGFjayBzdGF0ZSA9XG4gIFN0YWNrLml0ZXIgKGZ1biBfIC0+IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSkgc3RhdGUucHBfdGFnX3N0YWNrXG5cblxuKCogRmx1c2hpbmcgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG5sZXQgcHBfZmx1c2hfcXVldWUgc3RhdGUgYiA9XG4gIGNsZWFyX3RhZ19zdGFjayBzdGF0ZTtcbiAgd2hpbGUgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgZG9cbiAgICBwcF9jbG9zZV9ib3ggc3RhdGUgKClcbiAgZG9uZTtcbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gcHBfaW5maW5pdHk7XG4gIGFkdmFuY2VfbGVmdCBzdGF0ZTtcbiAgaWYgYiB0aGVuIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBwcF9yaW5pdCBzdGF0ZVxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gZm9ybWF0IHZhbHVlcyBhbmQgdXNlIGJveGVzLlxuXG4qKVxuXG4oKiBUbyBmb3JtYXQgYSBzdHJpbmcuICopXG5sZXQgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSBzaXplIHMgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzXG4gIHRoZW4gZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgc2l6ZSBzXG5cblxubGV0IHBwX3ByaW50X2FzIHN0YXRlIGlzaXplIHMgPVxuICBwcF9wcmludF9hc19zaXplIHN0YXRlIChTaXplLm9mX2ludCBpc2l6ZSkgc1xuXG5cbmxldCBwcF9wcmludF9zdHJpbmcgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxubGV0IHBwX3ByaW50X2J5dGVzIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoQnl0ZXMubGVuZ3RoIHMpIChCeXRlcy50b19zdHJpbmcgcylcblxuKCogVG8gZm9ybWF0IGFuIGludGVnZXIuICopXG5sZXQgcHBfcHJpbnRfaW50IHN0YXRlIGkgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKEludC50b19zdHJpbmcgaSlcblxuKCogVG8gZm9ybWF0IGEgZmxvYXQuICopXG5sZXQgcHBfcHJpbnRfZmxvYXQgc3RhdGUgZiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Zsb2F0IGYpXG5cbigqIFRvIGZvcm1hdCBhIGJvb2xlYW4uICopXG5sZXQgcHBfcHJpbnRfYm9vbCBzdGF0ZSBiID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfYm9vbCBiKVxuXG4oKiBUbyBmb3JtYXQgYSBjaGFyLiAqKVxubGV0IHBwX3ByaW50X2NoYXIgc3RhdGUgYyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIDEgKFN0cmluZy5tYWtlIDEgYylcblxuXG4oKiBPcGVuaW5nIGJveGVzLiAqKVxubGV0IHBwX29wZW5faGJveCBzdGF0ZSAoKSA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSAwIFBwX2hib3hcbmFuZCBwcF9vcGVuX3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF92Ym94XG5cbmFuZCBwcF9vcGVuX2h2Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaHZib3hcbmFuZCBwcF9vcGVuX2hvdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2hvdmJveFxuYW5kIHBwX29wZW5fYm94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfYm94XG5cblxuKCogUHJpbnRpbmcgcXVldWVkIHRleHQuXG5cbiAgIFtwcF9wcmludF9mbHVzaF0gcHJpbnRzIGFsbCBwZW5kaW5nIGl0ZW1zIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhbmRcbiAgIHRoZW4gZmx1c2hlcyB0aGUgbG93IGxldmVsIG91dHB1dCBkZXZpY2Ugb2YgdGhlIGZvcm1hdHRlciB0byBhY3R1YWxseVxuICAgZGlzcGxheSBwcmludGluZyBtYXRlcmlhbC5cblxuICAgW3BwX3ByaW50X25ld2xpbmVdIGJlaGF2ZXMgYXMgW3BwX3ByaW50X2ZsdXNoXSBhZnRlciBwcmludGluZyBhbiBhZGRpdGlvbmFsXG4gICBuZXcgbGluZS4gKilcbmxldCBwcF9wcmludF9uZXdsaW5lIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgdHJ1ZTsgc3RhdGUucHBfb3V0X2ZsdXNoICgpXG5hbmQgcHBfcHJpbnRfZmx1c2ggc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSBmYWxzZTsgc3RhdGUucHBfb3V0X2ZsdXNoICgpXG5cblxuKCogVG8gZ2V0IGEgbmV3bGluZSB3aGVuIG9uZSBkb2VzIG5vdCB3YW50IHRvIGNsb3NlIHRoZSBjdXJyZW50IGJveC4gKilcbmxldCBwcF9mb3JjZV9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBUbyBmb3JtYXQgc29tZXRoaW5nLCBvbmx5IGluIGNhc2UgdGhlIGxpbmUgaGFzIGp1c3QgYmVlbiBicm9rZW4uICopXG5sZXQgcHBfcHJpbnRfaWZfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZVxuICAgICAgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2lmX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIEdlbmVyYWxpemVkIGJyZWFrIGhpbnQgdGhhdCBhbGxvd3MgcHJpbnRpbmcgc3RyaW5ncyBiZWZvcmUvYWZ0ZXJcbiAgIHNhbWUtbGluZSBvZmZzZXQgKHdpZHRoKSBvciBuZXctbGluZSBvZmZzZXQgKilcbmxldCBwcF9wcmludF9jdXN0b21fYnJlYWsgc3RhdGUgfmZpdHMgfmJyZWFrcyA9XG4gIGxldCBiZWZvcmUsIHdpZHRoLCBhZnRlciA9IGZpdHMgaW5cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgdG9rZW4gPSBQcF9icmVhayB7IGZpdHM7IGJyZWFrcyB9IGluXG4gICAgbGV0IGxlbmd0aCA9IFN0cmluZy5sZW5ndGggYmVmb3JlICsgd2lkdGggKyBTdHJpbmcubGVuZ3RoIGFmdGVyIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuOyBsZW5ndGggfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSB0cnVlIGVsZW1cblxuKCogUHJpbnRpbmcgYnJlYWsgaGludHM6XG4gICBBIGJyZWFrIGhpbnQgaW5kaWNhdGVzIHdoZXJlIGEgYm94IG1heSBiZSBicm9rZW4uXG4gICBJZiBsaW5lIGlzIGJyb2tlbiB0aGVuIG9mZnNldCBpcyBhZGRlZCB0byB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnRcbiAgIGJveCBlbHNlICh0aGUgdmFsdWUgb2YpIHdpZHRoIGJsYW5rcyBhcmUgcHJpbnRlZC4gKilcbmxldCBwcF9wcmludF9icmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBwcF9wcmludF9jdXN0b21fYnJlYWsgc3RhdGVcbiAgICB+Zml0czooXCJcIiwgd2lkdGgsIFwiXCIpIH5icmVha3M6KFwiXCIsIG9mZnNldCwgXCJcIilcblxuXG4oKiBQcmludCBhIHNwYWNlIDpcbiAgIGEgc3BhY2UgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIGEgc2luZ2xlIHNwYWNlIGlmIHRoZSBicmVhayBkb2VzIG5vdFxuICAgc3BsaXQgdGhlIGxpbmU7XG4gICBhIGN1dCBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgbm90aGluZyBpZiB0aGUgYnJlYWsgZG9lcyBub3Qgc3BsaXQgdGhlXG4gICBsaW5lLiAqKVxubGV0IHBwX3ByaW50X3NwYWNlIHN0YXRlICgpID0gcHBfcHJpbnRfYnJlYWsgc3RhdGUgMSAwXG5hbmQgcHBfcHJpbnRfY3V0IHN0YXRlICgpID0gcHBfcHJpbnRfYnJlYWsgc3RhdGUgMCAwXG5cblxuKCogVGFidWxhdGlvbiBib3hlcy4gKilcbmxldCBwcF9vcGVuX3Rib3ggc3RhdGUgKCkgPVxuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggKyAxO1xuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUuemVybyBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RiZWdpbiAoUHBfdGJveCAocmVmIFtdKSk7IGxlbmd0aCA9IDAgfSBpblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtXG5cblxuKCogQ2xvc2UgYSB0YWJ1bGF0aW9uIGJveC4gKilcbmxldCBwcF9jbG9zZV90Ym94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgIGxldCBlbGVtID0geyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX3RlbmQ7IGxlbmd0aCA9IDAgfSBpblxuICAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbTtcbiAgICAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoIC0gMVxuICBlbmRcblxuXG4oKiBQcmludCBhIHRhYnVsYXRpb24gYnJlYWsuICopXG5sZXQgcHBfcHJpbnRfdGJyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJyZWFrICh3aWR0aCwgb2Zmc2V0KTsgbGVuZ3RoID0gd2lkdGggfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSB0cnVlIGVsZW1cblxuXG5sZXQgcHBfcHJpbnRfdGFiIHN0YXRlICgpID0gcHBfcHJpbnRfdGJyZWFrIHN0YXRlIDAgMFxuXG5sZXQgcHBfc2V0X3RhYiBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBlbGVtID0geyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX3N0YWI7IGxlbmd0aCA9IDAgfSBpblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtXG5cblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGNvbnRyb2wgdGhlIHByZXR0eS1wcmludGVyc1xuXG4qKVxuXG4oKiBTZXRfbWF4X2JveGVzLiAqKVxubGV0IHBwX3NldF9tYXhfYm94ZXMgc3RhdGUgbiA9IGlmIG4gPiAxIHRoZW4gc3RhdGUucHBfbWF4X2JveGVzIDwtIG5cblxuKCogVG8ga25vdyB0aGUgY3VycmVudCBtYXhpbXVtIG51bWJlciBvZiBib3hlcyBhbGxvd2VkLiAqKVxubGV0IHBwX2dldF9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxubGV0IHBwX292ZXJfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfY3Vycl9kZXB0aCA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG4oKiBFbGxpcHNpcy4gKilcbmxldCBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSBzID0gc3RhdGUucHBfZWxsaXBzaXMgPC0gc1xuYW5kIHBwX2dldF9lbGxpcHNpc190ZXh0IHN0YXRlICgpID0gc3RhdGUucHBfZWxsaXBzaXNcblxuXG4oKiBUbyBzZXQgdGhlIG1hcmdpbiBvZiBwcmV0dHktcHJpbnRlci4gKilcbmxldCBwcF9saW1pdCBuID1cbiAgaWYgbiA8IHBwX2luZmluaXR5IHRoZW4gbiBlbHNlIHByZWQgcHBfaW5maW5pdHlcblxuXG4oKiBJbnRlcm5hbCBwcmV0dHktcHJpbnRlciBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIG4gPVxuICBpZiBuID49IDEgdGhlblxuICAgIGxldCBuID0gcHBfbGltaXQgbiBpblxuICAgIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0IDwtIG47XG4gICAgc3RhdGUucHBfbWF4X2luZGVudCA8LSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9yaW5pdCBzdGF0ZVxuXG5cbigqIEluaXRpYWxseSwgd2UgaGF2ZSA6XG4gICBwcF9tYXhfaW5kZW50ID0gcHBfbWFyZ2luIC0gcHBfbWluX3NwYWNlX2xlZnQsIGFuZFxuICAgcHBfc3BhY2VfbGVmdCA9IHBwX21hcmdpbi4gKilcbmxldCBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuID1cbiAgaWYgbiA+IDEgdGhlblxuICAgIHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSAoc3RhdGUucHBfbWFyZ2luIC0gbilcblxuXG5sZXQgcHBfZ2V0X21heF9pbmRlbnQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXhfaW5kZW50XG5cbmxldCBwcF9zZXRfbWFyZ2luIHN0YXRlIG4gPVxuICBpZiBuID49IDEgdGhlblxuICAgIGxldCBuID0gcHBfbGltaXQgbiBpblxuICAgIHN0YXRlLnBwX21hcmdpbiA8LSBuO1xuICAgIGxldCBuZXdfbWF4X2luZGVudCA9XG4gICAgICAoKiBUcnkgdG8gbWFpbnRhaW4gbWF4X2luZGVudCB0byBpdHMgYWN0dWFsIHZhbHVlLiAqKVxuICAgICAgaWYgc3RhdGUucHBfbWF4X2luZGVudCA8PSBzdGF0ZS5wcF9tYXJnaW5cbiAgICAgIHRoZW4gc3RhdGUucHBfbWF4X2luZGVudCBlbHNlXG4gICAgICAoKiBJZiBwb3NzaWJsZSBtYWludGFpbiBwcF9taW5fc3BhY2VfbGVmdCB0byBpdHMgYWN0dWFsIHZhbHVlLFxuICAgICAgICAgaWYgdGhpcyBsZWFkcyB0byBhIHRvbyBzbWFsbCBtYXhfaW5kZW50LCB0YWtlIGhhbGYgb2YgdGhlXG4gICAgICAgICBuZXcgbWFyZ2luLCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMS4gKilcbiAgICAgICBJbnQubWF4IChJbnQubWF4IChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdClcbiAgICAgICAgICAgICAgICAoc3RhdGUucHBfbWFyZ2luIC8gMikpIDEgaW5cbiAgICAoKiBSZWJ1aWxkIGludmFyaWFudHMuICopXG4gICAgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbmV3X21heF9pbmRlbnRcblxuXG4oKiogR2VvbWV0cnkgZnVuY3Rpb25zIGFuZCB0eXBlcyAqKVxudHlwZSBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDppbnQ7IG1hcmdpbjogaW50fVxuXG5sZXQgdmFsaWRhdGVfZ2VvbWV0cnkge21hcmdpbjsgbWF4X2luZGVudH0gPVxuICBpZiBtYXhfaW5kZW50IDwgMiB0aGVuXG4gICAgRXJyb3IgXCJtYXhfaW5kZW50IDwgMlwiXG4gIGVsc2UgaWYgbWFyZ2luIDw9IG1heF9pbmRlbnQgdGhlblxuICAgIEVycm9yIFwibWFyZ2luIDw9IG1heF9pbmRlbnRcIlxuICBlbHNlIE9rICgpXG5cbmxldCBjaGVja19nZW9tZXRyeSBnZW9tZXRyeSA9XG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBPayAoKSAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmdpblxuXG5sZXQgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUge21hcmdpbjsgbWF4X2luZGVudH0gPVxuICBwcF9zZXRfbWFyZ2luIHN0YXRlIG1hcmdpbjtcbiAgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbWF4X2luZGVudDtcbiAgKClcblxubGV0IHBwX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgbXNnIC0+XG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgKFwiRm9ybWF0LnBwX3NldF9nZW9tZXRyeTogXCIgXiBtc2cpKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBfbXNnIC0+XG4gICAgICgpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpID1cbiAgeyBtYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0YXRlICgpOyBtYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RhdGUgKCkgfVxuXG5sZXQgcHBfdXBkYXRlX2dlb21ldHJ5IHN0YXRlIHVwZGF0ZSA9XG4gIGxldCBnZW9tZXRyeSA9IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSBpblxuICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSAodXBkYXRlIGdlb21ldHJ5KVxuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgIG91dF9zdHJpbmcgPSBmO1xuICAgICAgb3V0X2ZsdXNoID0gZztcbiAgICAgIG91dF9uZXdsaW5lID0gaDtcbiAgICAgIG91dF9zcGFjZXMgPSBpO1xuICAgICAgb3V0X2luZGVudCA9IGo7XG4gICAgfSA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjtcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGc7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGg7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gaTtcbiAgc3RhdGUucHBfb3V0X2luZGVudCA8LSBqXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUgKCkgPSB7XG4gIG91dF9zdHJpbmcgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nO1xuICBvdXRfZmx1c2ggPSBzdGF0ZS5wcF9vdXRfZmx1c2g7XG4gIG91dF9uZXdsaW5lID0gc3RhdGUucHBfb3V0X25ld2xpbmU7XG4gIG91dF9zcGFjZXMgPSBzdGF0ZS5wcF9vdXRfc3BhY2VzO1xuICBvdXRfaW5kZW50ID0gc3RhdGUucHBfb3V0X2luZGVudDtcbn1cblxuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIHN0cmluZyBvdXRwdXQgYW5kIGZsdXNoIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgZiBnID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmOyBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZ1xuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaClcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfbmV3bGluZSBzdGF0ZSAoKSA9IHN0YXRlLnBwX291dF9zdHJpbmcgXCJcXG5cIiAwICAxXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBzcGFjZXMuICopXG5sZXQgYmxhbmtfbGluZSA9IFN0cmluZy5tYWtlIDgwICcgJ1xubGV0IHJlYyBkaXNwbGF5X2JsYW5rcyBzdGF0ZSBuID1cbiAgaWYgbiA+IDAgdGhlblxuICBpZiBuIDw9IDgwIHRoZW4gc3RhdGUucHBfb3V0X3N0cmluZyBibGFua19saW5lIDAgbiBlbHNlXG4gIGJlZ2luXG4gICAgc3RhdGUucHBfb3V0X3N0cmluZyBibGFua19saW5lIDAgODA7XG4gICAgZGlzcGxheV9ibGFua3Mgc3RhdGUgKG4gLSA4MClcbiAgZW5kXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IGluZGVudGF0aW9uIG9mIG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X2luZGVudCA9IGRpc3BsYXlfYmxhbmtzXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucyBhcyBwcmludGluZyB0byBhIGdpdmVuXG4gICBbUGVydmFzaXZlLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHN0YXRlIG9jID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBvdXRwdXRfc3Vic3RyaW5nIG9jO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gKGZ1biAoKSAtPiBmbHVzaCBvYyk7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBzdGF0ZTtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBkaXNwbGF5X2JsYW5rcyBzdGF0ZTtcbiAgc3RhdGUucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBzdGF0ZVxuXG4oKlxuXG4gIERlZmluaW5nIHNwZWNpZmljIGZvcm1hdHRlcnNcblxuKilcblxubGV0IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nX3RhZyBzIC0+IFwiPFwiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5sZXQgZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nX3RhZyBzIC0+IFwiPC9cIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxuXG5sZXQgZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyA9IGlnbm9yZVxubGV0IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnID0gaWdub3JlXG5cbigqIEJ1aWxkaW5nIGEgZm9ybWF0dGVyIGdpdmVuIGl0cyBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLlxuICAgT3RoZXIgZmllbGRzIGdldCByZWFzb25hYmxlIGRlZmF1bHQgdmFsdWVzLiAqKVxubGV0IHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgaiA9XG4gICgqIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBmb3JtYXR0ZXIgY29udGFpbnMgYSBkdW1teSBib3guICopXG4gIGxldCBwcF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICBsZXQgc3lzX3RvayA9XG4gICAgeyBzaXplID0gU2l6ZS51bmtub3duOyB0b2tlbiA9IFBwX2JlZ2luICgwLCBQcF9ob3Zib3gpOyBsZW5ndGggPSAwIH0gaW5cbiAgUXVldWUuYWRkIHN5c190b2sgcHBfcXVldWU7XG4gIGxldCBzY2FuX3N0YWNrID0gU3RhY2suY3JlYXRlICgpIGluXG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzY2FuX3N0YWNrO1xuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IDE7IHF1ZXVlX2VsZW0gPSBzeXNfdG9rIH0gc2Nhbl9zdGFjaztcbiAgbGV0IHBwX21hcmdpbiA9IDc4XG4gIGFuZCBwcF9taW5fc3BhY2VfbGVmdCA9IDEwIGluXG4gIHtcbiAgICBwcF9zY2FuX3N0YWNrID0gc2Nhbl9zdGFjaztcbiAgICBwcF9mb3JtYXRfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGJveF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90YWdfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFya19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJnaW4gPSBwcF9tYXJnaW47XG4gICAgcHBfbWluX3NwYWNlX2xlZnQgPSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9tYXhfaW5kZW50ID0gcHBfbWFyZ2luIC0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfc3BhY2VfbGVmdCA9IHBwX21hcmdpbjtcbiAgICBwcF9jdXJyZW50X2luZGVudCA9IDA7XG4gICAgcHBfaXNfbmV3X2xpbmUgPSB0cnVlO1xuICAgIHBwX2xlZnRfdG90YWwgPSAxO1xuICAgIHBwX3JpZ2h0X3RvdGFsID0gMTtcbiAgICBwcF9jdXJyX2RlcHRoID0gMTtcbiAgICBwcF9tYXhfYm94ZXMgPSBtYXhfaW50O1xuICAgIHBwX2VsbGlwc2lzID0gXCIuXCI7XG4gICAgcHBfb3V0X3N0cmluZyA9IGY7XG4gICAgcHBfb3V0X2ZsdXNoID0gZztcbiAgICBwcF9vdXRfbmV3bGluZSA9IGg7XG4gICAgcHBfb3V0X3NwYWNlcyA9IGk7XG4gICAgcHBfb3V0X2luZGVudCA9IGo7XG4gICAgcHBfcHJpbnRfdGFncyA9IGZhbHNlO1xuICAgIHBwX21hcmtfdGFncyA9IGZhbHNlO1xuICAgIHBwX21hcmtfb3Blbl90YWcgPSBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWc7XG4gICAgcHBfbWFya19jbG9zZV90YWcgPSBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnO1xuICAgIHBwX3ByaW50X29wZW5fdGFnID0gZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZztcbiAgICBwcF9wcmludF9jbG9zZV90YWcgPSBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZztcbiAgICBwcF9xdWV1ZSA9IHBwX3F1ZXVlO1xuICB9XG5cblxuKCogQnVpbGQgYSBmb3JtYXR0ZXIgb3V0IG9mIGl0cyBvdXQgZnVuY3Rpb25zLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfZnVuY3Rpb25zIG91dF9mdW5zID1cbiAgcHBfbWFrZV9mb3JtYXR0ZXJcbiAgICBvdXRfZnVucy5vdXRfc3RyaW5nXG4gICAgb3V0X2Z1bnMub3V0X2ZsdXNoXG4gICAgb3V0X2Z1bnMub3V0X25ld2xpbmVcbiAgICBvdXRfZnVucy5vdXRfc3BhY2VzXG4gICAgb3V0X2Z1bnMub3V0X2luZGVudFxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd2l0aCBkZWZhdWx0IGZ1bmN0aW9ucyB0byBvdXRwdXQgc3BhY2VzLFxuICBpbmRlbnRhdGlvbiwgYW5kIG5ldyBsaW5lcy4gKilcbmxldCBtYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggPVxuICBsZXQgcHBmID0gcHBfbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoIGlnbm9yZSBpZ25vcmUgaWdub3JlIGluXG4gIHBwZi5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgcHBmO1xuICBwcGYucHBfb3V0X3NwYWNlcyA8LSBkaXNwbGF5X2JsYW5rcyBwcGY7XG4gIHBwZi5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHBwZjtcbiAgcHBmXG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3cml0aW5nIHRvIGEgZ2l2ZW4gW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9jaGFubmVsIG9jID1cbiAgbWFrZV9mb3JtYXR0ZXIgKG91dHB1dF9zdWJzdHJpbmcgb2MpIChmdW4gKCkgLT4gZmx1c2ggb2MpXG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3cml0aW5nIHRvIGEgZ2l2ZW4gW0J1ZmZlci50XSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgPVxuICBtYWtlX2Zvcm1hdHRlciAoQnVmZmVyLmFkZF9zdWJzdHJpbmcgYikgaWdub3JlXG5cblxuKCogQWxsb2NhdGluZyBidWZmZXIgZm9yIHByZXR0eS1wcmludGluZyBwdXJwb3Nlcy5cbiAgIERlZmF1bHQgYnVmZmVyIHNpemUgaXMgcHBfYnVmZmVyX3NpemUgb3IgNTEyLlxuKilcbmxldCBwcF9idWZmZXJfc2l6ZSA9IDUxMlxubGV0IHBwX21ha2VfYnVmZmVyICgpID0gQnVmZmVyLmNyZWF0ZSBwcF9idWZmZXJfc2l6ZVxuXG4oKiBUaGUgc3RhbmRhcmQgKHNoYXJlZCkgYnVmZmVyLiAqKVxubGV0IHN0ZGJ1ZiA9IHBwX21ha2VfYnVmZmVyICgpXG5cbigqIFByZWRlZmluZWQgZm9ybWF0dGVycyBzdGFuZGFyZCBmb3JtYXR0ZXIgdG8gcHJpbnRcbiAgIHRvIFtTdGRsaWIuc3Rkb3V0XSwgW1N0ZGxpYi5zdGRlcnJdLCBhbmQgeyFzdGRidWZ9LiAqKVxubGV0IHN0ZF9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgU3RkbGliLnN0ZG91dFxuYW5kIGVycl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgU3RkbGliLnN0ZGVyclxuYW5kIHN0cl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIHN0ZGJ1ZlxuXG5cbigqIFtmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGJ1ZiBwcGZdIGZsdXNoZXMgZm9ybWF0dGVyIFtwcGZdLFxuICAgdGhlbiByZXR1cm5zIHRoZSBjb250ZW50cyBvZiBidWZmZXIgW2J1Zl0gdGhhdCBpcyByZXNldC5cbiAgIEZvcm1hdHRlciBbcHBmXSBpcyBzdXBwb3NlZCB0byBwcmludCB0byBidWZmZXIgW2J1Zl0sIG90aGVyd2lzZSB0aGlzXG4gICBmdW5jdGlvbiBpcyBub3QgcmVhbGx5IHVzZWZ1bC4gKilcbmxldCBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGJ1ZiBwcGYgPVxuICBwcF9mbHVzaF9xdWV1ZSBwcGYgZmFsc2U7XG4gIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICBCdWZmZXIucmVzZXQgYnVmO1xuICBzXG5cblxuKCogRmx1c2ggW3N0cl9mb3JtYXR0ZXJdIGFuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIFtzdGRidWZdLiAqKVxubGV0IGZsdXNoX3N0cl9mb3JtYXR0ZXIgKCkgPSBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIHN0ZGJ1ZiBzdHJfZm9ybWF0dGVyXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZ1xuKilcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nIGlzIHByZXR0eS1wcmludGluZyB3aXRoIG5vIGxvdyBsZXZlbCBvdXRwdXQuXG5cbiAgV2hlbiB1c2luZyBhIHN5bWJvbGljIGZvcm1hdHRlciwgYWxsIHJlZ3VsYXIgcHJldHR5LXByaW50aW5nIGFjdGl2aXRpZXNcbiAgb2NjdXIgYnV0IG91dHB1dCBtYXRlcmlhbCBpcyBzeW1ib2xpYyBhbmQgc3RvcmVkIGluIGEgYnVmZmVyIG9mIG91dHB1dFxuICBpdGVtcy4gQXQgdGhlIGVuZCBvZiBwcmV0dHktcHJpbnRpbmcsIGZsdXNoaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGFsbG93c1xuICBwb3N0LXByb2Nlc3Npbmcgb2Ygc3ltYm9saWMgb3V0cHV0IGJlZm9yZSBsb3cgbGV2ZWwgb3V0cHV0IG9wZXJhdGlvbnMuXG4qKVxuXG50eXBlIHN5bWJvbGljX291dHB1dF9pdGVtID1cbiAgfCBPdXRwdXRfZmx1c2hcbiAgfCBPdXRwdXRfbmV3bGluZVxuICB8IE91dHB1dF9zdHJpbmcgb2Ygc3RyaW5nXG4gIHwgT3V0cHV0X3NwYWNlcyBvZiBpbnRcbiAgfCBPdXRwdXRfaW5kZW50IG9mIGludFxuXG50eXBlIHN5bWJvbGljX291dHB1dF9idWZmZXIgPSB7XG4gIG11dGFibGUgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDogc3ltYm9saWNfb3V0cHV0X2l0ZW0gbGlzdDtcbn1cblxubGV0IG1ha2Vfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciAoKSA9XG4gIHsgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzID0gW10gfVxuXG5sZXQgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIFtdXG5cbmxldCBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBMaXN0LnJldiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBpdGVtcyA9IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiBpblxuICBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYjtcbiAgaXRlbXNcblxubGV0IGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgaXRlbSA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gaXRlbSA6OiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmb3JtYXR0ZXJfb2Zfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgc3ltYm9saWNfZmx1c2ggc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9mbHVzaFxuICBhbmQgc3ltYm9saWNfbmV3bGluZSBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X25ld2xpbmVcbiAgYW5kIHN5bWJvbGljX3N0cmluZyBzb2IgcyBpIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zdHJpbmcgKFN0cmluZy5zdWIgcyBpIG4pKVxuICBhbmQgc3ltYm9saWNfc3BhY2VzIHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3BhY2VzIG4pXG4gIGFuZCBzeW1ib2xpY19pbmRlbnQgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9pbmRlbnQgbikgaW5cblxuICBsZXQgZiA9IHN5bWJvbGljX3N0cmluZyBzb2JcbiAgYW5kIGcgPSBzeW1ib2xpY19mbHVzaCBzb2JcbiAgYW5kIGggPSBzeW1ib2xpY19uZXdsaW5lIHNvYlxuICBhbmQgaSA9IHN5bWJvbGljX3NwYWNlcyBzb2JcbiAgYW5kIGogPSBzeW1ib2xpY19pbmRlbnQgc29iIGluXG4gIHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgalxuXG4oKlxuXG4gIEJhc2ljIGZ1bmN0aW9ucyBvbiB0aGUgJ3N0YW5kYXJkJyBmb3JtYXR0ZXJcbiAgKHRoZSBmb3JtYXR0ZXIgdGhhdCBwcmludHMgdG8gW1N0ZGxpYi5zdGRvdXRdKS5cblxuKilcblxubGV0IG9wZW5faGJveCA9IHBwX29wZW5faGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl92Ym94ID0gcHBfb3Blbl92Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2h2Ym94ID0gcHBfb3Blbl9odmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9ob3Zib3ggPSBwcF9vcGVuX2hvdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9ib3ggPSBwcF9vcGVuX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfYm94ID0gcHBfY2xvc2VfYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3RhZyA9IHBwX29wZW5fdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90YWcgPSBwcF9jbG9zZV90YWcgc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fc3RhZyA9IHBwX29wZW5fc3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2Vfc3RhZyA9IHBwX2Nsb3NlX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2FzID0gcHBfcHJpbnRfYXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3N0cmluZyA9IHBwX3ByaW50X3N0cmluZyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYnl0ZXMgPSBwcF9wcmludF9ieXRlcyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaW50ID0gcHBfcHJpbnRfaW50IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbG9hdCA9IHBwX3ByaW50X2Zsb2F0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jaGFyID0gcHBfcHJpbnRfY2hhciBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYm9vbCA9IHBwX3ByaW50X2Jvb2wgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2JyZWFrID0gcHBfcHJpbnRfYnJlYWsgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2N1dCA9IHBwX3ByaW50X2N1dCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfc3BhY2UgPSBwcF9wcmludF9zcGFjZSBzdGRfZm9ybWF0dGVyXG5hbmQgZm9yY2VfbmV3bGluZSA9IHBwX2ZvcmNlX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ZsdXNoID0gcHBfcHJpbnRfZmx1c2ggc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X25ld2xpbmUgPSBwcF9wcmludF9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9pZl9uZXdsaW5lID0gcHBfcHJpbnRfaWZfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBvcGVuX3Rib3ggPSBwcF9vcGVuX3Rib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3Rib3ggPSBwcF9jbG9zZV90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YnJlYWsgPSBwcF9wcmludF90YnJlYWsgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X3RhYiA9IHBwX3NldF90YWIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3RhYiA9IHBwX3ByaW50X3RhYiBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWFyZ2luID0gcHBfc2V0X21hcmdpbiBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21heF9pbmRlbnQgPSBwcF9zZXRfbWF4X2luZGVudCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZ2VvbWV0cnkgPSBwcF9zZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHNhZmVfc2V0X2dlb21ldHJ5ID0gcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9nZW9tZXRyeSA9IHBwX2dldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgdXBkYXRlX2dlb21ldHJ5ID0gcHBfdXBkYXRlX2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfYm94ZXMgPSBwcF9zZXRfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWF4X2JveGVzID0gcHBfZ2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgb3Zlcl9tYXhfYm94ZXMgPSBwcF9vdmVyX21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZWxsaXBzaXNfdGV4dCA9IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZWxsaXBzaXNfdGV4dCA9IHBwX2dldF9lbGxpcHNpc190ZXh0IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3ByaW50X3RhZ3MgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X3ByaW50X3RhZ3MgPVxuICBwcF9nZXRfcHJpbnRfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X21hcmtfdGFncyA9XG4gIHBwX3NldF9tYXJrX3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJrX3RhZ3MgPVxuICBwcF9nZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfdGFncyA9XG4gIHBwX3NldF90YWdzIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgKilcblxuKCogVG8gZm9ybWF0IGEgbGlzdCAqKVxubGV0IHJlYyBwcF9wcmludF9saXN0ID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKClcbiAgfCBbdl0gLT4gcHBfdiBwcGYgdlxuICB8IHYgOjogdnMgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfcHJpbnRfbGlzdCB+cHBfc2VwIHBwX3YgcHBmIHZzXG5cbigqIFRvIGZvcm1hdCBhIHNlcXVlbmNlICopXG5sZXQgcmVjIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiAoKVxuICB8IFNlcS5Db25zICh2LCBzZXEpIC0+XG4gICAgcHBfc2VwIHBwZiAoKTtcbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG5sZXQgcHBfcHJpbnRfc2VxID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxXG5cbigqIFRvIGZvcm1hdCBmcmVlLWZsb3dpbmcgdGV4dCAqKVxubGV0IHBwX3ByaW50X3RleHQgcHBmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBsZWZ0ID0gcmVmIDAgaW5cbiAgbGV0IHJpZ2h0ID0gcmVmIDAgaW5cbiAgbGV0IGZsdXNoICgpID1cbiAgICBwcF9wcmludF9zdHJpbmcgcHBmIChTdHJpbmcuc3ViIHMgIWxlZnQgKCFyaWdodCAtICFsZWZ0KSk7XG4gICAgaW5jciByaWdodDsgbGVmdCA6PSAhcmlnaHQ7XG4gIGluXG4gIHdoaWxlICghcmlnaHQgPD4gbGVuKSBkb1xuICAgIG1hdGNoIHMuWyFyaWdodF0gd2l0aFxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBmbHVzaCAoKTtcbiAgICAgICAgcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGZsdXNoICgpOyBwcF9wcmludF9zcGFjZSBwcGYgKClcbiAgICAgICgqIHRoZXJlIGlzIG5vIHNwZWNpZmljIHN1cHBvcnQgZm9yICdcXHQnXG4gICAgICAgICBhcyBpdCBpcyB1bmNsZWFyIHdoYXQgYSByaWdodCBzZW1hbnRpY3Mgd291bGQgYmUgKilcbiAgICAgIHwgXyAtPiBpbmNyIHJpZ2h0XG4gIGRvbmU7XG4gIGlmICFsZWZ0IDw+IGxlbiB0aGVuIGZsdXNoICgpXG5cbmxldCBwcF9wcmludF9vcHRpb24gPyhub25lID0gZnVuIF8gKCkgLT4gKCkpIHBwX3YgcHBmID0gZnVuY3Rpb25cbnwgTm9uZSAtPiBub25lIHBwZiAoKVxufCBTb21lIHYgLT4gcHBfdiBwcGYgdlxuXG5sZXQgcHBfcHJpbnRfcmVzdWx0IH5vayB+ZXJyb3IgcHBmID0gZnVuY3Rpb25cbnwgT2sgdiAtPiBvayBwcGYgdlxufCBFcnJvciBlIC0+IGVycm9yIHBwZiBlXG5cbmxldCBwcF9wcmludF9laXRoZXIgfmxlZnQgfnJpZ2h0IHBwZiA9IGZ1bmN0aW9uXG58IEVpdGhlci5MZWZ0IGwgLT4gbGVmdCBwcGYgbFxufCBFaXRoZXIuUmlnaHQgciAtPiByaWdodCBwcGYgclxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5sZXQgY29tcHV0ZV90YWcgb3V0cHV0IHRhZ19hY2MgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgb3V0cHV0IHBwZiB0YWdfYWNjO1xuICBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBpZiBsZW4gPCAyIHRoZW4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICBlbHNlIEJ1ZmZlci5zdWIgYnVmIDEgKGxlbiAtIDIpXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICBEZWZpbmluZyBjb250aW51YXRpb25zIHRvIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgb2ZcbiAgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLlxuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxuKCogSW50ZXJwcmV0IGEgZm9ybWF0dGluZyBlbnRpdHkgb24gYSBmb3JtYXR0ZXIuICopXG5sZXQgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmbXRpbmdfbGl0ID0gbWF0Y2ggZm10aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9ib3ggcHBmICgpXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV90YWcgcHBmICgpXG4gIHwgQnJlYWsgKF8sIHdpZHRoLCBvZmZzZXQpICAtPiBwcF9wcmludF9icmVhayBwcGYgd2lkdGggb2Zmc2V0XG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9mbHVzaCBwcGYgKClcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgIC0+IHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9wcmludF9uZXdsaW5lIHBwZiAoKVxuICB8IE1hZ2ljX3NpemUgKF8sIF8pICAgICAgICAgLT4gKClcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICdAJ1xuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJyUnXG4gIHwgU2Nhbl9pbmRpYyBjICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCc7IHBwX3ByaW50X2NoYXIgcHBmIGNcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogRGlmZmVyIGZyb20gUHJpbnRmLm91dHB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mIGZvcm1hdHRpbmcuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBwcGYgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoU3RyaW5nLm1ha2UgMSBjKTtcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGYpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGY7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX29wZW5fc3RhZyBwcGYgKFN0cmluZ190YWcgKGNvbXB1dGVfdGFnIG91dHB1dF9hY2MgYWNjJykpXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIGxldCAoaW5kZW50LCBidHkpID0gb3Blbl9ib3hfb2Zfc3RyaW5nIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpIGluXG4gICAgcHBfb3Blbl9ib3hfZ2VuIHBwZiBpbmRlbnQgYnR5XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfY2hhciBwcGYgYztcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgZiBwcGY7XG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBwcGYgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogRGlmZmVyIGZyb20gUHJpbnRmLmJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mIGZvcm1hdHRpbmcuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi4gKilcbmxldCByZWMgc3RycHV0X2FjYyBwcGYgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoU3RyaW5nLm1ha2UgMSBjKTtcbiAgfCBBY2NfZGVsYXkgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChmICgpKTtcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGYpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGY7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX29wZW5fc3RhZyBwcGYgKFN0cmluZ190YWcgKGNvbXB1dGVfdGFnIHN0cnB1dF9hY2MgYWNjJykpXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIGxldCAoaW5kZW50LCBidHkpID0gb3Blbl9ib3hfb2Zfc3RyaW5nIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpIGluXG4gICAgcHBfb3Blbl9ib3hfZ2VuIHBwZiBpbmRlbnQgYnR5XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfY2hhciBwcGYgYztcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiAoZiAoKSk7XG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBwcGYgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKlxuXG4gIERlZmluaW5nIFtmcHJpbnRmXSBhbmQgdmFyaW91cyBmbGF2b3JzIG9mIFtmcHJpbnRmXS5cblxuKilcblxubGV0IGtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIHBwZiBhY2M7IGsgcHBmKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmFuZCBpa2ZwcmludGYgayBwcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBwcGYgZm10XG5cbmxldCBpZnByaW50ZiBfcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGlnbm9yZSAoKSBmbXRcblxubGV0IGZwcmludGYgcHBmID0ga2ZwcmludGYgaWdub3JlIHBwZlxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZF9mb3JtYXR0ZXIgZm10XG5sZXQgZXByaW50ZiBmbXQgPSBmcHJpbnRmIGVycl9mb3JtYXR0ZXIgZm10XG5cbmxldCBrZHByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBrIChmdW4gcHBmIC0+IG91dHB1dF9hY2MgcHBmIGFjYykpXG4gICAgRW5kX29mX2FjYyBmbXRcblxubGV0IGRwcmludGYgZm10ID0ga2RwcmludGYgKGZ1biBpIC0+IGkpIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBiID0gcHBfbWFrZV9idWZmZXIgKCkgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPVxuICAgIHN0cnB1dF9hY2MgcHBmIGFjYztcbiAgICBrIChmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGIgcHBmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgaWQgZm10XG5cbmxldCBrYXNwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBiID0gcHBfbWFrZV9idWZmZXIgKCkgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPVxuICAgIG91dHB1dF9hY2MgcHBmIGFjYztcbiAgICBrIChmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGIgcHBmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxubGV0IGFzcHJpbnRmIGZtdCA9IGthc3ByaW50ZiBpZCBmbXRcblxuKCogRmx1c2hpbmcgc3RhbmRhcmQgZm9ybWF0dGVycyBhdCBlbmQgb2YgZXhlY3V0aW9uLiAqKVxuXG5sZXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyAoKSA9XG4gIHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXIgKCk7XG4gIHBwX3ByaW50X2ZsdXNoIGVycl9mb3JtYXR0ZXIgKClcblxubGV0ICgpID0gYXRfZXhpdCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzXG5cbigqXG5cbiAgRGVwcmVjYXRlZCBzdHVmZi5cblxuKilcblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGVcbiAgICB+b3V0OmYgfmZsdXNoOmcgfm5ld2xpbmU6aCB+c3BhY2VzOmkgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgZiBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGlcblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoLFxuICAgc3RhdGUucHBfb3V0X25ld2xpbmUsIHN0YXRlLnBwX291dF9zcGFjZXMpXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHNldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHNldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5cbigqIERlcHJlY2F0ZWQgOiBlcnJvciBwcm9uZSBmdW5jdGlvbiwgZG8gbm90IHVzZSBpdC5cbiAgIFRoaXMgZnVuY3Rpb24gaXMgbmVpdGhlciBjb21wb3NpdGlvbmFsIG5vciBpbmNyZW1lbnRhbCwgc2luY2UgaXQgZmx1c2hlc1xuICAgdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGF0IGVhY2ggY2FsbC5cbiAgIFRvIGdldCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LCBkZWZpbmUgYSBmb3JtYXR0ZXIgb2YgeW91ciBvd24gd3JpdGluZyB0b1xuICAgdGhlIGJ1ZmZlciBhcmd1bWVudCwgYXMgaW5cbiAgIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGJcbiAgIHRoZW4gdXNlIHshZnByaW50ZiBwcGZ9IGFzIHVzdWFsLiAqKVxubGV0IGJwcmludGYgYiAoRm9ybWF0IChmbXQsIF8pIDogKCdhLCBmb3JtYXR0ZXIsIHVuaXQpIGZvcm1hdCkgPVxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9IG91dHB1dF9hY2MgcHBmIGFjYzsgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG4oKiBEZXByZWNhdGVkIDogYWxpYXMgZm9yIGtzcHJpbnRmLiAqKVxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuXG5cblxuKCogRGVwcmVjYXRlZCB0YWcgZnVuY3Rpb25zICopXG5cbnR5cGUgZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPSB7XG4gIG1hcmtfb3Blbl90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3RhZyA6IHRhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fdGFnIDogdGFnIC0+IHVuaXQ7XG4gIHByaW50X2Nsb3NlX3RhZyA6IHRhZyAtPiB1bml0O1xufVxuXG5cbmxldCBwcF9zZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3RhZyA9IG1jdDtcbiAgICAgcHJpbnRfb3Blbl90YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3RhZyA9IHBjdDtcbiAgIH0gPVxuICBsZXQgc3RyaW5naWZ5IGYgZSA9IGZ1bmN0aW9uIFN0cmluZ190YWcgcyAtPiBmIHMgfCBfIC0+IGUgaW5cbiAgc3RhdGUucHBfbWFya19vcGVuX3RhZyA8LSBzdHJpbmdpZnkgbW90IFwiXCI7XG4gIHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBtY3QgXCJcIjtcbiAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgPC0gc3RyaW5naWZ5IHBvdCAoKTtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBwY3QgKClcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBmbXQgKCkgPVxuICBsZXQgZnVucyA9IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgZm10ICgpIGluXG4gIGxldCBtYXJrX29wZW5fdGFnIHMgPSBmdW5zLm1hcmtfb3Blbl9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBtYXJrX2Nsb3NlX3RhZyBzID0gZnVucy5tYXJrX2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X29wZW5fdGFnIHMgPSBmdW5zLnByaW50X29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgcHJpbnRfY2xvc2VfdGFnIHMgPSBmdW5zLnByaW50X2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAge21hcmtfb3Blbl90YWc7IG1hcmtfY2xvc2VfdGFnOyBwcmludF9vcGVuX3RhZzsgcHJpbnRfY2xvc2VfdGFnfVxuXG5sZXQgc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iLCJtb2R1bGUgSnMgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgdHlwZSAnYSBqc19hcnJheSA9IHRcblxuICB0eXBlICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2sgPSB0XG5cbiAgZXh0ZXJuYWwgc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19zdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcIlxuXG4gIGV4dGVybmFsIGJ5dGVzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc2J5dGVzX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fYnl0ZXN0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzXCJcblxuICBleHRlcm5hbCBib29sIDogYm9vbCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgdG9fYm9vbCA6IHQgLT4gYm9vbCA9IFwiY2FtbF9qc190b19ib29sXCJcblxuICBleHRlcm5hbCBhcnJheSA6ICdhIGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnJvbV9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fYXJyYXkgOiB0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2pzX3RvX2FycmF5XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfZmxvYXQgOiBmbG9hdCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG4gIGV4dGVybmFsIGZsb2F0X29mX251bWJlciA6IHQgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9pbnQzMiA6IGludDMyIC0+IHQgPSBcImNhbWxfanNfZnJvbV9pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgaW50MzJfb2ZfbnVtYmVyIDogdCAtPiBpbnQzMiA9IFwiY2FtbF9qc190b19pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCBuYXRpdmVpbnRfb2ZfbnVtYmVyIDogdCAtPiBuYXRpdmVpbnQgPSBcImNhbWxfanNfdG9fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCB0eXBlb2YgOiB0IC0+IHQgPSBcImNhbWxfanNfdHlwZW9mXCJcblxuICBleHRlcm5hbCBpbnN0YW5jZW9mIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfaW5zdGFuY2VvZlwiXG5cbiAgZXh0ZXJuYWwgZGVidWdnZXIgOiB1bml0IC0+IHVuaXQgPSBcImRlYnVnZ2VyXCJcblxuICBleHRlcm5hbCBnZXQgOiB0IC0+IHQgLT4gdCA9IFwiY2FtbF9qc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldCA6IHQgLT4gdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfc2V0XCJcblxuICBleHRlcm5hbCBkZWxldGUgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19kZWxldGVcIlxuXG4gIGV4dGVybmFsIGNhbGwgOiB0IC0+IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2NhbGxcIlxuXG4gIGV4dGVybmFsIGZ1bl9jYWxsIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnVuX2NhbGxcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbCA6IHQgLT4gc3RyaW5nIC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19tZXRoX2NhbGxcIlxuXG4gIGV4dGVybmFsIG5ld19vYmogOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19uZXdcIlxuXG4gIGV4dGVybmFsIG5ld19vYmpfYXJyIDogdCAtPiB0IGpzX2FycmF5IC0+IHQgPSBcImNhbWxfb2pzX25ld19hcnJcIlxuXG4gIGV4dGVybmFsIG9iaiA6IChzdHJpbmcgKiB0KSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX29iamVjdFwiXG5cbiAgZXh0ZXJuYWwgZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgcHVyZV9leHByIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2pzX3B1cmVfZXhwclwiXG5cbiAgZXh0ZXJuYWwgZXZhbF9zdHJpbmcgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXZhbF9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGpzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgcHVyZV9qc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX3B1cmVfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICh0IGpzX2FycmF5IC0+ICdiKSAtPiAoJ2MsIHQganNfYXJyYXkgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAoJ2IgLT4gdCBqc19hcnJheSAtPiAnYSkgLT4gKCdiLCB0IGpzX2FycmF5IC0+ICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tcIlxuXG4gIGV4dGVybmFsIHdyYXBfbWV0aF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdhLCAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja1wiXG5lbmRcblxubW9kdWxlIFN5cyA9IHN0cnVjdFxuICB0eXBlICdhIGNhbGxiYWNrID0gJ2FcblxuICBleHRlcm5hbCBjcmVhdGVfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IGNvbnRlbnQ6c3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfY3JlYXRlX2ZpbGVcIlxuXG4gIGV4dGVybmFsIHJlYWRfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IHN0cmluZyA9IFwiY2FtbF9yZWFkX2ZpbGVfY29udGVudFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfb3V0cHV0JyA6IG91dF9jaGFubmVsIC0+IChqc19zdHJpbmc6SnMudCAtPiB1bml0KSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9pbnB1dCcgOiBpbl9jaGFubmVsIC0+ICh1bml0IC0+IHN0cmluZykgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfcG9pbnQgOiB1bml0IC0+IHN0cmluZyBsaXN0ID0gXCJjYW1sX2xpc3RfbW91bnRfcG9pbnRcIlxuXG4gIGV4dGVybmFsIG1vdW50X2F1dG9sb2FkIDogc3RyaW5nIC0+IChzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb24pIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tb3VudF9hdXRvbG9hZFwiXG5cbiAgZXh0ZXJuYWwgdW5tb3VudCA6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3VubW91bnRcIlxuXG4gIG1vZHVsZSBDb25maWcgPSBzdHJ1Y3RcbiAgICBleHRlcm5hbCB1c2VfanNfc3RyaW5nIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1wiXG5cbiAgICBleHRlcm5hbCBlZmZlY3RzIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1wiXG4gIGVuZFxuXG4gIGxldCB2ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLnNcblxuICBsZXQgZ2l0X3ZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uZ2l0X3ZlcnNpb25cbmVuZFxuXG5tb2R1bGUgRXJyb3IgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHJhaXNlXyA6IHQgLT4gJ2FcblxuICB2YWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4blxuICAoKiogQXR0YWNoIGEgSmF2YXNTY3JpcHQgZXJyb3IgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLiAgaWYgW2ZvcmNlID0gZmFsc2VdIGFuZCBhXG4gICAgSmF2YXNTY3JpcHQgZXJyb3IgaXMgYWxyZWFkeSBhdHRhY2hlZCwgaXQgd2lsbCBkbyBub3RoaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB0b1xuICAgIHN0b3JlIGFuZCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlcy5cblxuICAgIEF0dGFjaGluZyBKYXZhc1NjcmlwdCBlcnJvcnMgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSB3aGVuIGNvbXBpbGluZyB3aXRoXG4gICAgWy0tZW5hYmxlIHdpdGgtanMtZXJyb3JdLiAqKVxuXG4gIHZhbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb25cbiAgKCoqIEV4dHJhY3QgYSBKYXZhU2NyaXB0IGVycm9yIGF0dGFjaGVkIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbiwgaWYgYW55LiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgICAgIGluc3BlY3QgYW4gZXZlbnR1YWwgc3RhY2sgc3RyYWNlLCBlc3BlY2lhbGx5IHdoZW4gc291cmNlbWFwIGlzIGVuYWJsZWQuICopXG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG4gICgqKiBUaGUgW0Vycm9yXSBleGNlcHRpb24gd3JhcCBqYXZhc2NyaXB0IGV4Y2VwdGlvbnMgd2hlbiBjYXVnaHQgYnkgT0NhbWwgY29kZS5cbiAgICAgIEluIGNhc2UgdGhlIGphdmFzY3JpcHQgZXhjZXB0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBqYXZhc2NyaXB0IFtFcnJvcl0sXG4gICAgICBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYW5kIHdyYXBwZWQgaW50byBhIFtGYWlsdXJlXSBleGNlcHRpb24uXG4gICopXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG5cbiAgbGV0IF8gPSBDYWxsYmFjay5yZWdpc3Rlcl9leGNlcHRpb24gXCJqc0Vycm9yXCIgKEV4biAoT2JqLm1hZ2ljIFt8fF0pKVxuXG4gIGxldCByYWlzZV8gOiB0IC0+ICdhID0gSnMuanNfZXhwciBcIihmdW5jdGlvbiAoZXhuKSB7IHRocm93IGV4biB9KVwiXG5cbiAgZXh0ZXJuYWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uID0gXCJjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cIlxuXG4gIGV4dGVybmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG4gPSBcImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXCJcbmVuZFxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMi02MFwiXVxuXG5tb2R1bGUgRm9yX2NvbXBhdGliaWxpdHlfb25seSA9IHN0cnVjdFxuICAoKiBBZGQgcHJpbWl0aXZlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiBFeGlzdGluZyB1c2VycyBtaWdodFxuICAgICBkZXBlbmQgb24gaXQgKGUuZy4gZ2VuX2pzX2FwaSksIHdlIGRvbnQgd2FudCB0aGUgb2NhbWwgY29tcGlsZXJcbiAgICAgdG8gY29tcGxhaW4gYWJvdXQgdGhlc2VzIG1pc3NpbmcgcHJpbWl0aXZlcy4gKilcblxuICBleHRlcm5hbCBjYW1sX2pzX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IEpzLnQgPSBcImNhbWxfanNfZnJvbV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19ieXRlX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF9vZl9qc19hcnJheSA6ICdhIEpzLmpzX2FycmF5IC0+ICdhIGxpc3QgPSBcImNhbWxfbGlzdF9vZl9qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X3RvX2pzX2FycmF5IDogJ2EgbGlzdCAtPiAnYSBKcy5qc19hcnJheSA9IFwiY2FtbF9saXN0X3RvX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCB2YXJpYWJsZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc192YXJcIlxuZW5kXG5cbm1vZHVsZSBUeXBlZF9hcnJheSA9IHN0cnVjdFxuICB0eXBlICgnYSwgJ2IpIHR5cGVkQXJyYXkgPSBKcy50XG5cbiAgdHlwZSBhcnJheUJ1ZmZlciA9IEpzLnRcblxuICB0eXBlIHVpbnQ4QXJyYXkgPSBKcy50XG5cbiAgZXh0ZXJuYWwga2luZCA6ICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYikgQmlnYXJyYXkua2luZFxuICAgID0gXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGZyb21fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50IC0+ICgnYSwgJ2IpIHR5cGVkQXJyYXlcbiAgICA9IFwiY2FtbF9iYV90b190eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnRcbiAgICA9IFwiY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5XCJcblxuICBtb2R1bGUgQmlnc3RyaW5nID0gc3RydWN0XG4gICAgdHlwZSB0ID0gKGNoYXIsIEJpZ2FycmF5LmludDhfdW5zaWduZWRfZWx0LCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuQXJyYXkxLnRcblxuICAgIGV4dGVybmFsIHRvX2FycmF5QnVmZmVyIDogdCAtPiBhcnJheUJ1ZmZlciA9IFwiYmlnc3RyaW5nX3RvX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCB0b191aW50OEFycmF5IDogdCAtPiB1aW50OEFycmF5ID0gXCJiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXlcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfYXJyYXlCdWZmZXIgOiBhcnJheUJ1ZmZlciAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHQgPSBcImJpZ3N0cmluZ19vZl90eXBlZF9hcnJheVwiXG4gIGVuZFxuXG4gIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfYXJyYXlcIlxuZW5kXG5cbm1vZHVsZSBJbnQ2NCA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGVfaW50NjRfbG9fbWlfaGkgOiBpbnQgLT4gaW50IC0+IGludCAtPiBJbnQ2NC50XG4gICAgPSBcImNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXCJcbmVuZFxuIiwib3BlbiBCcnJcblxubW9kdWxlIEtleV9wYXRoID0gc3RydWN0XG4gIHR5cGUgdCA9IElkIG9mIHN0cmluZyB8IFMgb2YgdCBhcnJheVxuXG4gIGxldCByZWMgdG9fanYgPSBmdW5jdGlvblxuICAgIHwgSWQgcCAtPiBKdi5vZl9zdHJpbmcgcFxuICAgIHwgUyBrZXlzIC0+IEp2Lm9mX2FycmF5IHRvX2p2IGtleXNcbmVuZFxuXG5tb2R1bGUgS2V5X3JhbmdlID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IGJvdW5kIH5sb3dlciB+dXBwZXIgPyhsb3dlcl9vcGVuID0gZmFsc2UpID8odXBwZXJfb3BlbiA9IGZhbHNlKSAoKSA9XG4gICAgbGV0IGMgPSBKdi5nZXQgSnYuZ2xvYmFsIFwiSURCS2V5UmFuZ2VcIiBpblxuICAgIEp2LmNhbGwgYyBcImJvdW5kXCJcbiAgICAgIFt8IGxvd2VyOyB1cHBlcjsgSnYub2ZfYm9vbCBsb3dlcl9vcGVuOyBKdi5vZl9ib29sIHVwcGVyX29wZW4gfF1cbmVuZFxuXG5tb2R1bGUgRXZlbnRzID0gc3RydWN0XG4gIG1vZHVsZSBWZXJzaW9uX2NoYW5nZSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IEp2LnRcblxuICAgIGxldCBvbGRfdmVyc2lvbiB0ID0gSnYudG9faW50IEBAIEp2LmdldCB0IFwib2xkVmVyc2lvblwiXG4gICAgbGV0IG5ld192ZXJzaW9uIHQgPSBKdi50b19pbnQgQEAgSnYuZ2V0IHQgXCJuZXdWZXJzaW9uXCJcbiAgZW5kXG5cbiAgbGV0IHVwZ3JhZGVfbmVlZGVkIDogVmVyc2lvbl9jaGFuZ2UudCBFdi50eXBlJyA9XG4gICAgRXYuVHlwZS5jcmVhdGUgKEpzdHIudiBcInVwZ3JhZGVuZWVkZWRcIilcblxuICBsZXQgc3VjY2VzcyA6IEV2LlR5cGUudm9pZCBFdi50eXBlJyA9IEV2LlR5cGUudm9pZCAoSnN0ci52IFwic3VjY2Vzc1wiKVxuICBsZXQgZXJyb3IgOiBFdi5UeXBlLnZvaWQgRXYudHlwZScgPSBFdi5UeXBlLnZvaWQgKEpzdHIudiBcImVycm9yXCIpXG5lbmRcblxubW9kdWxlIFJlcXVlc3QgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0geyBqdiA6IEp2LnQ7IG9mX2p2IDogSnYudCAtPiAnYSB9XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCBvZl9qdiB+ZiBqID0geyBqdiA9IG9mX2p2IGo7IG9mX2p2ID0gZiB9XG4gIGxldCBlcnJvciB0ID0gSnYuZ2V0IHQuanYgXCJlcnJvclwiIHw+IEp2LnRvX2Vycm9yXG5cbiAgbGV0IHJlc3VsdCAodHlwZSBhKSAodCA6IGEgdCkgOiBhID1cbiAgICAoKiB0b2RvIHRoaXMgaXMgd3JvbmcgKilcbiAgICBKdi5nZXQgdC5qdiBcInJlc3VsdFwiIHw+IHQub2ZfanZcblxuICBsZXQgb25fc3VjY2VzcyAodHlwZSBhKSB+KGYgOiBFdi5UeXBlLnZvaWQgRXYudCAtPiBhIHQgLT4gdW5pdCkgKHQgOiBhIHQpID1cbiAgICBsZXQgZiBldiA9IGYgZXYgdCBpblxuICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXZlbnRzLnN1Y2Nlc3MgZiAoRXYudGFyZ2V0X29mX2p2IHQuanYpO1xuICAgIHRcblxuICBsZXQgb25fZXJyb3IgKHR5cGUgYSkgfihmIDogRXYuVHlwZS52b2lkIEV2LnQgLT4gYSB0IC0+IHVuaXQpICh0IDogYSB0KSA9XG4gICAgbGV0IGYgZXYgPSBmIGV2IHQgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy5lcnJvciBmIChFdi50YXJnZXRfb2ZfanYgdC5qdik7XG4gICAgdFxuXG4gIGxldCBmdXQgdCA9XG4gICAgbGV0IHJlc3VsdF9mdXQsIHNldCA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgICBsZXQgXyA9IG9uX3N1Y2Nlc3MgfmY6KGZ1biBfIHQgLT4gc2V0IChPayAocmVzdWx0IHQpKSkgdCBpblxuICAgIGxldCBfID0gb25fZXJyb3IgfmY6KGZ1biBfIHQgLT4gc2V0IChFcnJvciAoZXJyb3IgdCkpKSB0IGluXG4gICAgcmVzdWx0X2Z1dFxuZW5kXG5cbm1vZHVsZSB0eXBlIEtleSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgcGF0aCA6IEtleV9wYXRoLnRcbiAgdmFsIHRvX2p2IDogdCAtPiBKdi50XG4gIHZhbCBvZl9qdiA6IEp2LnQgLT4gdFxuZW5kXG5cbm1vZHVsZSB0eXBlIFN0b3JlX2NvbnRlbnRfaW50ZiA9IHNpZ1xuICB0eXBlIHRcblxuICBtb2R1bGUgS2V5IDogS2V5XG5cbiAgdmFsIG5hbWUgOiBzdHJpbmdcbiAgdmFsIHRvX2p2IDogdCAtPiBKdi50XG4gIHZhbCBvZl9qdiA6IEp2LnQgLT4gdFxuICB2YWwgZ2V0X2tleSA6IHQgLT4gS2V5LnRcbmVuZFxuXG5tb2R1bGUgRGlyZWN0aW9uID0gc3RydWN0XG4gIHR5cGUgdCA9IE5leHQgfCBOZXh0X3VuaXF1ZSB8IFByZXYgfCBQcmV2X3VuaXF1ZVxuXG4gIGxldCB0b19zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgTmV4dCAtPiBcIm5leHRcIlxuICAgIHwgTmV4dF91bmlxdWUgLT4gXCJuZXh0VW5pcXVlXCJcbiAgICB8IFByZXYgLT4gXCJwcmV2XCJcbiAgICB8IFByZXZfdW5pcXVlIC0+IFwicHJldlVuaXF1ZVwiXG5cbiAgbGV0IG9mX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBcIm5leHRcIiAtPiBOZXh0XG4gICAgfCBcIm5leHRVbmlxdWVcIiAtPiBOZXh0X3VuaXF1ZVxuICAgIHwgXCJwcmV2XCIgLT4gUHJldlxuICAgIHwgXCJwcmV2VW5pcXVlXCIgLT4gUHJldl91bmlxdWVcbiAgICB8IHMgLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgcylcblxuICBsZXQgdG9fanYgZCA9IEp2Lm9mX3N0cmluZyAodG9fc3RyaW5nIGQpXG4gIGxldCBvZl9qdiBqID0gb2Zfc3RyaW5nIChKdi50b19zdHJpbmcgailcbmVuZFxuXG5tb2R1bGUgQ29udGVudF9hY2Nlc3MgKENvbnRlbnQgOiBTdG9yZV9jb250ZW50X2ludGYpIChLZXkgOiBLZXkpID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgY291bnQgKCkgdCA9IEp2LmNhbGwgdCBcImNvdW50XCIgW3x8XSB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkp2LnRvX2ludFxuXG4gIGxldCBnZXQga2V5IHQgPVxuICAgIGxldCBmIGp2ID0gSnYudG9fb3B0aW9uIChmdW4gaiAtPiBDb250ZW50Lm9mX2p2IGopIGp2IGluXG4gICAgSnYuY2FsbCB0IFwiZ2V0XCIgW3wgS2V5LnRvX2p2IGtleSB8XSB8PiBSZXF1ZXN0Lm9mX2p2IH5mXG5cbiAgbGV0IGdldF9hbGwgdCA9XG4gICAgbGV0IGYganYgPSBKdi50b19hcnJheSAoZnVuIGMgLT4gQ29udGVudC5vZl9qdiBjKSBqdiBpblxuICAgIEp2LmNhbGwgdCBcImdldEFsbFwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIGxldCBnZXRfYWxsX2tleXMgP3F1ZXJ5IHQgPVxuICAgIGxldCBhcmdzID0gbWF0Y2ggcXVlcnkgd2l0aCBOb25lIC0+IFt8fF0gfCBTb21lIHF1ZXJ5IC0+IFt8IHF1ZXJ5IHxdIGluXG4gICAgbGV0IGYganYgPSBKdi50b19hcnJheSAoZnVuIGMgLT4gQ29udGVudC5LZXkub2ZfanYgYykganYgaW5cbiAgICBKdi5jYWxsIHQgXCJnZXRBbGxLZXlzXCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mXG5cbiAgbW9kdWxlIEN1cnNvciA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IEp2LnRcblxuICAgIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG4gICAgbGV0IGtleSB0ID0gSnYuZ2V0IHQgXCJrZXlcIiB8PiBKdi50b19vcHRpb24gS2V5Lm9mX2p2XG4gICAgbGV0IHByaW1hcnlfa2V5IHQgPSBKdi5nZXQgdCBcInByaW1hcnlLZXlcIiB8PiBKdi50b19vcHRpb24gQ29udGVudC5LZXkub2ZfanZcblxuICAgIGxldCBhZHZhbmNlIGNvdW50IHQgPVxuICAgICAgaWdub3JlIEBAIEp2LmNhbGwgdCBcImFkdmFuY2VcIiBbfCBKdi5vZl9pbnQgY291bnQgfF07XG4gICAgICB0XG5cbiAgICBsZXQgY29udGludWUgP2tleSB0ID1cbiAgICAgIGxldCBhcmdzID1cbiAgICAgICAgbWF0Y2gga2V5IHdpdGggTm9uZSAtPiBbfHxdIHwgU29tZSBrZXkgLT4gW3wgQ29udGVudC5LZXkudG9fanYga2V5IHxdXG4gICAgICBpblxuICAgICAgaWdub3JlIEBAIEp2LmNhbGwgdCBcImNvbnRpbnVlXCIgYXJnc1xuICBlbmRcblxuICBtb2R1bGUgQ3Vyc29yX3dpdGhfdmFsdWUgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIEN1cnNvclxuXG4gICAgbGV0IHZhbHVlIHQgPVxuICAgICAgbGV0IG9mX2p2IGogPSBDb250ZW50Lm9mX2p2IGogaW5cbiAgICAgIGxldCB2ID0gSnYuZ2V0IHQgXCJ2YWx1ZVwiIGluXG4gICAgICBKdi50b19vcHRpb24gb2ZfanYgdlxuXG4gICAgbGV0IGRlbGV0ZSB0ID0gSnYuY2FsbCB0IFwiZGVsZXRlXCIgW3x8XSB8PiBSZXF1ZXN0Lm9mX2p2IH5mOihmdW4gXyAtPiAoKSlcblxuICAgIGxldCB1cGRhdGUgdiB0ID1cbiAgICAgIEp2LmNhbGwgdCBcInVwZGF0ZVwiIFt8IENvbnRlbnQudG9fanYgdiB8XVxuICAgICAgfD4gUmVxdWVzdC5vZl9qdiB+ZjpDb250ZW50LktleS5vZl9qdlxuICBlbmRcblxuICBsZXQgb3Blbl9jdXJzb3IgP3F1ZXJ5ID9kaXJlY3Rpb24gdCA6IEN1cnNvcl93aXRoX3ZhbHVlLnQgb3B0aW9uIFJlcXVlc3QudCA9XG4gICAgbGV0IGRpcmVjdGlvbiA9IE9wdGlvbi5tYXAgRGlyZWN0aW9uLnRvX2p2IGRpcmVjdGlvbiBpblxuICAgIGxldCBhcmdzID1cbiAgICAgICgqIHRvZG86IHF1ZXJ5ICEqKVxuICAgICAgbWF0Y2ggKHF1ZXJ5LCBkaXJlY3Rpb24pIHdpdGhcbiAgICAgIHwgU29tZSBxLCBTb21lIGQgLT4gW3wgcTsgZCB8XVxuICAgICAgfCBOb25lLCBTb21lIGQgLT4gW3wgSnYubnVsbDsgZCB8XVxuICAgICAgfCBTb21lIHEsIE5vbmUgLT4gW3wgcSB8XVxuICAgICAgfCBOb25lLCBOb25lIC0+IFt8fF1cbiAgICBpblxuICAgIGxldCBmIGp2ID0gSnYudG9fb3B0aW9uIEN1cnNvcl93aXRoX3ZhbHVlLm9mX2p2IGp2IGluXG4gICAgSnYuY2FsbCB0IFwib3BlbkN1cnNvclwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIGxldCBvcGVuX2tleV9jdXJzb3IgP3F1ZXJ5ID9kaXJlY3Rpb24gdCA6IEN1cnNvcl93aXRoX3ZhbHVlLnQgb3B0aW9uIFJlcXVlc3QudFxuICAgICAgPVxuICAgIGxldCBkaXJlY3Rpb24gPSBPcHRpb24ubWFwIERpcmVjdGlvbi50b19qdiBkaXJlY3Rpb24gaW5cbiAgICBsZXQgYXJncyA9XG4gICAgICAoKiB0b2RvOiBxdWVyeSAhKilcbiAgICAgIG1hdGNoIChxdWVyeSwgZGlyZWN0aW9uKSB3aXRoXG4gICAgICB8IFNvbWUgcSwgU29tZSBkIC0+IFt8IHE7IGQgfF1cbiAgICAgIHwgTm9uZSwgU29tZSBkIC0+IFt8IEp2Lm51bGw7IGQgfF1cbiAgICAgIHwgU29tZSBxLCBOb25lIC0+IFt8IHEgfF1cbiAgICAgIHwgTm9uZSwgTm9uZSAtPiBbfHxdXG4gICAgaW5cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiBDdXJzb3Iub2ZfanYganYgaW5cbiAgICBKdi5jYWxsIHQgXCJvcGVuS2V5Q3Vyc29yXCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mXG5cbiAgKCogW2ZvbGRfa2V5XSB3aWxsIGZvbGQgb3ZlciBhbGwga2V5cyByZXR1cm5lZCBieSB0aGUgZ2l2ZW4gY3Vyc29yLlxuICAgICBOb3RlIHRoYXQgaXQgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBbZ2V0X2FsbF9rZXlzXSB0byBidWlsZCBhbiBhcnJheVxuICAgICBvZiBldmVyeSBrZXlzLiBJdCdzIG1vc3QgcHJvYmFibHkgZHVlIHRvIGEgY2FjaGluZy1iYXNlZCBvcHRpbWl6YXRpb25cbiAgICAgb2YgdGhlIFtnZXRfYWxsX2tleXNdIHJlc3VsdHMgKGF0IGxlYXN0IGluIEZpcmVmb3gpLiAqKVxuICBsZXQgZm9sZF9rZXlzIH5pbml0IH5mIGN1cnNvcl9yZXEgPVxuICAgIGxldCByZXN1bHQsIHNldF9yZXN1bHQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgbGV0IGFjYyA9IHJlZiBpbml0IGluXG4gICAgbGV0IF8gPVxuICAgICAgUmVxdWVzdC5vbl9zdWNjZXNzIGN1cnNvcl9yZXEgfmY6KGZ1biBfZXYgciAtPlxuICAgICAgICAgIG1hdGNoIFJlcXVlc3QucmVzdWx0IHIgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBzZXRfcmVzdWx0IChPayAhYWNjKVxuICAgICAgICAgIHwgU29tZSBjdXJzb3IgLT5cbiAgICAgICAgICAgICAgKCogVGhlIGN1cnNvciBzaG91bGQgbm90IGJlIG91dCBvZiByYW5nZSBhdCB0aGF0IHBvaW50IHNvIHRoZSBrZXlzXG4gICAgICAgICAgICAgICAgIHNob3VsZCBoYXZlIGEgdmFsdWUuICopXG4gICAgICAgICAgICAgIGxldCBrZXkgPSBDdXJzb3Iua2V5IGN1cnNvciB8PiBPcHRpb24uZ2V0IGluXG4gICAgICAgICAgICAgIGxldCBwcmltYXJ5X2tleSA9IEN1cnNvci5wcmltYXJ5X2tleSBjdXJzb3IgfD4gT3B0aW9uLmdldCBpblxuICAgICAgICAgICAgICBhY2MgOj0gZiAhYWNjIGtleSBwcmltYXJ5X2tleTtcbiAgICAgICAgICAgICAgQ3Vyc29yLmNvbnRpbnVlIGN1cnNvcilcbiAgICAgIHw+IFJlcXVlc3Qub25fZXJyb3IgfmY6KGZ1biBfZXYgcmVxIC0+XG4gICAgICAgICAgICAgc2V0X3Jlc3VsdCAoRXJyb3IgKFJlcXVlc3QuZXJyb3IgcmVxKSkpXG4gICAgaW5cbiAgICByZXN1bHRcbmVuZFxuXG5tb2R1bGUgdHlwZSBTdG9yZSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcblxuICBtb2R1bGUgQ29udGVudCA6IFN0b3JlX2NvbnRlbnRfaW50ZlxuZW5kXG5cbm1vZHVsZSB0eXBlIEluZGV4ID0gc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCBvZl9qdiA6IEp2LnQgLT4gdFxuICB2YWwgbmFtZSA6IHN0cmluZ1xuXG4gIG1vZHVsZSBLZXkgOiBLZXlcbmVuZFxuXG5tb2R1bGUgTWFrZV9pbmRleFxuICAgIChQIDogc2lnXG4gICAgICB2YWwgbmFtZSA6IHN0cmluZ1xuICAgIGVuZClcbiAgICAoQyA6IFN0b3JlX2NvbnRlbnRfaW50ZilcbiAgICAoSyA6IEtleSkgPVxuc3RydWN0XG4gIG1vZHVsZSBDb250ZW50ID0gQ1xuICBtb2R1bGUgS2V5ID0gS1xuICBpbmNsdWRlIENvbnRlbnRfYWNjZXNzIChDb250ZW50KSAoSylcbiAgaW5jbHVkZSBQXG5lbmRcblxubW9kdWxlIE1ha2Vfb2JqZWN0X3N0b3JlIChDIDogU3RvcmVfY29udGVudF9pbnRmKSA9IHN0cnVjdFxuICBtb2R1bGUgQ29udGVudCA9IENcbiAgaW5jbHVkZSBDb250ZW50X2FjY2VzcyAoQ29udGVudCkgKENvbnRlbnQuS2V5KVxuXG4gIGxldCBhZGQgdiA/KGtleSA6IENvbnRlbnQuS2V5LnQgb3B0aW9uKSB0IDogQ29udGVudC5LZXkudCBSZXF1ZXN0LnQgPVxuICAgIGxldCBhcmdzID1cbiAgICAgIG1hdGNoIGtleSB3aXRoXG4gICAgICB8IFNvbWUga2V5IC0+IFt8IENvbnRlbnQudG9fanYgdjsgQ29udGVudC5LZXkudG9fanYga2V5IHxdXG4gICAgICB8IE5vbmUgLT4gW3wgQ29udGVudC50b19qdiB2IHxdXG4gICAgaW5cbiAgICBKdi5jYWxsIHQgXCJhZGRcIiBhcmdzIHw+IFJlcXVlc3Qub2ZfanYgfmY6Q29udGVudC5LZXkub2ZfanZcblxuICBsZXQgY3JlYXRlX2luZGV4ICh0eXBlIHQnKSAobW9kdWxlIEkgOiBJbmRleCB3aXRoIHR5cGUgdCA9IHQnKSB0IDogdCcgPVxuICAgIGxldCBrZXlfcGF0aCA9IEtleV9wYXRoLnRvX2p2IEkuS2V5LnBhdGggaW5cbiAgICBKdi5jYWxsIHQgXCJjcmVhdGVJbmRleFwiIFt8IEp2Lm9mX3N0cmluZyBJLm5hbWU7IGtleV9wYXRoIHxdIHw+IEkub2ZfanZcblxuICBsZXQgaW5kZXggKHR5cGUgdCcpIChtb2R1bGUgSSA6IEluZGV4IHdpdGggdHlwZSB0ID0gdCcpIHQgOiB0JyA9XG4gICAgSnYuY2FsbCB0IFwiaW5kZXhcIiBbfCBKdi5vZl9zdHJpbmcgSS5uYW1lIHxdIHw+IEkub2ZfanZcblxuICBsZXQgcHV0IHYgPyhrZXkgOiBDb250ZW50LktleS50IG9wdGlvbikgdCA6IENvbnRlbnQuS2V5LnQgUmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCBrZXkgd2l0aFxuICAgICAgfCBTb21lIGtleSAtPiBbfCBDb250ZW50LnRvX2p2IHY7IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgfCBOb25lIC0+IFt8IENvbnRlbnQudG9fanYgdiB8XVxuICAgIGluXG4gICAgSnYuY2FsbCB0IFwicHV0XCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkNvbnRlbnQuS2V5Lm9mX2p2XG5lbmRcblxubW9kdWxlIFRyYW5zYWN0aW9uID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICB0eXBlIG1vZGUgPSBSZWFkb25seSB8IFJlYWR3cml0ZSB8IFJlYWR3cml0ZWZsdXNoXG5cbiAgbGV0IHN0cmluZ19vZl9tb2RlID0gZnVuY3Rpb25cbiAgICB8IFJlYWRvbmx5IC0+IFwicmVhZG9ubHlcIlxuICAgIHwgUmVhZHdyaXRlIC0+IFwicmVhZHdyaXRlXCJcbiAgICB8IFJlYWR3cml0ZWZsdXNoIC0+IFwicmVhZHdyaXRlZmx1c2hcIlxuXG4gIGxldCBtb2RlX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBcInJlYWRvbmx5XCIgLT4gUmVhZG9ubHlcbiAgICB8IFwicmVhZHdyaXRlXCIgLT4gUmVhZHdyaXRlXG4gICAgfCBcInJlYWR3cml0ZWZsdXNoXCIgLT4gUmVhZHdyaXRlZmx1c2hcbiAgICB8IHMgLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgcylcblxuICBsZXQgb2JqZWN0X3N0b3JlICh0eXBlIHQnKSAobW9kdWxlIFMgOiBTdG9yZSB3aXRoIHR5cGUgdCA9IHQnKSB0IDogdCcgPVxuICAgIEp2LmNhbGwgdCBcIm9iamVjdFN0b3JlXCIgW3wgSnYub2Zfc3RyaW5nIFMuQ29udGVudC5uYW1lIHxdIHw+IFMub2ZfanZcbmVuZFxuXG5tb2R1bGUgRGF0YWJhc2UgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSnYudFxuXG4gIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCBjcmVhdGVfb2JqZWN0X3N0b3JlICh0eXBlIHQnKSAobW9kdWxlIFMgOiBTdG9yZSB3aXRoIHR5cGUgdCA9IHQnKVxuICAgICAgPyhhdXRvX2luY3JlbWVudCA9IGZhbHNlKSAoZGIgOiB0KSA6IHQnID1cbiAgICBsZXQgb3B0cyA9IFsgKFwiYXV0b0luY3JlbWVudFwiLCBKdi5vZl9ib29sIGF1dG9faW5jcmVtZW50KSBdIGluXG4gICAgKCogVE9ETzogbW92ZSBhdXRvaW5jcmVtZW50IHRvIHN0b3JlX2NvbnRlbnQgKilcbiAgICBsZXQga2V5X3BhdGggPSBLZXlfcGF0aC50b19qdiBTLkNvbnRlbnQuS2V5LnBhdGggaW5cbiAgICBsZXQgb3B0cyA9IChcImtleVBhdGhcIiwga2V5X3BhdGgpIDo6IG9wdHMgaW5cbiAgICBsZXQgb3B0aW9ucyA9IEp2Lm9iaiBAQCBBcnJheS5vZl9saXN0IG9wdHMgaW5cbiAgICBDb25zb2xlLmluZm8gWyBcIm5ldyBvYmplY3Qgc3RvcmUgd2l0aCBvcHRpb25zOlwiOyBvcHRpb25zIF07XG4gICAgKCogVE9ETzoga2V5cGF0aCBzaG91bGQgYmUgb3B0aW9ubmFsICopXG4gICAgSnYuY2FsbCBkYiBcImNyZWF0ZU9iamVjdFN0b3JlXCIgW3wgSnYub2Zfc3RyaW5nIFMuQ29udGVudC5uYW1lOyBvcHRpb25zIHxdXG4gICAgfD4gUy5vZl9qdlxuXG4gIGxldCBkZWxldGVfb2JqZWN0X3N0b3JlIHQgbmFtZSA9XG4gICAgSnYuY2FsbCB0IFwiZGVsZXRlT2JqZWN0U3RvcmVcIiBbfCBKdi5vZl9zdHJpbmcgbmFtZSB8XSB8PiBpZ25vcmVcblxuICBsZXQgdHJhbnNhY3Rpb24gc3RvcmVzID8obW9kZSA9IFRyYW5zYWN0aW9uLlJlYWRvbmx5KSB0ID1cbiAgICBsZXQgbW9kZSA9IFRyYW5zYWN0aW9uLnN0cmluZ19vZl9tb2RlIG1vZGUgfD4gSnYub2Zfc3RyaW5nIGluXG4gICAgbGV0IGp2X29mX3N0b3JlIChtb2R1bGUgUyA6IFN0b3JlKSA9IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZSBpblxuICAgIEp2LmNhbGwgdCBcInRyYW5zYWN0aW9uXCIgW3wgSnYub2ZfbGlzdCBqdl9vZl9zdG9yZSBzdG9yZXM7IG1vZGUgfF1cbiAgICB8PiBUcmFuc2FjdGlvbi5vZl9qdlxuXG4gIGxldCBvYmplY3Rfc3RvcmVfbmFtZXMgdCA9XG4gICAgSnYuZ2V0IHQgXCJvYmplY3RTdG9yZU5hbWVzXCIgfD4gSnYudG9fYXJyYXkgSnYudG9fc3RyaW5nXG5lbmRcblxubW9kdWxlIE9wZW5fZGJfcmVxdWVzdCA9IHN0cnVjdFxuICB0eXBlIHQgPSBEYXRhYmFzZS50IFJlcXVlc3QudFxuXG4gIGxldCBvbl91cGdyYWRlX25lZWRlZCB+KGYgOiBFdmVudHMuVmVyc2lvbl9jaGFuZ2UudCBFdi50IC0+IHQgLT4gdW5pdCkgKHQgOiB0KVxuICAgICAgOiB0ID1cbiAgICBsZXQgZiBldiA9XG4gICAgICBsZXQgcmVxIDogdCA9XG4gICAgICAgIEV2LmN1cnJlbnRfdGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdlxuICAgICAgICB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkRhdGFiYXNlLm9mX2p2XG4gICAgICBpblxuICAgICAgZiBldiByZXFcbiAgICBpblxuICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXZlbnRzLnVwZ3JhZGVfbmVlZGVkIGYgKEV2LnRhcmdldF9vZl9qdiB0Lmp2KTtcbiAgICB0XG5cbiAgZXh0ZXJuYWwgYXNfcmVxdWVzdCA6IHQgLT4gRGF0YWJhc2UudCBSZXF1ZXN0LnQgPSBcIiVpZGVudGl0eVwiXG5lbmRcblxubW9kdWxlIEZhY3RvcnkgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSnYudFxuXG4gIGxldCBvcGVuJyB+bmFtZSA/dmVyc2lvbiB0IDogT3Blbl9kYl9yZXF1ZXN0LnQgPVxuICAgIGxldCBhcmdzID1cbiAgICAgIG1hdGNoIHZlcnNpb24gd2l0aFxuICAgICAgfCBTb21lIHYgLT4gW3wgbmFtZTsgc3RyaW5nX29mX2ludCB2IHxdXG4gICAgICB8IE5vbmUgLT4gW3wgbmFtZSB8XVxuICAgIGluXG5cbiAgICBKdi5jYWxsIHQgXCJvcGVuXCIgQEAgQXJyYXkubWFwIEp2Lm9mX3N0cmluZyBhcmdzXG4gICAgfD4gUmVxdWVzdC5vZl9qdiB+ZjpEYXRhYmFzZS5vZl9qdlxuZW5kXG5cbmxldCBnZXRfZmFjdG9yeSA/KGdsb2JhbCA9IEp2Lmdsb2JhbCkgKCkgOiBGYWN0b3J5LnQgPSBKdi5nZXQgZ2xvYmFsIFwiaW5kZXhlZERCXCJcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBBcnJheSB1dGlsc30gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZ2VuID0gdW5pdCAtPiAnYSBvcHRpb25cbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIG9yZCA9ICdhIC0+ICdhIC0+IGludFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG4oKiogezIgQXJyYXlzfSAqKVxuXG5pbmNsdWRlIEFycmF5XG5cbmxldCBlbXB0eSA9IFt8fF1cblxubGV0IGdldF9zYWZlIGEgaSA9XG4gIGlmIGkgPj0gMCAmJiBpIDwgQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIFNvbWUgKEFycmF5LnVuc2FmZV9nZXQgYSBpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5sZXQgbWFwX2lucGxhY2UgZiBhID0gQXJyYXkuaXRlcmkgKGZ1biBpIGUgLT4gQXJyYXkudW5zYWZlX3NldCBhIGkgKGYgZSkpIGFcbmxldCBtYXBpX2lucGxhY2UgZiBhID0gQXJyYXkuaXRlcmkgKGZ1biBpIGUgLT4gQXJyYXkudW5zYWZlX3NldCBhIGkgKGYgaSBlKSkgYVxubGV0IGZvbGQgPSBBcnJheS5mb2xkX2xlZnRcblxubGV0IGZvbGRpIGYgYWNjIGEgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoZiBhY2MgaSBhLihpKSkgKGkgKyAxKVxuICBpblxuICBhdXggYWNjIDBcblxubGV0IGZvbGRfd2hpbGUgZiBhY2MgYSA9XG4gIGxldCByZWMgZm9sZF93aGlsZV9pIGYgYWNjIGkgPVxuICAgIGlmIGkgPCBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBhLihpKSBpblxuICAgICAgbWF0Y2ggY29udCB3aXRoXG4gICAgICB8IGBTdG9wIC0+IGFjY1xuICAgICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZV9pIGYgYWNjIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGFjY1xuICBpblxuICBmb2xkX3doaWxlX2kgZiBhY2MgMFxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgKCogbmVlZCBzcGVjaWFsIGNhc2UgZm9yIGluaXRpYWxpemluZyB0aGUgcmVzdWx0ICopXG4gIGlmIG4gPSAwIHRoZW5cbiAgICBhY2MsIFt8fF1cbiAgZWxzZSAoXG4gICAgbGV0IGFjYywgYjAgPSBmIGFjYyBhLigwKSBpblxuICAgIGxldCByZXMgPSBBcnJheS5tYWtlIG4gYjAgaW5cbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IG5ld19hY2MsIGIgPSBmICFhY2MgYS4oaSkgaW5cbiAgICAgIGFjYyA6PSBuZXdfYWNjO1xuICAgICAgcmVzLihpKSA8LSBiXG4gICAgZG9uZTtcbiAgICAhYWNjLCByZXNcbiAgKVxuXG5sZXQgc2Nhbl9sZWZ0IGYgYWNjIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZXMgPSBBcnJheS5tYWtlIChuICsgMSkgYWNjIGluXG4gIEFycmF5Lml0ZXJpXG4gICAgKGZ1biBpIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gZiByZXMuKGkpIHggaW5cbiAgICAgIHJlcy4oaSArIDEpIDwtIG5ld19hY2MpXG4gICAgYTtcbiAgcmVzXG5cbmxldCByZXZlcnNlX2luX3BsYWNlIGEgPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbGVuID4gMCB0aGVuXG4gICAgZm9yIGsgPSAwIHRvIChsZW4gLSAxKSAvIDIgZG9cbiAgICAgIGxldCB0ID0gYS4oaykgaW5cbiAgICAgIGEuKGspIDwtIGEuKGxlbiAtIDEgLSBrKTtcbiAgICAgIGEuKGxlbiAtIDEgLSBrKSA8LSB0XG4gICAgZG9uZVxuXG5sZXQgc29ydGVkIGNtcCBhID1cbiAgbGV0IGIgPSBBcnJheS5jb3B5IGEgaW5cbiAgQXJyYXkuc29ydCBjbXAgYjtcbiAgYlxuXG5sZXQgc29ydF9pbmRpY2VzIGNtcCBhID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGxldCBiID0gQXJyYXkuaW5pdCBsZW4gKGZ1biBrIC0+IGspIGluXG4gIEFycmF5LnNvcnQgKGZ1biBrMSBrMiAtPiBjbXAgYS4oazEpIGEuKGsyKSkgYjtcbiAgYlxuXG5sZXQgc29ydF9yYW5raW5nIGNtcCBhID0gc29ydF9pbmRpY2VzIGNvbXBhcmUgKHNvcnRfaW5kaWNlcyBjbXAgYSlcblxubGV0IHJldiBhID1cbiAgbGV0IGIgPSBBcnJheS5jb3B5IGEgaW5cbiAgcmV2ZXJzZV9pbl9wbGFjZSBiO1xuICBiXG5cbmV4Y2VwdGlvbiBGb3VuZFxuXG5sZXQgbWVtID8oZXEgPSBTdGRsaWIuKCA9ICkpIGVsdCBhID1cbiAgdHJ5XG4gICAgQXJyYXkuaXRlciAoZnVuIGUgLT4gaWYgZXEgZSBlbHQgdGhlbiByYWlzZV9ub3RyYWNlIEZvdW5kKSBhO1xuICAgIGZhbHNlXG4gIHdpdGggRm91bmQgLT4gdHJ1ZVxuXG5sZXQgcmVjIGZpbmRfYXV4IGYgYSBpID1cbiAgaWYgaSA+PSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgTm9uZVxuICBlbHNlIChcbiAgICBtYXRjaCBmIGkgYS4oaSkgd2l0aFxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXNcbiAgICB8IE5vbmUgLT4gZmluZF9hdXggZiBhIChpICsgMSlcbiAgKVxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG5sZXQgZmluZF9tYXAgZiBhID0gZmluZF9hdXggKGZ1biBfIC0+IGYpIGEgMFxubGV0IGZpbmQgPSBmaW5kX21hcFxubGV0IGZpbmRfbWFwX2kgZiBhID0gZmluZF9hdXggZiBhIDBcbmxldCBmaW5kaSA9IGZpbmRfbWFwX2lcblxuW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxubGV0IGZpbmRfaWR4IHAgYSA9XG4gIGZpbmRfYXV4XG4gICAgKGZ1biBpIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgKGksIHgpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmUpXG4gICAgYSAwXG5cbmxldCBtYXggY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkXG4gICAgICAgICAoZnVuIGFjYyBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGFjYyBlbHQgPCAwIHRoZW5cbiAgICAgICAgICAgICBlbHRcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIGEuKDApIGEpXG5cbmxldCBtYXhfZXhuIGNtcCBhID1cbiAgbWF0Y2ggbWF4IGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5tYXhfZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGFyZ21heCBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRpXG4gICAgICAgICAoZnVuIGFjYyBpIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYS4oYWNjKSBlbHQgPCAwIHRoZW5cbiAgICAgICAgICAgICBpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICAwIGEpXG5cbmxldCBhcmdtYXhfZXhuIGNtcCBhID1cbiAgbWF0Y2ggYXJnbWF4IGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5hcmdtYXhfZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IG1pbiBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRcbiAgICAgICAgIChmdW4gYWNjIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYWNjIGVsdCA+IDAgdGhlblxuICAgICAgICAgICAgIGVsdFxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgYS4oMCkgYSlcblxubGV0IG1pbl9leG4gY21wIGEgPVxuICBtYXRjaCBtaW4gY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5Lm1pbl9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgYXJnbWluIGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZGlcbiAgICAgICAgIChmdW4gYWNjIGkgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhLihhY2MpIGVsdCA+IDAgdGhlblxuICAgICAgICAgICAgIGlcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIDAgYSlcblxubGV0IGFyZ21pbl9leG4gY21wIGEgPVxuICBtYXRjaCBhcmdtaW4gY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5LmFyZ21pbl9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgZmlsdGVyX21hcCBmIGEgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IGEnID0gQXJyYXkub2ZfbGlzdCBhY2MgaW5cbiAgICAgIHJldmVyc2VfaW5fcGxhY2UgYSc7XG4gICAgICBhJ1xuICAgICkgZWxzZSAoXG4gICAgICBtYXRjaCBmIGEuKGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBhdXggYWNjIChpICsgMSlcbiAgICAgIHwgU29tZSB4IC0+IGF1eCAoeCA6OiBhY2MpIChpICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSAwXG5cbmxldCBmaWx0ZXIgcCBhID1cbiAgZmlsdGVyX21hcFxuICAgIChmdW4geCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSB4XG4gICAgICBlbHNlXG4gICAgICAgIE5vbmUpXG4gICAgYVxuXG4oKiBhcHBlbmQgW3JldiBhXSBpbiBmcm9udCBvZiBbYWNjXSAqKVxubGV0IHJlYyBfX3Jldl9hcHBlbmRfbGlzdCBhIGFjYyBpID1cbiAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBhY2NcbiAgZWxzZVxuICAgIF9fcmV2X2FwcGVuZF9saXN0IGEgKGEuKGkpIDo6IGFjYykgKGkgKyAxKVxuXG5sZXQgZmxhdF9tYXAgZiBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhJyA9IEFycmF5Lm9mX2xpc3QgYWNjIGluXG4gICAgICByZXZlcnNlX2luX3BsYWNlIGEnO1xuICAgICAgYSdcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGEnID0gZiBhLihpKSBpblxuICAgICAgYXV4IChfX3Jldl9hcHBlbmRfbGlzdCBhJyBhY2MgMCkgKGkgKyAxKVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIDBcblxubGV0IG1vbm9pZF9wcm9kdWN0IGYgYTEgYTIgPVxuICBsZXQgbmExID0gbGVuZ3RoIGExIGluXG4gIGluaXRcbiAgICAobmExICogbGVuZ3RoIGEyKVxuICAgIChmdW4gaV9wcm9kIC0+XG4gICAgICBsZXQgaSA9IGlfcHJvZCBtb2QgbmExIGluXG4gICAgICBsZXQgaiA9IGlfcHJvZCAvIG5hMSBpblxuICAgICAgZiBhMS4oaSkgYTIuKGopKVxuXG5sZXQgcmVjIF9sb29rdXBfcmVjIH5jbXAgayBhIGkgaiA9XG4gIGlmIGkgPiBqIHRoZW5cbiAgICByYWlzZSBOb3RfZm91bmRcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgaWYgY21wIGsgYS4oaSkgPSAwIHRoZW5cbiAgICAgIGlcbiAgICBlbHNlXG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgZWxzZSAoXG4gICAgbGV0IG1pZGRsZSA9IChqICsgaSkgLyAyIGluXG4gICAgbWF0Y2ggY21wIGsgYS4obWlkZGxlKSB3aXRoXG4gICAgfCAwIC0+IG1pZGRsZVxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIGkgKG1pZGRsZSAtIDEpXG4gICAgfCBfIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIChtaWRkbGUgKyAxKSBqXG4gIClcblxubGV0IF9sb29rdXBfZXhuIH5jbXAgayBhIGkgaiA9XG4gIGlmIGkgPiBqIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICBtYXRjaCBjbXAgayBhLihpKSB3aXRoXG4gIHwgMCAtPiBpXG4gIHwgbiB3aGVuIG4gPCAwIC0+IHJhaXNlIE5vdF9mb3VuZCAoKiB0b28gbG93ICopXG4gIHwgXyB3aGVuIGkgPSBqIC0+IHJhaXNlIE5vdF9mb3VuZCAoKiB0b28gaGlnaCAqKVxuICB8IF8gLT5cbiAgICAobWF0Y2ggY21wIGsgYS4oaikgd2l0aFxuICAgIHwgMCAtPiBqXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gX2xvb2t1cF9yZWMgfmNtcCBrIGEgKGkgKyAxKSAoaiAtIDEpXG4gICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZClcbigqIHRvbyBoaWdoICopXG5cbmxldCBsb29rdXBfZXhuIH5jbXAgayBhID0gX2xvb2t1cF9leG4gfmNtcCBrIGEgMCAoQXJyYXkubGVuZ3RoIGEgLSAxKVxuXG5sZXQgbG9va3VwIH5jbXAgayBhID1cbiAgdHJ5IFNvbWUgKF9sb29rdXBfZXhuIH5jbXAgayBhIDAgKEFycmF5Lmxlbmd0aCBhIC0gMSkpXG4gIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxubGV0IGJzZWFyY2ggfmNtcCBrIGEgPVxuICBsZXQgcmVjIGF1eCBpIGogPVxuICAgIGlmIGkgPiBqIHRoZW5cbiAgICAgIGBKdXN0X2FmdGVyIGpcbiAgICBlbHNlIChcbiAgICAgIGxldCBtaWRkbGUgPSBpICsgKChqIC0gaSkgLyAyKSBpblxuICAgICAgKCogYXZvaWQgb3ZlcmZsb3cgKilcbiAgICAgIG1hdGNoIGNtcCBrIGEuKG1pZGRsZSkgd2l0aFxuICAgICAgfCAwIC0+IGBBdCBtaWRkbGVcbiAgICAgIHwgbiB3aGVuIG4gPCAwIC0+IGF1eCBpIChtaWRkbGUgLSAxKVxuICAgICAgfCBfIC0+IGF1eCAobWlkZGxlICsgMSkgalxuICAgIClcbiAgaW5cbiAgbGV0IG4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBuID0gMCB0aGVuXG4gICAgYEVtcHR5XG4gIGVsc2UgKFxuICAgIG1hdGNoIGNtcCBhLigwKSBrLCBjbXAgYS4obiAtIDEpIGsgd2l0aFxuICAgIHwgYywgXyB3aGVuIGMgPiAwIC0+IGBBbGxfYmlnZ2VyXG4gICAgfCBfLCBjIHdoZW4gYyA8IDAgLT4gYEFsbF9sb3dlclxuICAgIHwgXyAtPiBhdXggMCAobiAtIDEpXG4gIClcblxubGV0IHJlYyBfZm9yX2FsbDIgcCBhMSBhMiBpMSBpMiB+bGVuID1cbiAgbGVuID0gMFxuICB8fCAocCBhMS4oaTEpIGEyLihpMikgJiYgX2Zvcl9hbGwyIHAgYTEgYTIgKGkxICsgMSkgKGkyICsgMSkgfmxlbjoobGVuIC0gMSkpXG5cbmxldCBmb3JfYWxsMiBwIGEgYiA9XG4gIEFycmF5Lmxlbmd0aCBhID0gQXJyYXkubGVuZ3RoIGIgJiYgX2Zvcl9hbGwyIHAgYSBiIDAgMCB+bGVuOihBcnJheS5sZW5ndGggYSlcblxubGV0IHJlYyBfZXhpc3RzMiBwIGExIGEyIGkxIGkyIH5sZW4gPVxuICBsZW4gPiAwXG4gICYmIChwIGExLihpMSkgYTIuKGkyKSB8fCBfZXhpc3RzMiBwIGExIGEyIChpMSArIDEpIChpMiArIDEpIH5sZW46KGxlbiAtIDEpKVxuXG5sZXQgZXhpc3RzMiBwIGEgYiA9XG4gIF9leGlzdHMyIHAgYSBiIDAgMCB+bGVuOihTdGRsaWIubWluIChBcnJheS5sZW5ndGggYSkgKEFycmF5Lmxlbmd0aCBiKSlcblxubGV0IF9mb2xkMiBmIGFjYyBhIGIgaSBqIH5sZW4gPVxuICBsZXQgcmVjIGF1eCBhY2MgbyA9XG4gICAgaWYgbyA9IGxlbiB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlIChcbiAgICAgIGxldCBhY2MgPSBmIGFjYyAoQXJyYXkuZ2V0IGEgKGkgKyBvKSkgKEFycmF5LmdldCBiIChqICsgbykpIGluXG4gICAgICBhdXggYWNjIChvICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBhY2MgMFxuXG5sZXQgZm9sZDIgZiBhY2MgYSBiID1cbiAgaWYgbGVuZ3RoIGEgPD4gbGVuZ3RoIGIgdGhlbiBpbnZhbGlkX2FyZyBcImZvbGQyXCI7XG4gIF9mb2xkMiBmIGFjYyBhIGIgMCAwIH5sZW46KEFycmF5Lmxlbmd0aCBhKVxuXG5sZXQgKCAtLSApIGkgaiA9XG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgQXJyYXkuaW5pdCAoaiAtIGkgKyAxKSAoZnVuIGsgLT4gaSArIGspXG4gIGVsc2VcbiAgICBBcnJheS5pbml0IChpIC0gaiArIDEpIChmdW4gayAtPiBpIC0gaylcblxubGV0ICggLS1eICkgaSBqID1cbiAgaWYgaSA9IGogdGhlblxuICAgIFt8fF1cbiAgZWxzZSBpZiBpID4gaiB0aGVuXG4gICAgQXJyYXkuaW5pdCAoaSAtIGopIChmdW4gayAtPiBpIC0gaylcbiAgZWxzZVxuICAgIEFycmF5LmluaXQgKGogLSBpKSAoZnVuIGsgLT4gaSArIGspXG5cbigqKiBhbGwgdGhlIGVsZW1lbnRzIG9mIGEsIGJ1dCB0aGUgaS10aCwgaW50byBhIGxpc3QgKilcbmxldCBleGNlcHRfaWR4IGEgaSA9XG4gIGZvbGRpXG4gICAgKGZ1biBhY2MgaiBlbHQgLT5cbiAgICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgICAgYWNjXG4gICAgICBlbHNlXG4gICAgICAgIGVsdCA6OiBhY2MpXG4gICAgW10gYVxuXG5sZXQgZXF1YWwgZXEgYSBiID1cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIHRydWVcbiAgICBlbHNlXG4gICAgICBlcSBhLihpKSBiLihpKSAmJiBhdXggKGkgKyAxKVxuICBpblxuICBBcnJheS5sZW5ndGggYSA9IEFycmF5Lmxlbmd0aCBiICYmIGF1eCAwXG5cbmxldCBjb21wYXJlIGNtcCBhIGIgPVxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBiIHRoZW5cbiAgICAgICAgMFxuICAgICAgZWxzZVxuICAgICAgICAtMVxuICAgIGVsc2UgaWYgaSA9IEFycmF5Lmxlbmd0aCBiIHRoZW5cbiAgICAgIDFcbiAgICBlbHNlIChcbiAgICAgIGxldCBjID0gY21wIGEuKGkpIGIuKGkpIGluXG4gICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgIGF1eCAoaSArIDEpXG4gICAgICBlbHNlXG4gICAgICAgIGNcbiAgICApXG4gIGluXG4gIGF1eCAwXG5cbigqIHN3YXAgZWxlbWVudHMgb2YgYXJyYXkgKilcbmxldCBzd2FwIGEgaSBqID1cbiAgaWYgaSA8PiBqIHRoZW4gKFxuICAgIGxldCB0bXAgPSBhLihpKSBpblxuICAgIGEuKGkpIDwtIGEuKGopO1xuICAgIGEuKGopIDwtIHRtcFxuICApXG5cbigqIHNodWZmbGUgYVtpIOKApiBqXSB1c2luZyB0aGUgZ2l2ZW4gaW50IHJhbmRvbSBnZW5lcmF0b3JcbiAgIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlci1ZYXRlc19zaHVmZmxlICopXG5sZXQgX3NodWZmbGUgX3JhbmRfaW50IGEgaSBqID1cbiAgZm9yIGsgPSBqIC0gMSBkb3dudG8gaSArIDEgZG9cbiAgICBsZXQgbCA9IF9yYW5kX2ludCAoayArIDEpIGluXG4gICAgbGV0IHRtcCA9IGEuKGwpIGluXG4gICAgYS4obCkgPC0gYS4oayk7XG4gICAgYS4oaykgPC0gdG1wXG4gIGRvbmVcblxubGV0IHNodWZmbGUgYSA9IF9zaHVmZmxlIFJhbmRvbS5pbnQgYSAwIChBcnJheS5sZW5ndGggYSlcbmxldCBzaHVmZmxlX3dpdGggc3QgYSA9IF9zaHVmZmxlIChSYW5kb20uU3RhdGUuaW50IHN0KSBhIDAgKEFycmF5Lmxlbmd0aCBhKVxuXG5sZXQgcmFuZG9tX2Nob29zZSBhID1cbiAgbGV0IG4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBuID0gMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkucmFuZG9tX2Nob29zZVwiO1xuICBmdW4gc3QgLT4gYS4oUmFuZG9tLlN0YXRlLmludCBzdCBuKVxuXG5sZXQgcmFuZG9tX2xlbiBuIGcgc3QgPSBBcnJheS5pbml0IG4gKGZ1biBfIC0+IGcgc3QpXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGxldCBuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIG4gZyBzdFxuXG5sZXQgcmFuZG9tX25vbl9lbXB0eSBnIHN0ID1cbiAgbGV0IG4gPSAxICsgUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIG4gZyBzdFxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBvdXQgKCkgLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiLEAgXCIpIHBwX2l0ZW0gb3V0IGEgPVxuICBwcF9zdGFydCBvdXQgKCk7XG4gIGZvciBrID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICBpZiBrID4gMCB0aGVuIHBwX3NlcCBvdXQgKCk7XG4gICAgcHBfaXRlbSBvdXQgYS4oaylcbiAgZG9uZTtcbiAgcHBfc3RvcCBvdXQgKClcblxubGV0IHBwX2kgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBvdXQgKCkgLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiLEAgXCIpIHBwX2l0ZW0gb3V0IGEgPVxuICBwcF9zdGFydCBvdXQgKCk7XG4gIGZvciBrID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICBpZiBrID4gMCB0aGVuIHBwX3NlcCBvdXQgKCk7XG4gICAgcHBfaXRlbSBrIG91dCBhLihrKVxuICBkb25lO1xuICBwcF9zdG9wIG91dCAoKVxuXG5sZXQgdG9fc3RyaW5nID8oc2VwID0gXCIsIFwiKSBpdGVtX3RvX3N0cmluZyBhID1cbiAgQXJyYXkudG9fbGlzdCBhIHw+IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIHw+IFN0cmluZy5jb25jYXQgc2VwXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPj0gbGVuZ3RoIGEgdGhlblxuICAgICAgU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIFNlcS5Db25zIChhLihpKSwgYXV4IChpICsgMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19pdGVyIGEgayA9IGl0ZXIgayBhXG5cbmxldCB0b19nZW4gYSA9XG4gIGxldCBrID0gcmVmIDAgaW5cbiAgZnVuICgpIC0+XG4gICAgaWYgIWsgPCBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCB4ID0gYS4oIWspIGluXG4gICAgICBpbmNyIGs7XG4gICAgICBTb21lIHhcbiAgICApIGVsc2VcbiAgICAgIE5vbmVcblxuKCoqIHsyIEdlbmVyaWMgRnVuY3Rpb25zfSAqKVxuXG5tb2R1bGUgdHlwZSBNT05PX0FSUkFZID0gc2lnXG4gIHR5cGUgZWx0XG4gIHR5cGUgdFxuXG4gIHZhbCBsZW5ndGggOiB0IC0+IGludFxuICB2YWwgZ2V0IDogdCAtPiBpbnQgLT4gZWx0XG4gIHZhbCBzZXQgOiB0IC0+IGludCAtPiBlbHQgLT4gdW5pdFxuZW5kXG5cbigqIER1YWwgUGl2b3QgUXVpY2tzb3J0IChZYXJvc2xhdnNraXkpXG4gICBmcm9tIFwiYXZlcmFnZSBjYXNlIGFuYWx5c2lzIG9mIEphdmEgNydzIER1YWwgUGl2b3QgUXVpY2tzb3J0XCIgKilcbm1vZHVsZSBTb3J0R2VuZXJpYyAoQSA6IE1PTk9fQVJSQVkpID0gc3RydWN0XG4gIG1vZHVsZSBSYW5kID0gUmFuZG9tLlN0YXRlXG5cbiAgbGV0IHNlZWRfID0gW3wgMTIzNDU2IHxdXG5cbiAgdHlwZSBzdGF0ZSA9IHtcbiAgICBtdXRhYmxlIGw6IGludDsgKCogbGVmdCBwb2ludGVyICopXG4gICAgbXV0YWJsZSBnOiBpbnQ7ICgqIHJpZ2h0IHBvaW50ZXIgKilcbiAgICBtdXRhYmxlIGs6IGludDtcbiAgfVxuXG4gIGxldCByYW5kX2lkeF8gcmFuZCBpIGogPSBpICsgUmFuZC5pbnQgcmFuZCAoaiAtIGkpXG5cbiAgbGV0IHN3YXBfIGEgaSBqID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICAoKVxuICAgIGVsc2UgKFxuICAgICAgbGV0IHRtcCA9IEEuZ2V0IGEgaSBpblxuICAgICAgQS5zZXQgYSBpIChBLmdldCBhIGopO1xuICAgICAgQS5zZXQgYSBqIHRtcFxuICAgIClcblxuICBsZXQgc29ydCB+Y21wIGEgPVxuICAgIGxldCByZWMgaW5zZXJ0XyBhIGkgayA9XG4gICAgICBpZiBrIDwgaSB0aGVuXG4gICAgICAgICgpXG4gICAgICBlbHNlIGlmIGNtcCAoQS5nZXQgYSBrKSAoQS5nZXQgYSAoayArIDEpKSA+IDAgdGhlbiAoXG4gICAgICAgIHN3YXBfIGEgayAoayArIDEpO1xuICAgICAgICBpbnNlcnRfIGEgaSAoayAtIDEpXG4gICAgICApXG4gICAgaW5cbiAgICAoKiByZWN1cnNpdmUgcGFydCBvZiBpbnNlcnRpb24gc29ydCAqKVxuICAgIGxldCByZWMgc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIGsgPVxuICAgICAgaWYgayA8IGogdGhlbiAoXG4gICAgICAgIGluc2VydF8gYSBpIChrIC0gMSk7XG4gICAgICAgIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiAoayArIDEpXG4gICAgICApXG4gICAgaW5cbiAgICAoKiBpbnNlcnRpb24gc29ydCwgZm9yIHNtYWxsIHNsaWNlcyAqKVxuICAgIGxldCBzb3J0X2luc2VydGlvbiBhIGkgaiA9XG4gICAgICBpZiBqIC0gaSA+IDEgdGhlbiBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogKGkgKyAxKVxuICAgIGluXG4gICAgbGV0IHJhbmQgPSBSYW5kLm1ha2Ugc2VlZF8gaW5cbiAgICAoKiBzb3J0IHNsaWNlLlxuICAgICAgIFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlIHR3byBwaXZvdHMgYXJlIGVxdWFsLCBidXQgaXQncyB1bmxpa2VseS4gKilcbiAgICBsZXQgcmVjIHNvcnRfc2xpY2VfIH5zdCBhIGkgaiA9XG4gICAgICBpZiBqIC0gaSA+IDEwIHRoZW4gKFxuICAgICAgICBzdC5sIDwtIGk7XG4gICAgICAgIHN0LmcgPC0gaiAtIDE7XG4gICAgICAgIHN0LmsgPC0gaTtcbiAgICAgICAgKCogY2hvb3NlIHBpdm90cyAqKVxuICAgICAgICBsZXQgcCA9IEEuZ2V0IGEgKHJhbmRfaWR4XyByYW5kIGkgaikgaW5cbiAgICAgICAgbGV0IHEgPSBBLmdldCBhIChyYW5kX2lkeF8gcmFuZCBpIGopIGluXG4gICAgICAgICgqIGludmFyaWFudDogc3QucCA8PSBzdC5xLCBzd2FwIHRoZW0gb3RoZXJ3aXNlICopXG4gICAgICAgIGxldCBwLCBxID1cbiAgICAgICAgICBpZiBjbXAgcCBxID4gMCB0aGVuXG4gICAgICAgICAgICBxLCBwXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgcCwgcVxuICAgICAgICBpblxuICAgICAgICB3aGlsZSBzdC5rIDw9IHN0LmcgZG9cbiAgICAgICAgICBsZXQgY3VyID0gQS5nZXQgYSBzdC5rIGluXG4gICAgICAgICAgaWYgY21wIGN1ciBwIDwgMCB0aGVuIChcbiAgICAgICAgICAgICgqIGluc2VydCBpbiBsZWZ0bW9zdCBiYW5kICopXG4gICAgICAgICAgICBpZiBzdC5rIDw+IHN0LmwgdGhlbiBzd2FwXyBhIHN0Lmsgc3QubDtcbiAgICAgICAgICAgIHN0LmwgPC0gc3QubCArIDFcbiAgICAgICAgICApIGVsc2UgaWYgY21wIGN1ciBxID4gMCB0aGVuIChcbiAgICAgICAgICAgICgqIGluc2VydCBpbiByaWdodG1vc3QgYmFuZCAqKVxuICAgICAgICAgICAgd2hpbGUgc3QuayA8IHN0LmcgJiYgY21wIChBLmdldCBhIHN0LmcpIHEgPiAwIGRvXG4gICAgICAgICAgICAgIHN0LmcgPC0gc3QuZyAtIDFcbiAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICBzd2FwXyBhIHN0Lmsgc3QuZztcbiAgICAgICAgICAgIHN0LmcgPC0gc3QuZyAtIDE7XG4gICAgICAgICAgICAoKiB0aGUgZWxlbWVudCBzd2FwcGVkIGZyb20gdGhlIHJpZ2h0IG1pZ2h0IGJlIGluIHRoZSBmaXJzdCBzaXR1YXRpb24uXG4gICAgICAgICAgICAgICB0aGF0IGlzLCA8IHAgICh3ZSBrbm93IGl0J3MgPD0gcSBhbHJlYWR5KSAqKVxuICAgICAgICAgICAgaWYgY21wIChBLmdldCBhIHN0LmspIHAgPCAwIHRoZW4gKFxuICAgICAgICAgICAgICBpZiBzdC5rIDw+IHN0LmwgdGhlbiBzd2FwXyBhIHN0Lmsgc3QubDtcbiAgICAgICAgICAgICAgc3QubCA8LSBzdC5sICsgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3QuayA8LSBzdC5rICsgMVxuICAgICAgICBkb25lO1xuICAgICAgICAoKiBzYXZlIHZhbHVlcyBiZWZvcmUgcmVjdXJzaW5nICopXG4gICAgICAgIGxldCBsID0gc3QubCBhbmQgZyA9IHN0LmcgYW5kIHNvcnRfbWlkZGxlID0gY21wIHAgcSA8IDAgaW5cbiAgICAgICAgc29ydF9zbGljZV8gfnN0IGEgaSBsO1xuICAgICAgICBpZiBzb3J0X21pZGRsZSB0aGVuIHNvcnRfc2xpY2VfIH5zdCBhIGwgKGcgKyAxKTtcbiAgICAgICAgc29ydF9zbGljZV8gfnN0IGEgKGcgKyAxKSBqXG4gICAgICApIGVsc2VcbiAgICAgICAgc29ydF9pbnNlcnRpb24gYSBpIGpcbiAgICBpblxuICAgIGlmIEEubGVuZ3RoIGEgPiAwIHRoZW4gKFxuICAgICAgbGV0IHN0ID0geyBsID0gMDsgZyA9IEEubGVuZ3RoIGE7IGsgPSAwIH0gaW5cbiAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIDAgKEEubGVuZ3RoIGEpXG4gICAgKVxuZW5kXG5cbmxldCBzb3J0X2dlbmVyaWMgKHR5cGUgYXJyIGVsdClcbiAgICAobW9kdWxlIEEgOiBNT05PX0FSUkFZIHdpdGggdHlwZSB0ID0gYXJyIGFuZCB0eXBlIGVsdCA9IGVsdCkgfmNtcCBhID1cbiAgbGV0IG1vZHVsZSBTID0gU29ydEdlbmVyaWMgKEEpIGluXG4gIFMuc29ydCB+Y21wIGFcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID4+PSApIGEgZiA9IGZsYXRfbWFwIGYgYVxuICBsZXQgKCA+PnwgKSBhIGYgPSBtYXAgZiBhXG4gIGxldCAoID58PSApIGEgZiA9IG1hcCBmIGFcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcblxuICB0eXBlICdhIHQgPSAnYSBhcnJheVxuXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgYTEgYTIgPSBtb25vaWRfcHJvZHVjdCAoZnVuIHggeSAtPiB4LCB5KSBhMSBhMlxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcbiIsIigqIGJhY2twb3J0IG5ldyBmdW5jdGlvbnMgZnJvbSBzdGRsaWIgaGVyZSAqKVxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RocyBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXyA6OiBfIC0+IC0xXG4gIHwgXyA6OiBfLCBbXSAtPiAxXG4gIHwgXyA6OiB0YWlsMSwgXyA6OiB0YWlsMiAtPiBjb21wYXJlX2xlbmd0aHMgdGFpbDEgdGFpbDJcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwsIG4gd2l0aFxuICB8IF8gd2hlbiBuIDwgMCAtPiAxXG4gIHwgW10sIDAgLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXyA6OiB0YWlsLCBfIC0+IGNvbXBhcmVfbGVuZ3RoX3dpdGggdGFpbCAobiAtIDEpXG5cbmxldCByZWMgYXNzb2Nfb3B0IHggPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCAoeSwgdikgOjogXyB3aGVuIFN0ZGxpYi4oID0gKSB4IHkgLT4gU29tZSB2XG4gIHwgXyA6OiB0YWlsIC0+IGFzc29jX29wdCB4IHRhaWxcblxubGV0IHJlYyBhc3NxX29wdCB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgKHksIHYpIDo6IF8gd2hlbiBTdGRsaWIuKCA9PSApIHggeSAtPiBTb21lIHZcbiAgfCBfIDo6IHRhaWwgLT4gYXNzcV9vcHQgeCB0YWlsXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbigqIGVuZCBvZiBiYWNrcG9ydCAqKVxuXG5pbmNsdWRlIExpc3RcblxubGV0IGVtcHR5ID0gW11cblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiB0cnVlXG4gIHwgXyA6OiBfIC0+IGZhbHNlXG5cbmxldCBtZ3VhcmQgYyA9XG4gIGlmIGMgdGhlblxuICAgIFsgKCkgXVxuICBlbHNlXG4gICAgW11cblxuKCoqIG1heCBkZXB0aCBmb3IgZGlyZWN0IHJlY3Vyc2lvbiAqKVxubGV0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyA9IDEwMDBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRhaWxfbWFwIGYgbCA9XG4gICgqIFVud2luZCB0aGUgbGlzdCBvZiB0dXBsZXMsIHJlY29uc3RydWN0aW5nIHRoZSBmdWxsIGxpc3QgZnJvbnQtdG8tYmFjay5cbiAgICAgQHBhcmFtIHRhaWxfYWNjIGEgc3VmZml4IG9mIHRoZSBmaW5hbCBsaXN0OyB3ZSBhcHBlbmQgdHVwbGVzJyBjb250ZW50XG4gICAgIGF0IHRoZSBmcm9udCBvZiBpdCAqKVxuICBsZXQgcmVjIHJlYnVpbGQgdGFpbF9hY2MgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gdGFpbF9hY2NcbiAgICB8ICh5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCB5NiwgeTcsIHk4KSA6OiBicyAtPlxuICAgICAgcmVidWlsZFxuICAgICAgICAoeTAgOjogeTEgOjogeTIgOjogeTMgOjogeTQgOjogeTUgOjogeTYgOjogeTcgOjogeTggOjogdGFpbF9hY2MpXG4gICAgICAgIGJzXG4gIGluXG4gICgqIENyZWF0ZSBhIGNvbXByZXNzZWQgcmV2ZXJzZS1saXN0IHJlcHJlc2VudGF0aW9uIHVzaW5nIHR1cGxlc1xuICAgICBAcGFyYW0gdHVwbGVfYWNjIGEgcmV2ZXJzZSBsaXN0IG9mIGNodW5rcyBtYXBwZWQgd2l0aCBbZl0gKilcbiAgbGV0IHJlYyBkaXZlIHR1cGxlX2FjYyA9IGZ1bmN0aW9uXG4gICAgfCB4MCA6OiB4MSA6OiB4MiA6OiB4MyA6OiB4NCA6OiB4NSA6OiB4NiA6OiB4NyA6OiB4OCA6OiB4cyAtPlxuICAgICAgbGV0IHkwID0gZiB4MCBpblxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgbGV0IHkzID0gZiB4MyBpblxuICAgICAgbGV0IHk0ID0gZiB4NCBpblxuICAgICAgbGV0IHk1ID0gZiB4NSBpblxuICAgICAgbGV0IHk2ID0gZiB4NiBpblxuICAgICAgbGV0IHk3ID0gZiB4NyBpblxuICAgICAgbGV0IHk4ID0gZiB4OCBpblxuICAgICAgZGl2ZSAoKHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIHk2LCB5NywgeTgpIDo6IHR1cGxlX2FjYykgeHNcbiAgICB8IHhzIC0+XG4gICAgICAoKiBSZXZlcnNlIGRpcmVjdGlvbiwgZmluaXNoaW5nIG9mZiB3aXRoIGEgZGlyZWN0IG1hcCAqKVxuICAgICAgbGV0IHRhaWwgPSBMaXN0Lm1hcCBmIHhzIGluXG4gICAgICByZWJ1aWxkIHRhaWwgdHVwbGVfYWNjXG4gIGluXG4gIGRpdmUgW10gbFxuXG5sZXQgbWFwIGYgbCA9XG4gIGxldCByZWMgZGlyZWN0IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIHggXSAtPiBbIGYgeCBdXG4gICAgfCBbIHgxOyB4MiBdIC0+XG4gICAgICBsZXQgeTEgPSBmIHgxIGluXG4gICAgICBbIHkxOyBmIHgyIF1cbiAgICB8IFsgeDE7IHgyOyB4MyBdIC0+XG4gICAgICBsZXQgeTEgPSBmIHgxIGluXG4gICAgICBsZXQgeTIgPSBmIHgyIGluXG4gICAgICBbIHkxOyB5MjsgZiB4MyBdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gdGFpbF9tYXAgZiBsXG4gICAgfCB4MSA6OiB4MiA6OiB4MyA6OiB4NCA6OiBsJyAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgbGV0IHkzID0gZiB4MyBpblxuICAgICAgbGV0IHk0ID0gZiB4NCBpblxuICAgICAgeTEgOjogeTIgOjogeTMgOjogeTQgOjogZGlyZWN0IGYgKGkgLSAxKSBsJ1xuICBpblxuICBkaXJlY3QgZiBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgYXBwZW5kIGwxIGwyID1cbiAgbGV0W0BpbmxpbmVdIHNhZmUgbDEgbDIgPSBMaXN0LnJldl9hcHBlbmQgKExpc3QucmV2IGwxKSBsMiBpblxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBsMlxuICAgIHwgWyB4IF0gLT4geCA6OiBsMlxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgbDEgbDJcbiAgICB8IHggOjogeSA6OiB0bDEgLT4geCA6OiB5IDo6IGRpcmVjdCAoaSAtIDEpIHRsMSBsMlxuICBpblxuICBkaXJlY3QgMTAwMCBsMSBsMlxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgbWFwIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCB4ID0gZiB4IGluXG4gICAgeCA6OiBtYXAgZiB0bFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBhcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gIHwgW10gLT4gbDJcbiAgfCB4IDo6IHRsMSAtPiB4IDo6IGFwcGVuZCB0bDEgbDJcblxuW0BAQGVsc2VfXVxuXG4oKiBUUk1DIGZ1bmN0aW9ucyBvbiA+PSA1LjEsIG5vIG5lZWQgdG8gYnJpbmcgb3VyIG93biAqKVxuXG5bQEBAZW5kaWZdXG5cbigqIFdyYXBwZXIgYXJvdW5kIFthcHBlbmRdIHRvIG9wdGltaXplIGZvciB0aGUgY2FzZSBvZiBzaG9ydCBbbDFdLFxuICAgYW5kIGZvciB0aGUgY2FzZSBvZiBbbDIgPSBbXV0gKHNhdmVzIHRoZSB3aG9sZSBjb3B5IG9mIFtsMV0hKSAqKVxubGV0W0BpbmxpbmVdIGFwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIF8gLT4gbDJcbiAgfCBfLCBbXSAtPiBsMVxuICB8IFsgeCBdLCBfIC0+IHggOjogbDJcbiAgfCB4IDo6IHkgOjogdGwxLCBfIC0+IHggOjogeSA6OiBhcHBlbmQgdGwxIGwyXG5cbmxldCAoIEAgKSA9IGFwcGVuZFxubGV0W0BpbmxpbmVdIGNvbnMnIGwgeCA9IHggOjogbFxuXG5sZXQgY29uc19tYXliZSBvIGwgPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBTb21lIHggLT4geCA6OiBsXG4gIHwgTm9uZSAtPiBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBkaXJlY3RfZGVwdGhfZmlsdGVyXyA9IDEwXzAwMFxuXG5sZXQgZmlsdGVyIHAgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgcCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIGwgW11cbiAgICB8IHggOjogbCcgd2hlbiBub3QgKHAgeCkgLT4gZGlyZWN0IGkgcCBsJ1xuICAgIHwgeCA6OiBsJyAtPiB4IDo6IGRpcmVjdCAoaSAtIDEpIHAgbCdcbiAgYW5kIHNhZmUgcCBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogbCcgd2hlbiBub3QgKHAgeCkgLT4gc2FmZSBwIGwnIGFjY1xuICAgIHwgeCA6OiBsJyAtPiBzYWZlIHAgbCcgKHggOjogYWNjKVxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2ZpbHRlcl8gcCBsXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXIgZiBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCB4IDo6IHRsIC0+XG4gICAgbGV0IGtlZXAgPSBmIHggaW5cbiAgICBpZiBrZWVwIHRoZW5cbiAgICAgIHggOjogZmlsdGVyIGYgdGxcbiAgICBlbHNlXG4gICAgICBmaWx0ZXIgZiB0bFxuXG5bQEBAZWxzZV9dXG4oKiBzdGRsaWIncyBmaWx0ZXIgdXNlcyBUUk1DIGFmdGVyIDUuMSAqKVxuXG5bQEBAZW5kaWZdXG5cbmxldCBmb2xkX3JpZ2h0IGYgbCBhY2MgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGYgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBmIChMaXN0LnJldiBsKSBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBkaXJlY3QgKGkgLSAxKSBmIGwnIGFjYyBpblxuICAgICAgZiB4IGFjY1xuICBhbmQgc2FmZSBmIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IGYgeCBhY2MgaW5cbiAgICAgIHNhZmUgZiBsJyBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBmIGwgYWNjXG5cbmxldCByZWMgZm9sZF93aGlsZSBmIGFjYyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgZSA6OiBsIC0+XG4gICAgbGV0IGFjYywgY29udCA9IGYgYWNjIGUgaW5cbiAgICAobWF0Y2ggY29udCB3aXRoXG4gICAgfCBgU3RvcCAtPiBhY2NcbiAgICB8IGBDb250aW51ZSAtPiBmb2xkX3doaWxlIGYgYWNjIGwpXG5cbmxldCBmb2xkX21hcCBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoeSA6OiBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9tYXBfaSBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgaSBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgaSB4IGluXG4gICAgICBhdXggZiBhY2MgKGkgKyAxKSAoeSA6OiBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbmxldCBmb2xkX29uX21hcCB+ZiB+cmVkdWNlIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gcmVkdWNlIGFjYyAoZiB4KSBpblxuICAgICAgYXV4IGFjYyBsJ1xuICBpblxuICBhdXggYWNjIGxcblxubGV0IHNjYW5fbGVmdCBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsX2FjY1xuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgeCBpblxuICAgICAgbGV0IGxfYWNjID0gYWNjIDo6IGxfYWNjIGluXG4gICAgICBhdXggZiBhY2MgbF9hY2MgdGFpbFxuICBpblxuICBhdXggZiBhY2MgWyBhY2MgXSBsXG5cbmxldCByZWR1Y2UgZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBTb21lIChmb2xkX2xlZnQgZiB4IGwpXG5cbmxldCByZWR1Y2VfZXhuIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiQ0NMaXN0LnJlZHVjZV9leG5cIilcbiAgfCB4IDo6IGwgLT4gZm9sZF9sZWZ0IGYgeCBsXG5cbmxldCBmb2xkX21hcDIgZiBhY2MgbDEgbDIgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcImZvbGRfbWFwMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIHgxIHgyIGluXG4gICAgICBhdXggZiBhY2MgKHkgOjogbWFwX2FjYykgbDEnIGwyJ1xuICBpblxuICBhdXggZiBhY2MgW10gbDEgbDJcblxubGV0IGZvbGRfZmlsdGVyX21hcCBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoY29uc19tYXliZSB5IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyBbXSBsXG5cbmxldCBmb2xkX2ZpbHRlcl9tYXBfaSBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgaSBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgaSB4IGluXG4gICAgICBhdXggZiBhY2MgKGkgKyAxKSAoY29uc19tYXliZSB5IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyAwIFtdIGxcblxubGV0IGZvbGRfZmxhdF9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKExpc3QucmV2X2FwcGVuZCB5IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyBbXSBsXG5cbmxldCBmb2xkX2ZsYXRfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKExpc3QucmV2X2FwcGVuZCB5IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyAwIFtdIGxcblxuW0BAQGlmbHQgNC4xNF1cblxuKCoga2VlcCB0aGlzIGJlY2F1c2UgaXQncyB0YWlscmVjIGZvciA8IDUuMSAqKVxubGV0IGluaXQgbGVuIGYgPVxuICBsZXQgcmVjIGluZGlyZWN0XyBpIGFjYyA9XG4gICAgaWYgaSA9IGxlbiB0aGVuXG4gICAgICBMaXN0LnJldiBhY2NcbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICBpbmRpcmVjdF8gKGkgKyAxKSAoeCA6OiBhY2MpXG4gICAgKVxuICBpblxuICBsZXQgcmVjIGRpcmVjdF8gaSA9XG4gICAgaWYgaSA9IGxlbiB0aGVuXG4gICAgICBbXVxuICAgIGVsc2UgaWYgaSA8IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyB0aGVuIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICB4IDo6IGRpcmVjdF8gKGkgKyAxKVxuICAgICkgZWxzZVxuICAgICAgaW5kaXJlY3RfIGkgW11cbiAgaW5cbiAgaWYgbGVuIDwgMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJpbml0XCJcbiAgZWxzZSBpZiBsZW4gPSAwIHRoZW5cbiAgICBbXVxuICBlbHNlXG4gICAgZGlyZWN0XyAwXG5cbmxldCByZWMgdW5mb2xkX2tvbnQgZiBzZWVkIGsgPVxuICBtYXRjaCBmIHNlZWQgd2l0aFxuICB8IE5vbmUgLT4gayBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+XG4gICAgbGV0IGsnIHRsID0gayAodiA6OiB0bCkgaW5cbiAgICB1bmZvbGRfa29udCBmIG5leHQgaydcblxubGV0W0BpbmxpbmVdIHVuZm9sZCBmIHNlZWQgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGYgc2VlZCA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgdW5mb2xkX2tvbnQgZiBzZWVkIChmdW4geCAtPiB4KVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBbXVxuICAgICAgfCBTb21lICh2LCBuZXh0KSAtPiB2IDo6IGRpcmVjdCAoaSAtIDEpIGYgbmV4dFxuICAgIClcbiAgaW5cbiAgZGlyZWN0IDEwMCBmIHNlZWRcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldCBpbml0IG4gZiA9XG4gIGxldFtAdGFpbF9tb2RfY29uc10gcmVjIGluaXRfIGkgbiBmID1cbiAgICBpZiBpID0gbiB0aGVuXG4gICAgICBbXVxuICAgIGVsc2UgKFxuICAgICAgbGV0IHggPSBmIGkgaW5cbiAgICAgIHggOjogaW5pdF8gKGkgKyAxKSBuIGZcbiAgICApXG4gIGluXG4gIGluaXRfIDAgbiBmXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIHVuZm9sZCBmIHNlZWQgPVxuICBtYXRjaCBmIHNlZWQgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPiB2IDo6IHVuZm9sZCBmIG5leHRcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB1bmZvbGQgZiBzZWVkID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiB1bmZvbGQgZiBuZXh0XG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBjb21wYXJlIGYgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgXywgW10gLT4gMVxuICB8IFtdLCBfIC0+IC0xXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICBsZXQgYyA9IGYgeDEgeDIgaW5cbiAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgY1xuICAgIGVsc2VcbiAgICAgIGNvbXBhcmUgZiBsMScgbDInXG5cbmxldCByZWMgZXF1YWwgZiBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IHRydWVcbiAgfCBbXSwgXyB8IF8sIFtdIC0+IGZhbHNlXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gZiB4MSB4MiAmJiBlcXVhbCBmIGwxJyBsMidcblxuW0BAQGlmbHQgNS4xXVxuXG5sZXQgcmVjIGZsYXRfbWFwX2tvbnQgZiBsIGtvbnQgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBrb250IFtdXG4gIHwgWyB4IF0gLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIGtvbnQgeFxuICB8IHggOjogbCcgLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIGxldCBrb250JyB0YWlsID0ga29udCAoYXBwZW5kIHggdGFpbCkgaW5cbiAgICBmbGF0X21hcF9rb250IGYgbCcga29udCdcblxubGV0W0BpbmxpbmVdIGZsYXRfbWFwIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgWyB4IF0gLT4gZiB4XG4gIHwgXyA6OiBfIC0+IGZsYXRfbWFwX2tvbnQgZiBsIEZ1bi5pZFxuXG5bQEBAZWxzZV9dXG5cbmxldCBmbGF0X21hcCA9IGNvbmNhdF9tYXBcblxuW0BAQGVuZGlmXVxuXG5sZXQgZmxhdF9tYXBfaSBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGkgbCBrb250ID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGtvbnQgW11cbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCB5ID0gZiBpIHggaW5cbiAgICAgIGxldCBrb250JyB0YWlsID1cbiAgICAgICAgbWF0Y2ggeSB3aXRoXG4gICAgICAgIHwgW10gLT4ga29udCB0YWlsXG4gICAgICAgIHwgWyB4IF0gLT4ga29udCAoeCA6OiB0YWlsKVxuICAgICAgICB8IFsgeDsgeSBdIC0+IGtvbnQgKHggOjogeSA6OiB0YWlsKVxuICAgICAgICB8IGwgLT4ga29udCAoYXBwZW5kIGwgdGFpbClcbiAgICAgIGluXG4gICAgICBhdXggZiAoaSArIDEpIGwnIGtvbnQnXG4gIGluXG4gIGF1eCBmIDAgbCAoZnVuIGwgLT4gbClcblxubGV0IGZsYXR0ZW4gbCA9IGZvbGRfcmlnaHQgYXBwZW5kIGwgW11cblxubGV0IGNvdW50IGYgbCA9XG4gIGZvbGRfbGVmdFxuICAgIChmdW4gbiB4IC0+XG4gICAgICBpZiBmIHggdGhlblxuICAgICAgICBzdWNjIG5cbiAgICAgIGVsc2VcbiAgICAgICAgbilcbiAgICAwIGxcblxubGV0IGNvdW50X3RydWVfZmFsc2UgcCBsID1cbiAgZm9sZF9sZWZ0XG4gICAgKGZ1biAob2ssIGtvKSB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBvayArIDEsIGtvXG4gICAgICBlbHNlXG4gICAgICAgIG9rLCBrbyArIDEpXG4gICAgKDAsIDApIGxcblxubGV0W0BpbmxpbmVdIHByb2R1Y3QgZiBsMSBsMiA9IGZsYXRfbWFwIChmdW4geCAtPiBtYXAgKGZ1biB5IC0+IGYgeCB5KSBsMikgbDFcblxubGV0IGZvbGRfcHJvZHVjdCBmIGFjYyBsMSBsMiA9XG4gIExpc3QuZm9sZF9sZWZ0XG4gICAgKGZ1biBhY2MgeDEgLT4gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeDIgLT4gZiBhY2MgeDEgeDIpIGFjYyBsMilcbiAgICBhY2MgbDFcblxubGV0IGRpYWdvbmFsIGwgPVxuICBsZXQgcmVjIGdlbiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB5IC0+ICh4LCB5KSA6OiBhY2MpIGFjYyBsJyBpblxuICAgICAgZ2VuIGFjYyBsJ1xuICBpblxuICBnZW4gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcF9laXRoZXIgZiBsID1cbiAgbGV0IHJlYyBpdGVyIGYgbDEgbDIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsMSwgTGlzdC5yZXYgbDJcbiAgICB8IHggOjogdGwgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBDQ0VpdGhlci5MZWZ0IHkgLT4gaXRlciBmICh5IDo6IGwxKSBsMiB0bFxuICAgICAgfCBDQ0VpdGhlci5SaWdodCB5IC0+IGl0ZXIgZiBsMSAoeSA6OiBsMikgdGwpXG4gIGluXG4gIGl0ZXIgZiBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fZmlsdGVyX21hcCBmIGwgPVxuICBsZXQgcmVjIGl0ZXIgZiBsMSBsMiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGwxLCBMaXN0LnJldiBsMlxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IGBMZWZ0IHkgLT4gaXRlciBmICh5IDo6IGwxKSBsMiB0bFxuICAgICAgfCBgUmlnaHQgeSAtPiBpdGVyIGYgbDEgKHkgOjogbDIpIHRsXG4gICAgICB8IGBEcm9wIC0+IGl0ZXIgZiBsMSBsMiB0bClcbiAgaW5cbiAgaXRlciBmIFtdIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXAgPSBwYXJ0aXRpb25fZmlsdGVyX21hcFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgY29tYmluZSBsMSBsMiA9XG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyIFtdXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBkaXJlY3QgKGkgLSAxKSBsMScgbDInXG4gICAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuICBhbmQgc2FmZSBsMSBsMiBhY2MgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiBzYWZlIGwxJyBsMicgQEAgKCh4MSwgeDIpIDo6IGFjYylcbiAgICB8IF8sIF8gLT4gaW52YWxpZF9hcmcgXCJDQ0xpc3QuY29tYmluZVwiXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbDEgbDJcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBjb21iaW5lIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gW11cbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBjb21iaW5lIGwxJyBsMidcbiAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuXG5bQEBAZW5kaWZdXG5cbmxldCBjb21iaW5lX2dlbiBsMSBsMiA9XG4gIGxldCBsMSA9IHJlZiBsMSBpblxuICBsZXQgbDIgPSByZWYgbDIgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggIWwxLCAhbDIgd2l0aFxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBOb25lXG4gICAgfCB4MSA6OiB0YWlsMSwgeDIgOjogdGFpbDIgLT5cbiAgICAgIGwxIDo9IHRhaWwxO1xuICAgICAgbDIgOj0gdGFpbDI7XG4gICAgICBTb21lICh4MSwgeDIpXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBjb21iaW5lX3Nob3J0ZXN0IGwxIGwyID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IF8sIFtdIHwgW10sIF8gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyIFtdXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBkaXJlY3QgKGkgLSAxKSBsMScgbDInXG4gIGFuZCBzYWZlIGwxIGwyIGFjYyA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGFjYyA9ICh4MSwgeDIpIDo6IGFjYyBpblxuICAgICAgc2FmZSBsMScgbDInIGFjY1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGwxIGwyXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgY29tYmluZV9zaG9ydGVzdCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgXywgW10gfCBbXSwgXyAtPiBbXVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+ICh4MSwgeDIpIDo6IGNvbWJpbmVfc2hvcnRlc3QgbDEnIGwyJ1xuXG5bQEBAZW5kaWZdXG5cbmxldCBzcGxpdCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdLCBbXVxuICAgIHwgWyAoeDEsIHkxKSBdIC0+IFsgeDEgXSwgWyB5MSBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKSBdIC0+IFsgeDE7IHgyIF0sIFsgeTE7IHkyIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpOyAoeDMsIHkzKSBdIC0+IFsgeDE7IHgyOyB4MyBdLCBbIHkxOyB5MjsgeTMgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5Mik7ICh4MywgeTMpOyAoeDQsIHk0KSBdIC0+XG4gICAgICBbIHgxOyB4MjsgeDM7IHg0IF0sIFsgeTE7IHkyOyB5MzsgeTQgXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNwbGl0X3Nsb3cgW10gW10gbFxuICAgIHwgKHgxLCB5MSkgOjogKHgyLCB5MikgOjogKHgzLCB5MykgOjogKHg0LCB5NCkgOjogKHg1LCB5NSkgOjogbCcgLT5cbiAgICAgIGxldCByeCwgcnkgPSBkaXJlY3QgKGkgLSAxKSBsJyBpblxuICAgICAgeDEgOjogeDIgOjogeDMgOjogeDQgOjogeDUgOjogcngsIHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IHk1IDo6IHJ5XG4gIGFuZCBzcGxpdF9zbG93IGFjYzEgYWNjMiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjYzEsIExpc3QucmV2IGFjYzJcbiAgICB8ICh4MSwgeDIpIDo6IHRhaWwgLT5cbiAgICAgIGxldCBhY2MxID0geDEgOjogYWNjMSBhbmQgYWNjMiA9IHgyIDo6IGFjYzIgaW5cbiAgICAgIHNwbGl0X3Nsb3cgYWNjMSBhY2MyIHRhaWxcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsXG5cbmxldCByZXR1cm4geCA9IFsgeCBdXG5sZXQgcHVyZSA9IHJldHVyblxubGV0ICggPCo+ICkgZnVucyBsID0gcHJvZHVjdCAoZnVuIGYgeCAtPiBmIHgpIGZ1bnMgbFxuXG5sZXQgY2FydGVzaWFuX3Byb2R1Y3QgbCA9XG4gICgqIFtsZWZ0XTogZWxlbWVudHMgcGlja2VkIHNvIGZhclxuICAgICBbcmlnaHRdOiBzZXRzIHRvIHBpY2sgZWxlbWVudHMgZnJvbVxuICAgICBbYWNjXTogYWNjdW11bGF0b3IgZm9yIHRoZSByZXN1bHQsIHRvIHBhc3MgdG8gY29udGludWF0aW9uXG4gICAgIFtrXTogY29udGludWF0aW9uICopXG4gIGxldCByZWMgcHJvZF9yZWMgbGVmdCByaWdodCBrIGFjYyA9XG4gICAgbWF0Y2ggcmlnaHQgd2l0aFxuICAgIHwgW10gLT4gayBhY2MgKExpc3QucmV2IGxlZnQpXG4gICAgfCBsMSA6OiB0YWlsIC0+XG4gICAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHByb2RfcmVjICh4IDo6IGxlZnQpIHRhaWwgayBhY2MpIGFjYyBsMVxuICBpblxuICBwcm9kX3JlYyBbXSBsIChmdW4gYWNjIGwnIC0+IGwnIDo6IGFjYykgW11cblxuKCogY2FydGVzaWFuIHByb2R1Y3Qgb2YgbGlzdHMgb2YgbGlzdHMgKilcbmxldCBtYXBfcHJvZHVjdF9sIGYgbCA9XG4gIGxldCBsID0gTGlzdC5tYXAgZiBsIGluXG4gIGNhcnRlc2lhbl9wcm9kdWN0IGxcblxubGV0IHJlYyBzb3J0ZWRfbWVtIH5jbXAgeCBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gZmFsc2VcbiAgfCB5IDo6IHRhaWwgLT5cbiAgICAobWF0Y2ggY21wIHggeSB3aXRoXG4gICAgfCAwIC0+IHRydWVcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBmYWxzZVxuICAgIHwgXyAtPiAoc29ydGVkX21lbSBbQHRhaWxjYWxsXSkgfmNtcCB4IHRhaWwpXG5cbmxldCBzb3J0ZWRfbWVyZ2UgfmNtcCBsMSBsMiA9XG4gIGxldCByZWMgcmVjdXJzZSBjbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBsMlxuICAgIHwgXywgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBsMVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgY21wICh4MSA6OiBhY2MpIGwxJyBsMlxuICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgY21wICh4MiA6OiBhY2MpIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogeDIgOjogYWNjKSBsMScgbDInXG4gIGluXG4gIHJlY3Vyc2UgY21wIFtdIGwxIGwyXG5cbmxldCBzb3J0ZWRfZGlmZiB+Y21wIGwxIGwyID1cbiAgbGV0IHJlYyByZWN1cnNlIGNtcCBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyAtPiBMaXN0LnJldiBhY2NcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDFcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogYWNjKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCBhY2MgbDEgbDInXG4gICAgICBlbHNlXG4gICAgICAgIHJlY3Vyc2UgY21wIGFjYyBsMScgbDInXG4gIGluXG4gIHJlY3Vyc2UgY21wIFtdIGwxIGwyXG5cbmxldCBzb3J0X3VuaXEgfmNtcCBsID0gTGlzdC5zb3J0X3VuaXEgY21wIGxcblxubGV0IGlzX3NvcnRlZCB+Y21wIGwgPVxuICBsZXQgcmVjIGF1eCBjbXAgPSBmdW5jdGlvblxuICAgIHwgW10gfCBbIF8gXSAtPiB0cnVlXG4gICAgfCB4IDo6ICh5IDo6IF8gYXMgdGFpbCkgLT4gY21wIHggeSA8PSAwICYmIGF1eCBjbXAgdGFpbFxuICBpblxuICBhdXggY21wIGxcblxubGV0IHNvcnRlZF9pbnNlcnQgfmNtcCA/KHVuaXEgPSBmYWxzZSkgeCBsID1cbiAgbGV0IHJlYyBhdXggY21wIHVuaXEgeCBsZWZ0IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgWyB4IF1cbiAgICB8IHkgOjogdGFpbCAtPlxuICAgICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgICAgfCAwIC0+XG4gICAgICAgIGxldCBsJyA9XG4gICAgICAgICAgaWYgdW5pcSB0aGVuXG4gICAgICAgICAgICBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgeCA6OiBsXG4gICAgICAgIGluXG4gICAgICAgIExpc3QucmV2X2FwcGVuZCBsZWZ0IGwnXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCAoeCA6OiBsKVxuICAgICAgfCBfIC0+IGF1eCBjbXAgdW5pcSB4ICh5IDo6IGxlZnQpIHRhaWwpXG4gIGluXG4gIGF1eCBjbXAgdW5pcSB4IFtdIGxcblxubGV0IHNvcnRlZF9yZW1vdmUgfmNtcCA/KGFsbCA9IGZhbHNlKSB4IGwgPVxuICBsZXQgcmVjIGF1eCBjbXAgYWxsIHggbGVmdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGxlZnRcbiAgICB8IHkgOjogdGFpbCAtPlxuICAgICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgICAgfCAwIC0+XG4gICAgICAgIGlmIGFsbCB0aGVuXG4gICAgICAgICAgYXV4IGNtcCBhbGwgeCBsZWZ0IHRhaWxcbiAgICAgICAgZWxzZVxuICAgICAgICAgIExpc3QucmV2X2FwcGVuZCBsZWZ0IHRhaWxcbiAgICAgIHwgbiB3aGVuIG4gPCAwIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0IGxcbiAgICAgIHwgXyAtPiBhdXggY21wIGFsbCB4ICh5IDo6IGxlZnQpIHRhaWwpXG4gIGluXG4gIGF1eCBjbXAgYWxsIHggW10gbFxuXG5sZXQgdW5pcV9zdWNjIH5lcSBsID1cbiAgbGV0IHJlYyBmIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgWyB4IF0gLT4gTGlzdC5yZXYgKHggOjogYWNjKVxuICAgIHwgeCA6OiAoeSA6OiBfIGFzIHRhaWwpIHdoZW4gZXEgeCB5IC0+IGYgYWNjIHRhaWxcbiAgICB8IHggOjogdGFpbCAtPiBmICh4IDo6IGFjYykgdGFpbFxuICBpblxuICBmIFtdIGxcblxubGV0IGdyb3VwX3N1Y2MgfmVxIGwgPVxuICBsZXQgcmVjIGYgfmVxIGFjYyBjdXIgbCA9XG4gICAgbWF0Y2ggY3VyLCBsIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IF8gOjogXywgW10gLT4gTGlzdC5yZXYgKExpc3QucmV2IGN1ciA6OiBhY2MpXG4gICAgfCBbXSwgeCA6OiB0bCAtPiBmIH5lcSBhY2MgWyB4IF0gdGxcbiAgICB8IHkgOjogXywgeCA6OiB0bCB3aGVuIGVxIHggeSAtPiBmIH5lcSBhY2MgKHggOjogY3VyKSB0bFxuICAgIHwgXywgeCA6OiB0bCAtPiBmIH5lcSAoTGlzdC5yZXYgY3VyIDo6IGFjYykgWyB4IF0gdGxcbiAgaW5cbiAgZiB+ZXEgW10gW10gbFxuXG5sZXQgc29ydGVkX21lcmdlX3VuaXEgfmNtcCBsMSBsMiA9XG4gIGxldCBwdXNoIH5jbXAgYWNjIHggPVxuICAgIG1hdGNoIGFjYyB3aXRoXG4gICAgfCBbXSAtPiBbIHggXVxuICAgIHwgeSA6OiBfIHdoZW4gY21wIHggeSA+IDAgLT4geCA6OiBhY2NcbiAgICB8IF8gLT4gYWNjXG4gICAgKCogZHVwbGljYXRlLCBkbyBub3QgeWllbGQgKilcbiAgaW5cbiAgbGV0IHJlYyByZWN1cnNlIH5jbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwgfCBsLCBbXSAtPlxuICAgICAgbGV0IGFjYyA9IExpc3QuZm9sZF9sZWZ0IChwdXNoIH5jbXApIGFjYyBsIGluXG4gICAgICBMaXN0LnJldiBhY2NcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDEpIGwxJyBsMlxuICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgfmNtcCAocHVzaCB+Y21wIGFjYyB4MikgbDEgbDInXG4gICAgICBlbHNlXG4gICAgICAgIHJlY3Vyc2UgfmNtcCBhY2MgbDEgbDInXG4gICAgKCogZHJvcCBvbmUgb2YgdGhlIFt4XSAqKVxuICBpblxuICByZWN1cnNlIH5jbXAgW10gbDEgbDJcblxubGV0IHNvcnRlZF9kaWZmX3VuaXEgfmNtcCBsMSBsMiA9XG4gIGxldCBwdXNoIH5jbXAgYWNjIHggPVxuICAgIG1hdGNoIGFjYyB3aXRoXG4gICAgfCBbXSAtPiBbIHggXVxuICAgIHwgeSA6OiBfIHdoZW4gY21wIHggeSA+IDAgLT4geCA6OiBhY2NcbiAgICB8IF8gLT4gYWNjXG4gICAgKCogZHVwbGljYXRlLCBkbyBub3QgeWllbGQgKilcbiAgaW5cbiAgbGV0IHJlYyByZWN1cnNlIH5jbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBsLCBbXSAtPlxuICAgICAgbGV0IGFjYyA9IExpc3QuZm9sZF9sZWZ0IChwdXNoIH5jbXApIGFjYyBsIGluXG4gICAgICBMaXN0LnJldiBhY2NcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDEpIGwxJyBsMlxuICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgfmNtcCBhY2MgbDEgbDInXG4gICAgICBlbHNlXG4gICAgICAgIHJlY3Vyc2UgfmNtcCBhY2MgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIH5jbXAgW10gbDEgbDJcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRha2UgbiBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBuIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIG4gW10gbFxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgbiA+IDAgdGhlblxuICAgICAgICB4IDo6IGRpcmVjdCAoaSAtIDEpIChuIC0gMSkgbCdcbiAgICAgIGVsc2VcbiAgICAgICAgW11cbiAgYW5kIHNhZmUgbiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IF8gd2hlbiBuID0gMCAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogbCcgLT4gc2FmZSAobiAtIDEpICh4IDo6IGFjYykgbCdcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBuIGxcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB0YWtlIG4gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgIHggOjogdGFrZSAobiAtIDEpIGwnXG4gICAgZWxzZVxuICAgICAgW11cblxuW0BAQGVuZGlmXVxuXG5sZXQgcmVjIGRyb3AgbiBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCBfIHdoZW4gbiA9IDAgLT4gbFxuICB8IF8gOjogbCcgLT4gZHJvcCAobiAtIDEpIGwnXG5cbmxldCBoZF90bCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFpbHdpdGggXCJoZF90bFwiXG4gIHwgeCA6OiBsIC0+IHgsIGxcblxubGV0IHRha2VfZHJvcCBuIGwgPSB0YWtlIG4gbCwgZHJvcCBuIGxcblxubGV0IHN1Ymxpc3RzX29mX2xlbiA/KGxhc3QgPSBmdW4gXyAtPiBOb25lKSA/b2Zmc2V0IG4gbCA9XG4gIGlmIG4gPCAxIHRoZW4gaW52YWxpZF9hcmcgXCJzdWJsaXN0c19vZl9sZW46IG4gbXVzdCBiZSA+IDBcIjtcbiAgbGV0IG9mZnNldCA9XG4gICAgbWF0Y2ggb2Zmc2V0IHdpdGhcbiAgICB8IE5vbmUgLT4gblxuICAgIHwgU29tZSBvIHdoZW4gbyA8IDEgLT4gaW52YWxpZF9hcmcgXCJzdWJsaXN0c19vZl9sZW46IG9mZnNldCBtdXN0IGJlID4gMFwiXG4gICAgfCBTb21lIG8gLT4gb1xuICBpblxuICAoKiBhZGQgc3ViLWxpc3RzIG9mIFtsXSB0byBbYWNjXSAqKVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbGV0IGdyb3VwID0gdGFrZSBuIGwgaW5cbiAgICBpZiBpc19lbXB0eSBncm91cCB0aGVuXG4gICAgICBhY2NcbiAgICAoKiB0aGlzIHdhcyB0aGUgbGFzdCBncm91cCwgd2UgYXJlIGRvbmUgKilcbiAgICBlbHNlIGlmIExpc3QubGVuZ3RoIGdyb3VwIDwgbiAoKiBsYXN0IGdyb3VwLCB3aXRoIG1pc3NpbmcgZWxlbWVudHMgKikgdGhlbiAoXG4gICAgICBtYXRjaCBsYXN0IGdyb3VwIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBhY2NcbiAgICAgIHwgU29tZSBncm91cCcgLT4gZ3JvdXAnIDo6IGFjY1xuICAgICkgZWxzZSAoXG4gICAgICBsZXQgbCcgPSBkcm9wIG9mZnNldCBsIGluXG4gICAgICBhdXggKGdyb3VwIDo6IGFjYykgbCcgKCogY29udGludWUgKilcbiAgICApXG4gIGluXG4gIExpc3QucmV2IChhdXggW10gbClcblxubGV0IGNodW5rcyBuIGwgPSBzdWJsaXN0c19vZl9sZW4gfmxhc3Q6KGZ1biB4IC0+IFNvbWUgeCkgbiBsXG5cbmxldCBpbnRlcnNwZXJzZSB4IGwgPVxuICBsZXQgcmVjIGF1eF9kaXJlY3QgaSB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IFsgXyBdIC0+IGxcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBhdXhfdGFpbHJlYyBbXSB4IGxcbiAgICB8IHkgOjogdGFpbCAtPiB5IDo6IHggOjogYXV4X2RpcmVjdCAoaSAtIDEpIHggdGFpbFxuICBhbmQgYXV4X3RhaWxyZWMgYWNjIHggbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFsgeSBdIC0+IExpc3QucmV2ICh5IDo6IGFjYylcbiAgICB8IHkgOjogdGFpbCAtPiBhdXhfdGFpbHJlYyAoeCA6OiB5IDo6IGFjYykgeCB0YWlsXG4gIGluXG4gIGF1eF9kaXJlY3QgMV8wMDAgeCBsXG5cbmxldCBpbnRlcmxlYXZlIGwxIGwyIDogXyBsaXN0ID1cbiAgbGV0IHJlYyBhdXggYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgKExpc3QucmV2X2FwcGVuZCBsMiBhY2MpXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldiAoTGlzdC5yZXZfYXBwZW5kIGwxIGFjYylcbiAgICB8IHgxIDo6IHRsMSwgeDIgOjogdGwyIC0+IGF1eCAoeDIgOjogeDEgOjogYWNjKSB0bDEgdGwyXG4gIGluXG4gIGF1eCBbXSBsMSBsMlxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgdGFrZV93aGlsZSBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBbXSBsXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICB4IDo6IGRpcmVjdCAoaSAtIDEpIHAgbCdcbiAgICAgIGVsc2VcbiAgICAgICAgW11cbiAgYW5kIHNhZmUgcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHNhZmUgcCAoeCA6OiBhY2MpIGwnXG4gICAgICBlbHNlXG4gICAgICAgIExpc3QucmV2IGFjY1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIHAgbFxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIHRha2Vfd2hpbGUgcCBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCB4IDo6IGwnIC0+XG4gICAgaWYgcCB4IHRoZW5cbiAgICAgIHggOjogdGFrZV93aGlsZSBwIGwnXG4gICAgZWxzZVxuICAgICAgW11cblxuW0BAQGVuZGlmXVxuXG5sZXQgcmVjIGRyb3Bfd2hpbGUgcCBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCB4IDo6IGwnIC0+XG4gICAgaWYgcCB4IHRoZW5cbiAgICAgIGRyb3Bfd2hpbGUgcCBsJ1xuICAgIGVsc2VcbiAgICAgIGxcblxubGV0IHRha2VfZHJvcF93aGlsZSBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXSwgW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgW10gbFxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBpZiBwIHggdGhlbiAoXG4gICAgICAgIGxldCBsMSwgbDIgPSBkaXJlY3QgKGkgLSAxKSBwIHRhaWwgaW5cbiAgICAgICAgeCA6OiBsMSwgbDJcbiAgICAgICkgZWxzZVxuICAgICAgICBbXSwgbFxuICBhbmQgc2FmZSBwIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjYywgW11cbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgc2FmZSBwICh4IDo6IGFjYykgdGFpbFxuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2MsIGxcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBwIGxcblxubGV0IGxhc3QgbiBsID1cbiAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgbiB0aGVuXG4gICAgbFxuICBlbHNlXG4gICAgZHJvcCAobGVuIC0gbikgbFxuXG5sZXQgaGVhZF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IF8gLT4gU29tZSB4XG5cbmxldCB0YWlsX29wdCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IF8gOjogdGFpbCAtPiBTb21lIHRhaWxcblxubGV0IHJlYyBsYXN0X29wdCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IFsgeCBdIC0+IFNvbWUgeFxuICB8IF8gOjogdGFpbCAtPiBsYXN0X29wdCB0YWlsXG5cbmxldCBmaW5kX3ByZWQgPSBmaW5kX29wdFxuXG5sZXQgZmluZF9wcmVkX2V4biBwIGwgPVxuICBtYXRjaCBmaW5kX3ByZWQgcCBsIHdpdGhcbiAgfCBOb25lIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IFNvbWUgeCAtPiB4XG5cbmxldCBmaW5kX21hcGkgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIChtYXRjaCBmIGkgeCB3aXRoXG4gICAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gICAgICB8IE5vbmUgLT4gYXV4IGYgKGkgKyAxKSBsJylcbiAgaW5cbiAgYXV4IGYgMCBsXG5cbmxldCBmaW5kX21hcCBmIGwgPSBmaW5kX21hcGkgKGZ1biBfIC0+IGYpIGxcblxubGV0IGZpbmRfaWR4IHAgbCA9XG4gIGZpbmRfbWFwaVxuICAgIChmdW4gaSB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIChpLCB4KVxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGxcblxubGV0IHJlbW92ZSB+ZXEgeCBsID1cbiAgbGV0IHJlYyByZW1vdmUnIGVxIHggYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB5IDo6IHRhaWwgd2hlbiBlcSB4IHkgLT4gcmVtb3ZlJyBlcSB4IGFjYyB0YWlsXG4gICAgfCB5IDo6IHRhaWwgLT4gcmVtb3ZlJyBlcSB4ICh5IDo6IGFjYykgdGFpbFxuICBpblxuICByZW1vdmUnIGVxIHggW10gbFxuXG5sZXQgZmlsdGVyX21hcCBmIGwgPVxuICBsZXQgcmVjIHJlY3Vyc2UgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjJyA9XG4gICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBhY2NcbiAgICAgICAgfCBTb21lIHkgLT4geSA6OiBhY2NcbiAgICAgIGluXG4gICAgICByZWN1cnNlIGFjYycgbCdcbiAgaW5cbiAgcmVjdXJzZSBbXSBsXG5cbmxldCBrZWVwX3NvbWUgbCA9IGZpbHRlcl9tYXAgKGZ1biB4IC0+IHgpIGxcblxubGV0IGtlZXBfb2sgbCA9XG4gIGZpbHRlcl9tYXBcbiAgICAoZnVuY3Rpb25cbiAgICAgIHwgT2sgeCAtPiBTb21lIHhcbiAgICAgIHwgRXJyb3IgXyAtPiBOb25lKVxuICAgIGxcblxubGV0IGFsbF9zb21lIGwgPVxuICB0cnlcbiAgICBTb21lXG4gICAgICAobWFwXG4gICAgICAgICAoZnVuY3Rpb25cbiAgICAgICAgICAgfCBTb21lIHggLT4geFxuICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgRXhpdClcbiAgICAgICAgIGwpXG4gIHdpdGggRXhpdCAtPiBOb25lXG5cbmxldCBhbGxfb2sgbCA9XG4gIGxldCBlcnIgPSByZWYgTm9uZSBpblxuICB0cnlcbiAgICBPa1xuICAgICAgKG1hcFxuICAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgIHwgT2sgeCAtPiB4XG4gICAgICAgICAgIHwgRXJyb3IgZSAtPlxuICAgICAgICAgICAgIGVyciA6PSBTb21lIGU7XG4gICAgICAgICAgICAgcmFpc2UgRXhpdClcbiAgICAgICAgIGwpXG4gIHdpdGggRXhpdCAtPlxuICAgIChtYXRjaCAhZXJyIHdpdGhcbiAgICB8IE5vbmUgLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBTb21lIGUgLT4gRXJyb3IgZSlcblxubGV0IGdyb3VwX2J5ICh0eXBlIGspID8oaGFzaCA9IEhhc2h0YmwuaGFzaCkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgbCA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBrXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gICgqIGNvbXB1dGUgZ3JvdXAgdGFibGUgKilcbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB4IC0+XG4gICAgICBsZXQgbCA9IHRyeSBUYmwuZmluZCB0YmwgeCB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgVGJsLnJlcGxhY2UgdGJsIHggKHggOjogbCkpXG4gICAgbDtcbiAgVGJsLmZvbGQgKGZ1biBfIHggYWNjIC0+IHggOjogYWNjKSB0YmwgW11cblxubGV0IGpvaW4gfmpvaW5fcm93IHMxIHMyIDogXyB0ID1cbiAgZmxhdF9tYXAgKGZ1biBhIC0+IGZpbHRlcl9tYXAgKGpvaW5fcm93IGEpIHMyKSBzMVxuXG5sZXQgam9pbl9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYxIGYyIH5tZXJnZSBjMVxuICAgIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB4IC0+XG4gICAgICBsZXQga2V5ID0gZjEgeCBpblxuICAgICAgVGJsLmFkZCB0Ymwga2V5IHgpXG4gICAgYzE7XG4gIGxldCByZXMgPSByZWYgW10gaW5cbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICBsZXQga2V5ID0gZjIgeSBpblxuICAgICAgbGV0IHhzID0gVGJsLmZpbmRfYWxsIHRibCBrZXkgaW5cbiAgICAgIExpc3QuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBtYXRjaCBtZXJnZSBrZXkgeCB5IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgeiAtPiByZXMgOj0geiA6OiAhcmVzKVxuICAgICAgICB4cylcbiAgICBjMjtcbiAgIXJlc1xuXG50eXBlICgnYSwgJ2IpIGpvaW5fYWxsX2NlbGwgPSB7XG4gIG11dGFibGUgamFfbGVmdDogJ2EgbGlzdDtcbiAgbXV0YWJsZSBqYV9yaWdodDogJ2IgbGlzdDtcbn1cblxubGV0IGpvaW5fYWxsX2J5ICh0eXBlIGEpID8oZXEgPSBTdGRsaWIuKCA9ICkpID8oaGFzaCA9IEhhc2h0YmwuaGFzaCkgZjEgZjJcbiAgICB+bWVyZ2UgYzEgYzIgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0gYVxuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICBsZXQgdGJsID0gVGJsLmNyZWF0ZSAzMiBpblxuICAoKiBidWlsZCB0aGUgbWFwIFtrZXkgLT4gY2VsbF0gKilcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB4IC0+XG4gICAgICBsZXQga2V5ID0gZjEgeCBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBjLmphX2xlZnQgPC0geCA6OiBjLmphX2xlZnRcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+IFRibC5hZGQgdGJsIGtleSB7IGphX2xlZnQgPSBbIHggXTsgamFfcmlnaHQgPSBbXSB9KVxuICAgIGMxO1xuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHkgLT5cbiAgICAgIGxldCBrZXkgPSBmMiB5IGluXG4gICAgICB0cnlcbiAgICAgICAgbGV0IGMgPSBUYmwuZmluZCB0Ymwga2V5IGluXG4gICAgICAgIGMuamFfcmlnaHQgPC0geSA6OiBjLmphX3JpZ2h0XG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBUYmwuYWRkIHRibCBrZXkgeyBqYV9sZWZ0ID0gW107IGphX3JpZ2h0ID0gWyB5IF0gfSlcbiAgICBjMjtcbiAgVGJsLmZvbGRcbiAgICAoZnVuIGtleSBjZWxsIHJlcyAtPlxuICAgICAgbWF0Y2ggbWVyZ2Uga2V5IGNlbGwuamFfbGVmdCBjZWxsLmphX3JpZ2h0IHdpdGhcbiAgICAgIHwgTm9uZSAtPiByZXNcbiAgICAgIHwgU29tZSB6IC0+IHogOjogcmVzKVxuICAgIHRibCBbXVxuXG5sZXQgZ3JvdXBfam9pbl9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYgYzEgYzIgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0gYVxuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICBsZXQgdGJsID0gVGJsLmNyZWF0ZSAzMiBpblxuICBMaXN0Lml0ZXIgKGZ1biB4IC0+IFRibC5yZXBsYWNlIHRibCB4IFtdKSBjMTtcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICAoKiBwcm9qZWN0IFt5XSBpbnRvIHNvbWUgZWxlbWVudCBvZiBbYzFdICopXG4gICAgICBsZXQga2V5ID0gZiB5IGluXG4gICAgICB0cnlcbiAgICAgICAgbGV0IGwgPSBUYmwuZmluZCB0Ymwga2V5IGluXG4gICAgICAgIFRibC5yZXBsYWNlIHRibCBrZXkgKHkgOjogbClcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+ICgpKVxuICAgIGMyO1xuICBUYmwuZm9sZCAoZnVuIGsgdiBsIC0+IChrLCB2KSA6OiBsKSB0YmwgW11cblxubGV0IG1lbSA/KGVxID0gU3RkbGliLiggPSApKSB4IGwgPVxuICBsZXQgcmVjIHNlYXJjaCBlcSB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFsc2VcbiAgICB8IHkgOjogbCcgLT4gZXEgeCB5IHx8IHNlYXJjaCBlcSB4IGwnXG4gIGluXG4gIHNlYXJjaCBlcSB4IGxcblxubGV0IGFkZF9ub2R1cCB+ZXEgeCBsID1cbiAgaWYgbWVtIH5lcSB4IGwgdGhlblxuICAgIGxcbiAgZWxzZVxuICAgIHggOjogbFxuXG5sZXQgcmVtb3ZlX29uZSB+ZXEgeCBsID1cbiAgbGV0IHJlYyByZW1vdmVfb25lIH5lcSB4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgeSA6OiB0bCB3aGVuIGVxIHggeSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIHRsXG4gICAgfCB5IDo6IHRsIC0+IHJlbW92ZV9vbmUgfmVxIHggKHkgOjogYWNjKSB0bFxuICBpblxuICBpZiBtZW0gfmVxIHggbCB0aGVuXG4gICAgcmVtb3ZlX29uZSB+ZXEgeCBbXSBsXG4gIGVsc2VcbiAgICBsXG5cbmxldCBzdWJzZXQgfmVxIGwxIGwyID0gTGlzdC5mb3JfYWxsIChmdW4gdCAtPiBtZW0gfmVxIHQgbDIpIGwxXG5cbmxldCB1bmlxIH5lcSBsID1cbiAgbGV0IHJlYyB1bmlxIGVxIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiB4cyB3aGVuIExpc3QuZXhpc3RzIChlcSB4KSB4cyAtPiB1bmlxIGVxIGFjYyB4c1xuICAgIHwgeCA6OiB4cyAtPiB1bmlxIGVxICh4IDo6IGFjYykgeHNcbiAgaW5cbiAgdW5pcSBlcSBbXSBsXG5cbmxldCB1bmlvbiB+ZXEgbDEgbDIgPVxuICBsZXQgcmVjIHVuaW9uIGVxIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBsMlxuICAgIHwgeCA6OiB4cyB3aGVuIG1lbSB+ZXEgeCBsMiAtPiB1bmlvbiBlcSBhY2MgeHMgbDJcbiAgICB8IHggOjogeHMgLT4gdW5pb24gZXEgKHggOjogYWNjKSB4cyBsMlxuICBpblxuICB1bmlvbiBlcSBbXSBsMSBsMlxuXG5sZXQgaW50ZXIgfmVxIGwxIGwyID1cbiAgbGV0IHJlYyBpbnRlciBlcSBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiB4cyB3aGVuIG1lbSB+ZXEgeCBsMiAtPiBpbnRlciBlcSAoeCA6OiBhY2MpIHhzIGwyXG4gICAgfCBfIDo6IHhzIC0+IGludGVyIGVxIGFjYyB4cyBsMlxuICBpblxuICBpbnRlciBlcSBbXSBsMSBsMlxuXG5sZXQgbWFwaSBmIGwgPVxuICBsZXQgciA9IHJlZiAwIGluXG4gIG1hcFxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IHkgPSBmICFyIHggaW5cbiAgICAgIGluY3IgcjtcbiAgICAgIHkpXG4gICAgbFxuXG5sZXQgaXRlcmkgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gKClcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGYgaSB4O1xuICAgICAgYXV4IGYgKGkgKyAxKSBsJ1xuICBpblxuICBhdXggZiAwIGxcblxubGV0IGl0ZXJpMiBmIGwxIGwyID1cbiAgbGV0IHJlYyBhdXggZiBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+ICgpXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiaXRlcmkyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBmIGkgeDEgeDI7XG4gICAgICBhdXggZiAoaSArIDEpIGwxJyBsMidcbiAgaW5cbiAgYXV4IGYgMCBsMSBsMlxuXG5sZXQgZm9sZGkgZiBhY2MgbCA9XG4gIGxldCByZWMgZm9sZGkgZiBhY2MgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIGkgeCBpblxuICAgICAgZm9sZGkgZiBhY2MgKGkgKyAxKSBsJ1xuICBpblxuICBmb2xkaSBmIGFjYyAwIGxcblxubGV0IGZvbGRpMiBmIGFjYyBsMSBsMiA9XG4gIGxldCByZWMgZm9sZGkgZiBhY2MgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBhY2NcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJmb2xkaTJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyBpIHgxIHgyIGluXG4gICAgICBmb2xkaSBmIGFjYyAoaSArIDEpIGwxJyBsMidcbiAgaW5cbiAgZm9sZGkgZiBhY2MgMCBsMSBsMlxuXG5sZXQgcmVjIGdldF9hdF9pZHhfcmVjIGkgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IHggOjogXyB3aGVuIGkgPSAwIC0+IHhcbiAgfCBfIDo6IGwnIC0+IGdldF9hdF9pZHhfcmVjIChpIC0gMSkgbCdcblxubGV0IGdldF9hdF9pZHhfZXhuIGkgbCA9XG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGdldF9hdF9pZHhfcmVjIGkgbFxuXG5sZXQgZ2V0X2F0X2lkeCBpIGwgPSB0cnkgU29tZSAoZ2V0X2F0X2lkeF9leG4gaSBsKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbmxldCBzZXRfYXRfaWR4IGkgeCBsMCA9XG4gIGxldCByZWMgYXV4IGwgYWNjIGkgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gbDBcbiAgICB8IF8gOjogbCcgd2hlbiBpID0gMCAtPiBMaXN0LnJldl9hcHBlbmQgYWNjICh4IDo6IGwnKVxuICAgIHwgeSA6OiBsJyAtPiBhdXggbCcgKHkgOjogYWNjKSAoaSAtIDEpXG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbDAgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBhdXggbDAgW10gaVxuXG5sZXQgaW5zZXJ0X2F0X2lkeCBpIHggbCA9XG4gIGxldCByZWMgYXV4IGwgYWNjIGkgeCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIFsgeCBdXG4gICAgfCB5IDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyAoeCA6OiB5IDo6IGwnKVxuICAgIHwgeSA6OiBsJyAtPiBhdXggbCcgKHkgOjogYWNjKSAoaSAtIDEpIHhcbiAgaW5cbiAgbGV0IGkgPVxuICAgIGlmIGkgPCAwIHRoZW5cbiAgICAgIGxlbmd0aCBsICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwgW10gaSB4XG5cbmxldCByZW1vdmVfYXRfaWR4IGkgbDAgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGwwXG4gICAgfCBfIDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBsJ1xuICAgIHwgeSA6OiBsJyAtPiBhdXggbCcgKHkgOjogYWNjKSAoaSAtIDEpXG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbDAgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBhdXggbDAgW10gaVxuXG5sZXQgcmFuZ2VfYnkgfnN0ZXAgaSBqID1cbiAgbGV0IHJlYyByYW5nZSBpIGogYWNjID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICBpIDo6IGFjY1xuICAgIGVsc2VcbiAgICAgIHJhbmdlIGkgKGogLSBzdGVwKSAoaiA6OiBhY2MpXG4gIGluXG4gIGlmIHN0ZXAgPSAwIHRoZW5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDTGlzdC5yYW5nZV9ieVwiKVxuICBlbHNlIGlmXG4gICAgaWYgc3RlcCA+IDAgdGhlblxuICAgICAgaSA+IGpcbiAgICBlbHNlXG4gICAgICBpIDwgalxuICB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIHJhbmdlIGkgKCgoaiAtIGkpIC8gc3RlcCAqIHN0ZXApICsgaSkgW11cblxubGV0IHJhbmdlIGkgaiA9XG4gIGxldCByZWMgdXAgaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICB1cCBpIChqIC0gMSkgKGogOjogYWNjKVxuICBhbmQgZG93biBpIGogYWNjID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICBpIDo6IGFjY1xuICAgIGVsc2VcbiAgICAgIGRvd24gaSAoaiArIDEpIChqIDo6IGFjYylcbiAgaW5cbiAgaWYgaSA8PSBqIHRoZW5cbiAgICB1cCBpIGogW11cbiAgZWxzZVxuICAgIGRvd24gaSBqIFtdXG5cbmxldCByYW5nZScgaSBqID1cbiAgaWYgaSA8IGogdGhlblxuICAgIHJhbmdlIGkgKGogLSAxKVxuICBlbHNlIGlmIGkgPSBqIHRoZW5cbiAgICBbXVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoaiArIDEpXG5cbmxldCAoIC0tICkgPSByYW5nZVxubGV0ICggLS1eICkgPSByYW5nZSdcblxubGV0IHJlcGxpY2F0ZSBpIHggPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4ICh4IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBhdXggW10gaVxuXG5sZXQgcmVwZWF0IGkgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gMCB0aGVuXG4gICAgICBMaXN0LnJldiBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKExpc3QucmV2X2FwcGVuZCBsIGFjYykgKGkgLSAxKVxuICBpblxuICBhdXggW10gaVxuXG5tb2R1bGUgQXNzb2MgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiKSB0ID0gKCdhICogJ2IpIGxpc3RcblxuICBsZXQgcmVjIHNlYXJjaF9leG4gZXEgbCB4ID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgIHwgKHksIHopIDo6IGwnIC0+XG4gICAgICBpZiBlcSB4IHkgdGhlblxuICAgICAgICB6XG4gICAgICBlbHNlXG4gICAgICAgIHNlYXJjaF9leG4gZXEgbCcgeFxuXG4gIGxldCBnZXRfZXhuIH5lcSB4IGwgPSBzZWFyY2hfZXhuIGVxIGwgeFxuICBsZXQgZ2V0IH5lcSB4IGwgPSB0cnkgU29tZSAoc2VhcmNoX2V4biBlcSBsIHgpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICAoKiBzZWFyY2ggZm9yIGEgYmluZGluZyBmb3IgW3hdIGluIFtsXSwgYW5kIGNhbGxzIFtmIHggKFNvbWUgdikgcmVzdF1cbiAgICAgb3IgW2YgeCBOb25lIHJlc3RdIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGZpbmRzIHRoZSBiaW5kaW5nLlxuICAgICBbcmVzdF0gaXMgdGhlIGxpc3Qgb2YgdGhlIG90aGVyIGJpbmRpbmdzICopXG4gIGxldCByZWMgc2VhcmNoX3NldCBlcSBhY2MgbCB4IH5mID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGYgeCBOb25lIGFjY1xuICAgIHwgKHgnLCB5JykgOjogbCcgLT5cbiAgICAgIGlmIGVxIHggeCcgdGhlblxuICAgICAgICBmIHggKFNvbWUgeScpIChMaXN0LnJldl9hcHBlbmQgYWNjIGwnKVxuICAgICAgZWxzZVxuICAgICAgICBzZWFyY2hfc2V0IGVxICgoeCcsIHknKSA6OiBhY2MpIGwnIHggfmZcblxuICBsZXQgc2V0IH5lcSB4IHkgbCA9IHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4geCBfIGwgLT4gKHgsIHkpIDo6IGwpXG5cbiAgbGV0IG1lbSA/KGVxID0gU3RkbGliLiggPSApKSB4IGwgPVxuICAgIHRyeVxuICAgICAgaWdub3JlIChzZWFyY2hfZXhuIGVxIGwgeCk7XG4gICAgICB0cnVlXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuICBsZXQgdXBkYXRlIH5lcSBmIHggbCA9XG4gICAgc2VhcmNoX3NldCBlcSBbXSBsIHggfmY6KGZ1biB4IG9wdF95IHJlc3QgLT5cbiAgICAgICAgbWF0Y2ggZiBvcHRfeSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiByZXN0ICgqIGRyb3AgKilcbiAgICAgICAgfCBTb21lIHknIC0+ICh4LCB5JykgOjogcmVzdClcblxuICBsZXQgcmVtb3ZlIH5lcSB4IGwgPVxuICAgIHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4gXyBvcHRfeSByZXN0IC0+XG4gICAgICAgIG1hdGNoIG9wdF95IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGwgKCoga2VlcCBhcyBpcyAqKVxuICAgICAgICB8IFNvbWUgXyAtPiByZXN0KVxuXG4gIGxldCBrZXlzIGwgPSBtYXAgKGZ1biAoaywgXykgLT4gaykgbFxuICBsZXQgdmFsdWVzIGwgPSBtYXAgKGZ1biAoXywgdikgLT4gdikgbFxuICBsZXQgbWFwX3ZhbHVlcyBmIGwgPSBtYXAgKGZ1biAoaywgdikgLT4gaywgZiB2KSBsXG5lbmRcblxubGV0IGFzc29jID0gQXNzb2MuZ2V0X2V4blxubGV0IGFzc29jX29wdCA9IEFzc29jLmdldFxubGV0IG1lbV9hc3NvYyA9IEFzc29jLm1lbVxubGV0IHJlbW92ZV9hc3NvYyA9IEFzc29jLnJlbW92ZVxuXG4oKiogezIgUmVmZXJlbmNlcyBvbiBMaXN0c30gKilcblxubW9kdWxlIFJlZiA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBsaXN0IHJlZlxuXG4gIGxldCBwdXNoIGwgeCA9IGwgOj0geCA6OiAhbFxuXG4gIGxldCBwb3AgbCA9XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsIDo9IHRhaWw7XG4gICAgICBTb21lIHhcblxuICBsZXQgcG9wX2V4biBsID1cbiAgICBtYXRjaCAhbCB3aXRoXG4gICAgfCBbXSAtPiBmYWlsd2l0aCBcIkNDTGlzdC5SZWYucG9wX2V4blwiXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGwgOj0gdGFpbDtcbiAgICAgIHhcblxuICBsZXQgY3JlYXRlICgpID0gcmVmIFtdXG4gIGxldCBjbGVhciBsID0gbCA6PSBbXVxuICBsZXQgbGlmdCBmIGwgPSBmICFsXG4gIGxldCBwdXNoX2xpc3QgciBsID0gciA6PSBMaXN0LnJldl9hcHBlbmQgbCAhclxuZW5kXG5cbigqKiB7MiBNb25hZGljIE9wZXJhdGlvbnN9ICopXG5tb2R1bGUgdHlwZSBNT05BRCA9IHNpZ1xuICB0eXBlICdhIHRcblxuICB2YWwgcmV0dXJuIDogJ2EgLT4gJ2EgdFxuICB2YWwgKCA+Pj0gKSA6ICdhIHQgLT4gKCdhIC0+ICdiIHQpIC0+ICdiIHRcbmVuZFxuXG5tb2R1bGUgVHJhdmVyc2UgKE0gOiBNT05BRCkgPSBzdHJ1Y3RcbiAgb3BlbiBNXG5cbiAgbGV0IG1hcF9tIGYgbCA9XG4gICAgbGV0IHJlYyBhdXggZiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gcmV0dXJuIChMaXN0LnJldiBhY2MpXG4gICAgICB8IHggOjogdGFpbCAtPiBmIHggPj49IGZ1biB4JyAtPiBhdXggZiAoeCcgOjogYWNjKSB0YWlsXG4gICAgaW5cbiAgICBhdXggZiBbXSBsXG5cbiAgbGV0IHJlYyBtYXBfbV9wYXIgZiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE0ucmV0dXJuIFtdXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICBsZXQgeCcgPSBmIHggaW5cbiAgICAgIGxldCB0bCcgPSBtYXBfbV9wYXIgZiB0bCBpblxuICAgICAgeCcgPj49IGZ1biB4JyAtPlxuICAgICAgdGwnID4+PSBmdW4gdGwnIC0+IE0ucmV0dXJuICh4JyA6OiB0bCcpXG5cbiAgbGV0IHNlcXVlbmNlX20gbCA9IG1hcF9tIChmdW4geCAtPiB4KSBsXG5cbiAgbGV0IHJlYyBmb2xkX20gZiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiByZXR1cm4gYWNjXG4gICAgfCB4IDo6IGwnIC0+IGYgYWNjIHggPj49IGZ1biBhY2MnIC0+IGZvbGRfbSBmIGFjYycgbCdcbmVuZFxuXG4oKiogezIgQ29udmVyc2lvbnN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb21fbGVuIGxlbiBnIHN0ID0gaW5pdCBsZW4gKGZ1biBfIC0+IGcgc3QpXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGxldCBsZW4gPSBSYW5kb20uU3RhdGUuaW50IHN0IDFfMDAwIGluXG4gIHJhbmRvbV9sZW4gbGVuIGcgc3RcblxubGV0IHJhbmRvbV9ub25fZW1wdHkgZyBzdCA9XG4gIGxldCBsZW4gPSAxICsgUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIGxlbiBnIHN0XG5cbmxldCByYW5kb21fY2hvb3NlIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBfIDo6IF8gLT5cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgIGZ1biBzdCAtPlxuICAgICAgbGV0IGkgPSBSYW5kb20uU3RhdGUuaW50IHN0IGxlbiBpblxuICAgICAgTGlzdC5udGggbCBpXG5cbmxldCByYW5kb21fc2VxdWVuY2UgbCBzdCA9IG1hcCAoZnVuIGcgLT4gZyBzdCkgbFxuXG5sZXQgdG9fc3RyaW5nID8oc3RhcnQgPSBcIlwiKSA/KHN0b3AgPSBcIlwiKSA/KHNlcCA9IFwiLCBcIikgaXRlbV90b19zdHJpbmcgbCA9XG4gIGxldCBsID0gTGlzdC5tYXAgaXRlbV90b19zdHJpbmcgbCBpblxuICBzdGFydCBeIFN0cmluZy5jb25jYXQgc2VwIGwgXiBzdG9wXG5cbmxldCB0b19pdGVyIGwgayA9IExpc3QuaXRlciBrIGxcblxubGV0IHJlYyB0b19zZXEgbCAoKSA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFNlcS5OaWxcbiAgfCB4IDo6IHRsIC0+IFNlcS5Db25zICh4LCB0b19zZXEgdGwpXG5cbmxldCBvZl9pdGVyIGkgPVxuICBsZXQgbCA9IHJlZiBbXSBpblxuICBpIChmdW4geCAtPiBsIDo9IHggOjogIWwpO1xuICBMaXN0LnJldiAhbFxuXG5sZXQgb2Zfc2VxX3JldiBsID1cbiAgbGV0IHJlYyBsb29wIGFjYyBzID1cbiAgICBtYXRjaCBzICgpIHdpdGhcbiAgICB8IFNlcS5OaWwgLT4gYWNjXG4gICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+IGxvb3AgKHggOjogYWNjKSB0bFxuICBpblxuICBsb29wIFtdIGxcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IG9mX3NlcSBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBzZXEgPVxuICAgIGlmIGkgPD0gMCB0aGVuXG4gICAgICBMaXN0LnJldiAob2Zfc2VxX3JldiBzZXEpXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaCBzZXEgKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFtdXG4gICAgICB8IFNlcS5Db25zICh4LCB0bCkgLT4geCA6OiBkaXJlY3QgKGkgLSAxKSB0bFxuICAgIClcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsXG5cbltAQEBlbmRpZl1cblxubGV0IHRvX2dlbiBsID1cbiAgbGV0IGwgPSByZWYgbCBpblxuICBmdW4gKCkgLT5cbiAgICBtYXRjaCAhbCB3aXRoXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsIDo9IGwnO1xuICAgICAgU29tZSB4XG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBvZl9nZW4gZyA9XG4gIGxldCByZWMgZGlyZWN0IGkgZyA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgc2FmZSBbXSBnXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaCBnICgpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBbXVxuICAgICAgfCBTb21lIHggLT4geCA6OiBkaXJlY3QgKGkgLSAxKSBnXG4gICAgKVxuICBhbmQgc2FmZSBhY2MgZyA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgIHwgU29tZSB4IC0+IHNhZmUgKHggOjogYWNjKSBnXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gZ1xuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG9mX2dlbiBnID1cbiAgbWF0Y2ggZyAoKSB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgeCAtPiB4IDo6IG9mX2dlbiBnXG5cbltAQEBlbmRpZl1cblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldFtAaW5saW5lXSAoID58PSApIGwgZiA9IG1hcCBmIGxcbiAgbGV0W0BpbmxpbmVdICggPj49ICkgbCBmID0gZmxhdF9tYXAgZiBsXG4gIGxldCAoIEAgKSA9ICggQCApXG4gIGxldCAoIDwqPiApID0gKCA8Kj4gKVxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCAtLSApID0gKCAtLSApXG4gIGxldCAoIC0tXiApID0gKCAtLV4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIGwxIGwyID0gcHJvZHVjdCAoZnVuIHggeSAtPiB4LCB5KSBsMSBsMlxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuICBsZXQgKCBhbmQmICkgPSBjb21iaW5lX3Nob3J0ZXN0XG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG4oKiogezIgSU99ICopXG5cbmxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgID8ocHBfc2VwID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIikgcHBfaXRlbSBmbXQgbCA9XG4gIGxldCByZWMgcHJpbnQgZm10IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgeCA6OiAoXyA6OiBfIGFzIGwpIC0+XG4gICAgICBwcF9pdGVtIGZtdCB4O1xuICAgICAgcHBfc2VwIGZtdCAoKTtcbiAgICAgIHByaW50IGZtdCBsXG4gICAgfCBbIHggXSAtPiBwcF9pdGVtIGZtdCB4XG4gICAgfCBbXSAtPiAoKVxuICBpblxuICBwcF9zdGFydCBmbXQgKCk7XG4gIHByaW50IGZtdCBsO1xuICBwcF9zdG9wIGZtdCAoKVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIE9wdGlvbnN9ICopXG5cbnR5cGUgJ2EgdCA9ICdhIG9wdGlvblxuXG5sZXRbQGlubGluZV0gbWFwIGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgeCAtPiBTb21lIChmIHgpXG5cbmxldCBtYXBfb3IgfmRlZmF1bHQgZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgbWFwX2xhenkgZGVmYXVsdF9mbiBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGRlZmF1bHRfZm4gKClcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBpc19zb21lID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSBfIC0+IHRydWVcblxubGV0IGlzX25vbmUgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gdHJ1ZVxuICB8IFNvbWUgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSBmIG8xIG8yID1cbiAgbWF0Y2ggbzEsIG8yIHdpdGhcbiAgfCBOb25lLCBOb25lIC0+IDBcbiAgfCBTb21lIF8sIE5vbmUgLT4gMVxuICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICB8IFNvbWUgeCwgU29tZSB5IC0+IGYgeCB5XG5cbmxldCBlcXVhbCBmIG8xIG8yID1cbiAgbWF0Y2ggbzEsIG8yIHdpdGhcbiAgfCBOb25lLCBOb25lIC0+IHRydWVcbiAgfCBTb21lIF8sIE5vbmUgfCBOb25lLCBTb21lIF8gLT4gZmFsc2VcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBmIHggeVxuXG5sZXQgcmV0dXJuIHggPSBTb21lIHhcbmxldCBzb21lID0gcmV0dXJuXG5sZXQgbm9uZSA9IE5vbmVcblxubGV0W0BpbmxpbmVdIGZsYXRfbWFwIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0W0BpbmxpbmVdIGZsYXRfbWFwX2wgZiBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0W0BpbmxpbmVdIGJpbmQgbyBmID0gZmxhdF9tYXAgZiBvXG5sZXQgKCA+Pj0gKSA9IGJpbmRcbmxldCBwdXJlIHggPSBTb21lIHhcblxubGV0ICggPCo+ICkgZiB4ID1cbiAgbWF0Y2ggZiwgeCB3aXRoXG4gIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgZiwgU29tZSB4IC0+IFNvbWUgKGYgeClcblxubGV0IG9yXyB+ZWxzZV8gYSA9XG4gIG1hdGNoIGEgd2l0aFxuICB8IE5vbmUgLT4gZWxzZV9cbiAgfCBTb21lIF8gLT4gYVxuXG5sZXQgb3JfbGF6eSB+ZWxzZV8gYSA9XG4gIG1hdGNoIGEgd2l0aFxuICB8IE5vbmUgLT4gZWxzZV8gKClcbiAgfCBTb21lIF8gLT4gYVxuXG5sZXQgKCA8Kz4gKSBhIGIgPSBvcl8gfmVsc2VfOmIgYVxubGV0IGNob2ljZSBsID0gTGlzdC5mb2xkX2xlZnQgKCA8Kz4gKSBOb25lIGxcblxubGV0IG1hcDIgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgeCwgU29tZSB5IC0+IFNvbWUgKGYgeCB5KVxuXG5sZXQgZmlsdGVyIHAgPSBmdW5jdGlvblxuICB8IFNvbWUgeCBhcyBvIHdoZW4gcCB4IC0+IG9cbiAgfCBfIC0+IE5vbmVcblxubGV0IGlmXyBwIHggPVxuICBpZiBwIHggdGhlblxuICAgIFNvbWUgeFxuICBlbHNlXG4gICAgTm9uZVxuXG5sZXQgZXhpc3RzIHAgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZmFsc2VcbiAgfCBTb21lIHggLT4gcCB4XG5cbmxldCBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gdHJ1ZVxuICB8IFNvbWUgeCAtPiBwIHhcblxubGV0IGl0ZXIgZiBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IGZvbGQgZiBhY2MgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gYWNjXG4gIHwgU29tZSB4IC0+IGYgYWNjIHhcblxubGV0IGdldF9vciB+ZGVmYXVsdCB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB5IC0+IHlcblxubGV0IHZhbHVlIHggfmRlZmF1bHQgPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IGRlZmF1bHRcbiAgfCBTb21lIHkgLT4geVxuXG5sZXQgZ2V0X2V4biA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NPcHRpb24uZ2V0X2V4blwiXG5cbmxldCBnZXRfZXhuX29yIG1zZyA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIG1zZ1xuXG5sZXQgZ2V0X2xhenkgZGVmYXVsdF9mbiB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB5IC0+IHlcblxubGV0IHNlcXVlbmNlX2wgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFNvbWUgKExpc3QucmV2IGFjYylcbiAgICB8IFNvbWUgeCA6OiBsJyAtPiBhdXggKHggOjogYWNjKSBsJ1xuICAgIHwgTm9uZSA6OiBfIC0+IHJhaXNlIEV4aXRcbiAgaW5cbiAgdHJ5IGF1eCBbXSBsIHdpdGggRXhpdCAtPiBOb25lXG5cbmxldCB3cmFwID8oaGFuZGxlciA9IGZ1biBfIC0+IHRydWUpIGYgeCA9XG4gIHRyeSBTb21lIChmIHgpXG4gIHdpdGggZSAtPlxuICAgIGlmIGhhbmRsZXIgZSB0aGVuXG4gICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgcmFpc2UgZVxuXG5sZXQgd3JhcDIgPyhoYW5kbGVyID0gZnVuIF8gLT4gdHJ1ZSkgZiB4IHkgPVxuICB0cnkgU29tZSAoZiB4IHkpXG4gIHdpdGggZSAtPlxuICAgIGlmIGhhbmRsZXIgZSB0aGVuXG4gICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgcmFpc2UgZVxuXG5sZXQgdG9fbGlzdCBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgeCAtPiBbIHggXVxuXG5sZXQgb2ZfbGlzdCA9IGZ1bmN0aW9uXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuICB8IFtdIC0+IE5vbmVcblxubGV0IHRvX3Jlc3VsdCBlcnIgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgZXJyXG4gIHwgU29tZSB4IC0+IE9rIHhcblxubGV0IHRvX3Jlc3VsdF9sYXp5IGVycl9mbiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBFcnJvciAoZXJyX2ZuICgpKVxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCBvZl9yZXN1bHQgPSBmdW5jdGlvblxuICB8IEVycm9yIF8gLT4gTm9uZVxuICB8IE9rIHggLT4gU29tZSB4XG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA+fD0gKSB4IGYgPSBtYXAgZiB4XG4gIGxldCAoID4+PSApID0gKCA+Pj0gKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggPCs+ICkgPSAoIDwrPiApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0ICggbGV0KiApID0gKCA+Pj0gKVxuXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBvMSBvMiA9XG4gICAgbWF0Y2ggbzEsIG8yIHdpdGhcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+IFNvbWUgKHgsIHkpXG4gICAgfCBfIC0+IE5vbmVcblxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZ2VuID0gdW5pdCAtPiAnYSBvcHRpb25cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHJhbmRvbSBnIHN0ID1cbiAgaWYgUmFuZG9tLlN0YXRlLmJvb2wgc3QgdGhlblxuICAgIFNvbWUgKGcgc3QpXG4gIGVsc2VcbiAgICBOb25lXG5cbmV4Y2VwdGlvbiBFeGl0Q2hvaWNlXG5cbmxldCBjaG9pY2VfaXRlciBzID1cbiAgbGV0IHIgPSByZWYgTm9uZSBpblxuICAodHJ5XG4gICAgIHMgKGZ1bmN0aW9uXG4gICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgfCBTb21lIF8gYXMgbyAtPlxuICAgICAgICAgciA6PSBvO1xuICAgICAgICAgcmFpc2UgRXhpdENob2ljZSlcbiAgIHdpdGggRXhpdENob2ljZSAtPiAoKSk7XG4gICFyXG5cbmxldCByZWMgY2hvaWNlX3NlcSBzID1cbiAgbWF0Y2ggcyAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiBOb25lXG4gIHwgU2VxLkNvbnMgKFNvbWUgeCwgXykgLT4gU29tZSB4XG4gIHwgU2VxLkNvbnMgKE5vbmUsIHRsKSAtPiBjaG9pY2Vfc2VxIHRsXG5cbmxldCB0b19nZW4gbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gZnVuICgpIC0+IE5vbmVcbiAgfCBTb21lIF8gLT5cbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGZ1biAoKSAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW4gKFxuICAgICAgICBmaXJzdCA6PSBmYWxzZTtcbiAgICAgICAgb1xuICAgICAgKSBlbHNlXG4gICAgICAgIE5vbmVcblxubGV0IHRvX2l0ZXIgbyBrID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgeCAtPiBrIHhcblxubGV0IHRvX3NlcSBvICgpID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBTZXEuTmlsXG4gIHwgU29tZSB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG5cbmxldCBwcCBwcHggb3V0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiTm9uZVwiXG4gIHwgU29tZSB4IC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbU29tZSAlYUBdXCIgcHB4IHhcblxubGV0IGZsYXR0ZW4gPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBOb25lXG5cbmxldCByZXR1cm5faWYgYiB4ID1cbiAgaWYgYiB0aGVuXG4gICAgU29tZSB4XG4gIGVsc2VcbiAgICBOb25lXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgUmFuZG9tIEdlbmVyYXRvcnN9ICopXG5cbmluY2x1ZGUgUmFuZG9tXG5cbnR5cGUgc3RhdGUgPSBSYW5kb20uU3RhdGUudFxudHlwZSAnYSB0ID0gc3RhdGUgLT4gJ2FcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9ICdhIHRcblxubGV0IHJldHVybiB4IF9zdCA9IHhcbmxldCBmbGF0X21hcCBmIGcgc3QgPSBmIChnIHN0KSBzdFxubGV0ICggPj49ICkgZyBmIHN0ID0gZmxhdF9tYXAgZiBnIHN0XG5sZXQgbWFwIGYgZyBzdCA9IGYgKGcgc3QpXG5sZXQgKCA+fD0gKSBnIGYgc3QgPSBtYXAgZiBnIHN0XG5sZXQgZGVsYXkgZiBzdCA9IGYgKCkgc3RcblxubGV0IF9jaG9vc2VfYXJyYXkgYSBzdCA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuIGludmFsaWRfYXJnIFwiQ0NSYW5kb20uY2hvb3NlX2FycmF5XCI7XG4gIGEuKFJhbmRvbS5TdGF0ZS5pbnQgc3QgKEFycmF5Lmxlbmd0aCBhKSlcblxubGV0IGNob29zZV9hcnJheSBhIHN0ID1cbiAgdHJ5IFNvbWUgKF9jaG9vc2VfYXJyYXkgYSBzdCBzdCkgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxuXG5sZXQgY2hvb3NlIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBjaG9vc2VfYXJyYXkgYVxuXG5sZXQgY2hvb3NlX2V4biBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgZnVuIHN0IC0+IF9jaG9vc2VfYXJyYXkgYSBzdCBzdFxuXG5sZXQgY2hvb3NlX3JldHVybiBsID0gX2Nob29zZV9hcnJheSAoQXJyYXkub2ZfbGlzdCBsKVxuXG5leGNlcHRpb24gUGlja19mcm9tX2VtcHR5XG5cbmxldCBwaWNrX2xpc3QgbCA9XG4gIGxldCBuID0gTGlzdC5sZW5ndGggbCBpblxuICBpZiBuID0gMCB0aGVuIHJhaXNlIFBpY2tfZnJvbV9lbXB0eTtcbiAgZnVuIHN0IC0+IExpc3QubnRoIGwgKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IHBpY2tfYXJyYXkgYSA9XG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlbiByYWlzZSBQaWNrX2Zyb21fZW1wdHk7XG4gIGZ1biBzdCAtPiBBcnJheS5nZXQgYSAoUmFuZG9tLlN0YXRlLmludCBzdCBuKVxuXG5sZXQgaW50IGkgc3QgPSBSYW5kb20uU3RhdGUuaW50IHN0IGlcbmxldCBzbWFsbF9pbnQgPSBpbnQgMTAwXG5sZXQgaW50X3JhbmdlIGkgaiBzdCA9IGkgKyBSYW5kb20uU3RhdGUuaW50IHN0IChqIC0gaSArIDEpXG5sZXQgZmxvYXQgZiBzdCA9IFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCBmXG5sZXQgc21hbGxfZmxvYXQgPSBmbG9hdCAxMDAuMFxubGV0IGZsb2F0X3JhbmdlIGkgaiBzdCA9IGkgKy4gUmFuZG9tLlN0YXRlLmZsb2F0IHN0IChqIC0uIGkpXG5cbigqIFRPRE86IHNhbXBsZSBmdW5jdGlvbnMgKilcblxubGV0IHJlcGxpY2F0ZSBuIGcgc3QgPVxuICBsZXQgcmVjIGF1eCBhY2MgbiA9XG4gICAgaWYgbiA9IDAgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChnIHN0IDo6IGFjYykgKG4gLSAxKVxuICBpblxuICBhdXggW10gblxuXG4oKiBTYW1wbGUgd2l0aG91dCByZXBsYWNlbWVudCB1c2luZyByZWplY3Rpb24gc2FtcGxpbmcuICopXG5sZXQgc2FtcGxlX3dpdGhvdXRfZHVwbGljYXRlcyAodHlwZSBlbHQpIH5jbXAgayAocm5nIDogZWx0IHQpIHN0ID1cbiAgbGV0IG1vZHVsZSBTID0gU2V0Lk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGVsdFxuXG4gICAgbGV0IGNvbXBhcmUgPSBjbXBcbiAgZW5kKSBpblxuICBsZXQgcmVjIGF1eCBzIGsgPVxuICAgIGlmIGsgPD0gMCB0aGVuXG4gICAgICBTLmVsZW1lbnRzIHNcbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gcm5nIHN0IGluXG4gICAgICBpZiBTLm1lbSB4IHMgdGhlblxuICAgICAgICBhdXggcyBrXG4gICAgICBlbHNlXG4gICAgICAgIGF1eCAoUy5hZGQgeCBzKSAoayAtIDEpXG4gICAgKVxuICBpblxuICBpZiBrIDw9IDAgdGhlbiBpbnZhbGlkX2FyZyBcInNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXNcIjtcbiAgYXV4IFMuZW1wdHkga1xuXG5sZXQgbGlzdF9zZXEgbCBzdCA9IExpc3QubWFwIChmdW4gZiAtPiBmIHN0KSBsXG5cbmxldCBzcGxpdCBpIHN0ID1cbiAgaWYgaSA8IDIgdGhlblxuICAgIE5vbmVcbiAgZWxzZSAoXG4gICAgbGV0IGogPSAxICsgUmFuZG9tLlN0YXRlLmludCBzdCAoaSAtIDEpIGluXG4gICAgU29tZSAoaiwgaSAtIGopXG4gIClcblxubGV0IF9kaWZmX2xpc3Qgfmxhc3QgbCA9XG4gIGxldCByZWMgZGlmZl9saXN0IGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbIGEgXSAtPiBTb21lICgobGFzdCAtIGEpIDo6IGFjYylcbiAgICB8IGEgOjogKGIgOjogXyBhcyByKSAtPiBkaWZmX2xpc3QgKChiIC0gYSkgOjogYWNjKSByXG4gICAgfCBbXSAtPiBOb25lXG4gIGluXG4gIGRpZmZfbGlzdCBbXSBsXG5cbigqIFBhcnRpdGlvbiBvZiBhbiBpbnQgaW50byBbbGVuXSBpbnRlZ2VycyB1bmlmb3JtbHkuXG4gICBXZSBmaXJzdCBzYW1wbGUgKGxlbi0xKSBwb2ludHMgZnJvbSB0aGUgc2V0IHsxLC4uaS0xfSB3aXRob3V0IHJlcGxhY2VtZW50LlxuICAgV2Ugc29ydCB0aGVzZSBwb2ludHMgYW5kIGFkZCBiYWNrIDAgYW5kIGksIHdlIGhhdmUgdGh1c1xuICAgeF8wID0gMCA8IHhfMSA8IHhfMiA8IOKApiA8IHhfe2xlbi0xfSA8IGkgPSB4X3tsZW59LlxuICAgSWYgd2UgZGVmaW5lLCB5X2sgPSB4X3trKzF9IC0geF97a30gZm9yIGsgaW4gMCDigKYgKGxlbi0xKSwgdGhlbiBieSBjb25zdHJ1Y3Rpb25cbiAgIOKIkV9rIHlfayA9IOKIkV9rICh4X3trKzF9IC0geF9rICkgPSB4X3tsZW59IC0geF8wID0gaS4gKilcbmxldCBzcGxpdF9saXN0IGkgfmxlbiBzdCA9XG4gIGlmIGxlbiA8PSAxIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uc3BsaXRfbGlzdFwiO1xuICBpZiBpID49IGxlbiB0aGVuIChcbiAgICBsZXQgeHMgPVxuICAgICAgc2FtcGxlX3dpdGhvdXRfZHVwbGljYXRlcyB+Y21wOmNvbXBhcmUgKGxlbiAtIDEpIChpbnRfcmFuZ2UgMSAoaSAtIDEpKSBzdFxuICAgIGluXG4gICAgX2RpZmZfbGlzdCB+bGFzdDppICgwIDo6IHhzKVxuICApIGVsc2VcbiAgICBOb25lXG5cbmxldCByZXRyeSA/KG1heCA9IDEwKSBnIHN0ID1cbiAgbGV0IHJlYyBhdXggbiA9XG4gICAgbWF0Y2ggZyBzdCB3aXRoXG4gICAgfCBOb25lIHdoZW4gbiA9IDAgLT4gTm9uZVxuICAgIHwgTm9uZSAtPiBhdXggKG4gLSAxKSAoKiByZXRyeSAqKVxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXNcbiAgaW5cbiAgYXV4IG1heFxuXG5sZXQgcmVjIHRyeV9zdWNjZXNzaXZlbHkgbCBzdCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IE5vbmVcbiAgfCBnIDo6IGwnIC0+XG4gICAgKG1hdGNoIGcgc3Qgd2l0aFxuICAgIHwgTm9uZSAtPiB0cnlfc3VjY2Vzc2l2ZWx5IGwnIHN0XG4gICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlcylcblxubGV0ICggPD8+ICkgYSBiID0gdHJ5X3N1Y2Nlc3NpdmVseSBbIGE7IGIgXVxuXG5leGNlcHRpb24gQmFja3RyYWNrXG5cbmxldCBfY2hvb3NlX2FycmF5X2NhbGwgYSBmIHN0ID1cbiAgdHJ5IGYgKF9jaG9vc2VfYXJyYXkgYSBzdCkgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gcmFpc2UgQmFja3RyYWNrXG5cbmxldCBmaXggPyhzdWIxID0gW10pID8oc3ViMiA9IFtdKSA/KHN1Ym4gPSBbXSkgfmJhc2UgZnVlbCBzdCA9XG4gIGxldCBzdWIxID0gQXJyYXkub2ZfbGlzdCBzdWIxXG4gIGFuZCBzdWIyID0gQXJyYXkub2ZfbGlzdCBzdWIyXG4gIGFuZCBzdWJuID0gQXJyYXkub2ZfbGlzdCBzdWJuIGluXG4gICgqIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aXRoIGZ1ZWwgKilcbiAgbGV0IHJlYyBtYWtlIGZ1ZWwgc3QgPVxuICAgIGlmIGZ1ZWwgPSAwIHRoZW5cbiAgICAgIHJhaXNlIEJhY2t0cmFja1xuICAgIGVsc2UgaWYgZnVlbCA9IDEgdGhlblxuICAgICAgYmFzZSBzdFxuICAgIGVsc2VcbiAgICAgIF90cnlfb3RoZXJ3aXNlIDBcbiAgICAgICAgW3xcbiAgICAgICAgICBfY2hvb3NlX2FycmF5X2NhbGwgc3ViMSAoZnVuIGYgLT4gZiAobWFrZSAoZnVlbCAtIDEpKSBzdCk7XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1YjIgKGZ1biBmIC0+XG4gICAgICAgICAgICAgIG1hdGNoIHNwbGl0IGZ1ZWwgc3Qgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgQmFja3RyYWNrXG4gICAgICAgICAgICAgIHwgU29tZSAoaSwgaikgLT4gZiAobWFrZSBpKSAobWFrZSBqKSBzdCk7XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1Ym4gKGZ1biAobGVuLCBmKSAtPlxuICAgICAgICAgICAgICBsZXQgbGVuID0gbGVuIHN0IGluXG4gICAgICAgICAgICAgIG1hdGNoIHNwbGl0X2xpc3QgZnVlbCB+bGVuIHN0IHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEJhY2t0cmFja1xuICAgICAgICAgICAgICB8IFNvbWUgbCcgLT4gZiAoZnVuIHN0IC0+IExpc3QubWFwIChmdW4geCAtPiBtYWtlIHggc3QpIGwnKSBzdCk7XG4gICAgICAgICAgYmFzZSAoKiBiYXNlIGNhc2UgdGhlbiAqKTtcbiAgICAgICAgfF1cbiAgYW5kIF90cnlfb3RoZXJ3aXNlIGkgYSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIHJhaXNlIEJhY2t0cmFja1xuICAgIGVsc2UgKFxuICAgICAgdHJ5IGEuKGkpIHN0IHdpdGggQmFja3RyYWNrIC0+IF90cnlfb3RoZXJ3aXNlIChpICsgMSkgYVxuICAgIClcbiAgaW5cbiAgbWFrZSAoZnVlbCBzdCkgc3RcblxubGV0IHB1cmUgeCBfc3QgPSB4XG5sZXQgKCA8Kj4gKSBmIGcgc3QgPSBmIHN0IChnIHN0KVxubGV0ICggbGV0KyApID0gKCA+fD0gKVxubGV0ICggbGV0KiApID0gKCA+Pj0gKVxubGV0W0BpbmxpbmVdICggYW5kKyApIGExIGEyIHN0ID0gYTEgc3QsIGEyIHN0XG5sZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxubGV0IF9fZGVmYXVsdF9zdGF0ZSA9IFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCAoKVxubGV0IHJ1biA/KHN0ID0gX19kZWZhdWx0X3N0YXRlKSBnID0gZyBzdFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEVycm9yIE1vbmFkfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBlcXVhbCA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2Egb3JkID0gJ2EgLT4gJ2EgLT4gaW50XG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEJhc2ljc30gKilcblxudHlwZSBub25yZWMgKCsnZ29vZCwgKydiYWQpIHJlc3VsdCA9ICgnZ29vZCwgJ2JhZCkgcmVzdWx0ID1cbiAgfCBPayBvZiAnZ29vZFxuICB8IEVycm9yIG9mICdiYWRcblxudHlwZSAoKydnb29kLCArJ2JhZCkgdCA9ICgnZ29vZCwgJ2JhZCkgcmVzdWx0ID0gT2sgb2YgJ2dvb2QgfCBFcnJvciBvZiAnYmFkXG5cbmxldCByZXR1cm4geCA9IE9rIHhcbmxldCBmYWlsIHMgPSBFcnJvciBzXG5cbmxldCBmYWlsX3ByaW50ZiBmb3JtYXQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBQcmludGYua2JwcmludGYgKGZ1biBidWYgLT4gZmFpbCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikpIGJ1ZiBmb3JtYXRcblxubGV0IGZhaWxfZnByaW50ZiBmb3JtYXQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgb3V0ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gb3V0IC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgZmFpbCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikpXG4gICAgb3V0IGZvcm1hdFxuXG5sZXQgYWRkX2N0eCBtc2cgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IEVycm9yIGUgLT4gRXJyb3IgKGUgXiBcIlxcbmNvbnRleHQ6XCIgXiBtc2cpXG4gIHwgT2sgeCAtPiBPayB4XG5cbmxldCBhZGRfY3R4ZiBtc2cgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgb3V0ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gb3V0IGUgLT5cbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBvdXQgKCk7XG4gICAgICBhZGRfY3R4IChCdWZmZXIuY29udGVudHMgYnVmKSBlKVxuICAgIG91dCBtc2dcblxubGV0IG9mX2V4biBlID1cbiAgbGV0IG1zZyA9IFByaW50ZXhjLnRvX3N0cmluZyBlIGluXG4gIEVycm9yIG1zZ1xuXG5sZXQgb2ZfZXhuX3RyYWNlIGUgPVxuICBsZXQgcmVzID1cbiAgICBQcmludGYuc3ByaW50ZiBcIiVzXFxuJXNcIiAoUHJpbnRleGMudG9fc3RyaW5nIGUpIChQcmludGV4Yy5nZXRfYmFja3RyYWNlICgpKVxuICBpblxuICBFcnJvciByZXNcblxubGV0IG9wdF9tYXAgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgTm9uZSAtPiBPayBOb25lXG4gIHwgU29tZSB4IC0+XG4gICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgfCBPayB4IC0+IE9rIChTb21lIHgpXG4gICAgfCBFcnJvciBlIC0+IEVycm9yIGUpXG5cbmxldCBtYXAgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBPayAoZiB4KVxuICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuXG5sZXQgbWFwX2VyciBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayBfIGFzIHJlcyAtPiByZXNcbiAgfCBFcnJvciB5IC0+IEVycm9yIChmIHkpXG5cbmxldCBtYXAyIGYgZyBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBPayAoZiB4KVxuICB8IEVycm9yIHMgLT4gRXJyb3IgKGcgcylcblxubGV0IGl0ZXIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBmIHhcbiAgfCBFcnJvciBfIC0+ICgpXG5cbmxldCBpdGVyX2VyciBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayBfIC0+ICgpXG4gIHwgRXJyb3IgZXJyIC0+IGYgZXJyXG5cbmV4Y2VwdGlvbiBHZXRfZXJyb3JcblxubGV0IGdldF9leG4gPSBmdW5jdGlvblxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIF8gLT4gcmFpc2UgR2V0X2Vycm9yXG5cbmxldCBnZXRfb3IgZSB+ZGVmYXVsdCA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIF8gLT4gZGVmYXVsdFxuXG5sZXQgZ2V0X2xhenkgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgZSAtPiBmIGVcblxubGV0IGdldF9vcl9mYWlsd2l0aCA9IGZ1bmN0aW9uXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgbXNnIC0+IGZhaWx3aXRoIG1zZ1xuXG5sZXQgbWFwX29yIGYgZSB+ZGVmYXVsdCA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5cbmxldCBjYXRjaCBlIH5vayB+ZXJyID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBvayB4XG4gIHwgRXJyb3IgeSAtPiBlcnIgeVxuXG5sZXQgZmxhdF9tYXAgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBmIHhcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IGVxdWFsIH5lcnIgZXEgYSBiID1cbiAgbWF0Y2ggYSwgYiB3aXRoXG4gIHwgT2sgeCwgT2sgeSAtPiBlcSB4IHlcbiAgfCBFcnJvciBzLCBFcnJvciBzJyAtPiBlcnIgcyBzJ1xuICB8IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgfmVyciBjbXAgYSBiID1cbiAgbWF0Y2ggYSwgYiB3aXRoXG4gIHwgT2sgeCwgT2sgeSAtPiBjbXAgeCB5XG4gIHwgT2sgXywgXyAtPiAxXG4gIHwgXywgT2sgXyAtPiAtMVxuICB8IEVycm9yIHMsIEVycm9yIHMnIC0+IGVyciBzIHMnXG5cbmxldCBmb2xkIH5vayB+ZXJyb3IgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHMgLT4gZXJyb3Igc1xuXG5sZXQgZm9sZF9vayBmIGFjYyByID1cbiAgbWF0Y2ggciB3aXRoXG4gIHwgT2sgeCAtPiBmIGFjYyB4XG4gIHwgRXJyb3IgXyAtPiBhY2NcblxubGV0IGlzX29rID0gZnVuY3Rpb25cbiAgfCBPayBfIC0+IHRydWVcbiAgfCBFcnJvciBfIC0+IGZhbHNlXG5cbmxldCBpc19lcnJvciA9IGZ1bmN0aW9uXG4gIHwgT2sgXyAtPiBmYWxzZVxuICB8IEVycm9yIF8gLT4gdHJ1ZVxuXG4oKiogezIgV3JhcHBlcnN9ICopXG5cbmxldCBndWFyZCBmID0gdHJ5IE9rIChmICgpKSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IGd1YXJkX3N0ciBmID0gdHJ5IE9rIChmICgpKSB3aXRoIGUgLT4gb2ZfZXhuIGVcbmxldCBndWFyZF9zdHJfdHJhY2UgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IG9mX2V4bl90cmFjZSBlXG5sZXQgd3JhcDEgZiB4ID0gdHJ5IHJldHVybiAoZiB4KSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IHdyYXAyIGYgeCB5ID0gdHJ5IHJldHVybiAoZiB4IHkpIHdpdGggZSAtPiBFcnJvciBlXG5sZXQgd3JhcDMgZiB4IHkgeiA9IHRyeSByZXR1cm4gKGYgeCB5IHopIHdpdGggZSAtPiBFcnJvciBlXG5cbigqKiB7MiBBcHBsaWNhdGl2ZX0gKilcblxubGV0IHB1cmUgPSByZXR1cm5cblxubGV0ICggPCo+ICkgZiB4ID1cbiAgbWF0Y2ggZiB3aXRoXG4gIHwgRXJyb3IgcyAtPiBmYWlsIHNcbiAgfCBPayBmIC0+IG1hcCBmIHhcblxubGV0IGpvaW4gdCA9XG4gIG1hdGNoIHQgd2l0aFxuICB8IE9rIChPayBvKSAtPiBPayBvXG4gIHwgT2sgKEVycm9yIGUpIC0+IEVycm9yIGVcbiAgfCBFcnJvciBfIGFzIGUgLT4gZVxuXG5sZXQgYm90aCB4IHkgPVxuICBtYXRjaCB4LCB5IHdpdGhcbiAgfCBPayBvLCBPayBvJyAtPiBPayAobywgbycpXG4gIHwgT2sgXywgRXJyb3IgZSAtPiBFcnJvciBlXG4gIHwgRXJyb3IgZSwgXyAtPiBFcnJvciBlXG5cbigqKiB7MiBDb2xsZWN0aW9uc30gKilcblxubGV0IG1hcF9sIGYgbCA9XG4gIGxldCByZWMgbWFwIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE9rIChMaXN0LnJldiBhY2MpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgRXJyb3IgcyAtPiBFcnJvciBzXG4gICAgICB8IE9rIHkgLT4gbWFwICh5IDo6IGFjYykgbCcpXG4gIGluXG4gIG1hcCBbXSBsXG5cbmxldCBmbGF0dGVuX2wgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBPayAoTGlzdC5yZXYgYWNjKVxuICAgIHwgT2sgeCA6OiBsJyAtPiBsb29wICh4IDo6IGFjYykgbCdcbiAgICB8IEVycm9yIGUgOjogXyAtPiBFcnJvciBlXG4gIGluXG4gIGxvb3AgW10gbFxuXG5leGNlcHRpb24gTG9jYWxFeGl0XG5cbmxldCBmb2xkX2l0ZXIgZiBhY2Mgc2VxID1cbiAgbGV0IGVyciA9IHJlZiBOb25lIGluXG4gIHRyeVxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgc2VxIChmdW4geCAtPlxuICAgICAgICBtYXRjaCBmICFhY2MgeCB3aXRoXG4gICAgICAgIHwgRXJyb3IgcyAtPlxuICAgICAgICAgIGVyciA6PSBTb21lIHM7XG4gICAgICAgICAgcmFpc2UgTG9jYWxFeGl0XG4gICAgICAgIHwgT2sgeSAtPiBhY2MgOj0geSk7XG4gICAgT2sgIWFjY1xuICB3aXRoIExvY2FsRXhpdCAtPlxuICAgIChtYXRjaCAhZXJyIHdpdGhcbiAgICB8IE5vbmUgLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBTb21lIHMgLT4gRXJyb3IgcylcblxubGV0IGZvbGRfbCBmIGFjYyBsID0gZm9sZF9pdGVyIGYgYWNjIChmdW4gayAtPiBMaXN0Lml0ZXIgayBsKVxuXG4oKiogezIgTWlzY30gKilcblxubGV0IGNob29zZSBsID1cbiAgbGV0IHJlYyBmaW5kXyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IChPayBfIGFzIHJlcykgOjogXyAtPiByZXNcbiAgICB8IEVycm9yIF8gOjogbCcgLT4gZmluZF8gbCdcbiAgaW5cbiAgdHJ5IGZpbmRfIGxcbiAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICBsZXQgbCcgPVxuICAgICAgTGlzdC5tYXBcbiAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgfCBFcnJvciBzIC0+IHNcbiAgICAgICAgICB8IE9rIF8gLT4gYXNzZXJ0IGZhbHNlKVxuICAgICAgICBsXG4gICAgaW5cbiAgICBFcnJvciBsJ1xuXG5sZXQgcmV0cnkgbiBmID1cbiAgbGV0IHJlYyByZXRyeSBuIGFjYyA9XG4gICAgbWF0Y2ggbiB3aXRoXG4gICAgfCAwIC0+IGZhaWwgKExpc3QucmV2IGFjYylcbiAgICB8IF8gLT5cbiAgICAgIChtYXRjaCBmICgpIHdpdGhcbiAgICAgIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gICAgICB8IEVycm9yIGUgLT4gcmV0cnkgKG4gLSAxKSAoZSA6OiBhY2MpKVxuICBpblxuICByZXRyeSBuIFtdXG5cbigqKiB7MiBJbmZpeH0gKilcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoID58PSApIGUgZiA9IG1hcCBmIGVcbiAgbGV0ICggPj49ICkgZSBmID0gZmxhdF9tYXAgZiBlXG4gIGxldCAoIDwqPiApID0gKCA8Kj4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgeDEgeDIgPVxuICAgIG1hdGNoIHgxLCB4MiB3aXRoXG4gICAgfCBPayB4LCBPayB5IC0+IE9rICh4LCB5KVxuICAgIHwgRXJyb3IgZSwgXyAtPiBFcnJvciBlXG4gICAgfCBfLCBFcnJvciBlIC0+IEVycm9yIGVcblxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIE1vbmFkaWMgT3BlcmF0aW9uc30gKilcblxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIGxldCAoID4+PSApID0gTS4oID4+PSApXG5cbiAgbGV0IG1hcF9tIGYgZSA9XG4gICAgbWF0Y2ggZSB3aXRoXG4gICAgfCBFcnJvciBzIC0+IE0ucmV0dXJuIChFcnJvciBzKVxuICAgIHwgT2sgeCAtPiBmIHggPj49IGZ1biB5IC0+IE0ucmV0dXJuIChPayB5KVxuXG4gIGxldCBzZXF1ZW5jZV9tIG0gPSBtYXBfbSAoZnVuIHggLT4geCkgbVxuXG4gIGxldCBmb2xkX20gZiBhY2MgZSA9XG4gICAgbWF0Y2ggZSB3aXRoXG4gICAgfCBFcnJvciBfIC0+IE0ucmV0dXJuIGFjY1xuICAgIHwgT2sgeCAtPiBmIGFjYyB4ID4+PSBmdW4geSAtPiBNLnJldHVybiB5XG5cbiAgbGV0IHJldHJ5X20gbiBmID1cbiAgICBsZXQgcmVjIHJldHJ5IG4gYWNjID1cbiAgICAgIG1hdGNoIG4gd2l0aFxuICAgICAgfCAwIC0+IE0ucmV0dXJuIChmYWlsIChMaXN0LnJldiBhY2MpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIGYgKCkgPj49ICggZnVuY3Rpb25cbiAgICAgICAgfCBPayB4IC0+IE0ucmV0dXJuIChPayB4KVxuICAgICAgICB8IEVycm9yIGUgLT4gcmV0cnkgKG4gLSAxKSAoZSA6OiBhY2MpIClcbiAgICBpblxuICAgIHJldHJ5IG4gW11cbmVuZFxuXG4oKiogezIgQ29udmVyc2lvbnN9ICopXG5cbmxldCB0b19vcHQgPSBmdW5jdGlvblxuICB8IE9rIHggLT4gU29tZSB4XG4gIHwgRXJyb3IgXyAtPiBOb25lXG5cbmxldCBvZl9vcHQgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgXCJvZl9vcHRcIlxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCB0b19zZXEgZSAoKSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gU2VxLkNvbnMgKHgsIFNlcS5lbXB0eSlcbiAgfCBFcnJvciBfIC0+IFNlcS5OaWxcblxubGV0IHRvX2l0ZXIgZSBrID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBrIHhcbiAgfCBFcnJvciBfIC0+ICgpXG5cbnR5cGUgKCdhLCAnYikgZXJyb3IgPSBbIGBPayBvZiAnYSB8IGBFcnJvciBvZiAnYiBdXG5cbmxldCBvZl9lcnIgPSBmdW5jdGlvblxuICB8IGBPayB4IC0+IE9rIHhcbiAgfCBgRXJyb3IgeSAtPiBFcnJvciB5XG5cbmxldCB0b19lcnIgPSBmdW5jdGlvblxuICB8IE9rIHggLT4gYE9rIHhcbiAgfCBFcnJvciB5IC0+IGBFcnJvciB5XG5cbigqKiB7MiBJT30gKilcblxubGV0IHBwIHBwX3ggZm10IGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbb2soQCwlYSlAXVwiIHBwX3ggeFxuICB8IEVycm9yIHMgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtlcnJvcihALCVzKUBdXCIgc1xuXG5sZXQgcHAnIHBwX3ggcHBfZSBmbXQgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtvayhALCVhKUBdXCIgcHBfeCB4XG4gIHwgRXJyb3IgcyAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW2Vycm9yKEAsJWEpQF1cIiBwcF9lIHNcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBXcmFwcGVyIGFyb3VuZCBTZXR9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPSBTZXQuT3JkZXJlZFR5cGVcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICBpbmNsdWRlIFNldC5TXG5cbiAgdmFsIG1pbl9lbHRfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFtaW5fZWx0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgbWF4X2VsdF9vcHQgOiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IW1heF9lbHR9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBjaG9vc2Vfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFjaG9vc2V9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX29wdCA6IGVsdCAtPiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IWZpbmR9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAoKiogRmluZCBtaW5pbXVtIGVsZW1lbnQgc2F0aXNmeWluZyBwcmVkaWNhdGUuXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfZmlyc3Rfb3B0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IWZpbmRfZmlyc3R9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0X21hcCA6IChlbHQgLT4gJ2Egb3B0aW9uKSAtPiB0IC0+ICdhIG9wdGlvblxuICAoKiogW2ZpbmRfZmlyc3RfbWFwIGYgc10gZmluZCB0aGUgbWluaW11bSBlbGVtZW50IFt4XSBvZiBbc10gc3VjaCB0aGF0IFtmIHggPSBTb21lIHldXG4gICAgICBhbmQgcmV0dXJuIFtTb21lIHldLiBPdGhlcndpc2UgcmV0dXJucyBbTm9uZV0uXG4gICAgICBAc2luY2UgMy4xMiAqKVxuXG4gIHZhbCBmaW5kX2xhc3QgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICgqKiBGaW5kIG1heGltdW0gZWxlbWVudCBzYXRpc2Z5aW5nIHByZWRpY2F0ZS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9sYXN0X29wdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kX2xhc3R9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2xhc3RfbWFwIDogKGVsdCAtPiAnYSBvcHRpb24pIC0+IHQgLT4gJ2Egb3B0aW9uXG4gICgqKiBbZmluZF9sYXN0X21hcCBmIHNdIGZpbmQgdGhlIG1heGltdW0gZWxlbWVudCBbeF0gb2YgW3NdIHN1Y2ggdGhhdCBbZiB4ID0gU29tZSB5XVxuICAgICAgYW5kIHJldHVybiBbU29tZSB5XS4gT3RoZXJ3aXNlIHJldHVybnMgW05vbmVdLlxuICAgICAgQHNpbmNlIDMuMTIgKilcblxuICB2YWwgb2ZfaXRlciA6IGVsdCBpdGVyIC0+IHRcbiAgKCoqIEJ1aWxkIGEgc2V0IGZyb20gdGhlIGdpdmVuIFtpdGVyXSBvZiBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgb2Zfc2VxIDogZWx0IFNlcS50IC0+IHRcbiAgKCoqIEJ1aWxkIGEgc2V0IGZyb20gdGhlIGdpdmVuIFtzZXFdIG9mIGVsZW1lbnRzLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCBhZGRfaXRlciA6IHQgLT4gZWx0IGl0ZXIgLT4gdFxuICAoKiogQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfc2VxIDogZWx0IFNlcS50IC0+IHQgLT4gdFxuICAoKiogQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCB0b19pdGVyIDogdCAtPiBlbHQgaXRlclxuICAoKiogW3RvX2l0ZXIgdF0gY29udmVydHMgdGhlIHNldCBbdF0gdG8gYSBbaXRlcl0gb2YgdGhlIGVsZW1lbnRzLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfbGlzdCA6IHQgLT4gZWx0IGxpc3QgLT4gdFxuICAoKiogQHNpbmNlIDAuMTQgKilcblxuICB2YWwgdG9fbGlzdCA6IHQgLT4gZWx0IGxpc3RcbiAgKCoqIFt0b19saXN0IHRdIGNvbnZlcnRzIHRoZSBzZXQgW3RdIHRvIGEgbGlzdCBvZiB0aGUgZWxlbWVudHMuICopXG5cbiAgdmFsIHRvX3N0cmluZyA6XG4gICAgP3N0YXJ0OnN0cmluZyAtPlxuICAgID9zdG9wOnN0cmluZyAtPlxuICAgID9zZXA6c3RyaW5nIC0+XG4gICAgKGVsdCAtPiBzdHJpbmcpIC0+XG4gICAgdCAtPlxuICAgIHN0cmluZ1xuICAoKiogIFByaW50IHRoZSBzZXQgaW4gYSBzdHJpbmdcbiAgICAgICBAc2luY2UgMi43ICopXG5cbiAgdmFsIHBwIDpcbiAgICA/cHBfc3RhcnQ6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3N0b3A6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3NlcDp1bml0IHByaW50ZXIgLT5cbiAgICBlbHQgcHJpbnRlciAtPlxuICAgIHQgcHJpbnRlclxuICAoKiogUHJpbnQgdGhlIHNldC4gKilcbmVuZFxuXG5tb2R1bGUgTWFrZSAoTyA6IE1hcC5PcmRlcmVkVHlwZSkgPSBzdHJ1Y3RcbiAgbW9kdWxlIFMgPSBTZXQuTWFrZSAoTylcblxuICAoKiBiYWNrcG9ydCBmdW5jdGlvbnMgZnJvbSByZWNlbnQgc3RkbGliLlxuICAgICB0aGV5IHdpbGwgYmUgc2hhZG93ZWQgYnkgaW5jbHVzaW9uIG9mIFtTXSBpZiBwcmVzZW50LiAqKVxuXG4gIFtAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbiAgbGV0IGZpbmRfb3B0IHggcyA9IHRyeSBTb21lIChTLmZpbmQgeCBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBjaG9vc2Vfb3B0IHMgPSB0cnkgU29tZSAoUy5jaG9vc2Ugcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgbWluX2VsdF9vcHQgcyA9IHRyeSBTb21lIChTLm1pbl9lbHQgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgbWF4X2VsdF9vcHQgcyA9IHRyeSBTb21lIChTLm1heF9lbHQgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG4gIGV4Y2VwdGlvbiBGaW5kX2JpbmRpbmdfZXhpdFxuXG4gIGxldCBmaW5kX2ZpcnN0X29wdCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIHRyeVxuICAgICAgUy5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIGlmIGYgeCB0aGVuIChcbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHg7XG4gICAgICAgICAgICByYWlzZSBGaW5kX2JpbmRpbmdfZXhpdFxuICAgICAgICAgICkpXG4gICAgICAgIG07XG4gICAgICBOb25lXG4gICAgd2l0aCBGaW5kX2JpbmRpbmdfZXhpdCAtPiAhcmVzXG5cbiAgbGV0IGZpbmRfZmlyc3QgZiBtID1cbiAgICBtYXRjaCBmaW5kX2ZpcnN0X29wdCBmIG0gd2l0aFxuICAgIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IFNvbWUgeCAtPiB4XG5cbiAgbGV0IGZpbmRfZmlyc3RfbWFwIGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgdHJ5XG4gICAgICBTLml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgeSAtPlxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeTtcbiAgICAgICAgICAgIHJhaXNlIEZpbmRfYmluZGluZ19leGl0KVxuICAgICAgICBtO1xuICAgICAgTm9uZVxuICAgIHdpdGggRmluZF9iaW5kaW5nX2V4aXQgLT4gIXJlc1xuXG4gICgqIGxpbmVhciB0aW1lLCBtdXN0IHRyYXZlcnNlIHRoZSB3aG9sZSBzZXTigKYgKilcbiAgbGV0IGZpbmRfbGFzdF9vcHQgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICBTLml0ZXIgKGZ1biB4IC0+IGlmIGYgeCB0aGVuIHJlcyA6PSBTb21lIHgpIG07XG4gICAgIXJlc1xuXG4gIGxldCBmaW5kX2xhc3QgZiBtID1cbiAgICBtYXRjaCBmaW5kX2xhc3Rfb3B0IGYgbSB3aXRoXG4gICAgfCBOb25lIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgIHwgU29tZSB4IC0+IHhcblxuICBbQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG4gIGluY2x1ZGUgU1xuXG4gICgqIFVzZSBmaW5kX2xhc3Qgd2hpY2ggaXMgbGluZWFyIHRpbWUgb24gT0NhbWwgPCA0LjA1ICopXG4gIGxldCBmaW5kX2xhc3RfbWFwIGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgbGV0IF8gPVxuICAgICAgZmluZF9sYXN0X29wdFxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBmYWxzZVxuICAgICAgICAgIHwgU29tZSB5IC0+XG4gICAgICAgICAgICByZXMgOj0gU29tZSB5O1xuICAgICAgICAgICAgdHJ1ZSlcbiAgICAgICAgbVxuICAgIGluXG4gICAgIXJlc1xuXG4gIGxldCBhZGRfc2VxIHNlcSBzZXQgPVxuICAgIGxldCBzZXQgPSByZWYgc2V0IGluXG4gICAgU2VxLml0ZXIgKGZ1biB4IC0+IHNldCA6PSBhZGQgeCAhc2V0KSBzZXE7XG4gICAgIXNldFxuXG4gIGxldCBvZl9zZXEgcyA9IGFkZF9zZXEgcyBlbXB0eVxuXG4gIGxldCBhZGRfaXRlciBzZXQgaSA9XG4gICAgbGV0IHNldCA9IHJlZiBzZXQgaW5cbiAgICBpIChmdW4geCAtPiBzZXQgOj0gYWRkIHggIXNldCk7XG4gICAgIXNldFxuXG4gIGxldCBvZl9pdGVyIHMgPSBhZGRfaXRlciBlbXB0eSBzXG4gIGxldCB0b19pdGVyIHMgeWllbGQgPSBpdGVyIHlpZWxkIHNcbiAgbGV0IGFkZF9saXN0ID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBzZXQgeCAtPiBhZGQgeCBzZXQpXG4gIGxldCB0b19saXN0ID0gZWxlbWVudHNcblxuICBsZXQgdG9fc3RyaW5nID8oc3RhcnQgPSBcIlwiKSA/KHN0b3AgPSBcIlwiKSA/KHNlcCA9IFwiLFwiKSBlbHRfdG9fc3RyaW5nIGggPVxuICAgIHRvX2xpc3QgaCB8PiBDQ0xpc3QudG9fc3RyaW5nIH5zdGFydCB+c3RvcCB+c2VwIGVsdF90b19zdHJpbmdcblxuICBsZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICAgID8ocHBfc2VwID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIikgcHBfeCBmbXQgbSA9XG4gICAgcHBfc3RhcnQgZm10ICgpO1xuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgaXRlclxuICAgICAgKGZ1biB4IC0+XG4gICAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICAgIHBwX3ggZm10IHgpXG4gICAgICBtO1xuICAgIHBwX3N0b3AgZm10ICgpXG5lbmRcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBCYXNpYyBTdHJpbmcgVXRpbHN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG5cbigqIHN0YW5kYXJkIGltcGxlbWVudGF0aW9ucyAqKVxuXG5pbmNsdWRlIFN0cmluZ1xuXG5sZXQgY29tcGFyZV9pbnQgKGEgOiBpbnQpIGIgPSBTdGRsaWIuY29tcGFyZSBhIGJcbmxldCBjb21wYXJlID0gU3RyaW5nLmNvbXBhcmVcbmxldCBoYXNoIHMgPSBIYXNodGJsLmhhc2ggc1xubGV0IGxlbmd0aCA9IFN0cmluZy5sZW5ndGhcbmxldCBpc19lbXB0eSBzID0gZXF1YWwgcyBcIlwiXG5cbmxldCByZXYgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgaW5pdCBuIChmdW4gaSAtPiBzLltuIC0gaSAtIDFdKVxuXG5sZXQgcmVjIF90b19saXN0IHMgYWNjIGkgbGVuID1cbiAgaWYgbGVuID0gMCB0aGVuXG4gICAgTGlzdC5yZXYgYWNjXG4gIGVsc2VcbiAgICBfdG9fbGlzdCBzIChzLltpXSA6OiBhY2MpIChpICsgMSkgKGxlbiAtIDEpXG5cbmxldCBfaXNfc3ViIH5zdWIgaSBzIGogfmxlbiA9XG4gIGxldCByZWMgY2hlY2sgayA9XG4gICAgaWYgayA9IGxlbiB0aGVuXG4gICAgICB0cnVlXG4gICAgZWxzZVxuICAgICAgQ0NDaGFyLmVxdWFsIHN1Yi5baSArIGtdIHMuW2ogKyBrXSAmJiBjaGVjayAoayArIDEpXG4gIGluXG4gIGogKyBsZW4gPD0gU3RyaW5nLmxlbmd0aCBzICYmIGNoZWNrIDBcblxubGV0IGlzX3N1YiB+c3ViIGkgcyBqIH5sZW4gPVxuICBpZiBpICsgbGVuID4gU3RyaW5nLmxlbmd0aCBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLmlzX3N1YlwiO1xuICBfaXNfc3ViIH5zdWIgaSBzIGogfmxlblxuXG50eXBlIF8gZGlyZWN0aW9uID1cbiAgfCBEaXJlY3QgOiBbIGBEaXJlY3QgXSBkaXJlY3Rpb25cbiAgfCBSZXZlcnNlIDogWyBgUmV2ZXJzZSBdIGRpcmVjdGlvblxuXG4oKiB3ZSBmb2xsb3cgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS251dGjigJNNb3JyaXPigJNQcmF0dF9hbGdvcml0aG0gKilcbm1vZHVsZSBGaW5kID0gc3RydWN0XG4gIHR5cGUgJ2Ega21wX3BhdHRlcm4gPSB7IGZhaWx1cmU6IGludCBhcnJheTsgc3RyOiBzdHJpbmcgfVxuICAoKiBpbnZhcmlhbnQ6IFtsZW5ndGggZmFpbHVyZSA9IGxlbmd0aCBzdHJdLlxuICAgICBXZSB1c2UgYSBwaGFudG9tIHR5cGUgdG8gYXZvaWQgbWl4aW5nIHRoZSBkaXJlY3Rpb25zLiAqKVxuXG4gIGxldCBrbXBfcGF0dGVybl9sZW5ndGggcCA9IFN0cmluZy5sZW5ndGggcC5zdHJcblxuICAoKiBhY2Nlc3MgdGhlIFtpXS10aCBlbGVtZW50IG9mIFtzXSBhY2NvcmRpbmcgdG8gZGlyZWN0aW9uIFtkaXJdICopXG4gIGxldCBnZXRfIDogdHlwZSBhLiBkaXI6YSBkaXJlY3Rpb24gLT4gc3RyaW5nIC0+IGludCAtPiBjaGFyID1cbiAgIGZ1biB+ZGlyIC0+XG4gICAgbWF0Y2ggZGlyIHdpdGhcbiAgICB8IERpcmVjdCAtPiBTdHJpbmcuZ2V0XG4gICAgfCBSZXZlcnNlIC0+IGZ1biBzIGkgLT4gcy5bU3RyaW5nLmxlbmd0aCBzIC0gaSAtIDFdXG5cbiAgbGV0IGttcF9jb21waWxlXyA6IHR5cGUgYS4gZGlyOmEgZGlyZWN0aW9uIC0+IHN0cmluZyAtPiBhIGttcF9wYXR0ZXJuID1cbiAgIGZ1biB+ZGlyIHN0ciAtPlxuICAgIGxldCBsZW4gPSBsZW5ndGggc3RyIGluXG4gICAgbGV0IGdldCA9IGdldF8gfmRpciBpblxuICAgICgqIGhvdyB0byByZWFkIGVsZW1lbnRzIG9mIHRoZSBzdHJpbmcgKilcbiAgICBtYXRjaCBsZW4gd2l0aFxuICAgIHwgMCAtPiB7IGZhaWx1cmUgPSBbfHxdOyBzdHIgfVxuICAgIHwgMSAtPiB7IGZhaWx1cmUgPSBbfCAtMSB8XTsgc3RyIH1cbiAgICB8IF8gLT5cbiAgICAgICgqIGF0IGxlYXN0IDIgZWxlbWVudHMsIHRoZSBhbGdvcml0aG0gY2FuIHdvcmsgKilcbiAgICAgIGxldCBmYWlsdXJlID0gQXJyYXkubWFrZSBsZW4gMCBpblxuICAgICAgZmFpbHVyZS4oMCkgPC0gLTE7XG4gICAgICAoKiBpOiBjdXJyZW50IGluZGV4IGluIHN0ciAqKVxuICAgICAgbGV0IGkgPSByZWYgMiBpblxuICAgICAgKCogajogaW5kZXggb2YgY2FuZGlkYXRlIHN1YnN0cmluZyAqKVxuICAgICAgbGV0IGogPSByZWYgMCBpblxuICAgICAgd2hpbGUgIWkgPCBsZW4gZG9cbiAgICAgICAgbWF0Y2ggIWogd2l0aFxuICAgICAgICB8IF8gd2hlbiBDQ0NoYXIuZXF1YWwgKGdldCBzdHIgKCFpIC0gMSkpIChnZXQgc3RyICFqKSAtPlxuICAgICAgICAgICgqIHN1YnN0cmluZyBzdGFydGluZyBhdCAhaiBjb250aW51ZXMgbWF0Y2hpbmcgY3VycmVudCBjaGFyICopXG4gICAgICAgICAgaW5jciBqO1xuICAgICAgICAgIGZhaWx1cmUuKCFpKSA8LSAhajtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgfCAwIC0+XG4gICAgICAgICAgKCogYmFjayB0byB0aGUgYmVnaW5uaW5nICopXG4gICAgICAgICAgZmFpbHVyZS4oIWkpIDwtIDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgICgqIGZhbGxiYWNrIGZvciB0aGUgcHJlZml4IHN0cmluZyAqKVxuICAgICAgICAgIGFzc2VydCAoIWogPiAwKTtcbiAgICAgICAgICBqIDo9IGZhaWx1cmUuKCFqKVxuICAgICAgZG9uZTtcbiAgICAgICgqIEZvcm1hdC5wcmludGYgXCJ7QFtmYWlsdXJlOiVhLCBzdHI6JXNAXX1ALlwiIENDRm9ybWF0LihhcnJheSBpbnQpIGZhaWx1cmUgc3RyOyAqKVxuICAgICAgeyBmYWlsdXJlOyBzdHIgfVxuXG4gIGxldCBrbXBfY29tcGlsZSBzID0ga21wX2NvbXBpbGVfIH5kaXI6RGlyZWN0IHNcbiAgbGV0IGttcF9yY29tcGlsZSBzID0ga21wX2NvbXBpbGVfIH5kaXI6UmV2ZXJzZSBzXG5cbiAgKCogcHJvcGVyIHNlYXJjaCBmdW5jdGlvbi5cbiAgICAgW2ldIGluZGV4IGluIFtzXVxuICAgICBbal0gaW5kZXggaW4gW3BhdHRlcm5dXG4gICAgIFtsZW5dIGxlbmd0aCBvZiBbc10gKilcbiAgbGV0IGttcF9maW5kIH5wYXR0ZXJuIHMgaWR4ID1cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgICBsZXQgaSA9IHJlZiBpZHggaW5cbiAgICBsZXQgaiA9IHJlZiAwIGluXG4gICAgbGV0IHBhdF9sZW4gPSBrbXBfcGF0dGVybl9sZW5ndGggcGF0dGVybiBpblxuICAgIHdoaWxlICFqIDwgcGF0X2xlbiAmJiAhaSArICFqIDwgbGVuIGRvXG4gICAgICBsZXQgYyA9IFN0cmluZy5nZXQgcyAoIWkgKyAhaikgaW5cbiAgICAgIGxldCBleHBlY3RlZCA9IFN0cmluZy5nZXQgcGF0dGVybi5zdHIgIWogaW5cbiAgICAgIGlmIENDQ2hhci5lcXVhbCBjIGV4cGVjdGVkIHRoZW5cbiAgICAgICAgKCogY2hhciBtYXRjaGVzICopXG4gICAgICAgIGluY3IgalxuICAgICAgZWxzZSAoXG4gICAgICAgIGxldCBmYWlsX29mZnNldCA9IHBhdHRlcm4uZmFpbHVyZS4oIWopIGluXG4gICAgICAgIGlmIGZhaWxfb2Zmc2V0ID49IDAgdGhlbiAoXG4gICAgICAgICAgYXNzZXJ0IChmYWlsX29mZnNldCA8ICFqKTtcbiAgICAgICAgICAoKiBmb2xsb3cgdGhlIGZhaWx1cmUgbGluayAqKVxuICAgICAgICAgIGkgOj0gIWkgKyAhaiAtIGZhaWxfb2Zmc2V0O1xuICAgICAgICAgIGogOj0gZmFpbF9vZmZzZXRcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAoKiBiZWdpbm5pbmcgb2YgcGF0dGVybiAqKVxuICAgICAgICAgIGogOj0gMDtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIGRvbmU7XG4gICAgaWYgIWogPSBwYXRfbGVuIHRoZW5cbiAgICAgICFpXG4gICAgZWxzZVxuICAgICAgLTFcblxuICAoKiBwcm9wZXIgc2VhcmNoIGZ1bmN0aW9uLCBmcm9tIHRoZSByaWdodC5cbiAgICAgW2ldIGluZGV4IGluIFtzXVxuICAgICBbal0gaW5kZXggaW4gW3BhdHRlcm5dXG4gICAgIFtsZW5dIGxlbmd0aCBvZiBbc10gKilcbiAgbGV0IGttcF9yZmluZCB+cGF0dGVybiBzIGlkeCA9XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gICAgbGV0IGkgPSByZWYgKGxlbiAtIGlkeCAtIDEpIGluXG4gICAgbGV0IGogPSByZWYgMCBpblxuICAgIGxldCBwYXRfbGVuID0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm4gaW5cbiAgICB3aGlsZSAhaiA8IHBhdF9sZW4gJiYgIWkgKyAhaiA8IGxlbiBkb1xuICAgICAgbGV0IGMgPSBTdHJpbmcuZ2V0IHMgKGxlbiAtICFpIC0gIWogLSAxKSBpblxuICAgICAgbGV0IGV4cGVjdGVkID1cbiAgICAgICAgU3RyaW5nLmdldCBwYXR0ZXJuLnN0ciAoU3RyaW5nLmxlbmd0aCBwYXR0ZXJuLnN0ciAtICFqIC0gMSlcbiAgICAgIGluXG4gICAgICBpZiBDQ0NoYXIuZXF1YWwgYyBleHBlY3RlZCB0aGVuXG4gICAgICAgICgqIGNoYXIgbWF0Y2hlcyAqKVxuICAgICAgICBpbmNyIGpcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgZmFpbF9vZmZzZXQgPSBwYXR0ZXJuLmZhaWx1cmUuKCFqKSBpblxuICAgICAgICBpZiBmYWlsX29mZnNldCA+PSAwIHRoZW4gKFxuICAgICAgICAgIGFzc2VydCAoZmFpbF9vZmZzZXQgPCAhaik7XG4gICAgICAgICAgKCogZm9sbG93IHRoZSBmYWlsdXJlIGxpbmsgKilcbiAgICAgICAgICBpIDo9ICFpICsgIWogLSBmYWlsX29mZnNldDtcbiAgICAgICAgICBqIDo9IGZhaWxfb2Zmc2V0XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogYmVnaW5uaW5nIG9mIHBhdHRlcm4gKilcbiAgICAgICAgICBqIDo9IDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIClcbiAgICAgIClcbiAgICBkb25lO1xuICAgICgqIGFkanVzdCByZXN1bHQ6IGZpcnN0LCBbcmVzID0gc3RyaW5nLmxlbmd0aCBzIC0gcmVzIC0xXSB0byBjb252ZXJ0XG4gICAgICAgYmFjayB0byByZWFsIGluZGljZXM7IHRoZW4sIHdoYXQgd2UgZ290IGlzIGFjdHVhbGx5IHRoZSBwb3NpdGlvblxuICAgICAgIG9mIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIHNvIHdlIHN1YnRyYWN0IHRoZSBbbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuIC0xXVxuICAgICAgIHRvIG9idGFpbiB0aGUgcmVhbCByZXN1bHQuICopXG4gICAgaWYgIWogPSBwYXRfbGVuIHRoZW5cbiAgICAgIGxlbiAtICFpIC0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm5cbiAgICBlbHNlXG4gICAgICAtMVxuXG4gIHR5cGUgJ2EgcGF0dGVybiA9IFBfY2hhciBvZiBjaGFyIHwgUF9LTVAgb2YgJ2Ega21wX3BhdHRlcm5cblxuICBsZXQgcGF0dGVybl9sZW5ndGggPSBmdW5jdGlvblxuICAgIHwgUF9jaGFyIF8gLT4gMVxuICAgIHwgUF9LTVAgcCAtPiBrbXBfcGF0dGVybl9sZW5ndGggcFxuXG4gIGxldCBjb21waWxlIHN1YiA6IFsgYERpcmVjdCBdIHBhdHRlcm4gPVxuICAgIGlmIGxlbmd0aCBzdWIgPSAxIHRoZW5cbiAgICAgIFBfY2hhciBzdWIuWzBdXG4gICAgZWxzZVxuICAgICAgUF9LTVAgKGttcF9jb21waWxlIHN1YilcblxuICBsZXQgcmNvbXBpbGUgc3ViIDogWyBgUmV2ZXJzZSBdIHBhdHRlcm4gPVxuICAgIGlmIGxlbmd0aCBzdWIgPSAxIHRoZW5cbiAgICAgIFBfY2hhciBzdWIuWzBdXG4gICAgZWxzZVxuICAgICAgUF9LTVAgKGttcF9yY29tcGlsZSBzdWIpXG5cbiAgbGV0IGZpbmQgPyhzdGFydCA9IDApIH4ocGF0dGVybiA6IFsgYERpcmVjdCBdIHBhdHRlcm4pIHMgPVxuICAgIG1hdGNoIHBhdHRlcm4gd2l0aFxuICAgIHwgUF9jaGFyIGMgLT4gKHRyeSBTdHJpbmcuaW5kZXhfZnJvbSBzIHN0YXJ0IGMgd2l0aCBOb3RfZm91bmQgLT4gLTEpXG4gICAgfCBQX0tNUCBwYXR0ZXJuIC0+IGttcF9maW5kIH5wYXR0ZXJuIHMgc3RhcnRcblxuICBsZXQgcmZpbmQgP3N0YXJ0IH4ocGF0dGVybiA6IFsgYFJldmVyc2UgXSBwYXR0ZXJuKSBzID1cbiAgICBsZXQgc3RhcnQgPVxuICAgICAgbWF0Y2ggc3RhcnQgd2l0aFxuICAgICAgfCBTb21lIG4gLT4gblxuICAgICAgfCBOb25lIC0+IFN0cmluZy5sZW5ndGggcyAtIDFcbiAgICBpblxuICAgIG1hdGNoIHBhdHRlcm4gd2l0aFxuICAgIHwgUF9jaGFyIGMgLT4gKHRyeSBTdHJpbmcucmluZGV4X2Zyb20gcyBzdGFydCBjIHdpdGggTm90X2ZvdW5kIC0+IC0xKVxuICAgIHwgUF9LTVAgcGF0dGVybiAtPiBrbXBfcmZpbmQgfnBhdHRlcm4gcyBzdGFydFxuZW5kXG5cbmxldCBmaW5kID8oc3RhcnQgPSAwKSB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+IEZpbmQuZmluZCB+c3RhcnQgfnBhdHRlcm4gc1xuXG5sZXQgZmluZF9hbGwgPyhzdGFydCA9IDApIH5zdWIgPVxuICBsZXQgcGF0dGVybiA9IEZpbmQuY29tcGlsZSBzdWIgaW5cbiAgZnVuIHMgLT5cbiAgICBsZXQgaSA9IHJlZiBzdGFydCBpblxuICAgIGZ1biAoKSAtPlxuICAgICAgbGV0IHJlcyA9IEZpbmQuZmluZCB+c3RhcnQ6IWkgfnBhdHRlcm4gcyBpblxuICAgICAgaWYgcmVzID0gfi0xIHRoZW5cbiAgICAgICAgTm9uZVxuICAgICAgZWxzZSAoXG4gICAgICAgIGkgOj0gcmVzICsgMTtcbiAgICAgICAgKCogcG9zc2libGUgb3ZlcmxhcCAqKVxuICAgICAgICBTb21lIHJlc1xuICAgICAgKVxuXG5sZXQgZmluZF9hbGxfbCA/c3RhcnQgfnN1YiBzID1cbiAgbGV0IHJlYyBhdXggYWNjIGcgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFNvbWUgaSAtPiBhdXggKGkgOjogYWNjKSBnXG4gIGluXG4gIGF1eCBbXSAoZmluZF9hbGwgP3N0YXJ0IH5zdWIgcylcblxubGV0IG1lbSA/c3RhcnQgfnN1YiBzID0gZmluZCA/c3RhcnQgfnN1YiBzID49IDBcblxubGV0IHJmaW5kIH5zdWIgPVxuICBsZXQgcGF0dGVybiA9IEZpbmQucmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+IEZpbmQucmZpbmQgfnN0YXJ0OihTdHJpbmcubGVuZ3RoIHMgLSAxKSB+cGF0dGVybiBzXG5cbigqIFJlcGxhY2Ugc3Vic3RyaW5nIFtzLltwb3NdIOKApiBzLltwb3MrbGVuLTFdXSBieSBbYnldIGluIFtzXSAqKVxubGV0IHJlcGxhY2VfYXRfIH5wb3MgfmxlbiB+YnkgcyA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAobGVuZ3RoIHMgKyBsZW5ndGggYnkgLSBsZW4pIGluXG4gIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAwIHBvcztcbiAgQnVmZmVyLmFkZF9zdHJpbmcgYiBieTtcbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzIChwb3MgKyBsZW4pIChTdHJpbmcubGVuZ3RoIHMgLSBwb3MgLSBsZW4pO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmVwbGFjZSA/KHdoaWNoID0gYEFsbCkgfnN1YiB+YnkgcyA9XG4gIGlmIGlzX2VtcHR5IHN1YiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcucmVwbGFjZVwiO1xuICBtYXRjaCB3aGljaCB3aXRoXG4gIHwgYExlZnQgLT5cbiAgICBsZXQgaSA9IGZpbmQgfnN0YXJ0OjAgfnN1YiBzIGluXG4gICAgaWYgaSA+PSAwIHRoZW5cbiAgICAgIHJlcGxhY2VfYXRfIH5wb3M6aSB+bGVuOihTdHJpbmcubGVuZ3RoIHN1YikgfmJ5IHNcbiAgICBlbHNlXG4gICAgICBzXG4gIHwgYFJpZ2h0IC0+XG4gICAgbGV0IGkgPSByZmluZCB+c3ViIHMgaW5cbiAgICBpZiBpID49IDAgdGhlblxuICAgICAgcmVwbGFjZV9hdF8gfnBvczppIH5sZW46KFN0cmluZy5sZW5ndGggc3ViKSB+Ynkgc1xuICAgIGVsc2VcbiAgICAgIHNcbiAgfCBgQWxsIC0+XG4gICAgKCogY29tcGlsZSBzZWFyY2ggcGF0dGVybiBvbmx5IG9uY2UgKilcbiAgICBsZXQgcGF0dGVybiA9IEZpbmQuY29tcGlsZSBzdWIgaW5cbiAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICBsZXQgc3RhcnQgPSByZWYgMCBpblxuICAgIHdoaWxlICFzdGFydCA8IFN0cmluZy5sZW5ndGggcyBkb1xuICAgICAgbGV0IGkgPSBGaW5kLmZpbmQgfnN0YXJ0OiFzdGFydCB+cGF0dGVybiBzIGluXG4gICAgICBpZiBpID49IDAgdGhlbiAoXG4gICAgICAgICgqIGJldHdlZW4gbGFzdCBhbmQgY3VyIG9jY3VycmVuY2VzICopXG4gICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAhc3RhcnQgKGkgLSAhc3RhcnQpO1xuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBiIGJ5O1xuICAgICAgICBzdGFydCA6PSBpICsgU3RyaW5nLmxlbmd0aCBzdWJcbiAgICAgICkgZWxzZSAoXG4gICAgICAgICgqIGFkZCByZW1haW5kZXIgKilcbiAgICAgICAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzICFzdGFydCAoU3RyaW5nLmxlbmd0aCBzIC0gIXN0YXJ0KTtcbiAgICAgICAgc3RhcnQgOj0gU3RyaW5nLmxlbmd0aCBzICgqIHN0b3AgKilcbiAgICAgIClcbiAgICBkb25lO1xuICAgIEJ1ZmZlci5jb250ZW50cyBiXG5cbm1vZHVsZSBTcGxpdCA9IHN0cnVjdFxuICB0eXBlIGRyb3BfaWZfZW1wdHkgPSB7IGZpcnN0OiBib29sOyBsYXN0OiBib29sIH1cblxuICBsZXQgbm9fZHJvcCA9IHsgZmlyc3QgPSBmYWxzZTsgbGFzdCA9IGZhbHNlIH1cbiAgbGV0IGRlZmF1bHRfZHJvcCA9IG5vX2Ryb3BcblxuICB0eXBlIHNwbGl0X3N0YXRlID0gU3BsaXRTdG9wIHwgU3BsaXRBdCBvZiBpbnQgKCogcHJldmlvdXMgKilcblxuICBsZXQgcmVjIF9zcGxpdCB+YnkgcyBzdGF0ZSA9XG4gICAgbWF0Y2ggc3RhdGUgd2l0aFxuICAgIHwgU3BsaXRTdG9wIC0+IE5vbmVcbiAgICB8IFNwbGl0QXQgcHJldiAtPiBfc3BsaXRfc2VhcmNoIH5ieSBzIHByZXZcblxuICBhbmQgX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2ID1cbiAgICBsZXQgaiA9IEZpbmQuZmluZCB+c3RhcnQ6cHJldiB+cGF0dGVybjpieSBzIGluXG4gICAgaWYgaiA8IDAgdGhlblxuICAgICAgU29tZSAoU3BsaXRTdG9wLCBwcmV2LCBTdHJpbmcubGVuZ3RoIHMgLSBwcmV2KVxuICAgIGVsc2VcbiAgICAgIFNvbWUgKFNwbGl0QXQgKGogKyBGaW5kLnBhdHRlcm5fbGVuZ3RoIGJ5KSwgcHJldiwgaiAtIHByZXYpXG5cbiAgbGV0IF90dXBsZTMgeCB5IHogPSB4LCB5LCB6XG5cbiAgbGV0IF9ta2dlbiB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgc3RhdGUgPSByZWYgKFNwbGl0QXQgMCkgaW5cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIG5leHQgKCkgPVxuICAgICAgbWF0Y2ggX3NwbGl0IH5ieSBzICFzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gTm9uZVxuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIG5leHQgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIHN0YXRlIDo9IHN0YXRlJztcbiAgICAgICAgU29tZSAoayBzIGkgbGVuKVxuICAgIGluXG4gICAgbmV4dFxuXG4gIGxldCBnZW4gPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta2dlbiB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBnZW5fY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtsaXN0IH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYnVpbGQgYWNjIHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgICB8IFNvbWUgKHN0YXRlJywgMCwgMCkgd2hlbiBkcm9wLmZpcnN0IC0+IGJ1aWxkIGFjYyBzdGF0ZSdcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIGksIGxlbikgLT4gYnVpbGQgKGsgcyBpIGxlbiA6OiBhY2MpIHN0YXRlJ1xuICAgIGluXG4gICAgYnVpbGQgW10gKFNwbGl0QXQgMClcblxuICBsZXQgbGlzdF8gPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta2xpc3QgfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgbGlzdF9jcHkgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta2xpc3QgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtzZXEgfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBtYWtlIHN0YXRlICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gU2VxLk5pbFxuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBtYWtlIHN0YXRlJyAoKVxuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gU2VxLk5pbFxuICAgICAgfCBTb21lIChzdGF0ZScsIGksIGxlbikgLT4gU2VxLkNvbnMgKGsgcyBpIGxlbiwgbWFrZSBzdGF0ZScpXG4gICAgaW5cbiAgICBtYWtlIChTcGxpdEF0IDApXG5cbiAgbGV0IHNlcSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rc2VxIH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IHNlcV9jcHkgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBTdHJpbmcuc3ViXG5cbiAgbGV0IF9ta19pdGVyIH5kcm9wIH5ieSBzIGYgayA9XG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBhdXggc3RhdGUgPVxuICAgICAgbWF0Y2ggX3NwbGl0IH5ieSBzIHN0YXRlIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBhdXggc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiAoKVxuICAgICAgfCBTb21lIChzdGF0ZScsIGksIGxlbikgLT5cbiAgICAgICAgayAoZiBzIGkgbGVuKTtcbiAgICAgICAgYXV4IHN0YXRlJ1xuICAgIGluXG4gICAgYXV4IChTcGxpdEF0IDApXG5cbiAgbGV0IGl0ZXIgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta19pdGVyIH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGl0ZXJfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBTdHJpbmcuc3ViXG5cbiAgbGV0IGxlZnRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IGZpbmQgfnN1YjpieSBzIGluXG4gICAgaWYgaSA9IH4tMSB0aGVuXG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgICBlbHNlIChcbiAgICAgIGxldCByaWdodCA9IGkgKyBTdHJpbmcubGVuZ3RoIGJ5IGluXG4gICAgICBTdHJpbmcuc3ViIHMgMCBpLCBTdHJpbmcuc3ViIHMgcmlnaHQgKFN0cmluZy5sZW5ndGggcyAtIHJpZ2h0KVxuICAgIClcblxuICBsZXQgbGVmdCB+YnkgcyA9IHRyeSBTb21lIChsZWZ0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG4gIGxldCByaWdodF9leG4gfmJ5IHMgPVxuICAgIGxldCBpID0gcmZpbmQgfnN1YjpieSBzIGluXG4gICAgaWYgaSA9IH4tMSB0aGVuXG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgICBlbHNlIChcbiAgICAgIGxldCByaWdodCA9IGkgKyBTdHJpbmcubGVuZ3RoIGJ5IGluXG4gICAgICBTdHJpbmcuc3ViIHMgMCBpLCBTdHJpbmcuc3ViIHMgcmlnaHQgKFN0cmluZy5sZW5ndGggcyAtIHJpZ2h0KVxuICAgIClcblxuICBsZXQgcmlnaHQgfmJ5IHMgPSB0cnkgU29tZSAocmlnaHRfZXhuIH5ieSBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5lbmRcblxubGV0IHNwbGl0IH5ieSBzID0gU3BsaXQubGlzdF9jcHkgfmJ5IHNcblxubGV0IGNvbXBhcmVfdmVyc2lvbnMgYSBiID1cbiAgbGV0IG9mX2ludCBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZSBpblxuICBsZXQgcmVjIGNtcF9yZWMgYSBiID1cbiAgICBtYXRjaCBhICgpLCBiICgpIHdpdGhcbiAgICB8IE5vbmUsIE5vbmUgLT4gMFxuICAgIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgIHwgU29tZSB4LCBTb21lIHkgLT5cbiAgICAgIChtYXRjaCBvZl9pbnQgeCwgb2ZfaW50IHkgd2l0aFxuICAgICAgfCBOb25lLCBOb25lIC0+XG4gICAgICAgIGxldCBjID0gU3RyaW5nLmNvbXBhcmUgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGJcbiAgICAgIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgICAgIHwgTm9uZSwgU29tZSBfIC0+IC0xXG4gICAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAgIGxldCBjID0gY29tcGFyZV9pbnQgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGIpXG4gIGluXG4gIGNtcF9yZWMgKFNwbGl0Lmdlbl9jcHkgfmJ5OlwiLlwiIGEpIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBiKVxuXG50eXBlIG5hdF9jaHVuayA9IE5DX2NoYXIgb2YgY2hhciB8IE5DX2ludCBvZiBpbnRcblxubGV0IGNvbXBhcmVfbmF0dXJhbCBhIGIgPVxuICAoKiBzdHJlYW0gb2YgY2h1bmtzICopXG4gIGxldCBjaHVua3MgcyA6IHVuaXQgLT4gbmF0X2NodW5rIG9wdGlvbiA9XG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGxldCByZWMgbmV4dCAoKSA9XG4gICAgICBpZiAhaSA9IGxlbmd0aCBzIHRoZW5cbiAgICAgICAgTm9uZVxuICAgICAgZWxzZSAoXG4gICAgICAgIG1hdGNoIFN0cmluZy5nZXQgcyAhaSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICAgICAgaW5jciBpO1xuICAgICAgICAgIHJlYWRfaW50IChDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcpXG4gICAgICAgIHwgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICBTb21lIChOQ19jaGFyIGMpXG4gICAgICApXG4gICAgYW5kIHJlYWRfaW50IG4gPVxuICAgICAgaWYgIWkgPSBsZW5ndGggcyB0aGVuXG4gICAgICAgIFNvbWUgKE5DX2ludCBuKVxuICAgICAgZWxzZSAoXG4gICAgICAgIG1hdGNoIFN0cmluZy5nZXQgcyAhaSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICAgICAgaW5jciBpO1xuICAgICAgICAgIHJlYWRfaW50ICgoMTAgKiBuKSArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJylcbiAgICAgICAgfCBfIC0+IFNvbWUgKE5DX2ludCBuKVxuICAgICAgKVxuICAgIGluXG4gICAgbmV4dFxuICBpblxuICBsZXQgcmVjIGNtcF9yZWMgYSBiID1cbiAgICBtYXRjaCBhICgpLCBiICgpIHdpdGhcbiAgICB8IE5vbmUsIE5vbmUgLT4gMFxuICAgIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgIHwgU29tZSB4LCBTb21lIHkgLT5cbiAgICAgIChtYXRjaCB4LCB5IHdpdGhcbiAgICAgIHwgTkNfY2hhciB4LCBOQ19jaGFyIHkgLT5cbiAgICAgICAgbGV0IGMgPSBDaGFyLmNvbXBhcmUgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGJcbiAgICAgIHwgTkNfaW50IF8sIE5DX2NoYXIgXyAtPiAxXG4gICAgICB8IE5DX2NoYXIgXywgTkNfaW50IF8gLT4gLTFcbiAgICAgIHwgTkNfaW50IHgsIE5DX2ludCB5IC0+XG4gICAgICAgIGxldCBjID0gY29tcGFyZV9pbnQgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGIpXG4gIGluXG4gIGNtcF9yZWMgKGNodW5rcyBhKSAoY2h1bmtzIGIpXG5cbmxldCBlZGl0X2Rpc3RhbmNlID8oY3V0b2ZmID0gbWF4X2ludCkgczEgczIgPVxuICBsZXQgbjEgPSBsZW5ndGggczEgaW5cbiAgbGV0IG4yID0gbGVuZ3RoIHMyIGluXG4gIGlmIG4xID0gMCB0aGVuXG4gICAgbWluIGN1dG9mZiBuMlxuICBlbHNlIGlmIG4yID0gMCB0aGVuXG4gICAgbWluIGN1dG9mZiBuMVxuICBlbHNlIGlmIGVxdWFsIHMxIHMyIHRoZW5cbiAgICAwXG4gIGVsc2UgaWYgbjEgLSBuMiA+PSBjdXRvZmYgfHwgbjIgLSBuMSA+PSBjdXRvZmYgdGhlblxuICAgIGN1dG9mZlxuICAoKiBhdCBsZWFzdCBjdXRvZmYgaW5zZXJ0cyAqKVxuICBlbHNlIChcbiAgICB0cnlcbiAgICAgICgqIGRpc3RhbmNlIHZlY3RvcnMgKHYwPXByZXZpb3VzLCB2MT1jdXJyZW50KSAqKVxuICAgICAgbGV0IHYwID0gQXJyYXkubWFrZSAobGVuZ3RoIHMyICsgMSkgMCBpblxuICAgICAgbGV0IHYxID0gQXJyYXkubWFrZSAobGVuZ3RoIHMyICsgMSkgMCBpblxuICAgICAgKCogaW5pdGlhbGl6ZSB2MDogdjAoaSkgPSBBKDApKGkpID0gZGVsZXRlIGkgY2hhcnMgZnJvbSB0ICopXG4gICAgICBsZXQgbG93ZXJfYm91bmQgPSByZWYgbWF4X2ludCBpblxuICAgICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzMiBkb1xuICAgICAgICB2MC4oaSkgPC0gaVxuICAgICAgZG9uZTtcbiAgICAgICgqIG1haW4gbG9vcCBmb3IgdGhlIGJvdHRvbSB1cCBkeW5hbWljIGFsZ29yaXRobSAqKVxuICAgICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzMSAtIDEgZG9cbiAgICAgICAgKCogZmlyc3QgZWRpdCBkaXN0YW5jZSBpcyB0aGUgZGVsZXRpb24gb2YgaSsxIGVsZW1lbnRzIGZyb20gcyAqKVxuICAgICAgICB2MS4oMCkgPC0gaSArIDE7XG5cbiAgICAgICAgKCogdHJ5IGFkZC9kZWxldGUvcmVwbGFjZSBvcGVyYXRpb25zICopXG4gICAgICAgIGZvciBqID0gMCB0byBsZW5ndGggczIgLSAxIGRvXG4gICAgICAgICAgbGV0IGNvc3QgPVxuICAgICAgICAgICAgaWYgQ2hhci5lcXVhbCAoU3RyaW5nLmdldCBzMSBpKSAoU3RyaW5nLmdldCBzMiBqKSB0aGVuXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgIGluXG4gICAgICAgICAgdjEuKGogKyAxKSA8LSBtaW4gKHYxLihqKSArIDEpIChtaW4gKHYwLihqICsgMSkgKyAxKSAodjAuKGopICsgY29zdCkpXG4gICAgICAgIGRvbmU7XG5cbiAgICAgICAgaWZcbiAgICAgICAgICBjdXRvZmYgPCBBcnJheS5sZW5ndGggdjFcbiAgICAgICAgICAmJiBpIDw9IDIgKiBjdXRvZmZcbiAgICAgICAgICAmJiAoMiAqIGN1dG9mZikgLSBpIDwgU3RyaW5nLmxlbmd0aCBzMlxuICAgICAgICB0aGVuXG4gICAgICAgICAgbG93ZXJfYm91bmQgOj0gbWluICFsb3dlcl9ib3VuZCB2MS4oKDIgKiBjdXRvZmYpIC0gaSk7XG4gICAgICAgICgqIGRpZCB3ZSBjb21wdXRlIHVwIHRvIHRoZSBkaWFnb25hbCAyKmN1dG9mZisxPyAqKVxuICAgICAgICBpZiBjdXRvZmYgPCBBcnJheS5sZW5ndGggdjEgJiYgaSA9IGN1dG9mZiAqIDIgJiYgIWxvd2VyX2JvdW5kID49IGN1dG9mZlxuICAgICAgICB0aGVuXG4gICAgICAgICAgcmFpc2Vfbm90cmFjZSBFeGl0O1xuXG4gICAgICAgICgqIGNvcHkgdjEgaW50byB2MCBmb3IgbmV4dCBpdGVyYXRpb24gKilcbiAgICAgICAgQXJyYXkuYmxpdCB2MSAwIHYwIDAgKGxlbmd0aCBzMiArIDEpXG4gICAgICBkb25lO1xuICAgICAgdjEuKGxlbmd0aCBzMilcbiAgICB3aXRoIEV4aXQgLT4gY3V0b2ZmXG4gIClcblxubGV0IHJlcGVhdCBzIG4gPVxuICBhc3NlcnQgKG4gPj0gMCk7XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYXNzZXJ0IChsZW4gPiAwKTtcbiAgaW5pdCAobGVuICogbikgKGZ1biBpIC0+IHMuW2kgbW9kIGxlbl0pXG5cbmxldCBwcmVmaXggfnByZSBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcHJlIGluXG4gIGlmIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IHJlYyBjaGVjayBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgICB0cnVlXG4gICAgICBlbHNlIGlmIFN0ZGxpYi4oIDw+ICkgKFN0cmluZy51bnNhZmVfZ2V0IHMgaSkgKFN0cmluZy51bnNhZmVfZ2V0IHByZSBpKVxuICAgICAgdGhlblxuICAgICAgICBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBjaGVjayAoaSArIDEpXG4gICAgaW5cbiAgICBjaGVjayAwXG4gIClcblxubGV0IHN1ZmZpeCB+c3VmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdWYgaW5cbiAgaWYgbGVuID4gU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBmYWxzZVxuICBlbHNlIChcbiAgICBsZXQgb2ZmID0gU3RyaW5nLmxlbmd0aCBzIC0gbGVuIGluXG4gICAgbGV0IHJlYyBjaGVjayBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgICB0cnVlXG4gICAgICBlbHNlIGlmXG4gICAgICAgIFN0ZGxpYi4oIDw+ICkgKFN0cmluZy51bnNhZmVfZ2V0IHMgKG9mZiArIGkpKSAoU3RyaW5nLnVuc2FmZV9nZXQgc3VmIGkpXG4gICAgICB0aGVuXG4gICAgICAgIGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIGNoZWNrIChpICsgMSlcbiAgICBpblxuICAgIGNoZWNrIDBcbiAgKVxuXG5sZXQgdGFrZSBuIHMgPVxuICBpZiBuIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgMCBuXG4gIGVsc2VcbiAgICBzXG5cbmxldCBkcm9wIG4gcyA9XG4gIGlmIG4gPCBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIFN0cmluZy5zdWIgcyBuIChTdHJpbmcubGVuZ3RoIHMgLSBuKVxuICBlbHNlXG4gICAgXCJcIlxuXG5sZXQgdGFrZV9kcm9wIG4gcyA9IHRha2UgbiBzLCBkcm9wIG4gc1xuXG5sZXQgY2hvcF9zdWZmaXggfnN1ZiBzID1cbiAgaWYgc3VmZml4IH5zdWYgcyB0aGVuXG4gICAgU29tZSAoU3RyaW5nLnN1YiBzIDAgKFN0cmluZy5sZW5ndGggcyAtIFN0cmluZy5sZW5ndGggc3VmKSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGNob3BfcHJlZml4IH5wcmUgcyA9XG4gIGlmIHByZWZpeCB+cHJlIHMgdGhlblxuICAgIFNvbWVcbiAgICAgIChTdHJpbmcuc3ViIHMgKFN0cmluZy5sZW5ndGggcHJlKSAoU3RyaW5nLmxlbmd0aCBzIC0gU3RyaW5nLmxlbmd0aCBwcmUpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5sZXQgYmxpdCA9IFN0cmluZy5ibGl0XG5cbmxldCBmb2xkIGYgYWNjIHMgPVxuICBsZXQgcmVjIGZvbGRfcmVjIGYgYWNjIHMgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkX3JlYyBmIChmIGFjYyBzLltpXSkgcyAoaSArIDEpXG4gIGluXG4gIGZvbGRfcmVjIGYgYWNjIHMgMFxuXG5sZXQgZm9sZGkgZiBhY2MgcyA9XG4gIGxldCByZWMgZm9sZF9yZWMgZiBhY2MgcyBpID1cbiAgICBpZiBpID0gU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGZvbGRfcmVjIGYgKGYgYWNjIGkgcy5baV0pIHMgKGkgKyAxKVxuICBpblxuICBmb2xkX3JlYyBmIGFjYyBzIDBcblxubGV0IHBhZCA/KHNpZGUgPSBgTGVmdCkgPyhjID0gJyAnKSBuIHMgPVxuICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgaWYgbGVuX3MgPj0gbiB0aGVuXG4gICAgc1xuICBlbHNlIChcbiAgICBsZXQgcGFkX2xlbiA9IG4gLSBsZW5fcyBpblxuICAgIG1hdGNoIHNpZGUgd2l0aFxuICAgIHwgYExlZnQgLT5cbiAgICAgIGluaXQgbiAoZnVuIGkgLT5cbiAgICAgICAgICBpZiBpIDwgcGFkX2xlbiB0aGVuXG4gICAgICAgICAgICBjXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgcy5baSAtIHBhZF9sZW5dKVxuICAgIHwgYFJpZ2h0IC0+XG4gICAgICBpbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgaWYgaSA8IGxlbl9zIHRoZW5cbiAgICAgICAgICAgIHMuW2ldXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYylcbiAgKVxuXG5sZXQgX3RvX2dlbiBzIGkwIGxlbiA9XG4gIGxldCBpID0gcmVmIGkwIGluXG4gIGZ1biAoKSAtPlxuICAgIGlmICFpID0gaTAgKyBsZW4gdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2UgKFxuICAgICAgbGV0IGMgPSBTdHJpbmcudW5zYWZlX2dldCBzICFpIGluXG4gICAgICBpbmNyIGk7XG4gICAgICBTb21lIGNcbiAgICApXG5cbmxldCB0b19nZW4gcyA9IF90b19nZW4gcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5sZXQgb2ZfY2hhciBjID0gU3RyaW5nLm1ha2UgMSBjXG5cbmxldCBvZl9nZW4gZyA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBsZXQgcmVjIGF1eCAoKSA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IEJ1ZmZlci5jb250ZW50cyBiXG4gICAgfCBTb21lIGMgLT5cbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBiIGM7XG4gICAgICBhdXggKClcbiAgaW5cbiAgYXV4ICgpXG5cbmxldCB0b19pdGVyIHMgayA9IFN0cmluZy5pdGVyIGsgc1xuXG5sZXQgcmVjIF90b19zZXEgcyBpIGxlbiAoKSA9XG4gIGlmIGxlbiA9IDAgdGhlblxuICAgIFNlcS5OaWxcbiAgZWxzZVxuICAgIFNlcS5Db25zIChzLltpXSwgX3RvX3NlcSBzIChpICsgMSkgKGxlbiAtIDEpKVxuXG5sZXQgdG9fc2VxIHMgPSBfdG9fc2VxIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIGkgKEJ1ZmZlci5hZGRfY2hhciBiKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IG9mX3NlcSBzZXEgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgU2VxLml0ZXIgKEJ1ZmZlci5hZGRfY2hhciBiKSBzZXE7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCB0b19saXN0IHMgPSBfdG9fbGlzdCBzIFtdIDAgKFN0cmluZy5sZW5ndGggcylcblxubGV0IG9mX2xpc3QgbCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChMaXN0Lmxlbmd0aCBsKSBpblxuICBMaXN0Lml0ZXIgKEJ1ZmZlci5hZGRfY2hhciBidWYpIGw7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IG9mX2FycmF5IGEgPSBpbml0IChBcnJheS5sZW5ndGggYSkgKGZ1biBpIC0+IGEuKGkpKVxubGV0IHRvX2FycmF5IHMgPSBBcnJheS5pbml0IChTdHJpbmcubGVuZ3RoIHMpIChmdW4gaSAtPiBzLltpXSlcblxubGV0IGxpbmVzX2dlbiBzID1cbiAgU3BsaXQuZ2VuX2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgbGluZXNfaXRlciBzID1cbiAgU3BsaXQuaXRlcl9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzX3NlcSBzID1cbiAgU3BsaXQuc2VxX2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgbGluZXMgcyA9XG4gIFNwbGl0Lmxpc3RfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBjb25jYXRfZ2VuX2J1ZiB+c2VwIGcgOiBCdWZmZXIudCA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IHJlYyBhdXggfmZpcnN0ICgpID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gYlxuICAgIHwgU29tZSBzIC0+XG4gICAgICBpZiBub3QgZmlyc3QgdGhlbiBCdWZmZXIuYWRkX3N0cmluZyBiIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgICAgIGF1eCB+Zmlyc3Q6ZmFsc2UgKClcbiAgaW5cbiAgYXV4IH5maXJzdDp0cnVlICgpXG5cbmxldCBjb25jYXRfZ2VuIH5zZXAgZyA9XG4gIGxldCBidWYgPSBjb25jYXRfZ2VuX2J1ZiB+c2VwIGcgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgY29uY2F0X2l0ZXJfYnVmIH5zZXAgaSA6IEJ1ZmZlci50ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIGkgKGZ1biBzIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHMpO1xuICBidWZcblxubGV0IGNvbmNhdF9pdGVyIH5zZXAgaSA9XG4gIGxldCBidWYgPSBjb25jYXRfaXRlcl9idWYgfnNlcCBpIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGNvbmNhdF9zZXFfYnVmIH5zZXAgc2VxIDogQnVmZmVyLnQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIHMgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgcylcbiAgICBzZXE7XG4gIGJ1ZlxuXG5sZXQgY29uY2F0X3NlcSB+c2VwIHNlcSA9XG4gIGxldCBidWYgPSBjb25jYXRfc2VxX2J1ZiB+c2VwIHNlcSBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzIGwgPVxuICBsZXQgbGVuID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBuIHMgLT4gbiArIDEgKyBTdHJpbmcubGVuZ3RoIHMpIDAgbCBpblxuICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIGxlbiBpblxuICBsZXQgcmVjIGF1eF9ibGl0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPlxuICAgICAgYXNzZXJ0IChpID0gbGVuKTtcbiAgICAgIEJ5dGVzLnRvX3N0cmluZyBidWZcbiAgICB8IHMgOjogdGFpbCAtPlxuICAgICAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBCeXRlcy5ibGl0X3N0cmluZyBzIDAgYnVmIGkgbGVuX3M7XG4gICAgICBCeXRlcy5zZXQgYnVmIChpICsgbGVuX3MpICdcXG4nO1xuICAgICAgYXV4X2JsaXQgKGkgKyBsZW5fcyArIDEpIHRhaWxcbiAgaW5cbiAgYXV4X2JsaXQgMCBsXG5cbmxldCB1bmxpbmVzX2dlbiBnID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9nZW5fYnVmIH5zZXA6XCJcXG5cIiBnIGluXG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbic7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVubGluZXNfaXRlciBpID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9pdGVyX2J1ZiB+c2VwOlwiXFxuXCIgaSBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzX3NlcSBzZXEgPVxuICBsZXQgYnVmID0gY29uY2F0X3NlcV9idWYgfnNlcDpcIlxcblwiIHNlcSBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBzZXQgcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IFN0cmluZy5sZW5ndGggcyB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuc2V0XCI7XG4gIGluaXQgKFN0cmluZy5sZW5ndGggcykgKGZ1biBqIC0+XG4gICAgICBpZiBpID0gaiB0aGVuXG4gICAgICAgIGNcbiAgICAgIGVsc2VcbiAgICAgICAgcy5bal0pXG5cbmxldCBpdGVyID0gU3RyaW5nLml0ZXJcblxubGV0IGZpbHRlcl9tYXAgZiBzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgbWF0Y2ggZiBjIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIGMnIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYycpXG4gICAgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgZmlsdGVyIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXIgKGZ1biBjIC0+IGlmIGYgYyB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5pcSBlcSBzID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBzID0gMCB0aGVuXG4gICAgc1xuICBlbHNlIChcbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgcy5bMF07XG4gICAgbGV0IF8gPVxuICAgICAgZm9sZFxuICAgICAgICAoZnVuIHByZXZpb3VzX2MgYyAtPlxuICAgICAgICAgIGlmIG5vdCAoZXEgcHJldmlvdXNfYyBjKSB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgYztcbiAgICAgICAgICBjKVxuICAgICAgICBzLlswXSBzXG4gICAgaW5cbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG4gIClcblxubGV0IGZsYXRfbWFwID9zZXAgZiBzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgaXRlcmlcbiAgICAoZnVuIGkgYyAtPlxuICAgICAgKG1hdGNoIHNlcCB3aXRoXG4gICAgICB8IFNvbWUgXyB3aGVuIGkgPSAwIC0+ICgpXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBzZXAgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcCk7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKGYgYykpXG4gICAgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5leGNlcHRpb24gTXlFeGl0XG5cbmxldCBmb3JfYWxsIHAgcyA9XG4gIHRyeVxuICAgIGl0ZXIgKGZ1biBjIC0+IGlmIG5vdCAocCBjKSB0aGVuIHJhaXNlIE15RXhpdCkgcztcbiAgICB0cnVlXG4gIHdpdGggTXlFeGl0IC0+IGZhbHNlXG5cbmxldCBleGlzdHMgcCBzID1cbiAgdHJ5XG4gICAgaXRlciAoZnVuIGMgLT4gaWYgcCBjIHRoZW4gcmFpc2UgTXlFeGl0KSBzO1xuICAgIGZhbHNlXG4gIHdpdGggTXlFeGl0IC0+IHRydWVcblxubGV0IGRyb3Bfd2hpbGUgZiBzID1cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbmd0aCBzICYmIGYgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBpbmNyIGlcbiAgZG9uZTtcbiAgaWYgIWkgPiAwIHRoZW5cbiAgICBzdWIgcyAhaSAobGVuZ3RoIHMgLSAhaSlcbiAgZWxzZVxuICAgIHNcblxubGV0IHJkcm9wX3doaWxlIGYgcyA9XG4gIGxldCBpID0gcmVmIChsZW5ndGggcyAtIDEpIGluXG4gIHdoaWxlICFpID49IDAgJiYgZiAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGRlY3IgaVxuICBkb25lO1xuICBpZiAhaSA8IGxlbmd0aCBzIC0gMSB0aGVuXG4gICAgc3ViIHMgMCAoIWkgKyAxKVxuICBlbHNlXG4gICAgc1xuXG4oKiBub3Rpb24gb2Ygd2hpdGVzcGFjZSBmb3IgdHJpbSAqKVxubGV0IGlzX3NwYWNlXyA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgbHRyaW0gcyA9IGRyb3Bfd2hpbGUgaXNfc3BhY2VfIHNcbmxldCBydHJpbSBzID0gcmRyb3Bfd2hpbGUgaXNfc3BhY2VfIHNcblxubGV0IG1hcDIgZiBzMSBzMiA9XG4gIGlmIGxlbmd0aCBzMSA8PiBsZW5ndGggczIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLm1hcDJcIjtcbiAgaW5pdCAoU3RyaW5nLmxlbmd0aCBzMSkgKGZ1biBpIC0+IGYgczEuW2ldIHMyLltpXSlcblxubGV0IGl0ZXIyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pdGVyMlwiO1xuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzMSAtIDEgZG9cbiAgICBmIHMxLltpXSBzMi5baV1cbiAgZG9uZVxuXG5sZXQgaXRlcmkyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pdGVyaTJcIjtcbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggczEgLSAxIGRvXG4gICAgZiBpIHMxLltpXSBzMi5baV1cbiAgZG9uZVxuXG5sZXQgZm9sZDIgZiBhY2MgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5mb2xkMlwiO1xuICBsZXQgcmVjIGZvbGQnIGFjYyBzMSBzMiBpID1cbiAgICBpZiBpID0gU3RyaW5nLmxlbmd0aCBzMSB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkJyAoZiBhY2MgczEuW2ldIHMyLltpXSkgczEgczIgKGkgKyAxKVxuICBpblxuICBmb2xkJyBhY2MgczEgczIgMFxuXG5sZXQgZm9yX2FsbDIgcCBzMSBzMiA9XG4gIHRyeVxuICAgIGl0ZXIyIChmdW4gYzEgYzIgLT4gaWYgbm90IChwIGMxIGMyKSB0aGVuIHJhaXNlIE15RXhpdCkgczEgczI7XG4gICAgdHJ1ZVxuICB3aXRoIE15RXhpdCAtPiBmYWxzZVxuXG5sZXQgZXhpc3RzMiBwIHMxIHMyID1cbiAgdHJ5XG4gICAgaXRlcjIgKGZ1biBjMSBjMiAtPiBpZiBwIGMxIGMyIHRoZW4gcmFpc2UgTXlFeGl0KSBzMSBzMjtcbiAgICBmYWxzZVxuICB3aXRoIE15RXhpdCAtPiB0cnVlXG5cbigqKiB7MiBBc2NpaSBmdW5jdGlvbnN9ICopXG5cbmxldCBlcXVhbF9jYXNlbGVzcyBzMSBzMiA6IGJvb2wgPVxuICBTdHJpbmcubGVuZ3RoIHMxID0gU3RyaW5nLmxlbmd0aCBzMlxuICAmJiBmb3JfYWxsMlxuICAgICAgIChmdW4gYzEgYzIgLT5cbiAgICAgICAgIENDQ2hhci5lcXVhbCAoQ0NDaGFyLmxvd2VyY2FzZV9hc2NpaSBjMSkgKENDQ2hhci5sb3dlcmNhc2VfYXNjaWkgYzIpKVxuICAgICAgIHMxIHMyXG5cbmxldCB0b19oZXggKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IGlfdG9faGV4IChpIDogaW50KSA9XG4gICAgaWYgaSA8IDEwIHRoZW5cbiAgICAgIENoYXIuY2hyIChpICsgQ2hhci5jb2RlICcwJylcbiAgICBlbHNlXG4gICAgICBDaGFyLmNociAoaSAtIDEwICsgQ2hhci5jb2RlICdhJylcbiAgaW5cblxuICBsZXQgcmVzID0gQnl0ZXMuY3JlYXRlICgyICogbGVuZ3RoIHMpIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBsZXQgbiA9IENoYXIuY29kZSAoZ2V0IHMgaSkgaW5cbiAgICBCeXRlcy5zZXQgcmVzICgyICogaSkgKGlfdG9faGV4ICgobiBsYW5kIDB4ZjApIGxzciA0KSk7XG4gICAgQnl0ZXMuc2V0IHJlcyAoKDIgKiBpKSArIDEpIChpX3RvX2hleCAobiBsYW5kIDB4MGYpKVxuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG5sZXQgb2ZfaGV4X2V4biAocyA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBsZXQgbl9vZl9jID0gZnVuY3Rpb25cbiAgICB8ICcwJyAuLiAnOScgYXMgYyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdhJyAuLiAnZicgYXMgYyAtPiAxMCArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdhJ1xuICAgIHwgJ0EnIC4uICdGJyBhcyBjIC0+IDEwICsgQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ0EnXG4gICAgfCBfIC0+IGludmFsaWRfYXJnIFwic3RyaW5nOiBpbnZhbGlkIGhleFwiXG4gIGluXG4gIGlmIFN0cmluZy5sZW5ndGggcyBtb2QgMiA8PiAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcInN0cmluZzogaGV4IHNlcXVlbmNlIG11c3QgYmUgb2YgZXZlbiBsZW5ndGhcIjtcbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKFN0cmluZy5sZW5ndGggcyAvIDIpICdcXHgwMCcgaW5cbiAgZm9yIGkgPSAwIHRvIChTdHJpbmcubGVuZ3RoIHMgLyAyKSAtIDEgZG9cbiAgICBsZXQgbjEgPSBuX29mX2MgKFN0cmluZy5nZXQgcyAoMiAqIGkpKSBpblxuICAgIGxldCBuMiA9IG5fb2ZfYyAoU3RyaW5nLmdldCBzICgoMiAqIGkpICsgMSkpIGluXG4gICAgbGV0IG4gPSAobjEgbHNsIDQpIGxvciBuMiBpblxuICAgIEJ5dGVzLnNldCByZXMgaSAoQ2hhci5jaHIgbilcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxubGV0IG9mX2hleCBzID0gdHJ5IFNvbWUgKG9mX2hleF9leG4gcykgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxuXG5sZXQgcHBfYnVmIGJ1ZiBzID1cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInO1xuICBCdWZmZXIuYWRkX3N0cmluZyBidWYgcztcbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInXG5cbmxldCBwcCBmbXQgcyA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIlxcXCIlc1xcXCJcIiBzXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA9ICkgPSBlcXVhbFxuICBsZXQgKCA8PiApIGEgYiA9IG5vdCAoZXF1YWwgYSBiKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA+PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+PSApXG4gIGxldCAoIDwgKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPCApXG4gIGxldCAoIDw9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw9IClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCJvcGVuIExleGluZ1xuXG5leGNlcHRpb24gTGV4X2Vycm9yIG9mIHN0cmluZ1xuXG5sZXQgbGV4X2Vycm9yIGVyciA9IHJhaXNlIChMZXhfZXJyb3IgZXJyKVxuXG5sZXQgZXJyb3JfcG9zIGxleGJ1ZiA9IFxuICBsZXQgc3RhcnQgPSBsZXhidWYubGV4X3N0YXJ0X3AgaW5cbiAgbGV0IGNudW0gPSBsZXhidWYubGV4X2xhc3RfcG9zIC0gc3RhcnQucG9zX2JvbCBpblxuICBsZXQgZW51bSA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBzdGFydC5wb3NfYm9sIGluXG4gIChzdGFydC5wb3NfbG51bSwgY251bSwgZW51bSlcblxubGV0IGVycm9yX3Bvc19tc2cgKGxleGJ1ZiA6IExleGluZy5sZXhidWYpID1cbiAgbGV0IChsaW5lLCBjbnVtLCBlbnVtKSA9IGVycm9yX3BvcyBsZXhidWYgaW5cbiAgICBQcmludGYuc3ByaW50ZiBcImxpbmUgJWQgY2hhcnMgJWQtJWRcIiBsaW5lIGNudW0gZW51bVxuXG5sZXQgc3RyaW5nMm51bSBzID1cbiAgdHJ5IChUb2tlbnMuSU5UIChpbnRfb2Zfc3RyaW5nIHMpKSB3aXRoXG4gIHwgRmFpbHVyZSBfIC0+IFRva2Vucy5MQVJHRUlOVCBzXG5cbmxldCB1cGRhdGVfcG9zIGxleGJ1ZiA9XG4gIGxldCBwb3MgPSBsZXhidWYubGV4X3N0YXJ0X3AgaW5cbiAgbGV4YnVmLmxleF9zdGFydF9wIDwtXG4gICAgeyBwb3Mgd2l0aCBwb3NfYm9sID0gbGV4YnVmLmxleF9zdGFydF9wb3M7XG4gICAgICAgICAgICAgICBwb3NfbG51bSA9IHBvcy5wb3NfbG51bSArIDFcbiAgICB9XG5cbmxldCBpbnRfb2ZfaGV4Y2hhciBjID1cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJzAnLi4nOScgLT4gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJ1xuICB8ICdhJy4uJ2YnIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnYScgKyAxMFxuICB8ICdBJy4uJ0YnIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnQScgKyAxMFxuICB8IGMgLT4gbGV4X2Vycm9yIChcImludmFsaWQgaGV4IGNoYXIgaW4gdW5pY29kZSBlc2NhcGU6ICdcIiBeIChTdHJpbmcubWFrZSAxIGMpIF4gXCInXCIpXG5cblxubGV0IHV0Zjhfb2ZfY29kZSBidWYgaWR4IHUgPVxuICBsZXQgaSA9IHJlZiBpZHggaW5cblxuICBsZXQgYWRkX2NoYXIgYiBjID0gQnl0ZXMudW5zYWZlX3NldCBiICFpIGM7IGkgOj0gIWkgKyAxIGluXG5cbiAgbGV0IG1heF91c2VkX2JpdHMgbiB1ID0gKHUgbHNyIG4pID0gMCBpblxuXG4gIGlmIG1heF91c2VkX2JpdHMgNyB1IHRoZW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyIHUpXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAxMSB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMDAwMDAwIGxvciAoKHUgbHNyIDYpIGxhbmQgMGIwMDAxMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAodSAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKVxuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDE2IHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDAwMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpXG4gIGVuZFxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMjEgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTExMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMDAwMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDI2IHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTEwMDAgbG9yICgodSBsc3IgMjQpIGxhbmQgMGIwMDAwMDAxMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDE4KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxMikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgIDYpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAodSAgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSk7XG4gIGVuZFxuICBlbHNlIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTExMTEwMCBsb3IgKCh1IGxzciAzMCkgbGFuZCAwYjAwMDAwMDAxKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMjQpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDE4KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxMikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgIDYpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAodSAgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSk7XG4gIGVuZDtcbiAgIWlcblxubGV0IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgYnVmIGlkeCBoaWdoIGxvdyA9XG4gIGxldCBoaWdoID0gaGlnaCAtIDB4RDgwMCBpblxuICBsZXQgbG93ID0gbG93IC0gMHhEQzAwIGluXG4gIGxldCBjb2RlID0gMHgxMDAwMCArICgoaGlnaCBsc2wgMTApIGxvciBsb3cpIGluXG4gICAgdXRmOF9vZl9jb2RlIGJ1ZiBpZHggY29kZVxuXG5sZXQgZXNjYXBpbmdfZXJyb3IgbXNnIHMgYyBvZmYgPVxuICBsZXQgb2ZmcyA9IHN0cmluZ19vZl9pbnQgb2ZmIGluXG4gIGxldCBjcyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCBTb21lIGMgLT4gXCIgJ1wiIF4gKFN0cmluZy5tYWtlIDEgYykgXiBcIicgXCJcbiAgICB8IE5vbmUgLT4gXCJcIlxuICBpblxuICAgIGxleF9lcnJvciAobXNnIF4gXCIgYXQgb2Zmc2V0IFwiIF4gb2ZmcyBeIGNzIF4gXCI6IFwiIF4gcylcblxubGV0IHVuZXNjYXBlX3N0cmluZyBzID1cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHMnID0gQnl0ZXMuY3JlYXRlIGwgaW5cbiAgbGV0IGogPSByZWYgMCBpblxuICBsZXQgdTEgPSByZWYgMCBpblxuICBsZXQgdTIgPSByZWYgMCBpblxuICBsZXQgc3RhdGUgPSByZWYgYENoYXIgaW5cblxuICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICBtYXRjaCAhc3RhdGUgd2l0aFxuICAgIHwgYENoYXIgLT4gYmVnaW5cbiAgICAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICAgIHwgJ1xcXFwnIC0+IHN0YXRlIDo9IGBFc2NhcGVcbiAgICAgICAgIHwgYyAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqIGM7IGogOj0gIWogKyAxXG4gICAgICAgZW5kO1xuICAgIHwgYEVzY2FwZSAtPiBiZWdpblxuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgIHwgJ1wiJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXCInOyAgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdcXFxcJyAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXFxcJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICcvJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnLyc7ICAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ2InICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXGInOyAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ2YnICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXDAxMic7IHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ24nICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXG4nOyAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ3InICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXHInOyAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ3QnICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXHQnOyAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ3UnICAtPiBzdGF0ZSA6PSBgVTFfaDFcbiAgICAgICB8IF8gICAgLT4gZXNjYXBpbmdfZXJyb3IgXCJpbnZhbGlkIGVzY2FwZSBpbiBzdHJpbmdcIiBzIChTb21lIHMuW2ldKSBpXG4gICAgICBlbmQ7XG4gICAgfCBgVTFfaDEgLT4gdTEgOj0gaW50X29mX2hleGNoYXIgcy5baV07ICBzdGF0ZSA6PSBgVTFfaDJcbiAgICB8IGBVMV9oMiAtPiB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMV9oM1xuICAgIHwgYFUxX2gzIC0+IHUxIDo9ICghdTEgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUxX2g0XG4gICAgfCBgVTFfaDQgLT5cbiAgICAgIHUxIDo9ICghdTEgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pO1xuICAgICAgaWYgIXUxID49IDB4RDgwMCAmJiAhdTEgPD0gMHhEQkZGIHRoZW5cbiAgICAgICAgc3RhdGUgOj0gYFUyX2JzXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGogOj0gdXRmOF9vZl9jb2RlIHMnICFqICF1MTtcbiAgICAgICAgc3RhdGUgOj0gYENoYXJcbiAgICAgIGVuZFxuICAgIHwgYFUyX2JzIC0+XG4gICAgICBpZiBzLltpXSA8PiAnXFxcXCcgdGhlblxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImV4cGVjdGVkIGxvdyBzdXJyb2dhdGUgZXNjYXBlIGNoYXIgKFxcXFwpXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZWxzZVxuICAgICAgICBzdGF0ZSA6PSBgVTJfdVxuICAgIHwgYFUyX3UgLT5cbiAgICAgIGlmIHMuW2ldIDw+ICd1JyB0aGVuXG4gICAgICAgIGVzY2FwaW5nX2Vycm9yIFwiZXhwZWN0ZWQgbG93IHN1cnJvZ2F0ZSBlc2NhcGUgc2VxdWVuY2UgKHUpXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZWxzZVxuICAgICAgICBzdGF0ZSA6PSBgVTJfaDFcbiAgICB8IGBVMl9oMSAtPiB1MiA6PSBpbnRfb2ZfaGV4Y2hhciBzLltpXTsgIHN0YXRlIDo9IGBVMl9oMlxuICAgIHwgYFUyX2gyIC0+IHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUyX2gzXG4gICAgfCBgVTJfaDMgLT4gdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTJfaDRcbiAgICB8IGBVMl9oNCAtPlxuICAgICAgc3RhdGUgOj0gYENoYXI7XG4gICAgICB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTtcbiAgICAgIGlmICF1MiA+PSAweERDMDAgJiYgIXUyIDw9IDB4REZGRiB0aGVuXG4gICAgICAgIGogOj0gdXRmOF9vZl9zdXJyb2dhdGVfcGFpciBzJyAhaiAhdTEgIXUyIFxuICAgICAgZWxzZVxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImludmFsaWQgbG93IHN1cnJvZ2F0ZSBmb3IgY29kZSBwb2ludCBiZXlvbmQgVStGRkZGJ1wiIHMgTm9uZSBpXG4gIGRvbmU7XG4gIGJlZ2luXG4gICAgbWF0Y2ggIXN0YXRlIHdpdGhcbiAgICB8IGBDaGFyIC0+ICgpXG4gICAgfCBfIC0+IGVzY2FwaW5nX2Vycm9yIFwiZW5kIG9mIHN0cmluZyBpbiBlc2NhcGUgc2VxdWVuY2VcIiBzIE5vbmUgbFxuICBlbmQ7XG4gIGlmICFqIDw+IGwgdGhlbiBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIChCeXRlcy5zdWIgcycgMCAhaikgZWxzZSBzXG5cbiIsIigqIGNvbnRhaW5zIHRoZSBsaW5lIGFuZCBjaGFyYWN0ZXIgc3BhbiBvZiB3aGVyZSB0aGUgZXJyb3Igb2NjdXJlZCAqKVxuXG50eXBlIHQgPSB7XG4gIGxpbmUgOiBpbnRcbjsgc3RhcnRfY2hhciA6IGludFxuOyBlbmRfY2hhciA6IGludFxuOyBtc2cgOiBzdHJpbmdcbn1cblxuZXhjZXB0aW9uIEpzb25fZXJyb3JfaW5mbyBvZiB0XG5cbmxldCBjcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIGVtc2cgPVxuICBsZXQgKGVsaW5lLCBzY2hhciwgZWNoYXIpID0gTGV4eGVyX3V0aWxzLmVycm9yX3BvcyBsZXhidWYgaW5cbiAgeyBsaW5lID0gZWxpbmU7IHN0YXJ0X2NoYXIgPSBzY2hhcjsgZW5kX2NoYXIgPSBlY2hhcjsgbXNnID0gZW1zZyB9XG5cbmxldCB0b19zdHJpbmcgaW5mbyA9XG4gIGxldCBsb2MgPSBQcmludGYuc3ByaW50ZiBcImxpbmUgJWQgY2hhcnMgJWQtJWRcIiBpbmZvLmxpbmUgaW5mby5zdGFydF9jaGFyIGluZm8uZW5kX2NoYXIgaW5cbiAgaW5mby5tc2cgXiBcIiBhdCBcIiBeIGxvY1xuIiwiZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0IDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuXG4oKiBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYW4gaW50ZWdlciwgaGFuZGxlcyAzMGJpdCwgNjJiaXQgYW5kIEpzb28gdXNpbmcgMzJiaXQgaW50cyAqKVxubGV0IG1heF9qc29uX2ludCA9XG4gIGxldCByZWMgbG9nMiBuID0gaWYgbiA8PSAxIHRoZW4gMCBlbHNlIDEgKyBsb2cyKG4gYXNyIDEpIGluXG4gIGxldCBiaXRzIG4gPSBsb2cyIG4gKyAxIGluXG4gIGlmIGJpdHMgbWF4X2ludCA+IDUzIHRoZW4gKDEgbHNsIDUzKSAtIDEgZWxzZSBtYXhfaW50XG5cbmxldCBtYXhfanNvbl9pbnRfYXNfZmxvYXQgPSBmbG9hdF9vZl9pbnQgbWF4X2pzb25faW50XG5cbmxldCBzdHJpbmdfb2ZfZmxvYXRfanNvbiBmID1cbiAgbGV0IGlzX2ludCA9IChmbG9hdF9vZl9pbnQgKGludF9vZl9mbG9hdCBmKSkgPSBmIGluXG4gIGlmIGlzX2ludCAmJiBhYnNfZmxvYXQgZiA8PSBtYXhfanNvbl9pbnRfYXNfZmxvYXQgdGhlbiBiZWdpbiAoKiBJRUVFIG1heCBpbnQgaW4gYSBmbG9hdCB3aGVuIGluIDY0Yml0IGludCBtb2RlKilcbiAgICBsZXQgaW50X3ZhbHVlID0gaW50X29mX2Zsb2F0IGYgaW4gKHN0cmluZ19vZl9pbnQgaW50X3ZhbHVlKSBeIFwiLjBcIlxuICBlbmRcbiAgZWxzZSBiZWdpblxuICAgICgqICUuMTdnIG9mdGVuIGNyZWF0ZXMgb3Zlcmx5IGxvbmcgb3V0cHV0LCBhdHRlbXB0IHRvIGNvbnZlcnQgYXQgbG93ZXIgcHJlY2Vzc2lvbiBmaXJzdCAqKVxuICAgIGxldCBzID0gZm9ybWF0X2Zsb2F0IFwiJS4xNmdcIiBmIGluXG4gICAgbGV0IHMgPSBpZiBmbG9hdF9vZl9zdHJpbmcgcyA9IGYgdGhlbiBzIGVsc2UgZm9ybWF0X2Zsb2F0IFwiJS4xN2dcIiBmIGluXG4gICAgaWYgbm90IChTdHJpbmcuY29udGFpbnMgcyAnLicgfHwgU3RyaW5nLmNvbnRhaW5zIHMgJ2UnKSB0aGVuIHMgXiBcIi4wXCJcbiAgICBlbHNlIHNcbiAgZW5kXG4iLCJcbmxldCB0b2tlbl9lcnJvciB0b2sgPVxuICBsZXQgb3BlbiBUb2tlbnMgaW5cbiAgbGV0IGVyciA9IG1hdGNoIHRvayB3aXRoXG4gICAgfCBTVFJJTkcgcyAtPiBcInVuZXhwZWN0ZWQgc3RyaW5nICdcIiBeIHMgXiBcIidcIlxuICAgIHwgT1MgLT4gXCJ1bmV4cGVjdGVkICd7J1wiXG4gICAgfCBPRSAtPiBcInVuZXhwZWN0ZWQgJ30nXCJcbiAgICB8IE5VTEwgLT4gXCJ1bmV4cGVjdGVkIG51bGwgdmFsdWVcIlxuICAgIHwgTkVHSU5GSU5JVFkgLT4gXCJ1bmV4cGVjdGVkIG5lZ2F0aXZlIGluZmluaXR5XCJcbiAgICB8IE5BTiAtPiBcInVuZXhwZWN0ZWQgTm90LWEtTnVtYmVyXCJcbiAgICB8IExFWF9FUlJPUiBzIC0+IHNcbiAgICB8IExBUkdFSU5UIHMgLT4gXCJ1bmV4cGVjdGVkIGxhcmdlIGludGVnZXIgJ1wiIF4gcyBeIFwiJ1wiXG4gICAgfCBJTlQgaSAtPiBcInVuZXhwZWN0ZWQgaW50ZWdlciAnXCIgXiAoc3RyaW5nX29mX2ludCBpKSBeIFwiJ1wiXG4gICAgfCBJTkZJTklUWSAtPiBcInVuZXhwZWN0ZWQgaW5maW5pdHlcIlxuICAgIHwgRkxPQVQgZiAtPiBcInVuZXhwZWN0ZWQgZmxvYXQgJ1wiIF4gKHN0cmluZ19vZl9mbG9hdCBmKSBeIFwiJ1wiXG4gICAgfCBFT0YgLT4gXCJ1bmV4cGVjdGVkIGVuZC1vZi1pbnB1dFwiXG4gICAgfCBDT01QTElBTkNFX0VSUk9SIHMgLT4gXCJjb21wbGlhbmNlIGVycm9yICdcIiBeIHMgXiBcIidcIlxuICAgIHwgQ09NTUEgLT4gXCJ1bmV4cGVjdGVkICcsJ1wiXG4gICAgfCBDT0xPTiAtPiBcInVuZXhwZWN0ZWQgJzonXCJcbiAgICB8IEJPT0wgYiAtPiBcInVuZXhwZWN0ZWQgYm9vbGVhbiAnXCIgXiAoaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiKSBeIFwiJ1wiXG4gICAgfCBBUyAtPiBcInVuZXhwZWN0ZWQgJ1snXCJcbiAgICB8IEFFIC0+IFwidW5leHBlY3RlZCAnXSdcIlxuICAgIHwgVFMgLT4gXCJ1bmV4cGVjdGVkICcoJ1wiXG4gICAgfCBURSAtPiBcInVuZXhwZWN0ZWQgJyknXCJcbiAgICB8IFZTIC0+IFwidW5leHBlY3RlZCAnPCdcIlxuICAgIHwgVkUgLT4gXCJ1bmV4cGVjdGVkICc+J1wiXG4gIGluXG4gICAgYFN5bnRheF9lcnJvciBlcnJcbiIsIm1vZHVsZSB0eXBlIFBhcnNlciA9IHNpZ1xuICBtb2R1bGUgQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuU1xuXG4gIHZhbCBkZWNvZGVcbiAgICA6ICByZWFkZXIgOiAodW5pdCAtPiBUb2tlbnMudG9rZW4pXG4gICAgLT4gKENvbXBsaWFuY2UuanNvbiBvcHRpb24sIHN0cmluZykgcmVzdWx0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogUGFyc2VyXG4gIHdpdGggbW9kdWxlIENvbXBsaWFuY2UgPSBDb21wbGlhbmNlXG49IHN0cnVjdFxuXG4gIG1vZHVsZSBDb21wbGlhbmNlID0gQ29tcGxpYW5jZVxuXG4gIGV4Y2VwdGlvbiBQYXJzZV9lcnJvciBvZiBbYEVvZiB8IGBTeW50YXhfZXJyb3Igb2Ygc3RyaW5nXVxuXG4gIGxldCBqc29uX3ZhbHVlIH5yZWFkZXIgPSBcbiAgICBsZXQgb3BlbiBUb2tlbnMgaW5cbiAgICBsZXQgb3BlbiBQYXJzZXJfdG9vbHMgaW5cbiAgICBsZXQgcmVjIHRva2VuX3ZhbHVlIHRvayA9IGJlZ2luXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBJTlQgaSAtPiBDb21wbGlhbmNlLmludGVnZXIgaVxuICAgICAgfCBTVFJJTkcgcyAtPiBDb21wbGlhbmNlLnN0cmluZyBzXG4gICAgICB8IEJPT0wgYiAtPiBDb21wbGlhbmNlLmJvb2wgYlxuICAgICAgfCBGTE9BVCBmIC0+IENvbXBsaWFuY2UubnVtYmVyIChgRmxvYXQgZilcbiAgICAgIHwgSU5GSU5JVFkgLT4gQ29tcGxpYW5jZS5udW1iZXIgYEluZmluaXR5XG4gICAgICB8IE5FR0lORklOSVRZIC0+IENvbXBsaWFuY2UubnVtYmVyIGBOZWdpbmZpbml0eVxuICAgICAgfCBOQU4gLT4gQ29tcGxpYW5jZS5udW1iZXIgYE5hblxuICAgICAgfCBOVUxMIC0+IENvbXBsaWFuY2UubnVsbFxuICAgICAgfCBMQVJHRUlOVCBzIC0+IENvbXBsaWFuY2UubGFyZ2VpbnQgc1xuICAgICAgfCBFT0YgLT4gcmFpc2UgKFBhcnNlX2Vycm9yIGBFb2YpXG4gICAgICB8IENPTU1BIHwgQ09MT04gfCBBRSB8IE9FIHwgVEUgfCBWRSB8IExFWF9FUlJPUiBfIHwgQ09NUExJQU5DRV9FUlJPUiBfIC0+XG4gICAgICAgIHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgIHwgQVMgLT4gYXJyYXlfdmFsdWVfc3RhcnQgKClcbiAgICAgIHwgT1MgLT4gb2JqZWN0X3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IFRTIC0+IHR1cGxlX3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IFZTIC0+IHZhcmlhbnRfdmFsdWVfc3RhcnQgKClcbiAgICBlbmRcbiAgICBhbmQgdmFsdWUgKCkgPSB0b2tlbl92YWx1ZSAocmVhZGVyICgpKVxuICAgIGFuZCBhcnJheV92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdG9rID0gcmVhZGVyICgpIGluXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBBRSAtPiBDb21wbGlhbmNlLmxpc3QgW11cbiAgICAgIHwgXyAtPiBhcnJheV92YWx1ZXNfc3RhcnQgdG9rIFtdXG4gICAgZW5kXG4gICAgYW5kIGFycmF5X3ZhbHVlc19zdGFydCB0b2sgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdG9rZW5fdmFsdWUgdG9rIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBBRSAtPiBDb21wbGlhbmNlLmxpc3QgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiBhcnJheV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgYXJyYXlfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHZhbHVlICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBBRSAtPiBDb21wbGlhbmNlLmxpc3QgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiBhcnJheV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlX3N0YXJ0ICgpID0gYmVnaW5cbiAgICAgIGxldCB0b2sgPSByZWFkZXIgKCkgaW5cbiAgICAgIG1hdGNoIHRvayB3aXRoXG4gICAgICB8IE9FIC0+IENvbXBsaWFuY2UuYXNzb2MgW11cbiAgICAgIHwgXyAtPiBvYmplY3RfdmFsdWVzX3N0YXJ0IHRvayBbXVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVzX3N0YXJ0IHRvayBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSBjb2xvbl92YWx1ZSB0b2sgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IE9FIC0+IENvbXBsaWFuY2UuYXNzb2MgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiBvYmplY3RfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0ga2V5X2NvbG9uX3ZhbHVlICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gb2JqZWN0X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBjb2xvbl92YWx1ZSB2ICgpID0gYmVnaW5cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IENPTE9OIC0+IChrLCB2YWx1ZSAoKSlcbiAgICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgICAgICBlbmRcbiAgICAgIHwgdG9rIC0+ICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGtleV9jb2xvbl92YWx1ZSAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IENPTE9OIC0+IChrLCB2YWx1ZSAoKSlcbiAgICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgICAgICBlbmRcbiAgICAgIHwgdG9rIC0+ICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIHR1cGxlX3ZhbHVlX3N0YXJ0ICgpID0gYmVnaW5cbiAgICAgIGxldCB2MSA9IHZhbHVlICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBDT01NQSAtPiBiZWdpblxuICAgICAgICBsZXQgdjIgPSB2YWx1ZSAoKSBpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IFRFIC0+IENvbXBsaWFuY2UudHVwbGUgW3YxOyB2Ml1cbiAgICAgICAgfCBDT01NQSAtPiB0dXBsZV92YWx1ZXMgW3YyOyB2MV1cbiAgICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgICAgICBlbmRcbiAgICAgIHwgVEUgLT4gcmFpc2UgKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIFwidHVwbGUgbXVzdCBoYXZlIGF0IGxlYXN0IDIgZWxlbWVudHNcIikpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIHR1cGxlX3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgVEUgLT4gQ29tcGxpYW5jZS50dXBsZSAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IHR1cGxlX3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB2YXJpYW50X3ZhbHVlX3N0YXJ0ICgpID0gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFNUUklORyBrIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICAgIHwgVkUgLT4gQ29tcGxpYW5jZS52YXJpYW50IGsgTm9uZVxuICAgICAgICB8IENPTE9OIC0+IHZhcmlhbnRfZW5kIGsgKFNvbWUgKHZhbHVlICgpKSlcbiAgICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgICAgICBlbmRcbiAgICAgIHwgVkUgLT4gcmFpc2UgKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIFwidmFyaWFudCBtdXN0IGhhdmUgYXQgbGVhc3QgYSBzdHJpbmdcIikpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIHZhcmlhbnRfZW5kIGsgdiA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBWRSAtPiBDb21wbGlhbmNlLnZhcmlhbnQgayB2XG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgaW5cbiAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgIHwgZXhjZXB0aW9uIChQYXJzZV9lcnJvciBgRW9mKSAtPiBOb25lXG4gICAgfCBleGNlcHRpb24gZXhuXyAtPiByYWlzZSBleG5fXG4gICAgfCBFT0YgLT4gTm9uZVxuICAgIHwgdG9rIC0+IFNvbWUgKHRva2VuX3ZhbHVlIHRvaylcblxuICBsZXQgZGVjb2RlIH5yZWFkZXIgPSBcbiAgICBtYXRjaCBqc29uX3ZhbHVlIH5yZWFkZXIgd2l0aFxuICAgIHwgZXhjZXB0aW9uIChQYXJzZV9lcnJvciBgRW9mKSAtPiBFcnJvciBcIlVuZXhwZWN0ZWQgZW5kLW9mLWlucHV0XCJcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgKGBTeW50YXhfZXJyb3IgZXJyKSkgLT4gRXJyb3IgZXJyXG4gICAgfCBleGNlcHRpb24gKExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyKSAtPiBFcnJvciBlcnJcbiAgICB8IHJlcyAtPiBPayByZXNcblxuZW5kXG4iLCJsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbmxldCBhZGRfaGV4X2J5dGUgfmFkZF9jaGFyIGkgPVxuICBhZGRfY2hhciAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICBhZGRfY2hhciAobmliYmxlX3RvX2hleCAoaSBsYW5kIDB4MGYpKVxuXG5sZXQgZXNjYXBlIH5hZGRfY2hhciB+YWRkX3N0cmluZyBzID1cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgIHwgJ1xcXFwnICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFxcXCJcbiAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICB8ICdcXG4nICAgLT4gYWRkX3N0cmluZyBcIlxcXFxuXCJcbiAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICB8ICdcXHgwMCcuLidcXHgxRidcbiAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSB+YWRkX2NoYXIgKGludF9vZl9jaGFyIGMpXG4gICAgfCBfICAgICAgLT4gYWRkX2NoYXIgcy5baV1cbiAgZG9uZVxuIFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwgcHJldHR5X3ByaW50IDogRm9ybWF0LmZvcm1hdHRlciAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHByZXR0eV9wcmludF90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgcHJldHR5X3ByaW50X3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbmVuZFxuXG5tb2R1bGUgTWFrZShDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBsZXQgdG9fanNvbl9zdHJpbmcgcyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0IGFkZF9jaGFyID0gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IFV0aWxzLmVzY2FwZSB+YWRkX2NoYXIgfmFkZF9zdHJpbmcgczsgYWRkX2NoYXIgJ1wiJyBpblxuICAgIGFkZF9xdW90ZV9zdHJpbmcgcztcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IHBwX2xpc3Qgc2VwIHBweCBvdXQgbCA9XG4gICAgbGV0IHBwX3NlcCBvdXQgKCkgPSBGb3JtYXQuZnByaW50ZiBvdXQgXCIlc0AgXCIgc2VwIGluXG4gICAgRm9ybWF0LnBwX3ByaW50X2xpc3QgfnBwX3NlcCBwcHggb3V0IGxcblxuICBsZXQgcmVjIGZvcm1hdCAob3V0OkZvcm1hdC5mb3JtYXR0ZXIpIGpzb24gOiB1bml0ID1cbiAgICBtYXRjaCBqc29uIHdpdGhcbiAgICAgIHwgYE51bGwgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJudWxsXCJcbiAgICAgIHwgYEJvb2wgYiAtPiBGb3JtYXQucHBfcHJpbnRfYm9vbCBvdXQgYlxuICAgICAgfCBgSW50IGkgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHN0cmluZ19vZl9pbnQgaSlcbiAgICAgIHwgYEZsb2F0IGYgLT5cbiAgICAgICAgbGV0IHMgPSBDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZiBpblxuICAgICAgICBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBzXG4gICAgICB8IGBTdHJpbmcgcyAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAodG9fanNvbl9zdHJpbmcgcylcbiAgICAgIHwgYEludGxpdCBzXG4gICAgICB8IGBGbG9hdGxpdCBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBzXG4gICAgICB8IGBMaXN0IFtdIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiW11cIlxuICAgICAgfCBgTGlzdCBsIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIltAOzwxIDA+QFs8aG92PiVhQF1AOzwxIC0yPl1cIiAocHBfbGlzdCBcIixcIiBmb3JtYXQpIGxcbiAgICAgIHwgYEFzc29jIFtdIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwie31cIlxuICAgICAgfCBgQXNzb2MgbCAtPlxuICAgICAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJ7QDs8MSAwPiVhQDs8MSAtMj59XCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0X2ZpZWxkKSBsXG4gICAgICB8IGBUdXBsZSBsIC0+XG4gICAgICAgIGlmIGwgPSBbXSB0aGVuIEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiKClcIlxuICAgICAgICBlbHNlIEZvcm1hdC5mcHJpbnRmIG91dCBcIihALCVhQDs8MCAtMj4pXCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0KSBsXG4gICAgICB8IGBWYXJpYW50IChzLCBOb25lKSAtPlxuICAgICAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCI8JXM+XCIgKHRvX2pzb25fc3RyaW5nIHMpXG4gICAgICB8IGBWYXJpYW50IChzLCBTb21lIGpzb24pIC0+XG4gICAgICAgIGxldCBzID0gdG9fanNvbl9zdHJpbmcgcyBpblxuICAgICAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCI8QFs8aHYyPiVzOiAlYUBdPlwiIHMgZm9ybWF0IGpzb25cblxuICBhbmQgZm9ybWF0X2ZpZWxkIG91dCAobmFtZSwganNvbikgPVxuICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbPGh2Mj4lczogJWFAXVwiICh0b19qc29uX3N0cmluZyBuYW1lKSBmb3JtYXQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnQgb3V0IGpzb24gPVxuICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbPGh2Mj4lYUBdXCIgZm9ybWF0IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50X3RvX3N0cmluZyBqc29uID1cbiAgICBGb3JtYXQuYXNwcmludGYgXCIlYVwiIHByZXR0eV9wcmludCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludF90b19jaGFubmVsIG9jIGpzb24gPVxuICAgIGxldCBmbXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX291dF9jaGFubmVsIG9jIGluXG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiJWFAP1wiIHByZXR0eV9wcmludCBqc29uXG5cbmVuZFxuIiwibGV0IGVycm9yIG1zZyBfanNvbiA9IHJhaXNlIChGYWlsdXJlIG1zZylcblxubW9kdWxlIEludGVybmFsID0gc3RydWN0XG4gIG1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgICB0eXBlIGpzb25cbiAgICB2YWwgbnVsbCA6IHVuaXQgLT4ganNvblxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9zdHJpY3RfaW50ZiA9IHNpZ1xuICAgIHR5cGUganNvblxuXG4gICAgdmFsIG1lbWJlciA6IHN0cmluZyAtPiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSAtPiBqc29uXG4gICAgdmFsIGluZGV4IDogaW50IC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb25cbiAgICB2YWwgbWFwIDogKGpzb24gLT4ganNvbikgLT4gWz4gYExpc3Qgb2YganNvbiBsaXN0IF0gLT4gWz4gYExpc3Qgb2YganNvbiBsaXN0IF1cbiAgICB2YWwgdG9fYXNzb2MgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSAtPiAoc3RyaW5nICoganNvbikgbGlzdFxuICAgIHZhbCB0b19ib29sIDogWz4gYEJvb2wgb2YgYm9vbCBdIC0+IGJvb2xcbiAgICB2YWwgdG9fZmxvYXQgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19zdHJpbmcgOiBbPiBgU3RyaW5nIG9mIHN0cmluZyBdIC0+IHN0cmluZ1xuICAgIHZhbCB0b19zdHJpbmdfb3B0aW9uIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgfCBgTnVsbCBdIC0+IHN0cmluZyBvcHRpb25cbiAgICB2YWwgdG9fb3B0aW9uIDogKChbPiBgTnVsbCBdIGFzICdhKSAtPiBqc29uKSAtPiAnYSAtPiBqc29uIG9wdGlvblxuICAgIHZhbCB0b19saXN0IDogWz4gYExpc3Qgb2YganNvbiBsaXN0IF0gLT4ganNvbiBsaXN0XG4gICAgdmFsIHRvX2Jvb2xfb3B0aW9uIDogWz4gYEJvb2wgb2YgYm9vbCB8IGBOdWxsIF0gLT4gYm9vbCBvcHRpb25cbiAgICB2YWwgdG9fZmxvYXRfb3B0aW9uIDogWz4gYEZsb2F0IG9mIGZsb2F0IHwgYE51bGwgXSAtPiBmbG9hdCBvcHRpb25cbiAgICB2YWwgdG9fbnVtYmVyIDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fbnVtYmVyX29wdGlvbiA6IFs+IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIGNvbnZlcnRfZWFjaCA6IChqc29uIC0+IGpzb24pIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb24gbGlzdFxuICAgIHZhbCByZXZfZmlsdGVyX21hcCA6ICgnYSAtPiAnYSBvcHRpb24pIC0+ICdhIGxpc3QgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9tYXAgOiAoJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgcmV2X2ZsYXR0ZW4gOiAnYSBsaXN0IC0+IFs+IGBMaXN0IG9mICdhIGxpc3QgXSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgZmxhdHRlbiA6IFs+IGBMaXN0IG9mICdhIGxpc3QgXSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgZmlsdGVyX2luZGV4IDogaW50IC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIGxpc3QgLT4ganNvbiBsaXN0XG4gICAgdmFsIGZpbHRlcl9saXN0IDogWz4gYExpc3Qgb2YgJ2EgXSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgZmlsdGVyX2Fzc29jIDogWz4gYEFzc29jIG9mICdhIF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9ib29sIDogWz4gYEJvb2wgb2YgYm9vbCBdIGxpc3QgLT4gYm9vbCBsaXN0XG4gICAgdmFsIGZpbHRlcl9mbG9hdCA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIGxpc3QgLT4gZmxvYXQgbGlzdFxuICAgIHZhbCBmaWx0ZXJfc3RyaW5nICA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIF0gbGlzdCAtPiBzdHJpbmcgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbWVtYmVyIDogc3RyaW5nIC0+IFs+IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdCBdIGxpc3QgLT4ganNvbiBsaXN0XG4gICAgdmFsIGZpbHRlcl9udW1iZXIgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgICB2YWwga2V5cyA6IFs+IGBBc3NvYyBvZiAoc3RyaW5nICogJ2EpIGxpc3QgXSAtPiBzdHJpbmcgbGlzdFxuICAgIHZhbCB2YWx1ZXMgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IF0gLT4gJ2EgbGlzdFxuICAgIHZhbCBjb21iaW5lIDogWz4gYEFzc29jIG9mICdhIGxpc3QgXSAtPiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdIC0+IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF1cbiAgICB2YWwgc29ydCA6IChbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IHwgYExpc3Qgb2YgJ2EgbGlzdCBdIGFzICdhKSAtPiAnYVxuICBlbmRcblxuICBtb2R1bGUgU2hhcmVkID0gc3RydWN0XG4gICAgbGV0IHJlYyByZXZfZmlsdGVyX21hcCBmIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBhY2NcbiAgICAgIHwgaGQ6OnRsIC0+XG4gICAgICAgIG1hdGNoIGYgaGQgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gcmV2X2ZpbHRlcl9tYXAgZiBhY2MgdGxcbiAgICAgICAgfCBTb21lIHYgLT4gcmV2X2ZpbHRlcl9tYXAgZiAodjo6YWNjKSB0bFxuXG4gICAgbGV0IGZpbHRlcl9tYXAgZiBsID0gTGlzdC5yZXYgKHJldl9maWx0ZXJfbWFwIGYgW10gbClcblxuICAgIGxldCByZWMgcmV2X2ZsYXR0ZW4gYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGFjY1xuICAgICAgfCBoZDo6dGwgLT5cbiAgICAgICAgbWF0Y2ggaGQgd2l0aFxuICAgICAgICB8IGBMaXN0IGwyIC0+IHJldl9mbGF0dGVuIChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKSB0bFxuICAgICAgICB8IF8gLT4gcmV2X2ZsYXR0ZW4gYWNjIHRsXG5cbiAgICBsZXQgZmxhdHRlbiBsID0gTGlzdC5yZXYgKHJldl9mbGF0dGVuIFtdIGwpXG5cbiAgZW5kXG5cbiAgbW9kdWxlIFN0cmljdChNIDogUykgOiBJbnRlcm5hbF9zdHJpY3RfaW50ZlxuICAgIHdpdGggdHlwZSBqc29uID0gTS5qc29uXG4gID0gc3RydWN0XG4gICAgdHlwZSBqc29uID0gTS5qc29uXG5cbiAgICBsZXQgYXNzb2MgbmFtZSBvYmogOiBqc29uID0gdHJ5IExpc3QuYXNzb2MgbmFtZSBvYmogd2l0aCBOb3RfZm91bmQgLT4gTS5udWxsICgpXG5cbiAgICBsZXQgbWVtYmVyIG5hbWUgdiA6IGpzb24gPVxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IGBBc3NvYyBvYmogLT4gYXNzb2MgbmFtZSBvYmpcbiAgICAgIHwganNvbiAtPiBlcnJvciAoXCJFeHBlY3RlZCBgQXNzb2MgdG8gZmluZCBuYW1lICdcIiBeIG5hbWUgXiBcIicgaW5cIikganNvblxuXG4gICAgbGV0IGluZGV4IGkgdiA6IGpzb24gPVxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgICAgICAgIGxldCBpJyA9IGlmIGkgPCAwIHRoZW4gbGVuICsgaSBlbHNlIGkgaW5cbiAgICAgICAgICBpZiBpJyA8IDAgfHwgaScgPj0gbGVuIHRoZW4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgKHN0cmluZ19vZl9pbnQgaSBeIFwiIG91dCBvZiBib3VuZHNcIikpXG4gICAgICAgICAgZWxzZSBMaXN0Lm50aCBsIGknXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJDYW4ndCBpbmRleCBub25lIGBMaXN0IHR5cGUgXCIganNvblxuXG4gICAgbGV0IG1hcCBmIHYgPVxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIGYgbClcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkNhbid0IG1hcCBvdmVyIG5vbmUgYExpc3QgdHlwZSBcIiBqc29uXG5cbiAgICBsZXQgdG9fYXNzb2MgPSBmdW5jdGlvbiB8IGBBc3NvYyBvYmogLT4gb2JqIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBBc3NvY1wiIGpzb25cbiAgICBsZXQgdG9fYm9vbCA9IGZ1bmN0aW9uIHwgYEJvb2wgYiAtPiBiIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBCb29sXCIganNvblxuICAgIGxldCB0b19mbG9hdCA9IGZ1bmN0aW9uIHwgYEZsb2F0IGYgLT4gZiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgRmxvYXRcIiBqc29uXG5cbiAgICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICAgIHwgYFN0cmluZyBzIC0+IHNcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBTdHJpbmdcIiBqc29uXG5cbiAgICBsZXQgdG9fc3RyaW5nX29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBTdHJpbmcgcyAtPiBTb21lIHNcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYFN0cmluZyBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCB0b19vcHRpb24gZiB2IDoganNvbiBvcHRpb24gPVxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwgdiAtPiBTb21lIChmIHYpXG5cbiAgICBsZXQgdG9fbGlzdCB2IDoganNvbiBsaXN0ID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+IGxcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBMaXN0XCIganNvblxuXG4gICAgbGV0IHRvX2Zsb2F0X29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fYm9vbF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgQm9vbCBiIC0+IFNvbWUgYlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQm9vbCBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXIgPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBmXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgRmxvYXRcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyX29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgY29udmVydF9lYWNoIGYgPSBmdW5jdGlvblxuICAgICAgfCBgTGlzdCBsIC0+IExpc3QubWFwIGYgbFxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYExpc3RcIiBqc29uXG5cbiAgICBsZXQgcmV2X2ZpbHRlcl9tYXAgPSBTaGFyZWQucmV2X2ZpbHRlcl9tYXBcbiAgICBsZXQgZmlsdGVyX21hcCA9IFNoYXJlZC5maWx0ZXJfbWFwXG5cbiAgICBsZXQgcmV2X2ZsYXR0ZW4gPSBTaGFyZWQucmV2X2ZsYXR0ZW5cbiAgICBsZXQgZmxhdHRlbiA9IFNoYXJlZC5mbGF0dGVuXG5cbiAgICBsZXQgZmlsdGVyX2luZGV4IGkgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChmdW5jdGlvbiB8IGBMaXN0IGwgLT4gKHRyeSBTb21lIChMaXN0Lm50aCBsIGkpIHdpdGggXyAtPiBOb25lKSB8IF8gLT4gTm9uZSkgbFxuXG4gICAgbGV0IGZpbHRlcl9saXN0IGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgTGlzdCBsIC0+IFNvbWUgbCB8IF8gLT4gTm9uZSkgbFxuICAgIGxldCBmaWx0ZXJfYXNzb2MgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBBc3NvYyBsIC0+IFNvbWUgbCB8IF8gLT4gTm9uZSkgbFxuICAgIGxldCBmaWx0ZXJfYm9vbCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEJvb2wgYiAtPiBTb21lIGIgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Zsb2F0IGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgRmxvYXQgZiAtPiBTb21lIGYgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX3N0cmluZyBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYFN0cmluZyBzIC0+IFNvbWUgcyB8IF8gLT4gTm9uZSkgbFxuXG4gICAgbGV0IGZpbHRlcl9tZW1iZXIgayBsID1cbiAgICAgIGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBBc3NvYyBsIC0+ICh0cnkgU29tZSAoTGlzdC5hc3NvYyBrIGwpIHdpdGggXyAtPiBOb25lKSB8IF8gLT4gTm9uZSkgbFxuXG4gICAgbGV0IGZpbHRlcl9udW1iZXIgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChcbiAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgICkgbFxuXG4gICAgbGV0IGtleXMgbyA9IHRvX2Fzc29jIG8gfD4gTGlzdC5tYXAgKGZ1biAoa2V5LCBfKSAtPiBrZXkpXG5cbiAgICBsZXQgdmFsdWVzIG8gPSB0b19hc3NvYyBvIHw+IExpc3QubWFwIChmdW4gKF8sIHZhbHVlKSAtPiB2YWx1ZSlcblxuICAgIGxldCBjb21iaW5lIGZpcnN0IHNlY29uZCA9XG4gICAgICBtYXRjaCAoZmlyc3QsIHNlY29uZCkgd2l0aFxuICAgICAgfCAoYEFzc29jIGEsIGBBc3NvYyBiKSAtPiBgQXNzb2MgKGEgQCBiKVxuICAgICAgfCAoXywgXykgLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJFeHBlY3RlZCB0d28gb2JqZWN0c1wiKVxuXG4gICAgbGV0IHJlYyBzb3J0IGpzb24gPVxuICAgICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBvID0gTGlzdC5yZXYgKExpc3QucmV2X21hcCAoZnVuIChrLCB2KSAtPiAoaywgc29ydCB2KSkgbykgaW5cbiAgICAgICAgYEFzc29jICgoTGlzdC5zdGFibGVfc29ydCAoZnVuIChrMSwgXykgKGsyLCBfKSAtPiBTdHJpbmcuY29tcGFyZSBrMSBrMikpIG8pXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgYExpc3QgKExpc3QucmV2IChMaXN0LnJldl9tYXAgc29ydCBsKSlcbiAgICAgIHwgZWwgLT4gIGVsXG4gIGVuZFxuXG4gIG1vZHVsZSB0eXBlIEludGVybmFsX2Jhc2ljX2ludGYgPSBzaWdcblxuICAgIHZhbCB0b19udW1iZXIgOiBbPiBgSW50IG9mIGludCB8IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX251bWJlcl9vcHRpb24gOiBbPiBgSW50IG9mIGludCB8IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIHRvX2ludCA6IFs+IGBJbnQgb2YgaW50IF0gLT4gaW50XG4gICAgdmFsIHRvX2ludF9vcHRpb24gOiBbPiBgSW50IG9mIGludCB8IGBOdWxsIF0gLT4gaW50IG9wdGlvblxuICAgIHZhbCBmaWx0ZXJfaW50IDogWz4gYEludCBvZiBpbnQgXSBsaXN0IC0+IGludCBsaXN0XG4gICAgdmFsIGZpbHRlcl9udW1iZXIgOiBbPiBgSW50IG9mIGludCB8IGBGbG9hdCBvZiBmbG9hdCBdIGxpc3QgLT4gZmxvYXQgbGlzdFxuICBlbmRcblxuICBtb2R1bGUgQmFzaWMoTSA6IFMpIDogSW50ZXJuYWxfYmFzaWNfaW50ZiA9IHN0cnVjdFxuXG4gICAgbGV0IHRvX251bWJlciA9IGZ1bmN0aW9uXG4gICAgICB8IGBJbnQgaSAtPiBmbG9hdCBpXG4gICAgICB8IGBGbG9hdCBmIC0+IGZcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQgb3IgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX251bWJlcl9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gU29tZSAoZmxvYXQgaSlcbiAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQsIGBGbG9hdCBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCB0b19pbnQgPSBmdW5jdGlvbiB8IGBJbnQgaSAtPiBpIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnRcIiBqc29uXG5cbiAgICBsZXQgdG9faW50X29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBJbnQgaSAtPiBTb21lIGlcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEludCBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCBmaWx0ZXJfaW50IGwgPSBTaGFyZWQuZmlsdGVyX21hcCAoZnVuY3Rpb24gYEludCBpIC0+IFNvbWUgaSB8IF8gLT4gTm9uZSkgbFxuICAgIGxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICAgICAgU2hhcmVkLmZpbHRlcl9tYXAgKFxuICAgICAgICBmdW5jdGlvblxuICAgICAgICB8IGBJbnQgaSAtPiBTb21lIChmbG9hdCBpKVxuICAgICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgICB8IF8gLT4gTm9uZVxuICAgICAgKSBsXG4gIGVuZFxuXG4gIG1vZHVsZSB0eXBlIEludGVybmFsX2V4dGVuZGVkX2ludGYgPSBzaWdcbiAgICB2YWwgc29ydCA6IChbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IHwgYExpc3Qgb2YgJ2EgbGlzdCB8XG4gICAgICAgICAgICAgICAgICAgYFR1cGxlIG9mICdhIGxpc3QgfCBgVmFyaWFudCBvZiAnYiAqICdhIG9wdGlvbiBdIGFzICdhKSAtPiAnYVxuICBlbmRcblxuICBtb2R1bGUgRXh0ZW5kZWQoTSA6IFMpIDogSW50ZXJuYWxfZXh0ZW5kZWRfaW50ZiA9IHN0cnVjdFxuXG4gICAgbGV0IHJlYyBzb3J0IGpzb24gPVxuICAgICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBvID0gTGlzdC5yZXYgKExpc3QucmV2X21hcCAoZnVuIChrLCB2KSAtPiAoaywgc29ydCB2KSkgbykgaW5cbiAgICAgICAgYEFzc29jICgoTGlzdC5zdGFibGVfc29ydCAoZnVuIChrMSwgXykgKGsyLCBfKSAtPiBTdHJpbmcuY29tcGFyZSBrMSBrMikpIG8pXG4gICAgICB8IGBUdXBsZSBsXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgYExpc3QgKExpc3QucmV2IChMaXN0LnJldl9tYXAgc29ydCBsKSlcbiAgICAgIHwgYFZhcmlhbnQgKGssIFNvbWUgdikgYXMgdjEgLT5cbiAgICAgICAgbGV0IHYnID0gc29ydCB2IGluIGlmIHYnID09IHYgdGhlbiB2MSBlbHNlIGBWYXJpYW50IChrLCBTb21lIHYnKVxuICAgICAgfCBlbCAtPiAgZWxcbiAgZW5kXG5cbmVuZFxuXG5tb2R1bGUgU3RyaWN0ID0gc3RydWN0XG4gIG1vZHVsZSBNID0gc3RydWN0XG4gICAgdHlwZSBqc29uID0gSnNvbi5TdHJpY3QuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG5lbmRcblxubW9kdWxlIEJhc2ljID0gc3RydWN0XG4gIG1vZHVsZSBNID0gc3RydWN0XG4gICAgdHlwZSBqc29uID0gSnNvbi5CYXNpYy5qc29uXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuZW5kXG5cbm1vZHVsZSBFeHRlbmRlZCA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uRXh0ZW5kZWQuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5FeHRlbmRlZChNKVxuZW5kXG5cbm1vZHVsZSBZb2pzb25fc2FmZSA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9XG4gICAgICBbXG4gICAgICB8IGBOdWxsXG4gICAgICB8IGBCb29sIG9mIGJvb2xcbiAgICAgIHwgYEludCBvZiBpbnRcbiAgICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICAgIHwgYEZsb2F0IG9mIGZsb2F0XG4gICAgICB8IGBTdHJpbmcgb2Ygc3RyaW5nXG4gICAgICB8IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdFxuICAgICAgfCBgTGlzdCBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgICAgfCBgVmFyaWFudCBvZiAoc3RyaW5nICoganNvbiBvcHRpb24pXG4gICAgICBdXG5cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuRXh0ZW5kZWQoTSlcbmVuZFxuIiwibGV0IHRva2VuX3RvX3N0cmluZyAodG9rOlRva2Vucy50b2tlbikgPVxuICBtYXRjaCB0b2sgd2l0aFxuICB8IFNUUklORyBzIC0+IHNcbiAgfCBPUyAtPiBcIntcIlxuICB8IE9FIC0+IFwifVwiXG4gIHwgTlVMTCAtPiBcIk51bGxcIlxuICB8IE5FR0lORklOSVRZIC0+IFwiLUluZmluaXR5XCJcbiAgfCBOQU4gLT4gXCJOQU5cIlxuICB8IExFWF9FUlJPUiBlcnIgLT4gXCJpbnB1dCBlcnJvciAnXCIgXiBlcnIgXiBcIidcIlxuICB8IExBUkdFSU5UIHMgLT4gc1xuICB8IElOVCBpIC0+IHN0cmluZ19vZl9pbnQgaVxuICB8IElORklOSVRZIC0+IFwiSW5maW5pdHlcIlxuICB8IEZMT0FUIGYgLT4gc3RyaW5nX29mX2Zsb2F0IGZcbiAgfCBFT0YgLT4gXCJlbmQtb2YtZmlsZVwiXG4gIHwgQ09NUExJQU5DRV9FUlJPUiBlcnIgLT4gZXJyXG4gIHwgQ09NTUEgLT4gXCIsXCJcbiAgfCBDT0xPTiAtPiBcIjpcIlxuICB8IEJPT0wgYiAtPiBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbiAgfCBBUyAtPiBcIltcIlxuICB8IEFFIC0+IFwiXVwiXG4gIHwgVlMgLT4gXCI8XCJcbiAgfCBWRSAtPiBcIj5cIlxuICB8IFRTIC0+IFwiKFwiXG4gIHwgVEUgLT4gXCIpXCJcbiIsIm1vZHVsZSB0eXBlIFJlYWRlcl9zdHJpbmdfZmlsZSA9IHNpZ1xuICB0eXBlIGpzb25cblxuICB2YWwganNvbl9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX3N0cmluZ19leG4gOiBzdHJpbmcgLT4ganNvblxuICB2YWwganNvbl9vZl9maWxlIDogc3RyaW5nIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9maWxlX2V4biA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBqc29uX29mX2NoYW5uZWwgOiBpbl9jaGFubmVsIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9jaGFubmVsX2V4biA6IGluX2NoYW5uZWwgLT4ganNvblxuICB2YWwganNvbl9vZl9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb25fZXhuIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfbGV4YnVmIDogTGV4aW5nLmxleGJ1ZiAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfbGV4YnVmX2V4biA6IExleGluZy5sZXhidWYgLT4ganNvblxuICB2YWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIG9mX2ZpbGUgOiBzdHJpbmcgLT4ganNvblxuICB2YWwgb2ZfY2hhbm5lbCA6IGluX2NoYW5uZWwgLT4ganNvblxuICB2YWwgb2ZfZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4ganNvblxuXG4gIHZhbCBqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIDogc3RyaW5nIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9maWxlX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyA6IGluX2NoYW5uZWwgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uX2Vycm9yX2luZm8gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvIDogTGV4aW5nLmxleGJ1ZiAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0IDogP3N0cmVhbTpib29sIC0+IExleGluZy5sZXhidWYgLT4gKGpzb24gb3B0aW9uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuXG4gIHZhbCBzdHJlYW1fZnJvbV9zdHJpbmcgOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fY2hhbm5lbCA6ID9maW46KHVuaXQgLT4gdW5pdCkgLT4gaW5fY2hhbm5lbCAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9maWxlIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2xleGJ1ZiA6IExleGluZy5sZXhidWYgLT4ganNvbiBTdHJlYW0udFxuXG4gIHZhbCBzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gOiA/ZmluOih1bml0IC0+IHVuaXQpIC0+IGluX2NoYW5uZWwgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZmlsZV9lcnJvcl9pbmZvIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2Z1bmN0aW9uX2Vycm9yX2luZm8gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fbGV4YnVmX2Vycm9yX2luZm8gOiBMZXhpbmcubGV4YnVmIC0+IGpzb24gU3RyZWFtLnRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoTGV4eGVyIDogQ29tcGxpYW50X2xleHhlci5MZXggKSAoUGFyc2VyIDogUGFyc2VyLlBhcnNlcikgOiBSZWFkZXJfc3RyaW5nX2ZpbGVcbiAgd2l0aCB0eXBlIGpzb24gPSBQYXJzZXIuQ29tcGxpYW5jZS5qc29uXG49IHN0cnVjdFxuICB0eXBlIGpzb24gPSBQYXJzZXIuQ29tcGxpYW5jZS5qc29uXG5cbiAgbGV0IHJlYWRfanNvbicgfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgfCBPayBOb25lIC0+IEVycm9yIFwiZW1wdHkgaW5wdXRcIlxuICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgRU9GIC0+IE9rIHJlc1xuICAgICAgfCBleGNlcHRpb24gTGV4eGVyX3V0aWxzLkxleF9lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG4gICAgICB8IHRvayAtPiBFcnJvciAoXCJqdW5rIGFmdGVyIGVuZCBvZiBKU09OIHZhbHVlOiBcIiBeIChUb2tlbl91dGlscy50b2tlbl90b19zdHJpbmcgdG9rKSlcbiAgICAgIGVuZFxuICAgIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbiAgbGV0IHJlYWRfanNvbiB+bGV4YnVmID1cbiAgICBtYXRjaCByZWFkX2pzb24nIH5sZXhidWYgd2l0aFxuICAgIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgcyBpblxuICAgICAgRXJyb3IgKEVycm9yX2luZm8udG9fc3RyaW5nIGVycl9pbmZvKVxuXG4gIGxldCBqc29uX29mX3N0cmluZyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb24gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX3N0cmluZ19leG4gcyA9XG4gICAgbWF0Y2gganNvbl9vZl9zdHJpbmcgcyB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IG9mX3N0cmluZyBzID0ganNvbl9vZl9zdHJpbmdfZXhuIHNcblxuICBsZXQganNvbl9vZl9maWxlIGZpbGVuYW1lID1cbiAgICB0cnkgYmVnaW5cbiAgICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICAgIGxldCByZXMgPSByZWFkX2pzb24gfmxleGJ1ZiBpblxuICAgICAgICBjbG9zZV9pbiBpbmM7XG4gICAgICAgIHJlc1xuICAgIGVuZFxuICAgIHdpdGggU3lzX2Vycm9yIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl9vZl9maWxlX2V4biBmaWxlbmFtZSA9XG4gICAgbWF0Y2gganNvbl9vZl9maWxlIGZpbGVuYW1lIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9jaGFubmVsIGluYyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9jaGFubmVsX2V4biBpbmMgPVxuICAgIG1hdGNoIGpzb25fb2ZfY2hhbm5lbCBpbmMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBqc29uX29mX2Z1bmN0aW9uIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWYgbGV4YnVmID1cbiAgICByZWFkX2pzb24gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9leG4gbGV4YnVmID1cbiAgICBtYXRjaCBqc29uX29mX2xleGJ1ZiBsZXhidWYgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBqc29uX29mX2Z1bmN0aW9uX2V4biBmID1cbiAgICBtYXRjaCBqc29uX29mX2Z1bmN0aW9uIGYgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBvZl9maWxlID0ganNvbl9vZl9maWxlX2V4blxuICBsZXQgb2ZfY2hhbm5lbCA9IGpzb25fb2ZfY2hhbm5lbF9leG5cbiAgbGV0IG9mX2Z1bmN0aW9uID0ganNvbl9vZl9mdW5jdGlvbl9leG5cblxuICAoKiBFcnJvcl9pbmZvLnQgcmV0dXJuaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmID1cbiAgICBtYXRjaCByZWFkX2pzb24nIH5sZXhidWYgd2l0aFxuICAgIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBlcnIgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgIEVycm9yIGVycl9pbmZvXG5cbiAgbGV0IGpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9maWxlX2Vycm9yX2luZm8gZmlsZW5hbWUgPVxuICAgIHRyeSBiZWdpblxuICAgICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICAgIGxldCByZXMgPSBqc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbmMgaW5cbiAgICAgICAgY2xvc2VfaW4gaW5jO1xuICAgICAgICByZXNcbiAgICBlbmRcbiAgICB3aXRoIFN5c19lcnJvciBlcnIgLT4gRXJyb3IgeyBFcnJvcl9pbmZvLmxpbmUgPSAwOyBzdGFydF9jaGFyID0gMDsgZW5kX2NoYXIgPSAwOyBtc2cgPSBlcnIgfVxuXG4gIGxldCBqc29uX29mX2Z1bmN0aW9uX2Vycm9yX2luZm8gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm8gbGV4YnVmID1cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgKCogSW50ZXJuYWwgY29tcGF0aWJpbGl0eSBmdW5jdGlvbiBzdXBwb3J0aW5nIHRoZSBzdHJlYW0gZmxhZyAqKVxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA/KHN0cmVhbSA9IGZhbHNlKSBsZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBsZXQgcmVzID0gbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICB8IE9rIE5vbmUgLT4gaWYgc3RyZWFtIHRoZW4gT2sgTm9uZSBlbHNlIEVycm9yIFwiZW1wdHkgaW5wdXRcIlxuICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBiZWdpblxuICAgICAgbWF0Y2ggc3RyZWFtIHdpdGhcbiAgICAgIHwgdHJ1ZSAtPiBPayAoU29tZSByZXMpXG4gICAgICB8IGZhbHNlIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICAgIHwgRU9GIC0+IE9rIChTb21lIHJlcylcbiAgICAgICAgfCBleGNlcHRpb24gTGV4eGVyX3V0aWxzLkxleF9lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG4gICAgICAgIHwgdG9rIC0+IEVycm9yIChcImp1bmsgYWZ0ZXIgZW5kIG9mIEpTT04gdmFsdWU6IFwiIF4gKFRva2VuX3V0aWxzLnRva2VuX3RvX3N0cmluZyB0b2spKVxuICAgICAgICBlbmRcbiAgICAgIGVuZFxuICAgIHwgRXJyb3IgcyAtPiBFcnJvciBzXG4gICAgaW5cbiAgICBtYXRjaCByZXMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IE9rIHJlc1xuICAgIHwgRXJyb3IgcyAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIHMgaW5cbiAgICAgIEVycm9yIGVycl9pbmZvXG5cblxuICAoKiBTdHJlYW0udCByZXR1cm5pbmcgZnVuY3Rpb25zICopXG5cbiAgbGV0IHJlYWRfanNvbl9zdHJlYW0gfmZpbiB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICAgIHwgT2sgTm9uZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBTb21lIHJlc1xuICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgbGV0ICgpID0gZmluICgpIGluXG4gICAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgICAgbGV0IG1zZyA9IEVycm9yX2luZm8udG9fc3RyaW5nIGVycl9pbmZvIGluXG4gICAgICAgIHJhaXNlIChGYWlsdXJlIG1zZylcbiAgICBpblxuICAgIFN0cmVhbS5mcm9tIGZcblxuICBsZXQgc3RyZWFtX2Zyb21fc3RyaW5nIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWwgPyhmaW4gPSBmdW4gKCkgLT4gKCkpIGluYyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZnVuY3Rpb24gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9maWxlIGZpbGVuYW1lID1cbiAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgIHN0cmVhbV9mcm9tX2NoYW5uZWwgfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGluYykgaW5jXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1ZiBsZXhidWYgPVxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgKCogU3RyZWFtLnQgSnNvbl9lcnJvcl9pbmZvIHJhaXNpbmcgZnVuY3Rpb25zICopXG5cbiAgbGV0IHJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyB+ZmluIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBsZXQgZiBfaSA9XG4gICAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgICAgfCBPayBOb25lIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgfCBPayAoU29tZSByZXMpIC0+IFNvbWUgcmVzXG4gICAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICBsZXQgKCkgPSBmaW4gKCkgaW5cbiAgICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIGVyciBpblxuICAgICAgICByYWlzZSAoRXJyb3JfaW5mby5Kc29uX2Vycm9yX2luZm8gZXJyX2luZm8pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvID8oZmluID0gZnVuICgpIC0+ICgpKSBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyB+ZmluIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZnVuY3Rpb25fZXJyb3JfaW5mbyBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lID1cbiAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgIHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyB+ZmluOihmdW4gKCkgLT4gY2xvc2VfaW4gaW5jKSBpbmNcblxuICBsZXQgc3RyZWFtX2Zyb21fbGV4YnVmX2Vycm9yX2luZm8gbGV4YnVmID1cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbmVuZFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwganNvbl90b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2ZpbGVfZXhuIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19jaGFubmVsIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2NoYW5uZWxfZXhuIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19maWxlX2h1bSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19maWxlX2h1bV9leG4gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBqc29uX3RvX2NoYW5uZWxfaHVtIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2NoYW5uZWxfaHVtX2V4biA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19maWxlX2h1bSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2NoYW5uZWwgOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19jaGFubmVsX2h1bSA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHVuaXRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgOiBJbnRmID0gc3RydWN0XG5cbiAgbGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG4gIGxldCBhZGRfaGV4X2J5dGUgb2MgaSA9XG4gICAgb3V0cHV0X2NoYXIgb2MgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgICBvdXRwdXRfY2hhciBvYyAobmliYmxlX3RvX2hleCAoaSBsYW5kIDB4MGYpKVxuXG4gIGxldCBlc2NhcGUgb2MgcyA9XG4gICAgbGV0IGFkZF9jaGFyID0gb3V0cHV0X2NoYXIgb2MgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IG91dHB1dF9zdHJpbmcgb2MgaW5cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIG9jIChpbnRfb2ZfY2hhciBjKVxuICAgICAgfCBfICAgICAgLT4gYWRkX2NoYXIgcy5baV1cbiAgICBkb25lXG4gICBcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9mbXQgb2MganNvbiB+ZW9sIH5pbmNyIH5wc2VwID0gXG4gICAgbGV0IGFkZF9jaGFyID0gb3V0cHV0X2NoYXIgb2MgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IG91dHB1dF9zdHJpbmcgb2MgaW5cbiAgICBsZXQgYWRkX3F1b3RlX3N0cmluZyBzID0gYWRkX2NoYXIgJ1wiJzsgZXNjYXBlIG9jIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCBwc2VwID0gXCI6XCIgXiBwc2VwIGluXG4gICAgbGV0IHJlYyBmbXQgb2ZmIHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJ3snOyBhZGRfc3RyaW5nIGVvbDsganNvbl9hc3NvYyAob2ZmICsgaW5jcikgbztcbiAgICAgICAgYWRkX3N0cmluZyBlb2w7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgICBhZGRfY2hhciAnWyc7IGFkZF9zdHJpbmcgZW9sOyBqc29uX2xpc3QgKG9mZiArIGluY3IpIGw7XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ10nXG4gICAgICB8IGBOdWxsIC0+IGFkZF9zdHJpbmcgXCJudWxsXCJcbiAgICAgIHwgYEJvb2wgYiAtPiBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfYm9vbCBiKVxuICAgICAgfCBgSW50IGkgLT4gYWRkX2ludCBpXG4gICAgICB8IGBJbnRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYEZsb2F0IGYgLT4gYWRkX2Zsb2F0IGZcbiAgICAgIHwgYEZsb2F0bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmcgcyAtPiBhZGRfcXVvdGVfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgVHVwbGUgdCAtPlxuICAgICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgICBhZGRfY2hhciAnKCc7IGFkZF9zdHJpbmcgZW9sOyBqc29uX2xpc3QgKG9mZiArIGluY3IpIHQ7XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJzwnOyBhZGRfc3RyaW5nIGVvbDsgIHZhcmlhbnQgKG9mZiArIGluY3IpIHY7XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2Mgb2ZmIG8gPVxuICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXCIgXiBlb2wgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBwYWlyIG9mZiB2ICkgb1xuICAgIGFuZCBwYWlyIG9mZiAoaywgdikgPSBhZGRfcXVvdGVfc3RyaW5nIGs7IGFkZF9zdHJpbmcgcHNlcDsgZm10IG9mZiB2XG4gICAgYW5kIGpzb25fbGlzdCBvZmYgbCA9XG4gICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcIiBeIGVvbCBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IGZtdCBvZmYgdiApIGxcbiAgICBhbmQgdmFyaWFudCBvZmYgKGssIGopID1cbiAgICAgIGFkZF9xdW90ZV9zdHJpbmcgaztcbiAgICAgIG1hdGNoIGogd2l0aFxuICAgICAgfCBTb21lIGogLT4gYWRkX3N0cmluZyBwc2VwOyBmbXQgKG9mZiArIGluY3IpIGpcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgIGluXG4gICAgZm10IDAganNvbjtcbiAgICBhZGRfc3RyaW5nIGVvbFxuXG4gIGxldCBqc29uX3RvX2NoYW5uZWwnID0ganNvbl90b19jaGFubmVsX2ZtdCB+ZW9sOlwiXCIgfmluY3I6MCB+cHNlcDpcIlwiXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfaHVtJyA9IGpzb25fdG9fY2hhbm5lbF9mbXQgfmVvbDpcIlxcblwiIH5pbmNyOjIgfnBzZXA6XCIgXCJcblxuICBsZXQganNvbl90b19jaGFubmVsIG9jIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19jaGFubmVsJyBvYyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19jaGFubmVsX2h1bSBvYyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fY2hhbm5lbF9odW0nIG9jIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfZXhuID0ganNvbl90b19jaGFubmVsJ1xuICBsZXQganNvbl90b19jaGFubmVsX2h1bV9leG4gPSBqc29uX3RvX2NoYW5uZWxfaHVtJ1xuXG4gIGxldCBqc29uX3RvX2ZpbGUgZmlsZSBqc29uID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gICAgbGV0IHJlcyA9IGpzb25fdG9fY2hhbm5lbCBvYyBqc29uIGluXG4gICAgY2xvc2Vfb3V0IG9jO1xuICAgIHJlc1xuXG4gIGxldCBqc29uX3RvX2ZpbGVfaHVtIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIGxldCByZXMgPSBqc29uX3RvX2NoYW5uZWxfaHVtIG9jIGpzb24gaW5cbiAgICBjbG9zZV9vdXQgb2M7XG4gICAgcmVzXG5cbiAgbGV0IGpzb25fdG9fZmlsZV9leG4gZmlsZSBqc29uID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gICAgdHJ5IChqc29uX3RvX2NoYW5uZWwnIG9jIGpzb247IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IGpzb25fdG9fZmlsZV9odW1fZXhuIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoanNvbl90b19jaGFubmVsX2h1bScgb2MganNvbjsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cblxuICBsZXQgdG9fZmlsZSA9IGpzb25fdG9fZmlsZV9leG5cbiAgbGV0IHRvX2ZpbGVfaHVtID0ganNvbl90b19maWxlX2h1bV9leG5cbiAgbGV0IHRvX2NoYW5uZWwgPSBqc29uX3RvX2NoYW5uZWxfZXhuXG4gIGxldCB0b19jaGFubmVsX2h1bSA9IGpzb25fdG9fY2hhbm5lbF9odW1fZXhuXG5cbiAgbGV0IHN0cmVhbV90b19jaGFubmVsIG9jIHN0cmVhbSA9XG4gICAgU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IGpzb25fdG9fY2hhbm5lbF9leG4gb2MganNvbjsgb3V0cHV0X2NoYXIgb2MgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCBzdHJlYW1fdG9fZmlsZSBmaWxlIHN0cmVhbSA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoc3RyZWFtX3RvX2NoYW5uZWwgb2Mgc3RyZWFtOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuZW5kXG4iLCJtb2R1bGUgdHlwZSBJbnRmID0gc2lnXG4gIHZhbCBqc29uX3RvX3N0cmluZyA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHN0cmluZywgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2V4biA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCB0b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwganNvbl90b19zdHJpbmdfaHVtIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAoc3RyaW5nLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19zdHJpbmdfaHVtX2V4biA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCB0b19zdHJpbmdfaHVtIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIGpzb25fdG9fYnVmZmVyIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2V4biA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19idWZmZXJfaHVtIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2h1bV9leG4gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fYnVmZmVyX2h1bSA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX3N0cmluZyA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gc3RyaW5nXG4gIHZhbCBzdHJlYW1fdG9fYnVmZmVyIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogSW50ZiA9IHN0cnVjdFxuXG4gIGxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxuICBsZXQgYWRkX2hleF9ieXRlIGJ1ZiBpID1cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAobmliYmxlX3RvX2hleCAoaSBsYW5kIDB4MGYpKVxuXG4gIGxldCBlc2NhcGUgYnVmIHMgPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICAgIHwgJ1xcXFwnICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFxcXCJcbiAgICAgIHwgJ1xcYicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXGJcIlxuICAgICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgICB8ICdcXG4nICAgLT4gYWRkX3N0cmluZyBcIlxcXFxuXCJcbiAgICAgIHwgJ1xccicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHJcIlxuICAgICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgICB8ICdcXHgwMCcuLidcXHgxRidcbiAgICAgIHwgJ1xceDdGJyBhcyBjIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgYnVmIChpbnRfb2ZfY2hhciBjKVxuICAgICAgfCBfICAgICAgLT4gYWRkX2NoYXIgcy5baV1cbiAgICBkb25lXG4gICBcbiAgbGV0IGpzb25fdG9fYnVmZmVyJyBidWYganNvbiA9XG4gICAgbGV0IGFkZF9jaGFyID0gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBidWYgczsgYWRkX2NoYXIgJ1wiJyBpblxuICAgIGxldCBhZGRfaW50IGkgPSBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfaW50IGkpIGluXG4gICAgbGV0IGFkZF9mbG9hdCBmID0gYWRkX3N0cmluZyAoQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYpIGluXG4gICAgbGV0IHJlYyBmbXQgdmFsdWUgPVxuICAgICAgbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPiBhZGRfY2hhciAneyc7IGpzb25fYXNzb2MgbzsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT4gYWRkX2NoYXIgJ1snOyBqc29uX2xpc3QgbDsgYWRkX2NoYXIgJ10nXG4gICAgICB8IGBOdWxsIC0+IGFkZF9zdHJpbmcgXCJudWxsXCJcbiAgICAgIHwgYEJvb2wgYiAtPiBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfYm9vbCBiKVxuICAgICAgfCBgSW50IGkgLT4gYWRkX2ludCBpXG4gICAgICB8IGBJbnRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYEZsb2F0IGYgLT4gYWRkX2Zsb2F0IGZcbiAgICAgIHwgYEZsb2F0bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmcgcyAtPiBhZGRfcXVvdGVfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgVHVwbGUgdCAtPiBhZGRfY2hhciAnKCc7IGpzb25fbGlzdCB0OyBhZGRfY2hhciAnKSdcbiAgICAgIHwgYFZhcmlhbnQgdiAtPiBhZGRfY2hhciAnPCc7ICB2YXJpYW50IHY7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIG8gPVxuICAgICAgbGV0IHNlcCA9IHJlZiBcIlwiIGluIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gXCIsXCI7IHBhaXIgdiApIG9cbiAgICBhbmQgcGFpciAoaywgdikgPSBhZGRfcXVvdGVfc3RyaW5nIGs7IGFkZF9jaGFyICc6JzsgZm10IHZcbiAgICBhbmQganNvbl9saXN0IGwgPVxuICAgICAgbGV0IHNlcCA9IHJlZiBcIlwiIGluIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gXCIsXCI7IGZtdCB2ICkgbFxuICAgIGFuZCB2YXJpYW50IChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9jaGFyICc6JzsgZm10IGpcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgIGluXG4gICAgZm10IGpzb25cblxuICBsZXQganNvbl90b19idWZmZXJfaHVtJyBidWYganNvbiA9XG4gICAgbGV0IGFkZF9jaGFyID0gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBidWYgczsgYWRkX2NoYXIgJ1wiJyBpblxuICAgIGxldCBhZGRfaW50IGkgPSBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfaW50IGkpIGluXG4gICAgbGV0IGFkZF9mbG9hdCBmID0gYWRkX3N0cmluZyAoQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYpIGluXG4gICAgbGV0IHJlYyBmbXQgbGRyIHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIntcXG5cIjsganNvbl9hc3NvYyAobGRyIF4gXCIgIFwiKSBvO1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJbXFxuXCI7IGpzb25fbGlzdCAobGRyIF4gXCIgIFwiKSBsO1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIihcXG5cIjsganNvbl9saXN0IChsZHIgXiBcIiAgXCIpIHQ7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIjxcIjsgIHZhcmlhbnQgKGxkciBeIFwiICBcIikgdjtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBsZHIgbyA9XG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFxcblwiIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgcGFpciBsZHIgdiApIG9cbiAgICBhbmQgcGFpciBsZHIgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfc3RyaW5nIFwiOiBcIjsgZm10IGxkciB2XG4gICAgYW5kIGpzb25fbGlzdCBsZHIgbCA9XG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFxcblwiIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgZm10IGxkciAgdiApIGxcbiAgICBhbmQgdmFyaWFudCBsZHIgKGssIGopID1cbiAgICAgIGFkZF9xdW90ZV9zdHJpbmcgaztcbiAgICAgIG1hdGNoIGogd2l0aFxuICAgICAgfCBTb21lIGogLT4gYWRkX3N0cmluZyBcIjogXCI7IGZtdCAobGRyIF4gXCIgIFwiKSBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCBcIlwiIGpzb247XG4gICAgYWRkX2NoYXIgJ1xcbidcblxuICBsZXQganNvbl90b19zdHJpbmcnIGpzb24gPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGpzb25fdG9fYnVmZmVyJyBidWYganNvbjtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19zdHJpbmcnIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX2J1ZmZlciBidWYganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19leG4gPSBqc29uX3RvX3N0cmluZydcbiAgbGV0IHRvX3N0cmluZyA9IGpzb25fdG9fc3RyaW5nJ1xuICBsZXQganNvbl90b19idWZmZXJfZXhuID0ganNvbl90b19idWZmZXInXG4gIGxldCB0b19idWZmZXIgPSBqc29uX3RvX2J1ZmZlcidcblxuICBsZXQganNvbl90b19zdHJpbmdfaHVtJyBqc29uID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBqc29uX3RvX2J1ZmZlcl9odW0nIGJ1ZiBqc29uO1xuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBsZXQganNvbl90b19zdHJpbmdfaHVtIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19zdHJpbmdfaHVtJyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19idWZmZXJfaHVtIGJ1ZiBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fYnVmZmVyJyBidWYganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bV9leG4gPSBqc29uX3RvX3N0cmluZ19odW0nXG4gIGxldCB0b19zdHJpbmdfaHVtID0ganNvbl90b19zdHJpbmdfaHVtJ1xuICBsZXQganNvbl90b19idWZmZXJfaHVtX2V4biA9IGpzb25fdG9fYnVmZmVyX2h1bSdcbiAgbGV0IHRvX2J1ZmZlcl9odW0gPSBqc29uX3RvX2J1ZmZlcl9odW0nXG5cbiAgbGV0IHN0cmVhbV90b19zdHJpbmcgc3RyZWFtID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBsZXQgKCkgPSBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fYnVmZmVyIGJ1ZiBqc29uOyBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nKSBzdHJlYW0gaW5cbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IHN0cmVhbV90b19idWZmZXIgYnVmIHN0cmVhbSA9XG4gICAgU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2J1ZmZlciBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtXG5cbmVuZFxuIiwiZXhjZXB0aW9uIEpzb25fZXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBqc29uX2Vycm9yIG1zZyA9IHJhaXNlIChKc29uX2Vycm9yIG1zZylcblxudHlwZSBsZXhlcl9zdGF0ZSA9IHtcbiAgYnVmIDogQnVmZmVyLnQ7XG4gIG11dGFibGUgbG51bSA6IGludDtcbiAgbXV0YWJsZSBib2wgOiBpbnQ7XG4gIG11dGFibGUgZm5hbWUgOiBzdHJpbmcgb3B0aW9uO1xufVxuXG5sZXQgaW5pdF9sZXhlciA/YnVmOl8gP2ZuYW1lID8obG51bSA9IDEpICgpID1cbiAge1xuICAgIGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgICgqIHVudXNlZCAqKVxuICA7IGxudW0gPSBsbnVtXG4gIDsgYm9sID0gMFxuICA7IGZuYW1lID0gZm5hbWVcbiAgfVxuXG5tb2R1bGUgQ29tbW9uX3JlYWRlciAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbW9kdWxlIEludGVybmFsX3JlYWRlciA9IHN0cnVjdFxuICAgIG1vZHVsZSBMZXh4ZXIgPSBDb21wbGlhbnRfbGV4eGVyLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBtb2R1bGUgUGFyc2VyID0gUGFyc2VyLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFJlYWRlcl9zdHJpbmdfZmlsZS5NYWtlIChMZXh4ZXIpIChQYXJzZXIpXG4gIGVuZFxuXG4gIHR5cGUganNvbiA9IEludGVybmFsX3JlYWRlci5qc29uXG4gIHR5cGUgdCA9IGpzb25cbiAgdHlwZSBqc29uX2xpbmUgPSBbIGBKc29uIG9mIHQgfCBgRXhuIG9mIGV4biBdXG5cbiAgKCogSGVscGVyIGZ1bmN0aW9ucyAqKVxuICBsZXQgZXJyb3JfdG9fc3RyaW5nIChlcnJvcl9pbmZvOkVycm9yX2luZm8udCkgZm5hbWUgbG51bSA9XG4gICAgbGV0IGxudW0gPSBtYXRjaCBsbnVtIHdpdGggU29tZSBsbnVtIC0+IGxudW0gfCBOb25lIC0+IDEgaW5cbiAgICBsZXQgaW5mbyA9IHsgZXJyb3JfaW5mbyB3aXRoIGxpbmUgPSBsbnVtICsgZXJyb3JfaW5mby5saW5lIC0gMSB9IGluXG4gICAgbGV0IGZuYW1lID0gbWF0Y2ggZm5hbWUgd2l0aFxuICAgICAgfCBOb25lIC0+IFwiTGluZVwiXG4gICAgICB8IFNvbWUgbmFtZSAtPiBcIkZpbGUgXCIgXiBuYW1lIF4gXCIsIGxpbmVcIlxuICAgIGluXG4gICAgbGV0IGxvYyA9IFByaW50Zi5zcHJpbnRmIFwiJXMgJWQgY2hhcnMgJWQtJWQ6IFwiIGZuYW1lIGluZm8ubGluZSBpbmZvLnN0YXJ0X2NoYXIgaW5mby5lbmRfY2hhciBpblxuICAgIGxvYyBeIGluZm8ubXNnXG5cbiAgbGV0IGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIGYgYSBmbmFtZSBsbnVtID1cbiAgICBtYXRjaCBmIGEgd2l0aFxuICAgIHwgT2sganNvbiAtPiBqc29uXG4gICAgfCBFcnJvciBlcnJvcl9pbmZvIC0+IGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJvcl9pbmZvIGZuYW1lIGxudW0pXG5cbiAgKCogUmVhZGVycyAqKVxuICBsZXQgZnJvbV9zdHJpbmcgP2J1ZjpfID9mbmFtZSA/bG51bSBzID1cbiAgICBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBJbnRlcm5hbF9yZWFkZXIuanNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyBzIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9jaGFubmVsID9idWY6XyA/Zm5hbWUgP2xudW0gaW5fY2hhbm5lbCA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfY2hhbm5lbF9lcnJvcl9pbmZvIGluX2NoYW5uZWwgZm5hbWUgbG51bVxuXG4gIGxldCBmcm9tX2ZpbGUgP2J1ZjpfID9mbmFtZSA/bG51bSBmaWxlbmFtZSA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9sZXhidWYgbGV4c3RhdGUgP3N0cmVhbSBsZXhidWYgPVxuICAgIGxldCBmbmFtZSA9IGxleHN0YXRlLmZuYW1lIGluXG4gICAgbGV0IGxudW0gPSBTb21lIGxleHN0YXRlLmxudW0gaW5cbiAgICBtYXRjaCBJbnRlcm5hbF9yZWFkZXIuanNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgP3N0cmVhbSBsZXhidWYgd2l0aFxuICAgIHwgT2sgKFNvbWUganNvbikgLT4ganNvblxuICAgIHwgT2sgTm9uZSAtPiBqc29uX2Vycm9yIFwiQmxhbmsgaW5wdXQgZGF0YVwiXG4gICAgfCBFcnJvciBlcnJvcl9pbmZvIC0+IGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJvcl9pbmZvIGZuYW1lIGxudW0pXG5cbiAgbGV0IHJlYWRfdCBsZXhzdGF0ZSBsZXhidWYgPSBmcm9tX2xleGJ1ZiBsZXhzdGF0ZSBsZXhidWZcblxuICBsZXQgc3RyZWFtX2FwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIHN0cmVhbV9mIGEgZm5hbWUgbG51bSA9XG4gICAgbGV0IHN0cmVhbSA9IHN0cmVhbV9mIGEgaW5cbiAgICBsZXQgZiBfaSA9XG4gICAgICBtYXRjaCBTdHJlYW0ubmV4dCBzdHJlYW0gd2l0aFxuICAgICAgfCB2IC0+IFNvbWUgdlxuICAgICAgfCBleGNlcHRpb24gU3RyZWFtLkZhaWx1cmUgLT4gTm9uZVxuICAgICAgfCBleGNlcHRpb24gRXJyb3JfaW5mby5Kc29uX2Vycm9yX2luZm8gZXJyX2luZm8gLT5cbiAgICAgICAganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycl9pbmZvIGZuYW1lIGxudW0pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZyA/YnVmOl8gP2ZuYW1lID9sbnVtIHMgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBJbnRlcm5hbF9yZWFkZXIuc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gcyBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWwgP2J1ZjpfID8oZmluID0gZnVuICgpIC0+ICgpKSA/Zm5hbWUgP2xudW0gaW5fY2hhbm5lbCA9XG4gICAgc3RyZWFtX2FwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIChJbnRlcm5hbF9yZWFkZXIuc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIH5maW4pIGluX2NoYW5uZWwgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9maWxlID9idWY6XyA/Zm5hbWUgP2xudW0gZmlsZW5hbWUgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBJbnRlcm5hbF9yZWFkZXIuc3RyZWFtX2Zyb21fZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fbGV4YnVmIGxleHN0YXRlID8oZmluID0gZnVuICgpIC0+ICgpKSBsZXhidWYgPVxuICAgIGxldCBzdHJlYW0gPSBJbnRlcm5hbF9yZWFkZXIuc3RyZWFtX2Zyb21fbGV4YnVmX2Vycm9yX2luZm8gbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggU3RyZWFtLm5leHQgc3RyZWFtIHdpdGhcbiAgICAgIHwgdiAtPiBTb21lIHZcbiAgICAgIHwgZXhjZXB0aW9uIFN0cmVhbS5GYWlsdXJlIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgfCBleGNlcHRpb24gRXJyb3JfaW5mby5Kc29uX2Vycm9yX2luZm8gZXJyX2luZm8gLT5cbiAgICAgICAgZmluICgpOyBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyX2luZm8gbGV4c3RhdGUuZm5hbWUgKFNvbWUgbGV4c3RhdGUubG51bSkpXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cblxuICBsZXQgbGluZXN0cmVhbV9mcm9tX2NoYW5uZWwgP2J1ZjpfID8oZmluID0gZnVuICgpIC0+ICgpKSA/Zm5hbWUgPyhsbnVtID0gMSkgaWMgPVxuICAgIGxldCBmIGkgPVxuICAgICAgdHJ5XG4gICAgICAgIGxldCBsbnVtID0gbG51bSArIGkgaW5cbiAgICAgICAgbGV0IGxpbmUgPSBpbnB1dF9saW5lIGljIGluIFNvbWUgKGBKc29uIChmcm9tX3N0cmluZyA/Zm5hbWUgfmxudW0gbGluZSkpXG4gICAgICB3aXRoXG4gICAgICAgIHwgRW5kX29mX2ZpbGUgLT4gZmluICgpOyBOb25lXG4gICAgICAgIHwgZXhuXyAtPiBmaW4gKCk7IFNvbWUgKGBFeG4gZXhuXylcbiAgICBpblxuICAgIFN0cmVhbS5mcm9tIGZcblxuICBsZXQgbGluZXN0cmVhbV9mcm9tX2ZpbGUgP2J1ZjpfID9mbmFtZTpfID9sbnVtOl8gZmlsZW5hbWUgPVxuICAgIGxldCBpYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBsaW5lc3RyZWFtX2Zyb21fY2hhbm5lbCB+ZmluOihmdW4gKCkgLT4gY2xvc2VfaW4gaWMpIGljXG5lbmRcblxubW9kdWxlIENvbW1vbl93cml0ZXIgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIG1vZHVsZSBJbnRlcm5hbF93cml0ZXIgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIFdyaXRlcl9zdHJpbmcuTWFrZShDb21wbGlhbmNlKVxuICAgIGluY2x1ZGUgV3JpdGVyX2ZpbGUuTWFrZShDb21wbGlhbmNlKVxuICAgIGluY2x1ZGUgUHJldHR5Lk1ha2UoQ29tcGxpYW5jZSlcbiAgZW5kXG5cbiAgbGV0IHRvX3N0YW5kYXJkIGpzb24gPVxuICAgIGxldCByZWMgbWFwIG5vZGUgPVxuICAgICAgbWF0Y2ggbm9kZSB3aXRoXG4gICAgICB8IGBOdWxsIC0+IGBOdWxsXG4gICAgICB8IGBCb29sIF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnQgXyBhcyB2IC0+IHYgICgqIGludCBpcyBvayBvbiBvdXRwdXQgKilcbiAgICAgIHwgYEludGxpdCB2IC0+IGBTdHJpbmcgdlxuICAgICAgfCBgRmxvYXQgXyBhcyB2IC0+IHZcbiAgICAgIHwgYEZsb2F0bGl0IHYgLT4gYEZsb2F0IChmbG9hdF9vZl9zdHJpbmcgdilcbiAgICAgIHwgYFN0cmluZyBfIGFzIHYgLT4gdlxuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggU3RyaW5nLmxlbmd0aCBzIHdpdGhcbiAgICAgICAgfCAwIHwgMSAtPiBgU3RyaW5nIHMgICAgICAgICAoKiBtYWxmb3JtZWQsIHNob3VsZCBoYXZlIGRvdWJsZS1xdW90ZXMgYXQgc3RhcnQgYW5kIGVuZCAqKVxuICAgICAgICB8IF8gLT4gYFN0cmluZyAoU3RyaW5nLnN1YiBzIDEgKFN0cmluZy5sZW5ndGggcyAtIDIpKVxuICAgICAgICBlbmRcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIGwpXG4gICAgICB8IGBBc3NvYyBhIC0+IGBBc3NvYyAoTGlzdC5tYXAgKGZ1biAoaWQsIHYpIC0+IChpZCwgbWFwIHYpKSBhKVxuICAgICAgfCBgVHVwbGUgdHBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgdHBsKVxuICAgICAgfCBgVmFyaWFudCAobmFtZSwgam9wdCkgLT4gYmVnaW5cbiAgICAgICAgIG1hdGNoIGpvcHQgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IGBTdHJpbmcgbmFtZVxuICAgICAgICAgfCBTb21lIHYgLT4gYExpc3QgWyBgU3RyaW5nIG5hbWU7IChtYXAgdikgXVxuICAgICAgICBlbmRcbiAgICBpblxuICAgIG1hcCBqc29uXG5cbiAgKCogV3JpdGVycyAqKVxuXG4gIGxldCB0b19zdHJpbmcgP2J1ZjpfID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fc3RyaW5nICh0b19zdGFuZGFyZCBqc29uKSBlbHNlIEludGVybmFsX3dyaXRlci50b19zdHJpbmcganNvblxuXG4gIGxldCB0b19jaGFubmVsID9idWY6XyA/bGVuOl8gPyhzdGQgPSBmYWxzZSkgb3V0X2NoYW5uZWwganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX2NoYW5uZWwgb3V0X2NoYW5uZWwgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fY2hhbm5lbCBvdXRfY2hhbm5lbCBqc29uXG5cbiAgbGV0IHRvX2ZpbGUgP2xlbjpfID8oc3RkID0gZmFsc2UpIGZpbGVuYW1lIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19maWxlIGZpbGVuYW1lICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2ZpbGUgZmlsZW5hbWUganNvblxuXG4gIGxldCB0b19vdXRidWYgPyhzdGQgPSBmYWxzZSkgYnVmIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19idWZmZXIgYnVmICh0b19zdGFuZGFyZCBqc29uKSBlbHNlIEludGVybmFsX3dyaXRlci50b19idWZmZXIgYnVmIGpzb25cblxuICBsZXQgdG9fb3V0cHV0ID9idWY6XyA/bGVuOl8gP3N0ZCBvdXQganNvbiA9XG4gICAgbGV0IHN0ciA9IHRvX3N0cmluZyA/c3RkIGpzb24gaW5cbiAgICBvdXQjb3V0cHV0IHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuICBsZXQgc3RyZWFtX3RvX3N0cmluZyA/YnVmOl8gP2xlbjpfID9zdGQgc3RyZWFtID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBsZXQgKCkgPSBTdHJlYW0uaXRlclxuICAgICAgKGZ1biBqc29uIC0+IHRvX291dGJ1ZiA/c3RkIGJ1ZiBqc29uOyAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtXG4gICAgaW5cbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IHN0cmVhbV90b19jaGFubmVsID9idWY6XyA/bGVuOl8gP3N0ZCBvYyBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19jaGFubmVsID9zdGQgb2MganNvbjsgb3V0cHV0X2NoYXIgb2MgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCBzdHJlYW1fdG9fZmlsZSA/bGVuOl8gP3N0ZCBmaWxlbmFtZSBzdHJlYW0gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGVuYW1lIGluXG4gICAgdHJ5IChzdHJlYW1fdG9fY2hhbm5lbCA/c3RkIG9jIHN0cmVhbTsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cblxuICBsZXQgc3RyZWFtX3RvX291dGJ1ZiA/c3RkIGJ1ZiBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19vdXRidWYgP3N0ZCBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtXG5cbiAgbGV0IHdyaXRlX3QgYnVmIGpzb24gPSB0b19vdXRidWYgYnVmIGpzb25cblxuICAoKiBQcmV0dHkgcHJpbnRlcnMgKilcbiAgbGV0IHByZXR0eV9wcmludCA/KHN0ZCA9IGZhbHNlKSBvdXQganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludCBvdXQgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50IG91dCBqc29uXG5cbiAgbGV0IHByZXR0eV90b19zdHJpbmcgPyhzdGQgPSBmYWxzZSkganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19zdHJpbmcgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX3N0cmluZyBqc29uXG5cbiAgbGV0IHByZXR0eV90b19jaGFubmVsID8oc3RkID0gZmFsc2UpIG9jIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyBqc29uXG5cbiAgKCogVXRpbGl0aWVzICopXG4gIGxldCBzaG93IGpzb24gPSBVdGlsaXRpZXMuanNvbl90b19zdHJpbmdfcmVwciBqc29uXG4gIGxldCBwcCBvdXQganNvbiA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChzaG93IGpzb24pXG5lbmRcblxubW9kdWxlIEJhc2ljID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG4gICAgdHlwZSBqc29uID0gSnNvbi5CYXNpYy5qc29uXG4gICAgdHlwZSBqc29uX3N0cmVhbSA9IEpzb25fc3RyZWFtLkJhc2ljLmpzb25cblxuICAgIG9wZW4gVG9rZW5zXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCBfID0gQ09NUExJQU5DRV9FUlJPUiBcIkludGVnZXIgb3V0IG9mIGJvdW5kc1wiXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IGZhbHNlXG4gICAgbGV0IGxleF90dXBsZSBfID0gZmFsc2VcblxuICAgIGxldCBjb21tZW50X2NoZWNrICgpID0gT2sgKClcblxuICAgIGxldCBudW1iZXJfdG9fc3RyaW5nIGYgPVxuICAgICAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgZiB3aXRoXG4gICAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT5cbiAgICAgICAgSnNvbl9mbG9hdC5zdHJpbmdfb2ZfZmxvYXRfanNvbiBmXG4gICAgICB8IEZQX2luZmluaXRlIC0+XG4gICAgICAgIGlmIGYgPCAwLiB0aGVuIFwiLUluZmluaXR5XCIgZWxzZSBcIkluZmluaXR5XCJcbiAgICAgIHwgRlBfbmFuIC0+XG4gICAgICAgIFwiTmFOXCJcblxuICAgIGxldCBsYXJnZWludCBzID0gYEZsb2F0IChmbG9hdF9vZl9zdHJpbmcgcylcbiAgICBsZXQgaW50ZWdlciBpID0gYEludCBpXG4gICAgbGV0IG51bGwgPSBgTnVsbFxuICAgIGxldCBzdHJpbmcgcyA9IGBTdHJpbmcgc1xuICAgIGxldCBib29sIGIgPSBgQm9vbCBiXG4gICAgbGV0IGFzc29jIGEgPSBgQXNzb2MgYVxuICAgIGxldCBsaXN0IGwgPSBgTGlzdCBsXG4gICAgbGV0IHR1cGxlIF9sID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgIGxldCB2YXJpYW50IF9sID0gcmFpc2UgKEZhaWx1cmUgXCJ2YXJpYW50cyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXQgZlxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdCAoMS4wIC8uIDAuMClcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXQgKC0xLjAgLy4gMC4wKVxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdCAoMC4wIC8uIDAuMClcbiAgICB8IGBGbG9hdGxpdCBfIC0+ICByYWlzZSAoRmFpbHVyZSBcImZsb2F0bGl0IG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcblxuICAgIG1vZHVsZSBTdHJlYW0gPSBzdHJ1Y3RcbiAgICAgIGxldCBudW1iZXIgPSBudW1iZXJcbiAgICAgIGxldCBsYXJnZWludCA9IGxhcmdlaW50XG4gICAgICBsZXQgaW50ZWdlciA9IGludGVnZXJcbiAgICAgIGxldCBudWxsID0gbnVsbFxuICAgICAgbGV0IHN0cmluZyA9IHN0cmluZ1xuICAgICAgbGV0IGJvb2wgPSBib29sXG5cbiAgICAgIGxldCBhcnJheV9zdGFydCAoKSA9IGBBc1xuICAgICAgbGV0IGFycmF5X2VuZCAoKSA9IGBBZVxuICAgICAgbGV0IG9iamVjdF9zdGFydCAoKSA9IGBPc1xuICAgICAgbGV0IG9iamVjdF9lbmQgKCkgPSBgT2VcbiAgICAgIGxldCB0dXBsZV9zdGFydCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB0dXBsZV9lbmQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ2YXJpYW50cyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5CYXNpYy5zb3J0XG5cbiAgbW9kdWxlIFV0aWwgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIFByb2Nlc3MuQmFzaWNcbiAgZW5kXG5lbmRcblxubW9kdWxlIFNhZmUgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbXBsaWFuY2UgPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPVxuICAgICAgW1xuICAgICAgfCBgTnVsbFxuICAgICAgfCBgQm9vbCBvZiBib29sXG4gICAgICB8IGBJbnQgb2YgaW50XG4gICAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgICAgfCBgU3RyaW5nIG9mIHN0cmluZ1xuICAgICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgICAgXVxuXG4gICAgdHlwZSBqc29uX3N0cmVhbSA9IEpzb25fc3RyZWFtLkV4dGVuZGVkLmpzb24gICgqIHlvanNvbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgKilcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBMZXh4ZXJfdXRpbHMudW5lc2NhcGVfc3RyaW5nIHNcbiAgICBsZXQgbGV4X251bWJlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9pbnRlZ2VyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2xhcmdlaW50IHRva2VuID0gdG9rZW5cblxuICAgIGxldCBsZXhfdmFyaWFudCBfID0gdHJ1ZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IHRydWVcblxuICAgIGxldCBjb21tZW50X2NoZWNrICgpID0gT2sgKClcblxuICAgIGxldCBudW1iZXJfdG9fc3RyaW5nIGYgPVxuICAgICAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgZiB3aXRoXG4gICAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT5cbiAgICAgICAgSnNvbl9mbG9hdC5zdHJpbmdfb2ZfZmxvYXRfanNvbiBmXG4gICAgICB8IEZQX2luZmluaXRlIC0+XG4gICAgICAgIGlmIGYgPCAwLiB0aGVuIFwiLUluZmluaXR5XCIgZWxzZSBcIkluZmluaXR5XCJcbiAgICAgIHwgRlBfbmFuIC0+XG4gICAgICAgIFwiTmFOXCJcblxuICAgIGxldCBsYXJnZWludCBzID0gYEludGxpdCBzXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnQgaVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nIHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBsID0gYFR1cGxlIGxcbiAgICBsZXQgdmFyaWFudCBrIHYgPSBgVmFyaWFudCAoaywgdilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdCBmXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0ICgxLjAgLy4gMC4wKVxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdCAoLTEuMCAvLiAwLjApXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0ICgwLjAgLy4gMC4wKVxuICAgIHwgYEZsb2F0bGl0IF8gLT4gIHJhaXNlIChGYWlsdXJlIFwiZmxvYXRsaXQgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gc2FmZSBtb2RlXCIpXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSBgVHNcbiAgICAgIGxldCB0dXBsZV9lbmQgKCkgPSBgVGVcbiAgICAgIGxldCB2YXJpYW50X3N0YXJ0ICgpID0gYFZzXG4gICAgICBsZXQgdmFyaWFudF9lbmQgKCkgPSBgVmVcbiAgICAgIGxldCBuYW1lIHMgPSBgTmFtZSBzXG4gICAgZW5kXG4gIGVuZFxuXG4gIGluY2x1ZGUgQ29tbW9uX3JlYWRlcihDb21wbGlhbmNlKVxuICBpbmNsdWRlIENvbW1vbl93cml0ZXIoQ29tcGxpYW5jZSlcblxuICBsZXQgcHJldHRpZnkgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHByZXR0eV90b19zdHJpbmcgP3N0ZFxuICBsZXQgY29tcGFjdCA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gdG9fc3RyaW5nID9zdGRcblxuICBsZXQgZXF1YWwgPSBVdGlsaXRpZXMuZXF1YWxcbiAgbGV0IHNvcnQgPSBQcm9jZXNzLkV4dGVuZGVkLnNvcnRcblxuICBsZXQgdG9fYmFzaWMganNvbiA6IEJhc2ljLmpzb24gPVxuICAgIGxldCByZWMgbWFwIG5vZGUgPVxuICAgICAgbWF0Y2ggbm9kZSB3aXRoXG4gICAgICB8IGBOdWxsIC0+IGBOdWxsXG4gICAgICB8IGBCb29sIF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnQgXyBhcyB2IC0+IHZcbiAgICAgIHwgYEludGxpdCB2IC0+IGBTdHJpbmcgdlxuICAgICAgfCBgRmxvYXQgXyBhcyB2IC0+IHZcbiAgICAgIHwgYFN0cmluZyBfIGFzIHYgLT4gdlxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgbClcbiAgICAgIHwgYEFzc29jIGEgLT4gYEFzc29jIChMaXN0Lm1hcCAoZnVuIChpZCwgdikgLT4gKGlkLCBtYXAgdikpIGEpXG4gICAgICB8IGBUdXBsZSB0cGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCB0cGwpXG4gICAgICB8IGBWYXJpYW50IChuYW1lLCBqb3B0KSAtPlxuICAgICAgICAgbWF0Y2ggam9wdCB3aXRoXG4gICAgICAgICB8IE5vbmUgLT4gYFN0cmluZyBuYW1lXG4gICAgICAgICB8IFNvbWUgdiAtPiBgTGlzdCBbIGBTdHJpbmcgbmFtZTsgKG1hcCB2KSBdXG4gICAgaW5cbiAgICBtYXAganNvblxuXG4gIG1vZHVsZSBVdGlsID0gc3RydWN0XG4gICAgaW5jbHVkZSBQcm9jZXNzLllvanNvbl9zYWZlXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBSYXcgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbXBsaWFuY2UgPSBzdHJ1Y3RcblxuICB0eXBlIGpzb24gPVxuICAgIFtcbiAgICB8IGBOdWxsXG4gICAgfCBgQm9vbCBvZiBib29sXG4gICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgIHwgYEZsb2F0bGl0IG9mIHN0cmluZ1xuICAgIHwgYFN0cmluZ2xpdCBvZiBzdHJpbmdcbiAgICB8IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdFxuICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgfCBgVmFyaWFudCBvZiAoc3RyaW5nICoganNvbiBvcHRpb24pXG4gICAgXVxuXG4gICAgdHlwZSBqc29uX3N0cmVhbSA9IEpzb25fc3RyZWFtLkV4dGVuZGVkLmpzb24gKCogeW9qc29uIGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0IHN0cmVhbWluZyAqKVxuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IFwiXFxcIlwiIF4gcyBeIFwiXFxcIlwiXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCB0b2tlbiA9IHRva2VuXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IHRydWVcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSB0cnVlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBJbnRsaXQgc1xuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50bGl0IChzdHJpbmdfb2ZfaW50IGkpXG4gICAgbGV0IG51bGwgPSBgTnVsbFxuICAgIGxldCBzdHJpbmcgcyA9IGBTdHJpbmdsaXQgc1xuICAgIGxldCBib29sIGIgPSBgQm9vbCBiXG4gICAgbGV0IGFzc29jIGEgPSBgQXNzb2MgYVxuICAgIGxldCBsaXN0IGwgPSBgTGlzdCBsXG4gICAgbGV0IHR1cGxlIGwgPSBgVHVwbGUgbFxuICAgIGxldCB2YXJpYW50IGsgdiA9IGBWYXJpYW50IChrLCB2KVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0bGl0IChzdHJpbmdfb2ZfZmxvYXQgZilcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXRsaXQgXCJJbmZpbml0eVwiXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0bGl0IFwiLUluZmluaXR5XCJcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXRsaXQgXCJOYU5cIlxuICAgIHwgYEZsb2F0bGl0IGYgLT4gIGBGbG9hdGxpdCBmXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSBgVHNcbiAgICAgIGxldCB0dXBsZV9lbmQgKCkgPSBgVGVcbiAgICAgIGxldCB2YXJpYW50X3N0YXJ0ICgpID0gYFZzXG4gICAgICBsZXQgdmFyaWFudF9lbmQgKCkgPSBgVmVcbiAgICAgIGxldCBuYW1lIHMgPSBgTmFtZSBzXG4gICAgZW5kXG4gIGVuZFxuXG4gIGluY2x1ZGUgQ29tbW9uX3JlYWRlcihDb21wbGlhbmNlKVxuICBpbmNsdWRlIENvbW1vbl93cml0ZXIoQ29tcGxpYW5jZSlcblxuICBsZXQgcHJldHRpZnkgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHByZXR0eV90b19zdHJpbmcgP3N0ZFxuICBsZXQgY29tcGFjdCA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gdG9fc3RyaW5nID9zdGRcblxuICBsZXQgZXF1YWwgPSBVdGlsaXRpZXMuZXF1YWxcbiAgbGV0IHNvcnQgPSBQcm9jZXNzLkV4dGVuZGVkLnNvcnRcbmVuZFxuIiwiaW5jbHVkZSBDb250YWluZXJzTGFiZWxzXG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcbiAgbW9kdWxlIFNldCA9IFNldC5NYWtlIChTdHJpbmcpXG5lbmRcblxubW9kdWxlIFlvanNvbiA9IHN0cnVjdFxuICBpbmNsdWRlIEpzb254dC5Zb2pzb25cbmVuZFxuXG5tb2R1bGUgRW5jb2RpbmdzID0gc3RydWN0XG4gIGxldCB0b19qc3RyIHQgPSBKdi5yZXByIHQgfD4gQnJyLkpzb24uZW5jb2RlXG4gIGxldCB0b19qdiB0ID0gdG9fanN0ciB0IHw+IEp2Lm9mX2pzdHJcblxuICBsZXQgb2ZfanN0ciBqc3RyID1cbiAgICBtYXRjaCBCcnIuSnNvbi5kZWNvZGUganN0ciB3aXRoXG4gICAgfCBPayB2IC0+IE9rIChPYmoubWFnaWMgdilcbiAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICBCcnIuQ29uc29sZS5lcnJvciBbIGVyciBdO1xuICAgICAgICBFcnJvciAoYE1zZyBcIkZhaWxlZCB0byB1bm1hcnNoYWwgZGF0YVwiKVxuXG4gIGxldCBvZl9qdiBqdiA9IEp2LnRvX2pzdHIganYgfD4gb2ZfanN0clxuZW5kXG5cbmxldCByYW5kb21fc3RhdGUgPSBSYW5kb20uZ2V0X3N0YXRlICgpXG5sZXQgbmV3X3V1aWRfdjQgKCkgPSBVdWlkbS52NF9nZW4gcmFuZG9tX3N0YXRlICgpXG5cbigqKiBbdGVlIGYgeF0gYXBwbGllcyBbZl0gdG8gW3hdIGFuZCByZXR1cm5zIFt4XSAqKVxubGV0IHRlZSBmIHggPVxuICBsZXQgKCkgPSBmIHggaW5cbiAgeFxuIiwib3BlbiBTdGRMYWJlbHNcbm9wZW4gTW9yZUxhYmVsc1xub3BlbiEgWW9qc29uXG5cbnR5cGUgdCA9IFlvanNvbi5TYWZlLnRcblxubGV0IHlvanNvbl9vZl91bml0ICgpIDogdCA9IGBOdWxsXG5sZXQgeW9qc29uX29mX2Jvb2wgYiA6IHQgPSBgQm9vbCBiXG5sZXQgeW9qc29uX29mX3N0cmluZyBzdHIgOiB0ID0gYFN0cmluZyBzdHJcbmxldCB5b2pzb25fb2ZfYnl0ZXMgYnl0ZXMgOiB0ID0gYFN0cmluZyAoQnl0ZXMudG9fc3RyaW5nIGJ5dGVzKVxubGV0IHlvanNvbl9vZl9jaGFyIGMgOiB0ID0gYFN0cmluZyAoU3RyaW5nLm1ha2UgMSBjKVxubGV0IHlvanNvbl9vZl9pbnQgbiA6IHQgPSBgSW50IG5cbmxldCB5b2pzb25fb2ZfZmxvYXQgbiA6IHQgPSBgRmxvYXQgblxubGV0IHlvanNvbl9vZl9pbnQzMiAobiA6IEludDMyLnQpIDogdCA9IGBJbnRsaXQgKEludDMyLnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9pbnQ2NCAobiA6IEludDY0LnQpIDogdCA9IGBJbnRsaXQgKEludDY0LnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9uYXRpdmVpbnQgbiA6IHQgPSBgSW50bGl0IChOYXRpdmVpbnQudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX3JlZiB5b2pzb25fb2ZfX2EgcmYgPSB5b2pzb25fb2ZfX2EgIXJmXG5sZXQgeW9qc29uX29mX2xhenlfdCB5b2pzb25fb2ZfX2EgbHYgPSB5b2pzb25fb2ZfX2EgKExhenkuZm9yY2UgbHYpXG5cbmxldCB5b2pzb25fb2Zfb3B0aW9uIHlvanNvbl9vZl9fYSA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHlvanNvbl9vZl9fYSB4XG4gIHwgTm9uZSAtPiBgTnVsbFxuOztcblxubGV0IHlvanNvbl9vZl9wYWlyIHlvanNvbl9vZl9fYSB5b2pzb25fb2ZfX2IgKGEsIGIpID1cbiAgYExpc3QgWyB5b2pzb25fb2ZfX2EgYTsgeW9qc29uX29mX19iIGIgXVxuOztcblxubGV0IHlvanNvbl9vZl90cmlwbGUgeW9qc29uX29mX19hIHlvanNvbl9vZl9fYiB5b2pzb25fb2ZfX2MgKGEsIGIsIGMpID1cbiAgYExpc3QgWyB5b2pzb25fb2ZfX2EgYTsgeW9qc29uX29mX19iIGI7IHlvanNvbl9vZl9fYyBjIF1cbjs7XG5cbigqIExpc3QucmV2IChMaXN0LnJldl9tYXAgLi4uKSBpcyB0YWlsIHJlY3Vyc2l2ZSwgdGhlIE9DYW1sIHN0YW5kYXJkXG4gICBsaWJyYXJ5IExpc3QubWFwIGlzIE5PVC4gKilcbmxldCB5b2pzb25fb2ZfbGlzdCB5b2pzb25fb2ZfX2EgbHN0ID0gYExpc3QgKExpc3QucmV2IChMaXN0LnJldl9tYXAgfmY6eW9qc29uX29mX19hIGxzdCkpXG5cbmxldCB5b2pzb25fb2ZfYXJyYXkgeW9qc29uX29mX19hIGFyID1cbiAgbGV0IGxzdF9yZWYgPSByZWYgW10gaW5cbiAgZm9yIGkgPSBBcnJheS5sZW5ndGggYXIgLSAxIGRvd250byAwIGRvXG4gICAgbHN0X3JlZiA6PSB5b2pzb25fb2ZfX2EgYXIuKGkpIDo6ICFsc3RfcmVmXG4gIGRvbmU7XG4gIGBMaXN0ICFsc3RfcmVmXG47O1xuXG5sZXQgeW9qc29uX29mX2hhc2h0YmwgeW9qc29uX29mX2tleSB5b2pzb25fb2ZfdmFsIGh0YmwgPVxuICBsZXQgY29sbCB+a2V5OmsgfmRhdGE6diBhY2MgPSBgTGlzdCBbIHlvanNvbl9vZl9rZXkgazsgeW9qc29uX29mX3ZhbCB2IF0gOjogYWNjIGluXG4gIGBMaXN0IChIYXNodGJsLmZvbGQgaHRibCB+aW5pdDpbXSB+Zjpjb2xsKVxuOztcblxubGV0IHlvanNvbl9vZl9vcGFxdWUgXyA9IGBTdHJpbmcgXCI8b3BhcXVlPlwiXG5sZXQgeW9qc29uX29mX2Z1biBfID0gYFN0cmluZyBcIjxmdW4+XCJcblxuZXhjZXB0aW9uIE9mX3lvanNvbl9lcnJvciBvZiBleG4gKiB0XG5cbmxldCByZWNvcmRfY2hlY2tfZXh0cmFfZmllbGRzID0gcmVmIHRydWVcbmxldCBvZl95b2pzb25fZXJyb3JfZXhuIGV4YyB5b2pzb24gPSByYWlzZSAoT2ZfeW9qc29uX2Vycm9yIChleGMsIHlvanNvbikpXG5sZXQgb2ZfeW9qc29uX2Vycm9yIHdoYXQgeW9qc29uID0gcmFpc2UgKE9mX3lvanNvbl9lcnJvciAoRmFpbHVyZSB3aGF0LCB5b2pzb24pKVxuXG5sZXQgdW5pdF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTnVsbCAtPiAoKVxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwidW5pdF9vZl95b2pzb246IGBOdWxsIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGJvb2xfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEJvb2wgdiAtPiB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJib29sX29mX3lvanNvbjogdHJ1ZS9mYWxzZSBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBzdHJpbmdfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT4gc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJzdHJpbmdfb2ZfeW9qc29uOiBzdHJpbmcgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYnl0ZXNfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT4gQnl0ZXMub2Zfc3RyaW5nIHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYnl0ZXNfb2ZfeW9qc29uOiBzdHJpbmcgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgY2hhcl9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPlxuICAgIGlmIFN0cmluZy5sZW5ndGggc3RyIDw+IDFcbiAgICB0aGVuIG9mX3lvanNvbl9lcnJvciBcImNoYXJfb2ZfeW9qc29uOiBzdHJpbmcgbXVzdCBjb250YWluIG9uZSBjaGFyYWN0ZXIgb25seVwiIHlvanNvbjtcbiAgICBzdHIuWzBdXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJjaGFyX29mX3lvanNvbjogc3RyaW5nIG9mIHNpemUgb25lIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50IHYgLT4gdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBmbG9hdF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgRmxvYXQgdiAtPiB2XG4gIHwgYEludCBpIC0+IGZsb2F0X29mX2ludCBpXG4gIHwgYEludGxpdCBzdHIgLT4gZmxvYXRfb2Zfc3RyaW5nIHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiZmxvYXRfb2ZfeW9qc29uOiBmbG9hdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnQzMl9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBJbnQzMi5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IEludDMyLm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnQzMl9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50NjRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gSW50NjQub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBJbnQ2NC5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50NjRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IG5hdGl2ZWludF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBOYXRpdmVpbnQub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBOYXRpdmVpbnQub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcIm5hdGl2ZWludF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgcmVmX29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID0gcmVmIChhX19vZl95b2pzb24geW9qc29uKVxubGV0IGxhenlfdF9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9IExhenkuZnJvbV92YWwgKGFfX29mX3lvanNvbiB5b2pzb24pXG5cbmxldCBvcHRpb25fb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBOdWxsIC0+IE5vbmVcbiAgfCBlbCAtPiBTb21lIChhX19vZl95b2pzb24gZWwpXG47O1xuXG5sZXQgcGFpcl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIGJfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFsgYV95b2pzb247IGJfeW9qc29uIF0gLT5cbiAgICBsZXQgYSA9IGFfX29mX3lvanNvbiBhX3lvanNvbiBpblxuICAgIGxldCBiID0gYl9fb2ZfeW9qc29uIGJfeW9qc29uIGluXG4gICAgYSwgYlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwicGFpcl9vZl95b2pzb246IGludmFsaWQgZm9ybWF0XCIgeW9qc29uXG47O1xuXG5sZXQgdHJpcGxlX29mX3lvanNvbiBhX19vZl95b2pzb24gYl9fb2ZfeW9qc29uIGNfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFsgYV95b2pzb247IGJfeW9qc29uOyBjX3lvanNvbiBdIC0+XG4gICAgbGV0IGEgPSBhX19vZl95b2pzb24gYV95b2pzb24gaW5cbiAgICBsZXQgYiA9IGJfX29mX3lvanNvbiBiX3lvanNvbiBpblxuICAgIGxldCBjID0gY19fb2ZfeW9qc29uIGNfeW9qc29uIGluXG4gICAgYSwgYiwgY1xuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwidHJpcGxlX29mX3lvanNvbjogaW52YWxpZCBmb3JtYXRcIiB5b2pzb25cbjs7XG5cbmxldCBsaXN0X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBsc3QgLT5cbiAgICBsZXQgcmV2X2xzdCA9IExpc3QucmV2X21hcCBsc3QgfmY6YV9fb2ZfeW9qc29uIGluXG4gICAgTGlzdC5yZXYgcmV2X2xzdFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwibGlzdF9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYXJyYXlfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFtdIC0+IFt8fF1cbiAgfCBgTGlzdCAoaCA6OiB0KSAtPlxuICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCB0ICsgMSBpblxuICAgIGxldCByZXMgPSBBcnJheS5tYWtlIGxlbiAoYV9fb2ZfeW9qc29uIGgpIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiByZXNcbiAgICAgIHwgaCA6OiB0IC0+XG4gICAgICAgIHJlcy4oaSkgPC0gYV9fb2ZfeW9qc29uIGg7XG4gICAgICAgIGxvb3AgKGkgKyAxKSB0XG4gICAgaW5cbiAgICBsb29wIDEgdFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYXJyYXlfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGhhc2h0Ymxfb2ZfeW9qc29uIGtleV9vZl95b2pzb24gdmFsX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IGxzdCAtPlxuICAgIGxldCBodGJsID0gSGFzaHRibC5jcmVhdGUgMCBpblxuICAgIGxldCBhY3QgPSBmdW5jdGlvblxuICAgICAgfCBgTGlzdCBbIGtfeW9qc29uOyB2X3lvanNvbiBdIC0+XG4gICAgICAgIEhhc2h0YmwuYWRkIGh0YmwgfmtleTooa2V5X29mX3lvanNvbiBrX3lvanNvbikgfmRhdGE6KHZhbF9vZl95b2pzb24gdl95b2pzb24pXG4gICAgICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaGFzaHRibF9vZl95b2pzb246IHR1cGxlIGxpc3QgbmVlZGVkXCIgeW9qc29uXG4gICAgaW5cbiAgICBMaXN0Lml0ZXIgbHN0IH5mOmFjdDtcbiAgICBodGJsXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJoYXNodGJsX29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBvcGFxdWVfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciBcIm9wYXF1ZV9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IG9wYXF1ZSB2YWx1ZXNcIiB5b2pzb25cbjs7XG5cbmxldCBmdW5fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciBcImZ1bl9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IGZ1bmN0aW9uIHZhbHVlc1wiIHlvanNvblxuOztcblxubW9kdWxlIFByaW1pdGl2ZXMgPSBzdHJ1Y3RcbiAgbGV0IHlvanNvbl9vZl9hcnJheSA9IHlvanNvbl9vZl9hcnJheVxuICBsZXQgYXJyYXlfb2ZfeW9qc29uID0gYXJyYXlfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfYm9vbCA9IHlvanNvbl9vZl9ib29sXG4gIGxldCBib29sX29mX3lvanNvbiA9IGJvb2xfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfY2hhciA9IHlvanNvbl9vZl9jaGFyXG4gIGxldCBjaGFyX29mX3lvanNvbiA9IGNoYXJfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfZmxvYXQgPSB5b2pzb25fb2ZfZmxvYXRcbiAgbGV0IGZsb2F0X29mX3lvanNvbiA9IGZsb2F0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludCA9IHlvanNvbl9vZl9pbnRcbiAgbGV0IGludF9vZl95b2pzb24gPSBpbnRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50MzIgPSB5b2pzb25fb2ZfaW50MzJcbiAgbGV0IGludDMyX29mX3lvanNvbiA9IGludDMyX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludDY0ID0geW9qc29uX29mX2ludDY0XG4gIGxldCBpbnQ2NF9vZl95b2pzb24gPSBpbnQ2NF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9saXN0ID0geW9qc29uX29mX2xpc3RcbiAgbGV0IGxpc3Rfb2ZfeW9qc29uID0gbGlzdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9uYXRpdmVpbnQgPSB5b2pzb25fb2ZfbmF0aXZlaW50XG4gIGxldCBuYXRpdmVpbnRfb2ZfeW9qc29uID0gbmF0aXZlaW50X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX29wdGlvbiA9IHlvanNvbl9vZl9vcHRpb25cbiAgbGV0IG9wdGlvbl9vZl95b2pzb24gPSBvcHRpb25fb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfcmVmID0geW9qc29uX29mX3JlZlxuICBsZXQgcmVmX29mX3lvanNvbiA9IHJlZl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9zdHJpbmcgPSB5b2pzb25fb2Zfc3RyaW5nXG4gIGxldCBzdHJpbmdfb2ZfeW9qc29uID0gc3RyaW5nX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2J5dGVzID0geW9qc29uX29mX2J5dGVzXG4gIGxldCBieXRlc19vZl95b2pzb24gPSBieXRlc19vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl91bml0ID0geW9qc29uX29mX3VuaXRcbiAgbGV0IHVuaXRfb2ZfeW9qc29uID0gdW5pdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9sYXp5X3QgPSB5b2pzb25fb2ZfbGF6eV90XG4gIGxldCBsYXp5X3Rfb2ZfeW9qc29uID0gbGF6eV90X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2hhc2h0YmwgPSB5b2pzb25fb2ZfaGFzaHRibFxuICBsZXQgaGFzaHRibF9vZl95b2pzb24gPSBoYXNodGJsX29mX3lvanNvblxuZW5kXG4iLCJtb2R1bGUgWW9qc29uX2NvbnZfZXJyb3IgPSBZb2pzb25fY29udl9lcnJvclxubW9kdWxlIFlvanNvbl9jb252ID0gWW9qc29uX2NvbnZcbm1vZHVsZSBZb2pzb25hYmxlID0gWW9qc29uYWJsZV9pbnRmXG5tb2R1bGUgWW9qc29uID0gWW9qc29uXG5cbm1vZHVsZSBPcHRpb24gPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2Egb3B0aW9uID1cbiAgICB8IE5vbmVcbiAgICB8IFNvbWUgb2YgJ2FcbmVuZFxuXG5leHRlcm5hbCBpZ25vcmUgOiBfIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuZXh0ZXJuYWwgcG9seV9lcXVhbCA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5cbmxldCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IGZ1biB4IC0+ICF4XG4iLCJtb2R1bGUgQXBpID0gSmVsbHlmaW5fYXBpXG5cbnR5cGUgY3JlZGVudGlhbHMgPSB7IGJhc2VfdXJsIDogc3RyaW5nOyB1c2VybmFtZSA6IHN0cmluZzsgcGFzc3dvcmQgOiBzdHJpbmcgfVxuXG50eXBlIGNvbm5leGlvbiA9IHtcbiAgYmFzZV91cmwgOiBzdHJpbmc7XG4gIGF1dGhfcmVzcG9uc2UgOiBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUucmVzcG9uc2U7XG59XG5cbmxldCBnZXRfdG9rZW4gdCA9IHQuYXV0aF9yZXNwb25zZS5BcGkuQXV0aGVudGljYXRlX2J5X25hbWUuYWNjZXNzX3Rva2VuXG5cbmxldCBjb25uZWN0IGNyZWRlbnRpYWxzID1cbiAgbGV0IG1vZHVsZSBBdXRoID0gQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCB7IGJhc2VfdXJsOyB1c2VybmFtZTsgcGFzc3dvcmQgfSA9IGNyZWRlbnRpYWxzIGluXG4gIGxldCBhdXRoID0geyBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUudXNlcm5hbWU7IHB3ID0gcGFzc3dvcmQgfSBpblxuICBsZXQrIGF1dGhfcmVzcG9uc2UgPSBBcGkucmVxdWVzdCB+YmFzZV91cmwgKG1vZHVsZSBBdXRoKSBhdXRoICgpIGluXG4gIHsgYmFzZV91cmw7IGF1dGhfcmVzcG9uc2UgfVxuXG5sZXQgcXVlcnkgdCA9XG4gIGxldCB0b2tlbiA9IGdldF90b2tlbiB0IGluXG4gIGxldCBiYXNlX3VybCA9IHQuYmFzZV91cmwgaW5cbiAgSmVsbHlmaW5fYXBpLnJlcXVlc3QgfmJhc2VfdXJsIH50b2tlblxuIiwib3BlbiBTdGRcbm9wZW4gQnJyXG5cbnR5cGUgdGFnID0gQmxvY2sgb2YgaW50IHwgSW50IG9mIGludFxuXG5sZXQgdGFnX29mIHYgPVxuICAoKiB3b3cgd293IHdvdy4gaXMgdGhhdCBva2F5eWlzaCA/KilcbiAgbGV0IG9iaiA9IE9iai5yZXByIHYgaW5cbiAgaWYgT2JqLmlzX2Jsb2NrIG9iaiB0aGVuIEJsb2NrIChPYmoudGFnIG9iaikgZWxzZSBJbnQgKE9iai5tYWdpYyBvYmopXG5cbm1vZHVsZSB0eXBlIFF1ZXJpZXMgPSBzaWdcbiAgdHlwZSAnYSBxdWVyeVxuICB0eXBlICdhIGV2ZW50XG5lbmRcblxubW9kdWxlIE1ha2UgKFEgOiBRdWVyaWVzKSA9IHN0cnVjdFxuICB0eXBlIGVycm9yID0gWyBgSnYgb2YgSnYuRXJyb3IudCB8IGBNc2cgb2Ygc3RyaW5nIF1cbiAgdHlwZSAnYSBxdWVyeSA9ICdhIFEucXVlcnlcbiAgdHlwZSAnYSBldmVudCA9ICdhIFEuZXZlbnRcbiAgdHlwZSAnYSB3aXRoX3V1aWQgPSB7IHV1aWQgOiBzdHJpbmc7IGRhdGEgOiAnYSB9XG4gIHR5cGUgJ2EgbWVzc2FnZSA9IEFuc3dlciBvZiAnYSB3aXRoX3V1aWQgfCBFdmVudCBvZiAoJ2EgZXZlbnQgKiAnYSlcbiAgdHlwZSBsaXN0ZW5lciA9IHN0cmluZ1xuXG4gICgqIHRvZG86Y2hlY2sgdGhhdCB0aGUgd29ya2VyIGFuZCB0aGUgY2xpZW50IHNoYXJlIHRoZSBzYW1lIGFwaT8gKilcblxuICBtb2R1bGUgU3RhcnRfY2xpZW50IChQIDogc2lnXG4gICAgdmFsIHVybCA6IHN0cmluZ1xuICBlbmQpID1cbiAgc3RydWN0XG4gICAgbGV0IGZ1dHVyZXMgOiAoc3RyaW5nLCBKdi50IC0+IHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG4gICAgbGV0IGxpc3RlbmVycyA6ICh0YWcsIEp2LnQgLT4gdW5pdCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNjRcbiAgICBsZXQgd29ya2VyID0gQnJyX3dlYndvcmtlcnMuV29ya2VyLmNyZWF0ZSBAQCBKc3RyLm9mX3N0cmluZyBQLnVybFxuXG4gICAgbGV0IHF1ZXJ5ICh0eXBlIGEpIChxdWVyeSA6IGEgcXVlcnkpIDogKGEsIGVycm9yKSBGdXQucmVzdWx0ID1cbiAgICAgIGxldCB1dWlkID0gbmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nIGluXG4gICAgICBsZXQgZnV0LCBzZXQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgICBsZXQgc2V0IGp2ID0gc2V0IEBAIEVuY29kaW5ncy5vZl9qdiBqdiBpblxuICAgICAgbGV0IHF1ZXJ5ID0geyB1dWlkOyBkYXRhID0gcXVlcnkgfSB8PiBFbmNvZGluZ3MudG9fanN0ciBpblxuICAgICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLnBvc3Qgd29ya2VyIChKdi5vZl9qc3RyIHF1ZXJ5KTtcbiAgICAgIEhhc2h0YmwuYWRkIGZ1dHVyZXMgdXVpZCBzZXQ7XG4gICAgICBmdXRcblxuICAgIGxldCBsaXN0ZW4gKHR5cGUgYSkgKGV2ZW50IDogYSBldmVudCkgfihmIDogYSAtPiB1bml0KSA6IGxpc3RlbmVyID1cbiAgICAgIGxldCB1dWlkID0gbmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nIGluXG4gICAgICBsZXQgc2V0IGp2ID0gZiAoT2JqLm1hZ2ljIGp2KSBpblxuICAgICAgSGFzaHRibC5hZGQgbGlzdGVuZXJzICh0YWdfb2YgZXZlbnQpIHNldDtcbiAgICAgIHV1aWRcblxuICAgIGxldCBvbl9tZXNzYWdlIGV2ID1cbiAgICAgIGxldCBtZXNzYWdlID0gRXYuYXNfdHlwZSBldiBpblxuICAgICAgbGV0IG9wZW4gUmVzdWx0IGluXG4gICAgICBpZ25vcmUgKCogVE9ETzogaGFuZGxlciBlcnJvcnMgKilcbiAgICAgIEBAXG4gICAgICBsZXQrIG1lc3NhZ2UgPVxuICAgICAgICBCcnJfaW8uTWVzc2FnZS5Fdi5kYXRhIG1lc3NhZ2UgfD4gSnYudG9fanN0ciB8PiBFbmNvZGluZ3Mub2ZfanN0clxuICAgICAgaW5cbiAgICAgIG1hdGNoIG1lc3NhZ2Ugd2l0aFxuICAgICAgfCBFdmVudCAoZSwgdikgLT5cbiAgICAgICAgICBIYXNodGJsLmZpbmRfYWxsIGxpc3RlbmVycyAodGFnX29mIGUpIHw+IExpc3QuaXRlciB+ZjooZnVuIGYgLT4gZiB2KVxuICAgICAgfCBBbnN3ZXIgeyB1dWlkOyBkYXRhIH0gLT5cbiAgICAgICAgICBsZXQgZiA9IEhhc2h0YmwuZmluZCBmdXR1cmVzIHV1aWQgaW5cbiAgICAgICAgICBIYXNodGJsLnJlbW92ZSBmdXR1cmVzIHV1aWQ7XG4gICAgICAgICAgZiBkYXRhXG5cbiAgICBsZXQgXyA9XG4gICAgICBFdi5saXN0ZW4gQnJyX2lvLk1lc3NhZ2UuRXYubWVzc2FnZSBvbl9tZXNzYWdlXG4gICAgICBAQCBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuYXNfdGFyZ2V0IHdvcmtlclxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBXb3JrZXJfaW1wbCA9IGZ1bmN0b3IgKCkgLT4gc2lnXG4gICAgdmFsIG9uX3F1ZXJ5IDogJ2EgcXVlcnkgLT4gKCdhLCBlcnJvcikgRnV0LnJlc3VsdFxuICBlbmRcblxuICBsZXQgZGlzcGF0Y2hfZXZlbnQgKHR5cGUgYSkgKGUgOiBhIGV2ZW50KSAodiA6IGEpID1cbiAgICAoKiBsZXQgZGF0YSA9IEVuY29kaW5ncy5tYXJzaGFsX3RvX2pzdHIgfD4gSnYub2ZfanN0ciBpbiAqKVxuICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5HLnBvc3QgKEVuY29kaW5ncy50b19qc3RyIChFdmVudCAoZSwgdikpIHw+IEp2Lm9mX2pzdHIpXG5cbiAgKCoqIEV4ZWN1dGUgVydzIGJvZHkgYW5kIGNvbmZpZ3VyZSBtZXNzYWdpbmcgKilcbiAgbW9kdWxlIE1ha2Vfd29ya2VyIChXIDogV29ya2VyX2ltcGwpID0gc3RydWN0XG4gICAgb3BlbiBCcnJcbiAgICBtb2R1bGUgVyA9IFcgKClcblxuICAgIGxldCBvbl9tZXNzYWdlIGV2ID1cbiAgICAgIGxldCBtZXNzYWdlID0gRXYuYXNfdHlwZSBldiBpblxuICAgICAgbGV0IG9wZW4gUmVzdWx0IGluXG4gICAgICBpZ25vcmUgKCogVE9ETzogaGFuZGxlciBlcnJvcnMgKilcbiAgICAgIEBAXG4gICAgICBsZXQrICh7IHV1aWQ7IGRhdGEgfSA6ICdhIHF1ZXJ5IHdpdGhfdXVpZCkgPVxuICAgICAgICBCcnJfaW8uTWVzc2FnZS5Fdi5kYXRhIG1lc3NhZ2UgfD4gSnYudG9fanN0ciB8PiBFbmNvZGluZ3Mub2ZfanN0clxuICAgICAgaW5cbiAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICBsZXQrIHJlc3VsdCA9IFcub25fcXVlcnkgZGF0YSBpblxuICAgICAgbGV0IGRhdGEgPSBFbmNvZGluZ3MudG9fanN0ciByZXN1bHQgfD4gSnYub2ZfanN0ciBpblxuICAgICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLkcucG9zdFxuICAgICAgICAoRW5jb2RpbmdzLnRvX2pzdHIgKEFuc3dlciB7IHV1aWQ7IGRhdGEgfSkgfD4gSnYub2ZfanN0cilcblxuICAgIGxldCBfID0gRXYubGlzdGVuIEJycl9pby5NZXNzYWdlLkV2Lm1lc3NhZ2Ugb25fbWVzc2FnZSBHLnRhcmdldFxuICBlbmRcbmVuZFxuIiwib3BlbiBTdGRcblxubW9kdWxlIFNvcnQgPSBzdHJ1Y3RcbiAgdHlwZSBjcml0ZXJpYSA9IERhdGVfYWRkZWQgfCBOYW1lXG4gIHR5cGUgZGlyZWN0aW9uID0gQXNjIHwgRGVzY1xuICB0eXBlIHQgPSBTb21lIG9mIGNyaXRlcmlhICogZGlyZWN0aW9uIHwgUmFuZG9tXG5cbiAgbGV0IG9mX3N0cmluZyA/KGRpcmVjdGlvbiA9IEFzYykgPSBmdW5jdGlvblxuICAgIHwgXCJkYXRlX2FkZGVkXCIgLT4gU29tZSAoRGF0ZV9hZGRlZCwgZGlyZWN0aW9uKVxuICAgIHwgXCJuYW1lXCIgLT4gU29tZSAoTmFtZSwgZGlyZWN0aW9uKVxuICAgIHwgXCJyYW5kb21cIiAtPiBSYW5kb21cbiAgICB8IF8gLT4gZmFpbHdpdGggXCJ3cm9uZyBzb3J0IG9mIHNvcnRcIlxuZW5kXG5cbigqKiBTb21lIHNvcnRzIHJlcXVpcmUgYSBjdXN0b20gb3JkZXJpbmcgd2hpY2ggaXMgZG9uZSB1c2luZyBhIHRhYmxlIG9mIGluZGV4ZXMuIEZvciBleGFtcGxlLCB0byBnZXQgYSByYW5kb20gc29ydCB3ZSBzaW1wbGUgc2h1ZmZsZSBhbiBhcnJheSB3aGljaCBzaXplIGlzIHRoZSBvbmUgb2YgdGhlIHJlc3VsdC4gKilcbm1vZHVsZSBPcmRlciA9IHN0cnVjdFxuICB0eXBlIHQgPSBJbml0aWFsIHwgQ3VzdG9tIG9mIGludCBhcnJheVxuXG4gIGxldCBvZl9zb3J0IH5zaXplID0gZnVuY3Rpb25cbiAgICB8IFNvcnQuUmFuZG9tIC0+XG4gICAgICAgIGxldCB0YmwgPSBBcnJheS5pbml0IHNpemUgfmY6RnVuLmlkIGluXG4gICAgICAgIGxldCAoKSA9IEFycmF5LnNodWZmbGUgdGJsIGluXG4gICAgICAgIEN1c3RvbSB0YmxcbiAgICB8IF8gLT4gSW5pdGlhbFxuXG4gIGxldCBhcHBseSB0IGkgPVxuICAgIG1hdGNoIHQgd2l0aCBJbml0aWFsIC0+IGkgfCBDdXN0b20gYSAtPiAoKiB0b2RvIGNoZWNrIGJvdW5kcyAqKSBhLihpKVxuZW5kXG5cbnR5cGUgJ2Egc2VsZWN0aW9uID0gQWxsIHwgT25seSBvZiAnYSBsaXN0XG50eXBlIGtpbmQgPSBBdWRpb1xudHlwZSBmaWx0ZXIgPSBTZWFyY2ggb2Ygc3RyaW5nXG5cbnR5cGUgcmVxID0ge1xuICBraW5kIDoga2luZDtcbiAgc3JjX3ZpZXdzIDogc3RyaW5nIHNlbGVjdGlvbjtcbiAgc29ydCA6IFNvcnQudDtcbiAgZmlsdGVycyA6IGZpbHRlciBsaXN0O1xufVxuXG50eXBlIHQgPSB7XG4gIHV1aWQgOiBVdWlkbS50O1xuICByZXF1ZXN0IDogcmVxO1xuICBvcmRlciA6IE9yZGVyLnQ7XG4gIHN0YXJ0X29mZnNldCA6IGludDtcbiAgaXRlbV9jb3VudCA6IGludDtcbn1cblxubGV0IGl0ZW1fY291bnQgdCA9IHQuaXRlbV9jb3VudCAtIHQuc3RhcnRfb2Zmc2V0XG5cbmxldCByZXEga2luZCA/KHNyY192aWV3cyA9IEFsbCkgPyhzb3J0ID0gU29ydC4oU29tZSAoRGF0ZV9hZGRlZCwgRGVzYykpKVxuICAgID8oZmlsdGVycyA9IFtdKSAoKSA9XG4gIHsga2luZDsgc3JjX3ZpZXdzOyBzb3J0OyBmaWx0ZXJzIH1cblxubGV0IGhhc2ggcmVxID0gSGFzaHRibC5oYXNoIChyZXEuc3JjX3ZpZXdzLCByZXEuZmlsdGVycylcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIERTID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxudHlwZSBzZXJ2ZXIgPSBzdHJpbmcgKiBEUy5jb25uZXhpb25cblxubW9kdWxlIFF1ZXJpZXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBxdWVyeSA9XG4gICAgfCBTZXRfc2Vzc2lvbl91dWlkIDogc3RyaW5nIC0+IHVuaXQgcXVlcnlcbiAgICB8IEFkZF9zZXJ2ZXJzIDogc2VydmVyIGxpc3QgLT4gdW5pdCBxdWVyeVxuICAgIHwgR2V0X2FsbCA6IHVuaXQgLT4gQXBpLkl0ZW0udCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfbGlicmFyaWVzIDogdW5pdCAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyA6IHN0cmluZyAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBDcmVhdGVfdmlldyA6IFZpZXcucmVxIC0+IFZpZXcudCBxdWVyeVxuICAgIHwgR2V0IDogVmlldy50ICogaW50IGFycmF5IC0+IFN0b3Jlcy5JdGVtcy50IG9wdGlvbiBhcnJheSBxdWVyeVxuXG4gIHR5cGUgJ2EgZXZlbnQgPSBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgOiAoc3RyaW5nICogU3luYy5yZXBvcnQpIGV2ZW50XG5lbmRcblxuaW5jbHVkZSBXb3JrZXJfYXBpLk1ha2UgKFF1ZXJpZXMpXG4iLCJtb2R1bGUgU3RvcmVzID0gU3RvcmVzXG5tb2R1bGUgU3luYyA9IFN5bmNcbm1vZHVsZSBWaWV3ID0gVmlld1xub3BlbiBCcnJlclxub3BlbiBCcnJcbm1vZHVsZSBPSSA9IFN0b3Jlcy5PcmRlcnJlZF9pdGVtc19zdG9yZVxubW9kdWxlIEkgPSBTdG9yZXMuSXRlbXNfc3RvcmVcbm1vZHVsZSBWRiA9IFN0b3Jlcy5WaXJ0dWFsX2ZvbGRlcl9zdG9yZVxubW9kdWxlIFdvcmtlcl9hcGkgPSBEYl93b3JrZXJfYXBpXG5cbm1vZHVsZSBJdGVtX3N0b3JlID0gc3RydWN0XG4gIGluY2x1ZGUgU3RvcmVzLkl0ZW1zX3N0b3JlXG5cbiAgbW9kdWxlIEluZGV4ID0gc3RydWN0XG4gICAgbW9kdWxlIElkID0gU3RvcmVzLkl0ZW1zQnlJZFxuICAgIG1vZHVsZSBEYXRlX2FkZGVkID0gU3RvcmVzLkl0ZW1zQnlEYXRlQWRkZWRcbiAgICBtb2R1bGUgVHlwZV9OYW1lID0gU3RvcmVzLkl0ZW1zQnlUeXBlQW5kTmFtZVxuICAgIG1vZHVsZSBLaW5kX1ZpZXcgPSBTdG9yZXMuSXRlbXNCeVZpZXdBbmRLaW5kXG4gIGVuZFxuZW5kXG5cbmxldCBvbl91cGdyYWRlX25lZWRlZCBlIHEgPVxuICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICBsZXQgb2xkX3ZlcnNpb24sIG5ld192ZXJzaW9uID1cbiAgICBsZXQgdiA9IEV2LmFzX3R5cGUgZSBpblxuICAgIEV2ZW50cy5WZXJzaW9uX2NoYW5nZS4ob2xkX3ZlcnNpb24gdiwgbmV3X3ZlcnNpb24gdilcbiAgaW5cbiAgQ29uc29sZS5pbmZvXG4gICAgW1xuICAgICAgXCJVcGdyYWRpbmcgaW5kZXhlZF9kYiBzY2hlbWEgZnJvbSB2ZXJzaW9uXCI7IG9sZF92ZXJzaW9uOyBcInRvXCI7IG5ld192ZXJzaW9uO1xuICAgIF07XG4gIGxldCBkYiA9IFJlcXVlc3QucmVzdWx0IHEgaW5cbiAgbGV0IHN0b3JlcyA9IERhdGFiYXNlLm9iamVjdF9zdG9yZV9uYW1lcyBkYiBpblxuICBDb25zb2xlLmluZm8gWyBcIkVyYXNpbmcgZXhpc3Rpbmcgc3RvcmVzXCIgXTtcbiAgQXJyYXkuaXRlciAoRGF0YWJhc2UuZGVsZXRlX29iamVjdF9zdG9yZSBkYikgc3RvcmVzO1xuICBsZXQgbGlzdCA9XG4gICAgRGF0YWJhc2UuY3JlYXRlX29iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB+YXV0b19pbmNyZW1lbnQ6ZmFsc2UgZGJcbiAgaW5cbiAgbGV0IGl0ZW1zID1cbiAgICBEYXRhYmFzZS5jcmVhdGVfb2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCB2aXJ0dWFsX2ZvbGRlcnMgPVxuICAgIERhdGFiYXNlLmNyZWF0ZV9vYmplY3Rfc3RvcmUgKG1vZHVsZSBWRikgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCBpbmRleF9kYXRlX2FkZGVkID1cbiAgICBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5RGF0ZUFkZGVkKSBpdGVtc1xuICBpblxuICBsZXQgXyA9IEkuY3JlYXRlX2luZGV4IChtb2R1bGUgU3RvcmVzLkl0ZW1zQnlUeXBlQW5kTmFtZSkgaXRlbXMgaW5cbiAgbGV0IF8gPSBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5Vmlld0FuZEtpbmQpIGl0ZW1zIGluXG4gIGxldCBfID0gSS5jcmVhdGVfaW5kZXggKG1vZHVsZSBTdG9yZXMuSXRlbXNCeUlkKSBpdGVtcyBpblxuICBDb25zb2xlLmluZm9cbiAgICBbIFwiU3RvcmVzIGNyZWF0ZWQ6XCI7IGxpc3Q7IGl0ZW1zOyBpbmRleF9kYXRlX2FkZGVkOyB2aXJ0dWFsX2ZvbGRlcnMgXVxuXG5sZXQgd2l0aF9pZGIgP3ZlcnNpb24gfm5hbWUgZiA9XG4gIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gIGxldCBmIF9ldiBkYnIgPVxuICAgIGxldCBkYiA9IFJlcXVlc3QucmVzdWx0IGRiciBpblxuICAgIGYgZGJcbiAgaW5cbiAgZ2V0X2ZhY3RvcnkgKClcbiAgfD4gRmFjdG9yeS5vcGVuJyB+bmFtZSA/dmVyc2lvblxuICB8PiBPcGVuX2RiX3JlcXVlc3Qub25fdXBncmFkZV9uZWVkZWQgfmY6b25fdXBncmFkZV9uZWVkZWRcbiAgfD4gUmVxdWVzdC5vbl9zdWNjZXNzIH5mIHw+IGlnbm9yZVxuIiwib3BlbiEgU3RkXG5vcGVuIERiLldvcmtlcl9hcGlcbm9wZW4gQnJyZXJcbm9wZW4hIEJyclxubW9kdWxlIElEQiA9IEJycl9pby5JbmRleGVkX2RiXG5tb2R1bGUgSVMgPSBEYi5JdGVtX3N0b3JlXG5cbmxldCAoKSA9IFJhbmRvbS5zZWxmX2luaXQgKClcblxubGV0IG1hcF9lcnJvciBmID1cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQrIGYgPSBmIGluXG4gIFJlc3VsdC5tYXBfZXJyIChmdW4ganYgLT4gYEp2IGp2KSBmXG5cbmxldCBhc19mdXQgcSA9IElEQi5SZXF1ZXN0LmZ1dCBxIHw+IG1hcF9lcnJvclxuXG5sZXQgZnV0X29mX2FycmF5IChmcyA6ICdhIEZ1dC50IGFycmF5KSA6ICdhIGFycmF5IEZ1dC50ID1cbiAgbGV0IGZ1dCBwID0gSnYub2JqIFt8IChcImZ1dFwiLCBwKSB8XSBpblxuICBsZXQgcHJvbWlzZScgZiA9IEp2LmdldCAoSnYucmVwciBmKSBcImZ1dFwiIGluXG4gIGxldCBhcnIgPSBKdi5vZl9hcnJheSBwcm9taXNlJyBmcyBpblxuICBsZXQgYWxsID0gSnYuUHJvbWlzZS5hbGwgYXJyIGluXG4gIGxldCB0b19hcnJheSBsID0gSnYuUHJvbWlzZS5yZXNvbHZlIChKdi50b19hcnJheSBPYmoubWFnaWMgbCkgaW5cbiAgT2JqLm1hZ2ljIEBAIGZ1dCBAQCBKdi5Qcm9taXNlLmJpbmQgYWxsIHRvX2FycmF5XG5cbm1vZHVsZSBXb3JrZXIgKCkgPSBzdHJ1Y3RcbiAgbGV0IGNoZWNrX2RiIGlkYiBzb3VyY2UgPVxuICAgIGxldCBzZXJ2ZXJfaWQsIHNvdXJjZSA9IHNvdXJjZSBpblxuICAgIGxldCByZXBvcnQgc3RhdHVzID1cbiAgICAgIGRpc3BhdGNoX2V2ZW50IFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSAoc2VydmVyX2lkLCBzdGF0dXMpXG4gICAgaW5cbiAgICBEYi5TeW5jLmNoZWNrX2FuZF9zeW5jIH5yZXBvcnQgfnNvdXJjZSBpZGJcblxuICBsZXQgaWRiID1cbiAgICBsZXQgaWRiLCBzZXRfaWRiID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgIGxldCBfID1cbiAgICAgIERiLndpdGhfaWRiIH5uYW1lOlwidHJhY2tzXCIgfnZlcnNpb246MSBAQCBmdW4gaWRiIC0+XG4gICAgICBpZ25vcmUgKHNldF9pZGIgQEAgT2sgaWRiKVxuICAgIGluXG4gICAgaWRiXG5cbiAgbGV0IHJlYWRfb25seV9zdG9yZSAoKSA9XG4gICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICBsZXQrIGlkYiA9IGlkYiBpblxuICAgIElEQi5EYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgRGIuSSkgXSB+bW9kZTpSZWFkb25seSBpZGJcbiAgICB8PiBJREIuVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgRGIuSSlcblxuICBsZXQgZ2V0X3ZpZXdfa2V5cyA9XG4gICAgbGV0IHZpZXdfbWVtbyA6XG4gICAgICAgICggc3RyaW5nIERiLlZpZXcuc2VsZWN0aW9uICogRGIuVmlldy5Tb3J0LmNyaXRlcmlhIG9wdGlvbixcbiAgICAgICAgICBJUy5Db250ZW50LktleS50IGFycmF5IClcbiAgICAgICAgSGFzaHRibC50ID1cbiAgICAgIEhhc2h0YmwuY3JlYXRlIDY0XG4gICAgaW5cbiAgICBsZXQgbGFzdF92aWV3IDogKGludCAqIElTLkNvbnRlbnQuS2V5LnQgYXJyYXkpIHJlZiA9IHJlZiAoLTEsIFt8fF0pIGluXG4gICAgZnVuIHN0b3JlIHsgRGIuVmlldy5raW5kID0gXzsgc3JjX3ZpZXdzOyBzb3J0OyBmaWx0ZXJzIH0gLT5cbiAgICAgICgqIHRvZG86IHN0YWdlZCBtZW1vaXphdGlvbiArIHNwZWNpYWxpemVkIHF1ZXJpZXMgdXNpbmcgaW5kZXhlcyAqKVxuICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgIGxldCBzb3J0X2NyaXRlcmlhID1cbiAgICAgICAgbWF0Y2ggc29ydCB3aXRoIFJhbmRvbSAtPiBOb25lIHwgU29tZSAoY3JpdGVyaWEsIF8pIC0+IFNvbWUgY3JpdGVyaWFcbiAgICAgIGluXG4gICAgICBsZXQgaGFzaCA9IEhhc2h0YmwuaGFzaCAoc3JjX3ZpZXdzLCBzb3J0X2NyaXRlcmlhLCBmaWx0ZXJzKSBpblxuICAgICAgaWYgSW50LmVxdWFsIChmc3QgIWxhc3RfdmlldykgaGFzaCB0aGVuIEZ1dC5vayAoc25kICFsYXN0X3ZpZXcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCsga2V5cyA9XG4gICAgICAgICAgdHJ5IEZ1dC5vayBAQCBIYXNodGJsLmZpbmQgdmlld19tZW1vIChzcmNfdmlld3MsIHNvcnRfY3JpdGVyaWEpXG4gICAgICAgICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgIGxldCsgYWxsX2tleXMgPVxuICAgICAgICAgICAgICBsZXQgbG93ZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJBdWRpb1wiIHxdIGluXG4gICAgICAgICAgICAgIGxldCB1cHBlciA9IEp2Lm9mX2FycmF5IEp2Lm9mX3N0cmluZyBbfCBcIkF1ZGlvXFx1ezB9XCIgfF0gaW5cbiAgICAgICAgICAgICAgbGV0IHF1ZXJ5ID1cbiAgICAgICAgICAgICAgICBJREIuS2V5X3JhbmdlLmJvdW5kIH5sb3dlciB+dXBwZXIgfmxvd2VyX29wZW46dHJ1ZVxuICAgICAgICAgICAgICAgICAgfnVwcGVyX29wZW46ZmFsc2UgKClcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgbGV0IGlkeCA9IElTLmluZGV4IChtb2R1bGUgSVMuSW5kZXguS2luZF9WaWV3KSBzdG9yZSBpblxuICAgICAgICAgICAgICBJUy5JbmRleC5LaW5kX1ZpZXcuZ2V0X2FsbF9rZXlzIH5xdWVyeSBpZHggfD4gYXNfZnV0XG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgbGV0IGtleXMgPVxuICAgICAgICAgICAgICBtYXRjaCBzcmNfdmlld3Mgd2l0aFxuICAgICAgICAgICAgICB8IEFsbCAtPiBhbGxfa2V5c1xuICAgICAgICAgICAgICB8IE9ubHkgc3JjX3ZpZXdzIC0+XG4gICAgICAgICAgICAgICAgICBBcnJheS5maWx0ZXIgYWxsX2tleXNcbiAgICAgICAgICAgICAgICAgICAgfmY6KGZ1biB7IERiLlN0b3Jlcy5JdGVtcy5LZXkudmlld3M7IF8gfSAtPlxuICAgICAgICAgICAgICAgICAgICAgIExpc3QuZXhpc3RzIHZpZXdzIH5mOihmdW4gdiAtPiBMaXN0Lm1lbXEgdiB+c2V0OnNyY192aWV3cykpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgSGFzaHRibC5hZGQgdmlld19tZW1vIChzcmNfdmlld3MsIHNvcnRfY3JpdGVyaWEpIGtleXM7XG4gICAgICAgICAgICBrZXlzXG4gICAgICAgIGluXG4gICAgICAgIGxldCBrZXlzID1cbiAgICAgICAgICBtYXRjaCBmaWx0ZXJzIHdpdGhcbiAgICAgICAgICB8IFsgU2VhcmNoIHN1YiBdIHdoZW4gbm90IChTdHJpbmcuaXNfZW1wdHkgc3ViKSAtPlxuICAgICAgICAgICAgICBsZXQgc3ViID0gU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSBzdWIgaW5cbiAgICAgICAgICAgICAgQXJyYXkuZmlsdGVyIGtleXMgfmY6KGZ1biB7IERiLlN0b3Jlcy5JdGVtcy5LZXkuc29ydF9uYW1lOyBfIH0gLT5cbiAgICAgICAgICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHNvcnRfbmFtZSBpblxuICAgICAgICAgICAgICAgICAgbGV0IHBhdHRlcm4gPSBTdHJpbmcuRmluZC5jb21waWxlIChQcmludGYuc3ByaW50ZiBcIiVzXCIgc3ViKSBpblxuICAgICAgICAgICAgICAgICAgU3RyaW5nLkZpbmQuZmluZCB+cGF0dGVybiBzb3J0X25hbWUgPj0gMClcbiAgICAgICAgICB8IF8gLT4ga2V5c1xuICAgICAgICBpblxuICAgICAgICBsZXQgKCkgPVxuICAgICAgICAgIG1hdGNoIHNvcnQgd2l0aFxuICAgICAgICAgIHwgU29tZSAoTmFtZSwgXykgLT5cbiAgICAgICAgICAgICAgQXJyYXkuc29ydCBrZXlzXG4gICAgICAgICAgICAgICAgfmNtcDooZnVuXG4gICAgICAgICAgICAgICAgICAgIHsgRGIuU3RvcmVzLkl0ZW1zLktleS5zb3J0X25hbWUgPSBzbmE7IF8gfVxuICAgICAgICAgICAgICAgICAgICB7IERiLlN0b3Jlcy5JdGVtcy5LZXkuc29ydF9uYW1lID0gc25iOyBfIH1cbiAgICAgICAgICAgICAgICAgIC0+IFN0cmluZy5jb21wYXJlIHNuYSBzbmIpXG4gICAgICAgICAgfCBfIC0+ICgpXG4gICAgICAgIGluXG4gICAgICAgIGxhc3RfdmlldyA6PSAoaGFzaCwga2V5cyk7XG4gICAgICAgIGtleXNcblxuICBsZXQgb25fcXVlcnkgKHR5cGUgYSkgKHEgOiBhIHF1ZXJ5KSA6IChhLCBlcnJvcikgRnV0LnJlc3VsdCA9XG4gICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICBtYXRjaCBxIHdpdGhcbiAgICB8IFNldF9zZXNzaW9uX3V1aWQgcyAtPlxuICAgICAgICBsZXQgKCkgPSBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGkuc2V0X3Nlc3Npb25fdXVpZCBzIGluXG4gICAgICAgIEZ1dC5vayAoKVxuICAgIHwgQWRkX3NlcnZlcnMgbCAtPlxuICAgICAgICBsZXQqIGlkYiA9IGlkYiBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgcmVzID0gY2hlY2tfZGIgaWRiIChMaXN0LmhkIGwpIGluXG4gICAgICAgIFJlc3VsdC5tYXBfZXJyIChmdW4ganYgLT4gYEp2IGp2KSByZXNcbiAgICB8IEdldF9hbGwgKCkgLT5cbiAgICAgICAgbGV0KiBzdG9yZSA9IHJlYWRfb25seV9zdG9yZSAoKSBpblxuICAgICAgICBsZXQrIHJlcSA9IERiLkkuZ2V0X2FsbCBzdG9yZSB8PiBhc19mdXQgaW5cbiAgICAgICAgQXJyYXkubWFwIH5mOihmdW4gaSAtPiBpLkRiLlN0b3Jlcy5JdGVtcy5pdGVtKSByZXEgfD4gQXJyYXkudG9fbGlzdFxuICAgIHwgR2V0X3NlcnZlcl9saWJyYXJpZXMgc2VydmVyX2lkJyAtPlxuICAgICAgICBsZXQqIHN0b3JlID0gcmVhZF9vbmx5X3N0b3JlICgpIGluXG4gICAgICAgIGxldCBpbmRleCA9IElTLihpbmRleCAobW9kdWxlIElTLkluZGV4LlR5cGVfTmFtZSkgc3RvcmUpIGluXG4gICAgICAgIGxldCBsb3dlciA9IEp2Lm9mX2FycmF5IEp2Lm9mX3N0cmluZyBbfCBcIm11c2ljXCIgfF0gaW5cbiAgICAgICAgbGV0IHVwcGVyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcXHV7MH1cIiB8XSBpblxuICAgICAgICBsZXQgcXVlcnkgPVxuICAgICAgICAgIElEQi5LZXlfcmFuZ2UuYm91bmQgfmxvd2VyIH51cHBlciB+bG93ZXJfb3Blbjp0cnVlIH51cHBlcl9vcGVuOmZhbHNlXG4gICAgICAgICAgICAoKVxuICAgICAgICBpblxuICAgICAgICBsZXQqIGtleXMgPSBJUy5JbmRleC5UeXBlX05hbWUuZ2V0X2FsbF9rZXlzIH5xdWVyeSBpbmRleCB8PiBhc19mdXQgaW5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgICBsZXQrIGl0ZW1zID1cbiAgICAgICAgICBMaXN0Lm1hcCAoQXJyYXkudG9fbGlzdCBrZXlzKSB+ZjooZnVuIGsgLT4gSVMuZ2V0IGsgc3RvcmUgfD4gYXNfZnV0KVxuICAgICAgICAgIHw+IEZ1dC5vZl9saXN0XG4gICAgICAgIGluXG4gICAgICAgIGxldCBpdGVtcyA9XG4gICAgICAgICAgUmVzdWx0LmZsYXR0ZW5fbCBpdGVtc1xuICAgICAgICAgIHw+IFJlc3VsdC5tYXBcbiAgICAgICAgICAgICAgIChMaXN0LmZpbHRlcl9tYXAgfmY6KGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgIHwgU29tZSAoeyBEYi5TdG9yZXMuSXRlbXMuaXRlbSA9IHsgc2VydmVyX2lkOyBfIH07IF8gfSBhcyBpdGVtKVxuICAgICAgICAgICAgICAgICAgIHdoZW4gU3RyaW5nLmVxdWFsIHNlcnZlcl9pZCBzZXJ2ZXJfaWQnIC0+XG4gICAgICAgICAgICAgICAgICAgICBTb21lIGl0ZW1cbiAgICAgICAgICAgICAgICAgfCBTb21lIF8gfCBOb25lIC0+IE5vbmUpKVxuICAgICAgICBpblxuICAgICAgICBpdGVtc1xuICAgIHwgR2V0X2xpYnJhcmllcyAoKSAtPlxuICAgICAgICBsZXQqIHN0b3JlID0gcmVhZF9vbmx5X3N0b3JlICgpIGluXG4gICAgICAgIGxldCBpbmRleCA9IElTLihpbmRleCAobW9kdWxlIElTLkluZGV4LlR5cGVfTmFtZSkgc3RvcmUpIGluXG4gICAgICAgIGxldCBsb3dlciA9IEp2Lm9mX2FycmF5IEp2Lm9mX3N0cmluZyBbfCBcIm11c2ljXCIgfF0gaW5cbiAgICAgICAgbGV0IHVwcGVyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcXHV7MH1cIiB8XSBpblxuICAgICAgICBsZXQgcXVlcnkgPVxuICAgICAgICAgIElEQi5LZXlfcmFuZ2UuYm91bmQgfmxvd2VyIH51cHBlciB+bG93ZXJfb3Blbjp0cnVlIH51cHBlcl9vcGVuOmZhbHNlXG4gICAgICAgICAgICAoKVxuICAgICAgICBpblxuICAgICAgICBsZXQqIGtleXMgPSBJUy5JbmRleC5UeXBlX05hbWUuZ2V0X2FsbF9rZXlzIH5xdWVyeSBpbmRleCB8PiBhc19mdXQgaW5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgICBsZXQrIGl0ZW1zID1cbiAgICAgICAgICBMaXN0Lm1hcCAoQXJyYXkudG9fbGlzdCBrZXlzKSB+ZjooZnVuIGsgLT4gSVMuZ2V0IGsgc3RvcmUgfD4gYXNfZnV0KVxuICAgICAgICAgIHw+IEZ1dC5vZl9saXN0XG4gICAgICAgIGluXG4gICAgICAgIGxldCBpdGVtcyA9XG4gICAgICAgICAgUmVzdWx0LmZsYXR0ZW5fbCBpdGVtc1xuICAgICAgICAgIHw+IFJlc3VsdC5tYXAgKGZ1biBsIC0+XG4gICAgICAgICAgICAgICAgIExpc3QubWFwIGwgfmY6KE9wdGlvbi5nZXRfZXhuX29yIFwiSXRlbSBzaG91bGQgZXhpc3RzLlwiKSlcbiAgICAgICAgaW5cbiAgICAgICAgaXRlbXNcbiAgICB8IENyZWF0ZV92aWV3IHJlcXVlc3QgLT5cbiAgICAgICAgbGV0IHV1aWQgPSBuZXdfdXVpZF92NCAoKSBpblxuICAgICAgICBsZXQqIHN0b3JlID0gcmVhZF9vbmx5X3N0b3JlICgpIGluXG4gICAgICAgIGxldCsga2V5cyA9IGdldF92aWV3X2tleXMgc3RvcmUgcmVxdWVzdCBpblxuICAgICAgICBsZXQgaXRlbV9jb3VudCA9IEFycmF5Lmxlbmd0aCBrZXlzIGluXG4gICAgICAgIGxldCBvcmRlciA9IERiLlZpZXcuT3JkZXIub2Zfc29ydCB+c2l6ZTppdGVtX2NvdW50IHJlcXVlc3Quc29ydCBpblxuICAgICAgICB7IERiLlZpZXcudXVpZDsgcmVxdWVzdDsgb3JkZXI7IHN0YXJ0X29mZnNldCA9IDA7IGl0ZW1fY291bnQgfVxuICAgIHwgR2V0ICh2aWV3LCBpbmRleGVzKSAtPlxuICAgICAgICAoKiBUaGlzIHJlcXVlc3QgaXMgY3JpdGljYWwgdG8gdmlydHVhbCBsaXN0cyBwZXJmb3JtYW5jZXMgYW5kIHNob3VsZFxuICAgICAgICAgICBiZSBhcyBmYXN0IGFzIHBvc3NpYmxlLiAqKVxuICAgICAgICBsZXQqIHN0b3JlID0gcmVhZF9vbmx5X3N0b3JlICgpIGluXG4gICAgICAgIGxldCoga2V5cyA9IGdldF92aWV3X2tleXMgc3RvcmUgdmlldy5yZXF1ZXN0IGluXG4gICAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgICAgbGV0KyByZXN1bHRzID1cbiAgICAgICAgICBBcnJheS5tYXAgaW5kZXhlcyB+ZjooZnVuIGluZGV4IC0+XG4gICAgICAgICAgICAgIHRyeVxuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IGluZGV4ICsgdmlldy5zdGFydF9vZmZzZXQgaW5cbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBEYi5WaWV3Lk9yZGVyLmFwcGx5IHZpZXcub3JkZXIgaW5kZXggaW5cbiAgICAgICAgICAgICAgICAoKiBUaGlzIGNvdWxkIGJlIG9wdGltaXplIHdoZW4gYWNjZXNzIGlzIHNlcXVlbnRpYWwgKilcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0ga2V5cy4oaW5kZXgpIGluXG4gICAgICAgICAgICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgICAgICAgICAgIGxldCsgcmVzdWx0ID0gSVMuZ2V0IGtleSBzdG9yZSB8PiBJREIuUmVxdWVzdC5mdXQgaW5cbiAgICAgICAgICAgICAgICBtYXRjaCByZXN1bHQgd2l0aFxuICAgICAgICAgICAgICAgIHwgT2sgTm9uZSAtPiBOb25lXG4gICAgICAgICAgICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgIFsgXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGxvYWRpbmcgaXRlbVwiOyBrZXk7IGVyciBdO1xuICAgICAgICAgICAgICAgICAgICBOb25lXG4gICAgICAgICAgICAgICAgfCBPayAoU29tZSB2KSAtPiBTb21lIHZcbiAgICAgICAgICAgICAgd2l0aCBfIC0+IEZ1dC5yZXR1cm4gTm9uZSlcbiAgICAgICAgICB8PiBmdXRfb2ZfYXJyYXlcbiAgICAgICAgaW5cbiAgICAgICAgT2sgcmVzdWx0c1xuZW5kXG5cbmluY2x1ZGUgTWFrZV93b3JrZXIgKFdvcmtlcilcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRW5zdXJlIHRoYXQgW2F0X2V4aXRdIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgcHJvZ3JhbSAqKVxuXG5sZXQgXyA9IGRvX2F0X2V4aXQoKVxuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJkYl93b3JrZXIuYmMuanMiLCJzb3VyY2VSb290IjoiIiwibmFtZXMiOlsiY2FtbF9hcnJheV9ibGl0IiwiYTEiLCJpMSIsImEyIiwiaTIiLCJsZW4iLCJqIiwiY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIiwiYSIsImkiLCJmIiwiU3RyaW5nIiwibnVsbCIsInMiLCJNYXRoIiwiY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IiwiVWludDhBcnJheSIsImIiLCJsIiwiY2FtbF9ibGl0X2J5dGVzIiwiczEiLCJzMiIsImMxIiwiYzIiLCJjYW1sX3N0cl9yZXBlYXQiLCJuIiwiciIsImNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMiLCJqc29vX2lzX2FzY2lpIiwiY2FtbF91dGYxNl9vZl91dGY4IiwidCIsImMiLCJ2IiwiTWxCeXRlcyIsInRhZyIsImNvbnRlbnRzIiwibGVuZ3RoIiwidGhpcyIsImNvbnRlbnQiLCJjYW1sX2J5dGVzX29mX2pzYnl0ZXMiLCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIiwieCIsImNhbWxfYnl0ZXNfb2Zfc3RyaW5nIiwiY2FtbF9ibGl0X3N0cmluZyIsImQiLCJlIiwianNvb19zeXNfZ2V0ZW52IiwicHJvY2VzcyIsImdsb2JhbFRoaXMiLCJ1bmRlZmluZWQiLCJjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyIsImNhbWxfZ2xvYmFsX2RhdGEiLCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZSIsImV4biIsImZvcmNlIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9yYWlzZV93aXRoX2FyZyIsImFyZyIsImNhbWxfc3RyaW5nX29mX2pzYnl0ZXMiLCJjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIiwibXNnIiwiY2FtbF9pbnZhbGlkX2FyZ3VtZW50IiwiY2FtbF9ieXRlc19ib3VuZF9lcnJvciIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9ieXRlc191bnNhZmVfZ2V0IiwiY2FtbF9jYWxsX2dlbiIsImFyZ3MiLCJhcmdzTGVuIiwiZyIsIm5hcmdzIiwiQXJyYXkiLCJ5IiwiZXh0cmFfYXJncyIsImFyZ3VtZW50cyIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX2NoZWNrX2JvdW5kIiwiYXJyYXkiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwib2ZzIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2ZpbGxfYnl0ZXMiLCJjYW1sX2Zsb2F0X29mX3N0cmluZyIsIm0iLCJtMyIsIm1hbnRpc3NhIiwicGFyc2VJbnQiLCJleHBvbmVudCIsImNhbWxfcGFyc2VfZm9ybWF0IiwiZm10IiwiY2FtbF9maW5pc2hfZm9ybWF0dGluZyIsInJhd2J1ZmZlciIsImNhbWxfZm9ybWF0X2Zsb2F0IiwidG9GaXhlZCIsImRwIiwicHJlYyIsInAiLCJjYW1sX2Zvcm1hdF9pbnQiLCJjYW1sX29vX2xhc3RfaWQiLCJjYW1sX2ZyZXNoX29vX2lkIiwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmciLCJmc19ub2RlX3N1cHBvcnRlZCIsIm1ha2VfcGF0aF9pc19hYnNvbHV0ZSIsInBvc2l4IiwicGF0aCIsIndpbjMyIiwic3BsaXREZXZpY2VSZSIsInJlc3VsdCIsImRldmljZSIsImlzVW5jIiwiQm9vbGVhbiIsInJvb3QiLCJzZXAiLCJwYXRoX2lzX2Fic29sdXRlIiwiY2FtbF90cmFpbGluZ19zbGFzaCIsImNhbWxfY3VycmVudF9kaXIiLCJjYW1sX21ha2VfcGF0aCIsImNvbXAwIiwibmNvbXAiLCJjYW1sX3V0Zjhfb2ZfdXRmMTYiLCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZyIsInVuaXhfZXJyb3IiLCJtYWtlX3VuaXhfZXJyX2FyZ3MiLCJjb2RlIiwic3lzY2FsbCIsImVycm5vIiwidmFyaWFudCIsImNhbWxfbmFtZWRfdmFsdWVzIiwiY2FtbF9uYW1lZF92YWx1ZSIsIm5tIiwiY2FtbF9yYWlzZV93aXRoX2FyZ3MiLCJjYW1sX2J5dGVzX29mX2FycmF5IiwiY2FtbF9yYWlzZV9zeXNfZXJyb3IiLCJjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSIsImNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsIk1sRmlsZSIsIk1sRmFrZUZpbGUiLCJvbGQiLCJidWYiLCJwb3MiLCJjbGVuIiwibmV3X3N0ciIsIm9sZF9kYXRhIiwiTWxGYWtlRmQiLCJmaWxlIiwiZmxhZ3MiLCJNbEZha2VEZXZpY2UiLCJTeW1ib2wiLCJuYW1lX3NsYXNoIiwibW9kZSIsInJhaXNlX3VuaXgiLCJwYXJlbnQiLCJSZWdFeHAiLCJzZWVuIiwiZW50cnkiLCJvayIsImJ5dGVzIiwiY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIiwiY2FtbF9zdHJpbmdfdW5zYWZlX2dldCIsImNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIiwiTWxOb2RlRmQiLCJmZCIsInJlcXVpcmUiLCJlcnIiLCJidWZfb2Zmc2V0IiwicmVhZCIsIk1sTm9kZURldmljZSIsImNvbnN0cyIsImtleSIsImlzQ2hhcmFjdGVyRGV2aWNlIiwibyIsImpzX3N0YXRzIiwidG9fZGlyIiwidGFyZ2V0IiwibGluayIsImZpbGVfa2luZCIsImNhbWxfZ2V0X3Jvb3QiLCJjYW1sX3Jvb3QiLCJqc29vX21vdW50X3BvaW50IiwicmVzb2x2ZV9mc19kZXZpY2UiLCJjYW1sX2NyZWF0ZV9maWxlIiwianNvb19jcmVhdGVfZmlsZSIsImNhbWxfZnNfaW5pdCIsInRtcCIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9oYXNoX21peF9qc2J5dGVzIiwiY2FtbF9oYXNoX21peF9zdHJpbmciLCJjYW1sX2hhc2hfbWl4X2J5dGVzX2FyciIsImNhbWxfbWxfYnl0ZXNfY29udGVudCIsImNhbWxfaGFzaF9taXhfYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X2ZpbmFsIiwiY2FtbF9oYXNoIiwiY291bnQiLCJsaW1pdCIsInNlZWQiLCJvYmoiLCJxdWV1ZSIsInJkIiwid3IiLCJoaCIsImNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0Iiwic3R5bGUiLCJleHBfc2lnbiIsInNpZ25fc3RyIiwiY3N0IiwieF9zdHIiLCJpZHgiLCJjYW1sX2ludDY0X2lzX3plcm8iLCJjYW1sX2ludDY0X29mX2ludDMyIiwiY2FtbF9pbnQ2NF90b19pbnQzMiIsImNhbWxfaW50NjRfaXNfbmVnYXRpdmUiLCJjYW1sX2ludDY0X25lZyIsImNhbWxfaW50NjRfZm9ybWF0Iiwid2Jhc2UiLCJjdnRibCIsImNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSIsImJhc2UiLCJjYW1sX3BhcnNlX2RpZ2l0IiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwidGhyZXNob2xkIiwiY2FtbF9qc19mcm9tX2FycmF5IiwiY2FtbF9qc19tZXRoX2NhbGwiLCJjYW1sX2pzX25ldyIsIkYiLCJjYW1sX2pzX29iamVjdCIsImNhbWxfanNfdG9fYXJyYXkiLCJjYW1sX2NhbGxiYWNrIiwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCIsImFyaXR5IiwiY2FtbF9sZXNzZXF1YWwiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9sZXhfYXJyYXkiLCJjYW1sX2xleF9lbmdpbmUiLCJ0YmwiLCJzdGFydF9zdGF0ZSIsImxleGJ1ZiIsImxleF9idWZmZXIiLCJsZXhfYnVmZmVyX2xlbiIsImxleF9zdGFydF9wb3MiLCJsZXhfY3Vycl9wb3MiLCJsZXhfbGFzdF9wb3MiLCJsZXhfbGFzdF9hY3Rpb24iLCJsZXhfZW9mX3JlYWNoZWQiLCJsZXhfYmFzZSIsImxleF9iYWNrdHJrIiwibGV4X2RlZmF1bHQiLCJsZXhfdHJhbnMiLCJsZXhfY2hlY2siLCJzdGF0ZSIsImJhY2t0cmsiLCJjYW1sX21ha2VfdmVjdCIsImluaXQiLCJjYW1sX01ENUluaXQiLCJBcnJheUJ1ZmZlciIsImIzMiIsIlVpbnQzMkFycmF5IiwiYjgiLCJjYW1sX01ENVRyYW5zZm9ybSIsImFkZCIsInh4IiwiZmYiLCJnZyIsImlpIiwiY2FtbF9NRDVVcGRhdGUiLCJjdHgiLCJpbnB1dCIsImlucHV0X2xlbiIsImluX2J1ZiIsImlucHV0X3BvcyIsIm1pc3NpbmciLCJjYW1sX01ENUZpbmFsIiwiY2FtbF9zdHJpbmdfb2ZfYXJyYXkiLCJjYW1sX21kNV9ieXRlcyIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfc3lzX2ZkcyIsImNhbWxfc3lzX2Nsb3NlIiwiY2FtbF9tbF9jaGFubmVscyIsImNhbWxfbWxfY2hhbm5lbF9nZXQiLCJpZCIsImNhbWxfbWxfZmx1c2giLCJjaGFuaWQiLCJjaGFuIiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyIsImNhbWxfcmVmaWxsIiwic3RyIiwic3RyX2EiLCJucmVhZCIsImNhbWxfbWxfaW5wdXRfYmxvY2siLCJhdmFpbCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX3N5c19vcGVuX2Zvcl9ub2RlIiwiZnMiLCJmZDIiLCJNbEZha2VGZF9vdXQiLCJjb25zb2xlIiwic3JjIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImNhbWxfc3lzX29wZW4iLCJfcGVybXMiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsInJlZmlsbCIsImNoYW5uZWwiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQiLCJidWZmZXJlZCIsImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QiLCJjYW1sX21sX291dHB1dF90YSIsImNhbWxfbWxfb3V0cHV0X2J5dGVzIiwiY2FtbF9tbF9vdXRwdXQiLCJjYW1sX21sX291dHB1dF9jaGFyIiwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lIiwiY2FtbF9tb2QiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9vYmpfbWFrZV9mb3J3YXJkIiwiY2FtbF9vYmpfdGFnIiwiRnVuY3Rpb24iLCJjYW1sX2J1aWxkX3N5bWJvbHMiLCJzeW1iIiwiY2FtbF9yZWdpc3Rlcl9nbG9iYWwiLCJuYW1lX29wdCIsIm5pZCIsImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUiLCJjYW1sX3N0cmluZ19ib3VuZF9lcnJvciIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfcmFpc2Vfbm90X2ZvdW5kIiwiY2FtbF9zeXNfZ2V0ZW52IiwiY2FtbF9zeXNfcmFuZG9tX3NlZWQiLCJub3ciLCJEYXRlIiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uIiwiY2FtbF9mb3JtYXRfZXhjZXB0aW9uIiwiYnVja2V0Iiwic3RhcnQiLCJjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImhhbmRsZXIiLCJhdF9leGl0IiwiY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsIm9yaWdpbiIsImV2ZW50IiwiemVyb19wb3MiLCJsb2NmbXQiLCJvY2FtbF9sZXhfdGFibGVzIiwidHBfbG9jIiwidHBfbG9jJDAiLCJ0cF9sb2MkMSIsInRwX2xvYyQyIiwidHBfbG9jJDMiLCJ0cF9sb2MkNCIsInRwX2xvYyQ1IiwidHBfbG9jJDYiLCJ0cF9sb2MkNyIsInRwX2xvYyQ4IiwidHBfbG9jJDkiLCJ0cF9sb2MkMTAiLCJuYW1lJDIiLCJ0cF9sb2MkMTEiLCJ0cF9sb2MkMTIiLCJwYXRoJDEiLCJwYXRoJDIiLCJuYW1lJDMiLCJwYXRoJDUiLCJuYW1lJDQiLCJuYW1lJDUiLCJuYW1lJDYiLCJuYW1lJDciLCJuYW1lJDgiLCJpbmNsdWRlX2l0ZW1fdHlwZXMiLCJpbml0aWFsX3JlcG9ydCIsImVyYXNlX3JlbCIsInJlc3QiLCJyZXN0JDAiLCJyZXN0JDEiLCJyZXN0JDIiLCJyZXN0JDMiLCJyZXN0JDQiLCJyZXN0JDUiLCJyZXN0JDYiLCJyZXN0JDciLCJ0eSIsInJlc3QkOCIsInR5MSIsInJlc3QkOSIsInJlc3QkMTAiLCJyZXN0JDExIiwicmVzdCQxMiIsInJlc3QkMTMiLCJjb25jYXRfZm10dHkiLCJmbXR0eTEiLCJmbXR0eTIiLCJ0eTIiLCJjb25jYXRfZm10IiwiZm10MSIsImZtdDIiLCJwYWQiLCJwYWQkMCIsInBhZCQxIiwiaWNvbnYiLCJwcmVjJDAiLCJwYWQkMiIsImljb252JDAiLCJwcmVjJDEiLCJwYWQkMyIsImljb252JDEiLCJwcmVjJDIiLCJwYWQkNCIsImljb252JDIiLCJwcmVjJDMiLCJwYWQkNSIsImZjb252IiwicGFkJDYiLCJjaHIiLCJmbXR0eSIsInBhZCQ3IiwiZm10dHkkMCIsInBhZCQ4IiwicmVzdCQxNCIsInJlc3QkMTUiLCJyZXN0JDE2IiwiZm10aW5nX2xpdCIsInJlc3QkMTciLCJmbXRpbmdfZ2VuIiwicmVzdCQxOCIsInJlc3QkMTkiLCJjaGFyX3NldCIsIndpZHRoX29wdCIsInJlc3QkMjAiLCJjb3VudGVyIiwicmVzdCQyMSIsInJlc3QkMjIiLCJpZ24iLCJyZXN0JDIzIiwiY3VyIiwiZmFpbHdpdGgiLCJpbnZhbGlkX2FyZyIsImFicyIsIm1heF9pbnQiLCJjaGFyX29mX2ludCIsInN0cmluZ19vZl9ib29sIiwic3RyaW5nX29mX2ludCIsInZhbGlkX2Zsb2F0X2xleGVtIiwibG9vcCIsImkkMCIsImkkMSIsInN0cmluZ19vZl9mbG9hdCIsInN0ZG91dCIsInN0ZGVyciIsIm9wZW5fb3V0X2dlbiIsInBlcm0iLCJvcGVuX291dCIsImZsdXNoX2FsbCIsIml0ZXIiLCJvdXRwdXRfc3RyaW5nIiwib2MiLCJvdXRwdXRfc3Vic3RyaW5nIiwiY2xvc2Vfb3V0Iiwib3Blbl9pbl9nZW4iLCJvcGVuX2luIiwiaWMiLCJwcmVycl9lbmRsaW5lIiwiZXhpdF9mdW5jdGlvbiIsImZfeWV0X3RvX3J1biIsIm9sZF9leGl0IiwiZl95ZXRfdG9fcnVuJDAiLCJvbGRfZXhpdCQwIiwibmV3X2V4aXQiLCJzdWNjZXNzIiwiZG9fYXRfZXhpdCIsImlzX2Jsb2NrIiwicmFpc2VfdW5kZWZpbmVkIiwiZm9yY2VfbGF6eV9ibG9jayIsImJsayIsImNsb3N1cmUiLCJlJDAiLCJ2YWx1ZSIsImRlZmF1bHQkMCIsIm1hcCIsImdldF9vayIsIm1hcCQwIiwib2ZfaW50X2V4biIsInMkMCIsImhkIiwicmV2X2FwcGVuZCIsImwxIiwibDIiLCJsMSQwIiwibDIkMCIsImwxJDEiLCJsMiQxIiwicmV2IiwiaW5pdF90YWlscmVjX2F1eCIsImFjYyIsImFjYyQwIiwiYWNjJDEiLCJpbml0X2F1eCIsInJtYXBfZiIsImFjY3UkMCIsImFjY3UiLCJsJDAiLCJsJDEiLCJhY2N1JDEiLCJtaW4kMCIsIm1heCIsInRvX3N0cmluZyIsIm9mczEiLCJvZnMyIiwiZW5zdXJlX2dlIiwic3VtX2xlbmd0aHMiLCJzZXBsZW4iLCJ0bCIsInVuc2FmZV9ibGl0cyIsImRzdCIsInBvcyQwIiwiZXNjYXBlX2lmX25lZWRlZCIsImluZGV4X3JlYyIsImxpbSIsInRvbGlzdCIsInJlcyQwIiwicmVzJDEiLCJsaXN0X2xlbmd0aCIsImZpbGwiLCJjbXAiLCJtYXhzb24iLCJpMzEiLCJ0cmlja2xlZG93biIsInRyaWNrbGUiLCJidWJibGVkb3duIiwiYnViYmxlIiwidHJpY2tsZXVwIiwiZmF0aGVyIiwibGV4X3JlZmlsbCIsInJlYWRfZnVuIiwiYXV4X2J1ZmZlciIsIm5ld2xlbiIsIm5ld2J1ZiIsIm9wdCIsInN0aCIsIndpdGhfcG9zaXRpb25zIiwiaGVpZ2h0IiwiY3JlYXRlIiwiaGwiLCJoJDAiLCJociIsImJhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZF9sYXN0X29wdF9hdXgiLCJ2MCQwIiwiZmluZF9sYXN0X29wdCIsImNsZWFyIiwicHVzaCIsInBvcF9vcHQiLCJ0b3Bfb3B0IiwiaXRlciQxIiwiY3JlYXRlJDAiLCJjbGVhciQwIiwiY2VsbCIsIm1hdGNoIiwicGVla19vcHQiLCJ0YWtlIiwibmV4dCIsInRha2Vfb3B0IiwiZnJvbSIsImNyZWF0ZSQxIiwibiQwIiwibiQxIiwic3ViJDEiLCJsZW5ndGgkMCIsInJlc2V0IiwicmVzaXplIiwibW9yZSIsIm9sZF9wb3MiLCJvbGRfbGVuIiwibmV3X2xlbiIsIm5ld19idWZmZXIiLCJhZGRfY2hhciIsImFkZF9zdWJzdHJpbmciLCJuZXdfcG9zaXRpb24iLCJhZGRfc3RyaW5nIiwiZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24iLCJidWZmZXJfY3JlYXRlIiwiaW5pdF9zaXplIiwiYnVmZmVyX2NoZWNrX3NpemUiLCJvdmVyaGVhZCIsIm1pbl9sZW4iLCJidWZmZXJfYWRkX2NoYXIiLCJidWZmZXJfYWRkX3N0cmluZyIsInN0cl9sZW4iLCJidWZmZXJfY29udGVudHMiLCJjaGFyX29mX2Zjb252IiwiY0YiLCJicHJpbnRfZmNvbnZfZmxhZyIsInN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCIsImZvcm1hdHRpbmdfbGl0Iiwic3RyJDAiLCJicHJpbnRfZm10dHkiLCJmbXR0eSQxIiwiZm10dHkkMiIsImZtdHR5JDMiLCJmbXR0eSQ0IiwiZm10dHkkNSIsImZtdHR5JDYiLCJmbXR0eSQ3IiwiZm10dHkkOCIsImZtdHR5JDkiLCJzdWJfZm10dHkiLCJmbXR0eSQxMCIsInN1Yl9mbXR0eSQwIiwiZm10dHkkMTEiLCJmbXR0eSQxMiIsImZtdHR5JDEzIiwiZm10dHkkMTQiLCJmbXR0eSQxNSIsInN5bW0iLCJmbXR0eV9yZWxfZGV0IiwiZGUiLCJlZCIsImFmIiwiZmEiLCJkZSQwIiwiZWQkMCIsImFmJDAiLCJmYSQwIiwiZGUkMSIsImVkJDEiLCJhZiQxIiwiZmEkMSIsImRlJDIiLCJlZCQyIiwiYWYkMiIsImZhJDIiLCJkZSQzIiwiZWQkMyIsImFmJDMiLCJmYSQzIiwiZGUkNCIsImVkJDQiLCJhZiQ0IiwiZmEkNCIsImRlJDUiLCJlZCQ1IiwiYWYkNSIsImZhJDUiLCJkZSQ2IiwiZWQkNiIsImFmJDYiLCJmYSQ2IiwiZGUkNyIsImVkJDciLCJhZiQ3IiwiZmEkNyIsImRlJDgiLCJlZCQ4IiwiYWYkOCIsImZhJDgiLCJ0cmFucyIsImpkIiwiZGoiLCJnYSIsImFnIiwiZGUkOSIsImVkJDkiLCJhZiQ5IiwiZmEkOSIsImRlJDEwIiwiZWQkMTAiLCJhZiQxMCIsImZhJDEwIiwiZGUkMTEiLCJlZCQxMSIsImFmJDExIiwiZmEkMTEiLCJkZSQxMiIsImVkJDEyIiwiYWYkMTIiLCJmYSQxMiIsImRlJDEzIiwiZWQkMTMiLCJhZiQxMyIsImZhJDEzIiwicmVzdDEiLCJyZXN0MiIsInJlc3QxJDAiLCJyZXN0MiQwIiwicmVzdDEkMSIsInJlc3QyJDEiLCJyZXN0MSQyIiwicmVzdDIkMiIsInJlc3QxJDMiLCJyZXN0MiQzIiwicmVzdDEkNCIsInJlc3QyJDQiLCJyZXN0MSQ1IiwicmVzdDIkNSIsInJlc3QxJDYiLCJyZXN0MiQ2IiwicmVzdDEkNyIsInR5MSQwIiwicmVzdDIkNyIsInR5MiQwIiwicmVzdDEkOCIsInR5MTIiLCJ0eTExIiwicmVzdDIkOCIsInR5MjIiLCJ0eTIxIiwiZjQiLCJmMiIsInJlc3QxJDkiLCJyZXN0MiQ5IiwicmVzdDEkMTAiLCJyZXN0MiQxMCIsInJlc3QxJDExIiwicmVzdDIkMTEiLCJyZXN0MSQxMiIsInJlc3QyJDEyIiwicmVzdDEkMTMiLCJyZXN0MiQxMyIsInR5cGVfcGFkZGluZyIsInBhZHR5IiwicGFkdHkkMCIsInR5cGVfcGFkcHJlYyIsInR5cGVfZm9ybWF0IiwidHlwZV9mb3JtYXRfZ2VuIiwiZm10JDAiLCJmbXR0eV9yZXN0IiwiZm10X3Jlc3QiLCJmbXR0eV9yZXN0JDAiLCJmbXRfcmVzdCQwIiwiZm10JDEiLCJmbXRfcmVzdCQxIiwiZm10dHlfcmVzdCQxIiwiZm10JDIiLCJmbXRfcmVzdCQyIiwiZm10dHlfcmVzdCQyIiwiZm10JDMiLCJmbXRfcmVzdCQzIiwiZm10dHlfcmVzdCQzIiwiZm10JDQiLCJmbXRfcmVzdCQ0IiwiZm10dHlfcmVzdCQ0IiwiZm10JDUiLCJmbXRfcmVzdCQ1IiwiZm10dHlfcmVzdCQ1IiwicHJlYyQ0IiwiZm10JDYiLCJmbXRfcmVzdCQ2IiwicHJlYyQ1IiwicGFkJDkiLCJwYWQkMTAiLCJmbXR0eV9yZXN0JDYiLCJwcmVjJDYiLCJmbXQkNyIsImZtdF9yZXN0JDciLCJwcmVjJDciLCJwYWQkMTEiLCJwYWQkMTIiLCJmbXR0eV9yZXN0JDciLCJwcmVjJDgiLCJmbXQkOCIsImZtdF9yZXN0JDgiLCJwYWQkMTMiLCJwYWQkMTQiLCJmbXR0eV9yZXN0JDgiLCJmbXQkOSIsImZtdF9yZXN0JDkiLCJmbXQkMTAiLCJmbXRfcmVzdCQxMCIsImZtdCQxMSIsImZtdF9yZXN0JDExIiwiZm10JDEyIiwiZm10dHlfcmVzdCQ5IiwiZm10X3Jlc3QkMTIiLCJwYWRfb3B0IiwiZm10JDEzIiwiZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eTEiLCJmbXRfcmVzdCQxMyIsInN1Yl9mbXR0eSQxIiwicGFkX29wdCQwIiwiZm10JDE0IiwiZm10dHlfcmVzdCQxMSIsImZtdF9yZXN0JDE0IiwiZm10JDE1IiwiZm10dHlfcmVzdCQxMiIsImZtdF9yZXN0JDE1IiwiZm10dHkkMTYiLCJmbXQkMTYiLCJmbXRfcmVzdCQxNiIsImZtdHR5JDE3IiwiZm10JDE3IiwiZm10X3Jlc3QkMTciLCJmb3JtYXR0aW5nX2dlbiIsInR5cGVfZm9ybWF0dGluZ19nZW4iLCJmbXR0eV9yZXN0JDEzIiwiZm10X3Jlc3QkMTgiLCJmbXR0eSQxOCIsImZtdCQxOCIsImZtdHR5X3Jlc3QkMTQiLCJmbXRfcmVzdCQxOSIsImZtdHR5JDE5IiwiZm10JDE5IiwiZm10dHlfcmVzdCQxNSIsImZtdF9yZXN0JDIwIiwiZm10dHkkMjAiLCJmbXQkMjAiLCJ0eXBlX2lnbm9yZWRfcGFyYW0iLCJmbXQwIiwiZm10dHkwIiwiZm10dHkzIiwiZm10MyIsImZtdDEkMCIsImZtdHR5MiQwIiwiZm10MiQwIiwiZm10dHkzJDAiLCJmbXQzJDAiLCJ0eXBlX2lnbm9yZWRfcGFyYW1fb25lIiwidHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpIiwic3ViX2ZtdHR5X3Jlc3QiLCJzdWJfZm10dHlfcmVzdCQwIiwic3ViX2ZtdHR5X3Jlc3QkMSIsInN1Yl9mbXR0eV9yZXN0JDIiLCJzdWJfZm10dHlfcmVzdCQzIiwic3ViX2ZtdHR5X3Jlc3QkNCIsInN1Yl9mbXR0eV9yZXN0JDUiLCJzdWJfZm10dHlfcmVzdCQ2Iiwic3ViX2ZtdHR5X3Jlc3QkNyIsInN1Yl9mbXR0eV9yZXN0JDgiLCJzdWJfZm10dHlfcmVzdCQ5Iiwic3ViX2ZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHlfcmVzdCQxMSIsInN1Yl9mbXR0eV9yZXN0JDEyIiwic3ViX2ZtdHR5X3Jlc3QkMTMiLCJzdWJfZm10dHlfcmVzdCQxNCIsInN1YjJfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNSIsInN1YjJfZm10dHkkMCIsInN1Yl9mbXR0eV9yZXN0JDE2Iiwic3ViMl9mbXR0eSQxIiwic3ViMV9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE3Iiwic3ViMl9mbXR0eSQyIiwic3ViMV9mbXR0eSQwIiwic3ViX2ZtdHR5X3Jlc3QkMTgiLCJzdWJfZm10dHlfcmVzdCQxOSIsInN1Yl9mbXR0eV9yZXN0JDIwIiwic3ViX2ZtdHR5X3Jlc3QkMjEiLCJzdWJfZm10dHlfcmVzdCQyMiIsInN1Yl9mbXR0eV9yZXN0JDIzIiwic3ViX2ZtdHR5X3Jlc3QkMjQiLCJzdWJfZm10dHlfcmVzdCQyNSIsInN1Yl9mbXR0eV9yZXN0JDI2IiwicmVjYXN0IiwiZml4X3BhZGRpbmciLCJ3aWR0aCIsIndpZHRoJDAiLCJmaXhfaW50X3ByZWNpc2lvbiIsInN0cmluZ190b19jYW1sX3N0cmluZyIsImZvcm1hdF9vZl9pY29udiIsImZvcm1hdF9vZl9pY29udkwiLCJmb3JtYXRfb2ZfaWNvbnZsIiwiZm9ybWF0X29mX2ljb252biIsImZvcm1hdF9vZl9mY29udiIsInRyYW5zZm9ybV9pbnRfYWx0IiwiZGlnaXRzIiwicHV0IiwibGVmdCIsImNvbnZlcnRfaW50IiwiY29udmVydF9pbnQzMiIsImNvbnZlcnRfbmF0aXZlaW50IiwiY29udmVydF9pbnQ2NCIsImNvbnZlcnRfZmxvYXQiLCJoZXgiLCJhZGRfZG90X2lmX25lZWRlZCIsImlzX3ZhbGlkIiwiY2FtbF9zcGVjaWFsX3ZhbCIsImZvcm1hdF9jYW1sX2NoYXIiLCJzdHJpbmdfb2ZfZm10dHkiLCJtYWtlX3ByaW50ZiQwIiwiayQwIiwibmV3X2FjYyIsIm1ha2VfcHJpbnRmIiwibWFrZV9wYWRkaW5nIiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIiwiYWNjJDIiLCJhY2MkMyIsImFjYyQ0IiwiayQxIiwia2FjYyIsImskMiIsIm1ha2VfaWdub3JlZF9wYXJhbSIsIm1ha2VfY3VzdG9tJDAiLCJtYWtlX2ludmFsaWRfYXJnIiwibWFrZV9mcm9tX2ZtdHR5JDAiLCJtYWtlX2Zyb21fZm10dHkiLCJwJDAiLCJwJDEiLCJhcml0eSQwIiwibWFrZV9jdXN0b20iLCJvdXRwdXRfYWNjIiwicCQzIiwicCQ0IiwicCQ1IiwicCQyIiwic3RycHV0X2FjYyIsImZhaWx3aXRoX21lc3NhZ2UiLCJvcGVuX2JveF9vZl9zdHJpbmciLCJpbnZhbGlkX2JveCIsInBhcnNlX3NwYWNlcyIsInBhcnNlX2x3b3JkIiwiaiQwIiwiaiQxIiwicGFyc2VfaW50Iiwid3N0YXJ0Iiwid2VuZCIsImJveF9uYW1lIiwibnN0YXJ0IiwibmVuZCIsImluZGVudCIsImV4cF9lbmQiLCJib3hfdHlwZSIsImtmcHJpbnRmIiwiZnByaW50ZiIsImVwcmludGYiLCJrc3ByaW50ZiIsInNwcmludGYiLCJwcmludGVycyIsImZpZWxkIiwib3RoZXJfZmllbGRzIiwiZmllbGRzIiwidXNlX3ByaW50ZXJzIiwiY29udiIsInRvX3N0cmluZ19kZWZhdWx0IiwiY2hhciQwIiwibGluZSIsImNoYXIkMSIsImxpbmUkMCIsImZpbGUkMCIsImNoYXIkMiIsImxpbmUkMSIsImZpbGUkMSIsImNvbnN0cnVjdG9yIiwidG9fc3RyaW5nJDAiLCJjb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJidCIsImZvcm1hdF9iYWNrdHJhY2Vfc2xvdCIsInNsb3QiLCJpbmZvIiwiaXNfcmFpc2UiLCJwcmludF9leGNlcHRpb25fYmFja3RyYWNlIiwib3V0Y2hhbiIsImJhY2t0cmFjZSIsInByaW50X3Jhd19iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwiZXJyb3JzIiwiZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuIiwic3RhdHVzIiwiZW1wdHlfYmFja3RyYWNlIiwidHJ5X2dldF9yYXdfYmFja3RyYWNlIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImRlYnVnZ2VyX2luX3VzZSIsImV4biQxIiwiZXhuJDAiLCJyYXdfYmFja3RyYWNlJDAiLCJoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJDAiLCJuZXdfc3RhdGUiLCJhc3NpZ24iLCJzdDEiLCJzdDIiLCJmdWxsX2luaXQiLCJjb21iaW5lIiwiZXh0cmFjdCIsInNlZWQkMCIsIm1ha2UkMiIsIm1ha2Vfc2VsZl9pbml0IiwiY29weSQwIiwiYml0cyIsImN1cnZhbCIsIm5ld3ZhbCIsIm5ld3ZhbDMwIiwib25nb2luZ190cmF2ZXJzYWwiLCJwYXJhbXMiLCJyYW5kb21pemVkX2RlZmF1bHQiLCJwcm5nIiwicG93ZXJfMl9hYm92ZSIsIngkMCIsIngkMSIsImluaXRpYWxfc2l6ZSIsInJhbmRvbSIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJpbnNlcnRfYnVja2V0IiwiY2VsbCQwIiwiY2VsbCQxIiwibmlkeCIsInJlc2l6ZSQwIiwib3NpemUiLCJrZXlfaW5kZXgiLCJyZW1vdmVfYnVja2V0IiwiZmluZF9yZWMiLCJkMSIsIm5leHQxIiwiZDIiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfaW5fYnVja2V0IiwiemVybyIsInVua25vd24iLCJpc19rbm93biIsInBwX2VucXVldWUiLCJ0b2tlbiIsInBwX2NsZWFyX3F1ZXVlIiwicHBfaW5maW5pdHkiLCJwcF9vdXRwdXRfc3RyaW5nIiwicHBfb3V0cHV0X25ld2xpbmUiLCJwcF9vdXRwdXRfc3BhY2VzIiwicHBfb3V0cHV0X2luZGVudCIsImZvcm1hdF9wcF90ZXh0IiwidGV4dCIsImZvcm1hdF9zdHJpbmciLCJicmVha19uZXdfbGluZSIsImFmdGVyIiwiYmVmb3JlIiwicmVhbF9pbmRlbnQiLCJicmVha19saW5lIiwiYnJlYWtfc2FtZV9saW5lIiwicHBfZm9yY2VfYnJlYWtfbGluZSIsInBwX3NraXBfdG9rZW4iLCJmb3JtYXRfcHBfdG9rZW4iLCJ0YWJzIiwiYWRkX3RhYiIsImxzIiwidGFnX25hbWUiLCJtYXJrZXIiLCJicmVha3MiLCJmaXRzIiwib2ZmIiwib2ZmJDAiLCJpbnNlcnRpb25fcG9pbnQiLCJ0YWJzJDAiLCJmaXJzdCIsImZpbmQiLCJ0YWlsIiwiaGVhZCIsInRhYiIsIm9mZiQxIiwiaW5zZXJ0aW9uX3BvaW50JDAiLCJ3aWR0aCQxIiwiYm94X3R5cGUkMCIsInRib3giLCJ0YWdfbmFtZSQwIiwibWFya2VyJDAiLCJhZHZhbmNlX2xlZnQiLCJwZW5kaW5nX2NvdW50Iiwic2l6ZSQwIiwiZW5xdWV1ZV9hZHZhbmNlIiwidG9rIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJlbnF1ZXVlX3N0cmluZyIsImluaXRpYWxpemVfc2Nhbl9zdGFjayIsInF1ZXVlX2VsZW0iLCJzZXRfc2l6ZSIsImxlZnRfdG90YWwiLCJzY2FuX3B1c2giLCJlbGVtIiwicHBfb3Blbl9ib3hfZ2VuIiwiYnJfdHkiLCJwcF9vcGVuX3N5c19ib3giLCJwcF9jbG9zZV9ib3giLCJwcF9vcGVuX3N0YWciLCJwcF9jbG9zZV9zdGFnIiwicHBfY2xvc2VfdGFnIiwicHBfcmluaXQiLCJjbGVhcl90YWdfc3RhY2siLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYm9vbCIsInBwX3ByaW50X2NoYXIiLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfY3VzdG9tX2JyZWFrIiwicHBfcHJpbnRfYnJlYWsiLCJwcF9wcmludF9jdXQiLCJkaXNwbGF5X25ld2xpbmUiLCJibGFua19saW5lIiwiZGlzcGxheV9ibGFua3MiLCJkZWZhdWx0X3BwX21hcmtfb3Blbl90YWciLCJkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnIiwiZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnIiwicHBfbWFrZV9mb3JtYXR0ZXIiLCJwcF9xdWV1ZSIsInN5c190b2siLCJzY2FuX3N0YWNrIiwicHBfbWFyZ2luIiwibWFrZV9mb3JtYXR0ZXIiLCJvdXRwdXQiLCJmbHVzaCIsInBwZiIsImZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCIsImZvcm1hdHRlcl9vZl9idWZmZXIiLCJwcF9idWZmZXJfc2l6ZSIsInBwX21ha2VfYnVmZmVyIiwic3RkYnVmIiwic3RkX2Zvcm1hdHRlciIsImVycl9mb3JtYXR0ZXIiLCJmbHVzaF9idWZmZXJfZm9ybWF0dGVyIiwicHBfcHJpbnRfbGlzdCIsInBwX3YiLCJvcHQkMCIsInBwX3NlcCIsIm9wdCQxIiwiY29tcHV0ZV90YWciLCJ0YWdfYWNjIiwib3V0cHV0X2Zvcm1hdHRpbmdfbGl0Iiwib3V0cHV0X2FjYyQwIiwiYnR5IiwiYyQwIiwiZiQwIiwicCQ2IiwicCQ3Iiwia2ZwcmludGYkMCIsImZwcmludGYkMCIsImthc3ByaW50ZiIsImFzcHJpbnRmIiwiZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsInRvX2p2Iiwia2V5cyIsImJvdW5kIiwibG93ZXIiLCJ1cHBlciIsImxvd2VyX29wZW4iLCJzdGgkMCIsInVwcGVyX29wZW4iLCJvbGRfdmVyc2lvbiIsIm5ld192ZXJzaW9uIiwidXBncmFkZV9uZWVkZWQiLCJlcnJvciQwIiwib2ZfanYiLCJlcnJvciQxIiwib25fc3VjY2VzcyIsImV2Iiwib25fZXJyb3IiLCJmdXQkMCIsInNldCIsInJlc3VsdF9mdXQiLCJ0b19zdHJpbmckMSIsInRvX2p2JDAiLCJnZXQiLCJqdiIsImdldF9hbGwiLCJnZXRfYWxsX2tleXMiLCJxdWVyeSIsInF1ZXJ5JDAiLCJwcmltYXJ5X2tleSIsImFkdmFuY2UiLCJjb250aW51ZSQwIiwia2V5JDAiLCJwcmltYXJ5X2tleSQwIiwiYWR2YW5jZSQwIiwiY29udGludWUkMSIsImRlbGV0ZSQwIiwidXBkYXRlIiwib3Blbl9jdXJzb3IiLCJkaXJlY3Rpb24iLCJkaXJlY3Rpb24kMCIsImQkMCIsImNyZWF0ZV9pbmRleCIsIkkiLCJrZXlfcGF0aCIsInN0cmluZ19vZl9tb2RlIiwib2JqZWN0X3N0b3JlIiwiUyIsImNyZWF0ZV9vYmplY3Rfc3RvcmUiLCJhdXRvX2luY3JlbWVudCIsIm9wdHMiLCJvcHRzJDAiLCJvcHRpb25zIiwiZGVsZXRlX29iamVjdF9zdG9yZSIsInRyYW5zYWN0aW9uIiwic3RvcmVzIiwibW9kZSQwIiwianZfb2Zfc3RvcmUiLCJvYmplY3Rfc3RvcmVfbmFtZXMiLCJvbl91cGdyYWRlX25lZWRlZCIsInJlcSIsIm9wZW4iLCJ2ZXJzaW9uIiwiZ2V0X2ZhY3RvcnkiLCJnbG9iYWwkMCIsImF1eCIsImEkMCIsImkkMiIsImVxdWFsJDAiLCJyZWN1cnNlIiwic3ltYm9sJDUiLCJpc19ub25lJDAiLCJpdGVyJDIiLCJ2YWx1ZSQwIiwiZ2V0X2V4bl9vciIsInN5bWJvbCQ2IiwibWFwX2VyciIsImdldF9leG4iLCJmbGF0dGVuX2wiLCJzeW1ib2wkNyIsImttcF9wYXR0ZXJuX2xlbmd0aCIsImdldCQxIiwiZGlyIiwia21wX2NvbXBpbGUiLCJmYWlsdXJlIiwia21wX2NvbXBpbGUkMCIsImttcF9maW5kIiwicGF0dGVybiIsInBhdF9sZW4iLCJleHBlY3RlZCIsImZhaWxfb2Zmc2V0IiwiY29tcGlsZSIsInN1YiIsImZpbmQkMCIsInBhdHRlcm4kMCIsInByZSIsImNoZWNrIiwibGV4X2Vycm9yIiwiZXJyb3JfcG9zIiwiY251bSIsImVudW0kMCIsInN0cmluZzJudW0iLCJ1cGRhdGVfcG9zIiwiaW50X29mX2hleGNoYXIiLCJ1dGY4X29mX2NvZGUiLCJ1IiwibWF4X3VzZWRfYml0cyIsInV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIiLCJoaWdoIiwibG93IiwiaGlnaCQwIiwibG93JDAiLCJlc2NhcGluZ19lcnJvciIsIm9mZnMiLCJjcyIsInVuZXNjYXBlX3N0cmluZyIsInUxIiwidTIiLCJyZWFkJDAiLCJvY2FtbF9sZXhfcmVhZF9yZWMiLCJvY2FtbF9sZXhfc3RhdGUiLCJvY2FtbF9sZXhfc3RhdGUkMCIsIm9jYW1sX2xleF9zdGF0ZSQxIiwicmVhZF9jb21tZW50IiwicmVhZF9jb21tZW50JDAiLCJvY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyIsImNyZWF0ZV9mcm9tX2xleGJ1ZiIsImVtc2ciLCJlY2hhciIsInNjaGFyIiwiZWxpbmUiLCJsb2cyIiwiYml0cyQwIiwibWF4X2pzb25faW50Iiwic3RyaW5nX29mX2Zsb2F0X2pzb24iLCJpc19pbnQiLCJpbnRfdmFsdWUiLCJ0b2tlbl9lcnJvciIsInMkMSIsInMkMiIsImpzb25fdmFsdWUiLCJ0b2tlbl92YWx1ZSIsIm9iamVjdF92YWx1ZV9zdGFydCIsImFycmF5X3ZhbHVlX3N0YXJ0IiwidmFyaWFudF92YWx1ZV9zdGFydCIsInR1cGxlX3ZhbHVlX3N0YXJ0IiwiYXJyYXlfdmFsdWVzX3N0YXJ0IiwidG9rJDAiLCJhcnJheV92YWx1ZXMiLCJvYmplY3RfdmFsdWVzX3N0YXJ0IiwiY29sb25fdmFsdWUiLCJvYmplY3RfdmFsdWVzIiwia2V5X2NvbG9uX3ZhbHVlIiwidjEiLCJ2MiIsInR1cGxlX3ZhbHVlcyIsInZhcmlhbnRfZW5kIiwiZGVjb2RlIiwiZXJyJDAiLCJuaWJibGVfdG9faGV4IiwiYWRkX2hleF9ieXRlIiwiZXNjYXBlIiwidG9fanNvbl9zdHJpbmciLCJhZGRfY2hhciQwIiwiYWRkX3N0cmluZyQwIiwiYWRkX3F1b3RlX3N0cmluZyIsInBwX2xpc3QiLCJwcHgiLCJvdXQiLCJmb3JtYXQiLCJqc29uIiwiZm9ybWF0X2ZpZWxkIiwianNvbiQwIiwicyQzIiwicHJldHR5X3ByaW50IiwicHJldHR5X3ByaW50X3RvX3N0cmluZyIsInByZXR0eV9wcmludF90b19jaGFubmVsIiwiZXJyb3IkMiIsInRvX2Fzc29jIiwibnVsbCQxIiwidG9rZW5fdG9fc3RyaW5nIiwicmVhZF9qc29uIiwicmVhZF9qc29uX2Vycm9yX2luZm8iLCJlcnJfaW5mbyIsImpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8iLCJqc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyIsImluYyIsImpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIiwiZmlsZW5hbWUiLCJqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXAiLCJzdHJlYW0iLCJyZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8iLCJmaW4iLCJzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyIsInN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyIsInN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyIsInN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIiwianNvbl90b19jaGFubmVsX2ZtdCIsImVvbCIsImluY3IiLCJwc2VwIiwiYWRkX2ludCIsImFkZF9mbG9hdCIsInBzZXAkMCIsImxkciQxIiwianNvbl9saXN0IiwibGRyJDIiLCJsZHIiLCJqc29uX2Fzc29jIiwibGRyJDAiLCJuZXdzZXAiLCJwYWlyIiwianNvbl90b19jaGFubmVsIiwianNvbl90b19maWxlX2V4biIsImpzb25fdG9fYnVmZmVyIiwianNvbl90b19zdHJpbmciLCJqc29uX2Vycm9yIiwiZXJyb3JfdG9fc3RyaW5nIiwiZXJyb3JfaW5mbyIsImZuYW1lIiwibG51bSIsImxudW0kMCIsImxudW0kMSIsImZuYW1lJDAiLCJsb2MiLCJhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyIsImZyb21fc3RyaW5nIiwidG9fc3RhbmRhcmQiLCJub2RlIiwidiQxIiwidHBsIiwiam9wdCIsInYkMCIsInN0ZCIsImxleF9zdHJpbmciLCJsZXhfbnVtYmVyIiwibGV4X2ludGVnZXIiLCJsZXhfbGFyZ2VpbnQiLCJsZXhfdmFyaWFudCIsImxleF90dXBsZSIsImNvbW1lbnRfY2hlY2siLCJudW1iZXJfdG9fc3RyaW5nIiwibGFyZ2VpbnQiLCJpbnRlZ2VyIiwibnVsbCQyIiwic3RyaW5nJDAiLCJib29sIiwiYXNzb2MiLCJsaXN0IiwidHVwbGUiLCJudW1iZXIiLCJhcnJheV9zdGFydCIsImFycmF5X2VuZCIsIm9iamVjdF9zdGFydCIsIm9iamVjdF9lbmQiLCJ0dXBsZV9zdGFydCIsInR1cGxlX2VuZCIsInZhcmlhbnRfc3RhcnQiLCJsZXhfc3RyaW5nJDAiLCJsZXhfbnVtYmVyJDAiLCJsZXhfaW50ZWdlciQwIiwibGV4X2xhcmdlaW50JDAiLCJsZXhfdmFyaWFudCQwIiwibGV4X3R1cGxlJDAiLCJjb21tZW50X2NoZWNrJDAiLCJudW1iZXJfdG9fc3RyaW5nJDAiLCJsYXJnZWludCQwIiwiaW50ZWdlciQwIiwibnVsbCQzIiwic3RyaW5nJDEiLCJib29sJDAiLCJhc3NvYyQwIiwibGlzdCQwIiwidHVwbGUkMCIsInZhcmlhbnQkMCIsIm51bWJlciQwIiwiYXJyYXlfc3RhcnQkMCIsImFycmF5X2VuZCQwIiwib2JqZWN0X3N0YXJ0JDAiLCJvYmplY3RfZW5kJDAiLCJ0dXBsZV9zdGFydCQwIiwidHVwbGVfZW5kJDAiLCJ2YXJpYW50X3N0YXJ0JDAiLCJ2YXJpYW50X2VuZCQwIiwibmFtZSQwIiwiZnJvbV9zdHJpbmckMCIsInRvX3N0cmluZyQzIiwibGV4X3N0cmluZyQxIiwibGV4X251bWJlciQxIiwibGV4X2ludGVnZXIkMSIsImxleF9sYXJnZWludCQxIiwibGV4X3ZhcmlhbnQkMSIsImxleF90dXBsZSQxIiwiY29tbWVudF9jaGVjayQxIiwibnVtYmVyX3RvX3N0cmluZyQxIiwibGFyZ2VpbnQkMSIsImludGVnZXIkMSIsIm51bGwkNCIsInN0cmluZyQyIiwiYm9vbCQxIiwiYXNzb2MkMSIsImxpc3QkMSIsInR1cGxlJDEiLCJ2YXJpYW50JDEiLCJudW1iZXIkMSIsImFycmF5X3N0YXJ0JDEiLCJhcnJheV9lbmQkMSIsIm9iamVjdF9zdGFydCQxIiwib2JqZWN0X2VuZCQxIiwidHVwbGVfc3RhcnQkMSIsInR1cGxlX2VuZCQxIiwidmFyaWFudF9zdGFydCQxIiwidmFyaWFudF9lbmQkMSIsIm5hbWUkMSIsInRvX2pzdHIkMSIsIm9mX2pzdHIkMSIsImpzdHIiLCJyYW5kb21fc3RhdGUiLCJuZXdfdXVpZF92NCIsInlvanNvbl9vZl9ib29sIiwieW9qc29uX29mX3N0cmluZyIsInlvanNvbl9vZl9pbnQiLCJ5b2pzb25fb2Zfb3B0aW9uIiwieW9qc29uX29mX2EiLCJ5b2pzb25fb2ZfbGlzdCIsImxzdCIsInJlY29yZF9jaGVja19leHRyYV9maWVsZHMiLCJvZl95b2pzb25fZXJyb3IiLCJ3aGF0IiwieW9qc29uIiwiYm9vbF9vZl95b2pzb24iLCJzdHJpbmdfb2ZfeW9qc29uIiwiaW50X29mX3lvanNvbiIsIm9wdGlvbl9vZl95b2pzb24iLCJhX29mX3lvanNvbiIsImxpc3Rfb2ZfeW9qc29uIiwicmV2X2xzdCIsInN0YWdfbm9fYXJncyIsIm5lc3RlZF9saXN0X2ludmFsaWRfc3VtIiwiZW1wdHlfbGlzdF9pbnZhbGlkX3N1bSIsInVuZXhwZWN0ZWRfc3RhZyIsInJlY29yZF9zdXBlcmZsdW91c19maWVsZHMiLCJyZXZfZmxkX25hbWVzIiwiZmxkX25hbWVzX3N0ciIsInJlY29yZF9kdXBsaWNhdGVfZmllbGRzIiwicmVjb3JkX2V4dHJhX2ZpZWxkcyIsInJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AiLCJmaWVsZHMkMCIsInJlY29yZF91bmRlZmluZWRfZWxlbWVudHMiLCJ1bmRlZmluZWQkMCIsInJlY29yZF9saXN0X2luc3RlYWRfYXRvbSIsInN5bWJvbCQ4IiwianN0cl9vZl9tZXRob2QiLCJvcmRlcl9vZl95b2pzb24iLCJ5b2pzb25fb2Zfb3JkZXIiLCJzb3J0X29mX3lvanNvbiIsInlvanNvbl9vZl9zb3J0IiwiaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2giLCJpbWFnZV9ibHVyX2hhc2hlc19vZl95b2pzb24iLCJmaWVsZF95b2pzb25zIiwicHJpbWFyeV9maWVsZCIsImR1cGxpY2F0ZXMiLCJleHRyYSIsImZpZWxkX3lvanNvbiIsImZpZWxkX25hbWUiLCJmdmFsdWUiLCJwcmltYXJ5X3ZhbHVlIiwieW9qc29uX29mX2ltYWdlX2JsdXJfaGFzaGVzIiwidl9wcmltYXJ5IiwiYm5kcyIsImJuZCIsImJuZHMkMCIsInR5cGVfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGUiLCJmaWVsZF9vZl95b2pzb24iLCJ5b2pzb25fb2ZfZmllbGQiLCJ0eXBlX3N0cl9vZl95b2pzb24iLCJ5b2pzb25fb2ZfdHlwZV9zdHIiLCJ0cyIsInRfb2ZfeW9qc29uIiwibmFtZV9maWVsZCIsInNvcnRfbmFtZV9maWVsZCIsImlkX2ZpZWxkIiwicGF0aF9maWVsZCIsImFsYnVtX2lkX2ZpZWxkIiwicGFyZW50X2lkX2ZpZWxkIiwic2VydmVyX2lkX2ZpZWxkIiwiaW1hZ2VfYmx1cl9oYXNoZXNfZmllbGQiLCJ0eXBlX2ZpZWxkIiwiY29sbGVjdGlvbl90eXBlX2ZpZWxkIiwiZnZhbHVlJDAiLCJmdmFsdWUkMSIsImZ2YWx1ZSQyIiwiZnZhbHVlJDMiLCJmdmFsdWUkNCIsImZ2YWx1ZSQ1IiwiZnZhbHVlJDYiLCJmdmFsdWUkNyIsImZ2YWx1ZSQ4Iiwic29ydF9uYW1lX3ZhbHVlIiwicGF0aF92YWx1ZSIsImFsYnVtX2lkX3ZhbHVlIiwicGFyZW50X2lkX3ZhbHVlIiwiY29sbGVjdGlvbl90eXBlX3ZhbHVlIiwidHlwZV92YWx1ZSIsImltYWdlX2JsdXJfaGFzaGVzX3ZhbHVlIiwic2VydmVyX2lkX3ZhbHVlIiwiaWRfdmFsdWUiLCJuYW1lX3ZhbHVlIiwieW9qc29uX29mX3QiLCJ2X2NvbGxlY3Rpb25fdHlwZSIsInZfdHlwZSIsInZfaW1hZ2VfYmx1cl9oYXNoZXMiLCJ2X3NlcnZlcl9pZCIsInZfcGFyZW50X2lkIiwidl9hbGJ1bV9pZCIsInZfcGF0aCIsInZfaWQiLCJ2X3NvcnRfbmFtZSIsInZfbmFtZSIsImFyZyQ4IiwiYm5kJDMiLCJibmRzJDEiLCJhcmckMCIsImJuZHMkMiIsImFyZyQxIiwiYm5kcyQzIiwiYXJnJDIiLCJibmRzJDQiLCJhcmckMyIsImJuZCQwIiwiYm5kcyQ1IiwiYXJnJDQiLCJibmQkMSIsImJuZHMkNiIsImFyZyQ1IiwiYm5kcyQ3IiwidiQyIiwiYXJnJDYiLCJibmQkMiIsImJuZHMkOCIsImFyZyQ3IiwiYm5kcyQ5IiwicGFyYW1zX29mX3lvanNvbiIsImlkc19maWVsZCIsInVzZXJfaWRfZmllbGQiLCJmaWVsZHNfZmllbGQiLCJpbmNsdWRlX2l0ZW1fdHlwZXNfZmllbGQiLCJzdGFydF9pbmRleF9maWVsZCIsImxpbWl0X2ZpZWxkIiwic29ydF9vcmRlcl9maWVsZCIsInNvcnRfYnlfZmllbGQiLCJyZWN1cnNpdmVfZmllbGQiLCJlbmFibGVfdXNlcl9kYXRhX2ZpZWxkIiwiZW5hYmxlX2ltYWdlc19maWVsZCIsImZ2YWx1ZSQ5IiwiZnZhbHVlJDEwIiwiaWRzX3ZhbHVlIiwic3RhcnRfaW5kZXhfdmFsdWUiLCJsaW1pdF92YWx1ZSIsInNvcnRfb3JkZXJfdmFsdWUiLCJlbmFibGVfaW1hZ2VzX3ZhbHVlIiwiZW5hYmxlX3VzZXJfZGF0YV92YWx1ZSIsInJlY3Vyc2l2ZV92YWx1ZSIsInNvcnRfYnlfdmFsdWUiLCJpbmNsdWRlX2l0ZW1fdHlwZXNfdmFsdWUiLCJmaWVsZHNfdmFsdWUiLCJ1c2VyX2lkX3ZhbHVlIiwieW9qc29uX29mX3BhcmFtcyIsInZfZW5hYmxlX2ltYWdlcyIsInZfZW5hYmxlX3VzZXJfZGF0YSIsInZfcmVjdXJzaXZlIiwidl9zb3J0X2J5Iiwidl9zb3J0X29yZGVyIiwidl9saW1pdCIsInZfc3RhcnRfaW5kZXgiLCJ2X2luY2x1ZGVfaXRlbV90eXBlcyIsInZfZmllbGRzIiwidl91c2VyX2lkIiwidl9pZHMiLCJhcmckOSIsImJuZHMkMTAiLCJhcmckMTAiLCJyZXNwb25zZV9vZl95b2pzb24iLCJpdGVtc19maWVsZCIsInRvdGFsX3JlY29yZF9jb3VudF9maWVsZCIsInRvdGFsX3JlY29yZF9jb3VudF92YWx1ZSIsIml0ZW1zX3ZhbHVlIiwieW9qc29uX29mX3Jlc3BvbnNlIiwidl90b3RhbF9yZWNvcmRfY291bnQiLCJ2X2l0ZW1zIiwibWV0aG9kIiwiZW5kcG9pbnQiLCJwYXJhbXNfb2ZfeW9qc29uJDAiLCJpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnRfZmllbGQiLCJpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnRfdmFsdWUiLCJ5b2pzb25fb2ZfcGFyYW1zJDAiLCJ2X2luY2x1ZGVfZXh0ZXJuYWxfY29udGVudCIsInJlc3BvbnNlX29mX3lvanNvbiQwIiwieW9qc29uX29mX3Jlc3BvbnNlJDAiLCJlbmRwb2ludCQwIiwicHAiLCJ2aXJ0dWFsX2ZvbGRlcl9vZl95b2pzb24iLCJsb2NhdGlvbnNfZmllbGQiLCJpdGVtX2lkX2ZpZWxkIiwiaXRlbV9pZF92YWx1ZSIsImxvY2F0aW9uc192YWx1ZSIsInlvanNvbl9vZl92aXJ0dWFsX2ZvbGRlciIsInZfaXRlbV9pZCIsInZfbG9jYXRpb25zIiwic2Vzc2lvbl91dWlkIiwic2V0X3Nlc3Npb25fdXVpZCIsImF1dGhvcml6YXRpb24iLCJ0b2tlbiQwIiwic2Vzc2lvbl91dWlkJDAiLCJyZXF1ZXN0JDEiLCJiYXNlX3VybCIsImhlYWRlcnMiLCJRIiwicGF0aF9wYXJhbXMiLCJ1cmkiLCJhdXRob3JpemF0aW9uJDAiLCJoZWFkZXJzJDAiLCJib2R5IiwidXJsJDAiLCJwYXJhbXMkMCIsInVyaV93aXRoX3BhcmFtcyIsInVybCQxIiwiaW5pdCQwIiwibWV0aG9kJDAiLCJnZXRfdG9rZW4iLCJ0YWdfb2YiLCJmdXR1cmVzIiwibGlzdGVuZXJzIiwid29ya2VyIiwib25fbWVzc2FnZSIsIm1lc3NhZ2UiLCJ1dWlkIiwiZGlzcGF0Y2hfZXZlbnQiLCJhcHBseSIsInRfdG9fanYiLCJlbmNvZGVyIiwianZfdG9fdCIsImRlY29kZXIiLCJ0X29mX3lvanNvbiQwIiwiaXRlbV9maWVsZCIsIml0ZW1fdmFsdWUiLCJ5b2pzb25fb2ZfdCQwIiwidl9pdGVtIiwidG9fanYkMSIsIm9mX2p2JDAiLCJ0b19qdiQyIiwib2ZfanYkMSIsImdldF9rZXkiLCJzb3J0c19vZl95b2pzb24iLCJkYXRlX2FkZGVkX2ZpZWxkIiwidmlld3NfZmllbGQiLCJ2aWV3c192YWx1ZSIsImRhdGVfYWRkZWRfdmFsdWUiLCJ5b2pzb25fb2Zfc29ydHMiLCJ2X3ZpZXdzIiwidl9kYXRlX2FkZGVkIiwidF9vZl95b2pzb24kMSIsInNvcnRzX2ZpZWxkIiwic29ydHNfdmFsdWUiLCJ5b2pzb25fb2ZfdCQxIiwidl9zb3J0cyIsInRvX2p2JDMiLCJ2aWV3cyIsInNvcnRfbmFtZSIsImlkJDAiLCJzb3J0X25hbWUkMCIsInZpZXdzJDAiLCJvZl9qdiQyIiwicGF0aCQwIiwidG9fanYkNCIsIm9mX2p2JDMiLCJ0b19qdiQ1Iiwib2ZfanYkNCIsInRvX2p2JDYiLCJvZl9qdiQ1IiwidHlwZSIsInBhdGgkMyIsInRvX2p2JDciLCJvZl9qdiQ2IiwiY29sbGVjdGlvbl90eXBlIiwicGF0aCQ0IiwidG9fanYkOCIsIm9mX2p2JDciLCJnZXRfa2V5JDAiLCJ0b19qdiQ5Iiwib2ZfanYkOCIsInRvX2p2JDEwIiwib2ZfanYkOSIsImdldF9rZXkkMSIsImNodW5rX3NpemUiLCJmZXRjaF90b3RhbF9pdGVtX2NvdW50Iiwic291cmNlIiwiZ2V0X2RiX2luZm9zIiwiaWRiIiwic2V0X2luZm9zIiwiaW5mb3MiLCJ0cmFuc2FjdGlvbiQwIiwic3RvcmUiLCJsYXN0X2tleSIsImN1cnNvciIsIml0ZW0iLCJpc19kYl9jb25zaXN0ZW50IiwibGFzdF9zb3VyY2VfaXRlbV9rZXkiLCJkYl9zeW5jX2luZm9zIiwiY2hlY2tfc3RhdHVzIiwiZGJfaW5mb3MiLCJ0b3RhbF9pdGVtX2NvdW50IiwiZmlyc3RfdW5mZXRjaGVkX2tleSIsIml0ZW0kMCIsInVwZGF0ZV92aWV3cyIsInNfaXRlbXMiLCJkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmkiLCJwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4iLCJwYXJlbnRfaWQiLCJwaWQiLCJwYXRoc19vZl9wYXJlbnRzIiwicGFyZW50cyIsInBhdGhzIiwidmlld3Nfb2ZfcGF0aCIsInZmb2xkZXJzIiwibG9jYXRpb25zIiwidmlld19pZCIsInN5bmMiLCJyZXBvcnQiLCJtYWtlX3BsYWNlaG9sZGVycyIsImxhc3QiLCJmZXRjaF9taXNzaW5nX2l0ZW1zIiwiZmV0Y2hfcXVldWUiLCJlbnF1ZXVlIiwic3RhcnRfaW5kZXgiLCJ0b2RvIiwic3RhcnRfaW5kZXgkMCIsInRvZG8kMCIsInRvZG8kMSIsInN0YXJ0X2luZGV4JDEiLCJ0b3RhbF9xdWVyaWVzIiwicnVuX3F1ZXVlIiwidGhyZWFkcyIsInRha2VfbiIsImVsdCIsIml0ZW1zIiwiaWRiX3B1dCIsInNfbGlzdCIsImluZGV4JDAiLCJyZXFzIiwiZmlyc3RfbWlzc2luZ19rZXkiLCJsYXN0X3NvdXJjZV9pdGVtX2tleSQwIiwiZmlyc3RfdW5mZXRjaGVkX2tleSQwIiwiY2hlY2tfYW5kX3N5bmMiLCJpbml0aWFsIiwicmVwb3J0JDAiLCJzeW5jX3Byb2dyZXNzIiwib25fdXBncmFkZV9uZWVkZWQkMCIsIm5ld192ZXJzaW9uJDAiLCJvbGRfdmVyc2lvbiQwIiwiZGIiLCJ2aXJ0dWFsX2ZvbGRlcnMiLCJpbmRleF9kYXRlX2FkZGVkIiwid2l0aF9pZGIiLCJkYnIiLCJtYXBfZXJyb3IiLCJhc19mdXQiLCJmdXRfb2ZfYXJyYXkiLCJmdXQiLCJwcm9taXNlIiwiYXJyIiwiYWxsJDAiLCJ0b19hcnJheSQwIiwiY2hlY2tfZGIiLCJzb3VyY2UkMCIsInNlcnZlcl9pZCIsInNldF9pZGIiLCJyZWFkX29ubHlfc3RvcmUiLCJ2aWV3X21lbW8iLCJsYXN0X3ZpZXciLCJnZXRfdmlld19rZXlzIiwiZmlsdGVycyIsInNvcnQkMCIsInNyY192aWV3cyIsImhhc2gkMCIsInN1YiQwIiwia2V5cyQwIiwic25iIiwic25hIiwiYWxsX2tleXMiLCJzcmNfdmlld3MkMCIsIm9uX3F1ZXJ5IiwiaXRlbXMkMCIsInNlcnZlcl9pZCQwIiwicmVxdWVzdCIsIml0ZW1fY291bnQiLCJpbmRleGVzIiwib3JkZXIiLCJpbmRleCQxIiwicmVzdWx0cyJdLCJzb3VyY2VzIjpbIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLyttbEJ5dGVzLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK2JpZ2FycmF5LmpzIiwiL2J1aWx0aW4vK2ludHMuanMiLCIvYnVpbHRpbi8raGFzaC5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rZm9ybWF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rZnMuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2xleGluZy5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raW8uanMiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9sZXhpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9wcmludGV4Yy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9jb21wbGlhbnRfbGV4eGVyLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYXRhX3NvdXJjZS9qZWxseWZpbl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3N0b3Jlcy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvc3luYy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEF0b21pYy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0ZGxpYi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NJbnQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9vYmoubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxMYXp5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvb3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcmVzdWx0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0NoYXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jaGFyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbGlzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2ludC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2J5dGVzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYXJyYXkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zZXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGFjay5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3F1ZXVlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RyZWFtLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYnVmZmVyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcHJpbnRmLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udl9lcnJvci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2Z1bi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2RpZ2VzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2hhc2h0YmwubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9mb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYWxsYmFjay5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzX29mX29jYW1sLWNvbXBpbGVyL3J1bnRpbWUvanNvb19ydW50aW1lLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJlci9pbmRleGVkX2RiLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0FycmF5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0xpc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDT3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NSZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9sZXh4ZXJfdXRpbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvZXJyb3JfaW5mby5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9qc29uX2Zsb2F0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3BhcnNlcl90b29scy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wYXJzZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvdXRpbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcHJldHR5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3Byb2Nlc3MubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvdG9rZW5fdXRpbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcmVhZGVyX3N0cmluZ19maWxlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3dyaXRlcl9maWxlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3dyaXRlcl9zdHJpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQveW9qc29uLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zdGQvc3RkLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIvcHB4X3lvanNvbl9jb252X2xpYi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGF0YV9zb3VyY2UvamVsbHlmaW4ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3dvcmtlcl9hcGkvd29ya2VyX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvdmlldy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvZGJfd29ya2VyX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvZGIubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2RiX3dvcmtlci9kYl93b3JrZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGRfZXhpdC5tbCJdLCJtYXBwaW5ncyI6Ijs7QSxDOztHOzs7UTtTOzs7RztJO0k7STtHO0U7Ozs7R0FxREEsU0FBU0EsZ0JBQWdCQyxJQUFJQyxJQUFJQyxJQUFJQyxJQUFJQztJQUN2QyxHQUFJRCxNQUFNRjtLQUFJLElBQ0QsSUFBRkksT0FBT0EsS0FBS0QsS0FBS0MsS0FBS0gsR0FBR0MsS0FBS0UsS0FBS0wsR0FBR0MsS0FBS0k7O0tBQy9DLElBQ00sSUFBRkEsSUFBSUQsS0FBS0MsUUFBUUEsS0FBS0gsR0FBR0MsS0FBS0UsS0FBS0wsR0FBR0MsS0FBS0k7SUFFdEQ7R0FDRjtHQ1lBLFNBQVNDLHlCQUEwQkMsR0FBR0MsR0FBR0o7SUFDakMsSUFBRkssSUFBSUM7SUFDUixHQUFJRixVQUFVSixlQUFlQSxPQUFPRyxVQUFVLE9BQU9FLFFBQVNFLE1BQU1KO0lBQzlELElBQUZLO0lBQ0osVUFBV1IsS0FBS0ksV0FBVUo7S0FDeEJRLEtBQUtILFFBQVNFLE1BQU1KLFFBQVFDLEdBQUVBLElBQUlLLFNBQVNUO0lBQzdDLE9BQU9RO0dBQ1Q7R0FxWEEsU0FBU0UsNEJBQTZCRjtJQUVwQyxJQUFJTCxRQUFRUSxXQUFXSCxNQUNuQkksSUFBSUosS0FBS0ssSUFBSUQsVUFBVVI7SUFDM0IsTUFBT0EsSUFBSVMsR0FBR1QsS0FBS0QsRUFBRUMsS0FBS1EsYUFBYVI7SUFDdkMsSUFBS1MsSUFBSUwsS0FBS0osSUFBSVMsR0FBR1QsS0FBS0QsRUFBRUM7SUFDNUJJLE1BQU1MO0lBQ05LO0lBQ0EsT0FBT0w7R0FDVDtHQWlKQSxTQUFTVyxnQkFBZ0JDLElBQUlsQixJQUFJbUIsSUFBSWpCLElBQUlDO0lBQ3ZDLEdBQUlBLFVBQVU7SUFDZCxHQUFLRCxZQUNBQyxPQUFPZ0IsUUFBU0EsYUFBMkJoQixPQUFPZ0IsYUFBZTtLQUNwRUE7TUFBUUQ7U0FDTmIseUJBQXlCYSxNQUFNbEIsSUFBSUc7U0FDbENILFdBQVdrQixlQUFlZixNQUFLZSxPQUFLQSxZQUFZbEIsSUFBSUc7S0FDdkRnQixPQUFRQSxlQUFlQTs7WUFDZEEsYUFBMkJqQixNQUFNaUIsWUFBYTtLQUN2REE7TUFBU0Q7U0FDUGIseUJBQXlCYSxNQUFNbEIsSUFBSUc7U0FDbENILFdBQVdrQixlQUFlZixNQUFLZSxPQUFLQSxZQUFZbEIsSUFBSUc7S0FDdkRnQixPQUFRQSxlQUFlQTs7UUFDbEI7S0FDTCxHQUFJQSxXQUF1Qk4sNEJBQTRCTTtLQUN2RCxJQUFJQyxLQUFLRixNQUFNRyxLQUFLRjtLQUNwQixHQUFJRDtNQUF1QixHQUNyQmhCLE1BQU1GO09BQUksSUFDRCxJQUFGTyxPQUFPQSxJQUFJSixLQUFLSSxLQUFLYyxHQUFJbkIsS0FBS0ssS0FBS2EsR0FBSXBCLEtBQUtPOztPQUNoRCxJQUNNLElBQUZBLElBQUlKLFNBQVNJLFFBQVFBLEtBQUtjLEdBQUluQixLQUFLSyxLQUFLYSxHQUFJcEIsS0FBS087U0FFdkQ7TUFDQyxJQUFGUyxJQUFJSixTQUFVVCxLQUFLaUIsWUFBWXBCO01BQ25DLElBQVcsSUFBRk8sT0FBT0EsSUFBSVMsR0FBR1QsS0FBS2MsR0FBSW5CLEtBQUtLLEtBQUthLGNBQWNwQixLQUFLTztNQUM3RCxNQUFPQSxJQUFJSixLQUFLSSxLQUFLYyxHQUFJbkIsS0FBS0s7OztJQUdsQztHQUNGO0dBMWtCQSxTQUFTZSxnQkFBZ0JDLEdBQUdaO0lBQzFCLEdBQUdZLFFBQVE7SUFDWCxHQUFJWixVQUFVLE9BQVFBLFNBQVNZO0lBQy9CLElBQUlDLFFBQVFSO0lBQ1osT0FBUTtLQUNOLEdBQUlPLE9BQU9DLEtBQUtiO0tBQ2hCWTtLQUNBLEdBQUlBLFFBQVEsT0FBT0M7S0FDbkJiLEtBQUtBO0tBQ0xLO0tBQ0EsR0FBSUEsUUFDRkw7O0dBS047R0F5WEEsU0FBU2MsNkJBQThCZDtJQUVyQyxHQUFJQTtLQUNGQSxPQUFPVyxnQkFBZ0JYLE1BQU1BOztLQUU3QkEsTUFBTU4seUJBQTBCTSxRQUFRQTtJQUMxQ0E7R0FDRjtHQTdSQSxTQUFTZSxjQUFlZjtJQUV0QixHQUFJQSxjQUFlO0tBRWpCLElBQVcsSUFBRkosT0FBT0EsSUFBSUksVUFBVUosS0FBSyxHQUFJSSxhQUFhSixVQUFVO0tBQzlEOzs7S0FFQSxTQUFRLG9CQUFvQkk7R0FDaEM7R0F2REEsU0FBU2dCLG1CQUFtQmhCO0lBQzFCLFFBQVNJLFFBQVFhLFFBQVFDLEdBQUdULElBQUlDLElBQUlTLEdBQUd2QixPQUFPUyxJQUFJTCxVQUFVSixJQUFJUyxHQUFHVCxJQUFLO0tBQ3RFYSxLQUFLVCxhQUFhSjtLQUNsQixHQUFJYSxVQUFXO01BQ2IsSUFBVyxJQUFGaEIsSUFBSUcsT0FBUUgsSUFBSVksTUFBT0ksS0FBS1QsYUFBYVAsWUFBWUEsS0FBSTtNQUNsRSxHQUFJQSxJQUFJRyxRQUFTO09BQUVxQjtPQUFnQmIsS0FBS2E7T0FBR0E7T0FBUWIsS0FBS0osUUFBUUosR0FBR0g7OztPQUM5RHdCLEtBQUtqQixRQUFRSixHQUFHSDtNQUNyQixHQUFJQSxLQUFLWSxHQUFHO01BQ1pULElBQUlIOztLQUVOMEI7S0FDQSxLQUFPdkIsSUFBSVMsT0FBU0ssS0FBS1YsYUFBYUosbUJBQW9CO01BQ3hEc0IsSUFBSVIsTUFBTUQ7TUFDVixHQUFJQSxVQUFXO09BQ2JVLElBQUlEO09BQ0osR0FBSUMsVUFBVUE7O1VBQ1Q7T0FDTEE7T0FDQSxLQUFPdkIsSUFBSVMsT0FBU0ssS0FBS1YsYUFBYUosbUJBQW9CO1FBQ3hEc0IsSUFBSVIsTUFBTVE7UUFDVixHQUFJVCxVQUFXO1NBQ2JVLElBQUlEO1NBQ0osR0FBS0MsYUFBZ0JBLGVBQWlCQSxZQUFjQTs7WUFDL0M7U0FDTEE7U0FDQSxLQUFPdkIsSUFBSVMsT0FBU0ssS0FBS1YsYUFBYUosc0JBQ2pDYSxVQUFZO1VBQ2ZVLElBQUlULGtCQUFrQlE7VUFDdEIsR0FBSUMsZUFBZUEsY0FBY0E7Ozs7OztLQU0zQyxHQUFJQSxNQUFPO01BQ1R2QixLQUFLdUI7TUFDTEY7O2FBQ1NFO01BQ1RGLEtBQUtuQiw4QkFBOEJxQixvQkFBb0JBOztNQUV2REYsS0FBS25CLG9CQUFvQnFCO0tBQzNCLEdBQUlGLGdCQUFpQixDQUFDQSxnQkFBZ0JiLEtBQUthLEdBQUdBOztJQUVoRCxPQUFPYixJQUFFYTtHQUNYO0dBMFBBLFNBQVNHLFFBQVNDLEtBQUtDLFVBQVVDO0lBQy9CQyxTQUFPSDtJQUFLRyxTQUFPRjtJQUFVRSxTQUFPRDtHQUN0QztHQUNBSDs7S0FDRSxPQUFRSTs7UUFFTixPQUFPQTtnQkFFUFYsNkJBQTZCVTs7UUFFN0IsR0FBSVQsY0FBY1MsUUFBUyxDQUN6QkEsWUFDQSxPQUFPQSxTQUVUQTs7UUFFQSxPQUFPQTs7SUFia0I7R0FnQjdCSjs7S0FDUSxJQUFGUCxJQUFJVztLQUNSLEdBQUdBLGFBQWEsT0FBT1g7S0FDdkIsT0FBT0csbUJBQW1CSDtJQUhBO0dBSzVCTzs7S0FDYyxJQUFSSyxVQUFVRCxjQUFjQSxpQkFBaUJBO0tBQzdDLFdBQVdKLFFBQVFJLFFBQU9DLFNBQVFEO0lBRlY7R0F3VDFCLFNBQVNFLHNCQUFzQjFCLEdBQUssV0FBV29CLFdBQVVwQixHQUFFQSxVQUFXO0dBckJ0RSxTQUFTMkIsdUJBQXVCQyxHQUFLLE9BQU9BLEVBQUU7R0FWOUMsU0FBU0MscUJBQXFCN0I7SUFDNUIsT0FBTzBCLHNCQUFzQkMsdUJBQXVCM0I7R0FDdEQ7R0EvRUEsU0FBUzhCLGlCQUFpQm5DLEdBQUVTLEdBQUVjLEdBQUVhLEdBQUVDO0lBQ2hDMUIsZ0JBQWdCdUIscUJBQXFCbEMsSUFBR1MsR0FBRWMsR0FBRWEsR0FBRUM7SUFDOUM7R0FDRjtHQ3BoQkEsU0FBU0MsZ0JBQWdCckI7SUFDWCxJQUFSc0IsVUFBVUM7SUFFZCxHQUFHRCxXQUNHQSxlQUNBQSxZQUFZdEIsTUFBTXdCO0tBQ3RCLE9BQU9GLFlBQVl0QjtJQUNyQixHQUFHdUIsOEJBQ0dBLDJCQUEyQnZCO0tBQy9CLE9BQU91QiwyQkFBMkJ2QjtHQUN0QztHQ3BHK0IsSUFBM0J5QjtHQUVKLENBQUE7TUFDUSxJQUFGeEIsSUFBSW9CO01BQ1IsR0FBR3BCLE1BQU11QixVQUFVO09BQ1gsSUFBRi9CLElBQUlRO09BQ1IsSUFBVSxJQUFGakIsT0FBT0EsSUFBSVMsVUFBVVQ7UUFBSSxHQUM1QlMsRUFBRVQsVUFBVztTQUFFeUM7U0FBZ0M7O2dCQUN6Q2hDLEVBQUVUO1NBQ1R5QywrQkFBK0JoQyxFQUFFVDs7U0FDOUI7O0tBUlY7O0dDMEhvQixJQUFqQjBDO0dDNkJKLFNBQVNDLDJCQUEyQkMsS0FBS0M7SUFFdkMsS0FBSUQsZ0JBQWdCQyxTQUFTRDtLQUFlQSxtQkFBbUJMO0lBQy9ELE9BQU9LO0dBQ1Q7R0FiQSxTQUFTRSw0QkFBNEJGLEtBQUtDO0lBQ3hDLE9BQUdKO2NBQ01FLDJCQUEyQkMsS0FBS0M7Y0FDN0JEO0dBQ2Q7R0NoSkEsU0FBU0csb0JBQXFCdEIsS0FBS3VCO0lBQU8sTUFBTUYsZ0NBQWdDckIsS0FBS3VCO0dBQU87R0wwckI1RixTQUFTQyx1QkFBdUJqQixHQUFLLE9BQU9BLEVBQUU7R0tsckI5QyxTQUFTa0IsdUJBQXdCekIsS0FBSzBCO0lBQ3BDSixvQkFBcUJ0QixLQUFLd0IsdUJBQXVCRTtHQUNuRDtHQWFBLFNBQVNDLHNCQUF1QkQ7SUFDOUJELHVCQUF1QlIsbUNBQW1DUztHQUM1RDtHTGtLQSxTQUFTRTtJQUNQRDtHQUNGO0dBekJBLFNBQVNFLHNCQUF1QmxELEdBQUdKLEdBQUdzQjtJQUVwQ0E7SUFDQSxHQUFJbEIsU0FBc0I7S0FDeEIsR0FBSUosS0FBS0ksV0FBWTtNQUNuQkEsT0FBT0Ysb0JBQXFCb0I7TUFDNUIsR0FBSXRCLFNBQVNJLEtBQUtBO01BQ2xCOztLQUVGRSw0QkFBNkJGOztJQUUvQkEsSUFBSUosS0FBS3NCO0lBQ1Q7R0FDRjtHQWlNQSxTQUFTaUMsZUFBZ0JuRCxHQUFHSixHQUFHc0I7SUFDN0IsR0FBSXRCLFdBQVdJLEtBQUtpRDtJQUNwQixPQUFPQyxzQkFBdUJsRCxHQUFHSixHQUFHc0I7R0FDdEM7R0E5TkEsU0FBU2tDLHNCQUF1QnBELEdBQUdKO0lBQ2pDLE9BQVFJO2VBRU4sR0FBSUosS0FBS0ksWUFBWTs7T0FFckIsT0FBT0EsZUFBZUo7O09BRXRCLE9BQU9JLElBQUlKOztHQUVmO0dHbEtBLFNBQVN5RCxjQUFjeEQsR0FBR3lEO0lBQ3hCO0tBQUkxQyxJQUFLZixXQUFVQSxNQUFLQSxNQUFNQTtLQUMxQjBELFVBQVVEO0tBQ1Z2QixJQUFJbkIsSUFBSTJDO0lBQ1osR0FBSXhCO0tBQ0YsT0FBT2xDLFFBQVFFLE1BQU11RDtZQUNkdkIsTUFBTztLQUNSLElBQUZ5QixJQUFJM0QsUUFBUUUsTUFBS3VELGNBQWExQztLQUNsQyxVQUFVNEMsa0JBQWtCLE9BQU9BO0tBQ25DLE9BQU9ILGNBQWNHLEdBQUVGLFdBQVcxQzs7UUFFL0I7S0FDSCxPQUFRbUI7O1FBQ0E7U0FDQTtVQUFGeUI7cUJBQWM1QjthQUNOLElBQU42QixZQUFZQyxNQUFNSDthQUN0QixJQUFVLElBQUYzRCxPQUFPQSxJQUFJMkQsU0FBUzNELEtBQU02RCxNQUFNN0QsS0FBSzBELEtBQUsxRDthQUNsRDZELE1BQU1GLFdBQVczQjthQUNqQixPQUFPL0IsUUFBUUUsTUFBTTBEO1lBSmY7U0FNUjs7O1FBRU07U0FDQTtVQUFGRDtxQkFBYzVCLEdBQUcrQjthQUNULElBQU5GLFlBQVlDLE1BQU1IO2FBQ3RCLElBQVUsSUFBRjNELE9BQU9BLElBQUkyRCxTQUFTM0QsS0FBTTZELE1BQU03RCxLQUFLMEQsS0FBSzFEO2FBQ2xENkQsTUFBTUYsV0FBVzNCO2FBQ2pCNkIsTUFBTUYsZUFBZUk7YUFDckIsT0FBTzlELFFBQVFFLE1BQU0wRDtZQUxmO1NBT1I7OztRQUdNO1NBQUZEOztZQUNGO2FBQUlJLGFBQWNDLDRCQUF5QkE7YUFDdkNKLFlBQVlDLE1BQU1KLGNBQVlNO1lBQ2xDLElBQVUsSUFBRmhFLE9BQU9BLElBQUkwRCxhQUFhMUQsS0FBTTZELE1BQU03RCxLQUFLMEQsS0FBSzFEO1lBQ3RELElBQVUsSUFBRkEsT0FBT0EsSUFBSWlFLGtCQUFrQmpFO2FBQU02RCxNQUFNSCxjQUFZMUQsS0FBS2lFLFVBQVVqRTtZQUM1RSxPQUFPeUQsY0FBY3hELEdBQUc0RDtXQUxsQjs7S0FRVkQsTUFBTXpCO0tBQ04sT0FBT3lCOztHQUVYO0dFS0EsU0FBU007SUFDUGQ7R0FDRjtHTndCQSxTQUFTZSxpQkFBa0JDLE9BQU9DO0lBQ2hDLEdBQUlBLGVBQWVELGtCQUFrQkY7SUFDckMsT0FBT0U7R0FDVDtHT21GQSxTQUFTRSxvQkFBcUJ0QztJQUM1QixHQUFJdUMsU0FBVXZDLEdBQUk7S0FDaEIsR0FBSTNCLFNBQVMyQiwrQkFBK0I7S0FDNUMsR0FBSUEsUUFBUTtLQUNaOztJQUVGLE9BQU93QyxNQUFNeEM7R0FDZjtHQ2lCQSxTQUFTeUMseUJBQXlCcEQsR0FDaEMsU0FDRjtHRDdMWSxJQUFScUQsVUFBVXJFLGFBQWFBO0dBQzNCLFNBQVNzRSxnQkFBZ0IzQztJQUN2QixHQUFHMEMsU0FBUyxPQUFPckUsV0FBV0EsVUFBVTJCO0lBQ2xDLElBQUZoQztJQUNKLEdBQUlnQyxRQUFRLFNBQVE0QztJQUNwQixHQUFHNUMsUUFBTSxNQUFRQSxPQUFNLENBQUNBLFFBQU1oQyxXQUN6QixNQUFRZ0MsTUFBTyxDQUFDQSxRQUFNaEM7SUFDM0IsT0FBT0E7R0FDVDtHQXdDQSxTQUFTNkUseUJBQTBCN0M7SUFDcEIsSUFBVDhDLGVBQWVDO0lBQ25CRCxjQUFjOUM7SUFDSCxJQUFQZ0QsYUFBYUMsV0FBV0g7SUFDNUIsT0FBT0U7R0FDVDtHRXJEc0IsSUFBbEJFLG9CQUFvQjdFO0dIQXhCLFNBQVM4RSxvQkFBcUIxRCxLQUFPLE1BQU1BLElBQUs7R0F1Q2hELFNBQVMyRDtJQUNQRCxvQkFBb0J6QztHQUN0QjtHR3JDQSxTQUFTMkMsUUFBU0MsSUFBR0MsSUFBR0M7SUFDdEI1RCxVQUFVMEQ7SUFDVjFELFVBQVUyRDtJQUNWM0QsVUFBVTREO0dBQ1o7R0FDQUg7R0FDQUE7ZUFDRSxXQUFXQSxRQUFRekQsU0FBUUEsU0FBUUEsU0FEWjtHQUl6QnlEO2FBQXVDckQ7S0FDckMsR0FBSUosVUFBVUksTUFBTTtLQUNwQixHQUFJSixVQUFVSSxNQUFNO0tBQ3BCLEdBQUlKLFVBQVVJLE1BQU07S0FDcEIsR0FBSUosVUFBVUksTUFBTTtLQUNwQixHQUFJSixVQUFVSSxNQUFNO0tBQ3BCLEdBQUlKLFVBQVVJLE1BQU07S0FDcEI7SUFQMkI7R0FTN0JxRDthQUFzQ3JEO0tBQ3BDLElBQUl3RCxLQUFLNUQsZUFDTDZELE1BQU16RDtLQUNWLEdBQUl3RCxLQUFLQyxLQUFLO0tBQ2QsR0FBSUQsS0FBS0MsS0FBSztLQUNkLEdBQUk3RCxVQUFVSSxNQUFNO0tBQ3BCLEdBQUlKLFVBQVVJLE1BQU07S0FDcEIsR0FBSUosVUFBVUksTUFBTTtLQUNwQixHQUFJSixVQUFVSSxNQUFNO0tBQ3BCO0lBVDBCO0dBVzVCcUQ7O0tBQ0U7TUFBSUMsT0FBTzFEO01BQ1AyRCxPQUFPM0QsV0FBVzBEO01BQ2xCRSxPQUFPNUQsV0FBVzJEO0tBQ3RCLFdBQVdGLFFBQVFDLElBQUlDLElBQUlDO0lBSkw7R0FNeEJIO2FBQWtDckQ7S0FDaEM7TUFBSXNELEtBQUsxRCxVQUFVSTtNQUNmdUQsS0FBSzNELFVBQVVJLFFBQVFzRDtNQUN2QkUsS0FBSzVELFVBQVVJLFFBQVF1RDtLQUMzQixXQUFXRixRQUFRQyxJQUFJQyxJQUFJQztJQUpMO0dBTXhCSDthQUFrQ3JEO0tBQ2hDO01BQUlzRCxLQUFLMUQsVUFBVUk7TUFDZnVELEtBQUszRCxVQUFVSSxRQUFRc0Q7TUFDdkJFLEtBQUs1RCxVQUFVSSxRQUFRdUQ7S0FDM0IsV0FBV0YsUUFBUUMsSUFBSUMsSUFBSUM7SUFKTDtHQU14Qkg7YUFBa0NyRDtLQUNoQztNQUFJc0QsS0FBSzFELFVBQVVJO01BQ2Z1RCxNQUFPRCxLQUFLSix5QkFBMEJ0RCxVQUFVSSxPQUFPSixVQUFVSTtNQUNqRXdEO1NBQU9ELEtBQUtMLHlCQUEwQnRELFVBQVVJLE9BQU9KLFVBQVVJO1VBQU9KLFVBQVVJO0tBQ3RGLFdBQVdxRCxRQUFRQyxJQUFJQyxJQUFJQztJQUpMO0dBTXhCSDtlQUNFLFFBQVF6RCxVQUFRQSxVQUFRQSxjQURDO0dBRzNCeUQscUNBQ0UsT0FBUXpELGtCQURnQjtHQUcxQnlEO2FBQWtDckQ7S0FDaEMsV0FBV3FELFFBQVF6RCxVQUFVSSxNQUFNSixVQUFVSSxNQUFNSixVQUFVSTtJQUR2QztHQUd4QnFEO2FBQWlDckQ7S0FDL0IsV0FBV3FELFFBQVF6RCxVQUFRSSxNQUFNSixVQUFRSSxNQUFNSixVQUFRSTtJQURsQztHQUd2QnFEO2FBQWtDckQ7S0FDaEMsV0FBV3FELFFBQVF6RCxVQUFRSSxNQUFNSixVQUFRSSxNQUFNSixVQUFRSTtJQURqQztHQUd4QnFEO2FBQXlDakY7S0FDdkNBLElBQUlBO0tBQ0osR0FBSUEsUUFBUSxPQUFPd0I7S0FDbkIsR0FBSXhCO01BQVE7Y0FDQ2lGO2VBQVN6RCxXQUFXeEI7ZUFDVndCLFdBQVd4QixJQUFNd0IsZ0JBQWlCeEI7ZUFDbEN3QixXQUFXeEIsSUFBTXdCLGdCQUFpQnhCO0tBRXpELEdBQUlBO01BQ0Y7Y0FBV2lGO2tCQUNTekQsV0FBWXhCLFFBQ1h3QixXQUFZeEIsU0FBWXdCLGdCQUFpQnhCO0tBQ2hFLFdBQVdpRixjQUFjekQsV0FBWXhCO0lBWlI7R0FjL0JpRjthQUFtRGpGO0tBQ2pEQSxJQUFJQTtLQUNKLEdBQUlBLFFBQVEsT0FBT3dCO0tBQ25CLEdBQUl4QjtNQUNGO2NBQVdpRjtlQUNSekQsV0FBV3hCLElBQU13QixnQkFBaUJ4QjtlQUNsQ3dCLFdBQVd4QixJQUFNd0IsZ0JBQWlCeEI7ZUFDbEN3QixXQUFXeEI7S0FDaEIsR0FBSUE7TUFDRjtjQUFXaUY7ZUFDUnpELFdBQVl4QixTQUFZd0IsZ0JBQWlCeEIsR0FDekN3QixXQUFZeEI7S0FFakIsV0FBV2lGLFFBQVN6RCxXQUFZeEI7SUFiTztHQWV6Q2lGO2FBQTBDakY7S0FDeENBLElBQUlBO0tBQ0osR0FBSUEsUUFBUSxPQUFPd0I7S0FDYixJQUFGOEQsSUFBSzlEO0tBQ1QsR0FBSXhCO01BQ0Y7Y0FBV2lGO2VBQ1J6RCxXQUFXeEIsSUFBTXdCLGdCQUFpQnhCO2VBQ2xDd0IsV0FBV3hCLElBQU1zRixVQUFXdEY7ZUFDM0J3QixpQkFBa0J4QjtLQUNmLElBQUx1RixPQUFRL0Q7S0FDWixHQUFJeEI7TUFDRjtjQUFXaUY7ZUFDUnpELFdBQVl4QixTQUFZd0IsZ0JBQWlCeEI7ZUFDekN3QixpQkFBbUJ4QjtlQUNwQnVGO0tBQ0osV0FBV04sUUFBVXpELGlCQUFtQnhCLFFBQVN1RixNQUFNQTtJQWZ6QjtHQWlCaENOOztLQUNFekQsVUFBV0EsZUFBaUJBO0tBQzVCQSxXQUFZQSxlQUFpQkE7S0FDN0JBLFVBQVdBO0lBSFk7R0FLekJ5RDs7S0FDRXpELFdBQVlBLGdCQUFrQkE7S0FDOUJBLFdBQVlBLGdCQUFrQkE7S0FDOUJBLFVBQVVBO0lBSGE7R0FLekJ5RDthQUFzQ3JEO0tBQ3BDO01BQUk0RDtNQUNBQyxVQUFVakU7TUFDVmtFLFVBQVU5RDtNQUNWK0QsZUFBZVY7S0FDbkIsTUFBT1EsaUJBQWlCQyxhQUFjLENBQ3BDRixVQUNBRTtLQUVGLE1BQU9GLFlBQWE7TUFDbEJBO01BQ0FHO01BQ0EsR0FBSUYsaUJBQWlCQyxjQUFlO09BQ2xDQztPQUNBRixVQUFVQSxZQUFZQzs7TUFFeEJBOztLQUVGLGtCQUFvQkMsbUJBQW9CRjtJQWxCZDtHQW9CNUJSO2FBQWtDdEI7S0FFMUIsSUFBRi9CLElBQUlKO0tBQ1IsR0FBSW1DLFlBQVlxQjtLQUNQLElBQUxPLE9BQU8zRCxPQUFPK0I7S0FDbEIsR0FBSS9CLGVBQWVBLElBQUlBO0tBQ3ZCLEdBQUkrQixlQUFlQSxJQUFJQTtLQUNqQixJQUFGaUMsSUFBSWhFLFVBQVUrQjtLQUNsQixHQUFJNEIsZUFBZUssSUFBSUE7S0FDdkIsT0FBT0E7SUFUZTtHQVd4Qlg7YUFBa0N0QjtLQUUxQixJQUFGL0IsSUFBSUo7S0FDUixHQUFJbUMsWUFBWXFCO0tBQ1AsSUFBTE8sT0FBTzNEO0tBQ1gsR0FBSUEsZUFBZUEsSUFBSUE7S0FDdkIsR0FBSStCLGVBQWVBLElBQUlBO0tBQ2pCLElBQUY5QyxJQUFJZSxVQUFVK0I7S0FDbEIsR0FBSTRCLGVBQWUxRSxJQUFJQTtLQUN2QixPQUFPQTtJQVRlO0dBV3hCb0UscUNBQ0UsT0FBT3pELFVBQVdBLGNBRE07R0FHMUJ5RDs7S0FDRSxRQUFTekQsaUJBQWlCdkIsa0JBQWtCdUIsVUFBVXZCO2NBQW1CdUI7SUFEL0M7R0FHNUJ5RDs7S0FDRSxRQUFRekQ7YUFDQUE7YUFDQUE7YUFDQ0E7YUFDREE7YUFDQUE7YUFDQ0E7YUFDREE7SUFSa0I7R0FVNUJ5RDtlQUNFLE9BQU96RCxXQUFZQSxzQkFESTtHQUd6QnlEO2VBQ0UsT0FBU3pELHlCQUE0QkEsY0FEZDtHQTBJekIsU0FBU3FFLDJCQUEyQlgsSUFBSUMsSUFBSUMsSUFDMUMsV0FBV0gsUUFBUUMsSUFBSUMsSUFBSUM7R0FDN0I7R0Y5VEEsU0FBU1UseUJBQTBCbEU7SUFDakMsS0FBS3VDLFNBQVN2QyxHQUFJO0tBQ2hCLEdBQUl3QyxNQUFNeEMsSUFDUixPQUFPaUU7S0FDVCxPQUFJakU7ZUFDS2lFO2VBRUFBOztJQUVGLElBQUxOLE9BQVEzRCxjQUFVQSxPQUFNNEMsb0JBQWtCNUM7SUFDOUMsR0FBSTJELE1BQU0zRCxNQUFLQTtJQUdQLElBQUptRSxNQUFNeEIsZ0JBQWdCM0M7SUFDMUIsR0FBSW1FLFNBQVU7S0FDWkE7S0FDQW5FLEtBQUszQjs7UUFDQTtLQUNMMkIsS0FBSzNCLFlBQVc4RjtLQUNoQixHQUFJbkUsT0FBUSxDQUNWQSxRQUFRbUU7S0FDVixHQUFJQSxVQUNGbkU7O0lBRUosSUFBSW9FLElBQUkvRixpQkFDSmdHLEtBQUtyRTtJQUNUQSxLQUFLQSxJQUFJcUUsTUFBTUQ7SUFDUixJQUFIRSxLQUFLdEU7SUFDVEEsS0FBS0EsSUFBSXNFLE1BQU1GO0lBQ1IsSUFBSEcsS0FBS3ZFO0lBQ1RxRSxLQUFNQSxXQUFXVixPQUFPUTtJQUN4QixPQUFPRiwyQkFBMkJNLElBQUlELElBQUlEO0dBQzVDO0dFcVRBLFNBQVNHLG9CQUFvQnhFLEdBQUssT0FBT0EsWUFBWTtHQ3VPckQsU0FBU3lFLGtCQUFrQkMsUUFBUUMsSUFBSUM7SUFDckNGLGlCQUFpQkM7SUFDakJELGlCQUFrQkMsVUFBV0E7SUFDN0IsR0FBR0E7S0FDRCxJQUFVLElBQUYzRyxPQUFPQSxJQUFJMkcsZ0JBQWdCM0c7TUFBSyxHQUNuQzJHLFFBQVEzRztPQUNUMEcsaUJBQWlCQyxRQUFRM0c7VUFDdEI7T0FDSDBHO09BQ0FBO09BQ0FBLGlCQUFpQkMsUUFBUTNHOzs7S0FJN0IsSUFBVSxJQUFGQSxPQUFPQSxJQUFJMkcsZ0JBQWdCM0csS0FBSzBHLGlCQUFnQkMsUUFBUTNHO0lBQ2xFLE9BQU8yRzs7OztPQUlMLElBQVUsSUFBRjNHLE9BQU9BLElBQUkyRyxnQkFBZ0IzRyxLQUNqQzBHLGdCQUFnQkMsUUFBUTNHO09BRTFCOzs7T0FHQSxJQUFVLElBQUZBLE9BQU9BLElBQUkyRyxnQkFBZ0IzRyxLQUNqQzBHLGlCQUFpQkMsUUFBUTNHO09BRTNCOztPQUVBLElBQVUsSUFBRkEsT0FBT0EsSUFBSTJHLGdCQUFnQjNHLEtBQ2pDMEcsaUJBQWlCQyxRQUFRM0c7T0FFM0I7OztPQUdBMEc7T0FDQSxJQUFVLElBQUYxRyxPQUFPQSxJQUFJMkcsZ0JBQWdCM0csS0FDakMwRyxpQkFBaUJDLFFBQVEzRztPQUUzQjs7T0FFQSxJQUFVLElBQUZBLE9BQU9BLElBQUkyRyxvQkFBb0IzRyxJQUFJO1FBQ25DLElBQUZRLElBQUlnRyxvQkFBb0JHLE9BQU8zRztRQUNuQyxJQUFXLElBQUZILE9BQU9BLE9BQU9BLEtBQUs2RyxnQkFBaUJsRyxFQUFFWDs7T0FFakQ7O09BRUEsSUFBVSxJQUFGRyxPQUFPQSxJQUFJMkcsZ0JBQWdCM0csSUFBSTtRQUMvQixJQUFGUSxJQUFJZ0csb0JBQW9CTix5QkFBeUJTLE9BQU8zRztRQUM1RCxJQUFXLElBQUZILE9BQU9BLE9BQU9BLEtBQUs2RyxnQkFBaUJsRyxFQUFFWDs7T0FFakQ7O09BRUEsSUFBVSxJQUFGRyxPQUFPQSxJQUFJMkcsZ0JBQWdCM0csSUFBSTtRQUMvQixJQUFGUSxJQUFJcUUseUJBQXlCOEIsT0FBTzNHO1FBQ3hDMEcsaUJBQWlCbEc7O09BRW5COztPQUVBLElBQVUsSUFBRlIsT0FBT0EsSUFBSTJHLG9CQUFvQjNHLElBQUk7UUFDbkMsSUFBRkgsSUFBSThHLE9BQU8zRztRQUNmMEcsaUJBQWlCN0IseUJBQXlCaEY7UUFDMUM2RyxpQkFBaUI3Qix5QkFBeUJoRjs7T0FFNUM7O09BRUEsSUFBVSxJQUFGRyxPQUFPQSxJQUFJMkcsb0JBQW9CM0csSUFBSTtRQUN6QztTQUFJNkcsVUFBVUYsT0FBTzNHO1NBQ2pCUSxJQUFJZ0csb0JBQW9CTix5QkFBeUJXO1FBQ3JELElBQVcsSUFBRmhILE9BQU9BLE9BQU9BLEtBQUs2RyxnQkFBaUJsRyxFQUFFWDtRQUN6QyxJQUFGVyxJQUFJZ0csb0JBQW9CTix5QkFBeUJXO1FBQ3JELElBQVcsSUFBRmhILE9BQU9BLE9BQU9BLEtBQUs2RyxnQkFBaUJsRyxFQUFFWDs7T0FFakQ7O0lBRUYrRyxhQUFhRDtJQUNiQyxhQUFhRDtHQUNmO0dBN25CQSxTQUFTRyw2QkFBNkJDO0lBQ3BDLE9BQU9BLDhCQUNtQixrQkFDakI7O0dBRVg7R0FLQSxTQUFTQyxzQkFBc0JELE1BQU1FO0lBQ25DLElBQUlDO0lBQ0osT0FBT0g7O09BQ0VHLE9BQU9uQyxjQUFjOztPQUNyQm1DLE9BQU9DLGNBQWM7O09BQ3JCRCxPQUFPRSxXQUFXOztPQUNsQkYsT0FBTzNHLFlBQVk7O09BQ25CMkcsT0FBT0csWUFBWTs7T0FDbkJILE9BQU9JLGFBQWE7O09BQ3BCSixPQUFPakMsWUFBWTs7T0FDbkJpQyxPQUFPakMsWUFBWTs7T0FDbkJpQyxPQUFPakMsWUFBWTs7T0FDbkJpQyxPQUFPakMsWUFBWTs7T0FDbkJpQyxPQUFPbkMsY0FBYzs7T0FDckJtQyxPQUFPQyxjQUFjOztPQUNyQkQsT0FBTzNHLFlBQVk7O0lBRTVCLEtBQUsyRyxNQUFNOUQ7SUFDRixJQUFMbUUsV0FBV0wsS0FBS0QsT0FBT0gsNkJBQTZCQztJQUN4RCxPQUFPUTtHQUNUO0dIb0dBLFNBQVNDLHlCQUEwQnhGO0lBQ3RCLElBQVBnRCxhQUFhQztJQUNqQkQsWUFBWWhEO0lBQ0MsSUFBVDhDLGVBQWVDLGFBQWFDO0lBQ2hDLE9BQU9GO0dBQ1Q7R0UyTEEsU0FBUzJDLG9CQUFvQjFIO0lBQzNCO1lBQVdzRjthQUFRdEYsWUFBYUEsWUFBY0E7YUFDM0JBLFlBQWFBLFlBQWNBO2FBQzNCQSxZQUFhQTtHQUNsQztHRnBQQSxTQUFTMkgseUJBQTBCMUY7SUFDakMsSUFBSXNELEtBQUt0RCxNQUNMdUQsS0FBS3ZELE1BQ0x3RCxLQUFLeEQsTUFDTG1FLE9BQU9YO0lBQ1gsR0FBSVc7S0FBYSxRQUNWYixLQUFHQyxLQUFJQztlQUNGQSxnQkFBZVosV0FBVUE7ZUFFMUIrQztJQUVYLElBQUl2QixJQUFJL0YsbUJBQ0p1SCxPQUFPdEMsS0FBR2MsSUFBRWIsTUFBSWEsS0FBR1o7SUFDdkIsR0FBSVcsUUFBUztLQUNYeUI7S0FDQUEsT0FBT3ZILFlBQVc4Rjs7O0tBRWxCeUIsT0FBT3ZIO0lBQ1QsR0FBSW1GLGFBQWFvQyxRQUFRQTtJQUN6QixPQUFPQTtHQUNUO0dHbEhBLFNBQVNDLGlCQUFpQkM7SUFDeEIsSUFBSUMsU0FBU0QsYUFDVGI7SUFDSixJQUFXLElBQUZqSCxPQUFPQSxJQUFJK0gsUUFBUS9ILElBQUs7S0FDL0IsR0FBSThILEtBQUs5SDtNQUNQb0Q7S0FDRjZELE9BQU9BLE9BQU9hLEtBQUs5SDs7SUFFckIsT0FBT2lIO0dBQ1Q7R0R1VEEsU0FBU2Usd0JBQXdCMUMsSUFBSUU7SUFDbkM7WUFBV0g7YUFDVEM7YUFDRUEsb0JBQXVCRTthQUN4QkE7R0FDTDtHQUtBLFNBQVN5QyxnQkFBZ0IxRyxHQUFJLE9BQU9BLFNBQVM7R0FIN0MsU0FBUzJHLGdCQUFnQjNHLEdBQUksT0FBT0EsU0FBUztHQ3JSckIsSUFBcEI0RztHQUtKLFNBQVNDLFlBQWFyQixNQUFNc0IsUUFBUVAsTUFBTVE7SUFFeEMxRyxZQUFjbUY7SUFDZG5GLGNBQWN5RztJQUNkekcsWUFBY2tHO0lBQ2RsRyxZQUFZMEc7R0FDZDtHQUVBRixvQ0FBb0NEO0dBRXBDQzthQUF5Q3BGO0tBQy9CLElBQUp1RjtLQUNKLFVBQVV2RixrQkFBa0JBLE9BQU9BO0tBQ25DLE1BQU9BLGVBQWVjO01BQVFWO0tBQzlCLEdBQUl4QixvQkFBb0JvQjtNQUN0Qkk7S0FDRixHQUFHeEI7TUFBaUMsSUFDdkIsSUFBRjVCLE9BQU9BLElBQUk0QixrQkFBa0I1QixJQUFLO09BQ3pDLEdBQUlnRCxJQUFJaEQsVUFBVWdELElBQUloRCxNQUFNNEIsVUFBVTVCLElBQ3BDa0U7T0FDRnFFLE1BQU9BLE1BQU0zRyxVQUFVNUIsS0FBTWdELElBQUloRDs7O01BRTlCLElBQ00sSUFBRkEsSUFBSTRCLHNCQUFzQjVCLFFBQVFBLElBQUs7T0FDOUMsR0FBSWdELElBQUloRCxVQUFVZ0QsSUFBSWhELEtBQUs0QixVQUFVNUIsSUFDbkNrRTtPQUVGcUUsTUFBT0EsTUFBTTNHLFVBQVU1QixNQUFPZ0QsSUFBSWhEOztLQUd0QyxPQUFPdUk7SUFwQnNCO0dBdUIvQkg7YUFBc0NHO0tBQ3BDLE9BQU8zRzs7UUFHTCxJQUFJbkIsSUFBSW1CLFVBQVUyRyxjQUNkN0MsSUFBSTlELFVBQVUyRztRQUNsQixPQUFPUCx3QkFBd0J2SCxHQUFFaUY7OztRQUdqQyxJQUFJekUsSUFBSVcsVUFBVTJHLGNBQ2R2SSxJQUFJNEIsVUFBVTJHO1FBQ2xCLGFBQWF0SCxHQUFHakI7Z0JBRWhCLE9BQU80QixVQUFVMkc7O0lBYk87R0FpQjVCSDthQUFzQ0csS0FBSWhIO0tBQ3hDLE9BQU9LOztRQUdMQSxVQUFVMkcsZUFBZUwsZ0JBQWdCM0c7UUFDekNLLFVBQVUyRyxlQUFlTixnQkFBZ0IxRztRQUN6Qzs7O1FBR0FLLFVBQVUyRyxlQUFlaEgsTUFDekJLLFVBQVUyRyxlQUFlaEgsTUFDekI7Z0JBRUFLLFVBQVUyRyxPQUFPaEgsR0FDakI7O0tBRUY7SUFoQjBCO0dBb0I1QjZHO2FBQXVDN0c7S0FDckMsT0FBT0s7O1FBR0wsSUFBSTdCLElBQUltSSxnQkFBZ0IzRyxJQUNwQmYsSUFBSXlILGdCQUFnQjFHO1FBQ3hCLEdBQUd4QixLQUFLUztTQUNOb0IsZUFBZTdCOztTQUVaLElBQ08sSUFBRkMsT0FBT0EsSUFBRTRCLGtCQUFrQjVCO1VBQ2pDNEIsVUFBVTVCLEtBQU1BLGFBQVlELElBQUlTO1FBR3BDOzs7UUFHQSxJQUFJZ0ksS0FBS2pILE1BQ0xrSCxLQUFLbEg7UUFDVCxHQUFHaUgsTUFBTUM7U0FDUDdHLGVBQWU0Rzs7U0FFWixJQUNPLElBQUZ4SSxPQUFPQSxJQUFFNEIsa0JBQWtCNUI7VUFDakM0QixVQUFVNUIsS0FBTUEsYUFBWXdJLEtBQUtDO1FBR3JDO2dCQUVBN0csZUFBZUwsSUFDZjs7SUE5QnlCO0dBbUM3QjZHO2FBQTBDNUgsR0FBR2tJO0tBQzNDLEdBQUk5RyxlQUFlcEIsWUFBWW9CLGFBQWFwQixPQUFRO01BQ2xELElBQUltSSxLQUFLL0csWUFBYUEsa0JBQ2xCZ0gsS0FBUXBJLFNBQVVBO01BQ3RCLE9BQU9vSSxLQUFLRDs7S0FFZCxHQUFJL0csb0JBQW9CcEI7TUFBZSxPQUM5QkEsZ0JBQWdCb0I7S0FFekIsSUFBVyxJQUFGNUIsT0FBT0EsSUFBSTRCLGtCQUFrQjVCO01BQ3BDLEdBQUk0QixVQUFVNUIsTUFBTVEsT0FBT1IsSUFDekIsT0FBUTRCLFVBQVU1QixLQUFLUSxPQUFPUjtLQUNsQyxPQUFRNEI7Ozs7O1FBTU4sSUFBSUksR0FBRytCO1FBQ1AsSUFBVyxJQUFGL0QsT0FBT0EsSUFBSTRCLGtCQUFrQjVCLElBQUs7U0FDekNnQyxJQUFJSixVQUFVNUI7U0FDZCtELElBQUl2RCxPQUFPUjtTQUNYLEdBQUlnQyxJQUFJK0IsR0FDTjtTQUNGLEdBQUkvQixJQUFJK0IsR0FDTjtTQUNGLEdBQUkvQixLQUFLK0IsRUFBRztVQUNWLEtBQUsyRSxPQUFPLE9BQU9mO1VBQ25CLEdBQUkzRixLQUFLQSxHQUFHO1VBQ1osR0FBSStCLEtBQUtBLEdBQUc7OztRQUdoQjs7UUFHQSxJQUFXLElBQUYvRCxPQUFPQSxJQUFJNEIsa0JBQWtCNUIsT0FBTTtTQUUxQyxHQUFJNEIsVUFBVTVCLFNBQU9RLE9BQU9SLFFBQzFCO1NBQ0YsR0FBSTRCLFVBQVU1QixTQUFPUSxPQUFPUixRQUMxQjtTQUNGLEdBQUs0QixVQUFVNUIsV0FBYVEsT0FBT1IsVUFDakM7U0FDRixHQUFLNEIsVUFBVTVCLFdBQWFRLE9BQU9SLFVBQ2pDOztRQUVKOzs7Ozs7Ozs7UUFTQSxJQUFXLElBQUZBLE9BQU9BLElBQUk0QixrQkFBa0I1QixJQUFLO1NBQ3pDLEdBQUk0QixVQUFVNUIsS0FBS1EsT0FBT1IsSUFDeEI7U0FDRixHQUFJNEIsVUFBVTVCLEtBQUtRLE9BQU9SLElBQ3hCOztRQUVKOztLQUVGO0lBL0Q4QjtHQW9FaEMsU0FBUzZJLGtCQUFrQjlCLE1BQU1zQixRQUFRUCxNQUFNUTtJQUM3QzFHLFlBQWNtRjtJQUNkbkYsY0FBY3lHO0lBQ2R6RyxZQUFja0c7SUFDZGxHLFlBQWMwRztHQUNoQjtHQUVBTyxrQ0FBa0NUO0dBQ2xDUzthQUErQzdGO0tBQzdDLFVBQVVBO01BQWlCLEdBQ3JCQSxlQUFlYyxTQUFVZDtPQUMzQkEsTUFBTUE7O09BQ0hJO0tBRVAsR0FBSUosV0FBV0EsT0FBT3BCLGNBQ3BCc0M7S0FDRixPQUFPbEI7SUFSNEI7R0FXckM2RiwyQ0FBNENOLEtBQzFDLE9BQU8zRyxVQUFVMkcsS0FEZTtHQUlsQ007YUFBNENOLEtBQUloSCxHQUM5Q0ssVUFBVTJHLE9BQU9oSCxHQUNqQixTQUZnQztHQUtsQ3NIO2FBQTZDdEgsR0FDM0NLLGVBQWVMLElBQ2YsU0FGaUM7R0FhbkMsU0FBU3VILHNCQUFzQi9CLE1BQU1zQixRQUFRUCxNQUFNUDtJQUM1QixJQUFqQndCLG1CQUFtQmpDLDZCQUE2QkM7SUFDcEQsR0FBR2MsaUJBQWlCQyxRQUFRaUIsb0JBQW9CeEI7S0FDOUNuRTtJQUVGLEdBQUdpRixlQUNBUCxvQkFDQWlCO0tBQ0QsV0FBV0Ysa0JBQWtCOUIsTUFBTXNCLFFBQVFQLE1BQU1QO0lBQ25ELFdBQVdhLFlBQVlyQixNQUFNc0IsUUFBUVAsTUFBTVA7R0FFN0M7R0puUkEsU0FBU3lCLGNBQWU3RjtJQUN0QixLQUFJVDtLQUNGQSxpQ0FBOEJPO0lBQ2hDQyx1QkFBdUJSLDBCQUEwQlM7R0FDbkQ7R0l3b0JBLFNBQVM4RixvQkFBb0JDLFFBQVF0QyxJQUFJdUM7SUFDMUIsSUFBVEMsV0FBV0Y7SUFDZixHQUFJRSxnQkFBZ0JBO0tBQ2xCSjtJQUNGO0tBQUl2SCxNQUFNeUg7S0FDTm5DLE9BQU90RjtLQUNQNEcsU0FBVTVHO0tBQ1ZxRztJQUNKLEdBQUdxQjtLQUNELElBQVcsSUFBRm5KLE9BQU9BLElBQUlvSixVQUFVcEosSUFBSztNQUNwQixJQUFUcUosV0FBV0g7TUFDZixHQUFHRyxtQkFBbUI7T0FDcEIsSUFBSUMsY0FBY0osa0JBQ2RLLGNBQWNMO09BQ2xCLEdBQUdJO1FBQ0ROO09BQ0ZLLFdBQVdFOztNQUViekIsVUFBVXVCOzs7S0FHWixJQUFXLElBQUZySixPQUFPQSxJQUFJb0osVUFBVXBKLEtBQUs4SCxVQUFVb0I7SUFDL0M7S0FBSWpDLE9BQU9ZLGlCQUFpQkM7S0FDeEJQLE9BQU9QLHNCQUFzQkQsTUFBTUU7S0FDbkNOLEtBQUttQyxzQkFBc0IvQixNQUFNc0IsUUFBUVAsTUFBTVA7SUFDbkQsT0FBT1I7O09BRUwsSUFBVSxJQUFGL0csT0FBT0EsSUFBSWlILE1BQU1qSCxLQUN2QnVILEtBQUt2SCxLQUFLa0osaUJBRVo7OztPQUdBLElBQVUsSUFBRmxKLE9BQU9BLElBQUlpSCxNQUFNakgsS0FDdkJ1SCxLQUFLdkgsS0FBS2tKLGlCQUVaOztPQUVBLElBQVUsSUFBRmxKLE9BQU9BLElBQUlpSCxNQUFNakgsS0FDdkJ1SCxLQUFLdkgsS0FBS2tKLGtCQUVaOztPQUVBLElBQVUsSUFBRmxKLE9BQU9BLElBQUlpSCxNQUFNakgsS0FDdkJ1SCxLQUFLdkgsS0FBS2tKLGtCQUVaOztPQUVBLElBQVUsSUFBRmxKLE9BQU9BLElBQUlpSCxNQUFNakgsS0FDdkJ1SCxLQUFLdkgsS0FBS2tKLGtCQUVaOzs7T0FHVSxJQUFOTSxRQUFRTjtPQUNaLEdBQUdNO1FBQU9SOztPQUNWLElBQVUsSUFBRmhKLE9BQU9BLElBQUlpSCxNQUFNakgsS0FDdkJ1SCxLQUFLdkgsS0FBS2tKO09BRVo7O09BRU0sSUFBRjdILFFBQVF5QztPQUNaLElBQVUsSUFBRjlELE9BQU9BLElBQUlpSCxNQUFNakgsSUFBSTtRQUMzQixJQUFXLElBQUZILE9BQU1BLE9BQU1BLEtBQUt3QixFQUFFeEIsS0FBS3FKO1FBQ3ZCLElBQU5PLFFBQVFoQyxvQkFBb0JwRztRQUNoQ3NGLE9BQU8zRyxHQUFFeUo7O09BRVg7O09BRU0sSUFBRnBJLFFBQVF5QztPQUNaLElBQVUsSUFBRjlELE9BQU9BLElBQUlpSCxNQUFNakgsSUFBSTtRQUMzQixJQUFXLElBQUZILE9BQU1BLE9BQU1BLEtBQUt3QixFQUFFeEIsS0FBS3FKO1FBQzNCLElBQUZqSixJQUFJeUgseUJBQXlCRCxvQkFBb0JwRztRQUNyRHNGLE9BQU8zRyxHQUFFQzs7T0FFWDs7T0FFQSxJQUFVLElBQUZELE9BQU9BLElBQUlpSCxNQUFNakgsSUFBSTtRQUNyQixJQUFGQyxJQUFJdUgseUJBQXlCMEI7UUFDakN2QyxPQUFPM0csR0FBRUM7O09BRVg7O09BRUEsSUFBVSxJQUFGRCxPQUFPQSxJQUFJaUgsTUFBTWpILElBQUk7UUFDM0I7U0FBSXlJLEtBQUtqQix5QkFBeUIwQjtTQUM5QlYsS0FBS2hCLHlCQUF5QjBCO1FBQ2xDdkMsT0FBTzNHLFNBQU95SSxJQUFHRDs7T0FFbkI7O09BRU0sSUFBRm5ILFFBQVF5QztPQUNaLElBQVUsSUFBRjlELE9BQU9BLElBQUlpSCxNQUFNakgsSUFBSTtRQUMzQixJQUFXLElBQUZILE9BQU1BLE9BQU1BLEtBQUt3QixFQUFFeEIsS0FBS3FKO1FBQzFCLElBQUhULEtBQUtmLHlCQUF5QkQsb0JBQW9CcEc7UUFDdEQsSUFBVyxJQUFGeEIsT0FBTUEsT0FBTUEsS0FBS3dCLEVBQUV4QixLQUFLcUo7UUFDMUIsSUFBSFYsS0FBS2QseUJBQXlCRCxvQkFBb0JwRztRQUN0RHNGLE9BQU8zRyxTQUFPeUksSUFBR0Q7O09BRW5COztJQUVGNUIsYUFBYXdDO0lBQ2IsT0FBT04sc0JBQXNCL0IsTUFBTXNCLFFBQVFQLE1BQU1QO0dBQ25EO0dBamZBLFNBQVNtQyxnQkFBZ0IzSixHQUFFUyxHQUFFa0ksT0FDM0IsT0FBTzNJLFVBQVVTLEdBQUVrSSxPQUNyQjtHQzVNQSxTQUFTaUIsU0FBUzVKLEdBQUVTLEdBQ2xCLE9BQU9ILFVBQVVOLEdBQUVTLEdBQ3JCO0dDVEEsU0FBU29KLGtCQUFrQmxFLEdBQUV2RDtJQUMzQkEsSUFBSXdILFNBQVN4SDtJQUNiQSxJQUFNQSxVQUFZQTtJQUNsQkEsSUFBSXdILFNBQVN4SDtJQUNidUQsS0FBS3ZEO0lBQ0x1RCxJQUFNQSxVQUFZQTtJQUNsQixRQUFVQSxLQUFLQTtHQUNqQjtHQXFCQSxTQUFTbUUsb0JBQXFCbkUsR0FBR25FO0lBQy9CbUUsSUFBSWtFLGtCQUFrQmxFLEdBQUd3QyxnQkFBZ0IzRztJQUN6Q21FLElBQUlrRSxrQkFBa0JsRSxHQUFHdUMsZ0JBQWdCMUc7SUFDekMsT0FBT21FO0dBQ1Q7R0FWQSxTQUFTb0Usb0JBQXFCcEUsR0FBR3FFO0lBQy9CLE9BQU9GLG9CQUFvQm5FLEdBQUdRLHlCQUEwQjZEO0dBQzFEO0dGd3JCQSxTQUFTQyxhQUFhckQ7SUFDcEIsSUFBSXNELFdBQVdwQyxpQkFBaUJsQixVQUM1QmpCO0lBQ0osT0FBT2lCOzs7O09BSUwsR0FBR3NELGdCQUFnQkE7T0FDbkIsSUFBSUMsT0FBT2xLO09BQ1gsSUFBSUEsT0FBT0EsU0FBUzJHLGdCQUFnQjNHLE9BQUs7UUFDdkNrSztTQUFJdkQsUUFBUTNHLFNBQVEyRyxRQUFRM0csY0FBYzJHLFFBQVEzRztXQUFlMkcsUUFBUTNHO1FBQ3pFMEYsSUFBSWtFLGtCQUFrQmxFLEdBQUV3RTs7T0FFMUJBO09BQ0EsT0FBUUQ7O1VBQ0FDLElBQUt2RCxRQUFRM0c7O1VBQ2JrSyxLQUFLdkQsUUFBUTNHOztVQUNia0ssS0FBS3ZELFFBQVEzRyxRQUNuQjBGLElBQUlrRSxrQkFBa0JsRSxHQUFHd0U7O09BRTNCOzs7T0FHQSxHQUFHRCxnQkFBZ0JBO09BQ25CLElBQUlDLE9BQU9sSztPQUNYLElBQUlBLE9BQU9BLFNBQVMyRyxnQkFBZ0IzRyxPQUFLO1FBQ3ZDa0ssSUFBSXZELFFBQVEzRyxTQUFRMkcsUUFBUTNHO1FBQzVCMEYsSUFBSWtFLGtCQUFrQmxFLEdBQUV3RTs7T0FFMUIsSUFBS0Qsb0JBQ0h2RSxJQUFJa0Usa0JBQWtCbEUsR0FBR2lCLFFBQVEzRztPQUNuQzs7T0FFQSxHQUFJaUssZUFBZUE7T0FDbkIsSUFBVyxJQUFGakssT0FBT0EsSUFBSWlLLFVBQVVqSyxLQUFLMEYsSUFBSWtFLGtCQUFrQmxFLEdBQUdpQixRQUFRM0c7T0FDcEU7OztPQUdBLEdBQUlpSyxlQUFlQTtPQUNuQixJQUFXLElBQUZqSyxPQUFPQSxJQUFJaUssVUFBVWpLLEtBQUswRixJQUFJa0Usa0JBQWtCbEUsR0FBR2lCLFFBQVEzRztPQUNwRTs7T0FFQSxHQUFJaUssZUFBZUE7T0FDbkJBO09BQ0EsSUFBVyxJQUFGakssT0FBT0EsSUFBSWlLLFVBQVVqSyxLQUM1QjBGLElBQUlrRSxrQkFBa0JsRSxHQUFHaUIsUUFBUTNHO09BRW5DOztPQUVBaUs7O09BRUEsR0FBSUEsZUFBZUE7T0FDbkIsSUFBVyxJQUFGakssT0FBT0EsSUFBSWlLLFVBQVVqSztRQUFLMEYsSUFBSW9FLG9CQUFvQnBFLEdBQUdpQixRQUFRM0c7T0FDdEU7O09BRUFpSzs7T0FFQSxHQUFJQSxlQUFlQTtPQUNuQixJQUFXLElBQUZqSyxPQUFPQSxJQUFJaUssVUFBVWpLO1FBQUswRixJQUFJb0Usb0JBQW9CcEUsR0FBR2lCLFFBQVEzRztPQUN0RTs7SUFFRixPQUFPMEY7R0FDVDtHR3hvQkEsU0FBU3lFLHFCQUFxQmpCLFFBQVFqQyxNQUNwQ0EsYUFDQSxPQUFPaUM7R0FDVDtHQUlBLFNBQVNrQix5QkFBeUJsQixRQUFRakM7SUFDeEMsT0FBUWlDOztPQUVOakMsYUFDQSxPQUFPaUM7O09BRVBGO2VBQ09BOztHQUVYO0dBaENBLFNBQVNxQixxQkFBcUJuQixRQUFRakM7SUFDOUIsSUFBRjVGLFFBQVF5QztJQUNaLElBQVcsSUFBRmpFLE9BQU1BLE9BQU1BLEtBQUt3QixFQUFFeEIsS0FBS3FKO0lBQ2pDakM7SUFDQSxPQUFPUSxvQkFBcUJwRztHQUM5QjtHQUlBLFNBQVNpSixtQkFBbUI1RCxRQUFRbkYsR0FBR2dKO0lBQy9CLElBQUYvSixJQUFJZ0csb0JBQXFCakY7SUFDN0IsSUFBVyxJQUFGdkIsT0FBT0EsT0FBT0EsS0FBSzBHLGdCQUFpQmxHLEVBQUVSO0lBQy9DdUs7SUFBY0E7R0FDaEI7R0pDQSxTQUFTQyxtQkFBbUJ4SSxHQUFFK0IsR0FBRzJFLE9BQVMsT0FBTzFHLFVBQVUrQixHQUFHO0dBOEo5RCxTQUFTMEcsZ0JBQWdCbEosR0FDdkIsT0FBUUEsV0FBYUEsU0FDdkI7R0l4SW9CO0lBQWhCbUo7O3FCQUVnQkw7bUJBQ0RDOztpQkFFSEU7Y0FDSEM7MkJBR1FOOzJCQUlBQzs7O2lCQUlXbEIsUUFBUXRDO1NBQUssT0FBT3FDLG9CQUFxQkMsUUFBT3RDO1FBQTFEO21CQUNISDtpQkFDRmlEO2NBQ0pNOzs7aUJBR21CZCxRQUFRdEM7U0FBSyxPQUFPcUMsb0JBQXFCQyxRQUFPdEM7UUFBMUQ7bUJBQ0hIO2lCQUNGaUQ7Y0FDSk07R0NsT2IsU0FBU1csNEJBQTRCNUs7SUFDbkMsT0FBTzJLLGdCQUFnQjNLO2NBQWtCMkssZ0JBQWdCM0s7R0FDM0Q7R0FJQSxTQUFTNkssK0JBQStCQyxLQUFLQyxRQUFRQyxNQUFNckM7SUFDaEQsSUFBTHNDLE9BQU9MLDRCQUE0Qkc7SUFDdkMsR0FBR0UsS0FBTTtLQUNELElBQUZoSixJQUFLK0ksV0FBVUMsS0FBS0YsUUFBT0QsS0FBSW5DLFNBQU9zQyxLQUFLSCxLQUFJQyxRQUFPcEM7S0FDMUQsR0FBR0EsU0FBUzFHLEtBQUtBLEdBQUcsT0FBTytJO0tBQzNCLEtBQUkvSSxPQUFNQSxHQUFHLFNBQVFBO0tBQ3JCLElBQUlBLGFBQWEsT0FBUUE7O0lBRTNCLE9BQU8rSTtHQUNUO0diK3hCQSxTQUFTRSxrQkFBa0I3SztJQUN6QixjQUFlQSxvQkFBbUIsb0JBQW9CQTtHQUN4RDtHQXRCQSxTQUFTOEssaUJBQWlCOUssR0FDeEIsT0FBUUEsYUFBYW9CLFFBQ3ZCO0dhbnpCQSxTQUFTMkoscUJBQXFCcEw7SUFDNUIsVUFBV0E7S0FBZ0I7WUFDbEJtTCxpQkFBaUJuTDtLQUFJO1lBQ3JCa0wsa0JBQWtCbEw7S0FBSTtZQUN0QkEsYUFBYStELFNBQVMvRCxTQUFVQSxjQUFhQSxZQUFhLENBRXpELElBQUowQixNQUFNMUIsVUFHVixPQUFRMEIsaUJBQWNBO1lBRWYxQixhQUFhRztLQUFRO21CQUNkSDtLQUFlO1lBQ3RCQSxhQUFhcUw7S0FBUTtZQUNyQnJMLEtBQUtBO0tBQWU7WUFDcEJBLEtBQUtBO0tBQVc7bUJBQ1RBO0tBQWlCO21CQUNqQkEsZUFBZTtJQUMvQjtHQUNGO0dBME1BLFNBQVNzTCxpQkFBa0J0TCxHQUFHUztJQUM1QixHQUFJVCxJQUFJUyxHQUFHO0lBQWEsR0FBSVQsS0FBS1MsR0FBRztJQUFVO0dBQ2hEO0did2JBLFNBQVM4SyxvQkFBb0IzSyxJQUFJQztJQUMvQixPQUFRRCxLQUFLQyxXQUFRRCxLQUFLQztHQUM1QjtHQXBLQSxTQUFTMkssbUJBQW1CNUssSUFBSUM7SUFDN0JELFlBQWFPLDZCQUE2QlA7SUFDMUNDLFlBQWFNLDZCQUE2Qk47SUFDM0MsT0FBUUQsT0FBT0MsYUFBVUQsT0FBT0M7R0FDbEM7R2EzY0EsU0FBUzRLLGlCQUFrQnpMLEdBQUdTLEdBQUdrSTtJQUNyQixJQUFOK0M7SUFDSixPQUFRO0tBQ04sTUFBTS9DLFNBQVMzSSxNQUFNUyxHQUFJO01BQ2IsSUFBTmtMLFFBQVFQLHFCQUFxQnBMO01BRWpDLEdBQUcyTCxhQUFjLENBQUUzTCxJQUFJQSxNQUFNO01BRW5CLElBQU40TCxRQUFRUixxQkFBcUIzSztNQUVqQyxHQUFHbUwsYUFBYyxDQUFFbkwsSUFBSUEsTUFBTTtNQUc3QixHQUFHa0wsVUFBVUMsTUFBTztPQUNsQixHQUFHRCxjQUFlO1FBQ2hCLEdBQUdDO1NBQWUsT0FDVGYsK0JBQStCN0ssR0FBR1MsUUFBT2tJO1FBRWxEOztPQUVGLEdBQUdpRCxjQUFlO1FBQ2hCLEdBQUdEO1NBQWUsT0FDVGQsK0JBQStCcEssR0FBR1QsTUFBTTJJO1FBRWpEOztPQUVGLE9BQVFnRCxRQUFRQzs7TUFFbEIsT0FBT0Q7O1NBSUx0SSxvREFDQTs7U0FFTSxJQUFGcEIsSUFBSXFKLGlCQUFpQnRMLE1BQU1TLE9BQy9CLEdBQUl3QixRQUFRLE9BQVFBLE9BQ3BCOztTQUdBb0Isb0RBQ0E7O1NBR0FBO1NBQ0E7O1NBRUFBLGdEQUNBOztTQUVBLEdBQUlyRCxNQUFNUyxFQUFHO1VBQ0wsSUFBRndCLElBQUl1SixtQkFBbUJ4TCxHQUFHUztVQUM5QixHQUFJd0IsUUFBUSxPQUFRQTs7U0FFdEI7O1NBR0FvQjtTQUNBOztTQUdBQTs7U0FDQTs7U0FFQUE7U0FDQTs7U0FFQUEsb0RBQ0E7O1NBRVMsSUFBTDRILE9BQU9MLDRCQUE0QjVLO1NBQ3ZDLEdBQUdpTCxRQUFRTCw0QkFBNEJuSztVQUFHLE9BQ2hDVCxnQkFBY1M7U0FFeEIsS0FBSXdLLE1BQ0Y1SDtTQUNJLElBQUZwQixJQUFJZ0osS0FBS2pMLEdBQUVTLEdBQUVrSTtTQUNqQixHQUFHMUcsS0FBS0EsR0FBRSxPQUNEMEcsY0FBUzFHO1NBRWxCLEdBQUdBLE9BQU9BLFFBQUs7U0FHZixHQUFJQSxRQUFRLE9BQVFBO1NBQ3BCOztTQUVNLElBQUZBLElBQUlqQyxVQUFVUyxHQUFFa0k7U0FDcEIsR0FBRzFHLEtBQUtBLEdBQUcsT0FDRjBHLGNBQVMxRztTQUVsQixHQUFHQSxPQUFPQSxRQUFLO1NBR2YsR0FBSUEsUUFBUSxPQUFRQTtTQUNwQjs7U0FFQWpDLE1BQUtBO1NBQ0xTLE1BQUtBO1NBQ0wsR0FBSVQsSUFBSVMsR0FBRztTQUNYLEdBQUlULElBQUlTLEdBQUc7U0FDWCxHQUFJVCxLQUFLUyxFQUFHO1VBQ1YsS0FBS2tJLE9BQU8sT0FBT2Y7VUFDbkIsR0FBSTVILEtBQUtBLEdBQUc7VUFDWixHQUFJUyxLQUFLQSxHQUFHOztTQUVkOztTQWVBLEdBQUlULElBQUlTLEdBQUc7U0FDWCxHQUFJVCxJQUFJUyxHQUFHO1NBQ1gsR0FBSVQsS0FBS1MsRUFBRztVQUNWLEtBQUtrSSxPQUFPLE9BQU9mO1VBQ25CLEdBQUk1SCxLQUFLQSxHQUFHO1VBQ1osR0FBSVMsS0FBS0EsR0FBRzs7U0FFZDs7U0FFQSxHQUFHVCxNQUFNUyxFQUFHLENBQ1YsS0FBS2tJLE9BQU8sT0FBT2YsS0FDbkIsV0FFRjs7U0FFQSxJQUFJNUgsSUFBSWdDLHVCQUF1QmhDLElBQzNCUyxJQUFJdUIsdUJBQXVCdkI7U0FDL0IsR0FBR1QsTUFBTVMsRUFBRyxDQUNWLEdBQUdULElBQUlTLEdBQUcsWUFDVixHQUFHVCxJQUFJUyxHQUFHO1NBRVo7O1NBRUEsSUFBSVQsSUFBSUEsY0FDSlMsSUFBSUE7U0FDUixHQUFHVCxNQUFNUyxFQUFHLENBQ1YsR0FBR1QsSUFBSVMsR0FBRyxZQUNWLEdBQUdULElBQUlTLEdBQUc7U0FFWjs7OztTQUlBLEdBQUdpRSx5QkFBeUJpSCxPQUFRO1VBQ2xDdEk7VUFDQTs7U0FFRixHQUFJckQsWUFBWVMsVUFBVSxPQUFRVCxXQUFXUztTQUM3QyxHQUFJVCxjQUFjMEwsV0FBVzFMLEdBQUdTO1NBQ2hDOzs7S0FHSixHQUFJaUwsbUJBQW1CO0tBQ2pCLElBQUZ6TCxJQUFJeUw7S0FDUmpMLElBQUlpTDtLQUNKMUwsSUFBSTBMO0tBQ0osR0FBSXpMLFFBQVFELFVBQVUwTCxXQUFXMUwsR0FBR1MsR0FBR1I7S0FDdkNELElBQUlBLEVBQUVDO0tBQ05RLElBQUlBLEVBQUVSOztHQUVWO0dBR0EsU0FBUzRMLGFBQWM3TCxHQUFHUyxHQUFLLE9BQU9nTCxpQkFBa0J6TCxHQUFHUyxTQUFVO0dYN0xyRSxTQUFTcUwsNkJBQWdDLFdBQVk7R0ZpY3JELFNBQVNDLGtCQUFrQmxNO0lBQ3pCLEdBQUlBLFNBQVN3RDtJQUNiLFdBQVc1QixRQUFRNUIsaUJBQVdBO0dBQ2hDO0dBcUZBLFNBQVNtTSxnQkFBZ0IzTCxHQUFHSixHQUFHUyxHQUFHYTtJQUNoQyxHQUFJYjtLQUFPLEdBQ0xULFdBQVdTLEtBQUtMLE9BQVFBLFlBQTBCSyxLQUFLTDtNQUFjLEdBQ25Fa0IsT0FBUTtPQUNWbEI7T0FDQUE7O1VBQ0s7T0FDTEEsTUFBTVcsZ0JBQWlCTixHQUFHUCxvQkFBb0JvQjtPQUM5Q2xCLE1BQU9LLEtBQUtMOztTQUVUO01BQ0wsR0FBSUEsVUFBc0JFLDRCQUE0QkY7TUFDdEQsSUFBS0ssS0FBS1QsR0FBR0EsSUFBSVMsR0FBR1QsS0FBS0ksSUFBSUosS0FBS3NCOztJQUd0QztHQUNGO0dNdEdBLFNBQVMwSyxxQkFBcUI1TDtJQUM1QixJQUFJd0g7SUFDSnhILElBQUkyQix1QkFBdUIzQjtJQUMzQndILFFBQU94SDtJQUNQLEdBQUtBLGdCQUFrQndILFFBQVFBLEtBQU0sT0FBT0E7SUFDNUN4SCxJQUFJQTtJQUNKd0gsUUFBT3hIO0lBQ1AsR0FBTUEsZ0JBQWtCd0gsUUFBUUEsT0FBUyxtQkFBbUJ4SCxJQUFJLE9BQU93SDtJQUNqRSxJQUFGcUUsSUFBSSwrREFBK0Q3TDtJQUV2RSxHQUFHNkwsRUFBRTtLQUNIO01BQUlDLEtBQUtEO01BQ0xFLFdBQVdDLFNBQVNILE9BQU9BLE9BQU9DO01BQ2xDRyxZQUFZSixnQkFBWUM7S0FDNUJ0RSxNQUFNdUUsV0FBVzlMLFlBQVlnTTtLQUM3QixPQUFPekU7O0lBRVQsR0FBRyx5QkFBeUJ4SCxJQUFJLE9BQU93RTtJQUN2QyxHQUFHLHVCQUF1QnhFLElBQUksU0FBUXdFO0lBQ3RDb0U7R0FDRjtHUW5mQSxTQUFTc0Qsa0JBQW1CQztJQUMxQkEsTUFBTXhLLHVCQUF1QndLO0lBQ3JCLElBQUozTSxNQUFNMk07SUFDVixHQUFJM00sVUFBVXdEO0lBQ1I7S0FBRm5EOzs7Ozs7Ozs7Ozs7SUFJSixJQUFXLElBQUZELE9BQU9BLElBQUlKLEtBQUtJLElBQUs7S0FDdEIsSUFBRnNCLElBQUlpTCxXQUFXdk07S0FDbkIsT0FBUXNCOztRQUVOckIsaUJBQWlCOzs7UUFFakJBLGNBQWNxQixHQUFHOztRQUVqQnJCLGdCQUFnQjs7UUFFaEJBLG9CQUFvQjs7Ozs7Ozs7OztRQUdwQkE7UUFDQSxNQUFPcUIsSUFBRWlMLGVBQWV2TSxTQUFTc0IsVUFBVUEsT0FBUSxDQUNqRHJCLFVBQVVBLGVBQWVxQixHQUFHdEI7UUFFOUJBO1FBQ0E7O1FBRUFDO1FBQ0FEO1FBQ0EsTUFBT3NCLElBQUVpTCxlQUFldk0sU0FBU3NCLFVBQVVBLE9BQVEsQ0FDakRyQixTQUFTQSxjQUFjcUIsR0FBR3RCO1FBRTVCQTs7O1FBRUFDOztRQUVBQSxhQUFhOztRQUViQSxhQUFhOztRQUViQSxhQUFhQSxvQkFBb0I7O1FBRWpDQSxZQUFZOzs7O1FBRVpBLHFCQUFxQkEsU0FBU3FCLEdBQUc7Ozs7UUFFakNyQjtRQUFxQkE7UUFDckJBLFNBQVNxQjtRQUFrQjs7O0lBRy9CLE9BQU9yQjtHQUNUO0dBSUEsU0FBU3VNLHVCQUF1QnZNLEdBQUd3TTtJQUNqQyxHQUFJeE0sYUFBYXdNLFlBQVlBO0lBQ3JCLElBQUo3TSxNQUFNNk07SUFFVixHQUFJeE0saUJBQWlCQSxjQUFjQSxxQkFBcUJMO0lBQ3hELEdBQUlLLFlBQWEsQ0FDZixHQUFJQSxhQUFhTCxVQUNqQixHQUFJSyxjQUFjTDtJQUdULElBQVAwSTtJQUNKLEdBQUlySSxvQkFBb0JBO0tBQ3RCLElBQVcsSUFBRkQsSUFBSUosS0FBS0ksSUFBSUMsU0FBU0QsS0FBS3NJO0lBQ3RDLEdBQUlySTtLQUFjLEdBQ1pBO01BQVlxSTthQUNQckksb0JBQW9CcUksVUFBVXJJO0lBRXpDLEdBQUlBLGVBQWVBLGFBQWFxSTtJQUNoQyxHQUFJckksZUFBZUEsY0FBY3FJLFVBQVVySTtJQUMzQyxHQUFJQSxvQkFBb0JBO0tBQ3RCLElBQVcsSUFBRkQsSUFBSUosS0FBS0ksSUFBSUMsU0FBU0QsS0FBS3NJO0lBQ3RDQSxVQUFVbUU7SUFDVixHQUFJeE0sa0JBQ0YsSUFBVyxJQUFGRCxJQUFJSixLQUFLSSxJQUFJQyxTQUFTRCxLQUFLc0k7SUFDdEMsT0FBT3JGLHVCQUF1QnFGO0dBQ2hDO0dSNFVBLFNBQVNvRSxrQkFBbUJILEtBQUt2SztJQUMvQixTQUFTMkssUUFBUTNLLEdBQUU0SztLQUNqQixHQUFJdk0sU0FBUzJCO01BQVUsT0FDZEEsVUFBVTRLO1NBQ1o7TUFDQyxJQUFGeEssSUFBSWdLLFNBQVNwSztNQUNqQixHQUFJSSxPQUFRO09BQ1ZBO09BQ0FKLEtBQUszQixhQUFZK0I7T0FDakJKLEtBQUssSUFBSzhCLE1BQU0xQjtPQUNoQixHQUFHd0ssUUFDRDVLLElBQUlBLFVBQVUsSUFBSzhCLE1BQU04STtPQUUzQixPQUFPNUs7OztPQUVKLE9BQU9BLFVBQVU0Szs7SUFFMUI7SUFDQSxJQUFJeE0sR0FBR0gsSUFBSXFNLGtCQUFrQkMsTUFDekJNLE9BQVE1TSxpQkFBY0E7SUFDMUIsR0FBSStCLFNBQVVBLGNBQVlBLE9BQU00QyxTQUFXLENBQUUzRSxjQUFhK0IsTUFBS0E7SUFDL0QsR0FBSXdDLE1BQU14QyxHQUFJO0tBQUU1QjtLQUFXSDs7Y0FDakJzRSxTQUFTdkMsR0FBSTtLQUFFNUI7S0FBV0g7OztLQUVsQyxPQUFRQTs7UUFFTixJQUFJRyxJQUFJNEIsZ0JBQWdCNkssT0FFcEI3TSxJQUFJSTtRQUNSLEdBQUlBLFNBQVNKO1NBQ1hJLElBQUlBLFdBQVlKLGVBQWVJLFFBQVNKO1FBQzFDOztRQUVBSSxJQUFJdU0sUUFBUTNLLEdBQUc2SyxPQUFPOztRQUV0QkEsT0FBT0EsT0FBS0E7UUFDWnpNLElBQUk0QixnQkFBZ0I2SztRQUNwQixJQUFJaE4sSUFBSU8sZ0JBQ0orRixRQUFPL0YsUUFBUVA7UUFDbkIsR0FBSXNHLGFBQVluRSxhQUFhQSxzQkFBc0I2SyxLQUFNO1NBRWpELElBQUY3TSxJQUFJSDtTQUFPLE1BQU9PLFNBQVNKLFdBQVdBO1NBQzFDLEdBQUlJLFNBQVNKLFdBQVdBO1NBQ3hCSSxJQUFJQSxXQUFXSixTQUFTSSxRQUFRUDtTQUNoQ0csSUFBSUk7U0FDSixHQUFJQSxTQUFTSjtVQUNYSSxJQUFJQSxXQUFZSixlQUFlSSxRQUFTSjtTQUMxQzs7WUFDSztTQUNDLElBQUY4TSxJQUFJRDtTQUNSLEdBQUkxRyxRQUFTO1VBQUUyRyxLQUFLM0c7VUFBUy9GLElBQUk0QixVQUFVOEs7OztVQUN0QyxNQUFPMU0sSUFBSTRCLFVBQVU4SyxJQUFJMU0sV0FBV3lNLFVBQVVDO1NBQ25ELEdBQUlBLEVBQUc7VUFFQyxJQUFGOU0sSUFBSUk7VUFBYyxNQUFPQSxTQUFTSixXQUFXQTtVQUNqRCxHQUFJSSxTQUFTSixXQUFXQTtVQUN4QkksSUFBSUEsV0FBV0o7OztRQUduQjs7SUFFSixPQUFPd00sdUJBQXVCdk0sR0FBR0c7R0FDbkM7R0k1ZEEsU0FBUzJNLGdCQUFnQlIsS0FBS3ZNO0lBQzVCLEdBQUkrQix1QkFBdUJ3SztLQUFjLE9BQU90Siw0QkFBMEJqRDtJQUNwRSxJQUFGQyxJQUFJcU0sa0JBQWtCQztJQUMxQixHQUFJdk0sT0FBTyxHQUFNQyxhQUFjLENBQUVBLGNBQWFELE1BQUtBLFNBQVVBO0lBQ3ZELElBQUZJLElBQUlKLFdBQVdDO0lBQ25CLEdBQUlBLFlBQWE7S0FDZkE7S0FDTSxJQUFGZSxJQUFJZixTQUFTRztLQUNqQixHQUFJWSxPQUFPWixJQUFJVyxnQkFBaUJDLFVBQVVaOztJQUU1QyxPQUFPb00sdUJBQXVCdk0sR0FBR0c7R0FDbkM7R0h5R29CLElBQWhCNE07R0FXSixTQUFTQyxtQkFDUCxPQUFPRCxrQkFDVDtHUHNrQkEsU0FBU0Usd0JBQXdCOU07SUFDL0IsR0FBR2UsY0FBY2YsSUFDZixPQUFPQTtJQUNULE9BQU9nQixtQkFBbUJoQjtHQUFJO0dlMXNCaEMsU0FBUytNO0lBQ1AsY0FDUzVLO3FCQUNLQTtxQkFDQUE7R0FDaEI7R0MwQkEsU0FBUzZLO0lBQ1AsU0FBU0MsTUFBTUM7S0FDYixHQUFJQSx3QkFBd0IsWUFBWUE7S0FDeEM7SUFDRjtJQUVBLFNBQVNDLE1BQU1EO0tBRWI7TUFBSUU7O01BQ0FDLFNBQVNELG1CQUFtQkY7TUFDNUJJLFNBQVNEO01BQ1RFLFFBQVFDLFFBQVFGLFVBQVVBO0tBRzlCLEdBQUlFLFFBQVFILGFBQWFFLE9BQVE7TUFDL0IsSUFBSUUsT0FBUUosaUJBQ1JLLE1BQU9MO01BQ1gsUUFBUUksTUFBTVAsZUFBZU8sY0FBY0M7O0tBRTdDO0lBQ0Y7SUFDQSxPQUFHWCx1QkFBd0I1SztlQUFzQkE7Y0FDeENBLDBDQUEwQ2dMLFFBQVFGO2NBRS9DQTtHQUNkO0dBQ3FCLElBQWpCVSxtQkFBbUJYO0dBdkR2QixTQUFTWSxvQkFBb0I3RTtJQUMzQixPQUFRQSwwQkFBMkJBLGFBQWNBO0dBQ25EO0dBSUEsR0FBR2dFLHVCQUF3QjVLLHNCQUFzQkE7SUFDMUIsSUFBakIwTCxtQkFBbUIxTDs7SUFFRixJQUFqQjBMO0dBQ05BLG1CQUFtQkQsb0JBQW9CQztHQWtEdkMsU0FBU0MsZUFBZ0IvRTtJQUN2QkEsT0FBSytELHdCQUF3Qi9EO0lBQzdCLEtBQUs0RSxpQkFBaUI1RSxPQUNwQkEsT0FBTzhFLG1CQUFtQjlFO0lBQzVCO0tBQUlnRixRQUFRSixpQkFBaUI1RTtLQUN6QjZCLE9BQU9tRDtLQUNQQztJQUNKLElBQVUsSUFBRnBPLE9BQU9BLElBQUVnTCxhQUFhaEw7S0FBSSxPQUN6QmdMLEtBQUtoTDs7UUFDRCxHQUFHb08sa0JBQWdCQSxhQUFhO2lCQUNqQztnQkFDRDtnQkFDQUEsV0FBV3BELEtBQUtoTCxLQUFJOztJQUcvQm9PLGNBQWNEO0lBQ2RDLGFBQWFqRjtJQUNiLE9BQU9pRjtHQUNUO0doQmxCQSxTQUFTQyxtQkFBbUJqTztJQUMxQixRQUFTSSxRQUFRYSxJQUFJYixHQUFHYyxHQUFHYSxHQUFHbkMsT0FBT1MsSUFBSUwsVUFBVUosSUFBSVMsR0FBR1QsSUFBSztLQUM3RHNCLElBQUlsQixhQUFhSjtLQUNqQixHQUFJc0IsU0FBVTtNQUNaLElBQVcsSUFBRnpCLElBQUlHLE9BQVFILElBQUlZLE1BQU9hLElBQUlsQixhQUFhUCxZQUFZQSxLQUFJO01BQ2pFLEdBQUlBLElBQUlHLFFBQVM7T0FBRXFCO09BQWdCYixLQUFLYTtPQUFHQTtPQUFRYixLQUFLSixRQUFRSixHQUFHSDs7O09BQzlEd0IsS0FBS2pCLFFBQVFKLEdBQUdIO01BQ3JCLEdBQUlBLEtBQUtZLEdBQUc7TUFDWlQsSUFBSUg7O0tBRU4sR0FBSXlCLFVBQVc7TUFDYkQsS0FBS25CLDJCQUE0Qm9CO01BQ2pDRCxLQUFLbkIsMkJBQTRCb0I7O2FBQ3hCQSxjQUFjQTtNQUN2QkQ7T0FBS25CO2dCQUE0Qm9CLGdCQUNDQSxzQkFDREE7O09BQ3hCQSxlQUFldEIsU0FBU1MsTUFDdkIwQixJQUFJL0IsYUFBYUo7VUFBb0JtQztNQUUvQ2Q7U0FDSztNQUNMckI7TUFDQXNCLEtBQUtBLFdBQVdhO01BQ2hCZDtPQUFLbkI7Z0JBQTRCb0I7Z0JBQ0NBO2dCQUNBQTtnQkFDREE7O0tBRW5DLEdBQUlELGdCQUFpQixDQUFDQSxnQkFBZ0JiLEtBQUthLEdBQUdBOztJQUVoRCxPQUFPYixJQUFFYTtHQUNYO0dBaW5CQSxTQUFTaU4sd0JBQXlCbE87SUFDaEMsT0FBSWUsY0FBY2Y7Y0FDVDZDLHVCQUF1QjdDO2NBQ3BCNkMsdUJBQXVCb0wsbUJBQW1Cak87R0FDeEQ7R2lCbHBCZTtJQUFYbU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlCSixTQUFTQyxtQkFBbUJDLE1BQU1DLFNBQVNwQixNQUFNcUI7SUFDbkMsSUFBUkMsVUFBVUwsbUJBQW1CRTtJQUNqQyxHQUFJRyxZQUFhLENBRWYsR0FBSUQsU0FBU3hPLE1BQ1h3TyxnQkFHRkMsY0FBbUJEO0lBRVo7S0FBTGpMO1FBQ0ZrTDtRQUNBTix3QkFBd0JJO1FBQ3hCSix3QkFBd0JoQjtJQUUxQixPQUFPNUo7R0FDVDtHZFVzQixJQUFsQm1MO0dBV0osU0FBU0MsaUJBQWlCQyxJQUN4QixPQUFPRixrQkFBa0JFLElBQzNCO0dFakhBLFNBQVNDLHFCQUFzQnZOLEtBQUtpQztJQUFRLE1BQU1aLDRCQUE0QixJQUFJckIsWUFBWWlDO0dBQVE7R0xtZXRHLFNBQVN1TCxvQkFBcUJsUDtJQUM1QixNQUFNQSxhQUFhUSxhQUNqQlIsUUFBUVEsV0FBV1I7SUFFckIsV0FBV3lCLFdBQVV6QixHQUFFQTtHQUN6QjtHQy9lQSxTQUFTbVAscUJBQXNCL0w7SUFDN0JELHVCQUF1QlIsNEJBQTRCUztHQUNyRDtHZXdLQSxTQUFTZ00sd0JBQXdCaEc7SUFDL0IrRixxQkFBc0IvRjtHQUN4QjtHaEJnUkEsU0FBU2lHLDBCQUEyQmhQO0lBQ2xDLEdBQUlBLFVBQXNCRSw0QkFBNEJGO0lBQ3RELE9BQU9BO0dBQ1Q7R0FpTEEsU0FBU2lQLHFCQUFxQmpQLEdBQUssT0FBT0EsSUFBSTtHZ0J0bEI5QyxTQUFTa1AsU0FBVztHRTZOcEIsU0FBU0MsV0FBVzFOLFNBQ2xCRCxZQUFZQyxRQUNkO0dBQ0EwTiwyQkFBMkJEO0dBQzNCQyxtQ0FBbUNBO0dBQ25DQTthQUF5QzNQO0tBQy9CLElBQUo0UCxNQUFNNU47S0FDVkEsWUFBWWtLLGtCQUFrQmxNO0tBQzlCYyxnQkFBZ0I4TyxRQUFRNU4sY0FBY2hDO0lBSFI7R0FLaEMyUDtlQUNFLE9BQU9GLHFCQUFxQnpOLFdBREE7R0FHOUIyTjthQUFzQzNKLFFBQU82SixLQUFJQyxLQUFJOVA7S0FDMUMsSUFBTCtQLE9BQU8vTjtLQUNYLEdBQUdnRSxTQUFTaEcsT0FBTytQLEtBQU07TUFDdkIsSUFBSUMsVUFBVTlELGtCQUFrQmxHLFNBQVNoRyxNQUNyQ2lRLFdBQVdqTztNQUNmQSxZQUFZZ087TUFDWmxQLGdCQUFnQm1QLGFBQWFqTyxjQUFjK047O0tBRTdDalAsZ0JBQWdCdU8sb0JBQW9CUSxNQUFNQyxLQUFLOU4sV0FBV2dFLFFBQVFoRztLQUNsRTtJQVQyQjtHQVc3QjJQO2FBQXFDM0osUUFBTzZKLEtBQUlDLEtBQUk5UDtLQUN6QyxJQUFMK1AsT0FBTy9OO0tBQ1gsR0FBR2dFLFNBQVNoRyxPQUFPK1AsTUFDakIvUCxNQUFNK1AsT0FBTy9KO0tBRWYsR0FBR2hHLElBQUs7TUFDRyxJQUFMMkgsT0FBT3VFLGtCQUFrQmxNO01BQzdCYyxnQkFBZ0JrQixXQUFXZ0UsUUFBUTJCLFNBQVMzSDtNQUM1QzZQLFFBQVFMLDBCQUEwQjdILE9BQU9tSTs7S0FFM0MsT0FBTzlQO0lBVm1CO0dBd0Q1QixTQUFTa1EsU0FBUzNHLE1BQU00RyxNQUFLQztJQUMzQnBPLFlBQVltTztJQUNabk8sWUFBWXVIO0lBQ1p2SCxhQUFhb087R0FDZjtHQUVBRjs7S0FDRVoscUJBQXFCdE47SUFEUztHQUdoQ2tPO2VBQ0UsR0FBR2xPLFdBQVcsT0FBT0Esb0JBQ3JCQSxrQkFGMEI7R0FJNUJrTzthQUFxQ2xLLFFBQU82SixLQUFJQyxLQUFJOVA7S0FDbEQsR0FBR2dDLFdBQVcsT0FBT0EsZ0JBQWdCZ0UsUUFBTzZKLEtBQUlDLEtBQUk5UDtLQUNwRGdDO0lBRnlCO0dBSTNCa087YUFBb0NsSyxRQUFRNkosS0FBS0MsS0FBSzlQO0tBQ3BELEdBQUdnQyxXQUFXLE9BQU9BLGVBQWVnRSxRQUFRNkosS0FBS0MsS0FBSzlQO0tBQ3REZ0M7SUFGd0I7R0FJMUJrTyxzQ0FDRWxPLFlBQVlZLFVBRGE7R0F0VjNCLFNBQVN5TixhQUFjcEMsTUFBTTVOO0lBQzNCMkI7SUFDQUEsWUFBWWlNO0lBQ1pqTSxpQkFBaUIzQjtHQUNuQjtHQUNBZ1EscUNBQXFDOUcsTUFDbkMsT0FBUXZILFlBQVl1SCxLQURNO0dBRzVCOEc7YUFBdUQ5RztLQUNyRCxJQUFJNkIsT0FBTzdCLGlCQUNQdkI7S0FDSixJQUFVLElBQUY1SCxPQUFPQSxJQUFJZ0wsaUJBQWlCaEwsSUFBSTtNQUN0QzRILE9BQU9vRCxLQUFLaEw7TUFDWixHQUFHNEIsYUFBYWdHLE1BQU07TUFDdEJoRyxhQUFhZ0csT0FBT3NJOztJQU5zQjtHQVM5Q0Q7YUFBd0M5RyxNQUN0QyxPQUFPLFdBQVdBLFFBQU1BLE9BQU1BLFdBREQ7R0FHL0I4RzthQUF5QzlHO0tBQ3ZDLEtBQUl2SCxhQUFhdUgsU0FBU3ZILGVBQWdCO01BQ2hDO09BQUpnRztTQUFNaEc7V0FBZXFCLHVCQUF1QnJCLFlBQVlxQix1QkFBdUJrRztNQUNuRixHQUFHdkIsVUFBVztPQUNaaEcsMEJBQTBCdUg7T0FDMUJ2SCxhQUFhdUgsWUFBVW9HLFdBQVd0TixxQkFBcUIyRjs7O0lBTDdCO0dBU2hDcUk7YUFBeUM5RztLQUV2QyxHQUFHQSxZQUFZO0tBRUEsSUFBWGdILGFBQWF2TyxXQUFXdUg7S0FDNUIsR0FBR3ZILGFBQWF1TyxhQUFhO0tBRTdCdk8sWUFBWXVIO0tBQ1osT0FBT3ZILGFBQWF1SDtJQVJVO0dBVWhDOEc7YUFBeUM5RyxNQUN2QyxPQUFHdkgsWUFBWXVILFdBQVV2SCxZQUFZdUgsY0FEUDtHQVFoQzhHO2FBQXdDOUcsTUFBS2lILE1BQU1DO0tBQ2xDLElBQVg5QixhQUFhOEIsY0FBY3ZCO0tBQy9CLEdBQUdsTixZQUFZdUg7TUFBTyxHQUNoQm9GO09BQ0ZTO1NBQXFCVCxZQUFZQyxzQ0FBc0M1TSxRQUFRdUg7O09BRy9FK0YscUJBQXFCL0Y7S0FHZCxJQUFQbUgsU0FBUyxvQkFBb0JuSDtLQUNqQ21ILFNBQVVBLFVBQVVBO0tBQ3BCLEtBQUkxTyxZQUFZME87TUFBUSxHQUNsQi9CO09BQ0ZTO1NBQXFCVCxZQUFZQyxzQ0FBc0M1TSxRQUFRME87O09BRy9FcEIscUJBQXFCb0I7S0FHekIsS0FBSTFPLFlBQVkwTztNQUFRLEdBQ2xCL0I7T0FDRlM7U0FBcUJULFlBQVlDLHVDQUF1QzVNLFFBQVEwTzs7T0FHaEZwQixxQkFBcUJvQjtLQUd6QjFPLDBCQUEwQkEsV0FBV3VIO0lBNUJSO0dBOEIvQjhHO2FBQXdDOUcsTUFBTWtIO0tBQzVDO01BQUk5QixhQUFhOEIsY0FBY3ZCO01BQzNCcUIsYUFBY2hILGtCQUFnQnZILFdBQVd1SDtNQUN6Q2xJLFFBQVFzUCxhQUFhSjtLQUN6QixLQUFJdk8sWUFBWXVIO01BQU8sR0FDakJvRjtPQUNGUztTQUFxQlQsWUFBWUMsc0NBQXNDNU0sUUFBUXVIOztPQUcvRStGLHFCQUFxQi9GO0tBR3pCLEtBQUl2SCxZQUFZdUg7TUFBTyxHQUNqQm9GO09BQ0ZTO1NBQXFCVCxZQUFZQyx1Q0FBdUM1TSxRQUFRdUg7O09BR2hGK0YscUJBQXFCL0Y7S0FHekIsUUFBUW5JLEtBQUtZO01BQWMsR0FDdEJaLFFBQVFDO09BQUksR0FDVHNOO1FBQ0ZTO1VBQXFCVCxZQUFZQyx5Q0FBeUM1TSxRQUFRdUg7O1FBRWxGK0YscUJBQXFCdE4sUUFBUXVIO0tBSW5DLE9BQU92SCxhQUFhdU87SUE3QlM7R0ErQi9CRjthQUEwQzlHO0tBQ3pCLElBQVhnSCxhQUFjaEgsa0JBQWdCdkgsV0FBV3VIO0tBQzdDLEtBQUl2SCxZQUFZdUg7TUFDZCtGLHFCQUFxQi9GO0tBRXZCLEtBQUl2SCxZQUFZdUgsT0FDZCtGLHFCQUFxQi9GO0tBRXZCLElBQUlsSSxRQUFRc1AsYUFBYUoseUJBQ3JCSyxXQUNBelE7S0FDSixRQUFRaUIsS0FBS1ksYUFBYztNQUNuQixJQUFGcUssSUFBSWpMLFFBQVFDO01BQ2hCLEdBQUdnTCxPQUFNdUUsS0FBS3ZFLE1BQU8sQ0FBQ3VFLEtBQUt2RSxjQUFjbE0sT0FBT2tNOztLQUVsRCxPQUFPbE07SUFmd0I7R0FpQmpDa1E7YUFBMEM5RyxNQUFNa0g7S0FDOUM7TUFBSTlCLGFBQWE4QixjQUFjdkI7TUFFM0IvTyxJQUFJNkIsYUFBYXVIO01BQ2pCN0g7TUFDQXRCO0tBQ0o7O2NBQ0UsR0FBSXNCO2VBQUcsR0FDRGlOO2dCQUNGUztrQkFBcUJUO2tCQUFZQyx3Q0FBd0M1TSxRQUFRdUg7O2dCQUdqRitGLHFCQUFxQi9GO2NBR3pCLEdBQUduSixLQUFLRCxVQUFVLE9BQU9JO2NBQ2YsSUFBTnNRLFFBQVExUSxFQUFFQztjQUNkQTtjQUNBLGNBQWV5UTthQVpJOzs7Y0FlakIsR0FBSW5QO2VBQUcsR0FDRGlOO2dCQUNGUztrQkFBcUJUO2tCQUFZQyx3Q0FBd0M1TSxRQUFRdUg7O2dCQUdqRitGLHFCQUFxQi9GO2NBR3pCN0g7Y0FDQXZCO2FBVlk7SUFwQmU7R0FrQ2pDa1E7YUFBeUM5RztLQUN2QyxHQUFHQSxZQUFhO0tBQ0QsSUFBWGdILGFBQWF2TyxXQUFXdUg7S0FDNUIsT0FBT3ZILGFBQWF1TztJQUhVO0dBS2hDRjthQUF5QzlHO0tBQ2hDLElBQUh1SCxLQUFLOU8sYUFBYXVIO0tBQ3RCLE9BQU92SCxhQUFhdUg7S0FDcEIsT0FBT3VIO0lBSHVCO0dBS2hDVDthQUF1QzlHLE1BQU1sSjtLQUMzQyxJQUFJOFA7S0FDSixHQUFHOVAsWUFBWUE7TUFDYmlQO1FBQXFCdE4sUUFBUXVIOztLQUMvQixHQUFHbEosVUFBVUE7TUFDWGlQO1FBQXFCdE4sUUFBUXVIOztLQUMvQnZILFlBQVl1SDtLQUNaLEdBQUl2SCxhQUFhdUgsTUFBTztNQUN0QixHQUFJdkgsWUFBWXVIO09BQU8rRixxQkFBcUJ0TixRQUFRdUg7TUFDcEQsR0FBSWxKLFlBQVlBO09BQVFpUCxxQkFBcUJ0TixRQUFRdUg7TUFDckQ0RyxPQUFPbk8sYUFBYXVIO01BQ3BCLEdBQUdsSixZQUFZOFA7O2FBQ045UCxTQUFVO01BQ25CMkIsMEJBQTBCdUg7TUFDMUJ2SCxhQUFhdUgsWUFBWW9HLFdBQVd6RDtNQUNwQ2lFLE9BQU9uTyxhQUFhdUg7OztNQUVwQmdHLHdCQUF5QnZOLFFBQVF1SDtLQUVuQyxXQUFXMkcsU0FBU2xPLFFBQVF1SCxPQUFPNEcsTUFBTTlQO0lBbkJiO0dBc0I5QmdRO2FBQXVDOUcsTUFBTWxKO0tBQzNDLElBQUk4UDtLQUNKLEdBQUc5UCxZQUFZQTtNQUNiaVA7UUFBcUJ0TixRQUFRdUg7O0tBQy9CLEdBQUdsSixVQUFVQTtNQUNYaVA7UUFBcUJ0TixRQUFRdUg7O0tBQy9CdkgsWUFBWXVIO0tBQ1osR0FBSXZILGFBQWF1SCxNQUFPO01BQ3RCLEdBQUl2SCxZQUFZdUg7T0FBTytGLHFCQUFxQnROLFFBQVF1SDtNQUNwRCxHQUFJbEosWUFBWUE7T0FBUWlQLHFCQUFxQnROLFFBQVF1SDtNQUNyRDRHLE9BQU9uTyxhQUFhdUg7TUFDcEIsR0FBR2xKLFlBQVk4UDs7YUFDTjlQLFNBQVU7TUFDbkIyQiwwQkFBMEJ1SDtNQUMxQnZILGFBQWF1SCxZQUFZb0csV0FBV3pEO01BQ3BDaUUsT0FBT25PLGFBQWF1SDs7O01BRXBCZ0csd0JBQXlCdk4sUUFBUXVIO0tBRW5DLFdBQVcyRyxTQUFTbE8sUUFBUXVILE9BQU80RyxNQUFNOVA7SUFuQmI7R0FzQjlCZ1E7YUFBMkM5RyxNQUFLdEg7S0FDOUMsSUFBSWtPO0tBQ0osR0FBR25PLGFBQWF1SDtNQUFPK0YscUJBQXFCdE4sUUFBUXVIO0tBQ3BELEdBQUcrQixpQkFBaUJySixVQUNsQmtPLFdBQVdSLFdBQVcxTjtLQUN4QixHQUFHb0osa0JBQWtCcEo7TUFDbkJrTyxXQUFXUixXQUFXdE4scUJBQXFCSjthQUNyQ0EsbUJBQW1CaUM7TUFDekJpTSxXQUFXUixXQUFXTixvQkFBb0JwTjtvQkFDN0JBO01BQ2JrTyxXQUFXUixXQUFXek4sc0JBQXNCRDthQUN0Q0EsaUJBQWtCO01BQ2Q7T0FBTjhPO1NBQVExTyxxQkFBcUJxTSx3QkFBd0J6TTtNQUN6RGtPLFdBQVdSLFdBQVdvQjs7S0FFeEIsR0FBR1osS0FBSztNQUNObk8sMEJBQTBCdUg7TUFDMUJ2SCxhQUFhdUgsUUFBUTRHOzs7TUFFbEJiO1FBQXFCdE4sUUFBUXVIO0lBbkJIO0dBc0JqQzhHLHFDQUFxQ0E7R2xCOFpyQyxTQUFTVyxzQkFBc0J4USxHQUM3QixPQUFPQSxTQUNUO0dBZkEsU0FBU3lRLHVCQUF3QnpRLEdBQUdKLEdBQ2xDLE9BQU9JLGFBQWFKLEdBQ3RCO0dBaE1BLFNBQVM4USwyQkFBNEIxUTtJQUNuQyxJQUFJSyxJQUFJbVEsc0JBQXNCeFEsSUFDMUJMLFFBQVFRLFdBQVdFLElBQ25CVDtJQUNKLE1BQU9BLElBQUlTLEdBQUdULEtBQUtELEVBQUVDLEtBQUs2USx1QkFBdUJ6USxHQUFFSjtJQUNuRCxPQUFPRDtHQUNUO0dldk9BLFNBQVNnUixTQUFTQyxJQUFJaEI7SUFDcEJwTyxVQUFVcVA7SUFDVnJQLFVBQVVvUDtJQUNWcFAsYUFBYW9PO0dBQ2Y7R0FDQWUseUJBQXlCekI7R0FDekJ5QixpQ0FBaUNBO0dBRWpDQTthQUF1Q25SO0tBQ3JDLElBQ0VnQyxzQkFBc0JBLFNBQVFoQztXQUN2QnNSLEtBQ1BoQyxxQkFBcUJnQztJQUpLO0dBTzlCSDs7S0FDRSxJQUNFLE9BQU9uUCxrQkFBa0JBO1dBQ2xCc1AsS0FDUGhDLHFCQUFxQmdDO0lBSkc7R0FPNUJIO2FBQW9DbkwsUUFBTzZKLEtBQUkwQixZQUFXdlI7S0FDeEQ7TUFDRSxHQUFHZ0M7T0FDREEsa0JBQWtCQSxTQUFTNk4sS0FBSzBCLFlBQVl2Ujs7T0FFNUNnQyxrQkFBa0JBLFNBQVM2TixLQUFLMEIsWUFBWXZSLEtBQUtnRzs7V0FDNUNzTCxLQUNQaEMscUJBQXFCZ0M7S0FFdkI7SUFUeUI7R0FXM0JIO2FBQW1DbkwsUUFBTzdGLEdBQUVvUixZQUFXdlI7S0FDckQ7TUFDRSxHQUFHZ0M7T0FDUSxJQUFMd1AsT0FBT3hQLGlCQUFpQkEsU0FBUzdCLEdBQUdvUixZQUFZdlI7O09BRTNDLElBQUx3UixPQUFPeFAsaUJBQWlCQSxTQUFTN0IsR0FBR29SLFlBQVl2UixLQUFLZ0c7TUFDM0QsT0FBT3dMOztXQUNBRixLQUNQaEMscUJBQXFCZ0M7SUFSQztHQVcxQkg7O0tBQ0UsSUFDRW5QLGtCQUFrQkEsVUFDbEI7V0FDT3NQLEtBQ1BoQyxxQkFBcUJnQztJQUxFO0dBaFEzQixTQUFTRyxhQUFheEQsTUFDcEJqTSxVQUFVcVAsZUFDVnJQLFlBQVlpTSxLQUNkO0dBQ0F3RCxxQ0FBcUNsSSxNQUNuQyxPQUFRdkgsWUFBWXVILEtBRE07R0FHNUJrSTthQUF5Q2xJO0tBQ3ZDLElBQ0UsT0FBT3ZILG1CQUFtQkEsUUFBUXVIO1dBQzNCK0gsS0FDUDtJQUo0QjtHQU9oQ0c7YUFBeUNsSTtLQUN2QyxJQUNFLE9BQU92SCxpQkFBaUJBLFFBQVF1SDtXQUN6QitILEtBQ1BoQyxxQkFBcUJnQztJQUpPO0dBT2hDRzthQUF3Q2xJLE1BQU1pSCxNQUFNQztLQUNsRCxJQUNFek8sa0JBQWtCQSxRQUFRdUgsY0FBWWlILFFBQ3RDO1dBQ09jLEtBQ1B0UCx3QkFBd0JzUCxLQUFLYjtJQUxGO0dBUS9CZ0I7YUFBd0NsSSxNQUFNa0g7S0FDNUMsSUFDRXpPLGtCQUFrQkEsUUFBUXVILFFBQzFCO1dBQ08rSCxLQUNQdFAsd0JBQXdCc1AsS0FBS2I7SUFMRjtHQVEvQmdCO2FBQTBDbEksTUFBTWtIO0tBQzlDLElBQ0UsT0FBT3pPLG9CQUFvQkEsUUFBUXVIO1dBQzVCK0gsS0FDUHRQLHdCQUF3QnNQLEtBQUtiO0lBSkE7R0FPakNnQjthQUF5Q2xJO0tBQ3ZDLElBQ0UsT0FBT3ZILGlCQUFpQkEsUUFBUXVIO1dBQ3pCK0gsS0FDUGhDLHFCQUFxQmdDO0lBSk87R0FPaENHO2FBQXlDbEksTUFBTWtIO0tBQzdDO01BQ1EsSUFBRjdQLElBQUlvQixtQkFBbUJBLFFBQVF1SDtNQUNuQ3ZILG1CQUFtQkEsUUFBUXVIO01BQzNCLE9BQU8zSTs7V0FDQTBRLEtBQ1B0UCx3QkFBd0JzUCxLQUFLYjtJQU5EO0dBU2hDZ0I7YUFBdUNsSSxNQUFNbEosR0FBR29RO0tBQzlDLElBQUlpQixTQUFTTCxzQkFDVHJKO0tBQ0osUUFBUTJKLE9BQU90UjtNQUFFLE9BQ1JzUjs7U0FDVTNKLE9BQU8wSixpQkFBaUI7O1NBQ3hCMUosT0FBTzBKLGlCQUFpQjs7U0FFdkMxSixPQUFPMEosa0JBQWtCQSxpQkFDekI7O1NBQ2dCMUosT0FBTzBKLGdCQUFtQjs7U0FDMUIxSixPQUFPMEosZ0JBQW1COztTQUMxQjFKLE9BQU8wSixlQUFtQjs7U0FDMUIxSixPQUFPMEosaUJBQW1COztTQUMxQjFKLE9BQU8wSixlQUFtQjs7U0FDMUIxSixPQUFPMEosbUJBQW1COztLQUc5QztNQUNFO09BQUlOLEtBQUtwUCxpQkFBaUJBLFFBQVF1SCxPQUFPdkI7T0FDckM0SjtTQUFvQjVQLGtCQUFrQkEsUUFBUXVIO01BQ2xEbEosc0JBQXNCdVI7TUFDdEIsV0FBV1QsU0FBU0MsSUFBSS9ROztXQUNqQmlSLEtBQ1B0UCx3QkFBd0JzUCxLQUFLYjtJQXhCSDtHQTRCOUJnQjthQUF5Q0ksR0FBR3pRLEdBQUdxUDtLQUM3QyxJQUNFek8sbUJBQW1CQSxRQUFRNlAsSUFBSTdQLFFBQVFaO1dBQ2hDa1EsS0FDUHRQLHdCQUF3QnNQLEtBQUtiO0lBSkQ7R0FPaENnQjthQUF1Q2xJLE1BQU1rSDtLQUMzQztNQUNlLElBQVRxQixXQUFXOVAsaUJBQWlCQSxRQUFRdUg7TUFDeEMsT0FBT3ZILG1CQUFtQjhQOztXQUNuQlIsS0FDUHRQLHdCQUF3QnNQLEtBQUtiO0lBTEg7R0FROUJnQjthQUF3Q2xJLE1BQU1rSDtLQUM1QztNQUNlLElBQVRxQixXQUFXOVAsa0JBQWtCQSxRQUFRdUg7TUFDekMsT0FBT3ZILG1CQUFtQjhQOztXQUNuQlIsS0FDUHRQLHdCQUF3QnNQLEtBQUtiO0lBTEY7R0FRL0JnQjthQUEwQ00sUUFBUUMsUUFBUXRFLE1BQU0rQztLQUM5RDtNQUNFek87UUFBb0JBLFFBQVFnUSxTQUFTaFEsUUFBUTBMLE9BQU9xRTtNQUNwRDs7V0FDT1QsS0FDUHRQLHdCQUF3QnNQLEtBQUtiO0lBTEE7R0FRakNnQjthQUEyQ2xJLE1BQU1rSDtLQUMvQztNQUNXLElBQUx3QixPQUFPalEscUJBQXFCQSxRQUFRdUg7TUFDeEMsT0FBT21GLHdCQUF3QnVEOztXQUN4QlgsS0FDUHRQLHdCQUF3QnNQLEtBQUtiO0lBTEM7R0FRbENnQjthQUEwQ2xJLE1BQU1rSDtLQUM5QyxJQUNFLE9BQU96TyxvQkFBb0JBLFFBQVF1SDtXQUM1QitILEtBQ1B0UCx3QkFBd0JzUCxLQUFLYjtJQUpBO0dBT2pDZ0I7YUFBcURILEtBQUtiO0tBQ3pDLElBQVg5QixhQUFhTztLQUNqQixHQUFJdUIsY0FBYzlCLFdBQVk7TUFDbkI7T0FBTDdLLE9BQU84SyxtQkFBbUIwQyxVQUFVQSxhQUFhQSxVQUFVQTtNQUMvRGxDLHFCQUFxQlQsWUFBWTdLOzs7TUFFakN3TCxxQkFBcUJnQztJQU5tQjtHQVM1Q0c7YUFBZ0RLO0tBVzlDLElBQUlJO0tBQ0osR0FBSUo7TUFDRkk7YUFDU0o7TUFDVEk7YUFDU0o7TUFDVEk7YUFDU0o7TUFDVEk7YUFDU0o7TUFDVEk7YUFDU0o7TUFDVEk7YUFDU0oscUJBQ1RJO0tBa0JGO2FBRUVKO2FBQ0FBO2FBQ0FJO2FBQ0FKO2FBQ0FBO2FBQ0FBO2FBQ0FBO2FBQ0FBO2FBQ0FBO2FBQ0FBO2FBQ0FBO2FBQ0FBO0lBeERtQztHQTREdkNMLHFDQUFxQ0E7R0MzTXJDLFNBQVNVLGNBQWN6RTtJQUNmLElBQUZ0TCxJQUFJK0wsaUJBQWlCVDtJQUN6QixLQUFLdEwsR0FBRztJQUNSLE9BQU9BO0dBQVU7R0FJbkI7SUFBSWdRO01BQVlELGNBQWM5RDtTQUFxQmpGO0lBNkQvQ2lKO0dBQ0osR0FBSTlFO0lBQ0Y4RTthQUE0QkQsdUJBQXFCWCxhQUFhVzs7SUFFOURDO2FBQTRCRCx1QkFBcUIvQixhQUFhK0I7R0FFaEVDO29DQUFtRGhDO0dBZW5ELFNBQVNpQyxrQkFBa0IvSTtJQUN6QjtLQUFJbUUsT0FBT1ksZUFBZS9FO0tBQ3RCQSxPQUFPbUU7S0FDUDZDLGFBQWFuQyxvQkFBb0I3RTtLQUNqQ3ZCO0lBQ0osSUFBVSxJQUFGNUgsT0FBT0EsSUFBSWlTLHlCQUF5QmpTLElBQUs7S0FDekMsSUFBRmlNLElBQUlnRyxpQkFBaUJqUztLQUN6QjtPQUFHbVEsa0JBQWtCbEU7YUFDYnJFLE9BQU9BLGtCQUFrQnFFO01BQy9CckU7Y0FBWXFFO2dCQUFjQTtjQUFjOUMsZUFBZThDLGVBQWM5Qzs7SUFFekUsS0FBS3ZCLE9BQU91RixvQkFBcUI7S0FDdEIsSUFBTFUsT0FBT2tFLGNBQWM1STtLQUN6QixHQUFJMEUsUUFBUUEsNEJBQTRCO01BQ2hDLElBQUY1QixXQUFVNEIsa0JBQWdCd0QsYUFBYXhEO01BQzNDb0Usc0JBQXNCaEc7TUFDdEJyRTtjQUFZcUU7Z0JBQWNBO2NBQWM5QyxlQUFlOEMsZUFBYzlDOzs7SUFHekUsR0FBSXZCLEtBQU0sT0FBT0E7SUFDakJzSCw4Q0FBOENpQjtHQUNoRDtHQWdLQSxTQUFTZ0MsaUJBQWlCaEosTUFBS3RIO0lBQ3BCLElBQUxnTSxPQUFPcUUsa0JBQWtCL0k7SUFDN0IsS0FBSzBFLHNCQUFzQjdFO0lBQzNCNkUscUJBQXFCQSxXQUFVaE07SUFDL0I7R0FDRjtHQUtBLFNBQVN1USxpQkFBaUJqSixNQUFLdEg7SUFDN0I7S0FBSXNILE9BQU9sRyx1QkFBdUJrRztLQUM5QnRILFVBQVVvQix1QkFBdUJwQjtJQUNyQyxPQUFPc1EsaUJBQWlCaEosTUFBTXRIO0dBQ2hDO0dBNUJBLFNBQVN3UTtJQUNBLElBQUhDLE1BQUkvUDtJQUNSLEdBQUcrUDtLQUFJLElBQ0ssSUFBRnRTLE9BQU9BLElBQUlzUyxZQUFZdFM7TUFDN0JvUyxpQkFBaUJFLElBQUl0UyxTQUFRc1MsSUFBSXRTO0lBR3JDdUMsOEJBQThCNlA7SUFDOUI3UDtJQUNBO0dBQ0Y7R2RsUUEsU0FBU2dRLG1DQUFzQyxXQUFZO0dTOEUzRCxTQUFTQyxzQkFBc0I5TSxHQUFHdEY7SUFDaEMsSUFBSVIsTUFBTVEsVUFBVUosR0FBR2tLO0lBQ3ZCLElBQUtsSyxPQUFPQSxTQUFTSixLQUFLSSxPQUFRO0tBQ2hDa0s7TUFBSTlKLGFBQWFKLEtBQ1pJLGFBQWFKLGNBQ2JJLGFBQWFKO1FBQ2JJLGFBQWFKO0tBQ2xCMEYsSUFBSWtFLGtCQUFrQmxFLEdBQUd3RTs7SUFFM0JBO0lBQ0EsT0FBUXRLOztPQUNBc0ssSUFBSzlKLGFBQWFKOztPQUNsQmtLLEtBQUs5SixhQUFhSjs7T0FFeEJrSyxLQUFLOUosYUFBYUosSUFDbEIwRixJQUFJa0Usa0JBQWtCbEUsR0FBR3dFOztJQUczQnhFLEtBQUs5RjtJQUNMLE9BQU84RjtHQUNUO0dBdUNBLFNBQVMrTSxxQkFBcUIvTSxHQUFHbkU7SUFDL0IsT0FBT2lSLHNCQUFzQjlNLEdBQUczRCx1QkFBdUJSO0dBQ3pEO0dBckNBLFNBQVNtUix3QkFBd0JoTixHQUFHdEY7SUFDbEMsSUFBSVIsTUFBTVEsVUFBVUosR0FBR2tLO0lBQ3ZCLElBQUtsSyxPQUFPQSxTQUFTSixLQUFLSSxPQUFRO0tBQ2hDa0ssSUFBSTlKLEVBQUVKLEtBQ0RJLEVBQUVKLGNBQ0ZJLEVBQUVKLGVBQ0ZJLEVBQUVKO0tBQ1AwRixJQUFJa0Usa0JBQWtCbEUsR0FBR3dFOztJQUUzQkE7SUFDQSxPQUFRdEs7O09BQ0FzSyxJQUFLOUosRUFBRUo7O09BQ1BrSyxLQUFLOUosRUFBRUo7O09BQ1BrSyxLQUFLOUosRUFBRUosSUFDYjBGLElBQUlrRSxrQkFBa0JsRSxHQUFHd0U7O0lBRzNCeEUsS0FBSzlGO0lBQ0wsT0FBTzhGO0dBQ1Q7R1hxcUJBLFNBQVNpTixzQkFBc0J2UztJQUM3QixPQUFRQTtlQUVOYyw2QkFBNkJkOztPQUU3QixPQUFPQTs7T0FFUCxPQUFPQTs7R0FFWDtHV3hxQkEsU0FBU3dTLG9CQUFvQmxOLEdBQUduRTtJQUNsQixJQUFSTSxVQUFVOFEsc0JBQXNCcFI7SUFDcEMsY0FBVU07Y0FDRDJRLHNCQUFzQjlNLEdBQUc3RDtjQUV6QjZRLHdCQUF3QmhOLEdBQUc3RDtHQUN0QztHQWhGQSxTQUFTZ1Isb0JBQW9Cbk47SUFDM0JBLEtBQUtBO0lBQ0xBLElBQUlpRSxTQUFVakU7SUFDZEEsS0FBS0E7SUFDTEEsSUFBSWlFLFNBQVVqRTtJQUNkQSxLQUFLQTtJQUNMLE9BQU9BO0dBQ1Q7R0F3RkEsU0FBU29OLFVBQVdDLE9BQU9DLE9BQU9DLE1BQU1DO0lBQ3RDLElBQUlDLE9BQU9DLElBQUlDLElBQUl6TSxJQUFJaUUsS0FBS25GLEdBQUduRSxHQUFHdkIsR0FBR0o7SUFDckNnSCxLQUFLb007SUFDTCxHQUFJcE0sVUFBVUEsVUFBVUE7SUFDeEJpRSxNQUFNa0k7SUFDTnJOLElBQUl1TjtJQUNKRSxTQUFTRDtJQUFNRTtJQUFRQztJQUN2QixNQUFPRCxLQUFLQyxNQUFNeEksUUFBUztLQUN6QnRKLElBQUk0UixNQUFNQztLQUNWLEdBQUk3UixLQUFLQTtNQUFjO1FBQ2xCbUosZ0JBQWdCbkosa0JBQWtCbUosZ0JBQWdCbkosb0JBQXFCO09BQ2pFLElBQUgrUixLQUFLNUksZ0JBQWdCbkosb0JBQW9CQTtPQUM3Q21FLElBQUlrRSxrQkFBbUJsRSxHQUFHNE47T0FDMUJ6STs7O2FBR0t0SixhQUFhdUMsU0FBU3ZDLFVBQVVBO01BQVMsT0FDeENBOztTQUdObUUsSUFBSWtFLGtCQUFrQmxFLEdBQUduRSxPQUN6QnNKLE9BQ0E7O1NBR0FzSSxRQUFRQyxNQUFNN1IsTUFDZDs7U0FFQSxHQUFHa0QseUJBQXlCbEQsT0FBTztTQUszQixJQUFKRSxNQUFRRixxQkFBdUJBO1NBQ25DbUUsSUFBSWtFLGtCQUFrQmxFLEdBQUdqRTtTQUN6QixJQUFLekIsT0FBT0osTUFBTTJCLFVBQVV2QixJQUFJSixLQUFLSSxJQUFLLENBQ3hDLEdBQUlxVCxNQUFNek0sSUFBSSxPQUNkdU0sTUFBTUUsUUFBUTlSLEVBQUV2Qjs7U0FFbEI7O2FBRU9rTCxpQkFBaUIzSixHQUFJO01BQzlCbUUsSUFBSWtOLG9CQUFvQmxOLEdBQUVuRTtNQUMxQnNKOzthQUNTSSxrQkFBa0IxSixHQUFJO01BQy9CbUUsSUFBSStNLHFCQUFxQi9NLEdBQUVuRTtNQUMzQnNKOztvQkFDZ0J0SixlQUFnQjtNQUNoQ21FLElBQUk4TSxzQkFBc0I5TSxHQUFFbkU7TUFDNUJzSjs7YUFDU3RKLE9BQU9BLE9BQU07TUFFdEJtRSxJQUFJa0Usa0JBQWtCbEUsR0FBR25FLElBQUVBO01BQzNCc0o7O29CQUNnQnRKLGVBQWdCLENBRWhDbUUsSUFBSW9FLG9CQUFvQnBFLEdBQUVuRSxJQUMxQnNKOztJQUdKbkYsSUFBSW1OLG9CQUFvQm5OO0lBQ3hCLE9BQU9BO0dBQ1Q7R0w5S0EsU0FBUzZOLHdCQUF5QnZSLEdBQUc2SyxNQUFNMkc7SUFDekMsS0FBS2pQLFNBQVN2QyxHQUFJO0tBQ2hCLEdBQUl3QyxNQUFNeEMsSUFBSSxPQUFPc007S0FDckIsT0FBT0Esd0JBQTBCdE07O0lBRTFCLElBQUwyRCxPQUFRM0QsY0FBVUEsT0FBTTRDLGVBQWE1QztJQUN6QyxHQUFHMkQsTUFBTTNELE1BQUtBO0lBQ04sSUFBSm1FO0lBQ0osR0FBSW5FO0tBQVE7WUFDSEE7S0FBTyxNQUNQQSxTQUFTbUUsYUFBYyxDQUFFbkUsUUFBUW1FOztLQUNuQyxNQUNFbkUsT0FBUSxDQUFFQSxRQUFRbUU7SUFFM0IsSUFBSXNOLFdBQVd0TixvQkFDWHVOO0lBQ0osR0FBSS9OO0tBQU0rTjs7S0FDTCxPQUNJRjs7UUFDWUUsZ0JBQWdCOztRQUNoQkEsZ0JBQWdCO2dCQUMxQjs7SUFHWCxHQUFJN0csYUFBYUEsVUFBVztLQUVsQixJQUFKOEcsTUFBTXRULFlBQVd3TTtLQUNyQjdLLElBQUkzQixXQUFXMkIsSUFBSTJSLE9BQU9BOztJQUVsQixJQUFOQyxRQUFRNVI7SUFDWixHQUFHNkssVUFBVTtLQUNILElBQUpnSCxNQUFNRDtLQUNWLEdBQUdDO01BQ0RELGVBQWU3UyxnQkFBZ0I4TDtTQUU1QjtNQUNNLElBQUw1RixPQUFPNE0sVUFBTWhIO01BQ2pCLEdBQUcrRyxlQUFlM007T0FDaEIyTSxTQUFTN1MsZ0JBQWdCa0csT0FBTzJNOztPQUVoQ0EsUUFBUUEsZ0JBQWUzTTs7O0lBRzdCLE9BQU9xSDthQUF5Qm9GLGtCQUFrQkUsY0FBY0gsV0FBV3ROO0dBQzdFO0dFOEdBLFNBQVMyTixtQkFBbUI5UixHQUFLLFNBQVFBLFdBQVk7R0ErQnJELFNBQVMrUixvQkFBcUIvUjtJQUM1QixXQUFXcUQsUUFBUXJELGNBQWVBLG9CQUFzQkE7R0FDMUQ7R0FHQSxTQUFTZ1Msb0JBQXFCaFMsR0FBSyxPQUFPQSxVQUFVO0dBakNwRCxTQUFTaVMsdUJBQXVCalMsR0FBSyxTQUFRQSxVQUFXO0dBaEJ4RCxTQUFTa1MsZUFBZ0JsUyxHQUFLLE9BQU9BLFFBQVE7R0FxRTdDLFNBQVNtUyxrQkFBbUI1SCxLQUFLdks7SUFDekIsSUFBRi9CLElBQUlxTSxrQkFBa0JDO0lBQzFCLEdBQUl0TSxnQkFBZ0JnVSx1QkFBdUJqUyxHQUFJLENBQzdDL0IsY0FBYStCLElBQUlrUyxlQUFlbFM7SUFFbEM7S0FBSXNHO0tBQ0E4TCxRQUFRTCxvQkFBb0I5VDtLQUM1Qm9VO0lBQ0osRUFBRztLQUNLLElBQUZ2SCxJQUFJOUssVUFBVW9TO0tBQ2xCcFMsSUFBSThLO0tBQ0p4RSxTQUFTK0wsYUFBYUwsb0JBQW9CbEgsY0FBY3hFOzs7UUFDL0N3TCxtQkFBbUI5UjtJQUM5QixHQUFJL0IsWUFBYTtLQUNmQTtLQUNNLElBQUZlLElBQUlmLFNBQVNxSTtLQUNqQixHQUFJdEgsT0FBT3NILFNBQVN2SCxnQkFBaUJDLFVBQVVzSDs7SUFFakQsT0FBT2tFLHVCQUF1QnZNLEdBQUdxSTtHQUNuQztHRWxSQSxTQUFTZ00seUJBQTBCbFU7SUFDakMsSUFBSUosT0FBT0osTUFBTWdSLHNCQUFzQnhRLElBQUltVSxXQUFXNU87SUFDdEQsR0FBSS9GO0tBQVMsT0FDSGlSLHVCQUF1QnpRLEdBQUVKOztRQUN4QkEsS0FBSzJGLFlBQVc7O1FBQ2hCM0YsS0FBSzJGLFVBQVU7O0lBRzFCLEdBQUkzRixRQUFRSixPQUFPaVIsdUJBQXVCelEsR0FBR0o7S0FDM0MsT0FBUTZRLHVCQUF1QnpRLEdBQUdKOzs7UUFDZnVVLFdBQVd2VSxRQUFROzs7UUFDbkJ1VSxVQUFXdlUsUUFBUTs7O1FBQ25CdVUsVUFBV3ZVLFFBQVE7OztRQUNuQkEsUUFBUTs7SUFFN0IsUUFBUUEsR0FBRzJGLE1BQU00TztHQUNuQjtHQUdBLFNBQVNDLGlCQUFpQmxUO0lBQ3hCLEdBQUlBLFdBQVdBLFNBQVUsT0FBT0E7SUFDaEMsR0FBSUEsV0FBV0EsU0FBVSxPQUFPQTtJQUNoQyxHQUFJQSxXQUFXQSxVQUFVLE9BQU9BO0lBQ2hDO0dBQ0Y7R0FLQSxTQUFTbVQsbUJBQW9CclU7SUFDM0I7S0FBSWEsSUFBSXFULHlCQUEwQmxVO0tBQzlCSixJQUFJaUI7S0FBTTBFLE9BQU8xRTtLQUFNc1QsT0FBT3RUO0tBQzlCckIsTUFBTWdSLHNCQUFzQnhRO0tBQzVCc1U7S0FDQXBULElBQUt0QixJQUFJSixNQUFLaVIsdUJBQXVCelEsR0FBR0o7S0FDeENtQyxJQUFJcVMsaUJBQWlCbFQ7SUFDekIsR0FBSWEsU0FBU0EsS0FBS29TLE1BQU12TDtJQUNoQixJQUFKcEIsTUFBTXpGO0lBQ1YsSUFBS25DLEtBQUlBLElBQUVKLEtBQUlJLElBQUs7S0FDbEJzQixJQUFJdVAsdUJBQXVCelEsR0FBR0o7S0FDOUIsR0FBSXNCLFNBQVM7S0FDYmEsSUFBSXFTLGlCQUFpQmxUO0tBQ3JCLEdBQUlhLFNBQVNBLEtBQUtvUyxNQUFNO0tBQ3hCM00sTUFBTTJNLE9BQU8zTSxNQUFNekY7S0FDbkIsR0FBSXlGLE1BQU04TSxXQUFXMUw7O0lBRXZCLEdBQUloSixLQUFLSixLQUFLb0o7SUFJZHBCLE1BQU1qQyxPQUFPaUM7SUFDYixHQUFLMk0sZUFBaUIzTSxZQUFZQSxLQUVoQ29CO0lBQ0YsT0FBT3BCO0dBQ1Q7R05pSEEsU0FBUytNLG1CQUFtQjVVLEdBQzFCLE9BQU9BLFdBQ1Q7R0E2REEsU0FBUzZVLGtCQUFrQm5ELEdBQUd4UixHQUFHeUQ7SUFDL0IsT0FBTytOLEVBQUV2RSx3QkFBd0JqTixVQUFVd1IsR0FBR2tELG1CQUFtQmpSO0dBQ25FO0dBR0EsU0FBU21SLFlBQVl2VCxHQUFHdkI7SUFDdEIsT0FBUUE7O09BQ0EsV0FBV3VCOztPQUNYLFdBQVdBLEVBQUd2Qjs7T0FDZCxXQUFXdUIsRUFBR3ZCLE1BQUtBOztPQUNuQixXQUFXdUIsRUFBR3ZCLE1BQUtBLE1BQUtBOztPQUN4QixXQUFXdUIsRUFBR3ZCLE1BQUtBLE1BQUtBLE1BQUtBOztPQUM3QixXQUFXdUIsRUFBR3ZCLE1BQUtBLE1BQUtBLE1BQUtBLE1BQUtBOztPQUNsQyxXQUFXdUIsRUFBR3ZCLE1BQUtBLE1BQUtBLE1BQUtBLE1BQUtBLE1BQUtBOztPQUN2QyxXQUFXdUIsRUFBR3ZCLE1BQUtBLE1BQUtBLE1BQUtBLE1BQUtBLE1BQUtBLE1BQUtBOztJQUVwRCxTQUFTK1UsSUFBTSxPQUFPeFQsUUFBUU0sTUFBTStTLG1CQUFtQjVVLElBQUs7SUFDNUQrVSxjQUFjeFQ7SUFDZCxXQUFXd1Q7R0FDYjtHQWtKQSxTQUFTQyxlQUFnQmhWO0lBQ2pCLElBQUYwUjtJQUNKLElBQVcsSUFBRnpSLE9BQU9BLElBQUlELFVBQVVDLElBQUs7S0FDM0IsSUFBRjhNLElBQUkvTSxFQUFFQztLQUNWeVIsRUFBRXZFLHdCQUF3QkosU0FBU0E7O0lBRXJDLE9BQU8yRTtHQUNUO0dBdk9BLFNBQVN1RCxpQkFBaUJqVjtJQUN4QixJQUFJSCxNQUFNRyxVQUNOUyxRQUFRc0QsTUFBTWxFO0lBQ2xCWTtJQUNBLElBQVMsSUFBRFIsT0FBSUEsSUFBRUosS0FBSUksS0FBS1EsRUFBRVIsU0FBT0QsRUFBRUM7SUFDbEMsT0FBT1E7R0FDVDtHQWxKa0IsSUFBZHlVLGdCQUFnQnhSO0dBd1FwQixTQUFTeVIsNkJBQTZCQyxPQUFPbFY7SUFDM0M7S0FDRTtNQUFJZSxJQUFJaUQ7TUFDSlAsV0FBV0ksTUFBTXFSO01BQ2pCdlYsTUFBTVMsU0FBUzRELGtCQUFrQmtSO0tBQ3JDLElBQVcsSUFBRm5WLE9BQU9BLElBQUlKLEtBQUtJLEtBQUswRCxLQUFLMUQsS0FBS2lFLFVBQVVqRTtLQUNsRCxPQUFPaVYsY0FBY2hWLEdBQUd5RCxNQUxuQjtHQU9UO0dTbEZBLFNBQVMwUixlQUFnQnBULEdBQUcrQjtJQUFLLFVBQVN5SCxpQkFBaUJ4SixHQUFFK0I7R0FBZ0I7R0FHN0UsU0FBU3NSLGNBQWVyVCxHQUFHK0IsR0FBSyxVQUFTeUgsaUJBQWlCeEosR0FBRStCLGVBQWU7R01qUDNFLFNBQVN1UixlQUFlbFY7SUFDdEJBLElBQUkyQix1QkFBdUIzQjtJQUMzQixJQUFJSyxJQUFJTCxjQUNKTCxRQUFRK0QsTUFBTXJEO0lBQ2xCLElBQVcsSUFBRlQsT0FBT0EsSUFBSVMsR0FBR1Q7S0FDckJELEVBQUVDLE1BQU1JLGlCQUFpQkosS0FBTUksaUJBQWlCSjtJQUNsRCxPQUFPRDtHQUNUO0dBSUEsU0FBU3dWLGdCQUFnQkMsS0FBS0MsYUFBYUM7SUFDekM7S0FBSUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7SUFFSixLQUFLZCxnQkFBaUI7S0FDcEJBLGVBQWtCRixlQUFnQkUsSUFBSVU7S0FDdENWLGtCQUFrQkYsZUFBZ0JFLElBQUlXO0tBQ3RDWCxnQkFBa0JGLGVBQWdCRSxJQUFJYztLQUN0Q2QsZ0JBQWtCRixlQUFnQkUsSUFBSWE7S0FDdENiLGtCQUFrQkYsZUFBZ0JFLElBQUlZOztJQUd4QztLQUFJOVU7S0FBR2lWLFFBQVFkO0tBRVhuTixTQUFTOEcsMEJBQTBCc0csT0FBT0M7SUFFOUMsR0FBSVksV0FBWTtLQUVkYixPQUFPSyxnQkFBZ0JMLE9BQU9HLGlCQUFpQkgsT0FBT0k7S0FDdERKLE9BQU9NOzs7S0FHUE8sVUFBU0E7SUFFWCxPQUFRO0tBRUcsSUFBTGhDLE9BQU9pQixhQUFhZTtLQUN4QixHQUFJaEMsVUFBVSxTQUFRQTtLQUVWLElBQVJpQyxVQUFVaEIsZ0JBQWdCZTtLQUM5QixHQUFJQyxhQUFjO01BQ2hCZCxPQUFPSyxnQkFBZ0JMLE9BQU9JO01BQzlCSixPQUFPTSxtQkFBbUJROztLQUc1QixHQUFJZCxPQUFPSSxpQkFBaUJKLE9BQU9FO01BQWdCLEdBQzdDRixPQUFPTyx1QkFDVCxTQUFRTSxnQkFFUmpWO1NBQ0MsQ0FFSEEsSUFBSWdILE9BQU9vTixPQUFPSSxnQkFDbEJKLE9BQU9JO0tBR1QsR0FBSU4sY0FBY2pCLE9BQU9qVCxNQUFNaVY7TUFDN0JBLFFBQVFmLGNBQWNqQixPQUFPalQ7O01BRTdCaVYsUUFBUWYsZ0JBQWdCZTtLQUUxQixHQUFJQSxVQUFXO01BQ2JiLE9BQU9JLGdCQUFnQkosT0FBT0s7TUFDOUIsR0FBSUwsT0FBT007T0FDVGhOOztPQUVBLE9BQU8wTSxPQUFPTTs7YUFLWjFVLFVBQVVvVSxPQUFPTzs7R0FHM0I7R3BCQUEsU0FBU1EsZUFBZ0I3VyxLQUFLOFc7SUFDNUIsR0FBSTlXLFNBQVNzRTtJQUNiLElBQUl0RSxNQUFNQSxhQUNOWSxRQUFRc0QsTUFBTWxFO0lBQ2xCWTtJQUNBLElBQVcsSUFBRlIsT0FBT0EsSUFBSUosS0FBS0ksS0FBS1EsRUFBRVIsS0FBSzBXO0lBQ3JDLE9BQU9sVztHQUNUO0dxQmdDQSxTQUFTbVc7SUFDUDtLQUFJck8sYUFBYXNPO0tBQ2JDLFVBQVVDLFlBQVl4TztLQUN0QnlPLFNBQVN4VyxXQUFXK0g7SUFDeEI7O2dCQUNjd087aUJBQ0ZEO2dCQUNERTtHQUNiO0dBckdzQjtJQUFsQkM7TUFBb0I7UUFDdEIsU0FBU0MsSUFBS2pWLEdBQUcrQixHQUFLLE9BQVEvQixJQUFJK0IsTUFBUTtRQUMxQyxTQUFTbVQsR0FBR2xSLEdBQUVqRyxHQUFFUyxHQUFFd0IsR0FBRTVCLEdBQUVpQjtTQUNwQnRCLElBQUlrWCxJQUFJQSxJQUFJbFgsR0FBR2lHLElBQUlpUixJQUFJalYsR0FBR1g7U0FDMUIsT0FBTzRWLElBQUtsWCxLQUFLSyxJQUFNTCxXQUFZSyxHQUFLSTtRQUMxQztRQUNBLFNBQVMyVyxHQUFHcFgsR0FBRVMsR0FBRWMsR0FBRWEsR0FBRUgsR0FBRTVCLEdBQUVpQjtTQUN0QixPQUFPNlYsR0FBSTFXLElBQUljLE1BQVFkLElBQUsyQixHQUFJcEMsR0FBR1MsR0FBR3dCLEdBQUc1QixHQUFHaUI7UUFDOUM7UUFDQSxTQUFTK1YsR0FBR3JYLEdBQUVTLEdBQUVjLEdBQUVhLEdBQUVILEdBQUU1QixHQUFFaUI7U0FDdEIsT0FBTzZWLEdBQUkxVyxJQUFJMkIsSUFBTWIsTUFBTWEsR0FBS3BDLEdBQUdTLEdBQUd3QixHQUFHNUIsR0FBR2lCO1FBQzlDO1FBQ0EsU0FBU2lTLEdBQUd2VCxHQUFFUyxHQUFFYyxHQUFFYSxHQUFFSCxHQUFFNUIsR0FBRWlCLEdBQUssT0FBTzZWLEdBQUcxVyxJQUFJYyxJQUFJYSxHQUFHcEMsR0FBR1MsR0FBR3dCLEdBQUc1QixHQUFHaUIsR0FBSTtRQUNsRSxTQUFTZ1csR0FBR3RYLEdBQUVTLEdBQUVjLEdBQUVhLEdBQUVILEdBQUU1QixHQUFFaUI7U0FBSyxPQUFPNlYsR0FBRzVWLEtBQUtkLE1BQU0yQixJQUFLcEMsR0FBR1MsR0FBR3dCLEdBQUc1QixHQUFHaUI7UUFBSTtRQUV2RSxnQkFBaUI2SSxHQUFHNUI7U0FDbEIsSUFBSXZJLElBQUltSyxNQUFNMUosSUFBSTBKLE1BQU01SSxJQUFJNEksTUFBTS9ILElBQUkrSDtTQUV0Q25LLElBQUlvWCxHQUFHcFgsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSWdWLEdBQUdoVixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSTZWLEdBQUc3VixHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSTJXLEdBQUczVyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBQ25CdkksSUFBSW9YLEdBQUdwWCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJZ1YsR0FBR2hWLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJNlYsR0FBRzdWLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJMlcsR0FBRzNXLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FDbkJ2SSxJQUFJb1gsR0FBR3BYLEdBQUdTLEdBQUdjLEdBQUdhLEdBQUdtRztTQUNuQm5HLElBQUlnVixHQUFHaFYsR0FBR3BDLEdBQUdTLEdBQUdjLEdBQUdnSDtTQUNuQmhILElBQUk2VixHQUFHN1YsR0FBR2EsR0FBR3BDLEdBQUdTLEdBQUc4SDtTQUNuQjlILElBQUkyVyxHQUFHM1csR0FBR2MsR0FBR2EsR0FBR3BDLEdBQUd1STtTQUNuQnZJLElBQUlvWCxHQUFHcFgsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSWdWLEdBQUdoVixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSTZWLEdBQUc3VixHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSTJXLEdBQUczVyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBRW5CdkksSUFBSXFYLEdBQUdyWCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJaVYsR0FBR2pWLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJOFYsR0FBRzlWLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJNFcsR0FBRzVXLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FDbkJ2SSxJQUFJcVgsR0FBR3JYLEdBQUdTLEdBQUdjLEdBQUdhLEdBQUdtRztTQUNuQm5HLElBQUlpVixHQUFHalYsR0FBR3BDLEdBQUdTLEdBQUdjLEdBQUdnSDtTQUNuQmhILElBQUk4VixHQUFHOVYsR0FBR2EsR0FBR3BDLEdBQUdTLEdBQUc4SDtTQUNuQjlILElBQUk0VyxHQUFHNVcsR0FBR2MsR0FBR2EsR0FBR3BDLEdBQUd1STtTQUNuQnZJLElBQUlxWCxHQUFHclgsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSWlWLEdBQUdqVixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSThWLEdBQUc5VixHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSTRXLEdBQUc1VyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBQ25CdkksSUFBSXFYLEdBQUdyWCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJaVYsR0FBR2pWLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJOFYsR0FBRzlWLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJNFcsR0FBRzVXLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FFbkJ2SSxJQUFJdVQsR0FBR3ZULEdBQUdTLEdBQUdjLEdBQUdhLEdBQUdtRztTQUNuQm5HLElBQUltUixHQUFHblIsR0FBR3BDLEdBQUdTLEdBQUdjLEdBQUdnSDtTQUNuQmhILElBQUlnUyxHQUFHaFMsR0FBR2EsR0FBR3BDLEdBQUdTLEdBQUc4SDtTQUNuQjlILElBQUk4UyxHQUFHOVMsR0FBR2MsR0FBR2EsR0FBR3BDLEdBQUd1STtTQUNuQnZJLElBQUl1VCxHQUFHdlQsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSW1SLEdBQUduUixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSWdTLEdBQUdoUyxHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSThTLEdBQUc5UyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBQ25CdkksSUFBSXVULEdBQUd2VCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJbVIsR0FBR25SLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJZ1MsR0FBR2hTLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJOFMsR0FBRzlTLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FDbkJ2SSxJQUFJdVQsR0FBR3ZULEdBQUdTLEdBQUdjLEdBQUdhLEdBQUdtRztTQUNuQm5HLElBQUltUixHQUFHblIsR0FBR3BDLEdBQUdTLEdBQUdjLEdBQUdnSDtTQUNuQmhILElBQUlnUyxHQUFHaFMsR0FBR2EsR0FBR3BDLEdBQUdTLEdBQUc4SDtTQUNuQjlILElBQUk4UyxHQUFHOVMsR0FBR2MsR0FBR2EsR0FBR3BDLEdBQUd1STtTQUVuQnZJLElBQUlzWCxHQUFHdFgsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSWtWLEdBQUdsVixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSStWLEdBQUcvVixHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSTZXLEdBQUc3VyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBQ25CdkksSUFBSXNYLEdBQUd0WCxHQUFHUyxHQUFHYyxHQUFHYSxHQUFHbUc7U0FDbkJuRyxJQUFJa1YsR0FBR2xWLEdBQUdwQyxHQUFHUyxHQUFHYyxHQUFHZ0g7U0FDbkJoSCxJQUFJK1YsR0FBRy9WLEdBQUdhLEdBQUdwQyxHQUFHUyxHQUFHOEg7U0FDbkI5SCxJQUFJNlcsR0FBRzdXLEdBQUdjLEdBQUdhLEdBQUdwQyxHQUFHdUk7U0FDbkJ2SSxJQUFJc1gsR0FBR3RYLEdBQUdTLEdBQUdjLEdBQUdhLEdBQUdtRztTQUNuQm5HLElBQUlrVixHQUFHbFYsR0FBR3BDLEdBQUdTLEdBQUdjLEdBQUdnSDtTQUNuQmhILElBQUkrVixHQUFHL1YsR0FBR2EsR0FBR3BDLEdBQUdTLEdBQUc4SDtTQUNuQjlILElBQUk2VyxHQUFHN1csR0FBR2MsR0FBR2EsR0FBR3BDLEdBQUd1STtTQUNuQnZJLElBQUlzWCxHQUFHdFgsR0FBR1MsR0FBR2MsR0FBR2EsR0FBR21HO1NBQ25CbkcsSUFBSWtWLEdBQUdsVixHQUFHcEMsR0FBR1MsR0FBR2MsR0FBR2dIO1NBQ25CaEgsSUFBSStWLEdBQUcvVixHQUFHYSxHQUFHcEMsR0FBR1MsR0FBRzhIO1NBQ25COUgsSUFBSTZXLEdBQUc3VyxHQUFHYyxHQUFHYSxHQUFHcEMsR0FBR3VJO1NBRW5CNEIsT0FBTytNLElBQUlsWCxHQUFHbUs7U0FDZEEsT0FBTytNLElBQUl6VyxHQUFHMEo7U0FDZEEsT0FBTytNLElBQUkzVixHQUFHNEk7U0FDZEEsT0FBTytNLElBQUk5VSxHQUFHK0gsTUExRVQ7T0FmZ0I7O0dBeUd6QixTQUFTb04sZUFBZUMsS0FBS0MsT0FBT0M7SUFDbEMsSUFBSUMsU0FBU0gsZ0JBQ1RJO0lBQ0pKLFdBQVdFO0lBQ1gsR0FBR0MsT0FBTztLQUNJLElBQVJFLGVBQWVGO0tBQ25CLEdBQUdELFlBQVlHLFFBQVM7TUFDdEJMLFdBQVdDLGtCQUFpQkMsWUFBV0M7TUFDdkM7O0tBRUZILFdBQVdDLGtCQUFpQkksVUFBU0Y7S0FDckNWLGtCQUFrQk8sT0FBT0E7S0FDekJFLGFBQWFHO0tBQ2JELGFBQWFDOztJQUVmLE1BQU1ILGdCQUFnQjtLQUNwQkYsV0FBV0MsZUFBZUcsV0FBVUE7S0FDcENYLGtCQUFrQk8sT0FBT0E7S0FDekJFO0tBQ0FFOztJQUVGLEdBQUdGO0tBQ0RGLFdBQVdDLGVBQWVHLFdBQVVBLFlBQVlGO0dBQ3BEO0dBSUEsU0FBU0ksY0FBY047SUFDVixJQUFQRyxTQUFTSDtJQUNiQSxPQUFPRztJQUNQQTtJQUNBLEdBQUdBLFlBQWE7S0FDZCxJQUFVLElBQUY3WCxJQUFJNlgsUUFBUTdYLFFBQVFBLEtBQzFCMFgsT0FBTzFYO0tBRVRtWCxrQkFBa0JPLE9BQU9BO0tBQ3pCLElBQVUsSUFBRjFYLE9BQU9BLFFBQVFBLEtBQ3JCMFgsT0FBTzFYOzs7S0FFSixJQUNLLElBQUZBLElBQUk2WCxRQUFRN1gsUUFBUUEsS0FDMUIwWCxPQUFPMVg7SUFHWDBYLGNBQWNBO0lBQ2RBLGNBQWVBO0lBQ2ZQLGtCQUFrQk8sT0FBT0E7SUFDbkIsSUFBRmxXLFFBQVFkO0lBQ1osSUFBVyxJQUFGUCxPQUFPQSxPQUFPQTtLQUNyQixJQUFXLElBQUZILE9BQU9BLE9BQU9BLEtBQ3JCd0IsRUFBRXJCLFFBQVFILEtBQU0wWCxNQUFNdlgsVUFBV0g7SUFDckMsT0FBT3dCO0dBQ1Q7R3BCMFNBLFNBQVN5VyxxQkFBc0IvWDtJQUM3QixPQUFPa0QsdUJBQXVCbkQseUJBQXlCQyxNQUFJQTtHQUM3RDtHb0J0U0EsU0FBU2dZLGVBQWUzWCxHQUFHbUksS0FBSzNJO0lBQzlCLElBQUkyWCxNQUFNWixnQkFDTjVXLElBQUlxUCwwQkFBMEJoUDtJQUNsQ2tYLGVBQWVDLEtBQUl4WCxXQUFXd0ksS0FBS0EsTUFBTTNJLE1BQU1BO0lBQy9DLE9BQU9rWSxxQkFBcUJELGNBQWNOO0dBQzVDO0dBN0tBLFNBQVNTLGdCQUFnQjVYLEdBQUdtSSxLQUFLM0k7SUFDL0IsT0FBT21ZLGVBQWU5VixxQkFBcUI3QixJQUFHbUksS0FBSTNJO0dBQ3BEO0dDekJpQixJQUFicVksbUJBQW1CblU7R0FJdkIsU0FBU29VLGVBQWVsSDtJQUNiLElBQUxqQixPQUFPa0ksYUFBYWpIO0lBQ3hCLEdBQUdqQixNQUFNQTtJQUNULE9BQU9rSSxhQUFhakg7SUFDcEI7R0FDRjtHQW1FcUIsSUFBakJtSCx1QkFBdUJyVTtHQW9CM0IsU0FBU3NVLG9CQUFvQkMsSUFDM0IsT0FBT0YsaUJBQWlCRSxJQUMxQjtHQWdYQSxTQUFTQyxjQUFlQztJQUNiLElBQUxDLE9BQU9KLG9CQUFvQkc7SUFDL0IsS0FBS0MsYUFBYXRKO0lBQ2xCLEtBQUlzSixlQUFlQSx1QkFBdUI7SUFDMUMsR0FBR0E7S0FDREEsWUFBWTFZLHlCQUF5QjBZLGdCQUFnQkE7O0tBRXJEQSxnQkFBZ0JBLGFBQWFBLGdCQUFnQkE7SUFFL0NBLGVBQWVBO0lBQ2ZBO0lBQ0E7R0FDRjtHQXBSQSxTQUFTQyxzQkFBdUJGO0lBQ3JCLElBQUxDLE9BQU9KLG9CQUFvQkc7SUFDL0IsR0FBR0MsWUFBYTtLQUNkQTtLQUNBTixlQUFlTTtLQUNmQTtLQUNBQSxrQkFBa0JqWTtLQUNsQmlZO0tBQ0FBOztJQUVGO0dBQ0Y7R25CdE1BLFNBQVNFLDRCQUErQixTQUFVO0dtQnVPbEQsU0FBU0MsWUFBYUg7SUFDcEIsR0FBR0EsZUFBZXJZLEtBQUs7S0FDckIsSUFBSXlZLE1BQU1KLGVBQ05LLFFBQVEvSCwyQkFBMkI4SDtLQUN2QyxHQUFJQztNQUNGTCxjQUFjclk7U0FFWDtNQUNILEdBQUdxWSxxQkFBcUJBLGtCQUFrQkssYUFBYTtPQUMvQyxJQUFGclksUUFBUUQsV0FBV2lZLGtCQUFrQks7T0FDekNyWSxNQUFNZ1k7T0FDTkEsY0FBY2hZOztNQUVoQmdZLGdCQUFnQkssT0FBTUw7TUFDdEJBLGVBQWVLO01BQ2ZMLG1CQUFtQks7OztRQUVoQjtLQUNLO01BQU5DO1FBQVFOO1VBQWVBO1VBQWFBO1VBQWFBO1VBQWlCQSxxQkFBcUJBO0tBQzNGQSxlQUFlTTtLQUNmTixtQkFBbUJNOztHQUV2QjtHQW9CQSxTQUFTQyxvQkFBcUJSLFFBQVE1UixJQUFJM0csR0FBR1M7SUFDM0M7S0FBSStYLE9BQU9KLG9CQUFvQkc7S0FDM0J2WCxJQUFJUDtLQUNKdVksUUFBUVIsa0JBQWtCQTtJQUM5QixHQUFHL1gsS0FBS3VZLE1BQU87S0FDYnJTLE9BQU82UixxQkFBcUJBLGtCQUFpQkEsbUJBQW1CL1gsSUFBSVQ7S0FDcEV3WSxvQkFBb0IvWDs7WUFFZHVZLFVBQVc7S0FDakJyUztPQUFPNlIscUJBQXFCQSxrQkFBaUJBLG1CQUFtQlEsUUFBUWhaO0tBQ3hFd1ksb0JBQW9CUTtLQUNwQmhZLElBQUlnWTs7UUFDQztLQUNMUjtLQUNBQTtLQUNBRyxZQUFZSDtLQUNGLElBQU5RLFFBQVFSLGtCQUFrQkE7S0FDOUIsR0FBR3hYLElBQUlnWSxPQUFPaFksSUFBSWdZO0tBQ2xCclMsT0FBTzZSLHFCQUFxQkEsa0JBQWlCQSxtQkFBbUJ4WCxJQUFJaEI7S0FDcEV3WSxvQkFBb0J4WDs7SUFFdEIsT0FBT0E7R0FDVDtHQXJDQSxTQUFTaVksY0FBZVYsUUFBUS9YLEdBQUdSLEdBQUdTO0lBQzdCLElBQUhrRyxLQUFLeUksMEJBQTBCNU87SUFDbkMsT0FBT3VZLG9CQUFvQlIsUUFBUTVSLElBQUkzRyxHQUFHUztHQUM1QztHTllBLFNBQVN5WSx1QkFBdUJsSSxJQUFJaEI7SUFDbEMsR0FBR0E7S0FBWTtNQUVYLElBQUltSixLQUFLbEksZUFDTG1JLE1BQU1ELFlBQVluSjtNQUN0QixXQUFXZSxTQUFTcUksS0FBS3BKOztXQUNuQjVOO0lBRVYsV0FBVzJPLFNBQVNDLElBQUloQjtHQUMxQjtHR1ZBLFNBQVNxSixhQUFhckksSUFBR2hCO0lBQ3ZCVCxnQkFBZ0IzTixNQUFNa0s7SUFDdEJsSyxvQkFBc0J4QixHQUFLLFNBQWY7SUFDWixHQUFHNFEsa0JBQWtCc0k7S0FDbkIxWCxXQUFXMFg7WUFDTHRJLGtCQUFrQnNJO0tBQ3hCMVgsV0FBVzBYO21CQUNFQSwyQkFDYjFYLFdBQVcwWDtJQUNiMVgsYUFBYW9PO0dBQ2Y7R0FDQXFKLDJDQUE2QyxTQUFiO0dBQ2hDQTthQUF5Q3pULFFBQU82SixLQUFJQyxLQUFJOVA7S0FDdEQsR0FBR2dDLFNBQVU7TUFDWDtRQUFHaEMsV0FDRzhQLFlBQ0FBLE1BQUk5UCxPQUFPNlA7V0FDWEEsSUFBSUMsTUFBSTlQO09BQ1pBO01BR00sSUFBSjJaLE1BQU16TixrQkFBa0JsTTtNQUM1QmMsZ0JBQWdCdU8sb0JBQW9CUSxNQUFNQyxLQUFLNkosUUFBUTNaO01BQ3ZEZ0MsU0FBUzJYO01BQ1Q7O0tBRUZySyxxQkFBcUJ0TjtJQWRRO0dBZ0IvQnlYO2FBQXdDelQsUUFBUTZKLEtBQUtDLEtBQUs5UDtLQUN4RHNQLHFCQUFxQnROO0lBRE87R0FHOUJ5WCwwQ0FDRXpYLFdBQVdZLFVBRGtCO0dHMVMvQixTQUFTZ1gsdUJBQXVCekosTUFBSzhEO0lBQ25DLEdBQUdBLE9BQU9yUixXQUNScVIsTUFBTW9FO0lBRVJBLGFBQWFwRSxPQUFPOUQ7SUFDcEIsT0FBTzhEO0dBQ1Q7R0FDQSxTQUFTNEYsY0FBZXRRLE1BQU02RyxPQUFPMEo7SUFDN0IsSUFBRnpaO0lBQ0osTUFBTStQLE1BQU07S0FDVixPQUFPQTs7UUFDQy9QLGNBQWE7O1FBQ2JBLGNBQWE7O1FBQ2JBLGNBQWE7O1FBQ2JBLGNBQWE7O1FBQ2JBLGdCQUFlOztRQUNmQSxZQUFZOztRQUNaQSxjQUFhOztRQUNiQSxZQUFXOztRQUNYQSxnQkFBZTs7S0FFdkIrUCxRQUFNQTs7SUFFUixHQUFHL1AsWUFBWUE7S0FDYmlQO09BQXFCbk4sdUJBQXVCb0g7O0lBQzlDLEdBQUdsSixVQUFVQTtLQUNYaVA7T0FBcUJuTix1QkFBdUJvSDs7SUFDOUMsSUFBSTBFLE9BQU9xRSxrQkFBa0IvSSxPQUN6QjRHLE9BQU9sQyxpQkFBaUJBLFdBQVU1TjtJQUN0QyxPQUFPdVosdUJBQXdCekosTUFBTXZOO0dBQ3ZDO0dBQ0EsQ0FBQTtNQUNFLFNBQVN1TixLQUFLaUIsSUFBSWhCO09BQ2hCLE9BQUc3QztpQkFDTStMLHVCQUF1QmxJLElBQUloQjtxQkFHdkJxSixhQUFhckksSUFBSWhCO01BQ2hDO01BQ0F3SjtRQUF1QnpKOztNQUN2QnlKO1FBQXVCeko7TUFDdkJ5SjtRQUF1QnpKO0tBVnhCOztHQXVGRCxTQUFTNEosMkJBQTRCM0k7SUFDMUIsSUFBTGpCLE9BQU9rSSxhQUFhakg7SUFDeEIsR0FBR2pCLG1CQUFtQmIsNkJBQTRCOEI7SUFDbEQ7S0FBSTRJLFNBQVN6WjtLQUNUMFo7Y0FDRzlKO2dCQUNFQSxvQkFBa0JBO1lBQ3RCaUI7Ozs7O29CQUtRelE7Z0JBQ0pxWjtJQUVUekIsaUJBQWlCMEIsY0FBWUE7SUFDN0IsT0FBT0E7R0FDVDtHQXZDQSxTQUFTQyw0QkFBNkI5STtJQUMzQixJQUFMakIsT0FBT2tJLGFBQWFqSDtJQUN4QixHQUFHakIsbUJBQW1CYiw2QkFBNEI4QjtJQUNsRDtLQUFJK0ksV0FBWWhLLHdCQUF3QnZOLFlBQWF1TjtLQUNqRDhKO2NBQ0c5SjtnQkFDRUEsb0JBQWtCQTtZQUN0QmlCOzs7O29CQUlRelE7a0JBQ0Z3WjtJQUVYNUIsaUJBQWlCMEIsY0FBWUE7SUFDN0IsT0FBT0E7R0FDVDtHQTlCQSxTQUFTRztJQUNELElBQUZ2WjtJQUNKLElBQVUsSUFBRmEsT0FBT0EsSUFBSTZXLHlCQUF5QjdXO0tBQUk7T0FDM0M2VyxpQkFBaUI3VyxNQUFNNlcsaUJBQWlCN1c7VUFBYTZXLGlCQUFpQjdXO01BQ3ZFYixRQUFLMFgsaUJBQWlCN1csT0FBTWI7SUFFaEMsT0FBT0E7R0FDVDtHQXdYQSxTQUFTd1osa0JBQWtCMUIsUUFBT2pRLFFBQU8xQyxRQUFPaEc7SUFDckMsSUFBTDRZLE9BQU9KLG9CQUFvQkc7SUFDL0IsS0FBS0M7S0FBYXRKO0lBQ2xCNUcsU0FBU0EsZ0JBQWdCMUMsUUFBUUEsU0FBU2hHO0lBQzFDLEdBQUc0WSxtQkFBbUJsUSxnQkFBZ0JrUSxtQkFBb0I7S0FDbEQsSUFBRmhZLFFBQVFELFdBQVdpWSxtQkFBbUJsUTtLQUMxQzlILE1BQU1nWTtLQUNOQSxjQUFjaFk7O0lBRWhCLE9BQU9nWTs7T0FFTEEsZ0JBQWdCbFEsUUFBUWtRO09BQ3hCQSxvQkFBb0JsUTtPQUNwQmdRLGNBQWVDO09BQ2Y7O09BRUFDLGdCQUFnQmxRLFFBQVFrUTtPQUN4QkEsb0JBQW9CbFE7T0FDcEIsR0FBR2tRLG9CQUFvQkEsb0JBQ3JCRixjQUFlQztPQUNqQjs7T0FFTyxJQUFIRixLQUFLL1A7T0FDVCxHQUFHK1AsT0FBUTtRQUNURyxnQkFBZ0JsUSxRQUFRa1E7UUFDeEJBLG9CQUFvQmxRO1FBQ3BCLEdBQUdrUSxvQkFBb0JBLG9CQUNyQkYsY0FBZUM7O1dBRWQ7UUFDSEMsZ0JBQWdCbFEsbUJBQW1CK1AsU0FBU0c7UUFDNUNBLG9CQUFvQkg7UUFDcEJDLGNBQWVDO1FBQ2ZDLGdCQUFnQmxRLGdCQUFnQitQLFNBQVNHO1FBQ3pDQSxvQkFBb0JsUSxnQkFBZ0IrUDs7T0FFdEM7O0lBRUY7R0FDRjtHQUlBLFNBQVM2QixxQkFBcUIzQixRQUFPalEsUUFBTzFDLFFBQU9oRztJQUN0QyxJQUFQMEksU0FBUzhHLDBCQUEwQjlHO0lBQ3ZDLE9BQU8yUixrQkFBa0IxQixRQUFPalEsUUFBTzFDLFFBQU9oRztHQUNoRDtHQWNBLFNBQVN1YSxlQUFlNUIsUUFBT2pRLFFBQU8xQyxRQUFPaEc7SUFDM0MsT0FBT3NhO2FBQXFCM0IsUUFBT3RXLHFCQUFxQnFHLFNBQVExQyxRQUFPaEc7R0FDekU7R0FLQSxTQUFTd2Esb0JBQXFCN0IsUUFBT2pYO0lBQzdCLElBQUZsQixJQUFJNkMsdUJBQXVCL0Msb0JBQW9Cb0I7SUFDbkQ2WSxlQUFlNUIsUUFBT25ZO0lBQ3RCO0dBQ0Y7R0F2ZUEsU0FBU2lhLHlCQUF5QjlCLFFBQVFwUDtJQUMvQixJQUFMcVAsT0FBT0osb0JBQW9CRztJQUMvQkMsWUFBWXJQO0lBQ1o7R0FDRjtHWFdBLFNBQVNtUixTQUFTdFksR0FBRStCLEdBQ2xCLEdBQUlBLFFBQVFxQiwwQkFDWixPQUFPcEQsSUFBRStCLEVBQ1g7R0cySUEsU0FBU3dXLGNBQWV2WSxHQUFHK0I7SUFBSyxVQUFTeUgsaUJBQWlCeEosR0FBRStCO0dBQWdCO0dOaEs1RSxTQUFTeVcsc0JBQXVCaGEsR0FBRWUsR0FDaENmLFlBQ0FBLE9BQUtlLEdBQ0wsU0FDRjtHQXhEQSxTQUFTa1osYUFBY3pZO0lBQ3JCLEdBQUtBLGFBQWE4QixTQUFVOUIsUUFBU0E7S0FDbkMsT0FBT0E7WUFDQWtKLGlCQUFpQmxKO0tBQ3hCO1lBQ09pSixrQkFBa0JqSjtLQUN6QjtZQUNRQSxhQUFhMFksbUJBQW9CMVk7S0FDekM7WUFDT0EsS0FBS0EsZUFDWixpQkFFQTtHQUNKO0dKbUdBLFNBQVMyWSxtQkFBbUJDO0lBQ3BCLElBQUYzWjtJQUNKLEdBQUcyWjtLQUFNLElBQ0csSUFBRjVhLE9BQU9BLElBQUk0YSxhQUFhNWE7TUFDOUJpQixFQUFFaU0sd0JBQXdCME4sS0FBSzVhLFVBQVU0YSxLQUFLNWE7SUFHbEQsT0FBT2lCO0dBQ1Q7R0FLQSxTQUFTNFoscUJBQXNCN1osR0FBR08sR0FBR3VaO0lBQ25DLEdBQUlBLFNBQVU7S0FDSCxJQUFMM1IsT0FBTzJSO0tBQ1gsR0FBR3ZZO01BQ0R2QixJQUFJaVUsY0FBYzFTLDJCQUEyQjRHO2FBRXRDekcseUJBQTBCO01BQ2pDLEtBQUlBO09BQ0ZBLDBCQUEwQmlZLG1CQUFtQmpZO01BRXZDLElBQUpxWSxNQUFNclksd0JBQXdCeUc7TUFDbEMsR0FBRzRSO09BQ0QvWixJQUFJK1o7O09BRUovUix1REFBdURHOzs7SUFJN0R6RyxpQkFBaUIxQixTQUFTTztJQUMxQixHQUFHdVosVUFBVXBZLGlCQUFpQm9ZLFlBQVl2WjtHQUM1QztHQWpEQSxTQUFTeVosMEJBQTBCak0sSUFBR3hOO0lBQ3BDc04sa0JBQWtCOU0sdUJBQXVCZ04sT0FBT3hOO0lBQ2hEO0dBQ0Y7R0hzRUEsU0FBUzBaO0lBQ1A3WDtHQUNGO0dBV0EsU0FBUzhYLGdCQUFpQjlhLEdBQUdKO0lBQzNCLEdBQUlBLFdBQVc0USxzQkFBc0J4USxJQUFJNmE7SUFDekMsT0FBT3BLLHVCQUF3QnpRLEdBQUdKO0dBQ3BDO0dBdWVBLFNBQVNtYixxQkFBcUIvYTtJQUMzQkEsV0FBWWMsNkJBQTZCZDtJQUMxQyxPQUFPNkMsdUJBQXVCN0M7R0FDaEM7R0NyY0EsU0FBU2diLDRCQUErQiwwQkFBMEI7R0lqTWxFLFNBQVNDO0lBQ1BsVyxvQkFBb0J6QztHQUE2QjtHSjZEbkQsU0FBUzRZLGdCQUFpQm5TO0lBQ2xCLElBQUZsSSxJQUFJb0IsZ0JBQWdCNkssd0JBQXdCL0Q7SUFDaEQsR0FBR2xJLE1BQU11QixXQUNQNlk7SUFDRixPQUFPL00sd0JBQXdCck47R0FDakM7R0FtR0EsU0FBU3NhO0lBQ1AsR0FBSWhaO0tBQW1CLEdBQ2hCQSxrQ0FBbUM7TUFDL0IsSUFBRnhDLElBQUl3QyxzQ0FBc0MwQztNQUM5QyxXQUFXbEYsTUFBTUEsTUFBTUEsTUFBTUE7O2FBQ3BCd0MsOEJBQStCO01BQ2xDLElBQUZ4QyxRQUFRa0YsV0FBVzFDO01BQ3ZCLFdBQVd4QyxNQUFNQSxNQUFNQSxNQUFNQTs7SUFHbEMsSUFBSXliLE1BQU0sSUFBS0Msa0JBQ1h6WixJQUFJd1osbUJBQWVuYjtJQUN2QixXQUFVMkI7R0FDWjtHRzdNQSxTQUFTMFosZ0JBQWdCOVQ7SUFDakIsSUFBRnRHO0lBQ0osTUFBTXNHLE9BQU9BLGNBQWM7S0FDekJBLE1BQU1BLG9CQUFvQnpILE1BQU15SDtLQUNoQ3RHOztJQUVGLE9BQU9zRztHQUNUO0dBR0EsU0FBUytULHVCQUF1QjFiLEdBQUV5RCxNQUNoQyxtQkFBa0J6RCxhQUFXeUQ7R0FDL0I7R0FnRkEsU0FBU2tZLG9CQUFvQnhaO0lBQ047S0FDbkIsR0FBR0EsYUFBYTBCLE9BQU8sT0FBTzFCO0tBQzlCLElBQUlRO0tBRUo7T0FBR0wseUJBQ0dILGFBQWFHO1VBQ2JIO1VBQ0FBO01BQ0pRLE1BQU1GOztPQUVBSCw0QkFDRkgsYUFBYUc7VUFDYkg7VUFDQUE7TUFDSlEsTUFBTUY7YUFFQU4sYUFBYUcsb0JBQW9CdU07TUFDdkNsTSxVQUFTa00sNkJBQTRCMU07O01BR3JDUSxVQUFTRiwwQkFBeUI0TCx3QkFBeUJwTyxPQUFPa0M7S0FFcEUsR0FBSUEsYUFBYUcsa0JBQ2ZLLGVBQWVSO0tBQ2pCLE9BQU9ROztHQUdYO0dIM0hBLFNBQVNpWiwwQkFBMEJqWjtJQUNqQyxPQUFPQSxzQ0FJTCxrQkFFQTs7R0FFSjtHQUlBLFNBQVNrWixzQkFBc0JsWjtJQUN2QixJQUFGM0I7SUFDSixHQUFHMkIsWUFBYTtLQUNkM0IsS0FBSzJCO0tBQ0w7T0FBR0EsbUJBQW1CQSxrQkFBa0JpWiwwQkFBMEJqWjtNQUVoRSxJQUFJbVosU0FBU25aLFFBQ1RvWjs7TUFFSixJQUFJQSxXQUNBRCxTQUFTblo7S0FFZjNCO0tBQ0EsSUFBVSxJQUFGakIsSUFBSWdjLE9BQU9oYyxJQUFJK2IsZUFBZS9iLElBQUs7TUFDekMsR0FBR0EsSUFBSWdjLE9BQU8vYTtNQUNSLElBQUZNLElBQUl3YSxPQUFPL2I7TUFDZixVQUFVdUI7T0FDUk4sS0FBSU07Y0FDRUEsYUFBYUM7T0FDbkJQLFdBQVVNO3FCQUVHQTtPQUNiTixXQUFVTTs7T0FFUE47O0tBRVBBOztZQUNTMkIsZUFDVDNCLEtBQUsyQjtJQUVQLE9BQU8zQjtHQUNUO0dBSUEsU0FBU2diLDhCQUE4Qi9LO0lBQ3JDLEdBQUdBLGVBQWVwTixVQUFVb04sZUFBZUEsZUFBZ0I7S0FDN0MsSUFBUmdMLFVBQVVwTjtLQUNkLEdBQUdvTjtNQUFTakgsY0FBY2lILFVBQVVoTDtTQUMvQjtNQUNIO09BQUkvTixNQUFNMlksc0JBQXNCNUs7T0FDNUJpTCxVQUFVck47TUFDZCxHQUFHcU4sU0FBU2xILGNBQWNrSDtNQUMxQjdDLDBDQUEwQ25XO01BQzFDLEdBQUcrTixjQUFjLE1BQU1BOzs7O0tBR3RCLE1BQ0dBO0dBRVY7R0FvUUEsU0FBU2tMO0lBQ0ssSUFBUjlaLFVBQVVDO0lBQ2QsR0FBR0QsV0FBV0E7S0FDWkE7O2dCQUEwQzRPLEtBQUttTDtRQUM3Q0osOEJBQThCL0s7UUFDOUI1TztPQUY4QjtZQUsxQkM7S0FDTkE7O2dCQUE4QytaO1FBQzVDLEdBQUdBLGFBQ0RMLDhCQUE4Qks7T0FGRztHQU16QztHQUNBRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJcUI1T0lHOztJQ3RIQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUNXQUM7Ozs7Ozs7Ozs7Ozs7SUN4QkZDO0lBRUFDO0lBZ0VBQztJQUtBQztJQXdDQUM7SUEyRUFDO0lBc0JBQztJQWdCQUM7SUFjQUM7SUFLQUM7SUFlQUM7O0lDblBBQztJQU9NL1A7SUFHRmdRO0lBU0pDO0lBR0FDO0lBZ0NNQztJQVFBQztJQW9DRkM7SUF1QkVDO0lBR0ZDO0lBYUlDO0lBUUFDO0lBUUFDO0lBUUFDO0lDckpOQztJQTJFQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lDaWFJQztJQUFBLDhCQWtDWTs7O1dBOUJSQyxpQkFDUixXQUxJRCxVQUlJQzs7V0FFRUMsbUJBQ1YsV0FQSUYsVUFNTUU7O1dBRUhDLG1CQUNQLFdBVElILFVBUUdHOztXQUVFQyxtQkFD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QTcyQixJQTYxQ1M5TCxLQUFzQjtZQUkvQjZpQztJQXJ0QkEvQyxlQTBWQTBCO0lBNFhGLE9BdHRCRTFCLGVBMlZBMkI7R0E0WDZCO0d6QmgxQnpCN3hCLFF5QjgwQkppekI7WUNoMkNBQyxtQkFBbUJsbUMsTUFDakJ2RztJQUFKLElBQ0lzZ0MsT0FBVSxhQURWdGdDLGVBQUFBLE1BQUFBO0lBRUosMEJBSHFCdUcsTUFFakIrNUI7SUFDSjtHQUE4QjtHQ3dJOUI7R0QzSUVtTTtHQytJcUIsZSxVO0c7RztHLEksZTt1Qiw0Qjs0QixpQzs7STtJO0c7O0ksNEI7Rzs7SSxZOztJLE87O0c7O0ksWTs7STtJOzt3QixNLE87eUIsYyxPOztJLFk7O0k7OzJCLFUsTzs7SSxZOztJOzt3Qiw4Qjt3QixtQjs7STtJLCtCLE8sdUI7Rzs7SSx3QixvQixvQjs7OztNLFE7TTs7Ozs7STtHOztJO0ksNkIsTyx1QjtHOzs7OztvQjs7TSxVOzs7Ozs7STtHOztJO0ksVzs7STtJO0c7O0k7SSxPLHlCLFU7RztHOzs7SyxPOzZCLE8sTyxlLE8sTztJO0ksbUI7Rzt1QixPLG1CO3lCLE8sTyxzQzs7SSxPO2E7YTtHO3FCLE8saUI7dUI7dUI7bUIsZ0I7eUIsa0I7eUIsa0I7O0k7SyxNO0k7SSx1QiwrQztJO0kscUMsOEI7STtvQix1RDtJO0c7d0IsdUI7O0k7OzsyQixpQixtQjtHOztJLDZCLGdCLG1CO0c7O0ksSSxnQztJO0ssd0M7STtJO0c7a0Isd0I7O3FCLG1CLG9CO0ksb0IsbUIsdUI7STtHOztJLHFDO0c7eUIsb0I7O0ksc0I7O2MsZTs7YyxPO2E7Rzs7SSw0QixPckI5SXJCcHFCO0c7Rzs4QiwwQjs7STtJLFU7STtJO0c7RztHO0c7RztHO3NCLE8sa0I7O0ksSSxROzs7OztLOztJO0c7RztHO0c7RztHOztJLFc7O0k7RztHO3VCLE8sYTtzQixrQjs7STtJO0k7Rzt5QixPLGE7O0ksSTs7Ozs7Szs7STtHO0c7RywrQjtnQyxrQyxTO0c7O0k7OztvQjs7TTtNOzs7OztJLE87RztxQiw4Qzt1Qiw4QztzQiw4QztHO0c7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R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7Ozs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7Ozs7Ozs7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7Ozs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7Ozs7Ozs7OzJCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs7Ozs7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7Ozs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7NEIwQnZHRVEsYTFCdUdGeG5DLFVBQUFnbkM7OzRCMEJ2R0VRLGExQnVHRnhuQyxVQUFBZ25DOzs0QjBCdkdFUSxhMUJ1R0Z4bkMsVUFBQWduQzs7Ozs7O09BQUEsTzBCeEZFUyx3QjFCd0ZGem5DLFVBQUFnbkM7OztJQUFBLE8wQmhGRVcsZ0IxQmdGRjNuQyxVQUFBZ25DO0dBOERtQjtZQTlEbkIrQztJQUFBOzs7O1FBZ0NFOztRQUNBOztRQUNBOztRQUNBOztRQUNBOztRQUNBOztRQUNBOztRQUNBOztRQUNBOztRQUNB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RTs7dUNBR1k7c0NBQUs7c0NBSjFCLG9CO3NDQUZMO3VDQURFdUY7d0QsT3hCNEhOM21COzJDQTlERkcsVXdCbEVTeWpCO3NDQWFMLE9BVEkrQztxQ0FTQzsyQkFBQTtpQkFBQTs7UUF1Qk0sSUFEREUsVUE3RE83MEQsTUE4RGIrcUQsT1IvSVI1TjtRUWlKSTtpQkFuSUZ5VzswQkFrSU8zRTtrQkFDTDsyQkE3SEY4RSxjQTRITzlFLE9BRks0RjtvQ0FHTHRyQjs0QkFDTCxJQUFJdXJCLGFBREN2ckI7NEJBRUwsV0FKSXdoQixNQURNOEosWUFJTkM7MkJBQ21EO2lCQUFBOztZQUN2Q0MsVUFuRUMvMEQsTUFtRVJnMUQsUUFuRVFoMUQsTUFtRWRrQixPQW5FY2xCO1FBdUVqQjtpQkExSUY0ekQ7MEJBeUlPM0U7a0JBQ0w7MkJBcElGOEUsY0FtSU85RSxPQUhGL3REO29DQUlFcW9DOzRCQUNMO3FDQW5LSjJwQjs7a0RBcUtnQzcwRDswQ0FDdEI7MkNBRWM7NENBRFIwekQsVUFGZ0IxekQsUUFQekI2Qzs0Q0FVUyt6RCxVSDdLZGhLLE1HbUtXK0osT0FTR2pEOzRDQUdBeG1ELHVCQVJQZytCLE1BTU8wckIsYUFBQUE7NENBSUo7O2dEN0JsSVYxcUIsWTZCZ0ljaC9CLEtBVFAwakQ7eURBV1F4bkQ7aURBQ0wsU0FES0E7c0RBR0d5RCxNQUhIekQ7a0RBSUQsb0JBTkE4RCxTQUtJTDtrREFDSjs7NkRBSkN6RDs2REFFUTtxREFLRmxNO2lEQUFNLFdBQU5BO2dEQUFZOzJDQVB2Qjs7c0RBUVE7eUNBQWU7eUNBdEJmdzVEOzhDQU1YRyxTQW1CTCxXQW5CS0EsU0FtQks7MkJBQUE7aUJBQUE7O0lBQUE7SUEvS0MsbUJBbUZiUjs7OEJBK0ZlO0d6RDJXakJwMkM7O0UiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEFycmF5XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfc3ViIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc3ViIChhLCBpLCBsZW4pIHtcbiAgdmFyIGEyID0gbmV3IEFycmF5KGxlbisxKTtcbiAgYTJbMF09MDtcbiAgZm9yKHZhciBpMiA9IDEsIGkxPSBpKzE7IGkyIDw9IGxlbjsgaTIrKyxpMSsrICl7XG4gICAgYTJbaTJdPWFbaTFdO1xuICB9XG4gIHJldHVybiBhMjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9hcHBlbmQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKSB7XG4gIHZhciBsMSA9IGExLmxlbmd0aCwgbDIgPSBhMi5sZW5ndGg7XG4gIHZhciBsID0gbDErbDItMVxuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgYVswXSA9IDA7XG4gIHZhciBpID0gMSxqID0gMTtcbiAgZm9yKDtpPGwxO2krKykgYVtpXT1hMVtpXTtcbiAgZm9yKDtpPGw7aSsrLGorKykgYVtpXT1hMltqXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfY29uY2F0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfY29uY2F0KGwpIHtcbiAgdmFyIGEgPSBbMF07XG4gIHdoaWxlIChsICE9PSAwKSB7XG4gICAgdmFyIGIgPSBsWzFdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYi5sZW5ndGg7IGkrKykgYS5wdXNoKGJbaV0pO1xuICAgIGwgPSBsWzJdO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYmxpdChhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIGlmIChpMiA8PSBpMSkge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IGxlbjsgaisrKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBqID0gbGVuOyBqID49IDE7IGotLSkgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+PSAxOyBqLS0pIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy8vLy8vLy8vLy8vLyBQZXJ2YXNpdmVcbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfc2V0IChtdXRhYmxlLCBjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc2V0IChhcnJheSwgaW5kZXgsIG5ld3ZhbCkge1xuICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGFycmF5W2luZGV4KzFdPW5ld3ZhbDsgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfZ2V0IG11dGFibGUgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcnJheVtpbmRleCsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KXtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICBhcnJheVtvZnMraSsxXSA9IHY7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2hlY2tfYm91bmQgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9jaGVja19ib3VuZCAoYXJyYXksIGluZGV4KSB7XG4gIGlmIChpbmRleCA+Pj4gMCA+PSBhcnJheS5sZW5ndGggLSAxKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX3ZlY3QgY29uc3QgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX3ZlY3QgKGxlbiwgaW5pdCkge1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IGluaXQ7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfZmxvYXRfdmVjdCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfZmxvYXRfdmVjdChsZW4pe1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MjU0O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gMDtcbiAgcmV0dXJuIGJcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9jcmVhdGUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2NyZWF0ZShsZW4pe1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MjU0O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gMDtcbiAgcmV0dXJuIGJcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEFuIE9DYW1sIHN0cmluZyBpcyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBmaWVsZHM6XG4vLyAtIHRhZyAndCdcbi8vIC0gbGVuZ3RoICdsJ1xuLy8gLSBjb250ZW50cyAnYydcbi8vXG4vLyBUaGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgSmF2YVNjcmlwdCBhcnJheSBvclxuLy8gYSBKYXZhU2NyaXB0IHN0cmluZy4gVGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZyBjYW4gYmUgbGVzcyB0aGFuIHRoZVxuLy8gbGVuZ3RoIG9mIHRoZSBPQ2FtbCBzdHJpbmcuIEluIHRoaXMgY2FzZSwgcmVtYWluaW5nIGJ5dGVzIGFyZVxuLy8gYXNzdW1lZCB0byBiZSB6ZXJvZXMuIEFycmF5cyBhcmUgbXV0YWJsZSBidXQgY29uc3VtZXMgbW9yZSBtZW1vcnlcbi8vIHRoYW4gc3RyaW5ncy4gQSBjb21tb24gcGF0dGVybiBpcyB0byBzdGFydCBmcm9tIGFuIGVtcHR5IHN0cmluZyBhbmRcbi8vIHByb2dyZXNzaXZlbHkgZmlsbCBpdCBmcm9tIHRoZSBzdGFydC4gUGFydGlhbCBzdHJpbmdzIG1ha2VzIGl0XG4vLyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBlZmZpY2llbnRseS5cbi8vXG4vLyBXaGVuIGNvbnZlcnRpbmcgdG8gYW5kIGZyb20gVVRGLTE2LCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlXG4vLyBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzIChpbiB3aGljaCBjYXNlLCBub1xuLy8gY29udmVyc2lvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQpIG9yIG5vdC5cbi8vXG4vLyBUaGUgc3RyaW5nIHRhZyBjYW4gdGh1cyB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy8gICBmdWxsIHN0cmluZyAgICAgQllURSB8IFVOS05PV046ICAgICAgMFxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IEFTQ0lJOiAgICAgICAgOVxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IE5PVF9BU0NJSTogICAgOFxuLy8gICBzdHJpbmcgcHJlZml4ICAgUEFSVElBTDogICAgICAgICAgICAgMlxuLy8gICBhcnJheSAgICAgICAgICAgQVJSQVk6ICAgICAgICAgICAgICAgNFxuLy9cbi8vIE9uZSBjYW4gdXNlIGJpdCBtYXNraW5nIHRvIGRpc2NyaW1pbmF0ZSB0aGVzZSBkaWZmZXJlbnQgY2FzZXM6XG4vLyAgIGtub3duX2VuY29kaW5nKHgpID0geCY4XG4vLyAgIGlzX2FzY2lpKHgpID0gICAgICAgeCYxXG4vLyAgIGtpbmQoeCkgPSAgICAgICAgICAgeCY2XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9zdHJfcmVwZWF0KG4sIHMpIHtcbiAgaWYobiA9PSAwKSByZXR1cm4gXCJcIjtcbiAgaWYgKHMucmVwZWF0KSB7cmV0dXJuIHMucmVwZWF0KG4pO30gLy8gRUNNQXNjcmlwdCA2IGFuZCBGaXJlZm94IDI0K1xuICB2YXIgciA9IFwiXCIsIGwgPSAwO1xuICBmb3IoOzspIHtcbiAgICBpZiAobiAmIDEpIHIgKz0gcztcbiAgICBuID4+PSAxO1xuICAgIGlmIChuID09IDApIHJldHVybiByO1xuICAgIHMgKz0gcztcbiAgICBsKys7XG4gICAgaWYgKGwgPT0gOSkge1xuICAgICAgcy5zbGljZSgwLDEpOyAvLyBmbGF0dGVuIHRoZSBzdHJpbmdcbiAgICAgIC8vIHRoZW4sIHRoZSBmbGF0dGVuaW5nIG9mIHRoZSB3aG9sZSBzdHJpbmcgd2lsbCBiZSBmYXN0ZXIsXG4gICAgICAvLyBhcyBpdCB3aWxsIGJlIGNvbXBvc2VkIG9mIGxhcmdlciBwaWVjZXNcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG4vL1dlYWtkZWZcbi8vIFByZSBFQ01BU2NyaXB0IDUsIFthcHBseV0gd291bGQgbm90IHN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3QuXG4vLyBJbiBzdWNoIHNldHVwLCBUeXBlZF9hcnJheSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBwb2x5ZmlsbCwgYW5kIFtmLmFwcGx5XSB3b3VsZFxuLy8gZmFpbCBoZXJlLiBNYXJrIHRoZSBwcmltaXRpdmUgYXMgV2Vha2RlZiwgc28gdGhhdCBwZW9wbGUgY2FuIG92ZXJyaWRlIGl0IGVhc2lseS5cbmZ1bmN0aW9uIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyAoYSwgaSwgbGVuKSB7XG4gIHZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgaWYgKGkgPT0gMCAmJiBsZW4gPD0gNDA5NiAmJiBsZW4gPT0gYS5sZW5ndGgpIHJldHVybiBmLmFwcGx5IChudWxsLCBhKTtcbiAgdmFyIHMgPSBcIlwiO1xuICBmb3IgKDsgMCA8IGxlbjsgaSArPSAxMDI0LGxlbi09MTAyNClcbiAgICBzICs9IGYuYXBwbHkgKG51bGwsIGEuc2xpY2UoaSxpICsgTWF0aC5taW4obGVuLCAxMDI0KSkpO1xuICByZXR1cm4gcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91dGY4X29mX3V0ZjE2XG5mdW5jdGlvbiBjYW1sX3V0Zjhfb2ZfdXRmMTYocykge1xuICBmb3IgKHZhciBiID0gXCJcIiwgdCA9IGIsIGMsIGQsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyAoaiA8IGwpICYmIChjID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGMwIHwgKGMgPj4gNikpO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPCAweGQ4MDAgfHwgYyA+PSAweGRmZmYpIHtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGUwIHwgKGMgPj4gMTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfSBlbHNlIGlmIChjID49IDB4ZGJmZiB8fCBpICsgMSA9PSBsIHx8XG4gICAgICAgICAgICAgICAoZCA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGQgPiAweGRmZmYpIHtcbiAgICAgIC8vIFVubWF0Y2hlZCBzdXJyb2dhdGUgcGFpciwgcmVwbGFjZWQgYnkgXFx1ZmZmZCAocmVwbGFjZW1lbnQgY2hhcmFjdGVyKVxuICAgICAgdCArPSBcIlxceGVmXFx4YmZcXHhiZFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjID0gKGMgPDwgMTApICsgZCAtIDB4MzVmZGMwMDtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGYwIHwgKGMgPj4gMTgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gMTIpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIGNhbWxfdXRmMTZfb2ZfdXRmOChzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gXCJcIiwgYywgYzEsIGMyLCB2LCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYzEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMxIDwgMHg4MCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyAoaiA8IGwpICYmIChjMSA9IHMuY2hhckNvZGVBdChqKSkgPCAweDgwOyBqKyspO1xuICAgICAgaWYgKGogLSBpID4gNTEyKSB7IHQuc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiOyBiICs9IHMuc2xpY2UoaSwgaikgfVxuICAgICAgZWxzZSB0ICs9IHMuc2xpY2UoaSwgaik7XG4gICAgICBpZiAoaiA9PSBsKSBicmVhaztcbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgICB2ID0gMTtcbiAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSkge1xuICAgICAgYyA9IGMyICsgKGMxIDw8IDYpO1xuICAgICAgaWYgKGMxIDwgMHhlMCkge1xuICAgICAgICB2ID0gYyAtIDB4MzA4MDtcbiAgICAgICAgaWYgKHYgPCAweDgwKSB2ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHYgPSAyO1xuICAgICAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSkge1xuICAgICAgICAgIGMgPSBjMiArIChjIDw8IDYpO1xuICAgICAgICAgIGlmIChjMSA8IDB4ZjApIHtcbiAgICAgICAgICAgIHYgPSBjIC0gMHhlMjA4MDtcbiAgICAgICAgICAgIGlmICgodiA8IDB4ODAwKSB8fCAoKHYgPj0gMHhkN2ZmKSAmJiAodiA8IDB4ZTAwMCkpKSB2ID0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdiA9IDM7XG4gICAgICAgICAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSAmJlxuICAgICAgICAgICAgICAgIChjMSA8IDB4ZjUpKSB7XG4gICAgICAgICAgICAgIHYgPSBjMiAtIDB4M2M4MjA4MCArIChjIDw8IDYpO1xuICAgICAgICAgICAgICBpZiAodiA8IDB4MTAwMDAgfHwgdiA+IDB4MTBmZmZmKSB2ID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHYgPCA0KSB7IC8vIEludmFsaWQgc2VxdWVuY2VcbiAgICAgIGkgLT0gdjtcbiAgICAgIHQgKz0gXCJcXHVmZmZkXCI7XG4gICAgfSBlbHNlIGlmICh2ID4gMHhmZmZmKVxuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZDdjMCArICh2ID4+IDEwKSwgMHhkYzAwICsgKHYgJiAweDNGRikpXG4gICAgZWxzZVxuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHYpO1xuICAgIGlmICh0Lmxlbmd0aCA+IDEwMjQpIHt0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjt9XG4gIH1cbiAgcmV0dXJuIGIrdDtcbn1cblxuLy9Qcm92aWRlczoganNvb19pc19hc2NpaVxuZnVuY3Rpb24ganNvb19pc19hc2NpaSAocykge1xuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGdldHMgYmV0dGVyIGF0IGFyb3VuZCB0aGlzIHBvaW50IGZvciBhbGwgYnJvd3NlcnNcbiAgaWYgKHMubGVuZ3RoIDwgMjQpIHtcbiAgICAvLyBTcGlkZXJtb25rZXkgZ2V0cyBtdWNoIHNsb3dlciB3aGVuIHMubGVuZ3RoID49IDI0IChvbiA2NCBiaXQgYXJjaHMpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBpZiAocy5jaGFyQ29kZUF0KGkpID4gMTI3KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZVxuICAgIHJldHVybiAhL1teXFx4MDAtXFx4N2ZdLy50ZXN0KHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICBkZWZhdWx0OiAvKiBQQVJUSUFMICovXG4gICAgaWYgKGkgPj0gcy5jLmxlbmd0aCkgcmV0dXJuIDA7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jLmNoYXJDb2RlQXQoaSk7XG4gIGNhc2UgNDogLyogQVJSQVkgKi9cbiAgICByZXR1cm4gcy5jW2ldXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSwgYykge1xuICAvLyBUaGUgT0NhbWwgY29tcGlsZXIgdXNlcyBDaGFyLnVuc2FmZV9jaHIgb24gaW50ZWdlcnMgbGFyZ2VyIHRoYW4gMjU1IVxuICBjICY9IDB4ZmY7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykge1xuICAgIGlmIChpID09IHMuYy5sZW5ndGgpIHtcbiAgICAgIHMuYyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgIGlmIChpICsgMSA9PSBzLmwpIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocyk7XG4gIH1cbiAgcy5jW2ldID0gYztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSAxKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQxNihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMSkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MzIocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDMpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSksXG4gICAgICBiMyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAyKSxcbiAgICAgIGI0ID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MzIocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMSksXG4gICAgICBiMyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCB8IGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSA3KSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKyl7XG4gICAgYVs3IC0gal0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQ2NChzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKyl7XG4gICAgYVs3IC0gal0gPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQgKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldCAocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDE2KHMsaSxpMTYpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMiA9IDB4RkYgJiBpMTYgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkxNjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0MTZcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQxNihzLGksaTE2KXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQzMihzLGksaTMyKXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjQgPSAweEZGICYgaTMyID4+IDI0LFxuICAgICAgYjMgPSAweEZGICYgaTMyID4+IDE2LFxuICAgICAgYjIgPSAweEZGICYgaTMyID4+IDgsXG4gICAgICBiMSA9IDB4RkYgJiBpMzI7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMSwgYjIpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAyLCBiMyk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDMsIGI0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQzMlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MzJcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDMyKHMsaSxpMzIpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQzMihzLGksaTMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDY0KHMsaSxpNjQpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gY2FtbF9pbnQ2NF90b19ieXRlcyhpNjQpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgNyAtIGosIGFbal0pO1xuICB9XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0NjRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQ2NChzLGksaTY0KXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGY4X29mX3V0ZjE2LCBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nIChzKSB7XG4gIHZhciB0YWcgPSA5IC8qIEJZVEVTIHwgQVNDSUkgKi87XG4gIGlmICghanNvb19pc19hc2NpaShzKSlcbiAgICB0YWcgPSA4IC8qIEJZVEVTIHwgTk9UX0FTQ0lJICovLCBzID0gY2FtbF91dGY4X29mX3V0ZjE2KHMpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXModGFnLCBzLCBzLmxlbmd0aCk7XG59XG5cblxuLy9Qcm92aWRlczogTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywganNvb19pc19hc2NpaSwgY2FtbF91dGYxNl9vZl91dGY4XG5mdW5jdGlvbiBNbEJ5dGVzICh0YWcsIGNvbnRlbnRzLCBsZW5ndGgpIHtcbiAgdGhpcy50PXRhZzsgdGhpcy5jPWNvbnRlbnRzOyB0aGlzLmw9bGVuZ3RoO1xufVxuTWxCeXRlcy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpe1xuICBzd2l0Y2ggKHRoaXMudCkge1xuICBjYXNlIDk6IC8qQllURVMgfCBBU0NJSSovXG4gICAgcmV0dXJuIHRoaXMuYztcbiAgZGVmYXVsdDpcbiAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHRoaXMpO1xuICBjYXNlIDA6IC8qQllURVMgfCBVTktPV04qL1xuICAgIGlmIChqc29vX2lzX2FzY2lpKHRoaXMuYykpIHtcbiAgICAgIHRoaXMudCA9IDk7IC8qQllURVMgfCBBU0NJSSovXG4gICAgICByZXR1cm4gdGhpcy5jO1xuICAgIH1cbiAgICB0aGlzLnQgPSA4OyAvKkJZVEVTIHwgTk9UX0FTQ0lJKi9cbiAgY2FzZSA4OiAvKkJZVEVTIHwgTk9UX0FTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICB9XG59O1xuTWxCeXRlcy5wcm90b3R5cGUudG9VdGYxNiA9IGZ1bmN0aW9uICgpe1xuICB2YXIgciA9IHRoaXMudG9TdHJpbmcoKTtcbiAgaWYodGhpcy50ID09IDkpIHJldHVybiByXG4gIHJldHVybiBjYW1sX3V0ZjE2X29mX3V0Zjgocik7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uICgpe1xuICB2YXIgY29udGVudCA9IHRoaXMudCA9PSA0ID8gdGhpcy5jLnNsaWNlKCkgOiB0aGlzLmM7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0aGlzLnQsY29udGVudCx0aGlzLmwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyAocykge1xuICAvKiBBc3N1bWVzIG5vdCBCWVRFUyAqL1xuICBpZiAocy50ID09IDIgLyogUEFSVElBTCAqLylcbiAgICBzLmMgKz0gY2FtbF9zdHJfcmVwZWF0KHMubCAtIHMuYy5sZW5ndGgsICdcXDAnKVxuICBlbHNlXG4gICAgcy5jID0gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChzLmMsIDAsIHMuYy5sZW5ndGgpO1xuICBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LT1dOKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkgKHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQVJSQVkgKi9cbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShzLmwpO1xuICB2YXIgYiA9IHMuYywgbCA9IGIubGVuZ3RoLCBpID0gMDtcbiAgZm9yICg7IGkgPCBsOyBpKyspIGFbaV0gPSBiLmNoYXJDb2RlQXQoaSk7XG4gIGZvciAobCA9IHMubDsgaSA8IGw7IGkrKykgYVtpXSA9IDA7XG4gIHMuYyA9IGE7XG4gIHMudCA9IDQ7IC8qIEFSUkFZICovXG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyAocykge1xuICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzKTtcbiAgcmV0dXJuIHMuYztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIChzKSB7XG4gIHZhciBsID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICB2YXIgYSA9IG5ldyBVaW50OEFycmF5KGwpO1xuICB2YXIgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgaWYobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCeXRlcy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsMCxhLmxlbmd0aCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5IChhKSB7XG4gIGlmKCEgKGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgIGEgPSBuZXcgVWludDhBcnJheShhKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sQnl0ZXMoNCxhLGEubGVuZ3RoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19jb21wYXJlIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfY29tcGFyZShzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDwgczIuYyk/LTE6KHMxLmMgPiBzMi5jKT8xOjA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2VxdWFsKHMxLCBzMikge1xuICBpZihzMSA9PT0gczIpIHJldHVybiAxO1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPT0gczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19lcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbm90ZXF1YWwoczEsIHMyKSB7IHJldHVybiAxLWNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMik7IH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX25vdGVxdWFsKHMxLCBzMikgeyByZXR1cm4gMS1jYW1sX2J5dGVzX2VxdWFsKHMxLCBzMik7IH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzZXF1YWwgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW4gbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19sZXNzdGhhbihzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDwgczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMyLHMxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMixzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ3JlYXRlcnRoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dyZWF0ZXJ0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzdGhhbihzMiwgczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbGxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyX3JlcGVhdCwgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG4vL0FsaWFzOiBjYW1sX2ZpbGxfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2ZpbGxfYnl0ZXMocywgaSwgbCwgYykge1xuICBpZiAobCA+IDApIHtcbiAgICBpZiAoaSA9PSAwICYmIChsID49IHMubCB8fCAocy50ID09IDIgLyogUEFSVElBTCAqLyAmJiBsID49IHMuYy5sZW5ndGgpKSkge1xuICAgICAgaWYgKGMgPT0gMCkge1xuICAgICAgICBzLmMgPSBcIlwiO1xuICAgICAgICBzLnQgPSAyOyAvKiBQQVJUSUFMICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzLmMgPSBjYW1sX3N0cl9yZXBlYXQgKGwsIFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgICAgICBzLnQgPSAobCA9PSBzLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gICAgICBmb3IgKGwgKz0gaTsgaSA8IGw7IGkrKykgcy5jW2ldID0gYztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzLCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmxpdF9ieXRlcyhzMSwgaTEsIHMyLCBpMiwgbGVuKSB7XG4gIGlmIChsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIGlmICgoaTIgPT0gMCkgJiZcbiAgICAgIChsZW4gPj0gczIubCB8fCAoczIudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbGVuID49IHMyLmMubGVuZ3RoKSkpIHtcbiAgICBzMi5jID0gKHMxLnQgPT0gNCAvKiBBUlJBWSAqLyk/XG4gICAgICBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbik6XG4gICAgICAoaTEgPT0gMCAmJiBzMS5jLmxlbmd0aCA9PSBsZW4pP3MxLmM6czEuYy5zdWJzdHIoaTEsIGxlbik7XG4gICAgczIudCA9IChzMi5jLmxlbmd0aCA9PSBzMi5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSBpZiAoczIudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgaTIgPT0gczIuYy5sZW5ndGgpIHtcbiAgICBzMi5jICs9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2Uge1xuICAgIGlmIChzMi50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzMik7XG4gICAgdmFyIGMxID0gczEuYywgYzIgPSBzMi5jO1xuICAgIGlmIChzMS50ID09IDQgLyogQVJSQVkgKi8pIHtcbiAgICAgIGlmIChpMiA8PSBpMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IGMxIFtpMSArIGldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSBjMiBbaTIgKyBpXSA9IGMxIFtpMSArIGldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbCA9IE1hdGgubWluIChsZW4sIGMxLmxlbmd0aCAtIGkxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSBjMiBbaTIgKyBpXSA9IGMxLmNoYXJDb2RlQXQoaTEgKyBpKTtcbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGMyIFtpMiArIGldID0gMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYmxpdF9zdHJpbmcoYSxiLGMsZCxlKSB7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhhKSxiLGMsZCxlKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19sZW5ndGggY29uc3RcbmZ1bmN0aW9uIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpIHsgcmV0dXJuIHMubCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbmNhdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb25jYXQoYSxiKSB7IHJldHVybiBhICsgYiB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbmNhdFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywgTWxCeXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29uY2F0KHMxLHMyKXtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHMxLnQsczEuYytzMi5jLHMxLmwrczIubClcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ191bnNhZmVfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIHMubGVuZ3RoXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmUgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8tMTooczEgPiBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPD0gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7XG4gIChzLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0Zjhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykge1xuICBpZihqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBzO1xuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocylcbiAgZWxzZSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3V0Zjhfb2ZfdXRmMTYocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7IHJldHVybiBuZXcgTWxCeXRlcygwLHMscy5sZW5ndGgpOyB9XG5cblxuLy8gVGhlIHNlY3Rpb24gYmVsb3cgc2hvdWxkIGJlIHVzZWQgd2hlbiB1c2UtanMtc3RyaW5nPWZhbHNlXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsaSxjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19lcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgeyByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIHMuYyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocyl7XG4gIHJldHVybiBzLnRvVXRmMTYoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfYnl0ZXMocykge1xuICByZXR1cm4gKHMgaW5zdGFuY2VvZiBNbEJ5dGVzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHMuY1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuICh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiAmJiAhL1teXFx4MDAtXFx4ZmZdLy50ZXN0KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfaXNfbWxfYnl0ZXMocyk7XG59XG5cbi8vIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGRlcHJlY2F0ZWRcblxuLy9Qcm92aWRlczogY2FtbF9qc190b19ieXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9qc190b19ieXRlX3N0cmluZyhzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX25ld19zdHJpbmcgKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF90b19qc19zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF90b19qc19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc190b19zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3RvX3N0cmluZyAocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX3N0cmluZyh4KSB7IHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyh4KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2ZfYnl0ZXMoeCkgeyByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyh4KSB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIFN5c1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvciAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5TeXNfZXJyb3IsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdCAoY29kZSkge1xuICBpZihnbG9iYWxUaGlzLnF1aXQpIGdsb2JhbFRoaXMucXVpdChjb2RlKTtcbiAgLy9ub2RlanNcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5leGl0KVxuICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5leGl0KGNvZGUpO1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJGdW5jdGlvbiAnZXhpdCcgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uKGV4bil7XG4gIHN3aXRjaChleG5bMl0pIHtcbiAgY2FzZSAtODogLy8gTWF0Y2hfZmFpbHVyZVxuICBjYXNlIC0xMTogLy8gQXNzZXJ0X2ZhaWx1cmVcbiAgY2FzZSAtMTI6IC8vIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG4gICAgcmV0dXJuIDE7XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9leGNlcHRpb24oZXhuKXtcbiAgdmFyIHIgPSBcIlwiO1xuICBpZihleG5bMF0gPT0gMCkge1xuICAgIHIgKz0gZXhuWzFdWzFdO1xuICAgIGlmKGV4bi5sZW5ndGggPT0gMyAmJiBleG5bMl1bMF0gPT0gMCAmJiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uKGV4blsxXSkpIHtcblxuICAgICAgdmFyIGJ1Y2tldCA9IGV4blsyXTtcbiAgICAgIHZhciBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IDJcbiAgICAgIHZhciBidWNrZXQgPSBleG47XG4gICAgfVxuICAgIHIgKz0gXCIoXCI7XG4gICAgZm9yKHZhciBpID0gc3RhcnQ7IGkgPCBidWNrZXQubGVuZ3RoOyBpICsrKXtcbiAgICAgIGlmKGkgPiBzdGFydCkgcis9XCIsIFwiO1xuICAgICAgdmFyIHYgPSBidWNrZXRbaV1cbiAgICAgIGlmKHR5cGVvZiB2ID09IFwibnVtYmVyXCIpXG4gICAgICAgIHIrPSB2LnRvU3RyaW5nKCk7XG4gICAgICBlbHNlIGlmKHYgaW5zdGFuY2VvZiBNbEJ5dGVzKXtcbiAgICAgICAgcis9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfVxuICAgICAgZWxzZSBpZih0eXBlb2YgdiA9PSBcInN0cmluZ1wiKXtcbiAgICAgICAgcis9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfVxuICAgICAgZWxzZSByICs9IFwiX1wiO1xuICAgIH1cbiAgICByICs9IFwiKVwiXG4gIH0gZWxzZSBpZiAoZXhuWzBdID09IDI0OCl7XG4gICAgciArPSBleG5bMV1cbiAgfVxuICByZXR1cm4gclxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9mb3JtYXRfZXhjZXB0aW9uLCBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihlcnIpe1xuICBpZihlcnIgaW5zdGFuY2VvZiBBcnJheSAmJiAoZXJyWzBdID09IDAgfHwgZXJyWzBdID09IDI0OCkpIHtcbiAgICB2YXIgaGFuZGxlciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCIpO1xuICAgIGlmKGhhbmRsZXIpIGNhbWxfY2FsbGJhY2soaGFuZGxlciwgW2VycixmYWxzZV0pO1xuICAgIGVsc2Uge1xuICAgICAgdmFyIG1zZyA9IGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgdmFyIGF0X2V4aXQgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIpO1xuICAgICAgaWYoYXRfZXhpdCkgY2FtbF9jYWxsYmFjayhhdF9leGl0LCBbMF0pO1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cpO1xuICAgICAgaWYoZXJyLmpzX2Vycm9yKSB0aHJvdyBlcnIuanNfZXJyb3I7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbmZ1bmN0aW9uIGNhbWxfc2V0X3N0YXRpY19lbnYoayx2KXtcbiAgaWYoIWdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52KVxuICAgIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52ID0ge31cbiAgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZba10gPSB2O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczoganNvb19zeXNfZ2V0ZW52IChjb25zdClcbmZ1bmN0aW9uIGpzb29fc3lzX2dldGVudihuKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICAvL25vZGVqcyBlbnZcbiAgaWYocHJvY2Vzc1xuICAgICAmJiBwcm9jZXNzLmVudlxuICAgICAmJiBwcm9jZXNzLmVudltuXSAhPSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W25dO1xuICBpZihnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudlxuICAgICAmJiBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltuXSlcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0ZW52IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29fc3lzX2dldGVudlxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYociA9PT0gdW5kZWZpbmVkKVxuICAgIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdW5zYWZlX2dldGVudlxuLy9SZXF1aXJlczogY2FtbF9zeXNfZ2V0ZW52XG5mdW5jdGlvbiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52KG5hbWUpe1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIGNhbWxfYXJndiA9ICgoZnVuY3Rpb24gKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgdmFyIG1haW4gPSBcImEub3V0XCI7XG4gIHZhciBhcmdzID0gW11cblxuICBpZihwcm9jZXNzXG4gICAgICYmIHByb2Nlc3MuYXJndlxuICAgICAmJiBwcm9jZXNzLmFyZ3YubGVuZ3RoID4gMSkge1xuICAgIHZhciBhcmd2ID0gcHJvY2Vzcy5hcmd2XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspXG4gICAgYXJnczIucHVzaChjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhhcmdzW2ldKSk7XG4gIHJldHVybiBhcmdzMjtcbn0pKCkpXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbnZhciBjYW1sX2V4ZWN1dGFibGVfbmFtZSA9IGNhbWxfYXJndlsxXVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfYXJndiAoYSkge1xuICByZXR1cm4gWzAsIGNhbWxfYXJndlsxXSwgY2FtbF9hcmd2XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19hcmd2IChhKSB7XG4gIHJldHVybiBjYW1sX2FyZ3Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21vZGlmeV9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX21vZGlmeV9hcmd2KGFyZyl7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShhKXtcbiAgcmV0dXJuIGNhbWxfZXhlY3V0YWJsZV9uYW1lXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgdmFyIGNtZCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGNtZCk7XG4gIGlmICh0eXBlb2YgcmVxdWlyZSAhPSBcInVuZGVmaW5lZFwiKXtcbiAgICB2YXIgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbiAgICBpZihjaGlsZF9wcm9jZXNzICYmIGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMpXG4gICAgICB0cnkge1xuICAgICAgICBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGNtZCx7c3RkaW86ICdpbmhlcml0J30pO1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICB9XG4gIGVsc2UgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZChjbWQpe1xuICByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lIG11dGFibGVcbnZhciBjYW1sX2luaXRpYWxfdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgKiAwLjAwMTtcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWUgKCkge1xuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgcmV0dXJuIG5vdyAqIDAuMDAxIC0gY2FtbF9pbml0aWFsX3RpbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlblxuLy9SZXF1aXJlczogY2FtbF9zeXNfdGltZVxuZnVuY3Rpb24gY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuKGIpIHtcbiAgcmV0dXJuIGNhbWxfc3lzX3RpbWUoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQgKCkge1xuICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8pIHtcbiAgICAgaWYgKGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgIHZhciBhID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBJbnQzMkFycmF5KDQpKTtcbiAgICAgICByZXR1cm4gWzAsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM11dO1xuICAgICB9IGVsc2UgaWYgKGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XG4gICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheShnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcygxNikuYnVmZmVyKTtcbiAgICAgICByZXR1cm4gWzAsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM11dO1xuICAgICB9XG4gIH1cbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHZhciB4ID0gbm93XjB4ZmZmZmZmZmYqTWF0aC5yYW5kb20oKTtcbiAgcmV0dXJuIFswLHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuICgpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplICgpIHsgcmV0dXJuIDMyOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSAoKSB7IHJldHVybiAoMHg3RkZGRkZGRi80KSB8IDA7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXggKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIlVuaXhcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiAoKSB7IHJldHVybiBvc190eXBlID09IFwiV2luMzJcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJDeWd3aW5cIiA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwianNfb2Zfb2NhbWxcIildO1xufVxuXG4vL1Byb3ZpZGVzOiBvc190eXBlXG52YXIgb3NfdHlwZSA9IChnbG9iYWxUaGlzLnByb2Nlc3MgJiZcbiAgICAgICAgICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSAmJlxuICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtID09IFwid2luMzJcIikgPyBcIkN5Z3dpblwiIDogXCJVbml4XCI7XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2NvbmZpZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2NvbmZpZyAoKSB7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhvc190eXBlKSwgMzIsIDBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzYXR0eShfY2hhbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3ZhcmlhbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV92YXJpYW50KF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3BhcmFtZXRlcnNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlcigpe3JldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MgKGJvb2wpIHtcbiAgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gYm9vbDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkIChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9ydW50aW1lX3dhcm5pbmdzO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfZW5hYmxlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZShfY2hhbm5lbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiU3BhY2V0aW1lIHByb2ZpbGluZyBvbmx5IHdvcmtzIGZvciBuYXRpdmUgY29kZVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF94ZGdfZGVmYXVsdHNcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX3hkZ19kZWZhdWx0cyhfdW5pdCkge1xuICByZXR1cm4gMDsgLy8gZW1wdHkgbGlzdFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGVcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGUobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuaXNGaWxlKHJvb3QucmVzdCk7XG59XG4vL0Fsd2F5c1xuLy9SZXF1aXJlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICBpZihwcm9jZXNzICYmIHByb2Nlc3Mub24pIHtcbiAgICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIGZ1bmN0aW9uIChlcnIsIG9yaWdpbikge1xuICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCAoMik7XG4gICAgfSlcbiAgfVxuICBlbHNlIGlmKGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7XG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgIGlmKGV2ZW50LmVycm9yKXtcbiAgICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXZlbnQuZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5jYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCk7XG5cblxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSBGTEFHKFwid2l0aC1qcy1lcnJvclwiKTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHIgPSBqc29vX3N5c19nZXRlbnYoXCJPQ0FNTFJVTlBBUkFNXCIpXG4gIGlmKHIgIT09IHVuZGVmaW5lZCl7XG4gICAgdmFyIGwgPSByLnNwbGl0KFwiLFwiKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKyl7XG4gICAgICBpZihsW2ldID09IFwiYlwiKSB7IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gMTsgYnJlYWsgfVxuICAgICAgZWxzZSBpZiAobFtpXS5zdGFydHNXaXRoKFwiYj1cIikpIHtcbiAgICAgICAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSArKGxbaV0uc2xpY2UoMikpfVxuICAgICAgZWxzZSBjb250aW51ZTtcbiAgICB9XG4gIH1cbn0pICgpXG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXNcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX2JhY2t0cmFjZV9zdGF0dXMgKF91bml0KSB7IHJldHVybiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfcmVjb3JkX2JhY2t0cmFjZSAoYikgeyBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IGI7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgKCkgeyByZXR1cm4gWzBdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbGVuZ3RoKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCgpIHsgcmV0dXJuIDAgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZV9zbG90OiBpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlKGV4biwgYnQpIHsgcmV0dXJuIDAgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrICgpIHsgcmV0dXJuIFswXTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90KCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogIWVmZmVjdHNcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIHZhciBuID0gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGQgPSBuIC0gYXJnc0xlbjtcbiAgaWYgKGQgPT0gMClcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgZyA9IGYuYXBwbHkobnVsbCxhcmdzLnNsaWNlKDAsbikpO1xuICAgIGlmKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBnO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsYXJncy5zbGljZShuKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgc3dpdGNoIChkKSB7XG4gICAgY2FzZSAxOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAxKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAyKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgdmFyIGV4dHJhX2FyZ3MgPSAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKT8xOmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzLmxlbmd0aCtleHRyYV9hcmdzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSBuYXJnc1thcmdzLmxlbmd0aCtpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgbmFyZ3MpXG4gICAgICB9O1xuICAgIH19XG4gICAgZy5sID0gZDtcbiAgICByZXR1cm4gZztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuIChjb25zdCwgc2hhbGxvdylcbi8vSWY6IGVmZmVjdHNcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIHZhciBuID0gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGQgPSBuIC0gYXJnc0xlbjtcbiAgaWYgKGQgPT0gMCkge1xuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9IGVsc2UgaWYgKGQgPCAwKSB7XG4gICAgdmFyIHJlc3QgPSBhcmdzLnNsaWNlKG4gLSAxKTtcbiAgICB2YXIgayA9IGFyZ3MgW2FyZ3NMZW4gLSAxXTtcbiAgICBhcmdzID0gYXJncy5zbGljZSgwLCBuKTtcbiAgICBhcmdzW24gLSAxXSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICBpZiAodHlwZW9mIGcgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGsoZyk7XG4gICAgICB2YXIgYXJncyA9IHJlc3Quc2xpY2UoKTtcbiAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGs7XG4gICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihnLCBhcmdzKTsgfTtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzTGVuLS07XG4gICAgdmFyIGsgPSBhcmdzIFthcmdzTGVuXTtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICBjYXNlIDE6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDI6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHksIHope1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDMpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAyXSA9IHo7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICgpe1xuICAgICAgICB2YXIgZXh0cmFfYXJncyA9IChhcmd1bWVudHMubGVuZ3RoID09IDApPzE6YXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyBleHRyYV9hcmdzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApXG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbiArIGldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICAgIH07XG4gICAgfX1cbiAgICBnLmwgPSBkICsgMTtcbiAgICByZXR1cm4gayhnKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlc1xudmFyIGNhbWxfbmFtZWRfdmFsdWVzID0ge307XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUgKGNvbnN0LG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZShubSx2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbnZhciBjYW1sX2dsb2JhbF9kYXRhID0gWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2J1aWxkX3N5bWJvbHNcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J1aWxkX3N5bWJvbHMoc3ltYikge1xuICB2YXIgciA9IHt9O1xuICBpZihzeW1iKSB7XG4gICAgZm9yKHZhciBpID0gMTsgaSA8IHN5bWIubGVuZ3RoOyBpKyspe1xuICAgICAgcltjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzeW1iW2ldWzFdKV0gPSBzeW1iW2ldWzJdXG4gICAgfVxuICB9XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAoY29uc3QsIHNoYWxsb3csIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9jYWxsYmFjaywgY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYgKG5hbWVfb3B0KSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lX29wdDtcbiAgICBpZihnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MpIHtcbiAgICAgIG4gPSBjYW1sX2NhbGxiYWNrKGdsb2JhbFRoaXMudG9wbGV2ZWxSZWxvYywgW25hbWVdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2FtbF9nbG9iYWxfZGF0YS5zeW1ib2xzKSB7XG4gICAgICBpZighY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHgpIHtcbiAgICAgICAgY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHggPSBjYW1sX2J1aWxkX3N5bWJvbHMoY2FtbF9nbG9iYWxfZGF0YS5zeW1ib2xzKVxuICAgICAgfVxuICAgICAgdmFyIG5pZCA9IGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4W25hbWVdXG4gICAgICBpZihuaWQgPj0gMClcbiAgICAgICAgbiA9IG5pZFxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3JlZ2lzdGVyX2dsb2JhbDogY2Fubm90IGxvY2F0ZSBcIiArIG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmKG5hbWVfb3B0KSBjYW1sX2dsb2JhbF9kYXRhW25hbWVfb3B0XSA9IHY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2dsb2JhbF9kYXRhIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZ2V0X2dsb2JhbF9kYXRhICgpIHsgcmV0dXJuIGNhbWxfZ2xvYmFsX2RhdGE7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykgeyByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9tYXliZV9wcmludF9zdGF0c1xuZnVuY3Rpb24gY2FtbF9tYXliZV9wcmludF9zdGF0cyh1bml0KSB7IHJldHVybiAwIH1cbiIsIi8vIEpzX29mX29jYW1sIGxpYnJhcnlcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBKc2xpYlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3B1cmVfZXhwciBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc19wdXJlX2V4cHIgKGYpIHsgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgWzBdKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3NldCAobXV0YWJsZSwgY29uc3QsIG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2pzX3NldChvLGYsdikgeyBvW2ZdPXY7cmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLGYpIHsgcmV0dXJuIG9bZl07IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZGVsZXRlIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZGVsZXRlKG8sZikgeyBkZWxldGUgb1tmXTsgcmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sYykgeyByZXR1cm4gKG8gaW5zdGFuY2VvZiBjKSA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmUocmVzKSB7XG4gIHZhciBjID0gMTtcbiAgd2hpbGUocmVzICYmIHJlcy5qb29fdHJhbXApe1xuICAgIHJlcyA9IHJlcy5qb29fdHJhbXAuYXBwbHkobnVsbCwgcmVzLmpvb19hcmdzKTtcbiAgICBjKys7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVfcmV0dXJuXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGYsYXJncykge1xuICByZXR1cm4ge2pvb190cmFtcDpmLGpvb19hcmdzOmFyZ3N9O1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfc3RhY2tfZGVwdGhcbi8vSWY6IGVmZmVjdHNcbnZhciBjYW1sX3N0YWNrX2RlcHRoID0gMDtcblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2NoZWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfc3RhY2tfZGVwdGhcbmZ1bmN0aW9uIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKSB7XG4gICAgcmV0dXJuIC0tY2FtbF9zdGFja19kZXB0aCA+IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6ICFlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfY2FsbF9nZW5cbnZhciBjYW1sX2NhbGxiYWNrID0gY2FtbF9jYWxsX2dlbjtcblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuLCBjYW1sX2V4bl9zdGFjaywgY2FtbF9maWJlcl9zdGFjaywgY2FtbF93cmFwX2V4Y2VwdGlvbiwgY2FtbF9yZXN1bWVfc3RhY2ssIGNhbWxfZnJlc2hfb29faWQsIGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnRcbmZ1bmN0aW9uIGNhbWxfY2FsbGJhY2soZixhcmdzKSB7XG4gIGZ1bmN0aW9uIHVuY2F1Z2h0X2VmZmVjdF9oYW5kbGVyKGVmZixrLG1zKSB7XG4gICAgLy8gUmVzdW1lcyB0aGUgY29udGludWF0aW9uIGsgYnkgcmFpc2luZyBleGNlcHRpb24gVW5oYW5kbGVkLlxuICAgIGNhbWxfcmVzdW1lX3N0YWNrKGtbMV0sbXMpO1xuICAgIHZhciBleG4gPSBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LlVuaGFuZGxlZFwiKTtcbiAgICBpZihleG4pIGNhbWxfcmFpc2Vfd2l0aF9hcmcoZXhuLCBlZmYpO1xuICAgIGVsc2Uge1xuICAgICAgZXhuID0gWzI0OCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiRWZmZWN0LlVuaGFuZGxlZFwiKSwgY2FtbF9mcmVzaF9vb19pZCgwKV07XG4gICAgICBjYW1sX3JhaXNlX2NvbnN0YW50KGV4bik7XG4gICAgfVxuICB9XG4gIHZhciBzYXZlZF9zdGFja19kZXB0aCA9IGNhbWxfc3RhY2tfZGVwdGg7XG4gIHZhciBzYXZlZF9leG5fc3RhY2sgPSBjYW1sX2V4bl9zdGFjaztcbiAgdmFyIHNhdmVkX2ZpYmVyX3N0YWNrID0gY2FtbF9maWJlcl9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2V4bl9zdGFjayA9IDA7XG4gICAgY2FtbF9maWJlcl9zdGFjayA9XG4gICAgICB7aDpbMCwgMCwgMCwgdW5jYXVnaHRfZWZmZWN0X2hhbmRsZXJdLCByOntrOjAsIHg6MCwgZTowfX07XG4gICAgdmFyIHJlcyA9IHtqb29fdHJhbXA6IGYsXG4gICAgICAgICAgICAgICBqb29fYXJnczogYXJncy5jb25jYXQoZnVuY3Rpb24gKHgpe3JldHVybiB4O30pfTtcbiAgICBkbyB7XG4gICAgICBjYW1sX3N0YWNrX2RlcHRoID0gNDA7XG4gICAgICB0cnkge1xuICAgICAgICByZXMgPSBjYW1sX2NhbGxfZ2VuKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfZXhuX3N0YWNrKSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfZXhuX3N0YWNrWzFdO1xuICAgICAgICBjYW1sX2V4bl9zdGFjayA9IGNhbWxfZXhuX3N0YWNrWzJdO1xuICAgICAgICByZXMgPSB7am9vX3RyYW1wOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgam9vX2FyZ3M6IFtjYW1sX3dyYXBfZXhjZXB0aW9uKGUpXX07XG4gICAgICB9XG4gICAgfSB3aGlsZShyZXMgJiYgcmVzLmpvb19hcmdzKVxuICB9IGZpbmFsbHkge1xuICAgIGNhbWxfc3RhY2tfZGVwdGggPSBzYXZlZF9zdGFja19kZXB0aDtcbiAgICBjYW1sX2V4bl9zdGFjayA9IHNhdmVkX2V4bl9zdGFjaztcbiAgICBjYW1sX2ZpYmVyX3N0YWNrID0gc2F2ZWRfZmliZXJfc3RhY2s7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZyh1bml0KXtcbiAgcmV0dXJuIEZMQUcoXCJ1c2UtanMtc3RyaW5nXCIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc19lZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfZWZmZWN0cyh1bml0KXtcbiAgcmV0dXJuIEZMQUcoXCJlZmZlY3RzXCIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd3JhcF9leGNlcHRpb24gY29uc3QgKG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLGNhbWxfbmFtZWRfdmFsdWVcbmZ1bmN0aW9uIGNhbWxfd3JhcF9leGNlcHRpb24oZSkge1xuICBpZiAoRkxBRyhcImV4Y3dyYXBcIikpIHtcbiAgICBpZihlIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiBlO1xuICAgIHZhciBleG47XG4gICAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgICBpZihnbG9iYWxUaGlzLlJhbmdlRXJyb3JcbiAgICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICAgJiYgZS5tZXNzYWdlXG4gICAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSkpXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgICBlbHNlIGlmKGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvclxuICAgICAgICYmIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkludGVybmFsRXJyb3JcbiAgICAgICAmJiBlLm1lc3NhZ2VcbiAgICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKSlcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICAgIGVsc2UgaWYoZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuRXJyb3IgJiYgY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIikpXG4gICAgICBleG4gPSBbMCxjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSxlXTtcbiAgICBlbHNlXG4gICAgICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgICAgIGV4biA9IFswLGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoU3RyaW5nKGUpKV07XG4gICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGVycm9yIGF0IGhhbmQsIGxldCdzIHVzZSBpdC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuRXJyb3IpXG4gICAgICBleG4uanNfZXJyb3IgPSBlO1xuICAgIHJldHVybiBleG47XG4gIH0gZWxzZVxuICAgIHJldHVybiBlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgaWYoY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcpXG4gICAgcmV0dXJuIGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlKGV4biwgZm9yY2UpO1xuICBlbHNlIHJldHVybiBleG5cbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZighZXhuLmpzX2Vycm9yIHx8IGZvcmNlIHx8IGV4blswXSA9PSAyNDgpIGV4bi5qc19lcnJvciA9IG5ldyBnbG9iYWxUaGlzLkVycm9yKFwiSnMgZXhjZXB0aW9uIGNvbnRhaW5pbmcgYmFja3RyYWNlXCIpO1xuICByZXR1cm4gZXhuO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZihleG4uanNfZXJyb3IpIHsgcmV0dXJuIFswLCBleG4uanNfZXJyb3JdOyB9XG4gIHJldHVybiAwO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Jvb2woeCkgeyByZXR1cm4gISF4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHsgcmV0dXJuICt4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fZmxvYXQgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc19mcm9tX2ludDMyXG4vL0FsaWFzOiBjYW1sX2pzX2Zyb21fbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19mbG9hdCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9faW50MzIgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc190b19uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfdG9faW50MzIoeCkgeyByZXR1cm4geHwwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGJbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGxlbjtpKyspIGJbaSsxXSA9IGFbaV07XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkoYSl7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBpPWEubGVuZ3RoIC0gMTsgaT49MDsgaS0tKXtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLGUsbF07XG4gIH1cbiAgcmV0dXJuIGxcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpe1xuICB2YXIgYSA9IFtdO1xuICBmb3IoOyBsICE9PSAwOyBsID0gbFsyXSkge1xuICAgIGEucHVzaChsWzFdKTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc192YXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdmFyKHgpIHtcbiAgdmFyIHggPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyh4KTtcbiAgLy9DaGVja3MgdGhhdCB4IGhhcyB0aGUgZm9ybSBpZGVudFsuaWRlbnRdKlxuICBpZigheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSl7XG4gICAgY29uc29sZS5lcnJvcihcImNhbWxfanNfdmFyOiBcXFwiXCIgKyB4ICsgXCJcXFwiIGlzIG5vdCBhIHZhbGlkIEphdmFTY3JpcHQgdmFyaWFibGUuIGNvbnRpbnVpbmcgLi5cIik7XG4gICAgLy9jb25zb2xlLmVycm9yKFwiSnMuVW5zYWZlLmV2YWxfc3RyaW5nXCIpXG4gIH1cbiAgcmV0dXJuIGV2YWwoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykgeyByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bl9jYWxsIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19mdW5fY2FsbChmLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gZigpO1xuICBjYXNlIDI6IHJldHVybiBmIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gZiAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX29qc19uZXdfYXJyIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9vanNfbmV3X2FycihjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAwOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjIChhWzBdKTtcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBhKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihsZW4gPiAwKXtcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gW3VuZGVmaW5lZF07XG4gICAgfVxuICAgIHZhciByZXMgPSBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICAgIHJldHVybiAocmVzIGluc3RhbmNlb2YgRnVuY3Rpb24pP2NhbWxfanNfd3JhcF9jYWxsYmFjayhyZXMpOnJlcztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5KTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZik7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpOyB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX3dyYXBfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZixhcmdzKTtcbiAgICByZXR1cm4gKHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKT9jYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKTpyZXM7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLFt0aGlzLGFyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QoYXJpdHksIGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcml0eSArIDEpO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoLCBhcml0eSlcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSAtIDE7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpOyB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbi8vSWY6ICFlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgcmV0dXJuIChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSB7XG4gIC8vIEZ1bmN0aW9ucyBoYXZlIGFuIGFkZGl0aW9uYWwgY29udGludWF0aW9uIHBhcmFtZXRlci4gVGhpcyBzaG91bGRcbiAgLy8gbm90IGJlIHZpc2libGUgd2hlbiBjYWxsaW5nIHRoZW0gZnJvbSBKYXZhU2NyaXB0XG4gIHJldHVybiAoKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKSkgLSAxXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXF1YWxzIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZXF1YWxzICh4LCB5KSB7IHJldHVybiArKHggPT0geSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zdHJpY3RfZXF1YWxzIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfc3RyaWN0X2VxdWFscyAoeCwgeSkgeyByZXR1cm4gKyh4ID09PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V2YWxfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V2YWxfc3RyaW5nIChzKSB7cmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19leHByIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V4cHIocykge1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcHVyZV9qc19leHByIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3B1cmVfanNfZXhwciAocyl7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX3B1cmVfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX29iamVjdCAob2JqZWN0X2xpdGVyYWwpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19vYmplY3QgKGEpIHtcbiAgdmFyIG8gPSB7fTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHAgPSBhW2ldO1xuICAgIG9bY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocFsxXSldID0gcFsyXTtcbiAgfVxuICByZXR1cm4gbztcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUmFpc2UgZXhjZXB0aW9uXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9jb25zdGFudCAodGFnKSB7IHRocm93IHRhZzsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnIChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBhcmcpIHsgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWcsIGFyZ10pOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzIChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZ3MgKHRhZywgYXJncykgeyB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoWzAsIHRhZ10uY29uY2F0KGFyZ3MpKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nICh0YWcsIG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aCAobXNnKSB7XG4gIGlmKCFjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlPVsyNDgsY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkZhaWx1cmVcIiksLTNdO1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSwgbXNnKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkludmFsaWRfYXJndW1lbnQsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRW5kX29mX2ZpbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkRpdmlzaW9uX2J5X3plcm8pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub3RfZm91bmQgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuTm90X2ZvdW5kKTsgfVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczoganNvb19mbG9vcl9sb2cyXG52YXIgbG9nMl9vayA9IE1hdGgubG9nMiAmJiBNYXRoLmxvZzIoMS4xMjM1NTgyMDkyODg5NDc0RSszMDcpID09IDEwMjBcbmZ1bmN0aW9uIGpzb29fZmxvb3JfbG9nMih4KSB7XG4gIGlmKGxvZzJfb2spIHJldHVybiBNYXRoLmZsb29yKE1hdGgubG9nMih4KSlcbiAgdmFyIGkgPSAwO1xuICBpZiAoeCA9PSAwKSByZXR1cm4gLUluZmluaXR5O1xuICBpZih4Pj0xKSB7d2hpbGUgKHg+PTIpIHt4Lz0yOyBpKyt9IH1cbiAgZWxzZSB7d2hpbGUgKHggPCAxKSB7eCo9MjsgaS0tfSB9O1xuICByZXR1cm4gaTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzIsIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXG5mdW5jdGlvbiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSlcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgxLCAwLCAweDdmZjApO1xuICAgIGlmICh4ID4gMClcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgwLCAwLCAweDdmZjApXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4ZmZmMClcbiAgfVxuICB2YXIgc2lnbiA9ICh4PT0wICYmIDEveCA9PSAtSW5maW5pdHkpPzB4ODAwMDooeD49MCk/MDoweDgwMDA7XG4gIGlmIChzaWduKSB4ID0gLXg7XG4gIC8vIEludDY0LmJpdHNfb2ZfZmxvYXQgMS4xMjM1NTgyMDkyODg5NDc0RSszMDcgPSAweDdmYjAwMDAwMDAwMDAwMDBMXG4gIC8vIHVzaW5nIE1hdGguTE9HMkUqTWF0aC5sb2coeCkgaW4gcGxhY2Ugb2YgTWF0aC5sb2cyIHJlc3VsdCBpbiBwcmVjaXNpb24gbG9zdFxuICB2YXIgZXhwID0ganNvb19mbG9vcl9sb2cyKHgpICsgMTAyMztcbiAgaWYgKGV4cCA8PSAwKSB7XG4gICAgZXhwID0gMDtcbiAgICB4IC89IE1hdGgucG93KDIsLTEwMjYpO1xuICB9IGVsc2Uge1xuICAgIHggLz0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gICAgaWYgKHggPCAxNikge1xuICAgICAgeCAqPSAyOyBleHAgLT0xOyB9XG4gICAgaWYgKGV4cCA9PSAwKSB7XG4gICAgICB4IC89IDI7IH1cbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsMjQpO1xuICB2YXIgcjMgPSB4fDA7XG4gIHggPSAoeCAtIHIzKSAqIGs7XG4gIHZhciByMiA9IHh8MDtcbiAgeCA9ICh4IC0gcjIpICogaztcbiAgdmFyIHIxID0geHwwO1xuICByMyA9IChyMyAmMHhmKSB8IHNpZ24gfCBleHAgPDwgNDtcbiAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKHIxLCByMiwgcjMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0ICh4KSB7XG4gIHZhciBmbG9hdDMyYSA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gIGZsb2F0MzJhWzBdID0geDtcbiAgdmFyIGludDMyYSA9IG5ldyBJbnQzMkFycmF5KGZsb2F0MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBpbnQzMmFbMF0gfCAwO1xufVxuXG4vL0ZQIGxpdGVyYWxzIGNhbiBiZSB3cml0dGVuIHVzaW5nIHRoZSBoZXhhZGVjaW1hbFxuLy9ub3RhdGlvbiAweDxtYW50aXNzYSBpbiBoZXg+cDxleHBvbmVudD4gZnJvbSBJU08gQzk5LlxuLy9odHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkvanMtaGV4ZmxvYXQvYmxvYi9tYXN0ZXIvaGV4ZmxvYXQuanNcbi8vUHJvdmlkZXM6IGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCAoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSkgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKFwibmFuXCIpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoKHggPiAwKT9cImluZmluaXR5XCI6XCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8xOih4Pj0wKT8wOjE7XG4gIGlmKHNpZ24pIHggPSAteDtcbiAgdmFyIGV4cCA9IDA7XG4gIGlmICh4ID09IDApIHsgfVxuICBlbHNlIGlmICh4IDwgMSkge1xuICAgIHdoaWxlICh4IDwgMSAmJiBleHAgPiAtMTAyMikgIHsgeCAqPSAyOyBleHAtLSB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikgeyB4IC89IDI7IGV4cCsrIH1cbiAgfVxuICB2YXIgZXhwX3NpZ24gPSBleHAgPCAwID8gJycgOiAnKyc7XG4gIHZhciBzaWduX3N0ciA9ICcnO1xuICBpZiAoc2lnbikgc2lnbl9zdHIgPSAnLSdcbiAgZWxzZSB7XG4gICAgc3dpdGNoKHN0eWxlKXtcbiAgICBjYXNlIDQzIC8qICcrJyAqLzogc2lnbl9zdHIgPSAnKyc7IGJyZWFrO1xuICAgIGNhc2UgMzIgLyogJyAnICovOiBzaWduX3N0ciA9ICcgJzsgYnJlYWs7XG4gICAgZGVmYXVsdDogYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwcmVjID49IDAgJiYgcHJlYyA8IDEzKSB7XG4gICAgLyogSWYgYSBwcmVjaXNpb24gaXMgZ2l2ZW4sIGFuZCBpcyBzbWFsbCwgcm91bmQgbWFudGlzc2EgYWNjb3JkaW5nbHkgKi9cbiAgICB2YXIgY3N0ID0gTWF0aC5wb3coMixwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmKHByZWMgPj0gMCl7XG4gICAgdmFyIGlkeCA9IHhfc3RyLmluZGV4T2YoJy4nKTtcbiAgICBpZihpZHg8MCkge1xuICAgICAgeF9zdHIgKz0gJy4nICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsICcwJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHgrMStwcmVjO1xuICAgICAgaWYoeF9zdHIubGVuZ3RoIDwgc2l6ZSlcbiAgICAgICAgeF9zdHIgKz0gY2FtbF9zdHJfcmVwZWF0KHNpemUgLSB4X3N0ci5sZW5ndGgsICcwJyk7XG4gICAgICBlbHNlXG4gICAgICAgIHhfc3RyID0geF9zdHIuc3Vic3RyKDAsc2l6ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoc2lnbl9zdHIgKyAnMHgnICsgeF9zdHIgKyAncCcgKyBleHBfc2lnbiArIGV4cC50b1N0cmluZygxMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgbG8gPSB4LmxvO1xuICB2YXIgbWkgPSB4Lm1pO1xuICB2YXIgaGkgPSB4LmhpO1xuICB2YXIgZXhwID0gKGhpICYgMHg3ZmZmKSA+PiA0O1xuICBpZiAoZXhwID09IDIwNDcpIHtcbiAgICBpZiAoKGxvfG1pfChoaSYweGYpKSA9PSAwKVxuICAgICAgcmV0dXJuIChoaSAmIDB4ODAwMCk/KC1JbmZpbml0eSk6SW5maW5pdHk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsLTI0KTtcbiAgdmFyIHJlcyA9IChsbyprK21pKSprKyhoaSYweGYpO1xuICBpZiAoZXhwID4gMCkge1xuICAgIHJlcyArPSAxNjtcbiAgICByZXMgKj0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gIH0gZWxzZVxuICAgIHJlcyAqPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgaWYgKGhpICYgMHg4MDAwKSByZXMgPSAtIHJlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9zdWIsY2FtbF9pbnQ2NF9vZl9pbnQzMlxuZnVuY3Rpb24gY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgKHgseSkge1xuICBpZihpc05hTih4KSB8fCBpc05hTih5KSkgcmV0dXJuIE5hTjtcbiAgaWYoeD09eSkgcmV0dXJuIHk7XG4gIGlmKHg9PTApe1xuICAgIGlmKHkgPCAwKVxuICAgICAgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpXG4gIH1cbiAgdmFyIGJpdHMgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoeCk7XG4gIHZhciBvbmUgPSBjYW1sX2ludDY0X29mX2ludDMyKDEpO1xuICBpZiAoKHg8eSkgPT0gKHg+MCkpXG4gICAgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSlcbiAgZWxzZVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X3N1YihiaXRzLCBvbmUpXG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCl7XG4gIHJldHVybiBNYXRoLnRydW5jKHgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgaW50MzJhID0gbmV3IEludDMyQXJyYXkoMSk7XG4gIGludDMyYVswXSA9IHg7XG4gIHZhciBmbG9hdDMyYSA9IG5ldyBGbG9hdDMyQXJyYXkoaW50MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBmbG9hdDMyYVswXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jbGFzc2lmeV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jbGFzc2lmeV9mbG9hdCAoeCkge1xuICBpZiAoaXNGaW5pdGUgKHgpKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpID49IDIuMjI1MDczODU4NTA3MjAxNGUtMzA4KSByZXR1cm4gMDtcbiAgICBpZiAoeCAhPSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuICByZXR1cm4gaXNOYU4oeCk/NDozO1xufVxuLy9Qcm92aWRlczogY2FtbF9tb2RmX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX21vZGZfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIHZhciBuZWcgPSAoMS94KSA8IDA7XG4gICAgeCA9IE1hdGguYWJzKHgpO1xuICAgIHZhciBpID0gTWF0aC5mbG9vciAoeCk7XG4gICAgdmFyIGYgPSB4IC0gaTtcbiAgICBpZiAobmVnKSB7IGkgPSAtaTsgZiA9IC1mOyB9XG4gICAgcmV0dXJuIFswLCBmLCBpXTtcbiAgfVxuICBpZiAoaXNOYU4gKHgpKSByZXR1cm4gWzAsIE5hTiwgTmFOXTtcbiAgcmV0dXJuIFswLCAxL3gsIHhdO1xufVxuLy9Qcm92aWRlczogY2FtbF9sZGV4cF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sZGV4cF9mbG9hdCAoeCxleHApIHtcbiAgZXhwIHw9IDA7XG4gIGlmIChleHAgPiAxMDIzKSB7XG4gICAgZXhwIC09IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICBpZiAoZXhwID4gMTAyMykgeyAgLy8gaW4gY2FzZSB4IGlzIHN1Ym5vcm1hbFxuICAgICAgZXhwIC09IDEwMjM7XG4gICAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIH1cbiAgfVxuICBpZiAoZXhwIDwgLTEwMjMpIHtcbiAgICBleHAgKz0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIC0xMDIzKTtcbiAgfVxuICB4ICo9IE1hdGgucG93KDIsIGV4cCk7XG4gIHJldHVybiB4O1xufVxuLy9Qcm92aWRlczogY2FtbF9mcmV4cF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ZyZXhwX2Zsb2F0ICh4KSB7XG4gIGlmICgoeCA9PSAwKSB8fCAhaXNGaW5pdGUoeCkpIHJldHVybiBbMCwgeCwgMF07XG4gIHZhciBuZWcgPSB4IDwgMDtcbiAgaWYgKG5lZykgeCA9IC0geDtcbiAgdmFyIGV4cCA9IE1hdGgubWF4KC0xMDIzLCBqc29vX2Zsb29yX2xvZzIoeCkgKyAxKTtcbiAgeCAqPSBNYXRoLnBvdygyLC1leHApO1xuICB3aGlsZSAoeCA8IDAuNSkge1xuICAgIHggKj0gMjtcbiAgICBleHAtLTtcbiAgfVxuICB3aGlsZSAoeCA+PSAxKSB7XG4gICAgeCAqPSAwLjU7XG4gICAgZXhwKys7XG4gIH1cbiAgaWYgKG5lZykgeCA9IC0geDtcbiAgcmV0dXJuIFswLCB4LCBleHBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfY29tcGFyZSAoeCwgeSkge1xuICBpZiAoeCA9PT0geSkgcmV0dXJuIDA7XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xO1xuICBpZiAoeCA+IHkpIHJldHVybiAxO1xuICBpZiAoeCA9PT0geCkgcmV0dXJuIDE7XG4gIGlmICh5ID09PSB5KSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvcHlzaWduX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvcHlzaWduX2Zsb2F0ICh4LCB5KSB7XG4gIGlmICh5ID09IDApIHkgPSAxIC8geTtcbiAgeCA9IE1hdGguYWJzKHgpO1xuICByZXR1cm4gKHkgPCAwKT8oLXgpOng7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2lnbmJpdF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaWduYml0X2Zsb2F0KHgpIHtcbiAgaWYgKHggPT0gMCkgeCA9IDEgLyB4O1xuICByZXR1cm4gKHggPCAwKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhwbTFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwbTFfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguZXhwbTEoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZXhwMl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHAyX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgucG93KDIsIHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzFwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzFwX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgubG9nMXAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cyX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgubG9nMih4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9oeXBvdF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9oeXBvdF9mbG9hdCAoeCwgeSkgeyByZXR1cm4gTWF0aC5oeXBvdCh4LCB5KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxMF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxMF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5sb2cxMCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9jb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Nvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguY29zaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hY29zaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hY29zaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9zaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3NpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguc2luaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hc2luaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hc2luaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF90YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3RhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgudGFuaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hdGFuaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hdGFuaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9yb3VuZF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9yb3VuZF9mbG9hdCAoeCkge1xuICBpZiAoeCA+PSAwKSB7XG4gICAgdmFyIHkgPSBNYXRoLmZsb29yKHgpO1xuICAgIHJldHVybiAoeCAtIHkgPj0gMC41KT8oeSArIDEpOnlcbiAgfSBlbHNlIHtcbiAgICB2YXIgeSA9IE1hdGguY2VpbCh4KTtcbiAgICByZXR1cm4gKHkgLSB4ID49IDAuNSk/KHkgLSAxKTp5XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNicnQoeCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9IDEuMCAtICgoKChhNSAqIHQgKyBhNCkgKiB0ICsgYTMpICogdCArIGEyKSAqIHQgKyBhMSkgKiB0ICogTWF0aC5leHAoLXggKiB4KTtcblxuICByZXR1cm4gc2lnbiAqIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmY19mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9lcmZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfZXJmY19mbG9hdCh4KSB7XG4gIHJldHVybiAxIC0gY2FtbF9lcmZfZmxvYXQoeCk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5IChhLCBiKSB7XG4gICAgdmFyIGF0ID0gU1BMSVQgKiBhO1xuICAgIHZhciBhaGkgPSBhdCAtIChhdCAtIGEpO1xuICAgIHZhciBhbG8gPSBhIC0gYWhpO1xuICAgIHZhciBidCA9IFNQTElUICogYjtcbiAgICB2YXIgYmhpID0gYnQgLSAoYnQgLSBiKTtcbiAgICB2YXIgYmxvID0gYiAtIGJoaTtcbiAgICB2YXIgcCA9IGEgKiBiO1xuICAgIHZhciBlID0gKChhaGkgKiBiaGkgLSBwKSArIGFoaSAqIGJsbyArIGFsbyAqIGJoaSkgKyBhbG8gKiBibG87XG4gICAgcmV0dXJuIHtcbiAgICAgIHA6IHAsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSAoYSAtIChzIC0gdikpICsgKGIgLSB2KTtcbiAgICByZXR1cm4ge1xuICAgICAgczogcyxcbiAgICAgIGU6IGVcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkanVzdCAoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4ID8geCAqICgxICsgKHggPCAwID8gLTEgOiArMSkgKiAoeSA8IDAgPyAtMSA6ICsxKSAqIEVQU0lMT04pIDogeDtcbiAgfTtcblxuICBpZiAoeCA9PT0gMCB8fCB4ICE9PSB4IHx8IHggPT09ICsxIC8gMCB8fCB4ID09PSAtMSAvIDAgfHxcbiAgICAgIHkgPT09IDAgfHwgeSAhPT0geSB8fCB5ID09PSArMSAvIDAgfHwgeSA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICsgejtcbiAgfVxuICBpZiAoeiA9PT0gMCkge1xuICAgIHJldHVybiB4ICogeTtcbiAgfVxuICBpZiAoeiAhPT0geiB8fCB6ID09PSArMSAvIDAgfHwgeiA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiBNYXRoLmFicyh4cyAqIHlzKSAqIDQgLyBFUFNJTE9OKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cbiAgaWYgKE1hdGguYWJzKHpzKSA8IE1hdGguYWJzKHhzICogeXMpICogRVBTSUxPTiAvIDQgKiBFUFNJTE9OIC8gNCkge1xuICAgIHpzID0gKHogPCAwID8gLTEgOiArMSkgKiBNSU5fVkFMVUU7XG4gIH1cblxuICB2YXIgeHkgPSBtdWx0aXBseSh4cywgeXMpO1xuICB2YXIgcyA9IGFkZCh4eS5wLCB6cyk7XG4gIHZhciB1ID0gYWRkKHh5LmUsIHMuZSk7XG4gIHZhciBpID0gYWRkKHMucywgdS5zKTtcblxuICB2YXIgZiA9IGkucyArIGFkanVzdChpLmUsIHUuZSk7XG4gIGlmIChmID09PSAwKSB7XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICB2YXIgZnMgPSBmICogc2NhbGU7XG4gIGlmIChNYXRoLmFicyhmcykgPiBNSU5fVkFMVUUpIHtcbiAgICByZXR1cm4gZnM7XG4gIH1cblxuICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdhcyBleHRyYSByb3VuZGluZyBmb3IgYSBkZW5vcm1hbGl6ZWQgdmFsdWUuXG4gIHJldHVybiBmcyArIGFkanVzdChmIC0gZnMgLyBzY2FsZSwgaS5lKSAqIHNjYWxlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2Zsb2F0IChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LGRwKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpIDwgMS4wKSB7XG4gICAgICByZXR1cm4geC50b0ZpeGVkKGRwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGUgPSBwYXJzZUludCh4LnRvU3RyaW5nKCkuc3BsaXQoJysnKVsxXSk7XG4gICAgICBpZiAoZSA+IDIwKSB7XG4gICAgICAgIGUgLT0gMjA7XG4gICAgICAgIHggLz0gTWF0aC5wb3coMTAsZSk7XG4gICAgICAgIHggKz0gKG5ldyBBcnJheShlKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIGlmKGRwID4gMCkge1xuICAgICAgICAgIHggPSB4ICsgJy4nICsgKG5ldyBBcnJheShkcCsxKSkuam9pbignMCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgICAgZWxzZSByZXR1cm4geC50b0ZpeGVkKGRwKVxuICAgIH1cbiAgfVxuICB2YXIgcywgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIHZhciBwcmVjID0gKGYucHJlYyA8IDApPzY6Zi5wcmVjO1xuICBpZiAoeCA8IDAgfHwgKHggPT0gMCAmJiAxL3ggPT0gLUluZmluaXR5KSkgeyBmLnNpZ24gPSAtMTsgeCA9IC14OyB9XG4gIGlmIChpc05hTih4KSkgeyBzID0gXCJuYW5cIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZSBpZiAoIWlzRmluaXRlKHgpKSB7IHMgPSBcImluZlwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlXG4gICAgc3dpdGNoIChmLmNvbnYpIHtcbiAgICBjYXNlICdlJzpcbiAgICAgIHZhciBzID0geC50b0V4cG9uZW50aWFsKHByZWMpO1xuICAgICAgLy8gZXhwb25lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IHR3byBkaWdpdHNcbiAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2YnOlxuICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7IGJyZWFrO1xuICAgIGNhc2UgJ2cnOlxuICAgICAgcHJlYyA9IHByZWM/cHJlYzoxO1xuICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICB2YXIgaiA9IHMuaW5kZXhPZignZScpO1xuICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgIGlmIChleHAgPCAtNCB8fCB4ID49IDFlMjEgfHwgeC50b0ZpeGVkKDApLmxlbmd0aCA+IHByZWMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICB2YXIgaSA9IGogLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgaSA9IHMubGVuZ3RoO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgaWYgKGV4cCA8IDApIHsgcCAtPSBleHAgKyAxOyBzID0geC50b0ZpeGVkKHApOyB9XG4gICAgICAgIGVsc2Ugd2hpbGUgKHMgPSB4LnRvRml4ZWQocCksIHMubGVuZ3RoID4gcHJlYyArIDEpIHAtLTtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgICAgdmFyIGkgPSBzLmxlbmd0aCAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpXG4gIHJlcyA9ICtzO1xuICBpZiAoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLFwiXCIpO1xuICByZXMgPSArcztcbiAgaWYgKCgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSB8fCAvXlsrLV0/bmFuJC9pLnRlc3QocykpIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8vaS5leGVjKHMpO1xuICAvLyAgICAgICAgICAxICAgICAgICAyICAgICAgICAgICAgIDMgICAgICAgICAgIDVcbiAgaWYobSl7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCcnKTtcbiAgICB2YXIgbWFudGlzc2EgPSBwYXJzZUludChtWzFdICsgbVsyXSArIG0zLCAxNik7XG4gICAgdmFyIGV4cG9uZW50ID0gKG1bNV18MCkgLSA0Km0zLmxlbmd0aDtcbiAgICByZXMgPSBtYW50aXNzYSAqIE1hdGgucG93KDIsIGV4cG9uZW50KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmKC9eXFwrP2luZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBJbmZpbml0eTtcbiAgaWYoL14taW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIC1JbmZpbml0eTtcbiAgY2FtbF9mYWlsd2l0aChcImZsb2F0X29mX3N0cmluZ1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdXBkYXRlX2R1bW15XG5mdW5jdGlvbiBjYW1sX3VwZGF0ZV9kdW1teSAoeCwgeSkge1xuICBpZiggeS5mdW4gKSB7IHguZnVuID0geS5mdW47IHJldHVybiAwOyB9XG4gIGlmKCB0eXBlb2YgeT09PVwiZnVuY3Rpb25cIiApIHsgeC5mdW4gPSB5OyByZXR1cm4gMDsgfVxuICB2YXIgaSA9IHkubGVuZ3RoOyB3aGlsZSAoaS0tKSB4W2ldID0geVtpXTsgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYWxsb2NfZHVtbXlfaW5maXhcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfYWxsb2NfZHVtbXlfaW5maXggKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZiAoeCkgeyByZXR1cm4gY2FtbF9jYWxsX2dlbihmLmZ1biwgW3hdKSB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX2Jsb2NrIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX2Jsb2NrICh4KSB7IHJldHVybiArKHggaW5zdGFuY2VvZiBBcnJheSk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial90YWdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX29ial90YWcgKHgpIHtcbiAgaWYgKCh4IGluc3RhbmNlb2YgQXJyYXkpICYmIHhbMF0gPT0gKHhbMF0gPj4+IDApKVxuICAgIHJldHVybiB4WzBdXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh4KSlcbiAgICByZXR1cm4gMjUyXG4gIGVsc2UgaWYgKCh4IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8IHR5cGVvZiB4ID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gMjQ3XG4gIGVsc2UgaWYgKHggJiYgeC5jYW1sX2N1c3RvbSlcbiAgICByZXR1cm4gMjU1XG4gIGVsc2VcbiAgICByZXR1cm4gMTAwMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfdGFnIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF90YWcgKHgsIHRhZykgeyB4WzBdID0gdGFnOyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9vYmpfYmxvY2sgY29uc3QgKGNvbnN0LGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfYmxvY2sgKHRhZywgc2l6ZSkge1xuICB2YXIgbyA9IG5ldyBBcnJheShzaXplKzEpO1xuICBvWzBdPXRhZztcbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gc2l6ZTsgaSsrKSBvW2ldID0gMDtcbiAgcmV0dXJuIG87XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3dpdGhfdGFnXG5mdW5jdGlvbiBjYW1sX29ial93aXRoX3RhZyh0YWcseCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgYVswXSA9IHRhZztcbiAgZm9yKHZhciBpID0gMTsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfZHVwIG11dGFibGUgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX29ial9kdXAgKHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUgKHgsIHMpIHtcbiAgaWYgKHM8PTAgfHwgcyArIDEgPiB4Lmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiT2JqLnRydW5jYXRlXCIpO1xuICBpZiAoeC5sZW5ndGggIT0gcyArIDEpIHgubGVuZ3RoID0gcyArIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9tYWtlX2ZvcndhcmRcbmZ1bmN0aW9uIGNhbWxfb2JqX21ha2VfZm9yd2FyZCAoYix2KSB7XG4gIGJbMF09MjUwO1xuICBiWzFdPXY7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2NvbXBhcmVfYW5kX3N3YXBcbmZ1bmN0aW9uIGNhbWxfb2JqX2NvbXBhcmVfYW5kX3N3YXAoeCxpLG9sZCxuKXtcbiAgaWYoeFtpKzFdID09IG9sZCkge1xuICAgIHhbaSsxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfaXNfc2hhcmVkXG5mdW5jdGlvbiBjYW1sX29ial9pc19zaGFyZWQoeCl7XG4gIHJldHVybiAxXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkICh2KSB7IHJldHVybiBbMjUwLCB2XTsgfVxuXG4vLy8vLy8vLy8vLy8vIENhbWxpbnRlcm5hbE9PXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIGNvbnN0XG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAob2ZzID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycmF5IGlzIG5vdCBzcGFyc2VcbiAgICBmb3IgKHZhciBpID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoOyBpIDwgY2FjaGVpZDsgaSsrKVxuICAgICAgY2FtbF9tZXRob2RfY2FjaGVbaV0gPSAwO1xuICB9IGVsc2UgaWYgKG1ldGhzW29mc10gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgLSAxXTtcbiAgfVxuICB2YXIgbGkgPSAzLCBoaSA9IG1ldGhzWzFdICogMiArIDEsIG1pO1xuICB3aGlsZSAobGkgPCBoaSkge1xuICAgIG1pID0gKChsaStoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSsxXSkgaGkgPSBtaS0yO1xuICAgIGVsc2UgbGkgPSBtaTtcbiAgfVxuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IGxpICsgMTtcbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gKHRhZyA9PSBtZXRoc1tsaSsxXSA/IG1ldGhzW2xpXSA6IDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29vX2xhc3RfaWRcbnZhciBjYW1sX29vX2xhc3RfaWQgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9vb19pZFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX3NldF9vb19pZCAoYikge1xuICBiWzJdPWNhbWxfb29fbGFzdF9pZCsrO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mcmVzaF9vb19pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX2ZyZXNoX29vX2lkKCkge1xuICByZXR1cm4gY2FtbF9vb19sYXN0X2lkKys7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfcmF3X2ZpZWxkKG8saSkgeyByZXR1cm4gb1tpKzFdIH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3Jhd19maWVsZChvLGksdikgeyByZXR1cm4gb1tpKzFdID0gdiB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKG8pIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfYWRkX29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9vYmpfYWRkX29mZnNldCh2LG9mZnNldCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiT2JqLmFkZF9vZmZzZXQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdXBkYXRlX3RhZyhiLG8sbikge1xuICAgIGlmKGJbMF09PW8pIHsgYlswXSA9IG47IHJldHVybiAxIH1cbiAgICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmdcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZyhvKSB7XG4gIGlmICgobyBpbnN0YW5jZW9mIEFycmF5KSAmJiBvWzBdID09IChvWzBdID4+PiAwKSAmJlxuICAgICAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLCAyNDYsIDI0NCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcndhcmRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbiAgZnVuY3Rpb24gY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkKG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLDI0NCwyNTApO1xuICByZXR1cm4gMDsgLy8gdW5pdFxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9yZXNldF90b19sYXp5XG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eShvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywyNDQsMjQ2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9yZWFkX3Jlc3VsdFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfcmVhZF9yZXN1bHQobykge1xuICByZXR1cm4gKGNhbWxfb2JqX3RhZyhvKSA9PSAyNTApP29bMV06bztcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPCA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0KSB7XG4gIHJldHVybiAodCA9PSAyNDUpID8gMSA6IDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZmZzZXRcbnZhciBjYW1sX2ludDY0X29mZnNldCA9IE1hdGgucG93KDIsIC0yNCk7XG5cbi8vUHJvdmlkZXM6IE1sSW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBNbEludDY0IChsbyxtaSxoaSkge1xuICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgdGhpcy5taSA9IG1pICYgMHhmZmZmZmY7XG4gIHRoaXMuaGkgPSBoaSAmIDB4ZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gXCJfalwiXG5NbEludDY0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyx0aGlzLm1pLHRoaXMuaGkpO1xufVxuXG5NbEludDY0LnByb3RvdHlwZS51Y29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIGlmICh0aGlzLmhpID4geC5oaSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmhpIDwgeC5oaSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubG8gPiB4LmxvKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBoaSA9IHRoaXMuaGkgPDwgMTY7XG4gIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICBpZiAoaGkgPiB4aGkpIHJldHVybiAxO1xuICBpZiAoaGkgPCB4aGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxvID0gLSB0aGlzLmxvO1xuICB2YXIgbWkgPSAtIHRoaXMubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSAtIHRoaXMuaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSArIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpICsgeC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gLSB4LmxvO1xuICB2YXIgbWkgPSB0aGlzLm1pIC0geC5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyAqIHgubG87XG4gIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gIHZhciBoaSA9ICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMuaGkgKiB4LmxvICsgdGhpcy5taSAqIHgubWkgKyB0aGlzLmxvICogeC5oaTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMubG98dGhpcy5taXx0aGlzLmhpKSA9PSAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy5oaSA8PCAxNikgPCAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gJiB4LmxvLCB0aGlzLm1pICYgeC5taSwgdGhpcy5oaSAmIHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb3x4LmxvLCB0aGlzLm1pfHgubWksIHRoaXMuaGl8eC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb154LmxvLCB0aGlzLm1pXngubWksIHRoaXMuaGleeC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9sZWZ0ID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMubG8gPDwgcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IHMpIHwgKHRoaXMubG8gPj4gKDI0IC0gcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaGkgPDwgcykgfCAodGhpcy5taSA+PiAoMjQgLSBzKSkpO1xuICB9XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IChzIC0gMjQpKSB8ICh0aGlzLmxvID4+ICg0OCAtIHMpKSk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCgwLCAwLCB0aGlzLmxvIDw8IChzIC0gNDgpKVxufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHRfdW5zaWduZWQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8ICh0aGlzLmhpIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IHMpKTtcbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubWkgPj4gKHMgLSAyNCkpIHwgKHRoaXMuaGkgPDwgKDQ4IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPj4gKHMgLSAyNCkpLFxuICAgICAgMCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAodGhpcy5oaSA+PiAocyAtIDQ4KSwgMCwgMCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9yaWdodCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICB2YXIgaCA9ICh0aGlzLmhpIDw8IDE2KSA+PiAxNjtcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICgodGhpcy5oaSA8PCAxNikgPj4gcykgPj4+IDE2KTtcbiAgdmFyIHNpZ24gPSAodGhpcy5oaSA8PCAxNikgPj4gMzE7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSA+PiAxNixcbiAgICAgIHNpZ24gJiAweGZmZmYpO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDMyKSwgc2lnbiwgc2lnbik7XG59XG5NbEludDY0LnByb3RvdHlwZS5sc2wxID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPDwgMSkgfCAodGhpcy5sbyA+PiAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubG8gPSAodGhpcy5sbyA8PCAxKSAmIDB4ZmZmZmZmO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNyMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPj4+IDEpIHwgKHRoaXMuaGkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gdGhpcy5oaSA+Pj4gMTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnVkaXZtb2QgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgb2Zmc2V0ID0gMDtcbiAgdmFyIG1vZHVsdXMgPSB0aGlzLmNvcHkoKTtcbiAgdmFyIGRpdmlzb3IgPSB4LmNvcHkoKTtcbiAgdmFyIHF1b3RpZW50ID0gbmV3IE1sSW50NjQoMCwwLDApO1xuICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICBvZmZzZXQrKztcbiAgICBkaXZpc29yLmxzbDEoKTtcbiAgfVxuICB3aGlsZSAob2Zmc2V0ID49IDApIHtcbiAgICBvZmZzZXQgLS07XG4gICAgcXVvdGllbnQubHNsMSgpO1xuICAgIGlmIChtb2R1bHVzLnVjb21wYXJlKGRpdmlzb3IpID49IDApIHtcbiAgICAgIHF1b3RpZW50LmxvICsrO1xuICAgICAgbW9kdWx1cyA9IG1vZHVsdXMuc3ViKGRpdmlzb3IpO1xuICAgIH1cbiAgICBkaXZpc29yLmxzcjEoKTtcbiAgfVxuICByZXR1cm4geyBxdW90aWVudCA6IHF1b3RpZW50LCBtb2R1bHVzIDogbW9kdWx1cyB9O1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gKHkpXG57XG4gIHZhciB4ID0gdGhpcztcbiAgaWYgKHkuaXNaZXJvKCkpIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHZhciBzaWduID0geC5oaSBeIHkuaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgcSA9IHgudWRpdm1vZCh5KS5xdW90aWVudDtcbiAgaWYgKHNpZ24gJiAweDgwMDApIHEgPSBxLm5lZygpO1xuICByZXR1cm4gcTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm1vZCA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgciA9IHgudWRpdm1vZCh5KS5tb2R1bHVzO1xuICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gIHJldHVybiByO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxvIHwgKHRoaXMubWkgPDwgMjQpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9GbG9hdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgodGhpcy5oaSA8PCAxNikgKiBNYXRoLnBvdygyLCAzMikgKyB0aGlzLm1pICogTWF0aC5wb3coMiwgMjQpKSArIHRoaXMubG87XG59XG5NbEludDY0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW3RoaXMuaGkgPj4gOCxcbiAgICAgICAgICB0aGlzLmhpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pID4+IDE2LFxuICAgICAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvID4+IDE2LFxuICAgICAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvICYgMHhmZl07XG59XG5NbEludDY0LnByb3RvdHlwZS5sbzMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICgodGhpcy5taSAmIDB4ZmYpIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmhpMzIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMubWkgPj4+IDgpICYgMHhmZmZmKSB8ICh0aGlzLmhpIDw8IDE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgseSkgeyByZXR1cm4geC51Y29tcGFyZSh5KSA8IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NvbXBhcmUoeCx5LCB0b3RhbCkgeyByZXR1cm4geC5jb21wYXJlKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnICh4KSB7IHJldHVybiB4Lm5lZygpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hZGQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYWRkICh4LCB5KSB7IHJldHVybiB4LmFkZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc3ViIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3N1YiAoeCwgeSkgeyByZXR1cm4geC5zdWIoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgseSkgeyByZXR1cm4geC5tdWwoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7IHJldHVybiAreC5pc1plcm8oKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpIHsgcmV0dXJuICt4LmlzTmVnKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hbmQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYW5kICh4LCB5KSB7IHJldHVybiB4LmFuZCh5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29yICh4LCB5KSB7IHJldHVybiB4Lm9yKHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfeG9yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3hvciAoeCwgeSkgeyByZXR1cm4geC54b3IoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9sZWZ0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYgKHgsIHkpIHsgcmV0dXJuIHguZGl2KHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tb2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbW9kICh4LCB5KSB7IHJldHVybiB4Lm1vZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfaW50MzIgKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19pbnQzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMiAoeCkgeyByZXR1cm4geC50b0ludCgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19mbG9hdCAoeCkgeyByZXR1cm4geC50b0Zsb2F0ICgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mb3JtYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF90b19pbnQzMlxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc196ZXJvLCBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZm9ybWF0IChmbXQsIHgpIHtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoZi5zaWduZWRjb252ICYmIGNhbWxfaW50NjRfaXNfbmVnYXRpdmUoeCkpIHtcbiAgICBmLnNpZ24gPSAtMTsgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghIGNhbWxfaW50NjRfaXNfemVybyh4KSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gYnVmZmVyLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIGJ1ZmZlciA9IGNhbWxfc3RyX3JlcGVhdCAobiwgJzAnKSArIGJ1ZmZlcjtcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBidWZmZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3BhcnNlX2RpZ2l0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3VsdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfbXVsLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2Zfc3RyaW5nKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGJhc2U2NCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoYmFzZSk7XG4gIHZhciB0aHJlc2hvbGQgPVxuICAgICAgbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmZiwgMHhmZmZmKS51ZGl2bW9kKGJhc2U2NCkucXVvdGllbnQ7XG4gIHZhciBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gIGZvciAoOzspIHtcbiAgICBpKys7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT0gOTUpIGNvbnRpbnVlO1xuICAgIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICAgIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGJyZWFrO1xuICAgIC8qIERldGVjdCBvdmVyZmxvdyBpbiBtdWx0aXBsaWNhdGlvbiBiYXNlICogcmVzICovXG4gICAgaWYgKGNhbWxfaW50NjRfdWx0KHRocmVzaG9sZCwgcmVzKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gICAgZCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gICAgcmVzID0gY2FtbF9pbnQ2NF9hZGQoY2FtbF9pbnQ2NF9tdWwoYmFzZTY0LCByZXMpLCBkKTtcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gYWRkaXRpb24gKGJhc2UgKiByZXMpICsgZCAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdChyZXMsIGQpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoYmFzZSA9PSAxMCAmJiBjYW1sX2ludDY0X3VsdChuZXcgTWxJbnQ2NCgwLCAwLCAweDgwMDApLCByZXMpKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobG8sIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICBsbyAmIDB4ZmZmZmZmLFxuICAgICgobG8gPj4+IDI0KSAmIDB4ZmYpIHwgKChoaSAmIDB4ZmZmZikgPDwgOCksXG4gICAgKGhpID4+PiAxNikgJiAweGZmZmYpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9sbzMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2xvMzIodil7IHJldHVybiB2LmxvMzIoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGkzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oaTMyKHYpeyByZXR1cm4gdi5oaTMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGFbN10gPDwgMCB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVs0XSA8PCAwIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgICAgICAgICAgICAgICAgICBhWzFdIDw8IDAgfCAoYVswXSA8PCA4KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2J5dGVzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2J5dGVzKHgpIHsgcmV0dXJuIHgudG9BcnJheSgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9oYXNoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2hhc2godil7XG4gIHJldHVybiAodi5sbzMyKCkpIF4gKHYuaGkzMigpKVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmQsIEFuZHkgUmF5XG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG4vL1xuLy8gQmlnYXJyYXkuXG4vL1xuLy8gLSBhbGwgYmlnYXJyYXkgdHlwZXMgaW5jbHVkaW5nIEludDY0IGFuZCBDb21wbGV4LlxuLy8gLSBmb3J0cmFuICsgYyBsYXlvdXRzXG4vLyAtIHN1Yi9zbGljZS9yZXNoYXBlXG4vLyAtIHJldGFpbiBmYXN0IHBhdGggZm9yIDFkIGFycmF5IGFjY2Vzc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2luaXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYmFfaW5pdCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSB7XG4gIHZhciBuX2RpbXMgPSBkaW1zLmxlbmd0aDtcbiAgdmFyIHNpemUgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5fZGltczsgaSsrKSB7XG4gICAgaWYgKGRpbXNbaV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgc2l6ZSA9IHNpemUgKiBkaW1zW2ldO1xuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpe1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgNzogY2FzZSAxMDogY2FzZSAxMTogcmV0dXJuIDI7XG4gIGRlZmF1bHQ6IHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSl7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMDogIHZpZXcgPSBGbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDE6ICB2aWV3ID0gRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAyOiAgdmlldyA9IEludDhBcnJheTsgYnJlYWs7XG4gIGNhc2UgMzogIHZpZXcgPSBVaW50OEFycmF5OyBicmVhaztcbiAgY2FzZSA0OiAgdmlldyA9IEludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDU6ICB2aWV3ID0gVWludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDY6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgNzogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA4OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDk6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTA6IHZpZXcgPSBGbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDExOiB2aWV3ID0gRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAxMjogdmlldyA9IFVpbnQ4QXJyYXk7IGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPCA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycmF5XCJcblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA+PSA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycjAyXCJcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG5mdW5jdGlvbiBNbF9CaWdhcnJheSAoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcblxuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IGNhbWxfYmFfY3VzdG9tX25hbWU7XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHZhciBvZnMgPSAwO1xuICBpZih0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgaWYgKCEgKGFyZyBpbnN0YW5jZW9mIEFycmF5KSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiYmlnYXJyYXkuanM6IGludmFsaWQgb2Zmc2V0XCIpO1xuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBhcmcubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgaWYodGhpcy5sYXlvdXQgPT0gMCAvKiBjX2xheW91dCAqLykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMCB8fCBhcmdbaV0gPj0gdGhpcy5kaW1zW2ldKVxuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIGFyZ1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuZGltcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGFyZ1tpXSA8IDEgfHwgYXJnW2ldID4gdGhpcy5kaW1zW2ldKXtcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgfVxuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyAoYXJnW2ldIC0gMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvZnM7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgbCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGggPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLGgpO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIHIgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gWzI1NCwgciwgaV07XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdXG4gIH1cbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IHZbMV07XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IHZbMl07XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwXG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGEgPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgaWYoYSA9PSBiKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGEgOiBiO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciBpbSA9IHZbMV07XG4gICAgdmFyIHJlID0gdlsyXTtcbiAgICBpZihpbSA9PSByZSl7XG4gICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gaW0gOiByZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhLmZpbGwodik7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIChiLCB0b3RhbCkge1xuICBpZiAodGhpcy5sYXlvdXQgIT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9IGIua2luZCkge1xuICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICB2YXIgazIgPSAgICBiLmtpbmQgfCAoYi5sYXlvdXQgPDwgOCk7XG4gICAgcmV0dXJuIGsyIC0gazE7XG4gIH1cbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYi5kaW1zLmxlbmd0aCkge1xuICAgIHJldHVybiBiLmRpbXMubGVuZ3RoIC0gdGhpcy5kaW1zLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAodGhpcy5kaW1zW2ldICE9IGIuZGltc1tpXSlcbiAgICAgIHJldHVybiAodGhpcy5kaW1zW2ldIDwgYi5kaW1zW2ldKSA/IC0xIDogMTtcbiAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gIGNhc2UgMTA6XG4gIGNhc2UgMTE6XG4gICAgLy8gRmxvYXRzXG4gICAgdmFyIHgsIHk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHggPSB0aGlzLmRhdGFbaV07XG4gICAgICB5ID0gYi5kYXRhW2ldO1xuICAgICAgaWYgKHggPCB5KVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoeCA+IHkpXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKHggIT0geSkge1xuICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICBpZiAoeCA9PSB4KSByZXR1cm4gMTtcbiAgICAgICAgaWYgKHkgPT0geSkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKz0yKSB7XG4gICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA8IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPiBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPCAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApID4gKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAyOlxuICBjYXNlIDM6XG4gIGNhc2UgNDpcbiAgY2FzZSA1OlxuICBjYXNlIDY6XG4gIGNhc2UgODpcbiAgY2FzZSA5OlxuICBjYXNlIDEyOlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldIDwgYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5X2NfMV8xXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgICA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlID0gbmV3IE1sX0JpZ2FycmF5KClcbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIGlmKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpe1xuICAgIGlmKChhcmcgaW5zdGFuY2VvZiBBcnJheSkgJiYgYXJnLmxlbmd0aCA9PSAxKVxuICAgICAgYXJnID0gYXJnWzBdO1xuICAgIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiTWxfQmlnYXJyYXlfY18xXzEub2Zmc2V0XCIpO1xuICB9XG4gIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pXG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJnO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICByZXR1cm4gdGhpcy5kYXRhW29mc107XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgdGhpcy5kYXRhW29mc10gPSB2O1xuICByZXR1cm4gMFxufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHRoaXMuZGF0YS5maWxsKHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLGIsdG90YWwpe1xuICByZXR1cm4gYS5jb21wYXJlKGIsdG90YWwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIE1sX0JpZ2FycmF5X2NfMV8xLCBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpe1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmKGNhbWxfYmFfZ2V0X3NpemUoZGltcykgKiBzaXplX3Blcl9lbGVtZW50ICE9IGRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwibGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggZGltc1wiKTtcbiAgfVxuICBpZihsYXlvdXQgPT0gMCAmJiAvLyBjX2xheW91dFxuICAgICBkaW1zLmxlbmd0aCA9PSAxICYmIC8vIEFycmF5MVxuICAgICBzaXplX3Blcl9lbGVtZW50ID09IDEpIC8vIDEtdG8tMSBtYXBwaW5nXG4gICAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5KGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG5cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGUoa2luZCwgbGF5b3V0LCBkaW1zX21sKSB7XG4gIHZhciBkaW1zID0gY2FtbF9qc19mcm9tX2FycmF5KGRpbXNfbWwpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBjYW1sX2JhX2dldF9zaXplKGRpbXMpKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NoYW5nZV9sYXlvdXRcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9jaGFuZ2VfbGF5b3V0KGJhLCBsYXlvdXQpIHtcbiAgaWYoYmEubGF5b3V0ID09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2JhLmRpbXMubGVuZ3RoIC0gaSAtIDFdO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGxheW91dCwgbmV3X2RpbXMsIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZChiYSkge1xuICByZXR1cm4gYmEua2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9sYXlvdXRcbmZ1bmN0aW9uIGNhbWxfYmFfbGF5b3V0KGJhKSB7XG4gIHJldHVybiBiYS5sYXlvdXQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbnVtX2RpbXNcbmZ1bmN0aW9uIGNhbWxfYmFfbnVtX2RpbXMoYmEpIHtcbiAgcmV0dXJuIGJhLmRpbXMubGVuZ3RoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2RpbShiYSwgaSkge1xuICBpZiAoaSA8IDAgfHwgaSA+PSBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5kaW1cIik7XG4gIHJldHVybiBiYS5kaW1zW2ldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMShiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8yXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMihiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8zXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMyhiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X2dlbmVyaWMoYmEsIGkpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpO1xuICByZXR1cm4gYmEuZ2V0KG9mcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MTYoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiAoYjEgfCAoYjIgPDwgOCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDMyKGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICByZXR1cm4gKCAoYjEgPDwgMCkgIHxcbiAgICAgICAgICAgKGIyIDw8IDgpICB8XG4gICAgICAgICAgIChiMyA8PCAxNikgfFxuICAgICAgICAgICAoYjQgPDwgMjQpICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0NjQoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHZhciBiNSA9IGJhLmdldChvZnMrNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMrNSk7XG4gIHZhciBiNyA9IGJhLmdldChvZnMrNik7XG4gIHZhciBiOCA9IGJhLmdldChvZnMrNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCxiNyxiNixiNSxiNCxiMyxiMixiMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8xKGJhLCBpMCkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChpMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8yXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8yKGJhLCBpMCwgaTEpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8zXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8zKGJhLCBpMCwgaTEsIGkyKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX3NldF9nZW5lcmljKGJhLCBpLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MTYoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDMyKGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMiwgKHYgPj4+IDE2KSAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzMsICh2ID4+PiAyNCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0NjQoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciB2ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcytpLCB2WzctaV0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8xXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8xKGJhLCBpMCwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGkwKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMV0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzMoYmEsIGkwLCBpMSwgaTIsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9IHNyYy5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZHN0LmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKGRzdC5kaW1zW2ldICE9IHNyYy5kaW1zW2ldKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBkc3QuZGF0YS5zZXQoc3JjLmRhdGEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zdWJcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3N1YihiYSwgb2ZzLCBsZW4pIHtcbiAgdmFyIGNoYW5nZWRfZGltO1xuICB2YXIgbXVsID0gMTtcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAoYmEuZGltcy5sZW5ndGggLSAxKTsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IGJhLmRpbXMubGVuZ3RoIC0gMTtcbiAgICBvZnMgPSBvZnMgLSAxO1xuICB9XG4gIGlmIChvZnMgPCAwIHx8IGxlbiA8IDAgfHwgKG9mcyArIGxlbikgPiBiYS5kaW1zW2NoYW5nZWRfZGltXSl7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc3ViOiBiYWQgc3ViLWFycmF5XCIpO1xuICB9XG4gIHZhciBuZXdfZGltcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2ldO1xuICBuZXdfZGltc1tjaGFuZ2VkX2RpbV0gPSBsZW47XG4gIG11bCAqPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIG11bCwgKG9mcyArIGxlbikgKiBtdWwpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zbGljZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zbGljZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbnVtX2luZHMgPSB2aW5kLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gW107XG4gIHZhciBzdWJfZGltcyA9IFtdO1xuICB2YXIgb2ZzO1xuXG4gIGlmIChudW1faW5kcyA+IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnNsaWNlOiB0b28gbWFueSBpbmRpY2VzXCIpO1xuXG4gIC8vIENvbXB1dGUgb2Zmc2V0IGFuZCBjaGVjayBib3VuZHNcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSB2aW5kW2ldO1xuICAgIGZvciAoOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMDtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UobnVtX2luZHMpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2JhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMgKyBpXSA9IHZpbmRbaV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBzaXplX3Blcl9lbGVtZW50LCAob2ZzICsgc2l6ZSkgKiBzaXplX3Blcl9lbGVtZW50KTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIHN1Yl9kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfcmVzaGFwZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuZnVuY3Rpb24gY2FtbF9iYV9yZXNoYXBlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBuZXdfZGltID0gW107XG4gIHZhciBudW1fZGltcyA9IHZpbmQubGVuZ3RoO1xuXG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICB9XG4gIHZhciBudW1fZWx0cyA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgIG5ld19kaW1baV0gPSB2aW5kW2ldO1xuICAgIGlmIChuZXdfZGltW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBudW1fZWx0cyA9IG51bV9lbHRzICogbmV3X2RpbVtpXTtcbiAgfVxuXG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgLy8gQ2hlY2sgdGhhdCBzaXplcyBhZ3JlZVxuICBpZiAobnVtX2VsdHMgIT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgKGJhLmtpbmQgfCAoYmEubGF5b3V0IDw8IDgpKSk7XG4gIGlmKGJhLmNhbWxfY3VzdG9tID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKGJhLmRpbXNbaV0gPCAweGZmZmYpXG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGltc1tpXSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCAweGZmZmYpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIDApO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB3cml0ZXIud3JpdGUoMzIsYmEuZGltc1tpXSlcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgd3JpdGVyLndyaXRlKDgsMCk7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoYmEuZ2V0KGkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGogPSBiYS5nZXQoaSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzJdKSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGNvbXBsZXggPSBiYS5nZXQoaSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMV0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzJdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgbmFtZSl7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmXG4gIHZhciBsYXlvdXQgPSAodGFnID4+IDgpICYgMTtcbiAgdmFyIGRpbXMgPSBbXVxuICBpZihuYW1lID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZV9kaW0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgaWYoc2l6ZV9kaW0gPT0gMHhmZmZmKXtcbiAgICAgICAgdmFyIHNpemVfZGltX2hpID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgdmFyIHNpemVfZGltX2xvID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgaWYoc2l6ZV9kaW1faGkgIT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSBkaW1zLnB1c2gocmVhZGVyLnJlYWQzMnUoKSk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSk7XG4gIHZhciBiYSA9IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHZhciBzaXh0eSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICBpZihzaXh0eSkgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjYW5ub3QgcmVhZCBiaWdhcnJheSB3aXRoIDY0LWJpdCBPQ2FtbCBpbnRzXCIpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW50NjQgPSBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xuICAgICAgYmEuc2V0KGksaW50NjQpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVha1xuICB9XG4gIHN6WzBdID0gKDQgKyBudW1fZGltcykgKiA0O1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vRGVwcmVjYXRlZFxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfZnJvbVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2Zyb20oZGF0YTEsIGRhdGEyLCBqc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKXtcbiAgaWYoZGF0YTIgfHwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSA9PSAyKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiKTtcbiAgfVxuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YTEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2hhc2ggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX2hhc2goYmEpe1xuICB2YXIgbnVtX2VsdHMgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICB2YXIgaCA9IDA7XG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMjU2KSBudW1fZWx0cyA9IDI1NjtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgNCA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9NCl7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCA4KSB8IChiYS5kYXRhW2krMl0gPDwgMTYpIHwgKGJhLmRhdGFbaSszXSA8PCAyNCk7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgdyA9IDA7XG4gICAgc3dpdGNoIChudW1fZWx0cyAmIDMpIHtcbiAgICBjYXNlIDM6IHcgID0gYmEuZGF0YVtpKzJdIDw8IDE2OyAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMjogdyB8PSBiYS5kYXRhW2krMV0gPDwgODsgICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAxOiB3IHw9IGJhLmRhdGFbaSswXTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDIgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTIpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgMTYpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPSAwKVxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIG51bV9lbHRzICo9IDJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYmEpe1xuICByZXR1cm4gYmEuZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGtpbmQ7XG4gIGlmICAgICAgKHRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSBraW5kID0gMDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpIGtpbmQgPSAxO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDhBcnJheSkga2luZCA9IDI7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDhBcnJheSkga2luZCA9IDM7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDE2QXJyYXkpIGtpbmQgPSA0O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSBraW5kID0gNTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQzMkFycmF5KSBraW5kID0gNjtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5OiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICByZXR1cm4ga2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZCA9IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSk7XG4gIHZhciB0YSA9XG4gICAgICAvKiBOZWVkZWQgdG8gYXZvaWQgdW5zaWduZWQgc2V0dGVycyBvdmVyZmxvd2luZ1xuICAgICAgICAgdGhlIHJhbmdlIG9mIE9DYW1sIFtpbnQzMl0gdmFsdWVzLiAqL1xuICAgICAgdGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSA/XG4gICAgICBuZXcgSW50MzJBcnJheSh0YS5idWZmZXIgLHRhLmJ5dGVPZmZzZXQsIHRhLmxlbmd0aCkgOiB0YTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCAwLCBbdGEubGVuZ3RoXSwgdGEpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT0gXCIlZFwiKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiK2kpO1xuICB2YXIgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIGlmIChpIDwgMCkgeyBpZiAoZi5zaWduZWRjb252KSB7IGYuc2lnbiA9IC0xOyBpID0gLWk7IH0gZWxzZSBpID4+Pj0gMDsgfVxuICB2YXIgcyA9IGkudG9TdHJpbmcoZi5iYXNlKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSAnICc7XG4gICAgdmFyIG4gPSBmLnByZWMgLSBzLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIHMgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBzO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Vcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKSB7XG4gIHZhciBpID0gMCwgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLCBiYXNlID0gMTAsIHNpZ24gPSAxO1xuICBpZiAobGVuID4gMCkge1xuICAgIHN3aXRjaCAoY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpKSB7XG4gICAgY2FzZSA0NTogaSsrOyBzaWduID0gLTE7IGJyZWFrO1xuICAgIGNhc2UgNDM6IGkrKzsgc2lnbiA9IDE7IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PSA0OClcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpKSB7XG4gICAgY2FzZSAxMjA6IGNhc2UgODg6IGJhc2UgPSAxNjsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlIDExMTogY2FzZSA3OTogYmFzZSA9ICA4OyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgIDk4OiBjYXNlIDY2OiBiYXNlID0gIDI7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTc6IGNhc2UgODU6IGkgKz0gMjsgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gW2ksIHNpZ24sIGJhc2VdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2RpZ2l0XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2RpZ2l0KGMpIHtcbiAgaWYgKGMgPj0gNDggJiYgYyA8PSA1NykgIHJldHVybiBjIC0gNDg7XG4gIGlmIChjID49IDY1ICYmIGMgPD0gOTApICByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyAocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocyk7XG4gIHZhciBpID0gclswXSwgc2lnbiA9IHJbMV0sIGJhc2UgPSByWzJdO1xuICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICB2YXIgdGhyZXNob2xkID0gLTEgPj4+IDA7XG4gIHZhciBjID0gKGkgPCBsZW4pP2NhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk6MDtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGQ7XG4gIGZvciAoaSsrO2k8bGVuO2krKykge1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAvLyBGb3IgYmFzZSBkaWZmZXJlbnQgZnJvbSAxMCwgd2UgZXhwZWN0IGFuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uLFxuICAvLyBoZW5jZSBhbnkgdmFsdWUgb2YgJ3JlcycgKGxlc3MgdGhhbiAndGhyZXNob2xkJykgaXMgYWNjZXB0YWJsZS5cbiAgLy8gQnV0IHdlIGhhdmUgdG8gY29udmVydCB0aGUgcmVzdWx0IGJhY2sgdG8gYSBzaWduZWQgaW50ZWdlci5cbiAgcmVzID0gc2lnbiAqIHJlcztcbiAgaWYgKChiYXNlID09IDEwKSAmJiAoKHJlcyB8IDApICE9IHJlcykpXG4gICAgLyogU2lnbmVkIHJlcHJlc2VudGF0aW9uIGV4cGVjdGVkLCBhbGxvdyAtMl4obmJpdHMtMSkgdG8gMl4obmJpdHMtMSkgLSAxICovXG4gICAgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX211bCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tdWwoYSxiKXtcbiAgcmV0dXJuIE1hdGguaW11bChhLGIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2RpdlxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9kaXYoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiAoeC95KXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9tb2QoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiB4JXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNlxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoKCh4ICYgMHgwMEZGKSA8PCA4KSB8XG4gICAgICAgICAgICgoeCAmIDB4RkYwMCkgPj4gOCkpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYnN3YXBcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYnN3YXAoeCkge1xuICByZXR1cm4gKCgoeCAmIDB4MDAwMDAwRkYpIDw8IDI0KSB8XG4gICAgICAgICAgKCh4ICYgMHgwMDAwRkYwMCkgPDwgOCkgfFxuICAgICAgICAgICgoeCAmIDB4MDBGRjAwMDApID4+PiA4KSB8XG4gICAgICAgICAgKCh4ICYgMHhGRjAwMDAwMCkgPj4+IDI0KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX3VuaXZfcGFyYW0gbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1ZlcnNpb246IDwgNC4xMlxuZnVuY3Rpb24gY2FtbF9oYXNoX3VuaXZfcGFyYW0gKGNvdW50LCBsaW1pdCwgb2JqKSB7XG4gIHZhciBoYXNoX2FjY3UgPSAwO1xuICBmdW5jdGlvbiBoYXNoX2F1eCAob2JqKSB7XG4gICAgbGltaXQgLS07XG4gICAgaWYgKGNvdW50IDwgMCB8fCBsaW1pdCA8IDApIHJldHVybjtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkgJiYgb2JqWzBdID09PSAob2JqWzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKG9ialswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqWzJdKSB8IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTA6XG4gICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgbGltaXQrKzsgaGFzaF9hdXgob2JqKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgb2JqWzBdKSB8IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSBvYmoubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgaGFzaF9hdXggKG9ialtpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKG9iaikpIHtcbiAgICAgIGNvdW50IC0tO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQob2JqKTtcbiAgICAgIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZvciAodmFyIGIgPSBjb250ZW50LCBsID0gYi5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgICAgfSBlbHNlIHsgLyogQVJSQVkgKi9cbiAgICAgICAgZm9yICh2YXIgYSA9IGNvbnRlbnQsIGwgPSBhLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYVtpXSkgfCAwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcob2JqKSkge1xuICAgICAgdmFyIGpzYnl0ZXMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG9iaik7XG4gICAgICBmb3IgKHZhciBiID0ganNieXRlcywgbCA9IGpzYnl0ZXMubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBmb3IgKHZhciBiID0gb2JqLCBsID0gb2JqLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSAob2JqfDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBjb3VudCAtLTtcbiAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9iaikgfCAwO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSArb2JqKSB7XG4gICAgICAvLyBGbG9hdFxuICAgICAgY291bnQtLTtcbiAgICAgIHZhciBwID0gY2FtbF9pbnQ2NF90b19ieXRlcyAoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IChvYmopKTtcbiAgICAgIGZvciAodmFyIGkgPSA3OyBpID49IDA7IGktLSkgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgcFtpXSkgfCAwO1xuICAgIH0gZWxzZSBpZihvYmogJiYgb2JqLmNhbWxfY3VzdG9tKSB7XG4gICAgICBpZihjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXS5oYXNoKSB7XG4gICAgICAgIHZhciBoID0gY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaChvYmopIHwgMDtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgaCkgfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBoYXNoX2F1eCAob2JqKTtcbiAgcmV0dXJuIGhhc2hfYWNjdSAmIDB4M0ZGRkZGRkY7XG59XG5cbi8vZnVuY3Rpb24gUk9UTDMyKHgsbikgeyByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4+ICgzMi1uKSkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50KGgsZCkge1xuICBkID0gY2FtbF9tdWwoZCwgMHhjYzllMmQ1MXwwKTtcbiAgZCA9ICgoZCA8PCAxNSkgfCAoZCA+Pj4gKDMyLTE1KSkpOyAvLyBST1RMMzIoZCwgMTUpO1xuICBkID0gY2FtbF9tdWwoZCwgMHgxYjg3MzU5Myk7XG4gIGggXj0gZDtcbiAgaCA9ICgoaCA8PCAxMykgfCAoaCA+Pj4gKDMyLTEzKSkpOyAgIC8vUk9UTDMyKGgsIDEzKTtcbiAgcmV0dXJuICgoKGggKyAoaCA8PCAyKSl8MCkgKyAoMHhlNjU0NmI2NHwwKSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmluYWwoaCkge1xuICBoIF49IGggPj4+IDE2O1xuICBoID0gY2FtbF9tdWwgKGgsIDB4ODVlYmNhNmJ8MCk7XG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPSBjYW1sX211bCAoaCwgMHhjMmIyYWUzNXwwKTtcbiAgaCBePSBoID4+PiAxNjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9oYXNoX21peF9pbnQ2NFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9mbG9hdCAoaCwgdjApIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfaW50NjQoaCwgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0ICh2MCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnQ2NFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbG8zMiwgY2FtbF9pbnQ2NF9oaTMyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludDY0IChoLCB2KSB7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2xvMzIodikpO1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9oaTMyKHYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCwgaSwgdztcbiAgZm9yIChpID0gMDsgaSArIDQgPD0gbGVuOyBpICs9IDQpIHtcbiAgICB3ID0gcy5jaGFyQ29kZUF0KGkpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCA4KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMikgPDwgMTYpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSszKSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHMuY2hhckNvZGVBdChpKzIpIDw8IDE2O1xuICBjYXNlIDI6IHcgfD0gcy5jaGFyQ29kZUF0KGkrMSkgPDwgODtcbiAgY2FzZSAxOlxuICAgIHcgfD0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgZGVmYXVsdDpcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHNbaV1cbiAgICAgIHwgKHNbaSsxXSA8PCA4KVxuICAgICAgfCAoc1tpKzJdIDw8IDE2KVxuICAgICAgfCAoc1tpKzNdIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICBjYXNlIDM6IHcgID0gc1tpKzJdIDw8IDE2O1xuICBjYXNlIDI6IHcgfD0gc1tpKzFdIDw8IDg7XG4gIGNhc2UgMTogdyB8PSBzW2ldO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgZGVmYXVsdDpcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlcyhoLCB2KSB7XG4gIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KHYpO1xuICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNvbnRlbnQpXG4gIGVsc2UgLyogQVJSQVkgKi9cbiAgICByZXR1cm4gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgY29udGVudCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsIHYpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHYpKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2ggbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0LCBjYW1sX2hhc2hfbWl4X3N0cmluZywgY2FtbF9oYXNoX21peF9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9oYXNoIChjb3VudCwgbGltaXQsIHNlZWQsIG9iaikge1xuICB2YXIgcXVldWUsIHJkLCB3ciwgc3osIG51bSwgaCwgdiwgaSwgbGVuO1xuICBzeiA9IGxpbWl0O1xuICBpZiAoc3ogPCAwIHx8IHN6ID4gMjU2KSBzeiA9IDI1NjtcbiAgbnVtID0gY291bnQ7XG4gIGggPSBzZWVkO1xuICBxdWV1ZSA9IFtvYmpdOyByZCA9IDA7IHdyID0gMTtcbiAgd2hpbGUgKHJkIDwgd3IgJiYgbnVtID4gMCkge1xuICAgIHYgPSBxdWV1ZVtyZCsrXTtcbiAgICBpZiAodiAmJiB2LmNhbWxfY3VzdG9tKXtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50IChoLCBoaCk7XG4gICAgICAgIG51bSAtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKHZbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHZbMl0pO1xuICAgICAgICBudW0tLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MDpcbiAgICAgICAgLy8gRm9yd2FyZFxuICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKSB7XG4gICAgICAgICAgLyogQWxsIGNvbnRpbnVhdGlvbnMgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZSxcbiAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGRpc3Rpbmd1aXNoIHRoZW0uICovXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdGFnKTtcbiAgICAgICAgZm9yIChpID0gMSwgbGVuID0gdi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgcXVldWVbd3IrK10gPSB2W2ldO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodnwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHYrdisxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLHYpO1xuICAgICAgbnVtLS07XG4gICAgfVxuICB9XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpO1xuICByZXR1cm4gaCAmIDB4M0ZGRkZGRkY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2hhc2hcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfZmluYWwsIGNhbWxfaGFzaF9taXhfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19oYXNoKGgsIHYpe1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdik7XG4gIHZhciBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNGRkZGRkZGO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9jb25zdGFudHNcbnZhciBjYW1sX21hcnNoYWxfY29uc3RhbnRzID0ge1xuICBQUkVGSVhfU01BTExfQkxPQ0s6ICAgICAgICAgMHg4MCxcbiAgUFJFRklYX1NNQUxMX0lOVDogICAgICAgICAgIDB4NDAsXG4gIFBSRUZJWF9TTUFMTF9TVFJJTkc6ICAgICAgICAweDIwLFxuICBDT0RFX0lOVDg6ICAgICAgICAgICAgICAgICAgMHgwMCxcbiAgQ09ERV9JTlQxNjogICAgICAgICAgICAgICAgIDB4MDEsXG4gIENPREVfSU5UMzI6ICAgICAgICAgICAgICAgICAweDAyLFxuICBDT0RFX0lOVDY0OiAgICAgICAgICAgICAgICAgMHgwMyxcbiAgQ09ERV9TSEFSRUQ4OiAgICAgICAgICAgICAgIDB4MDQsXG4gIENPREVfU0hBUkVEMTY6ICAgICAgICAgICAgICAweDA1LFxuICBDT0RFX1NIQVJFRDMyOiAgICAgICAgICAgICAgMHgwNixcbiAgQ09ERV9CTE9DSzMyOiAgICAgICAgICAgICAgIDB4MDgsXG4gIENPREVfQkxPQ0s2NDogICAgICAgICAgICAgICAweDEzLFxuICBDT0RFX1NUUklORzg6ICAgICAgICAgICAgICAgMHgwOSxcbiAgQ09ERV9TVFJJTkczMjogICAgICAgICAgICAgIDB4MEEsXG4gIENPREVfRE9VQkxFX0JJRzogICAgICAgICAgICAweDBCLFxuICBDT0RFX0RPVUJMRV9MSVRUTEU6ICAgICAgICAgMHgwQyxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0JJRzogICAgIDB4MEQsXG4gIENPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6ICAweDBFLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzogICAgMHgwRixcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6IDB4MDcsXG4gIENPREVfQ09ERVBPSU5URVI6ICAgICAgICAgICAweDEwLFxuICBDT0RFX0lORklYUE9JTlRFUjogICAgICAgICAgMHgxMSxcbiAgQ09ERV9DVVNUT006ICAgICAgICAgICAgICAgIDB4MTIsXG4gIENPREVfQ1VTVE9NX0xFTjogICAgICAgICAgICAweDE4LFxuICBDT0RFX0NVU1RPTV9GSVhFRDogICAgICAgICAgMHgxOVxufVxuXG5cbi8vUHJvdmlkZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBVSW50OEFycmF5UmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IHM7IHRoaXMuaSA9IGk7IH1cblVJbnQ4QXJyYXlSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuc1t0aGlzLmkrK10gPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoc1tpXSA8PCA4KSB8IHNbaSArIDFdXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCA+PiAxNikgfCBzW2kgKyAxXTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoc1tpXSA8PCAyNCkgfCAoc1tpKzFdIDw8IDE2KSB8XG4gICAgICAgICAgICAoc1tpKzJdIDw8IDgpIHwgc1tpKzNdKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzW2ldIDw8IDI0KSB8IChzW2krMV0gPDwgMTYpIHxcbiAgICAgIChzW2krMl0gPDwgOCkgfCBzW2krM107XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKSk7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbik7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbFN0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gTWxTdHJpbmdSZWFkZXIgKHMsIGkpIHsgdGhpcy5zID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTsgdGhpcy5pID0gaTsgfVxuTWxTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgocy5jaGFyQ29kZUF0KGkpIDw8IDI0KSB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKHMuY2hhckNvZGVBdChpKzIpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkrMykpID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zdWJzdHJpbmcoaSwgaSArIGxlbikpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIHZhciBzID0gdGhpcy5zO1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIGZvcih2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgYltqXSA9IHMuY2hhckNvZGVBdChpICsgaik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogQmlnU3RyaW5nUmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheSwgY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gQmlnU3RyaW5nUmVhZGVyIChicywgaSkgeyB0aGlzLnMgPSBiczsgdGhpcy5pID0gaTsgfVxuQmlnU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbWxfYmFfZ2V0XzEodGhpcy5zLHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbWxfYmFfZ2V0XzEodGhpcy5zLHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgOCkgfCBjYW1sX2JhX2dldF8xKHMsaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpIDw8IDI0ID4+IDE2KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpICAgICAgICAgKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgICA8PCAyNCkgfCAoY2FtbF9iYV9nZXRfMShzLGkrMSkgPDwgMTYpIHxcbiAgICAgIChjYW1sX2JhX2dldF8xKHMsaSsyKSA8PCA4KSAgfCBjYW1sX2JhX2dldF8xKHMsaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdmFyIGFyciA9IG5ldyBBcnJheShsZW4pXG4gICAgZm9yKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKXtcbiAgICAgIGFycltqXSA9IGNhbWxfYmFfZ2V0XzEodGhpcy5zLCBpK2opO1xuICAgIH1cbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdmFyIG9mZnNldCA9IHRoaXMub2Zmc2V0KGkpO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIHRoaXMucy5kYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKTtcbiAgfVxufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzIChhKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKGNhbWxfaW50NjRfb2ZfYnl0ZXMgKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlclxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChzLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IE1sU3RyaW5nUmVhZGVyLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyLCBjYW1sX3N0cmluZ19vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKHMsb2ZzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgTWxTdHJpbmdSZWFkZXIgKGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICBzaXplWzBdID0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMgKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyAodik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB3cml0ZXIud3JpdGUgKDgsIGJbaV0pO1xuICBzaXplc1swXSA9IDg7IHNpemVzWzFdID0gODtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl91bm1hcnNoYWxcbmZ1bmN0aW9uIGNhbWxfaW50MzJfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHNpemVbMF0gPSA0O1xuICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHN3aXRjaCAocmVhZGVyLnJlYWQ4dSAoKSkge1xuICBjYXNlIDE6XG4gICAgc2l6ZVswXSA9IDQ7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICBjYXNlIDI6XG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBuYXRpdmUgaW50ZWdlciB2YWx1ZSB0b28gbGFyZ2VcIik7XG4gIGRlZmF1bHQ6IGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPVxuICAgIHtcIl9qXCI6IHtcbiAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQ2NF91bm1hcnNoYWwsXG4gICAgICBzZXJpYWxpemUgIDogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgICAgZml4ZWRfbGVuZ3RoIDogOCxcbiAgICAgIGNvbXBhcmUgOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgICBoYXNoIDogY2FtbF9pbnQ2NF9oYXNoXG4gICAgfSxcbiAgICAgXCJfaVwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9uXCI6IHtcbiAgICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9iaWdhcnJheVwiOntcbiAgICAgICBkZXNlcmlhbGl6ZSA6IChmdW5jdGlvbiAocmVhZGVyLCBzeikge3JldHVybiBjYW1sX2JhX2Rlc2VyaWFsaXplIChyZWFkZXIsc3osXCJfYmlnYXJyYXlcIil9KSxcbiAgICAgICBzZXJpYWxpemUgOiBjYW1sX2JhX3NlcmlhbGl6ZSxcbiAgICAgICBjb21wYXJlIDogY2FtbF9iYV9jb21wYXJlLFxuICAgICAgIGhhc2g6IGNhbWxfYmFfaGFzaCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyMDJcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycjAyXCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH1cbiAgICB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9mbG9hdF9vZl9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpIHtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N0Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT0gMCkge1xuICAgICAgYyA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBuNyA9IG4gPDwgNztcbiAgICAgIGlmIChuICE9IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Rik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG4gIHZhciBtYWdpYyA9IHJlYWRlci5yZWFkMzJ1ICgpXG4gIHN3aXRjaChtYWdpYyl7XG4gIGNhc2UgMHg4NDk1QTZCRTogLyogSW50ZXh0X21hZ2ljX251bWJlcl9zbWFsbCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gMjA7XG4gICAgdmFyIGNvbXByZXNzZWQgPSAwO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciB1bmNvbXByZXNzZWRfZGF0YV9sZW4gPSBkYXRhX2xlbjtcbiAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgX3NpemVfMzIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgX3NpemVfNjQgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkQ6IC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gcmVhZGVyLnJlYWQ4dSgpICYgMHgzRjtcbiAgICB2YXIgY29tcHJlc3NlZCA9IDE7XG4gICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIG51bV9vYmplY3RzID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIF9zaXplXzMyID0gcmVhZHZscSAob3ZlcmZsb3cpO1xuICAgIHZhciBfc2l6ZV82NCA9IHJlYWR2bHEgKG92ZXJmbG93KTtcbiAgICBpZihvdmVyZmxvd1swXSl7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIpO1xuICAgIH1cbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkY6IC8qIEludGV4dF9tYWdpY19udW1iZXJfYmlnICovXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIGEgMzItYml0IHBsYXRmb3JtXCIpO1xuICAgIGJyZWFrXG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IGJhZCBvYmplY3RcIik7XG4gICAgYnJlYWs7XG4gIH1cbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gKG51bV9vYmplY3RzID4gMCk/W106bnVsbDtcbiAgdmFyIG9ial9jb3VudGVyID0gMDtcbiAgZnVuY3Rpb24gaW50ZXJuX3JlYyAocmVhZGVyKSB7XG4gICAgdmFyIGNvZGUgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgIGlmIChjb2RlID49IDB4NDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovKSB7XG4gICAgICBpZiAoY29kZSA+PSAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovKSB7XG4gICAgICAgIHZhciB0YWcgPSBjb2RlICYgMHhGO1xuICAgICAgICB2YXIgc2l6ZSA9IChjb2RlID4+IDQpICYgMHg3O1xuICAgICAgICB2YXIgdiA9IFt0YWddO1xuICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZVxuICAgICAgICByZXR1cm4gKGNvZGUgJiAweDNGKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvZGUgPj0gMHgyMC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcgKi8pIHtcbiAgICAgICAgdmFyIGxlbiA9IGNvZGUgJiAweDFGO1xuICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoKGNvZGUpIHtcbiAgICAgICAgY2FzZSAweDAwOiAvL2NzdC5DT0RFX0lOVDg6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkOHMgKCk7XG4gICAgICAgIGNhc2UgMHgwMTogLy9jc3QuQ09ERV9JTlQxNjpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQxNnMgKCk7XG4gICAgICAgIGNhc2UgMHgwMjogLy9jc3QuQ09ERV9JTlQzMjpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG4gICAgICAgIGNhc2UgMHgwMzogLy9jc3QuQ09ERV9JTlQ2NDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGludGVnZXIgdG9vIGxhcmdlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MDQ6IC8vY3N0LkNPREVfU0hBUkVEODpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNTogLy9jc3QuQ09ERV9TSEFSRUQxNjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQxNnUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDY6IC8vY3N0LkNPREVfU0hBUkVEMzI6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA4OiAvL2NzdC5DT0RFX0JMT0NLMzI6XG4gICAgICAgICAgdmFyIGhlYWRlciA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgIHZhciB0YWcgPSBoZWFkZXIgJiAweEZGO1xuICAgICAgICAgIHZhciBzaXplID0gaGVhZGVyID4+IDEwO1xuICAgICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIHY7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgxMzogLy9jc3QuQ09ERV9CTE9DSzY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGRhdGEgYmxvY2sgdG9vIGxhcmdlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MDk6IC8vY3N0LkNPREVfU1RSSU5HODpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEE6IC8vY3N0LkNPREVfU1RSSU5HMzI6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQzogLy9jc3QuQ09ERV9ET1VCTEVfTElUVExFOlxuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgODtpKyspIHRbNyAtIGldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBCOiAvL2NzdC5DT0RFX0RPVUJMRV9CSUc6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFtpXSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgdmFyIHYgPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRTogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbNyAtIGpdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBEOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MDc6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbNyAtIGpdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBGOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2IFtpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEwOiAvL2NzdC5DT0RFX0NPREVQT0lOVEVSOlxuICAgICAgICBjYXNlIDB4MTE6IC8vY3N0LkNPREVfSU5GSVhQT0lOVEVSOlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGNvZGUgcG9pbnRlclwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDEyOiAvL2NzdC5DT0RFX0NVU1RPTTpcbiAgICAgICAgY2FzZSAweDE4OiAvL2NzdC5DT0RFX0NVU1RPTV9MRU46XG4gICAgICAgIGNhc2UgMHgxOTogLy9jc3QuQ09ERV9DVVNUT01fRklYRUQ6XG4gICAgICAgICAgdmFyIGMsIHMgPSBcIlwiO1xuICAgICAgICAgIHdoaWxlICgoYyA9IHJlYWRlci5yZWFkOHUgKCkpICE9IDApIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoYyk7XG4gICAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tzXTtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRfc2l6ZTtcbiAgICAgICAgICBpZighb3BzKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB1bmtub3duIGN1c3RvbSBibG9jayBpZGVudGlmaWVyXCIpO1xuICAgICAgICAgIHN3aXRjaChjb2RlKXtcbiAgICAgICAgICBjYXNlIDB4MTI6IC8vIGNzdC5DT0RFX0NVU1RPTSAoZGVwcmVjYXRlZClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxOTogLy8gY3N0LkNPREVfQ1VTVE9NX0ZJWEVEXG4gICAgICAgICAgICBpZighb3BzLmZpeGVkX2xlbmd0aClcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBleHBlY3RlZCBhIGZpeGVkLXNpemUgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IG9wcy5maXhlZF9sZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MTg6IC8vIGNzdC5DT0RFX0NVU1RPTV9MRU5cbiAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICAgIC8vIFNraXAgc2l6ZTY0XG4gICAgICAgICAgICByZWFkZXIucmVhZDMycygpOyByZWFkZXIucmVhZDMycygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvbGRfcG9zID0gcmVhZGVyLmk7XG4gICAgICAgICAgdmFyIHNpemUgPSBbMF07XG4gICAgICAgICAgdmFyIHYgPSBvcHMuZGVzZXJpYWxpemUocmVhZGVyLCBzaXplKTtcbiAgICAgICAgICBpZihleHBlY3RlZF9zaXplICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBpZihleHBlY3RlZF9zaXplICE9IHNpemVbMF0pXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW5jb3JyZWN0IGxlbmd0aCBvZiBzZXJpYWxpemVkIGN1c3RvbSBibG9ja1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbWVzc2FnZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZihjb21wcmVzc2VkKSB7XG4gICAgaWYoY2FtbF9kZWNvbXByZXNzX2lucHV0KSB7XG4gICAgICB2YXIgZGF0YSA9IHJlYWRlci5yZWFkdWludDhhcnJheShkYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gbmV3IFVpbnQ4QXJyYXkodW5jb21wcmVzc2VkX2RhdGFfbGVuKTtcbiAgICAgIHZhciByZXMgPSBjYW1sX2RlY29tcHJlc3NfaW5wdXQoZGF0YSwgcmVzKTtcbiAgICAgIHZhciByZWFkZXIgPSBuZXcgVUludDhBcnJheVJlYWRlcihyZXMsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGNvbXByZXNzZWQgb2JqZWN0LCBjYW5ub3QgZGVjb21wcmVzc1wiKTtcbiAgICB9XG4gIH1cbiAgdmFyIHJlcyA9IGludGVybl9yZWMgKHJlYWRlcik7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjIChyZWFkZXIpO1xuICB9XG4gIGlmICh0eXBlb2Ygb2ZzIT1cIm51bWJlclwiKSBvZnNbMF0gPSByZWFkZXIuaTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG4vL1ZlcnNpb246IDwgNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAyMFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPj0gNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAxNlxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSAocywgb2ZzKSB7XG4gIHZhciByID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKSwgb2ZzKTtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gci5yZWFkOHUoKTtcbiAgICB2YXIgbiA9IGMgJiAweDdGO1xuICAgIHdoaWxlICgoYyAmIDB4ODApICE9IDApIHtcbiAgICAgIGMgPSByLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdGKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cblxuICBzd2l0Y2goci5yZWFkMzJ1KCkpe1xuICBjYXNlIDB4ODQ5NUE2QkU6IC8qIEludGV4dF9tYWdpY19udW1iZXJfc21hbGwgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IDIwO1xuICAgIHZhciBkYXRhX2xlbiA9IHIucmVhZDMydSgpO1xuICAgIGJyZWFrO1xuICBjYXNlIDB4ODQ5NUE2QkQ6IC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gci5yZWFkOHUoKSAmIDB4M0Y7XG4gICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICBpZihvdmVyZmxvd1swXSl7XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIHRoaXMgcGxhdGZvcm1cIik7XG4gICAgfVxuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRjogLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi9cbiAgZGVmYXVsdDpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IGJhZCBvYmplY3RcIik7XG4gICAgYnJlYWtcbiAgfVxuICByZXR1cm4gaGVhZGVyX2xlbiAtIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSArIGRhdGFfbGVuO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE9iamVjdFRhYmxlXG52YXIgTWxPYmplY3RUYWJsZTtcbmlmICh0eXBlb2YgZ2xvYmFsVGhpcy5NYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAvKiBwb2x5ZmlsbCAodXNpbmcgbGluZWFyIHNlYXJjaCkgKi9cbiAgICBmdW5jdGlvbiBOYWl2ZUxvb2t1cChvYmpzKSB7IHRoaXMub2JqcyA9IG9ianM7IH1cbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMub2Jqc1tpXSA9PT0gdikgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfTtcbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGhlcmUuIFtNbE9iamVjdFRhYmxlLnN0b3JlXSB3aWxsIHB1c2ggdG8gW3RoaXMub2Jqc10gZGlyZWN0bHkuXG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IE5haXZlTG9va3VwKHRoaXMub2Jqcyk7XG4gICAgfTtcbiAgfSgpO1xufVxuZWxzZSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBnbG9iYWxUaGlzLk1hcCgpO1xuICB9O1xufVxuXG5NbE9iamVjdFRhYmxlLnByb3RvdHlwZS5zdG9yZSA9IGZ1bmN0aW9uKHYpIHtcbiAgdGhpcy5sb29rdXAuc2V0KHYsIHRoaXMub2Jqcy5sZW5ndGgpO1xuICB0aGlzLm9ianMucHVzaCh2KTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUucmVjYWxsID0gZnVuY3Rpb24odikge1xuICB2YXIgaSA9IHRoaXMubG9va3VwLmdldCh2KTtcbiAgcmV0dXJuIChpID09PSB1bmRlZmluZWQpXG4gICAgPyB1bmRlZmluZWQgOiB0aGlzLm9ianMubGVuZ3RoIC0gaTsgICAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogTWxPYmplY3RUYWJsZSwgY2FtbF9saXN0X3RvX2pzX2FycmF5LCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbnZhciBjYW1sX291dHB1dF92YWwgPSBmdW5jdGlvbiAoKXtcbiAgZnVuY3Rpb24gV3JpdGVyICgpIHsgdGhpcy5jaHVuayA9IFtdOyB9XG4gIFdyaXRlci5wcm90b3R5cGUgPSB7XG4gICAgY2h1bmtfaWR4OjIwLCBibG9ja19sZW46MCwgb2JqX2NvdW50ZXI6MCwgc2l6ZV8zMjowLCBzaXplXzY0OjAsXG4gICAgd3JpdGU6ZnVuY3Rpb24gKHNpemUsIHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9hdDpmdW5jdGlvbiAocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3BvcysrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9jb2RlOmZ1bmN0aW9uIChzaXplLCBjb2RlLCB2YWx1ZSkge1xuICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9IGNvZGU7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9zaGFyZWQ6ZnVuY3Rpb24gKG9mZnNldCkge1xuICAgICAgaWYgKG9mZnNldCA8ICgxIDw8IDgpKSB0aGlzLndyaXRlX2NvZGUoOCwgMHgwNCAvKmNzdC5DT0RFX1NIQVJFRDgqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgaWYgKG9mZnNldCA8ICgxIDw8IDE2KSkgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9LFxuICAgIHBvczpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmNodW5rX2lkeCB9LFxuICAgIGZpbmFsaXplOmZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuYmxvY2tfbGVuID0gdGhpcy5jaHVua19pZHggLSAyMDtcbiAgICAgIHRoaXMuY2h1bmtfaWR4ID0gMDtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCAweDg0OTVBNkJFKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLmJsb2NrX2xlbik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5vYmpfY291bnRlcik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLnNpemVfNjQpO1xuICAgICAgcmV0dXJuIHRoaXMuY2h1bms7XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiAodiwgZmxhZ3MpIHtcbiAgICBmbGFncyA9IGNhbWxfbGlzdF90b19qc19hcnJheShmbGFncyk7XG5cbiAgICB2YXIgbm9fc2hhcmluZyA9IChmbGFncy5pbmRleE9mKDAgLypNYXJzaGFsLk5vX3NoYXJpbmcqLykgIT09IC0xKSxcbiAgICAgICAgY2xvc3VyZXMgPSAgKGZsYWdzLmluZGV4T2YoMSAvKk1hcnNoYWwuQ2xvc3VyZXMqLykgIT09IC0xKTtcbiAgICAvKiBNYXJzaGFsLkNvbXBhdF8zMiBpcyByZWR1bmRhbnQgc2luY2UgaW50ZWdlcnMgYXJlIDMyLWJpdCBhbnl3YXkgKi9cblxuICAgIGlmIChjbG9zdXJlcylcbiAgICAgIGNvbnNvbGUud2FybihcImluIGNhbWxfb3V0cHV0X3ZhbDogZmxhZyBNYXJzaGFsLkNsb3N1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXG4gICAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIgKCk7XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIGludGVybl9vYmpfdGFibGUgPSBub19zaGFyaW5nID8gbnVsbCA6IG5ldyBNbE9iamVjdFRhYmxlKCk7XG5cbiAgICBmdW5jdGlvbiBtZW1vKHYpIHtcbiAgICAgIGlmIChub19zaGFyaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICB2YXIgZXhpc3Rpbmdfb2Zmc2V0ID0gaW50ZXJuX29ial90YWJsZS5yZWNhbGwodik7XG4gICAgICBpZiAoZXhpc3Rpbmdfb2Zmc2V0KSB7IHdyaXRlci53cml0ZV9zaGFyZWQoZXhpc3Rpbmdfb2Zmc2V0KTsgcmV0dXJuIHRydWU7IH1cbiAgICAgIGVsc2UgeyBpbnRlcm5fb2JqX3RhYmxlLnN0b3JlKHYpOyByZXR1cm4gZmFsc2U7IH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlcm5fcmVjICh2KSB7XG4gICAgICBpZiAodi5jYW1sX2N1c3RvbSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbmFtZSA9IHYuY2FtbF9jdXN0b207XG4gICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbbmFtZV07XG4gICAgICAgIHZhciBzel8zMl82NCA9IFswLDBdO1xuICAgICAgICBpZighb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZihvcHMuZml4ZWRfbGVuZ3RoID09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE4IC8qY3N0LkNPREVfQ1VTVE9NX0xFTiovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBoZWFkZXJfcG9zID0gd3JpdGVyLnBvcyAoKTtcbiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zLCAzMiwgc3pfMzJfNjRbMF0pO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgNCwgMzIsIDApOyAvLyB6ZXJvXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA4LCAzMiwgc3pfMzJfNjRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBvbGRfcG9zID0gd3JpdGVyLnBvcygpO1xuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgaWYgKG9wcy5maXhlZF9sZW5ndGggIT0gd3JpdGVyLnBvcygpIC0gb2xkX3BvcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGluY29ycmVjdCBmaXhlZCBzaXplcyBzcGVjaWZpZWQgYnkgXCIgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAyICsgKChzel8zMl82NFswXSArIDMpID4+IDIpO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAyICsgKChzel8zMl82NFsxXSArIDcpID4+IDMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICAgIGlmICh2WzBdID09IDI1MSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChBYnN0cmFjdClcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGNvbnRpbnVhdGlvbiB2YWx1ZVwiKTtcbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSAmJiBtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIGlmICh2WzBdIDwgMTYgJiYgdi5sZW5ndGggLSAxIDwgOClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8gKyB2WzBdICsgKCh2Lmxlbmd0aCAtIDEpPDw0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwOCAvKmNzdC5DT0RFX0JMT0NLMzIqLywgKCh2Lmxlbmd0aC0xKSA8PCAxMCkgfCB2WzBdKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gdi5sZW5ndGg7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IHYubGVuZ3RoO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxKSBzdGFjay5wdXNoICh2LCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgICBpZighKGNhbWxfaXNfbWxfYnl0ZXMoY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKSkpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogW0J5dGVzLnRdIGNhbm5vdCBzYWZlbHkgYmUgbWFyc2hhbGVkIHdpdGggWy0tZW5hYmxlIHVzZS1qcy1zdHJpbmddXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT0gKHZ8MCkpe1xuICAgICAgICAgIHZhciB0eXBlX29mX3YgPSB0eXBlb2YgdjtcbiAgICAgICAgICBpZih0eXBlX29mX3YgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChcIit0eXBlX29mX3YrXCIpXCIpO1xuICAgICAgICAgIC8vIElmIGEgZmxvYXQgaGFwcGVucyB0byBiZSBhbiBpbnRlZ2VyIGl0IGlzIHNlcmlhbGl6ZWQgYXMgYW4gaW50ZWdlclxuICAgICAgICAgIC8vIChKc19vZl9vY2FtbCBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB0eXBlIG9mIGFuIGludGVnZXIgbnVtYmVyIGlzXG4gICAgICAgICAgLy8gZmxvYXQgb3IgaW50ZWdlci4pIFRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGNyYXNoZXMgd2hlblxuICAgICAgICAgIC8vIHVubWFyc2hhbGxpbmcgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bnRpbWUuXG4gICAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgICB2YXIgdCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHYpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MEMgLypjc3QuQ09ERV9ET1VCTEVfTElUVExFKi8pO1xuICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGk8ODsgaSsrKXt3cml0ZXIud3JpdGUoOCx0WzcgLSBpXSl9XG4gICAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gM1xuICAgICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDJcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID49IDAgJiYgdiA8IDB4NDApIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDBYNDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAoMSA8PCA3KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDAgLypjc3QuQ09ERV9JTlQ4Ki8sIHYpO1xuICAgICAgICAgIGVsc2UgaWYgKHYgPj0gLSgxIDw8IDE1KSAmJiB2IDwgKDEgPDwgMTUpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMTYsIDB4MDEgLypjc3QuQ09ERV9JTlQxNiovLCB2KTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwMiAvKmNzdC5DT0RFX0lOVDMyKi8sIHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGV4dGVybl9yZWMgKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIHZhciB2ID0gc3RhY2sucG9wICgpO1xuICAgICAgaWYgKGkgKyAxIDwgdi5sZW5ndGgpIHN0YWNrLnB1c2ggKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWMgKHZbaV0pO1xuICAgIH1cbiAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgd3JpdGVyLm9ial9jb3VudGVyID0gaW50ZXJuX29ial90YWJsZS5vYmpzLmxlbmd0aDtcbiAgICB3cml0ZXIuZmluYWxpemUoKTtcbiAgICByZXR1cm4gd3JpdGVyLmNodW5rO1xuICB9XG59ICgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfYmxpdF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyIChzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKTtcbiAgaWYgKHQubGVuZ3RoID4gbGVuKSBjYW1sX2ZhaWx3aXRoIChcIk1hcnNoYWwudG9fYnVmZmVyOiBidWZmZXIgb3ZlcmZsb3dcIik7XG4gIGNhbWxfYmxpdF9ieXRlcyh0LCAwLCBzLCBvZnMsIHQubGVuZ3RoKTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfdGFnKGEpe1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKGEpKSByZXR1cm4gMjUyOyAvLyBzdHJpbmdfdGFnXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGEpKSByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIEFycmF5ICYmIGFbMF0gPT09IChhWzBdPj4+MCkgJiYgYVswXSA8PSAyNTUpIHtcbiAgICAvLyBMb29rIGxpa2UgYW4gb2NhbWwgYmxvY2tcbiAgICB2YXIgdGFnID0gYVswXSB8IDA7XG4gICAgLy8gaWdub3JlIGRvdWJsZV9hcnJheV90YWcgYmVjYXVzZSB3ZSBjYW5ub3QgYWNjdXJhdGVseSBzZXRcbiAgICAvLyB0aGlzIHRhZyB3aGVuIHdlIGNyZWF0ZSBhbiBhcnJheSBvZiBmbG9hdC5cbiAgICByZXR1cm4gKHRhZyA9PSAyNTQpPzA6dGFnXG4gIH1cbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIFN0cmluZykgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgTnVtYmVyKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYSAmJiBhLmNhbWxfY3VzdG9tKSByZXR1cm4gMTI1NTsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKGEgJiYgYS5jb21wYXJlKSByZXR1cm4gMTI1NjsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIDEyNDc7IC8vIGxpa2UgY2xvc3VyZV90YWcgKDI0NylcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpe1xuICByZXR1cm4gY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXS5jb21wYXJlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKG51bSwgY3VzdG9tLCBzd2FwLCB0b3RhbCkge1xuICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShjdXN0b20pO1xuICBpZihjb21wKSB7XG4gICAgdmFyIHggPSAoc3dhcCA+IDApP2NvbXAoY3VzdG9tLG51bSx0b3RhbCk6Y29tcChudW0sY3VzdG9tLHRvdGFsKTtcbiAgICBpZih0b3RhbCAmJiB4ICE9IHgpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZigreCAhPSAreCkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZigoeCB8IDApICE9IDApIHJldHVybiAoeCB8IDApOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbCAoY29uc3QsIGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW50X2NvbXBhcmUsIGNhbWxfc3RyaW5nX2NvbXBhcmUsIGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20sIGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvcig7Oykge1xuICAgIGlmICghKHRvdGFsICYmIGEgPT09IGIpKSB7XG4gICAgICB2YXIgdGFnX2EgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19hID09IDI1MCkgeyBhID0gYVsxXTsgY29udGludWUgfVxuXG4gICAgICB2YXIgdGFnX2IgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhiKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19iID09IDI1MCkgeyBiID0gYlsxXTsgY29udGludWUgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmKHRhZ19hICE9PSB0YWdfYikge1xuICAgICAgICBpZih0YWdfYSA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2IgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZih0YWdfYiA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2EgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0YWdfYSA8IHRhZ19iKT8tMToxO1xuICAgICAgfVxuICAgICAgc3dpdGNoKHRhZ19hKXtcbiAgICAgICAgLy8gMjQ2OiBMYXp5X3RhZyBoYW5kbGVkIGJlbGxvd1xuICAgICAgY2FzZSAyNDc6IC8vIENsb3N1cmVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjQ4OiAvLyBPYmplY3RcbiAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pO1xuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0OTogLy8gSW5maXhcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTA6IC8vIEZvcndhcmQgdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW4sIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTE6IC8vQWJzdHJhY3RcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUyOiAvLyBPQ2FtbCBieXRlc1xuICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgIHZhciB4ID0gY2FtbF9ieXRlc19jb21wYXJlKGEsIGIpO1xuICAgICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUzOiAvLyBEb3VibGVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5X3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX2FycmF5X3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI1NTogLy8gQ3VzdG9tX3RhZ1xuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI0NzogLy8gRnVuY3Rpb25cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTU6IC8vIEN1c3RvbVxuICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgaWYoY29tcCAhPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYikpe1xuICAgICAgICAgIHJldHVybiAoYS5jYW1sX2N1c3RvbTxiLmNhbWxfY3VzdG9tKT8tMToxO1xuICAgICAgICB9XG4gICAgICAgIGlmKCFjb21wKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICB2YXIgeCA9IGNvbXAoYSxiLHRvdGFsKTtcbiAgICAgICAgaWYoeCAhPSB4KXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgdmFyIHggPSBhLmNvbXBhcmUoYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCkgeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICByZXR1cm4gdG90YWw/LTE6eDtcbiAgICAgICAgfVxuICAgICAgICBpZih4ICE9PSAoeHwwKSl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMDogLy8gTnVtYmVyXG4gICAgICAgIGEgPSArYTtcbiAgICAgICAgYiA9ICtiO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgIT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgaWYgKGEgPT0gYSkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGIgPT0gYikgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDAxOiAvLyBUaGUgcmVzdFxuICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAvLyAxLiBKYXZhU2NyaXB0IHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAyLiBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvL1xuICAgICAgICAvLyAoMykgd2lsbCByYWlzZSBhIFtUeXBlRXJyb3JdXG4gICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgLy8gKDIpIGFuZCAoMyksIGFmdGVyIGV2ZW50dWFsIGNvZXJjaW9uXG4gICAgICAgIC8vIC0gaWYgYSBhbmQgYiBhcmUgc3RyaW5ncywgYXBwbHkgbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uXG4gICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAvLyAgIGFuZCBhcHBseSBzdGFuZGFyZCBjb21wYXJpc29uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEV4Y2VwdGlvbjogYCE9YCB3aWxsIG5vdCBjb2VyY2UvY29udmVydCBpZiBib3RoIGEgYW5kIGIgYXJlIG9iamVjdHNcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhiKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUyMDogLy8gamF2YXNjcmlwdCBzdHJpbmdzXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICB2YXIgYiA9IGIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDY6IC8vIExhenlfdGFnXG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5XG4gICAgICBkZWZhdWx0OiAvLyBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICBpZihjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodGFnX2EpKSB7XG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIChhLmxlbmd0aCA8IGIubGVuZ3RoKT8tMToxO1xuICAgICAgICBpZiAoYS5sZW5ndGggPiAxKSBzdGFjay5wdXNoKGEsIGIsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKSByZXR1cm4gMDtcbiAgICB2YXIgaSA9IHN0YWNrLnBvcCgpO1xuICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgaWYgKGkgKyAxIDwgYS5sZW5ndGgpIHN0YWNrLnB1c2goYSwgYiwgaSArIDEpO1xuICAgIGEgPSBhW2ldO1xuICAgIGIgPSBiW2ldO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZSAoYSwgYikgeyByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdHJ1ZSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaW50X2NvbXBhcmUgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pbnRfY29tcGFyZSAoYSwgYikge1xuICBpZiAoYSA8IGIpIHJldHVybiAoLTEpOyBpZiAoYSA9PSBiKSByZXR1cm4gMDsgcmV0dXJuIDE7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID09IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbm90ZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpICE9IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPj0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JlYXRlcnRoYW4gbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVydGhhbiAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPiAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpIDw9IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3N0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc3RoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpIDwgMCk7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRm9ybWF0XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZm9ybWF0XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZm9ybWF0IChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID1cbiAgICAgIHsganVzdGlmeTonKycsIHNpZ25zdHlsZTonLScsIGZpbGxlcjonICcsIGFsdGVybmF0ZTpmYWxzZSxcbiAgICAgICAgYmFzZTowLCBzaWduZWRjb252OmZhbHNlLCB3aWR0aDowLCB1cHBlcmNhc2U6ZmFsc2UsXG4gICAgICAgIHNpZ246MSwgcHJlYzotMSwgY29udjonZicgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBjID0gZm10LmNoYXJBdChpKTtcbiAgICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlICctJzpcbiAgICAgIGYuanVzdGlmeSA9ICctJzsgYnJlYWs7XG4gICAgY2FzZSAnKyc6IGNhc2UgJyAnOlxuICAgICAgZi5zaWduc3R5bGUgPSBjOyBicmVhaztcbiAgICBjYXNlICcwJzpcbiAgICAgIGYuZmlsbGVyID0gJzAnOyBicmVhaztcbiAgICBjYXNlICcjJzpcbiAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOlxuICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgZi53aWR0aCA9IDA7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYud2lkdGggPSBmLndpZHRoICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJy4nOlxuICAgICAgZi5wcmVjID0gMDtcbiAgICAgIGkrKztcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi5wcmVjID0gZi5wcmVjICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICBjYXNlICdkJzogY2FzZSAnaSc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgJ3UnOlxuICAgICAgZi5iYXNlID0gMTA7IGJyZWFrO1xuICAgIGNhc2UgJ3gnOlxuICAgICAgZi5iYXNlID0gMTY7IGJyZWFrO1xuICAgIGNhc2UgJ1gnOlxuICAgICAgZi5iYXNlID0gMTY7IGYudXBwZXJjYXNlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnbyc6XG4gICAgICBmLmJhc2UgPSA4OyBicmVhaztcbiAgICBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi5jb252ID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnRSc6IGNhc2UgJ0YnOiBjYXNlICdHJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgIGYuY29udiA9IGMudG9Mb3dlckNhc2UgKCk7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCByYXdidWZmZXIpIHtcbiAgaWYgKGYudXBwZXJjYXNlKSByYXdidWZmZXIgPSByYXdidWZmZXIudG9VcHBlckNhc2UoKTtcbiAgdmFyIGxlbiA9IHJhd2J1ZmZlci5sZW5ndGg7XG4gIC8qIEFkanVzdCBsZW4gdG8gcmVmbGVjdCBhZGRpdGlvbmFsIGNoYXJzIChzaWduLCBldGMpICovXG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgKGYuc2lnbiA8IDAgfHwgZi5zaWduc3R5bGUgIT0gJy0nKSkgbGVuKys7XG4gIGlmIChmLmFsdGVybmF0ZSkge1xuICAgIGlmIChmLmJhc2UgPT0gOCkgbGVuICs9IDE7XG4gICAgaWYgKGYuYmFzZSA9PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcgJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICBpZiAoZi5zaWduZWRjb252KSB7XG4gICAgaWYgKGYuc2lnbiA8IDApIGJ1ZmZlciArPSAnLSc7XG4gICAgZWxzZSBpZiAoZi5zaWduc3R5bGUgIT0gJy0nKSBidWZmZXIgKz0gZi5zaWduc3R5bGU7XG4gIH1cbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSA4KSBidWZmZXIgKz0gJzAnO1xuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDE2KSBidWZmZXIgKz0gZi51cHBlcmNhc2U/XCIwWFwiOlwiMHhcIjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnKycgJiYgZi5maWxsZXIgPT0gJzAnKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnMCc7XG4gIGJ1ZmZlciArPSByYXdidWZmZXI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJy0nKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnICc7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGJ1ZmZlcik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gZnNfbm9kZV9zdXBwb3J0ZWQgKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9PSAndW5kZWZpbmVkJylcbn1cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCAoKSB7XG4gIHJldHVybiBmYWxzZVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9SZXF1aXJlczogTWxOb2RlRmQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX3dpdGhfYXJnc1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKHJvb3QpIHtcbiAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm5tID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gKHRoaXMucm9vdCArIG5hbWUpO1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZXhpc3RzU3luYyh0aGlzLm5tKG5hbWUpKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0ZpbGUoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLHttb2RlOm1vZGV9KTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucm1kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5yZWFkZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNEaXJlY3RvcnkoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGIgPSB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICAgIHRoaXMuZnMudW5saW5rU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gYjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZiwgcmFpc2VfdW5peCkge1xuICB2YXIgY29uc3RzID0gcmVxdWlyZSgnY29uc3RhbnRzJyk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGtleSBpbiBmKXtcbiAgICBzd2l0Y2goa2V5KXtcbiAgICBjYXNlIFwicmRvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1JET05MWTsgYnJlYWs7XG4gICAgY2FzZSBcIndyb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19XUk9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJhcHBlbmRcIiAgOlxuICAgICAgcmVzIHw9IGNvbnN0cy5PX1dST05MWSB8IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjcmVhdGVcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0NSRUFUOyAgICBicmVhaztcbiAgICBjYXNlIFwidHJ1bmNhdGVcIiA6IHJlcyB8PSBjb25zdHMuT19UUlVOQzsgICAgYnJlYWs7XG4gICAgY2FzZSBcImV4Y2xcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fRVhDTDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJiaW5hcnlcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTsgICBicmVhaztcbiAgICBjYXNlIFwidGV4dFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19URVhUOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm5vbmJsb2NrXCIgOiByZXMgfD0gY29uc3RzLk9fTk9OQkxPQ0s7IGJyZWFrO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHZhciBmZCA9IHRoaXMuZnMub3BlblN5bmModGhpcy5ubShuYW1lKSwgcmVzKTtcbiAgICB2YXIgaXNDaGFyYWN0ZXJEZXZpY2UgPSB0aGlzLmZzLmxzdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0NoYXJhY3RlckRldmljZSgpO1xuICAgIGYuaXNDaGFyYWN0ZXJEZXZpY2UgPSBpc0NoYXJhY3RlckRldmljZTtcbiAgICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlbmFtZSA9IGZ1bmN0aW9uKG8sIG4sIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJlbmFtZVN5bmModGhpcy5ubShvKSwgdGhpcy5ubShuKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3RhdCA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiB0aGlzLnN0YXRzX2Zyb21fanMoanNfc3RhdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmxzdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMubHN0YXRTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiB0aGlzLnN0YXRzX2Zyb21fanMoanNfc3RhdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN5bWxpbmsgPSBmdW5jdGlvbih0b19kaXIsIHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMuc3ltbGlua1N5bmModGhpcy5ubSh0YXJnZXQpLCB0aGlzLm5tKHBhdGgpLCB0b19kaXIgPyAnZGlyJyA6ICdmaWxlJyk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGxpbmsgPSB0aGlzLmZzLnJlYWRsaW5rU3luYyh0aGlzLm5tKG5hbWUpLCAndXRmOCcpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhsaW5rKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLm9wZW5kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJhaXNlX25vZGVqc19lcnJvciA9IGZ1bmN0aW9uKGVyciwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpIHtcbiAgICB2YXIgYXJncyA9IG1ha2VfdW5peF9lcnJfYXJncyhlcnIuY29kZSwgZXJyLnN5c2NhbGwsIGVyci5wYXRoLCBlcnIuZXJybm8pO1xuICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0c19mcm9tX2pzID0gZnVuY3Rpb24oanNfc3RhdHMpIHtcbiAgLyogPT09VW5peC5maWxlX2tpbmQ9PT1cbiAgICogdHlwZSBmaWxlX2tpbmQgPVxuICAgKiAgICAgU19SRUcgICAgICAgICAgICAgICAgICAgICAgICgqKiBSZWd1bGFyIGZpbGUgKilcbiAgICogICB8IFNfRElSICAgICAgICAgICAgICAgICAgICAgICAoKiogRGlyZWN0b3J5ICopXG4gICAqICAgfCBTX0NIUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIENoYXJhY3RlciBkZXZpY2UgKilcbiAgICogICB8IFNfQkxLICAgICAgICAgICAgICAgICAgICAgICAoKiogQmxvY2sgZGV2aWNlICopXG4gICAqICAgfCBTX0xOSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFN5bWJvbGljIGxpbmsgKilcbiAgICogICB8IFNfRklGTyAgICAgICAgICAgICAgICAgICAgICAoKiogTmFtZWQgcGlwZSAqKVxuICAgKiAgIHwgU19TT0NLICAgICAgICAgICAgICAgICAgICAgICgqKiBTb2NrZXQgKilcbiAgICovXG4gIHZhciBmaWxlX2tpbmQ7XG4gIGlmIChqc19zdGF0cy5pc0ZpbGUoKSkge1xuICAgIGZpbGVfa2luZCA9IDA7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZpbGVfa2luZCA9IDE7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDI7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNCbG9ja0RldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMztcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgZmlsZV9raW5kID0gNDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0ZJRk8oKSkge1xuICAgIGZpbGVfa2luZCA9IDU7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTb2NrZXQoKSkge1xuICAgIGZpbGVfa2luZCA9IDY7XG4gIH1cbiAgLyogPT09VW5peC5zdGF0cz09PVxuICAgKiB0eXBlIHN0YXRzID1cbiAgICogIHsgc3RfZGV2IDogaW50OyAgICAgICAgICAgICAgICgqKiBEZXZpY2UgbnVtYmVyICopXG4gICAqICAgIHN0X2lubyA6IGludDsgICAgICAgICAgICAgICAoKiogSW5vZGUgbnVtYmVyICopXG4gICAqICAgIHN0X2tpbmQgOiBmaWxlX2tpbmQ7ICAgICAgICAoKiogS2luZCBvZiB0aGUgZmlsZSAqKVxuICAgKiAgICBzdF9wZXJtIDogZmlsZV9wZXJtOyAgICAgICAgKCoqIEFjY2VzcyByaWdodHMgKilcbiAgICogICAgc3RfbmxpbmsgOiBpbnQ7ICAgICAgICAgICAgICgqKiBOdW1iZXIgb2YgbGlua3MgKilcbiAgICogICAgc3RfdWlkIDogaW50OyAgICAgICAgICAgICAgICgqKiBVc2VyIGlkIG9mIHRoZSBvd25lciAqKVxuICAgKiAgICBzdF9naWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAgKilcbiAgICogICAgc3RfcmRldiA6IGludDsgICAgICAgICAgICAgICgqKiBEZXZpY2UgSUQgKGlmIHNwZWNpYWwgZmlsZSkgKilcbiAgICogICAgc3Rfc2l6ZSA6IGludDsgICAgICAgICAgICAgICgqKiBTaXplIGluIGJ5dGVzICopXG4gICAqICAgIHN0X2F0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBhY2Nlc3MgdGltZSAqKVxuICAgKiAgICBzdF9tdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUgKilcbiAgICogICAgc3RfY3RpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IHN0YXR1cyBjaGFuZ2UgdGltZSAqKVxuICAgKiAgfVxuICAgKi9cbiAgcmV0dXJuIEJMT0NLKFxuICAgIDAsXG4gICAganNfc3RhdHMuZGV2LFxuICAgIGpzX3N0YXRzLmlubyxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAganNfc3RhdHMuc2l6ZSxcbiAgICBqc19zdGF0cy5hdGltZU1zLFxuICAgIGpzX3N0YXRzLm10aW1lTXMsXG4gICAganNfc3RhdHMuY3RpbWVNc1xuICApO1xufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKCkge1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGZFxuLy9SZXF1aXJlczogTWxGaWxlLCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZywgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9ieXRlc19zZXQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbE5vZGVGZChmZCwgZmxhZ3Mpe1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5mZCA9IGZkO1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5NbE5vZGVGZC5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuTWxOb2RlRmQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRmQ7XG5cbk1sTm9kZUZkLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5mdHJ1bmNhdGVTeW5jKHRoaXMuZmQsbGVufDApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpLnNpemU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHRyeSB7XG4gICAgaWYodGhpcy5mbGFncy5pc0NoYXJhY3RlckRldmljZSlcbiAgICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZiwgYnVmX29mZnNldCwgbGVuKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLmZzLndyaXRlU3luYyh0aGlzLmZkLCBidWYsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiAwO1xufVxuTWxOb2RlRmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYSxidWZfb2Zmc2V0LGxlbil7XG4gIHRyeSB7XG4gICAgaWYodGhpcy5mbGFncy5pc0NoYXJhY3RlckRldmljZSlcbiAgICAgIHZhciByZWFkID0gdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBhLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgIGVsc2VcbiAgICAgIHZhciByZWFkID0gdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBhLCBidWZfb2Zmc2V0LCBsZW4sIG9mZnNldCk7XG4gICAgcmV0dXJuIHJlYWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmNsb3NlU3luYyh0aGlzLmZkKTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGZFxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRmQoKXtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZFxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3Mpe1xuICBpZihmbGFncy5uYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbiAgICAgIHZhciBmZDIgPSBmcy5vcGVuU3luYyhmbGFncy5uYW1lLCBcInJzXCIpO1xuICAgICAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZDIsIGZsYWdzKTtcbiAgICB9IGNhdGNoKGUpIHsgIH1cbiAgfVxuICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmbGFncyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIER1bW15IGZpbGVzeXN0ZW1cblxuLy9Qcm92aWRlczogY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKXtcbiAgcmV0dXJuIChuYW1lLnNsaWNlKC0xKSAhPT0gXCIvXCIpID8gKG5hbWUgKyBcIi9cIikgOiBuYW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoLCBmc19ub2RlX3N1cHBvcnRlZFxuaWYoZnNfbm9kZV9zdXBwb3J0ZWQgKCkgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QpXG4gIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZCgpLnJlcGxhY2UoL1xcXFwvZywnLycpO1xuZWxzZVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9ICBcIi9zdGF0aWNcIjtcbmNhbWxfY3VycmVudF9kaXIgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKGNhbWxfY3VycmVudF9kaXIpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9yb290XG4vL1JlcXVpcmVzOiBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBjYW1sX2dldF9yb290KHBhdGgpe1xuICB2YXIgeCA9IHBhdGhfaXNfYWJzb2x1dGUocGF0aCk7XG4gIGlmICgheCkgcmV0dXJuO1xuICByZXR1cm4geFswXSArIFwiL1wifVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Jvb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ2V0X3Jvb3QsIGNhbWxfY3VycmVudF9kaXIsIGNhbWxfZmFpbHdpdGhcbnZhciBjYW1sX3Jvb3QgPSBjYW1sX2dldF9yb290KGNhbWxfY3VycmVudF9kaXIpIHx8IGNhbWxfZmFpbHdpdGgoXCJ1bmFibGUgdG8gY29tcHV0ZSBjYW1sX3Jvb3RcIik7XG5cblxuLy9Qcm92aWRlczogTWxGaWxlXG5mdW5jdGlvbiBNbEZpbGUoKXsgIH1cblxuLy9Qcm92aWRlczogcGF0aF9pc19hYnNvbHV0ZVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpIHtcbiAgZnVuY3Rpb24gcG9zaXgocGF0aCkge1xuICAgIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gJy8nKSByZXR1cm4gW1wiXCIsIHBhdGguc3Vic3RyaW5nKDEpXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3aW4zMihwYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcbiAgICB2YXIgc3BsaXREZXZpY2VSZSA9IC9eKFthLXpBLVpdOnxbXFxcXC9dezJ9W15cXFxcL10rW1xcXFwvXStbXlxcXFwvXSspPyhbXFxcXC9dKT8oW1xcc1xcU10qPykkLztcbiAgICB2YXIgcmVzdWx0ID0gc3BsaXREZXZpY2VSZS5leGVjKHBhdGgpO1xuICAgIHZhciBkZXZpY2UgPSByZXN1bHRbMV0gfHwgJyc7XG4gICAgdmFyIGlzVW5jID0gQm9vbGVhbihkZXZpY2UgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gJzonKTtcblxuICAgIC8vIFVOQyBwYXRocyBhcmUgYWx3YXlzIGFic29sdXRlXG4gICAgaWYgKEJvb2xlYW4ocmVzdWx0WzJdIHx8IGlzVW5jKSkge1xuICAgICAgdmFyIHJvb3QgPSAocmVzdWx0WzFdIHx8ICcnKTtcbiAgICAgIHZhciBzZXAgPSAocmVzdWx0WzJdIHx8ICcnKTtcbiAgICAgIHJldHVybiBbcm9vdCwgcGF0aC5zdWJzdHJpbmcocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKV1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luMzIgOiBwb3NpeDtcbiAgfVxuICBlbHNlIHJldHVybiBwb3NpeFxufVxudmFyIHBhdGhfaXNfYWJzb2x1dGUgPSBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX3BhdGhcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBjYW1sX21ha2VfcGF0aCAobmFtZSkge1xuICBuYW1lPWNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZiggIXBhdGhfaXNfYWJzb2x1dGUobmFtZSkgKVxuICAgIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAwID0gcGF0aF9pc19hYnNvbHV0ZShuYW1lKTtcbiAgdmFyIGNvbXAgPSBjb21wMFsxXS5zcGxpdChcIi9cIik7XG4gIHZhciBuY29tcCA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGk8Y29tcC5sZW5ndGg7IGkrKyl7XG4gICAgc3dpdGNoKGNvbXBbaV0pe1xuICAgIGNhc2UgXCIuLlwiOiBpZihuY29tcC5sZW5ndGg+MSkgbmNvbXAucG9wKCk7IGJyZWFrO1xuICAgIGNhc2UgXCIuXCI6IGJyZWFrO1xuICAgIGNhc2UgXCJcIjogYnJlYWs7XG4gICAgZGVmYXVsdDogbmNvbXAucHVzaChjb21wW2ldKTticmVha1xuICAgIH1cbiAgfVxuICBuY29tcC51bnNoaWZ0KGNvbXAwWzBdKTtcbiAgbmNvbXAub3JpZyA9IG5hbWU7XG4gIHJldHVybiBuY29tcDtcbn1cblxuLy9Qcm92aWRlczpqc29vX21vdW50X3BvaW50XG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIE1sTm9kZURldmljZSwgY2FtbF9yb290LCBmc19ub2RlX3N1cHBvcnRlZFxudmFyIGpzb29fbW91bnRfcG9pbnQgPSBbXVxuaWYgKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOmNhbWxfcm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShjYW1sX3Jvb3QpfSk7XG59IGVsc2Uge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn1cbmpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpcIi9zdGF0aWMvXCIsIGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKFwiL3N0YXRpYy9cIil9KTtcblxuLy9Qcm92aWRlczpjYW1sX2xpc3RfbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGlzdF9tb3VudF9wb2ludCgpe1xuICB2YXIgcHJldiA9IDBcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspe1xuICAgIHZhciBvbGQgPSBwcmV2O1xuICAgIHByZXYgPSBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhqc29vX21vdW50X3BvaW50W2ldLnBhdGgpLCBvbGRdXG4gIH1cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8vUHJvdmlkZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2V0X3Jvb3QsIE1sTm9kZURldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IHBhdGguam9pbihcIi9cIik7XG4gIHZhciBuYW1lX3NsYXNoID0gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKTtcbiAgdmFyIHJlcztcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbSA9IGpzb29fbW91bnRfcG9pbnRbaV07XG4gICAgaWYobmFtZV9zbGFzaC5zZWFyY2gobS5wYXRoKSA9PSAwXG4gICAgICAgJiYgKCFyZXMgfHwgcmVzLnBhdGgubGVuZ3RoIDwgbS5wYXRoLmxlbmd0aCkpXG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICB9XG4gIGlmKCAhcmVzICYmIGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICB2YXIgcm9vdCA9IGNhbWxfZ2V0X3Jvb3QobmFtZSk7XG4gICAgaWYgKHJvb3QgJiYgcm9vdC5tYXRjaCgvXlthLXpBLVpdOlxcLyQvKSl7XG4gICAgICB2YXIgbSA9IHtwYXRoOnJvb3QsZGV2aWNlOm5ldyBNbE5vZGVEZXZpY2Uocm9vdCl9O1xuICAgICAganNvb19tb3VudF9wb2ludC5wdXNoKG0pO1xuICAgICAgcmVzID0ge3BhdGg6bS5wYXRoLGRldmljZTptLmRldmljZSxyZXN0Om5hbWUuc3Vic3RyaW5nKG0ucGF0aC5sZW5ndGgsbmFtZS5sZW5ndGgpfTtcbiAgICB9XG4gIH1cbiAgaWYoIHJlcyApIHJldHVybiByZXM7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwibm8gZGV2aWNlIGZvdW5kIGZvciBcIiArIG5hbWVfc2xhc2gpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vdW50X2F1dG9sb2FkXG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX21vdW50X2F1dG9sb2FkKG5hbWUsZil7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gY2FtbF90cmFpbGluZ19zbGFzaChwYXRoLmpvaW4oXCIvXCIpKTtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOm5hbWUsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UobmFtZSxmKX0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VubW91bnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfbWFrZV9wYXRoLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3VubW91bnQobmFtZSl7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gY2FtbF90cmFpbGluZ19zbGFzaChwYXRoLmpvaW4oXCIvXCIpKTtcbiAgdmFyIGlkeCA9IC0xO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKylcbiAgICBpZihqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT0gbmFtZSkgaWR4ID0gaTtcbiAgaWYoaWR4ID4gLTEpIGpzb29fbW91bnRfcG9pbnQuc3BsaWNlKGlkeCwxKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0Y3dkXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfY3VycmVudF9kaXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jaGRpclxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIGlmKHJvb3QucmVzdCkgY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocm9vdC5wYXRoICsgcm9vdC5yZXN0KTtcbiAgICBlbHNlIGNhbWxfY3VycmVudF9kaXIgPSByb290LnBhdGg7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhkaXIpKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKG5hbWUpe1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9hX2RpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2FfZGlyKG5hbWUpe1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2ZpbGVfZXhpc3RzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfZmlsZV9leGlzdHMgKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfYV9kaXIsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5yZWFkZGlyKHJvb3QucmVzdCk7XG4gIHZhciBsID0gbmV3IEFycmF5KGEubGVuZ3RoICsgMSk7XG4gIGxbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGEubGVuZ3RoO2krKylcbiAgICBsW2krMV0gPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGFbaV0pO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVtb3ZlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlbW92ZShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIG9rID0gcm9vdC5kZXZpY2UudW5saW5rKHJvb3QucmVzdCk7XG4gIGlmKG9rID09IDApIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNfZGlyZWN0b3J5XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNfZGlyZWN0b3J5KG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLmlzX2Rpcihyb290LnJlc3QpO1xuICByZXR1cm4gYT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbmFtZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlbmFtZShvLG4pe1xuICB2YXIgb19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobyk7XG4gIHZhciBuX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuKTtcbiAgaWYob19yb290LmRldmljZSAhPSBuX3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N5c19yZW5hbWU6IGNhbm5vdCBtb3ZlIGZpbGUgYmV0d2VlbiB0d28gZmlsZXN5c3RlbVwiKTtcbiAgaWYoIW9fcm9vdC5kZXZpY2UucmVuYW1lKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N5c19yZW5hbWU6IG5vIGltcGxlbWVudGVkXCIpO1xuICBvX3Jvb3QuZGV2aWNlLnJlbmFtZShvX3Jvb3QucmVzdCwgbl9yb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N5c19ta2RpcihuYW1lLCBwZXJtKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcm9vdC5kZXZpY2UubWtkaXIocm9vdC5yZXN0LHBlcm0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub3RfYV9kaXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3JtZGlyKG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ybWRpcihyb290LnJlc3QpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZSh2ZmQsIGtpbmQsIGxheW91dCwgc2hhcmVkLCBkaW1zLCBwb3MpIHtcbiAgLy8gdmFyIGRhdGEgPSBjYW1sX3N5c19mZHNbdmZkXTtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfYmFfbWFwX2ZpbGUgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX21hcF9maWxlXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlKGFyZ3YsYXJnbil7XG4gIHJldHVybiBjYW1sX2JhX21hcF9maWxlKGFyZ3ZbMF0sYXJndlsxXSxhcmd2WzJdLGFyZ3ZbM10sYXJndls0XSxhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsY29udGVudCl7XG4gIGlmKGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSlcbiAgICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KTtcbiAgZWxzZSB7XG4gICAgaWYoIWdsb2JhbFRoaXMuY2FtbF9mc190bXApIGdsb2JhbFRoaXMuY2FtbF9mc190bXAgPSBbXTtcbiAgICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wLnB1c2goe25hbWU6bmFtZSxjb250ZW50OmNvbnRlbnR9KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mc19pbml0XG4vL1JlcXVpcmVzOiBqc29vX2NyZWF0ZV9maWxlXG5mdW5jdGlvbiBjYW1sX2ZzX2luaXQgKCl7XG4gIHZhciB0bXA9Z2xvYmFsVGhpcy5jYW1sX2ZzX3RtcFxuICBpZih0bXApe1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0bXAubGVuZ3RoOyBpKyspe1xuICAgICAganNvb19jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSx0bXBbaV0uY29udGVudCk7XG4gICAgfVxuICB9XG4gIGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSA9IGpzb29fY3JlYXRlX2ZpbGU7XG4gIGdsb2JhbFRoaXMuY2FtbF9mc190bXAgPSBbXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZighIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKSBjYW1sX2ZhaWx3aXRoKFwiY2Fubm90IHJlZ2lzdGVyIGZpbGVcIik7XG4gIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKHJvb3QucmVzdCxjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfZmlsZSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24ganNvb19jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIG5hbWUgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpO1xuICB2YXIgY29udGVudCA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY29udGVudCk7XG4gIHJldHVybiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVhZF9maWxlX2NvbnRlbnRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVhZF9maWxlX2NvbnRlbnQgKG5hbWUpIHtcbiAgdmFyIG5hbWUgPSAodHlwZW9mIG5hbWUgPT0gXCJzdHJpbmdcIik/Y2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTpuYW1lO1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3Qse3Jkb25seToxfSk7XG4gICAgdmFyIGxlbiAgPSBmaWxlLmxlbmd0aCgpO1xuICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIGZpbGUucmVhZCgwLGJ1ZiwwLGxlbik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGJ1ZilcbiAgfVxuICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5ICgpIHtcbiAgcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF90aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZSAoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKGNhbWxfdW5peF9nZXR0aW1lb2ZkYXkgKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ210aW1lXG4vL0FsaWFzOiB1bml4X2dtdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X2dtdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKERhdGUuVVRDKGQuZ2V0VVRDRnVsbFllYXIoKSwgMCwgMSkpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFVUQ1NlY29uZHMoKSwgZC5nZXRVVENNaW51dGVzKCksIGQuZ2V0VVRDSG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0VVRDRGF0ZSgpLCBkLmdldFVUQ01vbnRoKCksIGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RheSgpLCBkb3ksXG4gICAgICAgICAgICAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8pXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbG9jYWx0aW1lICh0KSB7XG4gIHZhciBkID0gbmV3IERhdGUgKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSAobmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICB2YXIgamFuID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgdmFyIGp1bCA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgNiwgMSk7XG4gIHZhciBzdGRUaW1lem9uZU9mZnNldCA9IE1hdGgubWF4KGphbi5nZXRUaW1lem9uZU9mZnNldCgpLCBqdWwuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFNlY29uZHMoKSwgZC5nZXRNaW51dGVzKCksIGQuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0RGF0ZSgpLCBkLmdldE1vbnRoKCksIGQuZ2V0RnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldERheSgpLCBkb3ksXG4gICAgICAgICAgICAgICAoZC5nZXRUaW1lem9uZU9mZnNldCgpIDwgc3RkVGltZXpvbmVPZmZzZXQpIHwgMCAvKiBkYXlsaWdodCBzYXZpbmdzIHRpbWUgIGZpZWxkLiAqLylcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X21rdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvY2FsdGltZVxuLy9BbGlhczogdW5peF9ta3RpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta3RpbWUodG0pe1xuICB2YXIgZCA9IChuZXcgRGF0ZSh0bVs2XSsxOTAwLHRtWzVdLHRtWzRdLHRtWzNdLHRtWzJdLHRtWzFdKSkuZ2V0VGltZSgpO1xuICB2YXIgdCA9IE1hdGguZmxvb3IoZCAvIDEwMDApO1xuICB2YXIgdG0yID0gY2FtbF91bml4X2xvY2FsdGltZSh0KTtcbiAgcmV0dXJuIEJMT0NLKDAsdCx0bTIpO1xufVxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXJ0dXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9zdGFydHVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbGVhbnVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fY2xlYW51cFxuZnVuY3Rpb24gY2FtbF91bml4X2NsZWFudXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkIGNvbnN0XG4vL0FsaWFzOiB3aW5faGFuZGxlX2ZkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkKHgpIHtyZXR1cm4geDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2lzYXR0eVxuZnVuY3Rpb24gY2FtbF91bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuICAgIHJldHVybiB0dHkuaXNhdHR5KGZpbGVEZXNjcmlwdG9yKT8xOjA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaXNhdHR5XG4vL0FsaWFzOiB1bml4X2lzYXR0eVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF91bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLCBcIkVBQ0NFU1wiLCBcIkVBR0FJTlwiLCBcIkVCQURGXCIsIFwiRUJVU1lcIiwgXCJFQ0hJTERcIiwgXCJFREVBRExLXCIsIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLCBcIkVGQVVMVFwiLCBcIkVGQklHXCIsIFwiRUlOVFJcIiwgXCJFSU5WQUxcIiwgXCJFSU9cIiwgXCJFSVNESVJcIiwgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIiwgXCJFTkFNRVRPT0xPTkdcIiwgXCJFTkZJTEVcIiwgXCJFTk9ERVZcIiwgXCJFTk9FTlRcIiwgXCJFTk9FWEVDXCIsIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsIFwiRU5PU1BDXCIsIFwiRU5PU1lTXCIsIFwiRU5PVERJUlwiLCBcIkVOT1RFTVBUWVwiLCBcIkVOT1RUWVwiLCBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIiwgXCJFUElQRVwiLCBcIkVSQU5HRVwiLCBcIkVST0ZTXCIsIFwiRVNQSVBFXCIsIFwiRVNSQ0hcIiwgXCJFWERFVlwiLCBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIiwgXCJFQUxSRUFEWVwiLCBcIkVOT1RTT0NLXCIsIFwiRURFU1RBRERSUkVRXCIsIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsIFwiRU5PUFJPVE9PUFRcIiwgXCJFUFJPVE9OT1NVUFBPUlRcIiwgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsIFwiRVBGTk9TVVBQT1JUXCIsIFwiRUFGTk9TVVBQT1JUXCIsIFwiRUFERFJJTlVTRVwiLCBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLCBcIkVORVRVTlJFQUNIXCIsIFwiRU5FVFJFU0VUXCIsIFwiRUNPTk5BQk9SVEVEXCIsIFwiRUNPTk5SRVNFVFwiLCBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsIFwiRU5PVENPTk5cIiwgXCJFU0hVVERPV05cIiwgXCJFVE9PTUFOWVJFRlNcIiwgXCJFVElNRURPVVRcIiwgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIiwgXCJFSE9TVFVOUkVBQ0hcIiwgXCJFTE9PUFwiLCBcIkVPVkVSRkxPV1wiXG5dO1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5XG4gICAgfVxuICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIHZhcmlhbnRzLCBmYWxsYmFjayB0byBFVU5LTk9XTkVSUihpbnQpXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIGVycm5vKTtcbiAgfVxuICB2YXIgYXJncyA9IFtcbiAgICB2YXJpYW50LFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHN5c2NhbGwgfHwgXCJcIiksXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aCB8fCBcIlwiKVxuICBdO1xuICByZXR1cm4gYXJncztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3N0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnN0YXQocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X3N0YXQsIGNhbWxfaW50NjRfb2ZfaW50MzJcbi8vQWxpYXM6IHVuaXhfc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXRfNjQobmFtZSkge1xuICB2YXIgciA9IGNhbWxfdW5peF9zdGF0KG5hbWUpO1xuICByWzldID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihyWzldKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xzdGF0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbHN0YXQsIGNhbWxfaW50NjRfb2ZfaW50MzJcbi8vQWxpYXM6IHVuaXhfbHN0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdF82NChuYW1lKSB7XG4gIHZhciByID0gY2FtbF91bml4X2xzdGF0KG5hbWUpO1xuICByWzldID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihyWzldKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbWtkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ybWRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3ltbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3ltbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3N5bWxpbmsodG9fZGlyLCBzcmMsIGRzdCkge1xuICB2YXIgc3JjX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShzcmMpO1xuICB2YXIgZHN0X3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkc3QpO1xuICBpZihzcmNfcm9vdC5kZXZpY2UgIT0gZHN0X3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3ltbGluazogY2Fubm90IHN5bWxpbmsgYmV0d2VlbiB0d28gZmlsZXN5c3RlbXNcIik7XG4gIGlmICghc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmsodG9fZGlyLCBzcmNfcm9vdC5yZXN0LCBkc3Rfcm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3JlYWRsaW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZGxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnJlYWRsaW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9yZWFkbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5yZWFkbGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF91bmxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3VubGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3VubGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudW5saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF91bmxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UudW5saW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHVpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0dWlkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dWlkKHVuaXQpIHtcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQpe1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKCk7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHB3dWlkXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9BbGlhczogdW5peF9nZXRwd3VpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldHB3dWlkKHVuaXQpIHtcbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2hhc19zeW1saW5rXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9BbGlhczogdW5peF9oYXNfc3ltbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X2hhc19zeW1saW5rKHVuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCk/MTowXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9vcGVuZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9vcGVuZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfb3BlbmRpcihwYXRoKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UocGF0aCk7XG4gIGlmICghcm9vdC5kZXZpY2Uub3BlbmRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfb3BlbmRpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHZhciBkaXJfaGFuZGxlID0gcm9vdC5kZXZpY2Uub3BlbmRpcihyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiB7IHBvaW50ZXIgOiBkaXJfaGFuZGxlLCBwYXRoOiBwYXRoIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRkaXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL0FsaWFzOiB1bml4X3JlYWRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpIHtcbiAgdmFyIGVudHJ5O1xuICB0cnkge1xuICAgICAgZW50cnkgPSBkaXJfaGFuZGxlLnBvaW50ZXIucmVhZFN5bmMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwicmVhZGRpclwiLCBkaXJfaGFuZGxlLnBhdGgpKTtcbiAgfVxuICBpZiAoZW50cnkgPT09IG51bGwpIHtcbiAgICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhlbnRyeS5uYW1lKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xvc2VkaXJcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vQWxpYXM6IHVuaXhfY2xvc2VkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKSB7XG4gIHRyeSB7XG4gICAgICBkaXJfaGFuZGxlLnBvaW50ZXIuY2xvc2VTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIGRpcl9oYW5kbGUucGF0aCkpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZXdpbmRkaXJcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpciwgY2FtbF91bml4X29wZW5kaXJcbi8vQWxpYXM6IHVuaXhfcmV3aW5kZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmV3aW5kZGlyKGRpcl9oYW5kbGUpIHtcbiAgY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpO1xuICB2YXIgbmV3X2Rpcl9oYW5kbGUgPSBjYW1sX3VuaXhfb3BlbmRpcihkaXJfaGFuZGxlLnBhdGgpO1xuICBkaXJfaGFuZGxlLnBvaW50ZXIgPSBuZXdfZGlyX2hhbmRsZS5wb2ludGVyO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRmaXJzdFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfb3BlbmRpciwgY2FtbF91bml4X3JlYWRkaXJcbi8vQWxpYXM6IHdpbl9maW5kZmlyc3RcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kZmlyc3QocGF0aCkge1xuICAvLyBUaGUgV2luZG93cyBjb2RlIGFkZHMgdGhpcyBnbG9iIHRvIHRoZSBwYXRoLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdFxuICB2YXIgcGF0aF9qcyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHBhdGgpO1xuICBwYXRoX2pzID0gcGF0aF9qcy5yZXBsYWNlKC8oXnxbXFxcXFxcL10pXFwqXFwuXFwqJC8sIFwiXCIpO1xuICBwYXRoID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aF9qcyk7XG4gIC8vICouKiBpcyBub3cgc3RyaXBwZWRcbiAgdmFyIGRpcl9oYW5kbGUgPSBjYW1sX3VuaXhfb3BlbmRpcihwYXRoKTtcbiAgdmFyIGZpcnN0X2VudHJ5ID0gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG4gIC8vIFRoZSBXaW5kb3dzIGJpbmRpbmdzIHR5cGUgZGlyX2hhbmRsZSBhcyBhbiBgaW50YCBidXQgaXQncyBub3QgaW4gSlNcbiAgcmV0dXJuIFswLCBmaXJzdF9lbnRyeSwgZGlyX2hhbmRsZV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kbmV4dFxuLy9SZXF1aXJlczogY2FtbF91bml4X3JlYWRkaXJcbi8vQWxpYXM6IHdpbl9maW5kbmV4dFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRuZXh0KGRpcl9oYW5kbGUpIHtcbiAgcmV0dXJuIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZGNsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXJcbi8vQWxpYXM6IHdpbl9maW5kY2xvc2VcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kY2xvc2UoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIGNvbnN0XG4vL0FsaWFzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nICgpIHtyZXR1cm4gMDt9XG5cblxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBNbEZha2VGZCwgY2FtbF9jcmVhdGVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXksIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZXNcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJnc1xuZnVuY3Rpb24gTWxGYWtlRGV2aWNlIChyb290LCBmKSB7XG4gIHRoaXMuY29udGVudD17fTtcbiAgdGhpcy5yb290ID0gcm9vdDtcbiAgdGhpcy5sb29rdXBGdW4gPSBmO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuY3JlYXRlX2Rpcl9pZl9uZWVkZWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjb21wID0gbmFtZS5zcGxpdChcIi9cIik7XG4gIHZhciByZXMgPSBcIlwiO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgY29tcC5sZW5ndGggLSAxOyBpKyspe1xuICAgIHJlcyArPSBjb21wW2ldICsgXCIvXCI7XG4gICAgaWYodGhpcy5jb250ZW50W3Jlc10pIGNvbnRpbnVlO1xuICAgIHRoaXMuY29udGVudFtyZXNdID0gU3ltYm9sKFwiZGlyZWN0b3J5XCIpO1xuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnNsYXNoID0gZnVuY3Rpb24obmFtZSl7XG4gIHJldHVybiAvXFwvJC8udGVzdChuYW1lKT9uYW1lOihuYW1lICsgXCIvXCIpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5sb29rdXAgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKCF0aGlzLmNvbnRlbnRbbmFtZV0gJiYgdGhpcy5sb29rdXBGdW4pIHtcbiAgICB2YXIgcmVzID0gdGhpcy5sb29rdXBGdW4oY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnJvb3QpLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpKTtcbiAgICBpZihyZXMgIT09IDApIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV09bmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcocmVzWzFdKSk7XG4gICAgfVxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgLy8gVGhlIHJvb3Qgb2YgdGhlIGRldmljZSBleGlzdHNcbiAgaWYobmFtZSA9PSBcIlwiKSByZXR1cm4gMTtcbiAgLy8gQ2hlY2sgaWYgYSBkaXJlY3RvcnkgZXhpc3RzXG4gIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVfc2xhc2hdKSByZXR1cm4gMTtcbiAgLy8gQ2hlY2sgaWYgYSBmaWxlIGV4aXN0c1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lXT8xOjA7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYodGhpcy5leGlzdHMobmFtZSkgJiYgIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm1rZGlyID0gZnVuY3Rpb24obmFtZSxtb2RlLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgaWYodGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUVYSVNUXCIsIFwibWtkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogRmlsZSBleGlzdHNcIik7XG4gICAgfVxuICB9XG4gIHZhciBwYXJlbnQgPSAvXiguKilcXC9bXi9dKy8uZXhlYyhuYW1lKTtcbiAgcGFyZW50ID0gKHBhcmVudCAmJiBwYXJlbnRbMV0pIHx8ICcnO1xuICBpZighdGhpcy5leGlzdHMocGFyZW50KSl7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT0VOVFwiLCBcIm1rZGlyXCIsIHRoaXMubm0ocGFyZW50KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHBhcmVudCArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBpZighdGhpcy5pc19kaXIocGFyZW50KSl7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RESVJcIiwgXCJta2RpclwiLCB0aGlzLm5tKHBhcmVudCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihwYXJlbnQgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKHRoaXMuc2xhc2gobmFtZSkpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ybWRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICB2YXIgbmFtZV9zbGFzaCA9IChuYW1lID09IFwiXCIpP1wiXCI6KHRoaXMuc2xhc2gobmFtZSkpO1xuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSspXCIpO1xuICBpZighdGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PRU5UXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RESVJcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICBpZihuLm1hdGNoKHIpKSB7XG4gICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URU1QVFlcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCI6IERpcmVjdG9yeSBub3QgZW1wdHlcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF07XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJlYWRkaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBuYW1lX3NsYXNoID0gKG5hbWUgPT0gXCJcIik/XCJcIjoodGhpcy5zbGFzaChuYW1lKSk7XG4gIGlmKCF0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgfVxuICBpZighdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgfVxuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSspXCIpO1xuICB2YXIgc2VlbiA9IHt9XG4gIHZhciBhID0gW107XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICB2YXIgbSA9IG4ubWF0Y2gocik7XG4gICAgaWYobSAmJiAhc2VlblttWzFdXSkge3NlZW5bbVsxXV0gPSB0cnVlOyBhLnB1c2gobVsxXSl9XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW5kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcblxuICB2YXIgYSA9IHRoaXMucmVhZGRpcihuYW1lKTtcbiAgdmFyIGMgPSBmYWxzZTtcbiAgdmFyIGkgPSAwO1xuICByZXR1cm4geyByZWFkU3luYyA6IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGMpIHtcbiAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogY2xvc2VkaXIgZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZihpID09IGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgZW50cnkgPSBhW2ldO1xuICAgIGkrKztcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeSB9XG4gIH0pXG4gICAgLCBjbG9zZVN5bmM6IChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoYykge1xuICAgICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogY2xvc2VkaXIgZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjID0gdHJ1ZTtcbiAgICAgIGEgPSBbXTtcbiAgICB9KVxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzX2RpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYobmFtZSA9PSBcIlwiKSAgcmV0dXJuIHRydWU7XG4gIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXT8xOjA7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG9rID0gdGhpcy5jb250ZW50W25hbWVdP3RydWU6ZmFsc2U7XG4gIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIHJldHVybiBvaztcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYpIHtcbiAgdmFyIGZpbGU7XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGlzIGEgZGlyZWN0b3J5XCIpO1xuICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICBpZihmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKCk7XG4gIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlICh0aGlzLm5tKG5hbWUpKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sRmFrZUZkKHRoaXMubm0obmFtZSksIGZpbGUsIGYpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG4gIHZhciBmaWxlO1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gICAgaWYoZi50cnVuY2F0ZSkgZmlsZS50cnVuY2F0ZSgpO1xuICB9IGVsc2UgaWYgKGYuY3JlYXRlKSB7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSAodGhpcy5ubShuYW1lKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWdpc3Rlcj0gZnVuY3Rpb24gKG5hbWUsY29udGVudCl7XG4gIHZhciBmaWxlO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV0pIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gIGlmKGNhbWxfaXNfbWxfYnl0ZXMoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNvbnRlbnQpO1xuICBpZihjYW1sX2lzX21sX3N0cmluZyhjb250ZW50KSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9hcnJheShjb250ZW50KSk7XG4gIGVsc2UgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudC50b1N0cmluZykge1xuICAgIHZhciBieXRlcyA9IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSkpO1xuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShieXRlcyk7XG4gIH1cbiAgaWYoZmlsZSl7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICB9XG4gIGVsc2UgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogcmVnaXN0ZXJpbmcgZmlsZSB3aXRoIGludmFsaWQgY29udGVudCB0eXBlXCIpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IE1sRmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbmZ1bmN0aW9uIE1sRmFrZUZpbGUoY29udGVudCl7XG4gIHRoaXMuZGF0YSA9IGNvbnRlbnQ7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZSA9IG5ldyBNbEZpbGUgKCk7XG5NbEZha2VGaWxlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZUZpbGVcbk1sRmFrZUZpbGUucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdmFyIG9sZCA9IHRoaXMuZGF0YTtcbiAgdGhpcy5kYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICBjYW1sX2JsaXRfYnl0ZXMob2xkLCAwLCB0aGlzLmRhdGEsIDAsIGxlbik7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aCh0aGlzLmRhdGEpO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgdmFyIG5ld19zdHIgPSBjYW1sX2NyZWF0ZV9ieXRlcyhvZmZzZXQgKyBsZW4pO1xuICAgIHZhciBvbGRfZGF0YSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGRfZGF0YSwgMCwgdGhpcy5kYXRhLCAwLCBjbGVuKTtcbiAgfVxuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBwb3MsIHRoaXMuZGF0YSwgb2Zmc2V0LCBsZW4pO1xuICByZXR1cm4gMFxufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKG9mZnNldCxidWYscG9zLGxlbil7XG4gIHZhciBjbGVuID0gdGhpcy5sZW5ndGgoKTtcbiAgaWYob2Zmc2V0ICsgbGVuID49IGNsZW4pIHtcbiAgICBsZW4gPSBjbGVuIC0gb2Zmc2V0O1xuICB9XG4gIGlmKGxlbikge1xuICAgIHZhciBkYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICAgIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgZGF0YSwgMCwgbGVuKTtcbiAgICBidWYuc2V0KGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoZGF0YSksIHBvcyk7XG4gIH1cbiAgcmV0dXJuIGxlblxufVxuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sRmFrZUZkX291dChmZCxmbGFncykge1xuICBNbEZha2VGaWxlLmNhbGwodGhpcywgY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICB0aGlzLmxvZyA9IChmdW5jdGlvbiAocykgeyByZXR1cm4gMCB9KTtcbiAgaWYoZmQgPT0gMSAmJiB0eXBlb2YgY29uc29sZS5sb2cgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5sb2c7XG4gIGVsc2UgaWYoZmQgPT0gMiAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmVycm9yO1xuICBlbHNlIGlmKHR5cGVvZiBjb25zb2xlLmxvZyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmxvZ1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMCB9XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKG9mZnNldCxidWYscG9zLGxlbikge1xuICBpZih0aGlzLmxvZykge1xuICAgIGlmKGxlbiA+IDBcbiAgICAgICAmJiBwb3MgPj0gMFxuICAgICAgICYmIHBvcytsZW4gPD0gYnVmLmxlbmd0aFxuICAgICAgICYmIGJ1Zltwb3MrbGVuLTFdID09IDEwKVxuICAgICAgbGVuIC0tO1xuICAgIC8vIERvIG5vdCBvdXRwdXQgdGhlIGxhc3QgXFxuIGlmIHByZXNlbnRcbiAgICAvLyBhcyBjb25zb2xlIGxvZ2dpbmcgZGlzcGxheSBhIG5ld2xpbmUgYXQgdGhlIGVuZFxuICAgIHZhciBzcmMgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIHBvcywgc3JjLCAwLCBsZW4pO1xuICAgIHRoaXMubG9nKHNyYy50b1V0ZjE2KCkpO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMuZmQgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBhbHJlYWR5IGNsb3NlZFwiKTtcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5mZCAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGlzIHdyaXRlIG9ubHlcIik7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxvZyA9IHVuZGVmaW5lZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGZFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sRmFrZUZkKG5hbWUsIGZpbGUsZmxhZ3MpIHtcbiAgdGhpcy5maWxlID0gZmlsZTtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuXG5NbEZha2VGZC5wcm90b3R5cGUuZXJyX2Nsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5uYW1lICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgYWxyZWFkeSBjbG9zZWRcIik7XG59XG5NbEZha2VGZC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5sZW5ndGggKClcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAob2Zmc2V0LGJ1Zixwb3MsbGVuKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS53cml0ZShvZmZzZXQsYnVmLHBvcyxsZW4pXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAob2Zmc2V0LCBidWYsIHBvcywgbGVuKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5yZWFkKG9mZnNldCwgYnVmLCBwb3MsIGxlbilcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZmlsZSA9IHVuZGVmaW5lZDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKHMuY2hhckNvZGVBdCgyICogaSkgfCAocy5jaGFyQ29kZUF0KDIgKiBpICsgMSkgPDwgOCkpIDw8IDE2ID4+IDE2O1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheSwgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSByZXR1cm4gLWJhc2UtMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKXtcbiAgICAgIGlmIChsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9PSAwKVxuICAgICAgICByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2VcbiAgICAgICAgYyA9IDI1NjtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIFJlYWQgbmV4dCBpbnB1dCBjaGFyICovXG4gICAgICBjID0gYnVmZmVyW2xleGJ1ZltsZXhfY3Vycl9wb3NdXTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdICsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qIE5ldyBsZXhlciBlbmdpbmUsIHdpdGggbWVtb3J5IG9mIHBvc2l0aW9ucyAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl9tZW0ocywgaSwgbWVtLCBjdXJyX3Bvcykge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChkc3QgPT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gY3Vycl9wb3M7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9sZXhfcnVuX3RhZyhzLCBpLCBtZW0pIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybiA7XG4gICAgdmFyIHNyYyA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChzcmMgPT0gMHhmZilcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSAtMTtcbiAgICBlbHNlXG4gICAgICBtZW0gW2RzdCArIDFdID0gbWVtIFtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX25ld19sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfbWVtID0gMTA7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcbiAgdmFyIGxleF9iYXNlX2NvZGUgPSA2O1xuICB2YXIgbGV4X2JhY2t0cmtfY29kZSA9IDc7XG4gIHZhciBsZXhfZGVmYXVsdF9jb2RlID0gODtcbiAgdmFyIGxleF90cmFuc19jb2RlID0gOTtcbiAgdmFyIGxleF9jaGVja19jb2RlID0gMTA7XG4gIHZhciBsZXhfY29kZSA9IDExO1xuXG4gIGlmICghdGJsLmxleF9kZWZhdWx0KSB7XG4gICAgdGJsLmxleF9iYXNlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV0pO1xuICAgIHRibC5sZXhfYmFja3RyayA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF0pO1xuICB9XG4gIGlmICghdGJsLmxleF9kZWZhdWx0X2NvZGUpIHtcbiAgICB0YmwubGV4X2Jhc2VfY29kZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VfY29kZV0pO1xuICAgIHRibC5sZXhfYmFja3Rya19jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0X2NvZGVdKTtcbiAgfVxuICBpZiAodGJsLmxleF9jb2RlID09IG51bGwpIHRibC5sZXhfY29kZSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcodGJsW2xleF9jb2RlXSk7XG5cbiAgdmFyIGMsIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMobGV4YnVmW2xleF9idWZmZXJdKTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvcig7Oykge1xuICAgIC8qIExvb2t1cCBiYXNlIGFkZHJlc3Mgb3IgYWN0aW9uIG51bWJlciBmb3IgY3VycmVudCBzdGF0ZSAqL1xuICAgIHZhciBiYXNlID0gdGJsLmxleF9iYXNlW3N0YXRlXTtcbiAgICBpZiAoYmFzZSA8IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2Jhc2VfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgcmV0dXJuIC1iYXNlLTE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICB2YXIgcHN0YXRlID0gc3RhdGUgO1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSwgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PSBwc3RhdGUpXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfdHJhbnNfY29kZVtiYXNlX2NvZGUgKyBjXTtcbiAgICAgIGVsc2VcbiAgICAgICAgcGNfb2ZmID0gdGJsLmxleF9kZWZhdWx0X2NvZGVbcHN0YXRlXTtcbiAgICAgIGlmIChwY19vZmYgPiAwKVxuICAgICAgICBjYW1sX2xleF9ydW5fbWVtXG4gICAgICAodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSwgbGV4YnVmW2xleF9jdXJyX3Bvc10pO1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfY2hhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUsIGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1SW5pdCwgY2FtbF9NRDVVcGRhdGUsIGNhbWxfTUQ1RmluYWxcbmZ1bmN0aW9uIGNhbWxfbWQ1X2NoYW4oY2hhbmlkLHRvcmVhZCl7XG4gIHZhciBjdHggPSBjYW1sX01ENUluaXQoKTtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDQwOTYpO1xuICBpZih0b3JlYWQgPCAwKXtcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsYnVmZmVyLDAsYnVmZmVyLmxlbmd0aCk7XG4gICAgICBpZihyZWFkID09IDApIGJyZWFrO1xuICAgICAgY2FtbF9NRDVVcGRhdGUoY3R4LGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlKHRvcmVhZCA+IDApIHtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsYnVmZmVyLDAsICh0b3JlYWQgPiBidWZmZXIubGVuZ3RoID8gYnVmZmVyLmxlbmd0aCA6IHRvcmVhZCkpO1xuICAgICAgaWYocmVhZCA9PSAwKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICAgIHRvcmVhZCAtPSByZWFkXG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShjYW1sX01ENUZpbmFsKGN0eCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX21kNV9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tZDVfc3RyaW5nKHMsIG9mcywgbGVuKSB7XG4gIHJldHVybiBjYW1sX21kNV9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhzKSxvZnMsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVUcmFuc2Zvcm1cbnZhciBjYW1sX01ENVRyYW5zZm9ybSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGFkZCAoeCwgeSkgeyByZXR1cm4gKHggKyB5KSB8IDA7IH1cbiAgZnVuY3Rpb24geHgocSxhLGIseCxzLHQpIHtcbiAgICBhID0gYWRkKGFkZChhLCBxKSwgYWRkKHgsIHQpKTtcbiAgICByZXR1cm4gYWRkKChhIDw8IHMpIHwgKGEgPj4+ICgzMiAtIHMpKSwgYik7XG4gIH1cbiAgZnVuY3Rpb24gZmYoYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gZ2coYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGQpIHwgKGMgJiAofmQpKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTsgfVxuICBmdW5jdGlvbiBpaShhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdCk7IH1cblxuICByZXR1cm4gZnVuY3Rpb24gKHcsIGJ1ZmZlcikge1xuICAgIHZhciBhID0gd1swXSwgYiA9IHdbMV0sIGMgPSB3WzJdLCBkID0gd1szXTtcblxuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDBdLCA3LCAweEQ3NkFBNDc4KTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyAxXSwgMTIsIDB4RThDN0I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbIDJdLCAxNywgMHgyNDIwNzBEQik7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsgM10sIDIyLCAweEMxQkRDRUVFKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyA0XSwgNywgMHhGNTdDMEZBRik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNV0sIDEyLCAweDQ3ODdDNjJBKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWyA2XSwgMTcsIDB4QTgzMDQ2MTMpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbIDddLCAyMiwgMHhGRDQ2OTUwMSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOF0sIDcsIDB4Njk4MDk4RDgpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDldLCAxMiwgMHg4QjQ0RjdBRik7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMF0sIDE3LCAweEZGRkY1QkIxKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzExXSwgMjIsIDB4ODk1Q0Q3QkUpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbMTJdLCA3LCAweDZCOTAxMTIyKTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWzEzXSwgMTIsIDB4RkQ5ODcxOTMpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTRdLCAxNywgMHhBNjc5NDM4RSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNV0sIDIyLCAweDQ5QjQwODIxKTtcblxuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDFdLCA1LCAweEY2MUUyNTYyKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWyA2XSwgOSwgMHhDMDQwQjM0MCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMV0sIDE0LCAweDI2NUU1QTUxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyAwXSwgMjAsIDB4RTlCNkM3QUEpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDVdLCA1LCAweEQ2MkYxMDVEKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzEwXSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE0LCAweEQ4QTFFNjgxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyA0XSwgMjAsIDB4RTdEM0ZCQzgpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDldLCA1LCAweDIxRTFDREU2KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzE0XSwgOSwgMHhDMzM3MDdENik7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsgM10sIDE0LCAweEY0RDUwRDg3KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyA4XSwgMjAsIDB4NDU1QTE0RUQpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbMTNdLCA1LCAweEE5RTNFOTA1KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWyAyXSwgOSwgMHhGQ0VGQTNGOCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsgN10sIDE0LCAweDY3NkYwMkQ5KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzEyXSwgMjAsIDB4OEQyQTRDOEEpO1xuXG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNV0sIDQsIDB4RkZGQTM5NDIpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDhdLCAxMSwgMHg4NzcxRjY4MSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMV0sIDE2LCAweDZEOUQ2MTIyKTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzE0XSwgMjMsIDB4RkRFNTM4MEMpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDFdLCA0LCAweEE0QkVFQTQ0KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyA0XSwgMTEsIDB4NEJERUNGQTkpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbIDddLCAxNiwgMHhGNkJCNEI2MCk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMF0sIDIzLCAweEJFQkZCQzcwKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWzEzXSwgNCwgMHgyODlCN0VDNik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMF0sIDExLCAweEVBQTEyN0ZBKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWyAzXSwgMTYsIDB4RDRFRjMwODUpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbIDZdLCAyMywgMHgwNDg4MUQwNSk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOV0sIDQsIDB4RDlENEQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMTJdLCAxMSwgMHhFNkRCOTlFNSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE2LCAweDFGQTI3Q0Y4KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWyAyXSwgMjMsIDB4QzRBQzU2NjUpO1xuXG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMF0sIDYsIDB4RjQyOTIyNDQpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbIDddLCAxMCwgMHg0MzJBRkY5Nyk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE1LCAweEFCOTQyM0E3KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyA1XSwgMjEsIDB4RkM5M0EwMzkpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbMTJdLCA2LCAweDY1NUI1OUMzKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWyAzXSwgMTAsIDB4OEYwQ0NDOTIpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNSwgMHhGRkVGRjQ3RCk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMV0sIDIxLCAweDg1ODQ1REQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyA4XSwgNiwgMHg2RkE4N0U0Rik7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNV0sIDEwLCAweEZFMkNFNkUwKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWyA2XSwgMTUsIDB4QTMwMTQzMTQpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbMTNdLCAyMSwgMHg0RTA4MTFBMSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNF0sIDYsIDB4Rjc1MzdFODIpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTFdLCAxMCwgMHhCRDNBRjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsgMl0sIDE1LCAweDJBRDdEMkJCKTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyA5XSwgMjEsIDB4RUI4NkQzOTEpO1xuXG4gICAgd1swXSA9IGFkZChhLCB3WzBdKTtcbiAgICB3WzFdID0gYWRkKGIsIHdbMV0pO1xuICAgIHdbMl0gPSBhZGQoYywgd1syXSk7XG4gICAgd1szXSA9IGFkZChkLCB3WzNdKTtcbiAgfX0pKClcblxuLy9Qcm92aWRlczogY2FtbF9NRDVJbml0XG5mdW5jdGlvbiBjYW1sX01ENUluaXQoKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoNjQpO1xuICB2YXIgYjMyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gIHZhciBiOCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gIHJldHVybiB7bGVuOjAsXG4gICAgICAgICAgdzpuZXcgVWludDMyQXJyYXkoWzB4Njc0NTIzMDEsIDB4RUZDREFCODksIDB4OThCQURDRkUsIDB4MTAzMjU0NzZdKSxcbiAgICAgICAgICBiMzI6YjMyLFxuICAgICAgICAgIGI4OmI4fVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVVwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1VXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0X2xlbil7XG4gIHZhciBpbl9idWYgPSBjdHgubGVuICYgMHgzZjtcbiAgdmFyIGlucHV0X3BvcyA9IDA7XG4gIGN0eC5sZW4gKz0gaW5wdXRfbGVuO1xuICBpZihpbl9idWYpe1xuICAgIHZhciBtaXNzaW5nID0gNjQgLSBpbl9idWY7XG4gICAgaWYoaW5wdXRfbGVuIDwgbWlzc2luZykge1xuICAgICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLGlucHV0X2xlbiksaW5fYnVmKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KDAsbWlzc2luZyksaW5fYnVmKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IG1pc3Npbmc7XG4gICAgaW5wdXRfcG9zICs9IG1pc3Npbmc7XG4gIH1cbiAgd2hpbGUoaW5wdXRfbGVuID49IDY0KXtcbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KGlucHV0X3BvcyxpbnB1dF9wb3MgKyA2NCksIDApO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gNjQ7XG4gICAgaW5wdXRfcG9zICs9IDY0O1xuICB9XG4gIGlmKGlucHV0X2xlbilcbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KGlucHV0X3BvcyxpbnB1dF9wb3MgKyBpbnB1dF9sZW4pLCAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVGaW5hbFxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1RmluYWwoY3R4KXtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICBjdHguYjhbaW5fYnVmXSA9IDB4ODA7XG4gIGluX2J1ZiArKztcbiAgaWYoaW5fYnVmID4gNTYpIHtcbiAgICBmb3IodmFyIGogPSBpbl9idWY7IGogPCA2NDsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgNTY7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IodmFyIGogPSBpbl9idWY7IGogPCA1NjsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9XG4gIGN0eC5iMzJbMTRdID0gY3R4LmxlbiA8PCAzO1xuICBjdHguYjMyWzE1XSA9IChjdHgubGVuID4+IDI5KSAmIDB4MUZGRkZGRkY7XG4gIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKVxuICAgICAgdFtpICogNCArIGpdID0gKGN0eC53W2ldID4+ICg4ICogaikpICYgMHhGRjtcbiAgcmV0dXJuIHQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9ieXRlcyhzLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKTtcbiAgY2FtbF9NRDVVcGRhdGUoY3R4LGEuc3ViYXJyYXkob2ZzLCBvZnMgKyBsZW4pLCBsZW4pO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoY2FtbF9NRDVGaW5hbChjdHgpKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSW9cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZmRzXG52YXIgY2FtbF9zeXNfZmRzID0gbmV3IEFycmF5KDMpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jbG9zZVxuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG5mdW5jdGlvbiBjYW1sX3N5c19jbG9zZShmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUpIGZpbGUuY2xvc2UoKTtcbiAgZGVsZXRlIGNhbWxfc3lzX2Zkc1tmZF07XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBNbEZha2VGZF9vdXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUsaWR4KSB7XG4gIGlmKGlkeCA9PSB1bmRlZmluZWQpe1xuICAgIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gIH1cbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSBmaWxlO1xuICByZXR1cm4gaWR4IHwgMDtcbn1cbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW4gKG5hbWUsIGZsYWdzLCBfcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUoZmxhZ3Mpe1xuICAgIHN3aXRjaChmbGFnc1sxXSl7XG4gICAgY2FzZSAwOiBmLnJkb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAxOiBmLndyb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAyOiBmLmFwcGVuZCA9IDE7YnJlYWs7XG4gICAgY2FzZSAzOiBmLmNyZWF0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA0OiBmLnRydW5jYXRlID0gMTticmVhaztcbiAgICBjYXNlIDU6IGYuZXhjbCA9IDE7IGJyZWFrO1xuICAgIGNhc2UgNjogZi5iaW5hcnkgPSAxO2JyZWFrO1xuICAgIGNhc2UgNzogZi50ZXh0ID0gMTticmVhaztcbiAgICBjYXNlIDg6IGYubm9uYmxvY2sgPSAxO2JyZWFrO1xuICAgIH1cbiAgICBmbGFncz1mbGFnc1syXTtcbiAgfVxuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3QsZik7XG4gIHJldHVybiBjYW1sX3N5c19vcGVuX2ludGVybmFsIChmaWxlLCB1bmRlZmluZWQpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZmlsZShmZCwgZmxhZ3MpIHtcbiAgICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm4gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICByZXR1cm4gbmV3IE1sRmFrZUZkX291dChmZCwgZmxhZ3MpXG4gIH1cbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDAse3Jkb25seToxLGFsdG5hbWU6XCIvZGV2L3N0ZGluXCIsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAwKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDEse2J1ZmZlcmVkOjIsd3Jvbmx5OjEsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAxKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDIse2J1ZmZlcmVkOjIsd3Jvbmx5OjEsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAyKTtcbn0pKClcblxuXG4vLyBvY2FtbCBDaGFubmVsc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZShjaGFuaWQsIG5hbWUpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ubmFtZSA9IG5hbWU7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxzXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBBcnJheSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9yZWRpcmVjdCAoY2FwdHVyZWQsIGludG8pe1xuICB2YXIgdG9fcmVzdG9yZSA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2FwdHVyZWQpO1xuICB2YXIgbmV3XyA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoaW50byk7XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2FwdHVyZWRdID0gbmV3XzsgLy8gWFhYXG4gIHJldHVybiB0b19yZXN0b3JlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmUgKGNhcHR1cmVkLCB0b19yZXN0b3JlKXtcbiAgY2FtbF9tbF9jaGFubmVsc1tjYXB0dXJlZF0gPSB0b19yZXN0b3JlOyAvLyBYWFhcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9nZXQoaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHNbaWRdOyAvLyBYWFhcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCAoKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBjID0gMDsgYyA8IGNhbWxfbWxfY2hhbm5lbHMubGVuZ3RoOyBjKyspe1xuICAgIGlmKGNhbWxfbWxfY2hhbm5lbHNbY10gJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vcGVuZWQgJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vdXQpXG4gICAgICBsPVswLGNhbWxfbWxfY2hhbm5lbHNbY10uZmQsbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQgKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZS5mbGFncy5yZG9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgcmVhZG9ubHlcIik7XG4gIHZhciBidWZmZXJlZCA9IChmaWxlLmZsYWdzLmJ1ZmZlcmVkICE9PSB1bmRlZmluZWQpID8gZmlsZS5mbGFncy5idWZmZXJlZCA6IDE7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZmlsZSxcbiAgICBvZmZzZXQ6ZmlsZS5mbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowLFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDp0cnVlLFxuICAgIGJ1ZmZlcl9jdXJyOjAsXG4gICAgYnVmZmVyOm5ldyBVaW50OEFycmF5KDY1NTM2KSxcbiAgICBidWZmZXJlZDpidWZmZXJlZFxuICB9O1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5uZWwuZmRdPWNoYW5uZWw7XG4gIHJldHVybiBjaGFubmVsLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4gKGZkKSAge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUuZmxhZ3Mud3Jvbmx5KSBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiKyBmZCArIFwiIGlzIHdyaXRlb25seVwiKTtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZmlsZSxcbiAgICBvZmZzZXQ6ZmlsZS5mbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowLFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDogZmFsc2UsXG4gICAgYnVmZmVyX2N1cnI6MCxcbiAgICBidWZmZXJfbWF4OjAsXG4gICAgYnVmZmVyOm5ldyBVaW50OEFycmF5KDY1NTM2KSxcbiAgICByZWZpbGw6cmVmaWxsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFnc1xuLy9SZXF1aXJlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbl93aXRoX2ZsYWdzKGZkLCBmbGFncyl7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbihmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vVmVyc2lvbjogPj0gNS4xXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFncyhmZCwgZmxhZ3Mpe1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0KGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vQWxpYXM6IHdpbl9maWxlZGVzY3Jfb2ZfY2hhbm5lbFxuZnVuY3Rpb24gY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3IoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUoY2hhbmlkLG1vZGUpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5maWxlLmZsYWdzLnRleHQgPSAhbW9kZVxuICBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5ID0gbW9kZVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19iaW5hcnlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfbWxfaXNfYmluYXJ5X21vZGUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5maWxlLmZsYWdzLmJpbmFyeVxufVxuXG4vL0lucHV0IGZyb20gaW5fY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2Nsb3NlX2NoYW5uZWxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Nsb3NlXG5mdW5jdGlvbiBjYW1sX21sX2Nsb3NlX2NoYW5uZWwgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoY2hhbi5vcGVuZWQpIHtcbiAgICBjaGFuLm9wZW5lZCA9IGZhbHNlO1xuICAgIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpO1xuICAgIGNoYW4uZmQgPSAtMTtcbiAgICBjaGFuLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUubGVuZ3RoKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplXzY0KGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2hhbi5maWxlLmxlbmd0aCAoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dChjaGFuaWQsZikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5vdXRwdXQgPSAoZnVuY3Rpb24gKHMpIHtmKHMpfSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGwoY2hhbmlkLGYpIHtcbiAgY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpLnJlZmlsbCA9IGY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWZpbGwgKGNoYW4pIHtcbiAgaWYoY2hhbi5yZWZpbGwgIT0gbnVsbCl7XG4gICAgdmFyIHN0ciA9IGNoYW4ucmVmaWxsKCk7XG4gICAgdmFyIHN0cl9hID0gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoc3RyKTtcbiAgICBpZiAoc3RyX2EubGVuZ3RoID09IDApIHtcbiAgICAgIGNoYW4ucmVmaWxsID0gbnVsbFxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKGNoYW4uYnVmZmVyLmxlbmd0aCA8IGNoYW4uYnVmZmVyX21heCArIHN0cl9hLmxlbmd0aCl7XG4gICAgICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKTtcbiAgICAgICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgICAgICBjaGFuLmJ1ZmZlciA9IGI7XG4gICAgICB9XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoc3RyX2EsY2hhbi5idWZmZXJfbWF4KTtcbiAgICAgIGNoYW4ub2Zmc2V0ICs9IHN0cl9hLmxlbmd0aDtcbiAgICAgIGNoYW4uYnVmZmVyX21heCArPSBzdHJfYS5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBucmVhZCA9IGNoYW4uZmlsZS5yZWFkKGNoYW4ub2Zmc2V0LCBjaGFuLmJ1ZmZlciwgY2hhbi5idWZmZXJfbWF4LCBjaGFuLmJ1ZmZlci5sZW5ndGggLSBjaGFuLmJ1ZmZlcl9tYXgpO1xuICAgIGNoYW4ub2Zmc2V0ICs9IG5yZWFkO1xuICAgIGNoYW4uYnVmZmVyX21heCArPSBucmVhZDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0IChjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9iaWdhcnJheSAoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2Jsb2NrIChjaGFuaWQsIGJhLCBpLCBsKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgbiA9IGw7XG4gIHZhciBhdmFpbCA9IGNoYW4uYnVmZmVyX21heCAtIGNoYW4uYnVmZmVyX2N1cnI7XG4gIGlmKGwgPD0gYXZhaWwpIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gbDtcbiAgfVxuICBlbHNlIGlmKGF2YWlsID4gMCkge1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBhdmFpbCksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYXZhaWw7XG4gICAgbiA9IGF2YWlsO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgICBpZihuID4gYXZhaWwpIG4gPSBhdmFpbDtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgbiksIGkpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gbjtcbiAgfVxuICByZXR1cm4gbiB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcywgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmVmaWxsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWUgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgdmFyIGhlYWRlciA9IG5ldyBVaW50OEFycmF5KGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGZ1bmN0aW9uIGJsb2NrKGJ1ZmZlciwgb2Zmc2V0LCBuKSB7XG4gICAgdmFyIHIgPSAwO1xuICAgIHdoaWxlKHIgPCBuKXtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KXtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KVxuICAgICAgICBicmVhaztcbiAgICAgIGJ1ZmZlcltvZmZzZXQrcl0gPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIrKztcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdmFyIHIgPSBibG9jayhoZWFkZXIsIDAsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGlmKHIgPT0gMClcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIGVsc2UgaWYgKHIgPCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB0cnVuY2F0ZWQgb2JqZWN0XCIpO1xuICB2YXIgbGVuID0gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSAoY2FtbF9ieXRlc19vZl9hcnJheShoZWFkZXIpLCAwKTtcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbiArIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSk7XG4gIGJ1Zi5zZXQoaGVhZGVyLDApO1xuICB2YXIgciA9IGJsb2NrKGJ1ZiwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplLCBsZW4pXG4gIGlmKHIgPCBsZW4pXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB0cnVuY2F0ZWQgb2JqZWN0IFwiICsgciArIFwiICBcIiArIGxlbik7XG4gIHZhciBvZmZzZXQgPSBbMF07XG4gIHZhciByZXMgPSBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBvZmZzZXQpO1xuICBjaGFuLm9mZnNldCA9IGNoYW4ub2Zmc2V0ICsgb2Zmc2V0WzBdO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX3RvX291dHNpZGVfaGVhcFxuLy9SZXF1aXJlczogY2FtbF9pbnB1dF92YWx1ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV90b19vdXRzaWRlX2hlYXAoYykge1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZShjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9jaGFyIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KXtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICB9XG4gIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heClcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmJ1ZmZlcltjaGFuLmJ1ZmZlcl9jdXJyXTtcbiAgY2hhbi5idWZmZXJfY3VycisrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9jaGFyLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDQ7IGkrKyl7XG4gICAgcmVzID0gKHJlcyA8PCA4KSArIGNhbWxfbWxfaW5wdXRfY2hhcihjaGFuaWQpIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zZWVrX2luXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9zZWVrX2luKGNoYW5pZCwgcG9zKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJJbGxlZ2FsIHNlZWtcIik7XG4gIGlmKHBvcyA+PSBjaGFuLm9mZnNldCAtIGNoYW4uYnVmZmVyX21heFxuICAgICAmJiBwb3MgPD0gY2hhbi5vZmZzZXRcbiAgICAgJiYgY2hhbi5maWxlLmZsYWdzLmJpbmFyeSkge1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSBjaGFuLmJ1ZmZlcl9tYXggLSAoY2hhbi5vZmZzZXQgLSBwb3MpO1xuICB9IGVsc2Uge1xuICAgIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pblxuLy9SZXF1aXJlczogY2FtbF9zZWVrX2luXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW4oY2hhbmlkLHBvcyl7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9zZWVrX2luXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW5fNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgLSAoY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycikgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pblxuLy9SZXF1aXJlczogY2FtbF9wb3NfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luKGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9wb3NfaW4oY2hhbmlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbl82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9wb3NfaW4oY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX3JlZmlsbFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBwID0gY2hhbi5idWZmZXJfY3VycjtcbiAgZG8ge1xuICAgIGlmKHAgPj0gY2hhbi5idWZmZXJfbWF4KSB7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID4gMCkge1xuICAgICAgICBjaGFuLmJ1ZmZlci5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VyciksMCk7XG4gICAgICAgIHAgLT0gY2hhbi5idWZmZXJfY3VycjtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4IC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgICAgfVxuICAgICAgaWYoY2hhbi5idWZmZXJfbWF4ID49IGNoYW4uYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLShjaGFuLmJ1ZmZlcl9tYXgpIHwgMDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2X21heCA9IGNoYW4uYnVmZmVyX21heDtcbiAgICAgIGNhbWxfcmVmaWxsIChjaGFuKTtcbiAgICAgIGlmKHByZXZfbWF4ID09IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgICByZXR1cm4gLShjaGFuLmJ1ZmZlcl9tYXgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKGNoYW4uYnVmZmVyW3ArK10gIT0gMTApO1xuICByZXR1cm4gKHAgLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3QgZmx1c2ggYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgaWYoIWNoYW4uYnVmZmVyIHx8IGNoYW4uYnVmZmVyX2N1cnIgPT0gMCkgcmV0dXJuIDA7XG4gIGlmKGNoYW4ub3V0cHV0KSB7XG4gICAgY2hhbi5vdXRwdXQoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKSk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5maWxlLndyaXRlKGNoYW4ub2Zmc2V0LCBjaGFuLmJ1ZmZlciwgMCwgY2hhbi5idWZmZXJfY3Vycik7XG4gIH1cbiAgY2hhbi5vZmZzZXQgKz0gY2hhbi5idWZmZXJfY3VycjtcbiAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gIHJldHVybiAwO1xufVxuXG4vL291dHB1dCB0byBvdXRfY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF90YVxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCxjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3Qgb3V0cHV0IHRvIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbik7XG4gIGlmKGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoID4gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShjaGFuLmJ1ZmZlcl9jdXJyICsgYnVmZmVyLmxlbmd0aCk7XG4gICAgYi5zZXQoY2hhbi5idWZmZXIpO1xuICAgIGNoYW4uYnVmZmVyID0gYlxuICB9XG4gIHN3aXRjaChjaGFuLmJ1ZmZlcmVkKXtcbiAgY2FzZSAwOiAvLyBVbmJ1ZmZlcmVkXG4gICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgYnJlYWtcbiAgY2FzZSAxOiAvLyBCdWZmZXJlZCAodGhlIGRlZmF1bHQpXG4gICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKVxuICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICBicmVhaztcbiAgY2FzZSAyOiAvLyBCdWZmZXJlZCAob25seSBmb3Igc3Rkb3V0IGFuZCBzdGRlcnIpXG4gICAgdmFyIGlkID0gYnVmZmVyLmxhc3RJbmRleE9mKDEwKVxuICAgIGlmKGlkIDwgMCkge1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlciwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aClcbiAgICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLnN1YmFycmF5KDAsIGlkICsgMSksIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBpZCArIDE7XG4gICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheShpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aCAtIGlkIC0gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5LCBjYW1sX21sX291dHB1dF90YVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfYmlnYXJyYXkoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBidWZmZXIgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJ1ZmZlcik7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXQoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxjYW1sX2J5dGVzX29mX3N0cmluZyhidWZmZXIpLG9mZnNldCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfY2hhciAoY2hhbmlkLGMpIHtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZywgY2FtbF9tbF9vdXRwdXQsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZSAoY2hhbmlkLHYsZmxhZ3MpIHtcbiAgdmFyIHMgPSBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcodiwgZmxhZ3MpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3Mpe1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm9mZnNldCA9IHBvcztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXQoY2hhbmlkLHBvcyl7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBwb3MgPSBjYW1sX2ludDY0X3RvX2Zsb2F0KHBvcyk7XG4gIHJldHVybiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5vZmZzZXQgKyBjaGFuLmJ1ZmZlcl9jdXJyXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19vdXQoY2hhbmlkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LCBjYW1sX3Bvc19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX291dF82NChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQgKGNhbWxfcG9zX291dChjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2ludCAoY2hhbmlkLGkpIHtcbiAgdmFyIGFyciA9IFsoaT4+MjQpICYgMHhGRiwoaT4+MTYpICYgMHhGRiwoaT4+OCkgJiAweEZGLGkgJiAweEZGIF07XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCw0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA/IDEgOiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2J1ZmZlcmVkXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX21sX3NldF9idWZmZXJlZChjaGFuaWQsdikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkuYnVmZmVyZWQgPSB2O1xuICBpZighdikgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICByZXR1cm4gMFxufVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBUaGUgcnVuLXRpbWUgbGlicmFyeSBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4ICopXG5cbnR5cGUgcG9zaXRpb24gPSB7XG4gIHBvc19mbmFtZSA6IHN0cmluZztcbiAgcG9zX2xudW0gOiBpbnQ7XG4gIHBvc19ib2wgOiBpbnQ7XG4gIHBvc19jbnVtIDogaW50O1xufVxuXG5sZXQgZHVtbXlfcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDA7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IC0xO1xufVxuXG50eXBlIGxleGJ1ZiA9XG4gIHsgcmVmaWxsX2J1ZmYgOiBsZXhidWYgLT4gdW5pdDtcbiAgICBtdXRhYmxlIGxleF9idWZmZXIgOiBieXRlcztcbiAgICBtdXRhYmxlIGxleF9idWZmZXJfbGVuIDogaW50O1xuICAgIG11dGFibGUgbGV4X2Fic19wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2N1cnJfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfYWN0aW9uIDogaW50O1xuICAgIG11dGFibGUgbGV4X2VvZl9yZWFjaGVkIDogYm9vbDtcbiAgICBtdXRhYmxlIGxleF9tZW0gOiBpbnQgYXJyYXk7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcCA6IHBvc2l0aW9uO1xuICAgIG11dGFibGUgbGV4X2N1cnJfcCA6IHBvc2l0aW9uO1xuICB9XG5cbnR5cGUgbGV4X3RhYmxlcyA9XG4gIHsgbGV4X2Jhc2U6IHN0cmluZztcbiAgICBsZXhfYmFja3Ryazogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0OiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrOiBzdHJpbmc7XG4gICAgbGV4X2Jhc2VfY29kZSA6IHN0cmluZztcbiAgICBsZXhfYmFja3Rya19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0X2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NvZGU6IHN0cmluZzt9XG5cbmV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcbmV4dGVybmFsIGNfbmV3X2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9uZXdfbGV4X2VuZ2luZVwiXG5cbmxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cblxubGV0IG5ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX25ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5sZXQgbGV4X3JlZmlsbCByZWFkX2Z1biBhdXhfYnVmZmVyIGxleGJ1ZiA9XG4gIGxldCByZWFkID1cbiAgICByZWFkX2Z1biBhdXhfYnVmZmVyIChCeXRlcy5sZW5ndGggYXV4X2J1ZmZlcikgaW5cbiAgbGV0IG4gPVxuICAgIGlmIHJlYWQgPiAwXG4gICAgdGhlbiByZWFkXG4gICAgZWxzZSAobGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlOyAwKSBpblxuICAoKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBidWZmZXI6XG4gICAgICAgIDwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLT5cbiAgICAgICAgfCAganVuayB8ICAgICAgdmFsaWQgZGF0YSAgICAgfCAgIGp1bmsgICAgfFxuICAgICAgICBeICAgICAgIF4gICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICBeXG4gICAgICAgIDAgICAgc3RhcnRfcG9zICAgICAgICAgICAgIGJ1ZmZlcl9lbmQgICAgQnl0ZXMubGVuZ3RoIGJ1ZmZlclxuICAqKVxuICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuID4gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyIHRoZW4gYmVnaW5cbiAgICAoKiBUaGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgblxuICAgICAgIDw9IEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlclxuICAgIHRoZW4gYmVnaW5cbiAgICAgICgqIEJ1dCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaWYgd2UgcmVjbGFpbSB0aGUganVuayBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICBvZiB0aGUgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBsZXhidWYubGV4X2J1ZmZlciAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICgqIFdlIG11c3QgZ3JvdyB0aGUgYnVmZmVyLiAgRG91YmxpbmcgaXRzIHNpemUgd2lsbCBwcm92aWRlIGVub3VnaFxuICAgICAgICAgc3BhY2Ugc2luY2UgbiA8PSBTdHJpbmcubGVuZ3RoIGF1eF9idWZmZXIgPD0gU3RyaW5nLmxlbmd0aCBidWZmZXIuXG4gICAgICAgICBXYXRjaCBvdXQgZm9yIHN0cmluZyBsZW5ndGggb3ZlcmZsb3csIHRob3VnaC4gKilcbiAgICAgIGxldCBuZXdsZW4gPVxuICAgICAgICBJbnQubWluICgyICogQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgbiA+IG5ld2xlblxuICAgICAgdGhlbiBmYWlsd2l0aCBcIkxleGluZy5sZXhfcmVmaWxsOiBjYW5ub3QgZ3JvdyBidWZmZXJcIjtcbiAgICAgIGxldCBuZXdidWYgPSBCeXRlcy5jcmVhdGUgbmV3bGVuIGluXG4gICAgICAoKiBDb3B5IHRoZSB2YWxpZCBkYXRhIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ldyBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIG5ld2J1ZiAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpO1xuICAgICAgbGV4YnVmLmxleF9idWZmZXIgPC0gbmV3YnVmXG4gICAgZW5kO1xuICAgICgqIFJlYWxsb2NhdGlvbiBvciBub3QsIHdlIGhhdmUgc2hpZnRlZCB0aGUgZGF0YSBsZWZ0IGJ5XG4gICAgICAgc3RhcnRfcG9zIGNoYXJhY3RlcnM7IHVwZGF0ZSB0aGUgcG9zaXRpb25zICopXG4gICAgbGV0IHMgPSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICAgIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBsZXhidWYubGV4X2Fic19wb3MgKyBzO1xuICAgIGxleGJ1Zi5sZXhfY3Vycl9wb3MgPC0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9zdGFydF9wb3MgPC0gMDtcbiAgICBsZXhidWYubGV4X2xhc3RfcG9zIDwtIGxleGJ1Zi5sZXhfbGFzdF9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBzIDtcbiAgICBsZXQgdCA9IGxleGJ1Zi5sZXhfbWVtIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCB0LTEgZG9cbiAgICAgIGxldCB2ID0gdC4oaSkgaW5cbiAgICAgIGlmIHYgPj0gMCB0aGVuXG4gICAgICAgIHQuKGkpIDwtIHYtc1xuICAgIGRvbmVcbiAgZW5kO1xuICAoKiBUaGVyZSBpcyBub3cgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICBCeXRlcy5ibGl0IGF1eF9idWZmZXIgMCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X2J1ZmZlcl9sZW4gbjtcbiAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG5cblxubGV0IHplcm9fcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDE7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IDA7XG59XG5cbmxldCBmcm9tX2Z1bmN0aW9uID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBmID1cbiAgeyByZWZpbGxfYnVmZiA9IGxleF9yZWZpbGwgZiAoQnl0ZXMuY3JlYXRlIDUxMik7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAxMDI0O1xuICAgIGxleF9idWZmZXJfbGVuID0gMDtcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gZmFsc2U7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBmcm9tX2NoYW5uZWwgP3dpdGhfcG9zaXRpb25zIGljID1cbiAgZnJvbV9mdW5jdGlvbiA/d2l0aF9wb3NpdGlvbnMgKGZ1biBidWYgbiAtPiBpbnB1dCBpYyBidWYgMCBuKVxuXG5sZXQgZnJvbV9zdHJpbmcgPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIHMgPVxuICB7IHJlZmlsbF9idWZmID0gKGZ1biBsZXhidWYgLT4gbGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMub2Zfc3RyaW5nIHM7ICgqIGhhdmUgdG8gbWFrZSBhIGNvcHkgZm9yIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdW5zYWZlLXN0cmluZyBtb2RlICopXG4gICAgbGV4X2J1ZmZlcl9sZW4gPSBTdHJpbmcubGVuZ3RoIHM7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IHRydWU7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBzZXRfcG9zaXRpb24gbGV4YnVmIHBvc2l0aW9uID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgIDwtIHtwb3NpdGlvbiB3aXRoIHBvc19mbmFtZSA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19mbmFtZX07XG4gIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBwb3NpdGlvbi5wb3NfY251bVxuXG5sZXQgc2V0X2ZpbGVuYW1lIGxleGJ1ZiBmbmFtZSA9XG4gIGxleGJ1Zi5sZXhfY3Vycl9wIDwtIHtsZXhidWYubGV4X2N1cnJfcCB3aXRoIHBvc19mbmFtZSA9IGZuYW1lfVxuXG5sZXQgd2l0aF9wb3NpdGlvbnMgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zXG5cbmxldCBsZXhlbWUgbGV4YnVmID1cbiAgbGV0IGxlbiA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGxlblxuXG5sZXQgc3ViX2xleGVtZSBsZXhidWYgaTEgaTIgPVxuICBsZXQgbGVuID0gaTItaTEgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW5cblxubGV0IHN1Yl9sZXhlbWVfb3B0IGxleGJ1ZiBpMSBpMiA9XG4gIGlmIGkxID49IDAgdGhlbiBiZWdpblxuICAgIGxldCBsZW4gPSBpMi1pMSBpblxuICAgIFNvbWUgKEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuKVxuICBlbmQgZWxzZSBiZWdpblxuICAgIE5vbmVcbiAgZW5kXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPSBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaVxuXG5sZXQgc3ViX2xleGVtZV9jaGFyX29wdCBsZXhidWYgaSA9XG4gIGlmIGkgPj0gMCB0aGVuXG4gICAgU29tZSAoQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGkpXG4gIGVsc2VcbiAgICBOb25lXG5cblxubGV0IGxleGVtZV9jaGFyIGxleGJ1ZiBpID1cbiAgQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIChsZXhidWYubGV4X3N0YXJ0X3BvcyArIGkpXG5cbmxldCBsZXhlbWVfc3RhcnQgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wLnBvc19jbnVtXG5sZXQgbGV4ZW1lX2VuZCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfY251bVxuXG5sZXQgbGV4ZW1lX3N0YXJ0X3AgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wXG5sZXQgbGV4ZW1lX2VuZF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wXG5cbmxldCBuZXdfbGluZSBsZXhidWYgPVxuICBsZXQgbGNwID0gbGV4YnVmLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGV4YnVmLmxleF9jdXJyX3AgPC1cbiAgICAgIHsgbGNwIHdpdGhcbiAgICAgICAgcG9zX2xudW0gPSBsY3AucG9zX2xudW0gKyAxO1xuICAgICAgICBwb3NfYm9sID0gbGNwLnBvc19jbnVtO1xuICAgICAgfVxuXG5cblxuKCogRGlzY2FyZCBkYXRhIGxlZnQgaW4gbGV4ZXIgYnVmZmVyLiAqKVxuXG5sZXQgZmx1c2hfaW5wdXQgbGIgPVxuICBsYi5sZXhfY3Vycl9wb3MgPC0gMDtcbiAgbGIubGV4X2Fic19wb3MgPC0gMDtcbiAgbGV0IGxjcCA9IGxiLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGIubGV4X2N1cnJfcCA8LSB7emVyb19wb3Mgd2l0aCBwb3NfZm5hbWUgPSBsY3AucG9zX2ZuYW1lfTtcbiAgbGIubGV4X2J1ZmZlcl9sZW4gPC0gMDtcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBQcmludGZcblxudHlwZSB0ID0gZXhuID0gLi5cblxubGV0IHByaW50ZXJzID0gQXRvbWljLm1ha2UgW11cblxubGV0IGxvY2ZtdCA9IGZvcm1hdF9vZl9zdHJpbmcgXCJGaWxlIFxcXCIlc1xcXCIsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWQ6ICVzXCJcblxubGV0IGZpZWxkIHggaSA9XG4gIGxldCBmID0gT2JqLmZpZWxkIHggaSBpblxuICBpZiBub3QgKE9iai5pc19ibG9jayBmKSB0aGVuXG4gICAgc3ByaW50ZiBcIiVkXCIgKE9iai5tYWdpYyBmIDogaW50KSAgICAgICAgICAgKCogY2FuIGFsc28gYmUgYSBjaGFyICopXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLnN0cmluZ190YWcgdGhlblxuICAgIHNwcmludGYgXCIlU1wiIChPYmoubWFnaWMgZiA6IHN0cmluZylcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouZG91YmxlX3RhZyB0aGVuXG4gICAgc3RyaW5nX29mX2Zsb2F0IChPYmoubWFnaWMgZiA6IGZsb2F0KVxuICBlbHNlXG4gICAgXCJfXCJcblxubGV0IHJlYyBvdGhlcl9maWVsZHMgeCBpID1cbiAgaWYgaSA+PSBPYmouc2l6ZSB4IHRoZW4gXCJcIlxuICBlbHNlIHNwcmludGYgXCIsICVzJXNcIiAoZmllbGQgeCBpKSAob3RoZXJfZmllbGRzIHggKGkrMSkpXG5cbmxldCBmaWVsZHMgeCA9XG4gIG1hdGNoIE9iai5zaXplIHggd2l0aFxuICB8IDAgLT4gXCJcIlxuICB8IDEgLT4gXCJcIlxuICB8IDIgLT4gc3ByaW50ZiBcIiglcylcIiAoZmllbGQgeCAxKVxuICB8IF8gLT4gc3ByaW50ZiBcIiglcyVzKVwiIChmaWVsZCB4IDEpIChvdGhlcl9maWVsZHMgeCAyKVxuXG5sZXQgdXNlX3ByaW50ZXJzIHggPVxuICBsZXQgcmVjIGNvbnYgPSBmdW5jdGlvblxuICAgIHwgaGQgOjogdGwgLT5cbiAgICAgICAgKG1hdGNoIGhkIHggd2l0aFxuICAgICAgICAgfCBOb25lIHwgZXhjZXB0aW9uIF8gLT4gY29udiB0bFxuICAgICAgICAgfCBTb21lIHMgLT4gU29tZSBzKVxuICAgIHwgW10gLT4gTm9uZSBpblxuICBjb252IChBdG9taWMuZ2V0IHByaW50ZXJzKVxuXG5sZXQgdG9fc3RyaW5nX2RlZmF1bHQgPSBmdW5jdGlvblxuICB8IE91dF9vZl9tZW1vcnkgLT4gXCJPdXQgb2YgbWVtb3J5XCJcbiAgfCBTdGFja19vdmVyZmxvdyAtPiBcIlN0YWNrIG92ZXJmbG93XCJcbiAgfCBNYXRjaF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis1KSBcIlBhdHRlcm4gbWF0Y2hpbmcgZmFpbGVkXCJcbiAgfCBBc3NlcnRfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJBc3NlcnRpb24gZmFpbGVkXCJcbiAgfCBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJVbmRlZmluZWQgcmVjdXJzaXZlIG1vZHVsZVwiXG4gIHwgeCAtPlxuICAgICAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gICAgICBpZiBPYmoudGFnIHggPD4gMCB0aGVuXG4gICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCB4IDApIDogc3RyaW5nKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgY29uc3RydWN0b3IgPVxuICAgICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCAoT2JqLmZpZWxkIHggMCkgMCkgOiBzdHJpbmcpIGluXG4gICAgICAgIGNvbnN0cnVjdG9yIF4gKGZpZWxkcyB4KVxuXG5sZXQgdG9fc3RyaW5nIGUgPVxuICBtYXRjaCB1c2VfcHJpbnRlcnMgZSB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IHRvX3N0cmluZ19kZWZhdWx0IGVcblxubGV0IHByaW50IGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBmbHVzaCBzdGRlcnI7XG4gICAgcmFpc2UgeFxuXG5sZXQgY2F0Y2ggZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZmx1c2ggc3Rkb3V0O1xuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBleGl0IDJcblxudHlwZSByYXdfYmFja3RyYWNlX3Nsb3RcbnR5cGUgcmF3X2JhY2t0cmFjZV9lbnRyeSA9IHByaXZhdGUgaW50XG50eXBlIHJhd19iYWNrdHJhY2UgPSByYXdfYmFja3RyYWNlX2VudHJ5IGFycmF5XG5cbmxldCByYXdfYmFja3RyYWNlX2VudHJpZXMgYnQgPSBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZTpcbiAgdW5pdCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZVwiXG5cbmV4dGVybmFsIHJhaXNlX3dpdGhfYmFja3RyYWNlOiBleG4gLT4gcmF3X2JhY2t0cmFjZSAtPiAnYVxuICA9IFwiJXJhaXNlX3dpdGhfYmFja3RyYWNlXCJcblxudHlwZSBiYWNrdHJhY2Vfc2xvdCA9XG4gIHwgS25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgICAgOiBib29sO1xuICAgICAgZmlsZW5hbWUgICAgOiBzdHJpbmc7XG4gICAgICBsaW5lX251bWJlciA6IGludDtcbiAgICAgIHN0YXJ0X2NoYXIgIDogaW50O1xuICAgICAgZW5kX2NoYXIgICAgOiBpbnQ7XG4gICAgICBpc19pbmxpbmUgICA6IGJvb2w7XG4gICAgICBkZWZuYW1lICAgICA6IHN0cmluZztcbiAgICB9XG4gIHwgVW5rbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSA6IGJvb2xcbiAgICB9XG5cbigqIHRvIGF2b2lkIHdhcm5pbmcgKilcbmxldCBfID0gW0tub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZTsgZmlsZW5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bWJlciA9IDA7IHN0YXJ0X2NoYXIgPSAwOyBlbmRfY2hhciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2lubGluZSA9IGZhbHNlOyBkZWZuYW1lID0gXCJcIiB9O1xuICAgICAgICAgVW5rbm93bl9sb2NhdGlvbiB7IGlzX3JhaXNlID0gZmFsc2UgfV1cblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Q6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiBiYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZTpcbiAgcmF3X2JhY2t0cmFjZSAtPiBiYWNrdHJhY2Vfc2xvdCBhcnJheSA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2VcIlxuXG5sZXQgY29udmVydF9yYXdfYmFja3RyYWNlIGJ0ID1cbiAgdHJ5IFNvbWUgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidClcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgZm9ybWF0X2JhY2t0cmFjZV9zbG90IHBvcyBzbG90ID1cbiAgbGV0IGluZm8gaXNfcmFpc2UgPVxuICAgIGlmIGlzX3JhaXNlIHRoZW5cbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBhdFwiIGVsc2UgXCJSZS1yYWlzZWQgYXRcIlxuICAgIGVsc2VcbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBieSBwcmltaXRpdmUgb3BlcmF0aW9uIGF0XCIgZWxzZSBcIkNhbGxlZCBmcm9tXCJcbiAgaW5cbiAgbWF0Y2ggc2xvdCB3aXRoXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBpZiBsLmlzX3JhaXNlIHRoZW5cbiAgICAgICAgKCogY29tcGlsZXItaW5zZXJ0ZWQgcmUtcmFpc2UsIHNraXBwZWQgKikgTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBTb21lIChzcHJpbnRmIFwiJXMgdW5rbm93biBsb2NhdGlvblwiIChpbmZvIGZhbHNlKSlcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBTb21lIChzcHJpbnRmIFwiJXMgJXMgaW4gZmlsZSBcXFwiJXNcXFwiJXMsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWRcIlxuICAgICAgICAgICAgICAoaW5mbyBsLmlzX3JhaXNlKSBsLmRlZm5hbWUgbC5maWxlbmFtZVxuICAgICAgICAgICAgICAoaWYgbC5pc19pbmxpbmUgdGhlbiBcIiAoaW5saW5lZClcIiBlbHNlIFwiXCIpXG4gICAgICAgICAgICAgIGwubGluZV9udW1iZXIgbC5zdGFydF9jaGFyIGwuZW5kX2NoYXIpXG5cbmxldCBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgICBmcHJpbnRmIG91dGNoYW5cbiAgICAgICAgXCIoUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIGNhbm5vdCBwcmludCBzdGFjayBiYWNrdHJhY2UpXFxuXCJcbiAgfCBTb21lIGEgLT5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gZnByaW50ZiBvdXRjaGFuIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmVcblxubGV0IHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiByYXdfYmFja3RyYWNlID1cbiAgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSlcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6IHByaW50cyB0aGUgZ2xvYmFsIGN1cnJlbnQgYmFja3RyYWNlICopXG5sZXQgcHJpbnRfYmFja3RyYWNlIG91dGNoYW4gPVxuICBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5sZXQgYmFja3RyYWNlX3RvX3N0cmluZyBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgXCIoUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIGNhbm5vdCBwcmludCBzdGFjayBiYWNrdHJhY2UpXFxuXCJcbiAgfCBTb21lIGEgLT5cbiAgICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAxMDI0IGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGJwcmludGYgYiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIHJhd19iYWNrdHJhY2UgPVxuICBiYWNrdHJhY2VfdG9fc3RyaW5nIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSlcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlID0gZnVuY3Rpb25cbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lID0gZnVuY3Rpb25cbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfaW5saW5lXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG5cbnR5cGUgbG9jYXRpb24gPSB7XG4gIGZpbGVuYW1lIDogc3RyaW5nO1xuICBsaW5lX251bWJlciA6IGludDtcbiAgc3RhcnRfY2hhciA6IGludDtcbiAgZW5kX2NoYXIgOiBpbnQ7XG59XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvbiA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgU29tZSB7XG4gICAgICBmaWxlbmFtZSAgICA9IGwuZmlsZW5hbWU7XG4gICAgICBsaW5lX251bWJlciA9IGwubGluZV9udW1iZXI7XG4gICAgICBzdGFydF9jaGFyICA9IGwuc3RhcnRfY2hhcjtcbiAgICAgIGVuZF9jaGFyICAgID0gbC5lbmRfY2hhcjtcbiAgICB9XG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF9cbiAgfCBLbm93bl9sb2NhdGlvbiB7IGRlZm5hbWUgPSBcIlwiIH0gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gU29tZSBsLmRlZm5hbWVcblxubGV0IGJhY2t0cmFjZV9zbG90cyByYXdfYmFja3RyYWNlID1cbiAgKCogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgU29tZSBpc1xuICAgICByZXR1cm5lZCBvbmx5IGlmIGEgcGFydCBvZiB0aGUgdHJhY2UgaXMgdXNhYmxlLiBUaGlzIGdpdmVzIHVzXG4gICAgIGEgYml0IG1vcmUgd29yayB0aGFuIGp1c3QgY29udmVydF9yYXdfYmFja3RyYWNlLCBidXQgaXQgbWFrZXMgdGhlXG4gICAgIEFQSSBtb3JlIHVzZXItZnJpZW5kbHkgLS0gb3RoZXJ3aXNlIG1vc3QgdXNlcnMgd291bGQgaGF2ZSB0b1xuICAgICByZWltcGxlbWVudCB0aGUgXCJQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgc29ycnlcIiBsb2dpY1xuICAgICB0aGVtc2VsdmVzLiAqKVxuICBtYXRjaCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgYmFja3RyYWNlIC0+XG4gICAgICBsZXQgdXNhYmxlX3Nsb3QgPSBmdW5jdGlvblxuICAgICAgICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuICAgICAgICB8IEtub3duX2xvY2F0aW9uIF8gLT4gdHJ1ZSBpblxuICAgICAgbGV0IHJlYyBleGlzdHNfdXNhYmxlID0gZnVuY3Rpb25cbiAgICAgICAgfCAoLTEpIC0+IGZhbHNlXG4gICAgICAgIHwgaSAtPiB1c2FibGVfc2xvdCBiYWNrdHJhY2UuKGkpIHx8IGV4aXN0c191c2FibGUgKGkgLSAxKSBpblxuICAgICAgaWYgZXhpc3RzX3VzYWJsZSAoQXJyYXkubGVuZ3RoIGJhY2t0cmFjZSAtIDEpXG4gICAgICB0aGVuIFNvbWUgYmFja3RyYWNlXG4gICAgICBlbHNlIE5vbmVcblxubGV0IGJhY2t0cmFjZV9zbG90c19vZl9yYXdfZW50cnkgZW50cnkgPVxuICBiYWNrdHJhY2Vfc2xvdHMgW3wgZW50cnkgfF1cblxubW9kdWxlIFNsb3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGZvcm1hdCA9IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdFxuICBsZXQgaXNfcmFpc2UgPSBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZVxuICBsZXQgaXNfaW5saW5lID0gYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lXG4gIGxldCBsb2NhdGlvbiA9IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uXG4gIGxldCBuYW1lID0gYmFja3RyYWNlX3Nsb3RfZGVmbmFtZVxuZW5kXG5cbmxldCByYXdfYmFja3RyYWNlX2xlbmd0aCBidCA9IEFycmF5Lmxlbmd0aCBidFxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZSAtPiBpbnQgLT4gcmF3X2JhY2t0cmFjZV9zbG90ID0gXCJjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiByYXdfYmFja3RyYWNlX3Nsb3Qgb3B0aW9uXG4gID0gXCJjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XCJcblxuKCogY29uZnVzaW5nbHkgbmFtZWQ6XG4gICByZXR1cm5zIHRoZSAqc3RyaW5nKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBnZXRfYmFja3RyYWNlICgpID0gcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgKGdldF9yYXdfYmFja3RyYWNlICgpKVxuXG5leHRlcm5hbCByZWNvcmRfYmFja3RyYWNlOiBib29sIC0+IHVuaXQgPSBcImNhbWxfcmVjb3JkX2JhY2t0cmFjZVwiXG5leHRlcm5hbCBiYWNrdHJhY2Vfc3RhdHVzOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfYmFja3RyYWNlX3N0YXR1c1wiXG5cbmxldCByZWMgcmVnaXN0ZXJfcHJpbnRlciBmbiA9XG4gIGxldCBvbGRfcHJpbnRlcnMgPSBBdG9taWMuZ2V0IHByaW50ZXJzIGluXG4gIGxldCBuZXdfcHJpbnRlcnMgPSBmbiA6OiBvbGRfcHJpbnRlcnMgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IHByaW50ZXJzIG9sZF9wcmludGVycyBuZXdfcHJpbnRlcnMgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiByZWdpc3Rlcl9wcmludGVyIGZuXG5cbmV4dGVybmFsIGdldF9jYWxsc3RhY2s6IGludCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFja1wiXG5cbmxldCBleG5fc2xvdCB4ID1cbiAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gIGlmIE9iai50YWcgeCA9IDAgdGhlbiBPYmouZmllbGQgeCAwIGVsc2UgeFxuXG5sZXQgZXhuX3Nsb3RfaWQgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMSkgOiBpbnQpXG5cbmxldCBleG5fc2xvdF9uYW1lIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDApIDogc3RyaW5nKVxuXG5leHRlcm5hbCBnZXRfZGVidWdfaW5mb19zdGF0dXMgOiB1bml0IC0+IGludCA9IFwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1c1wiXG5cbigqIERlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHN0YXJ0dXAuaC4gU2VlIGFsc28gYmFja3RyYWNlLmMgKilcbmxldCBlcnJvcnMgPSBbfCBcIlwiO1xuICAoKiBGSUxFX05PVF9GT1VORCAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgbm90IGZvdW5kKVwiO1xuICAoKiBCQURfQllURUNPREUgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGFwcGVhcnMgdG8gYmUgY29ycnVwdClcIjtcbiAgKCogV1JPTkdfTUFHSUMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIpXCI7XG4gICgqIE5PX0ZEUyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgY2Fubm90IGJlIG9wZW5lZDtcXG4gXFxcbiAgICAgIC0tIHRvbyBtYW55IG9wZW4gZmlsZXMuIFRyeSBydW5uaW5nIHdpdGggT0NBTUxSVU5QQVJBTT1iPTIpXCJcbnxdXG5cbmxldCBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlID1cbiAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gIGxldCBzdGF0dXMgPSBnZXRfZGVidWdfaW5mb19zdGF0dXMgKCkgaW5cbiAgaWYgc3RhdHVzIDwgMCB0aGVuXG4gICAgcHJlcnJfZW5kbGluZSBlcnJvcnMuKGFicyBzdGF0dXMpO1xuICBmbHVzaCBzdGRlcnJcblxubGV0IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyID0gcmVmIGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXJcblxubGV0IHNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBmbiA9IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIDo9IGZuXG5cbmxldCBlbXB0eV9iYWNrdHJhY2UgOiByYXdfYmFja3RyYWNlID0gW3wgfF1cblxubGV0IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSA9XG4gIHRyeVxuICAgIGdldF9yYXdfYmFja3RyYWNlICgpXG4gIHdpdGggXyAoKiBPdXRfb2ZfbWVtb3J5PyAqKSAtPlxuICAgIGVtcHR5X2JhY2t0cmFjZVxuXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgICgqIEdldCB0aGUgYmFja3RyYWNlIG5vdywgaW4gY2FzZSBvbmUgb2YgdGhlIFthdF9leGl0XSBmdW5jdGlvblxuICAgICAgIGRlc3Ryb3lzIGl0LiAqKVxuICAgIGxldCByYXdfYmFja3RyYWNlID1cbiAgICAgIGlmIGRlYnVnZ2VyX2luX3VzZSAoKiBTYW1lIHRlc3QgYXMgaW4gW3J1bnRpbWUvcHJpbnRleGMuY10gKikgdGhlblxuICAgICAgICBlbXB0eV9iYWNrdHJhY2VcbiAgICAgIGVsc2VcbiAgICAgICAgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpXG4gICAgaW5cbiAgICAodHJ5IFN0ZGxpYi5kb19hdF9leGl0ICgpIHdpdGggXyAtPiAoKSk7XG4gICAgdHJ5XG4gICAgICAhdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2VcbiAgICB3aXRoIGV4bicgLT5cbiAgICAgIGxldCByYXdfYmFja3RyYWNlJyA9IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yIGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyOiBleGNlcHRpb24gJXNcXG5cIlxuICAgICAgICAodG9fc3RyaW5nIGV4bicpO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZSc7XG4gICAgICBmbHVzaCBzdGRlcnJcbiAgd2l0aFxuICAgIHwgT3V0X29mX21lbW9yeSAtPlxuICAgICAgICBwcmVycl9lbmRsaW5lXG4gICAgICAgICAgXCJGYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlclwiXG5cbigqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFtjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbl0gaW5cbiAgIFtydW50aW1lL3ByaW50ZXhjLmNdIHdoaWNoIGV4cGVjdHMgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlXG4gIHdpdGggXyAtPlxuICAgICgqIFRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICopXG4gICAgKClcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiXG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblxuIiwiIyAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiBcbiAgbW9kdWxlIExleGluZyA9IHN0cnVjdFxuICAgICgqIE92ZXJyaWRlIHRoZSBMZXhpbmcuZW5naW5lIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IHBvc2l0aW9uIHJlY29yZFxuICAgICAgIGVhY2ggdGltZSBhIHJ1bGUgaXMgbWF0Y2hlZC4gUmVkdWNlcyB0b3RhbCBwYXJzZSB0aW1lIGJ5IGFyb3VuZCAzMCUuXG4gICAgICAgSWRlYSBzdG9sZW4gZnJvbSB5b2pzb24gKilcblxuICAgIGluY2x1ZGUgTGV4aW5nXG5cbiAgICBleHRlcm5hbCBjX2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnQgPSBcImNhbWxfbGV4X2VuZ2luZVwiXG5cbiAgICBsZXQgZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICAgICAgbGV0IHJlc3VsdCA9IGNfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgICAgICgqXG4gICAgICBpZiByZXN1bHQgPj0gMCB0aGVuIGJlZ2luXG4gICAgICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICAgICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gICAgICBlbmQ7XG4gICAgICAqKVxuICAgICAgcmVzdWx0XG4gIGVuZFxuICBvcGVuIFRva2Vuc1xuXG5cbiAgbW9kdWxlIHR5cGUgTGV4ID0gc2lnXG4gICAgdmFsIHJlYWQgOiBMZXhpbmcubGV4YnVmIC0+IFRva2Vucy50b2tlblxuICBlbmRcblxuICBtb2R1bGUgTWFrZSAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgOiBMZXggPSBzdHJ1Y3RcblxuIyAzMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbmxldCBfX29jYW1sX2xleF90YWJsZXMgPSB7XG4gIExleGluZy5sZXhfYmFzZSA9XG4gICBcIlxcMDAwXFwwMDBcXDIyOVxcMjU1XFwwMTdcXDAwMFxcMjMyXFwyNTVcXDAwM1xcMDAwXFwyMzRcXDI1NVxcMTI2XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDExM1xcMDAwXFwwMDBcXDAwMFxcMDAxXFwwMDBcXDAwMVxcMDAwXFwwMDJcXDAwMFxcMTIzXFwwMDBcXDI0M1xcMjU1XFwyNDRcXDI1NVxcXG4gICAgXFwyNDVcXDI1NVxcMjQ2XFwyNTVcXDI0N1xcMjU1XFwyNDhcXDI1NVxcMjQ5XFwyNTVcXDI1MFxcMjU1XFwyNTFcXDI1NVxcMjUyXFwyNTVcXFxuICAgIFxcMDAxXFwwMDBcXDAwMlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwM1xcMDAwXFwyNTRcXDI1NVxcMDAzXFwwMDBcXDAwMVxcMDAwXFwwMTFcXDAwMFxcMjUzXFwyNTVcXDIzOVxcMjU1XFwwMDNcXDAwMFxcXG4gICAgXFwwMTBcXDAwMFxcMDExXFwwMDBcXDAwNVxcMDAwXFwyNDJcXDI1NVxcMDIwXFwwMDBcXDAxOVxcMDAwXFwwNDhcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDY3XFwwMDBcXDA2M1xcMDAwXFwwNzVcXDAwMFxcMDg0XFwwMDBcXDI0MVxcMjU1XFwwODVcXDAwMFxcMDgzXFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwNzVcXDAwMFxcMDcxXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDkzXFwwMDBcXDI0MFxcMjU1XFwwOTVcXDAwMFxcXG4gICAgXFwwOTNcXDAwMFxcMDg5XFwwMDBcXDA5NVxcMDAwXFwwODVcXDAwMFxcMDgxXFwwMDBcXDAwMVxcMDAwXFwwMzJcXDAwMFxcMTU1XFwwMDBcXFxuICAgIFxcMTg2XFwwMDBcXDIwOVxcMDAwXFwyMTlcXDAwMFxcMjI5XFwwMDBcXDI0MFxcMDAwXFwyNTBcXDAwMFxcMDE4XFwwMDFcXDA2NlxcMDAxXFxcbiAgICBcXDIzNlxcMjU1XFwyMzVcXDI1NVxcMDk0XFwwMDFcXDExN1xcMDAxXFwxNTVcXDAwMVxcMTc4XFwwMDFcXDA1M1xcMDAwXFwyMzFcXDI1NVxcXG4gICAgXFwwODhcXDAwMVxcMjUyXFwyNTVcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMDE0XFwwMDBcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfYmFja3RyayA9XG4gICBcIlxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMjZcXDAwMFxcMjU1XFwyNTVcXDAyMlxcMDAwXFwyNTVcXDI1NVxcMDI2XFwwMDBcXDAxN1xcMDAwXFxcbiAgICBcXDAxN1xcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDE4XFwwMDBcXDI1NVxcMjU1XFwwMThcXDAwMFxcMjU1XFwyNTVcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAyNVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAzXFwwMDBcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfZGVmYXVsdCA9XG4gICBcIlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NlxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwODlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfdHJhbnMgPVxuICAgXCJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDA0XFwwMDBcXDAwM1xcMDAwXFwwMDBcXDAwMFxcMDA0XFwwMDBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwNlxcMDAwXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDE5XFwwMDBcXDAxOFxcMDAwXFwwMDBcXDAwMFxcMDEwXFwwMDBcXDAxNVxcMDAwXFwwMTNcXDAwMFxcMDcxXFwwMDBcXDAwMlxcMDAwXFxcbiAgICBcXDAwN1xcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAxNFxcMDAwXFwwODdcXDAwMFxcMDE3XFwwMDBcXDA5M1xcMDAwXFwwMTZcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDg2XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcMDU5XFwwMDBcXDA3N1xcMDAwXFwwMDBcXDAwMFxcMDc3XFwwMDBcXDAwOVxcMDAwXFwwMzhcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwMDBcXDAwMFxcMDIxXFwwMDBcXDAwMFxcMDAwXFwwMjBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNjlcXDAwMFxcMDM0XFwwMDBcXDAzMFxcMDAwXFwwNTBcXDAwMFxcMDcwXFwwMDBcXDAyNVxcMDAwXFwwMjlcXDAwMFxcXG4gICAgXFwwMzNcXDAwMFxcMDEyXFwwMDBcXDA2MFxcMDAwXFwwNDNcXDAwMFxcMDMxXFwwMDBcXDAzNlxcMDAwXFwwMjRcXDAwMFxcMDUzXFwwMDBcXFxuICAgIFxcMDUxXFwwMDBcXDAzOFxcMDAwXFwwMjdcXDAwMFxcMDMyXFwwMDBcXDAyNlxcMDAwXFwwMjhcXDAwMFxcMDM1XFwwMDBcXDAzN1xcMDAwXFxcbiAgICBcXDA0NFxcMDAwXFwwNDJcXDAwMFxcMDQ1XFwwMDBcXDAyM1xcMDAwXFwwNDZcXDAwMFxcMDIyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNDdcXDAwMFxcMDcxXFwwMDBcXFxuICAgIFxcMDgwXFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwN1xcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDA0OFxcMDAwXFwwNzBcXDAwMFxcMDQ5XFwwMDBcXFxuICAgIFxcMDQzXFwwMDBcXDAzOFxcMDAwXFwwNTJcXDAwMFxcMDU0XFwwMDBcXDA1NVxcMDAwXFwwNTZcXDAwMFxcMDU3XFwwMDBcXDA1OFxcMDAwXFxcbiAgICBcXDA1MlxcMDAwXFwwNjNcXDAwMFxcMDYxXFwwMDBcXDA2MlxcMDAwXFwwNDBcXDAwMFxcMDY0XFwwMDBcXDA2NVxcMDAwXFwwNjZcXDAwMFxcXG4gICAgXFwwNjdcXDAwMFxcMDY4XFwwMDBcXDA2MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwMDBcXDAwMFxcMDcwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc4XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDQxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAzOVxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc1XFwwMDBcXDAwMFxcMDAwXFwwNzVcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDA1XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwOTFcXDAwMFxcMDAwXFwwMDBcXDA4MVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDkyXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OFxcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDAwMFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA5MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X2NoZWNrID1cbiAgIFwiXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwNFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDA0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwN1xcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAyXFwwMDBcXDAwMFxcMDAwXFwwOTJcXDAwMFxcMDAwXFwwMDBcXDA4NlxcMDAwXFxcbiAgICBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA3XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwNzBcXDAwMFxcMjU1XFwyNTVcXDA3MFxcMDAwXFwwMDBcXDAwMFxcMDY5XFwwMDBcXFxuICAgIFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFxcbiAgICBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDA5XFwwMDBcXDAyNFxcMDAwXFwwMjVcXDAwMFxcMDM5XFwwMDBcXDAwN1xcMDAwXFwwMDBcXDAwMFxcMDI4XFwwMDBcXFxuICAgIFxcMDMyXFwwMDBcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDQyXFwwMDBcXDAzMFxcMDAwXFwwMzVcXDAwMFxcMDAwXFwwMDBcXDAxMVxcMDAwXFxcbiAgICBcXDAxMlxcMDAwXFwwMzRcXDAwMFxcMDI2XFwwMDBcXDAzMVxcMDAwXFwwMDBcXDAwMFxcMDI3XFwwMDBcXDAyNFxcMDAwXFwwMzZcXDAwMFxcXG4gICAgXFwwNDBcXDAwMFxcMDQxXFwwMDBcXDA0NFxcMDAwXFwwMDBcXDAwMFxcMDQ1XFwwMDBcXDAwMFxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDQ2XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXFxuICAgIFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwNDdcXDAwMFxcMDA4XFwwMDBcXDA0OFxcMDAwXFxcbiAgICBcXDA0OVxcMDAwXFwwNTBcXDAwMFxcMDUxXFwwMDBcXDA1M1xcMDAwXFwwNTRcXDAwMFxcMDU1XFwwMDBcXDA1NlxcMDAwXFwwNTdcXDAwMFxcXG4gICAgXFwwNThcXDAwMFxcMDU5XFwwMDBcXDA2MFxcMDAwXFwwNjFcXDAwMFxcMDEzXFwwMDBcXDA2M1xcMDAwXFwwNjRcXDAwMFxcMDY1XFwwMDBcXFxuICAgIFxcMDY2XFwwMDBcXDA2N1xcMDAwXFwwNjhcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMjU1XFwyNTVcXDAwOFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAxM1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMTNcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3M1xcMDAwXFwyNTVcXDI1NVxcMDczXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFxcbiAgICBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFxcbiAgICBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzhcXDAwMFxcMDg2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDg4XFwwMDBcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwNlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwNzhcXDAwMFxcMjU1XFwyNTVcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMDc4XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgyXFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwyNTVcXDI1NVxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwODhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYXNlX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0X2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF90cmFuc19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY2hlY2tfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NvZGUgPVxuICAgXCJcIjtcbn1cblxubGV0IHJlYyByZWFkIGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgMFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQk9PTCB0cnVlIClcbiMgMjcxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMSAtPlxuIyA1OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBCT09MIGZhbHNlIClcbiMgMjc2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMiAtPlxuIyA2MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBOVUxMIClcbiMgMjgxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMyAtPlxuIyA2MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBPUyApXG4jIDI4NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDQgLT5cbiMgNjUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggT0UgKVxuIyAyOTEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA1IC0+XG4jIDY3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEFTIClcbiMgMjk2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNiAtPlxuIyA2OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBBRSApXG4jIDMwMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDcgLT5cbiMgNzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3R1cGxlIFRTIHRoZW4gVFNcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMDkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA4IC0+XG4jIDc2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF90dXBsZSBURSB0aGVuIFRFXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzE3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgOSAtPlxuIyA4MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdmFyaWFudCBWUyB0aGVuIFZTXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzI1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTAgLT5cbiMgODYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3ZhcmlhbnQgVkUgdGhlbiBWRVxuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMzMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDExIC0+XG4jIDkxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENPTU1BIClcbiMgMzM4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTIgLT5cbiMgOTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ09MT04gKVxuIyAzNDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMyAtPlxuIyA5NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgTkVHSU5GSU5JVFkgKVxuIyAzNDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNCAtPlxuIyA5NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgSU5GSU5JVFkgKVxuIyAzNTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNSAtPlxuIyA5OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgSU5GSU5JVFkgKVxuIyAzNTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNiAtPlxuIyAxMDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIE5BTiApXG4jIDM2MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE3IC0+XG4jIDEwMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggTGV4eGVyX3V0aWxzLnN0cmluZzJudW0gKExleGluZy5sZXhlbWUgbGV4YnVmKSB3aXRoXG4gICAgICB8IElOVCBfIGFzIHRvayAtPiBDb21wbGlhbmNlLmxleF9pbnRlZ2VyIHRva1xuICAgICAgfCBMQVJHRUlOVCBfIGFzIHRvayAtPiBDb21wbGlhbmNlLmxleF9sYXJnZWludCB0b2tcbiAgICAgIHwgdG9rIC0+IHRva1xuICAgIClcbiMgMzczIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTggLT5cbiMgMTEwIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciAoRkxPQVQgKGZsb2F0X29mX3N0cmluZyAoTGV4aW5nLmxleGVtZSBsZXhidWYpKSkgKVxuIyAzNzggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxOSAtPlxuIyAxMTIgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggU1RSSU5HIFwiXCIgKVxuIyAzODMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMCAtPlxubGV0XG4jIDExMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNcbiMgMzg5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZSBsZXhidWYgKGxleGJ1Zi5MZXhpbmcubGV4X3N0YXJ0X3BvcyArIDEpIChsZXhidWYuTGV4aW5nLmxleF9jdXJyX3BvcyArIC0xKSBpblxuIyAxMTQgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggU1RSSU5HIChMZXh4ZXJfdXRpbHMudW5lc2NhcGVfc3RyaW5nIHMpIClcbiMgMzkzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjEgLT5cbiMgMTE2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEVPRiApXG4jIDM5OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIyIC0+XG4jIDExOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCByZWFkIGxleGJ1ZiApXG4jIDQwMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIzIC0+XG4jIDEyMCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMudXBkYXRlX3BvcyBsZXhidWY7IHJlYWQgbGV4YnVmOyApXG4jIDQwOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI0IC0+XG4jIDEyMiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggQ29tcGxpYW5jZS5jb21tZW50X2NoZWNrICgpIHdpdGhcbiAgICAgIHwgT2sgKCkgLT4gcmVhZF9jb21tZW50IGxleGJ1ZjsgcmVhZCBsZXhidWZcbiAgICAgIHwgRXJyb3IgZXJyIC0+ICBDT01QTElBTkNFX0VSUk9SIGVyclxuICAgIClcbiMgNDE3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjUgLT5cbiMgMTI4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBDb21wbGlhbmNlLmNvbW1lbnRfY2hlY2sgKCkgd2l0aFxuICAgICAgfCBPayAoKSAtPiByZWFkIGxleGJ1ZlxuICAgICAgfCBFcnJvciBlcnIgLT4gIENPTVBMSUFOQ0VfRVJST1IgZXJyXG4gICAgKVxuIyA0MjYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNiAtPlxuIyAxMzQgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpIClcbiMgNDMxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfY29tbWVudCBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgODhcbmFuZCBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTM5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoICgpIClcbiMgNDQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMSAtPlxuIyAxNDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLnVwZGF0ZV9wb3MgbGV4YnVmOyByZWFkX2NvbW1lbnQgbGV4YnVmIClcbiMgNDQ4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMiAtPlxuIyAxNDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLmxleF9lcnJvciBcInVuZXhwZWN0ZWQgRU9GIGluIGNvbW1lbnRcIiApXG4jIDQ1MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDMgLT5cbiMgMTQ1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIHJlYWRfY29tbWVudCBsZXhidWYgKVxuIyA0NTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbjs7XG5cbiMgMTQ3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiBcbiAgZW5kXG5cbiMgNDY5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuIiwibW9kdWxlIFlvanNvbiA9IFN0ZC5Zb2pzb25cbm9wZW4gQnJyXG5cbnR5cGUgbWV0aG9kJyA9IEdldCB8IFBvc3RcblxubGV0IGpzdHJfb2ZfbWV0aG9kID0gZnVuY3Rpb24gR2V0IC0+IEpzdHIudiBcIkdFVFwiIHwgUG9zdCAtPiBKc3RyLnYgXCJQT1NUXCJcblxubW9kdWxlIFR5cGVzID0gc3RydWN0XG4gIHR5cGUgb3JkZXIgPSBBc2NlbmRpbmcgfCBEZXNjZW5kaW5nIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHNvcnQgPVxuICAgIHwgQWxidW1cbiAgICB8IEFsYnVtQXJ0aXN0XG4gICAgfCBBcnRpc3RcbiAgICB8IEJ1ZGdldFxuICAgIHwgQ29tbXVuaXR5UmF0aW5nXG4gICAgfCBDcml0aWNSYXRpbmdcbiAgICB8IERhdGVDcmVhdGVkXG4gICAgfCBEYXRlUGxheWVkXG4gICAgfCBQbGF5Q291bnRcbiAgICB8IFByZW1pZXJlRGF0ZVxuICAgIHwgUHJvZHVjdGlvblllYXJcbiAgICB8IFNvcnROYW1lXG4gICAgfCBSYW5kb21cbiAgICB8IFJldmVudWVcbiAgICB8IFJ1bnRpbWVcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuZW5kXG5cbnR5cGUgdXNlciA9IHtcbiAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICBzZXJ2ZXJfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIlNlcnZlck5hbWVcIl1cbiAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbn1cbltAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxubW9kdWxlIHR5cGUgUXVlcnkgPSBzaWdcbiAgdHlwZSBwYXRoX3BhcmFtc1xuICB0eXBlIHBhcmFtcyBbQEBkZXJpdmluZyB5b2pzb25dXG4gIHR5cGUgcmVzcG9uc2UgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHZhbCBtZXRob2QnIDogbWV0aG9kJ1xuICB2YWwgZW5kcG9pbnQgOiBwYXRoX3BhcmFtcyAtPiBzdHJpbmdcbmVuZFxuXG5tb2R1bGUgQXV0aGVudGljYXRlX2J5X25hbWUgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHsgdXNlcm5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiVXNlcm5hbWVcIl0gcHcgOiBzdHJpbmcgW0BrZXkgXCJQd1wiXSB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIHVzZXIgOiB1c2VyOyBbQGtleSBcIlVzZXJcIl1cbiAgICBhY2Nlc3NfdG9rZW4gOiBzdHJpbmc7IFtAa2V5IFwiQWNjZXNzVG9rZW5cIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBQb3N0XG4gIGxldCBlbmRwb2ludCBfID0gXCIvVXNlcnMvQXV0aGVudGljYXRlQnlOYW1lXCJcbmVuZFxuXG5tb2R1bGUgSXRlbSA9IHN0cnVjdFxuICB0eXBlIGltYWdlX2JsdXJfaGFzaCA9IChzdHJpbmcgKiBzdHJpbmcpIGxpc3RcblxuICBsZXQgaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiB5ID1cbiAgICBsZXQgYXNzb2MgPSBZb2pzb24uU2FmZS5VdGlsLnRvX2Fzc29jIHkgaW5cbiAgICBMaXN0Lm1hcCAoZnVuIChrZXksIHYpIC0+IChrZXksIFlvanNvbi5TYWZlLlV0aWwudG9fc3RyaW5nIHYpKSBhc3NvY1xuXG4gIGxldCB5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIGkgOiBZb2pzb24uU2FmZS50ID1cbiAgICBsZXQgYXNzb2MgPSBMaXN0Lm1hcCAoZnVuIChrZXksIHYpIC0+IChrZXksIGBTdHJpbmcgdikpIGkgaW5cbiAgICBgQXNzb2MgYXNzb2NcblxuICB0eXBlIGltYWdlX2JsdXJfaGFzaGVzID0ge1xuICAgIHByaW1hcnkgOiBpbWFnZV9ibHVyX2hhc2ggb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiUHJpbWFyeVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICB0eXBlIHR5cGVfID1cbiAgICB8IEFnZ3JlZ2F0ZUZvbGRlclxuICAgIHwgQXVkaW9cbiAgICB8IEF1ZGlvQm9va1xuICAgIHwgQmFzZVBsdWdpbkZvbGRlclxuICAgIHwgQm9va1xuICAgIHwgQm94U2V0XG4gICAgfCBDaGFubmVsXG4gICAgfCBDaGFubmVsRm9sZGVySXRlbVxuICAgIHwgQ29sbGVjdGlvbkZvbGRlclxuICAgIHwgRXBpc29kZVxuICAgIHwgRm9sZGVyXG4gICAgfCBHZW5yZVxuICAgIHwgTGl2ZVR2Q2hhbm5lbFxuICAgIHwgTGl2ZVR2UHJvZ3JhbVxuICAgIHwgTWFudWFsUGxheWxpc3RzRm9sZGVyXG4gICAgfCBNb3ZpZVxuICAgIHwgTXVzaWNBbGJ1bVxuICAgIHwgTXVzaWNBcnRpc3RcbiAgICB8IE11c2ljR2VucmVcbiAgICB8IE11c2ljVmlkZW9cbiAgICB8IFBlcnNvblxuICAgIHwgUGhvdG9cbiAgICB8IFBob3RvQWxidW1cbiAgICB8IFBsYXlsaXN0XG4gICAgfCBQbGF5bGlzdHNGb2xkZXJcbiAgICB8IFByb2dyYW1cbiAgICB8IFJlY29yZGluZ1xuICAgIHwgU2Vhc29uXG4gICAgfCBTZXJpZXNcbiAgICB8IFN0dWRpb1xuICAgIHwgVHJhaWxlclxuICAgIHwgVHZDaGFubmVsXG4gICAgfCBUdlByb2dyYW1cbiAgICB8IFVzZXJSb290Rm9sZGVyXG4gICAgfCBVc2VyVmlld1xuICAgIHwgVmlkZW9cbiAgICB8IFllYXJcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgZmllbGQgPVxuICAgIHwgQWlyVGltZVxuICAgIHwgQmFzaWNTeW5jSW5mb1xuICAgIHwgQ2FuRGVsZXRlXG4gICAgfCBDYW5Eb3dubG9hZFxuICAgIHwgQ2hhbm5lbEltYWdlXG4gICAgfCBDaGFubmVsSW5mb1xuICAgIHwgQ2hhcHRlcnNcbiAgICB8IENoaWxkQ291bnRcbiAgICB8IEN1bXVsYXRpdmVSdW5UaW1lVGlja3NcbiAgICB8IEN1c3RvbVJhdGluZ1xuICAgIHwgRGF0ZUNyZWF0ZWRcbiAgICB8IERhdGVMYXN0TWVkaWFBZGRlZFxuICAgIHwgRGF0ZUxhc3RSZWZyZXNoZWRcbiAgICB8IERhdGVMYXN0U2F2ZWRcbiAgICB8IERpc3BsYXlQcmVmZXJlbmNlc0lkXG4gICAgfCBFbmFibGVNZWRpYVNvdXJjZURpc3BsYXlcbiAgICB8IEV0YWdcbiAgICB8IEV4dGVybmFsRXRhZ1xuICAgIHwgRXh0ZXJuYWxTZXJpZXNJZFxuICAgIHwgRXh0ZXJuYWxVcmxzXG4gICAgfCBFeHRyYUlkc1xuICAgIHwgR2VucmVzXG4gICAgfCBIZWlnaHRcbiAgICB8IEhvbWVQYWdlVXJsXG4gICAgfCBJbmhlcml0ZWRQYXJlbnRhbFJhdGluZ1ZhbHVlXG4gICAgfCBJc0hEXG4gICAgfCBJdGVtQ291bnRzXG4gICAgfCBMb2NhbFRyYWlsZXJDb3VudFxuICAgIHwgTWVkaWFTb3VyY2VDb3VudFxuICAgIHwgTWVkaWFTb3VyY2VzXG4gICAgfCBNZWRpYVN0cmVhbXNcbiAgICB8IE9yaWdpbmFsVGl0bGVcbiAgICB8IE92ZXJ2aWV3XG4gICAgfCBQYXJlbnRJZFxuICAgIHwgUGF0aFxuICAgIHwgUGVvcGxlXG4gICAgfCBQbGF5QWNjZXNzXG4gICAgfCBQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFByaW1hcnlJbWFnZUFzcGVjdFJhdGlvXG4gICAgfCBQcm9kdWN0aW9uTG9jYXRpb25zXG4gICAgfCBQcm92aWRlcklkc1xuICAgIHwgUmVjdXJzaXZlSXRlbUNvdW50XG4gICAgfCBSZWZyZXNoU3RhdGVcbiAgICB8IFJlbW90ZVRyYWlsZXJzXG4gICAgfCBTY3JlZW5zaG90SW1hZ2VUYWdzXG4gICAgfCBTZWFzb25Vc2VyRGF0YVxuICAgIHwgU2VyaWVzUHJlc2VudGF0aW9uVW5pcXVlS2V5XG4gICAgfCBTZXJpZXNQcmltYXJ5SW1hZ2VcbiAgICB8IFNlcmllc1N0dWRpb1xuICAgIHwgU2VydmljZU5hbWVcbiAgICB8IFNldHRpbmdzXG4gICAgfCBTb3J0TmFtZVxuICAgIHwgU3BlY2lhbEVwaXNvZGVOdW1iZXJzXG4gICAgfCBTcGVjaWFsRmVhdHVyZUNvdW50XG4gICAgfCBTdHVkaW9zXG4gICAgfCBTeW5jSW5mb1xuICAgIHwgVGFnbGluZXNcbiAgICB8IFRhZ3NcbiAgICB8IFRoZW1lU29uZ0lkc1xuICAgIHwgVGhlbWVWaWRlb0lkc1xuICAgIHwgV2lkdGhcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gICgqIFRoZSBbVHlwZV0gZmllbGQgaXMgYWN0dWFsbHkgYSBqc29uIHN0cmluZyBidXQgd2Ugd2FudCB0byBzZWUgaXQgYXMgYVxuICAgICB2YXJpYW50ICh3aGljaCBpcyBhIGxpc3Qgb2Ygb25lIHN0cmluZykgKilcbiAgdHlwZSB0eXBlX3N0ciA9IHR5cGVfXG5cbiAgbGV0IHR5cGVfc3RyX29mX3lvanNvbiBqID1cbiAgICBsZXQgcyA9IFlvanNvbi5TYWZlLlV0aWwudG9fc3RyaW5nIGogaW5cbiAgICB0eXBlX19vZl95b2pzb24gKGBMaXN0IFsgYFN0cmluZyBzIF0pXG5cbiAgbGV0IHlvanNvbl9vZl90eXBlX3N0ciB0cyA9XG4gICAgbWF0Y2ggeW9qc29uX29mX3R5cGVfIHRzIHdpdGggYExpc3QgWyBqc29uIF0gLT4ganNvbiB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgdHlwZSB0ID0ge1xuICAgIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICAgIHNvcnRfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJTb3J0TmFtZVwiXVxuICAgIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG4gICAgcGF0aCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQYXRoXCJdXG4gICAgYWxidW1faWQgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiQWxidW1JZFwiXVxuICAgIHBhcmVudF9pZCA6IHN0cmluZyBvcHRpb24gb3B0aW9uO1xuICAgICAgICAoKiBbUGFyZW50SWRdIG1pZ2h0IGFic2VudCwgW251bGxdLCBvciBhIHN0cmluZyAqKVxuICAgICAgICBbQHlvanNvbi5vcHRpb25dXG4gICAgICAgIFtAa2V5IFwiUGFyZW50SWRcIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgICBpbWFnZV9ibHVyX2hhc2hlcyA6IGltYWdlX2JsdXJfaGFzaGVzOyBbQGtleSBcIkltYWdlQmx1ckhhc2hlc1wiXVxuICAgIHR5cGVfIDogdHlwZV9zdHI7IFtAa2V5IFwiVHlwZVwiXVxuICAgIGNvbGxlY3Rpb25fdHlwZSA6IHN0cmluZyBvcHRpb247XG4gICAgICAgIFtAZGVmYXVsdCBOb25lXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiQ29sbGVjdGlvblR5cGVcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5lbmRcblxubW9kdWxlIEl0ZW1zID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG5cbiAgdHlwZSBwYXJhbXMgPSB7XG4gICAgaWRzIDogc3RyaW5nIGxpc3Q7IFtAZGVmYXVsdCBbXV0gW0B5b2pzb25fZHJvcF9kZWZhdWx0ICggPSApXSBbQGtleSBcImlkc1wiXVxuICAgIHBhcmVudF9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJwYXJlbnRJZFwiXVxuICAgIHVzZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwidXNlcklkXCJdXG4gICAgZmllbGRzIDogSXRlbS5maWVsZCBsaXN0O1xuICAgIGluY2x1ZGVfaXRlbV90eXBlcyA6IEl0ZW0udHlwZV8gbGlzdDsgW0BrZXkgXCJpbmNsdWRlSXRlbVR5cGVzXCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwic3RhcnRJbmRleFwiXVxuICAgIGxpbWl0IDogaW50IG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXVxuICAgIHNvcnRfb3JkZXIgOiBUeXBlcy5vcmRlciBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzb3J0T3JkZXJcIl1cbiAgICBzb3J0X2J5IDogVHlwZXMuc29ydCBsaXN0OyBbQGtleSBcInNvcnRCeVwiXVxuICAgIHJlY3Vyc2l2ZSA6IGJvb2w7XG4gICAgZW5hYmxlX3VzZXJfZGF0YSA6IGJvb2w7IFtAa2V5IFwiZW5hYmxlVXNlckRhdGFcIl1cbiAgICBlbmFibGVfaW1hZ2VzIDogYm9vbDsgW0BrZXkgXCJlbmFibGVJbWFnZXNcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICBpdGVtcyA6IEl0ZW0udCBsaXN0OyBbQGtleSBcIkl0ZW1zXCJdXG4gICAgdG90YWxfcmVjb3JkX2NvdW50IDogaW50OyBbQGtleSBcIlRvdGFsUmVjb3JkQ291bnRcIl1cbiAgICBzdGFydF9pbmRleCA6IGludDsgW0BrZXkgXCJTdGFydEluZGV4XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gXCIvSXRlbXNcIlxuZW5kXG5cbm1vZHVsZSBWaWV3cyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0geyB1c2VyX2lkIDogc3RyaW5nIH1cblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQgOiBib29sOyBbQGtleSBcImluY2x1ZGVFeHRlcm5hbENvbnRlbnRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICBpdGVtcyA6IEl0ZW0udCBsaXN0OyBbQGtleSBcIkl0ZW1zXCJdXG4gICAgdG90YWxfcmVjb3JkX2NvdW50IDogaW50OyBbQGtleSBcIlRvdGFsUmVjb3JkQ291bnRcIl1cbiAgICBzdGFydF9pbmRleCA6IGludDsgW0BrZXkgXCJTdGFydEluZGV4XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBwcCA9IFByaW50Zi5zcHJpbnRmIFwiL1VzZXJzLyVzL1ZpZXdzXCIgcHAudXNlcl9pZFxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcnMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcbiAgdHlwZSBwYXJhbXMgPSB1bml0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHZpcnR1YWxfZm9sZGVyID0ge1xuICAgIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICAgIGxvY2F0aW9ucyA6IHN0cmluZyBsaXN0OyBbQGtleSBcIkxvY2F0aW9uc1wiXVxuICAgIGl0ZW1faWQgOiBzdHJpbmc7IFtAa2V5IFwiSXRlbUlkXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB2aXJ0dWFsX2ZvbGRlciBsaXN0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgXyA9IFByaW50Zi5zcHJpbnRmIFwiL0xpYnJhcnkvVmlydHVhbEZvbGRlcnNcIlxuZW5kXG5cbm1vZHVsZSBTeXN0ZW0gPSBzdHJ1Y3RcbiAgbW9kdWxlIEluZm8gPSBzdHJ1Y3RcbiAgICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICAgIHR5cGUgcGFyYW1zID0gdW5pdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgICB0eXBlIHJlc3BvbnNlID0ge1xuICAgICAgbG9jYWxfYWRkcmVzcyA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIkxvY2FsQWRyZXNzXCJdXG4gICAgICBzZXJ2ZXJfbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJOYW1lXCJdXG4gICAgICBwcm9kdWN0X25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJQcm9kdWN0TmFtZVwiXVxuICAgICAgb3BlcmF0aW5nX3N5c3RlbSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIk9wZXJhdGluZ1N5c3RlbVwiXVxuICAgICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICB9XG4gICAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gICAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgICBsZXQgZW5kcG9pbnQgXyA9IFwiL1N5c3RlbS9JbmZvXCJcbiAgZW5kXG5lbmRcblxuKCogRm9yd2FyZCBkZWNsYXJhdGlvbiB0byBiZSBmaWxsZWQgYnkgdGhlIGFwcCAqKVxubGV0IHNlc3Npb25fdXVpZCA9IHJlZiBOb25lXG5sZXQgc2V0X3Nlc3Npb25fdXVpZCBzID0gc2Vzc2lvbl91dWlkIDo9IFNvbWUgc1xuXG5sZXQgYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgPVxuICBsZXQgdG9rZW4gPVxuICAgIG1hdGNoIHRva2VuIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSB0IC0+IFByaW50Zi5zcHJpbnRmIFwiLCBUb2tlbj0lU1wiIHRcbiAgaW5cbiAgbGV0IHNlc3Npb25fdXVpZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpcIlwiICFzZXNzaW9uX3V1aWQgaW5cbiAgUHJpbnRmLnNwcmludGZcbiAgICBcIk1lZGlhQnJvd3NlciBDbGllbnQ9XFxcIk9jYW1peFxcXCIsIERldmljZT1cXFwiRmlyZWZveFxcXCIsIERldmljZUlkPVxcXCIlc1xcXCIsIFxcXG4gICAgIFZlcnNpb249XFxcIjAuMVxcXCIlc1wiXG4gICAgc2Vzc2lvbl91dWlkIHRva2VuXG5cbmxldCByZXF1ZXN0ICh0eXBlIHBwIHAgcikgP2Jhc2VfdXJsID90b2tlbiA/aGVhZGVyc1xuICAgIChtb2R1bGUgUSA6IFF1ZXJ5XG4gICAgICB3aXRoIHR5cGUgcGF0aF9wYXJhbXMgPSBwcFxuICAgICAgIGFuZCB0eXBlIHBhcmFtcyA9IHBcbiAgICAgICBhbmQgdHlwZSByZXNwb25zZSA9IHIpIChwYXJhbXMgOiBwKSAocGF0aF9wYXJhbXMgOiBwcCkgOiByIEZ1dC5vcl9lcnJvciA9XG4gIGxldCBvcGVuIEJycl9pby5GZXRjaCBpblxuICBsZXQgdXJpID1cbiAgICBKc3RyLihcbiAgICAgIFVyaS5vZl9qc3RyID9iYXNlOihPcHRpb24ubWFwIHYgYmFzZV91cmwpICh2IChRLmVuZHBvaW50IHBhdGhfcGFyYW1zKSkpXG4gICAgfD4gUmVzdWx0LmdldF9va1xuICBpblxuICBsZXQgYXV0aG9yaXphdGlvbiA9IGF1dGhvcml6YXRpb24gP3Rva2VuICgpIGluXG4gIENvbnNvbGUubG9nIFsgYXV0aG9yaXphdGlvbiBdO1xuICBsZXQgaGVhZGVycyA9XG4gICAgSGVhZGVycy5vZl9hc3NvYyA/aW5pdDpoZWFkZXJzXG4gICAgICBKc3RyLlxuICAgICAgICBbXG4gICAgICAgICAgKHYgXCJjb250ZW50LXR5cGVcIiwgdiBcInRleHQvanNvblwiKTtcbiAgICAgICAgICAodiBcIlgtRW1ieS1BdXRob3JpemF0aW9uXCIsIHYgYXV0aG9yaXphdGlvbik7XG4gICAgICAgIF1cbiAgaW5cbiAgbGV0IG1ldGhvZCcgPSBqc3RyX29mX21ldGhvZCBRLm1ldGhvZCcgaW5cbiAgbGV0IGluaXQsIHVybCA9XG4gICAgbWF0Y2ggUS5tZXRob2QnIHdpdGhcbiAgICB8IEdldCAtPlxuICAgICAgICBsZXQgcGFyYW1zID1cbiAgICAgICAgICBwYXJhbXMgfD4gUS55b2pzb25fb2ZfcGFyYW1zIHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLnZcbiAgICAgICAgICB8PiBKc29uLmRlY29kZSB8PiBSZXN1bHQuZ2V0X29rIHw+IFVyaS5QYXJhbXMub2Zfb2JqXG4gICAgICAgIGluXG4gICAgICAgIGxldCB1cmlfd2l0aF9wYXJhbXMgPSBVcmkud2l0aF9xdWVyeV9wYXJhbXMgdXJpIHBhcmFtcyBpblxuICAgICAgICAoUmVxdWVzdC5pbml0IH5oZWFkZXJzIH5tZXRob2QnICgpLCBVcmkudG9fanN0ciB1cmlfd2l0aF9wYXJhbXMpXG4gICAgfCBQb3N0IC0+XG4gICAgICAgIGxldCBib2R5ID1cbiAgICAgICAgICBwYXJhbXMgfD4gUS55b2pzb25fb2ZfcGFyYW1zIHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLnZcbiAgICAgICAgICB8PiBCb2R5Lm9mX2pzdHJcbiAgICAgICAgaW5cbiAgICAgICAgKFJlcXVlc3QuaW5pdCB+aGVhZGVycyB+bWV0aG9kJyB+Ym9keSAoKSwgVXJpLnRvX2pzdHIgdXJpKVxuICBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQqIHJlcyA9IHJlcXVlc3QgQEAgUmVxdWVzdC52IH5pbml0IHVybCBpblxuICBsZXQrIGpzb24gPSBSZXNwb25zZS5hc19ib2R5IHJlcyB8PiBCb2R5LnRleHQgaW5cbiAgbGV0IHlvanNvbiA9IFlvanNvbi5TYWZlLmZyb21fc3RyaW5nIChKc3RyLnRvX3N0cmluZyBqc29uKSBpblxuICB0cnkgUS5yZXNwb25zZV9vZl95b2pzb24geW9qc29uXG4gIHdpdGggZSAtPlxuICAgIENvbnNvbGUubG9nIFsgXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGRlY29kaW5nIHJlc3BvbnNlOiBcIjsganNvbiBdO1xuICAgIENvbnNvbGUubG9nIFsgZSBdO1xuICAgIHJhaXNlIGVcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJfaW9cbm1vZHVsZSBBcGkgPSBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGlcblxuKCogUHJvcG9zaXRpb246XG4gICAtIFVzZSBwcmltYXJ5IGtleSB0byBwcm92aWRlIGZpbHRlcmluZ1xuICAgLSBVc2UgaW5kZXgga2V5cyB0byBwcm92aWRlIHNvcnRzXG5cbiAgIEJpZyBwcmltYXJ5IGtleXMgZHJpdmUgdGhlIGNvc3Qgb2YgW2dldF9hbGxfa2V5c10gdXAuXG4gICBXZSBjb3VsZCBkZWxlZ2F0ZSBzb21lIGZpbHRlcmluZyB0byB0aGUgaW5kZXgga2V5cyBpZiBuZWNlc3NhcnkuXG5cbiAgICBXZSBjb3VsZCBhbHNvIHRyaWVkIHRvIHByZS1wcm9jZXNzIG9yIGNvbXByZXNzIHRoZSBrZXlzICopXG5cbmxldCB0X3RvX2p2IGVuY29kZXIgdCA9XG4gIGVuY29kZXIgdCB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci5vZl9zdHJpbmcgfD4gQnJyLkpzb24uZGVjb2RlXG4gIHw+IFJlc3VsdC5nZXRfZXhuXG5cbmxldCBqdl90b190IGRlY29kZXIgaiA9XG4gIGxldCBqc29uID0gQnJyLkpzb24uZW5jb2RlIGogaW5cbiAgT2sgKEpzdHIudG9fc3RyaW5nIGpzb24gfD4gWW9qc29uLlNhZmUuZnJvbV9zdHJpbmcgfD4gZGVjb2RlcilcblxubW9kdWxlIE9yZGVycmVkX2l0ZW1zID0gc3RydWN0XG4gIHR5cGUgdCA9IHsgaWQgOiBpbnQ7IGl0ZW0gOiBzdHJpbmcgb3B0aW9uIH0gW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaWRcIlxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfZGF0ZV9hZGRlZFwiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG4gIGxldCBnZXRfa2V5IHQgPSB0LmlkXG5lbmRcblxubW9kdWxlIEl0ZW1zID0gc3RydWN0XG4gIG9wZW4gRGF0YV9zb3VyY2UuSmVsbHlmaW4uQXBpXG5cbiAgdHlwZSBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA6IGludDsgdmlld3MgOiBzdHJpbmcgbGlzdDsgc29ydF9uYW1lIDogc3RyaW5nIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgdCA9IHsgc29ydHMgOiBzb3J0czsgaXRlbSA6IEl0ZW0udCB9IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBsZXQgY29tcGFyZSB0IHQnID0gU3RyaW5nLmNvbXBhcmUgdC5zb3J0cy5zb3J0X25hbWUgdCcuc29ydHMuc29ydF9uYW1lXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgaWQgOiBzdHJpbmc7IHNvcnRfbmFtZSA6IHN0cmluZzsgdmlld3MgOiBzdHJpbmcgbGlzdCB9XG5cbiAgICBsZXQgdG9fanYgeyBpZDsgc29ydF9uYW1lOyB2aWV3cyB9ID1cbiAgICAgIGxldCBpZCA9IEp2Lm9mX3N0cmluZyBpZCBpblxuICAgICAgbGV0IHNvcnRfbmFtZSA9IEp2Lm9mX3N0cmluZyBzb3J0X25hbWUgaW5cbiAgICAgIGxldCB2aWV3cyA9IEp2Lm9mX2xpc3QgSnYub2Zfc3RyaW5nIHZpZXdzIGluXG4gICAgICBKdi5vZl9qdl9hcnJheSBbfCBpZDsgc29ydF9uYW1lOyB2aWV3cyB8XVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYudG9fanZfYXJyYXkgaiB3aXRoXG4gICAgICB8IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgbGV0IGlkID0gSnYudG9fc3RyaW5nIGlkIGluXG4gICAgICAgICAgbGV0IHNvcnRfbmFtZSA9IEp2LnRvX3N0cmluZyBzb3J0X25hbWUgaW5cbiAgICAgICAgICBsZXQgdmlld3MgPSBKdi50b19saXN0IEp2LnRvX3N0cmluZyB2aWV3cyBpblxuICAgICAgICAgIHsgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPVxuICAgICAgSW5kZXhlZF9kYi5LZXlfcGF0aC4oXG4gICAgICAgIFMgW3wgSWQgXCJpdGVtLklkXCI7IElkIFwiaXRlbS5OYW1lXCI7IElkIFwic29ydHMudmlld3NcIiB8XSlcbiAgZW5kXG5cbiAgbW9kdWxlIEtleV9kYXRlX2FkZGVkID0gc3RydWN0XG4gICAgdHlwZSB0ID0gaW50XG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX2ludCBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19pbnQgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcInNvcnRzLmRhdGVfYWRkZWRcIlxuICBlbmRcblxuICBtb2R1bGUgS2V5X2lkID0gc3RydWN0XG4gICAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX3N0cmluZyBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19zdHJpbmcgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcIml0ZW0uSWRcIlxuICBlbmRcblxuICBtb2R1bGUgS2V5X3ZpZXdfa2luZCA9IHN0cnVjdFxuICAgICgqIHRvZG86IHVzZSBhIGVudW0gZm9yIGtpbmRzICopXG4gICAgdHlwZSB0ID0geyB0eXBlJyA6IHN0cmluZzsgdmlld3MgOiBzdHJpbmcgbGlzdCB9XG5cbiAgICBsZXQgdG9fanYgX2sgPSBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBvZl9qdiBqID1cbiAgICAgIG1hdGNoIEp2Lih0b19qdl9hcnJheSBqKSB3aXRoXG4gICAgICB8IFt8IHR5cGUnOyB2aWV3cyB8XSAtPlxuICAgICAgICAgIHsgdHlwZScgPSBKdi50b19zdHJpbmcgdHlwZSc7IHZpZXdzID0gSnYuKHRvX2xpc3QgdG9fc3RyaW5nIHZpZXdzKSB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uVHlwZVwiOyBJZCBcInNvcnRzLnZpZXdzXCIgfF1cbiAgZW5kXG5cbiAgbW9kdWxlIEtleV90eXBlX25hbWUgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSB7IGNvbGxlY3Rpb25fdHlwZSA6IHN0cmluZzsgc29ydF9uYW1lIDogc3RyaW5nIH1cblxuICAgIGxldCB0b19qdiBfdCA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgY29sbGVjdGlvbl90eXBlOyBzb3J0X25hbWUgfF0gLT5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uX3R5cGUgPSBKdi50b19zdHJpbmcgY29sbGVjdGlvbl90eXBlO1xuICAgICAgICAgICAgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZTtcbiAgICAgICAgICB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9XG4gICAgICBJbmRleGVkX2RiLktleV9wYXRoLlMgW3wgSWQgXCJpdGVtLkNvbGxlY3Rpb25UeXBlXCI7IElkIFwic29ydHMuc29ydF9uYW1lXCIgfF1cbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcIml0ZW1zXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cblxuICBsZXQgZ2V0X2tleSB0ID1cbiAgICB7XG4gICAgICBLZXkuc29ydF9uYW1lID0gdC5zb3J0cy5zb3J0X25hbWU7XG4gICAgICBpZCA9IHQuaXRlbS5JdGVtLmlkO1xuICAgICAgdmlld3MgPSB0LnNvcnRzLnZpZXdzO1xuICAgIH1cbmVuZFxuXG5tb2R1bGUgVmlydHVhbF9mb2xkZXIgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGlcblxuICAoKiB0b2RvOiBtdWx0aXNlcnZlcjogd2Ugc2hvdWxkIGFkZCBhIHNlcnZlcl9pZCBrZXkgKilcbiAgdHlwZSB0ID0gVmlydHVhbF9mb2xkZXJzLnZpcnR1YWxfZm9sZGVyIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX3N0cmluZyBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19zdHJpbmcgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcIkl0ZW1JZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJ2aXJ0dWFsX2ZvbGRlcnNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gdC5WaXJ0dWFsX2ZvbGRlcnMuaXRlbV9pZFxuZW5kXG5cbm1vZHVsZSBPcmRlcnJlZF9pdGVtc19zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKE9yZGVycmVkX2l0ZW1zKVxubW9kdWxlIEl0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoSXRlbXMpXG5tb2R1bGUgVmlydHVhbF9mb2xkZXJfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChWaXJ0dWFsX2ZvbGRlcilcblxubW9kdWxlIEl0ZW1zQnlEYXRlQWRkZWQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfZGF0ZV9hZGRlZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X2RhdGVfYWRkZWQpXG5cbm1vZHVsZSBJdGVtc0J5Vmlld0FuZEtpbmQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdmlld19hbmRfa2luZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3ZpZXdfa2luZClcblxubW9kdWxlIEl0ZW1zQnlJZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9pZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X2lkKVxuXG5tb2R1bGUgSXRlbXNCeVR5cGVBbmROYW1lID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X3R5cGVfYW5kX25hbWVcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV90eXBlX25hbWUpXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyXG5vcGVuIEJycl9pby5JbmRleGVkX2RiXG5tb2R1bGUgU291cmNlID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBPSSA9IFN0b3Jlcy5PcmRlcnJlZF9pdGVtc19zdG9yZVxubW9kdWxlIEkgPSBTdG9yZXMuSXRlbXNfc3RvcmVcbm1vZHVsZSBWRiA9IFN0b3Jlcy5WaXJ0dWFsX2ZvbGRlcl9zdG9yZVxub3BlbiBTb3VyY2UuQXBpXG5cbigqIEl0ZW1zIEhpZXJhcmNoeVxuXG4gICBVc2VyUm9vdEZvbGRlciAoXCJNZWRpYSBGb2xkZXJzXCIgXCJlOWQ1MDc1YTU1NWMxY2JjMzk0ZWVjNGNlZjI5NTI3NFwiKVxuICAgICAgICAgICAgICAgICAgKEdldHMgdGhlIHJvb3QgZm9sZGVyIGZyb20gYSB1c2VyJ3MgbGlicmFyeS4gKVxuICAgXiBDb2xsZWN0aW9uRm9sZGVyIChcIk11c2ljTGliXCIgXCIxNTA4NDhjZDRmNDRiOWFlMzJlYzVhNzkzNGRlMzljZVwiKVxuXG4gICBBZ2dyZWdhdGVGb2xkZXIgKFwicm9vdFwiIFwiZjI3Y2FhMzdlNTE0MjIyNWNjZWRlZDQ4ZjY1NTM1MDJcIilcbiAgIF4gRm9sZGVyIChcIm1lZGlhXCIgXCI5MmZkZTcxZDBlYzU3N2I1MzFlN2IzNDI3YjIyM2JlZFwiKVxuICAgXiBGb2xkZXIrIDwtIE11c2ljQXJ0aXN0IDwtIE11c2ljQWxidW0gPC0gQXVkaW9cblxuICAgSmVsbHlmaW4gY29uc2lkZXJzIHRoYXQgRm9sZGVyIChcIm1lZGlhXCIgXCI5MmZkZTcxZDBlYzU3N2I1MzFlN2IzNDI3YjIyM2JlZFwiKSA9PSBDb2xsZWN0aW9uRm9sZGVyIChcIk11c2ljTGliXCIgXCIxNTA4NDhjZDRmNDRiOWFlMzJlYzVhNzkzNGRlMzljZVwiKVxuXG4gICBUaGlzIGVxdWFsaXR5IGNhbiBiZSByZXRyaXZlZCBieSBxdWVyeWluZyB0aGUgXCJWaXJ0dWFsRm9sZGVyc1wiIGFuZCBsb29rIGF0XG4gICB0aGUgbG9jYXRpb25zJyBwYXRocy4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIG5vdCBhY2Nlc3NpYmxlIHRvIHVucHJpdmlsZWRnZWQgdXNlcnMuLi5cblxuICAgVG8gYWN0dWFsbHkga25vdyB3aGljaCBmb2xkZXJzIGFyZSBwYXJ0IG9mIGEgdXNlciB2aWV3IHdlIG5lZWQgdG8gcXVlcnkgdGhlXG4gICBpdGVtcyB0aGF0IGhhdmUgdGhpcyB2aWV3J3MgaWQgYXMgYSBbcGFyZW50SWRdLiBUaGUgYWN0dWFsIFtwYXJlbnRJZF0gb2ZcbiAgIHRoZXNlIGl0ZW1zIHdpbGwgYmUgZGlmZmVyZW50IGFuZCBhcmUgdGhlIGlkcyBhY3R1YWwgZm9sZGVycyB0aGF0XG4gICBjb25zdGl0dXRlIHRoaXMgdmlldy5cblxuICAgRm9yIHNpbXBsaWNpdHkgKD8pIHdlIGNvbnNpZGVyIHRoYXQgYW4gaXRlbSBpcyBwYXJ0IG9mIGEgdmlldyBpZiBpdHMgcGF0aCBpc1xuICAgcHJlZml4ZWQgYnkgb25lIG9mIHRoZSB2aWV3J3MgdmlydHVhbCBmb2xkZXIgbG9jYXRpb25zLlxuKilcblxubGV0IGNodW5rX3NpemUgPSA1MDBcbmxldCBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbIFNvdXJjZS5BcGkuSXRlbS5NdXNpY0FydGlzdDsgTXVzaWNBbGJ1bTsgQXVkaW8gXVxuXG5sZXQgZmV0Y2hfdG90YWxfaXRlbV9jb3VudCBzb3VyY2UgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHJlcyA9XG4gICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAge1xuICAgICAgICAgICgqIHRvZG8gbWFrZSBzb3J0IGV4cGxpY2l0IChieSBkYXRlIGFkZGVkIGRhdGUpKilcbiAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgIGZpZWxkcyA9IFtdO1xuICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcztcbiAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgbGltaXQgPSBTb21lIDA7XG4gICAgICAgICAgc29ydF9vcmRlciA9IFNvbWUgQXNjZW5kaW5nO1xuICAgICAgICAgIHNvcnRfYnkgPSBbIERhdGVDcmVhdGVkIF07XG4gICAgICAgICAgcmVjdXJzaXZlID0gdHJ1ZTtcbiAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAoKVxuICBpblxuICByZXMudG90YWxfcmVjb3JkX2NvdW50XG5cbnR5cGUgZGJfaW5mb3MgPSB7XG4gIGxhc3Rfa2V5IDogaW50IG9wdGlvbjtcbiAgbGFzdF92YWx1ZSA6IFN0b3Jlcy5PcmRlcnJlZF9pdGVtcy50IG9wdGlvbjtcbn1cblxubGV0IGdldF9kYl9pbmZvcyBpZGIgPVxuICBsZXQgaW5mb3MsIHNldF9pbmZvcyA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgbGV0IHRyYW5zYWN0aW9uID0gRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKSBdIH5tb2RlOlJlYWRvbmx5IGlkYiBpblxuICBsZXQgc3RvcmUgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgbGV0IHJlcSA9IE9JLm9wZW5fY3Vyc29yIH5kaXJlY3Rpb246UHJldiBzdG9yZSBpblxuICBsZXQgbGFzdF9rZXkgPSByZWYgTm9uZSBpblxuICBsZXQgXyA9XG4gICAgUmVxdWVzdC5vbl9zdWNjZXNzIHJlcSB+ZjooZnVuIF8gcSAtPlxuICAgICAgICBtYXRjaCBSZXF1ZXN0LnJlc3VsdCBxIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHNldF9pbmZvcyB7IGxhc3Rfa2V5ID0gIWxhc3Rfa2V5OyBsYXN0X3ZhbHVlID0gTm9uZSB9XG4gICAgICAgIHwgU29tZSBjdXJzb3IgLT4gKFxuICAgICAgICAgICAgaWYgT3B0aW9uLmlzX25vbmUgIWxhc3Rfa2V5IHRoZW5cbiAgICAgICAgICAgICAgbGFzdF9rZXkgOj0gT0kuQ3Vyc29yX3dpdGhfdmFsdWUua2V5IGN1cnNvcjtcbiAgICAgICAgICAgIG1hdGNoIE9JLkN1cnNvcl93aXRoX3ZhbHVlLnZhbHVlIGN1cnNvciB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgKHsgaXRlbSA9IFNvbWUgXzsgXyB9IGFzIGl0ZW0pIC0+XG4gICAgICAgICAgICAgICAgc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBTb21lIGl0ZW0gfVxuICAgICAgICAgICAgfCBfIC0+IE9JLkN1cnNvcl93aXRoX3ZhbHVlLmNvbnRpbnVlIGN1cnNvcikpXG4gIGluXG4gIGluZm9zXG5cbmxldCBpc19kYl9jb25zaXN0ZW50IH5zb3VyY2U6XyB+bGFzdF9zb3VyY2VfaXRlbV9rZXkgZGJfc3luY19pbmZvcyA9XG4gIGxldCBsYXN0X2tleSA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDooLTEpIGRiX3N5bmNfaW5mb3MubGFzdF9rZXkgaW5cbiAgaWYgbGFzdF9rZXkgPiBsYXN0X3NvdXJjZV9pdGVtX2tleSB0aGVuXG4gICAgKCogVGhlcmUgYXJlIGZld2VyIGl0ZW1zIGluIHRoZSBzb3VyY2UgdGhhbiBleHBlY3RlZCAqKVxuICAgIGZhbHNlXG4gIGVsc2VcbiAgICAoKiBUb2RvOiBjaGVjayB0aGF0IHRoZSBsYXN0IGtub3duIGl0ZW0gaXMgdGhlIHNhbWUgdGhhbiBpbiB0aGUgc291cmNlICopXG4gICAgdHJ1ZVxuXG50eXBlIHN0YXR1cyA9XG4gIHwgVW5rbm93blxuICB8IEluX3N5bmNcbiAgfCBJbmNvbnNpc3RlbnRcbiAgfCBOZXdfaXRlbXMgb2Yge1xuICAgICAgZmlyc3RfbWlzc2luZ19rZXkgOiBpbnQ7XG4gICAgICBmaXJzdF91bmZldGNoZWRfa2V5IDogaW50O1xuICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgOiBpbnQ7XG4gICAgfVxuICB8IFBhcnRpYWxfZmV0Y2ggb2YgeyBmaXJzdF91bmZldGNoZWRfa2V5IDogaW50OyBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludCB9XG5cbnR5cGUgcHJvZ3Jlc3MgPSB7IHRvdGFsIDogaW50OyByZW1haW5pbmcgOiBpbnQgfVxudHlwZSByZXBvcnQgPSB7IHN0YXR1cyA6IHN0YXR1czsgc3luY19wcm9ncmVzcyA6IHByb2dyZXNzIG9wdGlvbiB9XG5cbmxldCBpbml0aWFsX3JlcG9ydCA9IHsgc3RhdHVzID0gVW5rbm93bjsgc3luY19wcm9ncmVzcyA9IE5vbmUgfVxuXG5sZXQgbG9nX3N0YXR1cyA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93biAtPiBDb25zb2xlLmluZm8gWyBcIkRhdGFiYXNlIHN0YXR1cyBpcyB1bmtub3duXCIgXVxuICB8IEluX3N5bmMgLT4gQ29uc29sZS5pbmZvIFsgXCJEYXRhYmFzZSBpcyBzeW5jaHJvbml6ZWRcIiBdXG4gIHwgSW5jb25zaXN0ZW50IC0+IENvbnNvbGUud2FybiBbIFwiRGF0YWJhc2UgaXMgb3V0LW9mLXN5bmNcIiBdXG4gIHwgTmV3X2l0ZW1zIHsgZmlyc3RfbWlzc2luZ19rZXk7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAtPlxuICAgICAgQ29uc29sZS5pbmZvXG4gICAgICAgIFtcbiAgICAgICAgICBcIk5ldyBpdGVtcyB3ZXJlIGFkZGVkIHRvIHRoZSBzb3VyY2UuXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF9taXNzaW5nX2tleSArIDE7XG4gICAgICAgICAgXCJuZXcgaXRlbXNcIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X3VuZmV0Y2hlZF9rZXkgKyAxO1xuICAgICAgICAgIFwidW5mZXRjaGVkIGl0ZW1zXCI7XG4gICAgICAgIF1cbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgQ29uc29sZS5pbmZvXG4gICAgICAgIFtcbiAgICAgICAgICBcIlNvbWUgaXRlbXMgaGF2ZSBub3QgYmVlbiBmZXRjaGVkIHlldC5cIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X3VuZmV0Y2hlZF9rZXkgKyAxO1xuICAgICAgICAgIFwidW5mZXRjaGVkIGl0ZW1zXCI7XG4gICAgICAgIF1cblxubGV0IGNoZWNrX3N0YXR1cyB+c291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KiBkYl9pbmZvcyA9IGdldF9kYl9pbmZvcyBpZGIgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyB0b3RhbF9pdGVtX2NvdW50ID0gZmV0Y2hfdG90YWxfaXRlbV9jb3VudCBzb3VyY2UgaW5cbiAgKCogS2V5cyBzdGFydCBhdCAwLCBpdCdzIG5hdHVyYWwgdG8gY291bnQgaXRlbSBieSBzdGFydGluZyB3aXRoIDAgKilcbiAgbGV0IGxhc3Rfc291cmNlX2l0ZW1fa2V5ID0gdG90YWxfaXRlbV9jb3VudCAtIDEgaW5cbiAgaWYgbm90IChpc19kYl9jb25zaXN0ZW50IH5zb3VyY2Ugfmxhc3Rfc291cmNlX2l0ZW1fa2V5IGRiX2luZm9zKSB0aGVuXG4gICAgSW5jb25zaXN0ZW50XG4gIGVsc2VcbiAgICBtYXRjaCBkYl9pbmZvcyB3aXRoXG4gICAgfCB7IGxhc3Rfa2V5ID0gTm9uZTsgbGFzdF92YWx1ZSA9IE5vbmUgfSAtPlxuICAgICAgICAoKiBUaGUgZGIgaGFzIG5vdCB5ZXQgYmVlbiBwb3B1bGF0ZWQgd2l0aCBwbGFjZWhvbGRlcnMgKilcbiAgICAgICAgTmV3X2l0ZW1zXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlyc3RfbWlzc2luZ19rZXkgPSAwO1xuICAgICAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleSA9IDA7XG4gICAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgICAgICB9XG4gICAgfCB7IGxhc3Rfa2V5ID0gU29tZSBrZXk7IGxhc3RfdmFsdWUgPSBpdGVtIH0gd2hlbiBrZXkgPCBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICAgICAgLT5cbiAgICAgICAgKCogTmV3IGl0ZW1zIHdlcmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBzaW5jZSB0aGUgbGFzdCBzeW5jICopXG4gICAgICAgIGxldCBmaXJzdF91bmZldGNoZWRfa2V5ID1cbiAgICAgICAgICBtYXRjaCBpdGVtIHdpdGggTm9uZSAtPiAwIHwgU29tZSB7IGlkOyBfIH0gLT4gaWQgKyAxXG4gICAgICAgIGluXG4gICAgICAgIE5ld19pdGVtc1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpcnN0X21pc3Npbmdfa2V5ID0ga2V5ICsgMTtcbiAgICAgICAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXk7XG4gICAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgICAgICB9XG4gICAgfCB7IGxhc3Rfa2V5ID0gU29tZSBrZXk7IGxhc3RfdmFsdWUgPSBpdGVtIH0gd2hlbiBrZXkgPSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICAgICAgLT4gKFxuICAgICAgICBtYXRjaCBpdGVtIHdpdGhcbiAgICAgICAgfCBTb21lIHsgaWQ7IF8gfSB3aGVuIGlkID0ga2V5IC0+IEluX3N5bmNcbiAgICAgICAgfCBTb21lIHsgaWQ7IF8gfSAtPlxuICAgICAgICAgICAgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSBpZCArIDE7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA9IDA7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0pXG4gICAgfCBfIC0+IEluY29uc2lzdGVudFxuXG5sZXQgdXBkYXRlX3ZpZXdzIHNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHZpZXdzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuVmlld3MpXG4gICAgICB7IGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA9IGZhbHNlIH1cbiAgICAgIHsgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQgfVxuICBpblxuICBMaXN0Lml0ZXIgdmlld3MuaXRlbXMgfmY6KGZ1biAoaXRlbSA6IEl0ZW0udCkgLT5cbiAgICAgIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gICAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpOyAobW9kdWxlIEkpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgICAgaW5cbiAgICAgIGxldCBzX2l0ZW1zID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgIGxldCBzb3J0X25hbWUgPSBPcHRpb24udmFsdWUgaXRlbS5zb3J0X25hbWUgfmRlZmF1bHQ6aXRlbS5uYW1lIGluXG4gICAgICBJLnB1dCB7IHNvcnRzID0geyBkYXRlX2FkZGVkID0gLTE7IHZpZXdzID0gW107IHNvcnRfbmFtZSB9OyBpdGVtIH0gc19pdGVtc1xuICAgICAgfD4gaWdub3JlKTtcbiAgdmlld3NcblxubGV0IGRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aWV3cyBzb3VyY2UgKHZpZXdzIDogVmlld3MucmVzcG9uc2UpID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IHBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiB7IEl0ZW0uaWQ7IF8gfSA9XG4gICAgbGV0KyByZXMgPVxuICAgICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgICBwYXJlbnRfaWQgPSBTb21lIGlkO1xuICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICBmaWVsZHMgPSBbIFBhcmVudElkIF07XG4gICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICAgIGxpbWl0ID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9ieSA9IFtdO1xuICAgICAgICAgICAgcmVjdXJzaXZlID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAoKVxuICAgIGluXG4gICAgTGlzdC5mb2xkX2xlZnQgfmluaXQ6U3RyaW5nLlNldC5lbXB0eSByZXMuaXRlbXNcbiAgICAgIH5mOihmdW4gc2V0IHsgSXRlbS5wYXJlbnRfaWQ7IF8gfSAtPlxuICAgICAgICBtYXRjaCBwYXJlbnRfaWQgd2l0aFxuICAgICAgICB8IE5vbmUgfCBTb21lIE5vbmUgLT4gc2V0XG4gICAgICAgIHwgU29tZSAoU29tZSBwaWQpIC0+IFN0cmluZy5TZXQuYWRkIHBpZCBzZXQpXG4gIGluXG4gIGxldCBwYXRoc19vZl9wYXJlbnRzIHBhcmVudHMgPVxuICAgIGxldCsgcmVzID1cbiAgICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkcyA9IFN0cmluZy5TZXQudG9fbGlzdCBwYXJlbnRzO1xuICAgICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgZmllbGRzID0gWyBQYXRoIF07XG4gICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICAgIGxpbWl0ID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9ieSA9IFtdO1xuICAgICAgICAgICAgcmVjdXJzaXZlID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAoKVxuICAgIGluXG4gICAgTGlzdC5maWx0ZXJfbWFwIHJlcy5pdGVtcyB+ZjooZnVuIHsgSXRlbS5pZDsgcGF0aDsgXyB9IC0+XG4gICAgICAgIE9wdGlvbi5tYXAgKGZ1biBwYXRoIC0+IChpZCwgcGF0aCkpIHBhdGgpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KyByZXN1bHQgPVxuICAgIExpc3QubWFwIHZpZXdzLml0ZW1zIH5mOihmdW4gKHsgSXRlbS5pZDsgXyB9IGFzIHZpZXcpIC0+XG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCogcGFyZW50cyA9IHBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiB2aWV3IGluXG4gICAgICAgIGxldCsgcGF0aHMgPSBwYXRoc19vZl9wYXJlbnRzIHBhcmVudHMgaW5cbiAgICAgICAgKGlkLCBwYXRocykpXG4gICAgfD4gRnV0Lm9mX2xpc3RcbiAgaW5cbiAgUmVzdWx0LmZsYXR0ZW5fbCByZXN1bHRcblxubGV0IHZpZXdzX29mX3BhdGggKHZmb2xkZXJzIDogKHN0cmluZyAqIChzdHJpbmcgKiBzdHJpbmcpIGxpc3QpIGxpc3QpIHBhdGggPVxuICAoKiBXZSBsb29rIGF0IHRoZSBwcmVmaXggb2YgYSBwYXRoIHRvIGRldGVybWluZSB3aGljaCB2aXJ0dWFsX2ZvbGRlciAoYW5kIHRodXNcbiAgICAgdmlldykgaXQncyBhIHBhcnQgb2YuICopXG4gIExpc3QuZmlsdGVyX21hcCB2Zm9sZGVycyB+ZjooZnVuICh2aWV3X2lkLCBsb2NhdGlvbnMpIC0+XG4gICAgICBpZiBMaXN0LmV4aXN0cyBsb2NhdGlvbnMgfmY6KGZ1biAoXywgcHJlKSAtPiBTdHJpbmcucHJlZml4IH5wcmUgcGF0aCkgdGhlblxuICAgICAgICBTb21lIHZpZXdfaWRcbiAgICAgIGVsc2UgTm9uZSlcblxubGV0IHN5bmMgPyhyZXBvcnQgPSBmdW4gXyAtPiAoKSkgfihzb3VyY2UgOiBTb3VyY2UuY29ubmV4aW9uKSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgbWFrZV9wbGFjZWhvbGRlcnMgZmlyc3QgbGFzdCA9XG4gICAgKCogdG9kbzogZXJyb3IgaGFuZGxpbmcgKilcbiAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICBpblxuICAgIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICAgIGZvciBpID0gZmlyc3QgdG8gbGFzdCBkb1xuICAgICAgaWdub3JlIEBAIE9JLnB1dCB7IGlkID0gaTsgaXRlbSA9IE5vbmUgfSBzdG9yZVxuICAgIGRvbmVcbiAgaW5cbiAgbGV0IGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3QgbGFzdCA9XG4gICAgbGV0IG9wZW4gU291cmNlIGluXG4gICAgbGV0KiB2aWV3cyA9IHVwZGF0ZV92aWV3cyBzb3VyY2UgaWRiIGluXG4gICAgbGV0KiB2Zm9sZGVycyA9IGRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aWV3cyBzb3VyY2Ugdmlld3MgaW5cbiAgICBsZXQgKCkgPSBDb25zb2xlLmluZm8gWyBcIkZldGNoaW5nIGl0ZW1zXCI7IGZpcnN0OyBcInRvXCI7IGxhc3Q7IFwiOlwiIF0gaW5cbiAgICBsZXQgZmV0Y2hfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgdG90YWwgPSBsYXN0IC0gZmlyc3QgKyAxIGluXG4gICAgbGV0IHJlYyBlbnF1ZXVlIH5zdGFydF9pbmRleCB0b2RvID1cbiAgICAgIGlmIHRvZG8gPiAwIHRoZW4gKFxuICAgICAgICBsZXQgbGltaXQgPSBtaW4gdG9kbyBjaHVua19zaXplIGluXG4gICAgICAgIGxldCByZXEgPVxuICAgICAgICAgIEFwaS5JdGVtcy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkgKilcbiAgICAgICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgICBmaWVsZHMgPSBbIFBhcmVudElkOyBQYXRoIF07XG4gICAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcztcbiAgICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBTb21lIHN0YXJ0X2luZGV4O1xuICAgICAgICAgICAgICBsaW1pdCA9IFNvbWUgbGltaXQ7XG4gICAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBTb21lIEFzY2VuZGluZztcbiAgICAgICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICAgICAgcmVjdXJzaXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgaW5cbiAgICAgICAgUXVldWUuYWRkIHJlcSBmZXRjaF9xdWV1ZTtcbiAgICAgICAgZW5xdWV1ZSB+c3RhcnRfaW5kZXg6KHN0YXJ0X2luZGV4ICsgbGltaXQpICh0b2RvIC0gbGltaXQpKVxuICAgIGluXG4gICAgZW5xdWV1ZSB+c3RhcnRfaW5kZXg6Zmlyc3QgdG90YWw7XG4gICAgbGV0IHRvdGFsX3F1ZXJpZXMgPSBRdWV1ZS5sZW5ndGggZmV0Y2hfcXVldWUgaW5cbiAgICBsZXQgcmVjIHJ1bl9xdWV1ZSA/KHRocmVhZHMgPSAxKSBxID1cbiAgICAgIGFzc2VydCAodGhyZWFkcyA+IDApO1xuICAgICAgbGV0IHJlYyB0YWtlX24gYWNjIG4gPVxuICAgICAgICBpZiBuID0gMCB0aGVuIExpc3QucmV2IGFjY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgbWF0Y2ggUXVldWUudGFrZV9vcHQgcSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgICAgIHwgU29tZSBlbHQgLT4gdGFrZV9uIChlbHQgOjogYWNjKSAobiAtIDEpXG4gICAgICBpblxuICAgICAgbGV0IGYgcmVxID1cbiAgICAgICAgbGV0KyB7IEFwaS5JdGVtcy5zdGFydF9pbmRleDsgaXRlbXM7IF8gfSA9XG4gICAgICAgICAgcXVlcnkgc291cmNlIChtb2R1bGUgQXBpLkl0ZW1zKSByZXEgKClcbiAgICAgICAgaW5cbiAgICAgICAgbGV0ICgpID1cbiAgICAgICAgICByZXBvcnRcbiAgICAgICAgICBAQCBTb21lXG4gICAgICAgICAgICAgICB7IHRvdGFsID0gdG90YWxfcXVlcmllczsgcmVtYWluaW5nID0gUXVldWUubGVuZ3RoIGZldGNoX3F1ZXVlIH1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGlkYl9wdXQgfnN0YXJ0X2luZGV4IGl0ZW1zID1cbiAgICAgICAgICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICAgICAgICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICAgICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpOyAobW9kdWxlIEkpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHNfbGlzdCA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICAgICAgICAgIGxldCBzX2l0ZW1zID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgICAgICBMaXN0Lml0ZXJpIGl0ZW1zIH5mOihmdW4gaW5kZXggKHsgQXBpLkl0ZW0uaWQ7IHBhdGg7IF8gfSBhcyBpdGVtKSAtPlxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSBzdGFydF9pbmRleCArIGluZGV4IGluXG4gICAgICAgICAgICAgIGxldCBwYXRoID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OlwiXCIgcGF0aCBpblxuICAgICAgICAgICAgICBsZXQgdmlld3MgPSB2aWV3c19vZl9wYXRoIHZmb2xkZXJzIHBhdGggaW5cbiAgICAgICAgICAgICAgbGV0IHNvcnRfbmFtZSA9IE9wdGlvbi52YWx1ZSBpdGVtLnNvcnRfbmFtZSB+ZGVmYXVsdDppdGVtLm5hbWUgaW5cbiAgICAgICAgICAgICAgaWdub3JlIChPSS5wdXQgeyBpZCA9IGluZGV4OyBpdGVtID0gU29tZSBpZCB9IHNfbGlzdCk7XG4gICAgICAgICAgICAgIGlnbm9yZVxuICAgICAgICAgICAgICAgIChJLnB1dFxuICAgICAgICAgICAgICAgICAgIHsgc29ydHMgPSB7IGRhdGVfYWRkZWQgPSBpbmRleDsgdmlld3M7IHNvcnRfbmFtZSB9OyBpdGVtIH1cbiAgICAgICAgICAgICAgICAgICBzX2l0ZW1zKSlcbiAgICAgICAgaW5cbiAgICAgICAgaWRiX3B1dCB+c3RhcnRfaW5kZXggaXRlbXNcbiAgICAgIGluXG4gICAgICBsZXQgcmVxcyA9IHRha2VfbiBbXSB0aHJlYWRzIGluXG4gICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICBsZXQqIHJlcXMgPSBGdXQub2ZfbGlzdCAoTGlzdC5tYXAgfmYgcmVxcykgaW5cbiAgICAgIGlmIExpc3QuaXNfZW1wdHkgcmVxcyB0aGVuIEZ1dC5vayAoKSBlbHNlIHJ1bl9xdWV1ZSBxXG4gICAgaW5cbiAgICBydW5fcXVldWUgZmV0Y2hfcXVldWVcbiAgaW5cbiAgZnVuY3Rpb25cbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBtYWtlX3BsYWNlaG9sZGVycyBmaXJzdF9taXNzaW5nX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgIGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3RfdW5mZXRjaGVkX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9IC0+XG4gICAgICBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0X3VuZmV0Y2hlZF9rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgfCBJbmNvbnNpc3RlbnQgLT4gRnV0Lm9rICgpXG4gIHwgXyAtPiBGdXQub2sgKClcblxubGV0IGNoZWNrX2FuZF9zeW5jID9yZXBvcnQgfnNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQqIHN0YXR1cyA9IGNoZWNrX3N0YXR1cyB+c291cmNlIGlkYiBpblxuICBsZXQgaW5pdGlhbCA9IHsgaW5pdGlhbF9yZXBvcnQgd2l0aCBzdGF0dXMgfSBpblxuICBsZXQgcmVwb3J0JyA9XG4gICAgT3B0aW9uLm1hcFxuICAgICAgKGZ1biByZXBvcnQgLT5cbiAgICAgICAgbGV0ICgpID0gKCogU2VuZCBhIGZpcnN0IHJlcG9ydCAqKSByZXBvcnQgaW5pdGlhbCBpblxuICAgICAgICBmdW4gc3luY19wcm9ncmVzcyAtPiByZXBvcnQgeyBpbml0aWFsIHdpdGggc3luY19wcm9ncmVzcyB9KVxuICAgICAgcmVwb3J0XG4gIGluXG4gIGxldCsgKCkgPSBzeW5jID9yZXBvcnQ6cmVwb3J0JyB+c291cmNlIGlkYiBzdGF0dXMgaW5cbiAgT3B0aW9uLml0ZXJcbiAgICAoZnVuIHJlcG9ydCAtPiByZXBvcnQgeyBzdGF0dXMgPSBJbl9zeW5jOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9KVxuICAgIHJlcG9ydFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQYWRkaW5nIHBvc2l0aW9uLiAqKVxudHlwZSBwYWR0eSA9XG4gIHwgTGVmdCAgICgqIFRleHQgaXMgbGVmdCBqdXN0aWZpZWQgKCctJyBvcHRpb24pLiAgICAgICAgICAgICAgICopXG4gIHwgUmlnaHQgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIChubyAnLScgb3B0aW9uKS4gICAgICAgICAgICopXG4gIHwgWmVyb3MgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIGJ5IHplcm9zIChzZWUgJzAnIG9wdGlvbikuICopXG5cbigqKiopXG5cbigqIEludGVnZXIgY29udmVyc2lvbi4gKilcbnR5cGUgaW50X2NvbnYgPVxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkICAgICAgICAoKiAgJWQgfCAlK2QgfCAlIGQgICopXG4gIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2kgICAgICAgICgqICAlaSB8ICUraSB8ICUgaSAgKilcbiAgfCBJbnRfeCB8IEludF9DeCAgICAgICAgICAgICAgICAgKCogICV4IHwgJSN4ICAgICAgICAqKVxuICB8IEludF9YIHwgSW50X0NYICAgICAgICAgICAgICAgICAoKiAgJVggfCAlI1ggICAgICAgICopXG4gIHwgSW50X28gfCBJbnRfQ28gICAgICAgICAgICAgICAgICgqICAlbyB8ICUjbyAgICAgICAgKilcbiAgfCBJbnRfdSAgICAgICAgICAgICAgICAgICAgICAgICAgKCogICV1ICAgICAgICAgICAgICAqKVxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAgICAgICAoKiAgJSNkIHwgJSNpIHwgJSN1ICopXG5cbigqIEZsb2F0IGNvbnZlcnNpb24uICopXG50eXBlIGZsb2F0X2ZsYWdfY29udiA9XG4gIHwgRmxvYXRfZmxhZ18gICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19wICAgICAgICAgICAgICAgICAgICgqICUrW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcyAgICAgICAgICAgICAgICAgICAoKiAlIFtmZUVnR0ZoSF0gKilcbnR5cGUgZmxvYXRfa2luZF9jb252ID1cbiAgfCBGbG9hdF9mICAgICAgICAgICAgICAgICAgICAgICAgKCogICVmIHwgJStmIHwgJSBmICAqKVxuICB8IEZsb2F0X2UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWUgfCAlK2UgfCAlIGUgICopXG4gIHwgRmxvYXRfRSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRSB8ICUrRSB8ICUgRSAgKilcbiAgfCBGbG9hdF9nICAgICAgICAgICAgICAgICAgICAgICAgKCogICVnIHwgJStnIHwgJSBnICAqKVxuICB8IEZsb2F0X0cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUcgfCAlK0cgfCAlIEcgICopXG4gIHwgRmxvYXRfRiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRiB8ICUrRiB8ICUgRiAgKilcbiAgfCBGbG9hdF9oICAgICAgICAgICAgICAgICAgICAgICAgKCogICVoIHwgJStoIHwgJSBoICAqKVxuICB8IEZsb2F0X0ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUggfCAlK0ggfCAlIEggICopXG4gIHwgRmxvYXRfQ0YgICAgICAgICAgICAgICAgICAgICAgICgqICAlI0Z8ICUrI0Z8ICUgI0YgKilcbnR5cGUgZmxvYXRfY29udiA9IGZsb2F0X2ZsYWdfY29udiAqIGZsb2F0X2tpbmRfY29udlxuXG4oKioqKVxuXG4oKiBDaGFyIHNldHMgKHNlZSAlWy4uLl0pIGFyZSBiaXRtYXBzIGltcGxlbWVudGVkIGFzIDMyLWNoYXIgc3RyaW5ncy4gKilcbnR5cGUgY2hhcl9zZXQgPSBzdHJpbmdcblxuKCoqKilcblxuKCogQ291bnRlciB1c2VkIGluIFNjYW5mLiAqKVxudHlwZSBjb3VudGVyID1cbiAgfCBMaW5lX2NvdW50ZXIgICAgICgqICAlbCAgICAgICopXG4gIHwgQ2hhcl9jb3VudGVyICAgICAoKiAgJW4gICAgICAqKVxuICB8IFRva2VuX2NvdW50ZXIgICAgKCogICVOLCAlTCAgKilcblxuKCoqKilcblxuKCogUGFkZGluZyBvZiBzdHJpbmdzIGFuZCBudW1iZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwYWRkaW5nID1cbiAgKCogTm8gcGFkZGluZyAoZXg6IFwiJWRcIikgKilcbiAgfCBOb19wYWRkaW5nICA6ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogTGl0ZXJhbCBwYWRkaW5nIChleDogXCIlOGRcIikgKilcbiAgfCBMaXRfcGFkZGluZyA6IHBhZHR5ICogaW50IC0+ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogUGFkZGluZyBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpkXCIpICopXG4gIHwgQXJnX3BhZGRpbmcgOiBwYWR0eSAtPiAoaW50IC0+ICdhLCAnYSkgcGFkZGluZ1xuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9kLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHBhZGRpbmcgb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcGFkX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogUHJlY2lzaW9uIG9mIGZsb2F0cyBhbmQgJzAnLXBhZGRpbmcgb2YgaW50ZWdlcnMuICopXG50eXBlICgnYSwgJ2IpIHByZWNpc2lvbiA9XG4gICgqIE5vIHByZWNpc2lvbiAoZXg6IFwiJWZcIikgKilcbiAgfCBOb19wcmVjaXNpb24gOiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogTGl0ZXJhbCBwcmVjaXNpb24gKGV4OiBcIiUuM2ZcIikgKilcbiAgfCBMaXRfcHJlY2lzaW9uIDogaW50IC0+ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBQcmVjaXNpb24gYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikgKilcbiAgfCBBcmdfcHJlY2lzaW9uIDogKGludCAtPiAnYSwgJ2EpIHByZWNpc2lvblxuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9mLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHByZWNpc2lvbiBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwcmVjX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogc2VlIHRoZSBDdXN0b20gZm9ybWF0IGNvbWJpbmF0b3IgKilcbnR5cGUgKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSA9XG4gIHwgQ3VzdG9tX3plcm8gOiAoJ2EsIHN0cmluZywgJ2EpIGN1c3RvbV9hcml0eVxuICB8IEN1c3RvbV9zdWNjIDogKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSAtPlxuICAgICgnYSwgJ3ggLT4gJ2IsICd4IC0+ICdjKSBjdXN0b21fYXJpdHlcblxuKCoqKilcblxuKCogICAgICAgIFJlbGF0aW9uYWwgZm9ybWF0IHR5cGVzXG5cbkluIHRoZSBmaXJzdCBmb3JtYXQrZ2FkdHMgaW1wbGVtZW50YXRpb24sIHRoZSB0eXBlIGZvciAlKC4uJSkgaW4gdGhlXG5mbXQgR0FEVCB3YXMgYXMgZm9sbG93czpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqICgnZDEsICdxMSwgJ2QyLCAncTIpIHJlYWRlcl9uYl91bmlmaWVyICpcbiAgICAoJ3gsICdiLCAnYywgJ2QxLCAncTEsICd1KSBmbXR0eSAqXG4gICAgKCd1LCAnYiwgJ2MsICdxMSwgJ2UxLCAnZikgZm10IC0+XG4gICAgICAoKCd4LCAnYiwgJ2MsICdkMiwgJ3EyLCAndSkgZm9ybWF0NiAtPiAneCwgJ2IsICdjLCAnZDEsICdlMSwgJ2YpIGZtdFxuXG5Ob3RpY2UgdGhhdCB0aGUgJ3UgcGFyYW1ldGVyIGluICdmIHBvc2l0aW9uIGluIHRoZSBmb3JtYXQgYXJndW1lbnRcbigoJ3gsIC4uLCAndSkgZm9ybWF0NiAtPiAuLikgaXMgZXF1YWwgdG8gdGhlICd1IHBhcmFtZXRlciBpbiAnYVxucG9zaXRpb24gaW4gdGhlIGZvcm1hdCB0YWlsICgoJ3UsIC4uLCAnZikgZm10KS4gVGhpcyBtZWFucyB0aGF0IHRoZVxudHlwZSBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0IHBhcmFtZXRlciBkZXBlbmRzIG9mIHdoZXJlIHRoZSAlKC4uLiUpXG5hcmUgaW4gdGhlIGZvcm1hdCBzdHJpbmc6XG5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKVwiXG4gIC0gOiAodW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gdW5pdFxuICA9IDxmdW4+XG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSklZFwiXG4gIC0gOiAoaW50IC0+IHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgaW50IC0+IHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiBpbnQgLT4gdW5pdFxuICA9IDxmdW4+XG5cbk9uIHRoZSBjb250cmFyeSwgdGhlIGxlZ2FjeSB0eXBlciBnaXZlcyBhIGNsZXZlciB0eXBlIHRoYXQgZG9lcyBub3RcbmRlcGVuZCBvbiB0aGUgcG9zaXRpb24gb2YgJSguLiUpIGluIHRoZSBmb3JtYXQgc3RyaW5nLiBGb3IgZXhhbXBsZSxcbiUoJSkgd2lsbCBoYXZlIHRoZSBwb2x5bW9ycGhpYyB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKTogaXQgY2FuXG5iZSBjb25jYXRlbmF0ZWQgdG8gYW55IGZvcm1hdCB0eXBlLCBhbmQgb25seSBlbmZvcmNlcyB0aGUgY29uc3RyYWludFxudGhhdCBpdHMgJ2EgYW5kICdmIHBhcmFtZXRlcnMgYXJlIGVxdWFsIChubyBmb3JtYXQgYXJndW1lbnRzKSBhbmQgJ2RcbmFuZCAnZSBhcmUgZXF1YWwgKG5vIHJlYWRlciBhcmd1bWVudCkuXG5cblRoZSB3ZWFrZW5pbmcgb2YgdGhpcyBwYXJhbWV0ZXIgdHlwZSBpbiB0aGUgR0FEVCB2ZXJzaW9uIGJyb2tlIHVzZXJcbmNvZGUgKGluIGZhY3QgaXQgZXNzZW50aWFsbHkgbWFkZSAlKC4uLiUpIHVudXNhYmxlIGV4Y2VwdCBhdCB0aGUgbGFzdFxucG9zaXRpb24gb2YgYSBmb3JtYXQpLiBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIHdvdWxkIG5vdCB3b3JrXG5hbnltb3JlOlxuXG4gIGZ1biBzZXAgLT5cbiAgICBGb3JtYXQucHJpbnRmIFwiZm9vJSglKWJhciUoJSliYXpcIiBzZXAgc2VwXG5cbkFzIHRoZSB0eXBlLWNoZWNrZXIgd291bGQgcmVxdWlyZSB0d28gKmluY29tcGF0aWJsZSogdHlwZXMgZm9yIHRoZSAlKCUpXG5pbiBkaWZmZXJlbnQgcG9zaXRpb25zLlxuXG5UaGUgc29sdXRpb24gdG8gcmVnYWluIGEgZ2VuZXJhbCB0eXBlIGZvciAlKC4uJSkgaXMgdG8gZ2VuZXJhbGl6ZSB0aGlzXG50ZWNobmlxdWUsIG5vdCBvbmx5IG9uIHRoZSAnZCwgJ2UgcGFyYW1ldGVycywgYnV0IG9uIGFsbCBzaXhcbnBhcmFtZXRlcnMgb2YgYSBmb3JtYXQ6IHdlIGludHJvZHVjZSBhIFwicmVsYXRpb25hbFwiIHR5cGVcbiAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbndob3NlIHZhbHVlcyBhcmUgcHJvb2ZzIHRoYXQgKCdhMSwgLi4sICdmMSkgYW5kICgnYTIsIC4uLCAnZjIpIG1vcmFsbHlcbmNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgZm9ybWF0IHR5cGU6ICdhMSBpcyBvYnRhaW5lZCBmcm9tICdmMSwnYjEsJ2MxXG5pbiB0aGUgZXhhY3Qgc2FtZSB3YXkgdGhhdCAnYTIgaXMgb2J0YWluZWQgZnJvbSAnZjIsJ2IyLCdjMiwgZXRjLlxuXG5Gb3IgZXhhbXBsZSwgdGhlIHJlbGF0aW9uIGJldHdlZW4gdHdvIGZvcm1hdCB0eXBlcyBiZWdpbm5pbmcgd2l0aCBhIENoYXJcbnBhcmFtZXRlciBpcyBhcyBmb2xsb3dzOlxuXG58IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuSW4gdGhlIGdlbmVyYWwgY2FzZSwgdGhlIHRlcm0gc3RydWN0dXJlIG9mIGZtdHR5X3JlbCBpcyAoYWxtb3N0WzFdKVxuaXNvbW9ycGhpYyB0byB0aGUgZm10dHkgb2YgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uOiBldmVyeVxuY29uc3RydWN0b3IgaXMgcmUtcmVhZCB3aXRoIGEgYmluYXJ5LCByZWxhdGlvbmFsIHR5cGUsIGluc3RlYWQgb2YgdGhlXG5wcmV2aW91cyB1bmFyeSB0eXBpbmcuIGZtdHR5IGNhbiB0aGVuIGJlIHJlLWRlZmluZWQgYXMgdGhlIGRpYWdvbmFsIG9mXG5mbXR0eV9yZWw6XG5cbiAgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcblxuT25jZSB3ZSBoYXZlIHRoaXMgZm10dHlfcmVsIHR5cGUgaW4gcGxhY2UsIHdlIGNhbiBnaXZlIHRoZSBtb3JlXG5nZW5lcmFsIHR5cGUgdG8gJSguLi4lKTpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbldlIGFjY2VwdCBhbnkgZm9ybWF0ICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NikgKHRoaXMgaXNcbmNvbXBsZXRlbHkgdW5yZWxhdGVkIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGZvcm1hdCksIGJ1dCBhbHNvXG5yZXF1aXJlIGEgcHJvb2YgdGhhdCB0aGlzIGZvcm1hdCBpcyBpbiByZWxhdGlvbiB0byBhbm90aGVyIGZvcm1hdCB0aGF0XG5pcyBjb25jYXRlbmFibGUgdG8gdGhlIGZvcm1hdCB0YWlsLiBXaGVuIGV4ZWN1dGluZyBhICUoLi4uJSkgZm9ybWF0XG4oaW4gY2FtbGludGVybmFsRm9ybWF0Lm1sOm1ha2VfcHJpbnRmIG9yIHNjYW5mLm1sOm1ha2Vfc2NhbmYpLCB3ZVxudHJhbnN0eXBlIHRoZSBmb3JtYXQgYWxvbmcgdGhpcyByZWxhdGlvbiB1c2luZyB0aGUgJ3JlY2FzdCcgZnVuY3Rpb25cbnRvIHRyYW5zcG9zZSBiZXR3ZWVuIHJlbGF0ZWQgZm9ybWF0IHR5cGVzLlxuXG4gIHZhbCByZWNhc3QgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSkgZm10XG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXRcblxuTk9URSBbMV06IHRoZSB0eXBpbmcgb2YgRm9ybWF0X3N1YnN0X3R5IHJlcXVpcmVzIG5vdCBvbmUgZm9ybWF0IHR5cGUsIGJ1dFxudHdvLCBvbmUgdG8gZXN0YWJsaXNoIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdCBhcmd1bWVudCBhbmQgdGhlXG5maXJzdCBzaXggcGFyYW1ldGVycywgYW5kIHRoZSBvdGhlciBmb3IgdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0XG5hcmd1bWVudCBhbmQgdGhlIGxhc3Qgc2l4IHBhcmFtZXRlcnMuXG5cbnwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5XaGVuIHdlIGdlbmVyYXRlIGEgZm9ybWF0IEFTVCwgd2UgZ2VuZXJhdGUgZXhhY3RseSB0aGUgc2FtZSB3aXRuZXNzXG5mb3IgYm90aCByZWxhdGlvbnMsIGFuZCB0aGUgd2l0bmVzcy1jb252ZXJzaW9uIGZ1bmN0aW9ucyBpblxuY2FtbGludGVybmFsRm9ybWF0IGRvIHJlbHkgb24gdGhpcyBpbnZhcmlhbnQuIEZvciBleGFtcGxlLCB0aGVcbmZ1bmN0aW9uIHRoYXQgcHJvdmVzIHRoYXQgdGhlIHJlbGF0aW9uIGlzIHRyYW5zaXRpdmVcblxuICB2YWwgdHJhbnMgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMixcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuXG5kb2VzIGFzc3VtZSB0aGF0IHRoZSB0d28gaW5wdXRzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSB0ZXJtIHN0cnVjdHVyZVxuKGFuZCBpcyBvbmx5IGV2ZXJ5IHVzZWQgZm9yIGFyZ3VtZW50IHdpdG5lc3NlcyBvZiB0aGVcbkZvcm1hdF9zdWJzdF90eSBjb25zdHJ1Y3RvcikuXG4qKVxuXG4oKiBUeXBlIG9mIGEgYmxvY2sgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBibG9ja190eXBlID1cbiAgfCBQcF9oYm94ICAgKCogSG9yaXpvbnRhbCBibG9jayBubyBsaW5lIGJyZWFraW5nICopXG4gIHwgUHBfdmJveCAgICgqIFZlcnRpY2FsIGJsb2NrIGVhY2ggYnJlYWsgbGVhZHMgdG8gYSBuZXcgbGluZSAqKVxuICB8IFBwX2h2Ym94ICAoKiBIb3Jpem9udGFsLXZlcnRpY2FsIGJsb2NrOiBzYW1lIGFzIHZib3gsIGV4Y2VwdCBpZiB0aGlzIGJsb2NrXG4gICAgICAgICAgICAgICAgIGlzIHNtYWxsIGVub3VnaCB0byBmaXQgb24gYSBzaW5nbGUgbGluZSAqKVxuICB8IFBwX2hvdmJveCAoKiBIb3Jpem9udGFsIG9yIFZlcnRpY2FsIGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jayAqKVxuICB8IFBwX2JveCAgICAoKiBIb3Jpem9udGFsIG9yIEluZGVudCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2ssIG9yXG4gICAgICAgICAgICAgICAgIHdoZW4gaXQgbGVhZHMgdG8gYSBuZXcgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbGluZSAqKVxuICB8IFBwX2ZpdHMgICAoKiBJbnRlcm5hbCB1c2FnZTogd2hlbiBhIGJsb2NrIGZpdHMgb24gYSBzaW5nbGUgbGluZSAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBmb3JtYXR0aW5nX2xpdCA9XG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBdICAgKilcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQH0gICAqKVxuICB8IEJyZWFrIG9mIHN0cmluZyAqIGludCAqIGludCAgICAgICAgICAoKiBALCB8IEAgIHwgQDsgfCBAOzw+ICopXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA/ICAgKilcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFxcbiAgKilcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQC4gICAqKVxuICB8IE1hZ2ljX3NpemUgb2Ygc3RyaW5nICogaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPG4+ICopXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBAICAgKilcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQCUlICAqKVxuICB8IFNjYW5faW5kaWMgb2YgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAWCAgICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlbiA9XG4gIHwgT3Blbl90YWcgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEB7ICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cbiAgfCBPcGVuX2JveCA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQFsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCB0eXBlIGVsZW1lbnRzLiAqKVxuKCogSW4gcGFydGljdWxhciB1c2VkIHRvIHJlcHJlc2VudCAlKC4uLiUpIGFuZCAley4uLiV9IGNvbnRlbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5hbmQgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCA9XG4gIHwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgU3RyaW5nX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoc3RyaW5nIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgc3RyaW5nIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQzMl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQzMiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDMyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IE5hdGl2ZWludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbmQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKG5hdGl2ZWludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIG5hdGl2ZWludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQ2NF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQ2NCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDY0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEZsb2F0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGZsb2F0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgZmxvYXQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQm9vbF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVCICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoYm9vbCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGJvb2wgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBGb3JtYXRfYXJnX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG4gIHwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnMuICopXG4gIHwgQWxwaGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAneCAtPiAnYzEpIC0+ICd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAneCAtPiAnYzIpIC0+ICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFRoZXRhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ2MxKSAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ2MyKSAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBBbnlfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFVzZWQgZm9yIGN1c3RvbSBmb3JtYXRzICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IFJlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBFbmRfb2ZfZm10dHkgOlxuICAgICAgKCdmMSwgJ2IxLCAnYzEsICdkMSwgJ2QxLCAnZjEsXG4gICAgICAgJ2YyLCAnYjIsICdjMiwgJ2QyLCAnZDIsICdmMikgZm10dHlfcmVsXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IGVsZW1lbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgPVxuICB8IENoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVDICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFN0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVTICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDMyIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgTmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5bZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBuYXRpdmVpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDY0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgICAgIGZsb2F0X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBmbG9hdCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEJvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbYkJdICopXG4gICAgICAoJ3gsIGJvb2wgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbHVzaCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlISAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBhYmMgKilcbiAgICAgIHN0cmluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENoYXJfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIHggKilcbiAgICAgIGNoYXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IEZvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBBbHBoYSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICd4IC0+ICdjKSAtPiAneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBUaGV0YSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICdjKSAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3I6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgIGZvcm1hdHRpbmdfbGl0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0dGluZ19nZW4gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UxLCAnZjEpIGZvcm1hdHRpbmdfZ2VuICpcbiAgICAgICgnZjEsICdiLCAnYywgJ2UxLCAnZTIsICdmMikgZm10IC0+ICgnYTEsICdiLCAnYywgJ2QxLCAnZTIsICdmMikgZm10XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCAtPiAnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoc3RyaW5nIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChpbnQgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJTBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJZ25vcmVkX3BhcmFtIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGlnbm9yZWQgKiAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBDdXN0b20gcHJpbnRpbmcgZm9ybWF0IChQUiM2NDUyLCBHUFIjMTQwKVxuXG4gICAgIFdlIGluY2x1ZGUgYSB0eXBlIEN1c3RvbSBvZiBcImN1c3RvbSBjb252ZXJ0ZXJzXCIsIHdoZXJlIGFuXG4gICAgIGFyYml0cmFyeSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IG9uZSBvciBtb3JlXG4gICAgIGFyZ3VtZW50cy4gVGhlcmUgaXMgbm8gc3ludGF4IGZvciBjdXN0b20gY29udmVydGVycywgaXQgaXMgb25seVxuICAgICBpbnRlbmRlZCBmb3IgY3VzdG9tIHByb2Nlc3NvcnMgdGhhdCB3aXNoIHRvIHJlbHkgb24gdGhlXG4gICAgIHN0ZGxpYi1kZWZpbmVkIGZvcm1hdCBHQURUcy5cblxuICAgICBGb3IgaW5zdGFuY2UgYSBwcmUtcHJvY2Vzc29yIGNvdWxkIGNob29zZSB0byBpbnRlcnByZXQgc3RyaW5nc1xuICAgICBwcmVmaXhlZCB3aXRoIFtcIiFcIl0gYXMgZm9ybWF0IHN0cmluZ3Mgd2hlcmUgWyV7eyAuLi4gfX1dIGlzXG4gICAgIGEgc3BlY2lhbCBmb3JtIHRvIHBhc3MgYSB0b19zdHJpbmcgZnVuY3Rpb24sIHNvIHRoYXQgb25lIGNvdWxkXG4gICAgIHdyaXRlOlxuXG4gICAgIHtbXG4gICAgICAgdHlwZSB0ID0geyB4IDogaW50OyB5IDogaW50IH1cblxuICAgICAgIGxldCBzdHJpbmdfb2ZfdCB0ID0gUHJpbnRmLnNwcmludGYgXCJ7IHggPSAlZDsgeSA9ICVkIH1cIiB0LnggdC55XG5cbiAgICAgICBQcmludGYucHJpbnRmICFcInQgPSAle3tzdHJpbmdfb2ZfdH19XCIgeyB4ID0gNDI7IHkgPSA0MiB9XG4gICAgIF19XG4gICopXG4gIHwgQ3VzdG9tIDpcbiAgICAgICgnYSwgJ3gsICd5KSBjdXN0b21fYXJpdHkgKiAodW5pdCAtPiAneCkgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogZW5kIG9mIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gKilcbiAgfCBFbmRfb2ZfZm9ybWF0IDpcbiAgICAgICAgKCdmLCAnYiwgJ2MsICdlLCAnZSwgJ2YpIGZtdFxuXG4oKioqKVxuXG4oKiBUeXBlIGZvciBpZ25vcmVkIHBhcmFtZXRlcnMgKHNlZSBcIiVfXCIpLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkID1cbiAgfCBJZ25vcmVkX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9DICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfcyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfUyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9sZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9uZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9MZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9mICopXG4gICAgICBwYWRfb3B0aW9uICogcHJlY19vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Jvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0IgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3suLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9yZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICopXG4gICAgICAoJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0IC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXzBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPVxuICBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAqIHN0cmluZ1xuXG5sZXQgcmVjIGVyYXNlX3JlbCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAoYSwgYiwgYywgZCwgZSwgZixcbiAgIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIF90eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGUgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0IHR5cGVzLiAqKVxuKCogVXNlZCBieTpcbiAgICogcmVhZGVyX25iX3VuaWZpZXJfb2ZfZm10dHkgdG8gY291bnQgcmVhZGVycyBpbiBhbiBmbXR0eSxcbiAgICogU2NhbmYudGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyB0byBleHRyYWN0IHJlYWRlcnMgaW5zaWRlICUoLi4uJSksXG4gICAqIENhbWxpbnRlcm5hbEZvcm1hdC5mbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCB0byBleHRyYWN0IGZvcm1hdCB0eXBlLiAqKVxuXG4oKlxubGV0IHJlYyBjb25jYXRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdHR5ID1cbiopXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAgICAgIGcxIGoxIGcyIGoyXG4gIC5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGQxLCBhMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGQyLCBhMikgZm10dHlfcmVsIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZTEsIGYxLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZTIsIGYyKSBmbXR0eV9yZWwgPVxuZnVuIGZtdHR5MSBmbXR0eTIgLT4gbWF0Y2ggZm10dHkxIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEVuZF9vZl9mbXR0eSAtPiBmbXR0eTJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXRzLiAqKVxubGV0IHJlYyBjb25jYXRfZm10IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdCA9XG5mdW4gZm10MSBmbXQyIC0+IG1hdGNoIGZtdDEgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIFN0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIENhbWxfc3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDY0IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBDaGFyIChyZXN0KSAtPlxuICAgIENoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgQ2FtbF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgQm9vbCAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgQWxwaGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBUaGV0YSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBDdXN0b20gKGFyaXR5LCBmLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBSZWFkZXIgcmVzdCAtPlxuICAgIFJlYWRlciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIEZsdXNoIChjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgU3RyaW5nX2xpdGVyYWwgKHN0ciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgQ2hhcl9saXRlcmFsICAgKGNociwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmcgICAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgIFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgKHJlc3QpIC0+XG4gICAgU2Nhbl9uZXh0X2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBJZ25vcmVkX3BhcmFtIChpZ24sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBmbXQyXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBHYWJyaWVsIFNjaGVyZXIsIHByb2pldCBQYXJ0b3V0LCBJTlJJQSBQYXJpcy1TYWNsYXkgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENhbWxpbnRlcm5hbEF0b21pYyBpcyBhIGRlcGVuZGVuY3kgb2YgU3RkbGliLCBzbyBpdCBpcyBjb21waWxlZCB3aXRoXG4gICAtbm9wZXJ2YXNpdmVzLiAqKVxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFdlIGFyZSBub3QgcmV1c2luZyAoJ2EgcmVmKSBkaXJlY3RseSB0byBtYWtlIGl0IGVhc2llciB0byByZWFzb25cbiAgIGFib3V0IGF0b21pY2l0eSBpZiB3ZSB3aXNoIHRvOiBldmVuIGluIGEgc2VxdWVudGlhbCBpbXBsZW1lbnRhdGlvbixcbiAgIHNpZ25hbHMgYW5kIG90aGVyIGFzeW5jaHJvbm91cyBjYWxsYmFja3MgbWlnaHQgYnJlYWsgYXRvbWljaXR5LiAqKVxudHlwZSAnYSB0ID0ge211dGFibGUgdjogJ2F9XG5cbmxldCBtYWtlIHYgPSB7dn1cbmxldCBnZXQgciA9IHIudlxubGV0IHNldCByIHYgPSByLnYgPC0gdlxuXG4oKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgc2V0IHRvIG5ldmVyIGJlIGlubGluZWQ6IEZsYW1iZGEgaXNcbiAgIGFsbG93ZWQgdG8gbW92ZSBzdXJyb3VuZGluZyBjb2RlIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbixcbiAgIGluY2x1ZGluZyBhbGxvY2F0aW9ucy4gKilcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGV4Y2hhbmdlIHIgdiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIHIudiA8LSB2O1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXRbQGlubGluZSBuZXZlcl0gY29tcGFyZV9hbmRfc2V0IHIgc2VlbiB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgaWYgY3VyID09IHNlZW4gdGhlbiAoXG4gICAgci52IDwtIHY7XG4gICAgKCogRU5EIEFUT01JQyAqKVxuICAgIHRydWVcbiAgKSBlbHNlXG4gICAgZmFsc2VcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGZldGNoX2FuZF9hZGQgciBuID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIChjdXIgKyBuKTtcbiAgKCogRU5EIEFUT01JQyAqKVxuICBjdXJcblxubGV0IGluY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByIDEpXG5sZXQgZGVjciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgKC0xKSlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXhjZXB0aW9ucyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gICgqIGZvciBydW50aW1lL2ZhaWxfbmF0LmMgKilcbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmFycmF5X2JvdW5kX2Vycm9yXCJcbiAgICAoSW52YWxpZF9hcmd1bWVudCBcImluZGV4IG91dCBvZiBib3VuZHNcIilcblxuZXh0ZXJuYWwgcmFpc2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZVwiXG5leHRlcm5hbCByYWlzZV9ub3RyYWNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2Vfbm90cmFjZVwiXG5cbmxldCBmYWlsd2l0aCBzID0gcmFpc2UoRmFpbHVyZSBzKVxubGV0IGludmFsaWRfYXJnIHMgPSByYWlzZShJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbmV4Y2VwdGlvbiBFeGl0XG5leGNlcHRpb24gTWF0Y2hfZmFpbHVyZSA9IE1hdGNoX2ZhaWx1cmVcbmV4Y2VwdGlvbiBBc3NlcnRfZmFpbHVyZSA9IEFzc2VydF9mYWlsdXJlXG5leGNlcHRpb24gSW52YWxpZF9hcmd1bWVudCA9IEludmFsaWRfYXJndW1lbnRcbmV4Y2VwdGlvbiBGYWlsdXJlID0gRmFpbHVyZVxuZXhjZXB0aW9uIE5vdF9mb3VuZCA9IE5vdF9mb3VuZFxuZXhjZXB0aW9uIE91dF9vZl9tZW1vcnkgPSBPdXRfb2ZfbWVtb3J5XG5leGNlcHRpb24gU3RhY2tfb3ZlcmZsb3cgPSBTdGFja19vdmVyZmxvd1xuZXhjZXB0aW9uIFN5c19lcnJvciA9IFN5c19lcnJvclxuZXhjZXB0aW9uIEVuZF9vZl9maWxlID0gRW5kX29mX2ZpbGVcbmV4Y2VwdGlvbiBEaXZpc2lvbl9ieV96ZXJvID0gRGl2aXNpb25fYnlfemVyb1xuZXhjZXB0aW9uIFN5c19ibG9ja2VkX2lvID0gU3lzX2Jsb2NrZWRfaW9cbmV4Y2VwdGlvbiBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSA9IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG5cbigqIENvbXBvc2l0aW9uIG9wZXJhdG9ycyAqKVxuXG5leHRlcm5hbCAoIHw+ICkgOiAnYSAtPiAoJ2EgLT4gJ2IpIC0+ICdiID0gXCIlcmV2YXBwbHlcIlxuZXh0ZXJuYWwgKCBAQCApIDogKCdhIC0+ICdiKSAtPiAnYSAtPiAnYiA9IFwiJWFwcGx5XCJcblxuKCogRGVidWdnaW5nICopXG5cbmV4dGVybmFsIF9fTE9DX18gOiBzdHJpbmcgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fRklMRV9fIDogc3RyaW5nID0gXCIlbG9jX0ZJTEVcIlxuZXh0ZXJuYWwgX19MSU5FX18gOiBpbnQgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX01PRFVMRV9fIDogc3RyaW5nID0gXCIlbG9jX01PRFVMRVwiXG5leHRlcm5hbCBfX1BPU19fIDogc3RyaW5nICogaW50ICogaW50ICogaW50ID0gXCIlbG9jX1BPU1wiXG5leHRlcm5hbCBfX0ZVTkNUSU9OX18gOiBzdHJpbmcgPSBcIiVsb2NfRlVOQ1RJT05cIlxuXG5leHRlcm5hbCBfX0xPQ19PRl9fIDogJ2EgLT4gc3RyaW5nICogJ2EgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fTElORV9PRl9fIDogJ2EgLT4gaW50ICogJ2EgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX1BPU19PRl9fIDogJ2EgLT4gKHN0cmluZyAqIGludCAqIGludCAqIGludCkgKiAnYSA9IFwiJWxvY19QT1NcIlxuXG4oKiBDb21wYXJpc29ucyAqKVxuXG5leHRlcm5hbCAoID0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5leHRlcm5hbCAoIDw+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuZXh0ZXJuYWwgKCA8ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc3RoYW5cIlxuZXh0ZXJuYWwgKCA+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuZXh0ZXJuYWwgKCA8PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5leHRlcm5hbCAoID49ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcbmV4dGVybmFsIGNvbXBhcmUgOiAnYSAtPiAnYSAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxubGV0IG1pbiB4IHkgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCAhPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxXCJcblxuKCogQm9vbGVhbiBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIG5vdCA6IGJvb2wgLT4gYm9vbCA9IFwiJWJvb2xub3RcIlxuZXh0ZXJuYWwgKCAmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCAmJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggb3IgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcbmV4dGVybmFsICggfHwgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcblxuKCogSW50ZWdlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0gKSA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgKCB+KyApIDogaW50IC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCAoIC0gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsICggKiApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgKCAvICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCAoIG1vZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcblxuZXh0ZXJuYWwgKCBsYW5kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCAoIGxvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCAoIGx4b3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcblxubGV0IGxub3QgeCA9IHggbHhvciAoLTEpXG5cbmV4dGVybmFsICggbHNsICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCAoIGxzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxuZXh0ZXJuYWwgKCBhc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcblxubGV0IG1heF9pbnQgPSAoLTEpIGxzciAxXG5sZXQgbWluX2ludCA9IG1heF9pbnQgKyAxXG5cbigqIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LS4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgKCB+Ky4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgKCArLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCAoIC0uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsICggKi4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgKCAvLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCAoICoqICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxcCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzFwX2Zsb2F0XCIgXCJjYW1sX2xvZzFwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Npbl9mbG9hdFwiIFwic2luXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5oX2Zsb2F0XCIgXCJzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbmhfZmxvYXRcIiBcImNhbWxfYXNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc3FydCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NxcnRfZmxvYXRcIiBcInNxcnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuaF9mbG9hdFwiIFwiY2FtbF9hdGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnNfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcbmV4dGVybmFsIGNvcHlzaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG5leHRlcm5hbCBmbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgaW50X29mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBmbG9hdF9vZl9iaXRzIDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1wiIFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzX3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxubGV0IGluZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5lZ19pbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHhGRl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuYW4gPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDFMXG5sZXQgbWF4X2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0VGX0ZGX0ZGX0ZGX0ZGX0ZGX0ZGTFxubGV0IG1pbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgwMF8xMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBlcHNpbG9uX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDNDX0IwXzAwXzAwXzAwXzAwXzAwXzAwTFxuXG50eXBlIGZwY2xhc3MgPVxuICAgIEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuZXh0ZXJuYWwgY2xhc3NpZnlfZmxvYXQgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gZnBjbGFzcyA9XG4gIFwiY2FtbF9jbGFzc2lmeV9mbG9hdFwiIFwiY2FtbF9jbGFzc2lmeV9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cblxuKCogU3RyaW5nIGFuZCBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGVzIFN0cmluZyBhbmQgQnl0ZXMgKilcblxuZXh0ZXJuYWwgc3RyaW5nX2xlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2xlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19jcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHN0cmluZ19ibGl0IDogc3RyaW5nIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgKCBeICkgczEgczIgPVxuICBsZXQgbDEgPSBzdHJpbmdfbGVuZ3RoIHMxIGFuZCBsMiA9IHN0cmluZ19sZW5ndGggczIgaW5cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgKGwxICsgbDIpIGluXG4gIHN0cmluZ19ibGl0IHMxIDAgcyAwIGwxO1xuICBzdHJpbmdfYmxpdCBzMiAwIHMgbDEgbDI7XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBDaGFyICopXG5cbmV4dGVybmFsIGludF9vZl9jaGFyIDogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hhcl9vZl9pbnQgOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcbmxldCBjaGFyX29mX2ludCBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiY2hhcl9vZl9pbnRcIiBlbHNlIHVuc2FmZV9jaGFyX29mX2ludCBuXG5cbigqIFVuaXQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogUGFpciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGZzdCA6ICdhICogJ2IgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgc25kIDogJ2EgKiAnYiAtPiAnYiA9IFwiJWZpZWxkMVwiXG5cbigqIFJlZmVyZW5jZXMgKilcblxudHlwZSAnYSByZWYgPSB7IG11dGFibGUgY29udGVudHMgOiAnYSB9XG5leHRlcm5hbCByZWYgOiAnYSAtPiAnYSByZWYgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCAoIDo9ICkgOiAnYSByZWYgLT4gJ2EgLT4gdW5pdCA9IFwiJXNldGZpZWxkMFwiXG5leHRlcm5hbCBpbmNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlaW5jclwiXG5leHRlcm5hbCBkZWNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlZGVjclwiXG5cbigqIFJlc3VsdCB0eXBlICopXG5cbnR5cGUgKCdhLCdiKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdiXG5cbigqIFN0cmluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQgOiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5cbmxldCBzdHJpbmdfb2ZfYm9vbCBiID1cbiAgaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG5sZXQgYm9vbF9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IHRydWVcbiAgfCBcImZhbHNlXCIgLT4gZmFsc2VcbiAgfCBfIC0+IGludmFsaWRfYXJnIFwiYm9vbF9vZl9zdHJpbmdcIlxuXG5sZXQgYm9vbF9vZl9zdHJpbmdfb3B0ID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiBTb21lIHRydWVcbiAgfCBcImZhbHNlXCIgLT4gU29tZSBmYWxzZVxuICB8IF8gLT4gTm9uZVxuXG5sZXQgc3RyaW5nX29mX2ludCBuID1cbiAgZm9ybWF0X2ludCBcIiVkXCIgblxuXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcblxubGV0IGludF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgc3RyaW5nX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5cbmxldCB2YWxpZF9mbG9hdF9sZXhlbSBzID1cbiAgbGV0IGwgPSBzdHJpbmdfbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPj0gbCB0aGVuIHMgXiBcIi5cIiBlbHNlXG4gICAgbWF0Y2ggc3RyaW5nX2dldCBzIGkgd2l0aFxuICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBsb29wIChpICsgMSlcbiAgICB8IF8gLT4gc1xuICBpblxuICBsb29wIDBcblxubGV0IHN0cmluZ19vZl9mbG9hdCBmID0gdmFsaWRfZmxvYXRfbGV4ZW0gKGZvcm1hdF9mbG9hdCBcIiUuMTJnXCIgZilcblxuZXh0ZXJuYWwgZmxvYXRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0X29mX3N0cmluZ1wiXG5cbmxldCBmbG9hdF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChmbG9hdF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgTGlzdCAqKVxuXG5sZXQgcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICAgIFtdIC0+IGwyXG4gIHwgaGQgOjogdGwgLT4gaGQgOjogKHRsIEAgbDIpXG5cbigqIEkvTyBvcGVyYXRpb25zICopXG5cbnR5cGUgaW5fY2hhbm5lbFxudHlwZSBvdXRfY2hhbm5lbFxuXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDogaW50IC0+IG91dF9jaGFubmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcIlxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX2luIDogaW50IC0+IGluX2NoYW5uZWwgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXCJcblxubGV0IHN0ZGluID0gb3Blbl9kZXNjcmlwdG9yX2luIDBcbmxldCBzdGRvdXQgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDFcbmxldCBzdGRlcnIgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDJcblxuKCogR2VuZXJhbCBvdXRwdXQgZnVuY3Rpb25zICopXG5cbnR5cGUgb3Blbl9mbGFnID1cbiAgICBPcGVuX3Jkb25seSB8IE9wZW5fd3Jvbmx5IHwgT3Blbl9hcHBlbmRcbiAgfCBPcGVuX2NyZWF0IHwgT3Blbl90cnVuYyB8IE9wZW5fZXhjbFxuICB8IE9wZW5fYmluYXJ5IHwgT3Blbl90ZXh0IHwgT3Blbl9ub25ibG9ja1xuXG5leHRlcm5hbCBvcGVuX2Rlc2MgOiBzdHJpbmcgLT4gb3Blbl9mbGFnIGxpc3QgLT4gaW50IC0+IGludCA9IFwiY2FtbF9zeXNfb3BlblwiXG5cbmV4dGVybmFsIHNldF9vdXRfY2hhbm5lbF9uYW1lOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5fb3V0X2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX291dChvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9vdXRfY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9vdXQgbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fdGV4dF0gMG82NjYgbmFtZVxuXG5sZXQgb3Blbl9vdXRfYmluIG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX2JpbmFyeV0gMG82NjYgbmFtZVxuXG5leHRlcm5hbCBmbHVzaCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfZmx1c2hcIlxuXG5leHRlcm5hbCBvdXRfY2hhbm5lbHNfbGlzdCA6IHVuaXQgLT4gb3V0X2NoYW5uZWwgbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3RcIlxuXG5sZXQgZmx1c2hfYWxsICgpID1cbiAgbGV0IHJlYyBpdGVyID0gZnVuY3Rpb25cbiAgICAgIFtdIC0+ICgpXG4gICAgfCBhOjpsIC0+XG4gICAgICAgIGJlZ2luIHRyeVxuICAgICAgICAgICAgZmx1c2ggYVxuICAgICAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAgICAgKCkgKCogaWdub3JlIGNoYW5uZWxzIGNsb3NlZCBkdXJpbmcgYSBwcmVjZWRpbmcgZmx1c2guICopXG4gICAgICAgIGVuZDtcbiAgICAgICAgaXRlciBsXG4gIGluIGl0ZXIgKG91dF9jaGFubmVsc19saXN0ICgpKVxuXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0IDogb3V0X2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dF9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0X3N0cmluZyA6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dFwiXG5cbmV4dGVybmFsIG91dHB1dF9jaGFyIDogb3V0X2NoYW5uZWwgLT4gY2hhciAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcblxubGV0IG91dHB1dF9ieXRlcyBvYyBzID1cbiAgdW5zYWZlX291dHB1dCBvYyBzIDAgKGJ5dGVzX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0X3N0cmluZyBvYyBzID1cbiAgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyAwIChzdHJpbmdfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXQgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXQgb2MgcyBvZnMgbGVuXG5cbmxldCBvdXRwdXRfc3Vic3RyaW5nIG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBzdHJpbmdfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dF9zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgb2ZzIGxlblxuXG5leHRlcm5hbCBvdXRwdXRfYnl0ZSA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcbmV4dGVybmFsIG91dHB1dF9iaW5hcnlfaW50IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2ludFwiXG5cbmV4dGVybmFsIG1hcnNoYWxfdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIC0+IHVuaXQgbGlzdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX291dHB1dF92YWx1ZVwiXG5sZXQgb3V0cHV0X3ZhbHVlIGNoYW4gdiA9IG1hcnNoYWxfdG9fY2hhbm5lbCBjaGFuIHYgW11cblxuZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dFwiXG5leHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19vdXRcIlxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9vdXRfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2Vfb3V0IG9jID0gZmx1c2ggb2M7IGNsb3NlX291dF9jaGFubmVsIG9jXG5sZXQgY2xvc2Vfb3V0X25vZXJyIG9jID1cbiAgKHRyeSBmbHVzaCBvYyB3aXRoIF8gLT4gKCkpO1xuICAodHJ5IGNsb3NlX291dF9jaGFubmVsIG9jIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9vdXQgOiBvdXRfY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogR2VuZXJhbCBpbnB1dCBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgc2V0X2luX2NoYW5uZWxfbmFtZTogaW5fY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5faW5fZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3JfaW4ob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfaW5fY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9pbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX3RleHRdIDAgbmFtZVxuXG5sZXQgb3Blbl9pbl9iaW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl9iaW5hcnldIDAgbmFtZVxuXG5leHRlcm5hbCBpbnB1dF9jaGFyIDogaW5fY2hhbm5lbCAtPiBjaGFyID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuXG5leHRlcm5hbCB1bnNhZmVfaW5wdXQgOiBpbl9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfaW5wdXRcIlxuXG5sZXQgaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJpbnB1dFwiXG4gIGVsc2UgdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVjIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgbGVuIDw9IDAgdGhlbiAoKSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuIGluXG4gICAgaWYgciA9IDBcbiAgICB0aGVuIHJhaXNlIEVuZF9vZl9maWxlXG4gICAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgKG9mcyArIHIpIChsZW4gLSByKVxuICBlbmRcblxubGV0IHJlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcInJlYWxseV9pbnB1dFwiXG4gIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgbGVuIGluXG4gIHJlYWxseV9pbnB1dCBpYyBzIDAgbGVuO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuZXh0ZXJuYWwgaW5wdXRfc2Nhbl9saW5lIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXCJcblxubGV0IGlucHV0X2xpbmUgY2hhbiA9XG4gIGxldCByZWMgYnVpbGRfcmVzdWx0IGJ1ZiBwb3MgPSBmdW5jdGlvblxuICAgIFtdIC0+IGJ1ZlxuICB8IGhkIDo6IHRsIC0+XG4gICAgICBsZXQgbGVuID0gYnl0ZXNfbGVuZ3RoIGhkIGluXG4gICAgICBieXRlc19ibGl0IGhkIDAgYnVmIChwb3MgLSBsZW4pIGxlbjtcbiAgICAgIGJ1aWxkX3Jlc3VsdCBidWYgKHBvcyAtIGxlbikgdGwgaW5cbiAgbGV0IHJlYyBzY2FuIGFjY3UgbGVuID1cbiAgICBsZXQgbiA9IGlucHV0X3NjYW5fbGluZSBjaGFuIGluXG4gICAgaWYgbiA9IDAgdGhlbiBiZWdpbiAgICAgICAgICAgICAgICAgICAoKiBuID0gMDogd2UgYXJlIGF0IEVPRiAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJhaXNlIEVuZF9vZl9maWxlXG4gICAgICB8IF8gIC0+IGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIGFjY3VcbiAgICBlbmQgZWxzZSBpZiBuID4gMCB0aGVuIGJlZ2luICAgICAgICAgICgqIG4gPiAwOiBuZXdsaW5lIGZvdW5kIGluIGJ1ZmZlciAqKVxuICAgICAgbGV0IHJlcyA9IGJ5dGVzX2NyZWF0ZSAobiAtIDEpIGluXG4gICAgICBpZ25vcmUgKHVuc2FmZV9pbnB1dCBjaGFuIHJlcyAwIChuIC0gMSkpO1xuICAgICAgaWdub3JlIChpbnB1dF9jaGFyIGNoYW4pOyAgICAgICAgICAgKCogc2tpcCB0aGUgbmV3bGluZSAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJlc1xuICAgICAgfCAgXyAtPiBsZXQgbGVuID0gbGVuICsgbiAtIDEgaW5cbiAgICAgICAgICAgICAgYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gKHJlcyA6OiBhY2N1KVxuICAgIGVuZCBlbHNlIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgKCogbiA8IDA6IG5ld2xpbmUgbm90IGZvdW5kICopXG4gICAgICBsZXQgYmVnID0gYnl0ZXNfY3JlYXRlICgtbikgaW5cbiAgICAgIGlnbm9yZSh1bnNhZmVfaW5wdXQgY2hhbiBiZWcgMCAoLW4pKTtcbiAgICAgIHNjYW4gKGJlZyA6OiBhY2N1KSAobGVuIC0gbilcbiAgICBlbmRcbiAgaW4gYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyAoc2NhbiBbXSAwKVxuXG5leHRlcm5hbCBpbnB1dF9ieXRlIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5leHRlcm5hbCBpbnB1dF9iaW5hcnlfaW50IDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfaW50XCJcbmV4dGVybmFsIGlucHV0X3ZhbHVlIDogaW5fY2hhbm5lbCAtPiAnYSA9IFwiY2FtbF9pbnB1dF92YWx1ZVwiXG5leHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXCJcbmV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19pblwiXG5leHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9pbiA6IGluX2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9pbl9ub2VyciBpYyA9ICh0cnkgY2xvc2VfaW4gaWMgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX2luIDogaW5fY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIG91dHB1dCAqKVxuXG5sZXQgcHJpbnRfY2hhciBjID0gb3V0cHV0X2NoYXIgc3Rkb3V0IGNcbmxldCBwcmludF9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IHNcbmxldCBwcmludF9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZG91dCBzXG5sZXQgcHJpbnRfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByaW50X2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJpbnRfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRvdXQgczsgb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcbmxldCBwcmludF9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBlcnJvciAqKVxuXG5sZXQgcHJlcnJfY2hhciBjID0gb3V0cHV0X2NoYXIgc3RkZXJyIGNcbmxldCBwcmVycl9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIHNcbmxldCBwcmVycl9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZGVyciBzXG5sZXQgcHJlcnJfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByZXJyX2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJlcnJfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRlcnIgczsgb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcbmxldCBwcmVycl9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcblxuKCogSW5wdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGlucHV0ICopXG5cbmxldCByZWFkX2xpbmUgKCkgPSBmbHVzaCBzdGRvdXQ7IGlucHV0X2xpbmUgc3RkaW5cbmxldCByZWFkX2ludCAoKSA9IGludF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9pbnRfb3B0ICgpID0gaW50X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdCAoKSA9IGZsb2F0X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0X29wdCAoKSA9IGZsb2F0X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5cbigqIE9wZXJhdGlvbnMgb24gbGFyZ2UgZmlsZXMgKilcblxubW9kdWxlIExhcmdlRmlsZSA9XG4gIHN0cnVjdFxuICAgIGV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dF82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19vdXRfNjRcIlxuICAgIGV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludDY0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gICAgZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXzY0XCJcbiAgICBleHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19pbl82NFwiXG4gICAgZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gIGVuZFxuXG4oKiBGb3JtYXRzICopXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDZcbiAgID0gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG4gICA9IEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZtdFxuICAgICAgICAgICAgICAgKiBzdHJpbmdcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIGZvcm1hdDQgPSAoJ2EsICdiLCAnYywgJ2MsICdjLCAnZCkgZm9ybWF0NlxuXG50eXBlICgnYSwgJ2IsICdjKSBmb3JtYXQgPSAoJ2EsICdiLCAnYywgJ2MpIGZvcm1hdDRcblxubGV0IHN0cmluZ19vZl9mb3JtYXQgKEZvcm1hdCAoX2ZtdCwgc3RyKSkgPSBzdHJcblxuZXh0ZXJuYWwgZm9ybWF0X29mX3N0cmluZyA6XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9IFwiJWlkZW50aXR5XCJcblxubGV0ICggXl4gKSAoRm9ybWF0IChmbXQxLCBzdHIxKSkgKEZvcm1hdCAoZm10Miwgc3RyMikpID1cbiAgRm9ybWF0IChDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuY29uY2F0X2ZtdCBmbXQxIGZtdDIsXG4gICAgICAgICAgc3RyMSBeIFwiJSxcIiBeIHN0cjIpXG5cbigqIE1pc2NlbGxhbmVvdXMgKilcblxuZXh0ZXJuYWwgc3lzX2V4aXQgOiBpbnQgLT4gJ2EgPSBcImNhbWxfc3lzX2V4aXRcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IENhbWxpbnRlcm5hbEF0b21pYy5tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gIGxldCBtb2R1bGUgQXRvbWljID0gQ2FtbGludGVybmFsQXRvbWljIGluXG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gQXRvbWljLm1ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2F0X2V4aXQgKCkgPSAoQ2FtbGludGVybmFsQXRvbWljLmdldCBleGl0X2Z1bmN0aW9uKSAoKVxuXG5sZXQgZXhpdCByZXRjb2RlID1cbiAgZG9fYXRfZXhpdCAoKTtcbiAgc3lzX2V4aXQgcmV0Y29kZVxuXG5sZXQgXyA9IHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIgZG9fYXRfZXhpdFxuXG5leHRlcm5hbCBtYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19tYWpvclwiXG5leHRlcm5hbCBuYWtlZF9wb2ludGVyc19jaGVja2VkIDogdW5pdCAtPiBib29sXG4gID0gXCJjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkXCJcbmxldCAoKSA9IGlmIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgKCkgdGhlbiBhdF9leGl0IG1ham9yXG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICA9IEFyZ1xubW9kdWxlIEFycmF5ICAgICAgICA9IEFycmF5XG5tb2R1bGUgQXJyYXlMYWJlbHMgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgPSBBdG9taWNcbm1vZHVsZSBCaWdhcnJheSAgICAgPSBCaWdhcnJheVxubW9kdWxlIEJvb2wgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgPSBCdWZmZXJcbm1vZHVsZSBCeXRlcyAgICAgICAgPSBCeXRlc1xubW9kdWxlIEJ5dGVzTGFiZWxzICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgID0gQ2FsbGJhY2tcbm1vZHVsZSBDaGFyICAgICAgICAgPSBDaGFyXG5tb2R1bGUgQ29tcGxleCAgICAgID0gQ29tcGxleFxubW9kdWxlIERpZ2VzdCAgICAgICA9IERpZ2VzdFxubW9kdWxlIEVpdGhlciAgICAgICA9IEVpdGhlclxubW9kdWxlIEVwaGVtZXJvbiAgICA9IEVwaGVtZXJvblxubW9kdWxlIEZpbGVuYW1lICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgID0gRmxvYXRcbm1vZHVsZSBGb3JtYXQgICAgICAgPSBGb3JtYXRcbm1vZHVsZSBGdW4gICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgPSBHY1xubW9kdWxlIEdlbmxleCAgICAgICA9IEdlbmxleFxubW9kdWxlIEhhc2h0YmwgICAgICA9IEhhc2h0Ymxcbm1vZHVsZSBJbl9jaGFubmVsICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgID0gSW50XG5tb2R1bGUgSW50MzIgICAgICAgID0gSW50MzJcbm1vZHVsZSBJbnQ2NCAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICA9IExhenlcbm1vZHVsZSBMZXhpbmcgICAgICAgPSBMZXhpbmdcbm1vZHVsZSBMaXN0ICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgID0gTGlzdExhYmVsc1xubW9kdWxlIE1hcCAgICAgICAgICA9IE1hcFxubW9kdWxlIE1hcnNoYWwgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgPSBNb3JlTGFiZWxzXG5tb2R1bGUgTmF0aXZlaW50ICAgID0gTmF0aXZlaW50XG5tb2R1bGUgT2JqICAgICAgICAgID0gT2JqXG5tb2R1bGUgT28gICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgPSBPcHRpb25cbm1vZHVsZSBPdXRfY2hhbm5lbCAgPSBPdXRfY2hhbm5lbFxubW9kdWxlIFBhcnNpbmcgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQZXJ2YXNpdmVzICAgPSBQZXJ2YXNpdmVzXG5tb2R1bGUgUHJpbnRleGMgICAgID0gUHJpbnRleGNcbm1vZHVsZSBQcmludGYgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgPSBRdWV1ZVxubW9kdWxlIFJhbmRvbSAgICAgICA9IFJhbmRvbVxubW9kdWxlIFJlc3VsdCAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICA9IFNjYW5mXG5tb2R1bGUgU2VxICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgID0gU2V0XG5tb2R1bGUgU3RhY2sgICAgICAgID0gU3RhY2tcbm1vZHVsZSBTdGRMYWJlbHMgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJlYW0gICAgICAgPSBTdHJlYW1cbm1vZHVsZSBTdHJpbmcgICAgICAgPSBTdHJpbmdcbm1vZHVsZSBTdHJpbmdMYWJlbHMgPSBTdHJpbmdMYWJlbHNcbm1vZHVsZSBTeXMgICAgICAgICAgPSBTeXNcbm1vZHVsZSBVY2hhciAgICAgICAgPSBVY2hhclxubW9kdWxlIFVuaXQgICAgICAgICA9IFVuaXRcbm1vZHVsZSBXZWFrICAgICAgICAgPSBXZWFrXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuICAgVGhpcyBpcyBhIGxhZ2dlZC1GaWJvbmFjY2kgRig1NSwgMjQsICspIHdpdGggYSBtb2RpZmllZCBhZGRpdGlvblxuICAgZnVuY3Rpb24gdG8gZW5oYW5jZSB0aGUgbWl4aW5nIG9mIGJpdHMuXG4gICBJZiB3ZSB1c2Ugbm9ybWFsIGFkZGl0aW9uLCB0aGUgbG93LW9yZGVyIGJpdCBmYWlscyB0ZXN0cyAxIGFuZCA3XG4gICBvZiB0aGUgRGllaGFyZCB0ZXN0IHN1aXRlLCBhbmQgYml0cyAxIGFuZCAyIGFsc28gZmFpbCB0ZXN0IDcuXG4gICBJZiB3ZSB1c2UgbXVsdGlwbGljYXRpb24gYXMgc3VnZ2VzdGVkIGJ5IE1hcnNhZ2xpYSwgaXQgZG9lc24ndCBmYXJlXG4gICBtdWNoIGJldHRlci5cbiAgIEJ5IG1peGluZyB0aGUgYml0cyBvZiBvbmUgb2YgdGhlIG51bWJlcnMgYmVmb3JlIGFkZGl0aW9uIChYT1IgdGhlXG4gICA1IGhpZ2gtb3JkZXIgYml0cyBpbnRvIHRoZSBsb3ctb3JkZXIgYml0cyksIHdlIGdldCBhIGdlbmVyYXRvciB0aGF0XG4gICBwYXNzZXMgYWxsIHRoZSBEaWVoYXJkIHRlc3RzLlxuKilcblxuZXh0ZXJuYWwgcmFuZG9tX3NlZWQ6IHVuaXQgLT4gaW50IGFycmF5ID0gXCJjYW1sX3N5c19yYW5kb21fc2VlZFwiXG5cbm1vZHVsZSBTdGF0ZSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IHsgc3QgOiBpbnQgYXJyYXk7IG11dGFibGUgaWR4IDogaW50IH1cblxuICBsZXQgbmV3X3N0YXRlICgpID0geyBzdCA9IEFycmF5Lm1ha2UgNTUgMDsgaWR4ID0gMCB9XG4gIGxldCBhc3NpZ24gc3QxIHN0MiA9XG4gICAgQXJyYXkuYmxpdCBzdDIuc3QgMCBzdDEuc3QgMCA1NTtcbiAgICBzdDEuaWR4IDwtIHN0Mi5pZHhcblxuXG4gIGxldCBmdWxsX2luaXQgcyBzZWVkID1cbiAgICBsZXQgY29tYmluZSBhY2N1IHggPSBEaWdlc3Quc3RyaW5nIChhY2N1IF4gSW50LnRvX3N0cmluZyB4KSBpblxuICAgIGxldCBleHRyYWN0IGQgPVxuICAgICAgQ2hhci5jb2RlIGQuWzBdICsgKENoYXIuY29kZSBkLlsxXSBsc2wgOCkgKyAoQ2hhci5jb2RlIGQuWzJdIGxzbCAxNilcbiAgICAgICsgKENoYXIuY29kZSBkLlszXSBsc2wgMjQpXG4gICAgaW5cbiAgICBsZXQgc2VlZCA9IGlmIEFycmF5Lmxlbmd0aCBzZWVkID0gMCB0aGVuIFt8IDAgfF0gZWxzZSBzZWVkIGluXG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggc2VlZCBpblxuICAgIGZvciBpID0gMCB0byA1NCBkb1xuICAgICAgcy5zdC4oaSkgPC0gaTtcbiAgICBkb25lO1xuICAgIGxldCBhY2N1ID0gcmVmIFwieFwiIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0ICsgSW50Lm1heCA1NSBsIGRvXG4gICAgICBsZXQgaiA9IGkgbW9kIDU1IGluXG4gICAgICBsZXQgayA9IGkgbW9kIGwgaW5cbiAgICAgIGFjY3UgOj0gY29tYmluZSAhYWNjdSBzZWVkLihrKTtcbiAgICAgIHMuc3QuKGopIDwtIChzLnN0LihqKSBseG9yIGV4dHJhY3QgIWFjY3UpIGxhbmQgMHgzRkZGRkZGRjsgICgqIFBSIzU1NzUgKilcbiAgICBkb25lO1xuICAgIHMuaWR4IDwtIDBcblxuXG4gIGxldCBtYWtlIHNlZWQgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBmdWxsX2luaXQgcmVzdWx0IHNlZWQ7XG4gICAgcmVzdWx0XG5cblxuICBsZXQgbWFrZV9zZWxmX2luaXQgKCkgPSBtYWtlIChyYW5kb21fc2VlZCAoKSlcblxuICBsZXQgY29weSBzID1cbiAgICBsZXQgcmVzdWx0ID0gbmV3X3N0YXRlICgpIGluXG4gICAgYXNzaWduIHJlc3VsdCBzO1xuICAgIHJlc3VsdFxuXG5cbiAgKCogUmV0dXJucyAzMCByYW5kb20gYml0cyBhcyBhbiBpbnRlZ2VyIDAgPD0geCA8IDEwNzM3NDE4MjQgKilcbiAgbGV0IGJpdHMgcyA9XG4gICAgcy5pZHggPC0gKHMuaWR4ICsgMSkgbW9kIDU1O1xuICAgIGxldCBjdXJ2YWwgPSBzLnN0LihzLmlkeCkgaW5cbiAgICBsZXQgbmV3dmFsID0gcy5zdC4oKHMuaWR4ICsgMjQpIG1vZCA1NSlcbiAgICAgICAgICAgICAgICAgKyAoY3VydmFsIGx4b3IgKChjdXJ2YWwgbHNyIDI1KSBsYW5kIDB4MUYpKSBpblxuICAgIGxldCBuZXd2YWwzMCA9IG5ld3ZhbCBsYW5kIDB4M0ZGRkZGRkYgaW4gICgqIFBSIzU1NzUgKilcbiAgICBzLnN0LihzLmlkeCkgPC0gbmV3dmFsMzA7XG4gICAgbmV3dmFsMzBcblxuXG4gIGxldCByZWMgaW50YXV4IHMgbiA9XG4gICAgbGV0IHIgPSBiaXRzIHMgaW5cbiAgICBsZXQgdiA9IHIgbW9kIG4gaW5cbiAgICBpZiByIC0gdiA+IDB4M0ZGRkZGRkYgLSBuICsgMSB0aGVuIGludGF1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA+IDB4M0ZGRkZGRkYgfHwgYm91bmQgPD0gMFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50XCJcbiAgICBlbHNlIGludGF1eCBzIGJvdW5kXG5cbiAgbGV0IHJlYyBpbnQ2M2F1eCBzIG4gPVxuICAgIGxldCBtYXhfaW50XzMyID0gKDEgbHNsIDMwKSArIDB4M0ZGRkZGRkYgaW4gKCogMHg3RkZGRkZGRiAqKVxuICAgIGxldCBiMSA9IGJpdHMgcyBpblxuICAgIGxldCBiMiA9IGJpdHMgcyBpblxuICAgIGxldCAociwgbWF4X2ludCkgPVxuICAgICAgaWYgbiA8PSBtYXhfaW50XzMyIHRoZW5cbiAgICAgICAgKCogMzEgcmFuZG9tIGJpdHMgb24gYm90aCA2NC1iaXQgT0NhbWwgYW5kIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAxNSBiaXRzIG9mIGIxIGFuZCAxNiBiaXRzIG9mIGIyLiAqKVxuICAgICAgICBsZXQgYnBvcyA9XG4gICAgICAgICAgKCgoYjIgbGFuZCAweDNGRkZDMDAwKSBsc2wgMSkgbG9yIChiMSBsc3IgMTUpKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50XzMyKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgYjMgPSBiaXRzIHMgaW5cbiAgICAgICAgKCogNjIgcmFuZG9tIGJpdHMgb24gNjQtYml0IE9DYW1sOyB1bnJlYWNoYWJsZSBvbiBKYXZhU2NyaXB0LlxuICAgICAgICAgICBVc2UgdXBwZXIgMjAgYml0cyBvZiBiMSBhbmQgMjEgYml0cyBvZiBiMiBhbmQgYjMuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKCgoYjMgbGFuZCAweDNGRkZGRTAwKSBsc2wgMTIpIGxvciAoYjIgbHNyIDkpKSBsc2wgMjApXG4gICAgICAgICAgICBsb3IgKGIxIGxzciAxMClcbiAgICAgICAgaW5cbiAgICAgICAgICAoYnBvcywgbWF4X2ludClcbiAgICBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gbWF4X2ludCAtIG4gKyAxIHRoZW4gaW50NjNhdXggcyBuIGVsc2UgdlxuXG4gIGxldCBmdWxsX2ludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiUmFuZG9tLmZ1bGxfaW50XCJcbiAgICBlbHNlIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB0aGVuXG4gICAgICBpbnQ2M2F1eCBzIGJvdW5kXG4gICAgZWxzZVxuICAgICAgaW50YXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50MzJhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQzMi5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQzMi5zaGlmdF9sZWZ0IChJbnQzMi5vZl9pbnQgKGJpdHMgcyBsYW5kIDEpKSAzMCBpblxuICAgIGxldCByID0gSW50MzIubG9nb3IgYjEgYjIgaW5cbiAgICBsZXQgdiA9IEludDMyLnJlbSByIG4gaW5cbiAgICBpZiBJbnQzMi5zdWIgciB2ID4gSW50MzIuYWRkIChJbnQzMi5zdWIgSW50MzIubWF4X2ludCBuKSAxbFxuICAgIHRoZW4gaW50MzJhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDMyIHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMlwiXG4gICAgZWxzZSBpbnQzMmF1eCBzIGJvdW5kXG5cblxuICBsZXQgcmVjIGludDY0YXV4IHMgbiA9XG4gICAgbGV0IGIxID0gSW50NjQub2ZfaW50IChiaXRzIHMpIGluXG4gICAgbGV0IGIyID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMpKSAzMCBpblxuICAgIGxldCBiMyA9IEludDY0LnNoaWZ0X2xlZnQgKEludDY0Lm9mX2ludCAoYml0cyBzIGxhbmQgNykpIDYwIGluXG4gICAgbGV0IHIgPSBJbnQ2NC5sb2dvciBiMSAoSW50NjQubG9nb3IgYjIgYjMpIGluXG4gICAgbGV0IHYgPSBJbnQ2NC5yZW0gciBuIGluXG4gICAgaWYgSW50NjQuc3ViIHIgdiA+IEludDY0LmFkZCAoSW50NjQuc3ViIEludDY0Lm1heF9pbnQgbikgMUxcbiAgICB0aGVuIGludDY0YXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQ2NCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwTFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50NjRcIlxuICAgIGVsc2UgaW50NjRhdXggcyBib3VuZFxuXG5cbiAgbGV0IG5hdGl2ZWludCA9XG4gICAgaWYgTmF0aXZlaW50LnNpemUgPSAzMlxuICAgIHRoZW4gZnVuIHMgYm91bmQgLT4gTmF0aXZlaW50Lm9mX2ludDMyIChpbnQzMiBzIChOYXRpdmVpbnQudG9faW50MzIgYm91bmQpKVxuICAgIGVsc2UgZnVuIHMgYm91bmQgLT4gSW50NjQudG9fbmF0aXZlaW50IChpbnQ2NCBzIChJbnQ2NC5vZl9uYXRpdmVpbnQgYm91bmQpKVxuXG5cbiAgKCogUmV0dXJucyBhIGZsb2F0IDAgPD0geCA8PSAxIHdpdGggYXQgbW9zdCA2MCBiaXRzIG9mIHByZWNpc2lvbi4gKilcbiAgbGV0IHJhd2Zsb2F0IHMgPVxuICAgIGxldCBzY2FsZSA9IDEwNzM3NDE4MjQuMCAgKCogMl4zMCAqKVxuICAgIGFuZCByMSA9IFN0ZGxpYi5mbG9hdCAoYml0cyBzKVxuICAgIGFuZCByMiA9IFN0ZGxpYi5mbG9hdCAoYml0cyBzKVxuICAgIGluIChyMSAvLiBzY2FsZSArLiByMikgLy4gc2NhbGVcblxuXG4gIGxldCBmbG9hdCBzIGJvdW5kID0gcmF3ZmxvYXQgcyAqLiBib3VuZFxuXG4gIGxldCBib29sIHMgPSAoYml0cyBzIGxhbmQgMSA9IDApXG5cbiAgbGV0IGJpdHMzMiBzID1cbiAgICBsZXQgYjEgPSBJbnQzMi4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSAxNCkgaW4gICgqIDE2IGJpdHMgKilcbiAgICBsZXQgYjIgPSBJbnQzMi4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSAxNCkgaW4gICgqIDE2IGJpdHMgKilcbiAgICBJbnQzMi4obG9nb3IgYjEgKHNoaWZ0X2xlZnQgYjIgMTYpKVxuXG4gIGxldCBiaXRzNjQgcyA9XG4gICAgbGV0IGIxID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOSkgaW4gICgqIDIxIGJpdHMgKilcbiAgICBsZXQgYjIgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMyA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDgpIGluICAoKiAyMiBiaXRzICopXG4gICAgSW50NjQuKGxvZ29yIGIxIChsb2dvciAoc2hpZnRfbGVmdCBiMiAyMSkgKHNoaWZ0X2xlZnQgYjMgNDIpKSlcblxuICBsZXQgbmF0aXZlYml0cyA9XG4gICAgaWYgTmF0aXZlaW50LnNpemUgPSAzMlxuICAgIHRoZW4gZnVuIHMgLT4gTmF0aXZlaW50Lm9mX2ludDMyIChiaXRzMzIgcylcbiAgICBlbHNlIGZ1biBzIC0+IEludDY0LnRvX25hdGl2ZWludCAoYml0czY0IHMpXG5cbmVuZFxuXG4oKiBUaGlzIGlzIHRoZSBzdGF0ZSB5b3UgZ2V0IHdpdGggW2luaXQgMjcxODI4MThdIGFuZCB0aGVuIGFwcGx5aW5nXG4gICB0aGUgXCJsYW5kIDB4M0ZGRkZGRkZcIiBmaWx0ZXIgdG8gdGhlbS4gIFNlZSAjNTU3NSwgIzU3OTMsICM1OTc3LiAqKVxubGV0IGRlZmF1bHQgPSB7XG4gIFN0YXRlLnN0ID0gW3xcbiAgICAgIDB4M2FlMjUyMmI7IDB4MWQ4ZDQ2MzQ7IDB4MTViNGZhZDA7IDB4MThiMTRhY2U7IDB4MTJmOGEzYzQ7IDB4M2IwODZjNDc7XG4gICAgICAweDE2ZDQ2N2Q2OyAweDEwMWQ5MWM3OyAweDMyMWRmMTc3OyAweDAxNzZjMTkzOyAweDFmZjcyYmYxOyAweDFlODg5MTA5O1xuICAgICAgMHgwYjQ2NGIxODsgMHgyYjg2Yjk3YzsgMHgwODkxZGE0ODsgMHgwMzEzNzQ2MzsgMHgwODVhYzVhMTsgMHgxNWQ2MWYyZjtcbiAgICAgIDB4M2JjZWQzNTk7IDB4MjljMWMxMzI7IDB4M2E4Njc2NmU7IDB4MzY2ZDhjODY7IDB4MWY1YjYyMjI7IDB4M2NlMWI1OWY7XG4gICAgICAweDJlYmY3OGUxOyAweDI3Y2QxYjg2OyAweDI1OGYzZGMzOyAweDM4OWE4MTk0OyAweDAyZTRjNDRjOyAweDE4YzQzZjdkO1xuICAgICAgMHgwZjZlNTM0ZjsgMHgxZTdkZjM1OTsgMHgwNTVkMGI3ZTsgMHgxMGU4NGU3ZTsgMHgxMjYxOThlNDsgMHgwZTc3MjJjYjtcbiAgICAgIDB4MWNiZWRlMjg7IDB4MzM5MWI5NjQ7IDB4M2Q0MGU5MmE7IDB4MGM1OTkzM2Q7IDB4MGI4Y2QwYjc7IDB4MjRlZmZmMWM7XG4gICAgICAweDI4MDNmZGFhOyAweDA4ZWJjNzJlOyAweDBmNTIyZTMyOyAweDA1Mzk4ZWRjOyAweDIxNDRhMDRjOyAweDBhZWYzY2JkO1xuICAgICAgMHgwMWFkNDcxOTsgMHgzNWI5M2NkNjsgMHgyYTU1OWQ0ZjsgMHgxZTZmZDc2ODsgMHgyNmUyN2YzNjsgMHgxODZmMThjMztcbiAgICAgIDB4MmZiZjk2N2E7XG4gICAgfF07XG4gIFN0YXRlLmlkeCA9IDA7XG59XG5cbmxldCBiaXRzICgpID0gU3RhdGUuYml0cyBkZWZhdWx0XG5sZXQgaW50IGJvdW5kID0gU3RhdGUuaW50IGRlZmF1bHQgYm91bmRcbmxldCBmdWxsX2ludCBib3VuZCA9IFN0YXRlLmZ1bGxfaW50IGRlZmF1bHQgYm91bmRcbmxldCBpbnQzMiBib3VuZCA9IFN0YXRlLmludDMyIGRlZmF1bHQgYm91bmRcbmxldCBuYXRpdmVpbnQgYm91bmQgPSBTdGF0ZS5uYXRpdmVpbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDY0IGJvdW5kID0gU3RhdGUuaW50NjQgZGVmYXVsdCBib3VuZFxubGV0IGZsb2F0IHNjYWxlID0gU3RhdGUuZmxvYXQgZGVmYXVsdCBzY2FsZVxubGV0IGJvb2wgKCkgPSBTdGF0ZS5ib29sIGRlZmF1bHRcbmxldCBiaXRzMzIgKCkgPSBTdGF0ZS5iaXRzMzIgZGVmYXVsdFxubGV0IGJpdHM2NCAoKSA9IFN0YXRlLmJpdHM2NCBkZWZhdWx0XG5sZXQgbmF0aXZlYml0cyAoKSA9IFN0YXRlLm5hdGl2ZWJpdHMgZGVmYXVsdFxuXG5sZXQgZnVsbF9pbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBzZWVkXG5sZXQgaW5pdCBzZWVkID0gU3RhdGUuZnVsbF9pbml0IGRlZmF1bHQgW3wgc2VlZCB8XVxubGV0IHNlbGZfaW5pdCAoKSA9IGZ1bGxfaW5pdCAocmFuZG9tX3NlZWQoKSlcblxuKCogTWFuaXB1bGF0aW5nIHRoZSBjdXJyZW50IHN0YXRlLiAqKVxuXG5sZXQgZ2V0X3N0YXRlICgpID0gU3RhdGUuY29weSBkZWZhdWx0XG5sZXQgc2V0X3N0YXRlIHMgPSBTdGF0ZS5hc3NpZ24gZGVmYXVsdCBzXG5cbigqKioqKioqKioqKioqKioqKioqKlxuXG4oKiBUZXN0IGZ1bmN0aW9ucy4gIE5vdCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeS5cbiAgIFRoZSBbY2hpc3F1YXJlXSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggbiA+IDEwci5cbiAgIEl0IHJldHVybnMgYSB0cmlwbGUgKGxvdywgYWN0dWFsLCBoaWdoKS5cbiAgIElmIGxvdyA8PSBhY3R1YWwgPD0gaGlnaCwgdGhlIFtnXSBmdW5jdGlvbiBwYXNzZWQgdGhlIHRlc3QsXG4gICBvdGhlcndpc2UgaXQgZmFpbGVkLlxuXG4gIFNvbWUgcmVzdWx0czpcblxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCA1MDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyOTk3OTI2NDM7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMTQxNDIxMzY7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZiAxMDI0OyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMDsgY2hpc3F1YXJlIGRpZmYgMTAwMDAwIDEwMFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDI0OyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuaW5pdCAxNDE0MjEzNjsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDI5OTc5MjY0MzsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG4tIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk5Ny41LCAxMDYzLjI0NTU1MzIwMzM2NzU0KVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODkuNzQwMDAwMDAwMDA1MjM4NywgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg0ODU4LjU3ODY0Mzc2MjY5LCA1MDQ1LjUsIDUxNDEuNDIxMzU2MjM3MzEpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPVxuKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk0NC44MDU5OTk5OTk5ODIzMDUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAxOS4xOTc0NDAwMDAwMDM1NSwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1OS4zMTc3NjAwMDAwMDUzNiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAzOS45ODQ2Mzk5OTk5OTUxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1NC4zODIwNzk5OTk5OTU3NywgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA5MC4wOTYwMDAwMDAwMDUsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA3Ni43ODcyMDAwMDAwMDYxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4xNzYwMDAwMDAwMDY3NTIxLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODUuMjE2MDAwMDAwMDAwMzQ5MiwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDgwLjYyMjAwMDAwMDAwMzAyNjgsIDEyMC4pXG5cbiopXG5cbigqIFJldHVybiB0aGUgc3VtIG9mIHRoZSBzcXVhcmVzIG9mIHZbaTAsaTFbICopXG5sZXQgcmVjIHN1bXNxIHYgaTAgaTEgPVxuICBpZiBpMCA+PSBpMSB0aGVuIDAuMFxuICBlbHNlIGlmIGkxID0gaTAgKyAxIHRoZW4gU3RkbGliLmZsb2F0IHYuKGkwKSAqLiBTdGRsaWIuZmxvYXQgdi4oaTApXG4gIGVsc2Ugc3Vtc3EgdiBpMCAoKGkwK2kxKS8yKSArLiBzdW1zcSB2ICgoaTAraTEpLzIpIGkxXG5cblxubGV0IGNoaXNxdWFyZSBnIG4gciA9XG4gIGlmIG4gPD0gMTAgKiByIHRoZW4gaW52YWxpZF9hcmcgXCJjaGlzcXVhcmVcIjtcbiAgbGV0IGYgPSBBcnJheS5tYWtlIHIgMCBpblxuICBmb3IgaSA9IDEgdG8gbiBkb1xuICAgIGxldCB0ID0gZyByIGluXG4gICAgZi4odCkgPC0gZi4odCkgKyAxXG4gIGRvbmU7XG4gIGxldCB0ID0gc3Vtc3EgZiAwIHJcbiAgYW5kIHIgPSBTdGRsaWIuZmxvYXQgclxuICBhbmQgbiA9IFN0ZGxpYi5mbG9hdCBuIGluXG4gIGxldCBzciA9IDIuMCAqLiBzcXJ0IHIgaW5cbiAgKHIgLS4gc3IsICAgKHIgKi4gdCAvLiBuKSAtLiBuLCAgIHIgKy4gc3IpXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBsaW5lYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb20gbnVtYmVycy5cbiopXG5sZXQgc3QgPSByZWYgMFxubGV0IGluaXRfZGlmZiByID0gc3QgOj0gaW50IHJcbmxldCBkaWZmIHIgPVxuICBsZXQgeDEgPSAhc3RcbiAgYW5kIHgyID0gaW50IHJcbiAgaW5cbiAgc3QgOj0geDI7XG4gIGlmIHgxID49IHgyIHRoZW5cbiAgICB4MSAtIHgyXG4gIGVsc2VcbiAgICByICsgeDEgLSB4MlxuXG5cbmxldCBzdDEgPSByZWYgMFxuYW5kIHN0MiA9IHJlZiAwXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBxdWFkcmF0aWMgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb21cbiAgIG51bWJlcnMuXG4qKVxubGV0IGluaXRfZGlmZjIgciA9IHN0MSA6PSBpbnQgcjsgc3QyIDo9IGludCByXG5sZXQgZGlmZjIgciA9XG4gIGxldCB4MSA9ICFzdDFcbiAgYW5kIHgyID0gIXN0MlxuICBhbmQgeDMgPSBpbnQgclxuICBpblxuICBzdDEgOj0geDI7XG4gIHN0MiA6PSB4MztcbiAgKHgzIC0geDIgLSB4MiArIHgxICsgMipyKSBtb2QgclxuXG5cbioqKioqKioqKioqKioqKioqKioqKVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuaW5jbHVkZSBJbnRcblxudHlwZSB0ID0gaW50XG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmxldCBhZGQgPSAoICsgKVxubGV0IHN1YiA9ICggLSApXG5sZXQgbXVsID0gKCAqIClcbmxldCBkaXYgPSAoIC8gKVxubGV0IHN1Y2MgPSBzdWNjXG5sZXQgcHJlZCA9IHByZWRcbmxldCBhYnMgPSBhYnNcbmxldCBtYXhfaW50ID0gbWF4X2ludFxubGV0IG1pbl9pbnQgPSBtaW5faW50XG5sZXQgZXF1YWwgKGEgOiBpbnQpIGIgPSBTdGRsaWIuKCA9ICkgYSBiXG5sZXQgY29tcGFyZSAoYSA6IGludCkgYiA9IGNvbXBhcmUgYSBiXG5cbigqIHVzZSBGTlY6XG4gICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Gb3dsZXIlRTIlODAlOTNOb2xsJUUyJTgwJTkzVm9faGFzaF9mdW5jdGlvbiAqKVxubGV0IGhhc2ggKG4gOiBpbnQpIDogaW50ID1cbiAgbGV0IG9mZnNldF9iYXNpcyA9IDB4Y2JmMjljZTQ4NDIyMjMyNUwgaW5cbiAgbGV0IHByaW1lID0gMHgxMDAwMDAwMDFiM0wgaW5cblxuICBsZXQgaCA9IHJlZiBvZmZzZXRfYmFzaXMgaW5cbiAgZm9yIGsgPSAwIHRvIDcgZG9cbiAgICAoaCA6PSBJbnQ2NC4obXVsICFoIHByaW1lKSk7XG4gICAgKCogaCA6PSBoIHhvciAoay10aCBieXRlIG9mIG4pICopXG4gICAgaCA6PSBJbnQ2NC4obG9neG9yICFoIChvZl9pbnQgKChuIGxzciAoayAqIDgpKSBsYW5kIDB4ZmYpKSlcbiAgZG9uZTtcbiAgKCogdHJ1bmNhdGUgYmFjayB0byBpbnQgYW5kIHJlbW92ZSBzaWduICopXG4gIEludDY0LnRvX2ludCAhaCBsYW5kIG1heF9pbnRcblxubGV0IHJhbmdlIGkgaiB5aWVsZCA9XG4gIGxldCByZWMgdXAgaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgdXAgKGkgKyAxKSBqIHlpZWxkXG4gICAgKVxuICBhbmQgZG93biBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICBkb3duIChpIC0gMSkgaiB5aWVsZFxuICAgIClcbiAgaW5cbiAgaWYgaSA8PSBqIHRoZW5cbiAgICB1cCBpIGogeWllbGRcbiAgZWxzZVxuICAgIGRvd24gaSBqIHlpZWxkXG5cbmxldCByYW5nZScgaSBqIHlpZWxkID1cbiAgaWYgaSA8IGogdGhlblxuICAgIHJhbmdlIGkgKGogLSAxKSB5aWVsZFxuICBlbHNlIGlmIGkgPSBqIHRoZW5cbiAgICAoKVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoaiArIDEpIHlpZWxkXG5cbmxldCBzaWduIGkgPSBjb21wYXJlIGkgMFxubGV0IG5lZyBpID0gLWlcblxubGV0IHBvdyBhIGIgPVxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICAgIHwgMSAtPiBhY2NcbiAgICB8IG4gLT5cbiAgICAgIGlmIG4gbW9kIDIgPSAwIHRoZW5cbiAgICAgICAgYXV4IChhY2MgKiBhY2MpIChuIC8gMilcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjICogYXV4IChhY2MgKiBhY2MpIChuIC8gMilcbiAgaW5cbiAgbWF0Y2ggYiB3aXRoXG4gIHwgMCAtPlxuICAgIGlmIGEgPSAwIHRoZW5cbiAgICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwicG93OiB1bmRlZmluZWQgdmFsdWUgMF4wXCIpXG4gICAgZWxzZVxuICAgICAgMVxuICB8IGIgd2hlbiBiIDwgMCAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwicG93OiBjYW4ndCByYWlzZSBpbnQgdG8gbmVnYXRpdmUgcG93ZXJcIilcbiAgfCBiIC0+IGF1eCBhIGJcblxubW9kdWxlIEluZml4IDogc2lnXG4gIHZhbCAoID0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIDw+ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8PSApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPj0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIC0tICkgOiB0IC0+IHQgLT4gdCBpdGVyXG4gIHZhbCAoIC0tXiApIDogdCAtPiB0IC0+IHQgaXRlclxuICB2YWwgKCArICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAtICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCB+LSApIDogdCAtPiB0XG4gIHZhbCAoICogKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIC8gKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoICoqICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBtb2QgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGxhbmQgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGxvciApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbHhvciApIDogdCAtPiB0IC0+IHRcbiAgdmFsIGxub3QgOiB0IC0+IHRcbiAgdmFsICggbHNsICkgOiB0IC0+IGludCAtPiB0XG4gIHZhbCAoIGxzciApIDogdCAtPiBpbnQgLT4gdFxuICB2YWwgKCBhc3IgKSA6IHQgLT4gaW50IC0+IHRcbmVuZCA9IHN0cnVjdFxuICBpbmNsdWRlIFN0ZGxpYlxuXG4gIGxldCAoIC0tICkgPSByYW5nZVxuICBsZXQgKCAtLV4gKSA9IHJhbmdlJ1xuICBsZXQgKCAqKiApID0gcG93XG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG5sZXQgbWluIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIubWluXG5sZXQgbWF4IDogdCAtPiB0IC0+IHQgPSBTdGRsaWIubWF4XG5cbmxldCBmbG9vcl9kaXYgYSBuID1cbiAgaWYgYSA8IDAgJiYgbiA+PSAwIHRoZW5cbiAgICAoKGEgKyAxKSAvIG4pIC0gMVxuICBlbHNlIGlmIGEgPiAwICYmIG4gPCAwIHRoZW5cbiAgICAoKGEgLSAxKSAvIG4pIC0gMVxuICBlbHNlXG4gICAgYSAvIG5cblxubGV0IGJvb2xfbmVxIChhIDogYm9vbCkgYiA9IFN0ZGxpYi4oIDw+ICkgYSBiXG5cbmxldCByZW0gYSBuID1cbiAgbGV0IHkgPSBhIG1vZCBuIGluXG4gIGlmIGJvb2xfbmVxICh5IDwgMCkgKG4gPCAwKSAmJiB5IDw+IDAgdGhlblxuICAgIHkgKyBuXG4gIGVsc2VcbiAgICB5XG5cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHJhbmRvbSBuIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBuXG5sZXQgcmFuZG9tX3NtYWxsID0gcmFuZG9tIDEwMFxubGV0IHJhbmRvbV9yYW5nZSBpIGogc3QgPSBpICsgcmFuZG9tIChqIC0gaSkgc3RcbmxldCBwcCBmbXQgPSBGb3JtYXQucHBfcHJpbnRfaW50IGZtdFxubGV0IG1vc3Rfc2lnbmlmaWNhbnRfYml0ID0gLTEgbHhvciAoLTEgbHNyIDEpXG5sZXQgdG9fc3RyaW5nID0gc3RyaW5nX29mX2ludFxubGV0IG9mX3N0cmluZyBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxubGV0IG9mX3N0cmluZ19leG4gPSBTdGRsaWIuaW50X29mX3N0cmluZ1xubGV0IHRvX2Zsb2F0ID0gZmxvYXRfb2ZfaW50XG5sZXQgb2ZfZmxvYXQgPSBpbnRfb2ZfZmxvYXRcblxudHlwZSBvdXRwdXQgPSBjaGFyIC0+IHVuaXRcblxuKCogYWJzdHJhY3QgcHJpbnRlciAqKVxubGV0IHRvX2JpbmFyeV9nZW4gKG91dCA6IG91dHB1dCkgbiA9XG4gIGxldCBuID1cbiAgICBpZiBuIDwgMCB0aGVuIChcbiAgICAgIG91dCAnLSc7XG4gICAgICAtblxuICAgICkgZWxzZVxuICAgICAgblxuICBpblxuICBvdXQgJzAnO1xuICBvdXQgJ2InO1xuICBsZXQgcmVjIGxvb3Agc3RhcnRlZCBiaXQgbiA9XG4gICAgaWYgYml0ID0gMCB0aGVuIChcbiAgICAgIGlmIG5vdCBzdGFydGVkIHRoZW4gb3V0ICcwJ1xuICAgICkgZWxzZSAoXG4gICAgICBsZXQgYiA9IG4gbGFuZCBiaXQgaW5cbiAgICAgIGlmIGIgPSAwIHRoZW4gKFxuICAgICAgICBpZiBzdGFydGVkIHRoZW4gb3V0ICcwJztcbiAgICAgICAgbG9vcCBzdGFydGVkIChiaXQgbHNyIDEpIG5cbiAgICAgICkgZWxzZSAoXG4gICAgICAgIG91dCAnMSc7XG4gICAgICAgIGxvb3AgdHJ1ZSAoYml0IGxzciAxKSBuXG4gICAgICApXG4gICAgKVxuICBpblxuICBsb29wIGZhbHNlIG1vc3Rfc2lnbmlmaWNhbnRfYml0IG5cblxubGV0IHBwX2JpbmFyeSBvdXQgbiA9IHRvX2JpbmFyeV9nZW4gKEZvcm1hdC5wcF9wcmludF9jaGFyIG91dCkgblxuXG5sZXQgdG9fc3RyaW5nX2JpbmFyeSBuID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgdG9fYmluYXJ5X2dlbiAoQnVmZmVyLmFkZF9jaGFyIGJ1ZikgbjtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgcmFuZ2VfYnkgfnN0ZXAgaSBqIHlpZWxkID1cbiAgbGV0IHJlYyByYW5nZSBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICByYW5nZSAoaSArIHN0ZXApIGogeWllbGRcbiAgICApXG4gIGluXG4gIGlmIHN0ZXAgPSAwIHRoZW5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDSW50LnJhbmdlX2J5XCIpXG4gIGVsc2UgaWZcbiAgICBpZiBzdGVwID4gMCB0aGVuXG4gICAgICBpID4galxuICAgIGVsc2VcbiAgICAgIGkgPCBqXG4gIHRoZW5cbiAgICAoKVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoKChqIC0gaSkgLyBzdGVwICogc3RlcCkgKyBpKSB5aWVsZFxuXG4oKlxuICBmcm9tIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hhbW1pbmdfd2VpZ2h0XG5cbiAgLy9UaGlzIHVzZXMgZmV3ZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zIHRoYW4gYW55IG90aGVyIGtub3duXG4gIC8vaW1wbGVtZW50YXRpb24gb24gbWFjaGluZXMgd2l0aCBzbG93IG11bHRpcGxpY2F0aW9uLlxuICAvL0l0IHVzZXMgMTcgYXJpdGhtZXRpYyBvcGVyYXRpb25zLlxuICBpbnQgcG9wY291bnRfMih1aW50NjRfdCB4KSB7XG4gICAgeCAtPSAoeCA+PiAxKSAmIG0xOyAgICAgICAgICAgICAvL3B1dCBjb3VudCBvZiBlYWNoIDIgYml0cyBpbnRvIHRob3NlIDIgYml0c1xuICAgIHggPSAoeCAmIG0yKSArICgoeCA+PiAyKSAmIG0yKTsgLy9wdXQgY291bnQgb2YgZWFjaCA0IGJpdHMgaW50byB0aG9zZSA0IGJpdHNcbiAgICB4ID0gKHggKyAoeCA+PiA0KSkgJiBtNDsgICAgICAgIC8vcHV0IGNvdW50IG9mIGVhY2ggOCBiaXRzIGludG8gdGhvc2UgOCBiaXRzXG4gICAgeCArPSB4ID4+ICA4OyAgLy9wdXQgY291bnQgb2YgZWFjaCAxNiBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHggKz0geCA+PiAxNjsgIC8vcHV0IGNvdW50IG9mIGVhY2ggMzIgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICB4ICs9IHggPj4gMzI7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDY0IGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgcmV0dXJuIHggJiAweDdmO1xuICB9XG5cbiAgIG0xID0gMHg1NTU1NTU1NTU1NTU1NTU1XG4gICBtMiA9IDB4MzMzMzMzMzMzMzMzMzMzM1xuICAgbTQgPSAweDBmMGYwZjBmMGYwZjBmMGZcbiopXG5sZXQgcG9wY291bnQgKGIgOiBpbnQpIDogaW50ID1cbiAgbGV0IG0xID0gMHg1NTU1NTU1NTU1NTU1NTU1TCBpblxuICBsZXQgbTIgPSAweDMzMzMzMzMzMzMzMzMzMzNMIGluXG4gIGxldCBtNCA9IDB4MGYwZjBmMGYwZjBmMGYwZkwgaW5cbiAgbGV0IG9wZW4gSW50NjQgaW5cbiAgbGV0IGIgPSBvZl9pbnQgYiBpblxuICAoKiBpbnQtPmludDY0ICopXG4gIGxldCBiID0gbG9nYW5kIGIgMHg3ZmZmZmZmZmZmZmZmZmZmTCBpblxuXG4gICgqIHJlbW92ZSBzaWduIGJpdCwgd2UgZGVhbCB3aXRoIHVpbnQ2NCBoZXJlICopXG4gIGxldCBiID0gc3ViIGIgKGxvZ2FuZCAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDEpIG0xKSBpblxuICBsZXQgYiA9IGFkZCAobG9nYW5kIGIgbTIpIChsb2dhbmQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAyKSBtMikgaW5cbiAgbGV0IGIgPSBsb2dhbmQgKGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgNCkpIG00IGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiA4KSBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMTYpIGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAzMikgaW5cbiAgbGV0IGIgPSBsb2dhbmQgYiAweDdmTCBpblxuICB0b19pbnQgYlxuXG5sZXQgbG9nYW5kID0gKCBsYW5kIClcbmxldCBsb2dvciA9ICggbG9yIClcbmxldCBsb2d4b3IgPSAoIGx4b3IgKVxubGV0IGxvZ25vdCA9IGxub3RcbmxldCBzaGlmdF9sZWZ0ID0gKCBsc2wgKVxubGV0IHNoaWZ0X3JpZ2h0ID0gKCBhc3IgKVxubGV0IHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgPSAoIGxzciApXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE9wZXJhdGlvbnMgb24gaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIG9mIHZhbHVlcyAqKVxuXG50eXBlIHRcblxudHlwZSByYXdfZGF0YSA9IG5hdGl2ZWludFxuXG5leHRlcm5hbCByZXByIDogJ2EgLT4gdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG9iaiA6IHQgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBtYWdpYyA6ICdhIC0+ICdiID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgaXNfaW50IDogdCAtPiBib29sID0gXCIlb2JqX2lzX2ludFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBpc19ibG9jayBhID0gbm90IChpc19pbnQgYSlcbmV4dGVybmFsIHRhZyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial90YWdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2V0X3RhZyA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3NldF90YWdcIlxuZXh0ZXJuYWwgc2l6ZSA6IHQgLT4gaW50ID0gXCIlb2JqX3NpemVcIlxuZXh0ZXJuYWwgcmVhY2hhYmxlX3dvcmRzIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1wiXG5leHRlcm5hbCBmaWVsZCA6IHQgLT4gaW50IC0+IHQgPSBcIiVvYmpfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X2ZpZWxkIDogdCAtPiBpbnQgLT4gdCAtPiB1bml0ID0gXCIlb2JqX3NldF9maWVsZFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfZ2V0XCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfc2V0IDpcbiAgICBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfc2V0XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGRvdWJsZV9maWVsZCB4IGkgPSBmbG9hdGFycmF5X2dldCAob2JqIHggOiBmbG9hdGFycmF5KSBpXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBzZXRfZG91YmxlX2ZpZWxkIHggaSB2ID1cbiAgZmxvYXRhcnJheV9zZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaSB2XG5leHRlcm5hbCByYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSA9IFwiY2FtbF9vYmpfcmF3X2ZpZWxkXCJcbmV4dGVybmFsIHNldF9yYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9vYmpfc2V0X3Jhd19maWVsZFwiXG5cbmV4dGVybmFsIG5ld19ibG9jayA6IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9vYmpfYmxvY2tcIlxuZXh0ZXJuYWwgZHVwIDogdCAtPiB0ID0gXCJjYW1sX29ial9kdXBcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5leHRlcm5hbCBhZGRfb2Zmc2V0IDogdCAtPiBJbnQzMi50IC0+IHQgPSBcImNhbWxfb2JqX2FkZF9vZmZzZXRcIlxuZXh0ZXJuYWwgd2l0aF90YWcgOiBpbnQgLT4gdCAtPiB0ID0gXCJjYW1sX29ial93aXRoX3RhZ1wiXG5cbmxldCBmaXJzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMFxubGV0IGxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDI0NVxuXG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcbmxldCBmaW5hbF90YWcgPSBjdXN0b21fdGFnXG5cblxubGV0IGludF90YWcgPSAxMDAwXG5sZXQgb3V0X29mX2hlYXBfdGFnID0gMTAwMVxubGV0IHVuYWxpZ25lZF90YWcgPSAxMDAyXG5cbm1vZHVsZSBDbG9zdXJlID0gc3RydWN0XG4gIHR5cGUgaW5mbyA9IHtcbiAgICBhcml0eTogaW50O1xuICAgIHN0YXJ0X2VudjogaW50O1xuICB9XG5cbiAgbGV0IGluZm9fb2ZfcmF3IChpbmZvIDogbmF0aXZlaW50KSA9XG4gICAgbGV0IG9wZW4gTmF0aXZlaW50IGluXG4gICAgbGV0IGFyaXR5ID1cbiAgICAgICgqIHNpZ25lZDogbmVnYXRpdmUgZm9yIHR1cGxlZCBmdW5jdGlvbnMgKilcbiAgICAgIGlmIFN5cy53b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyA1NilcbiAgICAgIGVsc2VcbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDI0KVxuICAgIGluXG4gICAgbGV0IHN0YXJ0X2VudiA9XG4gICAgICAoKiBzdGFydF9lbnYgaXMgdW5zaWduZWQsIGJ1dCB3ZSBrbm93IGl0IGNhbiBhbHdheXMgZml0IGFuIE9DYW1sXG4gICAgICAgICBpbnRlZ2VyIHNvIHdlIHVzZSBbdG9faW50XSBpbnN0ZWFkIG9mIFt1bnNpZ25lZF90b19pbnRdLiAqKVxuICAgICAgdG9faW50IChzaGlmdF9yaWdodF9sb2dpY2FsIChzaGlmdF9sZWZ0IGluZm8gOCkgOSkgaW5cbiAgICB7IGFyaXR5OyBzdGFydF9lbnYgfVxuXG4gICgqIG5vdGU6IHdlIGV4cGVjdCBhIGNsb3N1cmUsIG5vdCBhbiBpbmZpeCBwb2ludGVyICopXG4gIGxldCBpbmZvIChvYmogOiB0KSA9XG4gICAgYXNzZXJ0ICh0YWcgb2JqID0gY2xvc3VyZV90YWcpO1xuICAgIGluZm9fb2ZfcmF3IChyYXdfZmllbGQgb2JqIDEpXG5lbmRcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbmxldCBleHRlbnNpb25fY29uc3RydWN0b3IgPSBFeHRlbnNpb25fY29uc3RydWN0b3Iub2ZfdmFsXG5sZXQgZXh0ZW5zaW9uX25hbWUgPSBFeHRlbnNpb25fY29uc3RydWN0b3IubmFtZVxubGV0IGV4dGVuc2lvbl9pZCA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5pZFxuXG5tb2R1bGUgRXBoZW1lcm9uID0gc3RydWN0XG4gIHR5cGUgb2JqX3QgPSB0XG5cbiAgdHlwZSB0ICgqKiBlcGhlbWVyb24gKilcblxuICAgKCoqIFRvIGNoYW5nZSBpbiBzeW5jIHdpdGggd2Vhay5oICopXG4gIGxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcbiAgbGV0IG1heF9lcGhlX2xlbmd0aCA9IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9lcGhlX2NyZWF0ZVwiOztcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEludGVybmFscyBvZiBmb3JjaW5nIGxhenkgdmFsdWVzLiAqKVxuXG50eXBlICdhIHQgPSAnYSBsYXp5X3RcblxuZXhjZXB0aW9uIFVuZGVmaW5lZFxuXG5sZXQgcmFpc2VfdW5kZWZpbmVkID0gT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBVbmRlZmluZWQpXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6IE9iai50IC0+IE9iai50IC0+IHVuaXQgPSBcImNhbWxfb2JqX21ha2VfZm9yd2FyZFwiXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gICAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICAgIHJlc3VsdFxuICB3aXRoIGUgLT5cbiAgICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgKE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgZSkpO1xuICAgIHJhaXNlIGVcblxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfdmFsX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICByZXN1bHRcblxuXG4oKiBbZm9yY2VdIGlzIG5vdCB1c2VkLCBzaW5jZSBbTGF6eS5mb3JjZV0gaXMgZGVjbGFyZWQgYXMgYSBwcmltaXRpdmVcbiAgIHdob3NlIGNvZGUgaW5saW5lcyB0aGUgdGFnIHRlc3RzIG9mIGl0cyBhcmd1bWVudCwgZXhjZXB0IHdoZW4gYWZsXG4gICBpbnN0cnVtZW50YXRpb24gaXMgdHVybmVkIG9uLiAqKVxuXG5sZXQgZm9yY2UgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gICgqIFVzaW5nIFtTeXMub3BhcXVlX2lkZW50aXR5XSBwcmV2ZW50cyB0d28gcG90ZW50aWFsIHByb2JsZW1zOlxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBoYXZlIEZvcndhcmRfdGFnLCB0aGVuIGl0cyB0YWcgY291bGQgaGF2ZVxuICAgICAgIGNoYW5nZWQgZHVyaW5nIEdDLCBzbyB0aGF0IGluZm9ybWF0aW9uIG11c3QgYmUgZm9yZ290dGVuIChzZWUgR1BSIzcxM1xuICAgICAgIGFuZCBpc3N1ZSAjNzMwMSlcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgaW1tdXRhYmxlLCB0aGVuIGlmIHRoZSBjb21waWxlclxuICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBsYXN0IGJyYW5jaCBpcyBub3QgdGFrZW4gaXQgd2lsbCBpc3N1ZSBhXG4gICAgICAgd2FybmluZyA1OSAobW9kaWZpY2F0aW9uIG9mIGFuIGltbXV0YWJsZSB2YWx1ZSkgKilcbiAgbGV0IGx6diA9IFN5cy5vcGFxdWVfaWRlbnRpdHkgbHp2IGluXG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfbGF6eV9ibG9jayBsenZcblxuXG5sZXQgZm9yY2VfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIGx6dlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAoJ2EsICdlKSB0ID0gKCdhLCAnZSkgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnZVxuXG5sZXQgb2sgdiA9IE9rIHZcbmxldCBlcnJvciBlID0gRXJyb3IgZVxubGV0IHZhbHVlIHIgfmRlZmF1bHQgPSBtYXRjaCByIHdpdGggT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5sZXQgZ2V0X29rID0gZnVuY3Rpb24gT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBFcnJvciBfXCJcbmxldCBnZXRfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGUgfCBPayBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIE9rIF9cIlxubGV0IGJpbmQgciBmID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBqb2luID0gZnVuY3Rpb24gT2sgciAtPiByIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXAgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gT2sgKGYgdikgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcF9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBFcnJvciAoZiBlKSB8IE9rIF8gYXMgdiAtPiB2XG5sZXQgZm9sZCB+b2sgfmVycm9yID0gZnVuY3Rpb24gT2sgdiAtPiBvayB2IHwgRXJyb3IgZSAtPiBlcnJvciBlXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gT2sgdiAtPiBmIHYgfCBFcnJvciBfIC0+ICgpXG5sZXQgaXRlcl9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBmIGUgfCBPayBfIC0+ICgpXG5sZXQgaXNfb2sgPSBmdW5jdGlvbiBPayBfIC0+IHRydWUgfCBFcnJvciBfIC0+IGZhbHNlXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBfIC0+IHRydWUgfCBPayBfIC0+IGZhbHNlXG5cbmxldCBlcXVhbCB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBfLCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IE9rIF8sIEVycm9yIF8gLT4gLTFcbnwgRXJyb3IgXywgT2sgXyAtPiAxXG5cbmxldCB0b19vcHRpb24gPSBmdW5jdGlvbiBPayB2IC0+IFNvbWUgdiB8IEVycm9yIF8gLT4gTm9uZVxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBPayB2IC0+IFt2XSB8IEVycm9yIF8gLT4gW11cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBPayB2IC0+IFNlcS5yZXR1cm4gdiB8IEVycm9yIF8gLT4gU2VxLmVtcHR5XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgVXRpbHMgYXJvdW5kIGNoYXJ9XG5cbiAgICBAc2luY2UgMC4xNCAqKVxuXG5pbmNsdWRlIENoYXJcblxubGV0IHBwX2J1ZiA9IEJ1ZmZlci5hZGRfY2hhclxubGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2NoYXJcbmxldCBvZl9pbnRfZXhuID0gQ2hhci5jaHJcbmxldCBvZl9pbnQgYyA9IHRyeSBTb21lIChvZl9pbnRfZXhuIGMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcbmxldCB0b19pbnQgPSBDaGFyLmNvZGVcbmxldCB0b19zdHJpbmcgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA9IClcbiAgbGV0ICggPD4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD4gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGNvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdW5zYWZlX2NocjogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBjaHIgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPiAyNTUgdGhlbiBpbnZhbGlkX2FyZyBcIkNoYXIuY2hyXCIgZWxzZSB1bnNhZmVfY2hyIG5cblxuZXh0ZXJuYWwgYnl0ZXNfY3JlYXRlOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCBlc2NhcGVkID0gZnVuY3Rpb25cbiAgfCAnXFwnJyAtPiBcIlxcXFwnXCJcbiAgfCAnXFxcXCcgLT4gXCJcXFxcXFxcXFwiXG4gIHwgJ1xcbicgLT4gXCJcXFxcblwiXG4gIHwgJ1xcdCcgLT4gXCJcXFxcdFwiXG4gIHwgJ1xccicgLT4gXCJcXFxcclwiXG4gIHwgJ1xcYicgLT4gXCJcXFxcYlwiXG4gIHwgJyAnIC4uICd+JyBhcyBjIC0+XG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAxIGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCBjO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG4gIHwgYyAtPlxuICAgICAgbGV0IG4gPSBjb2RlIGMgaW5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDQgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwICdcXFxcJztcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAxICh1bnNhZmVfY2hyICg0OCArIG4gLyAxMDApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAyICh1bnNhZmVfY2hyICg0OCArIChuIC8gMTApIG1vZCAxMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDMgKHVuc2FmZV9jaHIgKDQ4ICsgbiBtb2QgMTApKTtcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuXG5sZXQgbG93ZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onXG4gIHwgJ1xcMTkyJyAuLiAnXFwyMTQnXG4gIHwgJ1xcMjE2JyAuLiAnXFwyMjInIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyArIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgdXBwZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnYScgLi4gJ3onXG4gIHwgJ1xcMjI0JyAuLiAnXFwyNDYnXG4gIHwgJ1xcMjQ4JyAuLiAnXFwyNTQnIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgbG93ZXJjYXNlX2FzY2lpID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onIGFzIGMgLT4gdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6JyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjIC0gMzIpXG4gIHwgYyAtPiBjXG5cbnR5cGUgdCA9IGNoYXJcblxubGV0IGNvbXBhcmUgYzEgYzIgPSBjb2RlIGMxIC0gY29kZSBjMlxubGV0IGVxdWFsIChjMTogdCkgKGMyOiB0KSA9IGNvbXBhcmUgYzEgYzIgPSAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBsaXN0cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGxpc3QgPSBbXSB8ICg6Oikgb2YgJ2EgKiAnYSBsaXN0XG5cbigqIExpc3Qgb3BlcmF0aW9ucyAqKVxuXG5sZXQgcmVjIGxlbmd0aF9hdXggbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBsZW5cbiAgfCBfOjpsIC0+IGxlbmd0aF9hdXggKGxlbiArIDEpIGxcblxubGV0IGxlbmd0aCBsID0gbGVuZ3RoX2F1eCAwIGxcblxubGV0IGNvbnMgYSBsID0gYTo6bFxuXG5sZXQgaGQgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwiaGRcIlxuICB8IGE6Ol8gLT4gYVxuXG5sZXQgdGwgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwidGxcIlxuICB8IF86OmwgLT4gbFxuXG5sZXQgbnRoIGwgbiA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0Lm50aFwiIGVsc2VcbiAgbGV0IHJlYyBudGhfYXV4IGwgbiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmYWlsd2l0aCBcIm50aFwiXG4gICAgfCBhOjpsIC0+IGlmIG4gPSAwIHRoZW4gYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgbnRoX29wdCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIFNvbWUgYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgYXBwZW5kID0gKEApXG5cbmxldCByZWMgcmV2X2FwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGEgOjogbCAtPiByZXZfYXBwZW5kIGwgKGEgOjogbDIpXG5cbmxldCByZXYgbCA9IHJldl9hcHBlbmQgbCBbXVxuXG5sZXQgcmVjIGluaXRfdGFpbHJlY19hdXggYWNjIGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gYWNjXG4gIGVsc2UgaW5pdF90YWlscmVjX2F1eCAoZiBpIDo6IGFjYykgKGkrMSkgbiBmXG5cbmxldCByZWMgaW5pdF9hdXggaSBuIGYgPVxuICBpZiBpID49IG4gdGhlbiBbXVxuICBlbHNlXG4gICAgbGV0IHIgPSBmIGkgaW5cbiAgICByIDo6IGluaXRfYXV4IChpKzEpIG4gZlxuXG5sZXQgcmV2X2luaXRfdGhyZXNob2xkID1cbiAgbWF0Y2ggU3lzLmJhY2tlbmRfdHlwZSB3aXRoXG4gIHwgU3lzLk5hdGl2ZSB8IFN5cy5CeXRlY29kZSAtPiAxMF8wMDBcbiAgKCogV2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUgc3RhY2ssIGJldHRlciBiZSBzYWZlIGFuZCBhc3N1bWUgaXQnc1xuICAgICBzbWFsbC4gKilcbiAgfCBTeXMuT3RoZXIgXyAtPiA1MFxuXG5sZXQgaW5pdCBsZW4gZiA9XG4gIGlmIGxlbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QuaW5pdFwiIGVsc2VcbiAgaWYgbGVuID4gcmV2X2luaXRfdGhyZXNob2xkIHRoZW4gcmV2IChpbml0X3RhaWxyZWNfYXV4IFtdIDAgbGVuIGYpXG4gIGVsc2UgaW5pdF9hdXggMCBsZW4gZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgYSBpbiByIDo6IG1hcCBmIGxcblxubGV0IHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBhOjpsIC0+IGxldCByID0gZiBpIGEgaW4gciA6OiBtYXBpIChpICsgMSkgZiBsXG5cbmxldCBtYXBpIGYgbCA9IG1hcGkgMCBmIGxcblxubGV0IHJldl9tYXAgZiBsID1cbiAgbGV0IHJlYyBybWFwX2YgYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1XG4gICAgfCBhOjpsIC0+IHJtYXBfZiAoZiBhIDo6IGFjY3UpIGxcbiAgaW5cbiAgcm1hcF9mIFtdIGxcblxuXG5sZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKClcbiAgfCBhOjpsIC0+IGYgYTsgaXRlciBmIGxcblxubGV0IHJlYyBpdGVyaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGkgYTsgaXRlcmkgKGkgKyAxKSBmIGxcblxubGV0IGl0ZXJpIGYgbCA9IGl0ZXJpIDAgZiBsXG5cbmxldCByZWMgZm9sZF9sZWZ0IGYgYWNjdSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gICAgW10gLT4gYWNjdVxuICB8IGE6OmwgLT4gZm9sZF9sZWZ0IGYgKGYgYWNjdSBhKSBsXG5cbmxldCByZWMgZm9sZF9yaWdodCBmIGwgYWNjdSA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGYgYSAoZm9sZF9yaWdodCBmIGwgYWNjdSlcblxubGV0IHJlYyBtYXAyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGxldCByID0gZiBhMSBhMiBpbiByIDo6IG1hcDIgZiBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QubWFwMlwiXG5cbmxldCByZXZfbWFwMiBmIGwxIGwyID1cbiAgbGV0IHJlYyBybWFwMl9mIGFjY3UgbDEgbDIgPVxuICAgIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICB8IChbXSwgW10pIC0+IGFjY3VcbiAgICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcm1hcDJfZiAoZiBhMSBhMiA6OiBhY2N1KSBsMSBsMlxuICAgIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5yZXZfbWFwMlwiXG4gIGluXG4gIHJtYXAyX2YgW10gbDEgbDJcblxuXG5sZXQgcmVjIGl0ZXIyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gKClcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGYgYTEgYTI7IGl0ZXIyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lml0ZXIyXCJcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmb2xkX2xlZnQyIGYgKGYgYWNjdSBhMSBhMikgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvbGRfbGVmdDJcIlxuXG5sZXQgcmVjIGZvbGRfcmlnaHQyIGYgbDEgbDIgYWNjdSA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyIChmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UpXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX3JpZ2h0MlwiXG5cbmxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICBbXSAtPiB0cnVlXG4gIHwgYTo6bCAtPiBwIGEgJiYgZm9yX2FsbCBwIGxcblxubGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IHAgYSB8fCBleGlzdHMgcCBsXG5cbmxldCByZWMgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiB0cnVlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyICYmIGZvcl9hbGwyIHAgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvcl9hbGwyXCJcblxubGV0IHJlYyBleGlzdHMyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gZmFsc2VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHAgYTEgYTIgfHwgZXhpc3RzMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5leGlzdHMyXCJcblxubGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW0geCBsXG5cbmxldCByZWMgbWVtcSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gYSA9PSB4IHx8IG1lbXEgeCBsXG5cbmxldCByZWMgYXNzb2MgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gYiBlbHNlIGFzc29jIHggbFxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBOb25lXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gU29tZSBiIGVsc2UgYXNzb2Nfb3B0IHggbFxuXG5sZXQgcmVjIGFzc3EgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgYSA9PSB4IHRoZW4gYiBlbHNlIGFzc3EgeCBsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIFNvbWUgYiBlbHNlIGFzc3Ffb3B0IHggbFxuXG5sZXQgcmVjIG1lbV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWxzZVxuICB8IChhLCBfKSA6OiBsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW1fYXNzb2MgeCBsXG5cbmxldCByZWMgbWVtX2Fzc3EgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBhID09IHggfHwgbWVtX2Fzc3EgeCBsXG5cbmxldCByZWMgcmVtb3ZlX2Fzc29jIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPlxuICAgICAgaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc29jIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPiBpZiBhID09IHggdGhlbiBsIGVsc2UgcGFpciA6OiByZW1vdmVfYXNzcSB4IGxcblxubGV0IHJlYyBmaW5kIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiB4IGVsc2UgZmluZCBwIGxcblxubGV0IHJlYyBmaW5kX29wdCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmRfb3B0IHAgbFxuXG5sZXQgcmVjIGZpbmRfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiB4IHdpdGhcbiAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT4gcmVzdWx0XG4gICAgICAgfCBOb25lIC0+IGZpbmRfbWFwIGYgbFxuICAgICBlbmRcblxubGV0IGZpbmRfYWxsIHAgPVxuICBsZXQgcmVjIGZpbmQgYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmV2IGFjY3VcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gZmluZCAoeCA6OiBhY2N1KSBsIGVsc2UgZmluZCBhY2N1IGwgaW5cbiAgZmluZCBbXVxuXG5sZXQgZmlsdGVyID0gZmluZF9hbGxcblxubGV0IGZpbHRlcmkgcCBsID1cbiAgbGV0IHJlYyBhdXggaSBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2NcbiAgfCB4OjpsIC0+IGF1eCAoaSArIDEpIChpZiBwIGkgeCB0aGVuIHg6OmFjYyBlbHNlIGFjYykgbFxuICBpblxuICBhdXggMCBbXSBsXG5cbmxldCBmaWx0ZXJfbWFwIGYgPVxuICBsZXQgcmVjIGF1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGF1eCBhY2N1IGxcbiAgICAgICAgfCBTb21lIHYgLT4gYXV4ICh2IDo6IGFjY3UpIGxcbiAgaW5cbiAgYXV4IFtdXG5cbmxldCBjb25jYXRfbWFwIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2NcbiAgICB8IHggOjogbCAtPlxuICAgICAgIGxldCB4cyA9IGYgeCBpblxuICAgICAgIGF1eCBmIChyZXZfYXBwZW5kIHhzIGFjYykgbFxuICBpbiBhdXggZiBbXSBsXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjdSBsID1cbiAgbGV0IHJlYyBhdXggYWNjdSBsX2FjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdSwgcmV2IGxfYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIGxldCBhY2N1LCB4ID0gZiBhY2N1IHggaW5cbiAgICAgICAgYXV4IGFjY3UgKHggOjogbF9hY2N1KSBsIGluXG4gIGF1eCBhY2N1IFtdIGxcblxubGV0IHBhcnRpdGlvbiBwIGwgPVxuICBsZXQgcmVjIHBhcnQgeWVzIG5vID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IHllcywgcmV2IG5vKVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBwYXJ0ICh4IDo6IHllcykgbm8gbCBlbHNlIHBhcnQgeWVzICh4IDo6IG5vKSBsIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcCBwIGwgPVxuICBsZXQgcmVjIHBhcnQgbGVmdCByaWdodCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiBsZWZ0LCByZXYgcmlnaHQpXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIHAgeCB3aXRoXG4gICAgICAgfCBFaXRoZXIuTGVmdCB2IC0+IHBhcnQgKHYgOjogbGVmdCkgcmlnaHQgbFxuICAgICAgIHwgRWl0aGVyLlJpZ2h0IHYgLT4gcGFydCBsZWZ0ICh2IDo6IHJpZ2h0KSBsXG4gICAgIGVuZFxuICBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHJlYyBzcGxpdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKFtdLCBbXSlcbiAgfCAoeCx5KTo6bCAtPlxuICAgICAgbGV0IChyeCwgcnkpID0gc3BsaXQgbCBpbiAoeDo6cngsIHk6OnJ5KVxuXG5sZXQgcmVjIGNvbWJpbmUgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IChhMSwgYTIpIDo6IGNvbWJpbmUgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmNvbWJpbmVcIlxuXG4oKiogc29ydGluZyAqKVxuXG5sZXQgcmVjIG1lcmdlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIGwyIC0+IGwyXG4gIHwgbDEsIFtdIC0+IGwxXG4gIHwgaDEgOjogdDEsIGgyIDo6IHQyIC0+XG4gICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgdGhlbiBoMSA6OiBtZXJnZSBjbXAgdDEgbDJcbiAgICAgIGVsc2UgaDIgOjogbWVyZ2UgY21wIGwxIHQyXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA8PSAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyIDw9IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyID4gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHNvcnQgPSBzdGFibGVfc29ydFxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqIE5vdGU6IG9uIGEgbGlzdCBvZiBsZW5ndGggYmV0d2VlbiBhYm91dCAxMDAwMDAgKGRlcGVuZGluZyBvbiB0aGUgbWlub3JcbiAgIGhlYXAgc2l6ZSBhbmQgdGhlIHR5cGUgb2YgdGhlIGxpc3QpIGFuZCBTeXMubWF4X2FycmF5X3NpemUsIGl0IGlzXG4gICBhY3R1YWxseSBmYXN0ZXIgdG8gdXNlIHRoZSBmb2xsb3dpbmcsIGJ1dCBpdCBtaWdodCBhbHNvIHVzZSBtb3JlIG1lbW9yeVxuICAgYmVjYXVzZSB0aGUgYXJndW1lbnQgbGlzdCBjYW5ub3QgYmUgZGVhbGxvY2F0ZWQgaW5jcmVtZW50YWxseS5cblxuICAgQWxzbywgdGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhpcyBjb2RlIG9yIGluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2Ygb2JqX3RydW5jYXRlLlxuXG5leHRlcm5hbCBvYmpfdHJ1bmNhdGUgOiAnYSBhcnJheSAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuXG5sZXQgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhID1cbiAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgYWNjdSBuIHAgPVxuICAgIGlmIHAgPD0gMCB0aGVuIGFjY3UgZWxzZSBiZWdpblxuICAgICAgaWYgcCA9IG4gdGhlbiBiZWdpblxuICAgICAgICBvYmpfdHJ1bmNhdGUgYSBwO1xuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIChuLTEwMDApIChwLTEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIG4gKHAtMSlcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpblxuICBsb29wIFtdIChsLTEwMDApIGxcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBBcnJheS5zdGFibGVfc29ydCBjbXAgYTtcbiAgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhXG5cbiopXG5cblxuKCoqIHNvcnRpbmcgKyByZW1vdmluZyBkdXBsaWNhdGVzICopXG5cbmxldCBzb3J0X3VuaXEgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2UgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPCAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlX3JldiB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhzIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXywgW10gLT4gMVxuICB8IF8gOjogbDEsIF8gOjogbDIgLT4gY29tcGFyZV9sZW5ndGhzIGwxIGwyXG47O1xuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCBuID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT5cbiAgICBpZiBuID0gMCB0aGVuIDAgZWxzZVxuICAgICAgaWYgbiA+IDAgdGhlbiAtMSBlbHNlIDFcbiAgfCBfIDo6IGwgLT5cbiAgICBpZiBuIDw9IDAgdGhlbiAxIGVsc2VcbiAgICAgIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCAobi0xKVxuOztcblxuKCoqIHsxIENvbXBhcmlzb259ICopXG5cbigqIE5vdGU6IHdlIGFyZSAqbm90KiBzaG9ydGN1dHRpbmcgdGhlIGxpc3QgYnkgdXNpbmdcbiAgIFtMaXN0LmNvbXBhcmVfbGVuZ3Roc10gZmlyc3Q7IHRoaXMgbWF5IGJlIHNsb3dlciBvbiBsb25nIGxpc3RzXG4gICBpbW1lZGlhdGVseSBzdGFydCB3aXRoIGRpc3RpbmN0IGVsZW1lbnRzLiBJdCBpcyBhbHNvIGluY29ycmVjdCBmb3JcbiAgIFtjb21wYXJlXSBiZWxvdywgYW5kIGl0IGlzIGJldHRlciAocHJpbmNpcGxlIG9mIGxlYXN0IHN1cnByaXNlKSB0b1xuICAgdXNlIHRoZSBzYW1lIGFwcHJvYWNoIGZvciBib3RoIGZ1bmN0aW9ucy4gKilcbmxldCByZWMgZXF1YWwgZXEgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF86Ol8gfCBfOjpfLCBbXSAtPiBmYWxzZVxuICB8IGExOjpsMSwgYTI6OmwyIC0+IGVxIGExIGEyICYmIGVxdWFsIGVxIGwxIGwyXG5cbmxldCByZWMgY29tcGFyZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF86Ol8gLT4gLTFcbiAgfCBfOjpfLCBbXSAtPiAxXG4gIHwgYTE6OmwxLCBhMjo6bDIgLT5cbiAgICBsZXQgYyA9IGNtcCBhMSBhMiBpblxuICAgIGlmIGMgPD4gMCB0aGVuIGNcbiAgICBlbHNlIGNvbXBhcmUgY21wIGwxIGwyXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgbCA9XG4gIGxldCByZWMgYXV4IGwgKCkgPSBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFNlcS5OaWxcbiAgICB8IHggOjogdGFpbCAtPiBTZXEuQ29ucyAoeCwgYXV4IHRhaWwpXG4gIGluXG4gIGF1eCBsXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IHJlYyBkaXJlY3QgZGVwdGggc2VxIDogXyBsaXN0ID1cbiAgICBpZiBkZXB0aD0wXG4gICAgdGhlblxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gc2VxXG4gICAgICB8PiByZXYgKCogdGFpbHJlYyAqKVxuICAgIGVsc2UgbWF0Y2ggc2VxKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFtdXG4gICAgICB8IFNlcS5Db25zICh4LCBuZXh0KSAtPiB4IDo6IGRpcmVjdCAoZGVwdGgtMSkgbmV4dFxuICBpblxuICBkaXJlY3QgNTAwIHNlcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbnRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5leHRlcm5hbCBuZWcgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsIGFkZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsIHN1YiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsIG11bCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsIGRpdiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsIHJlbSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcbmV4dGVybmFsIGxvZ2FuZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsIGxvZ29yIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCBsb2d4b3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5sZXQgbG9nbm90IHggPSBsb2d4b3IgeCAoLTEpXG5leHRlcm5hbCBzaGlmdF9sZWZ0IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxubGV0IGVxdWFsIDogaW50IC0+IGludCAtPiBib29sID0gKCA9IClcbmxldCBjb21wYXJlIDogaW50IC0+IGludCAtPiBpbnQgPSBTdGRsaWIuY29tcGFyZVxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5leHRlcm5hbCB0b19mbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcblxuKCpcbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxubGV0IG9mX3N0cmluZyBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuKilcblxuZXh0ZXJuYWwgZm9ybWF0X2ludCA6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxubGV0IHRvX3N0cmluZyB4ID0gZm9ybWF0X2ludCBcIiVkXCIgeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIGNvcHkgcyBlbHNlIGJlZ2luXG4gICAgbGV0IHMnID0gY3JlYXRlICFuIGluXG4gICAgbiA6PSAwO1xuICAgIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICAgIGJlZ2luIG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgKCdcXFwiJyB8ICdcXFxcJykgYXMgYyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ24nXG4gICAgICB8ICdcXHQnIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAndCdcbiAgICAgIHwgJ1xccicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdyJ1xuICAgICAgfCAnXFxiJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ2InXG4gICAgICB8ICgnICcgLi4gJ34nKSBhcyBjIC0+IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCBjIC0+XG4gICAgICAgICAgbGV0IGEgPSBjaGFyX2NvZGUgYyBpblxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIC8gMTAwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIChhIC8gMTApIG1vZCAxMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIG1vZCAxMCkpO1xuICAgICAgZW5kO1xuICAgICAgaW5jciBuXG4gICAgZG9uZTtcbiAgICBzJ1xuICBlbmRcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgbG93ZXJjYXNlIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2Ugc1xuXG5sZXQgY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlIHNcbmxldCB1bmNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZSBzXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBsZXQgYnVmID0gcmVmIChtYWtlIDI1NiAnXFwwMDAnKSBpblxuICBsZXQgcmVzaXplICgpID1cbiAgICAoKiByZXNpemUgKilcbiAgICBsZXQgbmV3X2xlbiA9IEludC5taW4gKDIgKiBsZW5ndGggIWJ1ZikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgaWYgbGVuZ3RoICFidWYgPSBuZXdfbGVuIHRoZW4gZmFpbHdpdGggXCJCeXRlcy5vZl9zZXE6IGNhbm5vdCBncm93IGJ5dGVzXCI7XG4gICAgbGV0IG5ld19idWYgPSBtYWtlIG5ld19sZW4gJ1xcMDAwJyBpblxuICAgIGJsaXQgIWJ1ZiAwIG5ld19idWYgMCAhbjtcbiAgICBidWYgOj0gbmV3X2J1ZlxuICBpblxuICBTZXEuaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgIGlmICFuID0gbGVuZ3RoICFidWYgdGhlbiByZXNpemUoKTtcbiAgICAgICBzZXQgIWJ1ZiAhbiBjO1xuICAgICAgIGluY3IgbilcbiAgICBpO1xuICBzdWIgIWJ1ZiAwICFuXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbigqIFRoZSBnZXRfIGZ1bmN0aW9ucyBhcmUgYWxsIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5cbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2dVwiXG5leHRlcm5hbCBnZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfYnl0ZXNfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9ieXRlc19nZXQ2NFwiXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHNldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgc2V0X2ludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNlwiXG5leHRlcm5hbCBzZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJcIlxuZXh0ZXJuYWwgc2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfYmUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcbiAgZWxzZSBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcblxubGV0IGdldF9pbnQ4IGIgaSA9XG4gICgoZ2V0X3VpbnQ4IGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSA4KSkgYXNyIChTeXMuaW50X3NpemUgLSA4KVxuXG5sZXQgZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF91aW50MTZfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X2ludDE2X25lIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9uZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2xlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9sZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2JlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9iZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDMyX2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQzMl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2UgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHhcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2JlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeCBlbHNlXG4gIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG5cbmxldCBzZXRfaW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDE2X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfdWludDggPSBzZXRfaW50OFxubGV0IHNldF91aW50MTZfbmUgPSBzZXRfaW50MTZfbmVcbmxldCBzZXRfdWludDE2X2JlID0gc2V0X2ludDE2X2JlXG5sZXQgc2V0X3VpbnQxNl9sZSA9IHNldF9pbnQxNl9sZVxuXG4oKiBVVEYgY29kZWNzIGFuZCB2YWxpZGF0aW9ucyAqKVxuXG5sZXQgZGVjX2ludmFsaWQgPSBVY2hhci51dGZfZGVjb2RlX2ludmFsaWRcbmxldFtAaW5saW5lXSBkZWNfcmV0IG4gdSA9IFVjaGFyLnV0Zl9kZWNvZGUgbiAoVWNoYXIudW5zYWZlX29mX2ludCB1KVxuXG4oKiBJbiBjYXNlIG9mIGRlY29kaW5nIGVycm9yLCBpZiB3ZSBlcnJvciBvbiB0aGUgZmlyc3QgYnl0ZSwgd2VcbiAgIGNvbnN1bWUgdGhlIGJ5dGUsIG90aGVyd2lzZSB3ZSBjb25zdW1lIHRoZSBbbl0gYnl0ZXMgcHJlY2VlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+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+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBHYWxsaXVtLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFN0cmluZyBvcGVyYXRpb25zLCBiYXNlZCBvbiBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIGJ5dGVzLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgY29weSBzID1cbiAgQi5jb3B5IChib3MgcykgfD4gYnRzXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGZpbGwgPVxuICBCLmZpbGxcbmxldCBibGl0ID1cbiAgQi5ibGl0X3N0cmluZ1xuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IFwiXCJcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluIGJ0cyBAQFxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKEIuY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgPSAoIF4gKVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlciBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyaSBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxubGV0IG1hcCBmIHMgPVxuICBCLm1hcCBmIChib3MgcykgfD4gYnRzXG5sZXQgbWFwaSBmIHMgPVxuICBCLm1hcGkgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IGZvbGRfcmlnaHQgZiB4IGEgPVxuICBCLmZvbGRfcmlnaHQgZiAoYm9zIHgpIGFcbmxldCBmb2xkX2xlZnQgZiBhIHggPVxuICBCLmZvbGRfbGVmdCBmIGEgKGJvcyB4KVxubGV0IGV4aXN0cyBmIHMgPVxuICBCLmV4aXN0cyBmIChib3MgcylcbmxldCBmb3JfYWxsIGYgcyA9XG4gIEIuZm9yX2FsbCBmIChib3MgcylcblxuKCogQmV3YXJlOiB3ZSBjYW5ub3QgdXNlIEIudHJpbSBvciBCLmVzY2FwZSBiZWNhdXNlIHRoZXkgYWx3YXlzIG1ha2UgYVxuICAgY29weSwgYnV0IFN0cmluZy5tbGkgc3BlbGxzIG91dCBzb21lIGNhc2VzIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZFxuICAgdG8gbWFrZSBhIGNvcHkuICopXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgaWYgcyA9IFwiXCIgdGhlbiBzXG4gIGVsc2UgaWYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAwKSB8fCBpc19zcGFjZSAodW5zYWZlX2dldCBzIChsZW5ndGggcyAtIDEpKVxuICAgIHRoZW4gYnRzIChCLnRyaW0gKGJvcyBzKSlcbiAgZWxzZSBzXG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgcmVjIGVzY2FwZV9pZl9uZWVkZWQgcyBuIGkgPVxuICAgIGlmIGkgPj0gbiB0aGVuIHMgZWxzZVxuICAgICAgbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFwwMDAnLi4nXFwwMzEnIHwgJ1xcMTI3Jy4uICdcXDI1NScgLT5cbiAgICAgICAgICBidHMgKEIuZXNjYXBlZCAoYm9zIHMpKVxuICAgICAgfCBfIC0+IGVzY2FwZV9pZl9uZWVkZWQgcyBuIChpKzEpXG4gIGluXG4gIGVzY2FwZV9pZl9uZWVkZWQgcyAobGVuZ3RoIHMpIDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICAgIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPVxuICBCLnVwcGVyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID1cbiAgQi5sb3dlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIudW5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPVxuICBCLnVwcGVyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZSBzID1cbiAgQi5sb3dlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplIHMgPVxuICBCLmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemUgcyA9XG4gIEIudW5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zdHJpbmdfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBib3MgcyB8PiBCLnRvX3NlcVxuXG5sZXQgdG9fc2VxaSBzID0gYm9zIHMgfD4gQi50b19zZXFpXG5cbmxldCBvZl9zZXEgZyA9IEIub2Zfc2VxIGcgfD4gYnRzXG5cbigqIFVURiBkZWNvZGVycyBhbmQgdmFsaWRhdG9ycyAqKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl84X3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl84IHMgPSBCLmlzX3ZhbGlkX3V0Zl84IChib3MgcylcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZiZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZiZSBzID0gQi5pc192YWxpZF91dGZfMTZiZSAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2bGVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2bGUgKGJvcyBzKVxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCBnZXRfdWludDggOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX3N0cmluZ19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9zdHJpbmdfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfc3RyaW5nX2dldDY0XCJcblxubGV0IGdldF9pbnQ4IHMgaSA9IEIuZ2V0X2ludDggKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9sZSBzIGkgPSBCLmdldF91aW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9iZSBzIGkgPSBCLmdldF91aW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X25lIHMgaSA9IEIuZ2V0X2ludDE2X25lIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9sZSBzIGkgPSBCLmdldF9pbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfYmUgcyBpID0gQi5nZXRfaW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2xlIHMgaSA9IEIuZ2V0X2ludDMyX2xlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9iZSBzIGkgPSBCLmdldF9pbnQzMl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfbGUgcyBpID0gQi5nZXRfaW50NjRfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2JlIHMgaSA9IEIuZ2V0X2ludDY0X2JlIChib3MgcykgaVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgYXJyYXlzLiAqKVxudHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuKCogQXJyYXkgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBsZW5ndGggOiAnYSBhcnJheSAtPiBpbnQgPSBcIiVhcnJheV9sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV9zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgbWFrZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCBjcmVhdGU6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgdW5zYWZlX3N1YiA6ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfc3ViXCJcbmV4dGVybmFsIGFwcGVuZF9wcmltIDogJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfYXBwZW5kXCJcbmV4dGVybmFsIGNvbmNhdCA6ICdhIGFycmF5IGxpc3QgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfY29uY2F0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9ibGl0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2ZpbGxcIlxuZXh0ZXJuYWwgY3JlYXRlX2Zsb2F0OiBpbnQgLT4gZmxvYXQgYXJyYXkgPSBcImNhbWxfbWFrZV9mbG9hdF92ZWN0XCJcbmxldCBtYWtlX2Zsb2F0ID0gY3JlYXRlX2Zsb2F0XG5cbm1vZHVsZSBGbG9hdGFycmF5ID0gc3RydWN0XG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBmbG9hdGFycmF5ID0gXCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgbGVuZ3RoIDogZmxvYXRhcnJheSAtPiBpbnQgPSBcIiVmbG9hdGFycmF5X2xlbmd0aFwiXG4gIGV4dGVybmFsIGdldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV9zYWZlX2dldFwiXG4gIGV4dGVybmFsIHNldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfc2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXRcbiAgICAgID0gXCIlZmxvYXRhcnJheV91bnNhZmVfc2V0XCJcbmVuZFxuXG5sZXQgaW5pdCBsIGYgPVxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZVxuICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuaW5pdFwiXG4gICgqIFNlZSAjNjU3NS4gV2UgY291bGQgYWxzbyBjaGVjayBmb3IgbWF4aW11bSBhcnJheSBzaXplLCBidXQgdGhpcyBkZXBlbmRzXG4gICAgIG9uIHdoZXRoZXIgd2UgY3JlYXRlIGEgZmxvYXQgYXJyYXkgb3IgYSByZWd1bGFyIG9uZS4uLiAqKVxuICBlbHNlXG4gICBsZXQgcmVzID0gY3JlYXRlIGwgKGYgMCkgaW5cbiAgIGZvciBpID0gMSB0byBwcmVkIGwgZG9cbiAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgZG9uZTtcbiAgIHJlc1xuXG5sZXQgbWFrZV9tYXRyaXggc3ggc3kgaW5pdCA9XG4gIGxldCByZXMgPSBjcmVhdGUgc3ggW3x8XSBpblxuICBmb3IgeCA9IDAgdG8gcHJlZCBzeCBkb1xuICAgIHVuc2FmZV9zZXQgcmVzIHggKGNyZWF0ZSBzeSBpbml0KVxuICBkb25lO1xuICByZXNcblxubGV0IGNyZWF0ZV9tYXRyaXggPSBtYWtlX21hdHJpeFxuXG5sZXQgY29weSBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpbiBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSB1bnNhZmVfc3ViIGEgMCBsXG5cbmxldCBhcHBlbmQgYTEgYTIgPVxuICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgaWYgbDEgPSAwIHRoZW4gY29weSBhMlxuICBlbHNlIGlmIGxlbmd0aCBhMiA9IDAgdGhlbiB1bnNhZmVfc3ViIGExIDAgbDFcbiAgZWxzZSBhcHBlbmRfcHJpbSBhMSBhMlxuXG5sZXQgc3ViIGEgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuc3ViXCJcbiAgZWxzZSB1bnNhZmVfc3ViIGEgb2ZzIGxlblxuXG5sZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxubGV0IGJsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBhMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggYTIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IGExIG9mczEgYTIgb2ZzMiBsZW5cblxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBpdGVyMiBmIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2VcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxubGV0IG1hcCBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZih1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZih1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwMiBmIGEgYiA9XG4gIGxldCBsYSA9IGxlbmd0aCBhIGluXG4gIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gIGlmIGxhIDw+IGxiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lm1hcDI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZSBiZWdpblxuICAgIGlmIGxhID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgKGYgKHVuc2FmZV9nZXQgYSAwKSAodW5zYWZlX2dldCBiIDApKSBpblxuICAgICAgZm9yIGkgPSAxIHRvIGxhIC0gMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkpXG4gICAgICBkb25lO1xuICAgICAgclxuICAgIGVuZFxuICBlbmRcblxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgbWFwaSBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZiAwICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgdG9fbGlzdCBhID1cbiAgbGV0IHJlYyB0b2xpc3QgaSByZXMgPVxuICAgIGlmIGkgPCAwIHRoZW4gcmVzIGVsc2UgdG9saXN0IChpIC0gMSkgKHVuc2FmZV9nZXQgYSBpIDo6IHJlcykgaW5cbiAgdG9saXN0IChsZW5ndGggYSAtIDEpIFtdXG5cbigqIENhbm5vdCB1c2UgTGlzdC5sZW5ndGggaGVyZSBiZWNhdXNlIHRoZSBMaXN0IG1vZHVsZSBkZXBlbmRzIG9uIEFycmF5LiAqKVxubGV0IHJlYyBsaXN0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2N1XG4gIHwgXzo6dCAtPiBsaXN0X2xlbmd0aCAoc3VjYyBhY2N1KSB0XG5cbmxldCBvZl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBhID0gY3JlYXRlIChsaXN0X2xlbmd0aCAwIGwpIGhkIGluXG4gICAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgW10gLT4gYVxuICAgICAgICB8IGhkOjp0bCAtPiB1bnNhZmVfc2V0IGEgaSBoZDsgZmlsbCAoaSsxKSB0bCBpblxuICAgICAgZmlsbCAxIHRsXG5cbmxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICBkb25lO1xuICAhclxuXG5sZXQgZm9sZF9sZWZ0X21hcCBmIGFjYyBpbnB1dF9hcnJheSA9XG4gIGxldCBsZW4gPSBsZW5ndGggaW5wdXRfYXJyYXkgaW5cbiAgaWYgbGVuID0gMCB0aGVuIChhY2MsIFt8fF0pIGVsc2UgYmVnaW5cbiAgICBsZXQgYWNjLCBlbHQgPSBmIGFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSAwKSBpblxuICAgIGxldCBvdXRwdXRfYXJyYXkgPSBjcmVhdGUgbGVuIGVsdCBpblxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgZm9yIGkgPSAxIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBhY2MnLCBlbHQgPSBmICFhY2MgKHVuc2FmZV9nZXQgaW5wdXRfYXJyYXkgaSkgaW5cbiAgICAgIGFjYyA6PSBhY2MnO1xuICAgICAgdW5zYWZlX3NldCBvdXRwdXRfYXJyYXkgaSBlbHQ7XG4gICAgZG9uZTtcbiAgICAhYWNjLCBvdXRwdXRfYXJyYXlcbiAgZW5kXG5cbmxldCBmb2xkX3JpZ2h0IGYgYSB4ID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IGxlbmd0aCBhIC0gMSBkb3dudG8gMCBkb1xuICAgIHIgOj0gZiAodW5zYWZlX2dldCBhIGkpICFyXG4gIGRvbmU7XG4gICFyXG5cbmxldCBleGlzdHMgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwyIHAgbDEgbDIgPVxuICBsZXQgbjEgPSBsZW5ndGggbDFcbiAgYW5kIG4yID0gbGVuZ3RoIGwyIGluXG4gIGlmIG4xIDw+IG4yIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5mb3JfYWxsMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgbDEgaSkgKHVuc2FmZV9nZXQgbDIgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IGV4aXN0czIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmV4aXN0czJcIlxuICBlbHNlIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbjEgdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBtZW0geCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgY29tcGFyZSAodW5zYWZlX2dldCBhIGkpIHggPSAwIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbXEgeCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgeCA9PSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZpbmRfb3B0IHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeFxuICAgICAgZWxzZSBsb29wIChzdWNjIGkpXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9tYXAgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBsb29wIChzdWNjIGkpXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBzcGxpdCB4ID1cbiAgaWYgeCA9IFt8fF0gdGhlbiBbfHxdLCBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgYTAsIGIwID0gdW5zYWZlX2dldCB4IDAgaW5cbiAgICBsZXQgbiA9IGxlbmd0aCB4IGluXG4gICAgbGV0IGEgPSBjcmVhdGUgbiBhMCBpblxuICAgIGxldCBiID0gY3JlYXRlIG4gYjAgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBhaSwgYmkgPSB1bnNhZmVfZ2V0IHggaSBpblxuICAgICAgdW5zYWZlX3NldCBhIGkgYWk7XG4gICAgICB1bnNhZmVfc2V0IGIgaSBiaVxuICAgIGRvbmU7XG4gICAgYSwgYlxuICBlbmRcblxubGV0IGNvbWJpbmUgYSBiID1cbiAgbGV0IG5hID0gbGVuZ3RoIGEgaW5cbiAgbGV0IG5iID0gbGVuZ3RoIGIgaW5cbiAgaWYgbmEgPD4gbmIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmNvbWJpbmVcIjtcbiAgaWYgbmEgPSAwIHRoZW4gW3x8XVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHggPSBjcmVhdGUgbmEgKHVuc2FmZV9nZXQgYSAwLCB1bnNhZmVfZ2V0IGIgMCkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbmEgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHggaSAodW5zYWZlX2dldCBhIGksIHVuc2FmZV9nZXQgYiBpKVxuICAgIGRvbmU7XG4gICAgeFxuICBlbmRcblxuZXhjZXB0aW9uIEJvdHRvbSBvZiBpbnRcbmxldCBzb3J0IGNtcCBhID1cbiAgbGV0IG1heHNvbiBsIGkgPVxuICAgIGxldCBpMzEgPSBpK2kraSsxIGluXG4gICAgbGV0IHggPSByZWYgaTMxIGluXG4gICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgIGlmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwIHRoZW4geCA6PSBpMzErMTtcbiAgICAgIGlmIGNtcCAoZ2V0IGEgIXgpIChnZXQgYSAoaTMxKzIpKSA8IDAgdGhlbiB4IDo9IGkzMSsyO1xuICAgICAgIXhcbiAgICBlbmQgZWxzZVxuICAgICAgaWYgaTMxKzEgPCBsICYmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwXG4gICAgICB0aGVuIGkzMSsxXG4gICAgICBlbHNlIGlmIGkzMSA8IGwgdGhlbiBpMzEgZWxzZSByYWlzZSAoQm90dG9tIGkpXG4gIGluXG4gIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgIGlmIGNtcCAoZ2V0IGEgaikgZSA+IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICB0cmlja2xlZG93biBsIGogZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgc2V0IGEgaSBlO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgbGV0IHJlYyBidWJibGVkb3duIGwgaSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgYnViYmxlZG93biBsIGpcbiAgaW5cbiAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gIGxldCByZWMgdHJpY2tsZXVwIGkgZSA9XG4gICAgbGV0IGZhdGhlciA9IChpIC0gMSkgLyAzIGluXG4gICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgaWYgY21wIChnZXQgYSBmYXRoZXIpIGUgPCAwIHRoZW4gYmVnaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGZhdGhlcik7XG4gICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgZm9yIGkgPSBsIC0gMSBkb3dudG8gMiBkb1xuICAgIGxldCBlID0gKGdldCBhIGkpIGluXG4gICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgdHJpY2tsZXVwIChidWJibGUgaSAwKSBlO1xuICBkb25lO1xuICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG5cbmxldCBjdXRvZmYgPSA1XG5sZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICBsZXQgbWVyZ2Ugc3JjMW9mcyBzcmMxbGVuIHNyYzIgc3JjMm9mcyBzcmMybGVuIGRzdCBkc3RvZnMgPVxuICAgIGxldCBzcmMxciA9IHNyYzFvZnMgKyBzcmMxbGVuIGFuZCBzcmMyciA9IHNyYzJvZnMgKyBzcmMybGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgaWYgY21wIHMxIHMyIDw9IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczE7XG4gICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICBpZiBpMSA8IHNyYzFyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIChnZXQgYSBpMSkgaTIgczIgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBzcmMyIGkyIGRzdCAoZCArIDEpIChzcmMyciAtIGkyKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICBsZXQgaTIgPSBpMiArIDEgaW5cbiAgICAgICAgaWYgaTIgPCBzcmMyciB0aGVuXG4gICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJsaXQgYSBpMSBkc3QgKGQgKyAxKSAoc3JjMXIgLSBpMSlcbiAgICAgIGVuZFxuICAgIGluIGxvb3Agc3JjMW9mcyAoZ2V0IGEgc3JjMW9mcykgc3JjMm9mcyAoZ2V0IHNyYzIgc3JjMm9mcykgZHN0b2ZzO1xuICBpblxuICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSAoc3Jjb2ZzICsgaSkpIGluXG4gICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICB3aGlsZSAoIWogPj0gZHN0b2ZzICYmIGNtcCAoZ2V0IGRzdCAhaikgZSA+IDApIGRvXG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgKGdldCBkc3QgIWopO1xuICAgICAgICBkZWNyIGo7XG4gICAgICBkb25lO1xuICAgICAgc2V0IGRzdCAoIWogKyAxKSBlO1xuICAgIGRvbmU7XG4gIGluXG4gIGxldCByZWMgc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgIGxldCBsMSA9IGxlbiAvIDIgaW5cbiAgICAgIGxldCBsMiA9IGxlbiAtIGwxIGluXG4gICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgIHNvcnR0byBzcmNvZnMgYSAoc3Jjb2ZzICsgbDIpIGwxO1xuICAgICAgbWVyZ2UgKHNyY29mcyArIGwyKSBsMSBkc3QgKGRzdG9mcyArIGwxKSBsMiBkc3QgZHN0b2ZzO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgbGV0IGwxID0gbCAvIDIgaW5cbiAgICBsZXQgbDIgPSBsIC0gbDEgaW5cbiAgICBsZXQgdCA9IG1ha2UgbDIgKGdldCBhIDApIGluXG4gICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICBzb3J0dG8gMCBhIGwyIGwxO1xuICAgIG1lcmdlIGwyIGwxIHQgMCBsMiBhIDA7XG4gIGVuZFxuXG5cbmxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICAgIGVsc2UgU2VxLk5pbFxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgdGhlblxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9yZXZfbGlzdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW3x8XVxuICB8IGhkOjp0bCBhcyBsIC0+XG4gICAgICBsZXQgbGVuID0gbGlzdF9sZW5ndGggMCBsIGluXG4gICAgICBsZXQgYSA9IGNyZWF0ZSBsZW4gaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpLTEpIHRsXG4gICAgICBpblxuICAgICAgZmlsbCAobGVuLTIpIHRsXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBsID0gU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gaSBpblxuICBvZl9yZXZfbGlzdCBsXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFNldHMgb3ZlciBvcmRlcmVkIHR5cGVzICopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGVsdFxuICAgIHR5cGUgdFxuICAgIHZhbCBlbXB0eTogdFxuICAgIHZhbCBpc19lbXB0eTogdCAtPiBib29sXG4gICAgdmFsIG1lbTogZWx0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBhZGQ6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgc2luZ2xldG9uOiBlbHQgLT4gdFxuICAgIHZhbCByZW1vdmU6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgdW5pb246IHQgLT4gdCAtPiB0XG4gICAgdmFsIGludGVyOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBkaXNqb2ludDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZGlmZjogdCAtPiB0IC0+IHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgc3Vic2V0OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoZWx0IC0+IHVuaXQpIC0+IHQgLT4gdW5pdFxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBmb3JfYWxsOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHRcbiAgICB2YWwgZmlsdGVyX21hcDogKGVsdCAtPiBlbHQgb3B0aW9uKSAtPiB0IC0+IHRcbiAgICB2YWwgcGFydGl0aW9uOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdCAqIHRcbiAgICB2YWwgY2FyZGluYWw6IHQgLT4gaW50XG4gICAgdmFsIGVsZW1lbnRzOiB0IC0+IGVsdCBsaXN0XG4gICAgdmFsIG1pbl9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1pbl9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgbWF4X2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWF4X2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBjaG9vc2U6IHQgLT4gZWx0XG4gICAgdmFsIGNob29zZV9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgb2ZfbGlzdDogZWx0IGxpc3QgLT4gdFxuICAgIHZhbCB0b19zZXFfZnJvbSA6IGVsdCAtPiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19yZXZfc2VxIDogdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgICB2YWwgb2Zfc2VxIDogZWx0IFNlcS50IC0+IHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID1cbiAgc3RydWN0XG4gICAgdHlwZSBlbHQgPSBPcmQudFxuICAgIHR5cGUgdCA9IEVtcHR5IHwgTm9kZSBvZiB7bDp0OyB2OmVsdDsgcjp0OyBoOmludH1cblxuICAgICgqIFNldHMgYXJlIHJlcHJlc2VudGVkIGJ5IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyAodGhlIGhlaWdodHMgb2YgdGhlXG4gICAgICAgY2hpbGRyZW4gZGlmZmVyIGJ5IGF0IG1vc3QgMiAqKVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgKCogQ3JlYXRlcyBhIG5ldyBub2RlIHdpdGggbGVmdCBzb24gbCwgdmFsdWUgdiBhbmQgcmlnaHQgc29uIHIuXG4gICAgICAgV2UgbXVzdCBoYXZlIGFsbCBlbGVtZW50cyBvZiBsIDwgdiA8IGFsbCBlbGVtZW50cyBvZiByLlxuICAgICAgIGwgYW5kIHIgbXVzdCBiZSBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGhlaWdodCBmb3IgYmV0dGVyIHNwZWVkLiAqKVxuXG4gICAgbGV0IGNyZWF0ZSBsIHYgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSwgYnV0IHBlcmZvcm1zIG9uZSBzdGVwIG9mIHJlYmFsYW5jaW5nIGlmIG5lY2Vzc2FyeS5cbiAgICAgICBBc3N1bWVzIGwgYW5kIHIgYmFsYW5jZWQgYW5kIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDMuXG4gICAgICAgSW5saW5lIGV4cGFuc2lvbiBvZiBjcmVhdGUgZm9yIGJldHRlciBzcGVlZCBpbiB0aGUgbW9zdCBmcmVxdWVudCBjYXNlXG4gICAgICAgd2hlcmUgbm8gcmViYWxhbmNpbmcgaXMgcmVxdWlyZWQuICopXG5cbiAgICBsZXQgYmFsIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiAoY3JlYXRlIGxyIHYgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBscmwpIGxydiAoY3JlYXRlIGxyciB2IHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB2IHJsKSBydiByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmxsKSBybHYgKGNyZWF0ZSBybHIgcnYgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdjsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgKCogSW5zZXJ0aW9uIG9mIG9uZSBlbGVtZW50ICopXG5cbiAgICBsZXQgcmVjIGFkZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHQgZWxzZVxuICAgICAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0IGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IGFkZCB4IHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0IGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHNpbmdsZXRvbiB4ID0gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cblxuICAgICgqIEJld2FyZTogdGhvc2UgdHdvIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgYWRkZWQgdiBpcyAqc3RyaWN0bHkqXG4gICAgICAgc21hbGxlciAob3IgYmlnZ2VyKSB0aGFuIGFsbCB0aGUgcHJlc2VudCBlbGVtZW50cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBlbGVtZW50LlxuICAgICAgIEluZGVlZCwgdGhleSBhcmUgb25seSB1c2VkIGR1cmluZyB0aGUgXCJqb2luXCIgb3BlcmF0aW9uIHdoaWNoXG4gICAgICAgcmVzcGVjdHMgdGhpcyBwcmVjb25kaXRpb24uXG4gICAgKilcblxuICAgIGxldCByZWMgYWRkX21pbl9lbGVtZW50IHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24geFxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fZWxlbWVudCB4IGwpIHYgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCBsIHYgKGFkZF9tYXhfZWxlbWVudCB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiByID1cbiAgICAgIG1hdGNoIChsLCByKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gYWRkX21pbl9lbGVtZW50IHYgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfZWxlbWVudCB2IGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgcj1scjsgaD1saH0sIE5vZGV7bD1ybDsgdj1ydjsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgKGpvaW4gbHIgdiByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IHJsKSBydiByciBlbHNlXG4gICAgICAgICAgY3JlYXRlIGwgdiByXG5cbiAgICAoKiBTbWFsbGVzdCBhbmQgZ3JlYXRlc3QgZWxlbWVudCBvZiBhIHNldCAqKVxuXG4gICAgbGV0IHJlYyBtaW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgdn0gLT4gdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHQgbFxuXG4gICAgbGV0IHJlYyBtaW5fZWx0X29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiBTb21lIHZcbiAgICAgIHwgTm9kZXtsfSAtPiBtaW5fZWx0X29wdCBsXG5cbiAgICBsZXQgcmVjIG1heF9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXt2OyByPUVtcHR5fSAtPiB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdCByXG5cbiAgICBsZXQgcmVjIG1heF9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle3J9IC0+IG1heF9lbHRfb3B0IHJcblxuICAgICgqIFJlbW92ZSB0aGUgc21hbGxlc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2V0ICopXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQucmVtb3ZlX21pbl9lbHRcIlxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBiYWwgKHJlbW92ZV9taW5fZWx0IGwpIHYgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIEFzc3VtZSB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLiAqKVxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gYmFsIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IGpvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIFNwbGl0dGluZy4gIHNwbGl0IHggcyByZXR1cm5zIGEgdHJpcGxlIChsLCBwcmVzZW50LCByKSB3aGVyZVxuICAgICAgICAtIGwgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlIDwgeFxuICAgICAgICAtIHIgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlID4geFxuICAgICAgICAtIHByZXNlbnQgaXMgZmFsc2UgaWYgcyBjb250YWlucyBubyBlbGVtZW50IGVxdWFsIHRvIHgsXG4gICAgICAgICAgb3IgdHJ1ZSBpZiBzIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8geC4gKilcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBmYWxzZSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIHRydWUsIHIpXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgKGxsLCBwcmVzLCBybCkgPSBzcGxpdCB4IGwgaW4gKGxsLCBwcmVzLCBqb2luIHJsIHYgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGxyLCBwcmVzLCBycilcblxuICAgICgqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXQgb3BlcmF0aW9ucyAqKVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0gYXMgdCkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluXG4gICAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgcnIgPSByZW1vdmUgeCByIGluXG4gICAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHJlYyB1bmlvbiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdDIpIC0+IHQyXG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjE7IGg9aDF9LCBOb2Rle2w9bDI7IHY9djI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGlmIGgyID0gMSB0aGVuIGFkZCB2MiBzMSBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDIsIF8sIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MSAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBoMSA9IDEgdGhlbiBhZGQgdjEgczIgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBsZXQgKGwxLCBfLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikgdjIgKHVuaW9uIHIxIHIyKVxuICAgICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIGludGVyIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAoXywgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChpbnRlciBsMSBsMikgKGludGVyIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoaW50ZXIgbDEgbDIpIHYxIChpbnRlciByMSByMilcblxuICAgICgqIFNhbWUgYXMgc3BsaXQsIGJ1dCBjb21wdXRlIHRoZSBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlc1xuICAgICAgIG9ubHkgaWYgdGhlIHBpdm90IGVsZW1lbnQgaXMgbm90IGluIHRoZSBzZXQuICBUaGUgcmlnaHQgc3VidHJlZVxuICAgICAgIGlzIGNvbXB1dGVkIG9uIGRlbWFuZC4gKilcblxuICAgIHR5cGUgc3BsaXRfYmlzID1cbiAgICAgIHwgRm91bmRcbiAgICAgIHwgTm90Rm91bmQgb2YgdCAqICh1bml0IC0+IHQpXG5cbiAgICBsZXQgcmVjIHNwbGl0X2JpcyB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb3RGb3VuZCAoRW1wdHksIChmdW4gKCkgLT4gRW1wdHkpKVxuICAgICAgfCBOb2Rle2w7IHY7IHI7IF99IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIEZvdW5kXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBtYXRjaCBzcGxpdF9iaXMgeCBsIHdpdGhcbiAgICAgICAgICAgIHwgRm91bmQgLT4gRm91bmRcbiAgICAgICAgICAgIHwgTm90Rm91bmQgKGxsLCBybCkgLT4gTm90Rm91bmQgKGxsLCAoZnVuICgpIC0+IGpvaW4gKHJsICgpKSB2IHIpKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IHIgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobHIsIHJyKSAtPiBOb3RGb3VuZCAoam9pbiBsIHYgbHIsIHJyKVxuXG4gICAgbGV0IHJlYyBkaXNqb2ludCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgfCAoXywgRW1wdHkpIC0+IHRydWVcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIGlmIHMxID09IHMyIHRoZW4gZmFsc2VcbiAgICAgICAgICBlbHNlIG1hdGNoIHNwbGl0X2JpcyB2MSB0MiB3aXRoXG4gICAgICAgICAgICAgIE5vdEZvdW5kKGwyLCByMikgLT4gZGlzam9pbnQgbDEgbDIgJiYgZGlzam9pbnQgcjEgKHIyICgpKVxuICAgICAgICAgICAgfCBGb3VuZCAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBkaWZmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAodDEsIEVtcHR5KSAtPiB0MVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aFxuICAgICAgICAgICAgKGwyLCBmYWxzZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGpvaW4gKGRpZmYgbDEgbDIpIHYxIChkaWZmIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChkaWZmIGwxIGwyKSAoZGlmZiByMSByMilcblxuICAgIHR5cGUgZW51bWVyYXRpb24gPSBFbmQgfCBNb3JlIG9mIGVsdCAqIHQgKiBlbnVtZXJhdGlvblxuXG4gICAgbGV0IHJlYyBjb25zX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gY29uc19lbnVtIGwgKE1vcmUodiwgciwgZSkpXG5cbiAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAoRW5kLCBFbmQpIC0+IDBcbiAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICB8IChfLCBFbmQpIC0+IDFcbiAgICAgIHwgKE1vcmUodjEsIHIxLCBlMSksIE1vcmUodjIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPD4gMFxuICAgICAgICAgIHRoZW4gY1xuICAgICAgICAgIGVsc2UgY29tcGFyZV9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcblxuICAgIGxldCBjb21wYXJlIHMxIHMyID1cbiAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gczEgRW5kKSAoY29uc19lbnVtIHMyIEVuZClcblxuICAgIGxldCBlcXVhbCBzMSBzMiA9XG4gICAgICBjb21wYXJlIHMxIHMyID0gMFxuXG4gICAgbGV0IHJlYyBzdWJzZXQgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICBFbXB0eSwgXyAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgXywgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsPWwxOyB2PXYxOyByPXIxfSwgKE5vZGUge2w9bDI7IHY9djI7IHI9cjJ9IGFzIHQyKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgbDEgbDIgJiYgc3Vic2V0IHIxIHIyXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgKE5vZGUge2w9bDE7IHY9djE7IHI9RW1wdHk7IGg9MH0pIGwyICYmIHN1YnNldCByMSB0MlxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1FbXB0eTsgdj12MTsgcj1yMTsgaD0wfSkgcjIgJiYgc3Vic2V0IGwxIHQyXG5cbiAgICBsZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gaXRlciBmIGw7IGYgdjsgaXRlciBmIHJcblxuICAgIGxldCByZWMgZm9sZCBmIHMgYWNjdSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGZvbGQgZiByIChmIHYgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gcCB2ICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0pIGFzIHQgLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHYgdGhlblxuICAgICAgICAgICAgaWYgbD09bCcgJiYgcj09cicgdGhlbiB0IGVsc2Ugam9pbiBsJyB2IHInXG4gICAgICAgICAgZWxzZSBjb25jYXQgbCcgcidcblxuICAgIGxldCByZWMgcGFydGl0aW9uIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoRW1wdHksIEVtcHR5KVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgKGx0LCBsZikgPSBwYXJ0aXRpb24gcCBsIGluXG4gICAgICAgICAgbGV0IHB2ID0gcCB2IGluXG4gICAgICAgICAgbGV0IChydCwgcmYpID0gcGFydGl0aW9uIHAgciBpblxuICAgICAgICAgIGlmIHB2XG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IHJ0LCBjb25jYXQgbGYgcmYpXG4gICAgICAgICAgZWxzZSAoY29uY2F0IGx0IHJ0LCBqb2luIGxmIHYgcmYpXG5cbiAgICBsZXQgcmVjIGNhcmRpbmFsID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2Rle2w7IHJ9IC0+IGNhcmRpbmFsIGwgKyAxICsgY2FyZGluYWwgclxuXG4gICAgbGV0IHJlYyBlbGVtZW50c19hdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBlbGVtZW50c19hdXggKHYgOjogZWxlbWVudHNfYXV4IGFjY3UgcikgbFxuXG4gICAgbGV0IGVsZW1lbnRzIHMgPVxuICAgICAgZWxlbWVudHNfYXV4IFtdIHNcblxuICAgIGxldCBjaG9vc2UgPSBtaW5fZWx0XG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9lbHRfb3B0XG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHZcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIHZcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgdHJ5X2pvaW4gbCB2IHIgPVxuICAgICAgKCogW2pvaW4gbCB2IHJdIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIChlbGVtZW50cyBvZiBsIDwgdiA8XG4gICAgICAgICBlbGVtZW50cyBvZiByKTsgdXNlIFt0cnlfam9pbiBsIHYgcl0gd2hlbiB0aGlzIHByb3BlcnR5IG1heVxuICAgICAgICAgbm90IGhvbGQsIGJ1dCB5b3UgaG9wZSBpdCBkb2VzIGhvbGQgaW4gdGhlIGNvbW1vbiBjYXNlICopXG4gICAgICBpZiAobCA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIChtYXhfZWx0IGwpIHYgPCAwKVxuICAgICAgJiYgKHIgPSBFbXB0eSB8fCBPcmQuY29tcGFyZSB2IChtaW5fZWx0IHIpIDwgMClcbiAgICAgIHRoZW4gam9pbiBsIHYgclxuICAgICAgZWxzZSB1bmlvbiBsIChhZGQgdiByKVxuXG4gICAgbGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gbWFwIGYgciBpblxuICAgICAgICAgaWYgbCA9PSBsJyAmJiB2ID09IHYnICYmIHIgPT0gcicgdGhlbiB0XG4gICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG5cbiAgICBsZXQgdHJ5X2NvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IHRyeV9qb2luIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICBsZXQgcmVjIGZpbHRlcl9tYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IGZpbHRlcl9tYXAgZiBsIGluXG4gICAgICAgICBsZXQgdicgPSBmIHYgaW5cbiAgICAgICAgIGxldCByJyA9IGZpbHRlcl9tYXAgZiByIGluXG4gICAgICAgICBiZWdpbiBtYXRjaCB2JyB3aXRoXG4gICAgICAgICAgIHwgU29tZSB2JyAtPlxuICAgICAgICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSB0cnlfam9pbiBsJyB2JyByJ1xuICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgdHJ5X2NvbmNhdCBsJyByJ1xuICAgICAgICAgZW5kXG5cbiAgICBsZXQgb2Zfc29ydGVkX2xpc3QgbCA9XG4gICAgICBsZXQgcmVjIHN1YiBuIGwgPVxuICAgICAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICAgICAgfCAwLCBsIC0+IEVtcHR5LCBsXG4gICAgICAgIHwgMSwgeDAgOjogbCAtPiBOb2RlIHtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9LCBsXG4gICAgICAgIHwgMiwgeDAgOjogeDEgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTsgcj1FbXB0eTsgaD0yfSwgbFxuICAgICAgICB8IDMsIHgwIDo6IHgxIDo6IHgyIDo6IGwgLT5cbiAgICAgICAgICAgIE5vZGV7bD1Ob2Rle2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX07IHY9eDE7XG4gICAgICAgICAgICAgICAgIHI9Tm9kZXtsPUVtcHR5OyB2PXgyOyByPUVtcHR5OyBoPTF9OyBoPTJ9LCBsXG4gICAgICAgIHwgbiwgbCAtPlxuICAgICAgICAgIGxldCBubCA9IG4gLyAyIGluXG4gICAgICAgICAgbGV0IGxlZnQsIGwgPSBzdWIgbmwgbCBpblxuICAgICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBtaWQgOjogbCAtPlxuICAgICAgICAgICAgbGV0IHJpZ2h0LCBsID0gc3ViIChuIC0gbmwgLSAxKSBsIGluXG4gICAgICAgICAgICBjcmVhdGUgbGVmdCBtaWQgcmlnaHQsIGxcbiAgICAgIGluXG4gICAgICBmc3QgKHN1YiAoTGlzdC5sZW5ndGggbCkgbClcblxuICAgIGxldCBvZl9saXN0IGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGVtcHR5XG4gICAgICB8IFt4MF0gLT4gc2luZ2xldG9uIHgwXG4gICAgICB8IFt4MDsgeDFdIC0+IGFkZCB4MSAoc2luZ2xldG9uIHgwKVxuICAgICAgfCBbeDA7IHgxOyB4Ml0gLT4gYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4M10gLT4gYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4MzsgeDRdIC0+IGFkZCB4NCAoYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpKVxuICAgICAgfCBfIC0+IG9mX3NvcnRlZF9saXN0IChMaXN0LnNvcnRfdW5pcSBPcmQuY29tcGFyZSBsKVxuXG4gICAgbGV0IGFkZF9zZXEgaSBtID1cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBzIHggLT4gYWRkIHggcykgbSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPSBhZGRfc2VxIGkgZW1wdHlcblxuICAgIGxldCByZWMgc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIGMgPSBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSBjIEVuZClcblxuICAgIGxldCByZWMgc25vY19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHNub2NfZW51bSByIChNb3JlKHYsIGwsIGUpKVxuXG4gICAgbGV0IHJlYyByZXZfc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3Jldl9zZXEgYyA9IHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSBjIEVuZClcblxuICAgIGxldCB0b19zZXFfZnJvbSBsb3cgcyA9XG4gICAgICBsZXQgcmVjIGF1eCBsb3cgcyBjID0gbWF0Y2ggcyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gY1xuICAgICAgICB8IE5vZGUge2w7IHI7IHY7IF99IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBPcmQuY29tcGFyZSB2IGxvdyB3aXRoXG4gICAgICAgICAgICAgIHwgMCAtPiBNb3JlICh2LCByLCBjKVxuICAgICAgICAgICAgICB8IG4gd2hlbiBuPDAgLT4gYXV4IGxvdyByIGNcbiAgICAgICAgICAgICAgfCBfIC0+IGF1eCBsb3cgbCAoTW9yZSAodiwgciwgYykpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBzZXFfb2ZfZW51bV8gKGF1eCBsb3cgcyBFbmQpXG4gIGVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSB7IG11dGFibGUgYyA6ICdhIGxpc3Q7IG11dGFibGUgbGVuIDogaW50OyB9XG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG5sZXQgY3JlYXRlICgpID0geyBjID0gW107IGxlbiA9IDA7IH1cblxubGV0IGNsZWFyIHMgPSBzLmMgPC0gW107IHMubGVuIDwtIDBcblxubGV0IGNvcHkgcyA9IHsgYyA9IHMuYzsgbGVuID0gcy5sZW47IH1cblxubGV0IHB1c2ggeCBzID0gcy5jIDwtIHggOjogcy5jOyBzLmxlbiA8LSBzLmxlbiArIDFcblxubGV0IHBvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IGhkXG4gIHwgW10gICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCBwb3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgU29tZSBoZFxuICB8IFtdICAgICAtPiBOb25lXG5cbmxldCB0b3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gaGRcbiAgfCBbXSAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgdG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBTb21lIGhkXG4gIHwgW10gICAgLT4gTm9uZVxuXG5sZXQgaXNfZW1wdHkgcyA9IChzLmMgPSBbXSlcblxubGV0IGxlbmd0aCBzID0gcy5sZW5cblxubGV0IGl0ZXIgZiBzID0gTGlzdC5pdGVyIGYgcy5jXG5cbmxldCBmb2xkIGYgYWNjIHMgPSBMaXN0LmZvbGRfbGVmdCBmIGFjYyBzLmNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gTGlzdC50b19zZXEgcy5jXG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcyA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcyBnO1xuICBzXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIERhbmllbCBkZSBSYXVnbGF1ZHJlLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIGNlbGwgb3B0aW9uXG5hbmQgJ2EgY2VsbCA9IHsgbXV0YWJsZSBjb3VudCA6IGludDsgbXV0YWJsZSBkYXRhIDogJ2EgZGF0YSB9XG5hbmQgJ2EgZGF0YSA9XG4gICAgU2VtcHR5XG4gIHwgU2NvbnMgb2YgJ2EgKiAnYSBkYXRhXG4gIHwgU2FwcCBvZiAnYSBkYXRhICogJ2EgZGF0YVxuICB8IFNsYXp5IG9mICdhIGRhdGEgTGF6eS50XG4gIHwgU2dlbiBvZiAnYSBnZW5cbiAgfCBTYnVmZmlvIDogYnVmZmlvIC0+IGNoYXIgZGF0YVxuYW5kICdhIGdlbiA9IHsgbXV0YWJsZSBjdXJyIDogJ2Egb3B0aW9uIG9wdGlvbjsgZnVuYyA6IGludCAtPiAnYSBvcHRpb24gfVxuYW5kIGJ1ZmZpbyA9XG4gIHsgaWMgOiBpbl9jaGFubmVsOyBidWZmIDogYnl0ZXM7IG11dGFibGUgbGVuIDogaW50OyBtdXRhYmxlIGluZCA6IGludCB9XG5cbmV4Y2VwdGlvbiBGYWlsdXJlXG5leGNlcHRpb24gRXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBjb3VudCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSB7IGNvdW50IH0gLT4gY291bnRcbmxldCBkYXRhID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFNlbXB0eVxuICB8IFNvbWUgeyBkYXRhIH0gLT4gZGF0YVxuXG5sZXQgZmlsbF9idWZmIGIgPVxuICBiLmxlbiA8LSBpbnB1dCBiLmljIGIuYnVmZiAwIChCeXRlcy5sZW5ndGggYi5idWZmKTsgYi5pbmQgPC0gMFxuXG5cbmxldCByZWMgZ2V0X2RhdGEgOiB0eXBlIHYuIGludCAtPiB2IGRhdGEgLT4gdiBkYXRhID0gZnVuIGNvdW50IGQgLT4gbWF0Y2ggZCB3aXRoXG4gKCogUmV0dXJucyBlaXRoZXIgU2VtcHR5IG9yIFNjb25zKGEsIF8pIGV2ZW4gd2hlbiBkIGlzIGEgZ2VuZXJhdG9yXG4gICAgb3IgYSBidWZmZXIuIEluIHRob3NlIGNhc2VzLCB0aGUgaXRlbSBhIGlzIHNlZW4gYXMgZXh0cmFjdGVkIGZyb21cbiB0aGUgZ2VuZXJhdG9yL2J1ZmZlci5cbiBUaGUgY291bnQgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIGNhbGxpbmcgYFNnZW4tZnVuY3Rpb25zJy4gICopXG4gICBTZW1wdHkgfCBTY29ucyAoXywgXykgLT4gZFxuIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBjb3VudCBkMSB3aXRoXG4gICAgICAgU2NvbnMgKGEsIGQxMSkgLT4gU2NvbnMgKGEsIFNhcHAgKGQxMSwgZDIpKVxuICAgICB8IFNlbXB0eSAtPiBnZXRfZGF0YSBjb3VudCBkMlxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2dlbiB7Y3VyciA9IFNvbWUgTm9uZX0gLT4gU2VtcHR5XG4gfCBTZ2VuICh7Y3VyciA9IFNvbWUoU29tZSBhKX0gYXMgZykgLT5cbiAgICAgZy5jdXJyIDwtIE5vbmU7IFNjb25zKGEsIGQpXG4gfCBTZ2VuIGcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZy5mdW5jIGNvdW50IHdpdGhcbiAgICAgICBOb25lIC0+IGcuY3VyciA8LSBTb21lKE5vbmUpOyBTZW1wdHlcbiAgICAgfCBTb21lIGEgLT4gU2NvbnMoYSwgZClcbiAgICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICBlbmRcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gU2VtcHR5IGVsc2VcbiAgICAgICBsZXQgciA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kIGluXG4gICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgICAgYi5pbmQgPC0gc3VjYyBiLmluZDsgU2NvbnMociwgZClcbiB8IFNsYXp5IGYgLT4gZ2V0X2RhdGEgY291bnQgKExhenkuZm9yY2UgZilcblxuXG5sZXQgcmVjIHBlZWtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHYgb3B0aW9uID0gZnVuIHMgLT5cbiAoKiBjb25zdWx0IHRoZSBmaXJzdCBpdGVtIG9mIHMgKilcbiBtYXRjaCBzLmRhdGEgd2l0aFxuICAgU2VtcHR5IC0+IE5vbmVcbiB8IFNjb25zIChhLCBfKSAtPiBTb21lIGFcbiB8IFNhcHAgKF8sIF8pIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIHMuY291bnQgcy5kYXRhIHdpdGhcbiAgICAgICBTY29ucyhhLCBfKSBhcyBkIC0+IHMuZGF0YSA8LSBkOyBTb21lIGFcbiAgICAgfCBTZW1wdHkgLT4gTm9uZVxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2xhenkgZiAtPiBzLmRhdGEgPC0gKExhenkuZm9yY2UgZik7IHBlZWtfZGF0YSBzXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBhfSAtPiBhXG4gfCBTZ2VuIGcgLT4gbGV0IHggPSBnLmZ1bmMgcy5jb3VudCBpbiBnLmN1cnIgPC0gU29tZSB4OyB4XG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIGJlZ2luIHMuZGF0YSA8LSBTZW1wdHk7IE5vbmUgZW5kXG4gICAgIGVsc2UgU29tZSAoQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQpXG5cblxubGV0IHBlZWsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgcyAtPiBwZWVrX2RhdGEgc1xuXG5cbmxldCByZWMganVua19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdW5pdCA9IGZ1biBzIC0+XG4gIG1hdGNoIHMuZGF0YSB3aXRoXG4gICAgU2NvbnMgKF8sIGQpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IHMuZGF0YSA8LSBkXG4gIHwgU2dlbiAoe2N1cnIgPSBTb21lIF99IGFzIGcpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGcuY3VyciA8LSBOb25lXG4gIHwgU2J1ZmZpbyBiIC0+XG4gICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIHMuZGF0YSA8LSBTZW1wdHlcbiAgICAgIGVsc2UgKHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGIuaW5kIDwtIHN1Y2MgYi5pbmQpXG4gIHwgXyAtPlxuICAgICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgICBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgXyAtPiBqdW5rX2RhdGEgc1xuXG5cbmxldCBqdW5rID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBkYXRhIC0+IGp1bmtfZGF0YSBkYXRhXG5cbmxldCByZWMgbmdldF9kYXRhIG4gcyA9XG4gIGlmIG4gPD0gMCB0aGVuIFtdLCBzLmRhdGEsIDBcbiAgZWxzZVxuICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgIFNvbWUgYSAtPlxuICAgICAgICBqdW5rX2RhdGEgcztcbiAgICAgICAgbGV0IChhbCwgZCwgaykgPSBuZ2V0X2RhdGEgKHByZWQgbikgcyBpbiBhIDo6IGFsLCBTY29ucyAoYSwgZCksIHN1Y2Mga1xuICAgIHwgTm9uZSAtPiBbXSwgcy5kYXRhLCAwXG5cblxubGV0IG5wZWVrX2RhdGEgbiBzID1cbiAgbGV0IChhbCwgZCwgbGVuKSA9IG5nZXRfZGF0YSBuIHMgaW5cbiAgcy5jb3VudCA8LSAocy5jb3VudCAtIGxlbik7XG4gIHMuZGF0YSA8LSBkO1xuICBhbFxuXG5cbmxldCBucGVlayBuID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSBkIC0+IG5wZWVrX2RhdGEgbiBkXG5cbmxldCBuZXh0IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgYSAtPiBqdW5rIHM7IGFcbiAgfCBOb25lIC0+IHJhaXNlIEZhaWx1cmVcblxuXG5sZXQgZW1wdHkgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBfIC0+IHJhaXNlIEZhaWx1cmVcbiAgfCBOb25lIC0+ICgpXG5cblxubGV0IGl0ZXIgZiBzdHJtID1cbiAgbGV0IHJlYyBkb19yZWMgKCkgPVxuICAgIG1hdGNoIHBlZWsgc3RybSB3aXRoXG4gICAgICBTb21lIGEgLT4ganVuayBzdHJtOyBpZ25vcmUoZiBhKTsgZG9fcmVjICgpXG4gICAgfCBOb25lIC0+ICgpXG4gIGluXG4gIGRvX3JlYyAoKVxuXG5cbigqIFN0cmVhbSBidWlsZGluZyBmdW5jdGlvbnMgKilcblxubGV0IGZyb20gZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNnZW4ge2N1cnIgPSBOb25lOyBmdW5jID0gZn19XG5cbmxldCBvZl9saXN0IGwgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBMaXN0LmZvbGRfcmlnaHQgKGZ1biB4IGwgLT4gU2NvbnMgKHgsIGwpKSBsIFNlbXB0eX1cblxuXG5sZXQgb2Zfc3RyaW5nIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgICgqIFdlIGNhbm5vdCB1c2UgdGhlIGluZGV4IHBhc3NlZCBieSB0aGUgW2Zyb21dIGZ1bmN0aW9uIGRpcmVjdGx5XG4gICAgICAgYmVjYXVzZSBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmVhbSBjb3VudCwgd2l0aCBhYnNvbHV0ZWx5IG5vXG4gICAgICAgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBzdGFydCBmcm9tIDAuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZVxuICAgICAgIG9mIFtTdHJlYW0uaWNvbnMgJ2MnIChTdHJlYW0uZnJvbV9zdHJpbmcgXCJhYlwiKV0sIHRoZSBmaXJzdFxuICAgICAgIGFjY2VzcyB0byB0aGUgc3RyaW5nIHdpbGwgYmUgbWFkZSB3aXRoIGNvdW50IFsxXSBhbHJlYWR5LlxuICAgICopXG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgU3RyaW5nLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSBzLltjXSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2J5dGVzIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IEJ5dGVzLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSAoQnl0ZXMuZ2V0IHMgYykpXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9jaGFubmVsIGljID1cbiAgU29tZSB7Y291bnQgPSAwO1xuICAgICAgICBkYXRhID0gU2J1ZmZpbyB7aWMgPSBpYzsgYnVmZiA9IEJ5dGVzLmNyZWF0ZSA0MDk2OyBsZW4gPSAwOyBpbmQgPSAwfX1cblxuXG4oKiBTdHJlYW0gZXhwcmVzc2lvbnMgYnVpbGRlcnMgKilcblxubGV0IGlhcHAgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2FwcCAoZGF0YSBpLCBkYXRhIHMpfVxubGV0IGljb25zIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBkYXRhIHMpfVxubGV0IGlzaW5nIGkgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgU2VtcHR5KX1cblxubGV0IGxhcHAgZiBzID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2FwcCAoZGF0YSAoZiAoKSksIGRhdGEgcykpKX1cblxubGV0IGxjb25zIGYgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBkYXRhIHMpKSl9XG5sZXQgbHNpbmcgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBTZW1wdHkpKSl9XG5cbmxldCBzZW1wdHkgPSBOb25lXG5sZXQgc2xhenkgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KGRhdGEgKGYgKCkpKSl9XG5cbigqIEZvciBkZWJ1Z2dpbmcgdXNlICopXG5cbmxldCByZWMgZHVtcCA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiB0IC0+IHVuaXQgPSBmdW4gZiBzIC0+XG4gIHByaW50X3N0cmluZyBcIntjb3VudCA9IFwiO1xuICBwcmludF9pbnQgKGNvdW50IHMpO1xuICBwcmludF9zdHJpbmcgXCI7IGRhdGEgPSBcIjtcbiAgZHVtcF9kYXRhIGYgKGRhdGEgcyk7XG4gIHByaW50X3N0cmluZyBcIn1cIjtcbiAgcHJpbnRfbmV3bGluZSAoKVxuYW5kIGR1bXBfZGF0YSA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiBkYXRhIC0+IHVuaXQgPSBmdW4gZiAtPlxuICBmdW5jdGlvblxuICAgIFNlbXB0eSAtPiBwcmludF9zdHJpbmcgXCJTZW1wdHlcIlxuICB8IFNjb25zIChhLCBkKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2NvbnMgKFwiO1xuICAgICAgZiBhO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQ7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTYXBwIChcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQxO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQyO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2xhenkgXyAtPiBwcmludF9zdHJpbmcgXCJTbGF6eVwiXG4gIHwgU2dlbiBfIC0+IHByaW50X3N0cmluZyBcIlNnZW5cIlxuICB8IFNidWZmaW8gXyAtPiBwcmludF9zdHJpbmcgXCJTYnVmZmlvXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbnR5cGUgdCA9XG4ge211dGFibGUgYnVmZmVyIDogYnl0ZXM7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIG11dGFibGUgbGVuZ3RoIDogaW50O1xuICBpbml0aWFsX2J1ZmZlciA6IGJ5dGVzfVxuKCogSW52YXJpYW50czogYWxsIHBhcnRzIG9mIHRoZSBjb2RlIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIHRoYXQ6XG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5sZW5ndGhdXG4gICAtIFtiLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlcl1cblxuICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgW2IucG9zaXRpb24gPSBiLmxlbmd0aF0gaXMgbGVnYWwsXG4gICBpdCBtZWFucyB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkXG4gICBiZWZvcmUgYW55IGZ1cnRoZXIgYWRkaXRpb24uICopXG5cbmxldCBjcmVhdGUgbiA9XG4gbGV0IG4gPSBpZiBuIDwgMSB0aGVuIDEgZWxzZSBuIGluXG4gbGV0IG4gPSBpZiBuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGVsc2UgbiBpblxuIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiB7YnVmZmVyID0gczsgcG9zaXRpb24gPSAwOyBsZW5ndGggPSBuOyBpbml0aWFsX2J1ZmZlciA9IHN9XG5cbmxldCBjb250ZW50cyBiID0gQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cbmxldCB0b19ieXRlcyBiID0gQnl0ZXMuc3ViIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgc3ViIGIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBiLnBvc2l0aW9uIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuc3ViXCJcbiAgZWxzZSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIG9mcyBsZW5cblxuXG5sZXQgYmxpdCBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBzcmNvZmYgPCAwIHx8IHNyY29mZiA+IHNyYy5wb3NpdGlvbiAtIGxlblxuICAgICAgICAgICAgIHx8IGRzdG9mZiA8IDAgfHwgZHN0b2ZmID4gKEJ5dGVzLmxlbmd0aCBkc3QpIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYmxpdFwiXG4gIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdCBzcmMuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBiLnBvc2l0aW9uIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBvZnNcblxuXG5sZXQgbGVuZ3RoIGIgPSBiLnBvc2l0aW9uXG5cbmxldCBjbGVhciBiID0gYi5wb3NpdGlvbiA8LSAwXG5cbmxldCByZXNldCBiID1cbiAgYi5wb3NpdGlvbiA8LSAwO1xuICBiLmJ1ZmZlciA8LSBiLmluaXRpYWxfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSBCeXRlcy5sZW5ndGggYi5idWZmZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuYnVmZmVyXSBpZiBuZWNlc3NhcnkgLS0gYW5kIHRodXNcbiAgIGluY3JlYXNpbmcgW2IubGVuZ3RoXS5cblxuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgW3Jlc2l6ZSBiIG1vcmVdIGlzIGNhbGxlZCwgYSBkaXJlY3QgYWNjZXNzIG9mXG4gICBzaXplIFttb3JlXSBhdCBbYi5wb3NpdGlvbl0gd2lsbCBhbHdheXMgYmUgaW4tYm91bmRzLCBzbyB0aGF0XG4gICAodW5zYWZlX3tnZXQsc2V0fSkgbWF5IGJlIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuYnVmZmVyIDwtIG5ld19idWZmZXI7XG4gIGIubGVuZ3RoIDwtICFuZXdfbGVuO1xuICBhc3NlcnQgKGIucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgYXNzZXJ0IChvbGRfcG9zICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gICgpXG4gICgqIE5vdGU6IHRoZXJlIGFyZSB2YXJpb3VzIHNpdHVhdGlvbnMgKHByZWVtcHRpdmUgdGhyZWFkcywgc2lnbmFscyBhbmRcbiAgICAgZ2MgZmluYWxpemVycykgd2hlcmUgT0NhbWwgY29kZSBtYXkgYmUgcnVuIGFzeW5jaHJvbm91c2x5OyBpblxuICAgICBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgYSByYWNlIHdpdGggYW5vdGhlciB1c2VyIG9mIFtiXSwgY2hhbmdpbmdcbiAgICAgaXRzIG11dGFibGUgZmllbGRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFtyZXNpemVdIGNhbGwuIFRoZSBCdWZmZXJcbiAgICAgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGNvcnJlY3RuZXNzIGd1YXJhbnRlZSBpZiB0aGF0IGhhcHBlbnMsXG4gICAgIGJ1dCB3ZSBtdXN0IHN0aWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhc3RydWN0dXJlIGludmFyaWFudHMgaG9sZCBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAtLSBhcyB3ZSBwbGFuIHRvIHVzZSBbdW5zYWZlX3tnZXQsc2V0fV0uXG5cbiAgICAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwgYWxsb2NhdGlvbiBwb2ludHMgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgW3JlZl0gYW5kIFtCeXRlcy5jcmVhdGVdLCBidXQgYWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIGZpZWxkc1xuICAgICBvZiBbYl0gaGFwcGVuIGJlZm9yZSBib3RoIG9mIHRoZW0gb3IgYWZ0ZXIgYm90aCBvZiB0aGVtLlxuXG4gICAgIFdlIHRoZXJlZm9yZSBhc3N1bWUgdGhhdCBbYi5wb3NpdGlvbl0gbWF5IGNoYW5nZSBhdCB0aGVzZSBhbGxvY2F0aW9ucyxcbiAgICAgYW5kIGNoZWNrIHRoYXQgdGhlIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gcG9zdGNvbmRpdGlvblxuICAgICBob2xkcyBmb3IgYm90aCB2YWx1ZXMgb2YgW2IucG9zaXRpb25dLCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgIGlzIGNhbGxlZC4gTW9yZSBwcmVjaXNlbHksIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBtdXN0IGhvbGQgaWYgdGhlXG4gICAgIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdGx5LCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYnVmZmVyIGludmFyaWFudHM6XG4gICAgIC0gW29sZChiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbbmV3KGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtvbGQoYi5sZW5ndGgpIDw9IG5ldyhiLmxlbmd0aCldXG5cbiAgICAgTm90ZTogW2IucG9zaXRpb24gKyBtb3JlIDw9IG9sZChiLmxlbmd0aCldIGRvZXMgKm5vdCpcbiAgICAgaG9sZCBpbiBnZW5lcmFsLCBhcyBpdCBpcyBwcmVjaXNlbHkgdGhlIGNhc2Ugd2hlcmUgeW91IG5lZWRcbiAgICAgdG8gY2FsbCBbcmVzaXplXSB0byBpbmNyZWFzZSBbYi5sZW5ndGhdLlxuXG4gICAgIE5vdGU6IFthc3NlcnRdIGFib3ZlIGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBrbm93IHRoZSBjb25kaXRpb25zXG4gICAgIGFsd2F5cyBob2xkLCBidXQgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IHJldHVybiBjb3JyZWN0bHlcbiAgICAgb25seSBpZiB0aGV5IGhvbGQuXG5cbiAgICAgTm90ZTogdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWVkXG4gICAgIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGlzIGxldmVsIG9mIHNjcnV0aW55LCBnaXZlbiB0aGF0IHRoZXlcbiAgICAgcmVhZC93cml0ZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoYXRcbiAgICAgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkIG9yIGNhbGxpbmcgW3Jlc2l6ZV0uXG4gICopXG5cbmxldCBhZGRfY2hhciBiIGMgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICAoKiBUaGUgYXNzZXJ0aW9uIGJlbG93IG1heSBmYWlsIGluIHdlaXJkIHNjZW5hcmlvIHdoZXJlXG4gICAgIHRocmVhZGVkL2ZpbmFsaXplciBjb2RlLCBydW4gYXN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZVxuICAgICBbcmVhbGx5X2lucHV0X3VwX3RvXSBjYWxsLCByYWNlcyBvbiB0aGUgYnVmZmVyOyB3ZSBkb24ndCBlbnN1cmVcbiAgICAgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBidXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAoc2VlIGRpc2N1c3Npb24gb2YgW3Jlc2l6ZV0pLiAqKVxuICBhc3NlcnQgKGIucG9zaXRpb24gKyBuIDw9IGIubGVuZ3RoKTtcbiAgYi5wb3NpdGlvbiA8LSBiLnBvc2l0aW9uICsgbjtcbiAgblxuXG5sZXQgYWRkX2NoYW5uZWwgYiBpYyBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IGxlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuICAgKCogUFIjNTAwNCAqKVxuICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9jaGFubmVsXCI7XG4gIGxldCBuID0gdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuIGluXG4gICgqIEl0IGlzIGludGVudGlvbmFsIHRoYXQgYSBjb25zdW1lciBjYXRjaGluZyBFbmRfb2ZfZmlsZVxuICAgICB3aWxsIHNlZSB0aGUgZGF0YSB3cml0dGVuIChzZWUgIzY3MTksICM3MTM2KS4gKilcbiAgaWYgbiA8IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAoKVxuXG5sZXQgb3V0cHV0X2J1ZmZlciBvYyBiID1cbiAgb3V0cHV0IG9jIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgY2xvc2luZyA9IGZ1bmN0aW9uXG4gIHwgJygnIC0+ICcpJ1xuICB8ICd7JyAtPiAnfSdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBvcGVuaW5nIGFuZCBjbG9zaW5nOiBvcGVuIGFuZCBjbG9zZSBjaGFyYWN0ZXJzLCB0eXBpY2FsbHkgKCBhbmQgKVxuICAgazogYmFsYW5jZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJzXG4gICBzOiB0aGUgc3RyaW5nIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmdcbiAgIHN0YXJ0OiB0aGUgaW5kZXggd2hlcmUgd2Ugc3RhcnQgdGhlIHNlYXJjaC4gKilcbmxldCBhZHZhbmNlX3RvX2Nsb3Npbmcgb3BlbmluZyBjbG9zaW5nIGsgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBrIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgaWYgcy5baV0gPSBvcGVuaW5nIHRoZW4gYWR2YW5jZSAoayArIDEpIChpICsgMSkgbGltIGVsc2VcbiAgICBpZiBzLltpXSA9IGNsb3NpbmcgdGhlblxuICAgICAgaWYgayA9IDAgdGhlbiBpIGVsc2UgYWR2YW5jZSAoayAtIDEpIChpICsgMSkgbGltXG4gICAgZWxzZSBhZHZhbmNlIGsgKGkgKyAxKSBsaW0gaW5cbiAgYWR2YW5jZSBrIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIGxpbSBlbHNlXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicgfCAnMCcgLi4gJzknIHwgJ18nIC0+IGFkdmFuY2UgKGkgKyAxKSBsaW1cbiAgICB8IF8gLT4gaSBpblxuICBhZHZhbmNlIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbigqIFdlIGFyZSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaWRlbnQgaW4gcywgc3RhcnRpbmcgYXQgc3RhcnQuICopXG5sZXQgZmluZF9pZGVudCBzIHN0YXJ0IGxpbSA9XG4gIGlmIHN0YXJ0ID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIG1hdGNoIHMuW3N0YXJ0XSB3aXRoXG4gICgqIFBhcmVudGhlc2l6ZWQgaWRlbnQgPyAqKVxuICB8ICcoJyB8ICd7JyBhcyBjIC0+XG4gICAgIGxldCBuZXdfc3RhcnQgPSBzdGFydCArIDEgaW5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX2Nsb3NpbmcgYyAoY2xvc2luZyBjKSAwIHMgbmV3X3N0YXJ0IGluXG4gICAgIFN0cmluZy5zdWIgcyBuZXdfc3RhcnQgKHN0b3AgLSBzdGFydCAtIDEpLCBzdG9wICsgMVxuICAoKiBSZWd1bGFyIGlkZW50ICopXG4gIHwgXyAtPlxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgKHN0YXJ0ICsgMSkgaW5cbiAgICAgU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpLCBzdG9wXG5cbigqIFN1YnN0aXR1dGUgJGlkZW50LCAkKGlkZW50KSwgb3IgJHtpZGVudH0gaW4gcyxcbiAgICBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uIG1hcHBpbmcgZi4gKilcbmxldCBhZGRfc3Vic3RpdHV0ZSBiIGYgcyA9XG4gIGxldCBsaW0gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBzdWJzdCBwcmV2aW91cyBpID1cbiAgICBpZiBpIDwgbGltIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJyQnIGFzIGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJyQnIC0+XG4gICAgICAgICBsZXQgaiA9IGkgKyAxIGluXG4gICAgICAgICBsZXQgaWRlbnQsIG5leHRfaSA9IGZpbmRfaWRlbnQgcyBqIGxpbSBpblxuICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgIHN1YnN0ICcgJyBuZXh0X2lcbiAgICAgIHwgY3VycmVudCB3aGVuIHByZXZpb3VzID09ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiAnXFxcXCc7XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnXFxcXCcgYXMgY3VycmVudCAtPlxuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgIGVuZCBlbHNlXG4gICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzIGluXG4gIHN1YnN0ICcgJyAwXG5cbmxldCB0cnVuY2F0ZSBiIGxlbiA9XG4gICAgaWYgbGVuIDwgMCB8fCBsZW4gPiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci50cnVuY2F0ZVwiXG4gICAgZWxzZVxuICAgICAgYi5wb3NpdGlvbiA8LSBsZW5cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxuXG5sZXQgYWRkX2ludDggYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgdW5zYWZlX3NldF9pbnQ4IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDIgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICB1bnNhZmVfc2V0X2ludDE2IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDQgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICB1bnNhZmVfc2V0X2ludDMyIGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDggaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA4O1xuICB1bnNhZmVfc2V0X2ludDY0IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+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+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pbmVcbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdC4gV2hlbiB0aGUgZmxhZyBpcyBkaXNhYmxlZCwgaXQgd2lsbCByZWplY3QgYW55XG4gICAgICBmb3JtYXQgdGhhdCBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXG5cbiAgICAgIEEgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlIFwiJSsgZFwiOiBzcGVjaWZ5aW5nIGJvdGggJysnIChpZiB0aGVcbiAgICAgIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGggYSAnKycgdG8gZ2V0IHRoZSBzYW1lIHdpZHRoIGFzXG4gICAgICBuZWdhdGl2ZSBudW1iZXJzKSBhbmQgJyAnIChpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aFxuICAgICAgYSBzcGFjZSkgZG9lcyBub3QgbWFrZSBzZW5zZSwgYnV0IHRoZSBsZWdhY3kgKDwgNC4wMilcbiAgICAgIGltcGxlbWVudGF0aW9uIHdhcyBoYXBweSB0byBqdXN0IGlnbm9yZSB0aGUgc3BhY2UuXG4gICopXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kIG1zZyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgbXNnXG4gIGluXG5cbiAgKCogVXNlZCB3aGVuIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCAob3IgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdCkgd2FzIGVuY291bnRlcmVkXG4gICAgICB1bmV4cGVjdGVkbHkuICopXG4gIGxldCB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBlbmRfaW5kXG4gICAgICBcInVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1hdFwiXG4gIGluXG5cbiAgKCogVXNlZCBmb3IgJTBjOiBubyBvdGhlciB3aWR0aHMgYXJlIGltcGxlbWVudGVkICopXG4gIGxldCBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmRcbiAgICAgIFwibm9uLXplcm8gd2lkdGhzIGFyZSB1bnN1cHBvcnRlZCBmb3IgJWMgY29udmVyc2lvbnNcIlxuICBpblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gb3B0aW9uIGRlcGVuZGVuY3lcbiAgICAgcHJvYmxlbS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X3dpdGhvdXQgc3RyX2luZCBjIHMgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICclYycgd2l0aG91dCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBjIHNcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gdW5leHBlY3RlZFxuICAgICBjaGFyYWN0ZXIuICopXG4gIGxldCBleHBlY3RlZF9jaGFyYWN0ZXIgc3RyX2luZCBleHBlY3RlZCByZWFkID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzIGV4cGVjdGVkLCByZWFkICVDXCJcbiAgICAgIHN0ciBzdHJfaW5kIGV4cGVjdGVkIHJlYWRcbiAgaW5cblxuICAoKiBQYXJzZSB0aGUgc3RyaW5nIGZyb20gYmVnX2luZCAoaW5jbHVkZWQpIHRvIGVuZF9pbmQgKGV4Y2x1ZGVkKS4gKilcbiAgbGV0IHJlYyBwYXJzZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBiZWdfaW5kIGVuZF9pbmQgLT4gcGFyc2VfbGl0ZXJhbCBiZWdfaW5kIGJlZ19pbmQgZW5kX2luZFxuXG4gICgqIFJlYWQgbGl0ZXJhbCBjaGFyYWN0ZXJzIHVwIHRvICclJyBvciAnQCcgc3BlY2lhbCBjaGFyYWN0ZXJzLiAqKVxuICBhbmQgcGFyc2VfbGl0ZXJhbCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgRW5kX29mX2Zvcm1hdCBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfZm9ybWF0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9hZnRlcl9hdCAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9saXRlcmFsIGxpdF9zdGFydCAoc3RyX2luZCArIDEpIGVuZF9pbmRcblxuICAoKiBQYXJzZSBhIGZvcm1hdCBhZnRlciAnJScgKilcbiAgYW5kIHBhcnNlX2Zvcm1hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIGVuZF9pbmQgLT4gcGFyc2VfaWduIHBjdF9pbmQgKHBjdF9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgYW5kIHBhcnNlX2lnbiA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXycgLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCAoc3RyX2luZCsxKSBlbmRfaW5kIHRydWVcbiAgICAgIHwgXyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBmYWxzZVxuXG4gIGFuZCBwYXJzZV9mbGFncyA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiAoXywgXywgZSwgZikgZm10X2ViYlxuICA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBpZ24gLT5cbiAgICBsZXQgemVybyA9IHJlZiBmYWxzZSBhbmQgbWludXMgPSByZWYgZmFsc2VcbiAgICBhbmQgcGx1cyA9IHJlZiBmYWxzZSBhbmQgc3BhY2UgPSByZWYgZmFsc2VcbiAgICBhbmQgaGFzaCA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBzZXRfZmxhZyBzdHJfaW5kIGZsYWcgPVxuICAgICAgKCogaW4gbGVnYWN5IG1vZGUsIGR1cGxpY2F0ZSBmbGFncyBhcmUgYWNjZXB0ZWQgKilcbiAgICAgIGlmICFmbGFnICYmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgZHVwbGljYXRlIGZsYWcgJUNcIlxuICAgICAgICAgIHN0ciBzdHJfaW5kIHN0ci5bc3RyX2luZF07XG4gICAgICBmbGFnIDo9IHRydWU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHJlYWRfZmxhZ3Mgc3RyX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICcwJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHplcm87ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJy0nIC0+IHNldF9mbGFnIHN0cl9pbmQgbWludXM7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnKycgLT4gc2V0X2ZsYWcgc3RyX2luZCBwbHVzOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcjJyAtPiBzZXRfZmxhZyBzdHJfaW5kIGhhc2g7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnICcgLT4gc2V0X2ZsYWcgc3RyX2luZCBzcGFjZTsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZFxuICAgICAgICAgICF6ZXJvICFtaW51cyAhcGx1cyAhaGFzaCAhc3BhY2UgaWduXG4gICAgICBlbmRcbiAgICBpblxuICAgIHJlYWRfZmxhZ3Mgc3RyX2luZFxuXG4gICgqIFRyeSB0byByZWFkIGEgZGlnaXRhbCBvciBhICcqJyBwYWRkaW5nLiAqKVxuICBhbmQgcGFyc2VfcGFkZGluZyA6IHR5cGUgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHplcm8gbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhZHR5ID0gbWF0Y2ggemVybywgbWludXMgd2l0aFxuICAgICAgfCBmYWxzZSwgZmFsc2UgLT4gUmlnaHRcbiAgICAgIHwgZmFsc2UsIHRydWUgIC0+IExlZnRcbiAgICAgIHwgIHRydWUsIGZhbHNlIC0+IFplcm9zXG4gICAgICB8ICB0cnVlLCB0cnVlICAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMZWZ0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICctJyBcIjBcIiBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgbGV0IG5ld19pbmQsIHdpZHRoID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAoTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiAoQXJnX3BhZGRpbmcgcGFkdHkpXG4gICAgfCBfIC0+XG4gICAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgICB8IExlZnQgIC0+XG4gICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLScgXCJwYWRkaW5nXCI7XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIHwgWmVyb3MgLT5cbiAgICAgICAgICgqIGEgJzAnIHBhZGRpbmcgaW5kaWNhdGlvbiBub3QgZm9sbG93ZWQgYnkgYW55dGhpbmcgc2hvdWxkXG4gICAgICAgICAgIGJlIGludGVycHJldGVkIGFzIGEgUmlnaHQgcGFkZGluZyBvZiB3aWR0aCAwLiBUaGlzIGlzIHVzZWRcbiAgICAgICAgICAgYnkgc2Nhbm5pbmcgY29udmVyc2lvbnMgJTBzIGFuZCAlMGMgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgKExpdF9wYWRkaW5nIChSaWdodCwgMCkpXG4gICAgICB8IFJpZ2h0IC0+XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIGVuZFxuXG4gICgqIElzIHByZWNpc2lvbiBkZWZpbmVkPyAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcGFkZGluZyA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcuJyAtPlxuICAgICAgcGFyc2VfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkXG4gICAgfCBzeW1iIC0+XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIE5vX3ByZWNpc2lvbiBwYWQgc3ltYlxuXG4gICgqIFJlYWQgdGhlIGRpZ2l0YWwgb3IgJyonIHByZWNpc2lvbi4gKilcbiAgYW5kIHBhcnNlX3ByZWNpc2lvbiA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kID1cbiAgICAgIGxldCBuZXdfaW5kLCBwcmVjID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiBwcmVjKSBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmRcbiAgICB8ICgnKycgfCAnLScpIGFzIHN5bWIgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT5cbiAgICAgICgqIExlZ2FjeSBtb2RlIHdvdWxkIGFjY2VwdCBhbmQgaWdub3JlICcrJyBvciAnLScgYmVmb3JlIHRoZVxuICAgICAgICAgaW50ZWdlciBkZXNjcmliaW5nIHRoZSBkZXNpcmVkIHByZWNpc2lvbjsgbm90ZSB0aGF0IHRoaXNcbiAgICAgICAgIGNhbm5vdCBoYXBwZW4gZm9yIHBhZGRpbmcgd2lkdGgsIGFzICcrJyBhbmQgJy0nIGFscmVhZHkgaGF2ZVxuICAgICAgICAgYSBzZW1hbnRpY3MgdGhlcmUuXG5cbiAgICAgICAgIFRoYXQgc2FpZCwgdGhlIGlkZWEgKHN1cHBvcnRlZCBieSB0aGlzIHR3ZWFrKSB0aGF0IHdpZHRoIGFuZFxuICAgICAgICAgcHJlY2lzaW9uIGxpdGVyYWxzIGFyZSBcImludGVnZXIgbGl0ZXJhbHNcIiBpbiB0aGUgT0NhbWwgc2Vuc2UgaXNcbiAgICAgICAgIHN0aWxsIGJsYXRhbnRseSB3cm9uZywgYXMgMTIzXzQ1NiBvciAweEZGIGFyZSByZWplY3RlZC4gKilcbiAgICAgIHBhcnNlX2xpdGVyYWwgKG1pbnVzIHx8IHN5bWIgPSAnLScpIChzdHJfaW5kICsgMSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gcGFkIEFyZ19wcmVjaXNpb25cbiAgICB8IF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIG5vdGUgdGhhdCBsZWdhY3kgaW1wbGVtZW50YXRpb24gZGlkIG5vdCBpZ25vcmUgJy4nIHdpdGhvdXRcbiAgICAgICAgICAgYSBudW1iZXIgKGFzIGl0IGRvZXMgZm9yIHBhZGRpbmcgaW5kaWNhdGlvbnMpLCBidXRcbiAgICAgICAgICAgaW50ZXJwcmV0cyBpdCBhcyAnLjAnICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIDApXG4gICAgICBlbHNlXG4gICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLicgXCJwcmVjaXNpb25cIlxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiB0IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfY29udiAodHlwZSB1KSAodHlwZSB2KSAocGFkcHJlYyA6ICh1LCB2KSBwYWRkaW5nKSA9XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIHByZWMgcGFkcHJlYyBzdHIuW3N0cl9pbmRdIGluXG4gICAgKCogaW4gbGVnYWN5IG1vZGUsIHNvbWUgZm9ybWF0cyAoJXMgYW5kICVTKSBhY2NlcHQgYSB3ZWlyZCBtaXggb2ZcbiAgICAgICBwYWRkaW5nIGFuZCBwcmVjaXNpb24sIHdoaWNoIGlzIG1lcmdlZCBhcyBhIHNpbmdsZSBwYWRkaW5nXG4gICAgICAgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBpbiAlLjEwcyB0aGUgcHJlY2lzaW9uIGlzIGltcGxpY2l0bHlcbiAgICAgICB1bmRlcnN0b29kIGFzIHBhZGRpbmcgJTEwcywgYnV0IHRoZSBsZWZ0LXBhZGRpbmcgY29tcG9uZW50IG1heVxuICAgICAgIGJlIHNwZWNpZmllZCBlaXRoZXIgYXMgYSBsZWZ0IHBhZGRpbmcgb3IgYSBuZWdhdGl2ZSBwcmVjaXNpb246XG4gICAgICAgJS0uM3MgYW5kICUuLTNzIGFyZSBlcXVpdmFsZW50IHRvICUtM3MgKilcbiAgICBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAtPiAoXG4gICAgICBtYXRjaCBtaW51cywgcHJlYyB3aXRoXG4gICAgICAgIHwgXywgTm9fcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgTm9fcGFkZGluZ1xuICAgICAgICB8IGZhbHNlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKSlcbiAgICAgICAgfCB0cnVlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKExlZnQsIG4pKVxuICAgICAgICB8IGZhbHNlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIFJpZ2h0KVxuICAgICAgICB8IHRydWUsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgTGVmdClcbiAgICApXG4gICAgfCBwYWQgLT4gcGFyc2VfY29udiBwYWRcblxuICAoKiBDYXNlIGFuYWx5c2lzIG9uIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9jb252ZXJzaW9uIDogdHlwZSB4IHkgeiB0IHUgdiBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiAoeCwgeSkgcGFkZGluZyAtPlxuICAgICAgICAoeiwgdCkgcHJlY2lzaW9uIC0+ICh1LCB2KSBwYWRkaW5nIC0+IGNoYXIgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyBwYWRwcmVjIHN5bWIgLT5cbiAgICAoKiBGbGFncyB1c2VkIHRvIGNoZWNrIG9wdGlvbiB1c2FnZXMvY29tcGF0aWJpbGl0aWVzLiAqKVxuICAgIGxldCBwbHVzX3VzZWQgID0gcmVmIGZhbHNlIGFuZCBoYXNoX3VzZWQgPSByZWYgZmFsc2VcbiAgICBhbmQgc3BhY2VfdXNlZCA9IHJlZiBmYWxzZSBhbmQgaWduX3VzZWQgICA9IHJlZiBmYWxzZVxuICAgIGFuZCBwYWRfdXNlZCAgID0gcmVmIGZhbHNlIGFuZCBwcmVjX3VzZWQgID0gcmVmIGZhbHNlIGluXG5cbiAgICAoKiBBY2Nlc3MgdG8gb3B0aW9ucywgdXBkYXRlIGZsYWdzLiAqKVxuICAgIGxldCBnZXRfcGx1cyAgICAoKSA9IHBsdXNfdXNlZCAgOj0gdHJ1ZTsgcGx1c1xuICAgIGFuZCBnZXRfaGFzaCAgICgpID0gaGFzaF91c2VkIDo9IHRydWU7IGhhc2hcbiAgICBhbmQgZ2V0X3NwYWNlICAgKCkgPSBzcGFjZV91c2VkIDo9IHRydWU7IHNwYWNlXG4gICAgYW5kIGdldF9pZ24gICAgICgpID0gaWduX3VzZWQgICA6PSB0cnVlOyBpZ25cbiAgICBhbmQgZ2V0X3BhZCAgICAgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZFxuICAgIGFuZCBnZXRfcHJlYyAgICAoKSA9IHByZWNfdXNlZCAgOj0gdHJ1ZTsgcHJlY1xuICAgIGFuZCBnZXRfcGFkcHJlYyAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkcHJlYyBpblxuXG4gICAgbGV0IGdldF9pbnRfcGFkICgpIDogKHgseSkgcGFkZGluZyA9XG4gICAgICAoKiAlNS4zZCBpcyBhY2NlcHRlZCBhbmQgbWVhbmluZ2Z1bDogcGFkIHRvIGxlbmd0aCA1IHdpdGhcbiAgICAgICAgIHNwYWNlcywgYnV0IGZpcnN0IHBhZCB3aXRoIHplcm9zIHVwdG8gbGVuZ3RoIDMgKDAtcGFkZGluZ1xuICAgICAgICAgaXMgdGhlIGludGVycHJldGF0aW9uIG9mIFwicHJlY2lzaW9uXCIgZm9yIGludGVnZXIgZm9ybWF0cykuXG5cbiAgICAgICAgICUwNS4zZCBpcyByZWR1bmRhbnQ6IHBhZCB0byBsZW5ndGggNSAqd2l0aCB6ZXJvcyosIGJ1dFxuICAgICAgICAgZmlyc3QgcGFkIHdpdGggemVyb3MuLi4gVG8gYWRkIGluc3VsdCB0byB0aGUgaW5qdXJ5LCB0aGVcbiAgICAgICAgIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSAwLXBhZGRpbmcgaW5kaWNhdGlvbiBhbmRcbiAgICAgICAgIGRvZXMgdGhlIDUgcGFkZGluZyB3aXRoIHNwYWNlcyBpbnN0ZWFkLiBXZSByZXVzZSB0aGlzXG4gICAgICAgICBpbnRlcnByZXRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eSwgYnV0IHN0YXRpY2FsbHkgcmVqZWN0IHRoaXNcbiAgICAgICAgIGZvcm1hdCB3aGVuIHRoZSBsZWdhY3kgbW9kZSBpcyBkaXNhYmxlZCwgdG8gcHJvdGVjdCBzdHJpY3RcbiAgICAgICAgIHVzZXJzIGZyb20gdGhpcyBjb3JuZXIgY2FzZS4gKilcbiAgICAgICBtYXRjaCBnZXRfcGFkICgpLCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICAgICB8IHBhZCwgTm9fcHJlY2lzaW9uIC0+IHBhZFxuICAgICAgICAgfCBOb19wYWRkaW5nLCBfICAgICAtPiBOb19wYWRkaW5nXG4gICAgICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgbiksIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKVxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcywgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBMaXRfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWRcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkIGluXG5cbiAgICAoKiBDaGVjayB0aGF0IHBhZHR5IDw+IFplcm9zLiAqKVxuICAgIGxldCBjaGVja19ub18wIHN5bWIgKHR5cGUgYSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpIDogKGEsYikgcGFkZGluZyA9XG4gICAgICBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoKExlZnQgfCBSaWdodCksIF8pIC0+IHBhZFxuICAgICAgfCBBcmdfcGFkZGluZyAoTGVmdCB8IFJpZ2h0KSAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcyAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgaW5cblxuICAgICgqIEdldCBwYWRkaW5nIGFzIGEgcGFkX29wdGlvbiAoc2VlIFwiJV9cIiwgXCIle1wiLCBcIiUoXCIgYW5kIFwiJVtcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgb3B0X29mX3BhZCBjICh0eXBlIGEpICh0eXBlIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgPSBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IE5vbmVcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aCkgLT4gU29tZSB3aWR0aFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInMCdcIlxuICAgICAgfCBMaXRfcGFkZGluZyAoTGVmdCwgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIictJ1wiXG4gICAgICB8IEFyZ19wYWRkaW5nIF8gLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInKidcIlxuICAgIGluXG4gICAgbGV0IGdldF9wYWRfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWQgKCkpIGluXG4gICAgbGV0IGdldF9wYWRwcmVjX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkcHJlYyAoKSkgaW5cblxuICAgICgqIEdldCBwcmVjaXNpb24gYXMgYSBwcmVjX29wdGlvbiAoc2VlIFwiJV9mXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IGdldF9wcmVjX29wdCAoKSA9IG1hdGNoIGdldF9wcmVjICgpIHdpdGhcbiAgICAgIHwgTm9fcHJlY2lzaW9uICAgICAgIC0+IE5vbmVcbiAgICAgIHwgTGl0X3ByZWNpc2lvbiBuZGVjIC0+IFNvbWUgbmRlY1xuICAgICAgfCBBcmdfcHJlY2lzaW9uICAgICAgLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicqJ1wiXG4gICAgaW5cblxuICAgIGxldCBmbXRfcmVzdWx0ID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnLCcgLT5cbiAgICAgIHBhcnNlIHN0cl9pbmQgZW5kX2luZFxuICAgIHwgJ2MnIC0+XG4gICAgICBsZXQgY2hhcl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoQ2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgc2Nhbl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlMGMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChTY2FuX25leHRfY2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggZ2V0X3BhZF9vcHQgJ2MnIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSAwIC0+IHNjYW5fZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSBfbiAtPlxuICAgICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yXG4gICAgICAgICAgIHRoZW4gaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZFxuICAgICAgICAgICBlbHNlICgqIGxlZ2FjeSBpZ25vcmVzICVjIHdpZHRocyAqKSBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgZW5kXG4gICAgfCAnQycgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jYW1sX2NoYXIsZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChDYW1sX2NoYXIgZm10X3Jlc3QpXG4gICAgfCAncycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChTdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnUycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfY2FtbF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKENhbWxfc3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+XG4gICAgICBsZXQgaWNvbnYgPSBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IFRva2VuX2NvdW50ZXIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIHwgJ24nIHwgJ0wnIHdoZW4gc3RyX2luZD1lbmRfaW5kIHx8IG5vdCAoaXNfaW50X2Jhc2Ugc3RyLltzdHJfaW5kXSkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IGNvdW50ZXJfb2ZfY2hhciBzeW1iIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50MzIgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ24nIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpXG4gICAgICAgICAgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdMJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50NjQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2YnIHwgJ2UnIHwgJ0UnIHwgJ2cnIHwgJ0cnIHwgJ0YnIHwgJ2gnIHwgJ0gnIC0+XG4gICAgICBsZXQgZmNvbnYgPVxuICAgICAgICBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kXG4gICAgICAgICAgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zsb2F0IChnZXRfcGFkX29wdCAnXycsIGdldF9wcmVjX29wdCAoKSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoRmxvYXQgKGZjb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdiJyB8ICdCJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9ib29sIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChCb29sIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2EnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQWxwaGEgZm10X3Jlc3QpXG4gICAgfCAndCcgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChUaGV0YSBmbXRfcmVzdClcbiAgICB8ICdyJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChSZWFkZXIgZm10X3Jlc3QpXG4gICAgfCAnIScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGbHVzaCBmbXRfcmVzdClcbiAgICB8ICgnJScgfCAnQCcpIGFzIGMgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKGMsIGZtdF9yZXN0KSlcbiAgICB8ICd7JyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJ30nIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICd7Jywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnKCcgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICcpJyBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJygnLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICdbJyAtPlxuICAgICAgbGV0IG5leHRfaW5kLCBjaGFyX3NldCA9IHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdfJywgY2hhcl9zZXQpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ1snLCBjaGFyX3NldCwgZm10X3Jlc3QpKVxuICAgIHwgJy0nIHwgJysnIHwgJyMnIHwgJyAnIHwgJ18nIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBmbGFnICVDIGlzIG9ubHkgYWxsb3dlZCBhZnRlciB0aGUgJyUlJywgYmVmb3JlIHBhZGRpbmcgYW5kIHByZWNpc2lvblwiXG4gICAgICAgIHN0ciBwY3RfaW5kIHN5bWJcbiAgICB8IF8gLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGludmFsaWQgY29udmVyc2lvbiBcXFwiJSUlY1xcXCJcIiBzdHIgKHN0cl9pbmQgLSAxKSBzeW1iXG4gICAgaW5cbiAgICAoKiBDaGVjayBmb3IgdW51c2VkIG9wdGlvbnMsIGFuZCByZWplY3QgdGhlbSBhcyBpbmNvbXBhdGlibGUuXG5cbiAgICAgICBTdWNoIGNoZWNrcyBuZWVkIHRvIGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLCBhcyB0aGUgbGVnYWN5XG4gICAgICAgcGFyc2VyIHNpbGVudGx5IGlnbm9yZWQgaW5jb21wYXRpYmxlIGZsYWdzLiAqKVxuICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlbiBiZWdpblxuICAgIGlmIG5vdCAhcGx1c191c2VkICYmIHBsdXMgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIjtcbiAgICBpZiBub3QgIWhhc2hfdXNlZCAmJiBoYXNoIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCI7XG4gICAgaWYgbm90ICFzcGFjZV91c2VkICYmIHNwYWNlIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCI7XG4gICAgaWYgbm90ICFwYWRfdXNlZCAgJiYgUGFkZGluZ19FQkIgcGFkIDw+IFBhZGRpbmdfRUJCIE5vX3BhZGRpbmcgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCJgcGFkZGluZydcIjtcbiAgICBpZiBub3QgIXByZWNfdXNlZCAmJiBQcmVjaXNpb25fRUJCIHByZWMgPD4gUHJlY2lzaW9uX0VCQiBOb19wcmVjaXNpb24gdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIChpZiBpZ24gdGhlbiAnXycgZWxzZSBzeW1iKVxuICAgICAgICBcImBwcmVjaXNpb24nXCI7XG4gICAgaWYgaWduICYmIHBsdXMgdGhlbiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJysnXCI7XG4gICAgZW5kO1xuICAgICgqIHRoaXMgbGFzdCB0ZXN0IG11c3Qgbm90IGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLFxuICAgICAgIGFzIGlnbm9yaW5nIGl0IHdvdWxkIHR5cGljYWxseSByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdHlwaW5nXG4gICAgICAgdGhhbiB3aGF0IHRoZSBsZWdhY3kgcGFyc2VyIHVzZWQgKilcbiAgICBpZiBub3QgIWlnbl91c2VkICYmIGlnbiB0aGVuXG4gICAgICBiZWdpbiBtYXRjaCBzeW1iIHdpdGhcbiAgICAgICAgKCogYXJndW1lbnQtbGVzcyBmb3JtYXRzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpbiBsZWdhY3kgbW9kZSAqKVxuICAgICAgICB8ICgnQCcgfCAnJScgfCAnIScgfCAnLCcpIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+ICgpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJ18nXCJcbiAgICAgIGVuZDtcbiAgICBmbXRfcmVzdWx0XG5cbiAgKCogUGFyc2UgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoYWZ0ZXIgJ0AnKS4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX2F0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIEVuZF9vZl9mb3JtYXQpKVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnWycgLT5cbiAgICAgICAgcGFyc2VfdGFnIGZhbHNlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX2JveCwgZm10X3Jlc3QpKVxuICAgICAgfCAneycgLT5cbiAgICAgICAgcGFyc2VfdGFnIHRydWUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICd9JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfdGFnLCBmbXRfcmVzdCkpXG4gICAgICB8ICcsJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCxcIiwgMCwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJAIFwiLCAxLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnOycgLT5cbiAgICAgICAgcGFyc2VfZ29vZF9icmVhayAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJz8nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGRmx1c2gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZvcmNlX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJy4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGbHVzaF9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBwYXJzZV9tYWdpY19zaXplIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfYXQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIHdoZW4gc3RyX2luZCArIDEgPCBlbmRfaW5kICYmIHN0ci5bc3RyX2luZCArIDFdID0gJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX3BlcmNlbnQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBmbXRfcmVzdCkpXG4gICAgICB8IGMgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgYywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8bmFtZT4gYWZ0ZXIgXCJAe1wiIG9yIFwiQFtcIi4gKilcbiAgYW5kIHBhcnNlX3RhZyA6IHR5cGUgZSBmIC4gYm9vbCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGlzX29wZW5fdGFnIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIHRyeVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIGxldCBpbmQgPSBTdHJpbmcuaW5kZXhfZnJvbSBzdHIgKHN0cl9pbmQgKyAxKSAnPicgaW5cbiAgICAgICAgaWYgaW5kID49IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgc3RyX2luZCAoaW5kIC0gc3RyX2luZCArIDEpIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKGluZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgKGluZCArIDEpIGluXG4gICAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChzdWJfZm10LCBzdWJfc3RyKSBpblxuICAgICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKEVuZF9vZl9mb3JtYXQsIFwiXCIpIGluXG4gICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDx3aWR0aCBvZmZzZXQ+IGFmdGVyIFwiQDtcIi4gKilcbiAgYW5kIHBhcnNlX2dvb2RfYnJlYWsgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbGV0IG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCA9XG4gICAgICB0cnlcbiAgICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgfHwgc3RyLltzdHJfaW5kXSA8PiAnPCcgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiAoXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgd2lkdGggPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfM10gd2l0aFxuICAgICAgICAgICAgICB8ICc+JyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfMy1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF8zICsgMSwgQnJlYWsgKHMsIHdpZHRoLCAwKVxuICAgICAgICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF80LCBvZmZzZXQgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMyBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzQgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF81XSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF81LXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzUgKyAxLCBCcmVhayAocywgd2lkdGgsIG9mZnNldClcbiAgICAgICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICApXG4gICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIHN0cl9pbmQsIEJyZWFrIChcIkA7XCIsIDEsIDApXG4gICAgaW5cbiAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSB0aGUgc2l6ZSBpbiBhIDxuPi4gKilcbiAgYW5kIHBhcnNlX21hZ2ljX3NpemUgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbWF0Y2hcbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCBzaXplID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfM10gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQgLSAyKSAoc3RyX2luZF8zIC0gc3RyX2luZCArIDMpIGluXG4gICAgICAgICAgU29tZSAoc3RyX2luZF8zICsgMSwgTWFnaWNfc2l6ZSAocywgc2l6ZSkpXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBOb25lXG4gICAgd2l0aFxuICAgIHwgU29tZSAobmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0KSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyAnPCcsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSBhbmQgY29uc3RydWN0IGEgY2hhciBzZXQuICopXG4gIGFuZCBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG5cbiAgICBsZXQgY2hhcl9zZXQgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgICBsZXQgYWRkX2NoYXIgYyA9XG4gICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYztcbiAgICBpblxuICAgIGxldCBhZGRfcmFuZ2UgYyBjJyA9XG4gICAgICBmb3IgaSA9IGludF9vZl9jaGFyIGMgdG8gaW50X29mX2NoYXIgYycgZG9cbiAgICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IChjaGFyX29mX2ludCBpKTtcbiAgICAgIGRvbmU7XG4gICAgaW5cblxuICAgIGxldCBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQgPVxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiAnJSUnIGFsb25lIGlzIG5vdCBhY2NlcHRlZCBpbiBjaGFyYWN0ZXIgc2V0cywgXFxcbiAgICAgICAgIHVzZSAlJSUlIGluc3RlYWQgYXQgcG9zaXRpb24gJWQuXCIgc3RyIHN0cl9pbmRcbiAgICBpblxuXG4gICAgKCogUGFyc2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGNoYXIgc2V0LiAqKVxuICAgIGxldCByZWMgcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBsZXQgYyA9IHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFBhcnNlIHRoZSBjb250ZW50IG9mIGEgY2hhciBzZXQgdW50aWwgdGhlIGZpcnN0ICddJy4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfY29udGVudCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBUZXN0IGZvciByYW5nZSBpbiBjaGFyIHNldC4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcbiAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgd2hlbiBjID0gJyUnIC0+XG4gICAgICAgIGFkZF9jaGFyIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBpZiBjID0gJyUnIHRoZW4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kO1xuICAgICAgICAoKiBub3RlIHRoYXQgJ0AnIGFsb25lIGlzIGFjY2VwdGVkLCBhcyBkb25lIGJ5IHRoZSBsZWdhY3lcbiAgICAgICAgICAgaW1wbGVtZW50YXRpb247IHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmljYWxseSByZXF1aXJlcyAlQFxuICAgICAgICAgICBzbyB3ZSBjb3VsZCB3YXJuIG9uIHRoYXQgKilcbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgYydcblxuICAgICgqIE1hbmFnZSByYW5nZSBpbiBjaGFyIHNldCAoZXhjZXB0IGlmIHRoZSAnLScgdGhlIGxhc3QgY2hhciBiZWZvcmUgJ10nKSAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICclJyAtPlxuICAgICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgLT5cbiAgICAgICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDIpIGVuZF9pbmRcbiAgICAgICAgICB8IF8gLT4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICBpblxuICAgIGxldCBzdHJfaW5kLCByZXZlcnNlID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgICAgfCAnXicgLT4gc3RyX2luZCArIDEsIHRydWVcbiAgICAgICAgfCBfIC0+IHN0cl9pbmQsIGZhbHNlIGluXG4gICAgbGV0IG5leHRfaW5kID0gcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgbGV0IGNoYXJfc2V0ID0gZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0IGluXG4gICAgbmV4dF9pbmQsIChpZiByZXZlcnNlIHRoZW4gcmV2X2NoYXJfc2V0IGNoYXJfc2V0IGVsc2UgY2hhcl9zZXQpXG5cbiAgKCogQ29uc3VtZSBhbGwgbmV4dCBzcGFjZXMsIHJhaXNlIGFuIEZhaWx1cmUgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBpZiBzdHIuW3N0cl9pbmRdID0gJyAnIHRoZW4gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBlbHNlIHN0cl9pbmRcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZSBpZiBlbmRfaW5kIGlzXG4gICAgIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgYWNjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGFjYyAqIDEwICsgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCcpIGluXG4gICAgICBpZiBuZXdfYWNjID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGludGVnZXIgJWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdCAlZFwiXG4gICAgICAgICAgc3RyIG5ld19hY2MgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCBuZXdfYWNjXG4gICAgfCBfIC0+IHN0cl9pbmQsIGFjY1xuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlXG4gICAgIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX2ludGVnZXIgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMFxuICAgIHwgJy0nIC0+IChcbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICAgIGxldCBuZXh0X2luZCwgbiA9IHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCAwIGluXG4gICAgICAgIG5leHRfaW5kLCAtblxuICAgICAgfCBjIC0+XG4gICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiZGlnaXRcIiBjXG4gICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBBZGQgYSBsaXRlcmFsIHRvIGEgZm9ybWF0IGZyb20gYSBsaXRlcmFsIGNoYXJhY3RlciBzdWItc2VxdWVuY2UuICopXG4gIGFuZCBhZGRfbGl0ZXJhbCA6IHR5cGUgYSBkIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IChhLCBfLCBfLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGZtdCAtPiBtYXRjaCBzdHJfaW5kIC0gbGl0X3N0YXJ0IHdpdGhcbiAgICB8IDAgICAgLT4gRm10X0VCQiBmbXRcbiAgICB8IDEgICAgLT4gRm10X0VCQiAoQ2hhcl9saXRlcmFsIChzdHIuW2xpdF9zdGFydF0sIGZtdCkpXG4gICAgfCBzaXplIC0+IEZtdF9FQkIgKFN0cmluZ19saXRlcmFsIChTdHJpbmcuc3ViIHN0ciBsaXRfc3RhcnQgc2l6ZSwgZm10KSlcblxuICAoKiBTZWFyY2ggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdWItZm9ybWF0XG4gICAgIChpLmUuIHRoZSBjb3JyZXNwb25kaW5nIFwiJX1cIiBvciBcIiUpXCIpICopXG4gIGFuZCBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiB1bmNsb3NlZCBzdWItZm9ybWF0LCBcXFxuICAgICAgICAgZXhwZWN0ZWQgXFxcIiUlJWNcXFwiIGF0IGNoYXJhY3RlciBudW1iZXIgJWRcIiBzdHIgYyBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJyUnIC0+XG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGlmIHN0ci5bc3RyX2luZCArIDFdID0gYyB0aGVuICgqIEVuZCBvZiBmb3JtYXQgZm91bmQgKikgc3RyX2luZCBlbHNlXG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgfCAnXycgLT5cbiAgICAgICAgICAoKiBTZWFyY2ggZm9yIFwiJV8oXCIgb3IgXCIlX3tcIi4gKilcbiAgICAgICAgICBpZiBzdHJfaW5kICsgMiA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAyXSB3aXRoXG4gICAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICgqICV7Li4uJX0gc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICgqICUoLi4uJSkgc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICd9JyAtPlxuICAgICAgICAgICgqIEVycm9yOiAlKC4uLiV9LiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICcpJ1wiICd9J1xuICAgICAgICB8ICcpJyAtPlxuICAgICAgICAgICgqIEVycm9yOiAley4uLiUpLiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICd9J1wiICcpJ1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICBlbmRcbiAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAoKiBDaGVjayBpZiBzeW1iIGlzIGEgdmFsaWQgaW50IGNvbnZlcnNpb24gYWZ0ZXIgXCIlbFwiLCBcIiVuXCIgb3IgXCIlTFwiICopXG4gIGFuZCBpc19pbnRfYmFzZSBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuXG4gICgqIENvbnZlcnQgYSBjaGFyIChsLCBuIG9yIEwpIHRvIGl0cyBhc3NvY2lhdGVkIGNvdW50ZXIuICopXG4gIGFuZCBjb3VudGVyX29mX2NoYXIgc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2wnIC0+IExpbmVfY291bnRlciAgfCAnbicgLT4gQ2hhcl9jb3VudGVyXG4gICAgfCAnTCcgLT4gVG9rZW5fY291bnRlciB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgaW50X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbWF0Y2ggcGx1cywgaGFzaCwgc3BhY2UsIHN5bWIgd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9kICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfaVxuICAgIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2QnIC0+IEludF9zZCB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdpJyAtPiBJbnRfc2lcbiAgICB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfcGQgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X3BpXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAneCcgLT4gSW50X3ggIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ1gnIC0+IEludF9YXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAneCcgLT4gSW50X0N4IHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ1gnIC0+IEludF9DWFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ28nIC0+IEludF9vXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnbycgLT4gSW50X0NvXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAndScgLT4gSW50X3VcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdkJyAtPiBJbnRfQ2RcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdpJyAtPiBJbnRfQ2lcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd1JyAtPiBJbnRfQ3VcbiAgICB8IF8sIHRydWUsIF8sICd4JyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ3hcbiAgICB8IF8sIHRydWUsIF8sICdYJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ1hcbiAgICB8IF8sIHRydWUsIF8sICdvJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ29cbiAgICB8IF8sIHRydWUsIF8sICgnZCcgfCAnaScgfCAndScpIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBmYWxzZSBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCJcbiAgICB8IHRydWUsIF8sIHRydWUsIF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIHRydWUsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiXG4gICAgfCB0cnVlLCBfLCBmYWxzZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIGZhbHNlIGhhc2ggc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgZmFsc2UsIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3BhY2UsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGZsb2F0X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBsZXQgZmxhZyA9IG1hdGNoIHBsdXMsIHNwYWNlIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX1xuICAgIHwgZmFsc2UsICB0cnVlIC0+IEZsb2F0X2ZsYWdfc1xuICAgIHwgIHRydWUsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfcFxuICAgIHwgIHRydWUsICB0cnVlIC0+XG4gICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gRmxvYXRfZmxhZ19wXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIiBpblxuICAgIGxldCBraW5kID0gbWF0Y2ggaGFzaCwgc3ltYiB3aXRoXG4gICAgfCBfLCAnZicgLT4gRmxvYXRfZlxuICAgIHwgXywgJ2UnIC0+IEZsb2F0X2VcbiAgICB8IF8sICdFJyAtPiBGbG9hdF9FXG4gICAgfCBfLCAnZycgLT4gRmxvYXRfZ1xuICAgIHwgXywgJ0cnIC0+IEZsb2F0X0dcbiAgICB8IF8sICdoJyAtPiBGbG9hdF9oXG4gICAgfCBfLCAnSCcgLT4gRmxvYXRfSFxuICAgIHwgZmFsc2UsICdGJyAtPiBGbG9hdF9GXG4gICAgfCB0cnVlLCAnRicgLT4gRmxvYXRfQ0ZcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlIGluXG4gICAgZmxhZywga2luZFxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBpbmNvbXBhdGlibGUgb3B0aW9ucy4qKVxuICBhbmQgaW5jb21wYXRpYmxlX2ZsYWcgOiB0eXBlIGEgLiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nIC0+IGEgPVxuICAgIGZ1biBwY3RfaW5kIHN0cl9pbmQgc3ltYiBvcHRpb24gLT5cbiAgICAgIGxldCBzdWJmbXQgPSBTdHJpbmcuc3ViIHN0ciBwY3RfaW5kIChzdHJfaW5kIC0gcGN0X2luZCkgaW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgICVzIGlzIGluY29tcGF0aWJsZSB3aXRoICclYycgaW4gc3ViLWZvcm1hdCAlU1wiXG4gICAgICAgIHN0ciBwY3RfaW5kIG9wdGlvbiBzeW1iIHN1YmZtdFxuXG4gIGluIHBhcnNlIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgKCogR3VhcmRlZCBzdHJpbmcgdG8gZm9ybWF0IGNvbnZlcnNpb25zICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzdHIgZm10dHkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IGZtdHR5LCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiXG4gICAgICBzdHIgKHN0cmluZ19vZl9mbXR0eSBmbXR0eSlcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYW4gb3RoZXIgZm9ybWF0LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIChGb3JtYXQgKGZtdCcsIHN0cicpKSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgKGZtdHR5X29mX2ZtdCBmbXQnKSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIiBzdHIgc3RyJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBYYXZpZXIgTGVyb3kgYW5kIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxubGV0IGtmcHJpbnRmIGsgbyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgbyBhY2M7IGsgbykgRW5kX29mX2FjYyBmbXRcbmxldCBrYnByaW50ZiBrIGIgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBidWZwdXRfYWNjIGIgYWNjOyBrIGIpIEVuZF9vZl9hY2MgZm10XG5sZXQgaWtmcHJpbnRmIGsgb2MgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBvYyBmbXRcbmxldCBpa2JwcmludGYgPSBpa2ZwcmludGZcblxubGV0IGZwcmludGYgb2MgZm10ID0ga2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGJwcmludGYgYiBmbXQgPSBrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBpZnByaW50ZiBvYyBmbXQgPSBpa2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGlicHJpbnRmIGIgZm10ID0gaWticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZG91dCBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkZXJyIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBrJyBhY2MgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgc3RycHV0X2FjYyBidWYgYWNjO1xuICAgIGsgKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10XG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIChmdW4gcyAtPiBzKSBmbXRcblxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuIiwiKCogQ29udl9lcnJvcjogTW9kdWxlIGZvciBIYW5kbGluZyBFcnJvcnMgZHVyaW5nIEF1dG9tYXRlZCBZb2pzb25cbiAgIENvbnZlcnNpb25zICopXG5cbm9wZW4hIFN0ZExhYmVsc1xub3BlbiBZb2pzb25fY29udlxuXG5sZXQgc3ByaW50ZiA9IFByaW50Zi5zcHJpbnRmXG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHR1cGxlcyAqKVxuXG5sZXQgdHVwbGVfb2Zfc2l6ZV9uX2V4cGVjdGVkIGxvYyBuIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAoc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdHVwbGUgb2Ygc2l6ZSAlZCBleHBlY3RlZFwiIGxvYyBuKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHN1bSB0eXBlcyAqKVxuXG5sZXQgc3RhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdGhpcyBjb25zdHJ1Y3RvciBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBzdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIHRhZyB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiBzdW0gdGFnICVTIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c1wiIGxvYyB0YWdcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCBzdGFnX3Rha2VzX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGlzIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IGV4cGVjdGVkIGEgdmFyaWFudCB0eXBlLCBzYXcgYSBuZXN0ZWQgbGlzdFwiKSB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV9saXN0X2ludmFsaWRfc3VtIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogZXhwZWN0ZWQgYSB2YXJpYW50IHR5cGUsIHNhdyBhbiBlbXB0eSBsaXN0XCIpIHlvanNvblxuOztcblxubGV0IHVuZXhwZWN0ZWRfc3RhZyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHVuZXhwZWN0ZWQgdmFyaWFudCBjb25zdHJ1Y3RvclwiKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHJlY29yZHMgKilcblxubGV0IHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIGxldCBmbGRfbmFtZXNfc3RyID0gU3RyaW5nLmNvbmNhdCAoTGlzdC5yZXYgcmV2X2ZsZF9uYW1lcykgfnNlcDpcIiBcIiBpblxuICBsZXQgbXNnID0gc3ByaW50ZiBcIiVzX29mX3lvanNvbjogJXM6ICVzXCIgbG9jIHdoYXQgZmxkX25hbWVzX3N0ciBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9kdXBsaWNhdGVfZmllbGRzIGxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQ6XCJkdXBsaWNhdGUgZmllbGRzXCIgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvblxuOztcblxubGV0IHJlY29yZF9leHRyYV9maWVsZHMgbG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdDpcImV4dHJhIGZpZWxkc1wiIH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb25cbjs7XG5cbmxldCByZWMgcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgPSBmdW5jdGlvblxuICB8IFtdIC0+IFN0cmluZy5jb25jYXQgKExpc3QucmV2IGZpZWxkcykgfnNlcDpcIiBcIlxuICB8ICh0cnVlLCBmaWVsZCkgOjogcmVzdCAtPiByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIChmaWVsZCA6OiBmaWVsZHMpIHJlc3RcbiAgfCBfIDo6IHJlc3QgLT4gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgcmVzdFxuOztcblxubGV0IHJlY29yZF91bmRlZmluZWRfZWxlbWVudHMgbG9jIHlvanNvbiBsc3QgPVxuICBsZXQgdW5kZWZpbmVkID0gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBbXSBsc3QgaW5cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdGhlIGZvbGxvd2luZyByZWNvcmQgZWxlbWVudHMgd2VyZSB1bmRlZmluZWQ6ICVzXCIgbG9jIHVuZGVmaW5lZFxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9saXN0X2luc3RlYWRfYXRvbSBsb2MgeW9qc29uID1cbiAgbGV0IG1zZyA9IGxvYyBeIFwiX29mX3lvanNvbjogbGlzdCBpbnN0ZWFkIG9mIGF0b20gZm9yIHJlY29yZCBleHBlY3RlZFwiIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX3BvbHlfZmllbGRfdmFsdWUgbG9jIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIGxvY1xuICAgIF4gXCJfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCB2YWx1ZXMgb2YgdHlwZXMgcmVzdWx0aW5nIGZyb20gcG9seW1vcnBoaWMgcmVjb3JkIFxcXG4gICAgICAgZmllbGRzXCJcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHBvbHltb3JwaGljIHZhcmlhbnRzICopXG5cbmV4Y2VwdGlvbiBOb192YXJpYW50X21hdGNoXG5cbmxldCBub192YXJpYW50X21hdGNoICgpID0gcmFpc2UgTm9fdmFyaWFudF9tYXRjaFxuXG5sZXQgbm9fbWF0Y2hpbmdfdmFyaWFudF9mb3VuZCBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IG5vIG1hdGNoaW5nIHZhcmlhbnQgZm91bmRcIikgeW9qc29uXG47O1xuXG5sZXQgcHRhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBwdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIGNuc3RyIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIHNwcmludGZcbiAgICAgIFwiJXNfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IHRhZyAlUyBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHNcIlxuICAgICAgbG9jXG4gICAgICBjbnN0clxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHB0YWdfdGFrZXNfYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgdGFnIHRha2VzIGFuIGFyZ3VtZW50XCIpIHlvanNvblxuOztcblxubGV0IG5lc3RlZF9saXN0X2ludmFsaWRfcG9seV92YXIgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvclxuICAgIChsb2MgXiBcIl9vZl95b2pzb246IGEgbmVzdGVkIGxpc3QgaXMgYW4gaW52YWxpZCBwb2x5bW9ycGhpYyB2YXJpYW50XCIpXG4gICAgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfbGlzdF9pbnZhbGlkX3BvbHlfdmFyIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3JcbiAgICAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGUgZW1wdHkgbGlzdCBpcyBhbiBpbnZhbGlkIHBvbHltb3JwaGljIHZhcmlhbnRcIilcbiAgICB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV90eXBlIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdHJ5aW5nIHRvIGNvbnZlcnQgYW4gZW1wdHkgdHlwZVwiKSB5b2pzb25cbjs7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGlkIDogJ2EgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5sZXQgY29uc3QgYyBfID0gY1xubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgKCkgPSBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIEBAIGZ1bmN0aW9uXG58IEZpbmFsbHlfcmFpc2VkIGV4biAtPiBTb21lIChcIkZ1bi5GaW5hbGx5X3JhaXNlZDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKVxufCBfIC0+IE5vbmVcblxubGV0IHByb3RlY3QgfihmaW5hbGx5IDogdW5pdCAtPiB1bml0KSB3b3JrID1cbiAgbGV0IGZpbmFsbHlfbm9fZXhuICgpID1cbiAgICB0cnkgZmluYWxseSAoKSB3aXRoIGUgLT5cbiAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSAoRmluYWxseV9yYWlzZWQgZSkgYnRcbiAgaW5cbiAgbWF0Y2ggd29yayAoKSB3aXRoXG4gIHwgcmVzdWx0IC0+IGZpbmFsbHlfbm9fZXhuICgpIDsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIHdvcmtfZXhuIC0+XG4gICAgICBsZXQgd29ya19idCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBmaW5hbGx5X25vX2V4biAoKSA7XG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSB3b3JrX2V4biB3b3JrX2J0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1lc3NhZ2UgZGlnZXN0IChNRDUpICopXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuZXh0ZXJuYWwgdW5zYWZlX3N0cmluZzogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfc3RyaW5nXCJcbmV4dGVybmFsIGNoYW5uZWw6IGluX2NoYW5uZWwgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X2NoYW5cIlxuXG5sZXQgc3RyaW5nIHN0ciA9XG4gIHVuc2FmZV9zdHJpbmcgc3RyIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG5sZXQgYnl0ZXMgYiA9IHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG5sZXQgc3Vic3RyaW5nIHN0ciBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IFN0cmluZy5sZW5ndGggc3RyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfc3RyaW5nIHN0ciBvZnMgbGVuXG5cbmxldCBzdWJieXRlcyBiIG9mcyBsZW4gPSBzdWJzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYikgb2ZzIGxlblxuXG5sZXQgZmlsZSBmaWxlbmFtZSA9XG4gIGxldCBpYyA9IG9wZW5faW5fYmluIGZpbGVuYW1lIGluXG4gIG1hdGNoIGNoYW5uZWwgaWMgKC0xKSB3aXRoXG4gICAgfCBkIC0+IGNsb3NlX2luIGljOyBkXG4gICAgfCBleGNlcHRpb24gZSAtPiBjbG9zZV9pbiBpYzsgcmFpc2UgZVxuXG5sZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID1cbiAgb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG5sZXQgaW5wdXQgY2hhbiA9IHJlYWxseV9pbnB1dF9zdHJpbmcgY2hhbiAxNlxuXG5sZXQgY2hhcl9oZXggbiA9XG4gIENoYXIudW5zYWZlX2NociAobiArIGlmIG4gPCAxMCB0aGVuIENoYXIuY29kZSAnMCcgZWxzZSAoQ2hhci5jb2RlICdhJyAtIDEwKSlcblxubGV0IHRvX2hleCBkID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBkIDw+IDE2IHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QudG9faGV4XCI7XG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMzIgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgbGV0IHggPSBDaGFyLmNvZGUgZC5baV0gaW5cbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKSAoY2hhcl9oZXggKHggbHNyIDQpKTtcbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKzEpIChjaGFyX2hleCAoeCBsYW5kIDB4MGYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcblxubGV0IGZyb21faGV4IHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPD4gMzIgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5mcm9tX2hleFwiO1xuICBsZXQgZGlnaXQgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnMCcuLic5JyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdBJy4uJ0YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCAnYScuLidmJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgXyAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkRpZ2VzdC5mcm9tX2hleFwiKVxuICBpblxuICBsZXQgYnl0ZSBpID0gZGlnaXQgcy5baV0gbHNsIDQgKyBkaWdpdCBzLltpKzFdIGluXG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMTYgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgQnl0ZXMuc2V0IHJlc3VsdCBpIChDaGFyLmNociAoYnl0ZSAoMiAqIGkpKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEhhc2ggdGFibGVzICopXG5cbigqIFdlIGRvIGR5bmFtaWMgaGFzaGluZywgYW5kIHJlc2l6ZSB0aGUgdGFibGUgYW5kIHJlaGFzaCB0aGUgZWxlbWVudHNcbiAgIHdoZW4gYnVja2V0cyBiZWNvbWUgdG9vIGxvbmcuICopXG5cbnR5cGUgKCdhLCAnYikgdCA9XG4gIHsgbXV0YWJsZSBzaXplOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogbnVtYmVyIG9mIGVudHJpZXMgKilcbiAgICBtdXRhYmxlIGRhdGE6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgYXJyYXk7ICAoKiB0aGUgYnVja2V0cyAqKVxuICAgIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBmb3IgcmFuZG9taXphdGlvbiAqKVxuICAgIG11dGFibGUgaW5pdGlhbF9zaXplOiBpbnQ7ICAgICAgICAgICAgICAgICgqIGluaXRpYWwgYXJyYXkgc2l6ZSAqKVxuICB9XG5cbmFuZCAoJ2EsICdiKSBidWNrZXRsaXN0ID1cbiAgICBFbXB0eVxuICB8IENvbnMgb2YgeyBtdXRhYmxlIGtleTogJ2E7XG4gICAgICAgICAgICAgIG11dGFibGUgZGF0YTogJ2I7XG4gICAgICAgICAgICAgIG11dGFibGUgbmV4dDogKCdhLCAnYikgYnVja2V0bGlzdCB9XG5cbigqIFRoZSBzaWduIG9mIGluaXRpYWxfc2l6ZSBlbmNvZGVzIHRoZSBmYWN0IHRoYXQgYSB0cmF2ZXJzYWwgaXNcbiAgIG9uZ29pbmcgb3Igbm90LlxuXG4gICBUaGlzIGRpc2FibGVzIHRoZSBlZmZpY2llbnQgaW4gcGxhY2UgaW1wbGVtZW50YXRpb24gb2YgcmVzaXppbmcuXG4qKVxuXG5sZXQgb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICB8fCBoLmluaXRpYWxfc2l6ZSA8IDBcblxubGV0IGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIGguaW5pdGlhbF9zaXplIDwtIC0gaC5pbml0aWFsX3NpemVcblxuKCogVG8gcGljayByYW5kb20gc2VlZHMgaWYgcmVxdWVzdGVkICopXG5cbmxldCByYW5kb21pemVkX2RlZmF1bHQgPVxuICBsZXQgcGFyYW1zID1cbiAgICB0cnkgU3lzLmdldGVudiBcIk9DQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICBTdHJpbmcuY29udGFpbnMgcGFyYW1zICdSJ1xuXG5sZXQgcmFuZG9taXplZCA9IHJlZiByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IHJhbmRvbWl6ZWQgOj0gdHJ1ZVxubGV0IGlzX3JhbmRvbWl6ZWQgKCkgPSAhcmFuZG9taXplZFxuXG5sZXQgcHJuZyA9IGxhenkgKFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCgpKVxuXG4oKiBGdW5jdGlvbnMgd2hpY2ggYXBwZWFyIGJlZm9yZSB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgbXVzdCBlaXRoZXIgYmVcbiAgIGluZGVwZW5kZW50IG9mIHRoZSBoYXNoIGZ1bmN0aW9uIG9yIHRha2UgaXQgYXMgYSBwYXJhbWV0ZXIgKHNlZSAjMjIwMiBhbmRcbiAgIGNvZGUgYmVsb3cgdGhlIGZ1bmN0b3IgZGVmaW5pdGlvbnMuICopXG5cbigqIENyZWF0aW5nIGEgZnJlc2gsIGVtcHR5IHRhYmxlICopXG5cbmxldCByZWMgcG93ZXJfMl9hYm92ZSB4IG4gPVxuICBpZiB4ID49IG4gdGhlbiB4XG4gIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgZWxzZSBwb3dlcl8yX2Fib3ZlICh4ICogMikgblxuXG5sZXQgY3JlYXRlID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPSBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSBlbHNlIDAgaW5cbiAgeyBpbml0aWFsX3NpemUgPSBzOyBzaXplID0gMDsgc2VlZCA9IHNlZWQ7IGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHkgfVxuXG5sZXQgY2xlYXIgaCA9XG4gIGlmIGguc2l6ZSA+IDAgdGhlbiBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIEFycmF5LmZpbGwgaC5kYXRhIDAgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIEVtcHR5XG4gIGVuZFxuXG5sZXQgcmVzZXQgaCA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggaC5kYXRhIGluXG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICAgIHx8IGxlbiA9IGFicyBoLmluaXRpYWxfc2l6ZSB0aGVuXG4gICAgY2xlYXIgaFxuICBlbHNlIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgaC5kYXRhIDwtIEFycmF5Lm1ha2UgKGFicyBoLmluaXRpYWxfc2l6ZSkgRW1wdHlcbiAgZW5kXG5cbmxldCBjb3B5X2J1Y2tldGxpc3QgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IEVtcHR5XG4gIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgbGV0IHJlYyBsb29wIHByZWMgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICB8IENvbnMgcHJlYyAtPiAgcHJlYy5uZXh0IDwtIHJcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGxvb3AgciBuZXh0XG4gICAgICBpblxuICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICBsb29wIHIgbmV4dDtcbiAgICAgIHJcblxubGV0IGNvcHkgaCA9IHsgaCB3aXRoIGRhdGEgPSBBcnJheS5tYXAgY29weV9idWNrZXRsaXN0IGguZGF0YSB9XG5cbmxldCBsZW5ndGggaCA9IGguc2l6ZVxuXG5sZXQgaW5zZXJ0X2FsbF9idWNrZXRzIGluZGV4ZnVuIGlucGxhY2Ugb2RhdGEgbmRhdGEgPVxuICBsZXQgbnNpemUgPSBBcnJheS5sZW5ndGggbmRhdGEgaW5cbiAgbGV0IG5kYXRhX3RhaWwgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gIGxldCByZWMgaW5zZXJ0X2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPiAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBhcyBjZWxsIC0+XG4gICAgICAgIGxldCBjZWxsID1cbiAgICAgICAgICBpZiBpbnBsYWNlIHRoZW4gY2VsbFxuICAgICAgICAgIGVsc2UgQ29ucyB7a2V5OyBkYXRhOyBuZXh0ID0gRW1wdHl9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBuaWR4ID0gaW5kZXhmdW4ga2V5IGluXG4gICAgICAgIGJlZ2luIG1hdGNoIG5kYXRhX3RhaWwuKG5pZHgpIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBuZGF0YS4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIGNlbGw7XG4gICAgICAgIGVuZDtcbiAgICAgICAgbmRhdGFfdGFpbC4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgaW5zZXJ0X2J1Y2tldCBuZXh0XG4gIGluXG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggb2RhdGEgLSAxIGRvXG4gICAgaW5zZXJ0X2J1Y2tldCBvZGF0YS4oaSlcbiAgZG9uZTtcbiAgaWYgaW5wbGFjZSB0aGVuXG4gICAgZm9yIGkgPSAwIHRvIG5zaXplIC0gMSBkb1xuICAgICAgbWF0Y2ggbmRhdGFfdGFpbC4oaSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIEVtcHR5XG4gICAgZG9uZVxuXG5sZXQgcmVzaXplIGluZGV4ZnVuIGggPVxuICBsZXQgb2RhdGEgPSBoLmRhdGEgaW5cbiAgbGV0IG9zaXplID0gQXJyYXkubGVuZ3RoIG9kYXRhIGluXG4gIGxldCBuc2l6ZSA9IG9zaXplICogMiBpblxuICBpZiBuc2l6ZSA8IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBsZXQgbmRhdGEgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgbGV0IGlucGxhY2UgPSBub3QgKG9uZ29pbmdfdHJhdmVyc2FsIGgpIGluXG4gICAgaC5kYXRhIDwtIG5kYXRhOyAgICAgICAgICAoKiBzbyB0aGF0IGluZGV4ZnVuIHNlZXMgdGhlIG5ldyBidWNrZXQgY291bnQgKilcbiAgICBpbnNlcnRfYWxsX2J1Y2tldHMgKGluZGV4ZnVuIGgpIGlucGxhY2Ugb2RhdGEgbmRhdGFcbiAgZW5kXG5cbmxldCBpdGVyIGYgaCA9XG4gIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+XG4gICAgICAgICgpXG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZiBrZXkgZGF0YTsgZG9fYnVja2V0IG5leHQgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZG9fYnVja2V0IGQuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIEVtcHR5XG4gICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gRW1wdHlcbiAgICAgIGVuZFxuICB8IChDb25zICh7a2V5OyBkYXRhOyBuZXh0fSBhcyBjKSkgYXMgc2xvdCAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZiBrZXkgZGF0YSB3aXRoXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgbmV4dFxuICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gc2xvdFxuICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBzbG90XG4gICAgICAgICAgZW5kO1xuICAgICAgICAgIGMuZGF0YSA8LSBkYXRhO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgc2xvdCBuZXh0XG4gICAgICBlbmRcblxubGV0IGZpbHRlcl9tYXBfaW5wbGFjZSBmIGggPVxuICBsZXQgZCA9IGguZGF0YSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBFbXB0eSBoLmRhdGEuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGhcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCBmb2xkIGYgaCBpbml0ID1cbiAgbGV0IHJlYyBkb19idWNrZXQgYiBhY2N1ID1cbiAgICBtYXRjaCBiIHdpdGhcbiAgICAgIEVtcHR5IC0+XG4gICAgICAgIGFjY3VcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBkb19idWNrZXQgbmV4dCAoZiBrZXkgZGF0YSBhY2N1KSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBsZXQgYWNjdSA9IHJlZiBpbml0IGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgYWNjdSA6PSBkb19idWNrZXQgZC4oaSkgIWFjY3VcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICAhYWNjdVxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxudHlwZSBzdGF0aXN0aWNzID0ge1xuICBudW1fYmluZGluZ3M6IGludDtcbiAgbnVtX2J1Y2tldHM6IGludDtcbiAgbWF4X2J1Y2tldF9sZW5ndGg6IGludDtcbiAgYnVja2V0X2hpc3RvZ3JhbTogaW50IGFycmF5XG59XG5cbmxldCByZWMgYnVja2V0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhY2N1XG4gIHwgQ29uc3tuZXh0fSAtPiBidWNrZXRfbGVuZ3RoIChhY2N1ICsgMSkgbmV4dFxuXG5sZXQgc3RhdHMgaCA9XG4gIGxldCBtYmwgPVxuICAgIEFycmF5LmZvbGRfbGVmdCAoZnVuIG0gYiAtPiBJbnQubWF4IG0gKGJ1Y2tldF9sZW5ndGggMCBiKSkgMCBoLmRhdGEgaW5cbiAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICBBcnJheS5pdGVyXG4gICAgKGZ1biBiIC0+XG4gICAgICBsZXQgbCA9IGJ1Y2tldF9sZW5ndGggMCBiIGluXG4gICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICBoLmRhdGE7XG4gIHsgbnVtX2JpbmRpbmdzID0gaC5zaXplO1xuICAgIG51bV9idWNrZXRzID0gQXJyYXkubGVuZ3RoIGguZGF0YTtcbiAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICBidWNrZXRfaGlzdG9ncmFtID0gaGlzdG8gfVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHRibCA9XG4gICgqIGNhcHR1cmUgY3VycmVudCBhcnJheSwgc28gdGhhdCBldmVuIGlmIHRoZSB0YWJsZSBpcyByZXNpemVkIHdlXG4gICAgIGtlZXAgaXRlcmF0aW5nIG9uIHRoZSBzYW1lIGFycmF5ICopXG4gIGxldCB0YmxfZGF0YSA9IHRibC5kYXRhIGluXG4gICgqIHN0YXRlOiBpbmRleCAqIG5leHQgYnVja2V0IHRvIHRyYXZlcnNlICopXG4gIGxldCByZWMgYXV4IGkgYnVjayAoKSA9IG1hdGNoIGJ1Y2sgd2l0aFxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCB0YmxfZGF0YVxuICAgICAgICB0aGVuIFNlcS5OaWxcbiAgICAgICAgZWxzZSBhdXgoaSsxKSB0YmxfZGF0YS4oaSkgKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgU2VxLkNvbnMgKChrZXksIGRhdGEpLCBhdXggaSBuZXh0KVxuICBpblxuICBhdXggMCBFbXB0eVxuXG5sZXQgdG9fc2VxX2tleXMgbSA9IFNlcS5tYXAgZnN0ICh0b19zZXEgbSlcblxubGV0IHRvX3NlcV92YWx1ZXMgbSA9IFNlcS5tYXAgc25kICh0b19zZXEgbSlcblxuKCogRnVuY3RvcmlhbCBpbnRlcmZhY2UgKilcblxubW9kdWxlIHR5cGUgSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IGludCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGU6IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHk6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQ6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQ6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGw6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGg6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlIDogP3JhbmRvbTpib29sIC0+IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHkgOiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQgOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsIDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXIgOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2VTZWVkZWQoSDogU2VlZGVkSGFzaGVkVHlwZSk6IChTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgdHlwZSBrZXkgPSBILnRcbiAgICB0eXBlICdhIGhhc2h0YmwgPSAoa2V5LCAnYSkgdFxuICAgIHR5cGUgJ2EgdCA9ICdhIGhhc2h0YmxcbiAgICBsZXQgY3JlYXRlID0gY3JlYXRlXG4gICAgbGV0IGNsZWFyID0gY2xlYXJcbiAgICBsZXQgcmVzZXQgPSByZXNldFxuICAgIGxldCBjb3B5ID0gY29weVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGtleSA9XG4gICAgICAoSC5oYXNoIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGFkZCBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIFtdXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE9ZDsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBkIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgICAgIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG4gICAgbGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gICAgICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICAgICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgICAgIGVuZFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICAgICAgSC5lcXVhbCBrIGtleSB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgICAgIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgYWRkX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbiAgICBsZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuXG4gICAgbGV0IGl0ZXIgPSBpdGVyXG4gICAgbGV0IGZpbHRlcl9tYXBfaW5wbGFjZSA9IGZpbHRlcl9tYXBfaW5wbGFjZVxuICAgIGxldCBmb2xkID0gZm9sZFxuICAgIGxldCBsZW5ndGggPSBsZW5ndGhcbiAgICBsZXQgc3RhdHMgPSBzdGF0c1xuICAgIGxldCB0b19zZXEgPSB0b19zZXFcbiAgICBsZXQgdG9fc2VxX2tleXMgPSB0b19zZXFfa2V5c1xuICAgIGxldCB0b19zZXFfdmFsdWVzID0gdG9fc2VxX3ZhbHVlc1xuICBlbmRcblxubW9kdWxlIE1ha2UoSDogSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4oKiBQb2x5bW9ycGhpYyBoYXNoIGZ1bmN0aW9uLWJhc2VkIHRhYmxlcyAqKVxuKCogQ29kZSBpbmNsdWRlZCBiZWxvdyB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgdG8gZ3VhcmQgYWdhaW5zdCBhY2NpZGVudGFsXG4gICB1c2UgLSBzZWUgIzIyMDIgKilcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5cbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5sZXQgaGFzaF9wYXJhbSBuMSBuMiB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gbjEgbjIgMCB4XG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxuXG5sZXQga2V5X2luZGV4IGgga2V5ID1cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDRcbiAgdGhlbiAoc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuICBlbHNlIGludmFsaWRfYXJnIFwiSGFzaHRibDogdW5zdXBwb3J0ZWQgaGFzaCB0YWJsZSBmb3JtYXRcIlxuXG5sZXQgYWRkIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbmxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICAoKVxuICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGJlZ2luXG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgIGVuZFxuICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbmxldCByZW1vdmUgaCBrZXkgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG5sZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG5sZXQgZmluZCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxubGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgTm9uZVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG5sZXQgZmluZF9vcHQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IE5vbmVcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG5sZXQgZmluZF9hbGwgaCBrZXkgPVxuICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcblxubGV0IHJlYnVpbGQgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaCA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiAoQXJyYXkubGVuZ3RoIGguZGF0YSkgaW5cbiAgbGV0IHNlZWQgPVxuICAgIGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpXG4gICAgZWxzZSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguc2VlZFxuICAgIGVsc2UgMCBpblxuICBsZXQgaCcgPSB7XG4gICAgc2l6ZSA9IGguc2l6ZTtcbiAgICBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5O1xuICAgIHNlZWQgPSBzZWVkO1xuICAgIGluaXRpYWxfc2l6ZSA9IGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5pbml0aWFsX3NpemUgZWxzZSBzXG4gIH0gaW5cbiAgaW5zZXJ0X2FsbF9idWNrZXRzIChrZXlfaW5kZXggaCcpIGZhbHNlIGguZGF0YSBoJy5kYXRhO1xuICBoJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+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+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfb3Blbl90YWcgc3RhdGUgcyA9IHBwX29wZW5fc3RhZyBzdGF0ZSAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSA9IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKClcblxubGV0IHBwX3NldF9wcmludF90YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9wcmludF90YWdzIDwtIGJcbmxldCBwcF9zZXRfbWFya190YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9tYXJrX3RhZ3MgPC0gYlxubGV0IHBwX2dldF9wcmludF90YWdzIHN0YXRlICgpID0gc3RhdGUucHBfcHJpbnRfdGFnc1xubGV0IHBwX2dldF9tYXJrX3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJrX3RhZ3NcbmxldCBwcF9zZXRfdGFncyBzdGF0ZSBiID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYjsgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiXG5cblxuKCogSGFuZGxpbmcgdGFnIGhhbmRsaW5nIGZ1bmN0aW9uczogZ2V0L3NldCBmdW5jdGlvbnMuICopXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgbWFya19vcGVuX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnO1xuICBtYXJrX2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZztcbiAgcHJpbnRfb3Blbl9zdGFnID0gc3RhdGUucHBfcHJpbnRfb3Blbl90YWc7XG4gIHByaW50X2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWc7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fc3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV9zdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3N0YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3N0YWcgPSBwY3Q7XG4gIH0gPVxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIG1vdDtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gbWN0O1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBwb3Q7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBwY3RcblxuXG4oKiBJbml0aWFsaXplIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX3Jpbml0IHN0YXRlID1cbiAgcHBfY2xlYXJfcXVldWUgc3RhdGU7XG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9mb3JtYXRfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3Rib3hfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfbWFya19zdGFjaztcbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gMDtcbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSAwO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbjtcbiAgcHBfb3Blbl9zeXNfYm94IHN0YXRlXG5cbmxldCBjbGVhcl90YWdfc3RhY2sgc3RhdGUgPVxuICBTdGFjay5pdGVyIChmdW4gXyAtPiBwcF9jbG9zZV90YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGIgPVxuICBjbGVhcl90YWdfc3RhY2sgc3RhdGU7XG4gIHdoaWxlIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIGRvXG4gICAgcHBfY2xvc2VfYm94IHN0YXRlICgpXG4gIGRvbmU7XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHBwX2luZmluaXR5O1xuICBhZHZhbmNlX2xlZnQgc3RhdGU7XG4gIGlmIGIgdGhlbiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgcHBfcmluaXQgc3RhdGVcblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGZvcm1hdCB2YWx1ZXMgYW5kIHVzZSBib3hlcy5cblxuKilcblxuKCogVG8gZm9ybWF0IGEgc3RyaW5nLiAqKVxubGV0IHBwX3ByaW50X2FzX3NpemUgc3RhdGUgc2l6ZSBzID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgc1xuXG5cbmxldCBwcF9wcmludF9hcyBzdGF0ZSBpc2l6ZSBzID1cbiAgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSAoU2l6ZS5vZl9pbnQgaXNpemUpIHNcblxuXG5sZXQgcHBfcHJpbnRfc3RyaW5nIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbmxldCBwcF9wcmludF9ieXRlcyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKEJ5dGVzLmxlbmd0aCBzKSAoQnl0ZXMudG9fc3RyaW5nIHMpXG5cbigqIFRvIGZvcm1hdCBhbiBpbnRlZ2VyLiAqKVxubGV0IHBwX3ByaW50X2ludCBzdGF0ZSBpID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChJbnQudG9fc3RyaW5nIGkpXG5cbigqIFRvIGZvcm1hdCBhIGZsb2F0LiAqKVxubGV0IHBwX3ByaW50X2Zsb2F0IHN0YXRlIGYgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9mbG9hdCBmKVxuXG4oKiBUbyBmb3JtYXQgYSBib29sZWFuLiAqKVxubGV0IHBwX3ByaW50X2Jvb2wgc3RhdGUgYiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Jvb2wgYilcblxuKCogVG8gZm9ybWF0IGEgY2hhci4gKilcbmxldCBwcF9wcmludF9jaGFyIHN0YXRlIGMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAxIChTdHJpbmcubWFrZSAxIGMpXG5cblxuKCogT3BlbmluZyBib3hlcy4gKilcbmxldCBwcF9vcGVuX2hib3ggc3RhdGUgKCkgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9oYm94XG5hbmQgcHBfb3Blbl92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfdmJveFxuXG5hbmQgcHBfb3Blbl9odmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2h2Ym94XG5hbmQgcHBfb3Blbl9ob3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ob3Zib3hcbmFuZCBwcF9vcGVuX2JveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2JveFxuXG5cbigqIFByaW50aW5nIHF1ZXVlZCB0ZXh0LlxuXG4gICBbcHBfcHJpbnRfZmx1c2hdIHByaW50cyBhbGwgcGVuZGluZyBpdGVtcyBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYW5kXG4gICB0aGVuIGZsdXNoZXMgdGhlIGxvdyBsZXZlbCBvdXRwdXQgZGV2aWNlIG9mIHRoZSBmb3JtYXR0ZXIgdG8gYWN0dWFsbHlcbiAgIGRpc3BsYXkgcHJpbnRpbmcgbWF0ZXJpYWwuXG5cbiAgIFtwcF9wcmludF9uZXdsaW5lXSBiZWhhdmVzIGFzIFtwcF9wcmludF9mbHVzaF0gYWZ0ZXIgcHJpbnRpbmcgYW4gYWRkaXRpb25hbFxuICAgbmV3IGxpbmUuICopXG5sZXQgcHBfcHJpbnRfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIHRydWU7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuYW5kIHBwX3ByaW50X2ZsdXNoIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgZmFsc2U7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuXG5cbigqIFRvIGdldCBhIG5ld2xpbmUgd2hlbiBvbmUgZG9lcyBub3Qgd2FudCB0byBjbG9zZSB0aGUgY3VycmVudCBib3guICopXG5sZXQgcHBfZm9yY2VfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogVG8gZm9ybWF0IHNvbWV0aGluZywgb25seSBpbiBjYXNlIHRoZSBsaW5lIGhhcyBqdXN0IGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3ByaW50X2lmX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGVcbiAgICAgIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9pZl9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBHZW5lcmFsaXplZCBicmVhayBoaW50IHRoYXQgYWxsb3dzIHByaW50aW5nIHN0cmluZ3MgYmVmb3JlL2FmdGVyXG4gICBzYW1lLWxpbmUgb2Zmc2V0ICh3aWR0aCkgb3IgbmV3LWxpbmUgb2Zmc2V0ICopXG5sZXQgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlIH5maXRzIH5icmVha3MgPVxuICBsZXQgYmVmb3JlLCB3aWR0aCwgYWZ0ZXIgPSBmaXRzIGluXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IHRva2VuID0gUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSBpblxuICAgIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoIGJlZm9yZSArIHdpZHRoICsgU3RyaW5nLmxlbmd0aCBhZnRlciBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cbigqIFByaW50aW5nIGJyZWFrIGhpbnRzOlxuICAgQSBicmVhayBoaW50IGluZGljYXRlcyB3aGVyZSBhIGJveCBtYXkgYmUgYnJva2VuLlxuICAgSWYgbGluZSBpcyBicm9rZW4gdGhlbiBvZmZzZXQgaXMgYWRkZWQgdG8gdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50XG4gICBib3ggZWxzZSAodGhlIHZhbHVlIG9mKSB3aWR0aCBibGFua3MgYXJlIHByaW50ZWQuICopXG5sZXQgcHBfcHJpbnRfYnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlXG4gICAgfmZpdHM6KFwiXCIsIHdpZHRoLCBcIlwiKSB+YnJlYWtzOihcIlwiLCBvZmZzZXQsIFwiXCIpXG5cblxuKCogUHJpbnQgYSBzcGFjZSA6XG4gICBhIHNwYWNlIGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBhIHNpbmdsZSBzcGFjZSBpZiB0aGUgYnJlYWsgZG9lcyBub3RcbiAgIHNwbGl0IHRoZSBsaW5lO1xuICAgYSBjdXQgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIG5vdGhpbmcgaWYgdGhlIGJyZWFrIGRvZXMgbm90IHNwbGl0IHRoZVxuICAgbGluZS4gKilcbmxldCBwcF9wcmludF9zcGFjZSBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDEgMFxuYW5kIHBwX3ByaW50X2N1dCBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDAgMFxuXG5cbigqIFRhYnVsYXRpb24gYm94ZXMuICopXG5sZXQgcHBfb3Blbl90Ym94IHN0YXRlICgpID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLnplcm8gaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YmVnaW4gKFBwX3Rib3ggKHJlZiBbXSkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqIENsb3NlIGEgdGFidWxhdGlvbiBib3guICopXG5sZXQgcHBfY2xvc2VfdGJveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF90ZW5kOyBsZW5ndGggPSAwIH0gaW5cbiAgICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW07XG4gICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDFcbiAgZW5kXG5cblxuKCogUHJpbnQgYSB0YWJ1bGF0aW9uIGJyZWFrLiAqKVxubGV0IHBwX3ByaW50X3RicmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RicmVhayAod2lkdGgsIG9mZnNldCk7IGxlbmd0aCA9IHdpZHRoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cblxubGV0IHBwX3ByaW50X3RhYiBzdGF0ZSAoKSA9IHBwX3ByaW50X3RicmVhayBzdGF0ZSAwIDBcblxubGV0IHBwX3NldF90YWIgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9zdGFiOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBjb250cm9sIHRoZSBwcmV0dHktcHJpbnRlcnNcblxuKilcblxuKCogU2V0X21heF9ib3hlcy4gKilcbmxldCBwcF9zZXRfbWF4X2JveGVzIHN0YXRlIG4gPSBpZiBuID4gMSB0aGVuIHN0YXRlLnBwX21heF9ib3hlcyA8LSBuXG5cbigqIFRvIGtub3cgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgYWxsb3dlZC4gKilcbmxldCBwcF9nZXRfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbmxldCBwcF9vdmVyX21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxuKCogRWxsaXBzaXMuICopXG5sZXQgcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgcyA9IHN0YXRlLnBwX2VsbGlwc2lzIDwtIHNcbmFuZCBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSAoKSA9IHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVG8gc2V0IHRoZSBtYXJnaW4gb2YgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfbGltaXQgbiA9XG4gIGlmIG4gPCBwcF9pbmZpbml0eSB0aGVuIG4gZWxzZSBwcmVkIHBwX2luZmluaXR5XG5cblxuKCogSW50ZXJuYWwgcHJldHR5LXByaW50ZXIgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdCA8LSBuO1xuICAgIHN0YXRlLnBwX21heF9pbmRlbnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfcmluaXQgc3RhdGVcblxuXG4oKiBJbml0aWFsbHksIHdlIGhhdmUgOlxuICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0LCBhbmRcbiAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW4uICopXG5sZXQgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbiA9XG4gIGlmIG4gPiAxIHRoZW5cbiAgICBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgKHN0YXRlLnBwX21hcmdpbiAtIG4pXG5cblxubGV0IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2luZGVudFxuXG5sZXQgcHBfc2V0X21hcmdpbiBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9tYXJnaW4gPC0gbjtcbiAgICBsZXQgbmV3X21heF9pbmRlbnQgPVxuICAgICAgKCogVHJ5IHRvIG1haW50YWluIG1heF9pbmRlbnQgdG8gaXRzIGFjdHVhbCB2YWx1ZS4gKilcbiAgICAgIGlmIHN0YXRlLnBwX21heF9pbmRlbnQgPD0gc3RhdGUucHBfbWFyZ2luXG4gICAgICB0aGVuIHN0YXRlLnBwX21heF9pbmRlbnQgZWxzZVxuICAgICAgKCogSWYgcG9zc2libGUgbWFpbnRhaW4gcHBfbWluX3NwYWNlX2xlZnQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAgICAgIGlmIHRoaXMgbGVhZHMgdG8gYSB0b28gc21hbGwgbWF4X2luZGVudCwgdGFrZSBoYWxmIG9mIHRoZVxuICAgICAgICAgbmV3IG1hcmdpbiwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDEuICopXG4gICAgICAgSW50Lm1heCAoSW50Lm1heCAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQpXG4gICAgICAgICAgICAgICAgKHN0YXRlLnBwX21hcmdpbiAvIDIpKSAxIGluXG4gICAgKCogUmVidWlsZCBpbnZhcmlhbnRzLiAqKVxuICAgIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG5ld19tYXhfaW5kZW50XG5cblxuKCoqIEdlb21ldHJ5IGZ1bmN0aW9ucyBhbmQgdHlwZXMgKilcbnR5cGUgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ6aW50OyBtYXJnaW46IGludH1cblxubGV0IHZhbGlkYXRlX2dlb21ldHJ5IHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgaWYgbWF4X2luZGVudCA8IDIgdGhlblxuICAgIEVycm9yIFwibWF4X2luZGVudCA8IDJcIlxuICBlbHNlIGlmIG1hcmdpbiA8PSBtYXhfaW5kZW50IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA8PSBtYXhfaW5kZW50XCJcbiAgZWxzZSBPayAoKVxuXG5sZXQgY2hlY2tfZ2VvbWV0cnkgZ2VvbWV0cnkgPVxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgT2sgKCkgLT4gdHJ1ZVxuICB8IEVycm9yIF8gLT4gZmFsc2VcblxubGV0IHBwX2dldF9tYXJnaW4gc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJnaW5cblxubGV0IHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgcHBfc2V0X21hcmdpbiBzdGF0ZSBtYXJnaW47XG4gIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG1heF9pbmRlbnQ7XG4gICgpXG5cbmxldCBwcF9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIG1zZyAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChcIkZvcm1hdC5wcF9zZXRfZ2VvbWV0cnk6IFwiIF4gbXNnKSlcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgX21zZyAtPlxuICAgICAoKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSA9XG4gIHsgbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKTsgbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpIH1cblxubGV0IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGF0ZSB1cGRhdGUgPVxuICBsZXQgZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgaW5cbiAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgKHVwZGF0ZSBnZW9tZXRyeSlcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgICBvdXRfc3RyaW5nID0gZjtcbiAgICAgIG91dF9mbHVzaCA9IGc7XG4gICAgICBvdXRfbmV3bGluZSA9IGg7XG4gICAgICBvdXRfc3BhY2VzID0gaTtcbiAgICAgIG91dF9pbmRlbnQgPSBqO1xuICAgIH0gPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGk7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0galxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBvdXRfc3RyaW5nID0gc3RhdGUucHBfb3V0X3N0cmluZztcbiAgb3V0X2ZsdXNoID0gc3RhdGUucHBfb3V0X2ZsdXNoO1xuICBvdXRfbmV3bGluZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lO1xuICBvdXRfc3BhY2VzID0gc3RhdGUucHBfb3V0X3NwYWNlcztcbiAgb3V0X2luZGVudCA9IHN0YXRlLnBwX291dF9pbmRlbnQ7XG59XG5cblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBzdHJpbmcgb3V0cHV0IGFuZCBmbHVzaCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjsgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGdcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gpXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X25ld2xpbmUgc3RhdGUgKCkgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIFwiXFxuXCIgMCAgMVxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgc3BhY2VzLiAqKVxubGV0IGJsYW5rX2xpbmUgPSBTdHJpbmcubWFrZSA4MCAnICdcbmxldCByZWMgZGlzcGxheV9ibGFua3Mgc3RhdGUgbiA9XG4gIGlmIG4gPiAwIHRoZW5cbiAgaWYgbiA8PSA4MCB0aGVuIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIG4gZWxzZVxuICBiZWdpblxuICAgIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIDgwO1xuICAgIGRpc3BsYXlfYmxhbmtzIHN0YXRlIChuIC0gODApXG4gIGVuZFxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9pbmRlbnQgPSBkaXNwbGF5X2JsYW5rc1xuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMgYXMgcHJpbnRpbmcgdG8gYSBnaXZlblxuICAgW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGF0ZSBvYyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gb3V0cHV0X3N1YnN0cmluZyBvYztcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIChmdW4gKCkgLT4gZmx1c2ggb2MpO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3Mgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgc3RhdGVcblxuKCpcblxuICBEZWZpbmluZyBzcGVjaWZpYyBmb3JtYXR0ZXJzXG5cbiopXG5cbmxldCBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjxcIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxubGV0IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjwvXCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcblxubGV0IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWcgPSBpZ25vcmVcbmxldCBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyA9IGlnbm9yZVxuXG4oKiBCdWlsZGluZyBhIGZvcm1hdHRlciBnaXZlbiBpdHMgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy5cbiAgIE90aGVyIGZpZWxkcyBnZXQgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcy4gKilcbmxldCBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGogPVxuICAoKiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZm9ybWF0dGVyIGNvbnRhaW5zIGEgZHVtbXkgYm94LiAqKVxuICBsZXQgcHBfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgbGV0IHN5c190b2sgPVxuICAgIHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF9iZWdpbiAoMCwgUHBfaG92Ym94KTsgbGVuZ3RoID0gMCB9IGluXG4gIFF1ZXVlLmFkZCBzeXNfdG9rIHBwX3F1ZXVlO1xuICBsZXQgc2Nhbl9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKSBpblxuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc2Nhbl9zdGFjaztcbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAxOyBxdWV1ZV9lbGVtID0gc3lzX3RvayB9IHNjYW5fc3RhY2s7XG4gIGxldCBwcF9tYXJnaW4gPSA3OFxuICBhbmQgcHBfbWluX3NwYWNlX2xlZnQgPSAxMCBpblxuICB7XG4gICAgcHBfc2Nhbl9zdGFjayA9IHNjYW5fc3RhY2s7XG4gICAgcHBfZm9ybWF0X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3Rib3hfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGFnX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmtfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFyZ2luID0gcHBfbWFyZ2luO1xuICAgIHBwX21pbl9zcGFjZV9sZWZ0ID0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW47XG4gICAgcHBfY3VycmVudF9pbmRlbnQgPSAwO1xuICAgIHBwX2lzX25ld19saW5lID0gdHJ1ZTtcbiAgICBwcF9sZWZ0X3RvdGFsID0gMTtcbiAgICBwcF9yaWdodF90b3RhbCA9IDE7XG4gICAgcHBfY3Vycl9kZXB0aCA9IDE7XG4gICAgcHBfbWF4X2JveGVzID0gbWF4X2ludDtcbiAgICBwcF9lbGxpcHNpcyA9IFwiLlwiO1xuICAgIHBwX291dF9zdHJpbmcgPSBmO1xuICAgIHBwX291dF9mbHVzaCA9IGc7XG4gICAgcHBfb3V0X25ld2xpbmUgPSBoO1xuICAgIHBwX291dF9zcGFjZXMgPSBpO1xuICAgIHBwX291dF9pbmRlbnQgPSBqO1xuICAgIHBwX3ByaW50X3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX29wZW5fdGFnID0gZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnO1xuICAgIHBwX21hcmtfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZztcbiAgICBwcF9wcmludF9vcGVuX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWc7XG4gICAgcHBfcHJpbnRfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWc7XG4gICAgcHBfcXVldWUgPSBwcF9xdWV1ZTtcbiAgfVxuXG5cbigqIEJ1aWxkIGEgZm9ybWF0dGVyIG91dCBvZiBpdHMgb3V0IGZ1bmN0aW9ucy4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyBvdXRfZnVucyA9XG4gIHBwX21ha2VfZm9ybWF0dGVyXG4gICAgb3V0X2Z1bnMub3V0X3N0cmluZ1xuICAgIG91dF9mdW5zLm91dF9mbHVzaFxuICAgIG91dF9mdW5zLm91dF9uZXdsaW5lXG4gICAgb3V0X2Z1bnMub3V0X3NwYWNlc1xuICAgIG91dF9mdW5zLm91dF9pbmRlbnRcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdpdGggZGVmYXVsdCBmdW5jdGlvbnMgdG8gb3V0cHV0IHNwYWNlcyxcbiAgaW5kZW50YXRpb24sIGFuZCBuZXcgbGluZXMuICopXG5sZXQgbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgbGV0IHBwZiA9IHBwX21ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCBpZ25vcmUgaWdub3JlIGlnbm9yZSBpblxuICBwcGYucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHBwZjtcbiAgcHBmLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3MgcHBmO1xuICBwcGYucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBwcGY7XG4gIHBwZlxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyA9XG4gIG1ha2VfZm9ybWF0dGVyIChvdXRwdXRfc3Vic3RyaW5nIG9jKSAoZnVuICgpIC0+IGZsdXNoIG9jKVxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtCdWZmZXIudF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX2J1ZmZlciBiID1cbiAgbWFrZV9mb3JtYXR0ZXIgKEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIpIGlnbm9yZVxuXG5cbigqIEFsbG9jYXRpbmcgYnVmZmVyIGZvciBwcmV0dHktcHJpbnRpbmcgcHVycG9zZXMuXG4gICBEZWZhdWx0IGJ1ZmZlciBzaXplIGlzIHBwX2J1ZmZlcl9zaXplIG9yIDUxMi5cbiopXG5sZXQgcHBfYnVmZmVyX3NpemUgPSA1MTJcbmxldCBwcF9tYWtlX2J1ZmZlciAoKSA9IEJ1ZmZlci5jcmVhdGUgcHBfYnVmZmVyX3NpemVcblxuKCogVGhlIHN0YW5kYXJkIChzaGFyZWQpIGJ1ZmZlci4gKilcbmxldCBzdGRidWYgPSBwcF9tYWtlX2J1ZmZlciAoKVxuXG4oKiBQcmVkZWZpbmVkIGZvcm1hdHRlcnMgc3RhbmRhcmQgZm9ybWF0dGVyIHRvIHByaW50XG4gICB0byBbU3RkbGliLnN0ZG91dF0sIFtTdGRsaWIuc3RkZXJyXSwgYW5kIHshc3RkYnVmfS4gKilcbmxldCBzdGRfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRvdXRcbmFuZCBlcnJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRlcnJcbmFuZCBzdHJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX2J1ZmZlciBzdGRidWZcblxuXG4oKiBbZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmXSBmbHVzaGVzIGZvcm1hdHRlciBbcHBmXSxcbiAgIHRoZW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgYnVmZmVyIFtidWZdIHRoYXQgaXMgcmVzZXQuXG4gICBGb3JtYXR0ZXIgW3BwZl0gaXMgc3VwcG9zZWQgdG8gcHJpbnQgdG8gYnVmZmVyIFtidWZdLCBvdGhlcndpc2UgdGhpc1xuICAgZnVuY3Rpb24gaXMgbm90IHJlYWxseSB1c2VmdWwuICopXG5sZXQgZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmID1cbiAgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlO1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgQnVmZmVyLnJlc2V0IGJ1ZjtcbiAgc1xuXG5cbigqIEZsdXNoIFtzdHJfZm9ybWF0dGVyXSBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBbc3RkYnVmXS4gKilcbmxldCBmbHVzaF9zdHJfZm9ybWF0dGVyICgpID0gZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBzdGRidWYgc3RyX2Zvcm1hdHRlclxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmdcbiopXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZyBpcyBwcmV0dHktcHJpbnRpbmcgd2l0aCBubyBsb3cgbGV2ZWwgb3V0cHV0LlxuXG4gIFdoZW4gdXNpbmcgYSBzeW1ib2xpYyBmb3JtYXR0ZXIsIGFsbCByZWd1bGFyIHByZXR0eS1wcmludGluZyBhY3Rpdml0aWVzXG4gIG9jY3VyIGJ1dCBvdXRwdXQgbWF0ZXJpYWwgaXMgc3ltYm9saWMgYW5kIHN0b3JlZCBpbiBhIGJ1ZmZlciBvZiBvdXRwdXRcbiAgaXRlbXMuIEF0IHRoZSBlbmQgb2YgcHJldHR5LXByaW50aW5nLCBmbHVzaGluZyB0aGUgb3V0cHV0IGJ1ZmZlciBhbGxvd3NcbiAgcG9zdC1wcm9jZXNzaW5nIG9mIHN5bWJvbGljIG91dHB1dCBiZWZvcmUgbG93IGxldmVsIG91dHB1dCBvcGVyYXRpb25zLlxuKilcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfaXRlbSA9XG4gIHwgT3V0cHV0X2ZsdXNoXG4gIHwgT3V0cHV0X25ld2xpbmVcbiAgfCBPdXRwdXRfc3RyaW5nIG9mIHN0cmluZ1xuICB8IE91dHB1dF9zcGFjZXMgb2YgaW50XG4gIHwgT3V0cHV0X2luZGVudCBvZiBpbnRcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfYnVmZmVyID0ge1xuICBtdXRhYmxlIHN5bWJvbGljX291dHB1dF9jb250ZW50cyA6IHN5bWJvbGljX291dHB1dF9pdGVtIGxpc3Q7XG59XG5cbmxldCBtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIgKCkgPVxuICB7IHN5bWJvbGljX291dHB1dF9jb250ZW50cyA9IFtdIH1cblxubGV0IGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBbXVxuXG5sZXQgZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgTGlzdC5yZXYgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgaXRlbXMgPSBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgaW5cbiAgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2I7XG4gIGl0ZW1zXG5cbmxldCBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIGl0ZW0gPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIGl0ZW0gOjogc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IHN5bWJvbGljX2ZsdXNoIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfZmx1c2hcbiAgYW5kIHN5bWJvbGljX25ld2xpbmUgc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9uZXdsaW5lXG4gIGFuZCBzeW1ib2xpY19zdHJpbmcgc29iIHMgaSBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKSlcbiAgYW5kIHN5bWJvbGljX3NwYWNlcyBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3NwYWNlcyBuKVxuICBhbmQgc3ltYm9saWNfaW5kZW50IHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfaW5kZW50IG4pIGluXG5cbiAgbGV0IGYgPSBzeW1ib2xpY19zdHJpbmcgc29iXG4gIGFuZCBnID0gc3ltYm9saWNfZmx1c2ggc29iXG4gIGFuZCBoID0gc3ltYm9saWNfbmV3bGluZSBzb2JcbiAgYW5kIGkgPSBzeW1ib2xpY19zcGFjZXMgc29iXG4gIGFuZCBqID0gc3ltYm9saWNfaW5kZW50IHNvYiBpblxuICBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGpcblxuKCpcblxuICBCYXNpYyBmdW5jdGlvbnMgb24gdGhlICdzdGFuZGFyZCcgZm9ybWF0dGVyXG4gICh0aGUgZm9ybWF0dGVyIHRoYXQgcHJpbnRzIHRvIFtTdGRsaWIuc3Rkb3V0XSkuXG5cbiopXG5cbmxldCBvcGVuX2hib3ggPSBwcF9vcGVuX2hib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdmJveCA9IHBwX29wZW5fdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9odmJveCA9IHBwX29wZW5faHZib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faG92Ym94ID0gcHBfb3Blbl9ob3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fYm94ID0gcHBfb3Blbl9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX2JveCA9IHBwX2Nsb3NlX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl90YWcgPSBwcF9vcGVuX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGFnID0gcHBfY2xvc2VfdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3N0YWcgPSBwcF9vcGVuX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3N0YWcgPSBwcF9jbG9zZV9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9hcyA9IHBwX3ByaW50X2FzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zdHJpbmcgPSBwcF9wcmludF9zdHJpbmcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2J5dGVzID0gcHBfcHJpbnRfYnl0ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ludCA9IHBwX3ByaW50X2ludCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmxvYXQgPSBwcF9wcmludF9mbG9hdCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY2hhciA9IHBwX3ByaW50X2NoYXIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Jvb2wgPSBwcF9wcmludF9ib29sIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9icmVhayA9IHBwX3ByaW50X2JyZWFrIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jdXQgPSBwcF9wcmludF9jdXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3NwYWNlID0gcHBfcHJpbnRfc3BhY2Ugc3RkX2Zvcm1hdHRlclxuYW5kIGZvcmNlX25ld2xpbmUgPSBwcF9mb3JjZV9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbHVzaCA9IHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9uZXdsaW5lID0gcHBfcHJpbnRfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaWZfbmV3bGluZSA9IHBwX3ByaW50X2lmX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuXG5hbmQgb3Blbl90Ym94ID0gcHBfb3Blbl90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90Ym94ID0gcHBfY2xvc2VfdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGJyZWFrID0gcHBfcHJpbnRfdGJyZWFrIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF90YWIgPSBwcF9zZXRfdGFiIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YWIgPSBwcF9wcmludF90YWIgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21hcmdpbiA9IHBwX3NldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfaW5kZW50ID0gcHBfc2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2dlb21ldHJ5ID0gcHBfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBzYWZlX3NldF9nZW9tZXRyeSA9IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHVwZGF0ZV9nZW9tZXRyeSA9IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2JveGVzID0gcHBfc2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9ib3hlcyA9IHBwX2dldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIG92ZXJfbWF4X2JveGVzID0gcHBfb3Zlcl9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgPSBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgPSBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9wcmludF90YWdzID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9wcmludF90YWdzID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9tYXJrX3RhZ3MgPVxuICBwcF9zZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFya190YWdzID1cbiAgcHBfZ2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3RhZ3MgPVxuICBwcF9zZXRfdGFncyBzdGRfZm9ybWF0dGVyXG5cblxuKCogQ29udmVuaWVuY2UgZnVuY3Rpb25zICopXG5cbigqIFRvIGZvcm1hdCBhIGxpc3QgKilcbmxldCByZWMgcHBfcHJpbnRfbGlzdCA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgPSBmdW5jdGlvblxuICB8IFtdIC0+ICgpXG4gIHwgW3ZdIC0+IHBwX3YgcHBmIHZcbiAgfCB2IDo6IHZzIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3ByaW50X2xpc3QgfnBwX3NlcCBwcF92IHBwZiB2c1xuXG4oKiBUbyBmb3JtYXQgYSBzZXF1ZW5jZSAqKVxubGV0IHJlYyBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxubGV0IHBwX3ByaW50X3NlcSA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG4oKiBUbyBmb3JtYXQgZnJlZS1mbG93aW5nIHRleHQgKilcbmxldCBwcF9wcmludF90ZXh0IHBwZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbGVmdCA9IHJlZiAwIGluXG4gIGxldCByaWdodCA9IHJlZiAwIGluXG4gIGxldCBmbHVzaCAoKSA9XG4gICAgcHBfcHJpbnRfc3RyaW5nIHBwZiAoU3RyaW5nLnN1YiBzICFsZWZ0ICghcmlnaHQgLSAhbGVmdCkpO1xuICAgIGluY3IgcmlnaHQ7IGxlZnQgOj0gIXJpZ2h0O1xuICBpblxuICB3aGlsZSAoIXJpZ2h0IDw+IGxlbikgZG9cbiAgICBtYXRjaCBzLlshcmlnaHRdIHdpdGhcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgZmx1c2ggKCk7XG4gICAgICAgIHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBmbHVzaCAoKTsgcHBfcHJpbnRfc3BhY2UgcHBmICgpXG4gICAgICAoKiB0aGVyZSBpcyBubyBzcGVjaWZpYyBzdXBwb3J0IGZvciAnXFx0J1xuICAgICAgICAgYXMgaXQgaXMgdW5jbGVhciB3aGF0IGEgcmlnaHQgc2VtYW50aWNzIHdvdWxkIGJlICopXG4gICAgICB8IF8gLT4gaW5jciByaWdodFxuICBkb25lO1xuICBpZiAhbGVmdCA8PiBsZW4gdGhlbiBmbHVzaCAoKVxuXG5sZXQgcHBfcHJpbnRfb3B0aW9uID8obm9uZSA9IGZ1biBfICgpIC0+ICgpKSBwcF92IHBwZiA9IGZ1bmN0aW9uXG58IE5vbmUgLT4gbm9uZSBwcGYgKClcbnwgU29tZSB2IC0+IHBwX3YgcHBmIHZcblxubGV0IHBwX3ByaW50X3Jlc3VsdCB+b2sgfmVycm9yIHBwZiA9IGZ1bmN0aW9uXG58IE9rIHYgLT4gb2sgcHBmIHZcbnwgRXJyb3IgZSAtPiBlcnJvciBwcGYgZVxuXG5sZXQgcHBfcHJpbnRfZWl0aGVyIH5sZWZ0IH5yaWdodCBwcGYgPSBmdW5jdGlvblxufCBFaXRoZXIuTGVmdCBsIC0+IGxlZnQgcHBmIGxcbnwgRWl0aGVyLlJpZ2h0IHIgLT4gcmlnaHQgcHBmIHJcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGNvbXB1dGVfdGFnIG91dHB1dCB0YWdfYWNjID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIG91dHB1dCBwcGYgdGFnX2FjYztcbiAgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICBsZXQgbGVuID0gQnVmZmVyLmxlbmd0aCBidWYgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgZWxzZSBCdWZmZXIuc3ViIGJ1ZiAxIChsZW4gLSAyKVxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgRGVmaW5pbmcgY29udGludWF0aW9ucyB0byBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIG9mXG4gIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi5cblxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIEludGVycHJldCBhIGZvcm1hdHRpbmcgZW50aXR5IG9uIGEgZm9ybWF0dGVyLiAqKVxubGV0IG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZm10aW5nX2xpdCA9IG1hdGNoIGZtdGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfYm94IHBwZiAoKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRfZm9ybWF0dGVyIGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBlcnJfZm9ybWF0dGVyIGZtdFxuXG5sZXQga2RwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gayAoZnVuIHBwZiAtPiBvdXRwdXRfYWNjIHBwZiBhY2MpKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBkcHJpbnRmIGZtdCA9IGtkcHJpbnRmIChmdW4gaSAtPiBpKSBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBzdHJwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIGlkIGZtdFxuXG5sZXQga2FzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBvdXRwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBhc3ByaW50ZiBmbXQgPSBrYXNwcmludGYgaWQgZm10XG5cbigqIEZsdXNoaW5nIHN0YW5kYXJkIGZvcm1hdHRlcnMgYXQgZW5kIG9mIGV4ZWN1dGlvbi4gKilcblxubGV0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMgKCkgPVxuICBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyICgpO1xuICBwcF9wcmludF9mbHVzaCBlcnJfZm9ybWF0dGVyICgpXG5cbmxldCAoKSA9IGF0X2V4aXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVyc1xuXG4oKlxuXG4gIERlcHJlY2F0ZWQgc3R1ZmYuXG5cbiopXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlXG4gICAgfm91dDpmIH5mbHVzaDpnIH5uZXdsaW5lOmggfnNwYWNlczppID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaCxcbiAgIHN0YXRlLnBwX291dF9uZXdsaW5lLCBzdGF0ZS5wcF9vdXRfc3BhY2VzKVxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBzZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IGdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogZXJyb3IgcHJvbmUgZnVuY3Rpb24sIGRvIG5vdCB1c2UgaXQuXG4gICBUaGlzIGZ1bmN0aW9uIGlzIG5laXRoZXIgY29tcG9zaXRpb25hbCBub3IgaW5jcmVtZW50YWwsIHNpbmNlIGl0IGZsdXNoZXNcbiAgIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhdCBlYWNoIGNhbGwuXG4gICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgZGVmaW5lIGEgZm9ybWF0dGVyIG9mIHlvdXIgb3duIHdyaXRpbmcgdG9cbiAgIHRoZSBidWZmZXIgYXJndW1lbnQsIGFzIGluXG4gICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiXG4gICB0aGVuIHVzZSB7IWZwcmludGYgcHBmfSBhcyB1c3VhbC4gKilcbmxldCBicHJpbnRmIGIgKEZvcm1hdCAoZm10LCBfKSA6ICgnYSwgZm9ybWF0dGVyLCB1bml0KSBmb3JtYXQpID1cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPSBvdXRwdXRfYWNjIHBwZiBhY2M7IHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxuKCogRGVwcmVjYXRlZCA6IGFsaWFzIGZvciBrc3ByaW50Zi4gKilcbmxldCBrcHJpbnRmID0ga3NwcmludGZcblxuXG5cbigqIERlcHJlY2F0ZWQgdGFnIGZ1bmN0aW9ucyAqKVxuXG50eXBlIGZvcm1hdHRlcl90YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fdGFnIDogdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3RhZyA6IHRhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV90YWcgOiB0YWcgLT4gdW5pdDtcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV90YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV90YWcgPSBwY3Q7XG4gICB9ID1cbiAgbGV0IHN0cmluZ2lmeSBmIGUgPSBmdW5jdGlvbiBTdHJpbmdfdGFnIHMgLT4gZiBzIHwgXyAtPiBlIGluXG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gc3RyaW5naWZ5IG1vdCBcIlwiO1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgbWN0IFwiXCI7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHN0cmluZ2lmeSBwb3QgKCk7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgcGN0ICgpXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgZm10ICgpID1cbiAgbGV0IGZ1bnMgPSBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIGZtdCAoKSBpblxuICBsZXQgbWFya19vcGVuX3RhZyBzID0gZnVucy5tYXJrX29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgbWFya19jbG9zZV90YWcgcyA9IGZ1bnMubWFya19jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9vcGVuX3RhZyBzID0gZnVucy5wcmludF9vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X2Nsb3NlX3RhZyBzID0gZnVucy5wcmludF9jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIHttYXJrX29wZW5fdGFnOyBtYXJrX2Nsb3NlX3RhZzsgcHJpbnRfb3Blbl90YWc7IHByaW50X2Nsb3NlX3RhZ31cblxubGV0IHNldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUmVnaXN0ZXJpbmcgT0NhbWwgdmFsdWVzIHdpdGggdGhlIEMgcnVudGltZSBmb3IgbGF0ZXIgY2FsbGJhY2tzICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+IE9iai50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0IHJlZ2lzdGVyIG5hbWUgdiA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgKE9iai5yZXByIHYpXG5cbmxldCByZWdpc3Rlcl9leGNlcHRpb24gbmFtZSAoZXhuIDogZXhuKSA9XG4gIGxldCBleG4gPSBPYmoucmVwciBleG4gaW5cbiAgbGV0IHNsb3QgPSBpZiBPYmoudGFnIGV4biA9IE9iai5vYmplY3RfdGFnIHRoZW4gZXhuIGVsc2UgT2JqLmZpZWxkIGV4biAwIGluXG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgc2xvdFxuIiwibW9kdWxlIEpzID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIHR5cGUgJ2EganNfYXJyYXkgPSB0XG5cbiAgdHlwZSAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrID0gdFxuXG4gIGV4dGVybmFsIHN0cmluZyA6IHN0cmluZyAtPiB0ID0gXCJjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fc3RyaW5nIDogdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXCJcblxuICBleHRlcm5hbCBieXRlc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNieXRlc19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX2J5dGVzdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNieXRlc1wiXG5cbiAgZXh0ZXJuYWwgYm9vbCA6IGJvb2wgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Jvb2xcIlxuXG4gIGV4dGVybmFsIHRvX2Jvb2wgOiB0IC0+IGJvb2wgPSBcImNhbWxfanNfdG9fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgYXJyYXkgOiAnYSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2FycmF5IDogdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9qc190b19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX2Zsb2F0IDogZmxvYXQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Zsb2F0XCJcblxuICBleHRlcm5hbCBmbG9hdF9vZl9udW1iZXIgOiB0IC0+IGZsb2F0ID0gXCJjYW1sX2pzX3RvX2Zsb2F0XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfaW50MzIgOiBpbnQzMiAtPiB0ID0gXCJjYW1sX2pzX2Zyb21faW50MzJcIlxuXG4gIGV4dGVybmFsIGludDMyX29mX251bWJlciA6IHQgLT4gaW50MzIgPSBcImNhbWxfanNfdG9faW50MzJcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9uYXRpdmVpbnQgOiBuYXRpdmVpbnQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgbmF0aXZlaW50X29mX251bWJlciA6IHQgLT4gbmF0aXZlaW50ID0gXCJjYW1sX2pzX3RvX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgdHlwZW9mIDogdCAtPiB0ID0gXCJjYW1sX2pzX3R5cGVvZlwiXG5cbiAgZXh0ZXJuYWwgaW5zdGFuY2VvZiA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2luc3RhbmNlb2ZcIlxuXG4gIGV4dGVybmFsIGRlYnVnZ2VyIDogdW5pdCAtPiB1bml0ID0gXCJkZWJ1Z2dlclwiXG5cbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiB0IC0+IHQgPSBcImNhbWxfanNfZ2V0XCJcblxuICBleHRlcm5hbCBzZXQgOiB0IC0+IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2pzX3NldFwiXG5cbiAgZXh0ZXJuYWwgZGVsZXRlIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfZGVsZXRlXCJcblxuICBleHRlcm5hbCBjYWxsIDogdCAtPiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19jYWxsXCJcblxuICBleHRlcm5hbCBmdW5fY2FsbCA6IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Z1bl9jYWxsXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGwgOiB0IC0+IHN0cmluZyAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbWV0aF9jYWxsXCJcblxuICBleHRlcm5hbCBuZXdfb2JqIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbmV3XCJcblxuICBleHRlcm5hbCBuZXdfb2JqX2FyciA6IHQgLT4gdCBqc19hcnJheSAtPiB0ID0gXCJjYW1sX29qc19uZXdfYXJyXCJcblxuICBleHRlcm5hbCBvYmogOiAoc3RyaW5nICogdCkgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19vYmplY3RcIlxuXG4gIGV4dGVybmFsIGVxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHB1cmVfZXhwciA6ICh1bml0IC0+ICdhKSAtPiAnYSA9IFwiY2FtbF9qc19wdXJlX2V4cHJcIlxuXG4gIGV4dGVybmFsIGV2YWxfc3RyaW5nIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V2YWxfc3RyaW5nXCJcblxuICBleHRlcm5hbCBqc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIHB1cmVfanNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9wdXJlX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAodCBqc19hcnJheSAtPiAnYikgLT4gKCdjLCB0IGpzX2FycmF5IC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3RcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgKCdiIC0+IHQganNfYXJyYXkgLT4gJ2EpIC0+ICgnYiwgdCBqc19hcnJheSAtPiAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIHdyYXBfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrXCJcblxuICBleHRlcm5hbCB3cmFwX21ldGhfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tcIlxuZW5kXG5cbm1vZHVsZSBTeXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBjYWxsYmFjayA9ICdhXG5cbiAgZXh0ZXJuYWwgY3JlYXRlX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBjb250ZW50OnN0cmluZyAtPiB1bml0ID0gXCJjYW1sX2NyZWF0ZV9maWxlXCJcblxuICBleHRlcm5hbCByZWFkX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfcmVhZF9maWxlX2NvbnRlbnRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX291dHB1dCcgOiBvdXRfY2hhbm5lbCAtPiAoanNfc3RyaW5nOkpzLnQgLT4gdW5pdCkgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfaW5wdXQnIDogaW5fY2hhbm5lbCAtPiAodW5pdCAtPiBzdHJpbmcpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcIlxuXG4gIGV4dGVybmFsIG1vdW50X3BvaW50IDogdW5pdCAtPiBzdHJpbmcgbGlzdCA9IFwiY2FtbF9saXN0X21vdW50X3BvaW50XCJcblxuICBleHRlcm5hbCBtb3VudF9hdXRvbG9hZCA6IHN0cmluZyAtPiAoc3RyaW5nIC0+IHN0cmluZyAtPiBzdHJpbmcgb3B0aW9uKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbW91bnRfYXV0b2xvYWRcIlxuXG4gIGV4dGVybmFsIHVubW91bnQgOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF91bm1vdW50XCJcblxuICB0eXBlIHJlZGlyZWN0aW9uXG5cbiAgZXh0ZXJuYWwgcmVkaXJlY3RfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IGludG86b3V0X2NoYW5uZWwgLT4gcmVkaXJlY3Rpb25cbiAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XCJcblxuICBleHRlcm5hbCByZXN0b3JlX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiByZWRpcmVjdGlvbiAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfY2hhbm5lbF9yZXN0b3JlXCJcblxuICBtb2R1bGUgQ29uZmlnID0gc3RydWN0XG4gICAgZXh0ZXJuYWwgdXNlX2pzX3N0cmluZyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmdcIlxuXG4gICAgZXh0ZXJuYWwgZWZmZWN0cyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHNcIlxuICBlbmRcblxuICBsZXQgdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5zXG5cbiAgbGV0IGdpdF92ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLmdpdF92ZXJzaW9uXG5lbmRcblxubW9kdWxlIEVycm9yIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCByYWlzZV8gOiB0IC0+ICdhXG5cbiAgdmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG5cbiAgKCoqIEF0dGFjaCBhIEphdmFzU2NyaXB0IGVycm9yIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbi4gIGlmIFtmb3JjZSA9IGZhbHNlXSBhbmQgYVxuICAgIEphdmFzU2NyaXB0IGVycm9yIGlzIGFscmVhZHkgYXR0YWNoZWQsIGl0IHdpbGwgZG8gbm90aGluZy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgdG9cbiAgICBzdG9yZSBhbmQgcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgSmF2YVNjcmlwdCBzdGFjayB0cmFjZXMuXG5cbiAgICBBdHRhY2hpbmcgSmF2YXNTY3JpcHQgZXJyb3JzIHdpbGwgaGFwcGVuIGF1dG9tYXRpY2FsbHkgd2hlbiBjb21waWxpbmcgd2l0aFxuICAgIFstLWVuYWJsZSB3aXRoLWpzLWVycm9yXS4gKilcblxuICB2YWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uXG4gICgqKiBFeHRyYWN0IGEgSmF2YVNjcmlwdCBlcnJvciBhdHRhY2hlZCB0byBhbiBPQ2FtbCBleGNlcHRpb24sIGlmIGFueS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICAgICBpbnNwZWN0IGFuIGV2ZW50dWFsIHN0YWNrIHN0cmFjZSwgZXNwZWNpYWxseSB3aGVuIHNvdXJjZW1hcCBpcyBlbmFibGVkLiAqKVxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuICAoKiogVGhlIFtFcnJvcl0gZXhjZXB0aW9uIHdyYXAgamF2YXNjcmlwdCBleGNlcHRpb25zIHdoZW4gY2F1Z2h0IGJ5IE9DYW1sIGNvZGUuXG4gICAgICBJbiBjYXNlIHRoZSBqYXZhc2NyaXB0IGV4Y2VwdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgamF2YXNjcmlwdCBbRXJyb3JdLFxuICAgICAgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFuZCB3cmFwcGVkIGludG8gYSBbRmFpbHVyZV0gZXhjZXB0aW9uLlxuICAqKVxuZW5kID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuXG4gIGxldCBfID0gQ2FsbGJhY2sucmVnaXN0ZXJfZXhjZXB0aW9uIFwianNFcnJvclwiIChFeG4gKE9iai5tYWdpYyBbfHxdKSlcblxuICBsZXQgcmFpc2VfIDogdCAtPiAnYSA9IEpzLmpzX2V4cHIgXCIoZnVuY3Rpb24gKGV4bikgeyB0aHJvdyBleG4gfSlcIlxuXG4gIGV4dGVybmFsIG9mX2V4biA6IGV4biAtPiB0IG9wdGlvbiA9IFwiY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXCJcblxuICBleHRlcm5hbCBhdHRhY2hfanNfYmFja3RyYWNlIDogZXhuIC0+IGZvcmNlOmJvb2wgLT4gZXhuID0gXCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVwiXG5lbmRcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzItNjBcIl1cblxubW9kdWxlIEZvcl9jb21wYXRpYmlsaXR5X29ubHkgPSBzdHJ1Y3RcbiAgKCogQWRkIHByaW1pdGl2ZXMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gRXhpc3RpbmcgdXNlcnMgbWlnaHRcbiAgICAgZGVwZW5kIG9uIGl0IChlLmcuIGdlbl9qc19hcGkpLCB3ZSBkb250IHdhbnQgdGhlIG9jYW1sIGNvbXBpbGVyXG4gICAgIHRvIGNvbXBsYWluIGFib3V0IHRoZXNlcyBtaXNzaW5nIHByaW1pdGl2ZXMuICopXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc19mcm9tX3N0cmluZyA6IHN0cmluZyAtPiBKcy50ID0gXCJjYW1sX2pzX2Zyb21fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fYnl0ZV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgOiAnYSBKcy5qc19hcnJheSAtPiAnYSBsaXN0ID0gXCJjYW1sX2xpc3Rfb2ZfanNfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF90b19qc19hcnJheSA6ICdhIGxpc3QgLT4gJ2EgSnMuanNfYXJyYXkgPSBcImNhbWxfbGlzdF90b19qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdmFyaWFibGUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfdmFyXCJcbmVuZFxuXG5tb2R1bGUgVHlwZWRfYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiKSB0eXBlZEFycmF5ID0gSnMudFxuXG4gIHR5cGUgYXJyYXlCdWZmZXIgPSBKcy50XG5cbiAgdHlwZSB1aW50OEFycmF5ID0gSnMudFxuXG4gIGV4dGVybmFsIGtpbmQgOiAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IpIEJpZ2FycmF5LmtpbmRcbiAgICA9IFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCBmcm9tX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudCAtPiAoJ2EsICdiKSB0eXBlZEFycmF5XG4gICAgPSBcImNhbWxfYmFfdG9fdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50XG4gICAgPSBcImNhbWxfYmFfZnJvbV90eXBlZF9hcnJheVwiXG5cbiAgbW9kdWxlIEJpZ3N0cmluZyA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IChjaGFyLCBCaWdhcnJheS5pbnQ4X3Vuc2lnbmVkX2VsdCwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkFycmF5MS50XG5cbiAgICBleHRlcm5hbCB0b19hcnJheUJ1ZmZlciA6IHQgLT4gYXJyYXlCdWZmZXIgPSBcImJpZ3N0cmluZ190b19hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgdG9fdWludDhBcnJheSA6IHQgLT4gdWludDhBcnJheSA9IFwiYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5XCJcblxuICAgIGV4dGVybmFsIG9mX2FycmF5QnVmZmVyIDogYXJyYXlCdWZmZXIgLT4gdCA9IFwiYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXlcIlxuICBlbmRcblxuICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2FycmF5XCJcbmVuZFxuXG5tb2R1bGUgSW50NjQgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlX2ludDY0X2xvX21pX2hpIDogaW50IC0+IGludCAtPiBpbnQgLT4gSW50NjQudFxuICAgID0gXCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVwiXG5lbmRcbiIsIm9wZW4gQnJyXG5cbm1vZHVsZSBLZXlfcGF0aCA9IHN0cnVjdFxuICB0eXBlIHQgPSBJZCBvZiBzdHJpbmcgfCBTIG9mIHQgYXJyYXlcblxuICBsZXQgcmVjIHRvX2p2ID0gZnVuY3Rpb25cbiAgICB8IElkIHAgLT4gSnYub2Zfc3RyaW5nIHBcbiAgICB8IFMga2V5cyAtPiBKdi5vZl9hcnJheSB0b19qdiBrZXlzXG5lbmRcblxubW9kdWxlIEtleV9yYW5nZSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCBib3VuZCB+bG93ZXIgfnVwcGVyID8obG93ZXJfb3BlbiA9IGZhbHNlKSA/KHVwcGVyX29wZW4gPSBmYWxzZSkgKCkgPVxuICAgIGxldCBjID0gSnYuZ2V0IEp2Lmdsb2JhbCBcIklEQktleVJhbmdlXCIgaW5cbiAgICBKdi5jYWxsIGMgXCJib3VuZFwiXG4gICAgICBbfCBsb3dlcjsgdXBwZXI7IEp2Lm9mX2Jvb2wgbG93ZXJfb3BlbjsgSnYub2ZfYm9vbCB1cHBlcl9vcGVuIHxdXG5lbmRcblxubW9kdWxlIEV2ZW50cyA9IHN0cnVjdFxuICBtb2R1bGUgVmVyc2lvbl9jaGFuZ2UgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBKdi50XG5cbiAgICBsZXQgb2xkX3ZlcnNpb24gdCA9IEp2LnRvX2ludCBAQCBKdi5nZXQgdCBcIm9sZFZlcnNpb25cIlxuICAgIGxldCBuZXdfdmVyc2lvbiB0ID0gSnYudG9faW50IEBAIEp2LmdldCB0IFwibmV3VmVyc2lvblwiXG4gIGVuZFxuXG4gIGxldCB1cGdyYWRlX25lZWRlZCA6IFZlcnNpb25fY2hhbmdlLnQgRXYudHlwZScgPVxuICAgIEV2LlR5cGUuY3JlYXRlIChKc3RyLnYgXCJ1cGdyYWRlbmVlZGVkXCIpXG5cbiAgbGV0IHN1Y2Nlc3MgOiBFdi5UeXBlLnZvaWQgRXYudHlwZScgPSBFdi5UeXBlLnZvaWQgKEpzdHIudiBcInN1Y2Nlc3NcIilcbiAgbGV0IGVycm9yIDogRXYuVHlwZS52b2lkIEV2LnR5cGUnID0gRXYuVHlwZS52b2lkIChKc3RyLnYgXCJlcnJvclwiKVxuZW5kXG5cbm1vZHVsZSBSZXF1ZXN0ID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9IHsganYgOiBKdi50OyBvZl9qdiA6IEp2LnQgLT4gJ2EgfVxuXG4gIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgb2ZfanYgfmYgaiA9IHsganYgPSBvZl9qdiBqOyBvZl9qdiA9IGYgfVxuICBsZXQgZXJyb3IgdCA9IEp2LmdldCB0Lmp2IFwiZXJyb3JcIiB8PiBKdi50b19lcnJvclxuXG4gIGxldCByZXN1bHQgKHR5cGUgYSkgKHQgOiBhIHQpIDogYSA9XG4gICAgKCogdG9kbyB0aGlzIGlzIHdyb25nICopXG4gICAgSnYuZ2V0IHQuanYgXCJyZXN1bHRcIiB8PiB0Lm9mX2p2XG5cbiAgbGV0IG9uX3N1Y2Nlc3MgKHR5cGUgYSkgfihmIDogRXYuVHlwZS52b2lkIEV2LnQgLT4gYSB0IC0+IHVuaXQpICh0IDogYSB0KSA9XG4gICAgbGV0IGYgZXYgPSBmIGV2IHQgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy5zdWNjZXNzIGYgKEV2LnRhcmdldF9vZl9qdiB0Lmp2KTtcbiAgICB0XG5cbiAgbGV0IG9uX2Vycm9yICh0eXBlIGEpIH4oZiA6IEV2LlR5cGUudm9pZCBFdi50IC0+IGEgdCAtPiB1bml0KSAodCA6IGEgdCkgPVxuICAgIGxldCBmIGV2ID0gZiBldiB0IGluXG4gICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdmVudHMuZXJyb3IgZiAoRXYudGFyZ2V0X29mX2p2IHQuanYpO1xuICAgIHRcblxuICBsZXQgZnV0IHQgPVxuICAgIGxldCByZXN1bHRfZnV0LCBzZXQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgbGV0IF8gPSBvbl9zdWNjZXNzIH5mOihmdW4gXyB0IC0+IHNldCAoT2sgKHJlc3VsdCB0KSkpIHQgaW5cbiAgICBsZXQgXyA9IG9uX2Vycm9yIH5mOihmdW4gXyB0IC0+IHNldCAoRXJyb3IgKGVycm9yIHQpKSkgdCBpblxuICAgIHJlc3VsdF9mdXRcbmVuZFxuXG5tb2R1bGUgdHlwZSBLZXkgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHBhdGggOiBLZXlfcGF0aC50XG4gIHZhbCB0b19qdiA6IHQgLT4gSnYudFxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbmVuZFxuXG5tb2R1bGUgdHlwZSBTdG9yZV9jb250ZW50X2ludGYgPSBzaWdcbiAgdHlwZSB0XG5cbiAgbW9kdWxlIEtleSA6IEtleVxuXG4gIHZhbCBuYW1lIDogc3RyaW5nXG4gIHZhbCB0b19qdiA6IHQgLT4gSnYudFxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbiAgdmFsIGdldF9rZXkgOiB0IC0+IEtleS50XG5lbmRcblxubW9kdWxlIERpcmVjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBOZXh0IHwgTmV4dF91bmlxdWUgfCBQcmV2IHwgUHJldl91bmlxdWVcblxuICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IE5leHQgLT4gXCJuZXh0XCJcbiAgICB8IE5leHRfdW5pcXVlIC0+IFwibmV4dFVuaXF1ZVwiXG4gICAgfCBQcmV2IC0+IFwicHJldlwiXG4gICAgfCBQcmV2X3VuaXF1ZSAtPiBcInByZXZVbmlxdWVcIlxuXG4gIGxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJuZXh0XCIgLT4gTmV4dFxuICAgIHwgXCJuZXh0VW5pcXVlXCIgLT4gTmV4dF91bmlxdWVcbiAgICB8IFwicHJldlwiIC0+IFByZXZcbiAgICB8IFwicHJldlVuaXF1ZVwiIC0+IFByZXZfdW5pcXVlXG4gICAgfCBzIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbiAgbGV0IHRvX2p2IGQgPSBKdi5vZl9zdHJpbmcgKHRvX3N0cmluZyBkKVxuICBsZXQgb2ZfanYgaiA9IG9mX3N0cmluZyAoSnYudG9fc3RyaW5nIGopXG5lbmRcblxubW9kdWxlIENvbnRlbnRfYWNjZXNzIChDb250ZW50IDogU3RvcmVfY29udGVudF9pbnRmKSAoS2V5IDogS2V5KSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IGNvdW50ICgpIHQgPSBKdi5jYWxsIHQgXCJjb3VudFwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZjpKdi50b19pbnRcblxuICBsZXQgZ2V0IGtleSB0ID1cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiAoZnVuIGogLT4gQ29udGVudC5vZl9qdiBqKSBqdiBpblxuICAgIEp2LmNhbGwgdCBcImdldFwiIFt8IEtleS50b19qdiBrZXkgfF0gfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIGxldCBnZXRfYWxsIHQgPVxuICAgIGxldCBmIGp2ID0gSnYudG9fYXJyYXkgKGZ1biBjIC0+IENvbnRlbnQub2ZfanYgYykganYgaW5cbiAgICBKdi5jYWxsIHQgXCJnZXRBbGxcIiBbfHxdIHw+IFJlcXVlc3Qub2ZfanYgfmZcblxuICBsZXQgZ2V0X2FsbF9rZXlzID9xdWVyeSB0ID1cbiAgICBsZXQgYXJncyA9IG1hdGNoIHF1ZXJ5IHdpdGggTm9uZSAtPiBbfHxdIHwgU29tZSBxdWVyeSAtPiBbfCBxdWVyeSB8XSBpblxuICAgIGxldCBmIGp2ID0gSnYudG9fYXJyYXkgKGZ1biBjIC0+IENvbnRlbnQuS2V5Lm9mX2p2IGMpIGp2IGluXG4gICAgSnYuY2FsbCB0IFwiZ2V0QWxsS2V5c1wiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIG1vZHVsZSBDdXJzb3IgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBKdi50XG5cbiAgICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICAgIGxldCBrZXkgdCA9IEp2LmdldCB0IFwia2V5XCIgfD4gSnYudG9fb3B0aW9uIEtleS5vZl9qdlxuICAgIGxldCBwcmltYXJ5X2tleSB0ID0gSnYuZ2V0IHQgXCJwcmltYXJ5S2V5XCIgfD4gSnYudG9fb3B0aW9uIENvbnRlbnQuS2V5Lm9mX2p2XG5cbiAgICBsZXQgYWR2YW5jZSBjb3VudCB0ID1cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJhZHZhbmNlXCIgW3wgSnYub2ZfaW50IGNvdW50IHxdO1xuICAgICAgdFxuXG4gICAgbGV0IGNvbnRpbnVlID9rZXkgdCA9XG4gICAgICBsZXQgYXJncyA9XG4gICAgICAgIG1hdGNoIGtleSB3aXRoIE5vbmUgLT4gW3x8XSB8IFNvbWUga2V5IC0+IFt8IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgaW5cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJjb250aW51ZVwiIGFyZ3NcbiAgZW5kXG5cbiAgbW9kdWxlIEN1cnNvcl93aXRoX3ZhbHVlID0gc3RydWN0XG4gICAgaW5jbHVkZSBDdXJzb3JcblxuICAgIGxldCB2YWx1ZSB0ID1cbiAgICAgIGxldCBvZl9qdiBqID0gQ29udGVudC5vZl9qdiBqIGluXG4gICAgICBsZXQgdiA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgSnYudG9fb3B0aW9uIG9mX2p2IHZcblxuICAgIGxldCBkZWxldGUgdCA9IEp2LmNhbGwgdCBcImRlbGV0ZVwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZjooZnVuIF8gLT4gKCkpXG5cbiAgICBsZXQgdXBkYXRlIHYgdCA9XG4gICAgICBKdi5jYWxsIHQgXCJ1cGRhdGVcIiBbfCBDb250ZW50LnRvX2p2IHYgfF1cbiAgICAgIHw+IFJlcXVlc3Qub2ZfanYgfmY6Q29udGVudC5LZXkub2ZfanZcbiAgZW5kXG5cbiAgbGV0IG9wZW5fY3Vyc29yID9xdWVyeSA/ZGlyZWN0aW9uIHQgOiBDdXJzb3Jfd2l0aF92YWx1ZS50IG9wdGlvbiBSZXF1ZXN0LnQgPVxuICAgIGxldCBkaXJlY3Rpb24gPSBPcHRpb24ubWFwIERpcmVjdGlvbi50b19qdiBkaXJlY3Rpb24gaW5cbiAgICBsZXQgYXJncyA9XG4gICAgICAoKiB0b2RvOiBxdWVyeSAhKilcbiAgICAgIG1hdGNoIChxdWVyeSwgZGlyZWN0aW9uKSB3aXRoXG4gICAgICB8IFNvbWUgcSwgU29tZSBkIC0+IFt8IHE7IGQgfF1cbiAgICAgIHwgTm9uZSwgU29tZSBkIC0+IFt8IEp2Lm51bGw7IGQgfF1cbiAgICAgIHwgU29tZSBxLCBOb25lIC0+IFt8IHEgfF1cbiAgICAgIHwgTm9uZSwgTm9uZSAtPiBbfHxdXG4gICAgaW5cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiBDdXJzb3Jfd2l0aF92YWx1ZS5vZl9qdiBqdiBpblxuICAgIEp2LmNhbGwgdCBcIm9wZW5DdXJzb3JcIiBhcmdzIHw+IFJlcXVlc3Qub2ZfanYgfmZcblxuICBsZXQgb3Blbl9rZXlfY3Vyc29yID9xdWVyeSA/ZGlyZWN0aW9uIHQgOiBDdXJzb3Jfd2l0aF92YWx1ZS50IG9wdGlvbiBSZXF1ZXN0LnRcbiAgICAgID1cbiAgICBsZXQgZGlyZWN0aW9uID0gT3B0aW9uLm1hcCBEaXJlY3Rpb24udG9fanYgZGlyZWN0aW9uIGluXG4gICAgbGV0IGFyZ3MgPVxuICAgICAgKCogdG9kbzogcXVlcnkgISopXG4gICAgICBtYXRjaCAocXVlcnksIGRpcmVjdGlvbikgd2l0aFxuICAgICAgfCBTb21lIHEsIFNvbWUgZCAtPiBbfCBxOyBkIHxdXG4gICAgICB8IE5vbmUsIFNvbWUgZCAtPiBbfCBKdi5udWxsOyBkIHxdXG4gICAgICB8IFNvbWUgcSwgTm9uZSAtPiBbfCBxIHxdXG4gICAgICB8IE5vbmUsIE5vbmUgLT4gW3x8XVxuICAgIGluXG4gICAgbGV0IGYganYgPSBKdi50b19vcHRpb24gQ3Vyc29yLm9mX2p2IGp2IGluXG4gICAgSnYuY2FsbCB0IFwib3BlbktleUN1cnNvclwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gICgqIFtmb2xkX2tleV0gd2lsbCBmb2xkIG92ZXIgYWxsIGtleXMgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIGN1cnNvci5cbiAgICAgTm90ZSB0aGF0IGl0IGlzIGxlc3MgZWZmaWNpZW50IHRoYW4gW2dldF9hbGxfa2V5c10gdG8gYnVpbGQgYW4gYXJyYXlcbiAgICAgb2YgZXZlcnkga2V5cy4gSXQncyBtb3N0IHByb2JhYmx5IGR1ZSB0byBhIGNhY2hpbmctYmFzZWQgb3B0aW1pemF0aW9uXG4gICAgIG9mIHRoZSBbZ2V0X2FsbF9rZXlzXSByZXN1bHRzIChhdCBsZWFzdCBpbiBGaXJlZm94KS4gKilcbiAgbGV0IGZvbGRfa2V5cyB+aW5pdCB+ZiBjdXJzb3JfcmVxID1cbiAgICBsZXQgcmVzdWx0LCBzZXRfcmVzdWx0ID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgIGxldCBhY2MgPSByZWYgaW5pdCBpblxuICAgIGxldCBfID1cbiAgICAgIFJlcXVlc3Qub25fc3VjY2VzcyBjdXJzb3JfcmVxIH5mOihmdW4gX2V2IHIgLT5cbiAgICAgICAgICBtYXRjaCBSZXF1ZXN0LnJlc3VsdCByIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gc2V0X3Jlc3VsdCAoT2sgIWFjYylcbiAgICAgICAgICB8IFNvbWUgY3Vyc29yIC0+XG4gICAgICAgICAgICAgICgqIFRoZSBjdXJzb3Igc2hvdWxkIG5vdCBiZSBvdXQgb2YgcmFuZ2UgYXQgdGhhdCBwb2ludCBzbyB0aGUga2V5c1xuICAgICAgICAgICAgICAgICBzaG91bGQgaGF2ZSBhIHZhbHVlLiAqKVxuICAgICAgICAgICAgICBsZXQga2V5ID0gQ3Vyc29yLmtleSBjdXJzb3IgfD4gT3B0aW9uLmdldCBpblxuICAgICAgICAgICAgICBsZXQgcHJpbWFyeV9rZXkgPSBDdXJzb3IucHJpbWFyeV9rZXkgY3Vyc29yIHw+IE9wdGlvbi5nZXQgaW5cbiAgICAgICAgICAgICAgYWNjIDo9IGYgIWFjYyBrZXkgcHJpbWFyeV9rZXk7XG4gICAgICAgICAgICAgIEN1cnNvci5jb250aW51ZSBjdXJzb3IpXG4gICAgICB8PiBSZXF1ZXN0Lm9uX2Vycm9yIH5mOihmdW4gX2V2IHJlcSAtPlxuICAgICAgICAgICAgIHNldF9yZXN1bHQgKEVycm9yIChSZXF1ZXN0LmVycm9yIHJlcSkpKVxuICAgIGluXG4gICAgcmVzdWx0XG5lbmRcblxubW9kdWxlIHR5cGUgU3RvcmUgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIG9mX2p2IDogSnYudCAtPiB0XG5cbiAgbW9kdWxlIENvbnRlbnQgOiBTdG9yZV9jb250ZW50X2ludGZcbmVuZFxuXG5tb2R1bGUgdHlwZSBJbmRleCA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbiAgdmFsIG5hbWUgOiBzdHJpbmdcblxuICBtb2R1bGUgS2V5IDogS2V5XG5lbmRcblxubW9kdWxlIE1ha2VfaW5kZXhcbiAgICAoUCA6IHNpZ1xuICAgICAgdmFsIG5hbWUgOiBzdHJpbmdcbiAgICBlbmQpXG4gICAgKEMgOiBTdG9yZV9jb250ZW50X2ludGYpXG4gICAgKEsgOiBLZXkpID1cbnN0cnVjdFxuICBtb2R1bGUgQ29udGVudCA9IENcbiAgbW9kdWxlIEtleSA9IEtcbiAgaW5jbHVkZSBDb250ZW50X2FjY2VzcyAoQ29udGVudCkgKEspXG4gIGluY2x1ZGUgUFxuZW5kXG5cbm1vZHVsZSBNYWtlX29iamVjdF9zdG9yZSAoQyA6IFN0b3JlX2NvbnRlbnRfaW50ZikgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbnRlbnQgPSBDXG4gIGluY2x1ZGUgQ29udGVudF9hY2Nlc3MgKENvbnRlbnQpIChDb250ZW50LktleSlcblxuICBsZXQgYWRkIHYgPyhrZXkgOiBDb250ZW50LktleS50IG9wdGlvbikgdCA6IENvbnRlbnQuS2V5LnQgUmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCBrZXkgd2l0aFxuICAgICAgfCBTb21lIGtleSAtPiBbfCBDb250ZW50LnRvX2p2IHY7IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgfCBOb25lIC0+IFt8IENvbnRlbnQudG9fanYgdiB8XVxuICAgIGluXG4gICAgSnYuY2FsbCB0IFwiYWRkXCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkNvbnRlbnQuS2V5Lm9mX2p2XG5cbiAgbGV0IGNyZWF0ZV9pbmRleCAodHlwZSB0JykgKG1vZHVsZSBJIDogSW5kZXggd2l0aCB0eXBlIHQgPSB0JykgdCA6IHQnID1cbiAgICBsZXQga2V5X3BhdGggPSBLZXlfcGF0aC50b19qdiBJLktleS5wYXRoIGluXG4gICAgSnYuY2FsbCB0IFwiY3JlYXRlSW5kZXhcIiBbfCBKdi5vZl9zdHJpbmcgSS5uYW1lOyBrZXlfcGF0aCB8XSB8PiBJLm9mX2p2XG5cbiAgbGV0IGluZGV4ICh0eXBlIHQnKSAobW9kdWxlIEkgOiBJbmRleCB3aXRoIHR5cGUgdCA9IHQnKSB0IDogdCcgPVxuICAgIEp2LmNhbGwgdCBcImluZGV4XCIgW3wgSnYub2Zfc3RyaW5nIEkubmFtZSB8XSB8PiBJLm9mX2p2XG5cbiAgbGV0IHB1dCB2ID8oa2V5IDogQ29udGVudC5LZXkudCBvcHRpb24pIHQgOiBDb250ZW50LktleS50IFJlcXVlc3QudCA9XG4gICAgbGV0IGFyZ3MgPVxuICAgICAgbWF0Y2gga2V5IHdpdGhcbiAgICAgIHwgU29tZSBrZXkgLT4gW3wgQ29udGVudC50b19qdiB2OyBDb250ZW50LktleS50b19qdiBrZXkgfF1cbiAgICAgIHwgTm9uZSAtPiBbfCBDb250ZW50LnRvX2p2IHYgfF1cbiAgICBpblxuICAgIEp2LmNhbGwgdCBcInB1dFwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZjpDb250ZW50LktleS5vZl9qdlxuZW5kXG5cbm1vZHVsZSBUcmFuc2FjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgdHlwZSBtb2RlID0gUmVhZG9ubHkgfCBSZWFkd3JpdGUgfCBSZWFkd3JpdGVmbHVzaFxuXG4gIGxldCBzdHJpbmdfb2ZfbW9kZSA9IGZ1bmN0aW9uXG4gICAgfCBSZWFkb25seSAtPiBcInJlYWRvbmx5XCJcbiAgICB8IFJlYWR3cml0ZSAtPiBcInJlYWR3cml0ZVwiXG4gICAgfCBSZWFkd3JpdGVmbHVzaCAtPiBcInJlYWR3cml0ZWZsdXNoXCJcblxuICBsZXQgbW9kZV9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJyZWFkb25seVwiIC0+IFJlYWRvbmx5XG4gICAgfCBcInJlYWR3cml0ZVwiIC0+IFJlYWR3cml0ZVxuICAgIHwgXCJyZWFkd3JpdGVmbHVzaFwiIC0+IFJlYWR3cml0ZWZsdXNoXG4gICAgfCBzIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbiAgbGV0IG9iamVjdF9zdG9yZSAodHlwZSB0JykgKG1vZHVsZSBTIDogU3RvcmUgd2l0aCB0eXBlIHQgPSB0JykgdCA6IHQnID1cbiAgICBKdi5jYWxsIHQgXCJvYmplY3RTdG9yZVwiIFt8IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZSB8XSB8PiBTLm9mX2p2XG5lbmRcblxubW9kdWxlIERhdGFiYXNlID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgY3JlYXRlX29iamVjdF9zdG9yZSAodHlwZSB0JykgKG1vZHVsZSBTIDogU3RvcmUgd2l0aCB0eXBlIHQgPSB0JylcbiAgICAgID8oYXV0b19pbmNyZW1lbnQgPSBmYWxzZSkgKGRiIDogdCkgOiB0JyA9XG4gICAgbGV0IG9wdHMgPSBbIChcImF1dG9JbmNyZW1lbnRcIiwgSnYub2ZfYm9vbCBhdXRvX2luY3JlbWVudCkgXSBpblxuICAgICgqIFRPRE86IG1vdmUgYXV0b2luY3JlbWVudCB0byBzdG9yZV9jb250ZW50ICopXG4gICAgbGV0IGtleV9wYXRoID0gS2V5X3BhdGgudG9fanYgUy5Db250ZW50LktleS5wYXRoIGluXG4gICAgbGV0IG9wdHMgPSAoXCJrZXlQYXRoXCIsIGtleV9wYXRoKSA6OiBvcHRzIGluXG4gICAgbGV0IG9wdGlvbnMgPSBKdi5vYmogQEAgQXJyYXkub2ZfbGlzdCBvcHRzIGluXG4gICAgQ29uc29sZS5pbmZvIFsgXCJuZXcgb2JqZWN0IHN0b3JlIHdpdGggb3B0aW9uczpcIjsgb3B0aW9ucyBdO1xuICAgICgqIFRPRE86IGtleXBhdGggc2hvdWxkIGJlIG9wdGlvbm5hbCAqKVxuICAgIEp2LmNhbGwgZGIgXCJjcmVhdGVPYmplY3RTdG9yZVwiIFt8IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZTsgb3B0aW9ucyB8XVxuICAgIHw+IFMub2ZfanZcblxuICBsZXQgZGVsZXRlX29iamVjdF9zdG9yZSB0IG5hbWUgPVxuICAgIEp2LmNhbGwgdCBcImRlbGV0ZU9iamVjdFN0b3JlXCIgW3wgSnYub2Zfc3RyaW5nIG5hbWUgfF0gfD4gaWdub3JlXG5cbiAgbGV0IHRyYW5zYWN0aW9uIHN0b3JlcyA/KG1vZGUgPSBUcmFuc2FjdGlvbi5SZWFkb25seSkgdCA9XG4gICAgbGV0IG1vZGUgPSBUcmFuc2FjdGlvbi5zdHJpbmdfb2ZfbW9kZSBtb2RlIHw+IEp2Lm9mX3N0cmluZyBpblxuICAgIGxldCBqdl9vZl9zdG9yZSAobW9kdWxlIFMgOiBTdG9yZSkgPSBKdi5vZl9zdHJpbmcgUy5Db250ZW50Lm5hbWUgaW5cbiAgICBKdi5jYWxsIHQgXCJ0cmFuc2FjdGlvblwiIFt8IEp2Lm9mX2xpc3QganZfb2Zfc3RvcmUgc3RvcmVzOyBtb2RlIHxdXG4gICAgfD4gVHJhbnNhY3Rpb24ub2ZfanZcblxuICBsZXQgb2JqZWN0X3N0b3JlX25hbWVzIHQgPVxuICAgIEp2LmdldCB0IFwib2JqZWN0U3RvcmVOYW1lc1wiIHw+IEp2LnRvX2FycmF5IEp2LnRvX3N0cmluZ1xuZW5kXG5cbm1vZHVsZSBPcGVuX2RiX3JlcXVlc3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gRGF0YWJhc2UudCBSZXF1ZXN0LnRcblxuICBsZXQgb25fdXBncmFkZV9uZWVkZWQgfihmIDogRXZlbnRzLlZlcnNpb25fY2hhbmdlLnQgRXYudCAtPiB0IC0+IHVuaXQpICh0IDogdClcbiAgICAgIDogdCA9XG4gICAgbGV0IGYgZXYgPVxuICAgICAgbGV0IHJlcSA6IHQgPVxuICAgICAgICBFdi5jdXJyZW50X3RhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanZcbiAgICAgICAgfD4gUmVxdWVzdC5vZl9qdiB+ZjpEYXRhYmFzZS5vZl9qdlxuICAgICAgaW5cbiAgICAgIGYgZXYgcmVxXG4gICAgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy51cGdyYWRlX25lZWRlZCBmIChFdi50YXJnZXRfb2ZfanYgdC5qdik7XG4gICAgdFxuXG4gIGV4dGVybmFsIGFzX3JlcXVlc3QgOiB0IC0+IERhdGFiYXNlLnQgUmVxdWVzdC50ID0gXCIlaWRlbnRpdHlcIlxuZW5kXG5cbm1vZHVsZSBGYWN0b3J5ID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBsZXQgb3Blbicgfm5hbWUgP3ZlcnNpb24gdCA6IE9wZW5fZGJfcmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCB2ZXJzaW9uIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IFt8IG5hbWU7IHN0cmluZ19vZl9pbnQgdiB8XVxuICAgICAgfCBOb25lIC0+IFt8IG5hbWUgfF1cbiAgICBpblxuXG4gICAgSnYuY2FsbCB0IFwib3BlblwiIEBAIEFycmF5Lm1hcCBKdi5vZl9zdHJpbmcgYXJnc1xuICAgIHw+IFJlcXVlc3Qub2ZfanYgfmY6RGF0YWJhc2Uub2ZfanZcbmVuZFxuXG5sZXQgZ2V0X2ZhY3RvcnkgPyhnbG9iYWwgPSBKdi5nbG9iYWwpICgpIDogRmFjdG9yeS50ID0gSnYuZ2V0IGdsb2JhbCBcImluZGV4ZWREQlwiXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQXJyYXkgdXRpbHN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIGVxdWFsID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBvcmQgPSAnYSAtPiAnYSAtPiBpbnRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEFycmF5c30gKilcblxuaW5jbHVkZSBBcnJheVxuXG5sZXQgZW1wdHkgPSBbfHxdXG5cbmxldCBnZXRfc2FmZSBhIGkgPVxuICBpZiBpID49IDAgJiYgaSA8IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBTb21lIChBcnJheS51bnNhZmVfZ2V0IGEgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IG1hcF9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGUpKSBhXG5sZXQgbWFwaV9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGkgZSkpIGFcbmxldCBmb2xkID0gQXJyYXkuZm9sZF9sZWZ0XG5cbmxldCBmb2xkaSBmIGFjYyBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKGYgYWNjIGkgYS4oaSkpIChpICsgMSlcbiAgaW5cbiAgYXV4IGFjYyAwXG5cbmxldCBmb2xkX3doaWxlIGYgYWNjIGEgPVxuICBsZXQgcmVjIGZvbGRfd2hpbGVfaSBmIGFjYyBpID1cbiAgICBpZiBpIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYWNjLCBjb250ID0gZiBhY2MgYS4oaSkgaW5cbiAgICAgIG1hdGNoIGNvbnQgd2l0aFxuICAgICAgfCBgU3RvcCAtPiBhY2NcbiAgICAgIHwgYENvbnRpbnVlIC0+IGZvbGRfd2hpbGVfaSBmIGFjYyAoaSArIDEpXG4gICAgKSBlbHNlXG4gICAgICBhY2NcbiAgaW5cbiAgZm9sZF93aGlsZV9pIGYgYWNjIDBcblxubGV0IGZvbGRfbWFwIGYgYWNjIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICgqIG5lZWQgc3BlY2lhbCBjYXNlIGZvciBpbml0aWFsaXppbmcgdGhlIHJlc3VsdCAqKVxuICBpZiBuID0gMCB0aGVuXG4gICAgYWNjLCBbfHxdXG4gIGVsc2UgKFxuICAgIGxldCBhY2MsIGIwID0gZiBhY2MgYS4oMCkgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBuIGIwIGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBuZXdfYWNjLCBiID0gZiAhYWNjIGEuKGkpIGluXG4gICAgICBhY2MgOj0gbmV3X2FjYztcbiAgICAgIHJlcy4oaSkgPC0gYlxuICAgIGRvbmU7XG4gICAgIWFjYywgcmVzXG4gIClcblxubGV0IHNjYW5fbGVmdCBmIGFjYyBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVzID0gQXJyYXkubWFrZSAobiArIDEpIGFjYyBpblxuICBBcnJheS5pdGVyaVxuICAgIChmdW4gaSB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGYgcmVzLihpKSB4IGluXG4gICAgICByZXMuKGkgKyAxKSA8LSBuZXdfYWNjKVxuICAgIGE7XG4gIHJlc1xuXG5sZXQgcmV2ZXJzZV9pbl9wbGFjZSBhID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIGxlbiA+IDAgdGhlblxuICAgIGZvciBrID0gMCB0byAobGVuIC0gMSkgLyAyIGRvXG4gICAgICBsZXQgdCA9IGEuKGspIGluXG4gICAgICBhLihrKSA8LSBhLihsZW4gLSAxIC0gayk7XG4gICAgICBhLihsZW4gLSAxIC0gaykgPC0gdFxuICAgIGRvbmVcblxubGV0IHNvcnRlZCBjbXAgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIEFycmF5LnNvcnQgY21wIGI7XG4gIGJcblxubGV0IHNvcnRfaW5kaWNlcyBjbXAgYSA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgYiA9IEFycmF5LmluaXQgbGVuIChmdW4gayAtPiBrKSBpblxuICBBcnJheS5zb3J0IChmdW4gazEgazIgLT4gY21wIGEuKGsxKSBhLihrMikpIGI7XG4gIGJcblxubGV0IHNvcnRfcmFua2luZyBjbXAgYSA9IHNvcnRfaW5kaWNlcyBjb21wYXJlIChzb3J0X2luZGljZXMgY21wIGEpXG5cbmxldCByZXYgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIHJldmVyc2VfaW5fcGxhY2UgYjtcbiAgYlxuXG5leGNlcHRpb24gRm91bmRcblxubGV0IG1lbSA/KGVxID0gU3RkbGliLiggPSApKSBlbHQgYSA9XG4gIHRyeVxuICAgIEFycmF5Lml0ZXIgKGZ1biBlIC0+IGlmIGVxIGUgZWx0IHRoZW4gcmFpc2Vfbm90cmFjZSBGb3VuZCkgYTtcbiAgICBmYWxzZVxuICB3aXRoIEZvdW5kIC0+IHRydWVcblxubGV0IHJlYyBmaW5kX2F1eCBmIGEgaSA9XG4gIGlmIGkgPj0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIE5vbmVcbiAgZWxzZSAoXG4gICAgbWF0Y2ggZiBpIGEuKGkpIHdpdGhcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gICAgfCBOb25lIC0+IGZpbmRfYXV4IGYgYSAoaSArIDEpXG4gIClcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IGZpbmRfbWFwIGYgYSA9IGZpbmRfYXV4IChmdW4gXyAtPiBmKSBhIDBcbmxldCBmaW5kID0gZmluZF9tYXBcbmxldCBmaW5kX21hcF9pIGYgYSA9IGZpbmRfYXV4IGYgYSAwXG5sZXQgZmluZGkgPSBmaW5kX21hcF9pXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbmxldCBmaW5kX2lkeCBwIGEgPVxuICBmaW5kX2F1eFxuICAgIChmdW4gaSB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIChpLCB4KVxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGEgMFxuXG5sZXQgbWF4IGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZFxuICAgICAgICAgKGZ1biBhY2MgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhY2MgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgZWx0XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICBhLigwKSBhKVxuXG5sZXQgbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIG1heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkubWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBhcmdtYXggY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkaVxuICAgICAgICAgKGZ1biBhY2MgaSBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGEuKGFjYykgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgaVxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgMCBhKVxuXG5sZXQgYXJnbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIGFyZ21heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkuYXJnbWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBtaW4gY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkXG4gICAgICAgICAoZnVuIGFjYyBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGFjYyBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBlbHRcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIGEuKDApIGEpXG5cbmxldCBtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5taW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGFyZ21pbiBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRpXG4gICAgICAgICAoZnVuIGFjYyBpIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYS4oYWNjKSBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICAwIGEpXG5cbmxldCBhcmdtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggYXJnbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5hcmdtaW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGZpbHRlcl9tYXAgZiBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhJyA9IEFycmF5Lm9mX2xpc3QgYWNjIGluXG4gICAgICByZXZlcnNlX2luX3BsYWNlIGEnO1xuICAgICAgYSdcbiAgICApIGVsc2UgKFxuICAgICAgbWF0Y2ggZiBhLihpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gYXV4IGFjYyAoaSArIDEpXG4gICAgICB8IFNvbWUgeCAtPiBhdXggKHggOjogYWNjKSAoaSArIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gMFxuXG5sZXQgZmlsdGVyIHAgYSA9XG4gIGZpbHRlcl9tYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgeFxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGFcblxuKCogYXBwZW5kIFtyZXYgYV0gaW4gZnJvbnQgb2YgW2FjY10gKilcbmxldCByZWMgX19yZXZfYXBwZW5kX2xpc3QgYSBhY2MgaSA9XG4gIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgYWNjXG4gIGVsc2VcbiAgICBfX3Jldl9hcHBlbmRfbGlzdCBhIChhLihpKSA6OiBhY2MpIChpICsgMSlcblxubGV0IGZsYXRfbWFwIGYgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYScgPSBBcnJheS5vZl9saXN0IGFjYyBpblxuICAgICAgcmV2ZXJzZV9pbl9wbGFjZSBhJztcbiAgICAgIGEnXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBhJyA9IGYgYS4oaSkgaW5cbiAgICAgIGF1eCAoX19yZXZfYXBwZW5kX2xpc3QgYScgYWNjIDApIChpICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSAwXG5cbmxldCBtb25vaWRfcHJvZHVjdCBmIGExIGEyID1cbiAgbGV0IG5hMSA9IGxlbmd0aCBhMSBpblxuICBpbml0XG4gICAgKG5hMSAqIGxlbmd0aCBhMilcbiAgICAoZnVuIGlfcHJvZCAtPlxuICAgICAgbGV0IGkgPSBpX3Byb2QgbW9kIG5hMSBpblxuICAgICAgbGV0IGogPSBpX3Byb2QgLyBuYTEgaW5cbiAgICAgIGYgYTEuKGkpIGEyLihqKSlcblxubGV0IHJlYyBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuXG4gICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgIGlmIGNtcCBrIGEuKGkpID0gMCB0aGVuXG4gICAgICBpXG4gICAgZWxzZVxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgKFxuICAgIGxldCBtaWRkbGUgPSAoaiArIGkpIC8gMiBpblxuICAgIG1hdGNoIGNtcCBrIGEuKG1pZGRsZSkgd2l0aFxuICAgIHwgMCAtPiBtaWRkbGVcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIChtaWRkbGUgLSAxKVxuICAgIHwgXyAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSAobWlkZGxlICsgMSkgalxuICApXG5cbmxldCBfbG9va3VwX2V4biB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgbWF0Y2ggY21wIGsgYS4oaSkgd2l0aFxuICB8IDAgLT4gaVxuICB8IG4gd2hlbiBuIDwgMCAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGxvdyAqKVxuICB8IF8gd2hlbiBpID0gaiAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGhpZ2ggKilcbiAgfCBfIC0+XG4gICAgKG1hdGNoIGNtcCBrIGEuKGopIHdpdGhcbiAgICB8IDAgLT4galxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIChpICsgMSkgKGogLSAxKVxuICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmQpXG4oKiB0b28gaGlnaCAqKVxuXG5sZXQgbG9va3VwX2V4biB+Y21wIGsgYSA9IF9sb29rdXBfZXhuIH5jbXAgayBhIDAgKEFycmF5Lmxlbmd0aCBhIC0gMSlcblxubGV0IGxvb2t1cCB+Y21wIGsgYSA9XG4gIHRyeSBTb21lIChfbG9va3VwX2V4biB+Y21wIGsgYSAwIChBcnJheS5sZW5ndGggYSAtIDEpKVxuICB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbmxldCBic2VhcmNoIH5jbXAgayBhID1cbiAgbGV0IHJlYyBhdXggaSBqID1cbiAgICBpZiBpID4gaiB0aGVuXG4gICAgICBgSnVzdF9hZnRlciBqXG4gICAgZWxzZSAoXG4gICAgICBsZXQgbWlkZGxlID0gaSArICgoaiAtIGkpIC8gMikgaW5cbiAgICAgICgqIGF2b2lkIG92ZXJmbG93ICopXG4gICAgICBtYXRjaCBjbXAgayBhLihtaWRkbGUpIHdpdGhcbiAgICAgIHwgMCAtPiBgQXQgbWlkZGxlXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBhdXggaSAobWlkZGxlIC0gMSlcbiAgICAgIHwgXyAtPiBhdXggKG1pZGRsZSArIDEpIGpcbiAgICApXG4gIGluXG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlblxuICAgIGBFbXB0eVxuICBlbHNlIChcbiAgICBtYXRjaCBjbXAgYS4oMCkgaywgY21wIGEuKG4gLSAxKSBrIHdpdGhcbiAgICB8IGMsIF8gd2hlbiBjID4gMCAtPiBgQWxsX2JpZ2dlclxuICAgIHwgXywgYyB3aGVuIGMgPCAwIC0+IGBBbGxfbG93ZXJcbiAgICB8IF8gLT4gYXV4IDAgKG4gLSAxKVxuICApXG5cbmxldCByZWMgX2Zvcl9hbGwyIHAgYTEgYTIgaTEgaTIgfmxlbiA9XG4gIGxlbiA9IDBcbiAgfHwgKHAgYTEuKGkxKSBhMi4oaTIpICYmIF9mb3JfYWxsMiBwIGExIGEyIChpMSArIDEpIChpMiArIDEpIH5sZW46KGxlbiAtIDEpKVxuXG5sZXQgZm9yX2FsbDIgcCBhIGIgPVxuICBBcnJheS5sZW5ndGggYSA9IEFycmF5Lmxlbmd0aCBiICYmIF9mb3JfYWxsMiBwIGEgYiAwIDAgfmxlbjooQXJyYXkubGVuZ3RoIGEpXG5cbmxldCByZWMgX2V4aXN0czIgcCBhMSBhMiBpMSBpMiB+bGVuID1cbiAgbGVuID4gMFxuICAmJiAocCBhMS4oaTEpIGEyLihpMikgfHwgX2V4aXN0czIgcCBhMSBhMiAoaTEgKyAxKSAoaTIgKyAxKSB+bGVuOihsZW4gLSAxKSlcblxubGV0IGV4aXN0czIgcCBhIGIgPVxuICBfZXhpc3RzMiBwIGEgYiAwIDAgfmxlbjooU3RkbGliLm1pbiAoQXJyYXkubGVuZ3RoIGEpIChBcnJheS5sZW5ndGggYikpXG5cbmxldCBfZm9sZDIgZiBhY2MgYSBiIGkgaiB+bGVuID1cbiAgbGV0IHJlYyBhdXggYWNjIG8gPVxuICAgIGlmIG8gPSBsZW4gdGhlblxuICAgICAgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYWNjID0gZiBhY2MgKEFycmF5LmdldCBhIChpICsgbykpIChBcnJheS5nZXQgYiAoaiArIG8pKSBpblxuICAgICAgYXV4IGFjYyAobyArIDEpXG4gICAgKVxuICBpblxuICBhdXggYWNjIDBcblxubGV0IGZvbGQyIGYgYWNjIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW4gaW52YWxpZF9hcmcgXCJmb2xkMlwiO1xuICBfZm9sZDIgZiBhY2MgYSBiIDAgMCB+bGVuOihBcnJheS5sZW5ndGggYSlcblxubGV0ICggLS0gKSBpIGogPVxuICBpZiBpIDw9IGogdGhlblxuICAgIEFycmF5LmluaXQgKGogLSBpICsgMSkgKGZ1biBrIC0+IGkgKyBrKVxuICBlbHNlXG4gICAgQXJyYXkuaW5pdCAoaSAtIGogKyAxKSAoZnVuIGsgLT4gaSAtIGspXG5cbmxldCAoIC0tXiApIGkgaiA9XG4gIGlmIGkgPSBqIHRoZW5cbiAgICBbfHxdXG4gIGVsc2UgaWYgaSA+IGogdGhlblxuICAgIEFycmF5LmluaXQgKGkgLSBqKSAoZnVuIGsgLT4gaSAtIGspXG4gIGVsc2VcbiAgICBBcnJheS5pbml0IChqIC0gaSkgKGZ1biBrIC0+IGkgKyBrKVxuXG4oKiogYWxsIHRoZSBlbGVtZW50cyBvZiBhLCBidXQgdGhlIGktdGgsIGludG8gYSBsaXN0ICopXG5sZXQgZXhjZXB0X2lkeCBhIGkgPVxuICBmb2xkaVxuICAgIChmdW4gYWNjIGogZWx0IC0+XG4gICAgICBpZiBpID0gaiB0aGVuXG4gICAgICAgIGFjY1xuICAgICAgZWxzZVxuICAgICAgICBlbHQgOjogYWNjKVxuICAgIFtdIGFcblxubGV0IGVxdWFsIGVxIGEgYiA9XG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICB0cnVlXG4gICAgZWxzZVxuICAgICAgZXEgYS4oaSkgYi4oaSkgJiYgYXV4IChpICsgMSlcbiAgaW5cbiAgQXJyYXkubGVuZ3RoIGEgPSBBcnJheS5sZW5ndGggYiAmJiBhdXggMFxuXG5sZXQgY29tcGFyZSBjbXAgYSBiID1cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAgIDBcbiAgICAgIGVsc2VcbiAgICAgICAgLTFcbiAgICBlbHNlIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAxXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYyA9IGNtcCBhLihpKSBiLihpKSBpblxuICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICBhdXggKGkgKyAxKVxuICAgICAgZWxzZVxuICAgICAgICBjXG4gICAgKVxuICBpblxuICBhdXggMFxuXG4oKiBzd2FwIGVsZW1lbnRzIG9mIGFycmF5ICopXG5sZXQgc3dhcCBhIGkgaiA9XG4gIGlmIGkgPD4gaiB0aGVuIChcbiAgICBsZXQgdG1wID0gYS4oaSkgaW5cbiAgICBhLihpKSA8LSBhLihqKTtcbiAgICBhLihqKSA8LSB0bXBcbiAgKVxuXG4oKiBzaHVmZmxlIGFbaSDigKYgal0gdXNpbmcgdGhlIGdpdmVuIGludCByYW5kb20gZ2VuZXJhdG9yXG4gICBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSAqKVxubGV0IF9zaHVmZmxlIF9yYW5kX2ludCBhIGkgaiA9XG4gIGZvciBrID0gaiAtIDEgZG93bnRvIGkgKyAxIGRvXG4gICAgbGV0IGwgPSBfcmFuZF9pbnQgKGsgKyAxKSBpblxuICAgIGxldCB0bXAgPSBhLihsKSBpblxuICAgIGEuKGwpIDwtIGEuKGspO1xuICAgIGEuKGspIDwtIHRtcFxuICBkb25lXG5cbmxldCBzaHVmZmxlIGEgPSBfc2h1ZmZsZSBSYW5kb20uaW50IGEgMCAoQXJyYXkubGVuZ3RoIGEpXG5sZXQgc2h1ZmZsZV93aXRoIHN0IGEgPSBfc2h1ZmZsZSAoUmFuZG9tLlN0YXRlLmludCBzdCkgYSAwIChBcnJheS5sZW5ndGggYSlcblxubGV0IHJhbmRvbV9jaG9vc2UgYSA9XG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LnJhbmRvbV9jaG9vc2VcIjtcbiAgZnVuIHN0IC0+IGEuKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IHJhbmRvbV9sZW4gbiBnIHN0ID0gQXJyYXkuaW5pdCBuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbiA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHJhbmRvbV9ub25fZW1wdHkgZyBzdCA9XG4gIGxldCBuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gb3V0IGEuKGspXG4gIGRvbmU7XG4gIHBwX3N0b3Agb3V0ICgpXG5cbmxldCBwcF9pID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gayBvdXQgYS4oaylcbiAgZG9uZTtcbiAgcHBfc3RvcCBvdXQgKClcblxubGV0IHRvX3N0cmluZyA/KHNlcCA9IFwiLCBcIikgaXRlbV90b19zdHJpbmcgYSA9XG4gIEFycmF5LnRvX2xpc3QgYSB8PiBMaXN0Lm1hcCBpdGVtX3RvX3N0cmluZyB8PiBTdHJpbmcuY29uY2F0IHNlcFxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID49IGxlbmd0aCBhIHRoZW5cbiAgICAgIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBTZXEuQ29ucyAoYS4oaSksIGF1eCAoaSArIDEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9faXRlciBhIGsgPSBpdGVyIGsgYVxuXG5sZXQgdG9fZ2VuIGEgPVxuICBsZXQgayA9IHJlZiAwIGluXG4gIGZ1biAoKSAtPlxuICAgIGlmICFrIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgeCA9IGEuKCFrKSBpblxuICAgICAgaW5jciBrO1xuICAgICAgU29tZSB4XG4gICAgKSBlbHNlXG4gICAgICBOb25lXG5cbigqKiB7MiBHZW5lcmljIEZ1bmN0aW9uc30gKilcblxubW9kdWxlIHR5cGUgTU9OT19BUlJBWSA9IHNpZ1xuICB0eXBlIGVsdFxuICB0eXBlIHRcblxuICB2YWwgbGVuZ3RoIDogdCAtPiBpbnRcbiAgdmFsIGdldCA6IHQgLT4gaW50IC0+IGVsdFxuICB2YWwgc2V0IDogdCAtPiBpbnQgLT4gZWx0IC0+IHVuaXRcbmVuZFxuXG4oKiBEdWFsIFBpdm90IFF1aWNrc29ydCAoWWFyb3NsYXZza2l5KVxuICAgZnJvbSBcImF2ZXJhZ2UgY2FzZSBhbmFseXNpcyBvZiBKYXZhIDcncyBEdWFsIFBpdm90IFF1aWNrc29ydFwiICopXG5tb2R1bGUgU29ydEdlbmVyaWMgKEEgOiBNT05PX0FSUkFZKSA9IHN0cnVjdFxuICBtb2R1bGUgUmFuZCA9IFJhbmRvbS5TdGF0ZVxuXG4gIGxldCBzZWVkXyA9IFt8IDEyMzQ1NiB8XVxuXG4gIHR5cGUgc3RhdGUgPSB7XG4gICAgbXV0YWJsZSBsOiBpbnQ7ICgqIGxlZnQgcG9pbnRlciAqKVxuICAgIG11dGFibGUgZzogaW50OyAoKiByaWdodCBwb2ludGVyICopXG4gICAgbXV0YWJsZSBrOiBpbnQ7XG4gIH1cblxuICBsZXQgcmFuZF9pZHhfIHJhbmQgaSBqID0gaSArIFJhbmQuaW50IHJhbmQgKGogLSBpKVxuXG4gIGxldCBzd2FwXyBhIGkgaiA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgKClcbiAgICBlbHNlIChcbiAgICAgIGxldCB0bXAgPSBBLmdldCBhIGkgaW5cbiAgICAgIEEuc2V0IGEgaSAoQS5nZXQgYSBqKTtcbiAgICAgIEEuc2V0IGEgaiB0bXBcbiAgICApXG5cbiAgbGV0IHNvcnQgfmNtcCBhID1cbiAgICBsZXQgcmVjIGluc2VydF8gYSBpIGsgPVxuICAgICAgaWYgayA8IGkgdGhlblxuICAgICAgICAoKVxuICAgICAgZWxzZSBpZiBjbXAgKEEuZ2V0IGEgaykgKEEuZ2V0IGEgKGsgKyAxKSkgPiAwIHRoZW4gKFxuICAgICAgICBzd2FwXyBhIGsgKGsgKyAxKTtcbiAgICAgICAgaW5zZXJ0XyBhIGkgKGsgLSAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogcmVjdXJzaXZlIHBhcnQgb2YgaW5zZXJ0aW9uIHNvcnQgKilcbiAgICBsZXQgcmVjIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiBrID1cbiAgICAgIGlmIGsgPCBqIHRoZW4gKFxuICAgICAgICBpbnNlcnRfIGEgaSAoayAtIDEpO1xuICAgICAgICBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogKGsgKyAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogaW5zZXJ0aW9uIHNvcnQsIGZvciBzbWFsbCBzbGljZXMgKilcbiAgICBsZXQgc29ydF9pbnNlcnRpb24gYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxIHRoZW4gc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIChpICsgMSlcbiAgICBpblxuICAgIGxldCByYW5kID0gUmFuZC5tYWtlIHNlZWRfIGluXG4gICAgKCogc29ydCBzbGljZS5cbiAgICAgICBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZSB0d28gcGl2b3RzIGFyZSBlcXVhbCwgYnV0IGl0J3MgdW5saWtlbHkuICopXG4gICAgbGV0IHJlYyBzb3J0X3NsaWNlXyB+c3QgYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxMCB0aGVuIChcbiAgICAgICAgc3QubCA8LSBpO1xuICAgICAgICBzdC5nIDwtIGogLSAxO1xuICAgICAgICBzdC5rIDwtIGk7XG4gICAgICAgICgqIGNob29zZSBwaXZvdHMgKilcbiAgICAgICAgbGV0IHAgPSBBLmdldCBhIChyYW5kX2lkeF8gcmFuZCBpIGopIGluXG4gICAgICAgIGxldCBxID0gQS5nZXQgYSAocmFuZF9pZHhfIHJhbmQgaSBqKSBpblxuICAgICAgICAoKiBpbnZhcmlhbnQ6IHN0LnAgPD0gc3QucSwgc3dhcCB0aGVtIG90aGVyd2lzZSAqKVxuICAgICAgICBsZXQgcCwgcSA9XG4gICAgICAgICAgaWYgY21wIHAgcSA+IDAgdGhlblxuICAgICAgICAgICAgcSwgcFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAsIHFcbiAgICAgICAgaW5cbiAgICAgICAgd2hpbGUgc3QuayA8PSBzdC5nIGRvXG4gICAgICAgICAgbGV0IGN1ciA9IEEuZ2V0IGEgc3QuayBpblxuICAgICAgICAgIGlmIGNtcCBjdXIgcCA8IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gbGVmdG1vc3QgYmFuZCAqKVxuICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICBzdC5sIDwtIHN0LmwgKyAxXG4gICAgICAgICAgKSBlbHNlIGlmIGNtcCBjdXIgcSA+IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gcmlnaHRtb3N0IGJhbmQgKilcbiAgICAgICAgICAgIHdoaWxlIHN0LmsgPCBzdC5nICYmIGNtcCAoQS5nZXQgYSBzdC5nKSBxID4gMCBkb1xuICAgICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgc3dhcF8gYSBzdC5rIHN0Lmc7XG4gICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxO1xuICAgICAgICAgICAgKCogdGhlIGVsZW1lbnQgc3dhcHBlZCBmcm9tIHRoZSByaWdodCBtaWdodCBiZSBpbiB0aGUgZmlyc3Qgc2l0dWF0aW9uLlxuICAgICAgICAgICAgICAgdGhhdCBpcywgPCBwICAod2Uga25vdyBpdCdzIDw9IHEgYWxyZWFkeSkgKilcbiAgICAgICAgICAgIGlmIGNtcCAoQS5nZXQgYSBzdC5rKSBwIDwgMCB0aGVuIChcbiAgICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICAgIHN0LmwgPC0gc3QubCArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0LmsgPC0gc3QuayArIDFcbiAgICAgICAgZG9uZTtcbiAgICAgICAgKCogc2F2ZSB2YWx1ZXMgYmVmb3JlIHJlY3Vyc2luZyAqKVxuICAgICAgICBsZXQgbCA9IHN0LmwgYW5kIGcgPSBzdC5nIGFuZCBzb3J0X21pZGRsZSA9IGNtcCBwIHEgPCAwIGluXG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIGkgbDtcbiAgICAgICAgaWYgc29ydF9taWRkbGUgdGhlbiBzb3J0X3NsaWNlXyB+c3QgYSBsIChnICsgMSk7XG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIChnICsgMSkgalxuICAgICAgKSBlbHNlXG4gICAgICAgIHNvcnRfaW5zZXJ0aW9uIGEgaSBqXG4gICAgaW5cbiAgICBpZiBBLmxlbmd0aCBhID4gMCB0aGVuIChcbiAgICAgIGxldCBzdCA9IHsgbCA9IDA7IGcgPSBBLmxlbmd0aCBhOyBrID0gMCB9IGluXG4gICAgICBzb3J0X3NsaWNlXyB+c3QgYSAwIChBLmxlbmd0aCBhKVxuICAgIClcbmVuZFxuXG5sZXQgc29ydF9nZW5lcmljICh0eXBlIGFyciBlbHQpXG4gICAgKG1vZHVsZSBBIDogTU9OT19BUlJBWSB3aXRoIHR5cGUgdCA9IGFyciBhbmQgdHlwZSBlbHQgPSBlbHQpIH5jbXAgYSA9XG4gIGxldCBtb2R1bGUgUyA9IFNvcnRHZW5lcmljIChBKSBpblxuICBTLnNvcnQgfmNtcCBhXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSBhIGYgPSBmbGF0X21hcCBmIGFcbiAgbGV0ICggPj58ICkgYSBmID0gbWFwIGYgYVxuICBsZXQgKCA+fD0gKSBhIGYgPSBtYXAgZiBhXG4gIGxldCAoIC0tICkgPSAoIC0tIClcbiAgbGV0ICggLS1eICkgPSAoIC0tXiApXG5cbiAgdHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIGExIGEyID0gbW9ub2lkX3Byb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgYTEgYTJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKiBiYWNrcG9ydCBuZXcgZnVuY3Rpb25zIGZyb20gc3RkbGliIGhlcmUgKilcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gOjogXyAtPiAtMVxuICB8IF8gOjogXywgW10gLT4gMVxuICB8IF8gOjogdGFpbDEsIF8gOjogdGFpbDIgLT4gY29tcGFyZV9sZW5ndGhzIHRhaWwxIHRhaWwyXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhfd2l0aCBsIG4gPVxuICBtYXRjaCBsLCBuIHdpdGhcbiAgfCBfIHdoZW4gbiA8IDAgLT4gMVxuICB8IFtdLCAwIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8gOjogdGFpbCwgXyAtPiBjb21wYXJlX2xlbmd0aF93aXRoIHRhaWwgKG4gLSAxKVxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgKHksIHYpIDo6IF8gd2hlbiBTdGRsaWIuKCA9ICkgeCB5IC0+IFNvbWUgdlxuICB8IF8gOjogdGFpbCAtPiBhc3NvY19vcHQgeCB0YWlsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8ICh5LCB2KSA6OiBfIHdoZW4gU3RkbGliLiggPT0gKSB4IHkgLT4gU29tZSB2XG4gIHwgXyA6OiB0YWlsIC0+IGFzc3Ffb3B0IHggdGFpbFxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG4oKiBlbmQgb2YgYmFja3BvcnQgKilcblxuaW5jbHVkZSBMaXN0XG5cbmxldCBlbXB0eSA9IFtdXG5cbmxldCBpc19lbXB0eSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gdHJ1ZVxuICB8IF8gOjogXyAtPiBmYWxzZVxuXG5sZXQgbWd1YXJkIGMgPVxuICBpZiBjIHRoZW5cbiAgICBbICgpIF1cbiAgZWxzZVxuICAgIFtdXG5cbigqKiBtYXggZGVwdGggZm9yIGRpcmVjdCByZWN1cnNpb24gKilcbmxldCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gPSAxMDAwXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWlsX21hcCBmIGwgPVxuICAoKiBVbndpbmQgdGhlIGxpc3Qgb2YgdHVwbGVzLCByZWNvbnN0cnVjdGluZyB0aGUgZnVsbCBsaXN0IGZyb250LXRvLWJhY2suXG4gICAgIEBwYXJhbSB0YWlsX2FjYyBhIHN1ZmZpeCBvZiB0aGUgZmluYWwgbGlzdDsgd2UgYXBwZW5kIHR1cGxlcycgY29udGVudFxuICAgICBhdCB0aGUgZnJvbnQgb2YgaXQgKilcbiAgbGV0IHJlYyByZWJ1aWxkIHRhaWxfYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHRhaWxfYWNjXG4gICAgfCAoeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgeTYsIHk3LCB5OCkgOjogYnMgLT5cbiAgICAgIHJlYnVpbGRcbiAgICAgICAgKHkwIDo6IHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IHk1IDo6IHk2IDo6IHk3IDo6IHk4IDo6IHRhaWxfYWNjKVxuICAgICAgICBic1xuICBpblxuICAoKiBDcmVhdGUgYSBjb21wcmVzc2VkIHJldmVyc2UtbGlzdCByZXByZXNlbnRhdGlvbiB1c2luZyB0dXBsZXNcbiAgICAgQHBhcmFtIHR1cGxlX2FjYyBhIHJldmVyc2UgbGlzdCBvZiBjaHVua3MgbWFwcGVkIHdpdGggW2ZdICopXG4gIGxldCByZWMgZGl2ZSB0dXBsZV9hY2MgPSBmdW5jdGlvblxuICAgIHwgeDAgOjogeDEgOjogeDIgOjogeDMgOjogeDQgOjogeDUgOjogeDYgOjogeDcgOjogeDggOjogeHMgLT5cbiAgICAgIGxldCB5MCA9IGYgeDAgaW5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIGxldCB5NSA9IGYgeDUgaW5cbiAgICAgIGxldCB5NiA9IGYgeDYgaW5cbiAgICAgIGxldCB5NyA9IGYgeDcgaW5cbiAgICAgIGxldCB5OCA9IGYgeDggaW5cbiAgICAgIGRpdmUgKCh5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCB5NiwgeTcsIHk4KSA6OiB0dXBsZV9hY2MpIHhzXG4gICAgfCB4cyAtPlxuICAgICAgKCogUmV2ZXJzZSBkaXJlY3Rpb24sIGZpbmlzaGluZyBvZmYgd2l0aCBhIGRpcmVjdCBtYXAgKilcbiAgICAgIGxldCB0YWlsID0gTGlzdC5tYXAgZiB4cyBpblxuICAgICAgcmVidWlsZCB0YWlsIHR1cGxlX2FjY1xuICBpblxuICBkaXZlIFtdIGxcblxubGV0IG1hcCBmIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBmIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgWyB4IF0gLT4gWyBmIHggXVxuICAgIHwgWyB4MTsgeDIgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgWyB5MTsgZiB4MiBdXG4gICAgfCBbIHgxOyB4MjsgeDMgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgWyB5MTsgeTI7IGYgeDMgXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHRhaWxfbWFwIGYgbFxuICAgIHwgeDEgOjogeDIgOjogeDMgOjogeDQgOjogbCcgLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IGRpcmVjdCBmIChpIC0gMSkgbCdcbiAgaW5cbiAgZGlyZWN0IGYgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxubGV0IGFwcGVuZCBsMSBsMiA9XG4gIGxldFtAaW5saW5lXSBzYWZlIGwxIGwyID0gTGlzdC5yZXZfYXBwZW5kIChMaXN0LnJldiBsMSkgbDIgaW5cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gbDJcbiAgICB8IFsgeCBdIC0+IHggOjogbDJcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyXG4gICAgfCB4IDo6IHkgOjogdGwxIC0+IHggOjogeSA6OiBkaXJlY3QgKGkgLSAxKSB0bDEgbDJcbiAgaW5cbiAgZGlyZWN0IDEwMDAgbDEgbDJcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogdGwgLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIHggOjogbWFwIGYgdGxcblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgeCA6OiB0bDEgLT4geCA6OiBhcHBlbmQgdGwxIGwyXG5cbltAQEBlbHNlX11cblxuKCogVFJNQyBmdW5jdGlvbnMgb24gPj0gNS4xLCBubyBuZWVkIHRvIGJyaW5nIG91ciBvd24gKilcblxuW0BAQGVuZGlmXVxuXG4oKiBXcmFwcGVyIGFyb3VuZCBbYXBwZW5kXSB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugb2Ygc2hvcnQgW2wxXSxcbiAgIGFuZCBmb3IgdGhlIGNhc2Ugb2YgW2wyID0gW11dIChzYXZlcyB0aGUgd2hvbGUgY29weSBvZiBbbDFdISkgKilcbmxldFtAaW5saW5lXSBhcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBfIC0+IGwyXG4gIHwgXywgW10gLT4gbDFcbiAgfCBbIHggXSwgXyAtPiB4IDo6IGwyXG4gIHwgeCA6OiB5IDo6IHRsMSwgXyAtPiB4IDo6IHkgOjogYXBwZW5kIHRsMSBsMlxuXG5sZXQgKCBAICkgPSBhcHBlbmRcbmxldFtAaW5saW5lXSBjb25zJyBsIHggPSB4IDo6IGxcblxubGV0IGNvbnNfbWF5YmUgbyBsID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgU29tZSB4IC0+IHggOjogbFxuICB8IE5vbmUgLT4gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgZGlyZWN0X2RlcHRoX2ZpbHRlcl8gPSAxMF8wMDBcblxubGV0IGZpbHRlciBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBsIFtdXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IGRpcmVjdCBpIHAgbCdcbiAgICB8IHggOjogbCcgLT4geCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gIGFuZCBzYWZlIHAgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IHNhZmUgcCBsJyBhY2NcbiAgICB8IHggOjogbCcgLT4gc2FmZSBwIGwnICh4IDo6IGFjYylcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9maWx0ZXJfIHAgbFxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgZmlsdGVyIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCBrZWVwID0gZiB4IGluXG4gICAgaWYga2VlcCB0aGVuXG4gICAgICB4IDo6IGZpbHRlciBmIHRsXG4gICAgZWxzZVxuICAgICAgZmlsdGVyIGYgdGxcblxuW0BAQGVsc2VfXVxuKCogc3RkbGliJ3MgZmlsdGVyIHVzZXMgVFJNQyBhZnRlciA1LjEgKilcblxuW0BAQGVuZGlmXVxuXG5sZXQgZm9sZF9yaWdodCBmIGwgYWNjID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgZiAoTGlzdC5yZXYgbCkgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZGlyZWN0IChpIC0gMSkgZiBsJyBhY2MgaW5cbiAgICAgIGYgeCBhY2NcbiAgYW5kIHNhZmUgZiBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIHggYWNjIGluXG4gICAgICBzYWZlIGYgbCcgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gZiBsIGFjY1xuXG5sZXQgcmVjIGZvbGRfd2hpbGUgZiBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGUgOjogbCAtPlxuICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBlIGluXG4gICAgKG1hdGNoIGNvbnQgd2l0aFxuICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZSBmIGFjYyBsKVxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5sZXQgZm9sZF9vbl9tYXAgfmYgfnJlZHVjZSBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IHJlZHVjZSBhY2MgKGYgeCkgaW5cbiAgICAgIGF1eCBhY2MgbCdcbiAgaW5cbiAgYXV4IGFjYyBsXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGxfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbF9hY2NcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIHggaW5cbiAgICAgIGxldCBsX2FjYyA9IGFjYyA6OiBsX2FjYyBpblxuICAgICAgYXV4IGYgYWNjIGxfYWNjIHRhaWxcbiAgaW5cbiAgYXV4IGYgYWNjIFsgYWNjIF0gbFxuXG5sZXQgcmVkdWNlIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gU29tZSAoZm9sZF9sZWZ0IGYgeCBsKVxuXG5sZXQgcmVkdWNlX2V4biBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDTGlzdC5yZWR1Y2VfZXhuXCIpXG4gIHwgeCA6OiBsIC0+IGZvbGRfbGVmdCBmIHggbFxuXG5sZXQgZm9sZF9tYXAyIGYgYWNjIGwxIGwyID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJmb2xkX21hcDJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4MSB4MiBpblxuICAgICAgYXV4IGYgYWNjICh5IDo6IG1hcF9hY2MpIGwxJyBsMidcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGwxIGwyXG5cbmxldCBmb2xkX2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9maWx0ZXJfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbmxldCBmb2xkX2ZsYXRfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9mbGF0X21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbigqIGtlZXAgdGhpcyBiZWNhdXNlIGl0J3MgdGFpbHJlYyBmb3IgPCA1LjEgKilcbmxldCBpbml0IGxlbiBmID1cbiAgbGV0IHJlYyBpbmRpcmVjdF8gaSBhY2MgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgaW5kaXJlY3RfIChpICsgMSkgKHggOjogYWNjKVxuICAgIClcbiAgaW5cbiAgbGV0IHJlYyBkaXJlY3RfIGkgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIGlmIGkgPCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gdGhlbiAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgeCA6OiBkaXJlY3RfIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGluZGlyZWN0XyBpIFtdXG4gIGluXG4gIGlmIGxlbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiaW5pdFwiXG4gIGVsc2UgaWYgbGVuID0gMCB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIGRpcmVjdF8gMFxuXG5sZXQgcmVjIHVuZm9sZF9rb250IGYgc2VlZCBrID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IGsgW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPlxuICAgIGxldCBrJyB0bCA9IGsgKHYgOjogdGwpIGluXG4gICAgdW5mb2xkX2tvbnQgZiBuZXh0IGsnXG5cbmxldFtAaW5saW5lXSB1bmZvbGQgZiBzZWVkID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIHNlZWQgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHVuZm9sZF9rb250IGYgc2VlZCAoZnVuIHggLT4geClcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGYgc2VlZCB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiBkaXJlY3QgKGkgLSAxKSBmIG5leHRcbiAgICApXG4gIGluXG4gIGRpcmVjdCAxMDAgZiBzZWVkXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBpbml0XyBpIG4gZiA9XG4gICAgaWYgaSA9IG4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICB4IDo6IGluaXRfIChpICsgMSkgbiBmXG4gICAgKVxuICBpblxuICBpbml0XyAwIG4gZlxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB1bmZvbGQgZiBzZWVkID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiB1bmZvbGQgZiBuZXh0XG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdW5mb2xkIGYgc2VlZCA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogdW5mb2xkIGYgbmV4dFxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgY29tcGFyZSBmIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IF8sIFtdIC0+IDFcbiAgfCBbXSwgXyAtPiAtMVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgbGV0IGMgPSBmIHgxIHgyIGluXG4gICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgIGNcbiAgICBlbHNlXG4gICAgICBjb21wYXJlIGYgbDEnIGwyJ1xuXG5sZXQgcmVjIGVxdWFsIGYgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF8gfCBfLCBbXSAtPiBmYWxzZVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+IGYgeDEgeDIgJiYgZXF1YWwgZiBsMScgbDInXG5cbltAQEBpZmx0IDUuMV1cblxubGV0IHJlYyBmbGF0X21hcF9rb250IGYgbCBrb250ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4ga29udCBbXVxuICB8IFsgeCBdIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBrb250IHhcbiAgfCB4IDo6IGwnIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBsZXQga29udCcgdGFpbCA9IGtvbnQgKGFwcGVuZCB4IHRhaWwpIGluXG4gICAgZmxhdF9tYXBfa29udCBmIGwnIGtvbnQnXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IFsgeCBdIC0+IGYgeFxuICB8IF8gOjogXyAtPiBmbGF0X21hcF9rb250IGYgbCBGdW4uaWRcblxuW0BAQGVsc2VfXVxuXG5sZXQgZmxhdF9tYXAgPSBjb25jYXRfbWFwXG5cbltAQEBlbmRpZl1cblxubGV0IGZsYXRfbWFwX2kgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpIGwga29udCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBrb250IFtdXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgeSA9IGYgaSB4IGluXG4gICAgICBsZXQga29udCcgdGFpbCA9XG4gICAgICAgIG1hdGNoIHkgd2l0aFxuICAgICAgICB8IFtdIC0+IGtvbnQgdGFpbFxuICAgICAgICB8IFsgeCBdIC0+IGtvbnQgKHggOjogdGFpbClcbiAgICAgICAgfCBbIHg7IHkgXSAtPiBrb250ICh4IDo6IHkgOjogdGFpbClcbiAgICAgICAgfCBsIC0+IGtvbnQgKGFwcGVuZCBsIHRhaWwpXG4gICAgICBpblxuICAgICAgYXV4IGYgKGkgKyAxKSBsJyBrb250J1xuICBpblxuICBhdXggZiAwIGwgKGZ1biBsIC0+IGwpXG5cbmxldCBmbGF0dGVuIGwgPSBmb2xkX3JpZ2h0IGFwcGVuZCBsIFtdXG5cbmxldCBjb3VudCBmIGwgPVxuICBmb2xkX2xlZnRcbiAgICAoZnVuIG4geCAtPlxuICAgICAgaWYgZiB4IHRoZW5cbiAgICAgICAgc3VjYyBuXG4gICAgICBlbHNlXG4gICAgICAgIG4pXG4gICAgMCBsXG5cbmxldCBjb3VudF90cnVlX2ZhbHNlIHAgbCA9XG4gIGZvbGRfbGVmdFxuICAgIChmdW4gKG9rLCBrbykgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgb2sgKyAxLCBrb1xuICAgICAgZWxzZVxuICAgICAgICBvaywga28gKyAxKVxuICAgICgwLCAwKSBsXG5cbmxldFtAaW5saW5lXSBwcm9kdWN0IGYgbDEgbDIgPSBmbGF0X21hcCAoZnVuIHggLT4gbWFwIChmdW4geSAtPiBmIHggeSkgbDIpIGwxXG5cbmxldCBmb2xkX3Byb2R1Y3QgZiBhY2MgbDEgbDIgPVxuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gYWNjIHgxIC0+IExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHgyIC0+IGYgYWNjIHgxIHgyKSBhY2MgbDIpXG4gICAgYWNjIGwxXG5cbmxldCBkaWFnb25hbCBsID1cbiAgbGV0IHJlYyBnZW4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeSAtPiAoeCwgeSkgOjogYWNjKSBhY2MgbCcgaW5cbiAgICAgIGdlbiBhY2MgbCdcbiAgaW5cbiAgZ2VuIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXBfZWl0aGVyIGYgbCA9XG4gIGxldCByZWMgaXRlciBmIGwxIGwyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbDEsIExpc3QucmV2IGwyXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgQ0NFaXRoZXIuTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgQ0NFaXRoZXIuUmlnaHQgeSAtPiBpdGVyIGYgbDEgKHkgOjogbDIpIHRsKVxuICBpblxuICBpdGVyIGYgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX2ZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyBpdGVyIGYgbDEgbDIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsMSwgTGlzdC5yZXYgbDJcbiAgICB8IHggOjogdGwgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBgTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgYFJpZ2h0IHkgLT4gaXRlciBmIGwxICh5IDo6IGwyKSB0bFxuICAgICAgfCBgRHJvcCAtPiBpdGVyIGYgbDEgbDIgdGwpXG4gIGluXG4gIGl0ZXIgZiBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwID0gcGFydGl0aW9uX2ZpbHRlcl9tYXBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGNvbWJpbmUgbDEgbDIgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcbiAgYW5kIHNhZmUgbDEgbDIgYWNjID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gc2FmZSBsMScgbDInIEBAICgoeDEsIHgyKSA6OiBhY2MpXG4gICAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGwxIGwyXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IFtdXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogY29tYmluZSBsMScgbDInXG4gIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcblxuW0BAQGVuZGlmXVxuXG5sZXQgY29tYmluZV9nZW4gbDEgbDIgPVxuICBsZXQgbDEgPSByZWYgbDEgaW5cbiAgbGV0IGwyID0gcmVmIGwyIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICFsMSwgIWwyIHdpdGhcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gTm9uZVxuICAgIHwgeDEgOjogdGFpbDEsIHgyIDo6IHRhaWwyIC0+XG4gICAgICBsMSA6PSB0YWlsMTtcbiAgICAgIGwyIDo9IHRhaWwyO1xuICAgICAgU29tZSAoeDEsIHgyKVxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgY29tYmluZV9zaG9ydGVzdCBsMSBsMiA9XG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBfLCBbXSB8IFtdLCBfIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICBhbmQgc2FmZSBsMSBsMiBhY2MgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MgPSAoeDEsIHgyKSA6OiBhY2MgaW5cbiAgICAgIHNhZmUgbDEnIGwyJyBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbWJpbmVfc2hvcnRlc3QgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IF8sIFtdIHwgW10sIF8gLT4gW11cbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBjb21iaW5lX3Nob3J0ZXN0IGwxJyBsMidcblxuW0BAQGVuZGlmXVxuXG5sZXQgc3BsaXQgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXSwgW11cbiAgICB8IFsgKHgxLCB5MSkgXSAtPiBbIHgxIF0sIFsgeTEgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5MikgXSAtPiBbIHgxOyB4MiBdLCBbIHkxOyB5MiBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKTsgKHgzLCB5MykgXSAtPiBbIHgxOyB4MjsgeDMgXSwgWyB5MTsgeTI7IHkzIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpOyAoeDMsIHkzKTsgKHg0LCB5NCkgXSAtPlxuICAgICAgWyB4MTsgeDI7IHgzOyB4NCBdLCBbIHkxOyB5MjsgeTM7IHk0IF1cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzcGxpdF9zbG93IFtdIFtdIGxcbiAgICB8ICh4MSwgeTEpIDo6ICh4MiwgeTIpIDo6ICh4MywgeTMpIDo6ICh4NCwgeTQpIDo6ICh4NSwgeTUpIDo6IGwnIC0+XG4gICAgICBsZXQgcngsIHJ5ID0gZGlyZWN0IChpIC0gMSkgbCcgaW5cbiAgICAgIHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IHg1IDo6IHJ4LCB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiB5NSA6OiByeVxuICBhbmQgc3BsaXRfc2xvdyBhY2MxIGFjYzIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MxLCBMaXN0LnJldiBhY2MyXG4gICAgfCAoeDEsIHgyKSA6OiB0YWlsIC0+XG4gICAgICBsZXQgYWNjMSA9IHgxIDo6IGFjYzEgYW5kIGFjYzIgPSB4MiA6OiBhY2MyIGluXG4gICAgICBzcGxpdF9zbG93IGFjYzEgYWNjMiB0YWlsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgcmV0dXJuIHggPSBbIHggXVxubGV0IHB1cmUgPSByZXR1cm5cbmxldCAoIDwqPiApIGZ1bnMgbCA9IHByb2R1Y3QgKGZ1biBmIHggLT4gZiB4KSBmdW5zIGxcblxubGV0IGNhcnRlc2lhbl9wcm9kdWN0IGwgPVxuICAoKiBbbGVmdF06IGVsZW1lbnRzIHBpY2tlZCBzbyBmYXJcbiAgICAgW3JpZ2h0XTogc2V0cyB0byBwaWNrIGVsZW1lbnRzIGZyb21cbiAgICAgW2FjY106IGFjY3VtdWxhdG9yIGZvciB0aGUgcmVzdWx0LCB0byBwYXNzIHRvIGNvbnRpbnVhdGlvblxuICAgICBba106IGNvbnRpbnVhdGlvbiAqKVxuICBsZXQgcmVjIHByb2RfcmVjIGxlZnQgcmlnaHQgayBhY2MgPVxuICAgIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICB8IFtdIC0+IGsgYWNjIChMaXN0LnJldiBsZWZ0KVxuICAgIHwgbDEgOjogdGFpbCAtPlxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBwcm9kX3JlYyAoeCA6OiBsZWZ0KSB0YWlsIGsgYWNjKSBhY2MgbDFcbiAgaW5cbiAgcHJvZF9yZWMgW10gbCAoZnVuIGFjYyBsJyAtPiBsJyA6OiBhY2MpIFtdXG5cbigqIGNhcnRlc2lhbiBwcm9kdWN0IG9mIGxpc3RzIG9mIGxpc3RzICopXG5sZXQgbWFwX3Byb2R1Y3RfbCBmIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGYgbCBpblxuICBjYXJ0ZXNpYW5fcHJvZHVjdCBsXG5cbmxldCByZWMgc29ydGVkX21lbSB+Y21wIHggbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGZhbHNlXG4gIHwgeSA6OiB0YWlsIC0+XG4gICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgIHwgMCAtPiB0cnVlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gZmFsc2VcbiAgICB8IF8gLT4gKHNvcnRlZF9tZW0gW0B0YWlsY2FsbF0pIH5jbXAgeCB0YWlsKVxuXG5sZXQgc29ydGVkX21lcmdlIH5jbXAgbDEgbDIgPVxuICBsZXQgcmVjIHJlY3Vyc2UgY21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDFcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogYWNjKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDIgOjogYWNjKSBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IHgyIDo6IGFjYykgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydGVkX2RpZmYgfmNtcCBsMSBsMiA9XG4gIGxldCByZWMgcmVjdXJzZSBjbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwxXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IGFjYykgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIGNtcCBhY2MgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydF91bmlxIH5jbXAgbCA9IExpc3Quc29ydF91bmlxIGNtcCBsXG5cbmxldCBpc19zb3J0ZWQgfmNtcCBsID1cbiAgbGV0IHJlYyBhdXggY21wID0gZnVuY3Rpb25cbiAgICB8IFtdIHwgWyBfIF0gLT4gdHJ1ZVxuICAgIHwgeCA6OiAoeSA6OiBfIGFzIHRhaWwpIC0+IGNtcCB4IHkgPD0gMCAmJiBhdXggY21wIHRhaWxcbiAgaW5cbiAgYXV4IGNtcCBsXG5cbmxldCBzb3J0ZWRfaW5zZXJ0IH5jbXAgPyh1bmlxID0gZmFsc2UpIHggbCA9XG4gIGxldCByZWMgYXV4IGNtcCB1bmlxIHggbGVmdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0IFsgeCBdXG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBsZXQgbCcgPVxuICAgICAgICAgIGlmIHVuaXEgdGhlblxuICAgICAgICAgICAgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHggOjogbFxuICAgICAgICBpblxuICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCBsJ1xuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgKHggOjogbClcbiAgICAgIHwgXyAtPiBhdXggY21wIHVuaXEgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIHVuaXEgeCBbXSBsXG5cbmxldCBzb3J0ZWRfcmVtb3ZlIH5jbXAgPyhhbGwgPSBmYWxzZSkgeCBsID1cbiAgbGV0IHJlYyBhdXggY21wIGFsbCB4IGxlZnQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsZWZ0XG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBpZiBhbGwgdGhlblxuICAgICAgICAgIGF1eCBjbXAgYWxsIHggbGVmdCB0YWlsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCB0YWlsXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCBsXG4gICAgICB8IF8gLT4gYXV4IGNtcCBhbGwgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIGFsbCB4IFtdIGxcblxubGV0IHVuaXFfc3VjYyB+ZXEgbCA9XG4gIGxldCByZWMgZiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFsgeCBdIC0+IExpc3QucmV2ICh4IDo6IGFjYylcbiAgICB8IHggOjogKHkgOjogXyBhcyB0YWlsKSB3aGVuIGVxIHggeSAtPiBmIGFjYyB0YWlsXG4gICAgfCB4IDo6IHRhaWwgLT4gZiAoeCA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgZiBbXSBsXG5cbmxldCBncm91cF9zdWNjIH5lcSBsID1cbiAgbGV0IHJlYyBmIH5lcSBhY2MgY3VyIGwgPVxuICAgIG1hdGNoIGN1ciwgbCB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIDo6IF8sIFtdIC0+IExpc3QucmV2IChMaXN0LnJldiBjdXIgOjogYWNjKVxuICAgIHwgW10sIHggOjogdGwgLT4gZiB+ZXEgYWNjIFsgeCBdIHRsXG4gICAgfCB5IDo6IF8sIHggOjogdGwgd2hlbiBlcSB4IHkgLT4gZiB+ZXEgYWNjICh4IDo6IGN1cikgdGxcbiAgICB8IF8sIHggOjogdGwgLT4gZiB+ZXEgKExpc3QucmV2IGN1ciA6OiBhY2MpIFsgeCBdIHRsXG4gIGluXG4gIGYgfmVxIFtdIFtdIGxcblxubGV0IHNvcnRlZF9tZXJnZV91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDIpIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICgqIGRyb3Agb25lIG9mIHRoZSBbeF0gKilcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbmxldCBzb3J0ZWRfZGlmZl91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IGFjY1xuICAgIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWtlIG4gbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBuIFtdIGxcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSAobiAtIDEpIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIG4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIHdoZW4gbiA9IDAgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+IHNhZmUgKG4gLSAxKSAoeCA6OiBhY2MpIGwnXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbiBsXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdGFrZSBuIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBuID4gMCB0aGVuXG4gICAgICB4IDo6IHRha2UgKG4gLSAxKSBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wIG4gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgXyB3aGVuIG4gPSAwIC0+IGxcbiAgfCBfIDo6IGwnIC0+IGRyb3AgKG4gLSAxKSBsJ1xuXG5sZXQgaGRfdGwgPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhaWx3aXRoIFwiaGRfdGxcIlxuICB8IHggOjogbCAtPiB4LCBsXG5cbmxldCB0YWtlX2Ryb3AgbiBsID0gdGFrZSBuIGwsIGRyb3AgbiBsXG5cbmxldCBzdWJsaXN0c19vZl9sZW4gPyhsYXN0ID0gZnVuIF8gLT4gTm9uZSkgP29mZnNldCBuIGwgPVxuICBpZiBuIDwgMSB0aGVuIGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBuIG11c3QgYmUgPiAwXCI7XG4gIGxldCBvZmZzZXQgPVxuICAgIG1hdGNoIG9mZnNldCB3aXRoXG4gICAgfCBOb25lIC0+IG5cbiAgICB8IFNvbWUgbyB3aGVuIG8gPCAxIC0+IGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBvZmZzZXQgbXVzdCBiZSA+IDBcIlxuICAgIHwgU29tZSBvIC0+IG9cbiAgaW5cbiAgKCogYWRkIHN1Yi1saXN0cyBvZiBbbF0gdG8gW2FjY10gKilcbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIGxldCBncm91cCA9IHRha2UgbiBsIGluXG4gICAgaWYgaXNfZW1wdHkgZ3JvdXAgdGhlblxuICAgICAgYWNjXG4gICAgKCogdGhpcyB3YXMgdGhlIGxhc3QgZ3JvdXAsIHdlIGFyZSBkb25lICopXG4gICAgZWxzZSBpZiBMaXN0Lmxlbmd0aCBncm91cCA8IG4gKCogbGFzdCBncm91cCwgd2l0aCBtaXNzaW5nIGVsZW1lbnRzICopIHRoZW4gKFxuICAgICAgbWF0Y2ggbGFzdCBncm91cCB3aXRoXG4gICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICB8IFNvbWUgZ3JvdXAnIC0+IGdyb3VwJyA6OiBhY2NcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGwnID0gZHJvcCBvZmZzZXQgbCBpblxuICAgICAgYXV4IChncm91cCA6OiBhY2MpIGwnICgqIGNvbnRpbnVlICopXG4gICAgKVxuICBpblxuICBMaXN0LnJldiAoYXV4IFtdIGwpXG5cbmxldCBjaHVua3MgbiBsID0gc3VibGlzdHNfb2ZfbGVuIH5sYXN0OihmdW4geCAtPiBTb21lIHgpIG4gbFxuXG5sZXQgaW50ZXJzcGVyc2UgeCBsID1cbiAgbGV0IHJlYyBhdXhfZGlyZWN0IGkgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIF8gXSAtPiBsXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gYXV4X3RhaWxyZWMgW10geCBsXG4gICAgfCB5IDo6IHRhaWwgLT4geSA6OiB4IDo6IGF1eF9kaXJlY3QgKGkgLSAxKSB4IHRhaWxcbiAgYW5kIGF1eF90YWlscmVjIGFjYyB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbIHkgXSAtPiBMaXN0LnJldiAoeSA6OiBhY2MpXG4gICAgfCB5IDo6IHRhaWwgLT4gYXV4X3RhaWxyZWMgKHggOjogeSA6OiBhY2MpIHggdGFpbFxuICBpblxuICBhdXhfZGlyZWN0IDFfMDAwIHggbFxuXG5sZXQgaW50ZXJsZWF2ZSBsMSBsMiA6IF8gbGlzdCA9XG4gIGxldCByZWMgYXV4IGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKVxuICAgIHwgXywgW10gLT4gTGlzdC5yZXYgKExpc3QucmV2X2FwcGVuZCBsMSBhY2MpXG4gICAgfCB4MSA6OiB0bDEsIHgyIDo6IHRsMiAtPiBhdXggKHgyIDo6IHgxIDo6IGFjYykgdGwxIHRsMlxuICBpblxuICBhdXggW10gbDEgbDJcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRha2Vfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgW10gbFxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIHAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBzYWZlIHAgKHggOjogYWNjKSBsJ1xuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBwIGxcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB0YWtlX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICB4IDo6IHRha2Vfd2hpbGUgcCBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICBkcm9wX3doaWxlIHAgbCdcbiAgICBlbHNlXG4gICAgICBsXG5cbmxldCB0YWtlX2Ryb3Bfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW10sIFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIFtdIGxcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgaWYgcCB4IHRoZW4gKFxuICAgICAgICBsZXQgbDEsIGwyID0gZGlyZWN0IChpIC0gMSkgcCB0YWlsIGluXG4gICAgICAgIHggOjogbDEsIGwyXG4gICAgICApIGVsc2VcbiAgICAgICAgW10sIGxcbiAgYW5kIHNhZmUgcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MsIFtdXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHNhZmUgcCAoeCA6OiBhY2MpIHRhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjLCBsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gcCBsXG5cbmxldCBsYXN0IG4gbCA9XG4gIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IG4gdGhlblxuICAgIGxcbiAgZWxzZVxuICAgIGRyb3AgKGxlbiAtIG4pIGxcblxubGV0IGhlYWRfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuXG5sZXQgdGFpbF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBfIDo6IHRhaWwgLT4gU29tZSB0YWlsXG5cbmxldCByZWMgbGFzdF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBbIHggXSAtPiBTb21lIHhcbiAgfCBfIDo6IHRhaWwgLT4gbGFzdF9vcHQgdGFpbFxuXG5sZXQgZmluZF9wcmVkID0gZmluZF9vcHRcblxubGV0IGZpbmRfcHJlZF9leG4gcCBsID1cbiAgbWF0Y2ggZmluZF9wcmVkIHAgbCB3aXRoXG4gIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBTb21lIHggLT4geFxuXG5sZXQgZmluZF9tYXBpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiBpIHggd2l0aFxuICAgICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBOb25lIC0+IGF1eCBmIChpICsgMSkgbCcpXG4gIGluXG4gIGF1eCBmIDAgbFxuXG5sZXQgZmluZF9tYXAgZiBsID0gZmluZF9tYXBpIChmdW4gXyAtPiBmKSBsXG5cbmxldCBmaW5kX2lkeCBwIGwgPVxuICBmaW5kX21hcGlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBsXG5cbmxldCByZW1vdmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlJyBlcSB4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeSA6OiB0YWlsIHdoZW4gZXEgeCB5IC0+IHJlbW92ZScgZXEgeCBhY2MgdGFpbFxuICAgIHwgeSA6OiB0YWlsIC0+IHJlbW92ZScgZXEgeCAoeSA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgcmVtb3ZlJyBlcSB4IFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyByZWN1cnNlIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYycgPVxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICAgIHwgU29tZSB5IC0+IHkgOjogYWNjXG4gICAgICBpblxuICAgICAgcmVjdXJzZSBhY2MnIGwnXG4gIGluXG4gIHJlY3Vyc2UgW10gbFxuXG5sZXQga2VlcF9zb21lIGwgPSBmaWx0ZXJfbWFwIChmdW4geCAtPiB4KSBsXG5cbmxldCBrZWVwX29rIGwgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1bmN0aW9uXG4gICAgICB8IE9rIHggLT4gU29tZSB4XG4gICAgICB8IEVycm9yIF8gLT4gTm9uZSlcbiAgICBsXG5cbmxldCBhbGxfc29tZSBsID1cbiAgdHJ5XG4gICAgU29tZVxuICAgICAgKG1hcFxuICAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgIHwgU29tZSB4IC0+IHhcbiAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgYWxsX29rIGwgPVxuICBsZXQgZXJyID0gcmVmIE5vbmUgaW5cbiAgdHJ5XG4gICAgT2tcbiAgICAgIChtYXBcbiAgICAgICAgIChmdW5jdGlvblxuICAgICAgICAgICB8IE9rIHggLT4geFxuICAgICAgICAgICB8IEVycm9yIGUgLT5cbiAgICAgICAgICAgICBlcnIgOj0gU29tZSBlO1xuICAgICAgICAgICAgIHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBlIC0+IEVycm9yIGUpXG5cbmxldCBncm91cF9ieSAodHlwZSBrKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpID8oZXEgPSBTdGRsaWIuKCA9ICkpIGwgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0ga1xuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICAoKiBjb21wdXRlIGdyb3VwIHRhYmxlICopXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGwgPSB0cnkgVGJsLmZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIFRibC5yZXBsYWNlIHRibCB4ICh4IDo6IGwpKVxuICAgIGw7XG4gIFRibC5mb2xkIChmdW4gXyB4IGFjYyAtPiB4IDo6IGFjYykgdGJsIFtdXG5cbmxldCBqb2luIH5qb2luX3JvdyBzMSBzMiA6IF8gdCA9XG4gIGZsYXRfbWFwIChmdW4gYSAtPiBmaWx0ZXJfbWFwIChqb2luX3JvdyBhKSBzMikgczFcblxubGV0IGpvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmMSBmMiB+bWVyZ2UgYzFcbiAgICBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIFRibC5hZGQgdGJsIGtleSB4KVxuICAgIGMxO1xuICBsZXQgcmVzID0gcmVmIFtdIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgbGV0IGtleSA9IGYyIHkgaW5cbiAgICAgIGxldCB4cyA9IFRibC5maW5kX2FsbCB0Ymwga2V5IGluXG4gICAgICBMaXN0Lml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggbWVyZ2Uga2V5IHggeSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHogLT4gcmVzIDo9IHogOjogIXJlcylcbiAgICAgICAgeHMpXG4gICAgYzI7XG4gICFyZXNcblxudHlwZSAoJ2EsICdiKSBqb2luX2FsbF9jZWxsID0ge1xuICBtdXRhYmxlIGphX2xlZnQ6ICdhIGxpc3Q7XG4gIG11dGFibGUgamFfcmlnaHQ6ICdiIGxpc3Q7XG59XG5cbmxldCBqb2luX2FsbF9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYxIGYyXG4gICAgfm1lcmdlIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgKCogYnVpbGQgdGhlIG1hcCBba2V5IC0+IGNlbGxdICopXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYyA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgYy5qYV9sZWZ0IDwtIHggOjogYy5qYV9sZWZ0XG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBUYmwuYWRkIHRibCBrZXkgeyBqYV9sZWZ0ID0gWyB4IF07IGphX3JpZ2h0ID0gW10gfSlcbiAgICBjMTtcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICBsZXQga2V5ID0gZjIgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBjLmphX3JpZ2h0IDwtIHkgOjogYy5qYV9yaWdodFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gVGJsLmFkZCB0Ymwga2V5IHsgamFfbGVmdCA9IFtdOyBqYV9yaWdodCA9IFsgeSBdIH0pXG4gICAgYzI7XG4gIFRibC5mb2xkXG4gICAgKGZ1biBrZXkgY2VsbCByZXMgLT5cbiAgICAgIG1hdGNoIG1lcmdlIGtleSBjZWxsLmphX2xlZnQgY2VsbC5qYV9yaWdodCB3aXRoXG4gICAgICB8IE5vbmUgLT4gcmVzXG4gICAgICB8IFNvbWUgeiAtPiB6IDo6IHJlcylcbiAgICB0YmwgW11cblxubGV0IGdyb3VwX2pvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyIChmdW4geCAtPiBUYmwucmVwbGFjZSB0YmwgeCBbXSkgYzE7XG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgKCogcHJvamVjdCBbeV0gaW50byBzb21lIGVsZW1lbnQgb2YgW2MxXSAqKVxuICAgICAgbGV0IGtleSA9IGYgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBsID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBUYmwucmVwbGFjZSB0Ymwga2V5ICh5IDo6IGwpXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKSlcbiAgICBjMjtcbiAgVGJsLmZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgbGV0IHJlYyBzZWFyY2ggZXEgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhbHNlXG4gICAgfCB5IDo6IGwnIC0+IGVxIHggeSB8fCBzZWFyY2ggZXEgeCBsJ1xuICBpblxuICBzZWFyY2ggZXEgeCBsXG5cbmxldCBhZGRfbm9kdXAgfmVxIHggbCA9XG4gIGlmIG1lbSB+ZXEgeCBsIHRoZW5cbiAgICBsXG4gIGVsc2VcbiAgICB4IDo6IGxcblxubGV0IHJlbW92ZV9vbmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlX29uZSB+ZXEgeCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IHkgOjogdGwgd2hlbiBlcSB4IHkgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyB0bFxuICAgIHwgeSA6OiB0bCAtPiByZW1vdmVfb25lIH5lcSB4ICh5IDo6IGFjYykgdGxcbiAgaW5cbiAgaWYgbWVtIH5lcSB4IGwgdGhlblxuICAgIHJlbW92ZV9vbmUgfmVxIHggW10gbFxuICBlbHNlXG4gICAgbFxuXG5sZXQgc3Vic2V0IH5lcSBsMSBsMiA9IExpc3QuZm9yX2FsbCAoZnVuIHQgLT4gbWVtIH5lcSB0IGwyKSBsMVxuXG5sZXQgdW5pcSB+ZXEgbCA9XG4gIGxldCByZWMgdW5pcSBlcSBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBMaXN0LmV4aXN0cyAoZXEgeCkgeHMgLT4gdW5pcSBlcSBhY2MgeHNcbiAgICB8IHggOjogeHMgLT4gdW5pcSBlcSAoeCA6OiBhY2MpIHhzXG4gIGluXG4gIHVuaXEgZXEgW10gbFxuXG5sZXQgdW5pb24gfmVxIGwxIGwyID1cbiAgbGV0IHJlYyB1bmlvbiBlcSBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gdW5pb24gZXEgYWNjIHhzIGwyXG4gICAgfCB4IDo6IHhzIC0+IHVuaW9uIGVxICh4IDo6IGFjYykgeHMgbDJcbiAgaW5cbiAgdW5pb24gZXEgW10gbDEgbDJcblxubGV0IGludGVyIH5lcSBsMSBsMiA9XG4gIGxldCByZWMgaW50ZXIgZXEgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gaW50ZXIgZXEgKHggOjogYWNjKSB4cyBsMlxuICAgIHwgXyA6OiB4cyAtPiBpbnRlciBlcSBhY2MgeHMgbDJcbiAgaW5cbiAgaW50ZXIgZXEgW10gbDEgbDJcblxubGV0IG1hcGkgZiBsID1cbiAgbGV0IHIgPSByZWYgMCBpblxuICBtYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCB5ID0gZiAhciB4IGluXG4gICAgICBpbmNyIHI7XG4gICAgICB5KVxuICAgIGxcblxubGV0IGl0ZXJpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+ICgpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBmIGkgeDtcbiAgICAgIGF1eCBmIChpICsgMSkgbCdcbiAgaW5cbiAgYXV4IGYgMCBsXG5cbmxldCBpdGVyaTIgZiBsMSBsMiA9XG4gIGxldCByZWMgYXV4IGYgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiAoKVxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcIml0ZXJpMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgZiBpIHgxIHgyO1xuICAgICAgYXV4IGYgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGF1eCBmIDAgbDEgbDJcblxubGV0IGZvbGRpIGYgYWNjIGwgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyBpIHggaW5cbiAgICAgIGZvbGRpIGYgYWNjIChpICsgMSkgbCdcbiAgaW5cbiAgZm9sZGkgZiBhY2MgMCBsXG5cbmxldCBmb2xkaTIgZiBhY2MgbDEgbDIgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gYWNjXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiZm9sZGkyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgaSB4MSB4MiBpblxuICAgICAgZm9sZGkgZiBhY2MgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGZvbGRpIGYgYWNjIDAgbDEgbDJcblxubGV0IHJlYyBnZXRfYXRfaWR4X3JlYyBpIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IF8gd2hlbiBpID0gMCAtPiB4XG4gIHwgXyA6OiBsJyAtPiBnZXRfYXRfaWR4X3JlYyAoaSAtIDEpIGwnXG5cbmxldCBnZXRfYXRfaWR4X2V4biBpIGwgPVxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBnZXRfYXRfaWR4X3JlYyBpIGxcblxubGV0IGdldF9hdF9pZHggaSBsID0gdHJ5IFNvbWUgKGdldF9hdF9pZHhfZXhuIGkgbCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgc2V0X2F0X2lkeCBpIHggbDAgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGwwXG4gICAgfCBfIDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyAoeCA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IGluc2VydF9hdF9pZHggaSB4IGwgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpIHggPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBbIHggXVxuICAgIHwgeSA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgKHggOjogeSA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKSB4XG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsIFtdIGkgeFxuXG5sZXQgcmVtb3ZlX2F0X2lkeCBpIGwwID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBsMFxuICAgIHwgXyA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbCdcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICByYW5nZSBpIChqIC0gc3RlcCkgKGogOjogYWNjKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0xpc3QucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIFtdXG5cbmxldCByYW5nZSBpIGogPVxuICBsZXQgcmVjIHVwIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgdXAgaSAoaiAtIDEpIChqIDo6IGFjYylcbiAgYW5kIGRvd24gaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICBkb3duIGkgKGogKyAxKSAoaiA6OiBhY2MpXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIFtdXG4gIGVsc2VcbiAgICBkb3duIGkgaiBbXVxuXG5sZXQgcmFuZ2UnIGkgaiA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSlcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKVxuXG5sZXQgKCAtLSApID0gcmFuZ2VcbmxldCAoIC0tXiApID0gcmFuZ2UnXG5cbmxldCByZXBsaWNhdGUgaSB4ID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoeCA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubGV0IHJlcGVhdCBpIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChMaXN0LnJldl9hcHBlbmQgbCBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubW9kdWxlIEFzc29jID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdCA9ICgnYSAqICdiKSBsaXN0XG5cbiAgbGV0IHJlYyBzZWFyY2hfZXhuIGVxIGwgeCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8ICh5LCB6KSA6OiBsJyAtPlxuICAgICAgaWYgZXEgeCB5IHRoZW5cbiAgICAgICAgelxuICAgICAgZWxzZVxuICAgICAgICBzZWFyY2hfZXhuIGVxIGwnIHhcblxuICBsZXQgZ2V0X2V4biB+ZXEgeCBsID0gc2VhcmNoX2V4biBlcSBsIHhcbiAgbGV0IGdldCB+ZXEgeCBsID0gdHJ5IFNvbWUgKHNlYXJjaF9leG4gZXEgbCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgKCogc2VhcmNoIGZvciBhIGJpbmRpbmcgZm9yIFt4XSBpbiBbbF0sIGFuZCBjYWxscyBbZiB4IChTb21lIHYpIHJlc3RdXG4gICAgIG9yIFtmIHggTm9uZSByZXN0XSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBmaW5kcyB0aGUgYmluZGluZy5cbiAgICAgW3Jlc3RdIGlzIHRoZSBsaXN0IG9mIHRoZSBvdGhlciBiaW5kaW5ncyAqKVxuICBsZXQgcmVjIHNlYXJjaF9zZXQgZXEgYWNjIGwgeCB+ZiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmIHggTm9uZSBhY2NcbiAgICB8ICh4JywgeScpIDo6IGwnIC0+XG4gICAgICBpZiBlcSB4IHgnIHRoZW5cbiAgICAgICAgZiB4IChTb21lIHknKSAoTGlzdC5yZXZfYXBwZW5kIGFjYyBsJylcbiAgICAgIGVsc2VcbiAgICAgICAgc2VhcmNoX3NldCBlcSAoKHgnLCB5JykgOjogYWNjKSBsJyB4IH5mXG5cbiAgbGV0IHNldCB+ZXEgeCB5IGwgPSBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIHggXyBsIC0+ICh4LCB5KSA6OiBsKVxuXG4gIGxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgICB0cnlcbiAgICAgIGlnbm9yZSAoc2VhcmNoX2V4biBlcSBsIHgpO1xuICAgICAgdHJ1ZVxuICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbiAgbGV0IHVwZGF0ZSB+ZXEgZiB4IGwgPVxuICAgIHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4geCBvcHRfeSByZXN0IC0+XG4gICAgICAgIG1hdGNoIGYgb3B0X3kgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gcmVzdCAoKiBkcm9wICopXG4gICAgICAgIHwgU29tZSB5JyAtPiAoeCwgeScpIDo6IHJlc3QpXG5cbiAgbGV0IHJlbW92ZSB+ZXEgeCBsID1cbiAgICBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIF8gb3B0X3kgcmVzdCAtPlxuICAgICAgICBtYXRjaCBvcHRfeSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBsICgqIGtlZXAgYXMgaXMgKilcbiAgICAgICAgfCBTb21lIF8gLT4gcmVzdClcblxuICBsZXQga2V5cyBsID0gbWFwIChmdW4gKGssIF8pIC0+IGspIGxcbiAgbGV0IHZhbHVlcyBsID0gbWFwIChmdW4gKF8sIHYpIC0+IHYpIGxcbiAgbGV0IG1hcF92YWx1ZXMgZiBsID0gbWFwIChmdW4gKGssIHYpIC0+IGssIGYgdikgbFxuZW5kXG5cbmxldCBhc3NvYyA9IEFzc29jLmdldF9leG5cbmxldCBhc3NvY19vcHQgPSBBc3NvYy5nZXRcbmxldCBtZW1fYXNzb2MgPSBBc3NvYy5tZW1cbmxldCByZW1vdmVfYXNzb2MgPSBBc3NvYy5yZW1vdmVcblxuKCoqIHsyIFJlZmVyZW5jZXMgb24gTGlzdHN9ICopXG5cbm1vZHVsZSBSZWYgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2EgbGlzdCByZWZcblxuICBsZXQgcHVzaCBsIHggPSBsIDo9IHggOjogIWxcblxuICBsZXQgcG9wIGwgPVxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbCA6PSB0YWlsO1xuICAgICAgU29tZSB4XG5cbiAgbGV0IHBvcF9leG4gbCA9XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJDQ0xpc3QuUmVmLnBvcF9leG5cIlxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsIDo9IHRhaWw7XG4gICAgICB4XG5cbiAgbGV0IGNyZWF0ZSAoKSA9IHJlZiBbXVxuICBsZXQgY2xlYXIgbCA9IGwgOj0gW11cbiAgbGV0IGxpZnQgZiBsID0gZiAhbFxuICBsZXQgcHVzaF9saXN0IHIgbCA9IHIgOj0gTGlzdC5yZXZfYXBwZW5kIGwgIXJcbmVuZFxuXG4oKiogezIgTW9uYWRpYyBPcGVyYXRpb25zfSAqKVxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIG9wZW4gTVxuXG4gIGxldCBtYXBfbSBmIGwgPVxuICAgIGxldCByZWMgYXV4IGYgYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IHJldHVybiAoTGlzdC5yZXYgYWNjKVxuICAgICAgfCB4IDo6IHRhaWwgLT4gZiB4ID4+PSBmdW4geCcgLT4gYXV4IGYgKHgnIDo6IGFjYykgdGFpbFxuICAgIGluXG4gICAgYXV4IGYgW10gbFxuXG4gIGxldCByZWMgbWFwX21fcGFyIGYgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBNLnJldHVybiBbXVxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgbGV0IHgnID0gZiB4IGluXG4gICAgICBsZXQgdGwnID0gbWFwX21fcGFyIGYgdGwgaW5cbiAgICAgIHgnID4+PSBmdW4geCcgLT5cbiAgICAgIHRsJyA+Pj0gZnVuIHRsJyAtPiBNLnJldHVybiAoeCcgOjogdGwnKVxuXG4gIGxldCBzZXF1ZW5jZV9tIGwgPSBtYXBfbSAoZnVuIHggLT4geCkgbFxuXG4gIGxldCByZWMgZm9sZF9tIGYgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gcmV0dXJuIGFjY1xuICAgIHwgeCA6OiBsJyAtPiBmIGFjYyB4ID4+PSBmdW4gYWNjJyAtPiBmb2xkX20gZiBhY2MnIGwnXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tX2xlbiBsZW4gZyBzdCA9IGluaXQgbGVuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbGVuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIGxlbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbGVuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBsZW4gZyBzdFxuXG5sZXQgcmFuZG9tX2Nob29zZSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgXyA6OiBfIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICBmdW4gc3QgLT5cbiAgICAgIGxldCBpID0gUmFuZG9tLlN0YXRlLmludCBzdCBsZW4gaW5cbiAgICAgIExpc3QubnRoIGwgaVxuXG5sZXQgcmFuZG9tX3NlcXVlbmNlIGwgc3QgPSBtYXAgKGZ1biBnIC0+IGcgc3QpIGxcblxubGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIGwgaW5cbiAgc3RhcnQgXiBTdHJpbmcuY29uY2F0IHNlcCBsIF4gc3RvcFxuXG5sZXQgdG9faXRlciBsIGsgPSBMaXN0Lml0ZXIgayBsXG5cbmxldCByZWMgdG9fc2VxIGwgKCkgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBTZXEuTmlsXG4gIHwgeCA6OiB0bCAtPiBTZXEuQ29ucyAoeCwgdG9fc2VxIHRsKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgaSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5yZXYgIWxcblxubGV0IG9mX3NlcV9yZXYgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgcyA9XG4gICAgbWF0Y2ggcyAoKSB3aXRoXG4gICAgfCBTZXEuTmlsIC0+IGFjY1xuICAgIHwgU2VxLkNvbnMgKHgsIHRsKSAtPiBsb29wICh4IDo6IGFjYykgdGxcbiAgaW5cbiAgbG9vcCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBvZl9zZXEgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgc2VxID1cbiAgICBpZiBpIDw9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgKG9mX3NlcV9yZXYgc2VxKVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+IHggOjogZGlyZWN0IChpIC0gMSkgdGxcbiAgICApXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5bQEBAZW5kaWZdXG5cbmxldCB0b19nZW4gbCA9XG4gIGxldCBsID0gcmVmIGwgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbCA6PSBsJztcbiAgICAgIFNvbWUgeFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGcgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHNhZmUgW10gZ1xuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSB4IC0+IHggOjogZGlyZWN0IChpIC0gMSkgZ1xuICAgIClcbiAgYW5kIHNhZmUgYWNjIGcgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFNvbWUgeCAtPiBzYWZlICh4IDo6IGFjYykgZ1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGdcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9nZW4gZyA9XG4gIG1hdGNoIGcgKCkgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4geCA6OiBvZl9nZW4gZ1xuXG5bQEBAZW5kaWZdXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXRbQGlubGluZV0gKCA+fD0gKSBsIGYgPSBtYXAgZiBsXG4gIGxldFtAaW5saW5lXSAoID4+PSApIGwgZiA9IGZsYXRfbWFwIGYgbFxuICBsZXQgKCBAICkgPSAoIEAgKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBsMSBsMiA9IHByb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgbDEgbDJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbiAgbGV0ICggYW5kJiApID0gY29tYmluZV9zaG9ydGVzdFxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX2l0ZW0gZm10IGwgPVxuICBsZXQgcmVjIHByaW50IGZtdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IHggOjogKF8gOjogXyBhcyBsKSAtPlxuICAgICAgcHBfaXRlbSBmbXQgeDtcbiAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICBwcmludCBmbXQgbFxuICAgIHwgWyB4IF0gLT4gcHBfaXRlbSBmbXQgeFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgcHBfc3RhcnQgZm10ICgpO1xuICBwcmludCBmbXQgbDtcbiAgcHBfc3RvcCBmbXQgKClcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBPcHRpb25zfSAqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb25cblxubGV0W0BpbmxpbmVdIG1hcCBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gU29tZSAoZiB4KVxuXG5sZXQgbWFwX29yIH5kZWZhdWx0IGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IG1hcF9sYXp5IGRlZmF1bHRfZm4gZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBpc19ub25lID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiAwXG4gIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBmIHggeVxuXG5sZXQgZXF1YWwgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSBfLCBOb25lIHwgTm9uZSwgU29tZSBfIC0+IGZhbHNlXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gZiB4IHlcblxubGV0IHJldHVybiB4ID0gU29tZSB4XG5sZXQgc29tZSA9IHJldHVyblxubGV0IG5vbmUgPSBOb25lXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBmbGF0X21hcF9sIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBiaW5kIG8gZiA9IGZsYXRfbWFwIGYgb1xubGV0ICggPj49ICkgPSBiaW5kXG5sZXQgcHVyZSB4ID0gU29tZSB4XG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYsIHggd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIGYsIFNvbWUgeCAtPiBTb21lIChmIHgpXG5cbmxldCBvcl8gfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfXG4gIHwgU29tZSBfIC0+IGFcblxubGV0IG9yX2xhenkgfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfICgpXG4gIHwgU29tZSBfIC0+IGFcblxubGV0ICggPCs+ICkgYSBiID0gb3JfIH5lbHNlXzpiIGFcbmxldCBjaG9pY2UgbCA9IExpc3QuZm9sZF9sZWZ0ICggPCs+ICkgTm9uZSBsXG5cbmxldCBtYXAyIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lIChmIHggeSlcblxubGV0IGZpbHRlciBwID0gZnVuY3Rpb25cbiAgfCBTb21lIHggYXMgbyB3aGVuIHAgeCAtPiBvXG4gIHwgXyAtPiBOb25lXG5cbmxldCBpZl8gcCB4ID1cbiAgaWYgcCB4IHRoZW5cbiAgICBTb21lIHhcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSB4IC0+IHAgeFxuXG5sZXQgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIHggLT4gcCB4XG5cbmxldCBpdGVyIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBmb2xkIGYgYWNjIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGFjY1xuICB8IFNvbWUgeCAtPiBmIGFjYyB4XG5cbmxldCBnZXRfb3IgfmRlZmF1bHQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCB2YWx1ZSB4IH5kZWZhdWx0ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB5IC0+IHlcblxubGV0IGdldF9leG4gPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDT3B0aW9uLmdldF9leG5cIlxuXG5sZXQgZ2V0X2V4bl9vciBtc2cgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBtc2dcblxubGV0IGdldF9sYXp5IGRlZmF1bHRfZm4geCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdF9mbiAoKVxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCBzZXF1ZW5jZV9sIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTb21lIChMaXN0LnJldiBhY2MpXG4gICAgfCBTb21lIHggOjogbCcgLT4gYXV4ICh4IDo6IGFjYykgbCdcbiAgICB8IE5vbmUgOjogXyAtPiByYWlzZSBFeGl0XG4gIGluXG4gIHRyeSBhdXggW10gbCB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgd3JhcCA/KGhhbmRsZXIgPSBmdW4gXyAtPiB0cnVlKSBmIHggPVxuICB0cnkgU29tZSAoZiB4KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHdyYXAyID8oaGFuZGxlciA9IGZ1biBfIC0+IHRydWUpIGYgeCB5ID1cbiAgdHJ5IFNvbWUgKGYgeCB5KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHRvX2xpc3QgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gWyB4IF1cblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICB8IHggOjogXyAtPiBTb21lIHhcbiAgfCBbXSAtPiBOb25lXG5cbmxldCB0b19yZXN1bHQgZXJyID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIGVyclxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCB0b19yZXN1bHRfbGF6eSBlcnJfZm4gPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgKGVycl9mbiAoKSlcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgb2ZfcmVzdWx0ID0gZnVuY3Rpb25cbiAgfCBFcnJvciBfIC0+IE5vbmVcbiAgfCBPayB4IC0+IFNvbWUgeFxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPnw9ICkgeCBmID0gbWFwIGYgeFxuICBsZXQgKCA+Pj0gKSA9ICggPj49IClcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoIDwrPiApID0gKCA8Kz4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgbzEgbzIgPVxuICAgIG1hdGNoIG8xLCBvMiB3aXRoXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lICh4LCB5KVxuICAgIHwgXyAtPiBOb25lXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGlmIFJhbmRvbS5TdGF0ZS5ib29sIHN0IHRoZW5cbiAgICBTb21lIChnIHN0KVxuICBlbHNlXG4gICAgTm9uZVxuXG5leGNlcHRpb24gRXhpdENob2ljZVxuXG5sZXQgY2hvaWNlX2l0ZXIgcyA9XG4gIGxldCByID0gcmVmIE5vbmUgaW5cbiAgKHRyeVxuICAgICBzIChmdW5jdGlvblxuICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgIHwgU29tZSBfIGFzIG8gLT5cbiAgICAgICAgIHIgOj0gbztcbiAgICAgICAgIHJhaXNlIEV4aXRDaG9pY2UpXG4gICB3aXRoIEV4aXRDaG9pY2UgLT4gKCkpO1xuICAhclxuXG5sZXQgcmVjIGNob2ljZV9zZXEgcyA9XG4gIG1hdGNoIHMgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gTm9uZVxuICB8IFNlcS5Db25zIChTb21lIHgsIF8pIC0+IFNvbWUgeFxuICB8IFNlcS5Db25zIChOb25lLCB0bCkgLT4gY2hvaWNlX3NlcSB0bFxuXG5sZXQgdG9fZ2VuIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGZ1biAoKSAtPiBOb25lXG4gIHwgU29tZSBfIC0+XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuIChcbiAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgIG9cbiAgICAgICkgZWxzZVxuICAgICAgICBOb25lXG5cbmxldCB0b19pdGVyIG8gayA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gayB4XG5cbmxldCB0b19zZXEgbyAoKSA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gU2VxLk5pbFxuICB8IFNvbWUgeCAtPiBTZXEuQ29ucyAoeCwgU2VxLmVtcHR5KVxuXG5sZXQgcHAgcHB4IG91dCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIk5vbmVcIlxuICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJAW1NvbWUgJWFAXVwiIHBweCB4XG5cbmxldCBmbGF0dGVuID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gTm9uZVxuXG5sZXQgcmV0dXJuX2lmIGIgeCA9XG4gIGlmIGIgdGhlblxuICAgIFNvbWUgeFxuICBlbHNlXG4gICAgTm9uZVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFJhbmRvbSBHZW5lcmF0b3JzfSAqKVxuXG5pbmNsdWRlIFJhbmRvbVxuXG50eXBlIHN0YXRlID0gUmFuZG9tLlN0YXRlLnRcbnR5cGUgJ2EgdCA9IHN0YXRlIC0+ICdhXG50eXBlICdhIHJhbmRvbV9nZW4gPSAnYSB0XG5cbmxldCByZXR1cm4geCBfc3QgPSB4XG5sZXQgZmxhdF9tYXAgZiBnIHN0ID0gZiAoZyBzdCkgc3RcbmxldCAoID4+PSApIGcgZiBzdCA9IGZsYXRfbWFwIGYgZyBzdFxubGV0IG1hcCBmIGcgc3QgPSBmIChnIHN0KVxubGV0ICggPnw9ICkgZyBmIHN0ID0gbWFwIGYgZyBzdFxubGV0IGRlbGF5IGYgc3QgPSBmICgpIHN0XG5cbmxldCBfY2hvb3NlX2FycmF5IGEgc3QgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkNDUmFuZG9tLmNob29zZV9hcnJheVwiO1xuICBhLihSYW5kb20uU3RhdGUuaW50IHN0IChBcnJheS5sZW5ndGggYSkpXG5cbmxldCBjaG9vc2VfYXJyYXkgYSBzdCA9XG4gIHRyeSBTb21lIChfY2hvb3NlX2FycmF5IGEgc3Qgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IGNob29zZSBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgY2hvb3NlX2FycmF5IGFcblxubGV0IGNob29zZV9leG4gbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIGZ1biBzdCAtPiBfY2hvb3NlX2FycmF5IGEgc3Qgc3RcblxubGV0IGNob29zZV9yZXR1cm4gbCA9IF9jaG9vc2VfYXJyYXkgKEFycmF5Lm9mX2xpc3QgbClcblxuZXhjZXB0aW9uIFBpY2tfZnJvbV9lbXB0eVxuXG5sZXQgcGlja19saXN0IGwgPVxuICBsZXQgbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgaWYgbiA9IDAgdGhlbiByYWlzZSBQaWNrX2Zyb21fZW1wdHk7XG4gIGZ1biBzdCAtPiBMaXN0Lm50aCBsIChSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCBwaWNrX2FycmF5IGEgPVxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW4gcmFpc2UgUGlja19mcm9tX2VtcHR5O1xuICBmdW4gc3QgLT4gQXJyYXkuZ2V0IGEgKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IGludCBpIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBpXG5sZXQgc21hbGxfaW50ID0gaW50IDEwMFxubGV0IGludF9yYW5nZSBpIGogc3QgPSBpICsgUmFuZG9tLlN0YXRlLmludCBzdCAoaiAtIGkgKyAxKVxubGV0IGZsb2F0IGYgc3QgPSBSYW5kb20uU3RhdGUuZmxvYXQgc3QgZlxubGV0IHNtYWxsX2Zsb2F0ID0gZmxvYXQgMTAwLjBcbmxldCBmbG9hdF9yYW5nZSBpIGogc3QgPSBpICsuIFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCAoaiAtLiBpKVxuXG4oKiBUT0RPOiBzYW1wbGUgZnVuY3Rpb25zICopXG5cbmxldCByZXBsaWNhdGUgbiBnIHN0ID1cbiAgbGV0IHJlYyBhdXggYWNjIG4gPVxuICAgIGlmIG4gPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoZyBzdCA6OiBhY2MpIChuIC0gMSlcbiAgaW5cbiAgYXV4IFtdIG5cblxuKCogU2FtcGxlIHdpdGhvdXQgcmVwbGFjZW1lbnQgdXNpbmcgcmVqZWN0aW9uIHNhbXBsaW5nLiAqKVxubGV0IHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgKHR5cGUgZWx0KSB+Y21wIGsgKHJuZyA6IGVsdCB0KSBzdCA9XG4gIGxldCBtb2R1bGUgUyA9IFNldC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBlbHRcblxuICAgIGxldCBjb21wYXJlID0gY21wXG4gIGVuZCkgaW5cbiAgbGV0IHJlYyBhdXggcyBrID1cbiAgICBpZiBrIDw9IDAgdGhlblxuICAgICAgUy5lbGVtZW50cyBzXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IHJuZyBzdCBpblxuICAgICAgaWYgUy5tZW0geCBzIHRoZW5cbiAgICAgICAgYXV4IHMga1xuICAgICAgZWxzZVxuICAgICAgICBhdXggKFMuYWRkIHggcykgKGsgLSAxKVxuICAgIClcbiAgaW5cbiAgaWYgayA8PSAwIHRoZW4gaW52YWxpZF9hcmcgXCJzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzXCI7XG4gIGF1eCBTLmVtcHR5IGtcblxubGV0IGxpc3Rfc2VxIGwgc3QgPSBMaXN0Lm1hcCAoZnVuIGYgLT4gZiBzdCkgbFxuXG5sZXQgc3BsaXQgaSBzdCA9XG4gIGlmIGkgPCAyIHRoZW5cbiAgICBOb25lXG4gIGVsc2UgKFxuICAgIGxldCBqID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgKGkgLSAxKSBpblxuICAgIFNvbWUgKGosIGkgLSBqKVxuICApXG5cbmxldCBfZGlmZl9saXN0IH5sYXN0IGwgPVxuICBsZXQgcmVjIGRpZmZfbGlzdCBhY2MgPSBmdW5jdGlvblxuICAgIHwgWyBhIF0gLT4gU29tZSAoKGxhc3QgLSBhKSA6OiBhY2MpXG4gICAgfCBhIDo6IChiIDo6IF8gYXMgcikgLT4gZGlmZl9saXN0ICgoYiAtIGEpIDo6IGFjYykgclxuICAgIHwgW10gLT4gTm9uZVxuICBpblxuICBkaWZmX2xpc3QgW10gbFxuXG4oKiBQYXJ0aXRpb24gb2YgYW4gaW50IGludG8gW2xlbl0gaW50ZWdlcnMgdW5pZm9ybWx5LlxuICAgV2UgZmlyc3Qgc2FtcGxlIChsZW4tMSkgcG9pbnRzIGZyb20gdGhlIHNldCB7MSwuLmktMX0gd2l0aG91dCByZXBsYWNlbWVudC5cbiAgIFdlIHNvcnQgdGhlc2UgcG9pbnRzIGFuZCBhZGQgYmFjayAwIGFuZCBpLCB3ZSBoYXZlIHRodXNcbiAgIHhfMCA9IDAgPCB4XzEgPCB4XzIgPCDigKYgPCB4X3tsZW4tMX0gPCBpID0geF97bGVufS5cbiAgIElmIHdlIGRlZmluZSwgeV9rID0geF97aysxfSAtIHhfe2t9IGZvciBrIGluIDAg4oCmIChsZW4tMSksIHRoZW4gYnkgY29uc3RydWN0aW9uXG4gICDiiJFfayB5X2sgPSDiiJFfayAoeF97aysxfSAtIHhfayApID0geF97bGVufSAtIHhfMCA9IGkuICopXG5sZXQgc3BsaXRfbGlzdCBpIH5sZW4gc3QgPVxuICBpZiBsZW4gPD0gMSB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLnNwbGl0X2xpc3RcIjtcbiAgaWYgaSA+PSBsZW4gdGhlbiAoXG4gICAgbGV0IHhzID1cbiAgICAgIHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgfmNtcDpjb21wYXJlIChsZW4gLSAxKSAoaW50X3JhbmdlIDEgKGkgLSAxKSkgc3RcbiAgICBpblxuICAgIF9kaWZmX2xpc3Qgfmxhc3Q6aSAoMCA6OiB4cylcbiAgKSBlbHNlXG4gICAgTm9uZVxuXG5sZXQgcmV0cnkgPyhtYXggPSAxMCkgZyBzdCA9XG4gIGxldCByZWMgYXV4IG4gPVxuICAgIG1hdGNoIGcgc3Qgd2l0aFxuICAgIHwgTm9uZSB3aGVuIG4gPSAwIC0+IE5vbmVcbiAgICB8IE5vbmUgLT4gYXV4IChuIC0gMSkgKCogcmV0cnkgKilcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gIGluXG4gIGF1eCBtYXhcblxubGV0IHJlYyB0cnlfc3VjY2Vzc2l2ZWx5IGwgc3QgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBOb25lXG4gIHwgZyA6OiBsJyAtPlxuICAgIChtYXRjaCBnIHN0IHdpdGhcbiAgICB8IE5vbmUgLT4gdHJ5X3N1Y2Nlc3NpdmVseSBsJyBzdFxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXMpXG5cbmxldCAoIDw/PiApIGEgYiA9IHRyeV9zdWNjZXNzaXZlbHkgWyBhOyBiIF1cblxuZXhjZXB0aW9uIEJhY2t0cmFja1xuXG5sZXQgX2Nob29zZV9hcnJheV9jYWxsIGEgZiBzdCA9XG4gIHRyeSBmIChfY2hvb3NlX2FycmF5IGEgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IHJhaXNlIEJhY2t0cmFja1xuXG5sZXQgZml4ID8oc3ViMSA9IFtdKSA/KHN1YjIgPSBbXSkgPyhzdWJuID0gW10pIH5iYXNlIGZ1ZWwgc3QgPVxuICBsZXQgc3ViMSA9IEFycmF5Lm9mX2xpc3Qgc3ViMVxuICBhbmQgc3ViMiA9IEFycmF5Lm9mX2xpc3Qgc3ViMlxuICBhbmQgc3VibiA9IEFycmF5Lm9mX2xpc3Qgc3VibiBpblxuICAoKiByZWN1cnNpdmUgZnVuY3Rpb24gd2l0aCBmdWVsICopXG4gIGxldCByZWMgbWFrZSBmdWVsIHN0ID1cbiAgICBpZiBmdWVsID0gMCB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIGlmIGZ1ZWwgPSAxIHRoZW5cbiAgICAgIGJhc2Ugc3RcbiAgICBlbHNlXG4gICAgICBfdHJ5X290aGVyd2lzZSAwXG4gICAgICAgIFt8XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1YjEgKGZ1biBmIC0+IGYgKG1ha2UgKGZ1ZWwgLSAxKSkgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWIyIChmdW4gZiAtPlxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdCBmdWVsIHN0IHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEJhY2t0cmFja1xuICAgICAgICAgICAgICB8IFNvbWUgKGksIGopIC0+IGYgKG1ha2UgaSkgKG1ha2Ugaikgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWJuIChmdW4gKGxlbiwgZikgLT5cbiAgICAgICAgICAgICAgbGV0IGxlbiA9IGxlbiBzdCBpblxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdF9saXN0IGZ1ZWwgfmxlbiBzdCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBCYWNrdHJhY2tcbiAgICAgICAgICAgICAgfCBTb21lIGwnIC0+IGYgKGZ1biBzdCAtPiBMaXN0Lm1hcCAoZnVuIHggLT4gbWFrZSB4IHN0KSBsJykgc3QpO1xuICAgICAgICAgIGJhc2UgKCogYmFzZSBjYXNlIHRoZW4gKik7XG4gICAgICAgIHxdXG4gIGFuZCBfdHJ5X290aGVyd2lzZSBpIGEgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIChcbiAgICAgIHRyeSBhLihpKSBzdCB3aXRoIEJhY2t0cmFjayAtPiBfdHJ5X290aGVyd2lzZSAoaSArIDEpIGFcbiAgICApXG4gIGluXG4gIG1ha2UgKGZ1ZWwgc3QpIHN0XG5cbmxldCBwdXJlIHggX3N0ID0geFxubGV0ICggPCo+ICkgZiBnIHN0ID0gZiBzdCAoZyBzdClcbmxldCAoIGxldCsgKSA9ICggPnw9IClcbmxldCAoIGxldCogKSA9ICggPj49IClcbmxldFtAaW5saW5lXSAoIGFuZCsgKSBhMSBhMiBzdCA9IGExIHN0LCBhMiBzdFxubGV0ICggYW5kKiApID0gKCBhbmQrIClcbmxldCBfX2RlZmF1bHRfc3RhdGUgPSBSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQgKClcbmxldCBydW4gPyhzdCA9IF9fZGVmYXVsdF9zdGF0ZSkgZyA9IGcgc3RcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBFcnJvciBNb25hZH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIG9yZCA9ICdhIC0+ICdhIC0+IGludFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBCYXNpY3N9ICopXG5cbnR5cGUgbm9ucmVjICgrJ2dvb2QsICsnYmFkKSByZXN1bHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9XG4gIHwgT2sgb2YgJ2dvb2RcbiAgfCBFcnJvciBvZiAnYmFkXG5cbnR5cGUgKCsnZ29vZCwgKydiYWQpIHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9IE9rIG9mICdnb29kIHwgRXJyb3Igb2YgJ2JhZFxuXG5sZXQgcmV0dXJuIHggPSBPayB4XG5sZXQgZmFpbCBzID0gRXJyb3Igc1xuXG5sZXQgZmFpbF9wcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgUHJpbnRmLmticHJpbnRmIChmdW4gYnVmIC0+IGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKSBidWYgZm9ybWF0XG5cbmxldCBmYWlsX2ZwcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmb3JtYXRcblxubGV0IGFkZF9jdHggbXNnIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBFcnJvciBlIC0+IEVycm9yIChlIF4gXCJcXG5jb250ZXh0OlwiIF4gbXNnKVxuICB8IE9rIHggLT4gT2sgeFxuXG5sZXQgYWRkX2N0eGYgbXNnID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCBlIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgYWRkX2N0eCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgZSlcbiAgICBvdXQgbXNnXG5cbmxldCBvZl9leG4gZSA9XG4gIGxldCBtc2cgPSBQcmludGV4Yy50b19zdHJpbmcgZSBpblxuICBFcnJvciBtc2dcblxubGV0IG9mX2V4bl90cmFjZSBlID1cbiAgbGV0IHJlcyA9XG4gICAgUHJpbnRmLnNwcmludGYgXCIlc1xcbiVzXCIgKFByaW50ZXhjLnRvX3N0cmluZyBlKSAoUHJpbnRleGMuZ2V0X2JhY2t0cmFjZSAoKSlcbiAgaW5cbiAgRXJyb3IgcmVzXG5cbmxldCBvcHRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE5vbmUgLT4gT2sgTm9uZVxuICB8IFNvbWUgeCAtPlxuICAgIChtYXRjaCBmIHggd2l0aFxuICAgIHwgT2sgeCAtPiBPayAoU29tZSB4KVxuICAgIHwgRXJyb3IgZSAtPiBFcnJvciBlKVxuXG5sZXQgbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IG1hcF9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gIHwgRXJyb3IgeSAtPiBFcnJvciAoZiB5KVxuXG5sZXQgbWFwMiBmIGcgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIChnIHMpXG5cbmxldCBpdGVyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG5sZXQgaXRlcl9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyAtPiAoKVxuICB8IEVycm9yIGVyciAtPiBmIGVyclxuXG5leGNlcHRpb24gR2V0X2Vycm9yXG5cbmxldCBnZXRfZXhuID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IHJhaXNlIEdldF9lcnJvclxuXG5sZXQgZ2V0X29yIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IGRlZmF1bHRcblxubGV0IGdldF9sYXp5IGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIGUgLT4gZiBlXG5cbmxldCBnZXRfb3JfZmFpbHdpdGggPSBmdW5jdGlvblxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIG1zZyAtPiBmYWlsd2l0aCBtc2dcblxubGV0IG1hcF9vciBmIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIF8gLT4gZGVmYXVsdFxuXG5sZXQgY2F0Y2ggZSB+b2sgfmVyciA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHkgLT4gZXJyIHlcblxubGV0IGZsYXRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbmxldCBlcXVhbCB+ZXJyIGVxIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gZXEgeCB5XG4gIHwgRXJyb3IgcywgRXJyb3IgcycgLT4gZXJyIHMgcydcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5lcnIgY21wIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gY21wIHggeVxuICB8IE9rIF8sIF8gLT4gMVxuICB8IF8sIE9rIF8gLT4gLTFcbiAgfCBFcnJvciBzLCBFcnJvciBzJyAtPiBlcnIgcyBzJ1xuXG5sZXQgZm9sZCB+b2sgfmVycm9yIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBPayB4IC0+IG9rIHhcbiAgfCBFcnJvciBzIC0+IGVycm9yIHNcblxubGV0IGZvbGRfb2sgZiBhY2MgciA9XG4gIG1hdGNoIHIgd2l0aFxuICB8IE9rIHggLT4gZiBhY2MgeFxuICB8IEVycm9yIF8gLT4gYWNjXG5cbmxldCBpc19vayA9IGZ1bmN0aW9uXG4gIHwgT2sgXyAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvblxuICB8IE9rIF8gLT4gZmFsc2VcbiAgfCBFcnJvciBfIC0+IHRydWVcblxuKCoqIHsyIFdyYXBwZXJzfSAqKVxuXG5sZXQgZ3VhcmQgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCBndWFyZF9zdHIgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IG9mX2V4biBlXG5sZXQgZ3VhcmRfc3RyX3RyYWNlIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBvZl9leG5fdHJhY2UgZVxubGV0IHdyYXAxIGYgeCA9IHRyeSByZXR1cm4gKGYgeCkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCB3cmFwMiBmIHggeSA9IHRyeSByZXR1cm4gKGYgeCB5KSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IHdyYXAzIGYgeCB5IHogPSB0cnkgcmV0dXJuIChmIHggeSB6KSB3aXRoIGUgLT4gRXJyb3IgZVxuXG4oKiogezIgQXBwbGljYXRpdmV9ICopXG5cbmxldCBwdXJlID0gcmV0dXJuXG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYgd2l0aFxuICB8IEVycm9yIHMgLT4gZmFpbCBzXG4gIHwgT2sgZiAtPiBtYXAgZiB4XG5cbmxldCBqb2luIHQgPVxuICBtYXRjaCB0IHdpdGhcbiAgfCBPayAoT2sgbykgLT4gT2sgb1xuICB8IE9rIChFcnJvciBlKSAtPiBFcnJvciBlXG4gIHwgRXJyb3IgXyBhcyBlIC0+IGVcblxubGV0IGJvdGggeCB5ID1cbiAgbWF0Y2ggeCwgeSB3aXRoXG4gIHwgT2sgbywgT2sgbycgLT4gT2sgKG8sIG8nKVxuICB8IE9rIF8sIEVycm9yIGUgLT4gRXJyb3IgZVxuICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuXG4oKiogezIgQ29sbGVjdGlvbnN9ICopXG5cbmxldCBtYXBfbCBmIGwgPVxuICBsZXQgcmVjIG1hcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBPayAoTGlzdC5yZXYgYWNjKVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgICAgfCBPayB5IC0+IG1hcCAoeSA6OiBhY2MpIGwnKVxuICBpblxuICBtYXAgW10gbFxuXG5sZXQgZmxhdHRlbl9sIGwgPVxuICBsZXQgcmVjIGxvb3AgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gT2sgKExpc3QucmV2IGFjYylcbiAgICB8IE9rIHggOjogbCcgLT4gbG9vcCAoeCA6OiBhY2MpIGwnXG4gICAgfCBFcnJvciBlIDo6IF8gLT4gRXJyb3IgZVxuICBpblxuICBsb29wIFtdIGxcblxuZXhjZXB0aW9uIExvY2FsRXhpdFxuXG5sZXQgZm9sZF9pdGVyIGYgYWNjIHNlcSA9XG4gIGxldCBlcnIgPSByZWYgTm9uZSBpblxuICB0cnlcbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIHNlcSAoZnVuIHggLT5cbiAgICAgICAgbWF0Y2ggZiAhYWNjIHggd2l0aFxuICAgICAgICB8IEVycm9yIHMgLT5cbiAgICAgICAgICBlcnIgOj0gU29tZSBzO1xuICAgICAgICAgIHJhaXNlIExvY2FsRXhpdFxuICAgICAgICB8IE9rIHkgLT4gYWNjIDo9IHkpO1xuICAgIE9rICFhY2NcbiAgd2l0aCBMb2NhbEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBzIC0+IEVycm9yIHMpXG5cbmxldCBmb2xkX2wgZiBhY2MgbCA9IGZvbGRfaXRlciBmIGFjYyAoZnVuIGsgLT4gTGlzdC5pdGVyIGsgbClcblxuKCoqIHsyIE1pc2N9ICopXG5cbmxldCBjaG9vc2UgbCA9XG4gIGxldCByZWMgZmluZF8gPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCAoT2sgXyBhcyByZXMpIDo6IF8gLT4gcmVzXG4gICAgfCBFcnJvciBfIDo6IGwnIC0+IGZpbmRfIGwnXG4gIGluXG4gIHRyeSBmaW5kXyBsXG4gIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgbGV0IGwnID1cbiAgICAgIExpc3QubWFwXG4gICAgICAgIChmdW5jdGlvblxuICAgICAgICAgIHwgRXJyb3IgcyAtPiBzXG4gICAgICAgICAgfCBPayBfIC0+IGFzc2VydCBmYWxzZSlcbiAgICAgICAgbFxuICAgIGluXG4gICAgRXJyb3IgbCdcblxubGV0IHJldHJ5IG4gZiA9XG4gIGxldCByZWMgcmV0cnkgbiBhY2MgPVxuICAgIG1hdGNoIG4gd2l0aFxuICAgIHwgMCAtPiBmYWlsIChMaXN0LnJldiBhY2MpXG4gICAgfCBfIC0+XG4gICAgICAobWF0Y2ggZiAoKSB3aXRoXG4gICAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSlcbiAgaW5cbiAgcmV0cnkgbiBbXVxuXG4oKiogezIgSW5maXh9ICopXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCA+fD0gKSBlIGYgPSBtYXAgZiBlXG4gIGxldCAoID4+PSApIGUgZiA9IGZsYXRfbWFwIGYgZVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG5cbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIHgxIHgyID1cbiAgICBtYXRjaCB4MSwgeDIgd2l0aFxuICAgIHwgT2sgeCwgT2sgeSAtPiBPayAoeCwgeSlcbiAgICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuICAgIHwgXywgRXJyb3IgZSAtPiBFcnJvciBlXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbigqKiB7MiBNb25hZGljIE9wZXJhdGlvbnN9ICopXG5cbm1vZHVsZSB0eXBlIE1PTkFEID0gc2lnXG4gIHR5cGUgJ2EgdFxuXG4gIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG4gIHZhbCAoID4+PSApIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuZW5kXG5cbm1vZHVsZSBUcmF2ZXJzZSAoTSA6IE1PTkFEKSA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSA9IE0uKCA+Pj0gKVxuXG4gIGxldCBtYXBfbSBmIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgcyAtPiBNLnJldHVybiAoRXJyb3IgcylcbiAgICB8IE9rIHggLT4gZiB4ID4+PSBmdW4geSAtPiBNLnJldHVybiAoT2sgeSlcblxuICBsZXQgc2VxdWVuY2VfbSBtID0gbWFwX20gKGZ1biB4IC0+IHgpIG1cblxuICBsZXQgZm9sZF9tIGYgYWNjIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgXyAtPiBNLnJldHVybiBhY2NcbiAgICB8IE9rIHggLT4gZiBhY2MgeCA+Pj0gZnVuIHkgLT4gTS5yZXR1cm4geVxuXG4gIGxldCByZXRyeV9tIG4gZiA9XG4gICAgbGV0IHJlYyByZXRyeSBuIGFjYyA9XG4gICAgICBtYXRjaCBuIHdpdGhcbiAgICAgIHwgMCAtPiBNLnJldHVybiAoZmFpbCAoTGlzdC5yZXYgYWNjKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBmICgpID4+PSAoIGZ1bmN0aW9uXG4gICAgICAgIHwgT2sgeCAtPiBNLnJldHVybiAoT2sgeClcbiAgICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSApXG4gICAgaW5cbiAgICByZXRyeSBuIFtdXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG5sZXQgdG9fb3B0ID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IFNvbWUgeFxuICB8IEVycm9yIF8gLT4gTm9uZVxuXG5sZXQgb2Zfb3B0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIFwib2Zfb3B0XCJcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgdG9fc2VxIGUgKCkgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG4gIHwgRXJyb3IgXyAtPiBTZXEuTmlsXG5cbmxldCB0b19pdGVyIGUgayA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gayB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG50eXBlICgnYSwgJ2IpIGVycm9yID0gWyBgT2sgb2YgJ2EgfCBgRXJyb3Igb2YgJ2IgXVxuXG5sZXQgb2ZfZXJyID0gZnVuY3Rpb25cbiAgfCBgT2sgeCAtPiBPayB4XG4gIHwgYEVycm9yIHkgLT4gRXJyb3IgeVxuXG5sZXQgdG9fZXJyID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IGBPayB4XG4gIHwgRXJyb3IgeSAtPiBgRXJyb3IgeVxuXG4oKiogezIgSU99ICopXG5cbmxldCBwcCBwcF94IGZtdCBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW29rKEAsJWEpQF1cIiBwcF94IHhcbiAgfCBFcnJvciBzIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbZXJyb3IoQCwlcylAXVwiIHNcblxubGV0IHBwJyBwcF94IHBwX2UgZm10IGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbb2soQCwlYSlAXVwiIHBwX3ggeFxuICB8IEVycm9yIHMgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtlcnJvcihALCVhKUBdXCIgcHBfZSBzXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgV3JhcHBlciBhcm91bmQgU2V0fSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID0gU2V0Lk9yZGVyZWRUeXBlXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBTZXQuU1xuXG4gIHZhbCBtaW5fZWx0X29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshbWluX2VsdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIG1heF9lbHRfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFtYXhfZWx0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgY2hvb3NlX29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshY2hvb3NlfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9vcHQgOiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgKCoqIEZpbmQgbWluaW11bSBlbGVtZW50IHNhdGlzZnlpbmcgcHJlZGljYXRlLlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0X29wdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kX2ZpcnN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdF9tYXAgOiAoZWx0IC0+ICdhIG9wdGlvbikgLT4gdCAtPiAnYSBvcHRpb25cbiAgKCoqIFtmaW5kX2ZpcnN0X21hcCBmIHNdIGZpbmQgdGhlIG1pbmltdW0gZWxlbWVudCBbeF0gb2YgW3NdIHN1Y2ggdGhhdCBbZiB4ID0gU29tZSB5XVxuICAgICAgYW5kIHJldHVybiBbU29tZSB5XS4gT3RoZXJ3aXNlIHJldHVybnMgW05vbmVdLlxuICAgICAgQHNpbmNlIDMuMTIgKilcblxuICB2YWwgZmluZF9sYXN0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAoKiogRmluZCBtYXhpbXVtIGVsZW1lbnQgc2F0aXNmeWluZyBwcmVkaWNhdGUuXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfbGFzdF9vcHQgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZF9sYXN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9sYXN0X21hcCA6IChlbHQgLT4gJ2Egb3B0aW9uKSAtPiB0IC0+ICdhIG9wdGlvblxuICAoKiogW2ZpbmRfbGFzdF9tYXAgZiBzXSBmaW5kIHRoZSBtYXhpbXVtIGVsZW1lbnQgW3hdIG9mIFtzXSBzdWNoIHRoYXQgW2YgeCA9IFNvbWUgeV1cbiAgICAgIGFuZCByZXR1cm4gW1NvbWUgeV0uIE90aGVyd2lzZSByZXR1cm5zIFtOb25lXS5cbiAgICAgIEBzaW5jZSAzLjEyICopXG5cbiAgdmFsIG9mX2l0ZXIgOiBlbHQgaXRlciAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbaXRlcl0gb2YgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX3NlcSA6IGVsdCBTZXEudCAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbc2VxXSBvZiBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgYWRkX2l0ZXIgOiB0IC0+IGVsdCBpdGVyIC0+IHRcbiAgKCoqIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgKCoqIEBzaW5jZSAzLjAgKilcblxuICB2YWwgdG9faXRlciA6IHQgLT4gZWx0IGl0ZXJcbiAgKCoqIFt0b19pdGVyIHRdIGNvbnZlcnRzIHRoZSBzZXQgW3RdIHRvIGEgW2l0ZXJdIG9mIHRoZSBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2xpc3QgOiB0IC0+IGVsdCBsaXN0IC0+IHRcbiAgKCoqIEBzaW5jZSAwLjE0ICopXG5cbiAgdmFsIHRvX2xpc3QgOiB0IC0+IGVsdCBsaXN0XG4gICgqKiBbdG9fbGlzdCB0XSBjb252ZXJ0cyB0aGUgc2V0IFt0XSB0byBhIGxpc3Qgb2YgdGhlIGVsZW1lbnRzLiAqKVxuXG4gIHZhbCB0b19zdHJpbmcgOlxuICAgID9zdGFydDpzdHJpbmcgLT5cbiAgICA/c3RvcDpzdHJpbmcgLT5cbiAgICA/c2VwOnN0cmluZyAtPlxuICAgIChlbHQgLT4gc3RyaW5nKSAtPlxuICAgIHQgLT5cbiAgICBzdHJpbmdcbiAgKCoqICBQcmludCB0aGUgc2V0IGluIGEgc3RyaW5nXG4gICAgICAgQHNpbmNlIDIuNyAqKVxuXG4gIHZhbCBwcCA6XG4gICAgP3BwX3N0YXJ0OnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zdG9wOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zZXA6dW5pdCBwcmludGVyIC0+XG4gICAgZWx0IHByaW50ZXIgLT5cbiAgICB0IHByaW50ZXJcbiAgKCoqIFByaW50IHRoZSBzZXQuICopXG5lbmRcblxubW9kdWxlIE1ha2UgKE8gOiBNYXAuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBTID0gU2V0Lk1ha2UgKE8pXG5cbiAgKCogYmFja3BvcnQgZnVuY3Rpb25zIGZyb20gcmVjZW50IHN0ZGxpYi5cbiAgICAgdGhleSB3aWxsIGJlIHNoYWRvd2VkIGJ5IGluY2x1c2lvbiBvZiBbU10gaWYgcHJlc2VudC4gKilcblxuICBbQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG4gIGxldCBmaW5kX29wdCB4IHMgPSB0cnkgU29tZSAoUy5maW5kIHggcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgY2hvb3NlX29wdCBzID0gdHJ5IFNvbWUgKFMuY2hvb3NlIHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1pbl9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5taW5fZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1heF9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5tYXhfZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBleGNlcHRpb24gRmluZF9iaW5kaW5nX2V4aXRcblxuICBsZXQgZmluZF9maXJzdF9vcHQgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICB0cnlcbiAgICAgIFMuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBpZiBmIHggdGhlbiAoXG4gICAgICAgICAgICByZXMgOj0gU29tZSB4O1xuICAgICAgICAgICAgcmFpc2UgRmluZF9iaW5kaW5nX2V4aXRcbiAgICAgICAgICApKVxuICAgICAgICBtO1xuICAgICAgTm9uZVxuICAgIHdpdGggRmluZF9iaW5kaW5nX2V4aXQgLT4gIXJlc1xuXG4gIGxldCBmaW5kX2ZpcnN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9maXJzdF9vcHQgZiBtIHdpdGhcbiAgICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCBTb21lIHggLT4geFxuXG4gIGxldCBmaW5kX2ZpcnN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIHRyeVxuICAgICAgUy5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHkgLT5cbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHk7XG4gICAgICAgICAgICByYWlzZSBGaW5kX2JpbmRpbmdfZXhpdClcbiAgICAgICAgbTtcbiAgICAgIE5vbmVcbiAgICB3aXRoIEZpbmRfYmluZGluZ19leGl0IC0+ICFyZXNcblxuICAoKiBsaW5lYXIgdGltZSwgbXVzdCB0cmF2ZXJzZSB0aGUgd2hvbGUgc2V04oCmICopXG4gIGxldCBmaW5kX2xhc3Rfb3B0IGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgUy5pdGVyIChmdW4geCAtPiBpZiBmIHggdGhlbiByZXMgOj0gU29tZSB4KSBtO1xuICAgICFyZXNcblxuICBsZXQgZmluZF9sYXN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9sYXN0X29wdCBmIG0gd2l0aFxuICAgIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IFNvbWUgeCAtPiB4XG5cbiAgW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxuICBpbmNsdWRlIFNcblxuICAoKiBVc2UgZmluZF9sYXN0IHdoaWNoIGlzIGxpbmVhciB0aW1lIG9uIE9DYW1sIDwgNC4wNSAqKVxuICBsZXQgZmluZF9sYXN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIGxldCBfID1cbiAgICAgIGZpbmRfbGFzdF9vcHRcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICB8IFNvbWUgeSAtPlxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeTtcbiAgICAgICAgICAgIHRydWUpXG4gICAgICAgIG1cbiAgICBpblxuICAgICFyZXNcblxuICBsZXQgYWRkX3NlcSBzZXEgc2V0ID1cbiAgICBsZXQgc2V0ID0gcmVmIHNldCBpblxuICAgIFNlcS5pdGVyIChmdW4geCAtPiBzZXQgOj0gYWRkIHggIXNldCkgc2VxO1xuICAgICFzZXRcblxuICBsZXQgb2Zfc2VxIHMgPSBhZGRfc2VxIHMgZW1wdHlcblxuICBsZXQgYWRkX2l0ZXIgc2V0IGkgPVxuICAgIGxldCBzZXQgPSByZWYgc2V0IGluXG4gICAgaSAoZnVuIHggLT4gc2V0IDo9IGFkZCB4ICFzZXQpO1xuICAgICFzZXRcblxuICBsZXQgb2ZfaXRlciBzID0gYWRkX2l0ZXIgZW1wdHkgc1xuICBsZXQgdG9faXRlciBzIHlpZWxkID0gaXRlciB5aWVsZCBzXG4gIGxldCBhZGRfbGlzdCA9IExpc3QuZm9sZF9sZWZ0IChmdW4gc2V0IHggLT4gYWRkIHggc2V0KVxuICBsZXQgdG9fbGlzdCA9IGVsZW1lbnRzXG5cbiAgbGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIixcIikgZWx0X3RvX3N0cmluZyBoID1cbiAgICB0b19saXN0IGggfD4gQ0NMaXN0LnRvX3N0cmluZyB+c3RhcnQgfnN0b3AgfnNlcCBlbHRfdG9fc3RyaW5nXG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX3ggZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4geCAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF94IGZtdCB4KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQmFzaWMgU3RyaW5nIFV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxuXG4oKiBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgKilcblxuaW5jbHVkZSBTdHJpbmdcblxubGV0IGNvbXBhcmVfaW50IChhIDogaW50KSBiID0gU3RkbGliLmNvbXBhcmUgYSBiXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgaGFzaCBzID0gSGFzaHRibC5oYXNoIHNcbmxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoXG5sZXQgaXNfZW1wdHkgcyA9IGVxdWFsIHMgXCJcIlxuXG5sZXQgcmV2IHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGluaXQgbiAoZnVuIGkgLT4gcy5bbiAtIGkgLSAxXSlcblxubGV0IHJlYyBfdG9fbGlzdCBzIGFjYyBpIGxlbiA9XG4gIGlmIGxlbiA9IDAgdGhlblxuICAgIExpc3QucmV2IGFjY1xuICBlbHNlXG4gICAgX3RvX2xpc3QgcyAocy5baV0gOjogYWNjKSAoaSArIDEpIChsZW4gLSAxKVxuXG5sZXQgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW4gPVxuICBsZXQgcmVjIGNoZWNrIGsgPVxuICAgIGlmIGsgPSBsZW4gdGhlblxuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIENDQ2hhci5lcXVhbCBzdWIuW2kgKyBrXSBzLltqICsga10gJiYgY2hlY2sgKGsgKyAxKVxuICBpblxuICBqICsgbGVuIDw9IFN0cmluZy5sZW5ndGggcyAmJiBjaGVjayAwXG5cbmxldCBpc19zdWIgfnN1YiBpIHMgaiB+bGVuID1cbiAgaWYgaSArIGxlbiA+IFN0cmluZy5sZW5ndGggc3ViIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pc19zdWJcIjtcbiAgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW5cblxudHlwZSBfIGRpcmVjdGlvbiA9XG4gIHwgRGlyZWN0IDogWyBgRGlyZWN0IF0gZGlyZWN0aW9uXG4gIHwgUmV2ZXJzZSA6IFsgYFJldmVyc2UgXSBkaXJlY3Rpb25cblxuKCogd2UgZm9sbG93IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tudXRo4oCTTW9ycmlz4oCTUHJhdHRfYWxnb3JpdGhtICopXG5tb2R1bGUgRmluZCA9IHN0cnVjdFxuICB0eXBlICdhIGttcF9wYXR0ZXJuID0geyBmYWlsdXJlOiBpbnQgYXJyYXk7IHN0cjogc3RyaW5nIH1cbiAgKCogaW52YXJpYW50OiBbbGVuZ3RoIGZhaWx1cmUgPSBsZW5ndGggc3RyXS5cbiAgICAgV2UgdXNlIGEgcGhhbnRvbSB0eXBlIHRvIGF2b2lkIG1peGluZyB0aGUgZGlyZWN0aW9ucy4gKilcblxuICBsZXQga21wX3BhdHRlcm5fbGVuZ3RoIHAgPSBTdHJpbmcubGVuZ3RoIHAuc3RyXG5cbiAgKCogYWNjZXNzIHRoZSBbaV0tdGggZWxlbWVudCBvZiBbc10gYWNjb3JkaW5nIHRvIGRpcmVjdGlvbiBbZGlyXSAqKVxuICBsZXQgZ2V0XyA6IHR5cGUgYS4gZGlyOmEgZGlyZWN0aW9uIC0+IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9XG4gICBmdW4gfmRpciAtPlxuICAgIG1hdGNoIGRpciB3aXRoXG4gICAgfCBEaXJlY3QgLT4gU3RyaW5nLmdldFxuICAgIHwgUmV2ZXJzZSAtPiBmdW4gcyBpIC0+IHMuW1N0cmluZy5sZW5ndGggcyAtIGkgLSAxXVxuXG4gIGxldCBrbXBfY29tcGlsZV8gOiB0eXBlIGEuIGRpcjphIGRpcmVjdGlvbiAtPiBzdHJpbmcgLT4gYSBrbXBfcGF0dGVybiA9XG4gICBmdW4gfmRpciBzdHIgLT5cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHN0ciBpblxuICAgIGxldCBnZXQgPSBnZXRfIH5kaXIgaW5cbiAgICAoKiBob3cgdG8gcmVhZCBlbGVtZW50cyBvZiB0aGUgc3RyaW5nICopXG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IDAgLT4geyBmYWlsdXJlID0gW3x8XTsgc3RyIH1cbiAgICB8IDEgLT4geyBmYWlsdXJlID0gW3wgLTEgfF07IHN0ciB9XG4gICAgfCBfIC0+XG4gICAgICAoKiBhdCBsZWFzdCAyIGVsZW1lbnRzLCB0aGUgYWxnb3JpdGhtIGNhbiB3b3JrICopXG4gICAgICBsZXQgZmFpbHVyZSA9IEFycmF5Lm1ha2UgbGVuIDAgaW5cbiAgICAgIGZhaWx1cmUuKDApIDwtIC0xO1xuICAgICAgKCogaTogY3VycmVudCBpbmRleCBpbiBzdHIgKilcbiAgICAgIGxldCBpID0gcmVmIDIgaW5cbiAgICAgICgqIGo6IGluZGV4IG9mIGNhbmRpZGF0ZSBzdWJzdHJpbmcgKilcbiAgICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgICAgIG1hdGNoICFqIHdpdGhcbiAgICAgICAgfCBfIHdoZW4gQ0NDaGFyLmVxdWFsIChnZXQgc3RyICghaSAtIDEpKSAoZ2V0IHN0ciAhaikgLT5cbiAgICAgICAgICAoKiBzdWJzdHJpbmcgc3RhcnRpbmcgYXQgIWogY29udGludWVzIG1hdGNoaW5nIGN1cnJlbnQgY2hhciAqKVxuICAgICAgICAgIGluY3IgajtcbiAgICAgICAgICBmYWlsdXJlLighaSkgPC0gIWo7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIHwgMCAtPlxuICAgICAgICAgICgqIGJhY2sgdG8gdGhlIGJlZ2lubmluZyAqKVxuICAgICAgICAgIGZhaWx1cmUuKCFpKSA8LSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAoKiBmYWxsYmFjayBmb3IgdGhlIHByZWZpeCBzdHJpbmcgKilcbiAgICAgICAgICBhc3NlcnQgKCFqID4gMCk7XG4gICAgICAgICAgaiA6PSBmYWlsdXJlLighailcbiAgICAgIGRvbmU7XG4gICAgICAoKiBGb3JtYXQucHJpbnRmIFwie0BbZmFpbHVyZTolYSwgc3RyOiVzQF19QC5cIiBDQ0Zvcm1hdC4oYXJyYXkgaW50KSBmYWlsdXJlIHN0cjsgKilcbiAgICAgIHsgZmFpbHVyZTsgc3RyIH1cblxuICBsZXQga21wX2NvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOkRpcmVjdCBzXG4gIGxldCBrbXBfcmNvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOlJldmVyc2Ugc1xuXG4gICgqIHByb3BlciBzZWFyY2ggZnVuY3Rpb24uXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfZmluZCB+cGF0dGVybiBzIGlkeCA9XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gICAgbGV0IGkgPSByZWYgaWR4IGluXG4gICAgbGV0IGogPSByZWYgMCBpblxuICAgIGxldCBwYXRfbGVuID0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm4gaW5cbiAgICB3aGlsZSAhaiA8IHBhdF9sZW4gJiYgIWkgKyAhaiA8IGxlbiBkb1xuICAgICAgbGV0IGMgPSBTdHJpbmcuZ2V0IHMgKCFpICsgIWopIGluXG4gICAgICBsZXQgZXhwZWN0ZWQgPSBTdHJpbmcuZ2V0IHBhdHRlcm4uc3RyICFqIGluXG4gICAgICBpZiBDQ0NoYXIuZXF1YWwgYyBleHBlY3RlZCB0aGVuXG4gICAgICAgICgqIGNoYXIgbWF0Y2hlcyAqKVxuICAgICAgICBpbmNyIGpcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgZmFpbF9vZmZzZXQgPSBwYXR0ZXJuLmZhaWx1cmUuKCFqKSBpblxuICAgICAgICBpZiBmYWlsX29mZnNldCA+PSAwIHRoZW4gKFxuICAgICAgICAgIGFzc2VydCAoZmFpbF9vZmZzZXQgPCAhaik7XG4gICAgICAgICAgKCogZm9sbG93IHRoZSBmYWlsdXJlIGxpbmsgKilcbiAgICAgICAgICBpIDo9ICFpICsgIWogLSBmYWlsX29mZnNldDtcbiAgICAgICAgICBqIDo9IGZhaWxfb2Zmc2V0XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogYmVnaW5uaW5nIG9mIHBhdHRlcm4gKilcbiAgICAgICAgICBqIDo9IDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIClcbiAgICAgIClcbiAgICBkb25lO1xuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICAhaVxuICAgIGVsc2VcbiAgICAgIC0xXG5cbiAgKCogcHJvcGVyIHNlYXJjaCBmdW5jdGlvbiwgZnJvbSB0aGUgcmlnaHQuXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfcmZpbmQgfnBhdHRlcm4gcyBpZHggPVxuICAgIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICAgIGxldCBpID0gcmVmIChsZW4gLSBpZHggLSAxKSBpblxuICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICBsZXQgcGF0X2xlbiA9IGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuIGluXG4gICAgd2hpbGUgIWogPCBwYXRfbGVuICYmICFpICsgIWogPCBsZW4gZG9cbiAgICAgIGxldCBjID0gU3RyaW5nLmdldCBzIChsZW4gLSAhaSAtICFqIC0gMSkgaW5cbiAgICAgIGxldCBleHBlY3RlZCA9XG4gICAgICAgIFN0cmluZy5nZXQgcGF0dGVybi5zdHIgKFN0cmluZy5sZW5ndGggcGF0dGVybi5zdHIgLSAhaiAtIDEpXG4gICAgICBpblxuICAgICAgaWYgQ0NDaGFyLmVxdWFsIGMgZXhwZWN0ZWQgdGhlblxuICAgICAgICAoKiBjaGFyIG1hdGNoZXMgKilcbiAgICAgICAgaW5jciBqXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IGZhaWxfb2Zmc2V0ID0gcGF0dGVybi5mYWlsdXJlLighaikgaW5cbiAgICAgICAgaWYgZmFpbF9vZmZzZXQgPj0gMCB0aGVuIChcbiAgICAgICAgICBhc3NlcnQgKGZhaWxfb2Zmc2V0IDwgIWopO1xuICAgICAgICAgICgqIGZvbGxvdyB0aGUgZmFpbHVyZSBsaW5rICopXG4gICAgICAgICAgaSA6PSAhaSArICFqIC0gZmFpbF9vZmZzZXQ7XG4gICAgICAgICAgaiA6PSBmYWlsX29mZnNldFxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBwYXR0ZXJuICopXG4gICAgICAgICAgaiA6PSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICApXG4gICAgICApXG4gICAgZG9uZTtcbiAgICAoKiBhZGp1c3QgcmVzdWx0OiBmaXJzdCwgW3JlcyA9IHN0cmluZy5sZW5ndGggcyAtIHJlcyAtMV0gdG8gY29udmVydFxuICAgICAgIGJhY2sgdG8gcmVhbCBpbmRpY2VzOyB0aGVuLCB3aGF0IHdlIGdvdCBpcyBhY3R1YWxseSB0aGUgcG9zaXRpb25cbiAgICAgICBvZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBzbyB3ZSBzdWJ0cmFjdCB0aGUgW2xlbmd0aCBvZiB0aGUgcGF0dGVybiAtMV1cbiAgICAgICB0byBvYnRhaW4gdGhlIHJlYWwgcmVzdWx0LiAqKVxuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICBsZW4gLSAhaSAtIGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuXG4gICAgZWxzZVxuICAgICAgLTFcblxuICB0eXBlICdhIHBhdHRlcm4gPSBQX2NoYXIgb2YgY2hhciB8IFBfS01QIG9mICdhIGttcF9wYXR0ZXJuXG5cbiAgbGV0IHBhdHRlcm5fbGVuZ3RoID0gZnVuY3Rpb25cbiAgICB8IFBfY2hhciBfIC0+IDFcbiAgICB8IFBfS01QIHAgLT4ga21wX3BhdHRlcm5fbGVuZ3RoIHBcblxuICBsZXQgY29tcGlsZSBzdWIgOiBbIGBEaXJlY3QgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfY29tcGlsZSBzdWIpXG5cbiAgbGV0IHJjb21waWxlIHN1YiA6IFsgYFJldmVyc2UgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfcmNvbXBpbGUgc3ViKVxuXG4gIGxldCBmaW5kID8oc3RhcnQgPSAwKSB+KHBhdHRlcm4gOiBbIGBEaXJlY3QgXSBwYXR0ZXJuKSBzID1cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyBzdGFydCBjIHdpdGggTm90X2ZvdW5kIC0+IC0xKVxuICAgIHwgUF9LTVAgcGF0dGVybiAtPiBrbXBfZmluZCB+cGF0dGVybiBzIHN0YXJ0XG5cbiAgbGV0IHJmaW5kID9zdGFydCB+KHBhdHRlcm4gOiBbIGBSZXZlcnNlIF0gcGF0dGVybikgcyA9XG4gICAgbGV0IHN0YXJ0ID1cbiAgICAgIG1hdGNoIHN0YXJ0IHdpdGhcbiAgICAgIHwgU29tZSBuIC0+IG5cbiAgICAgIHwgTm9uZSAtPiBTdHJpbmcubGVuZ3RoIHMgLSAxXG4gICAgaW5cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLnJpbmRleF9mcm9tIHMgc3RhcnQgYyB3aXRoIE5vdF9mb3VuZCAtPiAtMSlcbiAgICB8IFBfS01QIHBhdHRlcm4gLT4ga21wX3JmaW5kIH5wYXR0ZXJuIHMgc3RhcnRcbmVuZFxuXG5sZXQgZmluZCA/KHN0YXJ0ID0gMCkgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLmZpbmQgfnN0YXJ0IH5wYXR0ZXJuIHNcblxubGV0IGZpbmRfYWxsID8oc3RhcnQgPSAwKSB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+XG4gICAgbGV0IGkgPSByZWYgc3RhcnQgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGxldCByZXMgPSBGaW5kLmZpbmQgfnN0YXJ0OiFpIH5wYXR0ZXJuIHMgaW5cbiAgICAgIGlmIHJlcyA9IH4tMSB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBpIDo9IHJlcyArIDE7XG4gICAgICAgICgqIHBvc3NpYmxlIG92ZXJsYXAgKilcbiAgICAgICAgU29tZSByZXNcbiAgICAgIClcblxubGV0IGZpbmRfYWxsX2wgP3N0YXJ0IH5zdWIgcyA9XG4gIGxldCByZWMgYXV4IGFjYyBnID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBTb21lIGkgLT4gYXV4IChpIDo6IGFjYykgZ1xuICBpblxuICBhdXggW10gKGZpbmRfYWxsID9zdGFydCB+c3ViIHMpXG5cbmxldCBtZW0gP3N0YXJ0IH5zdWIgcyA9IGZpbmQgP3N0YXJ0IH5zdWIgcyA+PSAwXG5cbmxldCByZmluZCB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLnJjb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLnJmaW5kIH5zdGFydDooU3RyaW5nLmxlbmd0aCBzIC0gMSkgfnBhdHRlcm4gc1xuXG4oKiBSZXBsYWNlIHN1YnN0cmluZyBbcy5bcG9zXSDigKYgcy5bcG9zK2xlbi0xXV0gYnkgW2J5XSBpbiBbc10gKilcbmxldCByZXBsYWNlX2F0XyB+cG9zIH5sZW4gfmJ5IHMgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKGxlbmd0aCBzICsgbGVuZ3RoIGJ5IC0gbGVuKSBpblxuICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgMCBwb3M7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGIgYnk7XG4gIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAocG9zICsgbGVuKSAoU3RyaW5nLmxlbmd0aCBzIC0gcG9zIC0gbGVuKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJlcGxhY2UgPyh3aGljaCA9IGBBbGwpIH5zdWIgfmJ5IHMgPVxuICBpZiBpc19lbXB0eSBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnJlcGxhY2VcIjtcbiAgbWF0Y2ggd2hpY2ggd2l0aFxuICB8IGBMZWZ0IC0+XG4gICAgbGV0IGkgPSBmaW5kIH5zdGFydDowIH5zdWIgcyBpblxuICAgIGlmIGkgPj0gMCB0aGVuXG4gICAgICByZXBsYWNlX2F0XyB+cG9zOmkgfmxlbjooU3RyaW5nLmxlbmd0aCBzdWIpIH5ieSBzXG4gICAgZWxzZVxuICAgICAgc1xuICB8IGBSaWdodCAtPlxuICAgIGxldCBpID0gcmZpbmQgfnN1YiBzIGluXG4gICAgaWYgaSA+PSAwIHRoZW5cbiAgICAgIHJlcGxhY2VfYXRfIH5wb3M6aSB+bGVuOihTdHJpbmcubGVuZ3RoIHN1YikgfmJ5IHNcbiAgICBlbHNlXG4gICAgICBzXG4gIHwgYEFsbCAtPlxuICAgICgqIGNvbXBpbGUgc2VhcmNoIHBhdHRlcm4gb25seSBvbmNlICopXG4gICAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgbGV0IHN0YXJ0ID0gcmVmIDAgaW5cbiAgICB3aGlsZSAhc3RhcnQgPCBTdHJpbmcubGVuZ3RoIHMgZG9cbiAgICAgIGxldCBpID0gRmluZC5maW5kIH5zdGFydDohc3RhcnQgfnBhdHRlcm4gcyBpblxuICAgICAgaWYgaSA+PSAwIHRoZW4gKFxuICAgICAgICAoKiBiZXR3ZWVuIGxhc3QgYW5kIGN1ciBvY2N1cnJlbmNlcyAqKVxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgIXN0YXJ0IChpIC0gIXN0YXJ0KTtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiBieTtcbiAgICAgICAgc3RhcnQgOj0gaSArIFN0cmluZy5sZW5ndGggc3ViXG4gICAgICApIGVsc2UgKFxuICAgICAgICAoKiBhZGQgcmVtYWluZGVyICopXG4gICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAhc3RhcnQgKFN0cmluZy5sZW5ndGggcyAtICFzdGFydCk7XG4gICAgICAgIHN0YXJ0IDo9IFN0cmluZy5sZW5ndGggcyAoKiBzdG9wICopXG4gICAgICApXG4gICAgZG9uZTtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuXG5tb2R1bGUgU3BsaXQgPSBzdHJ1Y3RcbiAgdHlwZSBkcm9wX2lmX2VtcHR5ID0geyBmaXJzdDogYm9vbDsgbGFzdDogYm9vbCB9XG5cbiAgbGV0IG5vX2Ryb3AgPSB7IGZpcnN0ID0gZmFsc2U7IGxhc3QgPSBmYWxzZSB9XG4gIGxldCBkZWZhdWx0X2Ryb3AgPSBub19kcm9wXG5cbiAgdHlwZSBzcGxpdF9zdGF0ZSA9IFNwbGl0U3RvcCB8IFNwbGl0QXQgb2YgaW50ICgqIHByZXZpb3VzICopXG5cbiAgbGV0IHJlYyBfc3BsaXQgfmJ5IHMgc3RhdGUgPVxuICAgIG1hdGNoIHN0YXRlIHdpdGhcbiAgICB8IFNwbGl0U3RvcCAtPiBOb25lXG4gICAgfCBTcGxpdEF0IHByZXYgLT4gX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2XG5cbiAgYW5kIF9zcGxpdF9zZWFyY2ggfmJ5IHMgcHJldiA9XG4gICAgbGV0IGogPSBGaW5kLmZpbmQgfnN0YXJ0OnByZXYgfnBhdHRlcm46YnkgcyBpblxuICAgIGlmIGogPCAwIHRoZW5cbiAgICAgIFNvbWUgKFNwbGl0U3RvcCwgcHJldiwgU3RyaW5nLmxlbmd0aCBzIC0gcHJldilcbiAgICBlbHNlXG4gICAgICBTb21lIChTcGxpdEF0IChqICsgRmluZC5wYXR0ZXJuX2xlbmd0aCBieSksIHByZXYsIGogLSBwcmV2KVxuXG4gIGxldCBfdHVwbGUzIHggeSB6ID0geCwgeSwgelxuXG4gIGxldCBfbWtnZW4gfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IHN0YXRlID0gcmVmIChTcGxpdEF0IDApIGluXG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBuZXh0ICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyAhc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT5cbiAgICAgICAgc3RhdGUgOj0gc3RhdGUnO1xuICAgICAgICBuZXh0ICgpXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBOb25lXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIFNvbWUgKGsgcyBpIGxlbilcbiAgICBpblxuICAgIG5leHRcblxuICBsZXQgZ2VuID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgZ2VuX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rZ2VuIH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rbGlzdCB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIGJ1aWxkIGFjYyBzdGF0ZSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBidWlsZCBhY2Mgc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBMaXN0LnJldiBhY2NcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IGJ1aWxkIChrIHMgaSBsZW4gOjogYWNjKSBzdGF0ZSdcbiAgICBpblxuICAgIGJ1aWxkIFtdIChTcGxpdEF0IDApXG5cbiAgbGV0IGxpc3RfID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGxpc3RfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rc2VxIH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgbWFrZSBzdGF0ZSAoKSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gbWFrZSBzdGF0ZScgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IFNlcS5Db25zIChrIHMgaSBsZW4sIG1ha2Ugc3RhdGUnKVxuICAgIGluXG4gICAgbWFrZSAoU3BsaXRBdCAwKVxuXG4gIGxldCBzZXEgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBzZXFfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtzZXEgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtfaXRlciB+ZHJvcCB+YnkgcyBmIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYXV4IHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gYXV4IHN0YXRlJ1xuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIGsgKGYgcyBpIGxlbik7XG4gICAgICAgIGF1eCBzdGF0ZSdcbiAgICBpblxuICAgIGF1eCAoU3BsaXRBdCAwKVxuXG4gIGxldCBpdGVyID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBpdGVyX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rX2l0ZXIgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBsZWZ0X2V4biB+YnkgcyA9XG4gICAgbGV0IGkgPSBmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IGxlZnQgfmJ5IHMgPSB0cnkgU29tZSAobGVmdF9leG4gfmJ5IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBsZXQgcmlnaHRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IHJmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IHJpZ2h0IH5ieSBzID0gdHJ5IFNvbWUgKHJpZ2h0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuZW5kXG5cbmxldCBzcGxpdCB+YnkgcyA9IFNwbGl0Lmxpc3RfY3B5IH5ieSBzXG5cbmxldCBjb21wYXJlX3ZlcnNpb25zIGEgYiA9XG4gIGxldCBvZl9pbnQgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmUgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggb2ZfaW50IHgsIG9mX2ludCB5IHdpdGhcbiAgICAgIHwgTm9uZSwgTm9uZSAtPlxuICAgICAgICBsZXQgYyA9IFN0cmluZy5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBhKSAoU3BsaXQuZ2VuX2NweSB+Ynk6XCIuXCIgYilcblxudHlwZSBuYXRfY2h1bmsgPSBOQ19jaGFyIG9mIGNoYXIgfCBOQ19pbnQgb2YgaW50XG5cbmxldCBjb21wYXJlX25hdHVyYWwgYSBiID1cbiAgKCogc3RyZWFtIG9mIGNodW5rcyAqKVxuICBsZXQgY2h1bmtzIHMgOiB1bml0IC0+IG5hdF9jaHVuayBvcHRpb24gPVxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgcmVjIG5leHQgKCkgPVxuICAgICAgaWYgIWkgPSBsZW5ndGggcyB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnKVxuICAgICAgICB8IGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgU29tZSAoTkNfY2hhciBjKVxuICAgICAgKVxuICAgIGFuZCByZWFkX2ludCBuID1cbiAgICAgIGlmICFpID0gbGVuZ3RoIHMgdGhlblxuICAgICAgICBTb21lIChOQ19pbnQgbilcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoKDEwICogbikgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcpXG4gICAgICAgIHwgXyAtPiBTb21lIChOQ19pbnQgbilcbiAgICAgIClcbiAgICBpblxuICAgIG5leHRcbiAgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggeCwgeSB3aXRoXG4gICAgICB8IE5DX2NoYXIgeCwgTkNfY2hhciB5IC0+XG4gICAgICAgIGxldCBjID0gQ2hhci5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IE5DX2ludCBfLCBOQ19jaGFyIF8gLT4gMVxuICAgICAgfCBOQ19jaGFyIF8sIE5DX2ludCBfIC0+IC0xXG4gICAgICB8IE5DX2ludCB4LCBOQ19pbnQgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChjaHVua3MgYSkgKGNodW5rcyBiKVxuXG5sZXQgZWRpdF9kaXN0YW5jZSA/KGN1dG9mZiA9IG1heF9pbnQpIHMxIHMyID1cbiAgbGV0IG4xID0gbGVuZ3RoIHMxIGluXG4gIGxldCBuMiA9IGxlbmd0aCBzMiBpblxuICBpZiBuMSA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjJcbiAgZWxzZSBpZiBuMiA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjFcbiAgZWxzZSBpZiBlcXVhbCBzMSBzMiB0aGVuXG4gICAgMFxuICBlbHNlIGlmIG4xIC0gbjIgPj0gY3V0b2ZmIHx8IG4yIC0gbjEgPj0gY3V0b2ZmIHRoZW5cbiAgICBjdXRvZmZcbiAgKCogYXQgbGVhc3QgY3V0b2ZmIGluc2VydHMgKilcbiAgZWxzZSAoXG4gICAgdHJ5XG4gICAgICAoKiBkaXN0YW5jZSB2ZWN0b3JzICh2MD1wcmV2aW91cywgdjE9Y3VycmVudCkgKilcbiAgICAgIGxldCB2MCA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgIGxldCB2MSA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgICgqIGluaXRpYWxpemUgdjA6IHYwKGkpID0gQSgwKShpKSA9IGRlbGV0ZSBpIGNoYXJzIGZyb20gdCAqKVxuICAgICAgbGV0IGxvd2VyX2JvdW5kID0gcmVmIG1heF9pbnQgaW5cbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczIgZG9cbiAgICAgICAgdjAuKGkpIDwtIGlcbiAgICAgIGRvbmU7XG4gICAgICAoKiBtYWluIGxvb3AgZm9yIHRoZSBib3R0b20gdXAgZHluYW1pYyBhbGdvcml0aG0gKilcbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczEgLSAxIGRvXG4gICAgICAgICgqIGZpcnN0IGVkaXQgZGlzdGFuY2UgaXMgdGhlIGRlbGV0aW9uIG9mIGkrMSBlbGVtZW50cyBmcm9tIHMgKilcbiAgICAgICAgdjEuKDApIDwtIGkgKyAxO1xuXG4gICAgICAgICgqIHRyeSBhZGQvZGVsZXRlL3JlcGxhY2Ugb3BlcmF0aW9ucyAqKVxuICAgICAgICBmb3IgaiA9IDAgdG8gbGVuZ3RoIHMyIC0gMSBkb1xuICAgICAgICAgIGxldCBjb3N0ID1cbiAgICAgICAgICAgIGlmIENoYXIuZXF1YWwgKFN0cmluZy5nZXQgczEgaSkgKFN0cmluZy5nZXQgczIgaikgdGhlblxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICBpblxuICAgICAgICAgIHYxLihqICsgMSkgPC0gbWluICh2MS4oaikgKyAxKSAobWluICh2MC4oaiArIDEpICsgMSkgKHYwLihqKSArIGNvc3QpKVxuICAgICAgICBkb25lO1xuXG4gICAgICAgIGlmXG4gICAgICAgICAgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxXG4gICAgICAgICAgJiYgaSA8PSAyICogY3V0b2ZmXG4gICAgICAgICAgJiYgKDIgKiBjdXRvZmYpIC0gaSA8IFN0cmluZy5sZW5ndGggczJcbiAgICAgICAgdGhlblxuICAgICAgICAgIGxvd2VyX2JvdW5kIDo9IG1pbiAhbG93ZXJfYm91bmQgdjEuKCgyICogY3V0b2ZmKSAtIGkpO1xuICAgICAgICAoKiBkaWQgd2UgY29tcHV0ZSB1cCB0byB0aGUgZGlhZ29uYWwgMipjdXRvZmYrMT8gKilcbiAgICAgICAgaWYgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxICYmIGkgPSBjdXRvZmYgKiAyICYmICFsb3dlcl9ib3VuZCA+PSBjdXRvZmZcbiAgICAgICAgdGhlblxuICAgICAgICAgIHJhaXNlX25vdHJhY2UgRXhpdDtcblxuICAgICAgICAoKiBjb3B5IHYxIGludG8gdjAgZm9yIG5leHQgaXRlcmF0aW9uICopXG4gICAgICAgIEFycmF5LmJsaXQgdjEgMCB2MCAwIChsZW5ndGggczIgKyAxKVxuICAgICAgZG9uZTtcbiAgICAgIHYxLihsZW5ndGggczIpXG4gICAgd2l0aCBFeGl0IC0+IGN1dG9mZlxuICApXG5cbmxldCByZXBlYXQgcyBuID1cbiAgYXNzZXJ0IChuID49IDApO1xuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGFzc2VydCAobGVuID4gMCk7XG4gIGluaXQgKGxlbiAqIG4pIChmdW4gaSAtPiBzLltpIG1vZCBsZW5dKVxuXG5sZXQgcHJlZml4IH5wcmUgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHByZSBpblxuICBpZiBsZW4gPiBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIGZhbHNlXG4gIGVsc2UgKFxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZiBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIGkpIChTdHJpbmcudW5zYWZlX2dldCBwcmUgaSlcbiAgICAgIHRoZW5cbiAgICAgICAgZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgY2hlY2sgKGkgKyAxKVxuICAgIGluXG4gICAgY2hlY2sgMFxuICApXG5cbmxldCBzdWZmaXggfnN1ZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3VmIGluXG4gIGlmIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IG9mZiA9IFN0cmluZy5sZW5ndGggcyAtIGxlbiBpblxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZlxuICAgICAgICBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIChvZmYgKyBpKSkgKFN0cmluZy51bnNhZmVfZ2V0IHN1ZiBpKVxuICAgICAgdGhlblxuICAgICAgICBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBjaGVjayAoaSArIDEpXG4gICAgaW5cbiAgICBjaGVjayAwXG4gIClcblxubGV0IHRha2UgbiBzID1cbiAgaWYgbiA8IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgU3RyaW5nLnN1YiBzIDAgblxuICBlbHNlXG4gICAgc1xuXG5sZXQgZHJvcCBuIHMgPVxuICBpZiBuIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgbiAoU3RyaW5nLmxlbmd0aCBzIC0gbilcbiAgZWxzZVxuICAgIFwiXCJcblxubGV0IHRha2VfZHJvcCBuIHMgPSB0YWtlIG4gcywgZHJvcCBuIHNcblxubGV0IGNob3Bfc3VmZml4IH5zdWYgcyA9XG4gIGlmIHN1ZmZpeCB+c3VmIHMgdGhlblxuICAgIFNvbWUgKFN0cmluZy5zdWIgcyAwIChTdHJpbmcubGVuZ3RoIHMgLSBTdHJpbmcubGVuZ3RoIHN1ZikpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBjaG9wX3ByZWZpeCB+cHJlIHMgPVxuICBpZiBwcmVmaXggfnByZSBzIHRoZW5cbiAgICBTb21lXG4gICAgICAoU3RyaW5nLnN1YiBzIChTdHJpbmcubGVuZ3RoIHByZSkgKFN0cmluZy5sZW5ndGggcyAtIFN0cmluZy5sZW5ndGggcHJlKSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGJsaXQgPSBTdHJpbmcuYmxpdFxuXG5sZXQgZm9sZCBmIGFjYyBzID1cbiAgbGV0IHJlYyBmb2xkX3JlYyBmIGFjYyBzIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZF9yZWMgZiAoZiBhY2Mgcy5baV0pIHMgKGkgKyAxKVxuICBpblxuICBmb2xkX3JlYyBmIGFjYyBzIDBcblxubGV0IGZvbGRpIGYgYWNjIHMgPVxuICBsZXQgcmVjIGZvbGRfcmVjIGYgYWNjIHMgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkX3JlYyBmIChmIGFjYyBpIHMuW2ldKSBzIChpICsgMSlcbiAgaW5cbiAgZm9sZF9yZWMgZiBhY2MgcyAwXG5cbmxldCBwYWQgPyhzaWRlID0gYExlZnQpID8oYyA9ICcgJykgbiBzID1cbiAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGlmIGxlbl9zID49IG4gdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IHBhZF9sZW4gPSBuIC0gbGVuX3MgaW5cbiAgICBtYXRjaCBzaWRlIHdpdGhcbiAgICB8IGBMZWZ0IC0+XG4gICAgICBpbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgaWYgaSA8IHBhZF9sZW4gdGhlblxuICAgICAgICAgICAgY1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHMuW2kgLSBwYWRfbGVuXSlcbiAgICB8IGBSaWdodCAtPlxuICAgICAgaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgIGlmIGkgPCBsZW5fcyB0aGVuXG4gICAgICAgICAgICBzLltpXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGMpXG4gIClcblxubGV0IF90b19nZW4gcyBpMCBsZW4gPVxuICBsZXQgaSA9IHJlZiBpMCBpblxuICBmdW4gKCkgLT5cbiAgICBpZiAhaSA9IGkwICsgbGVuIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlIChcbiAgICAgIGxldCBjID0gU3RyaW5nLnVuc2FmZV9nZXQgcyAhaSBpblxuICAgICAgaW5jciBpO1xuICAgICAgU29tZSBjXG4gICAgKVxuXG5sZXQgdG9fZ2VuIHMgPSBfdG9fZ2VuIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxubGV0IG9mX2NoYXIgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgbGV0IHJlYyBhdXggKCkgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBCdWZmZXIuY29udGVudHMgYlxuICAgIHwgU29tZSBjIC0+XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYiBjO1xuICAgICAgYXV4ICgpXG4gIGluXG4gIGF1eCAoKVxuXG5sZXQgdG9faXRlciBzIGsgPSBTdHJpbmcuaXRlciBrIHNcblxubGV0IHJlYyBfdG9fc2VxIHMgaSBsZW4gKCkgPVxuICBpZiBsZW4gPSAwIHRoZW5cbiAgICBTZXEuTmlsXG4gIGVsc2VcbiAgICBTZXEuQ29ucyAocy5baV0sIF90b19zZXEgcyAoaSArIDEpIChsZW4gLSAxKSlcblxubGV0IHRvX3NlcSBzID0gX3RvX3NlcSBzIDAgKFN0cmluZy5sZW5ndGggcylcblxubGV0IG9mX2l0ZXIgaSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBpIChCdWZmZXIuYWRkX2NoYXIgYik7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIFNlcS5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYikgc2VxO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgdG9fbGlzdCBzID0gX3RvX2xpc3QgcyBbXSAwIChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBvZl9saXN0IGwgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgTGlzdC5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYnVmKSBsO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBvZl9hcnJheSBhID0gaW5pdCAoQXJyYXkubGVuZ3RoIGEpIChmdW4gaSAtPiBhLihpKSlcbmxldCB0b19hcnJheSBzID0gQXJyYXkuaW5pdCAoU3RyaW5nLmxlbmd0aCBzKSAoZnVuIGkgLT4gcy5baV0pXG5cbmxldCBsaW5lc19nZW4gcyA9XG4gIFNwbGl0Lmdlbl9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzX2l0ZXIgcyA9XG4gIFNwbGl0Lml0ZXJfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lc19zZXEgcyA9XG4gIFNwbGl0LnNlcV9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzIHMgPVxuICBTcGxpdC5saXN0X2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgY29uY2F0X2dlbl9idWYgfnNlcCBnIDogQnVmZmVyLnQgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCByZWMgYXV4IH5maXJzdCAoKSA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IGJcbiAgICB8IFNvbWUgcyAtPlxuICAgICAgaWYgbm90IGZpcnN0IHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gICAgICBhdXggfmZpcnN0OmZhbHNlICgpXG4gIGluXG4gIGF1eCB+Zmlyc3Q6dHJ1ZSAoKVxuXG5sZXQgY29uY2F0X2dlbiB+c2VwIGcgPVxuICBsZXQgYnVmID0gY29uY2F0X2dlbl9idWYgfnNlcCBnIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGNvbmNhdF9pdGVyX2J1ZiB+c2VwIGkgOiBCdWZmZXIudCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBpIChmdW4gcyAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzKTtcbiAgYnVmXG5cbmxldCBjb25jYXRfaXRlciB+c2VwIGkgPVxuICBsZXQgYnVmID0gY29uY2F0X2l0ZXJfYnVmIH5zZXAgaSBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjb25jYXRfc2VxX2J1ZiB+c2VwIHNlcSA6IEJ1ZmZlci50ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBzIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHMpXG4gICAgc2VxO1xuICBidWZcblxubGV0IGNvbmNhdF9zZXEgfnNlcCBzZXEgPVxuICBsZXQgYnVmID0gY29uY2F0X3NlcV9idWYgfnNlcCBzZXEgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lcyBsID1cbiAgbGV0IGxlbiA9IExpc3QuZm9sZF9sZWZ0IChmdW4gbiBzIC0+IG4gKyAxICsgU3RyaW5nLmxlbmd0aCBzKSAwIGwgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBsZW4gaW5cbiAgbGV0IHJlYyBhdXhfYmxpdCBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT5cbiAgICAgIGFzc2VydCAoaSA9IGxlbik7XG4gICAgICBCeXRlcy50b19zdHJpbmcgYnVmXG4gICAgfCBzIDo6IHRhaWwgLT5cbiAgICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgQnl0ZXMuYmxpdF9zdHJpbmcgcyAwIGJ1ZiBpIGxlbl9zO1xuICAgICAgQnl0ZXMuc2V0IGJ1ZiAoaSArIGxlbl9zKSAnXFxuJztcbiAgICAgIGF1eF9ibGl0IChpICsgbGVuX3MgKyAxKSB0YWlsXG4gIGluXG4gIGF1eF9ibGl0IDAgbFxuXG5sZXQgdW5saW5lc19nZW4gZyA9XG4gIGxldCBidWYgPSBjb25jYXRfZ2VuX2J1ZiB+c2VwOlwiXFxuXCIgZyBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzX2l0ZXIgaSA9XG4gIGxldCBidWYgPSBjb25jYXRfaXRlcl9idWYgfnNlcDpcIlxcblwiIGkgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lc19zZXEgc2VxID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9zZXFfYnVmIH5zZXA6XCJcXG5cIiBzZXEgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgc2V0IHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnNldFwiO1xuICBpbml0IChTdHJpbmcubGVuZ3RoIHMpIChmdW4gaiAtPlxuICAgICAgaWYgaSA9IGogdGhlblxuICAgICAgICBjXG4gICAgICBlbHNlXG4gICAgICAgIHMuW2pdKVxuXG5sZXQgaXRlciA9IFN0cmluZy5pdGVyXG5cbmxldCBmaWx0ZXJfbWFwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgIG1hdGNoIGYgYyB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBjJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMnKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGZpbHRlciBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyIChmdW4gYyAtPiBpZiBmIGMgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVuaXEgZXEgcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA9IDAgdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuWzBdO1xuICAgIGxldCBfID1cbiAgICAgIGZvbGRcbiAgICAgICAgKGZ1biBwcmV2aW91c19jIGMgLT5cbiAgICAgICAgICBpZiBub3QgKGVxIHByZXZpb3VzX2MgYykgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7XG4gICAgICAgICAgYylcbiAgICAgICAgcy5bMF0gc1xuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICApXG5cbmxldCBmbGF0X21hcCA/c2VwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJpXG4gICAgKGZ1biBpIGMgLT5cbiAgICAgIChtYXRjaCBzZXAgd2l0aFxuICAgICAgfCBTb21lIF8gd2hlbiBpID0gMCAtPiAoKVxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgc2VwIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXApO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChmIGMpKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxuZXhjZXB0aW9uIE15RXhpdFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICB0cnlcbiAgICBpdGVyIChmdW4gYyAtPiBpZiBub3QgKHAgYykgdGhlbiByYWlzZSBNeUV4aXQpIHM7XG4gICAgdHJ1ZVxuICB3aXRoIE15RXhpdCAtPiBmYWxzZVxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIHRyeVxuICAgIGl0ZXIgKGZ1biBjIC0+IGlmIHAgYyB0aGVuIHJhaXNlIE15RXhpdCkgcztcbiAgICBmYWxzZVxuICB3aXRoIE15RXhpdCAtPiB0cnVlXG5cbmxldCBkcm9wX3doaWxlIGYgcyA9XG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW5ndGggcyAmJiBmICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGlmICFpID4gMCB0aGVuXG4gICAgc3ViIHMgIWkgKGxlbmd0aCBzIC0gIWkpXG4gIGVsc2VcbiAgICBzXG5cbmxldCByZHJvcF93aGlsZSBmIHMgPVxuICBsZXQgaSA9IHJlZiAobGVuZ3RoIHMgLSAxKSBpblxuICB3aGlsZSAhaSA+PSAwICYmIGYgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBkZWNyIGlcbiAgZG9uZTtcbiAgaWYgIWkgPCBsZW5ndGggcyAtIDEgdGhlblxuICAgIHN1YiBzIDAgKCFpICsgMSlcbiAgZWxzZVxuICAgIHNcblxuKCogbm90aW9uIG9mIHdoaXRlc3BhY2UgZm9yIHRyaW0gKilcbmxldCBpc19zcGFjZV8gPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IGx0cmltIHMgPSBkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5sZXQgcnRyaW0gcyA9IHJkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5cbmxldCBtYXAyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5tYXAyXCI7XG4gIGluaXQgKFN0cmluZy5sZW5ndGggczEpIChmdW4gaSAtPiBmIHMxLltpXSBzMi5baV0pXG5cbmxldCBpdGVyMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcjJcIjtcbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggczEgLSAxIGRvXG4gICAgZiBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGl0ZXJpMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcmkyXCI7XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMxIC0gMSBkb1xuICAgIGYgaSBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGZvbGQyIGYgYWNjIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuZm9sZDJcIjtcbiAgbGV0IHJlYyBmb2xkJyBhY2MgczEgczIgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggczEgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZCcgKGYgYWNjIHMxLltpXSBzMi5baV0pIHMxIHMyIChpICsgMSlcbiAgaW5cbiAgZm9sZCcgYWNjIHMxIHMyIDBcblxubGV0IGZvcl9hbGwyIHAgczEgczIgPVxuICB0cnlcbiAgICBpdGVyMiAoZnVuIGMxIGMyIC0+IGlmIG5vdCAocCBjMSBjMikgdGhlbiByYWlzZSBNeUV4aXQpIHMxIHMyO1xuICAgIHRydWVcbiAgd2l0aCBNeUV4aXQgLT4gZmFsc2VcblxubGV0IGV4aXN0czIgcCBzMSBzMiA9XG4gIHRyeVxuICAgIGl0ZXIyIChmdW4gYzEgYzIgLT4gaWYgcCBjMSBjMiB0aGVuIHJhaXNlIE15RXhpdCkgczEgczI7XG4gICAgZmFsc2VcbiAgd2l0aCBNeUV4aXQgLT4gdHJ1ZVxuXG4oKiogezIgQXNjaWkgZnVuY3Rpb25zfSAqKVxuXG5sZXQgZXF1YWxfY2FzZWxlc3MgczEgczIgOiBib29sID1cbiAgU3RyaW5nLmxlbmd0aCBzMSA9IFN0cmluZy5sZW5ndGggczJcbiAgJiYgZm9yX2FsbDJcbiAgICAgICAoZnVuIGMxIGMyIC0+XG4gICAgICAgICBDQ0NoYXIuZXF1YWwgKENDQ2hhci5sb3dlcmNhc2VfYXNjaWkgYzEpIChDQ0NoYXIubG93ZXJjYXNlX2FzY2lpIGMyKSlcbiAgICAgICBzMSBzMlxuXG5sZXQgdG9faGV4IChzIDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIGxldCBpX3RvX2hleCAoaSA6IGludCkgPVxuICAgIGlmIGkgPCAxMCB0aGVuXG4gICAgICBDaGFyLmNociAoaSArIENoYXIuY29kZSAnMCcpXG4gICAgZWxzZVxuICAgICAgQ2hhci5jaHIgKGkgLSAxMCArIENoYXIuY29kZSAnYScpXG4gIGluXG5cbiAgbGV0IHJlcyA9IEJ5dGVzLmNyZWF0ZSAoMiAqIGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbGV0IG4gPSBDaGFyLmNvZGUgKGdldCBzIGkpIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAoMiAqIGkpIChpX3RvX2hleCAoKG4gbGFuZCAweGYwKSBsc3IgNCkpO1xuICAgIEJ5dGVzLnNldCByZXMgKCgyICogaSkgKyAxKSAoaV90b19oZXggKG4gbGFuZCAweDBmKSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxubGV0IG9mX2hleF9leG4gKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IG5fb2ZfYyA9IGZ1bmN0aW9uXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnYScgLi4gJ2YnIGFzIGMgLT4gMTAgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYSdcbiAgICB8ICdBJyAuLiAnRicgYXMgYyAtPiAxMCArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJ1xuICAgIHwgXyAtPiBpbnZhbGlkX2FyZyBcInN0cmluZzogaW52YWxpZCBoZXhcIlxuICBpblxuICBpZiBTdHJpbmcubGVuZ3RoIHMgbW9kIDIgPD4gMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJzdHJpbmc6IGhleCBzZXF1ZW5jZSBtdXN0IGJlIG9mIGV2ZW4gbGVuZ3RoXCI7XG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChTdHJpbmcubGVuZ3RoIHMgLyAyKSAnXFx4MDAnIGluXG4gIGZvciBpID0gMCB0byAoU3RyaW5nLmxlbmd0aCBzIC8gMikgLSAxIGRvXG4gICAgbGV0IG4xID0gbl9vZl9jIChTdHJpbmcuZ2V0IHMgKDIgKiBpKSkgaW5cbiAgICBsZXQgbjIgPSBuX29mX2MgKFN0cmluZy5nZXQgcyAoKDIgKiBpKSArIDEpKSBpblxuICAgIGxldCBuID0gKG4xIGxzbCA0KSBsb3IgbjIgaW5cbiAgICBCeXRlcy5zZXQgcmVzIGkgKENoYXIuY2hyIG4pXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbmxldCBvZl9oZXggcyA9IHRyeSBTb21lIChvZl9oZXhfZXhuIHMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IHBwX2J1ZiBidWYgcyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuXG5sZXQgcHAgZm10IHMgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCJcXFwiJXNcXFwiXCIgc1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApID0gZXF1YWxcbiAgbGV0ICggPD4gKSBhIGIgPSBub3QgKGVxdWFsIGEgYilcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwib3BlbiBMZXhpbmdcblxuZXhjZXB0aW9uIExleF9lcnJvciBvZiBzdHJpbmdcblxubGV0IGxleF9lcnJvciBlcnIgPSByYWlzZSAoTGV4X2Vycm9yIGVycilcblxubGV0IGVycm9yX3BvcyBsZXhidWYgPSBcbiAgbGV0IHN0YXJ0ID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxldCBjbnVtID0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHN0YXJ0LnBvc19ib2wgaW5cbiAgbGV0IGVudW0gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gc3RhcnQucG9zX2JvbCBpblxuICAoc3RhcnQucG9zX2xudW0sIGNudW0sIGVudW0pXG5cbmxldCBlcnJvcl9wb3NfbXNnIChsZXhidWYgOiBMZXhpbmcubGV4YnVmKSA9XG4gIGxldCAobGluZSwgY251bSwgZW51bSkgPSBlcnJvcl9wb3MgbGV4YnVmIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgbGluZSBjbnVtIGVudW1cblxubGV0IHN0cmluZzJudW0gcyA9XG4gIHRyeSAoVG9rZW5zLklOVCAoaW50X29mX3N0cmluZyBzKSkgd2l0aFxuICB8IEZhaWx1cmUgXyAtPiBUb2tlbnMuTEFSR0VJTlQgc1xuXG5sZXQgdXBkYXRlX3BvcyBsZXhidWYgPVxuICBsZXQgcG9zID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxleGJ1Zi5sZXhfc3RhcnRfcCA8LVxuICAgIHsgcG9zIHdpdGggcG9zX2JvbCA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zO1xuICAgICAgICAgICAgICAgcG9zX2xudW0gPSBwb3MucG9zX2xudW0gKyAxXG4gICAgfVxuXG5sZXQgaW50X29mX2hleGNoYXIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJy4uJzknIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCdcbiAgfCAnYScuLidmJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ2EnICsgMTBcbiAgfCAnQScuLidGJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ0EnICsgMTBcbiAgfCBjIC0+IGxleF9lcnJvciAoXCJpbnZhbGlkIGhleCBjaGFyIGluIHVuaWNvZGUgZXNjYXBlOiAnXCIgXiAoU3RyaW5nLm1ha2UgMSBjKSBeIFwiJ1wiKVxuXG5cbmxldCB1dGY4X29mX2NvZGUgYnVmIGlkeCB1ID1cbiAgbGV0IGkgPSByZWYgaWR4IGluXG5cbiAgbGV0IGFkZF9jaGFyIGIgYyA9IEJ5dGVzLnVuc2FmZV9zZXQgYiAhaSBjOyBpIDo9ICFpICsgMSBpblxuXG4gIGxldCBtYXhfdXNlZF9iaXRzIG4gdSA9ICh1IGxzciBuKSA9IDAgaW5cblxuICBpZiBtYXhfdXNlZF9iaXRzIDcgdSB0aGVuXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociB1KVxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMTEgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTAwMDAwMCBsb3IgKCh1IGxzciA2KSBsYW5kIDBiMDAwMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSlcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAxNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAwMDExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKVxuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDIxIHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDAwMDExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAyNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTExMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAwMDAwMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmRcbiAgZWxzZSBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTExMDAgbG9yICgodSBsc3IgMzApIGxhbmQgMGIwMDAwMDAwMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmQ7XG4gICFpXG5cbmxldCB1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIGJ1ZiBpZHggaGlnaCBsb3cgPVxuICBsZXQgaGlnaCA9IGhpZ2ggLSAweEQ4MDAgaW5cbiAgbGV0IGxvdyA9IGxvdyAtIDB4REMwMCBpblxuICBsZXQgY29kZSA9IDB4MTAwMDAgKyAoKGhpZ2ggbHNsIDEwKSBsb3IgbG93KSBpblxuICAgIHV0Zjhfb2ZfY29kZSBidWYgaWR4IGNvZGVcblxubGV0IGVzY2FwaW5nX2Vycm9yIG1zZyBzIGMgb2ZmID1cbiAgbGV0IG9mZnMgPSBzdHJpbmdfb2ZfaW50IG9mZiBpblxuICBsZXQgY3MgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgU29tZSBjIC0+IFwiICdcIiBeIChTdHJpbmcubWFrZSAxIGMpIF4gXCInIFwiXG4gICAgfCBOb25lIC0+IFwiXCJcbiAgaW5cbiAgICBsZXhfZXJyb3IgKG1zZyBeIFwiIGF0IG9mZnNldCBcIiBeIG9mZnMgXiBjcyBeIFwiOiBcIiBeIHMpXG5cbmxldCB1bmVzY2FwZV9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBzJyA9IEJ5dGVzLmNyZWF0ZSBsIGluXG4gIGxldCBqID0gcmVmIDAgaW5cbiAgbGV0IHUxID0gcmVmIDAgaW5cbiAgbGV0IHUyID0gcmVmIDAgaW5cbiAgbGV0IHN0YXRlID0gcmVmIGBDaGFyIGluXG5cbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgbWF0Y2ggIXN0YXRlIHdpdGhcbiAgICB8IGBDaGFyIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICAgICB8ICdcXFxcJyAtPiBzdGF0ZSA6PSBgRXNjYXBlXG4gICAgICAgICB8IGMgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiBjOyBqIDo9ICFqICsgMVxuICAgICAgIGVuZDtcbiAgICB8IGBFc2NhcGUgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICB8ICdcIicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1wiJzsgICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnXFxcXCcgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxcXCc7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnLycgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJy8nOyAgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdiJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxiJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdmJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFwwMTInOyBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICduJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxuJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdyJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxyJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd0JyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFx0JzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd1JyAgLT4gc3RhdGUgOj0gYFUxX2gxXG4gICAgICAgfCBfICAgIC0+IGVzY2FwaW5nX2Vycm9yIFwiaW52YWxpZCBlc2NhcGUgaW4gc3RyaW5nXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZW5kO1xuICAgIHwgYFUxX2gxIC0+IHUxIDo9IGludF9vZl9oZXhjaGFyIHMuW2ldOyAgc3RhdGUgOj0gYFUxX2gyXG4gICAgfCBgVTFfaDIgLT4gdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTFfaDNcbiAgICB8IGBVMV9oMyAtPiB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMV9oNFxuICAgIHwgYFUxX2g0IC0+XG4gICAgICB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTtcbiAgICAgIGlmICF1MSA+PSAweEQ4MDAgJiYgIXUxIDw9IDB4REJGRiB0aGVuXG4gICAgICAgIHN0YXRlIDo9IGBVMl9ic1xuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBqIDo9IHV0Zjhfb2ZfY29kZSBzJyAhaiAhdTE7XG4gICAgICAgIHN0YXRlIDo9IGBDaGFyXG4gICAgICBlbmRcbiAgICB8IGBVMl9icyAtPlxuICAgICAgaWYgcy5baV0gPD4gJ1xcXFwnIHRoZW5cbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJleHBlY3RlZCBsb3cgc3Vycm9nYXRlIGVzY2FwZSBjaGFyIChcXFxcKVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX3VcbiAgICB8IGBVMl91IC0+XG4gICAgICBpZiBzLltpXSA8PiAndScgdGhlblxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImV4cGVjdGVkIGxvdyBzdXJyb2dhdGUgZXNjYXBlIHNlcXVlbmNlICh1KVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX2gxXG4gICAgfCBgVTJfaDEgLT4gdTIgOj0gaW50X29mX2hleGNoYXIgcy5baV07ICBzdGF0ZSA6PSBgVTJfaDJcbiAgICB8IGBVMl9oMiAtPiB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMl9oM1xuICAgIHwgYFUyX2gzIC0+IHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUyX2g0XG4gICAgfCBgVTJfaDQgLT5cbiAgICAgIHN0YXRlIDo9IGBDaGFyO1xuICAgICAgdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7XG4gICAgICBpZiAhdTIgPj0gMHhEQzAwICYmICF1MiA8PSAweERGRkYgdGhlblxuICAgICAgICBqIDo9IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgcycgIWogIXUxICF1MiBcbiAgICAgIGVsc2VcbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJpbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRidcIiBzIE5vbmUgaVxuICBkb25lO1xuICBiZWdpblxuICAgIG1hdGNoICFzdGF0ZSB3aXRoXG4gICAgfCBgQ2hhciAtPiAoKVxuICAgIHwgXyAtPiBlc2NhcGluZ19lcnJvciBcImVuZCBvZiBzdHJpbmcgaW4gZXNjYXBlIHNlcXVlbmNlXCIgcyBOb25lIGxcbiAgZW5kO1xuICBpZiAhaiA8PiBsIHRoZW4gQnl0ZXMudW5zYWZlX3RvX3N0cmluZyAoQnl0ZXMuc3ViIHMnIDAgIWopIGVsc2Ugc1xuXG4iLCIoKiBjb250YWlucyB0aGUgbGluZSBhbmQgY2hhcmFjdGVyIHNwYW4gb2Ygd2hlcmUgdGhlIGVycm9yIG9jY3VyZWQgKilcblxudHlwZSB0ID0ge1xuICBsaW5lIDogaW50XG47IHN0YXJ0X2NoYXIgOiBpbnRcbjsgZW5kX2NoYXIgOiBpbnRcbjsgbXNnIDogc3RyaW5nXG59XG5cbmV4Y2VwdGlvbiBKc29uX2Vycm9yX2luZm8gb2YgdFxuXG5sZXQgY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlbXNnID1cbiAgbGV0IChlbGluZSwgc2NoYXIsIGVjaGFyKSA9IExleHhlcl91dGlscy5lcnJvcl9wb3MgbGV4YnVmIGluXG4gIHsgbGluZSA9IGVsaW5lOyBzdGFydF9jaGFyID0gc2NoYXI7IGVuZF9jaGFyID0gZWNoYXI7IG1zZyA9IGVtc2cgfVxuXG5sZXQgdG9fc3RyaW5nIGluZm8gPVxuICBsZXQgbG9jID0gUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgaW5mby5saW5lIGluZm8uc3RhcnRfY2hhciBpbmZvLmVuZF9jaGFyIGluXG4gIGluZm8ubXNnIF4gXCIgYXQgXCIgXiBsb2NcbiIsImV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxuKCogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGFuIGludGVnZXIsIGhhbmRsZXMgMzBiaXQsIDYyYml0IGFuZCBKc29vIHVzaW5nIDMyYml0IGludHMgKilcbmxldCBtYXhfanNvbl9pbnQgPVxuICBsZXQgcmVjIGxvZzIgbiA9IGlmIG4gPD0gMSB0aGVuIDAgZWxzZSAxICsgbG9nMihuIGFzciAxKSBpblxuICBsZXQgYml0cyBuID0gbG9nMiBuICsgMSBpblxuICBpZiBiaXRzIG1heF9pbnQgPiA1MyB0aGVuICgxIGxzbCA1MykgLSAxIGVsc2UgbWF4X2ludFxuXG5sZXQgbWF4X2pzb25faW50X2FzX2Zsb2F0ID0gZmxvYXRfb2ZfaW50IG1heF9qc29uX2ludFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0X2pzb24gZiA9XG4gIGxldCBpc19pbnQgPSAoZmxvYXRfb2ZfaW50IChpbnRfb2ZfZmxvYXQgZikpID0gZiBpblxuICBpZiBpc19pbnQgJiYgYWJzX2Zsb2F0IGYgPD0gbWF4X2pzb25faW50X2FzX2Zsb2F0IHRoZW4gYmVnaW4gKCogSUVFRSBtYXggaW50IGluIGEgZmxvYXQgd2hlbiBpbiA2NGJpdCBpbnQgbW9kZSopXG4gICAgbGV0IGludF92YWx1ZSA9IGludF9vZl9mbG9hdCBmIGluIChzdHJpbmdfb2ZfaW50IGludF92YWx1ZSkgXiBcIi4wXCJcbiAgZW5kXG4gIGVsc2UgYmVnaW5cbiAgICAoKiAlLjE3ZyBvZnRlbiBjcmVhdGVzIG92ZXJseSBsb25nIG91dHB1dCwgYXR0ZW1wdCB0byBjb252ZXJ0IGF0IGxvd2VyIHByZWNlc3Npb24gZmlyc3QgKilcbiAgICBsZXQgcyA9IGZvcm1hdF9mbG9hdCBcIiUuMTZnXCIgZiBpblxuICAgIGxldCBzID0gaWYgZmxvYXRfb2Zfc3RyaW5nIHMgPSBmIHRoZW4gcyBlbHNlIGZvcm1hdF9mbG9hdCBcIiUuMTdnXCIgZiBpblxuICAgIGlmIG5vdCAoU3RyaW5nLmNvbnRhaW5zIHMgJy4nIHx8IFN0cmluZy5jb250YWlucyBzICdlJykgdGhlbiBzIF4gXCIuMFwiXG4gICAgZWxzZSBzXG4gIGVuZFxuIiwiXG5sZXQgdG9rZW5fZXJyb3IgdG9rID1cbiAgbGV0IG9wZW4gVG9rZW5zIGluXG4gIGxldCBlcnIgPSBtYXRjaCB0b2sgd2l0aFxuICAgIHwgU1RSSU5HIHMgLT4gXCJ1bmV4cGVjdGVkIHN0cmluZyAnXCIgXiBzIF4gXCInXCJcbiAgICB8IE9TIC0+IFwidW5leHBlY3RlZCAneydcIlxuICAgIHwgT0UgLT4gXCJ1bmV4cGVjdGVkICd9J1wiXG4gICAgfCBOVUxMIC0+IFwidW5leHBlY3RlZCBudWxsIHZhbHVlXCJcbiAgICB8IE5FR0lORklOSVRZIC0+IFwidW5leHBlY3RlZCBuZWdhdGl2ZSBpbmZpbml0eVwiXG4gICAgfCBOQU4gLT4gXCJ1bmV4cGVjdGVkIE5vdC1hLU51bWJlclwiXG4gICAgfCBMRVhfRVJST1IgcyAtPiBzXG4gICAgfCBMQVJHRUlOVCBzIC0+IFwidW5leHBlY3RlZCBsYXJnZSBpbnRlZ2VyICdcIiBeIHMgXiBcIidcIlxuICAgIHwgSU5UIGkgLT4gXCJ1bmV4cGVjdGVkIGludGVnZXIgJ1wiIF4gKHN0cmluZ19vZl9pbnQgaSkgXiBcIidcIlxuICAgIHwgSU5GSU5JVFkgLT4gXCJ1bmV4cGVjdGVkIGluZmluaXR5XCJcbiAgICB8IEZMT0FUIGYgLT4gXCJ1bmV4cGVjdGVkIGZsb2F0ICdcIiBeIChzdHJpbmdfb2ZfZmxvYXQgZikgXiBcIidcIlxuICAgIHwgRU9GIC0+IFwidW5leHBlY3RlZCBlbmQtb2YtaW5wdXRcIlxuICAgIHwgQ09NUExJQU5DRV9FUlJPUiBzIC0+IFwiY29tcGxpYW5jZSBlcnJvciAnXCIgXiBzIF4gXCInXCJcbiAgICB8IENPTU1BIC0+IFwidW5leHBlY3RlZCAnLCdcIlxuICAgIHwgQ09MT04gLT4gXCJ1bmV4cGVjdGVkICc6J1wiXG4gICAgfCBCT09MIGIgLT4gXCJ1bmV4cGVjdGVkIGJvb2xlYW4gJ1wiIF4gKGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIikgXiBcIidcIlxuICAgIHwgQVMgLT4gXCJ1bmV4cGVjdGVkICdbJ1wiXG4gICAgfCBBRSAtPiBcInVuZXhwZWN0ZWQgJ10nXCJcbiAgICB8IFRTIC0+IFwidW5leHBlY3RlZCAnKCdcIlxuICAgIHwgVEUgLT4gXCJ1bmV4cGVjdGVkICcpJ1wiXG4gICAgfCBWUyAtPiBcInVuZXhwZWN0ZWQgJzwnXCJcbiAgICB8IFZFIC0+IFwidW5leHBlY3RlZCAnPidcIlxuICBpblxuICAgIGBTeW50YXhfZXJyb3IgZXJyXG4iLCJtb2R1bGUgdHlwZSBQYXJzZXIgPSBzaWdcbiAgbW9kdWxlIENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlNcblxuICB2YWwgZGVjb2RlXG4gICAgOiAgcmVhZGVyIDogKHVuaXQgLT4gVG9rZW5zLnRva2VuKVxuICAgIC0+IChDb21wbGlhbmNlLmpzb24gb3B0aW9uLCBzdHJpbmcpIHJlc3VsdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IFBhcnNlclxuICB3aXRoIG1vZHVsZSBDb21wbGlhbmNlID0gQ29tcGxpYW5jZVxuPSBzdHJ1Y3RcblxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IENvbXBsaWFuY2VcblxuICBleGNlcHRpb24gUGFyc2VfZXJyb3Igb2YgW2BFb2YgfCBgU3ludGF4X2Vycm9yIG9mIHN0cmluZ11cblxuICBsZXQganNvbl92YWx1ZSB+cmVhZGVyID0gXG4gICAgbGV0IG9wZW4gVG9rZW5zIGluXG4gICAgbGV0IG9wZW4gUGFyc2VyX3Rvb2xzIGluXG4gICAgbGV0IHJlYyB0b2tlbl92YWx1ZSB0b2sgPSBiZWdpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgSU5UIGkgLT4gQ29tcGxpYW5jZS5pbnRlZ2VyIGlcbiAgICAgIHwgU1RSSU5HIHMgLT4gQ29tcGxpYW5jZS5zdHJpbmcgc1xuICAgICAgfCBCT09MIGIgLT4gQ29tcGxpYW5jZS5ib29sIGJcbiAgICAgIHwgRkxPQVQgZiAtPiBDb21wbGlhbmNlLm51bWJlciAoYEZsb2F0IGYpXG4gICAgICB8IElORklOSVRZIC0+IENvbXBsaWFuY2UubnVtYmVyIGBJbmZpbml0eVxuICAgICAgfCBORUdJTkZJTklUWSAtPiBDb21wbGlhbmNlLm51bWJlciBgTmVnaW5maW5pdHlcbiAgICAgIHwgTkFOIC0+IENvbXBsaWFuY2UubnVtYmVyIGBOYW5cbiAgICAgIHwgTlVMTCAtPiBDb21wbGlhbmNlLm51bGxcbiAgICAgIHwgTEFSR0VJTlQgcyAtPiBDb21wbGlhbmNlLmxhcmdlaW50IHNcbiAgICAgIHwgRU9GIC0+IHJhaXNlIChQYXJzZV9lcnJvciBgRW9mKVxuICAgICAgfCBDT01NQSB8IENPTE9OIHwgQUUgfCBPRSB8IFRFIHwgVkUgfCBMRVhfRVJST1IgXyB8IENPTVBMSUFOQ0VfRVJST1IgXyAtPlxuICAgICAgICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICB8IEFTIC0+IGFycmF5X3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IE9TIC0+IG9iamVjdF92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBUUyAtPiB0dXBsZV92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBWUyAtPiB2YXJpYW50X3ZhbHVlX3N0YXJ0ICgpXG4gICAgZW5kXG4gICAgYW5kIHZhbHVlICgpID0gdG9rZW5fdmFsdWUgKHJlYWRlciAoKSlcbiAgICBhbmQgYXJyYXlfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHRvayA9IHJlYWRlciAoKSBpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IFtdXG4gICAgICB8IF8gLT4gYXJyYXlfdmFsdWVzX3N0YXJ0IHRvayBbXVxuICAgIGVuZFxuICAgIGFuZCBhcnJheV92YWx1ZXNfc3RhcnQgdG9rIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHRva2VuX3ZhbHVlIHRvayBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGFycmF5X3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdG9rID0gcmVhZGVyICgpIGluXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIFtdXG4gICAgICB8IF8gLT4gb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgW11cbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gY29sb25fdmFsdWUgdG9rICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gb2JqZWN0X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IGtleV9jb2xvbl92YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IG9iamVjdF92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgY29sb25fdmFsdWUgdiAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBrZXlfY29sb25fdmFsdWUgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdjEgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQ09NTUEgLT4gYmVnaW5cbiAgICAgICAgbGV0IHYyID0gdmFsdWUgKCkgaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBURSAtPiBDb21wbGlhbmNlLnR1cGxlIFt2MTsgdjJdXG4gICAgICAgIHwgQ09NTUEgLT4gdHVwbGVfdmFsdWVzIFt2MjsgdjFdXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFRFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInR1cGxlIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGVsZW1lbnRzXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFRFIC0+IENvbXBsaWFuY2UudHVwbGUgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiB0dXBsZV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdmFyaWFudF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IFZFIC0+IENvbXBsaWFuY2UudmFyaWFudCBrIE5vbmVcbiAgICAgICAgfCBDT0xPTiAtPiB2YXJpYW50X2VuZCBrIChTb21lICh2YWx1ZSAoKSkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFZFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInZhcmlhbnQgbXVzdCBoYXZlIGF0IGxlYXN0IGEgc3RyaW5nXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB2YXJpYW50X2VuZCBrIHYgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgVkUgLT4gQ29tcGxpYW5jZS52YXJpYW50IGsgdlxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGluXG4gICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gTm9uZVxuICAgIHwgZXhjZXB0aW9uIGV4bl8gLT4gcmFpc2UgZXhuX1xuICAgIHwgRU9GIC0+IE5vbmVcbiAgICB8IHRvayAtPiBTb21lICh0b2tlbl92YWx1ZSB0b2spXG5cbiAgbGV0IGRlY29kZSB+cmVhZGVyID0gXG4gICAgbWF0Y2gganNvbl92YWx1ZSB+cmVhZGVyIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gRXJyb3IgXCJVbmV4cGVjdGVkIGVuZC1vZi1pbnB1dFwiXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIGVycikpIC0+IEVycm9yIGVyclxuICAgIHwgZXhjZXB0aW9uIChMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVycikgLT4gRXJyb3IgZXJyXG4gICAgfCByZXMgLT4gT2sgcmVzXG5cbmVuZFxuIiwibGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG5sZXQgYWRkX2hleF9ieXRlIH5hZGRfY2hhciBpID1cbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxubGV0IGVzY2FwZSB+YWRkX2NoYXIgfmFkZF9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgfmFkZF9jaGFyIChpbnRfb2ZfY2hhciBjKVxuICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gIGRvbmVcbiBcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIHByZXR0eV9wcmludCA6IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHByZXR0eV9wcmludF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbGV0IHRvX2pzb25fc3RyaW5nIHMgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBVdGlscy5lc2NhcGUgfmFkZF9jaGFyIH5hZGRfc3RyaW5nIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBhZGRfcXVvdGVfc3RyaW5nIHM7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBwcF9saXN0IHNlcCBwcHggb3V0IGwgPVxuICAgIGxldCBwcF9zZXAgb3V0ICgpID0gRm9ybWF0LmZwcmludGYgb3V0IFwiJXNAIFwiIHNlcCBpblxuICAgIEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXAgcHB4IG91dCBsXG5cbiAgbGV0IHJlYyBmb3JtYXQgKG91dDpGb3JtYXQuZm9ybWF0dGVyKSBqc29uIDogdW5pdCA9XG4gICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBOdWxsIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gRm9ybWF0LnBwX3ByaW50X2Jvb2wgb3V0IGJcbiAgICAgIHwgYEludCBpIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChzdHJpbmdfb2ZfaW50IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+XG4gICAgICAgIGxldCBzID0gQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYgaW5cbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHRvX2pzb25fc3RyaW5nIHMpXG4gICAgICB8IGBJbnRsaXQgc1xuICAgICAgfCBgRmxvYXRsaXQgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgTGlzdCBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIltdXCJcbiAgICAgIHwgYExpc3QgbCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJbQDs8MSAwPkBbPGhvdj4lYUBdQDs8MSAtMj5dXCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0KSBsXG4gICAgICB8IGBBc3NvYyBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcInt9XCJcbiAgICAgIHwgYEFzc29jIGwgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwie0A7PDEgMD4lYUA7PDEgLTI+fVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdF9maWVsZCkgbFxuICAgICAgfCBgVHVwbGUgbCAtPlxuICAgICAgICBpZiBsID0gW10gdGhlbiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIigpXCJcbiAgICAgICAgZWxzZSBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQCwlYUA7PDAgLTI+KVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdCkgbFxuICAgICAgfCBgVmFyaWFudCAocywgTm9uZSkgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPCVzPlwiICh0b19qc29uX3N0cmluZyBzKVxuICAgICAgfCBgVmFyaWFudCAocywgU29tZSBqc29uKSAtPlxuICAgICAgICBsZXQgcyA9IHRvX2pzb25fc3RyaW5nIHMgaW5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPEBbPGh2Mj4lczogJWFAXT5cIiBzIGZvcm1hdCBqc29uXG5cbiAgYW5kIGZvcm1hdF9maWVsZCBvdXQgKG5hbWUsIGpzb24pID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JXM6ICVhQF1cIiAodG9fanNvbl9zdHJpbmcgbmFtZSkgZm9ybWF0IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50IG91dCBqc29uID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JWFAXVwiIGZvcm1hdCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludF90b19zdHJpbmcganNvbiA9XG4gICAgRm9ybWF0LmFzcHJpbnRmIFwiJWFcIiBwcmV0dHlfcHJpbnQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyBpblxuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhQD9cIiBwcmV0dHlfcHJpbnQganNvblxuXG5lbmRcbiIsImxldCBlcnJvciBtc2cgX2pzb24gPSByYWlzZSAoRmFpbHVyZSBtc2cpXG5cbm1vZHVsZSBJbnRlcm5hbCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBTID0gc2lnXG4gICAgdHlwZSBqc29uXG4gICAgdmFsIG51bGwgOiB1bml0IC0+IGpzb25cbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfc3RyaWN0X2ludGYgPSBzaWdcbiAgICB0eXBlIGpzb25cblxuICAgIHZhbCBtZW1iZXIgOiBzdHJpbmcgLT4gWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4ganNvblxuICAgIHZhbCBpbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uXG4gICAgdmFsIG1hcCA6IChqc29uIC0+IGpzb24pIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdXG4gICAgdmFsIHRvX2Fzc29jIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4gKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB2YWwgdG9fYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSAtPiBib29sXG4gICAgdmFsIHRvX2Zsb2F0IDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fc3RyaW5nIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgXSAtPiBzdHJpbmdcbiAgICB2YWwgdG9fc3RyaW5nX29wdGlvbiA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIHwgYE51bGwgXSAtPiBzdHJpbmcgb3B0aW9uXG4gICAgdmFsIHRvX29wdGlvbiA6ICgoWz4gYE51bGwgXSBhcyAnYSkgLT4ganNvbikgLT4gJ2EgLT4ganNvbiBvcHRpb25cbiAgICB2YWwgdG9fbGlzdCA6IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb24gbGlzdFxuICAgIHZhbCB0b19ib29sX29wdGlvbiA6IFs+IGBCb29sIG9mIGJvb2wgfCBgTnVsbCBdIC0+IGJvb2wgb3B0aW9uXG4gICAgdmFsIHRvX2Zsb2F0X29wdGlvbiA6IFs+IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIHRvX251bWJlciA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX251bWJlcl9vcHRpb24gOiBbPiBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCBjb252ZXJ0X2VhY2ggOiAoanNvbiAtPiBqc29uKSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uIGxpc3RcbiAgICB2YWwgcmV2X2ZpbHRlcl9tYXAgOiAoJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSBsaXN0IC0+ICdhIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbWFwIDogKCdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIHJldl9mbGF0dGVuIDogJ2EgbGlzdCAtPiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZsYXR0ZW4gOiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9pbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbGlzdCA6IFs+IGBMaXN0IG9mICdhIF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9hc3NvYyA6IFs+IGBBc3NvYyBvZiAnYSBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSBsaXN0IC0+IGJvb2wgbGlzdFxuICAgIHZhbCBmaWx0ZXJfZmxvYXQgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgICB2YWwgZmlsdGVyX3N0cmluZyAgOiBbPiBgU3RyaW5nIG9mIHN0cmluZyBdIGxpc3QgLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgZmlsdGVyX21lbWJlciA6IHN0cmluZyAtPiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gICAgdmFsIGtleXMgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IF0gLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgdmFsdWVzIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCBdIC0+ICdhIGxpc3RcbiAgICB2YWwgY29tYmluZSA6IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF0gLT4gWz4gYEFzc29jIG9mICdhIGxpc3QgXSAtPiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIFNoYXJlZCA9IHN0cnVjdFxuICAgIGxldCByZWMgcmV2X2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYWNjXG4gICAgICB8IGhkOjp0bCAtPlxuICAgICAgICBtYXRjaCBmIGhkIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHJldl9maWx0ZXJfbWFwIGYgYWNjIHRsXG4gICAgICAgIHwgU29tZSB2IC0+IHJldl9maWx0ZXJfbWFwIGYgKHY6OmFjYykgdGxcblxuICAgIGxldCBmaWx0ZXJfbWFwIGYgbCA9IExpc3QucmV2IChyZXZfZmlsdGVyX21hcCBmIFtdIGwpXG5cbiAgICBsZXQgcmVjIHJldl9mbGF0dGVuIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBhY2NcbiAgICAgIHwgaGQ6OnRsIC0+XG4gICAgICAgIG1hdGNoIGhkIHdpdGhcbiAgICAgICAgfCBgTGlzdCBsMiAtPiByZXZfZmxhdHRlbiAoTGlzdC5yZXZfYXBwZW5kIGwyIGFjYykgdGxcbiAgICAgICAgfCBfIC0+IHJldl9mbGF0dGVuIGFjYyB0bFxuXG4gICAgbGV0IGZsYXR0ZW4gbCA9IExpc3QucmV2IChyZXZfZmxhdHRlbiBbXSBsKVxuXG4gIGVuZFxuXG4gIG1vZHVsZSBTdHJpY3QoTSA6IFMpIDogSW50ZXJuYWxfc3RyaWN0X2ludGZcbiAgICB3aXRoIHR5cGUganNvbiA9IE0uanNvblxuICA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IE0uanNvblxuXG4gICAgbGV0IGFzc29jIG5hbWUgb2JqIDoganNvbiA9IHRyeSBMaXN0LmFzc29jIG5hbWUgb2JqIHdpdGggTm90X2ZvdW5kIC0+IE0ubnVsbCAoKVxuXG4gICAgbGV0IG1lbWJlciBuYW1lIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgQXNzb2Mgb2JqIC0+IGFzc29jIG5hbWUgb2JqXG4gICAgICB8IGpzb24gLT4gZXJyb3IgKFwiRXhwZWN0ZWQgYEFzc29jIHRvIGZpbmQgbmFtZSAnXCIgXiBuYW1lIF4gXCInIGluXCIpIGpzb25cblxuICAgIGxldCBpbmRleCBpIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICAgICAgICBsZXQgaScgPSBpZiBpIDwgMCB0aGVuIGxlbiArIGkgZWxzZSBpIGluXG4gICAgICAgICAgaWYgaScgPCAwIHx8IGknID49IGxlbiB0aGVuIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChzdHJpbmdfb2ZfaW50IGkgXiBcIiBvdXQgb2YgYm91bmRzXCIpKVxuICAgICAgICAgIGVsc2UgTGlzdC5udGggbCBpJ1xuICAgICAgfCBqc29uIC0+IGVycm9yIFwiQ2FuJ3QgaW5kZXggbm9uZSBgTGlzdCB0eXBlIFwiIGpzb25cblxuICAgIGxldCBtYXAgZiB2ID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBmIGwpXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJDYW4ndCBtYXAgb3ZlciBub25lIGBMaXN0IHR5cGUgXCIganNvblxuXG4gICAgbGV0IHRvX2Fzc29jID0gZnVuY3Rpb24gfCBgQXNzb2Mgb2JqIC0+IG9iaiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQXNzb2NcIiBqc29uXG4gICAgbGV0IHRvX2Jvb2wgPSBmdW5jdGlvbiB8IGBCb29sIGIgLT4gYiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQm9vbFwiIGpzb25cbiAgICBsZXQgdG9fZmxvYXQgPSBmdW5jdGlvbiB8IGBGbG9hdCBmIC0+IGYgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgICB8IGBTdHJpbmcgcyAtPiBzXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgU3RyaW5nXCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZ19vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgU3RyaW5nIHMgLT4gU29tZSBzXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBTdHJpbmcgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fb3B0aW9uIGYgdiA6IGpzb24gb3B0aW9uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IHYgLT4gU29tZSAoZiB2KVxuXG4gICAgbGV0IHRvX2xpc3QgdiA6IGpzb24gbGlzdCA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPiBsXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgTGlzdFwiIGpzb25cblxuICAgIGxldCB0b19mbG9hdF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX2Jvb2xfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEJvb2wgYiAtPiBTb21lIGJcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEJvb2wgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gZlxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX251bWJlcl9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IGNvbnZlcnRfZWFjaCBmID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgbCAtPiBMaXN0Lm1hcCBmIGxcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBMaXN0XCIganNvblxuXG4gICAgbGV0IHJldl9maWx0ZXJfbWFwID0gU2hhcmVkLnJldl9maWx0ZXJfbWFwXG4gICAgbGV0IGZpbHRlcl9tYXAgPSBTaGFyZWQuZmlsdGVyX21hcFxuXG4gICAgbGV0IHJldl9mbGF0dGVuID0gU2hhcmVkLnJldl9mbGF0dGVuXG4gICAgbGV0IGZsYXR0ZW4gPSBTaGFyZWQuZmxhdHRlblxuXG4gICAgbGV0IGZpbHRlcl9pbmRleCBpIGwgPVxuICAgICAgZmlsdGVyX21hcCAoZnVuY3Rpb24gfCBgTGlzdCBsIC0+ICh0cnkgU29tZSAoTGlzdC5udGggbCBpKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbGlzdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYExpc3QgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Fzc29jIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Jvb2wgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBCb29sIGIgLT4gU29tZSBiIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9mbG9hdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEZsb2F0IGYgLT4gU29tZSBmIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9zdHJpbmcgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBTdHJpbmcgcyAtPiBTb21lIHMgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbWVtYmVyIGsgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiAodHJ5IFNvbWUgKExpc3QuYXNzb2MgayBsKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICAgICAgZmlsdGVyX21hcCAoXG4gICAgICAgIGZ1bmN0aW9uXG4gICAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICApIGxcblxuICAgIGxldCBrZXlzIG8gPSB0b19hc3NvYyBvIHw+IExpc3QubWFwIChmdW4gKGtleSwgXykgLT4ga2V5KVxuXG4gICAgbGV0IHZhbHVlcyBvID0gdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChfLCB2YWx1ZSkgLT4gdmFsdWUpXG5cbiAgICBsZXQgY29tYmluZSBmaXJzdCBzZWNvbmQgPVxuICAgICAgbWF0Y2ggKGZpcnN0LCBzZWNvbmQpIHdpdGhcbiAgICAgIHwgKGBBc3NvYyBhLCBgQXNzb2MgYikgLT4gYEFzc29jIChhIEAgYilcbiAgICAgIHwgKF8sIF8pIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRXhwZWN0ZWQgdHdvIG9iamVjdHNcIilcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGVsIC0+ICBlbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9iYXNpY19pbnRmID0gc2lnXG5cbiAgICB2YWwgdG9fbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19udW1iZXJfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCB0b19pbnQgOiBbPiBgSW50IG9mIGludCBdIC0+IGludFxuICAgIHZhbCB0b19pbnRfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgTnVsbCBdIC0+IGludCBvcHRpb25cbiAgICB2YWwgZmlsdGVyX2ludCA6IFs+IGBJbnQgb2YgaW50IF0gbGlzdCAtPiBpbnQgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgZW5kXG5cbiAgbW9kdWxlIEJhc2ljKE0gOiBTKSA6IEludGVybmFsX2Jhc2ljX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCB0b19udW1iZXIgPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gZmxvYXQgaVxuICAgICAgfCBgRmxvYXQgZiAtPiBmXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50IG9yIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXJfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50LCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9faW50ID0gZnVuY3Rpb24gfCBgSW50IGkgLT4gaSB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50XCIganNvblxuXG4gICAgbGV0IHRvX2ludF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gU29tZSBpXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgZmlsdGVyX2ludCBsID0gU2hhcmVkLmZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBJbnQgaSAtPiBTb21lIGkgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX251bWJlciBsID1cbiAgICAgIFNoYXJlZC5maWx0ZXJfbWFwIChcbiAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgfCBgSW50IGkgLT4gU29tZSAoZmxvYXQgaSlcbiAgICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgICkgbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9leHRlbmRlZF9pbnRmID0gc2lnXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgfFxuICAgICAgICAgICAgICAgICAgIGBUdXBsZSBvZiAnYSBsaXN0IHwgYFZhcmlhbnQgb2YgJ2IgKiAnYSBvcHRpb24gXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIEV4dGVuZGVkKE0gOiBTKSA6IEludGVybmFsX2V4dGVuZGVkX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgVHVwbGUgbFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGBWYXJpYW50IChrLCBTb21lIHYpIGFzIHYxIC0+XG4gICAgICAgIGxldCB2JyA9IHNvcnQgdiBpbiBpZiB2JyA9PSB2IHRoZW4gdjEgZWxzZSBgVmFyaWFudCAoaywgU29tZSB2JylcbiAgICAgIHwgZWwgLT4gIGVsXG4gIGVuZFxuXG5lbmRcblxubW9kdWxlIFN0cmljdCA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uU3RyaWN0Lmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5kZWQgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkV4dGVuZGVkLmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuRXh0ZW5kZWQoTSlcbmVuZFxuXG5tb2R1bGUgWW9qc29uX3NhZmUgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPVxuICAgICAgW1xuICAgICAgfCBgTnVsbFxuICAgICAgfCBgQm9vbCBvZiBib29sXG4gICAgICB8IGBJbnQgb2YgaW50XG4gICAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgICAgfCBgU3RyaW5nIG9mIHN0cmluZ1xuICAgICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgICAgXVxuXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuICBpbmNsdWRlIEludGVybmFsLkV4dGVuZGVkKE0pXG5lbmRcbiIsImxldCB0b2tlbl90b19zdHJpbmcgKHRvazpUb2tlbnMudG9rZW4pID1cbiAgbWF0Y2ggdG9rIHdpdGhcbiAgfCBTVFJJTkcgcyAtPiBzXG4gIHwgT1MgLT4gXCJ7XCJcbiAgfCBPRSAtPiBcIn1cIlxuICB8IE5VTEwgLT4gXCJOdWxsXCJcbiAgfCBORUdJTkZJTklUWSAtPiBcIi1JbmZpbml0eVwiXG4gIHwgTkFOIC0+IFwiTkFOXCJcbiAgfCBMRVhfRVJST1IgZXJyIC0+IFwiaW5wdXQgZXJyb3IgJ1wiIF4gZXJyIF4gXCInXCJcbiAgfCBMQVJHRUlOVCBzIC0+IHNcbiAgfCBJTlQgaSAtPiBzdHJpbmdfb2ZfaW50IGlcbiAgfCBJTkZJTklUWSAtPiBcIkluZmluaXR5XCJcbiAgfCBGTE9BVCBmIC0+IHN0cmluZ19vZl9mbG9hdCBmXG4gIHwgRU9GIC0+IFwiZW5kLW9mLWZpbGVcIlxuICB8IENPTVBMSUFOQ0VfRVJST1IgZXJyIC0+IGVyclxuICB8IENPTU1BIC0+IFwiLFwiXG4gIHwgQ09MT04gLT4gXCI6XCJcbiAgfCBCT09MIGIgLT4gaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG4gIHwgQVMgLT4gXCJbXCJcbiAgfCBBRSAtPiBcIl1cIlxuICB8IFZTIC0+IFwiPFwiXG4gIHwgVkUgLT4gXCI+XCJcbiAgfCBUUyAtPiBcIihcIlxuICB8IFRFIC0+IFwiKVwiXG4iLCJtb2R1bGUgdHlwZSBSZWFkZXJfc3RyaW5nX2ZpbGUgPSBzaWdcbiAgdHlwZSBqc29uXG5cbiAgdmFsIGpzb25fb2Zfc3RyaW5nIDogc3RyaW5nIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9zdHJpbmdfZXhuIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZmlsZSA6IHN0cmluZyAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9leG4gOiBzdHJpbmcgLT4ganNvblxuICB2YWwganNvbl9vZl9jaGFubmVsIDogaW5fY2hhbm5lbCAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfY2hhbm5lbF9leG4gOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uX2V4biA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uXG4gIHZhbCBqc29uX29mX2xleGJ1ZiA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9leG4gOiBMZXhpbmcubGV4YnVmIC0+IGpzb25cbiAgdmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBvZl9maWxlIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIG9mX2NoYW5uZWwgOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIG9mX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb25cblxuICB2YWwganNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIDogc3RyaW5nIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gOiBpbl9jaGFubmVsIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mbyA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA6ID9zdHJlYW06Ym9vbCAtPiBMZXhpbmcubGV4YnVmIC0+IChqc29uIG9wdGlvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2NoYW5uZWwgOiA/ZmluOih1bml0IC0+IHVuaXQpIC0+IGluX2NoYW5uZWwgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZmlsZSA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9sZXhidWYgOiBMZXhpbmcubGV4YnVmIC0+IGpzb24gU3RyZWFtLnRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIDogP2ZpbjoodW5pdCAtPiB1bml0KSAtPiBpbl9jaGFubmVsIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uIFN0cmVhbS50XG5lbmRcblxubW9kdWxlIE1ha2UgKExleHhlciA6IENvbXBsaWFudF9sZXh4ZXIuTGV4ICkgKFBhcnNlciA6IFBhcnNlci5QYXJzZXIpIDogUmVhZGVyX3N0cmluZ19maWxlXG4gIHdpdGggdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuPSBzdHJ1Y3RcbiAgdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuXG4gIGxldCByZWFkX2pzb24nIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgIHwgT2sgTm9uZSAtPiBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEVPRiAtPiBPayByZXNcbiAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgfCB0b2sgLT4gRXJyb3IgKFwianVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTogXCIgXiAoVG9rZW5fdXRpbHMudG9rZW5fdG9fc3RyaW5nIHRvaykpXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuXG4gIGxldCByZWFkX2pzb24gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIHMgaW5cbiAgICAgIEVycm9yIChFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbylcblxuICBsZXQganNvbl9vZl9zdHJpbmcgcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9zdHJpbmdfZXhuIHMgPVxuICAgIG1hdGNoIGpzb25fb2Zfc3RyaW5nIHMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBvZl9zdHJpbmcgcyA9IGpzb25fb2Zfc3RyaW5nX2V4biBzXG5cbiAgbGV0IGpzb25fb2ZfZmlsZSBmaWxlbmFtZSA9XG4gICAgdHJ5IGJlZ2luXG4gICAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgICBsZXQgcmVzID0gcmVhZF9qc29uIH5sZXhidWYgaW5cbiAgICAgICAgY2xvc2VfaW4gaW5jO1xuICAgICAgICByZXNcbiAgICBlbmRcbiAgICB3aXRoIFN5c19lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9leG4gZmlsZW5hbWUgPVxuICAgIG1hdGNoIGpzb25fb2ZfZmlsZSBmaWxlbmFtZSB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbCBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbF9leG4gaW5jID1cbiAgICBtYXRjaCBqc29uX29mX2NoYW5uZWwgaW5jIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbiBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXhuIGxleGJ1ZiA9XG4gICAgbWF0Y2gganNvbl9vZl9sZXhidWYgbGV4YnVmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9leG4gZiA9XG4gICAgbWF0Y2gganNvbl9vZl9mdW5jdGlvbiBmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQgb2ZfZmlsZSA9IGpzb25fb2ZfZmlsZV9leG5cbiAgbGV0IG9mX2NoYW5uZWwgPSBqc29uX29mX2NoYW5uZWxfZXhuXG4gIGxldCBvZl9mdW5jdGlvbiA9IGpzb25fb2ZfZnVuY3Rpb25fZXhuXG5cbiAgKCogRXJyb3JfaW5mby50IHJldHVybmluZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG4gIGxldCBqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lID1cbiAgICB0cnkgYmVnaW5cbiAgICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgICBsZXQgcmVzID0ganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jIGluXG4gICAgICAgIGNsb3NlX2luIGluYztcbiAgICAgICAgcmVzXG4gICAgZW5kXG4gICAgd2l0aCBTeXNfZXJyb3IgZXJyIC0+IEVycm9yIHsgRXJyb3JfaW5mby5saW5lID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDsgbXNnID0gZXJyIH1cblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gICgqIEludGVybmFsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb24gc3VwcG9ydGluZyB0aGUgc3RyZWFtIGZsYWcgKilcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgPyhzdHJlYW0gPSBmYWxzZSkgbGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IHJlcyA9IG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgfCBPayBOb25lIC0+IGlmIHN0cmVhbSB0aGVuIE9rIE5vbmUgZWxzZSBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHN0cmVhbSB3aXRoXG4gICAgICB8IHRydWUgLT4gT2sgKFNvbWUgcmVzKVxuICAgICAgfCBmYWxzZSAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IEVPRiAtPiBPayAoU29tZSByZXMpXG4gICAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgICB8IHRvayAtPiBFcnJvciAoXCJqdW5rIGFmdGVyIGVuZCBvZiBKU09OIHZhbHVlOiBcIiBeIChUb2tlbl91dGlscy50b2tlbl90b19zdHJpbmcgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgIGluXG4gICAgbWF0Y2ggcmVzIHdpdGhcbiAgICB8IE9rIHJlcyAtPiBPayByZXNcbiAgICB8IEVycm9yIHMgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBzIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG5cbiAgKCogU3RyZWFtLnQgcmV0dXJuaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtIH5maW4gfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgICB8IE9rIE5vbmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IE9rIChTb21lIHJlcykgLT4gU29tZSByZXNcbiAgICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIGxldCAoKSA9IGZpbiAoKSBpblxuICAgICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICAgIGxldCBtc2cgPSBFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbyBpblxuICAgICAgICByYWlzZSAoRmFpbHVyZSBtc2cpXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID8oZmluID0gZnVuICgpIC0+ICgpKSBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpbmMpIGluY1xuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWYgbGV4YnVmID1cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gICgqIFN0cmVhbS50IEpzb25fZXJyb3JfaW5mbyByYWlzaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICAgIHwgT2sgTm9uZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBTb21lIHJlc1xuICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgbGV0ICgpID0gZmluICgpIGluXG4gICAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgICAgcmFpc2UgKEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uX2Vycm9yX2luZm8gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGluYykgaW5jXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG5lbmRcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIGpzb25fdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19maWxlX2V4biA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbCA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2V4biA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW1fZXhuIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bSA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bV9leG4gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19jaGFubmVsIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fY2hhbm5lbF9odW0gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogSW50ZiA9IHN0cnVjdFxuXG4gIGxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxuICBsZXQgYWRkX2hleF9ieXRlIG9jIGkgPVxuICAgIG91dHB1dF9jaGFyIG9jIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gICAgb3V0cHV0X2NoYXIgb2MgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIG9jIHMgPVxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSBvYyAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfZm10IG9jIGpzb24gfmVvbCB+aW5jciB+cHNlcCA9IFxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBvYyBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcHNlcCA9IFwiOlwiIF4gcHNlcCBpblxuICAgIGxldCByZWMgZm10IG9mZiB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICd7JzsgYWRkX3N0cmluZyBlb2w7IGpzb25fYXNzb2MgKG9mZiArIGluY3IpIG87XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJ1snOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSBsO1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJygnOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSB0O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICc8JzsgYWRkX3N0cmluZyBlb2w7ICB2YXJpYW50IChvZmYgKyBpbmNyKSB2O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIG9mZiBvID1cbiAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFwiIF4gZW9sIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgcGFpciBvZmYgdiApIG9cbiAgICBhbmQgcGFpciBvZmYgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfc3RyaW5nIHBzZXA7IGZtdCBvZmYgdlxuICAgIGFuZCBqc29uX2xpc3Qgb2ZmIGwgPVxuICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXCIgXiBlb2wgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBmbXQgb2ZmIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgb2ZmIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgcHNlcDsgZm10IChvZmYgKyBpbmNyKSBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCAwIGpzb247XG4gICAgYWRkX3N0cmluZyBlb2xcblxuICBsZXQganNvbl90b19jaGFubmVsJyA9IGpzb25fdG9fY2hhbm5lbF9mbXQgfmVvbDpcIlwiIH5pbmNyOjAgfnBzZXA6XCJcIlxuICBsZXQganNvbl90b19jaGFubmVsX2h1bScgPSBqc29uX3RvX2NoYW5uZWxfZm10IH5lb2w6XCJcXG5cIiB+aW5jcjoyIH5wc2VwOlwiIFwiXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fY2hhbm5lbCcgb2MganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW0gb2MganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2NoYW5uZWxfaHVtJyBvYyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19jaGFubmVsX2V4biA9IGpzb25fdG9fY2hhbm5lbCdcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW1fZXhuID0ganNvbl90b19jaGFubmVsX2h1bSdcblxuICBsZXQganNvbl90b19maWxlIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIGxldCByZXMgPSBqc29uX3RvX2NoYW5uZWwgb2MganNvbiBpblxuICAgIGNsb3NlX291dCBvYztcbiAgICByZXNcblxuICBsZXQganNvbl90b19maWxlX2h1bSBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICBsZXQgcmVzID0ganNvbl90b19jaGFubmVsX2h1bSBvYyBqc29uIGluXG4gICAgY2xvc2Vfb3V0IG9jO1xuICAgIHJlc1xuXG4gIGxldCBqc29uX3RvX2ZpbGVfZXhuIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoanNvbl90b19jaGFubmVsJyBvYyBqc29uOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCBqc29uX3RvX2ZpbGVfaHVtX2V4biBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKGpzb25fdG9fY2hhbm5lbF9odW0nIG9jIGpzb247IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHRvX2ZpbGUgPSBqc29uX3RvX2ZpbGVfZXhuXG4gIGxldCB0b19maWxlX2h1bSA9IGpzb25fdG9fZmlsZV9odW1fZXhuXG4gIGxldCB0b19jaGFubmVsID0ganNvbl90b19jaGFubmVsX2V4blxuICBsZXQgdG9fY2hhbm5lbF9odW0gPSBqc29uX3RvX2NoYW5uZWxfaHVtX2V4blxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCBvYyBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiBqc29uX3RvX2NoYW5uZWxfZXhuIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgZmlsZSBzdHJlYW0gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKHN0cmVhbV90b19jaGFubmVsIG9jIHN0cmVhbTsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cbmVuZFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwganNvbl90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IChzdHJpbmcsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX3N0cmluZ19leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHN0cmluZywgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bV9leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBqc29uX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9leG4gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2h1bSA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9odW1fZXhuIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2J1ZmZlcl9odW0gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHN0cmluZ1xuICB2YWwgc3RyZWFtX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IEludGYgPSBzdHJ1Y3RcblxuICBsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbiAgbGV0IGFkZF9oZXhfYnl0ZSBidWYgaSA9XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIGJ1ZiBzID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIGJ1ZiAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT4gYWRkX2NoYXIgJ3snOyBqc29uX2Fzc29jIG87IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+IGFkZF9jaGFyICdbJzsganNvbl9saXN0IGw7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT4gYWRkX2NoYXIgJygnOyBqc29uX2xpc3QgdDsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT4gYWRkX2NoYXIgJzwnOyAgdmFyaWFudCB2OyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBvID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBwYWlyIHYgKSBvXG4gICAgYW5kIHBhaXIgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfY2hhciAnOic7IGZtdCB2XG4gICAgYW5kIGpzb25fbGlzdCBsID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBmbXQgdiApIGxcbiAgICBhbmQgdmFyaWFudCAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfY2hhciAnOic7IGZtdCBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCBqc29uXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bScgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IGxkciB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJ7XFxuXCI7IGpzb25fYXNzb2MgKGxkciBeIFwiICBcIikgbztcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiW1xcblwiOyBqc29uX2xpc3QgKGxkciBeIFwiICBcIikgbDtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCIoXFxuXCI7IGpzb25fbGlzdCAobGRyIF4gXCIgIFwiKSB0O1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCI8XCI7ICB2YXJpYW50IChsZHIgXiBcIiAgXCIpIHY7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2MgbGRyIG8gPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IHBhaXIgbGRyIHYgKSBvXG4gICAgYW5kIHBhaXIgbGRyIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX3N0cmluZyBcIjogXCI7IGZtdCBsZHIgdlxuICAgIGFuZCBqc29uX2xpc3QgbGRyIGwgPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IGZtdCBsZHIgIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgbGRyIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgXCI6IFwiOyBmbXQgKGxkciBeIFwiICBcIikgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQgXCJcIiBqc29uO1xuICAgIGFkZF9jaGFyICdcXG4nXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nJyBqc29uID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb247XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBqc29uX3RvX3N0cmluZyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nJyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19idWZmZXIgYnVmIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19idWZmZXInIGJ1ZiBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19zdHJpbmdfZXhuID0ganNvbl90b19zdHJpbmcnXG4gIGxldCB0b19zdHJpbmcgPSBqc29uX3RvX3N0cmluZydcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2V4biA9IGpzb25fdG9fYnVmZmVyJ1xuICBsZXQgdG9fYnVmZmVyID0ganNvbl90b19idWZmZXInXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bScganNvbiA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAganNvbl90b19idWZmZXJfaHVtJyBidWYganNvbjtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bSBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nX2h1bScganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bSBidWYganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW1fZXhuID0ganNvbl90b19zdHJpbmdfaHVtJ1xuICBsZXQgdG9fc3RyaW5nX2h1bSA9IGpzb25fdG9fc3RyaW5nX2h1bSdcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bV9leG4gPSBqc29uX3RvX2J1ZmZlcl9odW0nXG4gIGxldCB0b19idWZmZXJfaHVtID0ganNvbl90b19idWZmZXJfaHVtJ1xuXG4gIGxldCBzdHJlYW1fdG9fc3RyaW5nIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2J1ZmZlciBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fYnVmZmVyIGJ1ZiBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19idWZmZXIgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG5lbmRcbiIsImV4Y2VwdGlvbiBKc29uX2Vycm9yIG9mIHN0cmluZ1xuXG5sZXQganNvbl9lcnJvciBtc2cgPSByYWlzZSAoSnNvbl9lcnJvciBtc2cpXG5cbnR5cGUgbGV4ZXJfc3RhdGUgPSB7XG4gIGJ1ZiA6IEJ1ZmZlci50O1xuICBtdXRhYmxlIGxudW0gOiBpbnQ7XG4gIG11dGFibGUgYm9sIDogaW50O1xuICBtdXRhYmxlIGZuYW1lIDogc3RyaW5nIG9wdGlvbjtcbn1cblxubGV0IGluaXRfbGV4ZXIgP2J1ZjpfID9mbmFtZSA/KGxudW0gPSAxKSAoKSA9XG4gIHtcbiAgICBidWYgPSBCdWZmZXIuY3JlYXRlIDE2ICAoKiB1bnVzZWQgKilcbiAgOyBsbnVtID0gbG51bVxuICA7IGJvbCA9IDBcbiAgOyBmbmFtZSA9IGZuYW1lXG4gIH1cblxubW9kdWxlIENvbW1vbl9yZWFkZXIgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIG1vZHVsZSBJbnRlcm5hbF9yZWFkZXIgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgTGV4eGVyID0gQ29tcGxpYW50X2xleHhlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgbW9kdWxlIFBhcnNlciA9IFBhcnNlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBSZWFkZXJfc3RyaW5nX2ZpbGUuTWFrZSAoTGV4eGVyKSAoUGFyc2VyKVxuICBlbmRcblxuICB0eXBlIGpzb24gPSBJbnRlcm5hbF9yZWFkZXIuanNvblxuICB0eXBlIHQgPSBqc29uXG4gIHR5cGUganNvbl9saW5lID0gWyBgSnNvbiBvZiB0IHwgYEV4biBvZiBleG4gXVxuXG4gICgqIEhlbHBlciBmdW5jdGlvbnMgKilcbiAgbGV0IGVycm9yX3RvX3N0cmluZyAoZXJyb3JfaW5mbzpFcnJvcl9pbmZvLnQpIGZuYW1lIGxudW0gPVxuICAgIGxldCBsbnVtID0gbWF0Y2ggbG51bSB3aXRoIFNvbWUgbG51bSAtPiBsbnVtIHwgTm9uZSAtPiAxIGluXG4gICAgbGV0IGluZm8gPSB7IGVycm9yX2luZm8gd2l0aCBsaW5lID0gbG51bSArIGVycm9yX2luZm8ubGluZSAtIDEgfSBpblxuICAgIGxldCBmbmFtZSA9IG1hdGNoIGZuYW1lIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBcIkxpbmVcIlxuICAgICAgfCBTb21lIG5hbWUgLT4gXCJGaWxlIFwiIF4gbmFtZSBeIFwiLCBsaW5lXCJcbiAgICBpblxuICAgIGxldCBsb2MgPSBQcmludGYuc3ByaW50ZiBcIiVzICVkIGNoYXJzICVkLSVkOiBcIiBmbmFtZSBpbmZvLmxpbmUgaW5mby5zdGFydF9jaGFyIGluZm8uZW5kX2NoYXIgaW5cbiAgICBsb2MgXiBpbmZvLm1zZ1xuXG4gIGxldCBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBmIGEgZm5hbWUgbG51bSA9XG4gICAgbWF0Y2ggZiBhIHdpdGhcbiAgICB8IE9rIGpzb24gLT4ganNvblxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gICgqIFJlYWRlcnMgKilcbiAgbGV0IGZyb21fc3RyaW5nID9idWY6XyA/Zm5hbWUgP2xudW0gcyA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gcyBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fY2hhbm5lbCA/YnVmOl8gP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9maWxlID9idWY6XyA/Zm5hbWUgP2xudW0gZmlsZW5hbWUgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fbGV4YnVmIGxleHN0YXRlID9zdHJlYW0gbGV4YnVmID1cbiAgICBsZXQgZm5hbWUgPSBsZXhzdGF0ZS5mbmFtZSBpblxuICAgIGxldCBsbnVtID0gU29tZSBsZXhzdGF0ZS5sbnVtIGluXG4gICAgbWF0Y2ggSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0ID9zdHJlYW0gbGV4YnVmIHdpdGhcbiAgICB8IE9rIChTb21lIGpzb24pIC0+IGpzb25cbiAgICB8IE9rIE5vbmUgLT4ganNvbl9lcnJvciBcIkJsYW5rIGlucHV0IGRhdGFcIlxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gIGxldCByZWFkX3QgbGV4c3RhdGUgbGV4YnVmID0gZnJvbV9sZXhidWYgbGV4c3RhdGUgbGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBzdHJlYW1fZiBhIGZuYW1lIGxudW0gPVxuICAgIGxldCBzdHJlYW0gPSBzdHJlYW1fZiBhIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggU3RyZWFtLm5leHQgc3RyZWFtIHdpdGhcbiAgICAgIHwgdiAtPiBTb21lIHZcbiAgICAgIHwgZXhjZXB0aW9uIFN0cmVhbS5GYWlsdXJlIC0+IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJfaW5mbyBmbmFtZSBsbnVtKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmcgP2J1ZjpfID9mbmFtZSA/bG51bSBzID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIHMgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyAoSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyB+ZmluKSBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSA/YnVmOl8gP2ZuYW1lID9sbnVtIGZpbGVuYW1lID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1ZiBsZXhzdGF0ZSA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgbGV4YnVmID1cbiAgICBsZXQgc3RyZWFtID0gSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFN0cmVhbS5uZXh0IHN0cmVhbSB3aXRoXG4gICAgICB8IHYgLT4gU29tZSB2XG4gICAgICB8IGV4Y2VwdGlvbiBTdHJlYW0uRmFpbHVyZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGZpbiAoKTsganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycl9pbmZvIGxleHN0YXRlLmZuYW1lIChTb21lIGxleHN0YXRlLmxudW0pKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID8obG51bSA9IDEpIGljID1cbiAgICBsZXQgZiBpID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgbG51bSA9IGxudW0gKyBpIGluXG4gICAgICAgIGxldCBsaW5lID0gaW5wdXRfbGluZSBpYyBpbiBTb21lIChgSnNvbiAoZnJvbV9zdHJpbmcgP2ZuYW1lIH5sbnVtIGxpbmUpKVxuICAgICAgd2l0aFxuICAgICAgICB8IEVuZF9vZl9maWxlIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgICB8IGV4bl8gLT4gZmluICgpOyBTb21lIChgRXhuIGV4bl8pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9maWxlID9idWY6XyA/Zm5hbWU6XyA/bG51bTpfIGZpbGVuYW1lID1cbiAgICBsZXQgaWMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgbGluZXN0cmVhbV9mcm9tX2NoYW5uZWwgfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGljKSBpY1xuZW5kXG5cbm1vZHVsZSBDb21tb25fd3JpdGVyIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBtb2R1bGUgSW50ZXJuYWxfd3JpdGVyID0gc3RydWN0XG4gICAgaW5jbHVkZSBXcml0ZXJfc3RyaW5nLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFdyaXRlcl9maWxlLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFByZXR0eS5NYWtlKENvbXBsaWFuY2UpXG4gIGVuZFxuXG4gIGxldCB0b19zdGFuZGFyZCBqc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2ICAoKiBpbnQgaXMgb2sgb24gb3V0cHV0ICopXG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBGbG9hdGxpdCB2IC0+IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHYpXG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIFN0cmluZy5sZW5ndGggcyB3aXRoXG4gICAgICAgIHwgMCB8IDEgLT4gYFN0cmluZyBzICAgICAgICAgKCogbWFsZm9ybWVkLCBzaG91bGQgaGF2ZSBkb3VibGUtcXVvdGVzIGF0IHN0YXJ0IGFuZCBlbmQgKilcbiAgICAgICAgfCBfIC0+IGBTdHJpbmcgKFN0cmluZy5zdWIgcyAxIChTdHJpbmcubGVuZ3RoIHMgLSAyKSlcbiAgICAgICAgZW5kXG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCBsKVxuICAgICAgfCBgQXNzb2MgYSAtPiBgQXNzb2MgKExpc3QubWFwIChmdW4gKGlkLCB2KSAtPiAoaWQsIG1hcCB2KSkgYSlcbiAgICAgIHwgYFR1cGxlIHRwbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIHRwbClcbiAgICAgIHwgYFZhcmlhbnQgKG5hbWUsIGpvcHQpIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBqb3B0IHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBgU3RyaW5nIG5hbWVcbiAgICAgICAgIHwgU29tZSB2IC0+IGBMaXN0IFsgYFN0cmluZyBuYW1lOyAobWFwIHYpIF1cbiAgICAgICAgZW5kXG4gICAgaW5cbiAgICBtYXAganNvblxuXG4gICgqIFdyaXRlcnMgKilcblxuICBsZXQgdG9fc3RyaW5nID9idWY6XyA/bGVuOl8gPyhzdGQgPSBmYWxzZSkganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX3N0cmluZyAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fc3RyaW5nIGpzb25cblxuICBsZXQgdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID8oc3RkID0gZmFsc2UpIG91dF9jaGFubmVsIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19jaGFubmVsIG91dF9jaGFubmVsICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2NoYW5uZWwgb3V0X2NoYW5uZWwganNvblxuXG4gIGxldCB0b19maWxlID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBmaWxlbmFtZSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fZmlsZSBmaWxlbmFtZSAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci50b19maWxlIGZpbGVuYW1lIGpzb25cblxuICBsZXQgdG9fb3V0YnVmID8oc3RkID0gZmFsc2UpIGJ1ZiBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiBqc29uXG5cbiAgbGV0IHRvX291dHB1dCA/YnVmOl8gP2xlbjpfID9zdGQgb3V0IGpzb24gPVxuICAgIGxldCBzdHIgPSB0b19zdHJpbmcgP3N0ZCBqc29uIGluXG4gICAgb3V0I291dHB1dCBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IHN0cmVhbV90b19zdHJpbmcgP2J1ZjpfID9sZW46XyA/c3RkIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXJcbiAgICAgIChmdW4ganNvbiAtPiB0b19vdXRidWYgP3N0ZCBidWYganNvbjsgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID9zdGQgb2Mgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fY2hhbm5lbCA/c3RkIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgP2xlbjpfID9zdGQgZmlsZW5hbWUgc3RyZWFtID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlbmFtZSBpblxuICAgIHRyeSAoc3RyZWFtX3RvX2NoYW5uZWwgP3N0ZCBvYyBzdHJlYW07IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHN0cmVhbV90b19vdXRidWYgP3N0ZCBidWYgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fb3V0YnVmID9zdGQgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCB3cml0ZV90IGJ1ZiBqc29uID0gdG9fb3V0YnVmIGJ1ZiBqc29uXG5cbiAgKCogUHJldHR5IHByaW50ZXJzICopXG4gIGxldCBwcmV0dHlfcHJpbnQgPyhzdGQgPSBmYWxzZSkgb3V0IGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnQgb3V0ICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludCBvdXQganNvblxuXG4gIGxldCBwcmV0dHlfdG9fc3RyaW5nID8oc3RkID0gZmFsc2UpIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fc3RyaW5nICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19zdHJpbmcganNvblxuXG4gIGxldCBwcmV0dHlfdG9fY2hhbm5lbCA/KHN0ZCA9IGZhbHNlKSBvYyBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MganNvblxuXG4gICgqIFV0aWxpdGllcyAqKVxuICBsZXQgc2hvdyBqc29uID0gVXRpbGl0aWVzLmpzb25fdG9fc3RyaW5nX3JlcHIganNvblxuICBsZXQgcHAgb3V0IGpzb24gPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoc2hvdyBqc29uKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5CYXNpYy5qc29uXG5cbiAgICBvcGVuIFRva2Vuc1xuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgc1xuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgXyA9IENPTVBMSUFOQ0VfRVJST1IgXCJJbnRlZ2VyIG91dCBvZiBib3VuZHNcIlxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSBmYWxzZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IGZhbHNlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnQgaVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nIHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBfbCA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICBsZXQgdmFyaWFudCBfbCA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0IGZcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXQgKDEuMCAvLiAwLjApXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0ICgtMS4wIC8uIDAuMClcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXQgKDAuMCAvLiAwLjApXG4gICAgfCBgRmxvYXRsaXQgXyAtPiAgcmFpc2UgKEZhaWx1cmUgXCJmbG9hdGxpdCBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuQmFzaWMuc29ydFxuXG4gIG1vZHVsZSBVdGlsID0gc3RydWN0XG4gICAgaW5jbHVkZSBQcm9jZXNzLkJhc2ljXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBTYWZlID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG4gICAgdHlwZSBqc29uID1cbiAgICAgIFtcbiAgICAgIHwgYE51bGxcbiAgICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgICAgfCBgSW50IG9mIGludFxuICAgICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgICAgfCBgRmxvYXQgb2YgZmxvYXRcbiAgICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICAoKiB5b2pzb24gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nICopXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCB0b2tlbiA9IHRva2VuXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IHRydWVcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSB0cnVlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBJbnRsaXQgc1xuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50IGlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZyBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgbCA9IGBUdXBsZSBsXG4gICAgbGV0IHZhcmlhbnQgayB2ID0gYFZhcmlhbnQgKGssIHYpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXQgZlxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdCAoMS4wIC8uIDAuMClcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXQgKC0xLjAgLy4gMC4wKVxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdCAoMC4wIC8uIDAuMClcbiAgICB8IGBGbG9hdGxpdCBfIC0+ICByYWlzZSAoRmFpbHVyZSBcImZsb2F0bGl0IG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIHNhZmUgbW9kZVwiKVxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5cbiAgbGV0IHRvX2Jhc2ljIGpzb24gOiBCYXNpYy5qc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIGwpXG4gICAgICB8IGBBc3NvYyBhIC0+IGBBc3NvYyAoTGlzdC5tYXAgKGZ1biAoaWQsIHYpIC0+IChpZCwgbWFwIHYpKSBhKVxuICAgICAgfCBgVHVwbGUgdHBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgdHBsKVxuICAgICAgfCBgVmFyaWFudCAobmFtZSwgam9wdCkgLT5cbiAgICAgICAgIG1hdGNoIGpvcHQgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IGBTdHJpbmcgbmFtZVxuICAgICAgICAgfCBTb21lIHYgLT4gYExpc3QgWyBgU3RyaW5nIG5hbWU7IChtYXAgdikgXVxuICAgIGluXG4gICAgbWFwIGpzb25cblxuICBtb2R1bGUgVXRpbCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgUHJvY2Vzcy5Zb2pzb25fc2FmZVxuICBlbmRcbmVuZFxuXG5tb2R1bGUgUmF3ID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG5cbiAgdHlwZSBqc29uID1cbiAgICBbXG4gICAgfCBgTnVsbFxuICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICB8IGBGbG9hdGxpdCBvZiBzdHJpbmdcbiAgICB8IGBTdHJpbmdsaXQgb2Ygc3RyaW5nXG4gICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICgqIHlvanNvbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgKilcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBcIlxcXCJcIiBeIHMgXiBcIlxcXCJcIlxuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgdG9rZW4gPSB0b2tlblxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSB0cnVlXG4gICAgbGV0IGxleF90dXBsZSBfID0gdHJ1ZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgSW50bGl0IHNcbiAgICBsZXQgaW50ZWdlciBpID0gYEludGxpdCAoc3RyaW5nX29mX2ludCBpKVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nbGl0IHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBsID0gYFR1cGxlIGxcbiAgICBsZXQgdmFyaWFudCBrIHYgPSBgVmFyaWFudCAoaywgdilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdGxpdCAoc3RyaW5nX29mX2Zsb2F0IGYpXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0bGl0IFwiSW5maW5pdHlcIlxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdGxpdCBcIi1JbmZpbml0eVwiXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0bGl0IFwiTmFOXCJcbiAgICB8IGBGbG9hdGxpdCBmIC0+ICBgRmxvYXRsaXQgZlxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5lbmRcbiIsImluY2x1ZGUgQ29udGFpbmVyc0xhYmVsc1xuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG4gIG1vZHVsZSBTZXQgPSBTZXQuTWFrZSAoU3RyaW5nKVxuZW5kXG5cbm1vZHVsZSBZb2pzb24gPSBzdHJ1Y3RcbiAgaW5jbHVkZSBKc29ueHQuWW9qc29uXG5lbmRcblxubW9kdWxlIEVuY29kaW5ncyA9IHN0cnVjdFxuICBsZXQgdG9fanN0ciB0ID0gSnYucmVwciB0IHw+IEJyci5Kc29uLmVuY29kZVxuICBsZXQgdG9fanYgdCA9IHRvX2pzdHIgdCB8PiBKdi5vZl9qc3RyXG5cbiAgbGV0IG9mX2pzdHIganN0ciA9XG4gICAgbWF0Y2ggQnJyLkpzb24uZGVjb2RlIGpzdHIgd2l0aFxuICAgIHwgT2sgdiAtPiBPayAoT2JqLm1hZ2ljIHYpXG4gICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgQnJyLkNvbnNvbGUuZXJyb3IgWyBlcnIgXTtcbiAgICAgICAgRXJyb3IgKGBNc2cgXCJGYWlsZWQgdG8gdW5tYXJzaGFsIGRhdGFcIilcblxuICBsZXQgb2ZfanYganYgPSBKdi50b19qc3RyIGp2IHw+IG9mX2pzdHJcbmVuZFxuXG5sZXQgcmFuZG9tX3N0YXRlID0gUmFuZG9tLmdldF9zdGF0ZSAoKVxubGV0IG5ld191dWlkX3Y0ICgpID0gVXVpZG0udjRfZ2VuIHJhbmRvbV9zdGF0ZSAoKVxuXG4oKiogW3RlZSBmIHhdIGFwcGxpZXMgW2ZdIHRvIFt4XSBhbmQgcmV0dXJucyBbeF0gKilcbmxldCB0ZWUgZiB4ID1cbiAgbGV0ICgpID0gZiB4IGluXG4gIHhcbiIsIm9wZW4gU3RkTGFiZWxzXG5vcGVuIE1vcmVMYWJlbHNcbm9wZW4hIFlvanNvblxuXG50eXBlIHQgPSBZb2pzb24uU2FmZS50XG5cbmxldCB5b2pzb25fb2ZfdW5pdCAoKSA6IHQgPSBgTnVsbFxubGV0IHlvanNvbl9vZl9ib29sIGIgOiB0ID0gYEJvb2wgYlxubGV0IHlvanNvbl9vZl9zdHJpbmcgc3RyIDogdCA9IGBTdHJpbmcgc3RyXG5sZXQgeW9qc29uX29mX2J5dGVzIGJ5dGVzIDogdCA9IGBTdHJpbmcgKEJ5dGVzLnRvX3N0cmluZyBieXRlcylcbmxldCB5b2pzb25fb2ZfY2hhciBjIDogdCA9IGBTdHJpbmcgKFN0cmluZy5tYWtlIDEgYylcbmxldCB5b2pzb25fb2ZfaW50IG4gOiB0ID0gYEludCBuXG5sZXQgeW9qc29uX29mX2Zsb2F0IG4gOiB0ID0gYEZsb2F0IG5cbmxldCB5b2pzb25fb2ZfaW50MzIgKG4gOiBJbnQzMi50KSA6IHQgPSBgSW50bGl0IChJbnQzMi50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfaW50NjQgKG4gOiBJbnQ2NC50KSA6IHQgPSBgSW50bGl0IChJbnQ2NC50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfbmF0aXZlaW50IG4gOiB0ID0gYEludGxpdCAoTmF0aXZlaW50LnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9yZWYgeW9qc29uX29mX19hIHJmID0geW9qc29uX29mX19hICFyZlxubGV0IHlvanNvbl9vZl9sYXp5X3QgeW9qc29uX29mX19hIGx2ID0geW9qc29uX29mX19hIChMYXp5LmZvcmNlIGx2KVxuXG5sZXQgeW9qc29uX29mX29wdGlvbiB5b2pzb25fb2ZfX2EgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB5b2pzb25fb2ZfX2EgeFxuICB8IE5vbmUgLT4gYE51bGxcbjs7XG5cbmxldCB5b2pzb25fb2ZfcGFpciB5b2pzb25fb2ZfX2EgeW9qc29uX29mX19iIChhLCBiKSA9XG4gIGBMaXN0IFsgeW9qc29uX29mX19hIGE7IHlvanNvbl9vZl9fYiBiIF1cbjs7XG5cbmxldCB5b2pzb25fb2ZfdHJpcGxlIHlvanNvbl9vZl9fYSB5b2pzb25fb2ZfX2IgeW9qc29uX29mX19jIChhLCBiLCBjKSA9XG4gIGBMaXN0IFsgeW9qc29uX29mX19hIGE7IHlvanNvbl9vZl9fYiBiOyB5b2pzb25fb2ZfX2MgYyBdXG47O1xuXG4oKiBMaXN0LnJldiAoTGlzdC5yZXZfbWFwIC4uLikgaXMgdGFpbCByZWN1cnNpdmUsIHRoZSBPQ2FtbCBzdGFuZGFyZFxuICAgbGlicmFyeSBMaXN0Lm1hcCBpcyBOT1QuICopXG5sZXQgeW9qc29uX29mX2xpc3QgeW9qc29uX29mX19hIGxzdCA9IGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIH5mOnlvanNvbl9vZl9fYSBsc3QpKVxuXG5sZXQgeW9qc29uX29mX2FycmF5IHlvanNvbl9vZl9fYSBhciA9XG4gIGxldCBsc3RfcmVmID0gcmVmIFtdIGluXG4gIGZvciBpID0gQXJyYXkubGVuZ3RoIGFyIC0gMSBkb3dudG8gMCBkb1xuICAgIGxzdF9yZWYgOj0geW9qc29uX29mX19hIGFyLihpKSA6OiAhbHN0X3JlZlxuICBkb25lO1xuICBgTGlzdCAhbHN0X3JlZlxuOztcblxubGV0IHlvanNvbl9vZl9oYXNodGJsIHlvanNvbl9vZl9rZXkgeW9qc29uX29mX3ZhbCBodGJsID1cbiAgbGV0IGNvbGwgfmtleTprIH5kYXRhOnYgYWNjID0gYExpc3QgWyB5b2pzb25fb2Zfa2V5IGs7IHlvanNvbl9vZl92YWwgdiBdIDo6IGFjYyBpblxuICBgTGlzdCAoSGFzaHRibC5mb2xkIGh0YmwgfmluaXQ6W10gfmY6Y29sbClcbjs7XG5cbmxldCB5b2pzb25fb2Zfb3BhcXVlIF8gPSBgU3RyaW5nIFwiPG9wYXF1ZT5cIlxubGV0IHlvanNvbl9vZl9mdW4gXyA9IGBTdHJpbmcgXCI8ZnVuPlwiXG5cbmV4Y2VwdGlvbiBPZl95b2pzb25fZXJyb3Igb2YgZXhuICogdFxuXG5sZXQgcmVjb3JkX2NoZWNrX2V4dHJhX2ZpZWxkcyA9IHJlZiB0cnVlXG5sZXQgb2ZfeW9qc29uX2Vycm9yX2V4biBleGMgeW9qc29uID0gcmFpc2UgKE9mX3lvanNvbl9lcnJvciAoZXhjLCB5b2pzb24pKVxubGV0IG9mX3lvanNvbl9lcnJvciB3aGF0IHlvanNvbiA9IHJhaXNlIChPZl95b2pzb25fZXJyb3IgKEZhaWx1cmUgd2hhdCwgeW9qc29uKSlcblxubGV0IHVuaXRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYE51bGwgLT4gKClcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInVuaXRfb2ZfeW9qc29uOiBgTnVsbCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBib29sX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBCb29sIHYgLT4gdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYm9vbF9vZl95b2pzb246IHRydWUvZmFsc2UgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgc3RyaW5nX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+IHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwic3RyaW5nX29mX3lvanNvbjogc3RyaW5nIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGJ5dGVzX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+IEJ5dGVzLm9mX3N0cmluZyBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImJ5dGVzX29mX3lvanNvbjogc3RyaW5nIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGNoYXJfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT5cbiAgICBpZiBTdHJpbmcubGVuZ3RoIHN0ciA8PiAxXG4gICAgdGhlbiBvZl95b2pzb25fZXJyb3IgXCJjaGFyX29mX3lvanNvbjogc3RyaW5nIG11c3QgY29udGFpbiBvbmUgY2hhcmFjdGVyIG9ubHlcIiB5b2pzb247XG4gICAgc3RyLlswXVxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiY2hhcl9vZl95b2pzb246IHN0cmluZyBvZiBzaXplIG9uZSBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludCB2IC0+IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgZmxvYXRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEZsb2F0IHYgLT4gdlxuICB8IGBJbnQgaSAtPiBmbG9hdF9vZl9pbnQgaVxuICB8IGBJbnRsaXQgc3RyIC0+IGZsb2F0X29mX3N0cmluZyBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImZsb2F0X29mX3lvanNvbjogZmxvYXQgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50MzJfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gSW50MzIub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBJbnQzMi5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50MzJfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludDY0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IEludDY0Lm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gSW50NjQub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludDY0X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBuYXRpdmVpbnRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gTmF0aXZlaW50Lm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gTmF0aXZlaW50Lm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJuYXRpdmVpbnRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IHJlZl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9IHJlZiAoYV9fb2ZfeW9qc29uIHlvanNvbilcbmxldCBsYXp5X3Rfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPSBMYXp5LmZyb21fdmFsIChhX19vZl95b2pzb24geW9qc29uKVxuXG5sZXQgb3B0aW9uX29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTnVsbCAtPiBOb25lXG4gIHwgZWwgLT4gU29tZSAoYV9fb2ZfeW9qc29uIGVsKVxuOztcblxubGV0IHBhaXJfb2ZfeW9qc29uIGFfX29mX3lvanNvbiBiX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbIGFfeW9qc29uOyBiX3lvanNvbiBdIC0+XG4gICAgbGV0IGEgPSBhX19vZl95b2pzb24gYV95b2pzb24gaW5cbiAgICBsZXQgYiA9IGJfX29mX3lvanNvbiBiX3lvanNvbiBpblxuICAgIGEsIGJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInBhaXJfb2ZfeW9qc29uOiBpbnZhbGlkIGZvcm1hdFwiIHlvanNvblxuOztcblxubGV0IHRyaXBsZV9vZl95b2pzb24gYV9fb2ZfeW9qc29uIGJfX29mX3lvanNvbiBjX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbIGFfeW9qc29uOyBiX3lvanNvbjsgY195b2pzb24gXSAtPlxuICAgIGxldCBhID0gYV9fb2ZfeW9qc29uIGFfeW9qc29uIGluXG4gICAgbGV0IGIgPSBiX19vZl95b2pzb24gYl95b2pzb24gaW5cbiAgICBsZXQgYyA9IGNfX29mX3lvanNvbiBjX3lvanNvbiBpblxuICAgIGEsIGIsIGNcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInRyaXBsZV9vZl95b2pzb246IGludmFsaWQgZm9ybWF0XCIgeW9qc29uXG47O1xuXG5sZXQgbGlzdF9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgbHN0IC0+XG4gICAgbGV0IHJldl9sc3QgPSBMaXN0LnJldl9tYXAgbHN0IH5mOmFfX29mX3lvanNvbiBpblxuICAgIExpc3QucmV2IHJldl9sc3RcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImxpc3Rfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGFycmF5X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbXSAtPiBbfHxdXG4gIHwgYExpc3QgKGggOjogdCkgLT5cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggdCArIDEgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBsZW4gKGFfX29mX3lvanNvbiBoKSBpblxuICAgIGxldCByZWMgbG9vcCBpID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gcmVzXG4gICAgICB8IGggOjogdCAtPlxuICAgICAgICByZXMuKGkpIDwtIGFfX29mX3lvanNvbiBoO1xuICAgICAgICBsb29wIChpICsgMSkgdFxuICAgIGluXG4gICAgbG9vcCAxIHRcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImFycmF5X29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBoYXNodGJsX29mX3lvanNvbiBrZXlfb2ZfeW9qc29uIHZhbF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBsc3QgLT5cbiAgICBsZXQgaHRibCA9IEhhc2h0YmwuY3JlYXRlIDAgaW5cbiAgICBsZXQgYWN0ID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgWyBrX3lvanNvbjsgdl95b2pzb24gXSAtPlxuICAgICAgICBIYXNodGJsLmFkZCBodGJsIH5rZXk6KGtleV9vZl95b2pzb24ga195b2pzb24pIH5kYXRhOih2YWxfb2ZfeW9qc29uIHZfeW9qc29uKVxuICAgICAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImhhc2h0Ymxfb2ZfeW9qc29uOiB0dXBsZSBsaXN0IG5lZWRlZFwiIHlvanNvblxuICAgIGluXG4gICAgTGlzdC5pdGVyIGxzdCB+ZjphY3Q7XG4gICAgaHRibFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaGFzaHRibF9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgb3BhcXVlX29mX3lvanNvbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgXCJvcGFxdWVfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCBvcGFxdWUgdmFsdWVzXCIgeW9qc29uXG47O1xuXG5sZXQgZnVuX29mX3lvanNvbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgXCJmdW5fb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCBmdW5jdGlvbiB2YWx1ZXNcIiB5b2pzb25cbjs7XG5cbm1vZHVsZSBQcmltaXRpdmVzID0gc3RydWN0XG4gIGxldCB5b2pzb25fb2ZfYXJyYXkgPSB5b2pzb25fb2ZfYXJyYXlcbiAgbGV0IGFycmF5X29mX3lvanNvbiA9IGFycmF5X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2Jvb2wgPSB5b2pzb25fb2ZfYm9vbFxuICBsZXQgYm9vbF9vZl95b2pzb24gPSBib29sX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2NoYXIgPSB5b2pzb25fb2ZfY2hhclxuICBsZXQgY2hhcl9vZl95b2pzb24gPSBjaGFyX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2Zsb2F0ID0geW9qc29uX29mX2Zsb2F0XG4gIGxldCBmbG9hdF9vZl95b2pzb24gPSBmbG9hdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQgPSB5b2pzb25fb2ZfaW50XG4gIGxldCBpbnRfb2ZfeW9qc29uID0gaW50X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludDMyID0geW9qc29uX29mX2ludDMyXG4gIGxldCBpbnQzMl9vZl95b2pzb24gPSBpbnQzMl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQ2NCA9IHlvanNvbl9vZl9pbnQ2NFxuICBsZXQgaW50NjRfb2ZfeW9qc29uID0gaW50NjRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbGlzdCA9IHlvanNvbl9vZl9saXN0XG4gIGxldCBsaXN0X29mX3lvanNvbiA9IGxpc3Rfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbmF0aXZlaW50ID0geW9qc29uX29mX25hdGl2ZWludFxuICBsZXQgbmF0aXZlaW50X29mX3lvanNvbiA9IG5hdGl2ZWludF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9vcHRpb24gPSB5b2pzb25fb2Zfb3B0aW9uXG4gIGxldCBvcHRpb25fb2ZfeW9qc29uID0gb3B0aW9uX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3JlZiA9IHlvanNvbl9vZl9yZWZcbiAgbGV0IHJlZl9vZl95b2pzb24gPSByZWZfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2Zfc3RyaW5nID0geW9qc29uX29mX3N0cmluZ1xuICBsZXQgc3RyaW5nX29mX3lvanNvbiA9IHN0cmluZ19vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9ieXRlcyA9IHlvanNvbl9vZl9ieXRlc1xuICBsZXQgYnl0ZXNfb2ZfeW9qc29uID0gYnl0ZXNfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfdW5pdCA9IHlvanNvbl9vZl91bml0XG4gIGxldCB1bml0X29mX3lvanNvbiA9IHVuaXRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbGF6eV90ID0geW9qc29uX29mX2xhenlfdFxuICBsZXQgbGF6eV90X29mX3lvanNvbiA9IGxhenlfdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9oYXNodGJsID0geW9qc29uX29mX2hhc2h0YmxcbiAgbGV0IGhhc2h0Ymxfb2ZfeW9qc29uID0gaGFzaHRibF9vZl95b2pzb25cbmVuZFxuIiwibW9kdWxlIFlvanNvbl9jb252X2Vycm9yID0gWW9qc29uX2NvbnZfZXJyb3Jcbm1vZHVsZSBZb2pzb25fY29udiA9IFlvanNvbl9jb252XG5tb2R1bGUgWW9qc29uYWJsZSA9IFlvanNvbmFibGVfaW50ZlxubW9kdWxlIFlvanNvbiA9IFlvanNvblxuXG5tb2R1bGUgT3B0aW9uID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9XG4gICAgfCBOb25lXG4gICAgfCBTb21lIG9mICdhXG5lbmRcblxuZXh0ZXJuYWwgaWdub3JlIDogXyAtPiB1bml0ID0gXCIlaWdub3JlXCJcbmV4dGVybmFsIHBvbHlfZXF1YWwgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuXG5sZXQgKCAhICkgOiAnYSByZWYgLT4gJ2EgPSBmdW4geCAtPiAheFxuIiwibW9kdWxlIEFwaSA9IEplbGx5ZmluX2FwaVxuXG50eXBlIGNyZWRlbnRpYWxzID0geyBiYXNlX3VybCA6IHN0cmluZzsgdXNlcm5hbWUgOiBzdHJpbmc7IHBhc3N3b3JkIDogc3RyaW5nIH1cblxudHlwZSBjb25uZXhpb24gPSB7XG4gIGJhc2VfdXJsIDogc3RyaW5nO1xuICBhdXRoX3Jlc3BvbnNlIDogQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLnJlc3BvbnNlO1xufVxuXG5sZXQgZ2V0X3Rva2VuIHQgPSB0LmF1dGhfcmVzcG9uc2UuQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLmFjY2Vzc190b2tlblxuXG5sZXQgY29ubmVjdCBjcmVkZW50aWFscyA9XG4gIGxldCBtb2R1bGUgQXV0aCA9IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZSBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgeyBiYXNlX3VybDsgdXNlcm5hbWU7IHBhc3N3b3JkIH0gPSBjcmVkZW50aWFscyBpblxuICBsZXQgYXV0aCA9IHsgQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLnVzZXJuYW1lOyBwdyA9IHBhc3N3b3JkIH0gaW5cbiAgbGV0KyBhdXRoX3Jlc3BvbnNlID0gQXBpLnJlcXVlc3QgfmJhc2VfdXJsIChtb2R1bGUgQXV0aCkgYXV0aCAoKSBpblxuICB7IGJhc2VfdXJsOyBhdXRoX3Jlc3BvbnNlIH1cblxubGV0IHF1ZXJ5IHQgPVxuICBsZXQgdG9rZW4gPSBnZXRfdG9rZW4gdCBpblxuICBsZXQgYmFzZV91cmwgPSB0LmJhc2VfdXJsIGluXG4gIEplbGx5ZmluX2FwaS5yZXF1ZXN0IH5iYXNlX3VybCB+dG9rZW5cbiIsIm9wZW4gU3RkXG5vcGVuIEJyclxuXG50eXBlIHRhZyA9IEJsb2NrIG9mIGludCB8IEludCBvZiBpbnRcblxubGV0IHRhZ19vZiB2ID1cbiAgKCogd293IHdvdyB3b3cuIGlzIHRoYXQgb2theXlpc2ggPyopXG4gIGxldCBvYmogPSBPYmoucmVwciB2IGluXG4gIGlmIE9iai5pc19ibG9jayBvYmogdGhlbiBCbG9jayAoT2JqLnRhZyBvYmopIGVsc2UgSW50IChPYmoubWFnaWMgb2JqKVxuXG5tb2R1bGUgdHlwZSBRdWVyaWVzID0gc2lnXG4gIHR5cGUgJ2EgcXVlcnlcbiAgdHlwZSAnYSBldmVudFxuZW5kXG5cbm1vZHVsZSBNYWtlIChRIDogUXVlcmllcykgPSBzdHJ1Y3RcbiAgdHlwZSBlcnJvciA9IFsgYEp2IG9mIEp2LkVycm9yLnQgfCBgTXNnIG9mIHN0cmluZyBdXG4gIHR5cGUgJ2EgcXVlcnkgPSAnYSBRLnF1ZXJ5XG4gIHR5cGUgJ2EgZXZlbnQgPSAnYSBRLmV2ZW50XG4gIHR5cGUgJ2Egd2l0aF91dWlkID0geyB1dWlkIDogc3RyaW5nOyBkYXRhIDogJ2EgfVxuICB0eXBlICdhIG1lc3NhZ2UgPSBBbnN3ZXIgb2YgJ2Egd2l0aF91dWlkIHwgRXZlbnQgb2YgKCdhIGV2ZW50ICogJ2EpXG4gIHR5cGUgbGlzdGVuZXIgPSBzdHJpbmdcblxuICAoKiB0b2RvOmNoZWNrIHRoYXQgdGhlIHdvcmtlciBhbmQgdGhlIGNsaWVudCBzaGFyZSB0aGUgc2FtZSBhcGk/ICopXG5cbiAgbW9kdWxlIFN0YXJ0X2NsaWVudCAoUCA6IHNpZ1xuICAgIHZhbCB1cmwgOiBzdHJpbmdcbiAgZW5kKSA9XG4gIHN0cnVjdFxuICAgIGxldCBmdXR1cmVzIDogKHN0cmluZywgSnYudCAtPiB1bml0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGxldCBsaXN0ZW5lcnMgOiAodGFnLCBKdi50IC0+IHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG4gICAgbGV0IHdvcmtlciA9IEJycl93ZWJ3b3JrZXJzLldvcmtlci5jcmVhdGUgQEAgSnN0ci5vZl9zdHJpbmcgUC51cmxcblxuICAgIGxldCBxdWVyeSAodHlwZSBhKSAocXVlcnkgOiBhIHF1ZXJ5KSA6IChhLCBlcnJvcikgRnV0LnJlc3VsdCA9XG4gICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZyBpblxuICAgICAgbGV0IGZ1dCwgc2V0ID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgICAgbGV0IHNldCBqdiA9IHNldCBAQCBFbmNvZGluZ3Mub2ZfanYganYgaW5cbiAgICAgIGxldCBxdWVyeSA9IHsgdXVpZDsgZGF0YSA9IHF1ZXJ5IH0gfD4gRW5jb2RpbmdzLnRvX2pzdHIgaW5cbiAgICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5wb3N0IHdvcmtlciAoSnYub2ZfanN0ciBxdWVyeSk7XG4gICAgICBIYXNodGJsLmFkZCBmdXR1cmVzIHV1aWQgc2V0O1xuICAgICAgZnV0XG5cbiAgICBsZXQgbGlzdGVuICh0eXBlIGEpIChldmVudCA6IGEgZXZlbnQpIH4oZiA6IGEgLT4gdW5pdCkgOiBsaXN0ZW5lciA9XG4gICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZyBpblxuICAgICAgbGV0IHNldCBqdiA9IGYgKE9iai5tYWdpYyBqdikgaW5cbiAgICAgIEhhc2h0YmwuYWRkIGxpc3RlbmVycyAodGFnX29mIGV2ZW50KSBzZXQ7XG4gICAgICB1dWlkXG5cbiAgICBsZXQgb25fbWVzc2FnZSBldiA9XG4gICAgICBsZXQgbWVzc2FnZSA9IEV2LmFzX3R5cGUgZXYgaW5cbiAgICAgIGxldCBvcGVuIFJlc3VsdCBpblxuICAgICAgaWdub3JlICgqIFRPRE86IGhhbmRsZXIgZXJyb3JzICopXG4gICAgICBAQFxuICAgICAgbGV0KyBtZXNzYWdlID1cbiAgICAgICAgQnJyX2lvLk1lc3NhZ2UuRXYuZGF0YSBtZXNzYWdlIHw+IEp2LnRvX2pzdHIgfD4gRW5jb2RpbmdzLm9mX2pzdHJcbiAgICAgIGluXG4gICAgICBtYXRjaCBtZXNzYWdlIHdpdGhcbiAgICAgIHwgRXZlbnQgKGUsIHYpIC0+XG4gICAgICAgICAgSGFzaHRibC5maW5kX2FsbCBsaXN0ZW5lcnMgKHRhZ19vZiBlKSB8PiBMaXN0Lml0ZXIgfmY6KGZ1biBmIC0+IGYgdilcbiAgICAgIHwgQW5zd2VyIHsgdXVpZDsgZGF0YSB9IC0+XG4gICAgICAgICAgbGV0IGYgPSBIYXNodGJsLmZpbmQgZnV0dXJlcyB1dWlkIGluXG4gICAgICAgICAgSGFzaHRibC5yZW1vdmUgZnV0dXJlcyB1dWlkO1xuICAgICAgICAgIGYgZGF0YVxuXG4gICAgbGV0IF8gPVxuICAgICAgRXYubGlzdGVuIEJycl9pby5NZXNzYWdlLkV2Lm1lc3NhZ2Ugb25fbWVzc2FnZVxuICAgICAgQEAgQnJyX3dlYndvcmtlcnMuV29ya2VyLmFzX3RhcmdldCB3b3JrZXJcbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgV29ya2VyX2ltcGwgPSBmdW5jdG9yICgpIC0+IHNpZ1xuICAgIHZhbCBvbl9xdWVyeSA6ICdhIHF1ZXJ5IC0+ICgnYSwgZXJyb3IpIEZ1dC5yZXN1bHRcbiAgZW5kXG5cbiAgbGV0IGRpc3BhdGNoX2V2ZW50ICh0eXBlIGEpIChlIDogYSBldmVudCkgKHYgOiBhKSA9XG4gICAgKCogbGV0IGRhdGEgPSBFbmNvZGluZ3MubWFyc2hhbF90b19qc3RyIHw+IEp2Lm9mX2pzdHIgaW4gKilcbiAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuRy5wb3N0IChFbmNvZGluZ3MudG9fanN0ciAoRXZlbnQgKGUsIHYpKSB8PiBKdi5vZl9qc3RyKVxuXG4gICgqKiBFeGVjdXRlIFcncyBib2R5IGFuZCBjb25maWd1cmUgbWVzc2FnaW5nICopXG4gIG1vZHVsZSBNYWtlX3dvcmtlciAoVyA6IFdvcmtlcl9pbXBsKSA9IHN0cnVjdFxuICAgIG9wZW4gQnJyXG4gICAgbW9kdWxlIFcgPSBXICgpXG5cbiAgICBsZXQgb25fbWVzc2FnZSBldiA9XG4gICAgICBsZXQgbWVzc2FnZSA9IEV2LmFzX3R5cGUgZXYgaW5cbiAgICAgIGxldCBvcGVuIFJlc3VsdCBpblxuICAgICAgaWdub3JlICgqIFRPRE86IGhhbmRsZXIgZXJyb3JzICopXG4gICAgICBAQFxuICAgICAgbGV0KyAoeyB1dWlkOyBkYXRhIH0gOiAnYSBxdWVyeSB3aXRoX3V1aWQpID1cbiAgICAgICAgQnJyX2lvLk1lc3NhZ2UuRXYuZGF0YSBtZXNzYWdlIHw+IEp2LnRvX2pzdHIgfD4gRW5jb2RpbmdzLm9mX2pzdHJcbiAgICAgIGluXG4gICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgbGV0KyByZXN1bHQgPSBXLm9uX3F1ZXJ5IGRhdGEgaW5cbiAgICAgIGxldCBkYXRhID0gRW5jb2RpbmdzLnRvX2pzdHIgcmVzdWx0IHw+IEp2Lm9mX2pzdHIgaW5cbiAgICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5HLnBvc3RcbiAgICAgICAgKEVuY29kaW5ncy50b19qc3RyIChBbnN3ZXIgeyB1dWlkOyBkYXRhIH0pIHw+IEp2Lm9mX2pzdHIpXG5cbiAgICBsZXQgXyA9IEV2Lmxpc3RlbiBCcnJfaW8uTWVzc2FnZS5Fdi5tZXNzYWdlIG9uX21lc3NhZ2UgRy50YXJnZXRcbiAgZW5kXG5lbmRcbiIsIm9wZW4gU3RkXG5cbigqKiBTb21lIHNvcnRzIHJlcXVpcmUgYSBjdXN0b20gb3JkZXJpbmcgd2hpY2ggaXMgZG9uZSB1c2luZyBhIHRhYmxlIG9mIGluZGV4ZXMuIEZvciBleGFtcGxlLCB0byBnZXQgYSByYW5kb20gc29ydCB3ZSBzaW1wbGUgc2h1ZmZsZSBhbiBhcnJheSB3aGljaCBzaXplIGlzIHRoZSBvbmUgb2YgdGhlIHJlc3VsdC4gKilcbm1vZHVsZSBPcmRlciA9IHN0cnVjdFxuICB0eXBlIHQgPSBJbml0aWFsIHwgQXNjIHwgRGVzYyB8IEN1c3RvbSBvZiBpbnQgYXJyYXlcblxuICBsZXQgcmFuZG9tIH5zaXplID1cbiAgICBsZXQgdGJsID0gQXJyYXkuaW5pdCBzaXplIH5mOkZ1bi5pZCBpblxuICAgIGxldCAoKSA9IEFycmF5LnNodWZmbGUgdGJsIGluXG4gICAgQ3VzdG9tIHRibFxuXG4gIGxldCBhcHBseSB0IGkgPVxuICAgIG1hdGNoIHQgd2l0aFxuICAgIHwgSW5pdGlhbCB8IEFzYyB8IERlc2MgLT4gaVxuICAgIHwgQ3VzdG9tIGEgLT4gKCogdG9kbyBjaGVjayBib3VuZHMgKikgYS4oaSlcbmVuZFxuXG5tb2R1bGUgU29ydCA9IHN0cnVjdFxuICB0eXBlIHQgPSBEYXRlX2FkZGVkIHwgTmFtZVxuXG4gIGxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJkYXRlX2FkZGVkXCIgLT4gRGF0ZV9hZGRlZFxuICAgIHwgXCJuYW1lXCIgLT4gTmFtZVxuICAgIHwgXyAtPiBEYXRlX2FkZGVkXG5lbmRcblxudHlwZSAnYSBzZWxlY3Rpb24gPSBBbGwgfCBPbmx5IG9mICdhIGxpc3RcbnR5cGUga2luZCA9IEF1ZGlvXG50eXBlIGZpbHRlciA9IFNlYXJjaCBvZiBzdHJpbmdcblxudHlwZSByZXEgPSB7XG4gIGtpbmQgOiBraW5kO1xuICBzcmNfdmlld3MgOiBzdHJpbmcgc2VsZWN0aW9uO1xuICBzb3J0IDogU29ydC50O1xuICBmaWx0ZXJzIDogZmlsdGVyIGxpc3Q7XG59XG5cbnR5cGUgdCA9IHsgdXVpZCA6IFV1aWRtLnQ7IHJlcXVlc3QgOiByZXE7IHN0YXJ0X29mZnNldCA6IGludDsgaXRlbV9jb3VudCA6IGludCB9XG50eXBlIHJhbmdlZCA9IHsgdmlldyA6IHQ7IGZpcnN0IDogaW50OyBsYXN0IDogaW50OyBvcmRlciA6IE9yZGVyLnQgfVxuXG5sZXQgaXRlbV9jb3VudCB0ID0gdC5pdGVtX2NvdW50IC0gdC5zdGFydF9vZmZzZXRcblxubGV0IHJlcSBraW5kID8oc3JjX3ZpZXdzID0gQWxsKSA/KHNvcnQgPSBTb3J0LkRhdGVfYWRkZWQpID8oZmlsdGVycyA9IFtdKSAoKSA9XG4gIHsga2luZDsgc3JjX3ZpZXdzOyBzb3J0OyBmaWx0ZXJzIH1cblxubGV0IGhhc2ggcmVxID0gSGFzaHRibC5oYXNoIChyZXEuc3JjX3ZpZXdzLCByZXEuZmlsdGVycylcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIERTID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxudHlwZSBzZXJ2ZXIgPSBzdHJpbmcgKiBEUy5jb25uZXhpb25cblxubW9kdWxlIFF1ZXJpZXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBxdWVyeSA9XG4gICAgfCBTZXRfc2Vzc2lvbl91dWlkIDogc3RyaW5nIC0+IHVuaXQgcXVlcnlcbiAgICB8IEFkZF9zZXJ2ZXJzIDogc2VydmVyIGxpc3QgLT4gdW5pdCBxdWVyeVxuICAgIHwgR2V0X2FsbCA6IHVuaXQgLT4gQXBpLkl0ZW0udCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfbGlicmFyaWVzIDogdW5pdCAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyA6IHN0cmluZyAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBDcmVhdGVfdmlldyA6IFZpZXcucmVxIC0+IFZpZXcudCBxdWVyeVxuICAgIHwgR2V0IDpcbiAgICAgICAgVmlldy50ICogVmlldy5PcmRlci50ICogaW50IGFycmF5XG4gICAgICAgIC0+IFN0b3Jlcy5JdGVtcy50IG9wdGlvbiBhcnJheSBxdWVyeVxuXG4gIHR5cGUgJ2EgZXZlbnQgPSBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgOiAoc3RyaW5nICogU3luYy5yZXBvcnQpIGV2ZW50XG5lbmRcblxuaW5jbHVkZSBXb3JrZXJfYXBpLk1ha2UgKFF1ZXJpZXMpXG4iLCJtb2R1bGUgU3RvcmVzID0gU3RvcmVzXG5tb2R1bGUgU3luYyA9IFN5bmNcbm1vZHVsZSBWaWV3ID0gVmlld1xub3BlbiBCcnJlclxub3BlbiBCcnJcbm1vZHVsZSBPSSA9IFN0b3Jlcy5PcmRlcnJlZF9pdGVtc19zdG9yZVxubW9kdWxlIEkgPSBTdG9yZXMuSXRlbXNfc3RvcmVcbm1vZHVsZSBWRiA9IFN0b3Jlcy5WaXJ0dWFsX2ZvbGRlcl9zdG9yZVxubW9kdWxlIFdvcmtlcl9hcGkgPSBEYl93b3JrZXJfYXBpXG5cbm1vZHVsZSBJdGVtX3N0b3JlID0gc3RydWN0XG4gIGluY2x1ZGUgU3RvcmVzLkl0ZW1zX3N0b3JlXG5cbiAgbW9kdWxlIEluZGV4ID0gc3RydWN0XG4gICAgbW9kdWxlIElkID0gU3RvcmVzLkl0ZW1zQnlJZFxuICAgIG1vZHVsZSBEYXRlX2FkZGVkID0gU3RvcmVzLkl0ZW1zQnlEYXRlQWRkZWRcbiAgICBtb2R1bGUgVHlwZV9OYW1lID0gU3RvcmVzLkl0ZW1zQnlUeXBlQW5kTmFtZVxuICAgIG1vZHVsZSBLaW5kX1ZpZXcgPSBTdG9yZXMuSXRlbXNCeVZpZXdBbmRLaW5kXG4gIGVuZFxuZW5kXG5cbmxldCBvbl91cGdyYWRlX25lZWRlZCBlIHEgPVxuICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICBsZXQgb2xkX3ZlcnNpb24sIG5ld192ZXJzaW9uID1cbiAgICBsZXQgdiA9IEV2LmFzX3R5cGUgZSBpblxuICAgIEV2ZW50cy5WZXJzaW9uX2NoYW5nZS4ob2xkX3ZlcnNpb24gdiwgbmV3X3ZlcnNpb24gdilcbiAgaW5cbiAgQ29uc29sZS5pbmZvXG4gICAgW1xuICAgICAgXCJVcGdyYWRpbmcgaW5kZXhlZF9kYiBzY2hlbWEgZnJvbSB2ZXJzaW9uXCI7IG9sZF92ZXJzaW9uOyBcInRvXCI7IG5ld192ZXJzaW9uO1xuICAgIF07XG4gIGxldCBkYiA9IFJlcXVlc3QucmVzdWx0IHEgaW5cbiAgbGV0IHN0b3JlcyA9IERhdGFiYXNlLm9iamVjdF9zdG9yZV9uYW1lcyBkYiBpblxuICBDb25zb2xlLmluZm8gWyBcIkVyYXNpbmcgZXhpc3Rpbmcgc3RvcmVzXCIgXTtcbiAgQXJyYXkuaXRlciAoRGF0YWJhc2UuZGVsZXRlX29iamVjdF9zdG9yZSBkYikgc3RvcmVzO1xuICBsZXQgbGlzdCA9XG4gICAgRGF0YWJhc2UuY3JlYXRlX29iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB+YXV0b19pbmNyZW1lbnQ6ZmFsc2UgZGJcbiAgaW5cbiAgbGV0IGl0ZW1zID1cbiAgICBEYXRhYmFzZS5jcmVhdGVfb2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCB2aXJ0dWFsX2ZvbGRlcnMgPVxuICAgIERhdGFiYXNlLmNyZWF0ZV9vYmplY3Rfc3RvcmUgKG1vZHVsZSBWRikgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCBpbmRleF9kYXRlX2FkZGVkID1cbiAgICBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5RGF0ZUFkZGVkKSBpdGVtc1xuICBpblxuICBsZXQgXyA9IEkuY3JlYXRlX2luZGV4IChtb2R1bGUgU3RvcmVzLkl0ZW1zQnlUeXBlQW5kTmFtZSkgaXRlbXMgaW5cbiAgbGV0IF8gPSBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5Vmlld0FuZEtpbmQpIGl0ZW1zIGluXG4gIGxldCBfID0gSS5jcmVhdGVfaW5kZXggKG1vZHVsZSBTdG9yZXMuSXRlbXNCeUlkKSBpdGVtcyBpblxuICBDb25zb2xlLmluZm9cbiAgICBbIFwiU3RvcmVzIGNyZWF0ZWQ6XCI7IGxpc3Q7IGl0ZW1zOyBpbmRleF9kYXRlX2FkZGVkOyB2aXJ0dWFsX2ZvbGRlcnMgXVxuXG5sZXQgd2l0aF9pZGIgP3ZlcnNpb24gfm5hbWUgZiA9XG4gIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gIGxldCBmIF9ldiBkYnIgPVxuICAgIGxldCBkYiA9IFJlcXVlc3QucmVzdWx0IGRiciBpblxuICAgIGYgZGJcbiAgaW5cbiAgZ2V0X2ZhY3RvcnkgKClcbiAgfD4gRmFjdG9yeS5vcGVuJyB+bmFtZSA/dmVyc2lvblxuICB8PiBPcGVuX2RiX3JlcXVlc3Qub25fdXBncmFkZV9uZWVkZWQgfmY6b25fdXBncmFkZV9uZWVkZWRcbiAgfD4gUmVxdWVzdC5vbl9zdWNjZXNzIH5mIHw+IGlnbm9yZVxuIiwib3BlbiEgU3RkXG5vcGVuIERiLldvcmtlcl9hcGlcbm9wZW4gQnJyZXJcbm9wZW4hIEJyclxubW9kdWxlIElEQiA9IEJycl9pby5JbmRleGVkX2RiXG5tb2R1bGUgSVMgPSBEYi5JdGVtX3N0b3JlXG5cbmxldCAoKSA9IFJhbmRvbS5zZWxmX2luaXQgKClcblxubGV0IG1hcF9lcnJvciBmID1cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQrIGYgPSBmIGluXG4gIFJlc3VsdC5tYXBfZXJyIChmdW4ganYgLT4gYEp2IGp2KSBmXG5cbmxldCBhc19mdXQgcSA9IElEQi5SZXF1ZXN0LmZ1dCBxIHw+IG1hcF9lcnJvclxuXG5sZXQgZnV0X29mX2FycmF5IChmcyA6ICdhIEZ1dC50IGFycmF5KSA6ICdhIGFycmF5IEZ1dC50ID1cbiAgbGV0IGZ1dCBwID0gSnYub2JqIFt8IChcImZ1dFwiLCBwKSB8XSBpblxuICBsZXQgcHJvbWlzZScgZiA9IEp2LmdldCAoSnYucmVwciBmKSBcImZ1dFwiIGluXG4gIGxldCBhcnIgPSBKdi5vZl9hcnJheSBwcm9taXNlJyBmcyBpblxuICBsZXQgYWxsID0gSnYuUHJvbWlzZS5hbGwgYXJyIGluXG4gIGxldCB0b19hcnJheSBsID0gSnYuUHJvbWlzZS5yZXNvbHZlIChKdi50b19hcnJheSBPYmoubWFnaWMgbCkgaW5cbiAgT2JqLm1hZ2ljIEBAIGZ1dCBAQCBKdi5Qcm9taXNlLmJpbmQgYWxsIHRvX2FycmF5XG5cbm1vZHVsZSBXb3JrZXIgKCkgPSBzdHJ1Y3RcbiAgbGV0IGNoZWNrX2RiIGlkYiBzb3VyY2UgPVxuICAgIGxldCBzZXJ2ZXJfaWQsIHNvdXJjZSA9IHNvdXJjZSBpblxuICAgIGxldCByZXBvcnQgc3RhdHVzID1cbiAgICAgIGRpc3BhdGNoX2V2ZW50IFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSAoc2VydmVyX2lkLCBzdGF0dXMpXG4gICAgaW5cbiAgICBEYi5TeW5jLmNoZWNrX2FuZF9zeW5jIH5yZXBvcnQgfnNvdXJjZSBpZGJcblxuICBsZXQgaWRiID1cbiAgICBsZXQgaWRiLCBzZXRfaWRiID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgIGxldCBfID1cbiAgICAgIERiLndpdGhfaWRiIH5uYW1lOlwidHJhY2tzXCIgfnZlcnNpb246MSBAQCBmdW4gaWRiIC0+XG4gICAgICBpZ25vcmUgKHNldF9pZGIgQEAgT2sgaWRiKVxuICAgIGluXG4gICAgaWRiXG5cbiAgbGV0IHJlYWRfb25seV9zdG9yZSAoKSA9XG4gICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICBsZXQrIGlkYiA9IGlkYiBpblxuICAgIElEQi5EYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgRGIuSSkgXSB+bW9kZTpSZWFkb25seSBpZGJcbiAgICB8PiBJREIuVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgRGIuSSlcblxuICBsZXQgZ2V0X3ZpZXdfa2V5cyA9XG4gICAgbGV0IHZpZXdfbWVtbyA6XG4gICAgICAgICggc3RyaW5nIERiLlZpZXcuc2VsZWN0aW9uICogRGIuVmlldy5Tb3J0LnQsXG4gICAgICAgICAgSVMuQ29udGVudC5LZXkudCBhcnJheSApXG4gICAgICAgIEhhc2h0YmwudCA9XG4gICAgICBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGluXG4gICAgbGV0IGxhc3RfdmlldyA6IChpbnQgKiBJUy5Db250ZW50LktleS50IGFycmF5KSByZWYgPSByZWYgKC0xLCBbfHxdKSBpblxuICAgIGZ1biBzdG9yZSB7IERiLlZpZXcua2luZCA9IF87IHNyY192aWV3czsgc29ydDsgZmlsdGVycyB9IC0+XG4gICAgICAoKiB0b2RvOiBzdGFnZWQgbWVtb2l6YXRpb24gKyBzcGVjaWFsaXplZCBxdWVyaWVzIHVzaW5nIGluZGV4ZXMgKilcbiAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICBsZXQgaGFzaCA9IEhhc2h0YmwuaGFzaCAoc3JjX3ZpZXdzLCBzb3J0LCBmaWx0ZXJzKSBpblxuICAgICAgaWYgSW50LmVxdWFsIChmc3QgIWxhc3RfdmlldykgaGFzaCB0aGVuIEZ1dC5vayAoc25kICFsYXN0X3ZpZXcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCsga2V5cyA9XG4gICAgICAgICAgdHJ5IEZ1dC5vayBAQCBIYXNodGJsLmZpbmQgdmlld19tZW1vIChzcmNfdmlld3MsIHNvcnQpXG4gICAgICAgICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgIGxldCsgYWxsX2tleXMgPVxuICAgICAgICAgICAgICBsZXQgbG93ZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJBdWRpb1wiIHxdIGluXG4gICAgICAgICAgICAgIGxldCB1cHBlciA9IEp2Lm9mX2FycmF5IEp2Lm9mX3N0cmluZyBbfCBcIkF1ZGlvXFx1ezB9XCIgfF0gaW5cbiAgICAgICAgICAgICAgbGV0IHF1ZXJ5ID1cbiAgICAgICAgICAgICAgICBJREIuS2V5X3JhbmdlLmJvdW5kIH5sb3dlciB+dXBwZXIgfmxvd2VyX29wZW46dHJ1ZVxuICAgICAgICAgICAgICAgICAgfnVwcGVyX29wZW46ZmFsc2UgKClcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgbGV0IGlkeCA9IElTLmluZGV4IChtb2R1bGUgSVMuSW5kZXguS2luZF9WaWV3KSBzdG9yZSBpblxuICAgICAgICAgICAgICBJUy5JbmRleC5LaW5kX1ZpZXcuZ2V0X2FsbF9rZXlzIH5xdWVyeSBpZHggfD4gYXNfZnV0XG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgbGV0IGtleXMgPVxuICAgICAgICAgICAgICBtYXRjaCBzcmNfdmlld3Mgd2l0aFxuICAgICAgICAgICAgICB8IEFsbCAtPiBhbGxfa2V5c1xuICAgICAgICAgICAgICB8IE9ubHkgc3JjX3ZpZXdzIC0+XG4gICAgICAgICAgICAgICAgICBBcnJheS5maWx0ZXIgYWxsX2tleXNcbiAgICAgICAgICAgICAgICAgICAgfmY6KGZ1biB7IERiLlN0b3Jlcy5JdGVtcy5LZXkudmlld3M7IF8gfSAtPlxuICAgICAgICAgICAgICAgICAgICAgIExpc3QuZXhpc3RzIHZpZXdzIH5mOihmdW4gdiAtPiBMaXN0Lm1lbXEgdiB+c2V0OnNyY192aWV3cykpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgSGFzaHRibC5hZGQgdmlld19tZW1vIChzcmNfdmlld3MsIHNvcnQpIGtleXM7XG4gICAgICAgICAgICBrZXlzXG4gICAgICAgIGluXG4gICAgICAgIGxldCBrZXlzID1cbiAgICAgICAgICBtYXRjaCBmaWx0ZXJzIHdpdGhcbiAgICAgICAgICB8IFsgU2VhcmNoIHN1YiBdIHdoZW4gbm90IChTdHJpbmcuaXNfZW1wdHkgc3ViKSAtPlxuICAgICAgICAgICAgICBsZXQgc3ViID0gU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSBzdWIgaW5cbiAgICAgICAgICAgICAgQXJyYXkuZmlsdGVyIGtleXMgfmY6KGZ1biB7IERiLlN0b3Jlcy5JdGVtcy5LZXkuc29ydF9uYW1lOyBfIH0gLT5cbiAgICAgICAgICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHNvcnRfbmFtZSBpblxuICAgICAgICAgICAgICAgICAgbGV0IHBhdHRlcm4gPSBTdHJpbmcuRmluZC5jb21waWxlIChQcmludGYuc3ByaW50ZiBcIiVzXCIgc3ViKSBpblxuICAgICAgICAgICAgICAgICAgU3RyaW5nLkZpbmQuZmluZCB+cGF0dGVybiBzb3J0X25hbWUgPj0gMClcbiAgICAgICAgICB8IF8gLT4ga2V5c1xuICAgICAgICBpblxuICAgICAgICBsZXQgKCkgPVxuICAgICAgICAgIG1hdGNoIHNvcnQgd2l0aFxuICAgICAgICAgIHwgTmFtZSAtPlxuICAgICAgICAgICAgICBBcnJheS5zb3J0IGtleXNcbiAgICAgICAgICAgICAgICB+Y21wOihmdW5cbiAgICAgICAgICAgICAgICAgICAgeyBEYi5TdG9yZXMuSXRlbXMuS2V5LnNvcnRfbmFtZSA9IHNuYTsgXyB9XG4gICAgICAgICAgICAgICAgICAgIHsgRGIuU3RvcmVzLkl0ZW1zLktleS5zb3J0X25hbWUgPSBzbmI7IF8gfVxuICAgICAgICAgICAgICAgICAgLT4gU3RyaW5nLmNvbXBhcmUgc25hIHNuYilcbiAgICAgICAgICB8IF8gLT4gKClcbiAgICAgICAgaW5cbiAgICAgICAgbGFzdF92aWV3IDo9IChoYXNoLCBrZXlzKTtcbiAgICAgICAga2V5c1xuXG4gIGxldCBvbl9xdWVyeSAodHlwZSBhKSAocSA6IGEgcXVlcnkpIDogKGEsIGVycm9yKSBGdXQucmVzdWx0ID1cbiAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgIG1hdGNoIHEgd2l0aFxuICAgIHwgU2V0X3Nlc3Npb25fdXVpZCBzIC0+XG4gICAgICAgIGxldCAoKSA9IERhdGFfc291cmNlLkplbGx5ZmluX2FwaS5zZXRfc2Vzc2lvbl91dWlkIHMgaW5cbiAgICAgICAgRnV0Lm9rICgpXG4gICAgfCBBZGRfc2VydmVycyBsIC0+XG4gICAgICAgIGxldCogaWRiID0gaWRiIGluXG4gICAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgICAgbGV0KyByZXMgPSBjaGVja19kYiBpZGIgKExpc3QuaGQgbCkgaW5cbiAgICAgICAgUmVzdWx0Lm1hcF9lcnIgKGZ1biBqdiAtPiBgSnYganYpIHJlc1xuICAgIHwgR2V0X2FsbCAoKSAtPlxuICAgICAgICBsZXQqIHN0b3JlID0gcmVhZF9vbmx5X3N0b3JlICgpIGluXG4gICAgICAgIGxldCsgcmVxID0gRGIuSS5nZXRfYWxsIHN0b3JlIHw+IGFzX2Z1dCBpblxuICAgICAgICBBcnJheS5tYXAgfmY6KGZ1biBpIC0+IGkuRGIuU3RvcmVzLkl0ZW1zLml0ZW0pIHJlcSB8PiBBcnJheS50b19saXN0XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyBzZXJ2ZXJfaWQnIC0+XG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0IGluZGV4ID0gSVMuKGluZGV4IChtb2R1bGUgSVMuSW5kZXguVHlwZV9OYW1lKSBzdG9yZSkgaW5cbiAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcIiB8XSBpblxuICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJtdXNpY1xcdXswfVwiIHxdIGluXG4gICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWUgfnVwcGVyX29wZW46ZmFsc2VcbiAgICAgICAgICAgICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCoga2V5cyA9IElTLkluZGV4LlR5cGVfTmFtZS5nZXRfYWxsX2tleXMgfnF1ZXJ5IGluZGV4IHw+IGFzX2Z1dCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbXMgPVxuICAgICAgICAgIExpc3QubWFwIChBcnJheS50b19saXN0IGtleXMpIH5mOihmdW4gayAtPiBJUy5nZXQgayBzdG9yZSB8PiBhc19mdXQpXG4gICAgICAgICAgfD4gRnV0Lm9mX2xpc3RcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGl0ZW1zID1cbiAgICAgICAgICBSZXN1bHQuZmxhdHRlbl9sIGl0ZW1zXG4gICAgICAgICAgfD4gUmVzdWx0Lm1hcFxuICAgICAgICAgICAgICAgKExpc3QuZmlsdGVyX21hcCB+ZjooZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgfCBTb21lICh7IERiLlN0b3Jlcy5JdGVtcy5pdGVtID0geyBzZXJ2ZXJfaWQ7IF8gfTsgXyB9IGFzIGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgd2hlbiBTdHJpbmcuZXF1YWwgc2VydmVyX2lkIHNlcnZlcl9pZCcgLT5cbiAgICAgICAgICAgICAgICAgICAgIFNvbWUgaXRlbVxuICAgICAgICAgICAgICAgICB8IFNvbWUgXyB8IE5vbmUgLT4gTm9uZSkpXG4gICAgICAgIGluXG4gICAgICAgIGl0ZW1zXG4gICAgfCBHZXRfbGlicmFyaWVzICgpIC0+XG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0IGluZGV4ID0gSVMuKGluZGV4IChtb2R1bGUgSVMuSW5kZXguVHlwZV9OYW1lKSBzdG9yZSkgaW5cbiAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcIiB8XSBpblxuICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJtdXNpY1xcdXswfVwiIHxdIGluXG4gICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWUgfnVwcGVyX29wZW46ZmFsc2VcbiAgICAgICAgICAgICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCoga2V5cyA9IElTLkluZGV4LlR5cGVfTmFtZS5nZXRfYWxsX2tleXMgfnF1ZXJ5IGluZGV4IHw+IGFzX2Z1dCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbXMgPVxuICAgICAgICAgIExpc3QubWFwIChBcnJheS50b19saXN0IGtleXMpIH5mOihmdW4gayAtPiBJUy5nZXQgayBzdG9yZSB8PiBhc19mdXQpXG4gICAgICAgICAgfD4gRnV0Lm9mX2xpc3RcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGl0ZW1zID1cbiAgICAgICAgICBSZXN1bHQuZmxhdHRlbl9sIGl0ZW1zXG4gICAgICAgICAgfD4gUmVzdWx0Lm1hcCAoZnVuIGwgLT5cbiAgICAgICAgICAgICAgICAgTGlzdC5tYXAgbCB+ZjooT3B0aW9uLmdldF9leG5fb3IgXCJJdGVtIHNob3VsZCBleGlzdHMuXCIpKVxuICAgICAgICBpblxuICAgICAgICBpdGVtc1xuICAgIHwgQ3JlYXRlX3ZpZXcgcmVxdWVzdCAtPlxuICAgICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIGluXG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0KyBrZXlzID0gZ2V0X3ZpZXdfa2V5cyBzdG9yZSByZXF1ZXN0IGluXG4gICAgICAgIGxldCBpdGVtX2NvdW50ID0gQXJyYXkubGVuZ3RoIGtleXMgaW5cbiAgICAgICAgeyBEYi5WaWV3LnV1aWQ7IHJlcXVlc3Q7IHN0YXJ0X29mZnNldCA9IDA7IGl0ZW1fY291bnQgfVxuICAgIHwgR2V0ICh2aWV3LCBvcmRlciwgaW5kZXhlcykgLT5cbiAgICAgICAgKCogVGhpcyByZXF1ZXN0IGlzIGNyaXRpY2FsIHRvIHZpcnR1YWwgbGlzdHMgcGVyZm9ybWFuY2VzIGFuZCBzaG91bGRcbiAgICAgICAgICAgYmUgYXMgZmFzdCBhcyBwb3NzaWJsZS4gKilcbiAgICAgICAgbGV0KiBzdG9yZSA9IHJlYWRfb25seV9zdG9yZSAoKSBpblxuICAgICAgICBsZXQqIGtleXMgPSBnZXRfdmlld19rZXlzIHN0b3JlIHZpZXcucmVxdWVzdCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgcmVzdWx0cyA9XG4gICAgICAgICAgQXJyYXkubWFwIGluZGV4ZXMgfmY6KGZ1biBpbmRleCAtPlxuICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBpbmRleCArIHZpZXcuc3RhcnRfb2Zmc2V0IGluXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gRGIuVmlldy5PcmRlci5hcHBseSBvcmRlciBpbmRleCBpblxuICAgICAgICAgICAgICAgICgqIFRoaXMgY291bGQgYmUgb3B0aW1pemUgd2hlbiBhY2Nlc3MgaXMgc2VxdWVudGlhbCAqKVxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzLihpbmRleCkgaW5cbiAgICAgICAgICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgICAgICAgICAgbGV0KyByZXN1bHQgPSBJUy5nZXQga2V5IHN0b3JlIHw+IElEQi5SZXF1ZXN0LmZ1dCBpblxuICAgICAgICAgICAgICAgIG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgICAgICAgICAgICAgfCBPayBOb25lIC0+IE5vbmVcbiAgICAgICAgICAgICAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICAgICAgICAgICAgICBDb25zb2xlLmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgWyBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgbG9hZGluZyBpdGVtXCI7IGtleTsgZXJyIF07XG4gICAgICAgICAgICAgICAgICAgIE5vbmVcbiAgICAgICAgICAgICAgICB8IE9rIChTb21lIHYpIC0+IFNvbWUgdlxuICAgICAgICAgICAgICB3aXRoIF8gLT4gRnV0LnJldHVybiBOb25lKVxuICAgICAgICAgIHw+IGZ1dF9vZl9hcnJheVxuICAgICAgICBpblxuICAgICAgICBPayByZXN1bHRzXG5lbmRcblxuaW5jbHVkZSBNYWtlX3dvcmtlciAoV29ya2VyKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFbnN1cmUgdGhhdCBbYXRfZXhpdF0gZnVuY3Rpb25zIGFyZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSBwcm9ncmFtICopXG5cbmxldCBfID0gZG9fYXRfZXhpdCgpXG4iXX0= diff --git a/main.bc.js b/main.bc.js index c58a921..1538de4 100644 --- a/main.bc.js +++ b/main.bc.js @@ -1,5 +1,5 @@ // Generated by js_of_ocaml -//# buildInfo:effects=false, kind=exe, use-js-string=true, version=5.7.2+5.7.2 +//# buildInfo:effects=false, kind=exe, use-js-string=true, version=5.8.1+5.8.1 (function (Object){ typeof globalThis !== "object" @@ -2860,8 +2860,9 @@ return 0; } var caml_ml_channels = new Array(); + function caml_ml_channel_get(id){return caml_ml_channels[id];} function caml_ml_flush(chanid){ - var chan = caml_ml_channels[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) @@ -2873,7 +2874,7 @@ return 0; } function caml_ml_close_channel(chanid){ - var chan = caml_ml_channels[chanid]; + var chan = caml_ml_channel_get(chanid); if(chan.opened){ chan.opened = false; caml_sys_close(chan.fd); @@ -2915,7 +2916,7 @@ } function caml_ml_input_block(chanid, ba, i, l){ var - chan = caml_ml_channels[chanid], + chan = caml_ml_channel_get(chanid), n = l, avail = chan.buffer_max - chan.buffer_curr; if(l <= avail){ @@ -3083,7 +3084,7 @@ return l; } function caml_ml_output_ta(chanid, buffer, offset, len){ - var chan = caml_ml_channels[chanid]; + 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); @@ -3135,7 +3136,7 @@ return 0; } function caml_ml_set_channel_name(chanid, name){ - var chan = caml_ml_channels[chanid]; + var chan = caml_ml_channel_get(chanid); chan.name = name; return 0; } @@ -3184,7 +3185,6 @@ caml_named_values[caml_jsbytes_of_string(nm)] = v; return 0; } - function caml_string_equal(s1, s2){if(s1 === s2) return 1; return 0;} function caml_string_bound_error(){ caml_invalid_argument("index out of bounds"); } @@ -3192,9 +3192,6 @@ if(i >>> 0 >= caml_ml_string_length(s)) caml_string_bound_error(); return caml_string_unsafe_get(s, i); } - 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); @@ -3637,167 +3634,168 @@ _C_ = "String.contains_from / Bytes.contains_from", _B_ = cst$1, _A_ = "String.concat", - _G_ = "Array.iter2: arrays must have the same length", - _F_ = "Array.blit", - _E_ = "Array.fill", - _D_ = "Array.sub", - _H_ = "Lexing.lex_refill: cannot grow buffer", - _M_ = "Set.remove_min_elt", - _N_ = [0, 0, 0, 0], - _O_ = [0, "set.ml", 570, 18], - _I_ = cst_Set_bal, + _H_ = "Array.iter2: arrays must have the same length", + _G_ = "Array.blit", + _F_ = "Array.fill", + _E_ = "Array.sub", + _D_ = "Array.init", + _I_ = "Lexing.lex_refill: cannot grow buffer", + _N_ = "Set.remove_min_elt", + _O_ = [0, 0, 0, 0], + _P_ = [0, "set.ml", 570, 18], _J_ = cst_Set_bal, _K_ = cst_Set_bal, _L_ = cst_Set_bal, - _Q_ = "Stdlib.Queue.Empty", - _W_ = "Buffer.add_substring/add_subbytes", - _V_ = "Buffer.add: cannot grow buffer", - _U_ = [0, cst_buffer_ml, 93, 2], - _S_ = [0, cst_buffer_ml, 94, 2], - _R_ = "Buffer.sub", - _ad_ = "%c", - _ae_ = cst_s, - _af_ = cst_i, - _ag_ = cst_li, - _ah_ = cst_ni, - _ai_ = cst_Li, - _aj_ = "%f", - _ak_ = "%B", - _al_ = "%{", - _am_ = "%}", - _an_ = "%(", - _ao_ = "%)", - _ap_ = cst_a, - _aq_ = "%t", - _ar_ = "%?", - _as_ = "%r", - _at_ = "%_r", - _au_ = [0, cst_camlinternalFormat_ml, 850, 23], - _aF_ = [0, cst_camlinternalFormat_ml, 814, 21], - _ax_ = [0, cst_camlinternalFormat_ml, 815, 21], - _aG_ = [0, cst_camlinternalFormat_ml, 818, 21], - _ay_ = [0, cst_camlinternalFormat_ml, 819, 21], - _aH_ = [0, cst_camlinternalFormat_ml, 822, 19], - _az_ = [0, cst_camlinternalFormat_ml, 823, 19], - _aI_ = [0, cst_camlinternalFormat_ml, 826, 22], - _aA_ = [0, cst_camlinternalFormat_ml, 827, 22], - _aJ_ = [0, cst_camlinternalFormat_ml, 831, 30], - _aB_ = [0, cst_camlinternalFormat_ml, 832, 30], - _aD_ = [0, cst_camlinternalFormat_ml, 836, 26], - _av_ = [0, cst_camlinternalFormat_ml, 837, 26], - _aE_ = [0, cst_camlinternalFormat_ml, 846, 28], - _aw_ = [0, cst_camlinternalFormat_ml, 847, 28], - _aC_ = [0, cst_camlinternalFormat_ml, 851, 23], - _bE_ = [0, cst_camlinternalFormat_ml, 1558, 4], - _bF_ = "Printf: bad conversion %[", - _bG_ = [0, cst_camlinternalFormat_ml, 1626, 39], - _bH_ = [0, cst_camlinternalFormat_ml, 1649, 31], - _bI_ = [0, cst_camlinternalFormat_ml, 1650, 31], - _bJ_ = "Printf: bad conversion %_", - _bK_ = cst$2, - _bL_ = cst$3, - _bM_ = cst$2, - _bN_ = cst$3, - _bP_ = + _M_ = cst_Set_bal, + _R_ = "Stdlib.Queue.Empty", + _X_ = "Buffer.add_substring/add_subbytes", + _W_ = "Buffer.add: cannot grow buffer", + _V_ = [0, cst_buffer_ml, 93, 2], + _U_ = [0, cst_buffer_ml, 94, 2], + _S_ = "Buffer.sub", + _ae_ = "%c", + _af_ = cst_s, + _ag_ = cst_i, + _ah_ = cst_li, + _ai_ = cst_ni, + _aj_ = cst_Li, + _ak_ = "%f", + _al_ = "%B", + _am_ = "%{", + _an_ = "%}", + _ao_ = "%(", + _ap_ = "%)", + _aq_ = cst_a, + _ar_ = "%t", + _as_ = "%?", + _at_ = "%r", + _au_ = "%_r", + _av_ = [0, cst_camlinternalFormat_ml, 850, 23], + _aG_ = [0, cst_camlinternalFormat_ml, 814, 21], + _ay_ = [0, cst_camlinternalFormat_ml, 815, 21], + _aH_ = [0, cst_camlinternalFormat_ml, 818, 21], + _az_ = [0, cst_camlinternalFormat_ml, 819, 21], + _aI_ = [0, cst_camlinternalFormat_ml, 822, 19], + _aA_ = [0, cst_camlinternalFormat_ml, 823, 19], + _aJ_ = [0, cst_camlinternalFormat_ml, 826, 22], + _aB_ = [0, cst_camlinternalFormat_ml, 827, 22], + _aK_ = [0, cst_camlinternalFormat_ml, 831, 30], + _aC_ = [0, cst_camlinternalFormat_ml, 832, 30], + _aE_ = [0, cst_camlinternalFormat_ml, 836, 26], + _aw_ = [0, cst_camlinternalFormat_ml, 837, 26], + _aF_ = [0, cst_camlinternalFormat_ml, 846, 28], + _ax_ = [0, cst_camlinternalFormat_ml, 847, 28], + _aD_ = [0, cst_camlinternalFormat_ml, 851, 23], + _bF_ = [0, cst_camlinternalFormat_ml, 1558, 4], + _bG_ = "Printf: bad conversion %[", + _bH_ = [0, cst_camlinternalFormat_ml, 1626, 39], + _bI_ = [0, cst_camlinternalFormat_ml, 1649, 31], + _bJ_ = [0, cst_camlinternalFormat_ml, 1650, 31], + _bK_ = "Printf: bad conversion %_", + _bL_ = cst$2, + _bM_ = cst$3, + _bN_ = cst$2, + _bO_ = cst$3, + _bQ_ = [0, [11, "invalid box description ", [3, 0, 0]], "invalid box description %S"], - _bO_ = [0, 0, 4], - _bD_ = "nan", - _bB_ = "neg_infinity", - _bC_ = "infinity", - _bA_ = cst, - _bz_ = [0, 103], - _bn_ = "%+nd", - _bo_ = "% nd", - _bq_ = "%+ni", - _br_ = "% ni", - _bs_ = "%nx", - _bt_ = "%#nx", - _bu_ = "%nX", - _bv_ = "%#nX", - _bw_ = "%no", - _bx_ = "%#no", - _bm_ = "%nd", - _bp_ = cst_ni, - _by_ = "%nu", - _ba_ = "%+ld", - _bb_ = "% ld", - _bd_ = "%+li", - _be_ = "% li", - _bf_ = "%lx", - _bg_ = "%#lx", - _bh_ = "%lX", - _bi_ = "%#lX", - _bj_ = "%lo", - _bk_ = "%#lo", - _a$_ = "%ld", - _bc_ = cst_li, - _bl_ = "%lu", - _aZ_ = "%+Ld", - _a0_ = "% Ld", - _a2_ = "%+Li", - _a3_ = "% Li", - _a4_ = "%Lx", - _a5_ = "%#Lx", - _a6_ = "%LX", - _a7_ = "%#LX", - _a8_ = "%Lo", - _a9_ = "%#Lo", - _aY_ = "%Ld", - _a1_ = cst_Li, - _a__ = "%Lu", - _aM_ = "%+d", - _aN_ = "% d", - _aP_ = "%+i", - _aQ_ = "% i", - _aR_ = "%x", - _aS_ = "%#x", - _aT_ = "%X", - _aU_ = "%#X", - _aV_ = "%o", - _aW_ = "%#o", - _aL_ = cst_d, - _aO_ = cst_i, - _aX_ = cst_u, - _X_ = "@]", - _Y_ = "@}", - _Z_ = "@?", - ___ = "@\n", - _$_ = "@.", - _aa_ = "@@", - _ab_ = "@%", - _ac_ = "@", - _aK_ = "CamlinternalFormat.Type_mismatch", - _bT_ = cst$1, - _bU_ = [0, [11, cst$4, [2, 0, [2, 0, 0]]], ", %s%s"], - _cf_ = + _bP_ = [0, 0, 4], + _bE_ = "nan", + _bC_ = "neg_infinity", + _bD_ = "infinity", + _bB_ = cst, + _bA_ = [0, 103], + _bo_ = "%+nd", + _bp_ = "% nd", + _br_ = "%+ni", + _bs_ = "% ni", + _bt_ = "%nx", + _bu_ = "%#nx", + _bv_ = "%nX", + _bw_ = "%#nX", + _bx_ = "%no", + _by_ = "%#no", + _bn_ = "%nd", + _bq_ = cst_ni, + _bz_ = "%nu", + _bb_ = "%+ld", + _bc_ = "% ld", + _be_ = "%+li", + _bf_ = "% li", + _bg_ = "%lx", + _bh_ = "%#lx", + _bi_ = "%lX", + _bj_ = "%#lX", + _bk_ = "%lo", + _bl_ = "%#lo", + _ba_ = "%ld", + _bd_ = cst_li, + _bm_ = "%lu", + _a0_ = "%+Ld", + _a1_ = "% Ld", + _a3_ = "%+Li", + _a4_ = "% Li", + _a5_ = "%Lx", + _a6_ = "%#Lx", + _a7_ = "%LX", + _a8_ = "%#LX", + _a9_ = "%Lo", + _a__ = "%#Lo", + _aZ_ = "%Ld", + _a2_ = cst_Li, + _a$_ = "%Lu", + _aN_ = "%+d", + _aO_ = "% d", + _aQ_ = "%+i", + _aR_ = "% i", + _aS_ = "%x", + _aT_ = "%#x", + _aU_ = "%X", + _aV_ = "%#X", + _aW_ = "%o", + _aX_ = "%#o", + _aM_ = cst_d, + _aP_ = cst_i, + _aY_ = cst_u, + _Y_ = "@]", + _Z_ = "@}", + ___ = "@?", + _$_ = "@\n", + _aa_ = "@.", + _ab_ = "@@", + _ac_ = "@%", + _ad_ = "@", + _aL_ = "CamlinternalFormat.Type_mismatch", + _bU_ = cst$1, + _bV_ = [0, [11, cst$4, [2, 0, [2, 0, 0]]], ", %s%s"], + _cg_ = [0, [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], cst_Fatal_error_exception_s], - _cg_ = + _ch_ = [0, [11, "Fatal error in uncaught exception handler: exception ", [2, 0, [12, 10, 0]]], "Fatal error in uncaught exception handler: exception %s\n"], - _ce_ = "Fatal error: out of memory in uncaught exception handler", - _cd_ = + _cf_ = "Fatal error: out of memory in uncaught exception handler", + _ce_ = [0, [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], cst_Fatal_error_exception_s], - _ca_ = [0, [2, 0, [12, 10, 0]], "%s\n"], - _cb_ = + _cb_ = [0, [2, 0, [12, 10, 0]], "%s\n"], + _cc_ = [0, [11, cst_Program_not_linked_with_g_, 0], cst_Program_not_linked_with_g_], - _b4_ = "Raised at", - _b5_ = "Re-raised at", - _b6_ = "Raised by primitive operation at", - _b7_ = "Called from", - _b8_ = " (inlined)", - _b__ = cst$1, - _b9_ = + _b5_ = "Raised at", + _b6_ = "Re-raised at", + _b7_ = "Raised by primitive operation at", + _b8_ = "Called from", + _b9_ = " (inlined)", + _b$_ = cst$1, + _b__ = [0, [2, 0, @@ -3815,30 +3813,31 @@ 0, [11, ", line ", [4, 0, 0, 0, [11, cst_characters, partial]]]]]]]]]], '%s %s in file "%s"%s, line %d, characters %d-%d'], - _b$_ = [0, [2, 0, [11, " unknown location", 0]], "%s unknown location"], - _bZ_ = "Out of memory", - _b0_ = "Stack overflow", - _b1_ = "Pattern matching failed", - _b2_ = "Assertion failed", - _b3_ = "Undefined recursive module", - _bV_ = [0, [12, 40, [2, 0, [2, 0, [12, 41, 0]]]], "(%s%s)"], - _bW_ = cst$1, + _ca_ = [0, [2, 0, [11, " unknown location", 0]], "%s unknown location"], + _b0_ = "Out of memory", + _b1_ = "Stack overflow", + _b2_ = "Pattern matching failed", + _b3_ = "Assertion failed", + _b4_ = "Undefined recursive module", + _bW_ = [0, [12, 40, [2, 0, [2, 0, [12, 41, 0]]]], "(%s%s)"], _bX_ = cst$1, - _bY_ = [0, [12, 40, [2, 0, [12, 41, 0]]], "(%s)"], - _bS_ = [0, [4, 0, 0, 0, 0], cst_d], - _bQ_ = [0, [3, 0, 0], "%S"], - _bR_ = "_", - _cc_ = + _bY_ = cst$1, + _bZ_ = [0, [12, 40, [2, 0, [12, 41, 0]]], "(%s)"], + _bT_ = [0, [4, 0, 0, 0, 0], cst_d], + _bR_ = [0, [3, 0, 0], "%S"], + _bS_ = "_", + _cd_ = [0, cst$1, "(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)"], - _cj_ = "Fun.Finally_raised: ", - _ci_ = "Stdlib.Fun.Finally_raised", - _ck_ = "x", - _cl_ = + _ck_ = "Fun.Finally_raised: ", + _cj_ = "Stdlib.Fun.Finally_raised", + _cm_ = "Random.int", + _cl_ = "x", + _cn_ = [0, 987910699, 495797812, @@ -3895,212 +3894,212 @@ 652377910, 409934019, 801085050], - _cq_ = "Hashtbl: unsupported hash table format", - _co_ = cst$1, - _cJ_ = [3, 0, 3], - _cK_ = cst, - _cG_ = cst$6, - _cH_ = "<\/", - _cI_ = cst$1, - _cD_ = cst$6, - _cE_ = cst$7, - _cF_ = cst$1, - _cC_ = "\n", - _cy_ = cst$1, - _cz_ = cst$1, + _cs_ = "Hashtbl: unsupported hash table format", + _cq_ = cst$1, + _cL_ = [3, 0, 3], + _cM_ = cst, + _cI_ = cst$6, + _cJ_ = "<\/", + _cK_ = cst$1, + _cF_ = cst$6, + _cG_ = cst$7, + _cH_ = cst$1, + _cE_ = "\n", _cA_ = cst$1, _cB_ = cst$1, - _cx_ = [0, cst$1], - _ct_ = cst$1, - _cu_ = cst$1, + _cC_ = cst$1, + _cD_ = cst$1, + _cz_ = [0, cst$1], _cv_ = cst$1, _cw_ = cst$1, - _cs_ = [0, cst$1, 0, cst$1], - _cr_ = "Stdlib.Format.String_tag", - _cL_ = "Jsoo_runtime.Error.Exn", - _cM_ = "jsError", - _cO_ = [0, "src/fut.ml", 34, 25], - _cV_ = "warn", - _cU_ = cst_error, - _cT_ = "log", - _cR_ = "scrollTop", - _cP_ = "search", - _cW_ = "isSecureContext", - _cX_ = "cache", - _cY_ = "credentials", - _cZ_ = "headers", - _c0_ = "integrity", - _c1_ = "keepalive", - _c2_ = "method", - _c3_ = "mode", - _c4_ = "redirect", - _c5_ = "referrer", - _c6_ = "referrerPolicy", - _c8_ = "content-box", - _c9_ = "border-box", - _c__ = "device-pixel-content-box", - _da_ = cst_duration, - _db_ = cst_playbackRate, - _dc_ = "position", - _c$_ = "Set metadata", - _df_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 157, 10], - _dh_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 179, 10], - _dj_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 191, 10], - _dl_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 218, 17], - _dq_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 367, 16], - _dr_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 368, 18], - _ds_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 372, 15], - _dt_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 377, 15], - _du_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 383, 15], - _dv_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 386, 10], - _dw_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 362, 16], - _dx_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 517, 12], - _dy_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 459, 14], - _dE_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 686, 27], - _dD_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 651, 27], - _dB_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 560, 16], - _dz_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 550, 23], - _dA_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 544, 14], - _dp_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 334, 9], - _do_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 309, 9], - _dn_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 305, 9], - _dm_ = + _cx_ = cst$1, + _cy_ = cst$1, + _cu_ = [0, cst$1, 0, cst$1], + _ct_ = "Stdlib.Format.String_tag", + _cN_ = "Jsoo_runtime.Error.Exn", + _cO_ = "jsError", + _cQ_ = [0, "src/fut.ml", 34, 25], + _cX_ = "warn", + _cW_ = cst_error, + _cV_ = "log", + _cT_ = "scrollTop", + _cR_ = "search", + _cY_ = "isSecureContext", + _cZ_ = "cache", + _c0_ = "credentials", + _c1_ = "headers", + _c2_ = "integrity", + _c3_ = "keepalive", + _c4_ = "method", + _c5_ = "mode", + _c6_ = "redirect", + _c7_ = "referrer", + _c8_ = "referrerPolicy", + _c__ = "content-box", + _c$_ = "border-box", + _da_ = "device-pixel-content-box", + _dc_ = cst_duration, + _dd_ = cst_playbackRate, + _de_ = "position", + _db_ = "Set metadata", + _dh_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 157, 10], + _dj_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 179, 10], + _dl_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 191, 10], + _dn_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 218, 17], + _ds_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 367, 16], + _dt_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 368, 18], + _du_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 372, 15], + _dv_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 377, 15], + _dw_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 383, 15], + _dx_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 386, 10], + _dy_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 362, 16], + _dz_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 517, 12], + _dA_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 459, 14], + _dG_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 686, 27], + _dF_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 651, 27], + _dD_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 560, 16], + _dB_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 550, 23], + _dC_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 544, 14], + _dr_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 334, 9], + _dq_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 309, 9], + _dp_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 305, 9], + _do_ = [0, [11, "Lwd: unsafe mutation (variable invalidated during evaluation) at\n", [15, 0]], "Lwd: unsafe mutation (variable invalidated during evaluation) at\n%a"], - _dk_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 199, 14], - _di_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 186, 14], - _dg_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 169, 14], - _de_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 152, 14], - _dC_ = "Lwd.Release_failure", - _dG_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 64, 12], - _dO_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 205, 18], - _dN_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 218, 9], - _dQ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 224, 18], - _dP_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 237, 9], - _dR_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 240, 21], - _dS_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 250, 21], - _dT_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 260, 21], - _dU_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 296, 14], - _d6_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 492, 29], - _d5_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 499, 29], - _d4_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 462, 21], - _d0_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 420, 10], - _d1_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 423, 15], - _d2_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 435, 10], - _d3_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 457, 2], - _dX_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 371, 24], - _dY_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 391, 16], - _dZ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 394, 2], - _dW_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 315, 18], - _dV_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 317, 9], - _dM_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 193, 4], - _dL_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 199, 21], - _dJ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 174, 4], - _dK_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 177, 14], - _dI_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 113, 14], - _dH_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 82, 21], - _dF_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 32, 14], - _em_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 571, 12], - _ea_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 321, 37], - _eb_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 322, 37], - _ed_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 346, 10], - _ee_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 357, 42], - _ec_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 337, 37], - _eg_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 375, 10], - _eh_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 383, 42], - _ef_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 338, 37], - _ej_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 425, 16], - _el_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 513, 50], - _ek_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 480, 6], - _ei_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 395, 14], - _d9_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 174, 57], - _d__ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 182, 57], - _d$_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 238, 11], - _d7_ = cst_Lwd_seq_rank_node_is_marke, - _d8_ = cst_Lwd_seq_rank_node_is_marke, - _eq_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 233, 16], - _ep_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 201, 16], - _eo_ = [0, 0, 0], - _en_ = [0, 0, 0], - _er_ = cst$4, - _es_ = "CCResult.Get_error", - _eD_ = "expected low surrogate escape sequence (u)", - _eE_ = "invalid low surrogate for code point beyond U+FFFF'", - _eF_ = "expected low surrogate escape char (\\)", - _eG_ = "invalid escape in string", - _eC_ = "end of string in escape sequence", - _ex_ = "' ", - _ey_ = " '", - _eB_ = cst$1, - _ez_ = cst$5, - _eA_ = " at offset ", - _ev_ = cst$8, - _ew_ = "invalid hex char in unicode escape: '", - _eu_ = "Jsonxt__Lexxer_utils.Lex_error", - _eH_ = [6, 1], - _eI_ = [6, 0], - _eJ_ = cst$8, - _eK_ = cst_unexpected_character, + _dm_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 199, 14], + _dk_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 186, 14], + _di_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 169, 14], + _dg_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 152, 14], + _dE_ = "Lwd.Release_failure", + _dI_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 64, 12], + _dQ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 205, 18], + _dP_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 218, 9], + _dS_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 224, 18], + _dR_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 237, 9], + _dT_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 240, 21], + _dU_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 250, 21], + _dV_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 260, 21], + _dW_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 296, 14], + _d8_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 492, 29], + _d7_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 499, 29], + _d6_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 462, 21], + _d2_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 420, 10], + _d3_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 423, 15], + _d4_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 435, 10], + _d5_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 457, 2], + _dZ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 371, 24], + _d0_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 391, 16], + _d1_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 394, 2], + _dY_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 315, 18], + _dX_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 317, 9], + _dO_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 193, 4], + _dN_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 199, 21], + _dL_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 174, 4], + _dM_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 177, 14], + _dK_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 113, 14], + _dJ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 82, 21], + _dH_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 32, 14], + _eo_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 571, 12], + _ec_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 321, 37], + _ed_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 322, 37], + _ef_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 346, 10], + _eg_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 357, 42], + _ee_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 337, 37], + _ei_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 375, 10], + _ej_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 383, 42], + _eh_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 338, 37], + _el_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 425, 16], + _en_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 513, 50], + _em_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 480, 6], + _ek_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 395, 14], + _d$_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 174, 57], + _ea_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 182, 57], + _eb_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 238, 11], + _d9_ = cst_Lwd_seq_rank_node_is_marke, + _d__ = cst_Lwd_seq_rank_node_is_marke, + _es_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 233, 16], + _er_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 201, 16], + _eq_ = [0, 0, 0], + _ep_ = [0, 0, 0], + _et_ = cst$4, + _eu_ = "CCResult.Get_error", + _eF_ = "expected low surrogate escape sequence (u)", + _eG_ = "invalid low surrogate for code point beyond U+FFFF'", + _eH_ = "expected low surrogate escape char (\\)", + _eI_ = "invalid escape in string", + _eE_ = "end of string in escape sequence", + _ez_ = "' ", + _eA_ = " '", + _eD_ = cst$1, + _eB_ = cst$5, + _eC_ = " at offset ", + _ex_ = cst$8, + _ey_ = "invalid hex char in unicode escape: '", + _ew_ = "Jsonxt__Lexxer_utils.Lex_error", + _eJ_ = [6, 1], + _eK_ = [6, 0], _eL_ = cst$8, _eM_ = cst_unexpected_character, _eN_ = cst$8, _eO_ = cst_unexpected_character, _eP_ = cst$8, _eQ_ = cst_unexpected_character, - _eR_ = [0, cst$1], - _eS_ = cst$8, - _eT_ = cst_unexpected_character, - _eU_ = "unexpected EOF in comment", - _eV_ = "Jsonxt__Error_info.Json_error_info", - _eW_ = cst_0, - _eX_ = cst_0, - _eY_ = "unexpected '{'", - _eZ_ = "unexpected '}'", - _e0_ = "unexpected null value", - _e1_ = "unexpected negative infinity", - _e2_ = "unexpected Not-a-Number", - _e3_ = "unexpected infinity", - _e4_ = "unexpected end-of-input", - _e5_ = "unexpected ','", - _e6_ = "unexpected ':'", - _e7_ = "unexpected '['", - _e8_ = "unexpected ']'", - _e9_ = "unexpected '<'", - _e__ = "unexpected '>'", - _e$_ = "unexpected '('", - _fa_ = "unexpected ')'", - _fb_ = cst$8, - _fc_ = "unexpected string '", + _eR_ = cst$8, + _eS_ = cst_unexpected_character, + _eT_ = [0, cst$1], + _eU_ = cst$8, + _eV_ = cst_unexpected_character, + _eW_ = "unexpected EOF in comment", + _eX_ = "Jsonxt__Error_info.Json_error_info", + _eY_ = cst_0, + _eZ_ = cst_0, + _e0_ = "unexpected '{'", + _e1_ = "unexpected '}'", + _e2_ = "unexpected null value", + _e3_ = "unexpected negative infinity", + _e4_ = "unexpected Not-a-Number", + _e5_ = "unexpected infinity", + _e6_ = "unexpected end-of-input", + _e7_ = "unexpected ','", + _e8_ = "unexpected ':'", + _e9_ = "unexpected '['", + _e__ = "unexpected ']'", + _e$_ = "unexpected '<'", + _fa_ = "unexpected '>'", + _fb_ = "unexpected '('", + _fc_ = "unexpected ')'", _fd_ = cst$8, - _fe_ = "unexpected large integer '", + _fe_ = "unexpected string '", _ff_ = cst$8, - _fg_ = "unexpected integer '", + _fg_ = "unexpected large integer '", _fh_ = cst$8, - _fi_ = "unexpected float '", + _fi_ = "unexpected integer '", _fj_ = cst$8, - _fk_ = "compliance error '", + _fk_ = "unexpected float '", _fl_ = cst$8, - _fm_ = cst_true, - _fo_ = cst_false, - _fn_ = "unexpected boolean '", - _fs_ = [1, "Unexpected end-of-input"], - _fq_ = [0, 148000204, "tuple must have at least 2 elements"], - _fr_ = [0, 148000204, "variant must have at least a string"], - _fp_ = "Jsonxt__Parser.Make(Compliance).Parse_error", - _fv_ = cst_b, - _fw_ = cst_t, - _fx_ = cst_n, - _fy_ = cst_f, - _fz_ = cst_r, - _fA_ = cst$9, - _ft_ = cst$0, - _fu_ = cst_u00, - _fC_ = cst_null, - _fD_ = cst$10, - _fE_ = + _fm_ = "compliance error '", + _fn_ = cst$8, + _fo_ = cst_true, + _fq_ = cst_false, + _fp_ = "unexpected boolean '", + _fu_ = [1, "Unexpected end-of-input"], + _fs_ = [0, 148000204, "tuple must have at least 2 elements"], + _ft_ = [0, 148000204, "variant must have at least a string"], + _fr_ = "Jsonxt__Parser.Make(Compliance).Parse_error", + _fx_ = cst_b, + _fy_ = cst_t, + _fz_ = cst_n, + _fA_ = cst_f, + _fB_ = cst_r, + _fC_ = cst$9, + _fv_ = cst$0, + _fw_ = cst_u00, + _fE_ = cst_null, + _fF_ = cst$10, + _fG_ = [0, [12, 123, @@ -4108,9 +4107,9 @@ [0, cst_1_0, 1, 0], [15, [17, [0, cst_1_2, 1, -2], [12, 125, 0]]]]], "{@;<1 0>%a@;<1 -2>}"], - _fF_ = "{}", - _fG_ = cst$10, - _fH_ = + _fH_ = "{}", + _fI_ = cst$10, + _fJ_ = [0, [12, 91, @@ -4120,16 +4119,16 @@ [1, [0, [11, cst_hov, 0], cst_hov]], [15, [17, 0, [17, [0, cst_1_2, 1, -2], [12, 93, 0]]]]]]], "[@;<1 0>@[%a@]@;<1 -2>]"], - _fI_ = "[]", - _fJ_ = "()", - _fK_ = cst$10, - _fL_ = + _fK_ = "[]", + _fL_ = "()", + _fM_ = cst$10, + _fN_ = [0, [12, 40, [17, [0, "@,", 0, 0], [15, [17, [0, "@;<0 -2>", 0, -2], [12, 41, 0]]]]], "(@,%a@;<0 -2>)"], - _fM_ = + _fO_ = [0, [12, 60, @@ -4137,103 +4136,103 @@ [1, [0, [11, cst_hv2, 0], cst_hv2]], [2, 0, [11, cst$5, [15, [17, 0, [12, 62, 0]]]]]]], "<@[%s: %a@]>"], - _fN_ = [0, [12, 60, [2, 0, [12, 62, 0]]], "<%s>"], - _fO_ = + _fP_ = [0, [12, 60, [2, 0, [12, 62, 0]]], "<%s>"], + _fQ_ = [0, [18, [1, [0, [11, cst_hv2, 0], cst_hv2]], [2, 0, [11, cst$5, [15, [17, 0, 0]]]]], "@[%s: %a@]"], - _fR_ = [0, [15, [17, 2, 0]], "%a@?"], - _fQ_ = [0, [15, 0], cst_a], - _fP_ = + _fT_ = [0, [15, [17, 2, 0]], "%a@?"], + _fS_ = [0, [15, 0], cst_a], + _fR_ = [0, [18, [1, [0, [11, cst_hv2, 0], cst_hv2]], [15, [17, 0, 0]]], "@[%a@]"], - _fB_ = [0, [2, 0, [17, [0, "@ ", 1, 0], 0]], "%s@ "], - _fU_ = "Expected `String", - _fT_ = "Expected `Assoc", - _fW_ = "{", - _fX_ = "}", - _fY_ = "Null", - _fZ_ = cst_Infinity, - _f0_ = "NAN", - _f1_ = cst_Infinity$0, - _f2_ = "end-of-file", - _f3_ = cst$10, - _f4_ = cst$11, - _f5_ = "[", - _f6_ = "]", - _f7_ = cst$7, - _f8_ = cst$6, - _f9_ = "(", - _f__ = ")", - _f$_ = cst$8, - _ga_ = "input error '", - _gb_ = cst_true, - _gc_ = cst_false, + _fD_ = [0, [2, 0, [17, [0, "@ ", 1, 0], 0]], "%s@ "], + _fW_ = "Expected `String", + _fV_ = "Expected `Assoc", + _fY_ = "{", + _fZ_ = "}", + _f0_ = "Null", + _f1_ = cst_Infinity, + _f2_ = "NAN", + _f3_ = cst_Infinity$0, + _f4_ = "end-of-file", + _f5_ = cst$10, + _f6_ = cst$11, + _f7_ = "[", + _f8_ = "]", + _f9_ = cst$7, + _f__ = cst$6, + _f$_ = "(", + _ga_ = ")", + _gb_ = cst$8, + _gc_ = "input error '", + _gd_ = cst_true, + _ge_ = cst_false, + _gh_ = cst_junk_after_end_of_JSON_val, + _gi_ = [0, 0], + _gj_ = [1, cst_empty_input], _gf_ = cst_junk_after_end_of_JSON_val, - _gg_ = [0, 0], - _gh_ = [1, cst_empty_input], - _gd_ = cst_junk_after_end_of_JSON_val, - _ge_ = [1, cst_empty_input], - _gu_ = cst$1, - _gv_ = cst$1, - _gr_ = cst_null, - _gs_ = cst$10, - _gt_ = cst$10, - _gq_ = cst$11, - _gk_ = cst_b, - _gl_ = cst_t, - _gm_ = cst_n, - _gn_ = cst_f, - _go_ = cst_r, - _gp_ = cst$9, - _gi_ = cst$0, - _gj_ = cst_u00, - _gE_ = cst_null, - _gG_ = cst$10, - _gF_ = cst$1, + _gg_ = [1, cst_empty_input], + _gw_ = cst$1, + _gx_ = cst$1, + _gt_ = cst_null, + _gu_ = cst$10, + _gv_ = cst$10, + _gs_ = cst$11, + _gm_ = cst_b, + _gn_ = cst_t, + _go_ = cst_n, + _gp_ = cst_f, + _gq_ = cst_r, + _gr_ = cst$9, + _gk_ = cst$0, + _gl_ = cst_u00, + _gG_ = cst_null, _gI_ = cst$10, _gH_ = cst$1, - _gy_ = cst_b, - _gz_ = cst_t, - _gA_ = cst_n, - _gB_ = cst_f, - _gC_ = cst_r, - _gD_ = cst$9, - _gw_ = cst$0, - _gx_ = cst_u00, - _ha_ = [0, 928231259, cst_Infinity$0], - _hb_ = [0, 928231259, cst_Infinity], - _g$_ = [0, 928231259, cst_NaN], - _g__ = cst_NaN, - _g8_ = cst_Infinity, - _g9_ = cst_Infinity$0, - _g7_ = [0, 0], - _g5_ = cst$12, - _g6_ = cst$12, - _g4_ = "floatlit not supported in yojson safe mode", - _g3_ = cst_NaN, - _g1_ = cst_Infinity, - _g2_ = cst_Infinity$0, - _g0_ = [0, 0], - _gZ_ = cst_variants_not_supported_in_, - _gY_ = cst_variants_not_supported_in_, - _gX_ = cst_tuples_not_supported_in_yo, - _gW_ = cst_tuples_not_supported_in_yo, - _gV_ = "floatlit not supported in yojson basic mode", - _gU_ = cst_variants_not_supported_in_, - _gT_ = cst_tuples_not_supported_in_yo, - _gS_ = cst_NaN, - _gQ_ = cst_Infinity, - _gR_ = cst_Infinity$0, - _gP_ = [0, 0], - _gO_ = [5, "Integer out of bounds"], - _gK_ = ", line", - _gL_ = "File ", - _gN_ = "Line", - _gM_ = + _gK_ = cst$10, + _gJ_ = cst$1, + _gA_ = cst_b, + _gB_ = cst_t, + _gC_ = cst_n, + _gD_ = cst_f, + _gE_ = cst_r, + _gF_ = cst$9, + _gy_ = cst$0, + _gz_ = cst_u00, + _hc_ = [0, 928231259, cst_Infinity$0], + _hd_ = [0, 928231259, cst_Infinity], + _hb_ = [0, 928231259, cst_NaN], + _ha_ = cst_NaN, + _g__ = cst_Infinity, + _g$_ = cst_Infinity$0, + _g9_ = [0, 0], + _g7_ = cst$12, + _g8_ = cst$12, + _g6_ = "floatlit not supported in yojson safe mode", + _g5_ = cst_NaN, + _g3_ = cst_Infinity, + _g4_ = cst_Infinity$0, + _g2_ = [0, 0], + _g1_ = cst_variants_not_supported_in_, + _g0_ = cst_variants_not_supported_in_, + _gZ_ = cst_tuples_not_supported_in_yo, + _gY_ = cst_tuples_not_supported_in_yo, + _gX_ = "floatlit not supported in yojson basic mode", + _gW_ = cst_variants_not_supported_in_, + _gV_ = cst_tuples_not_supported_in_yo, + _gU_ = cst_NaN, + _gS_ = cst_Infinity, + _gT_ = cst_Infinity$0, + _gR_ = [0, 0], + _gQ_ = [5, "Integer out of bounds"], + _gM_ = ", line", + _gN_ = "File ", + _gP_ = "Line", + _gO_ = [0, [2, 0, @@ -4247,67 +4246,67 @@ " chars ", [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$5, 0]]]]]]]], "%s %d chars %d-%d: "], - _gJ_ = "Jsonxt__Yojson.Json_error", - _hc_ = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", - _hd_ = [1, [0, 3854881, "Failed to unmarshal data"]], - _he_ = "TODO not implemented", - _hl_ = "not implemented", - _hi_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_px, 0]], "%fpx"], - _hj_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_rem, 0]], "%frem"], - _hk_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_em, 0]], "%fem"], - _hf_ = cst_px, - _hg_ = cst_rem, - _hh_ = cst_em, - _hm_ = [0, 80, [0, "lwdui-controlled-scroll-wrapper"]], - _hn_ = [0, 80, "lwdui-controlled-scroll-controls"], - _ho_ = "Show playing", - _ht_ = [0, [11, cst_height, [2, 0, 0]], "height: %s"], - _hs_ = cst$13, - _hp_ = [0, cst$13], - _hq_ = "grid-template-columns", - _hr_ = [0, [2, 0, [11, cst$5, [2, 0, [12, 59, 0]]]], "%s: %s;"], - _hu_ = [1, 4.], - _hx_ = [0, 80, "row"], - _hv_ = + _gL_ = "Jsonxt__Yojson.Json_error", + _he_ = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", + _hf_ = [1, [0, 3854881, "Failed to unmarshal data"]], + _hg_ = "TODO not implemented", + _hn_ = "not implemented", + _hk_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_px, 0]], "%fpx"], + _hl_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_rem, 0]], "%frem"], + _hm_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_em, 0]], "%fem"], + _hh_ = cst_px, + _hi_ = cst_rem, + _hj_ = cst_em, + _ho_ = [0, 80, [0, "lwdui-controlled-scroll-wrapper"]], + _hp_ = [0, 80, "lwdui-controlled-scroll-controls"], + _hq_ = "Show playing", + _hv_ = [0, [11, cst_height, [2, 0, 0]], "height: %s"], + _hu_ = cst$13, + _hr_ = [0, cst$13], + _hs_ = "grid-template-columns", + _ht_ = [0, [2, 0, [11, cst$5, [2, 0, [12, 59, 0]]]], "%s: %s;"], + _hw_ = [1, 4.], + _hz_ = [0, 80, "row"], + _hx_ = [0, [11, "height: calc(", [2, 0, [11, " * ", [4, 3, 0, 0, [11, ");", 0]]]]], "height: calc(%s * %i);"], - _hw_ = + _hy_ = [0, [11, cst_height, [2, 0, [11, " !important;", 0]]], "height: %s !important;"], - _hy_ = [0, "lwdui-lazy-table", 0], - _hz_ = [0, 80, [0, "lwdui-lazy-table-wrapper"]], - _hB_ = [1, -358247754], - _hA_ = + _hA_ = [0, "lwdui-lazy-table", 0], + _hB_ = [0, 80, [0, "lwdui-lazy-table-wrapper"]], + _hD_ = [1, -358247754], + _hC_ = [0, [11, "Multiple persitent var are using the key ", [2, 0, 0]], "Multiple persitent var are using the key %s"], - _hE_ = cst_submit, - _hD_ = "password", - _hC_ = cst_text, - _hH_ = [0, 80, cst_text], - _hF_ = [0, [2, 0, [11, cst_id, 0]], cst_s_id], - _hG_ = [0, [2, 0, 0], cst_s], + _hG_ = cst_submit, + _hF_ = "password", + _hE_ = cst_text, _hJ_ = [0, 80, cst_text], - _hI_ = [0, [2, 0, [11, cst_id, 0]], cst_s_id], - _hM_ = [0, 80, "checkbox"], - _hK_ = + _hH_ = [0, [2, 0, [11, cst_id, 0]], cst_s_id], + _hI_ = [0, [2, 0, 0], cst_s], + _hL_ = [0, 80, cst_text], + _hK_ = [0, [2, 0, [11, cst_id, 0]], cst_s_id], + _hO_ = [0, 80, "checkbox"], + _hM_ = [0, [2, 0, [12, 45, [4, 3, 0, 0, [12, 45, [4, 3, 0, 0, [11, "-id", 0]]]]]], "%s-%i-%i-id"], - _hL_ = + _hN_ = [0, [2, 0, [12, 45, [4, 3, 0, 0, [12, 45, [4, 3, 0, 0, 0]]]]], "%s-%i-%i"], - _hN_ = [0, 80, cst_button], - _hR_ = "list_of_yojson: list needed", - _hQ_ = "int_of_yojson: integer needed", - _hP_ = "string_of_yojson: string needed", - _hO_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", - _h0_ = cst$13, - _h2_ = "_of_yojson: list instead of atom for record expected", - _h1_ = + _hP_ = [0, 80, cst_button], + _hT_ = "list_of_yojson: list needed", + _hS_ = "int_of_yojson: integer needed", + _hR_ = "string_of_yojson: string needed", + _hQ_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", + _h2_ = cst$13, + _h4_ = "_of_yojson: list instead of atom for record expected", + _h3_ = [0, [2, 0, @@ -4315,101 +4314,99 @@ "_of_yojson: the following record elements were undefined: ", [2, 0, 0]]], "%s_of_yojson: the following record elements were undefined: %s"], - _hZ_ = "extra fields", - _hY_ = "duplicate fields", - _hW_ = cst$13, - _hX_ = + _h1_ = "extra fields", + _h0_ = "duplicate fields", + _hY_ = cst$13, + _hZ_ = [0, [2, 0, [11, "_of_yojson: ", [2, 0, [11, cst$5, [2, 0, 0]]]]], "%s_of_yojson: %s: %s"], - _hV_ = "_of_yojson: unexpected variant constructor", - _hU_ = "_of_yojson: expected a variant type, saw an empty list", - _hT_ = "_of_yojson: expected a variant type, saw a nested list", - _hS_ = "_of_yojson: this constructor does not take arguments", - _jd_ = "An error occured while decoding response: ", - _i$_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], + _hX_ = "_of_yojson: unexpected variant constructor", + _hW_ = "_of_yojson: expected a variant type, saw an empty list", + _hV_ = "_of_yojson: expected a variant type, saw a nested list", + _hU_ = "_of_yojson: this constructor does not take arguments", + _jf_ = "An error occured while decoding response: ", + _jb_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], + _je_ = cst$1, _jc_ = cst$1, - _ja_ = cst$1, - _jb_ = + _jd_ = [0, [11, 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="', [2, 0, [11, '", Version="0.1"', [2, 0, 0]]]], 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'], - _i__ = cst_CollectionType, - _i1_ = cst_Type, - _i2_ = cst_ImageBlurHashes, - _i3_ = cst_ServerId, - _i4_ = cst_ParentId, - _i5_ = cst_AlbumId, - _i6_ = cst_Path, - _i7_ = cst_Id, - _i8_ = cst_SortName, - _i9_ = cst_Name, - _iW_ = "type_", - _iX_ = "image_blur_hashes", - _iY_ = cst_server_id, - _iZ_ = cst_id$0, - _i0_ = cst_name, - _iV_ = [0, "lib/data_source/jellyfin_api.ml", 193, 64], - _ik_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], - _il_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], - _im_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], - _in_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], - _io_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], - _ip_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], - _iq_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], - _ir_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], - _is_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], - _it_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], - _iu_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], - _iv_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], - _iw_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], - _ix_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], - _iy_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], - _iz_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], - _iA_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], - _iB_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], - _iC_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], - _iD_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], - _iE_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], - _iF_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], - _iG_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], - _iH_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], - _iI_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], - _iJ_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], - _iK_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], - _iL_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], - _iM_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], - _iN_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], - _iO_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], - _iP_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], - _iQ_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], - _iR_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], - _iS_ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], - _iT_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], - _iU_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], - _ij_ = cst_Primary, - _ii_ = "/Users/AuthenticateByName", - _if_ = cst_ServerId, - _ig_ = cst_AccessToken, - _ih_ = cst_User, - _ic_ = cst_server_id, - _id_ = "access_token", - _ie_ = "user", - _ia_ = cst_Pw, - _ib_ = cst_Username, - _h__ = "pw", - _h$_ = "username", - _h6_ = cst_Id, - _h7_ = cst_ServerName, - _h8_ = cst_ServerId, - _h9_ = cst_Name, - _h3_ = cst_id$0, - _h4_ = cst_server_id, - _h5_ = cst_name, - _jg_ = [0, 0, 1], - _jf_ = "wrong sort of sort", + _ja_ = cst_CollectionType, + _i3_ = cst_Type, + _i4_ = cst_ImageBlurHashes, + _i5_ = cst_ServerId, + _i6_ = cst_ParentId, + _i7_ = cst_AlbumId, + _i8_ = cst_Path, + _i9_ = cst_Id, + _i__ = cst_SortName, + _i$_ = cst_Name, + _iY_ = "type_", + _iZ_ = "image_blur_hashes", + _i0_ = cst_server_id, + _i1_ = cst_id$0, + _i2_ = cst_name, + _iX_ = [0, "lib/data_source/jellyfin_api.ml", 193, 64], + _im_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], + _in_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], + _io_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], + _ip_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], + _iq_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], + _ir_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], + _is_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], + _it_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], + _iu_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], + _iv_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], + _iw_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], + _ix_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], + _iy_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], + _iz_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], + _iA_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], + _iB_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], + _iC_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], + _iD_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], + _iE_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], + _iF_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], + _iG_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], + _iH_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], + _iI_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], + _iJ_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], + _iK_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], + _iL_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], + _iM_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], + _iN_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], + _iO_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], + _iP_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], + _iQ_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], + _iR_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], + _iS_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], + _iT_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], + _iU_ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], + _iV_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], + _iW_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], + _il_ = cst_Primary, + _ik_ = "/Users/AuthenticateByName", + _ih_ = cst_ServerId, + _ii_ = cst_AccessToken, + _ij_ = cst_User, + _ie_ = cst_server_id, + _if_ = "access_token", + _ig_ = "user", + _ic_ = cst_Pw, + _id_ = cst_Username, + _ia_ = "pw", + _ib_ = "username", + _h8_ = cst_Id, + _h9_ = cst_ServerName, + _h__ = cst_ServerId, + _h$_ = cst_Name, + _h5_ = cst_id$0, + _h6_ = cst_server_id, + _h7_ = cst_name, _jA_ = [0, cst_lib_db_stores_ml, 116, 13], _jz_ = [0, cst_lib_db_stores_ml, 107, 19], _jw_ = [0, cst_lib_db_stores_ml, 99, 13], @@ -4706,15 +4703,7 @@ function abs(x){return 0 <= x ? x : - x | 0;} function lnot(x){return x ^ -1;} var max_int = 2147483647; - function symbol(s1, s2){ - var - l1 = caml_ml_string_length(s1), - l2 = caml_ml_string_length(s2), - s = caml_create_bytes(l1 + l2 | 0); - caml_blit_string(s1, 0, s, 0, l1); - caml_blit_string(s2, 0, s, l1, l2); - return caml_string_of_bytes(s); - } + function symbol_concat(s1, s2){return s1 + s2;} function char_of_int(n){ if(0 <= n && 255 >= n) return n; return invalid_arg(_a_); @@ -4726,14 +4715,15 @@ function loop(i){ var i$0 = i; for(;;){ - if(l <= i$0) return symbol(s, _d_); + if(l <= i$0) return symbol_concat(s, _d_); var match = caml_string_get(s, i$0); a: { if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; return s; } - var i$1 = i$0 + 1 | 0, i$0 = i$1; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; } } return loop(0); @@ -4741,10 +4731,10 @@ function string_of_float(f){ return valid_float_lexem(caml_format_float("%.12g", f)); } - function symbol$0(l1, l2){ + function symbol(l1, l2){ if(! l1) return l2; var tl = l1[2], hd = l1[1]; - return [0, hd, symbol$0(tl, l2)]; + return [0, hd, symbol(tl, l2)]; } caml_ml_open_descriptor_in(0); var @@ -4763,11 +4753,11 @@ if(! param$0) return 0; var l = param$0[2], a = param$0[1]; try{caml_ml_flush(a);} - catch(_x7_){ - var _x6_ = caml_wrap_exception(_x7_); - if(_x6_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_x6_, 0); + catch(_ye_){ + var _yd_ = caml_wrap_exception(_ye_); + if(_yd_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_yd_, 0); } - var param$0 = l; + param$0 = l; } } return iter(caml_ml_out_channels_list(0)); @@ -4813,15 +4803,15 @@ return caml_call1(old_exit$0, 0); }, success = compare_and_set(exit_function, old_exit, new_exit), - _x5_ = 1 - success; - if(! _x5_) return _x5_; + _yc_ = 1 - success; + if(! _yc_) return _yc_; } } function do_at_exit(param){return caml_call1(get(exit_function), 0);} caml_register_named_value("Pervasives.do_at_exit", do_at_exit); - function _i_(_x4_){return caml_ml_close_channel(_x4_);} - function _j_(_x3_, _x2_){return caml_ml_output_char(_x3_, _x2_);} - function _k_(_x1_){return caml_ml_flush(_x1_);} + function _i_(_yb_){return caml_ml_close_channel(_yb_);} + function _j_(_ya_, _x$_){return caml_ml_output_char(_ya_, _x$_);} + function _k_(_x__){return caml_ml_flush(_x__);} var max_array_length = caml_sys_const_max_wosize(0), max_string_length = (4 * max_array_length | 0) - 1 | 0; @@ -4916,7 +4906,9 @@ var len$0 = len, param$0 = param; for(;;){ if(! param$0) return len$0; - var l = param$0[2], len$1 = len$0 + 1 | 0, len$0 = len$1, param$0 = l; + var l = param$0[2], len$1 = len$0 + 1 | 0; + len$0 = len$1; + param$0 = l; } } function length(l){return length_aux(0, l);} @@ -4930,12 +4922,9 @@ var l1$0 = l1, l2$0 = l2; for(;;){ if(! l1$0) return l2$0; - var - l1$1 = l1$0[2], - a = l1$0[1], - l2$1 = [0, a, l2$0], - l1$0 = l1$1, - l2$0 = l2$1; + var l1$1 = l1$0[2], a = l1$0[1], l2$1 = [0, a, l2$0]; + l1$0 = l1$1; + l2$0 = l2$1; } } function rev(l){return rev_append(l, 0);} @@ -4943,11 +4932,9 @@ var acc$0 = acc, i$0 = i; for(;;){ if(n <= i$0) return acc$0; - var - i$1 = i$0 + 1 | 0, - acc$1 = [0, caml_call1(f, i$0), acc$0], - acc$0 = acc$1, - i$0 = i$1; + var i$1 = i$0 + 1 | 0, acc$1 = [0, caml_call1(f, i$0), acc$0]; + acc$0 = acc$1; + i$0 = i$1; } } function init_aux(i, n, f){ @@ -4966,7 +4953,7 @@ function flatten(param){ if(! param) return 0; var r = param[2], l = param[1]; - return symbol$0(l, flatten(r)); + return symbol(l, flatten(r)); } function map$1(f, param){ if(! param) return 0; @@ -4981,9 +4968,9 @@ var l = param$0[2], a = param$0[1], - accu$1 = [0, caml_call1(f, a), accu$0], - accu$0 = accu$1, - param$0 = l; + accu$1 = [0, caml_call1(f, a), accu$0]; + accu$0 = accu$1; + param$0 = l; } } return rmap_f(0, l); @@ -4994,28 +4981,25 @@ if(! param$0) return 0; var l = param$0[2], a = param$0[1]; caml_call1(f, a); - var param$0 = l; + param$0 = l; } } function fold_left(f, accu, l){ var accu$0 = accu, l$0 = l; for(;;){ if(! l$0) return accu$0; - var - l$1 = l$0[2], - a = l$0[1], - accu$1 = caml_call2(f, accu$0, a), - accu$0 = accu$1, - l$0 = l$1; + var l$1 = l$0[2], a = l$0[1], accu$1 = caml_call2(f, accu$0, a); + accu$0 = accu$1; + l$0 = l$1; } } function for_all(p, param){ var param$0 = param; for(;;){ if(! param$0) return 1; - var l = param$0[2], a = param$0[1], _x0_ = caml_call1(p, a); - if(! _x0_) return _x0_; - var param$0 = l; + var l = param$0[2], a = param$0[1], _x9_ = caml_call1(p, a); + if(! _x9_) return _x9_; + param$0 = l; } } function assoc_opt(x, param){ @@ -5024,7 +5008,7 @@ if(! param$0) return 0; var l = param$0[2], match = param$0[1], b = match[2], a = match[1]; if(0 === caml_compare(a, x)) return [0, b]; - var param$0 = l; + param$0 = l; } } function assq(x, param){ @@ -5033,7 +5017,7 @@ if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); var l = param$0[2], match = param$0[1], b = match[2], a = match[1]; if(a === x) return b; - var param$0 = l; + param$0 = l; } } function find_all(p){ @@ -5042,14 +5026,17 @@ for(;;){ if(! param$0) return rev(accu$0); var l = param$0[2], x = param$0[1]; - if(caml_call1(p, x)) - var accu$1 = [0, x, accu$0], accu$0 = accu$1, param$0 = l; + if(caml_call1(p, x)){ + var accu$1 = [0, x, accu$0]; + accu$0 = accu$1; + param$0 = l; + } else - var param$0 = l; + param$0 = l; } } - var _xY_ = 0; - return function(_xZ_){return find(_xY_, _xZ_);}; + var _x7_ = 0; + return function(_x8_){return find(_x7_, _x8_);}; } function filter_map(f){ function aux(accu, param){ @@ -5057,29 +5044,30 @@ for(;;){ if(! param$0) return rev(accu$0); var l = param$0[2], x = param$0[1], match = caml_call1(f, x); - if(match) - var - v = match[1], - accu$1 = [0, v, accu$0], - accu$0 = accu$1, - param$0 = l; + if(match){ + var v = match[1], accu$1 = [0, v, accu$0]; + accu$0 = accu$1; + param$0 = l; + } else - var param$0 = l; + param$0 = l; } } - var _xW_ = 0; - return function(_xX_){return aux(_xW_, _xX_);}; + var _x5_ = 0; + return function(_x6_){return aux(_x5_, _x6_);}; } function partition(p, l){ function part(yes, no, param){ var yes$0 = yes, no$0 = no, param$0 = param; for(;;){ - if(! param$0){var _xV_ = rev(no$0); return [0, rev(yes$0), _xV_];} + if(! param$0){var _x4_ = rev(no$0); return [0, rev(yes$0), _x4_];} var l = param$0[2], x = param$0[1]; - if(caml_call1(p, x)) - var yes$1 = [0, x, yes$0], yes$0 = yes$1, param$0 = l; - else - var no$1 = [0, x, no$0], no$0 = no$1, param$0 = l; + if(caml_call1(p, x)){ + var yes$1 = [0, x, yes$0]; + yes$0 = yes$1; + param$0 = l; + } + else{var no$1 = [0, x, no$0]; no$0 = no$1; param$0 = l;} } } return part(0, 0, l); @@ -5096,12 +5084,18 @@ t1 = l1$0[2], h1 = l1$0[1], c = caml_call2(cmp, h1, h2); - if(0 === c) - var accu$1 = [0, h1, accu$0], l1$0 = t1, l2$0 = t2, accu$0 = accu$1; - else if(0 <= c) - var accu$2 = [0, h2, accu$0], l2$0 = t2, accu$0 = accu$2; - else - var accu$3 = [0, h1, accu$0], l1$0 = t1, accu$0 = accu$3; + if(0 === c){ + var accu$1 = [0, h1, accu$0]; + l1$0 = t1; + l2$0 = t2; + accu$0 = accu$1; + } + else if(0 <= c){ + var accu$2 = [0, h2, accu$0]; + l2$0 = t2; + accu$0 = accu$2; + } + else{var accu$3 = [0, h1, accu$0]; l1$0 = t1; accu$0 = accu$3;} } } function rev_merge_rev(l1, l2, accu){ @@ -5115,12 +5109,18 @@ t1 = l1$0[2], h1 = l1$0[1], c = caml_call2(cmp, h1, h2); - if(0 === c) - var accu$1 = [0, h1, accu$0], l1$0 = t1, l2$0 = t2, accu$0 = accu$1; - else if(0 < c) - var accu$2 = [0, h1, accu$0], l1$0 = t1, accu$0 = accu$2; - else - var accu$3 = [0, h2, accu$0], l2$0 = t2, accu$0 = accu$3; + if(0 === c){ + var accu$1 = [0, h1, accu$0]; + l1$0 = t1; + l2$0 = t2; + accu$0 = accu$1; + } + else if(0 < c){ + var accu$2 = [0, h1, accu$0]; + l1$0 = t1; + accu$0 = accu$2; + } + else{var accu$3 = [0, h2, accu$0]; l2$0 = t2; accu$0 = accu$3;} } } function sort(n, l){ @@ -5142,61 +5142,61 @@ } } else if(3 === n && l){ - var _xP_ = l[2]; - if(_xP_){ - var match$2 = _xP_[2]; + var _xY_ = l[2]; + if(_xY_){ + var match$2 = _xY_[2]; if(match$2){ var tl$1 = match$2[2], x3 = match$2[1], - x2$0 = _xP_[1], + x2$0 = _xY_[1], x1$0 = l[1], c$0 = caml_call2(cmp, x1$0, x2$0); if(0 === c$0) var c$1 = caml_call2(cmp, x2$0, x3), - _xQ_ = + _xZ_ = 0 === c$1 ? [0, x2$0, 0] : 0 <= c$1 ? [0, x3, [0, x2$0, 0]] : [0, x2$0, [0, x3, 0]], - s$0 = _xQ_; + s$0 = _xZ_; else if(0 <= c$0){ var c$2 = caml_call2(cmp, x1$0, x3); if(0 === c$2) - var _xR_ = [0, x2$0, [0, x1$0, 0]]; + var _x0_ = [0, x2$0, [0, x1$0, 0]]; else if(0 <= c$2) var c$3 = caml_call2(cmp, x2$0, x3), - _xS_ = + _x1_ = 0 === c$3 ? [0, x2$0, [0, x1$0, 0]] : 0 <= c$3 ? [0, x3, [0, x2$0, [0, x1$0, 0]]] : [0, x2$0, [0, x3, [0, x1$0, 0]]], - _xR_ = _xS_; + _x0_ = _x1_; else - var _xR_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; - var s$0 = _xR_; + var _x0_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; + var s$0 = _x0_; } else{ var c$4 = caml_call2(cmp, x2$0, x3); if(0 === c$4) - var _xT_ = [0, x1$0, [0, x2$0, 0]]; + var _x2_ = [0, x1$0, [0, x2$0, 0]]; else if(0 <= c$4) var c$5 = caml_call2(cmp, x1$0, x3), - _xU_ = + _x3_ = 0 === c$5 ? [0, x1$0, [0, x2$0, 0]] : 0 <= c$5 ? [0, x3, [0, x1$0, [0, x2$0, 0]]] : [0, x1$0, [0, x3, [0, x2$0, 0]]], - _xT_ = _xU_; + _x2_ = _x3_; else - var _xT_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; - var s$0 = _xT_; + var _x2_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; + var s$0 = _x2_; } return [0, s$0, tl$1]; } @@ -5232,61 +5232,61 @@ } } else if(3 === n && l){ - var _xJ_ = l[2]; - if(_xJ_){ - var match$2 = _xJ_[2]; + var _xS_ = l[2]; + if(_xS_){ + var match$2 = _xS_[2]; if(match$2){ var tl$1 = match$2[2], x3 = match$2[1], - x2$0 = _xJ_[1], + x2$0 = _xS_[1], x1$0 = l[1], c$0 = caml_call2(cmp, x1$0, x2$0); if(0 === c$0) var c$1 = caml_call2(cmp, x2$0, x3), - _xK_ = + _xT_ = 0 === c$1 ? [0, x2$0, 0] : 0 < c$1 ? [0, x2$0, [0, x3, 0]] : [0, x3, [0, x2$0, 0]], - s$0 = _xK_; + s$0 = _xT_; else if(0 < c$0){ var c$2 = caml_call2(cmp, x2$0, x3); if(0 === c$2) - var _xL_ = [0, x1$0, [0, x2$0, 0]]; + var _xU_ = [0, x1$0, [0, x2$0, 0]]; else if(0 < c$2) - var _xL_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; + var _xU_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; else var c$3 = caml_call2(cmp, x1$0, x3), - _xM_ = + _xV_ = 0 === c$3 ? [0, x1$0, [0, x2$0, 0]] : 0 < c$3 ? [0, x1$0, [0, x3, [0, x2$0, 0]]] : [0, x3, [0, x1$0, [0, x2$0, 0]]], - _xL_ = _xM_; - var s$0 = _xL_; + _xU_ = _xV_; + var s$0 = _xU_; } else{ var c$4 = caml_call2(cmp, x1$0, x3); if(0 === c$4) - var _xN_ = [0, x2$0, [0, x1$0, 0]]; + var _xW_ = [0, x2$0, [0, x1$0, 0]]; else if(0 < c$4) - var _xN_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; + var _xW_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; else var c$5 = caml_call2(cmp, x2$0, x3), - _xO_ = + _xX_ = 0 === c$5 ? [0, x2$0, [0, x1$0, 0]] : 0 < c$5 ? [0, x2$0, [0, x3, [0, x1$0, 0]]] : [0, x3, [0, x2$0, [0, x1$0, 0]]], - _xN_ = _xO_; - var s$0 = _xN_; + _xW_ = _xX_; + var s$0 = _xW_; } return [0, s$0, tl$1]; } @@ -5306,7 +5306,7 @@ var len = length(l); return 2 <= len ? sort(len, l)[1] : l; } - function compare(_xI_, _xH_){return caml_int_compare(_xI_, _xH_);} + function compare(_xR_, _xQ_){return caml_int_compare(_xR_, _xQ_);} function min(x, y){return x <= y ? x : y;} function max$0(x, y){return y <= x ? x : y;} function to_string(x){return "" + x;} @@ -5353,9 +5353,9 @@ return invalid_arg(_z_); } function escaped$0(s){ - var n = [0, 0], _xA_ = caml_ml_bytes_length(s) - 1 | 0, _xz_ = 0; - if(_xA_ >= 0){ - var i$0 = _xz_; + var n = [0, 0], _xJ_ = caml_ml_bytes_length(s) - 1 | 0, _xI_ = 0; + if(_xJ_ >= 0){ + var i$0 = _xI_; for(;;){ var match = caml_bytes_unsafe_get(s, i$0); a: @@ -5365,12 +5365,12 @@ c: { if(32 <= match){ - var _xE_ = match - 34 | 0; - if(58 < _xE_ >>> 0){ - if(93 <= _xE_) break c; + var _xN_ = match - 34 | 0; + if(58 < _xN_ >>> 0){ + if(93 <= _xN_) break c; } - else if(56 < _xE_ - 1 >>> 0) break b; - var _xF_ = 1; + else if(56 < _xN_ - 1 >>> 0) break b; + var _xO_ = 1; break a; } if(11 <= match){ @@ -5378,23 +5378,23 @@ } else if(8 <= match) break b; } - var _xF_ = 4; + var _xO_ = 4; break a; } - var _xF_ = 2; + var _xO_ = 2; } - n[1] = n[1] + _xF_ | 0; - var _xG_ = i$0 + 1 | 0; - if(_xA_ === i$0) break; - var i$0 = _xG_; + n[1] = n[1] + _xO_ | 0; + var _xP_ = i$0 + 1 | 0; + if(_xJ_ === i$0) break; + i$0 = _xP_; } } if(n[1] === caml_ml_bytes_length(s)) return copy(s); var s$0 = caml_create_bytes(n[1]); n[1] = 0; - var _xC_ = caml_ml_bytes_length(s) - 1 | 0, _xB_ = 0; - if(_xC_ >= 0){ - var i = _xB_; + var _xL_ = caml_ml_bytes_length(s) - 1 | 0, _xK_ = 0; + if(_xL_ >= 0){ + var i = _xK_; for(;;){ var c = caml_bytes_unsafe_get(s, i); a: @@ -5452,9 +5452,9 @@ caml_bytes_unsafe_set(s$0, n[1], c); } n[1]++; - var _xD_ = i + 1 | 0; - if(_xC_ === i) break; - var i = _xD_; + var _xM_ = i + 1 | 0; + if(_xL_ === i) break; + i = _xM_; } } return s$0; @@ -5462,21 +5462,21 @@ function map$2(f, s){ var l = caml_ml_bytes_length(s); if(0 === l) return s; - var r = caml_create_bytes(l), _xx_ = l - 1 | 0, _xw_ = 0; - if(_xx_ >= 0){ - var i = _xw_; + var r = caml_create_bytes(l), _xG_ = l - 1 | 0, _xF_ = 0; + if(_xG_ >= 0){ + var i = _xF_; for(;;){ caml_bytes_unsafe_set(r, i, caml_call1(f, caml_bytes_unsafe_get(s, i))); - var _xy_ = i + 1 | 0; - if(_xx_ === i) break; - var i = _xy_; + var _xH_ = i + 1 | 0; + if(_xG_ === i) break; + i = _xH_; } } return r; } function uppercase_ascii$0(s){return map$2(uppercase_ascii, s);} - function unsafe_of_string(_xv_){return caml_bytes_of_string(_xv_);} - function unsafe_to_string(_xu_){return caml_string_of_bytes(_xu_);} + function unsafe_of_string(_xE_){return caml_bytes_of_string(_xE_);} + function unsafe_to_string(_xD_){return caml_string_of_bytes(_xD_);} function make$1(n, c){return unsafe_to_string(make$0(n, c));} function sub$0(s, ofs, len){ return unsafe_to_string(sub(unsafe_of_string(s), ofs, len)); @@ -5491,9 +5491,9 @@ var tl = param$0[2], acc$1 = - ensure_ge((caml_ml_string_length(hd) + seplen | 0) + acc$0 | 0, acc$0), - acc$0 = acc$1, - param$0 = tl; + ensure_ge((caml_ml_string_length(hd) + seplen | 0) + acc$0 | 0, acc$0); + acc$0 = acc$1; + param$0 = tl; } } function unsafe_blits(dst, pos, sep, seplen, param){ @@ -5509,10 +5509,9 @@ caml_blit_string(hd, 0, dst, pos$0, caml_ml_string_length(hd)); caml_blit_string (sep, 0, dst, pos$0 + caml_ml_string_length(hd) | 0, seplen); - var - pos$1 = (pos$0 + caml_ml_string_length(hd) | 0) + seplen | 0, - pos$0 = pos$1, - param$0 = tl; + var pos$1 = (pos$0 + caml_ml_string_length(hd) | 0) + seplen | 0; + pos$0 = pos$1; + param$0 = tl; } } function concat(sep, l){ @@ -5531,14 +5530,15 @@ var i$0 = i; for(;;){ if(n <= i$0) return s; - var _xt_ = caml_string_unsafe_get(s, i$0) - 32 | 0; + var _xC_ = caml_string_unsafe_get(s, i$0) - 32 | 0; a: { - if(59 < _xt_ >>> 0){ - if(33 < _xt_ - 61 >>> 0) break a; + if(59 < _xC_ >>> 0){ + if(33 < _xC_ - 61 >>> 0) break a; } - else if(2 === _xt_) break a; - var i$1 = i$0 + 1 | 0, i$0 = i$1; + else if(2 === _xC_) break a; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; continue; } return unsafe_to_string(escaped$0(unsafe_of_string(s))); @@ -5551,17 +5551,18 @@ for(;;){ if(lim <= i$0) throw caml_maybe_attach_backtrace(Not_found, 1); if(caml_string_unsafe_get(s, i$0) === c) return i$0; - var i$1 = i$0 + 1 | 0, i$0 = i$1; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; } } 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); var _xr_ = 1; return _xr_;} - catch(_xs_){ - var _xq_ = caml_wrap_exception(_xs_); - if(_xq_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_xq_, 0); + try{index_rec(s, l, i, c); var _xA_ = 1; return _xA_;} + catch(_xB_){ + var _xz_ = caml_wrap_exception(_xB_); + if(_xz_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_xz_, 0); } return invalid_arg(_C_); } @@ -5570,15 +5571,30 @@ return unsafe_to_string(uppercase_ascii$0(unsafe_of_string(s))); } function compare$0(x, y){return caml_string_compare(x, y);} - function symbol$1(_xp_, _xo_){return caml_string_equal(_xp_, _xo_);} + function symbol$0(_xy_, _xx_){return _xy_ == _xx_ ? 1 : 0;} + function init$0(l, f){ + if(0 === l) return [0]; + if(0 > l) return invalid_arg(_D_); + var res = caml_make_vect(l, caml_call1(f, 0)), _xv_ = l - 1 | 0, _xu_ = 1; + if(_xv_ >= 1){ + var i = _xu_; + for(;;){ + res[1 + i] = caml_call1(f, i); + var _xw_ = i + 1 | 0; + if(_xv_ === i) break; + i = _xw_; + } + } + return res; + } function sub$1(a, ofs, len){ if(0 <= ofs && 0 <= len && (a.length - 1 - len | 0) >= ofs) return caml_array_sub(a, ofs, len); - return invalid_arg(_D_); + return invalid_arg(_E_); } function fill(a, ofs, len, v){ if(0 <= ofs && 0 <= len && (a.length - 1 - len | 0) >= ofs){caml_array_fill(a, ofs, len, v); return;} - return invalid_arg(_E_); + return invalid_arg(_F_); } function blit$0(a1, ofs1, a2, ofs2, len){ if @@ -5591,18 +5607,18 @@ caml_array_blit(a1, ofs1, a2, ofs2, len); return; } - return invalid_arg(_F_); + return invalid_arg(_G_); } function iter2(f, a, b){ - if(a.length - 1 !== b.length - 1) return invalid_arg(_G_); - var _xm_ = a.length - 1 - 1 | 0, _xl_ = 0; - if(_xm_ >= 0){ - var i = _xl_; + if(a.length - 1 !== b.length - 1) return invalid_arg(_H_); + var _xs_ = a.length - 2 | 0, _xr_ = 0; + if(_xs_ >= 0){ + var i = _xr_; for(;;){ caml_call2(f, a[1 + i], b[1 + i]); - var _xn_ = i + 1 | 0; - if(_xm_ === i) break; - var i = _xn_; + var _xt_ = i + 1 | 0; + if(_xs_ === i) break; + i = _xt_; } } return 0; @@ -5612,24 +5628,20 @@ var i$0 = i, res$0 = res; for(;;){ if(0 > i$0) return res$0; - var - res$1 = [0, a[1 + i$0], res$0], - i$1 = i$0 - 1 | 0, - i$0 = i$1, - res$0 = res$1; + var res$1 = [0, a[1 + i$0], res$0], i$1 = i$0 - 1 | 0; + i$0 = i$1; + res$0 = res$1; } } - return tolist(a.length - 1 - 1 | 0, 0); + return tolist(a.length - 2 | 0, 0); } function list_length(accu, param){ var accu$0 = accu, param$0 = param; for(;;){ if(! param$0) return accu$0; - var - t = param$0[2], - accu$1 = accu$0 + 1 | 0, - accu$0 = accu$1, - param$0 = t; + var t = param$0[2], accu$1 = accu$0 + 1 | 0; + accu$0 = accu$1; + param$0 = t; } } function of_list(l){ @@ -5641,20 +5653,22 @@ if(! param$0) return a; var tl = param$0[2], hd = param$0[1]; a[1 + i$0] = hd; - var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = tl; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; + param$0 = tl; } } return fill(1, tl); } function fold_right(f, a, x){ - var r = [0, x], _xj_ = a.length - 1 - 1 | 0; - if(_xj_ >= 0){ - var i = _xj_; + var r = [0, x], _xp_ = a.length - 2 | 0; + if(_xp_ >= 0){ + var i = _xp_; for(;;){ r[1] = caml_call2(f, a[1 + i], r[1]); - var _xk_ = i - 1 | 0; + var _xq_ = i - 1 | 0; if(0 === i) break; - var i = _xk_; + i = _xq_; } } return r[1]; @@ -5672,7 +5686,7 @@ var newlen = min(2 * caml_ml_bytes_length(lexbuf[2]) | 0, max_string_length); - if(newlen < ((lexbuf[3] - lexbuf[5] | 0) + n | 0)) failwith(_H_); + if(newlen < ((lexbuf[3] - lexbuf[5] | 0) + n | 0)) failwith(_I_); var newbuf = caml_create_bytes(newlen); blit(lexbuf[2], lexbuf[5], newbuf, 0, lexbuf[3] - lexbuf[5] | 0); lexbuf[2] = newbuf; @@ -5683,15 +5697,15 @@ lexbuf[5] = 0; lexbuf[7] = lexbuf[7] - s | 0; lexbuf[3] = lexbuf[3] - s | 0; - var t = lexbuf[10], _xh_ = t.length - 1 - 1 | 0, _xg_ = 0; - if(_xh_ >= 0){ - var i = _xg_; + var t = lexbuf[10], _xn_ = t.length - 2 | 0, _xm_ = 0; + if(_xn_ >= 0){ + var i = _xm_; for(;;){ var v = caml_check_bound(t, i)[1 + i]; if(0 <= v) caml_check_bound(t, i)[1 + i] = v - s | 0; - var _xi_ = i + 1 | 0; - if(_xh_ === i) break; - var i = _xi_; + var _xo_ = i + 1 | 0; + if(_xn_ === i) break; + i = _xo_; } } } @@ -5705,11 +5719,11 @@ else var with_positions = 1; var - _xc_ = with_positions ? zero_pos : dummy_pos, - _xd_ = with_positions ? zero_pos : dummy_pos, - _xe_ = caml_create_bytes(512); + _xi_ = with_positions ? zero_pos : dummy_pos, + _xj_ = with_positions ? zero_pos : dummy_pos, + _xk_ = caml_create_bytes(512); return [0, - function(_xf_){return lex_refill(f, _xe_, _xf_);}, + function(_xl_){return lex_refill(f, _xk_, _xl_);}, caml_create_bytes(1024), 0, 0, @@ -5719,8 +5733,8 @@ 0, 0, [0], - _xd_, - _xc_]; + _xj_, + _xi_]; } function from_channel(with_positions, ic){ return from_function @@ -5732,8 +5746,8 @@ else var with_positions = 1; var - _xa_ = with_positions ? zero_pos : dummy_pos, - _xb_ = with_positions ? zero_pos : dummy_pos; + _xg_ = with_positions ? zero_pos : dummy_pos, + _xh_ = with_positions ? zero_pos : dummy_pos; return [0, function(lexbuf){lexbuf[9] = 1; return 0;}, of_string(s), @@ -5745,8 +5759,8 @@ 0, 1, [0], - _xb_, - _xa_]; + _xh_, + _xg_]; } function lexeme(lexbuf){ var len = lexbuf[6] - lexbuf[5] | 0; @@ -5761,30 +5775,30 @@ 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 _w$_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _w$_]; + var _xf_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _xf_]; } 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; if((hr + 2 | 0) < hl){ - if(! l) return invalid_arg(_J_); - var lr = l[3], lv = l[2], ll = l[1], _w6_ = height(lr); - if(_w6_ <= height(ll)) return create(ll, lv, create(lr, v, r)); - if(! lr) return invalid_arg(_I_); - var lrr = lr[3], lrv = lr[2], lrl = lr[1], _w7_ = create(lrr, v, r); - return create(create(ll, lv, lrl), lrv, _w7_); + if(! l) return invalid_arg(_K_); + var lr = l[3], lv = l[2], ll = l[1], _xa_ = height(lr); + if(_xa_ <= height(ll)) return create(ll, lv, create(lr, v, r)); + if(! lr) return invalid_arg(_J_); + var lrr = lr[3], lrv = lr[2], lrl = lr[1], _xb_ = create(lrr, v, r); + return create(create(ll, lv, lrl), lrv, _xb_); } if((hl + 2 | 0) >= hr){ - var _w__ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _w__]; + var _xe_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _xe_]; } - if(! r) return invalid_arg(_L_); - var rr = r[3], rv = r[2], rl = r[1], _w8_ = height(rl); - if(_w8_ <= height(rr)) return create(create(l, v, rl), rv, rr); - if(! rl) return invalid_arg(_K_); - var rlr = rl[3], rlv = rl[2], rll = rl[1], _w9_ = create(rlr, rv, rr); - return create(create(l, v, rll), rlv, _w9_); + if(! r) return invalid_arg(_M_); + var rr = r[3], rv = r[2], rl = r[1], _xc_ = height(rl); + if(_xc_ <= height(rr)) return create(create(l, v, rl), rv, rr); + if(! rl) return invalid_arg(_L_); + var rlr = rl[3], rlv = rl[2], rll = rl[1], _xd_ = create(rlr, rv, rr); + return create(create(l, v, rll), rlv, _xd_); } function add(x, t){ if(! t) return [0, 0, x, 0, 1]; @@ -5832,11 +5846,11 @@ if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); var l = param$0[1]; if(! l){var v = param$0[2]; return v;} - var param$0 = l; + param$0 = l; } } function remove_min_elt(param){ - if(! param) return invalid_arg(_M_); + if(! param) return invalid_arg(_N_); var l = param[1]; if(l){ var r = param[3], v = param[2]; @@ -5848,17 +5862,17 @@ function merge(t1, t2){ if(! t1) return t2; if(! t2) return t1; - var _w5_ = remove_min_elt(t2); - return bal(t1, min_elt(t2), _w5_); + var _w$_ = remove_min_elt(t2); + return bal(t1, min_elt(t2), _w$_); } function concat(t1, t2){ if(! t1) return t2; if(! t2) return t1; - var _w4_ = remove_min_elt(t2); - return join(t1, min_elt(t2), _w4_); + var _w__ = remove_min_elt(t2); + return join(t1, min_elt(t2), _w__); } function split(x, param){ - if(! param) return _N_; + if(! param) return _O_; var r = param[3], v = param[2], @@ -5887,9 +5901,10 @@ v = param$0[2], l = param$0[1], c = caml_call2(Ord[1], x, v), - _w3_ = 0 === c ? 1 : 0; - if(_w3_) return _w3_; - var r$0 = 0 <= c ? r : l, param$0 = r$0; + _w9_ = 0 === c ? 1 : 0; + if(_w9_) return _w9_; + var r$0 = 0 <= c ? r : l; + param$0 = r$0; } } function remove(x, t){ @@ -5918,16 +5933,16 @@ match = split(v1, s2), r2$0 = match[3], l2$0 = match[1], - _w1_ = union(r1, r2$0); - return join(union(l1, l2$0), v1, _w1_); + _w7_ = union(r1, r2$0); + return join(union(l1, l2$0), v1, _w7_); } if(1 === h1) return add(v1, s2); var match$0 = split(v2, s1), r1$0 = match$0[3], l1$0 = match$0[1], - _w2_ = union(r1$0, r2); - return join(union(l1$0, l2), v2, _w2_); + _w8_ = union(r1$0, r2); + return join(union(l1$0, l2), v2, _w8_); } function inter(s1, s2){ if(! s1) return 0; @@ -5936,14 +5951,14 @@ r1 = s1[3], v1 = s1[2], l1 = s1[1], - _wY_ = split(v1, s2), - l2 = _wY_[1]; - if(_wY_[2]){ - var r2 = _wY_[3], _wZ_ = inter(r1, r2); - return join(inter(l1, l2), v1, _wZ_); + _w4_ = split(v1, s2), + l2 = _w4_[1]; + if(_w4_[2]){ + var r2 = _w4_[3], _w5_ = inter(r1, r2); + return join(inter(l1, l2), v1, _w5_); } - var r2$0 = _wY_[3], _w0_ = inter(r1, r2$0); - return concat(inter(l1, l2), _w0_); + var r2$0 = _w4_[3], _w6_ = inter(r1, r2$0); + return concat(inter(l1, l2), _w6_); } function diff(s1, s2){ if(! s1) return 0; @@ -5952,26 +5967,22 @@ r1 = s1[3], v1 = s1[2], l1 = s1[1], - _wV_ = split(v1, s2), - l2 = _wV_[1]; - if(_wV_[2]){ - var r2 = _wV_[3], _wW_ = diff(r1, r2); - return concat(diff(l1, l2), _wW_); + _w1_ = split(v1, s2), + l2 = _w1_[1]; + if(_w1_[2]){ + var r2 = _w1_[3], _w2_ = diff(r1, r2); + return concat(diff(l1, l2), _w2_); } - var r2$0 = _wV_[3], _wX_ = diff(r1, r2$0); - return join(diff(l1, l2), v1, _wX_); + var r2$0 = _w1_[3], _w3_ = diff(r1, r2$0); + return join(diff(l1, l2), v1, _w3_); } function cons_enum(s, e){ var s$0 = s, e$0 = e; for(;;){ if(! s$0) return e$0; - var - r = s$0[3], - v = s$0[2], - l = s$0[1], - e$1 = [0, v, r, e$0], - s$0 = l, - e$0 = e$1; + var r = s$0[3], v = s$0[2], l = s$0[1], e$1 = [0, v, r, e$0]; + s$0 = l; + e$0 = e$1; } } function compare_aux(e1, e2){ @@ -5988,16 +5999,14 @@ v1 = e1$0[1], c = caml_call2(Ord[1], v1, v2); if(0 !== c) return c; - var - e2$2 = cons_enum(r2, e2$1), - e1$2 = cons_enum(r1, e1$1), - e1$0 = e1$2, - e2$0 = e2$2; + var e2$2 = cons_enum(r2, e2$1), e1$2 = cons_enum(r1, e1$1); + e1$0 = e1$2; + e2$0 = e2$2; } } function compare(s1, s2){ - var _wU_ = cons_enum(s2, 0); - return compare_aux(cons_enum(s1, 0), _wU_); + var _w0_ = cons_enum(s2, 0); + return compare_aux(cons_enum(s1, 0), _w0_); } function equal(s1, s2){return 0 === compare(s1, s2) ? 1 : 0;} function subset(s1, s2){ @@ -6014,19 +6023,20 @@ l1 = s1$0[1], c = caml_call2(Ord[1], v1, v2); if(0 === c){ - var _wR_ = subset(l1, l2); - if(! _wR_) return _wR_; - var s1$0 = r1, s2$0 = r2; + var _wX_ = subset(l1, l2); + if(! _wX_) return _wX_; + s1$0 = r1; + s2$0 = r2; } else if(0 <= c){ - var _wS_ = subset([0, 0, v1, r1, 0], r2); - if(! _wS_) return _wS_; - var s1$0 = l1; + var _wY_ = subset([0, 0, v1, r1, 0], r2); + if(! _wY_) return _wY_; + s1$0 = l1; } else{ - var _wT_ = subset([0, l1, v1, 0, 0], l2); - if(! _wT_) return _wT_; - var s1$0 = r1; + var _wZ_ = subset([0, l1, v1, 0, 0], l2); + if(! _wZ_) return _wZ_; + s1$0 = r1; } } } @@ -6037,7 +6047,7 @@ var r = param$0[3], v = param$0[2], l = param$0[1]; iter(f, l); caml_call1(f, v); - var param$0 = r; + param$0 = r; } } function fold(f, s, accu){ @@ -6048,9 +6058,9 @@ r = s$0[3], v = s$0[2], l = s$0[1], - accu$1 = caml_call2(f, v, fold(f, l, accu$0)), - s$0 = r, - accu$0 = accu$1; + accu$1 = caml_call2(f, v, fold(f, l, accu$0)); + s$0 = r; + accu$0 = accu$1; } } function cardinal(param){ @@ -6068,9 +6078,9 @@ r = param$0[3], v = param$0[2], l = param$0[1], - accu$1 = [0, v, elements_aux(accu$0, r)], - accu$0 = accu$1, - param$0 = l; + accu$1 = [0, v, elements_aux(accu$0, r)]; + accu$0 = accu$1; + param$0 = l; } } function elements(s){return elements_aux(0, s);} @@ -6078,11 +6088,8 @@ var param$0 = param; for(;;){ if(! param$0) return; - var - r = param$0[3], - v0$0 = param$0[2], - l = param$0[1], - param$0 = caml_call1(f, v0$0) ? r : l; + var r = param$0[3], v0$0 = param$0[2], l = param$0[1]; + param$0 = caml_call1(f, v0$0) ? r : l; } } function find_last_opt(f, param){ @@ -6091,7 +6098,7 @@ if(! param$0) return; var r = param$0[3], v = param$0[2], l = param$0[1]; if(caml_call1(f, v)) return find_last_opt_aux(v, f, r); - var param$0 = l; + param$0 = l; } } function of_sorted_list(l){ @@ -6114,14 +6121,14 @@ break; default: if(l){ - var _wQ_ = l[2]; - if(_wQ_){ - var match$2 = _wQ_[2]; + var _wW_ = l[2]; + if(_wW_){ + var match$2 = _wW_[2]; if(match$2){ var l$5 = match$2[2], x2 = match$2[1], - x1$0 = _wQ_[1], + x1$0 = _wW_[1], x0$1 = l[1]; return [0, [0, [0, 0, x0$1, 0, 1], x1$0, [0, 0, x2, 0, 1], 2], @@ -6132,7 +6139,7 @@ } 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, _O_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _P_], 1); var l$1 = l$0[2], mid = l$0[1], @@ -6145,16 +6152,16 @@ } function of_list(l){ if(! l) return empty; - var _wM_ = l[2], x0 = l[1]; - if(! _wM_) return singleton(x0); - var _wN_ = _wM_[2], x1 = _wM_[1]; - if(! _wN_) return add(x1, singleton(x0)); - var _wO_ = _wN_[2], x2 = _wN_[1]; - if(! _wO_) return add(x2, add(x1, singleton(x0))); - var _wP_ = _wO_[2], x3 = _wO_[1]; - if(! _wP_) return add(x3, add(x2, add(x1, singleton(x0)))); - if(_wP_[2]) return of_sorted_list(sort_uniq(Ord[1], l)); - var x4 = _wP_[1]; + var _wS_ = l[2], x0 = l[1]; + if(! _wS_) return singleton(x0); + var _wT_ = _wS_[2], x1 = _wS_[1]; + if(! _wT_) return add(x1, singleton(x0)); + var _wU_ = _wT_[2], x2 = _wT_[1]; + if(! _wU_) return add(x2, add(x1, singleton(x0))); + var _wV_ = _wU_[2], x3 = _wU_[1]; + if(! _wV_) return add(x3, add(x2, add(x1, singleton(x0)))); + if(_wV_[2]) return of_sorted_list(sort_uniq(Ord[1], l)); + var x4 = _wV_[1]; return add(x4, add(x3, add(x2, add(x1, singleton(x0))))); } return [0, @@ -6216,32 +6223,32 @@ , of_list]; } - function _P_(_wK_){ - var _wL_ = Make(_wK_); + function _Q_(_wQ_){ + var _wR_ = Make(_wQ_); return [0, - _wL_[17], - _wL_[18], - _wL_[19], - _wL_[4], + _wR_[17], + _wR_[18], + _wR_[19], + _wR_[4], , - _wL_[20], - _wL_[21], - _wL_[22], + _wR_[20], + _wR_[21], + _wR_[22], , - _wL_[25], - _wL_[28], - _wL_[29], - _wL_[30], - _wL_[31], + _wR_[25], + _wR_[28], + _wR_[29], + _wR_[30], + _wR_[31], , - _wL_[32], + _wR_[32], , , , , , - _wL_[37], - _wL_[39], + _wR_[37], + _wR_[39], , , , @@ -6254,8 +6261,8 @@ , , , - _wL_[50], - _wL_[57]]; + _wR_[50], + _wR_[57]]; } function create(param){return [0, 0, 0];} function clear(s){s[1] = 0; s[2] = 0; return;} @@ -6275,7 +6282,7 @@ return [0, hd]; } function iter$1(f, s){return iter$0(f, s[1]);} - var Empty = [248, _Q_, caml_fresh_oo_id(0)]; + var Empty = [248, _R_, caml_fresh_oo_id(0)]; function create$0(param){return [0, 0, 0, 0];} function clear$0(q){q[1] = 0; q[2] = 0; q[3] = 0; return;} function add(x, q){ @@ -6291,11 +6298,11 @@ return [0, content]; } function take(q){ - var _wJ_ = q[2]; - if(! _wJ_) throw caml_maybe_attach_backtrace(Empty, 1); - var content = _wJ_[1]; - if(_wJ_[2]){ - var next = _wJ_[2]; + var _wP_ = q[2]; + if(! _wP_) throw caml_maybe_attach_backtrace(Empty, 1); + var content = _wP_[1]; + if(_wP_[2]){ + var next = _wP_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return content; @@ -6304,11 +6311,11 @@ return content; } function take_opt(q){ - var _wI_ = q[2]; - if(! _wI_) return 0; - var content = _wI_[1]; - if(_wI_[2]){ - var next = _wI_[2]; + var _wO_ = q[2]; + if(! _wO_) return 0; + var content = _wO_[1]; + if(_wO_[2]){ + var next = _wO_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return [0, content]; @@ -6324,7 +6331,7 @@ if(! cell$0) return; var content = cell$0[1], next = cell$0[2]; caml_call1(f, content); - var cell$0 = next; + cell$0 = next; } } function iter$3(f, q){return iter$2(f, q[2]);} @@ -6340,7 +6347,7 @@ function sub$2(b, ofs, len){ if(0 <= ofs && 0 <= len && (b[2] - len | 0) >= ofs) return sub_string(b[1], ofs, len); - return invalid_arg(_R_); + return invalid_arg(_S_); } function length$1(b){return b[2];} function reset(b){ @@ -6359,15 +6366,15 @@ if((old_pos + more | 0) <= max_string_length) new_len[1] = max_string_length; else - failwith(_V_); + failwith(_W_); var new_buffer = caml_create_bytes(new_len[1]); blit(b[1], 0, new_buffer, 0, b[2]); b[1] = new_buffer; b[3] = new_len[1]; if((b[2] + more | 0) > b[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _U_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _V_], 1); if((old_pos + more | 0) <= b[3]) return; - throw caml_maybe_attach_backtrace([0, Assert_failure, _S_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _U_], 1); } function add_char(b, c){ var pos = b[2]; @@ -6377,14 +6384,14 @@ return 0; } function add_substring(b, s, offset, len){ - var _wF_ = offset < 0 ? 1 : 0; - if(_wF_) - var _wG_ = _wF_; + var _wL_ = offset < 0 ? 1 : 0; + if(_wL_) + var _wM_ = _wL_; else var - _wH_ = len < 0 ? 1 : 0, - _wG_ = _wH_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); - if(_wG_) invalid_arg(_W_); + _wN_ = len < 0 ? 1 : 0, + _wM_ = _wN_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); + if(_wM_) invalid_arg(_X_); var new_position = b[2] + len | 0; if(b[3] < new_position) resize(b, len); caml_blit_string(s, offset, b[1], b[2], len); @@ -6463,25 +6470,26 @@ if(typeof formatting_lit === "number") switch(formatting_lit){ case 0: - return _X_; - case 1: return _Y_; - case 2: + case 1: return _Z_; - case 3: + case 2: return ___; - case 4: + case 3: return _$_; - case 5: + case 4: return _aa_; - default: return _ab_; + case 5: + return _ab_; + default: return _ac_; } switch(formatting_lit[0]){ case 0: var str = formatting_lit[1]; return str; case 1: var str$0 = formatting_lit[1]; return str$0; - default: var c = formatting_lit[1]; return symbol(_ac_, make$1(1, c)); + default: + var c = formatting_lit[1]; return symbol_concat(_ad_, make$1(1, c)); } } function bprint_fmtty(buf, fmtty){ @@ -6491,82 +6499,82 @@ switch(fmtty$0[0]){ case 0: var fmtty$1 = fmtty$0[1]; - buffer_add_string(buf, _ad_); - var fmtty$0 = fmtty$1; + buffer_add_string(buf, _ae_); + fmtty$0 = fmtty$1; break; case 1: var fmtty$2 = fmtty$0[1]; - buffer_add_string(buf, _ae_); - var fmtty$0 = fmtty$2; + buffer_add_string(buf, _af_); + fmtty$0 = fmtty$2; break; case 2: var fmtty$3 = fmtty$0[1]; - buffer_add_string(buf, _af_); - var fmtty$0 = fmtty$3; + buffer_add_string(buf, _ag_); + fmtty$0 = fmtty$3; break; case 3: var fmtty$4 = fmtty$0[1]; - buffer_add_string(buf, _ag_); - var fmtty$0 = fmtty$4; + buffer_add_string(buf, _ah_); + fmtty$0 = fmtty$4; break; case 4: var fmtty$5 = fmtty$0[1]; - buffer_add_string(buf, _ah_); - var fmtty$0 = fmtty$5; + buffer_add_string(buf, _ai_); + fmtty$0 = fmtty$5; break; case 5: var fmtty$6 = fmtty$0[1]; - buffer_add_string(buf, _ai_); - var fmtty$0 = fmtty$6; + buffer_add_string(buf, _aj_); + fmtty$0 = fmtty$6; break; case 6: var fmtty$7 = fmtty$0[1]; - buffer_add_string(buf, _aj_); - var fmtty$0 = fmtty$7; + buffer_add_string(buf, _ak_); + fmtty$0 = fmtty$7; break; case 7: var fmtty$8 = fmtty$0[1]; - buffer_add_string(buf, _ak_); - var fmtty$0 = fmtty$8; + buffer_add_string(buf, _al_); + fmtty$0 = fmtty$8; break; case 8: var fmtty$9 = fmtty$0[2], sub_fmtty = fmtty$0[1]; - buffer_add_string(buf, _al_); - bprint_fmtty(buf, sub_fmtty); buffer_add_string(buf, _am_); - var fmtty$0 = fmtty$9; + bprint_fmtty(buf, sub_fmtty); + buffer_add_string(buf, _an_); + fmtty$0 = fmtty$9; break; case 9: var fmtty$10 = fmtty$0[3], sub_fmtty$0 = fmtty$0[1]; - buffer_add_string(buf, _an_); - bprint_fmtty(buf, sub_fmtty$0); buffer_add_string(buf, _ao_); - var fmtty$0 = fmtty$10; + bprint_fmtty(buf, sub_fmtty$0); + buffer_add_string(buf, _ap_); + fmtty$0 = fmtty$10; break; case 10: var fmtty$11 = fmtty$0[1]; - buffer_add_string(buf, _ap_); - var fmtty$0 = fmtty$11; + buffer_add_string(buf, _aq_); + fmtty$0 = fmtty$11; break; case 11: var fmtty$12 = fmtty$0[1]; - buffer_add_string(buf, _aq_); - var fmtty$0 = fmtty$12; + buffer_add_string(buf, _ar_); + fmtty$0 = fmtty$12; break; case 12: var fmtty$13 = fmtty$0[1]; - buffer_add_string(buf, _ar_); - var fmtty$0 = fmtty$13; + buffer_add_string(buf, _as_); + fmtty$0 = fmtty$13; break; case 13: var fmtty$14 = fmtty$0[1]; - buffer_add_string(buf, _as_); - var fmtty$0 = fmtty$14; + buffer_add_string(buf, _at_); + fmtty$0 = fmtty$14; break; default: var fmtty$15 = fmtty$0[1]; - buffer_add_string(buf, _at_); - var fmtty$0 = fmtty$15; + buffer_add_string(buf, _au_); + fmtty$0 = fmtty$15; } } } @@ -7019,8 +7027,8 @@ var rest2$7 = ty2[2], ty2$0 = ty2[1], - _wE_ = trans(rest1$7, rest2$7); - return [8, trans(ty1$0, ty2$0), _wE_]; + _wK_ = trans(rest1$7, rest2$7); + return [8, trans(ty1$0, ty2$0), _wK_]; case 10: break a; case 11: @@ -7032,7 +7040,7 @@ case 14: break e; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aD_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aE_], 1); case 9: var rest1$8 = ty1[3], ty12 = ty1[2], ty11 = ty1[1]; if(typeof ty2 !== "number") @@ -7062,14 +7070,14 @@ case 14: break e; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aE_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aF_], 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, _aF_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aG_], 1); case 11: var rest1$10 = ty1[1]; if(typeof ty2 !== "number") @@ -7080,7 +7088,7 @@ var rest2$10 = ty2[1]; return [11, trans(rest1$10, rest2$10)]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aG_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aH_], 1); case 12: var rest1$11 = ty1[1]; if(typeof ty2 !== "number") @@ -7093,7 +7101,7 @@ var rest2$11 = ty2[1]; return [12, trans(rest1$11, rest2$11)]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aH_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aI_], 1); case 13: var rest1$12 = ty1[1]; if(typeof ty2 !== "number") @@ -7108,7 +7116,7 @@ var rest2$12 = ty2[1]; return [13, trans(rest1$12, rest2$12)]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aI_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aJ_], 1); default: var rest1$13 = ty1[1]; if(typeof ty2 !== "number") @@ -7125,9 +7133,9 @@ var rest2$13 = ty2[1]; return [14, trans(rest1$13, rest2$13)]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aJ_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aK_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aC_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aD_], 1); } if(typeof ty2 === "number") return 0; switch(ty2[0]){ @@ -7145,24 +7153,24 @@ break f; case 9: break; default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _au_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _av_], 1); } } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aw_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ax_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _av_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aw_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aB_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aC_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aA_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aB_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _az_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aA_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ay_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _az_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ax_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ay_], 1); } - var Type_mismatch = [248, _aK_, caml_fresh_oo_id(0)]; + var Type_mismatch = [248, _aL_, caml_fresh_oo_id(0)]; function type_padding(pad, fmtty){ if(typeof pad === "number") return [0, 0, fmtty]; if(0 === pad[0]){ @@ -7193,10 +7201,10 @@ throw caml_maybe_attach_backtrace(Type_mismatch, 1); } function type_format(fmt, fmtty){ - var _wD_ = type_format_gen(fmt, fmtty); - if(typeof _wD_[2] !== "number") + var _wJ_ = type_format_gen(fmt, fmtty); + if(typeof _wJ_[2] !== "number") throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var fmt$0 = _wD_[1]; + var fmt$0 = _wJ_[1]; return fmt$0; } function type_format_gen(fmt, fmtty){ @@ -7415,8 +7423,8 @@ fmt_rest$13 = fmt[3], sub_fmtty$1 = fmt[2], pad_opt$0 = fmt[1], - _wC_ = [0, erase_rel(sub_fmtty1)]; - if(caml_notequal([0, erase_rel(sub_fmtty$1)], _wC_)) + _wI_ = [0, erase_rel(sub_fmtty1)]; + if(caml_notequal([0, erase_rel(sub_fmtty$1)], _wI_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); var match$29 = type_format_gen(fmt_rest$13, erase_rel(fmtty_rest$10)), @@ -7552,11 +7560,11 @@ var sub_fmtty$0 = ign[2], pad_opt$0 = ign[1], - _wB_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), - match$0 = _wB_[2], + _wH_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), + match$0 = _wH_[2], fmtty$1 = match$0[2], fmt$1 = match$0[1], - sub_fmtty$1 = _wB_[1]; + sub_fmtty$1 = _wH_[1]; return [0, [23, [9, pad_opt$0, sub_fmtty$1], fmt$1], fmtty$1]; case 10: return type_ignored_param_one(ign, fmt, fmtty); @@ -7716,11 +7724,11 @@ sub_fmtty_rest$17 = sub_fmtty[3], sub2_fmtty$2 = sub_fmtty[2], sub1_fmtty$0 = sub_fmtty[1], - _wz_ = [0, erase_rel(sub1_fmtty)]; - if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _wz_)) + _wF_ = [0, erase_rel(sub1_fmtty)]; + if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _wF_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var _wA_ = [0, erase_rel(sub2_fmtty$1)]; - if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _wA_)) + var _wG_ = [0, erase_rel(sub2_fmtty$1)]; + if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _wG_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); var sub_fmtty$0 = trans(symm(sub1_fmtty), sub2_fmtty$1), @@ -7804,7 +7812,7 @@ padty$0 = 0 <= width ? padty : 0, width$0 = abs(width); if(width$0 <= len) return str; - var _wy_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _wy_); + var _wE_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _wE_); switch(padty$0){ case 0: blit_string(str, 0, res, 0, len); break; @@ -7896,131 +7904,131 @@ function format_of_iconv(param){ switch(param){ case 1: - return _aM_; - case 2: return _aN_; + case 2: + return _aO_; case 4: - return _aP_; - case 5: return _aQ_; - case 6: + case 5: return _aR_; - case 7: + case 6: return _aS_; - case 8: + case 7: return _aT_; - case 9: + case 8: return _aU_; - case 10: + case 9: return _aV_; - case 11: + case 10: return _aW_; + case 11: + return _aX_; case 0: case 13: - return _aL_; + return _aM_; case 3: case 14: - return _aO_; - default: return _aX_; + return _aP_; + default: return _aY_; } } function format_of_iconvL(param){ switch(param){ case 1: - return _aZ_; - case 2: return _a0_; + case 2: + return _a1_; case 4: - return _a2_; - case 5: return _a3_; - case 6: + case 5: return _a4_; - case 7: + case 6: return _a5_; - case 8: + case 7: return _a6_; - case 9: + case 8: return _a7_; - case 10: + case 9: return _a8_; - case 11: + case 10: return _a9_; + case 11: + return _a__; case 0: case 13: - return _aY_; + return _aZ_; case 3: case 14: - return _a1_; - default: return _a__; + return _a2_; + default: return _a$_; } } function format_of_iconvl(param){ switch(param){ case 1: - return _ba_; - case 2: return _bb_; + case 2: + return _bc_; case 4: - return _bd_; - case 5: return _be_; - case 6: + case 5: return _bf_; - case 7: + case 6: return _bg_; - case 8: + case 7: return _bh_; - case 9: + case 8: return _bi_; - case 10: + case 9: return _bj_; - case 11: + case 10: return _bk_; + case 11: + return _bl_; case 0: case 13: - return _a$_; + return _ba_; case 3: case 14: - return _bc_; - default: return _bl_; + return _bd_; + default: return _bm_; } } function format_of_iconvn(param){ switch(param){ case 1: - return _bn_; - case 2: return _bo_; + case 2: + return _bp_; case 4: - return _bq_; - case 5: return _br_; - case 6: + case 5: return _bs_; - case 7: + case 6: return _bt_; - case 8: + case 7: return _bu_; - case 9: + case 8: return _bv_; - case 10: + case 9: return _bw_; - case 11: + case 10: return _bx_; + case 11: + return _by_; case 0: case 13: - return _bm_; + return _bn_; case 3: case 14: - return _bp_; - default: return _by_; + return _bq_; + default: return _bz_; } } function format_of_fconv(fconv, prec){ var prec$0 = abs(prec), - symb = char_of_fconv(_bz_, fconv), + symb = char_of_fconv(_bA_, fconv), buf = buffer_create(16); buffer_add_char(buf, 37); bprint_fconv_flag(buf, fconv); @@ -8031,14 +8039,14 @@ } function transform_int_alt(iconv, s){ if(13 > iconv) return s; - var n = [0, 0], _wt_ = caml_ml_string_length(s) - 1 | 0, _ws_ = 0; - if(_wt_ >= 0){ - var i$0 = _ws_; + var n = [0, 0], _wz_ = caml_ml_string_length(s) - 1 | 0, _wy_ = 0; + if(_wz_ >= 0){ + var i$0 = _wy_; for(;;){ if(9 >= caml_string_unsafe_get(s, i$0) - 48 >>> 0) n[1]++; - var _wx_ = i$0 + 1 | 0; - if(_wt_ === i$0) break; - var i$0 = _wx_; + var _wD_ = i$0 + 1 | 0; + if(_wz_ === i$0) break; + i$0 = _wD_; } } var @@ -8050,18 +8058,18 @@ function put(c){caml_bytes_set(buf, pos[1], c); pos[1]++; return;} var left = [0, ((digits - 1 | 0) % 3 | 0) + 1 | 0], - _wv_ = caml_ml_string_length(s) - 1 | 0, - _wu_ = 0; - if(_wv_ >= 0){ - var i = _wu_; + _wB_ = caml_ml_string_length(s) - 1 | 0, + _wA_ = 0; + if(_wB_ >= 0){ + var i = _wA_; for(;;){ var c = caml_string_unsafe_get(s, i); if(9 < c - 48 >>> 0) put(c); - else{if(0 === left[1]){put(95); left[1] = 3;} left[1] += -1; put(c);} - var _ww_ = i + 1 | 0; - if(_wv_ === i) break; - var i = _ww_; + else{if(0 === left[1]){put(95); left[1] = 3;} left[1]--; put(c);} + var _wC_ = i + 1 | 0; + if(_wB_ === i) break; + i = _wC_; } } return unsafe_to_string(buf); @@ -8099,24 +8107,25 @@ var i$0 = i; for(;;){ if(i$0 === len) return 0; - var _wr_ = caml_string_get(str, i$0) - 46 | 0; + var _wx_ = caml_string_get(str, i$0) - 46 | 0; a: { - if(23 < _wr_ >>> 0){ - if(55 === _wr_) break a; + if(23 < _wx_ >>> 0){ + if(55 === _wx_) break a; } - else if(21 < _wr_ - 1 >>> 0) break a; - var i$1 = i$0 + 1 | 0, i$0 = i$1; + else if(21 < _wx_ - 1 >>> 0) break a; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; continue; } return 1; } } - return is_valid(0) ? str : symbol(str, _bA_); + return is_valid(0) ? str : symbol_concat(str, _bB_); } function caml_special_val(str){ var match = caml_classify_float(x); - return 3 === match ? x < 0. ? _bB_ : _bC_ : 4 <= match ? _bD_ : str; + return 3 === match ? x < 0. ? _bC_ : _bD_ : 4 <= match ? _bE_ : str; } switch(fconv[2]){ case 5: @@ -8216,27 +8225,19 @@ var rest$8 = fmt$0[2], pad$6 = fmt$0[1]; return make_padding(k$0, acc$0, rest$8, pad$6, string_of_bool); case 10: - var - rest$9 = fmt$0[1], - acc$1 = [7, acc$0], - acc$0 = acc$1, - fmt$0 = rest$9; + var rest$9 = fmt$0[1], acc$1 = [7, acc$0]; + acc$0 = acc$1; + fmt$0 = rest$9; break; case 11: - var - rest$10 = fmt$0[2], - str = fmt$0[1], - acc$2 = [2, acc$0, str], - acc$0 = acc$2, - fmt$0 = rest$10; + var rest$10 = fmt$0[2], str = fmt$0[1], acc$2 = [2, acc$0, str]; + acc$0 = acc$2; + fmt$0 = rest$10; break; case 12: - var - rest$11 = fmt$0[2], - chr = fmt$0[1], - acc$3 = [3, acc$0, chr], - acc$0 = acc$3, - fmt$0 = rest$11; + var rest$11 = fmt$0[2], chr = fmt$0[1], acc$3 = [3, acc$0, chr]; + acc$0 = acc$3; + fmt$0 = rest$11; break; case 13: var @@ -8265,37 +8266,37 @@ var rest$16 = fmt$0[2], fmting_lit = fmt$0[1], - acc$4 = [0, acc$0, fmting_lit], - acc$0 = acc$4, - fmt$0 = rest$16; + acc$4 = [0, acc$0, fmting_lit]; + acc$0 = acc$4; + fmt$0 = rest$16; break; case 18: - var _wp_ = fmt$0[1]; - if(0 === _wp_[0]){ - var rest$17 = fmt$0[2], fmt$1 = _wp_[1][1]; + var _wv_ = fmt$0[1]; + if(0 === _wv_[0]){ + var rest$17 = fmt$0[2], fmt$1 = _wv_[1][1]; let acc = acc$0, k = k$0, rest = rest$17; var k$1 = - function(kacc){return make_printf(k, [1, acc, [0, kacc]], rest);}, - k$0 = k$1, - acc$0 = 0, - fmt$0 = fmt$1; + function(kacc){return make_printf(k, [1, acc, [0, kacc]], rest);}; + k$0 = k$1; + acc$0 = 0; + fmt$0 = fmt$1; } else{ - var rest$18 = fmt$0[2], fmt$2 = _wp_[1][1]; + var rest$18 = fmt$0[2], fmt$2 = _wv_[1][1]; let acc = acc$0, k = k$0, rest = rest$18; var k$2 = - function(kacc){return make_printf(k, [1, acc, [1, kacc]], rest);}, - k$0 = k$2, - acc$0 = 0, - fmt$0 = fmt$2; + function(kacc){return make_printf(k, [1, acc, [1, kacc]], rest);}; + k$0 = k$2; + acc$0 = 0; + fmt$0 = fmt$2; } break; case 19: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bE_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _bF_], 1); case 20: - var rest$19 = fmt$0[3], new_acc = [8, acc$0, _bF_]; + var rest$19 = fmt$0[3], new_acc = [8, acc$0, _bG_]; return function(param){return make_printf(k$0, new_acc, rest$19);}; case 21: var rest$20 = fmt$0[2]; @@ -8319,12 +8320,12 @@ rest$23 = fmt$0[3], f = fmt$0[2], arity = fmt$0[1], - _wq_ = caml_call1(f, 0); + _ww_ = caml_call1(f, 0); if(counter >= 50) return caml_trampoline_return - (make_custom$0, [0, k$0, acc$0, rest$23, arity, _wq_]); + (make_custom$0, [0, k$0, acc$0, rest$23, arity, _ww_]); var counter$0 = counter + 1 | 0; - return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _wq_); + return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _ww_); } } } @@ -8345,7 +8346,7 @@ var counter$1 = counter + 1 | 0; return make_invalid_arg(counter$1, k, acc, fmt); case 2: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bG_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _bH_], 1); default: if(counter >= 50) return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); @@ -8457,7 +8458,7 @@ return make_from_fmtty(k, acc, concat_fmtty(ty, rest$8), fmt);}; case 10: var rest$9 = fmtty[1]; - return function(param, _wo_){ + return function(param, _wu_){ return make_from_fmtty(k, acc, rest$9, fmt);}; case 11: var rest$10 = fmtty[1]; @@ -8466,9 +8467,9 @@ 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, _bH_], 1); - default: throw caml_maybe_attach_backtrace([0, Assert_failure, _bI_], 1); + default: + throw caml_maybe_attach_backtrace([0, Assert_failure, _bJ_], 1); } if(counter >= 50) return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); @@ -8479,11 +8480,11 @@ return caml_trampoline(make_from_fmtty$0(0, k, acc, fmtty, fmt)); } function make_invalid_arg(counter, k, acc, fmt){ - var _wn_ = [8, acc, _bJ_]; + var _wt_ = [8, acc, _bK_]; if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _wn_, fmt]); + return caml_trampoline_return(make_printf$0, [0, k, _wt_, fmt]); var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _wn_, fmt); + return make_printf$0(counter$0, k, _wt_, fmt); } function make_padding(k, acc, fmt, pad, trans){ if(typeof pad === "number") @@ -8640,11 +8641,11 @@ return function(x){ return make_custom(k, acc, rest, arity$0, caml_call1(f, x));}; } - var _wm_ = [4, acc, f]; + var _ws_ = [4, acc, f]; if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _wm_, rest]); + return caml_trampoline_return(make_printf$0, [0, k, _ws_, rest]); var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _wm_, rest); + return make_printf$0(counter$0, k, _ws_, rest); } function make_custom(k, acc, rest, arity, f){ return caml_trampoline(make_custom$0(0, k, acc, rest, arity, f)); @@ -8666,14 +8667,14 @@ if(0 === match[0]){ var acc$1 = match[1]; output_acc(o, p$0); - output_string(o, _bK_); - var acc$0 = acc$1; + output_string(o, _bL_); + acc$0 = acc$1; } else{ var acc$2 = match[1]; output_acc(o, p$0); - output_string(o, _bL_); - var acc$0 = acc$2; + output_string(o, _bM_); + acc$0 = acc$2; } break; case 6: @@ -8715,14 +8716,14 @@ if(0 === match[0]){ var acc$1 = match[1]; strput_acc(b, p$0); - add_string(b, _bM_); - var acc$0 = acc$1; + add_string(b, _bN_); + acc$0 = acc$1; } else{ var acc$2 = match[1]; strput_acc(b, p$0); - add_string(b, _bN_); - var acc$0 = acc$2; + add_string(b, _bO_); + acc$0 = acc$2; } break; case 6: @@ -8730,7 +8731,7 @@ strput_acc(b, p$3); return add_string(b, caml_call1(f, 0)); case 7: - var acc$3 = acc$0[1], acc$0 = acc$3; break; + var acc$3 = acc$0[1]; acc$0 = acc$3; break; case 8: var msg = acc$0[2], p$4 = acc$0[1]; strput_acc(b, p$4); @@ -8753,10 +8754,10 @@ return make_printf(k, 0, fmt); } function open_box_of_string(str){ - if(caml_string_equal(str, cst$1)) return _bO_; + if(str == cst$1) return _bP_; var len = caml_ml_string_length(str); function invalid_box(param){ - return caml_call1(failwith_message(_bP_), str); + return caml_call1(failwith_message(_bQ_), str); } function parse_spaces(i){ var i$0 = i; @@ -8764,7 +8765,8 @@ if(i$0 === len) return i$0; var match = caml_string_get(str, i$0); if(9 !== match && 32 !== match) return i$0; - var i$1 = i$0 + 1 | 0, i$0 = i$1; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; } } function parse_lword(i, j){ @@ -8772,7 +8774,8 @@ for(;;){ if(j$0 === len) return j$0; if(25 < caml_string_get(str, j$0) - 97 >>> 0) return j$0; - var j$1 = j$0 + 1 | 0, j$0 = j$1; + var j$1 = j$0 + 1 | 0; + j$0 = j$1; } } function parse_int(i, j){ @@ -8785,7 +8788,8 @@ if(48 <= match){if(58 > match) break a;} else if(45 === match) break a; return j$0; } - var j$1 = j$0 + 1 | 0, j$0 = j$1; + var j$1 = j$0 + 1 | 0; + j$0 = j$1; } } var @@ -8799,28 +8803,23 @@ else try{ var - _wk_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), - indent = _wk_; + _wq_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), + indent = _wq_; } - catch(_wl_){ - var _wi_ = caml_wrap_exception(_wl_); - if(_wi_[1] !== Failure) throw caml_maybe_attach_backtrace(_wi_, 0); - var _wj_ = invalid_box(0), indent = _wj_; + catch(_wr_){ + var _wo_ = caml_wrap_exception(_wr_); + if(_wo_[1] !== Failure) throw caml_maybe_attach_backtrace(_wo_, 0); + var _wp_ = invalid_box(0), indent = _wp_; } var exp_end = parse_spaces(nend); if(exp_end !== len) invalid_box(0); a: { - if - (caml_string_notequal(box_name, cst$1) - && caml_string_notequal(box_name, "b")){ - if(! caml_string_notequal(box_name, "h")){var box_type = 0; break a;} - if(! caml_string_notequal(box_name, "hov")){var box_type = 3; break a;} - if(! caml_string_notequal(box_name, "hv")){var box_type = 2; break a;} - if(caml_string_notequal(box_name, "v")){ - var box_type = invalid_box(0); - break 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; } @@ -8836,7 +8835,7 @@ fmt); } function fprintf(oc, fmt){ - return kfprintf(function(_wh_){return 0;}, oc, fmt); + return kfprintf(function(_wn_){return 0;}, oc, fmt); } function eprintf(fmt){return fprintf(stderr, fmt);} function ksprintf(k, param){ @@ -8856,28 +8855,28 @@ ? caml_obj_tag (f) === 252 - ? caml_call1(sprintf(_bQ_), f) - : caml_obj_tag(f) === 253 ? string_of_float(f) : _bR_ - : caml_call1(sprintf(_bS_), f); + ? caml_call1(sprintf(_bR_), f) + : caml_obj_tag(f) === 253 ? string_of_float(f) : _bS_ + : caml_call1(sprintf(_bT_), f); } function other_fields(x, i){ - if(x.length - 1 <= i) return _bT_; - var _wf_ = other_fields(x, i + 1 | 0), _wg_ = field(x, i); - return caml_call2(sprintf(_bU_), _wg_, _wf_); + if(x.length - 1 <= i) return _bU_; + var _wl_ = other_fields(x, i + 1 | 0), _wm_ = field(x, i); + return caml_call2(sprintf(_bV_), _wm_, _wl_); } function fields(x){ var match = x.length - 1; if(2 >= match >>> 0) switch(match){ case 0: - return _bW_; - case 1: return _bX_; + case 1: + return _bY_; default: - var _we_ = field(x, 1); return caml_call1(sprintf(_bY_), _we_); + var _wk_ = field(x, 1); return caml_call1(sprintf(_bZ_), _wk_); } - var _wc_ = other_fields(x, 2), _wd_ = field(x, 1); - return caml_call2(sprintf(_bV_), _wd_, _wc_); + var _wi_ = other_fields(x, 2), _wj_ = field(x, 1); + return caml_call2(sprintf(_bW_), _wj_, _wi_); } function use_printers(x){ function conv(param){ @@ -8887,21 +8886,21 @@ var tl = param$0[2], hd = param$0[1]; a: { - try{var val = caml_call1(hd, x);}catch(_wb_){break a;} + try{var val = caml_call1(hd, x);}catch(_wh_){break a;} if(val){var s = val[1]; return [0, s];} } - var param$0 = tl; + param$0 = tl; } } return conv(get(printers)); } function to_string_default(x){ - if(x === Out_of_memory) return _bZ_; - if(x === Stack_overflow) return _b0_; + if(x === Out_of_memory) return _b0_; + if(x === Stack_overflow) return _b1_; if(x[1] === Match_failure){ var match = x[2], char$0 = match[3], line = match[2], file = match[1]; return caml_call5 - (sprintf(locfmt), file, line, char$0, char$0 + 5 | 0, _b1_); + (sprintf(locfmt), file, line, char$0, char$0 + 5 | 0, _b2_); } if(x[1] === Assert_failure){ var @@ -8910,7 +8909,7 @@ line$0 = match$0[2], file$0 = match$0[1]; return caml_call5 - (sprintf(locfmt), file$0, line$0, char$1, char$1 + 6 | 0, _b2_); + (sprintf(locfmt), file$0, line$0, char$1, char$1 + 6 | 0, _b3_); } if(x[1] === Undefined_recursive_module){ var @@ -8919,11 +8918,11 @@ line$1 = match$1[2], file$1 = match$1[1]; return caml_call5 - (sprintf(locfmt), file$1, line$1, char$2, char$2 + 6 | 0, _b3_); + (sprintf(locfmt), file$1, line$1, char$2, char$2 + 6 | 0, _b4_); } if(0 !== caml_obj_tag(x)) return x[1]; var constructor = x[1][1]; - return symbol(constructor, fields(x)); + return symbol_concat(constructor, fields(x)); } function to_string$0(e){ var match = use_printers(e); @@ -8932,41 +8931,41 @@ return s; } function convert_raw_backtrace(bt){ - var _wa_ = [0, caml_convert_raw_backtrace(bt)]; - return _wa_; + var _wg_ = [0, caml_convert_raw_backtrace(bt)]; + return _wg_; } function format_backtrace_slot(pos, slot){ function info(is_raise){ - return is_raise ? 0 === pos ? _b4_ : _b5_ : 0 === pos ? _b6_ : _b7_; + return is_raise ? 0 === pos ? _b5_ : _b6_ : 0 === pos ? _b7_ : _b8_; } if(0 === slot[0]){ var - _v4_ = slot[5], - _v5_ = slot[4], - _v6_ = slot[3], - _v7_ = slot[6] ? _b8_ : _b__, - _v8_ = slot[2], - _v9_ = slot[7], - _v__ = info(slot[1]); + _v__ = slot[5], + _v$_ = slot[4], + _wa_ = slot[3], + _wb_ = slot[6] ? _b9_ : _b$_, + _wc_ = slot[2], + _wd_ = slot[7], + _we_ = info(slot[1]); return [0, caml_call7 - (sprintf(_b9_), _v__, _v9_, _v8_, _v7_, _v6_, _v5_, _v4_)]; + (sprintf(_b__), _we_, _wd_, _wc_, _wb_, _wa_, _v$_, _v__)]; } if(slot[1]) return 0; - var _v$_ = info(0); - return [0, caml_call1(sprintf(_b$_), _v$_)]; + var _wf_ = info(0); + return [0, caml_call1(sprintf(_ca_), _wf_)]; } function print_exception_backtrace(outchan, backtrace){ - if(! backtrace) return fprintf(outchan, _cb_); - var a = backtrace[1], _v2_ = a.length - 1 - 1 | 0, _v1_ = 0; - if(_v2_ >= 0){ - var i = _v1_; + if(! backtrace) return fprintf(outchan, _cc_); + var a = backtrace[1], _v8_ = a.length - 2 | 0, _v7_ = 0; + if(_v8_ >= 0){ + var i = _v7_; for(;;){ var match = format_backtrace_slot(i, caml_check_bound(a, i)[1 + i]); - if(match){var str = match[1]; caml_call1(fprintf(outchan, _ca_), str);} - var _v3_ = i + 1 | 0; - if(_v2_ === i) break; - var i = _v3_; + if(match){var str = match[1]; caml_call1(fprintf(outchan, _cb_), str);} + var _v9_ = i + 1 | 0; + if(_v8_ === i) break; + i = _v9_; } } return 0; @@ -8981,74 +8980,74 @@ old_printers = get(printers), new_printers = [0, fn, old_printers], success = compare_and_set(printers, old_printers, new_printers), - _v0_ = 1 - success; - if(! _v0_) return _v0_; + _v6_ = 1 - success; + if(! _v6_) return _v6_; } } - var errors = _cc_.slice(); + var errors = _cd_.slice(); function default_uncaught_exception_han(exn, raw_backtrace){ - var _vY_ = to_string$0(exn); - caml_call1(eprintf(_cd_), _vY_); + var _v4_ = to_string$0(exn); + caml_call1(eprintf(_ce_), _v4_); print_raw_backtrace(stderr, raw_backtrace); var status = caml_ml_debug_info_status(0); if(status < 0){ - var _vZ_ = abs(status); - prerr_endline(caml_check_bound(errors, _vZ_)[1 + _vZ_]); + var _v5_ = abs(status); + prerr_endline(caml_check_bound(errors, _v5_)[1 + _v5_]); } return _k_(stderr); } var empty_backtrace = [0]; function try_get_raw_backtrace(param){ - var _vX_ = caml_get_exception_raw_backtrace(0); - return _vX_; + var _v3_ = caml_get_exception_raw_backtrace(0); + return _v3_; } function handle_uncaught_exception(exn, debugger_in_use){ try{ var raw_backtrace = debugger_in_use ? empty_backtrace : try_get_raw_backtrace(0); - try{do_at_exit(0);}catch(_vW_){} + try{do_at_exit(0);}catch(_v2_){} try{ var - _vU_ = default_uncaught_exception_han(exn, raw_backtrace), - _vT_ = _vU_; + _v0_ = default_uncaught_exception_han(exn, raw_backtrace), + _vZ_ = _v0_; } catch(exn$1){ var exn$0 = caml_wrap_exception(exn$1), raw_backtrace$0 = try_get_raw_backtrace(0), - _vR_ = to_string$0(exn); - caml_call1(eprintf(_cf_), _vR_); + _vX_ = to_string$0(exn); + caml_call1(eprintf(_cg_), _vX_); print_raw_backtrace(stderr, raw_backtrace); - var _vS_ = to_string$0(exn$0); - caml_call1(eprintf(_cg_), _vS_); + var _vY_ = to_string$0(exn$0); + caml_call1(eprintf(_ch_), _vY_); print_raw_backtrace(stderr, raw_backtrace$0); - var _vT_ = _k_(stderr); + var _vZ_ = _k_(stderr); } - return _vT_; + return _vZ_; } - catch(_vV_){ - var _vQ_ = caml_wrap_exception(_vV_); - if(_vQ_ === Out_of_memory) return prerr_endline(_ce_); - throw caml_maybe_attach_backtrace(_vQ_, 0); + catch(_v1_){ + var _vW_ = caml_wrap_exception(_v1_); + if(_vW_ === Out_of_memory) return prerr_endline(_cf_); + throw caml_maybe_attach_backtrace(_vW_, 0); } } function handle_uncaught_exception$0(exn, debugger_in_use){ try{ - var _vO_ = handle_uncaught_exception(exn, debugger_in_use); - return _vO_; + var _vU_ = handle_uncaught_exception(exn, debugger_in_use); + return _vU_; } - catch(_vP_){return 0;} + catch(_vV_){return 0;} } caml_register_named_value ("Printexc.handle_uncaught_exception", handle_uncaught_exception$0); - function _ch_(_vN_){return caml_get_exception_raw_backtrace(_vN_);} - var Finally_raised = [248, _ci_, caml_fresh_oo_id(0)]; + function _ci_(_vT_){return caml_get_exception_raw_backtrace(_vT_);} + var Finally_raised = [248, _cj_, caml_fresh_oo_id(0)]; register_printer (function(param){ if(param[1] !== Finally_raised) return 0; var exn = param[2]; - return [0, symbol(_cj_, to_string$0(exn))]; + return [0, symbol_concat(_ck_, to_string$0(exn))]; }); function string(str){ return caml_md5_string(str, 0, caml_ml_string_length(str)); @@ -9060,13 +9059,15 @@ return; } function full_init(s, seed){ - function combine(accu, x){return string(symbol(accu, to_string(x)));} + function combine(accu, x){ + return string(symbol_concat(accu, to_string(x))); + } function extract(d){ var - _vK_ = caml_string_get(d, 3) << 24, - _vL_ = caml_string_get(d, 2) << 16, - _vM_ = caml_string_get(d, 1) << 8; - return ((caml_string_get(d, 0) + _vM_ | 0) + _vL_ | 0) + _vK_ | 0; + _vQ_ = caml_string_get(d, 3) << 24, + _vR_ = caml_string_get(d, 2) << 16, + _vS_ = caml_string_get(d, 1) << 8; + return ((caml_string_get(d, 0) + _vS_ | 0) + _vR_ | 0) + _vQ_ | 0; } var seed$0 = 0 === seed.length - 1 ? [0, 0] : seed, @@ -9074,26 +9075,26 @@ i$0 = 0; for(;;){ caml_check_bound(s[1], i$0)[1 + i$0] = i$0; - var _vJ_ = i$0 + 1 | 0; + var _vP_ = i$0 + 1 | 0; if(54 === i$0) break; - var i$0 = _vJ_; + i$0 = _vP_; } - var accu = [0, _ck_], _vE_ = 54 + max$0(55, l) | 0, _vD_ = 0; - if(_vE_ >= 0){ - var i = _vD_; + var accu = [0, _cl_], _vK_ = 54 + max$0(55, l) | 0, _vJ_ = 0; + if(_vK_ >= 0){ + var i = _vJ_; for(;;){ var j = i % 55 | 0, k = caml_mod(i, l), - _vF_ = caml_check_bound(seed$0, k)[1 + k]; - accu[1] = combine(accu[1], _vF_); + _vL_ = caml_check_bound(seed$0, k)[1 + k]; + accu[1] = combine(accu[1], _vL_); var - _vG_ = extract(accu[1]), - _vH_ = (caml_check_bound(s[1], j)[1 + j] ^ _vG_) & 1073741823; - caml_check_bound(s[1], j)[1 + j] = _vH_; - var _vI_ = i + 1 | 0; - if(_vE_ === i) break; - var i = _vI_; + _vM_ = extract(accu[1]), + _vN_ = (caml_check_bound(s[1], j)[1 + j] ^ _vM_) & 1073741823; + caml_check_bound(s[1], j)[1 + j] = _vN_; + var _vO_ = i + 1 | 0; + if(_vK_ === i) break; + i = _vO_; } } s[2] = 0; @@ -9113,45 +9114,57 @@ function bits(s){ s[2] = (s[2] + 1 | 0) % 55 | 0; var - _vA_ = s[2], - curval = caml_check_bound(s[1], _vA_)[1 + _vA_], - _vB_ = (s[2] + 24 | 0) % 55 | 0, + _vG_ = s[2], + curval = caml_check_bound(s[1], _vG_)[1 + _vG_], + _vH_ = (s[2] + 24 | 0) % 55 | 0, newval = - caml_check_bound(s[1], _vB_)[1 + _vB_] + caml_check_bound(s[1], _vH_)[1 + _vH_] + (curval ^ (curval >>> 25 | 0) & 31) | 0, newval30 = newval & 1073741823, - _vC_ = s[2]; - caml_check_bound(s[1], _vC_)[1 + _vC_] = newval30; + _vI_ = s[2]; + caml_check_bound(s[1], _vI_)[1 + _vI_] = newval30; return newval30; } - var default$0 = [0, _cl_.slice(), 0]; + function intaux(s, n){ + for(;;){ + var r = bits(s), v = caml_mod(r, n); + if(((1073741823 - n | 0) + 1 | 0) >= (r - v | 0)) return v; + } + } + function int$0(s, bound){ + if(1073741823 >= bound && 0 < bound) return intaux(s, bound); + return invalid_arg(_cm_); + } + var default$0 = [0, _cn_.slice(), 0]; + function int$1(bound){return int$0(default$0, bound);} function get_state(param){return copy$0(default$0);} function ongoing_traversal(h){ - var _vy_ = h.length - 1 < 4 ? 1 : 0, _vz_ = _vy_ || (h[4] < 0 ? 1 : 0); - return _vz_; + var _vE_ = h.length - 1 < 4 ? 1 : 0, _vF_ = _vE_ || (h[4] < 0 ? 1 : 0); + return _vF_; } try{var _kO_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _kO_;} - catch(_vw_){ - var _cm_ = caml_wrap_exception(_vw_); - if(_cm_ !== Not_found) throw caml_maybe_attach_backtrace(_cm_, 0); - try{var _kN_ = caml_sys_getenv("CAMLRUNPARAM"), _cp_ = _kN_;} - catch(_vx_){ - var _cn_ = caml_wrap_exception(_vx_); - if(_cn_ !== Not_found) throw caml_maybe_attach_backtrace(_cn_, 0); - var _cp_ = _co_; + catch(_vC_){ + var _co_ = caml_wrap_exception(_vC_); + if(_co_ !== Not_found) throw caml_maybe_attach_backtrace(_co_, 0); + try{var _kN_ = caml_sys_getenv("CAMLRUNPARAM"), _cr_ = _kN_;} + catch(_vD_){ + var _cp_ = caml_wrap_exception(_vD_); + if(_cp_ !== Not_found) throw caml_maybe_attach_backtrace(_cp_, 0); + var _cr_ = _cq_; } - var params = _cp_; + var params = _cr_; } var randomized_default = contains(params, 82), - prng = [246, function(_vv_){return make_self_init(0);}]; + prng = [246, function(_vB_){return make_self_init(0);}]; function power_2_above(x, n){ var x$0 = x; for(;;){ if(n <= x$0) return x$0; if(max_array_length < (x$0 * 2 | 0)) return x$0; - var x$1 = x$0 * 2 | 0, x$0 = x$1; + var x$1 = x$0 * 2 | 0; + x$0 = x$1; } } function create$2(opt, initial_size){ @@ -9162,17 +9175,17 @@ var s = power_2_above(16, initial_size); if(random) var - _vt_ = caml_obj_tag(prng), - _vu_ = - 250 === _vt_ ? prng[1] : 246 === _vt_ ? force_lazy_block(prng) : prng, - seed = bits(_vu_); + _vz_ = caml_obj_tag(prng), + _vA_ = + 250 === _vz_ ? prng[1] : 246 === _vz_ ? force_lazy_block(prng) : prng, + seed = bits(_vA_); else var seed = 0; return [0, 0, caml_make_vect(s, 0), seed, s]; } function clear$1(h){ - var _vs_ = 0 < h[1] ? 1 : 0; - return _vs_ ? (h[1] = 0, fill(h[2], 0, h[2].length - 1, 0)) : _vs_; + var _vy_ = 0 < h[1] ? 1 : 0; + return _vy_ ? (h[1] = 0, fill(h[2], 0, h[2].length - 1, 0)) : _vy_; } function insert_all_buckets(indexfun, inplace, odata, ndata){ var nsize = ndata.length - 1, ndata_tail = caml_make_vect(nsize, 0); @@ -9192,29 +9205,29 @@ else caml_check_bound(ndata, nidx)[1 + nidx] = cell$1; caml_check_bound(ndata_tail, nidx)[1 + nidx] = cell$1; - var cell$0 = next; + cell$0 = next; } } - var _vn_ = odata.length - 1 - 1 | 0, _vm_ = 0; - if(_vn_ >= 0){ - var i$0 = _vm_; + var _vt_ = odata.length - 2 | 0, _vs_ = 0; + if(_vt_ >= 0){ + var i$0 = _vs_; for(;;){ insert_bucket(caml_check_bound(odata, i$0)[1 + i$0]); - var _vr_ = i$0 + 1 | 0; - if(_vn_ === i$0) break; - var i$0 = _vr_; + var _vx_ = i$0 + 1 | 0; + if(_vt_ === i$0) break; + i$0 = _vx_; } } if(inplace){ - var _vp_ = nsize - 1 | 0, _vo_ = 0; - if(_vp_ >= 0){ - var i = _vo_; + var _vv_ = nsize - 1 | 0, _vu_ = 0; + if(_vv_ >= 0){ + var i = _vu_; for(;;){ var match = caml_check_bound(ndata_tail, i)[1 + i]; if(match) match[3] = 0; - var _vq_ = i + 1 | 0; - if(_vp_ === i) break; - var i = _vq_; + var _vw_ = i + 1 | 0; + if(_vv_ === i) break; + i = _vw_; } } } @@ -9225,16 +9238,16 @@ odata = h[2], osize = odata.length - 1, nsize = osize * 2 | 0, - _vl_ = nsize < max_array_length ? 1 : 0; - if(! _vl_) return _vl_; + _vr_ = nsize < max_array_length ? 1 : 0; + if(! _vr_) return _vr_; 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 key_index(h, key){ return 4 <= h.length - 1 - ? caml_hash(10, 100, h[3], key) & (h[2].length - 1 - 1 | 0) - : invalid_arg(_cq_); + ? caml_hash(10, 100, h[3], key) & (h[2].length - 2 | 0) + : invalid_arg(_cs_); } function add$0(h, key, data){ var @@ -9242,8 +9255,8 @@ bucket = [0, key, data, caml_check_bound(h[2], i)[1 + i]]; caml_check_bound(h[2], i)[1 + i] = bucket; h[1] = h[1] + 1 | 0; - var _vk_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; - return _vk_ ? resize$0(key_index, h) : _vk_; + var _vq_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; + return _vq_ ? resize$0(key_index, h) : _vq_; } function remove_bucket(h, i, key, prec, c){ var prec$1 = prec, prec$0 = c; @@ -9256,7 +9269,8 @@ caml_check_bound(h[2], i)[1 + i] = next; return; } - var prec$1 = prec$0, prec$0 = next; + prec$1 = prec$0; + prec$0 = next; } } function remove(h, key){ @@ -9269,13 +9283,13 @@ if(! param$0) throw caml_maybe_attach_backtrace(Not_found, 1); var k = param$0[1], data = param$0[2], next = param$0[3]; if(0 === caml_compare(key, k)) return data; - var param$0 = next; + param$0 = next; } } function find(h, key){ var - _vj_ = key_index(h, key), - match = caml_check_bound(h[2], _vj_)[1 + _vj_]; + _vp_ = key_index(h, key), + match = caml_check_bound(h[2], _vp_)[1 + _vp_]; if(! match) throw caml_maybe_attach_backtrace(Not_found, 1); var k1 = match[1], d1 = match[2], next1 = match[3]; if(0 === caml_compare(key, k1)) return d1; @@ -9293,11 +9307,11 @@ if(! param$0) return 0; var k = param$0[1], data = param$0[2], next = param$0[3]; if(0 === caml_compare(k, key)) return [0, data, find_in_bucket(next)]; - var param$0 = next; + param$0 = next; } } - var _vi_ = key_index(h, key); - return find_in_bucket(caml_check_bound(h[2], _vi_)[1 + _vi_]); + var _vo_ = key_index(h, key); + return find_in_bucket(caml_check_bound(h[2], _vo_)[1 + _vo_]); } function mem(h, key){ function mem_in_bucket(param){ @@ -9307,18 +9321,18 @@ var k = param$0[1], next = param$0[3], - _vh_ = 0 === caml_compare(k, key) ? 1 : 0; - if(_vh_) return _vh_; - var param$0 = next; + _vn_ = 0 === caml_compare(k, key) ? 1 : 0; + if(_vn_) return _vn_; + param$0 = next; } } - var _vg_ = key_index(h, key); - return mem_in_bucket(caml_check_bound(h[2], _vg_)[1 + _vg_]); + var _vm_ = key_index(h, key); + return mem_in_bucket(caml_check_bound(h[2], _vm_)[1 + _vm_]); } function id(x){return x;} var zero = 0, unknown = -1; function is_known(n){return 0 <= n ? 1 : 0;} - var String_tag = [248, _cr_, caml_fresh_oo_id(0)]; + var String_tag = [248, _ct_, caml_fresh_oo_id(0)]; function pp_enqueue(state, token){ state[13] = state[13] + token[3] | 0; return add(token, state[28]); @@ -9342,8 +9356,8 @@ return; } function format_string(state, s){ - var _vf_ = caml_string_notequal(s, cst$1); - return _vf_ ? format_pp_text(state, caml_ml_string_length(s), s) : _vf_; + var _vl_ = s !== cst$1 ? 1 : 0; + return _vl_ ? format_pp_text(state, caml_ml_string_length(s), s) : _vl_; } function break_new_line(state, param, width){ var after = param[3], offset = param[2], before = param[1]; @@ -9359,7 +9373,7 @@ return format_string(state, after); } function break_line(state, width){ - return break_new_line(state, _cs_, width); + return break_new_line(state, _cu_, width); } function break_same_line(state, param){ var after = param[3], width = param[2], before = param[1]; @@ -9375,8 +9389,8 @@ match$0 = match[1], width = match$0[2], box_type = match$0[1], - _ve_ = state[9] < width ? 1 : 0; - if(! _ve_) return _ve_; + _vk_ = state[9] < width ? 1 : 0; + if(! _vk_) return _vk_; if(3 < box_type - 1 >>> 0) return; return break_line(state, width); } @@ -9385,8 +9399,8 @@ if(! match) return; var match$0 = match[1], size = match$0[1], length = match$0[3]; state[12] = state[12] - length | 0; - var _vd_ = id(size); - state[9] = state[9] + _vd_ | 0; + var _vj_ = id(size); + state[9] = state[9] + _vj_ | 0; return; } function format_pp_token(state, size, param){ @@ -9415,8 +9429,8 @@ var width = match$0[1][2]; return break_line(state, width); case 4: - var _vc_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; - return _vc_ ? pp_skip_token(state) : _vc_; + var _vi_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; + return _vi_ ? pp_skip_token(state) : _vi_; default: var match$1 = pop_opt(state[5]); if(! match$1) return; @@ -9482,7 +9496,7 @@ if(! param$0) return first; var tail = param$0[2], head = param$0[1]; if(insertion_point <= head) return head; - var param$0 = tail; + param$0 = tail; } }, tab = find(tabs$0[1]); @@ -9490,9 +9504,9 @@ var tab = insertion_point; var offset = tab - insertion_point | 0; return 0 <= offset - ? break_same_line(state, [0, _cu_, offset + n | 0, _ct_]) + ? break_same_line(state, [0, _cw_, offset + n | 0, _cv_]) : break_new_line - (state, [0, _cw_, tab + off$0 | 0, _cv_], state[6]); + (state, [0, _cy_, tab + off$0 | 0, _cx_], state[6]); case 3: var ty = param[2], @@ -9523,9 +9537,9 @@ length = match$0[3], token = match$0[2], pending_count = state[13] - state[12] | 0, - _va_ = is_known(size), - _vb_ = _va_ || (state[9] <= pending_count ? 1 : 0); - if(! _vb_) return _vb_; + _vg_ = is_known(size), + _vh_ = _vg_ || (state[9] <= pending_count ? 1 : 0); + if(! _vh_) return _vh_; take(state[28]); var size$0 = is_known(size) ? id(size) : pp_infinity; format_pp_token(state, size$0, token); @@ -9544,7 +9558,7 @@ } function initialize_scan_stack(stack){ clear(stack); - var queue_elem = [0, unknown, _cx_, 0]; + var queue_elem = [0, unknown, _cz_, 0]; return push([0, -1, queue_elem], stack); } function set_size(state, ty){ @@ -9556,9 +9570,9 @@ left_total = match$0[1], size = id(queue_elem[1]); if(left_total < state[12]) return initialize_scan_stack(state[1]); - var _u$_ = queue_elem[2]; - if(typeof _u$_ !== "number") - switch(_u$_[0]){ + var _vf_ = queue_elem[2]; + if(typeof _vf_ !== "number") + switch(_vf_[0]){ case 3: if(1 - ty){ queue_elem[1] = id(state[13] + size | 0); @@ -9584,46 +9598,46 @@ var size = id(- state[13] | 0), elem = [0, size, [3, indent, br_ty], 0]; return scan_push(state, 0, elem); } - var _u__ = state[14] === state[15] ? 1 : 0; - return _u__ ? enqueue_string(state, state[16]) : _u__; + var _ve_ = state[14] === state[15] ? 1 : 0; + return _ve_ ? enqueue_string(state, state[16]) : _ve_; } function pp_open_sys_box(state){return pp_open_box_gen(state, 0, 3);} function pp_close_box(state, param){ - var _u8_ = 1 < state[14] ? 1 : 0; - if(_u8_){ + var _vc_ = 1 < state[14] ? 1 : 0; + if(_vc_){ 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 _u9_ = 0; + var _vd_ = 0; } else - var _u9_ = _u8_; - return _u9_; + var _vd_ = _vc_; + return _vd_; } function pp_open_stag(state, tag_name){ if(state[22]){push(tag_name, state[4]); caml_call1(state[26], tag_name);} - var _u7_ = state[23]; - if(! _u7_) return _u7_; + var _vb_ = state[23]; + if(! _vb_) return _vb_; 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 _u5_ = state[22]; - if(_u5_){ + var _u$_ = state[22]; + if(_u$_){ var match = pop_opt(state[4]); if(match){ var tag_name = match[1]; return caml_call1(state[27], tag_name); } - var _u6_ = 0; + var _va_ = 0; } else - var _u6_ = _u5_; - return _u6_; + var _va_ = _u$_; + return _va_; } function pp_close_tag(state, param){return pp_close_stag(state, 0);} function pp_rinit(state){ @@ -9654,8 +9668,8 @@ } } function pp_print_as_size(state, size, s){ - var _u4_ = state[14] < state[15] ? 1 : 0; - return _u4_ ? enqueue_string_as(state, size, s) : _u4_; + var _u__ = state[14] < state[15] ? 1 : 0; + return _u__ ? enqueue_string_as(state, size, s) : _u__; } function pp_print_as(state, isize, s){ return pp_print_as_size(state, id(isize), s); @@ -9678,16 +9692,16 @@ return caml_call1(state[18], 0); } function pp_force_newline(state, param){ - var _u3_ = state[14] < state[15] ? 1 : 0; - return _u3_ ? enqueue_advance(state, [0, zero, 3, 0]) : _u3_; + var _u9_ = state[14] < state[15] ? 1 : 0; + return _u9_ ? enqueue_advance(state, [0, zero, 3, 0]) : _u9_; } function pp_print_custom_break(state, fits, breaks){ var after = fits[3], width = fits[2], before = fits[1], - _u2_ = state[14] < state[15] ? 1 : 0; - if(! _u2_) return _u2_; + _u8_ = state[14] < state[15] ? 1 : 0; + if(! _u8_) return _u8_; var size = id(- state[13] | 0), token = [1, fits, breaks], @@ -9700,48 +9714,49 @@ } function pp_print_break(state, width, offset){ return pp_print_custom_break - (state, [0, _cB_, width, _cA_], [0, _cz_, offset, _cy_]); + (state, [0, _cD_, width, _cC_], [0, _cB_, offset, _cA_]); } function pp_print_cut(state, param){return pp_print_break(state, 0, 0);} function display_newline(state, param){ - return caml_call3(state[17], _cC_, 0, 1); + return caml_call3(state[17], _cE_, 0, 1); } var blank_line = make$1(80, 32); function display_blanks(state, n){ var n$0 = n; for(;;){ - var _u1_ = 0 < n$0 ? 1 : 0; - if(! _u1_) return _u1_; + var _u7_ = 0 < n$0 ? 1 : 0; + if(! _u7_) return _u7_; if(80 >= n$0) return caml_call3(state[17], blank_line, 0, n$0); caml_call3(state[17], blank_line, 0, 80); - var n$1 = n$0 - 80 | 0, n$0 = n$1; + var n$1 = n$0 - 80 | 0; + n$0 = n$1; } } function default_pp_mark_open_tag(param){ - if(param[1] !== String_tag) return _cF_; + if(param[1] !== String_tag) return _cH_; var s = param[2]; - return symbol(_cE_, symbol(s, _cD_)); + return symbol_concat(_cG_, symbol_concat(s, _cF_)); } function default_pp_mark_close_tag(param){ - if(param[1] !== String_tag) return _cI_; + if(param[1] !== String_tag) return _cK_; var s = param[2]; - return symbol(_cH_, symbol(s, _cG_)); + return symbol_concat(_cJ_, symbol_concat(s, _cI_)); } - function default_pp_print_open_tag(_u0_){return 0;} - function default_pp_print_close_tag(_uZ_){return 0;} + function default_pp_print_open_tag(_u6_){return 0;} + function default_pp_print_close_tag(_u5_){return 0;} function pp_make_formatter(f, g, h, i, j){ - var pp_queue = create$0(0), sys_tok = [0, unknown, _cJ_, 0]; + var pp_queue = create$0(0), sys_tok = [0, unknown, _cL_, 0]; add(sys_tok, pp_queue); var scan_stack = create(0); initialize_scan_stack(scan_stack); push([0, 1, sys_tok], scan_stack); - var pp_margin = 78, _uW_ = create(0), _uX_ = create(0), _uY_ = create(0); + var pp_margin = 78, _u2_ = create(0), _u3_ = create(0), _u4_ = create(0); return [0, scan_stack, create(0), - _uY_, - _uX_, - _uW_, + _u4_, + _u3_, + _u2_, pp_margin, 10, 68, @@ -9752,7 +9767,7 @@ 1, 1, max_int, - _cK_, + _cM_, f, g, h, @@ -9772,27 +9787,27 @@ pp_make_formatter (output, flush, - function(_uV_){return 0;}, - function(_uU_){return 0;}, - function(_uT_){return 0;}); - ppf[19] = function(_uS_){return display_newline(ppf, _uS_);}; - ppf[20] = function(_uR_){return display_blanks(ppf, _uR_);}; - ppf[21] = function(_uQ_){return display_blanks(ppf, _uQ_);}; + function(_u1_){return 0;}, + function(_u0_){return 0;}, + function(_uZ_){return 0;}); + ppf[19] = function(_uY_){return display_newline(ppf, _uY_);}; + ppf[20] = function(_uX_){return display_blanks(ppf, _uX_);}; + ppf[21] = function(_uW_){return display_blanks(ppf, _uW_);}; return ppf; } function formatter_of_out_channel(oc){ return make_formatter - (function(_uN_, _uO_, _uP_){ - return output_substring(oc, _uN_, _uO_, _uP_); + (function(_uT_, _uU_, _uV_){ + return output_substring(oc, _uT_, _uU_, _uV_); }, function(param){return _k_(oc);}); } function formatter_of_buffer(b){ return make_formatter - (function(_uK_, _uL_, _uM_){ - return add_substring(b, _uK_, _uL_, _uM_); + (function(_uQ_, _uR_, _uS_){ + return add_substring(b, _uQ_, _uR_, _uS_); }, - function(_uJ_){return 0;}); + function(_uP_){return 0;}); } var pp_buffer_size = 512; function pp_make_buffer(param){return create$1(pp_buffer_size);} @@ -9820,7 +9835,9 @@ var vs = param$0[2]; caml_call2(pp_v, ppf, v); caml_call2(pp_sep, ppf, 0); - var opt$1 = [0, pp_sep], opt$0 = opt$1, param$0 = vs; + var opt$1 = [0, pp_sep]; + opt$0 = opt$1; + param$0 = vs; } } function compute_tag(output, tag_acc){ @@ -9888,48 +9905,48 @@ indent = match$0[1]; return pp_open_box_gen(ppf, indent, bty); case 2: - var _uA_ = acc[1]; - if(typeof _uA_ !== "number" && 0 === _uA_[0]){ - var _uB_ = _uA_[2]; - if(typeof _uB_ !== "number" && 1 === _uB_[0]){ - var s$0 = acc[2], size = _uB_[2], p$2 = _uA_[1]; + var _uG_ = acc[1]; + if(typeof _uG_ !== "number" && 0 === _uG_[0]){ + var _uH_ = _uG_[2]; + if(typeof _uH_ !== "number" && 1 === _uH_[0]){ + var s$0 = acc[2], size = _uH_[2], p$2 = _uG_[1]; break b; } } - var s = acc[2], p$1 = _uA_; + var s = acc[2], p$1 = _uG_; break a; case 3: - var _uC_ = acc[1]; - if(typeof _uC_ !== "number" && 0 === _uC_[0]){ - var _uD_ = _uC_[2]; - if(typeof _uD_ !== "number" && 1 === _uD_[0]){ - var c$0 = acc[2], size$0 = _uD_[2], p$4 = _uC_[1]; + var _uI_ = acc[1]; + if(typeof _uI_ !== "number" && 0 === _uI_[0]){ + var _uJ_ = _uI_[2]; + if(typeof _uJ_ !== "number" && 1 === _uJ_[0]){ + var c$0 = acc[2], size$0 = _uJ_[2], p$4 = _uI_[1]; break; } } - var c = acc[2], p$3 = _uC_; + var c = acc[2], p$3 = _uI_; break c; case 4: - var _uF_ = acc[1]; - if(typeof _uF_ !== "number" && 0 === _uF_[0]){ - var _uG_ = _uF_[2]; - if(typeof _uG_ !== "number" && 1 === _uG_[0]){ - var s$0 = acc[2], size = _uG_[2], p$2 = _uF_[1]; + var _uL_ = acc[1]; + if(typeof _uL_ !== "number" && 0 === _uL_[0]){ + var _uM_ = _uL_[2]; + if(typeof _uM_ !== "number" && 1 === _uM_[0]){ + var s$0 = acc[2], size = _uM_[2], p$2 = _uL_[1]; break b; } } - var s = acc[2], p$1 = _uF_; + var s = acc[2], p$1 = _uL_; break a; case 5: - var _uH_ = acc[1]; - if(typeof _uH_ !== "number" && 0 === _uH_[0]){ - var _uI_ = _uH_[2]; - if(typeof _uI_ !== "number" && 1 === _uI_[0]){ - var c$0 = acc[2], size$0 = _uI_[2], p$4 = _uH_[1]; + var _uN_ = acc[1]; + if(typeof _uN_ !== "number" && 0 === _uN_[0]){ + var _uO_ = _uN_[2]; + if(typeof _uO_ !== "number" && 1 === _uO_[0]){ + var c$0 = acc[2], size$0 = _uO_[2], p$4 = _uN_[1]; break; } } - var c = acc[2], p$3 = _uH_; + var c = acc[2], p$3 = _uN_; break c; case 6: var f$0 = acc[2], p$5 = acc[1]; @@ -9945,8 +9962,8 @@ return invalid_arg(msg); } output_acc$0(ppf, p$4); - var _uE_ = make$1(1, c$0); - return pp_print_as_size(ppf, id(size$0), _uE_); + var _uK_ = make$1(1, c$0); + return pp_print_as_size(ppf, id(size$0), _uK_); } output_acc$0(ppf, p$3); return pp_print_char(ppf, c); @@ -9965,8 +9982,8 @@ fmt); } function fprintf$0(ppf){ - function _ux_(_uz_){return 0;} - return function(_uy_){return kfprintf$0(_ux_, ppf, _uy_);}; + function _uD_(_uF_){return 0;} + return function(_uE_){return kfprintf$0(_uD_, ppf, _uE_);}; } function kasprintf(k, param){ var fmt = param[1], b = pp_make_buffer(0), ppf = formatter_of_buffer(b); @@ -9987,8 +10004,8 @@ caml_register_named_value(name, slot); return; } - var Error = [248, _cL_, caml_fresh_oo_id(0)]; - register_exception(_cM_, [0, Error, [0]]); + var Error = [248, _cN_, caml_fresh_oo_id(0)]; + register_exception(_cO_, [0, Error, [0]]); (function(exn){throw exn;}); var jv_global = globalThis; function length$2(s){return s[cst_length];} @@ -10002,14 +10019,14 @@ return caml_list_to_js_array(ss).join(sep); } function is_empty$0(s){return 0 === length$2(s) ? 1 : 0;} - function equal(_uw_, _uv_){return caml_equal(_uw_, _uv_);} + function equal(_uC_, _uB_){return caml_equal(_uC_, _uB_);} jv_global["Number"]; var null$0 = null, undefined$0 = undefined; function is_null(v){return v === null$0 ? 1 : 0;} function is_undefined(v){return v === undefined$0 ? 1 : 0;} function is_none(v){ - var _uu_ = is_null(v); - return _uu_ ? _uu_ : is_undefined(v); + var _uA_ = is_null(v); + return _uA_ ? _uA_ : is_undefined(v); } function is_some$0(v){return 1 - is_none(v);} function to_option(conv, v){ @@ -10042,7 +10059,7 @@ var f = param[1]; return set$0(o, p, f); } - function to_string$1(_ut_){return caml_string_of_jsstring(_ut_);} + function to_string$1(_uz_){return caml_string_of_jsstring(_uz_);} function create$3(n){return new global["Array"](n);} function length$3(a){return a[cst_length];} function to_list$0(conv, v){ @@ -10056,7 +10073,9 @@ if(! param$0) return ja; var vs = param$0[2], v = param$0[1]; ja[i$0] = caml_call1(conv, v); - var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = vs; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; + param$0 = vs; } } return loop(0, create$3(0), l); @@ -10094,13 +10113,13 @@ function call(o, m, args){ return caml_js_meth_call(o, to_string$1(m), args); } - function value$0(_us_){return caml_string_of_jsstring(_us_);} - function _cN_(_ur_){return caml_jsstring_of_string(_ur_);} + function value$0(_uy_){return caml_string_of_jsstring(_uy_);} + function _cP_(_ux_){return caml_jsstring_of_string(_ux_);} function fut(p){return {fut: p};} function promise$0(f){return f[cst_fut];} function create$5(param){ function not_set(param){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _cO_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _cQ_], 1); } function is_set(param){return throw$0(0, "The future is already set");} var setter = [0, not_set]; @@ -10127,11 +10146,11 @@ return fut(then(p, ok$0, error$0)); } function of_promise$0(ok, v){ - return of_promise(ok, function(_uq_){return _uq_;}, v); + return of_promise(ok, function(_uw_){return _uw_;}, v); } function let$0(f, fn){return map$3(fn, f);} function let$1(f, fn){ - return function(_up_){return bind$0(f, _up_);} + return function(_uv_){return bind$0(f, _uv_);} (function(e){ if(0 !== e[0]) return return$0(e); var v = e[1]; @@ -10139,7 +10158,7 @@ }); } function let$2(f, fn){ - return map$3(function(_uo_){return map$0(fn, _uo_);}, f); + return map$3(function(_uu_){return map$0(fn, _uu_);}, f); } global["Event"]; function target(e){return e[cst_target];} @@ -10198,7 +10217,7 @@ function of_obj(o){return new usp(o);} function with_query_params(u, ps){ var u$0 = new url(u); - set$0(u$0, _cP_, to_jstr(ps)); + set$0(u$0, _cR_, to_jstr(ps)); return u$0; } function to_jstr$0(u){return u.toString();} @@ -10216,8 +10235,8 @@ var void$0 = [0, empty, empty]; function if$0(b, at){return b ? at : void$0;} function true$1(n){return [0, n, empty];} - function int$0(n, i){return [0, n, jstr_of_int(0, i)];} - function to_pair(_un_){return _un_;} + function int$2(n, i){return [0, n, jstr_of_int(0, i)];} + function to_pair(_ut_){return _ut_;} var checked = cst_checked, class$0 = "class", @@ -10241,11 +10260,11 @@ function style$0(s){return v$1(style, s);} function type$0(s){return v$1(type, s);} function value$2(s){return v$1(value$1, s);} - function width$0(i){return int$0(width, i);} + function width$0(i){return int$2(width, i);} var global_document = global["document"]; function document(e){return e["ownerDocument"];} if(! is_none(global_document)) global_document[cst_documentElement]; - function _cQ_(e, n){e.appendChild(n); return 0;} + function _cS_(e, n){e.appendChild(n); return 0;} function set_atts(e, ss, param){ var ss$0 = ss, param$0 = param; for(;;){ @@ -10258,27 +10277,30 @@ } var at = param$0[2], match = param$0[1], v = match[2], a = match[1]; if(is_empty$0(a)) - var param$0 = at; - else if(equal(a, style)) - var ss$1 = [0, v, ss$0], ss$0 = ss$1, param$0 = at; + param$0 = at; + else if(equal(a, style)){ + var ss$1 = [0, v, ss$0]; + ss$0 = ss$1; + param$0 = at; + } else if(equal(a, class$0)){ if(1 - is_empty$0(v)) e[cst_classList].add(v); - var param$0 = at; + param$0 = at; } - else{e.setAttribute(a, v); var param$0 = at;} + else{e.setAttribute(a, v); param$0 = at;} } } - function v$2(opt, _ul_, name, cs){ + function v$2(opt, _ur_, name, cs){ if(opt) var sth = opt[1], d = sth; else var d = global_document; - if(_ul_) var sth$0 = _ul_[1], at = sth$0; else var at = 0; + if(_ur_) var sth$0 = _ur_[1], at = sth$0; else var at = 0; var e = d.createElement(name); set_atts(e, 0, at); - iter$0(function(_um_){return _cQ_(e, _um_);}, cs); + iter$0(function(_us_){return _cS_(e, _us_);}, cs); return e; } function txt(opt, s){ if(opt) var sth = opt[1], d = sth; else var d = global_document; - return d.createTextNode(_cN_(s)); + return d.createTextNode(_cP_(s)); } function append_children(e, l){ caml_js_meth_call(e, cst_append, of_list(l)); @@ -10292,9 +10314,9 @@ } function jv_to_float(f){return is_undefined(f) ? 0. : f;} function float$0(n){ - return [0, n, jv_to_float, function(_uk_){return _uk_;}]; + return [0, n, jv_to_float, function(_uq_){return _uq_;}]; } - function prop(p, e){var _uj_ = e[p[1]]; return caml_call1(p[2], _uj_);} + function prop(p, e){var _up_ = e[p[1]]; return caml_call1(p[2], _up_);} function set_class(c, b, e){ return b ? (e[cst_classList].add(c), 0) : (e[cst_classList].remove(c), 0); } @@ -10303,7 +10325,7 @@ var style = w.getComputedStyle(e), v = style[p]; return is_none(v) ? empty : v; } - function scroll_y(e){return get$2(e, _cR_);} + function scroll_y(e){return get$2(e, _cT_);} function scroll_into_view(opt, e){ if(opt) var sth = opt[1], align_v = sth; else var align_v = 389604418; var align = 389604418 <= align_v ? 1 : 0; @@ -10323,10 +10345,10 @@ select = "select", span = "span"; function cons$0(name, d, at, cs){return v$2(d, at, name, cs);} - function audio$0(_ug_, _uh_, _ui_){return cons$0(audio, _ug_, _uh_, _ui_);} - function div$0(_ud_, _ue_, _uf_){return cons$0(div, _ud_, _ue_, _uf_);} - function h1$0(_ua_, _ub_, _uc_){return cons$0(h1, _ua_, _ub_, _uc_);} - function span$0(_t9_, _t__, _t$_){return cons$0(span, _t9_, _t__, _t$_);} + function audio$0(_um_, _un_, _uo_){return cons$0(audio, _um_, _un_, _uo_);} + function div$0(_uj_, _uk_, _ul_){return cons$0(div, _uj_, _uk_, _ul_);} + function h1$0(_ug_, _uh_, _ui_){return cons$0(h1, _ug_, _uh_, _ui_);} + function span$0(_ud_, _ue_, _uf_){return cons$0(span, _ud_, _ue_, _uf_);} function root(d){return d[cst_documentElement];} function body(d){ var b = d[cst_body]; @@ -10337,10 +10359,10 @@ "Document body is null. Try to defer your script execution."); } function active_el(d){ - return to_option(function(_t8_){return _t8_;}, d["activeElement"]); + return to_option(function(_uc_){return _uc_;}, d["activeElement"]); } function call$0(c, meth, args){caml_js_meth_call(c, meth, args); return;} - var _cS_ = global[cst_console]; + var _cU_ = global[cst_console]; function msg_to_jv_array(msg){ function loop(a, i, param){ var i$0 = i, param$0 = param; @@ -10348,14 +10370,16 @@ if(! param$0) return a; var vs = param$0[2], v = param$0[1]; a[i$0] = v; - var i$1 = i$0 + 1 | 0, i$0 = i$1, param$0 = vs; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; + param$0 = vs; } } return caml_js_to_array(loop(create$3(0), 0, msg)); } - function log(msg){return call$0(_cS_, _cT_, msg_to_jv_array(msg));} - function error$0(msg){return call$0(_cS_, _cU_, msg_to_jv_array(msg));} - function warn(msg){return call$0(_cS_, _cV_, msg_to_jv_array(msg));} + function log(msg){return call$0(_cU_, _cV_, msg_to_jv_array(msg));} + function error$0(msg){return call$0(_cU_, _cW_, msg_to_jv_array(msg));} + function warn(msg){return call$0(_cU_, _cX_, msg_to_jv_array(msg));} function as_target(w){return w;} function now_ms(p){return p.now();} global[cst_console]; @@ -10363,7 +10387,7 @@ navigator = global["navigator"], performance = global["performance"], window = global[cst_window]; - get$1(global, _cW_); + get$1(global, _cY_); function set_timeout(ms, f){ return global.setTimeout(caml_js_wrap_callback_strict(1, f), ms); } @@ -10374,9 +10398,9 @@ } global["ClipboardItem"]; global["FormData"]; - function of_jstr$0(_t7_){return _t7_;} + function of_jstr$0(_ub_){return _ub_;} function text(r){ - return of_promise$0(function(_t6_){return _t6_;}, r.text()); + return of_promise$0(function(_ua_){return _ua_;}, r.text()); } var headers = global["Headers"]; function of_assoc(init, l){ @@ -10387,10 +10411,10 @@ hs.append(k, v); return 0; } - iter$0(function(_t5_){return add(hs, _t5_);}, l); + iter$0(function(_t$_){return add(hs, _t$_);}, l); return hs; } - function init$0 + function init$1 (body, cache, credentials, @@ -10405,18 +10429,18 @@ signal, param){ var o = {}; - o[cst_body] = of_option(undefined$0, function(_t4_){return _t4_;}, body); - set_if_some$1(o, _cX_, cache); - set_if_some$1(o, _cY_, credentials); - set_if_some(o, _cZ_, map(function(_t3_){return _t3_;}, headers)); - set_if_some$1(o, _c0_, integrity); - set_if_some$0(o, _c1_, keepalive); - set_if_some$1(o, _c2_, method); - set_if_some$1(o, _c3_, mode); - set_if_some$1(o, _c4_, redirect); - set_if_some$1(o, _c5_, referrer); - set_if_some$1(o, _c6_, referrer_policy); - o["signal"] = of_option(undefined$0, function(_t2_){return _t2_;}, signal); + o[cst_body] = of_option(undefined$0, function(_t__){return _t__;}, body); + set_if_some$1(o, _cZ_, cache); + set_if_some$1(o, _c0_, credentials); + set_if_some(o, _c1_, map(function(_t9_){return _t9_;}, headers)); + set_if_some$1(o, _c2_, integrity); + set_if_some$0(o, _c3_, keepalive); + set_if_some$1(o, _c4_, method); + set_if_some$1(o, _c5_, mode); + set_if_some$1(o, _c6_, redirect); + set_if_some$1(o, _c7_, referrer); + set_if_some$1(o, _c8_, referrer_policy); + o["signal"] = of_option(undefined$0, function(_t8_){return _t8_;}, signal); return o; } var request = global["Request"]; @@ -10427,8 +10451,8 @@ global["Response"]; var fetch = global["fetch"]; function request$0(r){ - function _tZ_(_t1_){return _t1_;} - return function(_t0_){return of_promise$0(_tZ_, _t0_);}(fetch(r)); + function _t5_(_t7_){return _t7_;} + return function(_t6_){return of_promise$0(_t5_, _t6_);}(fetch(r)); } global["MediaStream"]; global["MediaRecorder"]; @@ -10439,8 +10463,8 @@ global["Notification"]; function local(w){return w["localStorage"];} function get_item(s, k){ - function _tW_(_tY_){return _tY_;} - return function(_tX_){return to_option(_tW_, _tX_);}(s.getItem(k)); + function _t2_(_t4_){return _t4_;} + return function(_t3_){return to_option(_t2_, _t3_);}(s.getItem(k)); } function set_item(s, k, v){ try{s.setItem(k, v); return;} @@ -10471,23 +10495,23 @@ global["registration"]; global["serviceWorker"]; function height(t){return t["height"];} - function _c7_(_tV_){return _tV_;} - function content_rect(t){return _c7_(t["contentRect"]);} + function _c9_(_t1_){return _t1_;} + function content_rect(t){return _c9_(t["contentRect"]);} function target$0(t){return t[cst_target];} function string_of_box(param){ switch(param){ case 0: - return _c8_; + return _c__; case 1: - return _c9_; - default: return _c__; + return _c$_; + default: return _da_; } } function observe(t, box, target){ if(box) var b = box[1], - box$0 = {box: _cN_(string_of_box(b))}, + box$0 = {box: _cP_(string_of_box(b))}, args = [0, target, box$0]; else var args = [0, target]; @@ -10496,26 +10520,26 @@ } function create$7(callback){ function callback$0(entries, observer){ - var entries$0 = to_list$0(function(_tU_){return _tU_;}, entries); + var entries$0 = to_list$0(function(_t0_){return _t0_;}, entries); return caml_call2(callback, entries$0, observer); } return new global["ResizeObserver"](callback$0); } function of_navigator(n){return n["mediaSession"];} function img_to_jv(img){ - var _tS_ = _cN_(img[3]), _tT_ = _cN_(img[2]); - return {src: _cN_(img[1]), sizes: _tT_, type: _tS_}; + var _tY_ = _cP_(img[3]), _tZ_ = _cP_(img[2]); + return {src: _cP_(img[1]), sizes: _tZ_, type: _tY_}; } function to_jv(t){ var artwork = of_list$0(img_to_jv, t[4]), - _tQ_ = _cN_(t[3]), - _tR_ = _cN_(t[2]); - return {title: _cN_(t[1]), artist: _tR_, album: _tQ_, artwork: artwork}; + _tW_ = _cP_(t[3]), + _tX_ = _cP_(t[2]); + return {title: _cP_(t[1]), artist: _tX_, album: _tW_, artwork: artwork}; } function set_metadata(t, v){ - log([0, _c$_, [0, to_jv(v), 0]]); - var _tP_ = to_jv(v), metadata = new global["MediaMetadata"](_tP_); + log([0, _db_, [0, to_jv(v), 0]]); + var _tV_ = to_jv(v), metadata = new global["MediaMetadata"](_tV_); t["metadata"] = metadata; return; } @@ -10530,25 +10554,25 @@ return map(function(v){return [0, name, v];}, v); } var - duration$0 = maybe_float(_da_, duration), - playback_rate$0 = maybe_float(_db_, playback_rate), - position$0 = maybe_float(_dc_, position), + duration$0 = maybe_float(_dc_, duration), + playback_rate$0 = maybe_float(_dd_, playback_rate), + position$0 = maybe_float(_de_, position), state_dict = - filter_map(function(_tO_){return _tO_;}) + filter_map(function(_tU_){return _tU_;}) ([0, duration$0, [0, playback_rate$0, [0, position$0, 0]]]), args = state_dict ? [0, caml_js_object(of_list(state_dict))] : [0]; log([0, args, 0]); caml_js_meth_call(t, "setPositionState", args); return 0; } - function _dd_(_tN_, _tM_, _tL_){return;} + function _df_(_tT_, _tS_, _tR_){return;} var submit = cst_submit, pattern = "pattern"; function persist(t){ - function _tI_(_tK_){return _tK_ | 0;} - return function(_tJ_){return of_promise$0(_tI_, _tJ_);}(t.persist()); + function _tO_(_tQ_){return _tQ_ | 0;} + return function(_tP_){return of_promise$0(_tO_, _tP_);}(t.persist()); } function manager(n){return n["storage"];} - function any(_tH_){return _tH_;} + function any(_tN_){return _tN_;} function return$1(x){return [0, x];} function pure(x){return [0, x];} function is_pure(x){ @@ -10579,7 +10603,7 @@ function add_idx(obj, idx, param){ switch(param[0]){ case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _de_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dg_], 1); case 1: param[3] = [0, idx, obj, param[3]]; return; default: param[2] = [0, idx, obj, param[2]]; return; @@ -10587,7 +10611,7 @@ } function rem_idx_rec(obj, self){ if(! self) - throw caml_maybe_attach_backtrace([0, Assert_failure, _df_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dh_], 1); if(self[2] === obj) return [0, self[1], self[3]]; var match = rem_idx_rec(obj, self[3]), result = match[2], idx = match[1]; self[3] = result; @@ -10596,7 +10620,7 @@ function rem_idx(obj, param){ switch(param[0]){ case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dg_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _di_], 1); case 1: var match = rem_idx_rec(obj, param[3]), @@ -10616,15 +10640,15 @@ function mov_idx_rec(obj, oldidx, newidx, param){ var t = param; for(;;){ - if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _dh_], 1); + if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _dj_], 1); if(t[1] === oldidx && t[2] === obj){t[1] = newidx; return;} - var t = t[3]; + t = t[3]; } } function mov_idx(obj, oldidx, newidx, param){ switch(param[0]){ case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _di_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dk_], 1); case 1: return mov_idx_rec(obj, oldidx, newidx, param[3]); default: return mov_idx_rec(obj, oldidx, newidx, param[2]); @@ -10633,15 +10657,15 @@ function get_idx_rec(obj, param){ var t = param; for(;;){ - if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _dj_], 1); + if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _dl_], 1); if(t[2] === obj) return t[1]; - var t = t[3]; + t = t[3]; } } function get_idx(obj, param){ switch(param[0]){ case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dk_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dm_], 1); case 1: return get_idx_rec(obj, param[3]); default: return get_idx_rec(obj, param[2]); @@ -10650,22 +10674,22 @@ function invalidate_node$0(counter, status, sensitivity, node){ switch(node[0]){ case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dl_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dn_], 1); case 1: - var _tB_ = node[1]; - if(typeof _tB_ === "number" && ! _tB_){ + var _tH_ = node[1]; + if(typeof _tH_ === "number" && ! _tH_){ if(! sensitivity) return; if(status[1]) return; status[1] = 1; return; } - var _tC_ = node[4]; - if(7 === _tC_[0]){ - var _tF_ = _tC_[2]; - if(1 === _tF_[0]){ - var _tG_ = _tF_[1]; - if(typeof _tG_ === "number"){ - if(! _tG_ && sensitivity){ + var _tI_ = node[4]; + if(7 === _tI_[0]){ + var _tL_ = _tI_[2]; + if(1 === _tL_[0]){ + var _tM_ = _tL_[1]; + if(typeof _tM_ === "number"){ + if(! _tM_ && sensitivity){ if(status[1]) return; status[1] = 1; return; @@ -10674,19 +10698,19 @@ else if(sensitivity) return; } } - var _tD_ = node[1]; + var _tJ_ = node[1]; a: { - if(typeof _tD_ === "number" && _tD_){var sensitivity$0 = 1; break a;} + if(typeof _tJ_ === "number" && _tJ_){var sensitivity$0 = 1; break a;} var sensitivity$0 = sensitivity; } node[1] = 0; - var _tE_ = node[2]; + var _tK_ = node[2]; if(counter >= 50) return caml_trampoline_return - (invalidate_trace, [0, status, sensitivity$0, _tE_]); + (invalidate_trace, [0, status, sensitivity$0, _tK_]); var counter$0 = counter + 1 | 0; - return invalidate_trace(counter$0, status, sensitivity$0, _tE_); + return invalidate_trace(counter$0, status, sensitivity$0, _tK_); default: var value = node[1]; node[1] = 0; @@ -10743,15 +10767,15 @@ default: var active = t[1]; t[1] = 0; - var _tz_ = active - 1 | 0, _ty_ = 0; - if(_tz_ >= 0){ - var i = _ty_; + var _tF_ = active - 1 | 0, _tE_ = 0; + if(_tF_ >= 0){ + var i = _tE_; for(;;){ invalidate_node (status, sensitivity, caml_check_bound(t[3], i)[1 + i]); - var _tA_ = i + 1 | 0; - if(_tz_ === i) break; - var i = _tA_; + var _tG_ = i + 1 | 0; + if(_tF_ === i) break; + i = _tG_; } } return; @@ -10759,7 +10783,7 @@ } function default_unsafe_mutation_logger(param){ var callstack = caml_get_current_callstack(20); - return caml_call2(fprintf(stderr, _dm_), print_raw_backtrace, callstack); + return caml_call2(fprintf(stderr, _do_), print_raw_backtrace, callstack); } function do_invalidate(sensitivity, node){ var status = [0, 0]; @@ -10769,21 +10793,21 @@ } function var$0(x){return operator([5, x]);} function get$3(x){return x;} - function symbol$2(vx, x){ + function symbol$1(vx, x){ if(1 === vx[0]){ var match = vx[4]; if(5 === match[0]){match[1] = x; return do_invalidate(0, vx);} } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dn_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dp_], 1); } function peek(param){ if(1 === param[0]){ var match = param[4]; if(5 === match[0]) return match[1]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _do_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dq_], 1); } - function update(f, v){return symbol$2(v, caml_call1(f, peek(v)));} + function update(f, v){return symbol$1(v, caml_call1(f, peek(v)));} function prim(acquire, release){return operator([6, acquire, release]);} function get_prim(x){return x;} function invalidate(x){ @@ -10796,7 +10820,7 @@ return caml_call2(p[2], x, v); } } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dp_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dr_], 1); } function sub_release(failures, origin, self){ var failures$0 = failures, origin$1 = origin, origin$0 = self; @@ -10807,57 +10831,57 @@ case 1: var trace = origin$0[2]; if(typeof trace === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _dq_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ds_], 1); switch(trace[0]){ case 0: var x = trace[1]; if(x !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dr_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dt_], 1); var trace$0 = 0; break; case 1: var y = trace[2], x$4 = trace[1]; if(x$4 === origin$1) - var _ts_ = [0, y]; + var _ty_ = [0, y]; else{ if(y !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ds_], 1); - var _ts_ = [0, x$4]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _du_], 1); + var _ty_ = [0, x$4]; } - var trace$0 = _ts_; + var trace$0 = _ty_; break; case 2: var z = trace[3], y$0 = trace[2], x$5 = trace[1]; if(x$5 === origin$1) - var _tt_ = [1, y$0, z]; + var _tz_ = [1, y$0, z]; else if(y$0 === origin$1) - var _tt_ = [1, x$5, z]; + var _tz_ = [1, x$5, z]; else{ if(z !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dt_], 1); - var _tt_ = [1, x$5, y$0]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _dv_], 1); + var _tz_ = [1, x$5, y$0]; } - var trace$0 = _tt_; + var trace$0 = _tz_; break; case 3: var w = trace[4], z$0 = trace[3], y$1 = trace[2], x$6 = trace[1]; if(x$6 === origin$1) - var _tu_ = [2, y$1, z$0, w]; + var _tA_ = [2, y$1, z$0, w]; else if(y$1 === origin$1) - var _tu_ = [2, x$6, z$0, w]; + var _tA_ = [2, x$6, z$0, w]; else if(z$0 === origin$1) - var _tu_ = [2, x$6, y$1, w]; + var _tA_ = [2, x$6, y$1, w]; else{ if(w !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _du_], 1); - var _tu_ = [2, x$6, y$1, z$0]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _dw_], 1); + var _tA_ = [2, x$6, y$1, z$0]; } - var trace$0 = _tu_; + var trace$0 = _tA_; break; default: var revidx = rem_idx(origin$0, origin$1); if(caml_check_bound(trace[3], revidx)[1 + revidx] !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dv_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dx_], 1); var count = trace[2] - 1 | 0; trace[2] = count; if(revidx < count){ @@ -10879,19 +10903,19 @@ rem_idx(origin$0, b); rem_idx(origin$0, c); rem_idx(origin$0, d); - var _tv_ = [3, a, b, c, d]; + var _tB_ = [3, a, b, c, d]; } else{ var len = trace[3].length - 1; if(count <= (len >>> 2 | 0)) var - _tw_ = sub$1(trace[3], 0, len >>> 1 | 0), - _tx_ = [4, trace[1], trace[2], _tw_]; + _tC_ = sub$1(trace[3], 0, len >>> 1 | 0), + _tD_ = [4, trace[1], trace[2], _tC_]; else - var _tx_ = trace; - var _tv_ = _tx_; + var _tD_ = trace; + var _tB_ = _tD_; } - var trace$0 = _tv_; + var trace$0 = _tB_; } origin$0[2] = trace$0; if(typeof trace$0 !== "number") return failures$0; @@ -10900,33 +10924,33 @@ var t = origin$0[4]; switch(t[0]){ case 0: - var self$0 = t[1], origin$1 = origin$0, origin$0 = self$0; break; + var self$0 = t[1]; origin$1 = origin$0; origin$0 = self$0; break; case 1: var self$1 = t[2], x$0 = t[1], - failures$1 = sub_release(failures$0, origin$0, x$0), - failures$0 = failures$1, - origin$1 = origin$0, - origin$0 = self$1; + failures$1 = sub_release(failures$0, origin$0, x$0); + failures$0 = failures$1; + origin$1 = origin$0; + origin$0 = self$1; break; case 2: var self$2 = t[2], x$1 = t[1], - failures$2 = sub_release(failures$0, origin$0, x$1), - failures$0 = failures$2, - origin$1 = origin$0, - origin$0 = self$2; + failures$2 = sub_release(failures$0, origin$0, x$1); + failures$0 = failures$2; + origin$1 = origin$0; + origin$0 = self$2; break; case 3: var self$3 = t[2], x$2 = t[1], - failures$3 = sub_release(failures$0, origin$0, x$2), - failures$0 = failures$3, - origin$1 = origin$0, - origin$0 = self$3; + failures$3 = sub_release(failures$0, origin$0, x$2); + failures$0 = failures$3; + origin$1 = origin$0; + origin$0 = self$3; break; case 4: var @@ -10936,10 +10960,9 @@ if(! intermediate) return failures$4; var child$0 = intermediate[1]; t[2] = 0; - var - failures$0 = failures$4, - origin$1 = origin$0, - origin$0 = child$0; + failures$0 = failures$4; + origin$1 = origin$0; + origin$0 = child$0; break; case 5: return failures$0; @@ -10948,21 +10971,21 @@ var x$3 = value[1]; try{caml_call2(t[2], origin$0, x$3); return failures$0;} catch(exn$0){ - var exn = caml_wrap_exception(exn$0), bt = _ch_(0); + var exn = caml_wrap_exception(exn$0), bt = _ci_(0); return [0, [0, exn, bt], failures$0]; } default: var wrt = t[2], self$4 = t[1], - failures$5 = sub_release(failures$0, origin$0, wrt), - failures$0 = failures$5, - origin$1 = origin$0, - origin$0 = self$4; + failures$5 = sub_release(failures$0, origin$0, wrt); + failures$0 = failures$5; + origin$1 = origin$0; + origin$0 = self$4; } break; default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dw_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dy_], 1); } } function sub_acquire(origin, self){ @@ -11001,9 +11024,9 @@ i = 0; for(;;){ add_idx(origin$0, i, caml_check_bound(entries, i)[1 + i]); - var _tr_ = i + 1 | 0; + var _tx_ = i + 1 | 0; if(4 === i) break; - var i = _tr_; + i = _tx_; } var trace$0 = [4, 5, 5, entries]; break; @@ -11029,28 +11052,33 @@ var match = origin$0[4]; switch(match[0]){ case 0: - var self$0 = match[1], origin$1 = origin$0, origin$0 = self$0; + var self$0 = match[1]; + origin$1 = origin$0; + origin$0 = self$0; break; case 1: var self$1 = match[2], x = match[1]; sub_acquire(origin$0, x); - var origin$1 = origin$0, origin$0 = self$1; + origin$1 = origin$0; + origin$0 = self$1; break; case 2: var self$2 = match[2], x$0 = match[1]; sub_acquire(origin$0, x$0); - var origin$1 = origin$0, origin$0 = self$2; + origin$1 = origin$0; + origin$0 = self$2; break; case 3: var self$3 = match[2], x$1 = match[1]; sub_acquire(origin$0, x$1); - var origin$1 = origin$0, origin$0 = self$3; + origin$1 = origin$0; + origin$0 = self$3; break; case 4: var child = match[1], intermediate = match[2]; sub_acquire(origin$0, child); if(intermediate) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dx_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dz_], 1); return; case 5: return; @@ -11059,19 +11087,20 @@ default: var self$4 = match[2], doc = match[1]; sub_acquire(origin$0, doc); - var origin$1 = origin$0, origin$0 = self$4; + origin$1 = origin$0; + origin$0 = self$4; } break; default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dy_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dA_], 1); } } function activate_tracing(self, origin, tn){ if(typeof tn !== "number" && 4 === tn[0]){ var idx = get_idx(self, origin), active = tn[1]; if(active <= idx) tn[1] = active + 1 | 0; - var _tq_ = active < idx ? 1 : 0; - if(! _tq_) return _tq_; + var _tw_ = active < idx ? 1 : 0; + if(! _tw_) return _tw_; var old = caml_check_bound(tn[3], active)[1 + active]; caml_check_bound(tn[3], idx)[1 + idx] = old; caml_check_bound(tn[3], active)[1 + active] = origin; @@ -11088,10 +11117,10 @@ var value = param[1]; if(typeof value !== "number") return 0; if(value) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dz_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dB_], 1); return 1; default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dA_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dC_], 1); } } function sub_sample(queue){ @@ -11120,22 +11149,22 @@ f$0 = x$0[3], y = x$0[2], x$2 = x$0[1], - _tm_ = aux(self, y), - result = caml_call2(f$0, aux(self, x$2), _tm_); + _ts_ = aux(self, y), + result = caml_call2(f$0, aux(self, x$2), _ts_); break; case 2: var y$0 = x$0[2], x$3 = x$0[1], - _tn_ = aux(self, y$0), - result = [0, aux(self, x$3), _tn_]; + _tt_ = aux(self, y$0), + result = [0, aux(self, x$3), _tt_]; break; case 3: var x$4 = x$0[2], f$1 = x$0[1], - _to_ = aux(self, x$4), - result = caml_call1(aux(self, f$1), _to_); + _tu_ = aux(self, x$4), + result = caml_call1(aux(self, f$1), _tu_); break; case 4: var intermediate = aux(self, x$0[1]), match$0 = x$0[2]; @@ -11159,20 +11188,20 @@ aux(self, wrt); var result$0 = aux(self, doc); if(sub_is_damaged(wrt)) - var _tp_ = aux(origin, self); + var _tv_ = aux(origin, self); else{ if(sub_is_damaged(doc)) do_invalidate(1, self); - var _tp_ = result$0; + var _tv_ = result$0; } - var result = _tp_; + var result = _tv_; } - var _tl_ = self[1]; + var _tr_ = self[1]; a: - if(typeof _tl_ === "number" && _tl_){self[1] = [0, result]; break a;} + if(typeof _tr_ === "number" && _tr_){self[1] = [0, result]; break a;} activate_tracing(self, origin, self[2]); return result; default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dB_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dD_], 1); } } return aux; @@ -11181,20 +11210,19 @@ if(opt) var sth = opt[1], on_invalidate = sth; else - var on_invalidate = function(_tk_){return 0;}; + var on_invalidate = function(_tq_){return 0;}; var root = [2, 0, 0, on_invalidate, 0, child]; return root; } - var Release_failure = [248, _dC_, caml_fresh_oo_id(0)]; + var Release_failure = [248, _dE_, caml_fresh_oo_id(0)]; function raw_flush_release_queue(queue){ function aux(failures, param){ var failures$0 = failures, param$0 = param; for(;;){ if(! param$0) return failures$0; - var - failures$1 = sub_release(failures$0, param$0[1], param$0[2]), - failures$0 = failures$1, - param$0 = param$0[3]; + var failures$1 = sub_release(failures$0, param$0[1], param$0[2]); + failures$0 = failures$1; + param$0 = param$0[3]; } } return aux(0, queue); @@ -11206,19 +11234,19 @@ } function sample(queue, self){ if(2 !== self[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dD_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dF_], 1); var match = self[1]; if(typeof match !== "number"){var value$0 = match[1]; return value$0;} if(1 - self[4]){self[4] = 1; sub_acquire(self, self[5]);} self[1] = 1; - var _ti_ = self[5], value = sub_sample(queue)(self, _ti_), _tj_ = self[1]; + var _to_ = self[5], value = sub_sample(queue)(self, _to_), _tp_ = self[1]; a: - if(typeof _tj_ === "number" && _tj_){self[1] = [0, value]; break a;} + if(typeof _tp_ === "number" && _tp_){self[1] = [0, value]; break a;} return value; } function set_on_invalidate(x, f){ if(2 !== x[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dE_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dG_], 1); x[3] = f; return 0; } @@ -11249,12 +11277,10 @@ if(xs$0){ var xs$1 = xs$0[2], match = xs$0[1], v$1 = match[2], c$1 = match[1]; if(c$0 === c$1){ - var - v$2 = caml_call2(plus, v$1, v$0), - c$2 = c$0 + 1 | 0, - c$0 = c$2, - xs$0 = xs$1, - v$0 = v$2; + var v$2 = caml_call2(plus, v$1, v$0), c$2 = c$0 + 1 | 0; + c$0 = c$2; + xs$0 = xs$1; + v$0 = v$2; continue; } } @@ -11280,7 +11306,7 @@ function set_parent(parent, param){ if(typeof param === "number") return; if(0 !== param[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dF_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dH_], 1); param[5] = parent; return; } @@ -11295,11 +11321,11 @@ var param$0 = param; for(;;){ if(typeof param$0 === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _dG_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dI_], 1); if(0 !== param$0[0]) return iter$0(invalidate, param$0[4]); if(0 === param$0[6]) return; param$0[6] = 0; - var param$0 = param$0[5]; + param$0 = param$0[5]; } } function append(set, parent){ @@ -11309,7 +11335,7 @@ parent[2] = node; return node; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dH_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dJ_], 1); } function get$4(param){ if(typeof param !== "number" && 0 === param[0]){ @@ -11326,7 +11352,7 @@ function set_binding(x, t){ if(typeof t !== "number"){ if(0 !== t[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dI_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dK_], 1); if(typeof t[5] !== "number"){ raw_invalidate(t); invalidate_binding(t[3]); @@ -11336,7 +11362,7 @@ } return 0; } - function symbol$3(t, value){return set_binding([0, value, 1], t);} + function symbol$2(t, value){return set_binding([0, value, 1], t);} function clear$2(root){ var root$0 = root; for(;;){ @@ -11355,36 +11381,36 @@ root$0[3] = 0; root$0[1] = max_int; clear$2(left); - var root$0 = right; + root$0 = right; } } function size(node){ if(typeof node === "number") return 0; if(0 !== node[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dK_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dM_], 1); if(0 === node[6]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dJ_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dL_], 1); return node[6]; } function smaller_ell(smin, smax){ var - _tg_ = smin < smax ? 1 : 0, - _th_ = _tg_ ? (smin & smax) << 1 < smax ? 1 : 0 : _tg_; - return _th_; + _tm_ = smin < smax ? 1 : 0, + _tn_ = _tm_ ? (smin & smax) << 1 < smax ? 1 : 0 : _tm_; + return _tn_; } function disbalanced(smin, smax){return smaller_ell(smin, smax >>> 1 | 0);} function reparent(parent, oldchild, newchild){ if(typeof parent !== "number"){ if(0 !== parent[0]){ if(parent[2] !== oldchild) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dM_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dO_], 1); parent[2] = newchild; return; } if(parent[2] === oldchild){parent[2] = newchild; return;} if(parent[4] === oldchild){parent[4] = newchild; return;} } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dL_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dN_], 1); } function rot_left$0(counter, version, sn){ if(typeof sn !== "number" && 0 === sn[0]){ @@ -11395,7 +11421,7 @@ var rl$0 = 0; else{ if(0 !== rl[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dO_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dQ_], 1); rl[5] = sn; var rl$0 = rl; } @@ -11411,7 +11437,7 @@ return balance$0(counter$0, version, rn); } } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dN_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dP_], 1); } function rot_left(version, sn){ return caml_trampoline(rot_left$0(0, version, sn)); @@ -11425,7 +11451,7 @@ var lr$0 = 0; else{ if(0 !== lr[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dQ_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dS_], 1); lr[5] = sn; var lr$0 = lr; } @@ -11441,7 +11467,7 @@ return balance$0(counter$0, version, ln); } } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dP_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dR_], 1); } function rot_right(version, sn){ return caml_trampoline(rot_right$0(0, version, sn)); @@ -11451,30 +11477,30 @@ var right = self[4]; a: if(typeof right !== "number" && 0 === right[0]){ - var _tf_ = size(right[2]); - if(smaller_ell(size(right[4]), _tf_)){rot_right(version, right); break a;} + var _tl_ = size(right[2]); + if(smaller_ell(size(right[4]), _tl_)){rot_right(version, right); break a;} } if(counter >= 50) return caml_trampoline_return(rot_left$0, [0, version, self]); var counter$0 = counter + 1 | 0; return rot_left$0(counter$0, version, self); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dR_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dT_], 1); } function inc_right(counter, version, self){ if(typeof self !== "number" && 0 === self[0]){ var left = self[2]; a: if(typeof left !== "number" && 0 === left[0]){ - var _te_ = size(left[4]); - if(smaller_ell(size(left[2]), _te_)){rot_left(version, left); break a;} + var _tk_ = size(left[4]); + if(smaller_ell(size(left[2]), _tk_)){rot_left(version, left); break a;} } if(counter >= 50) return caml_trampoline_return(rot_right$0, [0, version, self]); var counter$0 = counter + 1 | 0; return rot_right$0(counter$0, version, self); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dS_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dU_], 1); } function balance$0(counter, version, self){ if(typeof self !== "number" && 0 === self[0]){ @@ -11500,7 +11526,7 @@ var counter$0 = counter + 1 | 0; return inc_right(counter$0, version, self); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dT_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dV_], 1); } function balance(version, self){ return caml_trampoline(balance$0(0, version, self)); @@ -11510,15 +11536,15 @@ for(;;){ if(typeof self$0 === "number") return; if(0 !== self$0[0]) return; - var _tb_ = 0 === self$0[6] ? 1 : 0; - if(! _tb_) return _tb_; - var _tc_ = self$0[2]; - if(typeof _tc_ !== "number" && 0 === _tc_[0] && 0 === _tc_[6]){var self$2 = self$0[2], self$0 = self$2; continue;} - var _td_ = self$0[4]; - if(typeof _td_ !== "number" && 0 === _td_[0] && 0 === _td_[6]){var self$1 = self$0[4], self$0 = self$1; continue;} + var _th_ = 0 === self$0[6] ? 1 : 0; + if(! _th_) return _th_; + var _ti_ = self$0[2]; + if(typeof _ti_ !== "number" && 0 === _ti_[0] && 0 === _ti_[6]){var self$2 = self$0[2]; self$0 = self$2; continue;} + var _tj_ = self$0[4]; + if(typeof _tj_ !== "number" && 0 === _tj_[0] && 0 === _tj_[6]){var self$1 = self$0[4]; self$0 = self$1; continue;} var parent = self$0[5]; balance(version, self$0); - var self$0 = parent; + self$0 = parent; } } function reset_version(version, param){ @@ -11526,19 +11552,19 @@ for(;;){ if(typeof param$0 === "number") return; if(0 !== param$0[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dU_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dW_], 1); param$0[1] = version; reset_version(version, param$0[2]); - var param$0 = param$0[4]; + param$0 = param$0[4]; } } function rebalance(r){ if(typeof r !== "number" && 1 === r[0]){ - var _ta_ = r[2]; - if(typeof _ta_ !== "number"){ - if(0 !== _ta_[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dW_], 1); - if(0 === _ta_[6]){ + var _tg_ = r[2]; + if(typeof _tg_ !== "number"){ + if(0 !== _tg_[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _dY_], 1); + if(0 === _tg_[6]){ var version = r[1] + 1 | 0, version$0 = @@ -11552,7 +11578,7 @@ } return r[1]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dV_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dX_], 1); } function plus(param, x, y){ var plus = param[2], zero = param[1]; @@ -11563,14 +11589,15 @@ var acc$0 = acc, rnode = param; for(;;){ if(! rnode) return acc$0; - var acc$1 = aux(acc$0, rnode[6]), _s__ = rnode[2]; - if(_s__) + var acc$1 = aux(acc$0, rnode[6]), _te_ = rnode[2]; + if(_te_) var - _s$_ = _s__[2] ? [0, [0, rnode[2], rnode[3]], acc$1] : acc$1, - acc$2 = _s$_; + _tf_ = _te_[2] ? [0, [0, rnode[2], rnode[3]], acc$1] : acc$1, + acc$2 = _tf_; else var acc$2 = acc$1; - var acc$0 = acc$2, rnode = rnode[5]; + acc$0 = acc$2; + rnode = rnode[5]; } } return aux(0, tree); @@ -11580,14 +11607,14 @@ function aux(cell){ if(typeof cell === "number") return 0; if(0 !== cell[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dY_], 1); - var left = aux(cell[2]), binding = cell[3], _s9_ = bindings[1]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _d0_], 1); + var left = aux(cell[2]), binding = cell[3], _td_ = bindings[1]; a: if(binding){ - if(_s9_){ + if(_td_){ var - bindings$0 = _s9_[2], - match = _s9_[1], + bindings$0 = _td_[2], + match = _td_[1], reduction = match[2], binding$0 = match[1]; if(binding === binding$0){ @@ -11597,7 +11624,7 @@ } } if(! binding[2]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dX_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dZ_], 1); var reduction$0 = caml_call2(red[5], cell, binding[1]); } else @@ -11610,7 +11637,7 @@ } var result = aux(tree); if(0 === bindings[1]) return result; - throw caml_maybe_attach_backtrace([0, Assert_failure, _dZ_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d1_], 1); } function extract_fringe(version, tree){ function aux(acc, tree){ @@ -11620,12 +11647,14 @@ var match = rnode[1]; if(typeof match !== "number" && 0 === match[0] && match[1] <= version) return [0, rnode, acc$0]; - var acc$1 = aux(acc$0, rnode[6]), _s7_ = rnode[2]; - if(_s7_) - var _s8_ = _s7_[2] ? [0, rnode, acc$1] : acc$1, acc$2 = _s8_; + var acc$1 = aux(acc$0, rnode[6]), _tb_ = rnode[2]; + if(_tb_) + var _tc_ = _tb_[2] ? [0, rnode, acc$1] : acc$1, acc$2 = _tc_; else var acc$2 = acc$1; - var tree$0 = rnode[5], acc$0 = acc$2, rnode = tree$0; + var tree$0 = rnode[5]; + acc$0 = acc$2; + rnode = tree$0; } } return aux(0, tree); @@ -11641,29 +11670,29 @@ if(reduction){ var fringe$0 = match[2]; if(reduction[1] !== cell) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d0_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d2_], 1); fringe[1] = fringe$0; return reduction; } } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d1_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d3_], 1); } - var left = aux(cell[2]), binding = cell[3], _s5_ = fringe[1]; + var left = aux(cell[2]), binding = cell[3], _s$_ = fringe[1]; a: if(binding){ - if(_s5_){ - var rnode = _s5_[1]; + if(_s$_){ + var rnode = _s$_[1]; if(rnode){ - var fringe$1 = _s5_[2]; + var fringe$1 = _s$_[2]; if(binding === rnode[2]){ fringe[1] = fringe$1; - var _s6_ = rnode[3], reduction$0 = _s6_; + var _ta_ = rnode[3], reduction$0 = _ta_; break a; } } } if(! binding[2]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d2_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d4_], 1); var reduction$0 = caml_call2(red[5], cell, binding[1]); } else @@ -11678,7 +11707,7 @@ } var result = aux(tree); if(0 === fringe[1]) return result; - throw caml_maybe_attach_backtrace([0, Assert_failure, _d3_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d5_], 1); } function eval$0(red){ var root = red[2]; @@ -11694,9 +11723,9 @@ var match = red[3]; return match ? match[4] : red[6][1]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d4_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d6_], 1); } - function opaque(_s4_){return _s4_;} + function opaque(_s__){return _s__;} function map_reduce$0(mapper, monoid, source){ var reduction = [0, 0, source, 0, not_origin, mapper, monoid], @@ -11705,23 +11734,23 @@ (function(self){ var match = reduction[2]; if(typeof match !== "number" && 1 === match[0]){ - var _s3_ = match[4]; - match[4] = [0, opaque(self), _s3_]; + var _s9_ = match[4]; + match[4] = [0, opaque(self), _s9_]; return reduction; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d6_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d8_], 1); }, function(self, reduction){ var match = reduction[2]; if(typeof match !== "number" && 1 === match[0]){ var - _sX_ = match[4], - _sY_ = opaque(self), - _sZ_ = function(_s2_, _s1_){return _s2_ !== _s1_ ? 1 : 0;}; - match[4] = find_all(function(_s0_){return _sZ_(_sY_, _s0_);})(_sX_); + _s3_ = match[4], + _s4_ = opaque(self), + _s5_ = function(_s8_, _s7_){return _s8_ !== _s7_ ? 1 : 0;}; + match[4] = find_all(function(_s6_){return _s5_(_s4_, _s6_);})(_s3_); return 0; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d5_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d7_], 1); }); return func(get_prim(prim$0), eval$0); } @@ -11730,8 +11759,8 @@ function maxi(a, b){return a < b ? b : a;} function rank(t){ if(typeof t === "number") return 0; - if(0 === t[0]){if(0 !== t[1]) invalid_arg(_d7_); return 0;} - if(0 !== (t[1] & 2)) invalid_arg(_d8_); + if(0 === t[0]){if(0 !== t[1]) invalid_arg(_d9_); return 0;} + if(0 !== (t[1] & 2)) invalid_arg(_d__); return t[1] >>> 2 | 0; } function concat$1(a, b){ @@ -11739,8 +11768,8 @@ var x = b; else{ if(typeof b !== "number"){ - var _sW_ = rank(b); - return [1, (maxi(rank(a), _sW_) + 1 | 0) << 2, a, b]; + var _s2_ = rank(b); + return [1, (maxi(rank(a), _s2_) + 1 | 0) << 2, a, b]; } var x = a; } @@ -11775,11 +11804,11 @@ if(0 === t[0]){ var mark = t[1], - _sS_ = (mark & 3) !== 3 ? 1 : 0, - _sT_ = _sS_ ? 0 !== (mark & 3) ? 1 : 0 : _sS_; - if(_sT_){ + _sY_ = (mark & 3) !== 3 ? 1 : 0, + _sZ_ = _sY_ ? 0 !== (mark & 3) ? 1 : 0 : _sY_; + if(_sZ_){ if(0 !== (mark & mask)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d9_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d$_], 1); new_marked(stats); new_blocked(stats); t[1] = mark | 3; @@ -11788,16 +11817,16 @@ } var mark$0 = t[1], - _sU_ = (mark$0 & 3) !== 3 ? 1 : 0, - _sV_ = _sU_ ? 0 !== (mark$0 & 3) ? 1 : 0 : _sU_; - if(! _sV_) return _sV_; + _s0_ = (mark$0 & 3) !== 3 ? 1 : 0, + _s1_ = _s0_ ? 0 !== (mark$0 & 3) ? 1 : 0 : _s0_; + if(! _s1_) return _s1_; if(0 !== (mark$0 & mask)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d__], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ea_], 1); new_marked(stats); new_blocked(stats); t[1] = mark$0 | 3; block(stats, mask, t[2]); - var t = t[3]; + t = t[3]; } } function enqueue(stats, q, mask, t){ @@ -11811,9 +11840,9 @@ else{t[1] = -1; new_blocked(stats); new_shared(stats);} } var - _sO_ = -1 !== mark ? 1 : 0, - _sP_ = _sO_ ? (mark & 3) === 3 ? 1 : 0 : _sO_; - return _sP_ ? (t[1] = -1, new_shared(stats)) : _sP_; + _sU_ = -1 !== mark ? 1 : 0, + _sV_ = _sU_ ? (mark & 3) === 3 ? 1 : 0 : _sU_; + return _sV_ ? (t[1] = -1, new_shared(stats)) : _sV_; } var mark$0 = t[1]; if(0 === (mark$0 & mask)){ @@ -11831,19 +11860,19 @@ } } var - _sQ_ = -1 !== mark$0 ? 1 : 0, - _sR_ = _sQ_ ? (mark$0 & 3) === 3 ? 1 : 0 : _sQ_; - return _sR_ ? (t[1] = -1, new_shared(stats)) : _sR_; + _sW_ = -1 !== mark$0 ? 1 : 0, + _sX_ = _sW_ ? (mark$0 & 3) === 3 ? 1 : 0 : _sW_; + return _sX_ ? (t[1] = -1, new_shared(stats)) : _sX_; } function dequeue(stats, q, mask){ var t = take(q); if(typeof t !== "number" && 1 === t[0]){ - var _sN_ = (t[1] & 3) === mask ? 1 : 0; - return _sN_ + var _sT_ = (t[1] & 3) === mask ? 1 : 0; + return _sT_ ? (enqueue(stats, q, mask, t[2]), enqueue(stats, q, mask, t[3])) - : _sN_; + : _sT_; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d$_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eb_], 1); } function traverse1(stats, q, mask){ for(;;){if(is_empty(q)) return; dequeue(stats, q, mask);} @@ -11872,8 +11901,8 @@ function restore(param){ if(typeof param === "number") return; if(0 === param[0]){param[1] = 0; return;} - var _sM_ = rank(param[3]); - param[1] = (maxi(rank(param[2]), _sM_) + 1 | 0) << 2; + var _sS_ = rank(param[3]); + param[1] = (maxi(rank(param[2]), _sS_) + 1 | 0) << 2; return; } function next_shared_index(st){ @@ -11890,12 +11919,12 @@ if(typeof t !== "number" && 0 === t[0]){ var mark = t[1], - _sI_ = is_not_shared(mark), - _sJ_ = _sI_ ? is_both(mark) : _sI_; - if(_sJ_) t[1] = unmark(mark); + _sO_ = is_not_shared(mark), + _sP_ = _sO_ ? is_both(mark) : _sO_; + if(_sP_) t[1] = unmark(mark); return; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ea_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ec_], 1); } var t$0 = param$0[1]; if(typeof t$0 !== "number" && 1 === t$0[0]){ @@ -11903,15 +11932,15 @@ r = param$0[4], l = param$0[3], mark$0 = t$0[1], - _sK_ = is_not_shared(mark$0), - _sL_ = _sK_ ? is_both(mark$0) : _sK_; - if(! _sL_) return _sL_; + _sQ_ = is_not_shared(mark$0), + _sR_ = _sQ_ ? is_both(mark$0) : _sQ_; + if(! _sR_) return _sR_; t$0[1] = unmark(mark$0); unblock(l); - var param$0 = r; + param$0 = r; continue; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _eb_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ed_], 1); } } function unmark_old(st, t){ @@ -11933,26 +11962,26 @@ if(is_new(mark)){ var index$0 = get_index(mark), - _sE_ = [0, t$0, caml_check_bound(st[5], index$0)[1 + index$0]]; - caml_check_bound(st[5], index$0)[1 + index$0] = _sE_; + _sK_ = [0, t$0, caml_check_bound(st[5], index$0)[1 + index$0]]; + caml_check_bound(st[5], index$0)[1 + index$0] = _sK_; return; } - var _sF_ = is_both(mark); - if(_sF_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ee_], 1); - return _sF_; + var _sL_ = is_both(mark); + if(_sL_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _eg_], 1); + return _sL_; } var dropped_leaf = st[2]; if(-1 < dropped_leaf){ caml_check_bound(st[1], dropped_leaf)[1 + dropped_leaf] = b; st[2] = dropped_leaf + 1 | 0; if(st[2] > st[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ed_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ef_], 1); } a[1] = unmark(mark); return; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ec_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ee_], 1); } var a$0 = t$0[1]; if(typeof a$0 !== "number" && 1 === a$0[0]){ @@ -11969,34 +11998,34 @@ if(is_new(mark$0)){ var index$2 = mark$0 >>> 2 | 0, - _sG_ = [0, t$0, caml_check_bound(st[5], index$2)[1 + index$2]]; - caml_check_bound(st[5], index$2)[1 + index$2] = _sG_; + _sM_ = [0, t$0, caml_check_bound(st[5], index$2)[1 + index$2]]; + caml_check_bound(st[5], index$2)[1 + index$2] = _sM_; return; } - var _sH_ = is_both(mark$0); - if(_sH_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _eh_], 1); - return _sH_; + var _sN_ = is_both(mark$0); + if(_sN_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _ej_], 1); + return _sN_; } if(-1 < st[3]){ var dropped_join = st[3] - 1 | 0; caml_check_bound(st[1], dropped_join)[1 + dropped_join] = b$0; st[3] = dropped_join; if(st[2] > st[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _eg_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ei_], 1); } a$0[1] = unmark(mark$0); unmark_old(st, l); - var t$0 = r; + t$0 = r; continue; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ef_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eh_], 1); } } function prepare_shared(st){ - var _sB_ = st[6] - 1 | 0, _sA_ = 0; - if(_sB_ >= 0){ - var i = _sA_; + var _sH_ = st[6] - 1 | 0, _sG_ = 0; + if(_sH_ >= 0){ + var i = _sG_; for(;;){ var match = caml_check_bound(st[4], i)[1 + i]; if(typeof match !== "number") @@ -12006,11 +12035,11 @@ match[1] = set_both(match[1]); var xs = caml_check_bound(st[5], i)[1 + i]; if(! xs) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ei_], 1); - if(xs[2]){var _sC_ = rev(xs); caml_check_bound(st[5], i)[1 + i] = _sC_;} - var _sD_ = i + 1 | 0; - if(_sB_ === i) break; - var i = _sD_; + throw caml_maybe_attach_backtrace([0, Assert_failure, _ek_], 1); + if(xs[2]){var _sI_ = rev(xs); caml_check_bound(st[5], i)[1 + i] = _sI_;} + var _sJ_ = i + 1 | 0; + if(_sH_ === i) break; + i = _sJ_; } } return; @@ -12035,7 +12064,7 @@ index$1 = mark$0 >>> 2 | 0, match$0 = caml_check_bound(st[5], index$1)[1 + index$1]; if(! match$0) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ej_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _el_], 1); var xs$0 = match$0[2], x$0 = match$0[1]; caml_check_bound(st[5], index$1)[1 + index$1] = xs$0; if(0 === xs$0) t[1] = 0; @@ -12068,36 +12097,36 @@ traversal = unsafe_traverse(empty, tnew), sold = old_stats(traversal), snew = new_stats(traversal), - _sn_ = blocked(snew), - _so_ = blocked(sold) + _sn_ | 0, - nb_dropped = marked(sold) - _so_ | 0, - _sp_ = shared(snew), - nb_shared = shared(sold) + _sp_ | 0, - _sq_ = 0, - _sr_ = caml_make_vect(nb_shared, 0), - _ss_ = caml_make_vect(nb_shared, 0), + _st_ = blocked(snew), + _su_ = blocked(sold) + _st_ | 0, + nb_dropped = marked(sold) - _su_ | 0, + _sv_ = shared(snew), + nb_shared = shared(sold) + _sv_ | 0, + _sw_ = 0, + _sx_ = caml_make_vect(nb_shared, 0), + _sy_ = caml_make_vect(nb_shared, 0), nb_dropped$0 = get_dropped ? nb_dropped : -1, - _st_ = get_dropped ? 0 : -1, - _su_ = get_dropped ? caml_make_vect(nb_dropped, 0) : [0], - st = [0, _su_, _st_, nb_dropped$0, _ss_, _sr_, _sq_]; + _sz_ = get_dropped ? 0 : -1, + _sA_ = get_dropped ? caml_make_vect(nb_dropped, 0) : [0], + st = [0, _sA_, _sz_, nb_dropped$0, _sy_, _sx_, _sw_]; unmark_old(st, xold); if(st[2] !== st[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ek_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _em_], 1); prepare_shared(st); - var result = unmark_new(st, tnew), _sv_ = st[6] - 1 | 0; - if(_sv_ >= 0){ - var i$0 = _sv_; + var result = unmark_new(st, tnew), _sB_ = st[6] - 1 | 0; + if(_sB_ >= 0){ + var i$0 = _sB_; for(;;){ restore(caml_check_bound(st[4], i$0)[1 + i$0]); - var _sz_ = i$0 - 1 | 0; + var _sF_ = i$0 - 1 | 0; if(0 === i$0) break; - var i$0 = _sz_; + i$0 = _sF_; } } if(! get_dropped) return [0, no_dropped, result]; - var xleaf = [0, 0], xjoin = [0, 0], _sx_ = st[6] - 1 | 0, _sw_ = 0; - if(_sx_ >= 0){ - var i = _sw_; + var xleaf = [0, 0], xjoin = [0, 0], _sD_ = st[6] - 1 | 0, _sC_ = 0; + if(_sD_ >= 0){ + var i = _sC_; for(;;){ iter$0 (function(param){ @@ -12117,9 +12146,9 @@ return 0; }, caml_check_bound(st[5], i)[1 + i]); - var _sy_ = i + 1 | 0; - if(_sx_ === i) break; - var i = _sy_; + var _sE_ = i + 1 | 0; + if(_sD_ === i) break; + i = _sE_; } } return [0, [0, st[2], st[1], xleaf[1], xjoin[1]], result]; @@ -12134,16 +12163,16 @@ if(0 === param[0]){ var t = param[1]; if(typeof t !== "number" && 0 === t[0]){ - var _sl_ = param[2]; - if(_sl_){var b = _sl_[1]; break b;} + var _sr_ = param[2]; + if(_sr_){var b = _sr_[1]; break b;} var result = caml_call1(map_reduce[1], t[2]); param[2] = [0, result]; return result; } break a; } - var _sm_ = param[2]; - if(! _sm_){ + var _ss_ = param[2]; + if(! _ss_){ var l = aux(param[3]), r = aux(param[4]), @@ -12151,11 +12180,11 @@ param[2] = [0, result$0]; return result$0; } - var b = _sm_[1]; + var b = _ss_[1]; } return b; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _el_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _en_], 1); } return [0, aux(other)]; } @@ -12188,15 +12217,15 @@ var bound$0 = dropped[2].length - 1, start = dropped[1]; else var bound$0 = dropped[2].length - 1, start = 0; - var _sj_ = bound$0 - 1 | 0; - if(_sj_ >= start){ + var _sp_ = bound$0 - 1 | 0; + if(_sp_ >= start){ var i = start; for(;;){ var match = caml_check_bound(dropped[2], i)[1 + i]; if(match){var x = match[1]; acc$0[1] = caml_call2(f, x, acc$0[1]);} - var _sk_ = i + 1 | 0; - if(_sj_ === i) break; - var i = _sk_; + var _sq_ = i + 1 | 0; + if(_sp_ === i) break; + i = _sq_; } } if(858694086 > kind) @@ -12211,10 +12240,10 @@ } function pure_map_reduce(map, reduce, param){ if(typeof param === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _em_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eo_], 1); if(0 === param[0]) return caml_call1(map, param[2]); - var _si_ = pure_map_reduce(map, reduce, param[3]); - return caml_call2(reduce, pure_map_reduce(map, reduce, param[2]), _si_); + var _so_ = pure_map_reduce(map, reduce, param[3]); + return caml_call2(reduce, pure_map_reduce(map, reduce, param[2]), _so_); } function fold_monoid(map, param, seq){ var reduce$0 = param[2], zero = param[1], match = is_pure(seq); @@ -12245,7 +12274,9 @@ for(;;){ if(typeof x$0 === "number") return acc$0; if(0 === x$0[0]) return [0, x$0[2], acc$0]; - var acc$1 = fold(x$0[3], acc$0), x$1 = x$0[2], x$0 = x$1, acc$0 = acc$1; + var acc$1 = fold(x$0[3], acc$0), x$1 = x$0[2]; + x$0 = x$1; + acc$0 = acc$1; } } return fold(x, 0); @@ -12268,13 +12299,13 @@ } function bind$2(seq, f){return join(fold_monoid(f, lwd_monoid, seq));} function lift(seq){ - return bind$2(seq, function(_sh_){return func(_sh_, element);}); + return bind$2(seq, function(_sn_){return func(_sn_, element);}); } function handler(opts, type, func){return [0, opts, type, func];} function is_pure_element(param){ - var _sg_ = param[1]; - if(82 === _sg_){var x = param[2]; return is_some(is_pure(x));} - if(83 > _sg_) return 1; + var _sm_ = param[1]; + if(82 === _sm_){var x = param[2]; return is_some(is_pure(x));} + if(83 > _sm_) return 1; var x$0 = param[2]; return is_some(is_pure(x$0)); } @@ -12283,12 +12314,12 @@ return flatten (map$1 (function(param){ - var _sf_ = param[1]; - if(82 === _sf_){ + var _sl_ = param[1]; + if(82 === _sl_){ var x = param[2]; return [0, extract_pure_element(x), 0]; } - if(83 <= _sf_){ + if(83 <= _sl_){ var x$0 = param[2]; return to_list$1(extract_pure_element(x$0)); } @@ -12298,7 +12329,7 @@ xs)); } function prepare_col(col){ - if(! col) return _en_; + if(! col) return _ep_; var match = partition(is_pure_element, col), impure = match[2], @@ -12306,27 +12337,27 @@ return [0, extract_pure_elements(pure), impure]; } function consume_children(col){ - if(! col) return _eo_; - var _sb_ = col[1], _sc_ = _sb_[1]; - if(82 === _sc_){ - if(! col[2]){var x = _sb_[2]; return [0, 0, [0, func(x, element)]];} + if(! col) return _eq_; + var _sh_ = col[1], _si_ = _sh_[1]; + if(82 === _si_){ + if(! col[2]){var x = _sh_[2]; return [0, 0, [0, func(x, element)]];} } else - if(83 <= _sc_){ - if(! col[2]){var x$0 = _sb_[2]; return [0, 0, [0, x$0]];} + if(83 <= _si_){ + if(! col[2]){var x$0 = _sh_[2]; return [0, 0, [0, x$0]];} } - else if(! col[2]){var x$1 = _sb_[2]; return [0, [0, x$1, 0], 0];} + else if(! col[2]){var x$1 = _sh_[2]; return [0, [0, x$1, 0], 0];} return for_all(is_pure_element, col) ? [0, flatten (map$1 (function(param){ - var _sd_ = param[1]; - if(82 === _sd_){ + var _sj_ = param[1]; + if(82 === _sj_){ var x = param[2]; return [0, extract_pure_element(x), 0]; } - if(83 <= _sd_){ + if(83 <= _sj_){ var x$0 = param[2]; return to_list$1(extract_pure_element(x$0)); } @@ -12340,9 +12371,9 @@ [0, map_reduce (function(param){ - var _se_ = param[1]; - if(82 === _se_){var x = param[2]; return func(x, element);} - if(83 <= _se_){var x$0 = param[2]; return x$0;} + var _sk_ = param[1]; + if(82 === _sk_){var x = param[2]; return func(x, element);} + if(83 <= _sk_){var x$0 = param[2]; return x$0;} var x$1 = param[2]; return pure(element(x$1)); }, @@ -12400,11 +12431,11 @@ else call(acc, jv_before, [0, node]); else{ - var _r9_ = node.nextSibling !== acc ? 1 : 0; - if(_r9_){ + var _sd_ = node.nextSibling !== acc ? 1 : 0; + if(_sd_){ if(preserve_focus){ - var _r__ = contains_focus(node); - if(_r__) + var _se_ = contains_focus(node); + if(_se_) var shift_siblings = function(param){ @@ -12415,17 +12446,17 @@ call(node, jv_before, [0, sibling]); } }, - _r$_ = shift_siblings(0); + _sf_ = shift_siblings(0); else - var _r$_ = _r__; + var _sf_ = _se_; } else - var _r$_ = preserve_focus; - var _sa_ = 1 - _r$_; + var _sf_ = preserve_focus; + var _sg_ = 1 - _sf_; } else - var _sa_ = _r9_; - if(_sa_) + var _sg_ = _sd_; + if(_sg_) if(is_null(acc)) call(self, jv_append, [0, node]); else @@ -12439,15 +12470,15 @@ if(0 !== child[0]) return 0; var node = child[1], - _r7_ = is_some$0(node[cst_lwd_to_remove]), - _r8_ = - _r7_ + _sb_ = is_some$0(node[cst_lwd_to_remove]), + _sc_ = + _sb_ ? (delete node[cst_lwd_to_remove], call(node, jv_remove, [0]), 0) - : _r7_; - return _r8_; + : _sb_; + return _sc_; } fold_dropped(3850876, remove_child, dropped, 0); return self; @@ -12474,13 +12505,13 @@ } return map_reduce (function(param){ - var _r5_ = param[1]; - if(82 === _r5_){ + var _r$_ = param[1]; + if(82 === _r$_){ var at = param[2]; return func(at, set_lwd_at(0)); } - if(83 > _r5_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ep_], 1); + if(83 > _r$_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _er_], 1); var ats = param[2]; function set_at(at){ var kv = to_pair(at); @@ -12490,7 +12521,7 @@ var reducer = [0, - make$4(set_at, function(param, _r6_){return dummy_kv_at;})]; + make$4(set_at, function(param, _sa_){return dummy_kv_at;})]; function update(ats){ var match = update_and_get_dropped(reducer[1], ats), @@ -12507,7 +12538,7 @@ } return func(ats, update); }, - [0, pure_unit, function(param, _r4_){return pure_unit;}], + [0, pure_unit, function(param, _r__){return pure_unit;}], attribs); } function listen$0(el, param){ @@ -12517,8 +12548,8 @@ function attach_events(el, events){ return map_reduce (function(param){ - var _r2_ = param[1]; - if(82 === _r2_){ + var _r8_ = param[1]; + if(82 === _r8_){ var at = param[2], cached = [0, 0]; return func (at, @@ -12529,14 +12560,14 @@ return 0; }); } - if(83 > _r2_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _eq_], 1); + if(83 > _r8_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _es_], 1); var ats = param[2], reducer = [0, make$4 - (function(_r3_){return listen$0(el, _r3_);}, + (function(_r9_){return listen$0(el, _r9_);}, function(x, y){return x;})]; function update(ats){ var @@ -12551,12 +12582,12 @@ } return func(ats, update); }, - [0, pure_unit, function(param, _r1_){return pure_unit;}], + [0, pure_unit, function(param, _r7_){return pure_unit;}], events); } - function v$4(d, opt, _rZ_, tag, children){ + function v$4(d, opt, _r5_, tag, children){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_rZ_) var sth$0 = _rZ_[1], ev = sth$0; else var ev = 0; + if(_r5_) var sth$0 = _r5_[1], ev = sth$0; else var ev = 0; var match = prepare_col(at), impure_at = match[2], @@ -12572,11 +12603,11 @@ if(impure_children) var children$1 = impure_children[1], - _r0_ = update_children(el, children$1), + _r6_ = update_children(el, children$1), result = map2 (attach_attribs(el, impure_at), - _r0_, + _r6_, function(param, el){return el;}); else var @@ -12601,73 +12632,91 @@ } function cons$1(name, d, at, ev, cs){return v$4(d, at, ev, name, cs);} function void_cons(name, d, at, ev, param){return v$4(d, at, ev, name, 0);} - function button$0(_rV_, _rW_, _rX_, _rY_){ - return cons$1(button, _rV_, _rW_, _rX_, _rY_); + function button$0(_r1_, _r2_, _r3_, _r4_){ + return cons$1(button, _r1_, _r2_, _r3_, _r4_); + } + function div$1(_rX_, _rY_, _rZ_, _r0_){ + return cons$1(div, _rX_, _rY_, _rZ_, _r0_); } - function div$1(_rR_, _rS_, _rT_, _rU_){ - return cons$1(div, _rR_, _rS_, _rT_, _rU_); + function form$0(_rT_, _rU_, _rV_, _rW_){ + return cons$1(form, _rT_, _rU_, _rV_, _rW_); } - function form$0(_rN_, _rO_, _rP_, _rQ_){ - return cons$1(form, _rN_, _rO_, _rP_, _rQ_); + function img$0(_rP_, _rQ_, _rR_, _rS_){ + return void_cons(img, _rP_, _rQ_, _rR_, _rS_); } - function img$0(_rJ_, _rK_, _rL_, _rM_){ - return void_cons(img, _rJ_, _rK_, _rL_, _rM_); + function input$1(_rL_, _rM_, _rN_, _rO_){ + return void_cons(input$0, _rL_, _rM_, _rN_, _rO_); } - function input$1(_rF_, _rG_, _rH_, _rI_){ - return void_cons(input$0, _rF_, _rG_, _rH_, _rI_); + function label$0(_rH_, _rI_, _rJ_, _rK_){ + return cons$1(label, _rH_, _rI_, _rJ_, _rK_); } - function label$0(_rB_, _rC_, _rD_, _rE_){ - return cons$1(label, _rB_, _rC_, _rD_, _rE_); + function option$0(_rD_, _rE_, _rF_, _rG_){ + return cons$1(option, _rD_, _rE_, _rF_, _rG_); } - function option$0(_rx_, _ry_, _rz_, _rA_){ - return cons$1(option, _rx_, _ry_, _rz_, _rA_); + function select$0(_rz_, _rA_, _rB_, _rC_){ + return cons$1(select, _rz_, _rA_, _rB_, _rC_); } - function select$0(_rt_, _ru_, _rv_, _rw_){ - return cons$1(select, _rt_, _ru_, _rv_, _rw_); + function span$1(_rv_, _rw_, _rx_, _ry_){ + return cons$1(span, _rv_, _rw_, _rx_, _ry_); } - function span$1(_rp_, _rq_, _rr_, _rs_){ - return cons$1(span, _rp_, _rq_, _rr_, _rs_); + function symbol$3(_ru_, _rt_){return _ru_ === _rt_ ? 1 : 0;} + function symbol$4(_rs_, _rr_){return _rs_ !== _rr_ ? 1 : 0;} + function symbol$5(_rq_, _rp_){return _rp_ < _rq_ ? 1 : 0;} + function symbol$6(_ro_, _rn_){return _rn_ <= _ro_ ? 1 : 0;} + function symbol$7(_rm_, _rl_){return _rl_ < _rm_ ? 1 : 0;} + function shuffle(rand_int, a, i, j){ + var _ri_ = j - 1 | 0, _rj_ = i + 1 | 0; + if(_ri_ >= _rj_){ + var k = _ri_; + for(;;){ + var + l = caml_call1(rand_int, k + 1 | 0), + tmp = caml_check_bound(a, l)[1 + l]; + a[1 + l] = caml_check_bound(a, k)[1 + k]; + a[1 + k] = tmp; + var _rk_ = k - 1 | 0; + if(_rj_ === k) break; + k = _rk_; + } + } + return; } - function symbol$4(_ro_, _rn_){return _ro_ === _rn_ ? 1 : 0;} - function symbol$5(_rm_, _rl_){return _rm_ !== _rl_ ? 1 : 0;} - function symbol$6(_rk_, _rj_){return _rj_ < _rk_ ? 1 : 0;} - function symbol$7(_ri_, _rh_){return _rh_ <= _ri_ ? 1 : 0;} - function symbol$8(_rg_, _rf_){return _rf_ < _rg_ ? 1 : 0;} + function shuffle$0(a){return shuffle(int$1, a, 0, a.length - 1);} function to_string$2(opt, item_to_string, a){ - if(opt) var sth = opt[1], sep = sth; else var sep = _er_; - return function(_rd_){return concat(sep, _rd_);} - (function(_re_){return map$1(item_to_string, _re_);}(to_list(a))); + if(opt) var sth = opt[1], sep = sth; else var sep = _et_; + return function(_rg_){return concat(sep, _rg_);} + (function(_rh_){return map$1(item_to_string, _rh_);}(to_list(a))); } - function poly(_rc_, _rb_){return caml_equal(_rc_, _rb_);} + function poly(_rf_, _re_){return caml_equal(_rf_, _re_);} function is_nan(x){return 4 === caml_classify_float(x) ? 1 : 0;} function of_string_opt(a){ - try{var _q$_ = [0, caml_float_of_string(a)]; return _q$_;} - catch(_ra_){ - var _q__ = caml_wrap_exception(_ra_); - if(_q__[1] === Failure) return 0; - throw caml_maybe_attach_backtrace(_q__, 0); + try{var _rc_ = [0, caml_float_of_string(a)]; return _rc_;} + catch(_rd_){ + var _rb_ = caml_wrap_exception(_rd_); + if(_rb_[1] === Failure) return 0; + throw caml_maybe_attach_backtrace(_rb_, 0); } } function equal$0(a, b){return a === b ? 1 : 0;} function compare$1(a, b){return compare(a, b);} function of_string$0(s){ - try{var _q8_ = [0, caml_int_of_string(s)]; return _q8_;} - catch(_q9_){ - var _q7_ = caml_wrap_exception(_q9_); - if(_q7_[1] === Failure) return 0; - throw caml_maybe_attach_backtrace(_q7_, 0); + try{var _q$_ = [0, caml_int_of_string(s)]; return _q$_;} + catch(_ra_){ + var _q__ = caml_wrap_exception(_ra_); + if(_q__[1] === Failure) return 0; + throw caml_maybe_attach_backtrace(_q__, 0); } } - function of_float(_q6_){return _q6_ | 0;} + function of_float(_q9_){return _q9_ | 0;} function get$5(tbl, x){ - try{var _q4_ = [0, find(tbl, x)]; return _q4_;} - catch(_q5_){ - var _q3_ = caml_wrap_exception(_q5_); - if(_q3_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_q3_, 0); + try{var _q7_ = [0, find(tbl, x)]; return _q7_;} + catch(_q8_){ + var _q6_ = caml_wrap_exception(_q8_); + if(_q6_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_q6_, 0); } } - function symbol$9(f, l){ + function symbol$8(f, l){ if(! l) return 0; var tl = l[2], x = l[1], x$0 = caml_call1(f, x), block = [0, x$0, 24029]; map_dps(block, 1, f, tl); @@ -12683,7 +12732,9 @@ x$0 = caml_call1(f, x), dst$1 = [0, x$0, 24029]; dst$0[1 + offset$0] = dst$1; - var dst$0 = dst$1, offset$0 = 1, l$0 = tl; + dst$0 = dst$1; + offset$0 = 1; + l$0 = tl; } } function filter(f, l){ @@ -12696,7 +12747,7 @@ filter_dps(block, 1, f, tl); return block; } - var l$0 = tl; + l$0 = tl; } } function filter_dps(dst, offset, f, l){ @@ -12707,15 +12758,17 @@ if(keep){ var dst$1 = [0, x, 24029]; dst$0[1 + offset$0] = dst$1; - var dst$0 = dst$1, offset$0 = 1, l$0 = tl; + dst$0 = dst$1; + offset$0 = 1; + l$0 = tl; } else - var l$0 = tl; + l$0 = tl; } } - function init$1(n, f){ + function init$2(n, f){ function init(i, n, f){ - if(symbol$4(i, n)) return 0; + if(symbol$3(i, n)) return 0; var x = caml_call1(f, i), block = [0, x, 24029]; init_dps(block, 1, i + 1 | 0, n, f); return block; @@ -12723,15 +12776,18 @@ function init_dps(dst, offset, i, n, f){ var dst$0 = dst, offset$0 = offset, i$0 = i; for(;;){ - if(symbol$4(i$0, n)){dst$0[1 + offset$0] = 0; return;} + if(symbol$3(i$0, n)){dst$0[1 + offset$0] = 0; return;} var x = caml_call1(f, i$0), dst$1 = [0, x, 24029]; dst$0[1 + offset$0] = dst$1; - var i$1 = i$0 + 1 | 0, dst$0 = dst$1, offset$0 = 1, i$0 = i$1; + var i$1 = i$0 + 1 | 0; + dst$0 = dst$1; + offset$0 = 1; + i$0 = i$1; } } return init(0, n, f); } - function symbol$10(f, param){ + function symbol$9(f, param){ if(! param) return 0; var x = param[1]; return [0, caml_call1(f, x)]; @@ -12753,14 +12809,14 @@ return y; } function to_list$2(o){if(! o) return 0; var x = o[1]; return [0, x, 0];} - function symbol$11(x, f){return symbol$10(f, x);} + function symbol$10(x, f){return symbol$9(f, x);} make_self_init(0); - function symbol$12(f, e){ + function symbol$11(f, e){ if(0 === e[0]){var x = e[1]; return [0, caml_call1(f, x)];} var s = e[1]; return [1, s]; } - var Get_error = [248, _es_, caml_fresh_oo_id(0)]; + var Get_error = [248, _eu_, caml_fresh_oo_id(0)]; function get_exn(param){ if(0 !== param[0]) throw caml_maybe_attach_backtrace(Get_error, 1); var x = param[1]; @@ -12776,11 +12832,11 @@ var s = e[1]; return [1, s]; } - function symbol$13(e, f){return symbol$12(f, e);} + function symbol$12(e, f){return symbol$11(f, e);} function symbol_bind$1(e, f){return flat_map$0(f, e);} function Make$0(O){ var - S = _P_(O), + S = _Q_(O), empty = S[1], mem = S[3], add = S[4], @@ -12841,16 +12897,16 @@ , elements]; } - function _et_(_q1_){ - var _q2_ = Make$0(_q1_); + function _ev_(_q4_){ + var _q5_ = Make$0(_q4_); return [0, - _q2_[4], + _q5_[4], , - _q2_[6], - _q2_[7], + _q5_[6], + _q5_[7], , - _q2_[9], - _q2_[10], + _q5_[9], + _q5_[10], , , , @@ -12872,7 +12928,7 @@ , , , - _q2_[40], + _q5_[40], , , , @@ -12892,21 +12948,22 @@ , , , - _q2_[51]]; + _q5_[51]]; } function suffix(suf, s){ var len = caml_ml_string_length(suf); - if(symbol$6(len, caml_ml_string_length(s))) return 0; + if(symbol$5(len, caml_ml_string_length(s))) return 0; var off = caml_ml_string_length(s) - len | 0; function check(i){ var i$0 = i; for(;;){ - if(symbol$4(i$0, len)) return 1; + if(symbol$3(i$0, len)) return 1; if (caml_string_unsafe_get(s, off + i$0 | 0) !== caml_string_unsafe_get(suf, i$0)) return 0; - var i$1 = i$0 + 1 | 0, i$0 = i$1; + var i$1 = i$0 + 1 | 0; + i$0 = i$1; } } return check(0); @@ -12920,7 +12977,7 @@ caml_ml_string_length(s) - caml_ml_string_length(suf) | 0)] : 0; } - var Lex_error = [248, _eu_, caml_fresh_oo_id(0)]; + var Lex_error = [248, _ew_, caml_fresh_oo_id(0)]; function lex_error(err){ throw caml_maybe_attach_backtrace([0, Lex_error, err], 1); } @@ -12932,11 +12989,11 @@ return [0, start[2], cnum, enum$0]; } function string2num(s){ - try{var _qZ_ = [3, caml_int_of_string(s)]; return _qZ_;} - catch(_q0_){ - var _qY_ = caml_wrap_exception(_q0_); - if(_qY_[1] === Failure) return [2, s]; - throw caml_maybe_attach_backtrace(_qY_, 0); + try{var _q2_ = [3, caml_int_of_string(s)]; return _q2_;} + catch(_q3_){ + var _q1_ = caml_wrap_exception(_q3_); + if(_q1_[1] === Failure) return [2, s]; + throw caml_maybe_attach_backtrace(_q1_, 0); } } function update_pos(lexbuf){ @@ -12952,7 +13009,7 @@ else if(71 > c) return (c - 65 | 0) + 10 | 0; } else if(9 >= c - 48 >>> 0) return c - 48 | 0; - return lex_error(symbol(_ew_, symbol(make$1(1, c), _ev_))); + return lex_error(symbol_concat(_ey_, symbol_concat(make$1(1, c), _ex_))); } function utf8_of_code(buf, idx, u){ var i = [0, idx]; @@ -13006,12 +13063,18 @@ function escaping_error(msg, s, c, off){ var offs = string_of_int(off); if(c) - var c$0 = c[1], cs = symbol(_ey_, symbol(make$1(1, c$0), _ex_)); + var + c$0 = c[1], + cs = symbol_concat(_eA_, symbol_concat(make$1(1, c$0), _ez_)); else - var cs = _eB_; + var cs = _eD_; return lex_error - (symbol - (msg, symbol(_eA_, symbol(offs, symbol(cs, symbol(_ez_, s)))))); + (symbol_concat + (msg, + symbol_concat + (_eC_, + symbol_concat + (offs, symbol_concat(cs, symbol_concat(_eB_, s)))))); } function unescape_string(s){ var @@ -13021,76 +13084,76 @@ u1 = [0, 0], u2 = [0, 0], state = [0, 748194550], - _qP_ = l - 1 | 0, - _qO_ = 0; - if(_qP_ >= 0){ - var i = _qO_; + _qS_ = l - 1 | 0, + _qR_ = 0; + if(_qS_ >= 0){ + var i = _qR_; for(;;){ - var _qQ_ = state[1]; + var _qT_ = state[1]; a: - if(308570827 <= _qQ_) - if(308570829 <= _qQ_) - if(748194550 <= _qQ_) - if(945120947 <= _qQ_) + if(308570827 <= _qT_) + if(308570829 <= _qT_) + if(748194550 <= _qT_) + if(945120947 <= _qT_) if(117 === caml_string_get(s, i)) state[1] = 308570827; else - escaping_error(_eD_, s, [0, caml_string_get(s, i)], i); + escaping_error(_eF_, s, [0, caml_string_get(s, i)], i); else{ var c = caml_string_get(s, i); if(92 === c) state[1] = 258914209; else{caml_bytes_unsafe_set(s$0, j[1], c); j[1] = j[1] + 1 | 0;} } - else if(308570830 <= _qQ_){ + else if(308570830 <= _qT_){ state[1] = 748194550; - var _qS_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _qS_; + var _qV_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _qV_; if(56320 <= u2[1] && 57343 >= u2[1]){ j[1] = utf8_of_surrogate_pair(s$0, j[1], u1[1], u2[1]); break a; } - escaping_error(_eE_, s, 0, i); + escaping_error(_eG_, s, 0, i); } else{ - var _qT_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _qT_; + var _qW_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _qW_; state[1] = 308570830; } - else if(308570828 <= _qQ_){ - var _qU_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _qU_; + else if(308570828 <= _qT_){ + var _qX_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _qX_; state[1] = 308570829; } else{ u2[1] = int_of_hexchar(caml_string_get(s, i)); state[1] = 308570828; } - else if(297481261 <= _qQ_) - if(297481263 <= _qQ_) - if(308569555 <= _qQ_) + else if(297481261 <= _qT_) + if(297481263 <= _qT_) + if(308569555 <= _qT_) if(92 === caml_string_get(s, i)) state[1] = 945120947; else - escaping_error(_eF_, s, [0, caml_string_get(s, i)], i); + escaping_error(_eH_, s, [0, caml_string_get(s, i)], i); else{ - var _qV_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _qV_; + var _qY_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _qY_; if(55296 <= u1[1] && 56319 >= u1[1]){state[1] = 308569555; break a;} j[1] = utf8_of_code(s$0, j[1], u1[1]); state[1] = 748194550; } - else if(297481262 <= _qQ_){ - var _qW_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _qW_; + else if(297481262 <= _qT_){ + var _qZ_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _qZ_; state[1] = 297481263; } else{ - var _qX_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _qX_; + var _q0_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _q0_; state[1] = 297481262; } - else if(297481260 <= _qQ_){ + else if(297481260 <= _qT_){ u1[1] = int_of_hexchar(caml_string_get(s, i)); state[1] = 297481261; } @@ -13150,15 +13213,15 @@ j[1] = j[1] + 1 | 0; break b; } - escaping_error(_eG_, s, [0, caml_string_get(s, i)], i); + escaping_error(_eI_, s, [0, caml_string_get(s, i)], i); } } - var _qR_ = i + 1 | 0; - if(_qP_ === i) break; - var i = _qR_; + var _qU_ = i + 1 | 0; + if(_qS_ === i) break; + i = _qU_; } } - if(748194550 !== state[1]) escaping_error(_eC_, s, 0, l); + if(748194550 !== state[1]) escaping_error(_eE_, s, 0, l); return j[1] !== l ? unsafe_to_string(sub(s$0, 0, j[1])) : s; } function engine(tbl, state, buf){ @@ -13167,11 +13230,11 @@ } function Make$1(Compliance){ function read$0(counter, lexbuf){ - var _qN_ = 0; + var _qQ_ = 0; if(counter >= 50) - return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _qN_]); + return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _qQ_]); var counter$0 = counter + 1 | 0; - return ocaml_lex_read_rec(counter$0, lexbuf, _qN_); + return ocaml_lex_read_rec(counter$0, lexbuf, _qQ_); } function read(lexbuf){return caml_trampoline(read$0(0, lexbuf));} function ocaml_lex_read_rec(counter, lexbuf, ocaml_lex_state){ @@ -13182,9 +13245,9 @@ if(26 >= ocaml_lex_state$1 >>> 0) switch(ocaml_lex_state$1){ case 0: - return _eH_; + return _eJ_; case 1: - return _eI_; + return _eK_; case 2: return 2; case 3: @@ -13198,19 +13261,23 @@ case 7: return caml_call1(Compliance[5], 13) ? 13 - : lex_error(symbol(_eK_, symbol(lexeme(lexbuf), _eJ_))); + : lex_error + (symbol_concat(_eM_, symbol_concat(lexeme(lexbuf), _eL_))); case 8: return caml_call1(Compliance[5], 14) ? 14 - : lex_error(symbol(_eM_, symbol(lexeme(lexbuf), _eL_))); + : lex_error + (symbol_concat(_eO_, symbol_concat(lexeme(lexbuf), _eN_))); case 9: return caml_call1(Compliance[6], 11) ? 11 - : lex_error(symbol(_eO_, symbol(lexeme(lexbuf), _eN_))); + : lex_error + (symbol_concat(_eQ_, symbol_concat(lexeme(lexbuf), _eP_))); case 10: return caml_call1(Compliance[6], 12) ? 12 - : lex_error(symbol(_eQ_, symbol(lexeme(lexbuf), _eP_))); + : lex_error + (symbol_concat(_eS_, symbol_concat(lexeme(lexbuf), _eR_))); case 11: return 7; case 12: @@ -13234,10 +13301,10 @@ } return tok; case 18: - var _qM_ = [4, caml_float_of_string(lexeme(lexbuf))]; - return caml_call1(Compliance[2], _qM_); + var _qP_ = [4, caml_float_of_string(lexeme(lexbuf))]; + return caml_call1(Compliance[2], _qP_); case 19: - return _eR_; + return _eT_; case 20: var s = sub_lexeme(lexbuf, lexbuf[5] + 1 | 0, lexbuf[6] - 1 | 0); return [0, unescape_string(s)]; @@ -13270,19 +13337,20 @@ var counter$3 = counter + 1 | 0; return read$0(counter$3, lexbuf); default: - return lex_error(symbol(_eT_, symbol(lexeme(lexbuf), _eS_))); + return lex_error + (symbol_concat(_eV_, symbol_concat(lexeme(lexbuf), _eU_))); } caml_call1(lexbuf[1], lexbuf); - var ocaml_lex_state$0 = ocaml_lex_state$1; + ocaml_lex_state$0 = ocaml_lex_state$1; } } function read_comment$0(counter, lexbuf){ - var _qL_ = 88; + var _qO_ = 88; if(counter >= 50) return caml_trampoline_return - (ocaml_lex_read_comment_rec, [0, lexbuf, _qL_]); + (ocaml_lex_read_comment_rec, [0, lexbuf, _qO_]); var counter$0 = counter + 1 | 0; - return ocaml_lex_read_comment_rec(counter$0, lexbuf, _qL_); + return ocaml_lex_read_comment_rec(counter$0, lexbuf, _qO_); } function read_comment(lexbuf){ return caml_trampoline(read_comment$0(0, lexbuf)); @@ -13303,7 +13371,7 @@ var counter$0 = counter + 1 | 0; return read_comment$0(counter$0, lexbuf); case 2: - return lex_error(_eU_); + return lex_error(_eW_); default: if(counter >= 50) return caml_trampoline_return(read_comment$0, [0, lexbuf]); @@ -13311,12 +13379,12 @@ return read_comment$0(counter$1, lexbuf); } caml_call1(lexbuf[1], lexbuf); - var ocaml_lex_state$0 = ocaml_lex_state$1; + ocaml_lex_state$0 = ocaml_lex_state$1; } } return [0, read]; } - var Json_error_info = [248, _eV_, caml_fresh_oo_id(0)]; + var Json_error_info = [248, _eX_, caml_fresh_oo_id(0)]; function create_from_lexbuf(lexbuf, emsg){ var match = error_pos(lexbuf), @@ -13332,73 +13400,81 @@ var is_int = (f | 0) == f ? 1 : 0; if(is_int && Math.abs(f) <= max_json_int){ var int_value = f | 0; - return symbol(string_of_int(int_value), _eW_); + return symbol_concat(string_of_int(int_value), _eY_); } var s = caml_format_float("%.16g", f), s$0 = caml_float_of_string(s) == f ? s : caml_format_float("%.17g", f); - if(! contains(s$0, 46) && ! contains(s$0, 101)) return symbol(s$0, _eX_); + if(! contains(s$0, 46) && ! contains(s$0, 101)) + return symbol_concat(s$0, _eZ_); return s$0; } function token_error(tok){ if(typeof tok === "number") switch(tok){ case 0: - var err = _eY_; break; + var err = _e0_; break; case 1: - var err = _eZ_; break; + var err = _e1_; break; case 2: - var err = _e0_; break; + var err = _e2_; break; case 3: - var err = _e1_; break; + var err = _e3_; break; case 4: - var err = _e2_; break; + var err = _e4_; break; case 5: - var err = _e3_; break; + var err = _e5_; break; case 6: - var err = _e4_; break; + var err = _e6_; break; case 7: - var err = _e5_; break; + var err = _e7_; break; case 8: - var err = _e6_; break; + var err = _e8_; break; case 9: - var err = _e7_; break; + var err = _e9_; break; case 10: - var err = _e8_; break; + var err = _e__; break; case 11: - var err = _e9_; break; + var err = _e$_; break; case 12: - var err = _e__; break; + var err = _fa_; break; case 13: - var err = _e$_; break; - default: var err = _fa_; + var err = _fb_; break; + default: var err = _fc_; } else switch(tok[0]){ case 0: - var s = tok[1], err = symbol(_fc_, symbol(s, _fb_)); break; + var s = tok[1], err = symbol_concat(_fe_, symbol_concat(s, _fd_)); + break; case 1: var s$0 = tok[1], err = s$0; break; case 2: - var s$1 = tok[1], err = symbol(_fe_, symbol(s$1, _fd_)); break; + var s$1 = tok[1], err = symbol_concat(_fg_, symbol_concat(s$1, _ff_)); + break; case 3: - var i = tok[1], err = symbol(_fg_, symbol(string_of_int(i), _ff_)); + var + i = tok[1], + err = symbol_concat(_fi_, symbol_concat(string_of_int(i), _fh_)); break; case 4: - var f = tok[1], err = symbol(_fi_, symbol(string_of_float(f), _fh_)); + var + f = tok[1], + err = symbol_concat(_fk_, symbol_concat(string_of_float(f), _fj_)); break; case 5: - var s$2 = tok[1], err = symbol(_fk_, symbol(s$2, _fj_)); break; + var s$2 = tok[1], err = symbol_concat(_fm_, symbol_concat(s$2, _fl_)); + break; default: var b = tok[1], - _qK_ = b ? _fm_ : _fo_, - err = symbol(_fn_, symbol(_qK_, _fl_)); + _qN_ = b ? _fo_ : _fq_, + err = symbol_concat(_fp_, symbol_concat(_qN_, _fn_)); } return [0, 148000204, err]; } function Make$2(Compliance){ - var Parse_error = [248, _fp_, caml_fresh_oo_id(0)]; + var Parse_error = [248, _fr_, caml_fresh_oo_id(0)]; function json_value(reader){ function token_value(tok){ if(typeof tok === "number") @@ -13449,8 +13525,8 @@ if(typeof tok$0 === "number"){ if(7 === tok$0) return array_values([0, v, acc]); if(10 === tok$0){ - var _qJ_ = rev([0, v, acc]); - return caml_call1(Compliance[16], _qJ_); + var _qM_ = rev([0, v, acc]); + return caml_call1(Compliance[16], _qM_); } } throw caml_maybe_attach_backtrace @@ -13461,10 +13537,10 @@ for(;;){ var v = value(0), tok = caml_call1(reader, 0); if(typeof tok === "number"){ - if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} if(10 === tok){ - var _qI_ = rev([0, v, acc$0]); - return caml_call1(Compliance[16], _qI_); + var _qL_ = rev([0, v, acc$0]); + return caml_call1(Compliance[16], _qL_); } } throw caml_maybe_attach_backtrace @@ -13481,8 +13557,8 @@ var v = colon_value(tok, 0), tok$0 = caml_call1(reader, 0); if(typeof tok$0 === "number"){ if(1 === tok$0){ - var _qH_ = rev([0, v, acc]); - return caml_call1(Compliance[15], _qH_); + var _qK_ = rev([0, v, acc]); + return caml_call1(Compliance[15], _qK_); } if(7 === tok$0) return object_values([0, v, acc]); } @@ -13495,10 +13571,10 @@ var v = key_colon_value(0), tok = caml_call1(reader, 0); if(typeof tok === "number"){ if(1 === tok){ - var _qG_ = rev([0, v, acc$0]); - return caml_call1(Compliance[15], _qG_); + var _qJ_ = rev([0, v, acc$0]); + return caml_call1(Compliance[15], _qJ_); } - if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} } throw caml_maybe_attach_backtrace ([0, Parse_error, token_error(tok)], 1); @@ -13537,7 +13613,7 @@ ([0, Parse_error, token_error(tok$0)], 1); } if(14 <= tok) - throw caml_maybe_attach_backtrace([0, Parse_error, _fq_], 1); + throw caml_maybe_attach_backtrace([0, Parse_error, _fs_], 1); } throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); } @@ -13546,10 +13622,10 @@ for(;;){ var v = value(0), tok = caml_call1(reader, 0); if(typeof tok === "number"){ - if(7 === tok){var acc$1 = [0, v, acc$0], acc$0 = acc$1; continue;} + if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} if(14 <= tok){ - var _qF_ = rev([0, v, acc$0]); - return caml_call1(Compliance[17], _qF_); + var _qI_ = rev([0, v, acc$0]); + return caml_call1(Compliance[17], _qI_); } } throw caml_maybe_attach_backtrace @@ -13560,7 +13636,7 @@ var tok = caml_call1(reader, 0); if(typeof tok === "number"){ if(12 === tok) - throw caml_maybe_attach_backtrace([0, Parse_error, _fr_], 1); + throw caml_maybe_attach_backtrace([0, Parse_error, _ft_], 1); } else if(0 === tok[0]){ var k = tok[1], tok$0 = caml_call1(reader, 0); @@ -13594,7 +13670,7 @@ var exn = caml_wrap_exception(exn$0); if(exn[1] === Parse_error){ var match = exn[2]; - if(typeof match === "number") return _fs_; + if(typeof match === "number") return _fu_; var err = match[2]; return [1, err]; } @@ -13607,22 +13683,22 @@ return [0, Compliance, decode]; } function nibble_to_hex(i){ - var _qE_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_qE_); + var _qH_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_qH_); } function add_hex_byte(add_char, i){ caml_call1(add_char, nibble_to_hex((i >>> 4 | 0) & 15)); return caml_call1(add_char, nibble_to_hex(i & 15)); } function escape(add_char, add_string, s){ - var l = caml_ml_string_length(s), _qC_ = l - 1 | 0, _qB_ = 0; - if(_qC_ >= 0){ - var i = _qB_; + var l = caml_ml_string_length(s), _qF_ = l - 1 | 0, _qE_ = 0; + if(_qF_ >= 0){ + var i = _qE_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - caml_call1(add_string, _ft_); + caml_call1(add_string, _fv_); else{ b: { @@ -13632,17 +13708,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - caml_call1(add_string, _fv_); break; + caml_call1(add_string, _fx_); break; case 1: - caml_call1(add_string, _fw_); break; + caml_call1(add_string, _fy_); break; case 2: - caml_call1(add_string, _fx_); break; + caml_call1(add_string, _fz_); break; case 4: - caml_call1(add_string, _fy_); break; + caml_call1(add_string, _fA_); break; case 5: - caml_call1(add_string, _fz_); break; + caml_call1(add_string, _fB_); break; case 26: - caml_call1(add_string, _fA_); break; + caml_call1(add_string, _fC_); break; case 24: case 25: break c; @@ -13655,12 +13731,12 @@ caml_call1(add_char, caml_string_get(s, i)); break a; } - caml_call1(add_string, _fu_); + caml_call1(add_string, _fw_); add_hex_byte(add_char, c); } - var _qD_ = i + 1 | 0; - if(_qC_ === i) break; - var i = _qD_; + var _qG_ = i + 1 | 0; + if(_qF_ === i) break; + i = _qG_; } } return; @@ -13668,8 +13744,8 @@ function Make$3(Compliance){ function to_json_string(s){ var buf = create$1(100); - function add_char$0(_qA_){return add_char(buf, _qA_);} - function add_string$0(_qz_){return add_string(buf, _qz_);} + function add_char$0(_qD_){return add_char(buf, _qD_);} + function add_string$0(_qC_){return add_string(buf, _qC_);} function add_quote_string(s){ add_char$0(34); escape(add_char$0, add_string$0, s); @@ -13680,68 +13756,68 @@ } function pp_list(sep, ppx, out, l){ function pp_sep(out, param){ - return caml_call1(fprintf$0(out)(_fB_), sep); + return caml_call1(fprintf$0(out)(_fD_), sep); } return pp_print_list([0, pp_sep], ppx, out, l); } function format(out, json){ - if(typeof json === "number") return pp_print_string(out, _fC_); - var _qq_ = json[1]; - if(726928360 <= _qq_){ - if(737456202 === _qq_){var b = json[2]; return pp_print_bool(out, b);} - if(928231259 > _qq_){ - if(848054398 <= _qq_){ + if(typeof json === "number") return pp_print_string(out, _fE_); + var _qt_ = json[1]; + if(726928360 <= _qt_){ + if(737456202 === _qt_){var b = json[2]; return pp_print_bool(out, b);} + if(928231259 > _qt_){ + if(848054398 <= _qt_){ var l$0 = json[2]; return l$0 ? caml_call2 - (fprintf$0(out)(_fH_), - function(_qx_, _qy_){ - return pp_list(_fG_, format, _qx_, _qy_); + (fprintf$0(out)(_fJ_), + function(_qA_, _qB_){ + return pp_list(_fI_, format, _qA_, _qB_); }, l$0) - : pp_print_string(out, _fI_); + : pp_print_string(out, _fK_); } var l$1 = json[2]; return 0 === l$1 - ? pp_print_string(out, _fJ_) + ? pp_print_string(out, _fL_) : caml_call2 - (fprintf$0(out)(_fL_), - function(_qv_, _qw_){ - return pp_list(_fK_, format, _qv_, _qw_); + (fprintf$0(out)(_fN_), + function(_qy_, _qz_){ + return pp_list(_fM_, format, _qy_, _qz_); }, l$1); } - if(963043957 <= _qq_){ + if(963043957 <= _qt_){ var l = json[2]; return l ? caml_call2 - (fprintf$0(out)(_fE_), - function(_qt_, _qu_){ - return pp_list(_fD_, format_field, _qt_, _qu_); + (fprintf$0(out)(_fG_), + function(_qw_, _qx_){ + return pp_list(_fF_, format_field, _qw_, _qx_); }, l) - : pp_print_string(out, _fF_); + : pp_print_string(out, _fH_); } } else{ - if(3654863 === _qq_){ + if(3654863 === _qt_){ var i = json[2]; return pp_print_string(out, string_of_int(i)); } - if(365180284 <= _qq_){ - if(708012133 > _qq_){ + if(365180284 <= _qt_){ + if(708012133 > _qt_){ var f = json[2], s$2 = caml_call1(Compliance[8], f); return pp_print_string(out, s$2); } - var _qr_ = json[2], match = _qr_[2], s$0 = _qr_[1]; + var _qu_ = json[2], match = _qu_[2], s$0 = _qu_[1]; if(match){ var json$0 = match[1], s$1 = to_json_string(s$0); - return caml_call3(fprintf$0(out)(_fM_), s$1, format, json$0); + return caml_call3(fprintf$0(out)(_fO_), s$1, format, json$0); } - var _qs_ = to_json_string(s$0); - return caml_call1(fprintf$0(out)(_fN_), _qs_); + var _qv_ = to_json_string(s$0); + return caml_call1(fprintf$0(out)(_fP_), _qv_); } - if(-752863768 > _qq_){ + if(-752863768 > _qt_){ var s$3 = json[2]; return pp_print_string(out, to_json_string(s$3)); } @@ -13750,18 +13826,18 @@ return pp_print_string(out, s); } function format_field(out, param){ - var json = param[2], name = param[1], _qp_ = to_json_string(name); - return caml_call3(fprintf$0(out)(_fO_), _qp_, format, json); + var json = param[2], name = param[1], _qs_ = to_json_string(name); + return caml_call3(fprintf$0(out)(_fQ_), _qs_, format, json); } function pretty_print(out, json){ - return caml_call2(fprintf$0(out)(_fP_), format, json); + return caml_call2(fprintf$0(out)(_fR_), format, json); } function pretty_print_to_string(json){ - return caml_call2(asprintf(_fQ_), pretty_print, json); + return caml_call2(asprintf(_fS_), pretty_print, json); } function pretty_print_to_channel(oc, json){ var fmt = formatter_of_out_channel(oc); - return caml_call2(fprintf$0(fmt)(_fR_), pretty_print, json); + return caml_call2(fprintf$0(fmt)(_fT_), pretty_print, json); } return [0, , @@ -13772,9 +13848,9 @@ pretty_print_to_string, pretty_print_to_channel]; } - function _fS_(_qn_){ - var _qo_ = Make$3(_qn_); - return [0, _qo_[5], _qo_[6], _qo_[7]]; + function _fU_(_qq_){ + var _qr_ = Make$3(_qq_); + return [0, _qr_[5], _qr_[6], _qr_[7]]; } function error$1(msg, json){ throw caml_maybe_attach_backtrace([0, Failure, msg], 1); @@ -13782,58 +13858,58 @@ function Strict(M){ function to_assoc(json){ if(typeof json !== "number" && 963043957 === json[1]){var obj = json[2]; return obj;} - return error$1(_fT_, json); + return error$1(_fV_, json); } function to_string(json){ if(typeof json !== "number" && -976970511 === json[1]){var s = json[2]; return s;} - return error$1(_fU_, json); + return error$1(_fW_, json); } return [0, , , , to_assoc, , , to_string]; } function null$1(param){return 870828711;} var M = [0, null$1], - _fV_ = Strict(M), - to_assoc = _fV_[4], - to_string$3 = _fV_[7]; + _fX_ = Strict(M), + to_assoc = _fX_[4], + to_string$3 = _fX_[7]; function token_to_string(tok){ if(typeof tok === "number") switch(tok){ case 0: - return _fW_; + return _fY_; case 1: - return _fX_; + return _fZ_; case 2: - return _fY_; + return _f0_; case 3: - return _fZ_; + return _f1_; case 4: - return _f0_; + return _f2_; case 5: - return _f1_; + return _f3_; case 6: - return _f2_; + return _f4_; case 7: - return _f3_; + return _f5_; case 8: - return _f4_; + return _f6_; case 9: - return _f5_; + return _f7_; case 10: - return _f6_; + return _f8_; case 11: - return _f7_; + return _f9_; case 12: - return _f8_; + return _f__; case 13: - return _f9_; - default: return _f__; + return _f$_; + default: return _ga_; } switch(tok[0]){ case 0: var s = tok[1]; return s; case 1: - var err = tok[1]; return symbol(_ga_, symbol(err, _f$_)); + var err = tok[1]; return symbol_concat(_gc_, symbol_concat(err, _gb_)); case 2: var s$0 = tok[1]; return s$0; case 3: @@ -13842,7 +13918,7 @@ var f = tok[1]; return string_of_float(f); case 5: var err$0 = tok[1]; return err$0; - default: var b = tok[1]; return b ? _gb_ : _gc_; + default: var b = tok[1]; return b ? _gd_ : _ge_; } } function Make$4(Lexxer, Parser){ @@ -13851,7 +13927,7 @@ var match = caml_call1(Parser[2], reader); if(0 !== match[0]){var s = match[1]; return [1, s];} var match$0 = match[1]; - if(! match$0) return _ge_; + if(! match$0) return _gg_; var res = match$0[1]; try{var tok = reader(0);} catch(exn$0){ @@ -13861,7 +13937,7 @@ return [1, err]; } if(typeof tok === "number" && 6 === tok) return [0, res]; - return [1, symbol(_gd_, token_to_string(tok))]; + return [1, symbol_concat(_gf_, token_to_string(tok))]; } function read_json_error_info(lexbuf){ var res = read_json(lexbuf); @@ -13900,27 +13976,27 @@ var res = match$0[1]; a: if(stream) - var _qj_ = [0, [0, res]]; + var _qm_ = [0, [0, res]]; else{ try{var tok = reader(0);} catch(exn$0){ var exn = caml_wrap_exception(exn$0); if(exn[1] !== Lex_error) throw caml_maybe_attach_backtrace(exn, 0); - var err = exn[2], _ql_ = [1, err], _qj_ = _ql_; + var err = exn[2], _qo_ = [1, err], _qm_ = _qo_; break a; } b: { - if(typeof tok === "number" && 6 === tok){var _qm_ = [0, [0, res]]; break b;} - var _qm_ = [1, symbol(_gf_, token_to_string(tok))]; + if(typeof tok === "number" && 6 === tok){var _qp_ = [0, [0, res]]; break b;} + var _qp_ = [1, symbol_concat(_gh_, token_to_string(tok))]; } - var _qj_ = _qm_; + var _qm_ = _qp_; } - var _qk_ = _qj_; + var _qn_ = _qm_; } else - var _qk_ = stream ? _gg_ : _gh_; - var res$0 = _qk_; + var _qn_ = stream ? _gi_ : _gj_; + var res$0 = _qn_; } else var s$0 = match[1], res$0 = [1, s$0]; @@ -13999,24 +14075,24 @@ } function Make$5(Compliance){ function nibble_to_hex(i){ - var _qi_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_qi_); + var _ql_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_ql_); } function add_hex_byte(oc, i){ _j_(oc, nibble_to_hex((i >>> 4 | 0) & 15)); return _j_(oc, nibble_to_hex(i & 15)); } function escape(oc, s){ - function add_char(_qh_){return _j_(oc, _qh_);} - function add_string(_qg_){return output_string(oc, _qg_);} - var l = caml_ml_string_length(s), _qe_ = l - 1 | 0, _qd_ = 0; - if(_qe_ >= 0){ - var i = _qd_; + function add_char(_qk_){return _j_(oc, _qk_);} + function add_string(_qj_){return output_string(oc, _qj_);} + var l = caml_ml_string_length(s), _qh_ = l - 1 | 0, _qg_ = 0; + if(_qh_ >= 0){ + var i = _qg_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - add_string(_gi_); + add_string(_gk_); else{ b: { @@ -14026,17 +14102,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - add_string(_gk_); break; + add_string(_gm_); break; case 1: - add_string(_gl_); break; + add_string(_gn_); break; case 2: - add_string(_gm_); break; + add_string(_go_); break; case 4: - add_string(_gn_); break; + add_string(_gp_); break; case 5: - add_string(_go_); break; + add_string(_gq_); break; case 26: - add_string(_gp_); break; + add_string(_gr_); break; case 24: case 25: break c; @@ -14049,19 +14125,19 @@ add_char(caml_string_get(s, i)); break a; } - add_string(_gj_); + add_string(_gl_); add_hex_byte(oc, c); } - var _qf_ = i + 1 | 0; - if(_qe_ === i) break; - var i = _qf_; + var _qi_ = i + 1 | 0; + if(_qh_ === i) break; + i = _qi_; } } return; } function json_to_channel_fmt(oc, json, eol, incr, psep){ - function add_char(_qc_){return _j_(oc, _qc_);} - function add_string(_qb_){return output_string(oc, _qb_);} + function add_char(_qf_){return _j_(oc, _qf_);} + function add_string(_qe_){return output_string(oc, _qe_);} function add_quote_string(s){ add_char(34); escape(oc, s); @@ -14069,13 +14145,13 @@ } function add_int(i){return add_string(string_of_int(i));} function add_float(f){return add_string(caml_call1(Compliance[8], f));} - var psep$0 = symbol(_gq_, psep); + var psep$0 = symbol_concat(_gs_, psep); function fmt(off, value){ - if(typeof value === "number") return add_string(_gr_); - var _qa_ = value[1]; - if(708012133 <= _qa_){ - if(737456202 > _qa_){ - if(726928360 <= _qa_){ + if(typeof value === "number") return add_string(_gt_); + var _qd_ = value[1]; + if(708012133 <= _qd_){ + if(737456202 > _qd_){ + if(726928360 <= _qd_){ var t = value[2], ldr$1 = make$1(off, 32); add_char(40); add_string(eol); @@ -14092,8 +14168,8 @@ add_string(ldr$2); return add_char(62); } - if(928231259 <= _qa_){ - if(963043957 <= _qa_){ + if(928231259 <= _qd_){ + if(963043957 <= _qd_){ var o = value[2], ldr = make$1(off, 32); add_char(123); add_string(eol); @@ -14105,7 +14181,7 @@ var s = value[2]; return add_string(s); } - if(848054398 <= _qa_){ + if(848054398 <= _qd_){ var l = value[2], ldr$0 = make$1(off, 32); add_char(91); add_string(eol); @@ -14117,13 +14193,13 @@ var b = value[2]; return add_string(string_of_bool(b)); } - if(-752863768 === _qa_){var s$0 = value[2]; return add_string(s$0);} - if(3654863 <= _qa_){ - if(365180284 <= _qa_){var f = value[2]; return add_float(f);} + if(-752863768 === _qd_){var s$0 = value[2]; return add_string(s$0);} + if(3654863 <= _qd_){ + if(365180284 <= _qd_){var f = value[2]; return add_float(f);} var i = value[2]; return add_int(i); } - if(-375152890 <= _qa_){var s$1 = value[2]; return add_string(s$1);} + if(-375152890 <= _qd_){var s$1 = value[2]; return add_string(s$1);} var s$2 = value[2]; return add_quote_string(s$2); } @@ -14131,7 +14207,7 @@ var ldr = make$1(off, 32), sep = [0, ldr], - newsep = symbol(_gs_, symbol(eol, ldr)); + newsep = symbol_concat(_gu_, symbol_concat(eol, ldr)); return iter$0 (function(v){ add_string(sep[1]); @@ -14150,7 +14226,7 @@ var ldr = make$1(off, 32), sep = [0, ldr], - newsep = symbol(_gt_, symbol(eol, ldr)); + newsep = symbol_concat(_gv_, symbol_concat(eol, ldr)); return iter$0 (function(v){ add_string(sep[1]); @@ -14170,11 +14246,11 @@ fmt(0, json); return add_string(eol); } - function json_to_channel(_p5_){ - function _p6_(_p8_, _p9_, _p__, _p$_){ - return json_to_channel_fmt(_p5_, _p8_, _p9_, _p__, _p$_); + function json_to_channel(_p8_){ + function _p9_(_p$_, _qa_, _qb_, _qc_){ + return json_to_channel_fmt(_p8_, _p$_, _qa_, _qb_, _qc_); } - return function(_p7_){return _p6_(_p7_, _gv_, 0, _gu_);}; + return function(_p__){return _p9_(_p__, _gx_, 0, _gw_);}; } function json_to_file_exn(file, json){ var oc = open_out(file); @@ -14189,24 +14265,24 @@ } function Make$6(Compliance){ function nibble_to_hex(i){ - var _p4_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_p4_); + var _p7_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_p7_); } function add_hex_byte(buf, i){ add_char(buf, nibble_to_hex((i >>> 4 | 0) & 15)); return add_char(buf, nibble_to_hex(i & 15)); } function escape(buf, s){ - function add_char$0(_p3_){return add_char(buf, _p3_);} - function add_string$0(_p2_){return add_string(buf, _p2_);} - var l = caml_ml_string_length(s), _p0_ = l - 1 | 0, _pZ_ = 0; - if(_p0_ >= 0){ - var i = _pZ_; + function add_char$0(_p6_){return add_char(buf, _p6_);} + function add_string$0(_p5_){return add_string(buf, _p5_);} + var l = caml_ml_string_length(s), _p3_ = l - 1 | 0, _p2_ = 0; + if(_p3_ >= 0){ + var i = _p2_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - add_string$0(_gw_); + add_string$0(_gy_); else{ b: { @@ -14216,17 +14292,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - add_string$0(_gy_); break; + add_string$0(_gA_); break; case 1: - add_string$0(_gz_); break; + add_string$0(_gB_); break; case 2: - add_string$0(_gA_); break; + add_string$0(_gC_); break; case 4: - add_string$0(_gB_); break; + add_string$0(_gD_); break; case 5: - add_string$0(_gC_); break; + add_string$0(_gE_); break; case 26: - add_string$0(_gD_); break; + add_string$0(_gF_); break; case 24: case 25: break c; @@ -14239,19 +14315,19 @@ add_char$0(caml_string_get(s, i)); break a; } - add_string$0(_gx_); + add_string$0(_gz_); add_hex_byte(buf, c); } - var _p1_ = i + 1 | 0; - if(_p0_ === i) break; - var i = _p1_; + var _p4_ = i + 1 | 0; + if(_p3_ === i) break; + i = _p4_; } } return; } function json_to_buffer(buf, json){ - function add_char$0(_pY_){return add_char(buf, _pY_);} - function add_string$0(_pX_){return add_string(buf, _pX_);} + function add_char$0(_p1_){return add_char(buf, _p1_);} + function add_string$0(_p0_){return add_string(buf, _p0_);} function add_quote_string(s){ add_char$0(34); escape(buf, s); @@ -14260,11 +14336,11 @@ function add_int(i){return add_string$0(string_of_int(i));} function add_float(f){return add_string$0(caml_call1(Compliance[8], f));} function fmt(value){ - if(typeof value === "number") return add_string$0(_gE_); - var _pW_ = value[1]; - if(708012133 <= _pW_){ - if(737456202 > _pW_){ - if(726928360 <= _pW_){ + if(typeof value === "number") return add_string$0(_gG_); + var _pZ_ = value[1]; + if(708012133 <= _pZ_){ + if(737456202 > _pZ_){ + if(726928360 <= _pZ_){ var t = value[2]; add_char$0(40); json_list(t); @@ -14275,8 +14351,8 @@ variant(v); return add_char$0(62); } - if(928231259 <= _pW_){ - if(963043957 <= _pW_){ + if(928231259 <= _pZ_){ + if(963043957 <= _pZ_){ var o = value[2]; add_char$0(123); json_assoc(o); @@ -14285,7 +14361,7 @@ var s = value[2]; return add_string$0(s); } - if(848054398 <= _pW_){ + if(848054398 <= _pZ_){ var l = value[2]; add_char$0(91); json_list(l); @@ -14294,22 +14370,22 @@ var b = value[2]; return add_string$0(string_of_bool(b)); } - if(-752863768 === _pW_){var s$0 = value[2]; return add_string$0(s$0);} - if(3654863 <= _pW_){ - if(365180284 <= _pW_){var f = value[2]; return add_float(f);} + if(-752863768 === _pZ_){var s$0 = value[2]; return add_string$0(s$0);} + if(3654863 <= _pZ_){ + if(365180284 <= _pZ_){var f = value[2]; return add_float(f);} var i = value[2]; return add_int(i); } - if(-375152890 <= _pW_){var s$1 = value[2]; return add_string$0(s$1);} + if(-375152890 <= _pZ_){var s$1 = value[2]; return add_string$0(s$1);} var s$2 = value[2]; return add_quote_string(s$2); } function json_assoc(o){ - var sep = [0, _gF_]; + var sep = [0, _gH_]; return iter$0 (function(v){ add_string$0(sep[1]); - sep[1] = _gG_; + sep[1] = _gI_; return pair(v); }, o); @@ -14321,11 +14397,11 @@ return fmt(v); } function json_list(l){ - var sep = [0, _gH_]; + var sep = [0, _gJ_]; return iter$0 (function(v){ add_string$0(sep[1]); - sep[1] = _gI_; + sep[1] = _gK_; return fmt(v); }, l); @@ -14347,7 +14423,7 @@ } return [0, , , json_to_string, , , , , , , , json_to_buffer]; } - var Json_error = [248, _gJ_, caml_fresh_oo_id(0)]; + var Json_error = [248, _gL_, caml_fresh_oo_id(0)]; function json_error(msg){ throw caml_maybe_attach_backtrace([0, Json_error, msg], 1); } @@ -14355,7 +14431,7 @@ var Lexxer = Make$1(Compliance), Parser = Make$2(Compliance), - include = function(_pV_){return Make$4(Lexxer, _pV_);}(Parser), + include = function(_pY_){return Make$4(Lexxer, _pY_);}(Parser), json_of_string_error_info = include[15], json_of_file_error_info = include[16], json_of_channel_error_info = include[17], @@ -14401,16 +14477,18 @@ function error_to_string(error_info, fname, lnum){ if(lnum) var lnum$0 = lnum[1], lnum$1 = lnum$0; else var lnum$1 = 1; var - _pR_ = error_info[4], - _pS_ = error_info[3], - _pT_ = error_info[2], - _pU_ = (lnum$1 + error_info[1] | 0) - 1 | 0; + _pU_ = error_info[4], + _pV_ = error_info[3], + _pW_ = error_info[2], + _pX_ = (lnum$1 + error_info[1] | 0) - 1 | 0; if(fname) - var name = fname[1], fname$0 = symbol(_gL_, symbol(name, _gK_)); + var + name = fname[1], + fname$0 = symbol_concat(_gN_, symbol_concat(name, _gM_)); else - var fname$0 = _gN_; - var loc = caml_call4(sprintf(_gM_), fname$0, _pU_, _pT_, _pS_); - return symbol(loc, _pR_); + var fname$0 = _gP_; + var loc = caml_call4(sprintf(_gO_), fname$0, _pX_, _pW_, _pV_); + return symbol_concat(loc, _pU_); } function apply_and_handle_errors(f, a, fname, lnum){ var match = caml_call1(f, a); @@ -14425,13 +14503,13 @@ } function Common_writer(Compliance){ var - _pM_ = Make$6(Compliance), - to_string = _pM_[3], - to_buffer = _pM_[11], - _pN_ = Make$5(Compliance), - to_file = _pN_[9], - to_channel = _pN_[11], - include = _fS_(Compliance), + _pP_ = Make$6(Compliance), + to_string = _pP_[3], + to_buffer = _pP_[11], + _pQ_ = Make$5(Compliance), + to_file = _pQ_[9], + to_channel = _pQ_[11], + include = _fU_(Compliance), pretty_print = include[1], pretty_print_to_string = include[2], pretty_print_to_channel = include[3], @@ -14471,14 +14549,14 @@ function to_standard(json){ function map(node){ if(typeof node === "number") return 870828711; - var _pQ_ = node[1]; - if(708012133 > _pQ_){ - if(-752863768 === _pQ_){ + var _pT_ = node[1]; + if(708012133 > _pT_){ + if(-752863768 === _pT_){ var v$1 = node[2]; return [0, -976970511, v$1]; } - if(3654863 <= _pQ_) return 365180284 <= _pQ_ ? node : node; - if(-375152890 > _pQ_) return node; + if(3654863 <= _pT_) return 365180284 <= _pT_ ? node : node; + if(-375152890 > _pT_) return node; var s = node[2]; return 1 < caml_ml_string_length(s) >>> 0 ? [0, @@ -14486,8 +14564,8 @@ sub$0(s, 1, caml_ml_string_length(s) - 2 | 0)] : [0, -976970511, s]; } - if(737456202 > _pQ_){ - if(726928360 <= _pQ_){ + if(737456202 > _pT_){ + if(726928360 <= _pT_){ var tpl = node[2]; return [0, 848054398, map$1(map, tpl)]; } @@ -14496,12 +14574,12 @@ var v$0 = jopt[1]; return [0, 848054398, [0, [0, -976970511, name], [0, map(v$0), 0]]]; } - if(928231259 > _pQ_){ - if(848054398 > _pQ_) return node; + if(928231259 > _pT_){ + if(848054398 > _pT_) return node; var l = node[2]; return [0, 848054398, map$1(map, l)]; } - if(963043957 <= _pQ_){ + if(963043957 <= _pT_){ var a = node[2]; return [0, 963043957, @@ -14517,26 +14595,26 @@ } return map(json); } - function to_string$0(param, _pO_, opt, json){ + function to_string$0(param, _pR_, opt, json){ if(opt) var sth = opt[1], std = sth; else var std = 0; if(! std) return Internal_writer[3].call(null, json); - var _pP_ = to_standard(json); - return Internal_writer[3].call(null, _pP_); + var _pS_ = to_standard(json); + return Internal_writer[3].call(null, _pS_); } return [0, , , to_string$0]; } function lex_string(s){return unescape_string(s);} function lex_number(token){return token;} function lex_integer(token){return token;} - function lex_largeint(param){return _gO_;} + function lex_largeint(param){return _gQ_;} function lex_variant(param){return 0;} function lex_tuple(param){return 0;} - function comment_check(param){return _gP_;} + function comment_check(param){return _gR_;} function number_to_string(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _gQ_ : _gR_ - : 4 <= match ? _gS_ : string_of_float_json(f); + ? f < 0. ? _gS_ : _gT_ + : 4 <= match ? _gU_ : string_of_float_json(f); } function largeint(s){return [0, 365180284, caml_float_of_string(s)];} function integer(i){return [0, 3654863, i];} @@ -14546,10 +14624,10 @@ function assoc(a){return [0, 963043957, a];} function list(l){return [0, 848054398, l];} function tuple(l){ - throw caml_maybe_attach_backtrace([0, Failure, _gT_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _gV_], 1); } function variant(l){ - throw caml_maybe_attach_backtrace([0, Failure, _gU_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _gW_], 1); } function number(param){ if(typeof param === "number") @@ -14560,7 +14638,7 @@ ? [0, 365180284, Infinity] : [0, 365180284, -Infinity]; if(928231259 <= param[1]) - throw caml_maybe_attach_backtrace([0, Failure, _gV_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _gX_], 1); var f = param[2]; return [0, 365180284, f]; } @@ -14569,16 +14647,16 @@ function object_start(param){return 17732;} function object_end(param){return 17718;} function tuple_start(param){ - throw caml_maybe_attach_backtrace([0, Failure, _gW_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _gY_], 1); } function tuple_end(param){ - throw caml_maybe_attach_backtrace([0, Failure, _gX_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _gZ_], 1); } function variant_start(param){ - throw caml_maybe_attach_backtrace([0, Failure, _gY_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _g0_], 1); } function variant_end(param){ - throw caml_maybe_attach_backtrace([0, Failure, _gZ_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _g1_], 1); } function name$0(s){return [0, 869834347, s];} Common_reader @@ -14659,12 +14737,12 @@ function lex_largeint$0(token){return token;} function lex_variant$0(param){return 1;} function lex_tuple$0(param){return 1;} - function comment_check$0(param){return _g0_;} + function comment_check$0(param){return _g2_;} function number_to_string$0(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _g1_ : _g2_ - : 4 <= match ? _g3_ : string_of_float_json(f); + ? f < 0. ? _g3_ : _g4_ + : 4 <= match ? _g5_ : string_of_float_json(f); } function largeint$0(s){return [0, -752863768, s];} function integer$0(i){return [0, 3654863, i];} @@ -14684,7 +14762,7 @@ ? [0, 365180284, Infinity] : [0, 365180284, -Infinity]; if(928231259 <= param[1]) - throw caml_maybe_attach_backtrace([0, Failure, _g4_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _g6_], 1); var f = param[2]; return [0, 365180284, f]; } @@ -14774,18 +14852,20 @@ variant_end$0, name$1]]), to_string$4 = include[3]; - function lex_string$1(s){return symbol(_g6_, symbol(s, _g5_));} + function lex_string$1(s){ + return symbol_concat(_g8_, symbol_concat(s, _g7_)); + } function lex_number$1(token){return token;} function lex_integer$1(token){return token;} function lex_largeint$1(token){return token;} function lex_variant$1(param){return 1;} function lex_tuple$1(param){return 1;} - function comment_check$1(param){return _g7_;} + function comment_check$1(param){return _g9_;} function number_to_string$1(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _g8_ : _g9_ - : 4 <= match ? _g__ : string_of_float_json(f); + ? f < 0. ? _g__ : _g$_ + : 4 <= match ? _ha_ : string_of_float_json(f); } function largeint$1(s){return [0, -752863768, s];} function integer$1(i){return [0, -752863768, string_of_int(i)];} @@ -14798,7 +14878,7 @@ function variant$1(k, v){return [0, 708012133, [0, k, v]];} function number$1(param){ if(typeof param === "number") - return 3900603 === param ? _g$_ : 874173192 <= param ? _ha_ : _hb_; + return 3900603 === param ? _hb_ : 874173192 <= param ? _hc_ : _hd_; if(928231259 <= param[1]){var f = param[2]; return [0, 928231259, f];} var f$0 = param[2]; return [0, 928231259, string_of_float(f$0)]; @@ -14894,126 +14974,126 @@ r3 = caml_call1(rand, 0), r4 = caml_call1(rand, 0), u = caml_create_bytes(16), - _og_ = 0; - function _oh_(_pL_, _pK_, _pJ_){caml_bytes_set(_pL_, _pK_, _pJ_); return;} - (function(_pI_){return _oh_(u, _og_, _pI_);}(r0 & 255)); - var _oi_ = 1; - function _oj_(_pH_, _pG_, _pF_){caml_bytes_set(_pH_, _pG_, _pF_); return;} - (function(_pE_){return _oj_(u, _oi_, _pE_);}((r0 >>> 8 | 0) & 255)); - var _ok_ = 2; - function _ol_(_pD_, _pC_, _pB_){caml_bytes_set(_pD_, _pC_, _pB_); return;} - (function(_pA_){return _ol_(u, _ok_, _pA_);}((r0 >>> 16 | 0) & 255)); - var _om_ = 3; - function _on_(_pz_, _py_, _px_){caml_bytes_set(_pz_, _py_, _px_); return;} - (function(_pw_){return _on_(u, _om_, _pw_);}(r1 & 255)); - var _oo_ = 4; - function _op_(_pv_, _pu_, _pt_){caml_bytes_set(_pv_, _pu_, _pt_); return;} - (function(_ps_){return _op_(u, _oo_, _ps_);}((r1 >>> 8 | 0) & 255)); - var _oq_ = 5; - function _or_(_pr_, _pq_, _pp_){caml_bytes_set(_pr_, _pq_, _pp_); return;} - (function(_po_){return _or_(u, _oq_, _po_);}((r1 >>> 16 | 0) & 255)); - var _os_ = 6; - function _ot_(_pn_, _pm_, _pl_){caml_bytes_set(_pn_, _pm_, _pl_); return;} - (function(_pk_){return _ot_(u, _os_, _pk_);}(64 | (r1 >>> 24 | 0) & 15)); - var _ou_ = 7; - function _ov_(_pj_, _pi_, _ph_){caml_bytes_set(_pj_, _pi_, _ph_); return;} - (function(_pg_){return _ov_(u, _ou_, _pg_);}(r2 & 255)); - var _ow_ = 8; - function _ox_(_pf_, _pe_, _pd_){caml_bytes_set(_pf_, _pe_, _pd_); return;} - (function(_pc_){return _ox_(u, _ow_, _pc_);}(128 | (r2 >>> 24 | 0) & 63)); - var _oy_ = 9; - function _oz_(_pb_, _pa_, _o$_){caml_bytes_set(_pb_, _pa_, _o$_); return;} - (function(_o__){return _oz_(u, _oy_, _o__);}((r2 >>> 8 | 0) & 255)); - var _oA_ = 10; - function _oB_(_o9_, _o8_, _o7_){caml_bytes_set(_o9_, _o8_, _o7_); return;} - (function(_o6_){return _oB_(u, _oA_, _o6_);}((r2 >>> 16 | 0) & 255)); - var _oC_ = 11; - function _oD_(_o5_, _o4_, _o3_){caml_bytes_set(_o5_, _o4_, _o3_); return;} - (function(_o2_){return _oD_(u, _oC_, _o2_);}(r3 & 255)); - var _oE_ = 12; - function _oF_(_o1_, _o0_, _oZ_){caml_bytes_set(_o1_, _o0_, _oZ_); return;} - (function(_oY_){return _oF_(u, _oE_, _oY_);}((r3 >>> 8 | 0) & 255)); - var _oG_ = 13; - function _oH_(_oX_, _oW_, _oV_){caml_bytes_set(_oX_, _oW_, _oV_); return;} - (function(_oU_){return _oH_(u, _oG_, _oU_);}((r3 >>> 16 | 0) & 255)); - var _oI_ = 14; - function _oJ_(_oT_, _oS_, _oR_){caml_bytes_set(_oT_, _oS_, _oR_); return;} - (function(_oQ_){return _oJ_(u, _oI_, _oQ_);}(r4 & 255)); - var _oK_ = 15; - function _oL_(_oP_, _oO_, _oN_){caml_bytes_set(_oP_, _oO_, _oN_); return;} - (function(_oM_){return _oL_(u, _oK_, _oM_);}((r4 >>> 8 | 0) & 255)); + _oj_ = 0; + function _ok_(_pO_, _pN_, _pM_){caml_bytes_set(_pO_, _pN_, _pM_); return;} + (function(_pL_){return _ok_(u, _oj_, _pL_);}(r0 & 255)); + var _ol_ = 1; + function _om_(_pK_, _pJ_, _pI_){caml_bytes_set(_pK_, _pJ_, _pI_); return;} + (function(_pH_){return _om_(u, _ol_, _pH_);}((r0 >>> 8 | 0) & 255)); + var _on_ = 2; + function _oo_(_pG_, _pF_, _pE_){caml_bytes_set(_pG_, _pF_, _pE_); return;} + (function(_pD_){return _oo_(u, _on_, _pD_);}((r0 >>> 16 | 0) & 255)); + var _op_ = 3; + function _oq_(_pC_, _pB_, _pA_){caml_bytes_set(_pC_, _pB_, _pA_); return;} + (function(_pz_){return _oq_(u, _op_, _pz_);}(r1 & 255)); + var _or_ = 4; + function _os_(_py_, _px_, _pw_){caml_bytes_set(_py_, _px_, _pw_); return;} + (function(_pv_){return _os_(u, _or_, _pv_);}((r1 >>> 8 | 0) & 255)); + var _ot_ = 5; + function _ou_(_pu_, _pt_, _ps_){caml_bytes_set(_pu_, _pt_, _ps_); return;} + (function(_pr_){return _ou_(u, _ot_, _pr_);}((r1 >>> 16 | 0) & 255)); + var _ov_ = 6; + function _ow_(_pq_, _pp_, _po_){caml_bytes_set(_pq_, _pp_, _po_); return;} + (function(_pn_){return _ow_(u, _ov_, _pn_);}(64 | (r1 >>> 24 | 0) & 15)); + var _ox_ = 7; + function _oy_(_pm_, _pl_, _pk_){caml_bytes_set(_pm_, _pl_, _pk_); return;} + (function(_pj_){return _oy_(u, _ox_, _pj_);}(r2 & 255)); + var _oz_ = 8; + function _oA_(_pi_, _ph_, _pg_){caml_bytes_set(_pi_, _ph_, _pg_); return;} + (function(_pf_){return _oA_(u, _oz_, _pf_);}(128 | (r2 >>> 24 | 0) & 63)); + var _oB_ = 9; + function _oC_(_pe_, _pd_, _pc_){caml_bytes_set(_pe_, _pd_, _pc_); return;} + (function(_pb_){return _oC_(u, _oB_, _pb_);}((r2 >>> 8 | 0) & 255)); + var _oD_ = 10; + function _oE_(_pa_, _o$_, _o__){caml_bytes_set(_pa_, _o$_, _o__); return;} + (function(_o9_){return _oE_(u, _oD_, _o9_);}((r2 >>> 16 | 0) & 255)); + var _oF_ = 11; + function _oG_(_o8_, _o7_, _o6_){caml_bytes_set(_o8_, _o7_, _o6_); return;} + (function(_o5_){return _oG_(u, _oF_, _o5_);}(r3 & 255)); + var _oH_ = 12; + function _oI_(_o4_, _o3_, _o2_){caml_bytes_set(_o4_, _o3_, _o2_); return;} + (function(_o1_){return _oI_(u, _oH_, _o1_);}((r3 >>> 8 | 0) & 255)); + var _oJ_ = 13; + function _oK_(_o0_, _oZ_, _oY_){caml_bytes_set(_o0_, _oZ_, _oY_); return;} + (function(_oX_){return _oK_(u, _oJ_, _oX_);}((r3 >>> 16 | 0) & 255)); + var _oL_ = 14; + function _oM_(_oW_, _oV_, _oU_){caml_bytes_set(_oW_, _oV_, _oU_); return;} + (function(_oT_){return _oM_(u, _oL_, _oT_);}(r4 & 255)); + var _oN_ = 15; + function _oO_(_oS_, _oR_, _oQ_){caml_bytes_set(_oS_, _oR_, _oQ_); return;} + (function(_oP_){return _oO_(u, _oN_, _oP_);}((r4 >>> 8 | 0) & 255)); return unsafe_to_string(u); } function v4_gen(seed){ - function rand$0(_of_){return rand(seed, _of_);} + function rand$0(_oi_){return rand(seed, _oi_);} return function(param){return v4_ocaml_random_uuid(rand$0);}; } function to_string$5(opt, u){ if(opt) var sth = opt[1], upper = sth; else var upper = 0; var hbase = upper ? 55 : 87; function hex(hbase, i){return 10 <= i ? hbase + i | 0 : 48 + i | 0;} - var s = of_string(_hc_), i = [0, 0], j = [0, 0]; + var s = of_string(_he_), i = [0, 0], j = [0, 0]; function byte$0(s, i, c){ - function _n6_(_oe_, _od_, _oc_){ - caml_bytes_set(_oe_, _od_, _oc_); + function _n9_(_oh_, _og_, _of_){ + caml_bytes_set(_oh_, _og_, _of_); return; } - (function(_ob_){return _n6_(s, i, _ob_);}(hex(hbase, c >>> 4 | 0))); - var _n7_ = i + 1 | 0; - function _n8_(_oa_, _n$_, _n__){ - caml_bytes_set(_oa_, _n$_, _n__); + (function(_oe_){return _n9_(s, i, _oe_);}(hex(hbase, c >>> 4 | 0))); + var _n__ = i + 1 | 0; + function _n$_(_od_, _oc_, _ob_){ + caml_bytes_set(_od_, _oc_, _ob_); return; } - return function(_n9_){return _n8_(s, _n7_, _n9_);}(hex(hbase, c & 15)); + return function(_oa_){return _n$_(s, _n__, _oa_);}(hex(hbase, c & 15)); } for(;;){ if(4 <= j[1]) break; - var _n5_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _n5_); + var _n8_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _n8_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(6 <= j[1]) break; - var _n4_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _n4_); + var _n7_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _n7_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(8 <= j[1]) break; - var _n3_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _n3_); + var _n6_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _n6_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(10 <= j[1]) break; - var _n2_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _n2_); + var _n5_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _n5_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(16 <= j[1]) return unsafe_to_string(s); - var _n1_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _n1_); + var _n4_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _n4_); i[1] = i[1] + 2 | 0; j[1]++; } } - var include$0 = _et_([0, compare$0]); + var include$0 = _ev_([0, compare$0]); function to_jstr$1(t){return encode(t);} function of_jstr$1(jstr){ var match = decode(jstr); if(0 === match[0]){var v = match[1]; return [0, v];} var err = match[1]; error$0([0, err, 0]); - return _hd_; + return _hf_; } function of_jv(jv){return of_jstr$1(jv);} var random_state = get_state(0); @@ -15025,33 +15105,33 @@ of_list$2 = include$0[29], to_list$3 = include$0[49]; function to_at(t){ - return symbol$9 + return symbol$8 (function(c){return [0, 80, class$1(caml_jsstring_of_string(c))];}, to_list$3(t)); } var empty$2 = [0, empty$1, 0]; function to_at$0(id, t){ var - _nY_ = to_at(t[1]), - _nZ_ = t[2], - at = function(_n0_){return rev_append(_nZ_, _n0_);}(_nY_); + _n1_ = to_at(t[1]), + _n2_ = t[2], + at = function(_n3_){return rev_append(_n2_, _n3_);}(_n1_); if(! id) return at; var id$0 = id[1]; return [0, [0, 80, id$1(caml_jsstring_of_string(id$0))], at]; } - function classes(l){var _nX_ = empty$2[2]; return [0, of_list$2(l), _nX_];} - function union$0(param, _nV_){ + function classes(l){var _n0_ = empty$2[2]; return [0, of_list$2(l), _n0_];} + function union$0(param, _nY_){ var - a = _nV_[2], - c = _nV_[1], + a = _nY_[2], + c = _nY_[1], attrs = param[2], classes = param[1], - _nW_ = rev_append(attrs, a); - return [0, union(classes, c), _nW_]; + _nZ_ = rev_append(attrs, a); + return [0, union(classes, c), _nZ_]; } function add$1(at_name, v, at){ - var _nS_ = v[1]; - if(82 === _nS_) + var _nV_ = v[1]; + if(82 === _nV_) var v$0 = v[2], a = @@ -15060,18 +15140,18 @@ func (v$0, function(v){ - return function(_nT_){return v$1(at_name, _nT_);} + return function(_nW_){return v$1(at_name, _nW_);} (caml_jsstring_of_string(v)); })]; - else if(83 <= _nS_) - var a = failwith(_he_); + else if(83 <= _nV_) + var a = failwith(_hg_); else var v$2 = v[2], a = [0, 80, - function(_nU_){return v$1(at_name, _nU_);} + function(_nX_){return v$1(at_name, _nX_);} (caml_jsstring_of_string(v$2))]; return [0, a, at]; } @@ -15082,14 +15162,14 @@ return [0, [0, 80, - function(_nR_){return v$1(at_name, _nR_);} + function(_nU_){return v$1(at_name, _nU_);} (caml_jsstring_of_string(v$0))], at]; } function map_col(f, param){ - var _nQ_ = param[1]; - if(82 === _nQ_){var v = param[2]; return [0, 82, func(v, f)];} - if(83 <= _nQ_){var v$0 = param[2]; return [0, 83, map$4(f, v$0)];} + var _nT_ = param[1]; + if(82 === _nT_){var v = param[2]; return [0, 82, func(v, f)];} + if(83 <= _nT_){var v$0 = param[2]; return [0, 83, map$4(f, v$0)];} var v$1 = param[2]; return [0, 80, caml_call1(f, v$1)]; } @@ -15106,33 +15186,33 @@ return cons$2(map_col(function(n){return [0, n];}, n), 0); } function v$5(at){return cons$2(at, 0);} - function symbol$14(at, t){return cons$2(at, t);} + function symbol$13(at, t){return cons$2(at, t);} function of_string$1(s){ - var match = chop_suffix(_hf_, s); + var match = chop_suffix(_hh_, s); if(match){ var i = match[1], match$0 = of_string$0(i); if(match$0){var i$0 = match$0[1]; return [0, [0, i$0]];} - var _nK_ = function(i){return [0, i];}; - return function(_nP_){return symbol$10(_nK_, _nP_);}(of_string_opt(i)); + var _nN_ = function(i){return [0, i];}; + return function(_nS_){return symbol$9(_nN_, _nS_);}(of_string_opt(i)); } - var match$1 = chop_suffix(_hg_, s); + var match$1 = chop_suffix(_hi_, s); if(match$1){ - var f = match$1[1], _nL_ = function(f){return [1, f];}; - return function(_nO_){return symbol$10(_nL_, _nO_);}(of_string_opt(f)); + var f = match$1[1], _nO_ = function(f){return [1, f];}; + return function(_nR_){return symbol$9(_nO_, _nR_);}(of_string_opt(f)); } - var match$2 = chop_suffix(_hh_, s); + var match$2 = chop_suffix(_hj_, s); if(! match$2) return 0; var f$0 = match$2[1]; - function _nM_(f){return [1, f];} - return function(_nN_){return symbol$10(_nM_, _nN_);}(of_string_opt(f$0)); + function _nP_(f){return [1, f];} + return function(_nQ_){return symbol$9(_nP_, _nQ_);}(of_string_opt(f$0)); } function to_string$6(param){ switch(param[0]){ case 0: - var i = param[1]; return caml_call1(sprintf(_hi_), i); + var i = param[1]; return caml_call1(sprintf(_hk_), i); case 1: - var f = param[1]; return caml_call1(sprintf(_hj_), f); - default: var f$0 = param[1]; return caml_call1(sprintf(_hk_), f$0); + var f = param[1]; return caml_call1(sprintf(_hl_), f); + default: var f$0 = param[1]; return caml_call1(sprintf(_hm_), f$0); } } function to_px(opt){ @@ -15147,7 +15227,7 @@ match = of_string$1(font_size); if(! match) return 16.; var match$0 = match[1]; - if(0 !== match$0[0]) return failwith(_hl_); + if(0 !== match$0[0]) return failwith(_hn_); var i = match$0[1]; return i; } @@ -15166,12 +15246,12 @@ }}; } function map3(f, a, b, c){ - function _nF_(_nI_, _nJ_){return map2(c, _nI_, _nJ_);} - function _nG_(c, param){ + function _nI_(_nL_, _nM_){return map2(c, _nL_, _nM_);} + function _nJ_(c, param){ var b = param[2], a = param[1]; return caml_call3(f, a, b, c); } - return function(_nH_){return _nF_(_nH_, _nG_);} + return function(_nK_){return _nI_(_nK_, _nJ_);} (map2(a, b, function(a, b){return [0, a, b];})); } function triple(a, b, c){ @@ -15184,8 +15264,8 @@ } function make$5(opt, scroll_target, elt){ if(opt) var sth = opt[1], at = sth; else var at = 0; - var active = var$0(1), at$0 = symbol$14(_hm_, at), at$1 = class$2(_hn_); - function on_click(param){return symbol$2(active, 1);} + var active = var$0(1), at$0 = symbol$13(_ho_, at), at$1 = class$2(_hp_); + function on_click(param){return symbol$1(active, 1);} var handler$0 = handler(0, click, on_click), ev = [0, [0, 80, handler$0], 0], @@ -15194,14 +15274,14 @@ (0, [0, at$1], [0, ev], - [0, [0, 82, button$0(0, 0, 0, [0, [0, 80, txt(0, _ho_)], 0])], 0]), + [0, [0, 82, button$0(0, 0, 0, [0, [0, 80, txt(0, _hq_)], 0])], 0]), on_wheel = handler (0, wheel, function(ev){ - var _nE_ = peek(active); - return _nE_ ? symbol$2(active, 0) : _nE_; + var _nH_ = peek(active); + return _nH_ ? symbol$1(active, 0) : _nH_; }), state = triple(elt, get$3(active), scroll_target), elt$0 = @@ -15209,7 +15289,7 @@ (state, function(param){ var pos = param[3], active = param[2], elt = param[1]; - if(active) iter(function(_nD_){return js_scroll(elt, _nD_);}, pos); + if(active) iter(function(_nG_){return js_scroll(elt, _nG_);}, pos); return elt; }); return div$1 @@ -15235,12 +15315,12 @@ var template = to_string$2 - (_hp_, function(param){var css_size = param[2]; return css_size;}, t); - return caml_call2(sprintf(_hr_), _hq_, template); + (_hr_, function(param){var css_size = param[2]; return css_size;}, t); + return caml_call2(sprintf(_ht_), _hs_, template); } function style$2(t){ var style = style$1(t[1][1]); - return concat(_hs_, [0, style, 0]); + return concat(_hu_, [0, style, 0]); } function header(t){ var @@ -15250,20 +15330,20 @@ [0, 80, style$0 - (caml_jsstring_of_string(caml_call1(sprintf(_ht_), row_height)))], + (caml_jsstring_of_string(caml_call1(sprintf(_hv_), row_height)))], 0], - _nz_ = [0, at], - _ny_ = to_header(t[1][1]); - return function(_nA_){ - return function(_nB_, _nC_){ - return div$1(_nA_, _nz_, _nB_, _nC_);}; + _nC_ = [0, at], + _nB_ = to_header(t[1][1]); + return function(_nD_){ + return function(_nE_, _nF_){ + return div$1(_nD_, _nC_, _nE_, _nF_);}; } (0) - (0, _ny_); + (0, _nB_); } - to_px(0)(_hu_); + to_px(0)(_hw_); function Uniqueue(O){ - var Set = _et_(O); + var Set = _ev_(O); function create(param){ var queue = create$0(0), uniq = Set[1]; return [0, queue, uniq]; @@ -15278,8 +15358,8 @@ var new_queue = create$0(0); iter$3 (function(v$0){ - var _nx_ = 1 - equal$0(caml_call2(O[1], v, v$0), 0); - return _nx_ ? add(v$0, new_queue) : _nx_; + var _nA_ = 1 - equal$0(caml_call2(O[1], v, v$0), 0); + return _nA_ ? add(v$0, new_queue) : _nA_; }, t[1]); add(v, new_queue); @@ -15305,9 +15385,9 @@ function make$6(ui_table, opt, scroll_target){ return function(data_source){ var row_size = to_string$6(ui_table[2]); - function height_n(n){return caml_call2(sprintf(_hv_), row_size, n);} + function height_n(n){return caml_call2(sprintf(_hx_), row_size, n);} var - height$0 = caml_call1(sprintf(_hw_), row_size), + height$0 = caml_call1(sprintf(_hy_), row_size), table = make$3(0), row_index = create$2(0, 2048), unload_queue = Int_uniqueue[2].call(null, 0); @@ -15317,10 +15397,10 @@ symbol_bind$0 (get$5(row_index, i), function(row){ - return symbol$11 + return symbol$10 (get$4(row), function(row_data){ - return symbol$3(row, [0, row_data[1], 0, row_data[3]]); + return symbol$2(row, [0, row_data[1], 0, row_data[3]]); }); }); return; @@ -15334,12 +15414,12 @@ symbol_bind$0 (get$5(row_index, i), function(row){ - return symbol$11 + return symbol$10 (get$4(row), function(row_data){ if(! data) throw caml_maybe_attach_backtrace(Not_found, 1); var data$0 = data[1]; - return symbol$3 + return symbol$2 (row, [0, row_data[1], [0, data$0], row_data[3]]); }); }); @@ -15353,26 +15433,26 @@ function cleanup(param){ var q_length = Int_uniqueue[5].call(null, unload_queue), - _ns_ = symbol$6(q_length, max_items); - if(_ns_){ + _nv_ = symbol$5(q_length, max_items); + if(_nv_){ if(q_length >= max_items){ var for$0 = max_items; for(;;){ try{unload(Int_uniqueue[4].call(null, unload_queue));} - catch(_nw_){ - var _nu_ = caml_wrap_exception(_nw_); - if(_nu_ !== Empty) throw caml_maybe_attach_backtrace(_nu_, 0); + catch(_nz_){ + var _nx_ = caml_wrap_exception(_nz_); + if(_nx_ !== Empty) throw caml_maybe_attach_backtrace(_nx_, 0); } - var _nv_ = for$0 + 1 | 0; + var _ny_ = for$0 + 1 | 0; if(q_length === for$0) break; - var for$0 = _nv_; + for$0 = _ny_; } } - var _nt_ = 0; + var _nw_ = 0; } else - var _nt_ = _ns_; - return _nt_; + var _nw_ = _nv_; + return _nw_; } var to_load = @@ -15387,12 +15467,12 @@ function height(elt){return elt["offsetHeight"];} var scroll_y$0 = scroll_y(div), - direction = symbol$8(scroll_y$0, last_scroll_y[1]) ? 759637122 : 19067; + direction = symbol$7(scroll_y$0, last_scroll_y[1]) ? 759637122 : 19067; last_scroll_y[1] = scroll_y$0; var visible_height = height(div), - _np_ = ui_table[2], - header_height = to_px([0, div])(_np_), + _ns_ = ui_table[2], + header_height = to_px([0, div])(_ns_), number_of_visible_rows = visible_height / header_height | 0, scroll_y$1 = scroll_y$0 - header_height, first_visible_row = (scroll_y$1 / header_height | 0) + 1 | 0, @@ -15401,32 +15481,32 @@ 19067 === direction ? number_of_visible_rows : number_of_visible_rows / 2 | 0, - _nq_ = 0, + _nt_ = 0, first = - function(_nr_){return max(_nq_, _nr_);} + function(_nu_){return max(_nt_, _nu_);} (first_visible_row - bleeding | 0), bleeding$0 = 759637122 === direction ? number_of_visible_rows : number_of_visible_rows / 2 | 0, last = last_visible_row + bleeding$0 | 0; - return init$1(last - first | 0, function(i){return first + i | 0;}); + return init$2(last - first | 0, function(i){return first + i | 0;}); } function prepare(total, render){ clear$2(table); clear$1(row_index); Int_uniqueue[6].call(null, unload_queue); - var _nm_ = total - 1 | 0, _nl_ = 0; - if(_nm_ >= 0){ - var i = _nl_; + var _np_ = total - 1 | 0, _no_ = 0; + if(_np_ >= 0){ + var i = _no_; for(;;){ var set = [0, i, 0, render]; let i$0 = i; - (function(_no_){return add$0(row_index, i$0, _no_);} + (function(_nr_){return add$0(row_index, i$0, _nr_);} (append([0, set], table))); - var _nn_ = i + 1 | 0; - if(_nm_ === i) break; - var i = _nn_; + var _nq_ = i + 1 | 0; + if(_np_ === i) break; + i = _nq_; } } return; @@ -15437,7 +15517,7 @@ (data_source, function(param){ var render = param[3], fetch = param[2], total_items = param[1]; - function add$0(_nj_, _nk_){return add(fetch, _nj_, _nk_);} + function add$0(_nm_, _nn_){return add(fetch, _nm_, _nn_);} var last_scroll_y = [0, 0.]; function update(div){ var visible_rows = compute_visible_rows(last_scroll_y, div); @@ -15446,7 +15526,7 @@ return let$0 (total_items, function(total_items){ - if(0 !== total_items[0]) return function(_ni_){return 0;}; + if(0 !== total_items[0]) return function(_nl_){return 0;}; var total_items$0 = total_items[1]; prepare(total_items$0, render); return update; @@ -15466,16 +15546,16 @@ var last_update = [0, 0.], timeout = [0, -1]; function reset_ticker(div){ var debouncing_interval = 25, now = now_ms(performance); - if(symbol$7(timeout[1], 0)) stop_timer(timeout[1]); + if(symbol$6(timeout[1], 0)) stop_timer(timeout[1]); timeout[1] = set_timeout (debouncing_interval, function(param){return caml_call1(update, div);}); var - _nh_ = symbol$8(now - last_update[1], debouncing_interval); - return _nh_ + _nk_ = symbol$7(now - last_update[1], debouncing_interval); + return _nk_ ? (last_update[1] = now, caml_call1(update, div)) - : _nh_; + : _nk_; } function scroll_handler(div){return reset_ticker(div);} var div = target(ev); @@ -15493,9 +15573,9 @@ set_on_invalidate (root, function(param){ - var _nf_ = quick_sample(root), _ng_ = _nf_[2]; - if(! _ng_) return 0; - var div = _ng_[1][2], update = _nf_[1]; + var _ni_ = quick_sample(root), _nj_ = _ni_[2]; + if(! _nj_) return 0; + var div = _nj_[1][2], update = _ni_[1]; return await$1 (update, function(update){return caml_call1(update, div);}); }); @@ -15506,12 +15586,12 @@ style = style$0(caml_jsstring_of_string(height_n(n))); return div$0(0, [0, [0, style, at]], 0); } - function render(param, _ne_){ + function render(param, _nh_){ var - render = _ne_[3], - content = _ne_[2], - index = _ne_[1], - at = add$1(class$0, _hx_, 0), + render = _nh_[3], + content = _nh_[2], + index = _nh_[1], + at = add$1(class$0, _hz_, 0), style = [0, 80, style$0(caml_jsstring_of_string(height$0))]; if(! content) return [0, 1, empty$0, 0]; var data = content[1]; @@ -15528,11 +15608,11 @@ (render, [0, [0, 0, empty$0, 0], - function(param, _nc_){ + function(param, _nf_){ var - q = _nc_[3], - s = _nc_[2], - p = _nc_[1], + q = _nf_[3], + s = _nf_[2], + p = _nf_[1], m = param[3], s$0 = param[2], n = param[1], @@ -15544,11 +15624,11 @@ : [0, (n + m | 0) + p | 0, s, q]; if(typeof match$0 === "number") return [0, n, s$0, (m + p | 0) + q | 0]; - if(symbol$6(m + p | 0, 0)) + if(symbol$5(m + p | 0, 0)) var spacer = pure(make_spacer(m + p | 0)), s$1 = - function(_nd_){return concat$1(s$0, _nd_);} + function(_ng_){return concat$1(s$0, _ng_);} (concat$1(element(spacer), s)); else var s$1 = concat$1(s$0, s); @@ -15560,13 +15640,13 @@ (rows, function(param){ var m = param[3], s = param[2], n = param[1]; - if(symbol$6(n, 0)) + if(symbol$5(n, 0)) var first_spacer = pure(make_spacer(n)), result = concat$1(element(first_spacer), s); else var result = s; - if(! symbol$6(m, 0)) return result; + if(! symbol$5(m, 0)) return result; var last_spacer = pure(make_spacer(m)); return concat$1(result, element(last_spacer)); }), @@ -15580,28 +15660,28 @@ rect = content_rect(entry), height$0 = height(rect), match = peek(table_height); - if(! match) return symbol$2(table_height, [0, [0, height$0, div]]); + if(! match) return symbol$1(table_height, [0, [0, height$0, div]]); var h = match[1][1]; - return symbol$5(h, height$0) - ? symbol$2(table_height, [0, [0, height$0, div]]) + return symbol$4(h, height$0) + ? symbol$1(table_height, [0, [0, height$0, div]]) : 0; }), - at = to_at$0(0, classes(_hy_)), + at = to_at$0(0, classes(_hA_)), grid_style = style$2(ui_table), s = style$0(caml_jsstring_of_string(grid_style)), at$0 = [0, [0, 80, s], at]; - function arg(_na_, _nb_){return observe(observer, _na_, _nb_);} - function _m7_(eta){return arg(0, eta);} - function _m8_(_m$_){return tee(_m7_, _m$_);} + function arg(_nd_, _ne_){return observe(observer, _nd_, _ne_);} + function _m__(eta){return arg(0, eta);} + function _m$_(_nc_){return tee(_m__, _nc_);} var table$0 = - function(_m__){return func(_m__, _m8_);} + function(_nb_){return func(_nb_, _m$_);} (div$1 (0, [0, at$0], [0, [0, [0, 82, scroll_handler], 0]], [0, [0, 82, table_header], [0, [0, 83, lift(table_body)], 0]])), - at$1 = v$5(_hz_); + at$1 = v$5(_hB_); if(! scroll_target) return div$1(0, [0, at$1], 0, [0, [0, 82, table$0], 0]); var @@ -15612,32 +15692,32 @@ scroll_target$0, function(parent, i){ var - _m9_ = ui_table[2], - row_height = of_float(to_px([0, parent])(_m9_)); + _na_ = ui_table[2], + row_height = of_float(to_px([0, parent])(_na_)); return [0, [0, caml_mul(i, row_height)]]; }); return make$5([0, at$1], scroll_target$1, table$0);}; } function make$7(C){ - function set(lang){return symbol$2(C[1], lang);} + function set(lang){return symbol$1(C[1], lang);} return [0, set]; } var keys = create$2(0, 64); function check_key(key){ return mem(keys, key) - ? failwith(caml_call1(sprintf(_hA_), key)) + ? failwith(caml_call1(sprintf(_hC_), key)) : add$0(keys, key, 0); } var local_storage = local(window); function store(key, value){ - return function(_m6_){return set_item(local_storage, key, _m6_);} + return function(_m9_){return set_item(local_storage, key, _m9_);} (to_jstr$1(value)); } function fetch$0(key){ var match = get_item(local_storage, key); - function _m4_(encoded_value){return of_jstr$1(encoded_value);} - if(match) var v = match[1], _m5_ = [0, v]; else var _m5_ = _hB_; - return symbol_bind$1(_m5_, _m4_); + function _m7_(encoded_value){return of_jstr$1(encoded_value);} + if(match) var v = match[1], _m8_ = [0, v]; else var _m8_ = _hD_; + return symbol_bind$1(_m8_, _m7_); } function initial_value(key, f){ var match = fetch$0(key); @@ -15678,7 +15758,7 @@ value_change_event, function(ev){ var t = target(ev), v = t[cst_value]; - return symbol$2(var$1, [0, caml_call1(value, v)]); + return symbol$1(var$1, [0, caml_call1(value, v)]); }); return [0, on_change, var$1]; } @@ -15688,19 +15768,19 @@ d, opt, ev, - _m1_, + _m4_, value_change_event, pattern$0, type, default_value){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_m1_) var sth$0 = _m1_[1], required = sth$0; else var required = 0; + if(_m4_) var sth$0 = _m4_[1], required = sth$0; else var required = 0; var type$1 = type$0(caml_jsstring_of_string(type)), at$0 = [0, [0, 80, type$1], at], at$1 = - function(_m2_){return add_opt(pattern, pattern$0, _m2_);} - (function(_m3_){return add_bool(required$0, required, _m3_);}(at$0)), + function(_m5_){return add_opt(pattern, pattern$0, _m5_);} + (function(_m6_){return add_bool(required$0, required, _m6_);}(at$0)), validate$0 = value$3(validate, function(v){return [0, v];}), match = make_handler(value, value_change_event, default_value), value$0 = match[2], @@ -15714,8 +15794,8 @@ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = - function(_mZ_){return add_opt(value$1, default_value, _mZ_);} - (function(_m0_){return add_opt(placeholder, placeholder$0, _m0_);}(at)); + function(_m2_){return add_opt(value$1, default_value, _m2_);} + (function(_m3_){return add_opt(placeholder, placeholder$0, _m3_);}(at)); return make_input (value$0, validate, @@ -15725,7 +15805,7 @@ required, keyup, pattern, - _hC_, + _hE_, default_value); } function password_input @@ -15733,7 +15813,7 @@ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = - function(_mY_){return add_opt(placeholder, placeholder$0, _mY_);}(at); + function(_m1_){return add_opt(placeholder, placeholder$0, _m1_);}(at); return make_input (value$0, validate, @@ -15743,14 +15823,14 @@ required, keyup, pattern, - _hD_, + _hF_, 0); } function submit$0(d, opt, ev, text){ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = add$1(value$1, text, at); return make_input - (function(_mX_){return 0;}, + (function(_m0_){return 0;}, 0, d, [0, at$0], @@ -15758,7 +15838,7 @@ 0, change, 0, - _hE_, + _hG_, 0); } function field$0(field, setter){ @@ -15767,16 +15847,16 @@ function create$8(d, at, ev, Form){ return function(on_submit){ var - _mQ_ = + _mT_ = [0, - [0, empty$0, function(_mW_){return _mW_;}], - function(param, _mV_){ - var f = _mV_[2], elts = _mV_[1], f$0 = param[2], elts$0 = param[1]; + [0, empty$0, function(_mZ_){return _mZ_;}], + function(param, _mY_){ + var f = _mY_[2], elts = _mY_[1], f$0 = param[2], elts$0 = param[1]; return [0, concat$1(elts$0, elts), function(t){return caml_call1(f, caml_call1(f$0, t));}]; }]; - function _mR_(param){ + function _mU_(param){ var mapper = param[2], field = param[1]; function value(param){ var match = peek(field[2]); @@ -15787,13 +15867,13 @@ return [0, element(field[1]), function(t){ - var _mU_ = value(0); - return caml_call1(caml_call1(mapper, t), _mU_); + var _mX_ = value(0); + return caml_call1(caml_call1(mapper, t), _mX_); }]; } var fields = - function(_mT_){return fold_monoid(_mR_, _mQ_, _mT_);}(lift(Form[2])), + function(_mW_){return fold_monoid(_mU_, _mT_, _mW_);}(lift(Form[2])), handler$0 = func (fields, @@ -15810,30 +15890,30 @@ ev$0 = map_or ([0, on_submit$0, 0], - function(_mS_){return cons(on_submit$0, _mS_);}, + function(_mV_){return cons(on_submit$0, _mV_);}, ev); return form$0(d, at, [0, ev$0], [0, [0, 83, lift(elts)], 0]);}; } function name$3(id, base_name){ return id - ? caml_call1(sprintf(_hF_), base_name) - : caml_call1(sprintf(_hG_), base_name); + ? caml_call1(sprintf(_hH_), base_name) + : caml_call1(sprintf(_hI_), base_name); } - function make$8(opt, _mL_, desc){ + function make$8(opt, _mO_, desc){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_mL_) var sth$0 = _mL_[1], ev = sth$0; else var ev = 0; + if(_mO_) var sth$0 = _mO_[1], ev = sth$0; else var ev = 0; var id = name$3(1, desc[1]), name$0 = name$3(0, desc[1]), var$0 = var$1(id, desc[2]), - _mM_ = desc[3]; + _mP_ = desc[3]; label$0 - (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, _mM_); + (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, _mP_); var - _mN_ = [0, 80, name$0], + _mQ_ = [0, 80, name$0], at$0 = - function(_mO_){return add$1(type, _hH_, _mO_);} - (function(_mP_){return add$1(name, _mN_, _mP_);} + function(_mR_){return add$1(type, _hJ_, _mR_);} + (function(_mS_){return add$1(name, _mQ_, _mS_);} (add$1(id$0, [0, 80, id], at))), match = peek(var$0); if(match) @@ -15849,31 +15929,31 @@ keyup, function(ev){ var t = target(ev), value = t[cst_value]; - return symbol$2(var$0, [0, value$0(value)]); + return symbol$1(var$0, [0, value$0(value)]); }), ev$0 = [0, [0, 80, on_change], ev], field = input$1(0, [0, at$1], [0, ev$0], 0); return [0, field, , get$3(var$0)]; } function name$4(id, base_name){ - return id ? caml_call1(sprintf(_hI_), base_name) : base_name; + return id ? caml_call1(sprintf(_hK_), base_name) : base_name; } - function make$9(opt, _mG_, desc){ + function make$9(opt, _mJ_, desc){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_mG_) var sth$0 = _mG_[1], ev = sth$0; else var ev = 0; + if(_mJ_) var sth$0 = _mJ_[1], ev = sth$0; else var ev = 0; return function(options){ var id = name$4(1, desc[1]), name$0 = name$4(0, desc[1]), var$0 = var$1(id, desc[2]), - _mH_ = desc[3]; + _mK_ = desc[3]; label$0 - (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, _mH_); + (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, _mK_); var - _mI_ = [0, 80, name$0], + _mL_ = [0, 80, name$0], at$0 = - function(_mJ_){return add$1(type, _hJ_, _mJ_);} - (function(_mK_){return add$1(name, _mI_, _mK_);} + function(_mM_){return add$1(type, _hL_, _mM_);} + (function(_mN_){return add$1(name, _mL_, _mN_);} (add$1(id$0, [0, 80, id], at))), on_change = handler @@ -15881,7 +15961,7 @@ change, function(ev){ var t = target(ev), value = t[cst_value]; - return symbol$2(var$0, value$0(value)); + return symbol$1(var$0, value$0(value)); }), ev$0 = [0, [0, 80, on_change], ev], options$0 = @@ -15897,7 +15977,7 @@ function(selected){ return [1, if$0(poly(selected, value), selected$0)]; }), - at$0 = symbol$14([0, 82, selected], at); + at$0 = symbol$13([0, 82, selected], at); return option$0(0, [0, at$0], 0, [0, [0, 80, txt(0, name)], 0]); }, options), @@ -15907,8 +15987,8 @@ } function name$5(g, n, id, base_name){ return id - ? caml_call3(sprintf(_hK_), base_name, g, n) - : caml_call3(sprintf(_hL_), base_name, g, n); + ? caml_call3(sprintf(_hM_), base_name, g, n) + : caml_call3(sprintf(_hN_), base_name, g, n); } function make$10(t){ function make_check(g, n, value, label, checked){ @@ -15922,10 +16002,10 @@ [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, label), - _mC_ = [0, 80, name$0], + _mF_ = [0, 80, name$0], at = - function(_mE_){return add$1(type, _hM_, _mE_);} - (function(_mF_){return add$1(name, _mC_, _mF_);} + function(_mH_){return add$1(type, _hO_, _mH_);} + (function(_mI_){return add$1(name, _mF_, _mI_);} (add$1(id$0, [0, 80, id], 0))), checked$1 = func @@ -15937,10 +16017,10 @@ change, function(ev){ var t = target(ev), checked = t[cst_checked]; - return symbol$2(var$0, result(checked | 0)); + return symbol$1(var$0, result(checked | 0)); }), ev = [0, [0, 80, on_change], 0], - _mD_ = get$3(var$0); + _mG_ = get$3(var$0); return [0, div$1 (0, @@ -15949,7 +16029,7 @@ [0, [0, 82, input$1(0, [0, at$0], [0, ev], 0)], [0, [0, 82, lbl], 0]]), - _mD_]; + _mG_]; } function make_all(g, desc){ var n = [0, 0]; @@ -15970,11 +16050,11 @@ var all = make_all(0, t[2]), elts = map$4(function(param){var elt = param[1]; return elt;}, all); - function _my_(_mB_){return _mB_;} + function _mB_(_mE_){return _mE_;} var value = - function(_mz_){return func(_mz_, to_list$1);} - (function(_mA_){return filter_map$0(_my_, _mA_);} + function(_mC_){return func(_mC_, to_list$1);} + (function(_mD_){return filter_map$0(_mB_, _mD_);} (lift (fold_monoid (function(param){var v = param[2]; return element(v);}, @@ -15986,8 +16066,8 @@ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = - function(_mx_){return add$1(value$1, value, _mx_);} - (add$1(type, _hN_, at)); + function(_mA_){return add$1(value$1, value, _mA_);} + (add$1(type, _hP_, at)); return input$1(d, [0, at$0], ev, 0); } function handler$0(opts, type, func){return [0, opts, type, func];} @@ -15999,7 +16079,7 @@ return function(ev, content){ var v_state = var$0(state); function get_state(param){return get$3(v_state);} - function set_state(t){return symbol$2(v_state, t);} + function set_state(t){return symbol$1(v_state, t);} var elt = symbol_bind @@ -16021,18 +16101,18 @@ map_or (base, function(at){ - return function(_mw_){return union$0(base, _mw_);} + return function(_mz_){return union$0(base, _mz_);} (apply_state(state, at)); }, at), at$1 = to_at$0(0, at$0); - function _mt_(param){ - var _mv_ = param[1]; - if(82 === _mv_){ + function _mw_(param){ + var _my_ = param[1]; + if(82 === _my_){ var h = param[2]; return [0, 82, func(h, with_state)]; } - if(83 <= _mv_){ + if(83 <= _my_){ var h$0 = param[2]; return [0, 83, map$4(with_state, h$0)]; } @@ -16040,8 +16120,7 @@ return [0, 80, with_state(h$1)]; } var - ev$0 = - symbol$10(function(_mu_){return symbol$9(_mt_, _mu_);}, ev); + ev$0 = symbol$9(function(_mx_){return symbol$8(_mw_, _mx_);}, ev); return button$0(d, [0, at$1], ev$0, caml_call1(content, state)); }); return [0, elt, get_state, set_state];};}; @@ -16060,7 +16139,7 @@ return [0, 848054398, rev(rev_map(yojson_of_a, lst))]; } var - Of_yojson_error = [248, _hO_, caml_fresh_oo_id(0)], + Of_yojson_error = [248, _hQ_, caml_fresh_oo_id(0)], record_check_extra_fields = [0, 1]; function of_yojson_error(what, yojson){ throw caml_maybe_attach_backtrace @@ -16068,11 +16147,11 @@ } function string_of_yojson(yojson){ if(typeof yojson !== "number" && -976970511 === yojson[1]){var str = yojson[2]; return str;} - return of_yojson_error(_hP_, yojson); + return of_yojson_error(_hR_, yojson); } function int_of_yojson(yojson){ if(typeof yojson !== "number" && 3654863 === yojson[1]){var v = yojson[2]; return v;} - return of_yojson_error(_hQ_, yojson); + return of_yojson_error(_hS_, yojson); } function option_of_yojson(a_of_yojson, yojson){ return 870828711 === yojson ? 0 : [0, caml_call1(a_of_yojson, yojson)]; @@ -16082,59 +16161,56 @@ var lst = yojson[2], rev_lst = rev_map(a_of_yojson, lst); return rev(rev_lst); } - return of_yojson_error(_hR_, yojson); + return of_yojson_error(_hT_, yojson); } function stag_no_args(loc, yojson){ - return of_yojson_error(symbol(loc, _hS_), yojson); + return of_yojson_error(symbol_concat(loc, _hU_), yojson); } function nested_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol(loc, _hT_), yojson); + return of_yojson_error(symbol_concat(loc, _hV_), yojson); } function empty_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol(loc, _hU_), yojson); + return of_yojson_error(symbol_concat(loc, _hW_), yojson); } function unexpected_stag(loc, yojson){ - return of_yojson_error(symbol(loc, _hV_), yojson); + return of_yojson_error(symbol_concat(loc, _hX_), yojson); } function record_superfluous_fields(what, loc, rev_fld_names, yojson){ var - fld_names_str = concat(_hW_, rev(rev_fld_names)), - msg = caml_call3(sprintf(_hX_), loc, what, fld_names_str); + fld_names_str = concat(_hY_, rev(rev_fld_names)), + msg = caml_call3(sprintf(_hZ_), loc, what, fld_names_str); return of_yojson_error(msg, yojson); } function record_duplicate_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_hY_, loc, rev_fld_names, yojson); + return record_superfluous_fields(_h0_, loc, rev_fld_names, yojson); } function record_extra_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_hZ_, loc, rev_fld_names, yojson); + return record_superfluous_fields(_h1_, loc, rev_fld_names, yojson); } function record_get_undefined_loop(fields, param){ var fields$0 = fields, param$0 = param; for(;;){ - if(! param$0) return concat(_h0_, rev(fields$0)); - var _ms_ = param$0[1]; - if(_ms_[1]) - var - rest = param$0[2], - field = _ms_[2], - fields$1 = [0, field, fields$0], - fields$0 = fields$1, - param$0 = rest; - else - var rest$0 = param$0[2], param$0 = rest$0; + if(! param$0) return concat(_h2_, rev(fields$0)); + var _mv_ = param$0[1]; + if(_mv_[1]){ + var rest = param$0[2], field = _mv_[2], fields$1 = [0, field, fields$0]; + fields$0 = fields$1; + param$0 = rest; + } + else{var rest$0 = param$0[2]; param$0 = rest$0;} } } function record_undefined_elements(loc, yojson, lst){ var undefined$0 = record_get_undefined_loop(0, lst), - msg = caml_call2(sprintf(_h1_), loc, undefined$0); + msg = caml_call2(sprintf(_h3_), loc, undefined$0); return of_yojson_error(msg, yojson); } function record_list_instead_atom(loc, yojson){ - var msg = symbol(loc, _h2_); + var msg = symbol_concat(loc, _h4_); return of_yojson_error(msg, yojson); } - function symbol$15(x){return x[1];} + function symbol$14(x){return x[1];} function jstr_of_method(param){return param ? "POST" : "GET";} function user_of_yojson(yojson){ if(typeof yojson !== "number" && 963043957 === yojson[1]){ @@ -16156,48 +16232,48 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_Id)) - if(caml_string_notequal(field_name, cst_Name)) - if(caml_string_notequal(field_name, cst_ServerId)){ - if(! caml_string_notequal(field_name, cst_ServerName)) - if(symbol$15(server_name_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + if(field_name !== cst_Id) + if(field_name !== cst_Name) + if(field_name !== cst_ServerId){ + if(field_name === cst_ServerName) + if(symbol$14(server_name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue = option_of_yojson(string_of_yojson, field_yojson); server_name_field[1] = [0, fvalue]; } } - else if(symbol$15(server_id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(server_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$0 = string_of_yojson(field_yojson); server_id_field[1] = [0, fvalue$0]; } - else if(symbol$15(name_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$1 = string_of_yojson(field_yojson); name_field[1] = [0, fvalue$1]; } - else if(symbol$15(id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$2 = string_of_yojson(field_yojson); id_field[1] = [0, fvalue$2]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc, symbol$15(extra), yojson); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc, symbol$14(extra), yojson); var - match = symbol$15(name_field), - match$0 = symbol$15(server_id_field), - server_name_value = symbol$15(server_name_field), - match$1 = symbol$15(id_field); + match = symbol$14(name_field), + match$0 = symbol$14(server_id_field), + server_name_value = symbol$14(server_name_field), + match$1 = symbol$14(id_field); if(match && match$0 && match$1){ var id_value = match$1[1], @@ -16210,12 +16286,12 @@ return [0, name_value, server_id_value, v$0, id_value]; } var - _mq_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _h3_], 0], - _mr_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _h4_], _mq_]; + _mt_ = [0, [0, 0 === symbol$14(id_field) ? 1 : 0, _h5_], 0], + _mu_ = [0, [0, 0 === symbol$14(server_id_field) ? 1 : 0, _h6_], _mt_]; return record_undefined_elements (tp_loc, yojson, - [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _h5_], _mr_]); + [0, [0, 0 === symbol$14(name_field) ? 1 : 0, _h7_], _mu_]); } return record_list_instead_atom(tp_loc, yojson); } @@ -16226,13 +16302,13 @@ v_server_id = param[2], v_name = param[1], arg = yojson_of_string(v_id), - bnds = [0, [0, _h6_, arg], 0], + bnds = [0, [0, _h8_, arg], 0], arg$0 = yojson_of_option(yojson_of_string, v_server_name), - bnds$0 = [0, [0, _h7_, arg$0], bnds], + bnds$0 = [0, [0, _h9_, arg$0], bnds], arg$1 = yojson_of_string(v_server_id), - bnds$1 = [0, [0, _h8_, arg$1], bnds$0], + bnds$1 = [0, [0, _h__, arg$1], bnds$0], arg$2 = yojson_of_string(v_name), - bnds$2 = [0, [0, _h9_, arg$2], bnds$1]; + bnds$2 = [0, [0, _h$_, arg$2], bnds$1]; return [0, 963043957, bnds$2]; } function params_of_yojson(yojson){ @@ -16253,41 +16329,41 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_Pw)) - if(caml_string_notequal(field_name, cst_Username)){ - if(symbol$15(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$15(extra)]; + if(field_name !== cst_Pw) + if(field_name !== cst_Username){ + if(symbol$14(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$14(extra)]; } - else if(symbol$15(username_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(username_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue = string_of_yojson(field_yojson); username_field[1] = [0, fvalue]; } - else if(symbol$15(pw_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(pw_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$0 = string_of_yojson(field_yojson); pw_field[1] = [0, fvalue$0]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$0, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$0, symbol$15(extra), yojson); - var match = symbol$15(username_field), match$0 = symbol$15(pw_field); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$0, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$0, symbol$14(extra), yojson); + var match = symbol$14(username_field), match$0 = symbol$14(pw_field); if(match && match$0){ var pw_value = match$0[1], username_value = match[1]; return [0, username_value, pw_value]; } - var _mp_ = [0, [0, 0 === symbol$15(pw_field) ? 1 : 0, _h__], 0]; + var _ms_ = [0, [0, 0 === symbol$14(pw_field) ? 1 : 0, _ia_], 0]; return record_undefined_elements (tp_loc$0, yojson, - [0, [0, 0 === symbol$15(username_field) ? 1 : 0, _h$_], _mp_]); + [0, [0, 0 === symbol$14(username_field) ? 1 : 0, _ib_], _ms_]); } return record_list_instead_atom(tp_loc$0, yojson); } @@ -16296,9 +16372,9 @@ v_pw = param[2], v_username = param[1], arg = yojson_of_string(v_pw), - bnds = [0, [0, _ia_, arg], 0], + bnds = [0, [0, _ic_, arg], 0], arg$0 = yojson_of_string(v_username), - bnds$0 = [0, [0, _ib_, arg$0], bnds]; + bnds$0 = [0, [0, _id_, arg$0], bnds]; return [0, 963043957, bnds$0]; } function response_of_yojson(yojson){ @@ -16320,40 +16396,40 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_AccessToken)) - if(caml_string_notequal(field_name, cst_ServerId)){ - if(! caml_string_notequal(field_name, cst_User)) - if(symbol$15(user_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + if(field_name !== cst_AccessToken) + if(field_name !== cst_ServerId){ + if(field_name === cst_User) + if(symbol$14(user_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue = user_of_yojson(field_yojson); user_field[1] = [0, fvalue]; } } - else if(symbol$15(server_id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(server_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$0 = string_of_yojson(field_yojson); server_id_field[1] = [0, fvalue$0]; } - else if(symbol$15(access_token_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(access_token_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$1 = string_of_yojson(field_yojson); access_token_field[1] = [0, fvalue$1]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$1, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$1, symbol$15(extra), yojson); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$1, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$1, symbol$14(extra), yojson); var - match = symbol$15(user_field), - match$0 = symbol$15(access_token_field), - match$1 = symbol$15(server_id_field); + match = symbol$14(user_field), + match$0 = symbol$14(access_token_field), + match$1 = symbol$14(server_id_field); if(match && match$0 && match$1){ var server_id_value = match$1[1], @@ -16362,12 +16438,12 @@ return [0, user_value, access_token_value, server_id_value]; } var - _mn_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _ic_], 0], - _mo_ = [0, [0, 0 === symbol$15(access_token_field) ? 1 : 0, _id_], _mn_]; + _mq_ = [0, [0, 0 === symbol$14(server_id_field) ? 1 : 0, _ie_], 0], + _mr_ = [0, [0, 0 === symbol$14(access_token_field) ? 1 : 0, _if_], _mq_]; return record_undefined_elements (tp_loc$1, yojson, - [0, [0, 0 === symbol$15(user_field) ? 1 : 0, _ie_], _mo_]); + [0, [0, 0 === symbol$14(user_field) ? 1 : 0, _ig_], _mr_]); } return record_list_instead_atom(tp_loc$1, yojson); } @@ -16377,14 +16453,14 @@ v_access_token = param[2], v_user = param[1], arg = yojson_of_string(v_server_id), - bnds = [0, [0, _if_, arg], 0], + bnds = [0, [0, _ih_, arg], 0], arg$0 = yojson_of_string(v_access_token), - bnds$0 = [0, [0, _ig_, arg$0], bnds], + bnds$0 = [0, [0, _ii_, arg$0], bnds], arg$1 = yojson_of_user(v_user), - bnds$1 = [0, [0, _ih_, arg$1], bnds$0]; + bnds$1 = [0, [0, _ij_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } - function endpoint(param){return _ii_;} + function endpoint(param){return _ik_;} function image_blur_hash_of_yojson(y){ var assoc = to_assoc(y); return map$1 @@ -16422,22 +16498,22 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(! caml_string_notequal(field_name, cst_Primary)) - if(symbol$15(primary_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + if(field_name === cst_Primary) + if(symbol$14(primary_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue = image_blur_hash_of_yojson(field_yojson); primary_field[1] = [0, fvalue]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$2, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$2, symbol$15(extra), yojson); - var primary_value = symbol$15(primary_field); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$2, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$2, symbol$14(extra), yojson); + var primary_value = symbol$14(primary_field); return [0, primary_value]; } return record_list_instead_atom(tp_loc$2, yojson); @@ -16448,7 +16524,7 @@ var v = v_primary[1], arg = yojson_of_image_blur_hash(v), - bnd = [0, _ij_, arg], + bnd = [0, _il_, arg], bnds$0 = [0, bnd, bnds]; else var bnds$0 = bnds; @@ -16456,105 +16532,105 @@ } function type_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _mj_ = yojson[2]; - if(! _mj_) return empty_list_invalid_sum(tp_loc$3, yojson); - var _mk_ = _mj_[1]; - if(typeof _mk_ !== "number"){ - var _ml_ = _mk_[1]; - if(-976970511 === _ml_){ + var _mm_ = yojson[2]; + if(! _mm_) return empty_list_invalid_sum(tp_loc$3, yojson); + var _mn_ = _mm_[1]; + if(typeof _mn_ !== "number"){ + var _mo_ = _mn_[1]; + if(-976970511 === _mo_){ var - _mm_ = _mk_[2], - switch$0 = caml_string_compare(_mm_, cst_MusicGenre); + _mp_ = _mn_[2], + switch$0 = caml_string_compare(_mp_, cst_MusicGenre); if(0 <= switch$0){ if(0 >= switch$0) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 18; - var switch$1 = caml_string_compare(_mm_, cst_Series); + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 18; + var switch$1 = caml_string_compare(_mp_, cst_Series); if(0 <= switch$1){ if(0 >= switch$1) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 28; - if(! caml_string_notequal(_mm_, cst_Studio)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 29; - if(! caml_string_notequal(_mm_, cst_Trailer)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 30; - if(! caml_string_notequal(_mm_, cst_TvChannel)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 31; - if(! caml_string_notequal(_mm_, cst_TvProgram)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 32; - if(! caml_string_notequal(_mm_, cst_UserRootFolder)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 33; - if(! caml_string_notequal(_mm_, cst_UserView)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 34; - if(! caml_string_notequal(_mm_, cst_Video)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 35; - if(! caml_string_notequal(_mm_, cst_Year)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 36; + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 28; + if(_mp_ === cst_Studio) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 29; + if(_mp_ === cst_Trailer) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 30; + if(_mp_ === cst_TvChannel) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 31; + if(_mp_ === cst_TvProgram) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 32; + if(_mp_ === cst_UserRootFolder) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 33; + if(_mp_ === cst_UserView) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 34; + if(_mp_ === cst_Video) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 35; + if(_mp_ === cst_Year) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 36; } else{ - if(! caml_string_notequal(_mm_, cst_MusicVideo)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 19; - if(! caml_string_notequal(_mm_, cst_Person)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 20; - if(! caml_string_notequal(_mm_, cst_Photo)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 21; - if(! caml_string_notequal(_mm_, cst_PhotoAlbum)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 22; - if(! caml_string_notequal(_mm_, cst_Playlist)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 23; - if(! caml_string_notequal(_mm_, cst_PlaylistsFolder)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 24; - if(! caml_string_notequal(_mm_, cst_Program)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 25; - if(! caml_string_notequal(_mm_, cst_Recording)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 26; - if(! caml_string_notequal(_mm_, cst_Season)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 27; + if(_mp_ === cst_MusicVideo) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 19; + if(_mp_ === cst_Person) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 20; + if(_mp_ === cst_Photo) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 21; + if(_mp_ === cst_PhotoAlbum) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 22; + if(_mp_ === cst_Playlist) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 23; + if(_mp_ === cst_PlaylistsFolder) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 24; + if(_mp_ === cst_Program) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 25; + if(_mp_ === cst_Recording) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 26; + if(_mp_ === cst_Season) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 27; } } else{ - var switch$2 = caml_string_compare(_mm_, cst_Episode); + var switch$2 = caml_string_compare(_mp_, cst_Episode); if(0 <= switch$2){ if(0 >= switch$2) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 9; - if(! caml_string_notequal(_mm_, cst_Folder)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 10; - if(! caml_string_notequal(_mm_, cst_Genre)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 11; - if(! caml_string_notequal(_mm_, cst_LiveTvChannel)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 12; - if(! caml_string_notequal(_mm_, cst_LiveTvProgram)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 13; - if(! caml_string_notequal(_mm_, cst_ManualPlaylistsFolder)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 14; - if(! caml_string_notequal(_mm_, cst_Movie)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 15; - if(! caml_string_notequal(_mm_, cst_MusicAlbum)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 16; - if(! caml_string_notequal(_mm_, cst_MusicArtist)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 17; + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 9; + if(_mp_ === cst_Folder) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 10; + if(_mp_ === cst_Genre) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 11; + if(_mp_ === cst_LiveTvChannel) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 12; + if(_mp_ === cst_LiveTvProgram) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 13; + if(_mp_ === cst_ManualPlaylistsFolder) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 14; + if(_mp_ === cst_Movie) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 15; + if(_mp_ === cst_MusicAlbum) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 16; + if(_mp_ === cst_MusicArtist) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 17; } else{ - if(! caml_string_notequal(_mm_, cst_AggregateFolder)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 0; - if(! caml_string_notequal(_mm_, cst_Audio)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 1; - if(! caml_string_notequal(_mm_, cst_AudioBook)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 2; - if(! caml_string_notequal(_mm_, cst_BasePluginFolder)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 3; - if(! caml_string_notequal(_mm_, cst_Book)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 4; - if(! caml_string_notequal(_mm_, cst_BoxSet)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 5; - if(! caml_string_notequal(_mm_, cst_Channel)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 6; - if(! caml_string_notequal(_mm_, cst_ChannelFolderItem)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 7; - if(! caml_string_notequal(_mm_, cst_CollectionFolder)) - return _mj_[2] ? stag_no_args(tp_loc$3, yojson) : 8; + if(_mp_ === cst_AggregateFolder) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 0; + if(_mp_ === cst_Audio) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 1; + if(_mp_ === cst_AudioBook) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 2; + if(_mp_ === cst_BasePluginFolder) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 3; + if(_mp_ === cst_Book) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 4; + if(_mp_ === cst_BoxSet) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 5; + if(_mp_ === cst_Channel) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 6; + if(_mp_ === cst_ChannelFolderItem) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 7; + if(_mp_ === cst_CollectionFolder) + return _mm_[2] ? stag_no_args(tp_loc$3, yojson) : 8; } } } - else if(848054398 === _ml_) + else if(848054398 === _mo_) return nested_list_invalid_sum(tp_loc$3, yojson); } } @@ -16563,78 +16639,78 @@ function yojson_of_type(param){ switch(param){ case 0: - return _ik_; + return _im_; case 1: - return _il_; + return _in_; case 2: - return _im_; + return _io_; case 3: - return _in_; + return _ip_; case 4: - return _io_; + return _iq_; case 5: - return _ip_; + return _ir_; case 6: - return _iq_; + return _is_; case 7: - return _ir_; + return _it_; case 8: - return _is_; + return _iu_; case 9: - return _it_; + return _iv_; case 10: - return _iu_; + return _iw_; case 11: - return _iv_; + return _ix_; case 12: - return _iw_; + return _iy_; case 13: - return _ix_; + return _iz_; case 14: - return _iy_; + return _iA_; case 15: - return _iz_; + return _iB_; case 16: - return _iA_; + return _iC_; case 17: - return _iB_; + return _iD_; case 18: - return _iC_; + return _iE_; case 19: - return _iD_; + return _iF_; case 20: - return _iE_; + return _iG_; case 21: - return _iF_; + return _iH_; case 22: - return _iG_; + return _iI_; case 23: - return _iH_; + return _iJ_; case 24: - return _iI_; + return _iK_; case 25: - return _iJ_; + return _iL_; case 26: - return _iK_; + return _iM_; case 27: - return _iL_; + return _iN_; case 28: - return _iM_; + return _iO_; case 29: - return _iN_; + return _iP_; case 30: - return _iO_; + return _iQ_; case 31: - return _iP_; + return _iR_; case 32: - return _iQ_; + return _iS_; case 33: - return _iR_; + return _iT_; case 34: - return _iS_; + return _iU_; case 35: - return _iT_; - default: return _iU_; + return _iV_; + default: return _iW_; } } function type_str_of_yojson(j){ @@ -16644,10 +16720,10 @@ function yojson_of_type_str(ts){ var match = yojson_of_type(ts); if(typeof match !== "number" && 848054398 === match[1]){ - var _mi_ = match[2]; - if(_mi_ && ! _mi_[2]){var json = _mi_[1]; return json;} + var _ml_ = match[2]; + if(_ml_ && ! _ml_[2]){var json = _ml_[1]; return json;} } - throw caml_maybe_attach_backtrace([0, Assert_failure, _iV_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _iX_], 1); } function t_of_yojson(yojson){ if(typeof yojson !== "number" && 963043957 === yojson[1]){ @@ -16681,98 +16757,98 @@ { if(0 <= switch$0) if(0 < switch$0) - if(caml_string_notequal(field_name, cst_Path)) - if(caml_string_notequal(field_name, cst_ServerId)) - if(caml_string_notequal(field_name, cst_SortName)){ - if(caml_string_notequal(field_name, cst_Type)) break b; - if(symbol$15(type_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + if(field_name !== cst_Path) + if(field_name !== cst_ServerId) + if(field_name !== cst_SortName){ + if(field_name !== cst_Type) break b; + if(symbol$14(type_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue = type_str_of_yojson(field_yojson); type_field[1] = [0, fvalue]; } } - else if(symbol$15(sort_name_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(sort_name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$0 = string_of_yojson(field_yojson); sort_name_field[1] = [0, fvalue$0]; } - else if(symbol$15(server_id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(server_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$1 = string_of_yojson(field_yojson); server_id_field[1] = [0, fvalue$1]; } - else if(symbol$15(path_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(path_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$2 = string_of_yojson(field_yojson); path_field[1] = [0, fvalue$2]; } - else if(symbol$15(parent_id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(parent_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$3 = option_of_yojson(string_of_yojson, field_yojson); parent_id_field[1] = [0, fvalue$3]; } - else if(caml_string_notequal(field_name, cst_AlbumId)) - if(caml_string_notequal(field_name, cst_CollectionType)) - if(caml_string_notequal(field_name, cst_Id)) - if(caml_string_notequal(field_name, cst_ImageBlurHashes)){ - if(caml_string_notequal(field_name, cst_Name)) break b; - if(symbol$15(name_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(field_name !== cst_AlbumId) + if(field_name !== cst_CollectionType) + if(field_name !== cst_Id) + if(field_name !== cst_ImageBlurHashes){ + if(field_name !== cst_Name) break b; + if(symbol$14(name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$4 = string_of_yojson(field_yojson); name_field[1] = [0, fvalue$4]; } } - else if(symbol$15(image_blur_hashes_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(image_blur_hashes_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$5 = image_blur_hashes_of_yojson(field_yojson); image_blur_hashes_field[1] = [0, fvalue$5]; } - else if(symbol$15(id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$6 = string_of_yojson(field_yojson); id_field[1] = [0, fvalue$6]; } - else if(symbol$15(collection_type_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(collection_type_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$7 = option_of_yojson(string_of_yojson, field_yojson); collection_type_field[1] = [0, fvalue$7]; } - else if(symbol$15(album_id_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(album_id_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$8 = string_of_yojson(field_yojson); album_id_field[1] = [0, fvalue$8]; } break a; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$4, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$4, symbol$15(extra), yojson); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$4, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$4, symbol$14(extra), yojson); var - match = symbol$15(name_field), - sort_name_value = symbol$15(sort_name_field), - match$0 = symbol$15(id_field), - path_value = symbol$15(path_field), - album_id_value = symbol$15(album_id_field), - parent_id_value = symbol$15(parent_id_field), - match$1 = symbol$15(server_id_field), - match$2 = symbol$15(image_blur_hashes_field), - match$3 = symbol$15(type_field), - collection_type_value = symbol$15(collection_type_field); + match = symbol$14(name_field), + sort_name_value = symbol$14(sort_name_field), + match$0 = symbol$14(id_field), + path_value = symbol$14(path_field), + album_id_value = symbol$14(album_id_field), + parent_id_value = symbol$14(parent_id_field), + match$1 = symbol$14(server_id_field), + match$2 = symbol$14(image_blur_hashes_field), + match$3 = symbol$14(type_field), + collection_type_value = symbol$14(collection_type_field); if(match && match$0 && match$1 && match$2 && match$3){ var type_value = match$3[1], @@ -16797,15 +16873,15 @@ v$0]; } var - _me_ = [0, [0, 0 === symbol$15(type_field) ? 1 : 0, _iW_], 0], - _mf_ = - [0, [0, 0 === symbol$15(image_blur_hashes_field) ? 1 : 0, _iX_], _me_], - _mg_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _iY_], _mf_], - _mh_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _iZ_], _mg_]; + _mh_ = [0, [0, 0 === symbol$14(type_field) ? 1 : 0, _iY_], 0], + _mi_ = + [0, [0, 0 === symbol$14(image_blur_hashes_field) ? 1 : 0, _iZ_], _mh_], + _mj_ = [0, [0, 0 === symbol$14(server_id_field) ? 1 : 0, _i0_], _mi_], + _mk_ = [0, [0, 0 === symbol$14(id_field) ? 1 : 0, _i1_], _mj_]; return record_undefined_elements (tp_loc$4, yojson, - [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _i0_], _mh_]); + [0, [0, 0 === symbol$14(name_field) ? 1 : 0, _i2_], _mk_]); } return record_list_instead_atom(tp_loc$4, yojson); } @@ -16827,22 +16903,22 @@ else var arg$8 = - function(_md_){return yojson_of_option(yojson_of_string, _md_);} + function(_mg_){return yojson_of_option(yojson_of_string, _mg_);} (v_collection_type), - bnd$3 = [0, _i__, arg$8], + bnd$3 = [0, _ja_, arg$8], bnds$0 = [0, bnd$3, bnds]; var arg = yojson_of_type_str(v_type), - bnds$1 = [0, [0, _i1_, arg], bnds$0], + bnds$1 = [0, [0, _i3_, arg], bnds$0], arg$0 = yojson_of_image_blur_hashes(v_image_blur_hashes), - bnds$2 = [0, [0, _i2_, arg$0], bnds$1], + bnds$2 = [0, [0, _i4_, arg$0], bnds$1], arg$1 = yojson_of_string(v_server_id), - bnds$3 = [0, [0, _i3_, arg$1], bnds$2]; + bnds$3 = [0, [0, _i5_, arg$1], bnds$2]; if(v_parent_id) var v = v_parent_id[1], arg$2 = yojson_of_option(yojson_of_string, v), - bnd = [0, _i4_, arg$2], + bnd = [0, _i6_, arg$2], bnds$4 = [0, bnd, bnds$3]; else var bnds$4 = bnds$3; @@ -16850,7 +16926,7 @@ var v$0 = v_album_id[1], arg$3 = yojson_of_string(v$0), - bnd$0 = [0, _i5_, arg$3], + bnd$0 = [0, _i7_, arg$3], bnds$5 = [0, bnd$0, bnds$4]; else var bnds$5 = bnds$4; @@ -16858,46 +16934,46 @@ var v$1 = v_path[1], arg$4 = yojson_of_string(v$1), - bnd$1 = [0, _i6_, arg$4], + bnd$1 = [0, _i8_, arg$4], bnds$6 = [0, bnd$1, bnds$5]; else var bnds$6 = bnds$5; var arg$5 = yojson_of_string(v_id), - bnds$7 = [0, [0, _i7_, arg$5], bnds$6]; + bnds$7 = [0, [0, _i9_, arg$5], bnds$6]; if(v_sort_name) var v$2 = v_sort_name[1], arg$6 = yojson_of_string(v$2), - bnd$2 = [0, _i8_, arg$6], + bnd$2 = [0, _i__, arg$6], bnds$8 = [0, bnd$2, bnds$7]; else var bnds$8 = bnds$7; var arg$7 = yojson_of_string(v_name), - bnds$9 = [0, [0, _i9_, arg$7], bnds$8]; + bnds$9 = [0, [0, _i$_, arg$7], bnds$8]; return [0, 963043957, bnds$9]; } var session_uuid = [0, 0]; function set_session_uuid(s){session_uuid[1] = [0, s]; return;} function authorization(token, param){ if(token) - var t = token[1], token$0 = caml_call1(sprintf(_i$_), t); + var t = token[1], token$0 = caml_call1(sprintf(_jb_), t); else - var token$0 = _jc_; - var session_uuid$0 = value(session_uuid[1], _ja_); - return caml_call2(sprintf(_jb_), session_uuid$0, token$0); + var token$0 = _je_; + var session_uuid$0 = value(session_uuid[1], _jc_); + return caml_call2(sprintf(_jd_), session_uuid$0, token$0); } function request$1(base_url, token, headers, Q){ return function(params, path_params){ var - _ma_ = caml_jsstring_of_string(caml_call1(Q[6], path_params)), + _md_ = caml_jsstring_of_string(caml_call1(Q[6], path_params)), uri = get_ok (of_jstr (map - (function(_mc_){return caml_jsstring_of_string(_mc_);}, base_url), - _ma_)), + (function(_mf_){return caml_jsstring_of_string(_mf_);}, base_url), + _md_)), authorization$0 = authorization(token, 0); log([0, authorization$0, 0]); var @@ -16921,7 +16997,7 @@ url = to_jstr$0(uri), url$0 = url, init = - init$0 + init$1 ([0, body], 0, 0, @@ -16945,10 +17021,10 @@ (to_string$4(0, 0, 0, caml_call1(Q[1], params)))))), uri_with_params = with_query_params(uri, params$0), url$1 = to_jstr$0(uri_with_params), - init$1 = - init$0(0, 0, 0, [0, headers$0], 0, 0, [0, method], 0, 0, 0, 0, 0, 0), + init$0 = + init$1(0, 0, 0, [0, headers$0], 0, 0, [0, method], 0, 0, 0, 0, 0, 0), url$0 = url$1, - init = init$1; + init = init$0; return let$1 (request$0(v$3([0, init], url$0)), function(res){ @@ -16958,10 +17034,10 @@ var yojson = from_string$0(0, 0, 0, caml_string_of_jsstring(json)); - try{var _mb_ = caml_call1(Q[4], yojson); return _mb_;} + try{var _me_ = caml_call1(Q[4], yojson); return _me_;} catch(e$0){ var e = caml_wrap_exception(e$0); - log([0, _jd_, [0, json, 0]]); + log([0, _jf_, [0, json, 0]]); log([0, e, 0]); throw caml_maybe_attach_backtrace(e, 0); } @@ -17018,7 +17094,7 @@ return; } function on_message(ev){ - symbol$13 + symbol$12 (of_jstr$1(data(ev)), function(message){ if(0 === message[0]){ @@ -17031,20 +17107,20 @@ return caml_call1(f, data); } var match$0 = message[1], v = match$0[2], e = match$0[1]; - function _l__(f){return caml_call1(f, v);} - return function(_l$_){return iter$0(_l__, _l$_);} + function _mb_(f){return caml_call1(f, v);} + return function(_mc_){return iter$0(_mb_, _mc_);} (find_all$0(listeners, tag_of(e))); }); return 0; } - var _l8_ = 0; - (function(_l9_){return listen(_l8_, message, on_message, _l9_);}(worker)); + var _l$_ = 0; + (function(_ma_){return listen(_l$_, message, on_message, _ma_);}(worker)); return [0, , , , query, listen$0]; } function Make_worker(W){ var W$0 = caml_call1(W, [0]); function on_message(ev){ - symbol$13 + symbol$12 (of_jstr$1(data(ev)), function(param){ var data = param[2], uuid = param[1]; @@ -17062,28 +17138,27 @@ } return [0, Start_client, , Make_worker]; } - function _je_(_l4_){ - var _l5_ = Make$7(_l4_)[1]; + function _jg_(_l7_){ + var _l8_ = Make$7(_l7_)[1]; return [0, - function(_l6_){ - var _l7_ = _l5_(_l6_); - return [0, , _l7_[4], _l7_[5]]; + function(_l9_){ + var _l__ = _l8_(_l9_); + return [0, , _l__[4], _l__[5]]; }]; } - function of_string$2(opt, param){ - if(opt) var sth = opt[1], direction = sth; else var direction = 0; - return caml_string_notequal(param, cst_date_added) - ? caml_string_notequal - (param, cst_name) - ? caml_string_notequal(param, cst_random) ? failwith(_jf_) : 0 - : [0, 1, direction] - : [0, 0, direction]; - } - function item_count(t){return t[5] - t[4] | 0;} - function req(kind, opt, _l3_, _l2_, param){ + function random(size){ + var tbl = init$0(size, function(_l6_){return _l6_;}); + shuffle$0(tbl); + return [0, tbl]; + } + function of_string$2(param){ + return param !== cst_date_added ? param !== cst_name ? 0 : 1 : 0; + } + function item_count(t){return t[4] - t[3] | 0;} + function req(kind, opt, _l5_, _l4_, param){ if(opt) var sth = opt[1], src_views = sth; else var src_views = 0; - if(_l3_) var sth$0 = _l3_[1], sort = sth$0; else var sort = _jg_; - if(_l2_) var sth$1 = _l2_[1], filters = sth$1; else var filters = 0; + if(_l5_) var sth$0 = _l5_[1], sort = sth$0; else var sort = 0; + if(_l4_) var sth$1 = _l4_[1], filters = sth$1; else var filters = 0; return [0, kind, src_views, sort, filters]; } function t_to_jv(encoder, t){ @@ -17117,42 +17192,42 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_date_added)) - if(caml_string_notequal(field_name, cst_sort_name)) - if(caml_string_notequal(field_name, cst_views)){ - if(symbol$15(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$15(extra)]; + if(field_name !== cst_date_added) + if(field_name !== cst_sort_name) + if(field_name !== cst_views){ + if(symbol$14(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$14(extra)]; } - else if(symbol$15(views_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(views_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue = list_of_yojson(string_of_yojson, field_yojson); views_field[1] = [0, fvalue]; } - else if(symbol$15(sort_name_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(sort_name_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$0 = string_of_yojson(field_yojson); sort_name_field[1] = [0, fvalue$0]; } - else if(symbol$15(date_added_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(date_added_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$1 = int_of_yojson(field_yojson); date_added_field[1] = [0, fvalue$1]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$5, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$5, symbol$15(extra), yojson); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$5, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$5, symbol$14(extra), yojson); var - match = symbol$15(date_added_field), - match$0 = symbol$15(views_field), - match$1 = symbol$15(sort_name_field); + match = symbol$14(date_added_field), + match$0 = symbol$14(views_field), + match$1 = symbol$14(sort_name_field); if(match && match$0 && match$1){ var sort_name_value = match$1[1], @@ -17161,12 +17236,12 @@ return [0, date_added_value, views_value, sort_name_value]; } var - _l0_ = [0, [0, 0 === symbol$15(sort_name_field) ? 1 : 0, _jh_], 0], - _l1_ = [0, [0, 0 === symbol$15(views_field) ? 1 : 0, _ji_], _l0_]; + _l2_ = [0, [0, 0 === symbol$14(sort_name_field) ? 1 : 0, _jh_], 0], + _l3_ = [0, [0, 0 === symbol$14(views_field) ? 1 : 0, _ji_], _l2_]; return record_undefined_elements (tp_loc$5, yojson, - [0, [0, 0 === symbol$15(date_added_field) ? 1 : 0, _jj_], _l1_]); + [0, [0, 0 === symbol$14(date_added_field) ? 1 : 0, _jj_], _l3_]); } return record_list_instead_atom(tp_loc$5, yojson); } @@ -17201,41 +17276,41 @@ match = param$0[1], field_yojson = match[2], field_name = match[1]; - if(caml_string_notequal(field_name, cst_item)) - if(caml_string_notequal(field_name, cst_sorts)){ - if(symbol$15(record_check_extra_fields)) - extra[1] = [0, field_name, symbol$15(extra)]; + if(field_name !== cst_item) + if(field_name !== cst_sorts){ + if(symbol$14(record_check_extra_fields)) + extra[1] = [0, field_name, symbol$14(extra)]; } - else if(symbol$15(sorts_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(sorts_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue = sorts_of_yojson(field_yojson); sorts_field[1] = [0, fvalue]; } - else if(symbol$15(item_field)) - duplicates[1] = [0, field_name, symbol$15(duplicates)]; + else if(symbol$14(item_field)) + duplicates[1] = [0, field_name, symbol$14(duplicates)]; else{ var fvalue$0 = t_of_yojson(field_yojson); item_field[1] = [0, fvalue$0]; } - var param$0 = tail; + param$0 = tail; } }; iter(field_yojsons); - if(symbol$15(duplicates)) - return record_duplicate_fields(tp_loc$6, symbol$15(duplicates), yojson); - if(symbol$15(extra)) - return record_extra_fields(tp_loc$6, symbol$15(extra), yojson); - var match = symbol$15(sorts_field), match$0 = symbol$15(item_field); + if(symbol$14(duplicates)) + return record_duplicate_fields(tp_loc$6, symbol$14(duplicates), yojson); + if(symbol$14(extra)) + return record_extra_fields(tp_loc$6, symbol$14(extra), yojson); + var match = symbol$14(sorts_field), match$0 = symbol$14(item_field); if(match && match$0){ var item_value = match$0[1], sorts_value = match[1]; return [0, sorts_value, item_value]; } - var _lZ_ = [0, [0, 0 === symbol$15(item_field) ? 1 : 0, _jn_], 0]; + var _l1_ = [0, [0, 0 === symbol$14(item_field) ? 1 : 0, _jn_], 0]; return record_undefined_elements (tp_loc$6, yojson, - [0, [0, 0 === symbol$15(sorts_field) ? 1 : 0, _jo_], _lZ_]); + [0, [0, 0 === symbol$14(sorts_field) ? 1 : 0, _jo_], _l1_]); } return record_list_instead_atom(tp_loc$6, yojson); } @@ -17255,9 +17330,9 @@ views = param[3], sort_name = param[2], id = param[1], - id$0 = _cN_(id), - sort_name$0 = _cN_(sort_name), - views$0 = of_list$0(_cN_, views); + id$0 = _cP_(id), + sort_name$0 = _cP_(sort_name), + views$0 = of_list$0(_cP_, views); return caml_js_from_array([0, id$0, sort_name$0, views$0]); } function of_jv$0(j){ @@ -17276,7 +17351,7 @@ var path = [1, [0, _ju_, _jt_, _js_]]; function to_jv$1(k){return k;} function of_jv$1(j){return j;} - function to_jv$2(k){return _cN_(k);} + function to_jv$2(k){return _cP_(k);} function of_jv$2(j){return value$0(j);} function to_jv$3(k){ throw caml_maybe_attach_backtrace([0, Assert_failure, _jv_], 1); @@ -17285,8 +17360,8 @@ var match = caml_js_to_array(j), len = match.length - 1; if(2 !== len) throw caml_maybe_attach_backtrace([0, Assert_failure, _jw_], 1); - var type = match[1], views = match[2], _lY_ = to_list$0(value$0, views); - return [0, value$0(type), _lY_]; + var type = match[1], views = match[2], _l0_ = to_list$0(value$0, views); + return [0, value$0(type), _l0_]; } var path$2 = [1, [0, _jy_, _jx_]]; function to_jv$4(t){ @@ -17299,8 +17374,8 @@ var collection_type = match[1], sort_name = match[2], - _lX_ = value$0(sort_name); - return [0, value$0(collection_type), _lX_]; + _lZ_ = value$0(sort_name); + return [0, value$0(collection_type), _lZ_]; } var path$3 = [1, [0, _jC_, _jB_]]; function to_jv$5(t){return t_to_jv(yojson_of_t$0, t);} @@ -17308,29 +17383,29 @@ function get_key(t){return [0, t[2][3], t[1][3], t[1][2]];} var _jD_ = [0, [0, path, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _jE_(_lV_, _lW_){return _dd_(undef, _lV_, _lW_);} - (function(_lU_){return _jE_(_jD_, _lU_);}([0, path$0, to_jv$1, of_jv$1])); + function _jE_(_lX_, _lY_){return _df_(undef, _lX_, _lY_);} + (function(_lW_){return _jE_(_jD_, _lW_);}([0, path$0, to_jv$1, of_jv$1])); var _jF_ = [0, [0, path, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _jG_(_lS_, _lT_){return _dd_(undef, _lS_, _lT_);} - (function(_lR_){return _jG_(_jF_, _lR_);}([0, path$2, to_jv$3, of_jv$3])); + function _jG_(_lU_, _lV_){return _df_(undef, _lU_, _lV_);} + (function(_lT_){return _jG_(_jF_, _lT_);}([0, path$2, to_jv$3, of_jv$3])); var _jH_ = [0, [0, path, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _jI_(_lP_, _lQ_){return _dd_(undef, _lP_, _lQ_);} - (function(_lO_){return _jI_(_jH_, _lO_);}([0, path$1, to_jv$2, of_jv$2])); + function _jI_(_lR_, _lS_){return _df_(undef, _lR_, _lS_);} + (function(_lQ_){return _jI_(_jH_, _lQ_);}([0, path$1, to_jv$2, of_jv$2])); var _jJ_ = [0, [0, path, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _jK_(_lM_, _lN_){return _dd_(undef, _lM_, _lN_);} - (function(_lL_){return _jK_(_jJ_, _lL_);}([0, path$3, to_jv$4, of_jv$4])); - var Queries = [0], include$1 = _je_(Queries), Start_client = include$1[1]; + function _jK_(_lO_, _lP_){return _df_(undef, _lO_, _lP_);} + (function(_lN_){return _jK_(_jJ_, _lN_);}([0, path$3, to_jv$4, of_jv$4])); + var Queries = [0], include$1 = _jg_(Queries), Start_client = include$1[1]; function Make$8(K, V){return;} - function _jL_(_lK_, _lJ_){Make$8(_lK_, _lJ_); return;} + function _jL_(_lM_, _lL_){Make$8(_lM_, _lL_); return;} var _jM_ = [0, compare$0]; - function MMap(_lI_){return _jL_(_jM_, _lI_);} + function MMap(_lK_){return _jL_(_jM_, _lK_);} MMap([0, compare$2]); var active = var$0(0); function get$6(lang, string){ - return function(_lH_){return value(_lH_, string);} + return function(_lJ_){return value(_lJ_, string);} (assoc_opt([0, lang, string], strings)); } var @@ -17354,21 +17429,21 @@ report = param[2], id = param[1], previous_status = peek(status), - _lD_ = symbol$1(server_id, id); - if(_lD_){ - symbol$2(status, report); - var _lE_ = previous_status[2], _lF_ = report[2]; - if(_lE_){ - var remaining = _lE_[1][2]; - if(! _lF_) return symbol$2(refresh, 0); - var remaining$0 = _lF_[1][2]; - if(symbol$5(remaining, remaining$0)) return symbol$2(refresh, 0); + _lF_ = symbol$0(server_id, id); + if(_lF_){ + symbol$1(status, report); + var _lG_ = previous_status[2], _lH_ = report[2]; + if(_lG_){ + var remaining = _lG_[1][2]; + if(! _lH_) return symbol$1(refresh, 0); + var remaining$0 = _lH_[1][2]; + if(symbol$4(remaining, remaining$0)) return symbol$1(refresh, 0); } - var _lG_ = 0; + var _lI_ = 0; } else - var _lG_ = _lD_; - return _lG_; + var _lI_ = _lF_; + return _lI_; }); query([1, [0, [0, server_id, connexion], 0]]); return; @@ -17425,12 +17500,12 @@ return create$8(0, 0, 0, Connect_form) (function(t){ log([0, _jT_, [0, t, 0]]); - var _lB_ = t[1]; + var _lD_ = t[1]; a: - if(typeof _lB_ !== "number" && 1 !== _lB_[0]){ - var _lC_ = t[2], url = _lB_[1]; - if(typeof _lC_ !== "number" && 1 !== _lC_[0]){ - var match = t[3], username = _lC_[1]; + if(typeof _lD_ !== "number" && 1 !== _lD_[0]){ + var _lE_ = t[2], url = _lD_[1]; + if(typeof _lE_ !== "number" && 1 !== _lE_[0]){ + var match = t[3], username = _lE_[1]; if(typeof match !== "number" && 1 !== match[0]){ var password = match[1]; log([0, _jU_, [0, url, [0, username, 0]]]); @@ -17465,7 +17540,7 @@ } function fut_to_lwd(init, f){ var v = var$0(init); - await$1(f, function(_lA_){return symbol$2(v, _lA_);}); + await$1(f, function(_lC_){return symbol$1(v, _lC_);}); return get$3(v); } var @@ -17479,10 +17554,10 @@ bind$1 (get$3(refresh), function(param){ - function _lv_(_lz_){return get_or(_lz_, 0);} - var _lw_ = 0; - return function(_lx_){return fut_to_lwd(_lw_, _lx_);} - (function(_ly_){return map$3(_lv_, _ly_);} + function _lx_(_lB_){return get_or(_lB_, 0);} + var _ly_ = 0; + return function(_lz_){return fut_to_lwd(_ly_, _lz_);} + (function(_lA_){return map$3(_lx_, _lA_);} (query([4, server_id]))); }); return [0, server_id, views]; @@ -17502,13 +17577,13 @@ ? element(div$1(0, 0, 0, [0, [0, 82, ui_form(0)], 0])) : empty$0; }), - _lu_ = [0, [0, 83, lift(statuses)], 0]; - return div$1(0, 0, 0, [0, [0, 83, lift(ui_form$0)], _lu_]); + _lw_ = [0, [0, 83, lift(statuses)], 0]; + return div$1(0, 0, 0, [0, [0, 83, lift(ui_form$0)], _lw_]); } var _jY_ = var$0(0), _jZ_ = var$0(0), now_playing = var$0(0); function audio_url(server, item_id){ - var _ls_ = server[2][2], _lt_ = server[1]; - return caml_call3(sprintf(_j0_), _lt_, item_id, _ls_); + var _lu_ = server[2][2], _lv_ = server[1]; + return caml_call3(sprintf(_j0_), _lv_, item_id, _lu_); } function Playback_controller(P){ function set_play_url(playlist, current_index){ @@ -17520,10 +17595,10 @@ function(result){ var len = result.length - 1; if(1 === len){ - var _lq_ = result[1]; - if(_lq_){ + var _ls_ = result[1]; + if(_ls_){ var - item = _lq_[1][2], + item = _ls_[1][2], server_id = item[7], album_id = item[5], id = item[3], @@ -17531,12 +17606,12 @@ servers = to_list$1(peek(connexions)), connexion = assq(server_id, servers), url = audio_url(connexion, id); - log([0, _j1_, [0, name, [0, _cN_(url), 0]]]); + log([0, _j1_, [0, name, [0, _cP_(url), 0]]]); var session = of_navigator(navigator), image_id = value$3(album_id, id), - _lr_ = connexion[1], - img_src = caml_call2(sprintf(_j2_), _lr_, image_id), + _lt_ = connexion[1], + img_src = caml_call2(sprintf(_j2_), _lt_, image_id), artwork = [0, [0, img_src, _j4_, _j3_], 0]; log([0, artwork, 0]); set_metadata(session, [0, name, artist, album, artwork]); @@ -17545,18 +17620,18 @@ } throw caml_maybe_attach_backtrace(Not_found, 1); }), - function(item){return symbol$2(now_playing, [0, item]);}); + function(item){return symbol$1(now_playing, [0, item]);}); } function reset_playlist(playlist){ set_play_url([0, playlist], 0); - symbol$2(_jZ_, [0, playlist]); - return symbol$2(_jY_, 0); + symbol$1(_jZ_, [0, playlist]); + return symbol$1(_jY_, 0); } function make(param){ var - _li_ = [0, v$1("preload", "auto"), 0], - _lj_ = [0, v$1("autoplay", cst_true), _li_], - audio_elt = audio$0(0, [0, [0, v$1("controls", cst_true), _lj_]], 0); + _lk_ = [0, v$1("preload", "auto"), 0], + _ll_ = [0, v$1("autoplay", cst_true), _lk_], + audio_elt = audio$0(0, [0, [0, v$1("controls", cst_true), _ll_]], 0); function set_src(url){ return set_at(cst_src, [0, caml_jsstring_of_string(url)], audio_elt); } @@ -17576,7 +17651,7 @@ current_index = peek(_jY_), next_index = current_index + 1 | 0; set_play_url(playlist, next_index); - return symbol$2(_jY_, next_index); + return symbol$1(_jY_, next_index); } function prev(param){ var @@ -17584,14 +17659,14 @@ current_index = peek(_jY_), next_index = max(0, current_index - 1 | 0); set_play_url(playlist, next_index); - return symbol$2(_jY_, next_index); + return symbol$1(_jY_, next_index); } var session = of_navigator(navigator); function set_position_state$0(param){ var duration = prop(float$0(cst_duration), audio_elt), - _lp_ = 1 - is_nan(duration); - if(! _lp_) return _lp_; + _lr_ = 1 - is_nan(duration); + if(! _lr_) return _lr_; var playback_rate = prop(float$0(cst_playbackRate), audio_elt), position = prop(float$0("currentTime"), audio_elt); @@ -17627,15 +17702,15 @@ image_id = value$3(album_id, id), servers = to_list$1(peek(connexions)), connexion = assq(server_id, servers), - _lo_ = connexion[1], - src = caml_call2(sprintf(_j7_), _lo_, image_id); + _lq_ = connexion[1], + src = caml_call2(sprintf(_j7_), _lq_, image_id); else var src = _j9_; return caml_call1(sprintf(_j8_), src); }), - _lk_ = [0, 82, style$0], + _lm_ = [0, 82, style$0], at = - function(_ln_){return add$1(style, _lk_, _ln_);} + function(_lp_){return add$1(style, _lm_, _lp_);} (add$1(class$0, _j__, 0)), track_cover = div$1(0, [0, at], 0, 0), at$0 = add$1(class$0, _j$_, 0), @@ -17650,7 +17725,7 @@ title = span$1(0, 0, 0, [0, [0, 82, txt$0], 0]), track_details = div$1(0, [0, at$0], 0, [0, [0, 82, title], 0]), at$1 = - function(_lm_){return add$1(class$0, _kc_, _lm_);} + function(_lo_){return add$1(class$0, _kc_, _lo_);} (add$1(class$0, _kb_, 0)), now_playing$0 = div$1 @@ -17659,7 +17734,7 @@ 0, [0, [0, 82, track_cover], [0, [0, 82, track_details], 0]]), at$2 = - function(_ll_){return add$1(class$0, _ke_, _ll_);} + function(_ln_){return add$1(class$0, _ke_, _ln_);} (add$1(class$0, _kd_, 0)); return div$1 (0, @@ -17676,25 +17751,25 @@ function make$11(on_click){ var on_click$0 = handler$0(0, click, on_click), - _le_ = [0, at], - _lf_ = [0, [0, [0, 80, on_click$0], 0]]; - return function(_lh_, _lg_){ - return caml_call1(two_state([0, base])(_lh_, _lg_, _le_), _lf_);}; + _lg_ = [0, at], + _lh_ = [0, [0, [0, 80, on_click$0], 0]]; + return function(_lj_, _li_){ + return caml_call1(two_state([0, base])(_lj_, _li_, _lg_), _lh_);}; } classes(_ki_); function columns(param){ var - _k$_ = - function(_ld_){return v$6(_kl_, _kk_, _ld_);} + _lb_ = + function(_lf_){return v$6(_kl_, _kk_, _lf_);} ([0, [0, 80, txt(0, _kj_)], 0]), - _la_ = - function(_lc_){return v$6(_ko_, _kn_, _lc_);} + _lc_ = + function(_le_){return v$6(_ko_, _kn_, _le_);} ([0, [0, 80, txt(0, _km_)], 0]); return [0, - function(_lb_){return v$6(_kr_, _kq_, _lb_);} + function(_ld_){return v$6(_kr_, _kq_, _ld_);} ([0, [0, 80, txt(0, _kp_)], 0]), - _la_, - _k$_]; + _lc_, + _lb_]; } function make$12(reset_playlist, fetch, scroll_target, view){ function img_url(server_id, item_id){ @@ -17702,13 +17777,13 @@ try{ var connexion = assq(server_id, servers), - _k8_ = connexion[1], - _k9_ = caml_call2(sprintf(_kt_), _k8_, item_id), - url = _k9_; + _k__ = connexion[1], + _k$_ = caml_call2(sprintf(_kt_), _k__, item_id), + url = _k$_; } - catch(_k__){ - var _k7_ = caml_wrap_exception(_k__); - if(_k7_ !== Not_found) throw caml_maybe_attach_backtrace(_k7_, 0); + catch(_la_){ + var _k9_ = caml_wrap_exception(_la_); + if(_k9_ !== Not_found) throw caml_maybe_attach_backtrace(_k9_, 0); var url = _ks_; } return src$0(caml_jsstring_of_string(url)); @@ -17725,14 +17800,14 @@ let$2 (view, function(view){ + var _k8_ = view[1]; return caml_call1 (reset_playlist, [0, - view[1], + [0, _k8_[1], _k8_[2], view[1][3] + start_index | 0, _k8_[4]], view[2], view[3], - view[4] + start_index | 0, - view[5]]); + view[4]]); }); return 0; } @@ -17742,8 +17817,8 @@ if(image_blur_hashes[1] && album_id){ var id$0 = album_id[1], - _k4_ = return$1(img_url(server_id, id$0)), - img_url$0 = _k4_; + _k5_ = return$1(img_url(server_id, id$0)), + img_url$0 = _k5_; break a; } var img_url$0 = return$1(src$0(cst_track_png)); @@ -17755,15 +17830,15 @@ function(param){ if(param){ var item_id = param[1][1][3]; - if(symbol$1(item_id, id)){ - var _k6_ = [0, txt(0, _ku_), 0]; - return div$0(0, [0, [0, class$1("playing"), 0]], _k6_); + if(symbol$0(item_id, id)){ + var _k7_ = [0, txt(0, _ku_), 0]; + return div$0(0, [0, [0, class$1("playing"), 0]], _k7_); } } return div$0 (0, 0, [0, txt(0, string_of_int(start_index + 1 | 0)), 0]); }), - _k5_ = + _k6_ = [0, [0, 80, div$0(0, 0, [0, span$0(0, 0, [0, txt(0, name), 0]), 0])], 0]; @@ -17785,7 +17860,7 @@ 0, 0)], 0])], - _k5_]]; + _k6_]]; } function placeholder(i){return 0;} var @@ -17794,14 +17869,15 @@ func (view, function(view){ + function _k1_(view){return item_count(view[1]);} var total_items = - map$3(function(_k3_){return symbol$12(item_count, _k3_);}, view); + map$3(function(_k4_){return symbol$11(_k1_, _k4_);}, view); function fetch$0(i){ return let$1 (view, function(view){return caml_call2(fetch, view, i);}); } - function render$0(_k1_, _k2_){return render(view, _k1_, _k2_);} + function render$0(_k2_, _k3_){return render(view, _k2_, _k3_);} return [0, total_items, fetch$0, render$0]; }); return make$6(ui_table, [0, placeholder], scroll_target)(data_source); @@ -17816,10 +17892,12 @@ uuid = peek(session_uuid$0); set_session_uuid(uuid); query([0, peek(session_uuid$0)]); - function fetch$1(view, i){return query([6, view, i]);} + function fetch$1(ranged_view, i){ + return query([6, ranged_view[1], ranged_view[4], i]); + } var P = Playback_controller([0, fetch$1]), playlist = var$1(_kx_, 0); function on_click(param, _k0_){ - symbol$2(playlist, peek(playlist) + 1 | 0); + symbol$1(playlist, peek(playlist) + 1 | 0); set$1(1); return 1; } @@ -17831,7 +17909,9 @@ 82, func (get$3(playlist), - function(pl){return txt(0, symbol(_ky_, string_of_int(pl)));})], + function(pl){ + return txt(0, symbol_concat(_ky_, string_of_int(pl))); + })], 0]; }); var @@ -17885,12 +17965,17 @@ map3 (function(l, t, s){ var - filters = symbol$10(function(s){return [0, [0, s], 0];}, t), - _kS_ = [0, _cN_(s), 0], - _kT_ = [0, of_list$0(_cN_, l), _kS_]; - log([0, _kH_, [0, of_option(_cN_(_kG_), _cN_, t), _kT_]]); - var sort = of_string$2(0, s); - return query([5, req(0, [0, [0, l]], [0, sort], filters, 0)]); + filters = symbol$9(function(s){return [0, [0, s], 0];}, t), + _kS_ = [0, _cP_(s), 0], + _kT_ = [0, of_list$0(_cP_, l), _kS_]; + log([0, _kH_, [0, of_option(_cP_(_kG_), _cP_, t), _kT_]]); + var sort = of_string$2(s); + return let$2 + (query([5, req(0, [0, [0, l]], [0, sort], filters, 0)]), + function(view){ + var order = s !== cst_random ? 0 : random(view[4]); + return [0, view, 0, view[4], order]; + }); }, f_value, f_search[3], @@ -17951,4 +18036,4 @@ } (globalThis)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtYWluLmJjLmpzIiwic291cmNlUm9vdCI6IiIsIm5hbWVzIjpbImNhbWxfYXJyYXlfYmxpdCIsImExIiwiaTEiLCJhMiIsImkyIiwibGVuIiwiaiIsImNhbWxfYXJyYXlfZmlsbCIsImFycmF5Iiwib2ZzIiwidiIsImkiLCJjYW1sX2FycmF5X3N1YiIsImEiLCJBcnJheSIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImYiLCJTdHJpbmciLCJudWxsIiwicyIsIk1hdGgiLCJjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkiLCJVaW50OEFycmF5IiwiYiIsImwiLCJjYW1sX2JsaXRfYnl0ZXMiLCJzMSIsInMyIiwiYzEiLCJjMiIsImNhbWxfc3RyX3JlcGVhdCIsIm4iLCJyIiwiY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyIsImpzb29faXNfYXNjaWkiLCJjYW1sX3V0ZjE2X29mX3V0ZjgiLCJ0IiwiYyIsIk1sQnl0ZXMiLCJ0YWciLCJjb250ZW50cyIsImxlbmd0aCIsInRoaXMiLCJjb250ZW50IiwiY2FtbF9ieXRlc19vZl9qc2J5dGVzIiwiY2FtbF9qc2J5dGVzX29mX3N0cmluZyIsIngiLCJjYW1sX2J5dGVzX29mX3N0cmluZyIsImNhbWxfYmxpdF9zdHJpbmciLCJkIiwiZSIsImpzb29fc3lzX2dldGVudiIsInByb2Nlc3MiLCJnbG9iYWxUaGlzIiwidW5kZWZpbmVkIiwiY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWciLCJjYW1sX2dsb2JhbF9kYXRhIiwiY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UiLCJleG4iLCJmb3JjZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfcmFpc2Vfd2l0aF9hcmciLCJhcmciLCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzIiwiY2FtbF9yYWlzZV93aXRoX3N0cmluZyIsIm1zZyIsImNhbWxfaW52YWxpZF9hcmd1bWVudCIsImNhbWxfYnl0ZXNfYm91bmRfZXJyb3IiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfYnl0ZXNfdW5zYWZlX2dldCIsImNhbWxfY2FsbF9nZW4iLCJhcmdzIiwiYXJnc0xlbiIsImciLCJuYXJncyIsInkiLCJleHRyYV9hcmdzIiwiYXJndW1lbnRzIiwiY2FtbF9hcnJheV9ib3VuZF9lcnJvciIsImNhbWxfY2hlY2tfYm91bmQiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2VxdWFsIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJtIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJwIiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJjYW1sX2N1cnJlbnRfZGlyIiwiY2FtbF9tYWtlX3BhdGgiLCJjb21wMCIsIm5jb21wIiwiY2FtbF91dGY4X29mX3V0ZjE2IiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJ1bml4X2Vycm9yIiwibWFrZV91bml4X2Vycl9hcmdzIiwiY29kZSIsInN5c2NhbGwiLCJlcnJubyIsInZhcmlhbnQiLCJjYW1sX25hbWVkX3ZhbHVlcyIsImNhbWxfbmFtZWRfdmFsdWUiLCJubSIsImNhbWxfcmFpc2Vfd2l0aF9hcmdzIiwiY2FtbF9ieXRlc19vZl9hcnJheSIsImNhbWxfcmFpc2Vfc3lzX2Vycm9yIiwiY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUiLCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZUZkIiwiZmlsZSIsImZsYWdzIiwiTWxGYWtlRGV2aWNlIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsImVudHJ5Iiwib2siLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyIsIk1sTm9kZUZkIiwiZmQiLCJyZXF1aXJlIiwiZXJyIiwiYnVmX29mZnNldCIsInJlYWQiLCJNbE5vZGVEZXZpY2UiLCJjb25zdHMiLCJrZXkiLCJpc0NoYXJhY3RlckRldmljZSIsIm8iLCJqc19zdGF0cyIsInRvX2RpciIsInRhcmdldCIsImxpbmsiLCJmaWxlX2tpbmQiLCJjYW1sX2dldF9yb290IiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9jcmVhdGVfZmlsZSIsImpzb29fY3JlYXRlX2ZpbGUiLCJjYW1sX2ZzX2luaXQiLCJ0bXAiLCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2hfbWl4X2pzYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyIiwiY2FtbF9tbF9ieXRlc19jb250ZW50IiwiY2FtbF9oYXNoX21peF9ieXRlcyIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2hhc2giLCJjb3VudCIsImxpbWl0Iiwic2VlZCIsIm9iaiIsInF1ZXVlIiwicmQiLCJ3ciIsImhoIiwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQiLCJzdHlsZSIsImV4cF9zaWduIiwic2lnbl9zdHIiLCJjc3QiLCJ4X3N0ciIsImlkeCIsImNhbWxfaW50NjRfaXNfemVybyIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSIsImNhbWxfaW50NjRfbmVnIiwiY2FtbF9pbnQ2NF9mb3JtYXQiLCJ3YmFzZSIsImN2dGJsIiwiY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIiwiYmFzZSIsImNhbWxfcGFyc2VfZGlnaXQiLCJjYW1sX2ludF9vZl9zdHJpbmciLCJ0aHJlc2hvbGQiLCJjYW1sX2pzX2Zyb21fYXJyYXkiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfanNfbmV3IiwiRiIsImNhbWxfanNfb2JqZWN0IiwiY2FtbF9qc190b19hcnJheSIsImNhbWxfY2FsbGJhY2siLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IiwiYXJpdHkiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9sZXhfYXJyYXkiLCJjYW1sX2xleF9lbmdpbmUiLCJ0YmwiLCJzdGFydF9zdGF0ZSIsImxleGJ1ZiIsImxleF9idWZmZXIiLCJsZXhfYnVmZmVyX2xlbiIsImxleF9zdGFydF9wb3MiLCJsZXhfY3Vycl9wb3MiLCJsZXhfbGFzdF9wb3MiLCJsZXhfbGFzdF9hY3Rpb24iLCJsZXhfZW9mX3JlYWNoZWQiLCJsZXhfYmFzZSIsImxleF9iYWNrdHJrIiwibGV4X2RlZmF1bHQiLCJsZXhfdHJhbnMiLCJsZXhfY2hlY2siLCJzdGF0ZSIsImJhY2t0cmsiLCJjYW1sX2xpc3RfdG9fanNfYXJyYXkiLCJjYW1sX21ha2VfdmVjdCIsImluaXQiLCJjYW1sX01ENUluaXQiLCJBcnJheUJ1ZmZlciIsImIzMiIsIlVpbnQzMkFycmF5IiwiYjgiLCJjYW1sX01ENVRyYW5zZm9ybSIsImFkZCIsInh4IiwiZmYiLCJnZyIsImlpIiwiY2FtbF9NRDVVcGRhdGUiLCJjdHgiLCJpbnB1dCIsImlucHV0X2xlbiIsImluX2J1ZiIsImlucHV0X3BvcyIsIm1pc3NpbmciLCJjYW1sX01ENUZpbmFsIiwiY2FtbF9zdHJpbmdfb2ZfYXJyYXkiLCJjYW1sX21kNV9ieXRlcyIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfc3lzX2ZkcyIsImNhbWxfc3lzX2Nsb3NlIiwiY2FtbF9tbF9jaGFubmVscyIsImNhbWxfbWxfZmx1c2giLCJjaGFuaWQiLCJjaGFuIiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyIsImNhbWxfcmVmaWxsIiwic3RyIiwic3RyX2EiLCJucmVhZCIsImNhbWxfbWxfaW5wdXRfYmxvY2siLCJhdmFpbCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX3N5c19vcGVuX2Zvcl9ub2RlIiwiZnMiLCJmZDIiLCJNbEZha2VGZF9vdXQiLCJjb25zb2xlIiwic3JjIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImNhbWxfc3lzX29wZW4iLCJfcGVybXMiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsInJlZmlsbCIsImNoYW5uZWwiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQiLCJidWZmZXJlZCIsImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QiLCJjYW1sX21sX291dHB1dF90YSIsImlkIiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJjYW1sX21sX291dHB1dCIsImNhbWxfbWxfb3V0cHV0X2NoYXIiLCJjYW1sX21sX3NldF9jaGFubmVsX25hbWUiLCJjYW1sX21vZCIsImNhbWxfbm90ZXF1YWwiLCJjYW1sX29ial9tYWtlX2ZvcndhcmQiLCJjYW1sX29ial90YWciLCJGdW5jdGlvbiIsImNhbWxfYnVpbGRfc3ltYm9scyIsInN5bWIiLCJjYW1sX3JlZ2lzdGVyX2dsb2JhbCIsIm5hbWVfb3B0IiwibmlkIiwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSIsImNhbWxfc3RyaW5nX2VxdWFsIiwiY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ19ub3RlcXVhbCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfcmFpc2Vfbm90X2ZvdW5kIiwiY2FtbF9zeXNfZ2V0ZW52IiwiY2FtbF9zeXNfcmFuZG9tX3NlZWQiLCJub3ciLCJEYXRlIiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uIiwiY2FtbF9mb3JtYXRfZXhjZXB0aW9uIiwiYnVja2V0Iiwic3RhcnQiLCJjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImhhbmRsZXIiLCJhdF9leGl0IiwiY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsIm9yaWdpbiIsImV2ZW50IiwiemVyb19wb3MiLCJsb2NmbXQiLCJvY2FtbF9sZXhfdGFibGVzIiwidHBfbG9jIiwidHBfbG9jJDAiLCJ0cF9sb2MkMSIsInRwX2xvYyQyIiwidHBfbG9jJDMiLCJ0cF9sb2MkNCIsInRwX2xvYyQ1IiwidHBfbG9jJDYiLCJwYXRoJDAiLCJwYXRoJDEiLCJuYW1lJDYiLCJpbml0aWFsX3JlcG9ydCIsInN0cmluZ3MiLCJ1cmwkMCIsImRlZmF1bHQkMSIsImFsYnVtIiwiYXJ0aXN0IiwiZXJhc2VfcmVsIiwicmVzdCIsInJlc3QkMCIsInJlc3QkMSIsInJlc3QkMiIsInJlc3QkMyIsInJlc3QkNCIsInJlc3QkNSIsInJlc3QkNiIsInJlc3QkNyIsInR5IiwicmVzdCQ4IiwidHkxIiwicmVzdCQ5IiwicmVzdCQxMCIsInJlc3QkMTEiLCJyZXN0JDEyIiwicmVzdCQxMyIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInBhZCQwIiwicGFkJDEiLCJpY29udiIsInByZWMkMCIsInBhZCQyIiwiaWNvbnYkMCIsInByZWMkMSIsInBhZCQzIiwiaWNvbnYkMSIsInByZWMkMiIsInBhZCQ0IiwiaWNvbnYkMiIsInByZWMkMyIsInBhZCQ1IiwiZmNvbnYiLCJwYWQkNiIsImNociIsImZtdHR5IiwicGFkJDciLCJmbXR0eSQwIiwicGFkJDgiLCJyZXN0JDE0IiwicmVzdCQxNSIsInJlc3QkMTYiLCJmbXRpbmdfbGl0IiwicmVzdCQxNyIsImZtdGluZ19nZW4iLCJyZXN0JDE4IiwicmVzdCQxOSIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwicmVzdCQyMCIsImNvdW50ZXIiLCJyZXN0JDIxIiwicmVzdCQyMiIsImlnbiIsInJlc3QkMjMiLCJjdXIiLCJmYWlsd2l0aCIsImludmFsaWRfYXJnIiwiYWJzIiwibG5vdCIsIm1heF9pbnQiLCJsMSIsImwyIiwiY2hhcl9vZl9pbnQiLCJzdHJpbmdfb2ZfYm9vbCIsInN0cmluZ19vZl9pbnQiLCJ2YWxpZF9mbG9hdF9sZXhlbSIsImxvb3AiLCJpJDAiLCJpJDEiLCJzdHJpbmdfb2ZfZmxvYXQiLCJzeW1ib2wkMCIsInRsIiwiaGQiLCJzdGRvdXQiLCJzdGRlcnIiLCJvcGVuX291dF9nZW4iLCJwZXJtIiwib3Blbl9vdXQiLCJmbHVzaF9hbGwiLCJpdGVyIiwib3V0cHV0X3N0cmluZyIsIm9jIiwib3V0cHV0X3N1YnN0cmluZyIsImNsb3NlX291dCIsIm9wZW5faW5fZ2VuIiwib3Blbl9pbiIsImljIiwicHJlcnJfZW5kbGluZSIsImV4aXRfZnVuY3Rpb24iLCJmX3lldF90b19ydW4iLCJvbGRfZXhpdCIsImZfeWV0X3RvX3J1biQwIiwib2xkX2V4aXQkMCIsIm5ld19leGl0Iiwic3VjY2VzcyIsImRvX2F0X2V4aXQiLCJpc19ibG9jayIsInJhaXNlX3VuZGVmaW5lZCIsImZvcmNlX2xhenlfYmxvY2siLCJibGsiLCJjbG9zdXJlIiwiZSQwIiwidmFsdWUiLCJkZWZhdWx0JDAiLCJnZXQkMCIsIm1hcCIsImlzX3NvbWUiLCJnZXRfb2siLCJtYXAkMCIsIm9mX2ludF9leG4iLCJzJDAiLCJsZW5ndGhfYXV4IiwibGVuJDAiLCJjb25zIiwicmV2X2FwcGVuZCIsImwxJDAiLCJsMiQwIiwibDEkMSIsImwyJDEiLCJyZXYiLCJpbml0X3RhaWxyZWNfYXV4IiwiYWNjIiwiYWNjJDAiLCJhY2MkMSIsImluaXRfYXV4Iiwicm1hcF9mIiwiYWNjdSQwIiwiYWNjdSIsImwkMCIsImwkMSIsImFjY3UkMSIsImZpbmQiLCJhdXgiLCJwYXJ0IiwieWVzJDAiLCJubyQwIiwiY21wIiwicmV2X21lcmdlIiwidDIiLCJoMiIsInQxIiwiaDEiLCJhY2N1JDIiLCJhY2N1JDMiLCJyZXZfbWVyZ2VfcmV2Iiwic29ydCIsIngyIiwieDEiLCJ0bCQxIiwieDMiLCJ4MiQwIiwieDEkMCIsImMkMCIsImMkMSIsImMkMiIsImMkMyIsImMkNCIsImMkNSIsIm4xIiwibjIiLCJyZXZfc29ydCIsInRsJDAiLCJjb21wYXJlIiwibWluIiwibWF4JDAiLCJ0b19zdHJpbmciLCJvZnMxIiwib2ZzMiIsImVuc3VyZV9nZSIsInN1bV9sZW5ndGhzIiwic2VwbGVuIiwidW5zYWZlX2JsaXRzIiwiZHN0IiwicG9zJDAiLCJlc2NhcGVfaWZfbmVlZGVkIiwiaW5kZXhfcmVjIiwibGltIiwidG9saXN0IiwicmVzJDAiLCJyZXMkMSIsImxpc3RfbGVuZ3RoIiwiZmlsbCIsImxleF9yZWZpbGwiLCJyZWFkX2Z1biIsImF1eF9idWZmZXIiLCJuZXdsZW4iLCJuZXdidWYiLCJvcHQiLCJzdGgiLCJ3aXRoX3Bvc2l0aW9ucyIsImhlaWdodCIsImNyZWF0ZSIsImhsIiwiaCQwIiwiaHIiLCJiYWwiLCJsciIsImx2IiwibGwiLCJscnIiLCJscnYiLCJscmwiLCJyciIsInJ2IiwicmwiLCJybHIiLCJybHYiLCJybGwiLCJzaW5nbGV0b24iLCJhZGRfbWluX2VsZW1lbnQiLCJhZGRfbWF4X2VsZW1lbnQiLCJqb2luIiwicmgiLCJsaCIsIm1pbl9lbHQiLCJyZW1vdmVfbWluX2VsdCIsInIkMCIsIm1lcmdlIiwiY29uY2F0Iiwic3BsaXQiLCJwcmVzIiwicHJlcyQwIiwiZW1wdHkiLCJpc19lbXB0eSIsIm1lbSIsInJlbW92ZSIsInVuaW9uIiwidjIiLCJ2MSIsInIyJDAiLCJyMSQwIiwiaW50ZXIiLCJkaWZmIiwiY29uc19lbnVtIiwiZSQxIiwiY29tcGFyZV9hdXgiLCJlMSIsImUyIiwiZTEkMCIsImUyJDAiLCJlMiQxIiwiZTEkMSIsImUyJDIiLCJlMSQyIiwiZXF1YWwiLCJzdWJzZXQiLCJzMSQwIiwiczIkMCIsImZvbGQiLCJjYXJkaW5hbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZF9sYXN0X29wdF9hdXgiLCJ2MCQwIiwiZmluZF9sYXN0X29wdCIsIm9mX3NvcnRlZF9saXN0Iiwic3ViIiwibCQzIiwieDAiLCJsJDQiLCJ4MCQwIiwibCQ1IiwieDAkMSIsIm5sIiwibGVmdCIsIm1pZCIsImwkMiIsInJpZ2h0Iiwib2ZfbGlzdCIsIng0IiwiY2xlYXIiLCJwdXNoIiwicG9wX29wdCIsInRvcF9vcHQiLCJpdGVyJDEiLCJjcmVhdGUkMCIsImNsZWFyJDAiLCJjZWxsIiwibWF0Y2giLCJwZWVrX29wdCIsInRha2UiLCJuZXh0IiwidGFrZV9vcHQiLCJsZW5ndGgkMCIsIml0ZXIkMiIsImNlbGwkMCIsIml0ZXIkMyIsImZyb20iLCJjcmVhdGUkMSIsIm4kMCIsIm4kMSIsInN1YiQyIiwibGVuZ3RoJDEiLCJyZXNldCIsInJlc2l6ZSIsIm1vcmUiLCJvbGRfcG9zIiwib2xkX2xlbiIsIm5ld19sZW4iLCJuZXdfYnVmZmVyIiwiYWRkX2NoYXIiLCJhZGRfc3Vic3RyaW5nIiwibmV3X3Bvc2l0aW9uIiwiYWRkX3N0cmluZyIsImRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIiwiYnVmZmVyX2NyZWF0ZSIsImluaXRfc2l6ZSIsImJ1ZmZlcl9jaGVja19zaXplIiwib3ZlcmhlYWQiLCJtaW5fbGVuIiwiYnVmZmVyX2FkZF9jaGFyIiwiYnVmZmVyX2FkZF9zdHJpbmciLCJzdHJfbGVuIiwiYnVmZmVyX2NvbnRlbnRzIiwiY2hhcl9vZl9mY29udiIsImNGIiwiYnByaW50X2Zjb252X2ZsYWciLCJzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQiLCJmb3JtYXR0aW5nX2xpdCIsInN0ciQwIiwiYnByaW50X2ZtdHR5IiwiZm10dHkkMSIsImZtdHR5JDIiLCJmbXR0eSQzIiwiZm10dHkkNCIsImZtdHR5JDUiLCJmbXR0eSQ2IiwiZm10dHkkNyIsImZtdHR5JDgiLCJmbXR0eSQ5Iiwic3ViX2ZtdHR5IiwiZm10dHkkMTAiLCJzdWJfZm10dHkkMCIsImZtdHR5JDExIiwiZm10dHkkMTIiLCJmbXR0eSQxMyIsImZtdHR5JDE0IiwiZm10dHkkMTUiLCJzeW1tIiwiZm10dHlfcmVsX2RldCIsImRlIiwiZWQiLCJhZiIsImZhIiwiZGUkMCIsImVkJDAiLCJhZiQwIiwiZmEkMCIsImRlJDEiLCJlZCQxIiwiYWYkMSIsImZhJDEiLCJkZSQyIiwiZWQkMiIsImFmJDIiLCJmYSQyIiwiZGUkMyIsImVkJDMiLCJhZiQzIiwiZmEkMyIsImRlJDQiLCJlZCQ0IiwiYWYkNCIsImZhJDQiLCJkZSQ1IiwiZWQkNSIsImFmJDUiLCJmYSQ1IiwiZGUkNiIsImVkJDYiLCJhZiQ2IiwiZmEkNiIsImRlJDciLCJlZCQ3IiwiYWYkNyIsImZhJDciLCJkZSQ4IiwiZWQkOCIsImFmJDgiLCJmYSQ4IiwidHJhbnMiLCJqZCIsImRqIiwiZ2EiLCJhZyIsImRlJDkiLCJlZCQ5IiwiYWYkOSIsImZhJDkiLCJkZSQxMCIsImVkJDEwIiwiYWYkMTAiLCJmYSQxMCIsImRlJDExIiwiZWQkMTEiLCJhZiQxMSIsImZhJDExIiwiZGUkMTIiLCJlZCQxMiIsImFmJDEyIiwiZmEkMTIiLCJkZSQxMyIsImVkJDEzIiwiYWYkMTMiLCJmYSQxMyIsInJlc3QxIiwicmVzdDIiLCJyZXN0MSQwIiwicmVzdDIkMCIsInJlc3QxJDEiLCJyZXN0MiQxIiwicmVzdDEkMiIsInJlc3QyJDIiLCJyZXN0MSQzIiwicmVzdDIkMyIsInJlc3QxJDQiLCJyZXN0MiQ0IiwicmVzdDEkNSIsInJlc3QyJDUiLCJyZXN0MSQ2IiwicmVzdDIkNiIsInJlc3QxJDciLCJ0eTEkMCIsInJlc3QyJDciLCJ0eTIkMCIsInJlc3QxJDgiLCJ0eTEyIiwidHkxMSIsInJlc3QyJDgiLCJ0eTIyIiwidHkyMSIsImY0IiwiZjIiLCJyZXN0MSQ5IiwicmVzdDIkOSIsInJlc3QxJDEwIiwicmVzdDIkMTAiLCJyZXN0MSQxMSIsInJlc3QyJDExIiwicmVzdDEkMTIiLCJyZXN0MiQxMiIsInJlc3QxJDEzIiwicmVzdDIkMTMiLCJ0eXBlX3BhZGRpbmciLCJwYWR0eSIsInBhZHR5JDAiLCJ0eXBlX3BhZHByZWMiLCJ0eXBlX2Zvcm1hdCIsInR5cGVfZm9ybWF0X2dlbiIsImZtdCQwIiwiZm10dHlfcmVzdCIsImZtdF9yZXN0IiwiZm10dHlfcmVzdCQwIiwiZm10X3Jlc3QkMCIsImZtdCQxIiwiZm10X3Jlc3QkMSIsImZtdHR5X3Jlc3QkMSIsImZtdCQyIiwiZm10X3Jlc3QkMiIsImZtdHR5X3Jlc3QkMiIsImZtdCQzIiwiZm10X3Jlc3QkMyIsImZtdHR5X3Jlc3QkMyIsImZtdCQ0IiwiZm10X3Jlc3QkNCIsImZtdHR5X3Jlc3QkNCIsImZtdCQ1IiwiZm10X3Jlc3QkNSIsImZtdHR5X3Jlc3QkNSIsInByZWMkNCIsImZtdCQ2IiwiZm10X3Jlc3QkNiIsInByZWMkNSIsInBhZCQ5IiwicGFkJDEwIiwiZm10dHlfcmVzdCQ2IiwicHJlYyQ2IiwiZm10JDciLCJmbXRfcmVzdCQ3IiwicHJlYyQ3IiwicGFkJDExIiwicGFkJDEyIiwiZm10dHlfcmVzdCQ3IiwicHJlYyQ4IiwiZm10JDgiLCJmbXRfcmVzdCQ4IiwicGFkJDEzIiwicGFkJDE0IiwiZm10dHlfcmVzdCQ4IiwiZm10JDkiLCJmbXRfcmVzdCQ5IiwiZm10JDEwIiwiZm10X3Jlc3QkMTAiLCJmbXQkMTEiLCJmbXRfcmVzdCQxMSIsImZtdCQxMiIsImZtdHR5X3Jlc3QkOSIsImZtdF9yZXN0JDEyIiwicGFkX29wdCIsImZtdCQxMyIsImZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHkxIiwiZm10X3Jlc3QkMTMiLCJzdWJfZm10dHkkMSIsInBhZF9vcHQkMCIsImZtdCQxNCIsImZtdHR5X3Jlc3QkMTEiLCJmbXRfcmVzdCQxNCIsImZtdCQxNSIsImZtdHR5X3Jlc3QkMTIiLCJmbXRfcmVzdCQxNSIsImZtdHR5JDE2IiwiZm10JDE2IiwiZm10X3Jlc3QkMTYiLCJmbXR0eSQxNyIsImZtdCQxNyIsImZtdF9yZXN0JDE3IiwiZm9ybWF0dGluZ19nZW4iLCJ0eXBlX2Zvcm1hdHRpbmdfZ2VuIiwiZm10dHlfcmVzdCQxMyIsImZtdF9yZXN0JDE4IiwiZm10dHkkMTgiLCJmbXQkMTgiLCJmbXR0eV9yZXN0JDE0IiwiZm10X3Jlc3QkMTkiLCJmbXR0eSQxOSIsImZtdCQxOSIsImZtdHR5X3Jlc3QkMTUiLCJmbXRfcmVzdCQyMCIsImZtdHR5JDIwIiwiZm10JDIwIiwidHlwZV9pZ25vcmVkX3BhcmFtIiwiZm10MCIsImZtdHR5MCIsImZtdHR5MyIsImZtdDMiLCJmbXQxJDAiLCJmbXR0eTIkMCIsImZtdDIkMCIsImZtdHR5MyQwIiwiZm10MyQwIiwidHlwZV9pZ25vcmVkX3BhcmFtX29uZSIsInR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aSIsInN1Yl9mbXR0eV9yZXN0Iiwic3ViX2ZtdHR5X3Jlc3QkMCIsInN1Yl9mbXR0eV9yZXN0JDEiLCJzdWJfZm10dHlfcmVzdCQyIiwic3ViX2ZtdHR5X3Jlc3QkMyIsInN1Yl9mbXR0eV9yZXN0JDQiLCJzdWJfZm10dHlfcmVzdCQ1Iiwic3ViX2ZtdHR5X3Jlc3QkNiIsInN1Yl9mbXR0eV9yZXN0JDciLCJzdWJfZm10dHlfcmVzdCQ4Iiwic3ViX2ZtdHR5X3Jlc3QkOSIsInN1Yl9mbXR0eV9yZXN0JDEwIiwic3ViX2ZtdHR5X3Jlc3QkMTEiLCJzdWJfZm10dHlfcmVzdCQxMiIsInN1Yl9mbXR0eV9yZXN0JDEzIiwic3ViX2ZtdHR5X3Jlc3QkMTQiLCJzdWIyX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTUiLCJzdWIyX2ZtdHR5JDAiLCJzdWJfZm10dHlfcmVzdCQxNiIsInN1YjJfZm10dHkkMSIsInN1YjFfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNyIsInN1YjJfZm10dHkkMiIsInN1YjFfZm10dHkkMCIsInN1Yl9mbXR0eV9yZXN0JDE4Iiwic3ViX2ZtdHR5X3Jlc3QkMTkiLCJzdWJfZm10dHlfcmVzdCQyMCIsInN1Yl9mbXR0eV9yZXN0JDIxIiwic3ViX2ZtdHR5X3Jlc3QkMjIiLCJzdWJfZm10dHlfcmVzdCQyMyIsInN1Yl9mbXR0eV9yZXN0JDI0Iiwic3ViX2ZtdHR5X3Jlc3QkMjUiLCJzdWJfZm10dHlfcmVzdCQyNiIsInJlY2FzdCIsImZpeF9wYWRkaW5nIiwid2lkdGgiLCJ3aWR0aCQwIiwiZml4X2ludF9wcmVjaXNpb24iLCJzdHJpbmdfdG9fY2FtbF9zdHJpbmciLCJmb3JtYXRfb2ZfaWNvbnYiLCJmb3JtYXRfb2ZfaWNvbnZMIiwiZm9ybWF0X29mX2ljb252bCIsImZvcm1hdF9vZl9pY29udm4iLCJmb3JtYXRfb2ZfZmNvbnYiLCJ0cmFuc2Zvcm1faW50X2FsdCIsImRpZ2l0cyIsInB1dCIsImNvbnZlcnRfaW50IiwiY29udmVydF9pbnQzMiIsImNvbnZlcnRfbmF0aXZlaW50IiwiY29udmVydF9pbnQ2NCIsImNvbnZlcnRfZmxvYXQiLCJoZXgiLCJhZGRfZG90X2lmX25lZWRlZCIsImlzX3ZhbGlkIiwiY2FtbF9zcGVjaWFsX3ZhbCIsImZvcm1hdF9jYW1sX2NoYXIiLCJzdHJpbmdfb2ZfZm10dHkiLCJtYWtlX3ByaW50ZiQwIiwiayQwIiwibmV3X2FjYyIsIm1ha2VfcHJpbnRmIiwibWFrZV9wYWRkaW5nIiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIiwiYWNjJDIiLCJhY2MkMyIsImFjYyQ0IiwiayQxIiwia2FjYyIsImskMiIsIm1ha2VfaWdub3JlZF9wYXJhbSIsIm1ha2VfY3VzdG9tJDAiLCJtYWtlX2ludmFsaWRfYXJnIiwibWFrZV9mcm9tX2ZtdHR5JDAiLCJtYWtlX2Zyb21fZm10dHkiLCJwJDAiLCJwJDEiLCJhcml0eSQwIiwibWFrZV9jdXN0b20iLCJvdXRwdXRfYWNjIiwicCQzIiwicCQ0IiwicCQ1IiwicCQyIiwic3RycHV0X2FjYyIsImZhaWx3aXRoX21lc3NhZ2UiLCJvcGVuX2JveF9vZl9zdHJpbmciLCJpbnZhbGlkX2JveCIsInBhcnNlX3NwYWNlcyIsInBhcnNlX2x3b3JkIiwiaiQwIiwiaiQxIiwicGFyc2VfaW50Iiwid3N0YXJ0Iiwid2VuZCIsImJveF9uYW1lIiwibnN0YXJ0IiwibmVuZCIsImluZGVudCIsImV4cF9lbmQiLCJib3hfdHlwZSIsImtmcHJpbnRmIiwiZnByaW50ZiIsImVwcmludGYiLCJrc3ByaW50ZiIsInNwcmludGYiLCJwcmludGVycyIsImZpZWxkIiwib3RoZXJfZmllbGRzIiwiZmllbGRzIiwidXNlX3ByaW50ZXJzIiwiY29udiIsInRvX3N0cmluZ19kZWZhdWx0IiwiY2hhciQwIiwibGluZSIsImNoYXIkMSIsImxpbmUkMCIsImZpbGUkMCIsImNoYXIkMiIsImxpbmUkMSIsImZpbGUkMSIsImNvbnN0cnVjdG9yIiwidG9fc3RyaW5nJDAiLCJjb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJidCIsImZvcm1hdF9iYWNrdHJhY2Vfc2xvdCIsInNsb3QiLCJpbmZvIiwiaXNfcmFpc2UiLCJwcmludF9leGNlcHRpb25fYmFja3RyYWNlIiwib3V0Y2hhbiIsImJhY2t0cmFjZSIsInByaW50X3Jhd19iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwiZXJyb3JzIiwiZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuIiwic3RhdHVzIiwiZW1wdHlfYmFja3RyYWNlIiwidHJ5X2dldF9yYXdfYmFja3RyYWNlIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImRlYnVnZ2VyX2luX3VzZSIsImV4biQxIiwiZXhuJDAiLCJyYXdfYmFja3RyYWNlJDAiLCJoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJDAiLCJuZXdfc3RhdGUiLCJhc3NpZ24iLCJzdDEiLCJzdDIiLCJmdWxsX2luaXQiLCJjb21iaW5lIiwiZXh0cmFjdCIsInNlZWQkMCIsIm1ha2UkMiIsIm1ha2Vfc2VsZl9pbml0IiwiY29weSQwIiwiYml0cyIsImN1cnZhbCIsIm5ld3ZhbCIsIm5ld3ZhbDMwIiwib25nb2luZ190cmF2ZXJzYWwiLCJwYXJhbXMiLCJyYW5kb21pemVkX2RlZmF1bHQiLCJwcm5nIiwicG93ZXJfMl9hYm92ZSIsIngkMCIsIngkMSIsImluaXRpYWxfc2l6ZSIsInJhbmRvbSIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJpbnNlcnRfYnVja2V0IiwiY2VsbCQxIiwibmlkeCIsInJlc2l6ZSQwIiwib3NpemUiLCJrZXlfaW5kZXgiLCJyZW1vdmVfYnVja2V0IiwiZmluZF9yZWMiLCJkMSIsIm5leHQxIiwiZDIiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfaW5fYnVja2V0IiwibWVtX2luX2J1Y2tldCIsInplcm8iLCJ1bmtub3duIiwiaXNfa25vd24iLCJwcF9lbnF1ZXVlIiwidG9rZW4iLCJwcF9jbGVhcl9xdWV1ZSIsInBwX2luZmluaXR5IiwicHBfb3V0cHV0X3N0cmluZyIsInBwX291dHB1dF9uZXdsaW5lIiwicHBfb3V0cHV0X3NwYWNlcyIsInBwX291dHB1dF9pbmRlbnQiLCJmb3JtYXRfcHBfdGV4dCIsInRleHQiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJhZnRlciIsImJlZm9yZSIsInJlYWxfaW5kZW50IiwiYnJlYWtfbGluZSIsImJyZWFrX3NhbWVfbGluZSIsInBwX2ZvcmNlX2JyZWFrX2xpbmUiLCJwcF9za2lwX3Rva2VuIiwiZm9ybWF0X3BwX3Rva2VuIiwidGFicyIsImFkZF90YWIiLCJscyIsInRhZ19uYW1lIiwibWFya2VyIiwiYnJlYWtzIiwiZml0cyIsIm9mZiIsIm9mZiQwIiwiaW5zZXJ0aW9uX3BvaW50IiwidGFicyQwIiwiZmlyc3QiLCJ0YWlsIiwiaGVhZCIsInRhYiIsIm9mZiQxIiwiaW5zZXJ0aW9uX3BvaW50JDAiLCJ3aWR0aCQxIiwiYm94X3R5cGUkMCIsInRib3giLCJ0YWdfbmFtZSQwIiwibWFya2VyJDAiLCJhZHZhbmNlX2xlZnQiLCJwZW5kaW5nX2NvdW50Iiwic2l6ZSQwIiwiZW5xdWV1ZV9hZHZhbmNlIiwidG9rIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJlbnF1ZXVlX3N0cmluZyIsImluaXRpYWxpemVfc2Nhbl9zdGFjayIsInF1ZXVlX2VsZW0iLCJzZXRfc2l6ZSIsImxlZnRfdG90YWwiLCJzY2FuX3B1c2giLCJlbGVtIiwicHBfb3Blbl9ib3hfZ2VuIiwiYnJfdHkiLCJwcF9vcGVuX3N5c19ib3giLCJwcF9jbG9zZV9ib3giLCJwcF9vcGVuX3N0YWciLCJwcF9jbG9zZV9zdGFnIiwicHBfY2xvc2VfdGFnIiwicHBfcmluaXQiLCJjbGVhcl90YWdfc3RhY2siLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYm9vbCIsInBwX3ByaW50X2NoYXIiLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfY3VzdG9tX2JyZWFrIiwicHBfcHJpbnRfYnJlYWsiLCJwcF9wcmludF9jdXQiLCJkaXNwbGF5X25ld2xpbmUiLCJibGFua19saW5lIiwiZGlzcGxheV9ibGFua3MiLCJkZWZhdWx0X3BwX21hcmtfb3Blbl90YWciLCJkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnIiwiZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnIiwicHBfbWFrZV9mb3JtYXR0ZXIiLCJwcF9xdWV1ZSIsInN5c190b2siLCJzY2FuX3N0YWNrIiwicHBfbWFyZ2luIiwibWFrZV9mb3JtYXR0ZXIiLCJvdXRwdXQiLCJmbHVzaCIsInBwZiIsImZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCIsImZvcm1hdHRlcl9vZl9idWZmZXIiLCJwcF9idWZmZXJfc2l6ZSIsInBwX21ha2VfYnVmZmVyIiwic3RkYnVmIiwic3RkX2Zvcm1hdHRlciIsImVycl9mb3JtYXR0ZXIiLCJmbHVzaF9idWZmZXJfZm9ybWF0dGVyIiwicHBfcHJpbnRfbGlzdCIsInBwX3YiLCJvcHQkMCIsInBwX3NlcCIsIm9wdCQxIiwiY29tcHV0ZV90YWciLCJ0YWdfYWNjIiwib3V0cHV0X2Zvcm1hdHRpbmdfbGl0Iiwib3V0cHV0X2FjYyQwIiwiYnR5IiwiZiQwIiwicCQ2IiwicCQ3Iiwia2ZwcmludGYkMCIsImZwcmludGYkMCIsImthc3ByaW50ZiIsImFzcHJpbnRmIiwiZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsInZhbHVlJDAiLCJjb250ZW50X3JlY3QiLCJ0YXJnZXQkMCIsInN0cmluZ19vZl9ib3giLCJvYnNlcnZlIiwiYm94IiwiYm94JDAiLCJjcmVhdGUkNyIsImNhbGxiYWNrIiwiY2FsbGJhY2skMCIsImVudHJpZXMiLCJvYnNlcnZlciIsImVudHJpZXMkMCIsIm9mX25hdmlnYXRvciIsImltZ190b19qdiIsImltZyIsInRvX2p2IiwiYXJ0d29yayIsInNldF9tZXRhZGF0YSIsIm1ldGFkYXRhIiwibmV4dF90cmFjayIsInByZXZpb3VzX3RyYWNrIiwic2V0X2FjdGlvbl9oYW5kbGVyIiwiYWN0aW9uIiwic2V0X3Bvc2l0aW9uX3N0YXRlIiwiZHVyYXRpb24iLCJwbGF5YmFja19yYXRlIiwicG9zaXRpb24iLCJtYXliZV9mbG9hdCIsImR1cmF0aW9uJDAiLCJwbGF5YmFja19yYXRlJDAiLCJwb3NpdGlvbiQwIiwic3RhdGVfZGljdCIsInN1Ym1pdCIsInBhdHRlcm4iLCJwZXJzaXN0IiwibWFuYWdlciIsImFueSIsInJldHVybiQxIiwicHVyZSIsImlzX3B1cmUiLCJkdW1teSIsIm9wZXJhdG9yIiwiZGVzYyIsImZ1bmMiLCJ2eCIsIm1hcDIiLCJ2eSIsImNoaWxkIiwiYmluZCQxIiwiYWRkX2lkeCIsInBhcmFtIiwicmVtX2lkeF9yZWMiLCJzZWxmIiwicmVtX2lkeCIsInRyYWNlX2lkeCIsInRyYWNlX2lkeCQwIiwiaWR4JDAiLCJtb3ZfaWR4X3JlYyIsIm9sZGlkeCIsIm5ld2lkeCIsIm1vdl9pZHgiLCJnZXRfaWR4X3JlYyIsImdldF9pZHgiLCJpbnZhbGlkYXRlX25vZGUkMCIsInNlbnNpdGl2aXR5Iiwibm9kZSIsInNlbnNpdGl2aXR5JDAiLCJpbnZhbGlkYXRlX3RyYWNlIiwiaW52YWxpZGF0ZV9ub2RlIiwieiIsInkkMCIsInokMCIsInkkMSIsIngkMiIsImFjdGl2ZSIsImRlZmF1bHRfdW5zYWZlX211dGF0aW9uX2xvZ2dlciIsImNhbGxzdGFjayIsImRvX2ludmFsaWRhdGUiLCJ1bnNhZmUiLCJ2YXIkMCIsImdldCQzIiwicGVlayIsInVwZGF0ZSIsInByaW0iLCJhY3F1aXJlIiwicmVsZWFzZSIsImdldF9wcmltIiwiaW52YWxpZGF0ZSIsInN1Yl9yZWxlYXNlIiwiZmFpbHVyZXMkMCIsIm9yaWdpbiQxIiwib3JpZ2luJDAiLCJ0cmFjZSIsInRyYWNlJDAiLCJ4JDQiLCJ4JDUiLCJ4JDYiLCJyZXZpZHgiLCJzZWxmJDAiLCJzZWxmJDEiLCJzZWxmJDIiLCJzZWxmJDMiLCJpbnRlcm1lZGlhdGUiLCJmYWlsdXJlcyQ0IiwiY2hpbGQkMCIsIngkMyIsIndydCIsInNlbGYkNCIsInN1Yl9hY3F1aXJlIiwidHJhY2UkMSIsImVudHJpZXMkMSIsImRvYyIsImFjdGl2YXRlX3RyYWNpbmciLCJ0biIsInN1Yl9pc19kYW1hZ2VkIiwic3ViX3NhbXBsZSIsImYkMSIsInJlc3VsdCQwIiwib2JzZXJ2ZSQwIiwib25faW52YWxpZGF0ZSIsInJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIiwicGFyYW0kMCIsImZhaWx1cmVzJDEiLCJmbHVzaF9yZWxlYXNlX3F1ZXVlIiwicXVldWUkMCIsInNhbXBsZSIsInNldF9vbl9pbnZhbGlkYXRlIiwiZmx1c2hfb3JfZmFpbCIsIm1haW5fZXhuIiwiZmFpbHVyZXMiLCJxdWlja19zYW1wbGUiLCJtYXBfcmVkdWNlIiwiaW5qIiwiaXRlbXMiLCJwbHVzIiwiY29uc19tb25vaWQiLCJ4cyIsInhzJDAiLCJ2JDAiLCJ4cyQxIiwidiQxIiwidiQyIiwiY29uc19tb25vaWQkMCIsIm5vdF9vcmlnaW4iLCJtYWtlJDMiLCJzZXRfcGFyZW50IiwibWFrZV9ub2RlIiwic2V0IiwiYmluZGluZyIsInJhd19pbnZhbGlkYXRlIiwiYXBwZW5kIiwiZ2V0JDQiLCJpbnZhbGlkYXRlX2JpbmRpbmciLCJzZXRfYmluZGluZyIsImNsZWFyJDIiLCJyb290JDAiLCJzbWFsbGVyX2VsbCIsInNtaW4iLCJzbWF4IiwiZGlzYmFsYW5jZWQiLCJyZXBhcmVudCIsIm9sZGNoaWxkIiwibmV3Y2hpbGQiLCJyb3RfbGVmdCQwIiwidmVyc2lvbiIsInNuIiwicm4iLCJybCQwIiwiYmFsYW5jZSIsImJhbGFuY2UkMCIsInJvdF9sZWZ0Iiwicm90X3JpZ2h0JDAiLCJsbiIsImxyJDAiLCJyb3RfcmlnaHQiLCJpbmNfbGVmdCIsImluY19yaWdodCIsInNsIiwic3IiLCJjb21wdXRlX3N1Yl9zaXplIiwicmVzZXRfdmVyc2lvbiIsInJlYmFsYW5jZSIsInZlcnNpb24kMCIsImV4dHJhY3RfYmluZGluZ3MiLCJ0cmVlIiwicm5vZGUiLCJmdWxsX3JlYnVpbGQiLCJyZWQiLCJiaW5kaW5ncyIsImJpbmRpbmdzJDAiLCJyZWR1Y3Rpb24iLCJiaW5kaW5nJDAiLCJyZWR1Y3Rpb24kMCIsImFnZ3JlZ2F0ZSIsImFnZ3JlZ2F0ZSQwIiwiZXh0cmFjdF9mcmluZ2UiLCJpbmNyZW1lbnRhbF9yZWJ1aWxkIiwiZnJpbmdlIiwiZnJpbmdlJDAiLCJmcmluZ2UkMSIsImV2YWwkMCIsIm9wYXF1ZSIsIm1hcF9yZWR1Y2UkMCIsIm1hcHBlciIsIm1vbm9pZCIsInNvdXJjZSIsInByaW0kMCIsImVtcHR5JDAiLCJlbGVtZW50IiwibWF4aSIsInJhbmsiLCJjb25jYXQkMSIsIm1hc2tfb2xkIiwibWFza19uZXciLCJtYXNrX2JvdGgiLCJpc19zaGFyZWQiLCJpc19ub3Rfc2hhcmVkIiwiaXNfYm90aCIsImlzX29sZCIsImlzX25ldyIsInNldF9ib3RoIiwiZ2V0X2luZGV4Iiwid2l0aF9pbmRleF9uZXciLCJ1bm1hcmsiLCJtYXJrZWQiLCJzaGFyZWQiLCJibG9ja2VkIiwibWtfc3RhdHMiLCJuZXdfbWFya2VkIiwic3RhdHMiLCJuZXdfc2hhcmVkIiwibmV3X2Jsb2NrZWQiLCJibG9jayIsIm1hc2siLCJtYXJrIiwibWFyayQwIiwiZW5xdWV1ZSIsImRlcXVldWUiLCJ0cmF2ZXJzZTEiLCJ0cmF2ZXJzZSIsInNvbGQiLCJzbmV3IiwicW9sZCIsInFuZXciLCJvbGRfc3RhdHMiLCJ0ciIsIm5ld19zdGF0cyIsInVuc2FmZV90cmF2ZXJzZSIsIm9sZF9yb290IiwibmV3X3Jvb3QiLCJvbGRfcXVldWUiLCJuZXdfcXVldWUiLCJyZXN0b3JlIiwibmV4dF9zaGFyZWRfaW5kZXgiLCJzdCIsInVuYmxvY2siLCJ0JDAiLCJ1bm1hcmtfb2xkIiwiaW5kZXgkMCIsImRyb3BwZWRfbGVhZiIsImEkMCIsImIkMCIsImluZGV4JDEiLCJpbmRleCQyIiwiZHJvcHBlZF9qb2luIiwicHJlcGFyZV9zaGFyZWQiLCJ1bm1hcmtfbmV3Iiwibm9fZHJvcHBlZCIsImdldF9kcm9wcGVkIiwieG9sZCIsInRuZXciLCJ0cmF2ZXJzYWwiLCJuYl9kcm9wcGVkIiwibmJfc2hhcmVkIiwibmJfZHJvcHBlZCQwIiwieGxlYWYiLCJ4am9pbiIsImV2YWwkMSIsIm90aGVyIiwibWFrZSQ0IiwicmVkdWNlIiwidXBkYXRlJDAiLCJuZXdfdHJlZSIsIm9sZF90cmVlIiwidXBkYXRlX2FuZF9nZXRfZHJvcHBlZCIsImRyb3BwZWQiLCJmb2xkX2Ryb3BwZWQiLCJib3VuZCIsImJvdW5kJDAiLCJwdXJlX21hcF9yZWR1Y2UiLCJmb2xkX21vbm9pZCIsInNlcSIsInJlZHVjZSQwIiwicmVkdWNlciIsInJlZHVjZXIkMCIsInRyYW5zZm9ybV9saXN0Iiwib2ZfbGlzdCQxIiwidG9fbGlzdCQxIiwibHdkX2VtcHR5IiwibHdkX21vbm9pZCIsIm1hcCQ0IiwiZmlsdGVyX21hcCQwIiwic2VsZWN0IiwiYmluZCQyIiwibGlmdCIsIm9wdHMiLCJ0eXBlIiwiaXNfcHVyZV9lbGVtZW50IiwiZXh0cmFjdF9wdXJlX2VsZW1lbnQiLCJleHRyYWN0X3B1cmVfZWxlbWVudHMiLCJwcmVwYXJlX2NvbCIsImNvbCIsImltcHVyZSIsImNvbnN1bWVfY2hpbGRyZW4iLCJjaGlsZF9ub2RlIiwiY2hpbGRfam9pbiIsImp2X2FwcGVuZCIsImp2X2JlZm9yZSIsImp2X3JlbW92ZSIsImp2X2NvbnRhaW5zIiwiY29udGFpbnNfZm9jdXMiLCJlbCIsInVwZGF0ZV9jaGlsZHJlbiIsImNoaWxkcmVuIiwic2NoZWR1bGVfZm9yX3JlbW92YWwiLCJwcmVzZXJ2ZV9mb2N1cyIsInNoaWZ0X3NpYmxpbmdzIiwic2libGluZyIsInJlbW92ZV9jaGlsZCIsInB1cmVfdW5pdCIsImR1bW15X2t2X2F0IiwiYXR0YWNoX2F0dHJpYnMiLCJhdHRyaWJzIiwic2V0X2t2IiwidW5zZXRfa3YiLCJzZXRfbHdkX2F0IiwicHJldiIsImF0IiwicGFpciIsImF0cyIsInNldF9hdCIsImt2IiwibGlzdGVuJDAiLCJhdHRhY2hfZXZlbnRzIiwiZXZlbnRzIiwiY2FjaGVkIiwidiQ0Iiwic3RoJDAiLCJldiIsImltcHVyZV9hdCIsImF0JDAiLCJpbXB1cmVfZXYiLCJldiQwIiwiaW1wdXJlX2NoaWxkcmVuIiwiY2hpbGRyZW4kMCIsImNoaWxkcmVuJDEiLCJjaGlsZHJlbiQyIiwiY29ucyQxIiwiY3MiLCJ2b2lkX2NvbnMiLCJidXR0b24kMCIsImRpdiQxIiwiZm9ybSQwIiwiaW1nJDAiLCJpbnB1dCQxIiwibGFiZWwkMCIsIm9wdGlvbiQwIiwic2VsZWN0JDAiLCJzcGFuJDEiLCJpdGVtX3RvX3N0cmluZyIsImlzX25hbiIsIm9mX3N0cmluZ19vcHQiLCJlcXVhbCQwIiwiY29tcGFyZSQxIiwib2Zfc3RyaW5nJDAiLCJvZl9mbG9hdCIsImtlZXAiLCJzeW1ib2wkMTAiLCJtYXBfb3IiLCJmbGF0X21hcCIsInN5bWJvbF9iaW5kJDAiLCJ2YWx1ZSQzIiwidG9fbGlzdCQyIiwic3ltYm9sJDExIiwic3ltYm9sJDEyIiwiZ2V0X2V4biIsImdldF9vciIsImZsYXRfbWFwJDAiLCJzeW1ib2wkMTMiLCJzeW1ib2xfYmluZCQxIiwic3VmIiwiY2hlY2siLCJsZXhfZXJyb3IiLCJlcnJvcl9wb3MiLCJjbnVtIiwiZW51bSQwIiwic3RyaW5nMm51bSIsInVwZGF0ZV9wb3MiLCJpbnRfb2ZfaGV4Y2hhciIsInV0Zjhfb2ZfY29kZSIsInUiLCJtYXhfdXNlZF9iaXRzIiwidXRmOF9vZl9zdXJyb2dhdGVfcGFpciIsImhpZ2giLCJsb3ciLCJoaWdoJDAiLCJsb3ckMCIsImVzY2FwaW5nX2Vycm9yIiwib2ZmcyIsInVuZXNjYXBlX3N0cmluZyIsInUxIiwidTIiLCJyZWFkJDAiLCJvY2FtbF9sZXhfcmVhZF9yZWMiLCJvY2FtbF9sZXhfc3RhdGUiLCJvY2FtbF9sZXhfc3RhdGUkMCIsIm9jYW1sX2xleF9zdGF0ZSQxIiwicmVhZF9jb21tZW50IiwicmVhZF9jb21tZW50JDAiLCJvY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyIsImNyZWF0ZV9mcm9tX2xleGJ1ZiIsImVtc2ciLCJlY2hhciIsInNjaGFyIiwiZWxpbmUiLCJsb2cyIiwiYml0cyQwIiwibWF4X2pzb25faW50Iiwic3RyaW5nX29mX2Zsb2F0X2pzb24iLCJpc19pbnQiLCJpbnRfdmFsdWUiLCJ0b2tlbl9lcnJvciIsInMkMSIsInMkMiIsImpzb25fdmFsdWUiLCJ0b2tlbl92YWx1ZSIsIm9iamVjdF92YWx1ZV9zdGFydCIsImFycmF5X3ZhbHVlX3N0YXJ0IiwidmFyaWFudF92YWx1ZV9zdGFydCIsInR1cGxlX3ZhbHVlX3N0YXJ0IiwiYXJyYXlfdmFsdWVzX3N0YXJ0IiwidG9rJDAiLCJhcnJheV92YWx1ZXMiLCJvYmplY3RfdmFsdWVzX3N0YXJ0IiwiY29sb25fdmFsdWUiLCJvYmplY3RfdmFsdWVzIiwia2V5X2NvbG9uX3ZhbHVlIiwidHVwbGVfdmFsdWVzIiwidmFyaWFudF9lbmQiLCJkZWNvZGUiLCJlcnIkMCIsIm5pYmJsZV90b19oZXgiLCJhZGRfaGV4X2J5dGUiLCJlc2NhcGUiLCJ0b19qc29uX3N0cmluZyIsImFkZF9jaGFyJDAiLCJhZGRfc3RyaW5nJDAiLCJhZGRfcXVvdGVfc3RyaW5nIiwicHBfbGlzdCIsInBweCIsIm91dCIsImZvcm1hdCIsImpzb24iLCJmb3JtYXRfZmllbGQiLCJqc29uJDAiLCJzJDMiLCJwcmV0dHlfcHJpbnQiLCJwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIiwicHJldHR5X3ByaW50X3RvX2NoYW5uZWwiLCJlcnJvciQxIiwidG9fYXNzb2MiLCJudWxsJDEiLCJ0b2tlbl90b19zdHJpbmciLCJyZWFkX2pzb24iLCJyZWFkX2pzb25fZXJyb3JfaW5mbyIsImVycl9pbmZvIiwianNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyIsImpzb25fb2ZfY2hhbm5lbF9lcnJvcl9pbmZvIiwiaW5jIiwianNvbl9vZl9maWxlX2Vycm9yX2luZm8iLCJmaWxlbmFtZSIsImpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcCIsInN0cmVhbSIsInJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyIsImZpbiIsInN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIiwic3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIiwic3RyZWFtX2Zyb21fZmlsZV9lcnJvcl9pbmZvIiwic3RyZWFtX2Zyb21fbGV4YnVmX2Vycm9yX2luZm8iLCJqc29uX3RvX2NoYW5uZWxfZm10IiwiZW9sIiwiaW5jciIsInBzZXAiLCJhZGRfaW50IiwiYWRkX2Zsb2F0IiwicHNlcCQwIiwibGRyJDEiLCJqc29uX2xpc3QiLCJsZHIkMiIsImxkciIsImpzb25fYXNzb2MiLCJsZHIkMCIsIm5ld3NlcCIsImpzb25fdG9fY2hhbm5lbCIsImpzb25fdG9fZmlsZV9leG4iLCJqc29uX3RvX2J1ZmZlciIsImpzb25fdG9fc3RyaW5nIiwianNvbl9lcnJvciIsImVycm9yX3RvX3N0cmluZyIsImVycm9yX2luZm8iLCJmbmFtZSIsImxudW0iLCJsbnVtJDAiLCJsbnVtJDEiLCJmbmFtZSQwIiwibG9jIiwiYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMiLCJmcm9tX3N0cmluZyIsInRvX3N0YW5kYXJkIiwidHBsIiwiam9wdCIsInN0ZCIsImxleF9zdHJpbmciLCJsZXhfbnVtYmVyIiwibGV4X2ludGVnZXIiLCJsZXhfbGFyZ2VpbnQiLCJsZXhfdmFyaWFudCIsImxleF90dXBsZSIsImNvbW1lbnRfY2hlY2siLCJudW1iZXJfdG9fc3RyaW5nIiwibGFyZ2VpbnQiLCJpbnRlZ2VyIiwibnVsbCQyIiwic3RyaW5nJDAiLCJib29sIiwiYXNzb2MiLCJsaXN0IiwidHVwbGUiLCJudW1iZXIiLCJhcnJheV9zdGFydCIsImFycmF5X2VuZCIsIm9iamVjdF9zdGFydCIsIm9iamVjdF9lbmQiLCJ0dXBsZV9zdGFydCIsInR1cGxlX2VuZCIsInZhcmlhbnRfc3RhcnQiLCJuYW1lJDAiLCJsZXhfc3RyaW5nJDAiLCJsZXhfbnVtYmVyJDAiLCJsZXhfaW50ZWdlciQwIiwibGV4X2xhcmdlaW50JDAiLCJsZXhfdmFyaWFudCQwIiwibGV4X3R1cGxlJDAiLCJjb21tZW50X2NoZWNrJDAiLCJudW1iZXJfdG9fc3RyaW5nJDAiLCJsYXJnZWludCQwIiwiaW50ZWdlciQwIiwibnVsbCQzIiwic3RyaW5nJDEiLCJib29sJDAiLCJhc3NvYyQwIiwibGlzdCQwIiwidHVwbGUkMCIsInZhcmlhbnQkMCIsIm51bWJlciQwIiwiYXJyYXlfc3RhcnQkMCIsImFycmF5X2VuZCQwIiwib2JqZWN0X3N0YXJ0JDAiLCJvYmplY3RfZW5kJDAiLCJ0dXBsZV9zdGFydCQwIiwidHVwbGVfZW5kJDAiLCJ2YXJpYW50X3N0YXJ0JDAiLCJ2YXJpYW50X2VuZCQwIiwibmFtZSQxIiwiZnJvbV9zdHJpbmckMCIsInRvX3N0cmluZyQ0IiwibGV4X3N0cmluZyQxIiwibGV4X251bWJlciQxIiwibGV4X2ludGVnZXIkMSIsImxleF9sYXJnZWludCQxIiwibGV4X3ZhcmlhbnQkMSIsImxleF90dXBsZSQxIiwiY29tbWVudF9jaGVjayQxIiwibnVtYmVyX3RvX3N0cmluZyQxIiwibGFyZ2VpbnQkMSIsImludGVnZXIkMSIsIm51bGwkNCIsInN0cmluZyQyIiwiYm9vbCQxIiwiYXNzb2MkMSIsImxpc3QkMSIsInR1cGxlJDEiLCJ2YXJpYW50JDEiLCJudW1iZXIkMSIsImFycmF5X3N0YXJ0JDEiLCJhcnJheV9lbmQkMSIsIm9iamVjdF9zdGFydCQxIiwib2JqZWN0X2VuZCQxIiwidHVwbGVfc3RhcnQkMSIsInR1cGxlX2VuZCQxIiwidmFyaWFudF9zdGFydCQxIiwidmFyaWFudF9lbmQkMSIsIm5hbWUkMiIsInRvX2pzdHIkMSIsIm9mX2pzdHIkMSIsImpzdHIiLCJvZl9qdiIsImp2IiwicmFuZG9tX3N0YXRlIiwibmV3X3V1aWRfdjQiLCJ0ZWUiLCJ0b19hdCIsImVtcHR5JDIiLCJ0b19hdCQwIiwiaWQkMCIsImNsYXNzZXMiLCJ1bmlvbiQwIiwiYXR0cnMiLCJhZGQkMSIsImF0X25hbWUiLCJhZGRfYm9vbCIsImFkZF9vcHQiLCJtYXBfY29sIiwib2ZfYXQiLCJjb25zJDIiLCJjbGFzcyQyIiwidiQ1Iiwic3ltYm9sJDE0Iiwib2Zfc3RyaW5nJDEiLCJ0b19zdHJpbmckNiIsInRvX3B4IiwiZ2V0X2ZvbnRfc2l6ZV9pbl9weCIsImZvbnRfc2l6ZSIsImZvbnRfc2l6ZSQwIiwibWFwMyIsInRyaXBsZSIsImpzX3Njcm9sbCIsImVsdCIsIm1ha2UkNSIsInNjcm9sbF90YXJnZXQiLCJhdCQxIiwib25fY2xpY2siLCJoYW5kbGVyJDAiLCJjb250cm9scyIsIm9uX3doZWVsIiwiZWx0JDAiLCJ2JDYiLCJjc3Nfc2l6ZSIsInRvX2hlYWRlciIsImNlbGxzIiwic3R5bGUkMSIsInRlbXBsYXRlIiwic3R5bGUkMiIsImhlYWRlciIsInJvd19oZWlnaHQiLCJ1bmlxIiwiYWRkJDAiLCJuZXdfZWx0IiwidGFrZSQwIiwibWFrZSQ2IiwidWlfdGFibGUiLCJkYXRhX3NvdXJjZSIsInJvd19zaXplIiwiaGVpZ2h0X24iLCJoZWlnaHQkMCIsInRhYmxlIiwicm93X2luZGV4IiwidW5sb2FkX3F1ZXVlIiwiZmV0Y2giLCJpbmRleGVzIiwibWF4X2l0ZW1zIiwidW5sb2FkIiwicm93Iiwicm93X2RhdGEiLCJsb2FkIiwiZGF0YSQwIiwiY2xlYW51cCIsInFfbGVuZ3RoIiwiZm9yJDAiLCJ0b19sb2FkIiwidGFibGVfaGVpZ2h0IiwiY29tcHV0ZV92aXNpYmxlX3Jvd3MiLCJsYXN0X3Njcm9sbF95IiwiZGl2Iiwic2Nyb2xsX3kkMCIsImRpcmVjdGlvbiIsInZpc2libGVfaGVpZ2h0IiwiaGVhZGVyX2hlaWdodCIsIm51bWJlcl9vZl92aXNpYmxlX3Jvd3MiLCJzY3JvbGxfeSQxIiwiZmlyc3RfdmlzaWJsZV9yb3ciLCJsYXN0X3Zpc2libGVfcm93IiwiYmxlZWRpbmciLCJibGVlZGluZyQwIiwibGFzdCIsInByZXBhcmUiLCJyZW5kZXIiLCJwb3B1bGF0ZV9vbl9zY3JvbGwiLCJ0b3RhbF9pdGVtcyIsInZpc2libGVfcm93cyIsInRvdGFsX2l0ZW1zJDAiLCJzY3JvbGxfaGFuZGxlciIsImxhc3RfdXBkYXRlIiwidGltZW91dCIsInJlc2V0X3RpY2tlciIsImRlYm91bmNpbmdfaW50ZXJ2YWwiLCJyZXBvcHVsYXRlX2RlcHMiLCJtYWtlX3NwYWNlciIsInJvd3MiLCJzcGFjZXIiLCJ0YWJsZV9ib2R5IiwiZmlyc3Rfc3BhY2VyIiwibGFzdF9zcGFjZXIiLCJ0YWJsZV9oZWFkZXIiLCJyZWN0IiwiZ3JpZF9zdHlsZSIsInRhYmxlJDAiLCJzY3JvbGxfdGFyZ2V0JDAiLCJzY3JvbGxfdGFyZ2V0JDEiLCJtYWtlJDciLCJDIiwibGFuZyIsImtleXMiLCJjaGVja19rZXkiLCJsb2NhbF9zdG9yYWdlIiwic3RvcmUiLCJmZXRjaCQwIiwiZW5jb2RlZF92YWx1ZSIsImluaXRpYWxfdmFsdWUiLCJtYWtlX3BlcnNpc3RlbnRfdmFyIiwidmFyJDEiLCJuZXdfdmFsdWUiLCJ2YXJfZiIsImtleSQwIiwibWFrZV9oYW5kbGVyIiwidmFsdWVfY2hhbmdlX2V2ZW50IiwiZGVmYXVsdF92YWx1ZSIsIm9uX2NoYW5nZSIsIm1ha2VfaW5wdXQiLCJ2YWxpZGF0ZSIsInBhdHRlcm4kMCIsInJlcXVpcmVkIiwidHlwZSQxIiwidmFsaWRhdGUkMCIsInRleHRfaW5wdXQiLCJwbGFjZWhvbGRlciQwIiwicGFzc3dvcmRfaW5wdXQiLCJzdWJtaXQkMCIsImZpZWxkJDAiLCJzZXR0ZXIiLCJjcmVhdGUkOCIsIkZvcm0iLCJvbl9zdWJtaXQiLCJlbHRzIiwiZWx0cyQwIiwib25fc3VibWl0JDAiLCJuYW1lJDMiLCJiYXNlX25hbWUiLCJtYWtlJDgiLCJuYW1lJDQiLCJtYWtlJDkiLCJvcHRpb25zIiwib3B0aW9ucyQwIiwic2VsZWN0ZWQiLCJuYW1lJDUiLCJtYWtlJDEwIiwibWFrZV9jaGVjayIsImxhYmVsIiwiY2hlY2tlZCIsImxibCIsImNoZWNrZWQkMSIsIm1ha2VfYWxsIiwiYWxsIiwidiQ3IiwiYXBwbHlfc3RhdGUiLCJ3aXRoX3N0YXRlIiwiUyIsInZfc3RhdGUiLCJnZXRfc3RhdGUiLCJzZXRfc3RhdGUiLCJmdW5jJDAiLCJoJDEiLCJ0d29fc3RhdGUiLCJ5b2pzb25fb2Zfc3RyaW5nIiwieW9qc29uX29mX2ludCIsInlvanNvbl9vZl9vcHRpb24iLCJ5b2pzb25fb2ZfYSIsInlvanNvbl9vZl9saXN0IiwibHN0IiwicmVjb3JkX2NoZWNrX2V4dHJhX2ZpZWxkcyIsIm9mX3lvanNvbl9lcnJvciIsIndoYXQiLCJ5b2pzb24iLCJzdHJpbmdfb2ZfeW9qc29uIiwiaW50X29mX3lvanNvbiIsIm9wdGlvbl9vZl95b2pzb24iLCJhX29mX3lvanNvbiIsImxpc3Rfb2ZfeW9qc29uIiwicmV2X2xzdCIsInN0YWdfbm9fYXJncyIsIm5lc3RlZF9saXN0X2ludmFsaWRfc3VtIiwiZW1wdHlfbGlzdF9pbnZhbGlkX3N1bSIsInVuZXhwZWN0ZWRfc3RhZyIsInJlY29yZF9zdXBlcmZsdW91c19maWVsZHMiLCJyZXZfZmxkX25hbWVzIiwiZmxkX25hbWVzX3N0ciIsInJlY29yZF9kdXBsaWNhdGVfZmllbGRzIiwicmVjb3JkX2V4dHJhX2ZpZWxkcyIsInJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AiLCJmaWVsZHMkMCIsInJlY29yZF91bmRlZmluZWRfZWxlbWVudHMiLCJ1bmRlZmluZWQkMCIsInJlY29yZF9saXN0X2luc3RlYWRfYXRvbSIsInN5bWJvbCQxNSIsImpzdHJfb2ZfbWV0aG9kIiwidXNlcl9vZl95b2pzb24iLCJmaWVsZF95b2pzb25zIiwibmFtZV9maWVsZCIsInNlcnZlcl9pZF9maWVsZCIsInNlcnZlcl9uYW1lX2ZpZWxkIiwiaWRfZmllbGQiLCJkdXBsaWNhdGVzIiwiZXh0cmEiLCJmaWVsZF95b2pzb24iLCJmaWVsZF9uYW1lIiwiZnZhbHVlIiwiZnZhbHVlJDAiLCJmdmFsdWUkMSIsImZ2YWx1ZSQyIiwic2VydmVyX25hbWVfdmFsdWUiLCJpZF92YWx1ZSIsInNlcnZlcl9pZF92YWx1ZSIsIm5hbWVfdmFsdWUiLCJ5b2pzb25fb2ZfdXNlciIsInZfaWQiLCJ2X3NlcnZlcl9uYW1lIiwidl9zZXJ2ZXJfaWQiLCJ2X25hbWUiLCJibmRzIiwiYXJnJDAiLCJibmRzJDAiLCJhcmckMSIsImJuZHMkMSIsImFyZyQyIiwiYm5kcyQyIiwicGFyYW1zX29mX3lvanNvbiIsInVzZXJuYW1lX2ZpZWxkIiwicHdfZmllbGQiLCJwd192YWx1ZSIsInVzZXJuYW1lX3ZhbHVlIiwieW9qc29uX29mX3BhcmFtcyIsInZfcHciLCJ2X3VzZXJuYW1lIiwicmVzcG9uc2Vfb2ZfeW9qc29uIiwidXNlcl9maWVsZCIsImFjY2Vzc190b2tlbl9maWVsZCIsImFjY2Vzc190b2tlbl92YWx1ZSIsInVzZXJfdmFsdWUiLCJ5b2pzb25fb2ZfcmVzcG9uc2UiLCJ2X2FjY2Vzc190b2tlbiIsInZfdXNlciIsImVuZHBvaW50IiwiaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2giLCJpbWFnZV9ibHVyX2hhc2hlc19vZl95b2pzb24iLCJwcmltYXJ5X2ZpZWxkIiwicHJpbWFyeV92YWx1ZSIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2hlcyIsInZfcHJpbWFyeSIsImJuZCIsInR5cGVfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGUiLCJ0eXBlX3N0cl9vZl95b2pzb24iLCJ5b2pzb25fb2ZfdHlwZV9zdHIiLCJ0cyIsInRfb2ZfeW9qc29uIiwic29ydF9uYW1lX2ZpZWxkIiwicGF0aF9maWVsZCIsImFsYnVtX2lkX2ZpZWxkIiwicGFyZW50X2lkX2ZpZWxkIiwiaW1hZ2VfYmx1cl9oYXNoZXNfZmllbGQiLCJ0eXBlX2ZpZWxkIiwiY29sbGVjdGlvbl90eXBlX2ZpZWxkIiwiZnZhbHVlJDMiLCJmdmFsdWUkNCIsImZ2YWx1ZSQ1IiwiZnZhbHVlJDYiLCJmdmFsdWUkNyIsImZ2YWx1ZSQ4Iiwic29ydF9uYW1lX3ZhbHVlIiwicGF0aF92YWx1ZSIsImFsYnVtX2lkX3ZhbHVlIiwicGFyZW50X2lkX3ZhbHVlIiwiY29sbGVjdGlvbl90eXBlX3ZhbHVlIiwidHlwZV92YWx1ZSIsImltYWdlX2JsdXJfaGFzaGVzX3ZhbHVlIiwieW9qc29uX29mX3QiLCJ2X2NvbGxlY3Rpb25fdHlwZSIsInZfdHlwZSIsInZfaW1hZ2VfYmx1cl9oYXNoZXMiLCJ2X3BhcmVudF9pZCIsInZfYWxidW1faWQiLCJ2X3BhdGgiLCJ2X3NvcnRfbmFtZSIsImFyZyQ4IiwiYm5kJDMiLCJibmRzJDMiLCJibmRzJDQiLCJhcmckMyIsImJuZCQwIiwiYm5kcyQ1IiwiYXJnJDQiLCJibmQkMSIsImJuZHMkNiIsImFyZyQ1IiwiYm5kcyQ3IiwiYXJnJDYiLCJibmQkMiIsImJuZHMkOCIsImFyZyQ3IiwiYm5kcyQ5Iiwic2Vzc2lvbl91dWlkIiwic2V0X3Nlc3Npb25fdXVpZCIsImF1dGhvcml6YXRpb24iLCJ0b2tlbiQwIiwic2Vzc2lvbl91dWlkJDAiLCJyZXF1ZXN0JDEiLCJiYXNlX3VybCIsImhlYWRlcnMiLCJRIiwicGF0aF9wYXJhbXMiLCJ1cmkiLCJhdXRob3JpemF0aW9uJDAiLCJoZWFkZXJzJDAiLCJtZXRob2QiLCJib2R5IiwicGFyYW1zJDAiLCJ1cmlfd2l0aF9wYXJhbXMiLCJ1cmwkMSIsImluaXQkMSIsImNvbm5lY3QiLCJjcmVkZW50aWFscyIsInBhc3N3b3JkIiwidXNlcm5hbWUiLCJhdXRoIiwiYXV0aF9yZXNwb25zZSIsInRhZ19vZiIsImZ1dHVyZXMiLCJsaXN0ZW5lcnMiLCJ3b3JrZXIiLCJxdWVyeSIsInV1aWQiLCJmdXQiLCJzZXQkMCIsInF1ZXJ5JDAiLCJvbl9tZXNzYWdlIiwibWVzc2FnZSIsIm9mX3N0cmluZyQyIiwiaXRlbV9jb3VudCIsInJlcSIsInNyY192aWV3cyIsInN0aCQxIiwiZmlsdGVycyIsInRfdG9fanYiLCJlbmNvZGVyIiwianZfdG9fdCIsImRlY29kZXIiLCJzb3J0c19vZl95b2pzb24iLCJkYXRlX2FkZGVkX2ZpZWxkIiwidmlld3NfZmllbGQiLCJ2aWV3c192YWx1ZSIsImRhdGVfYWRkZWRfdmFsdWUiLCJ5b2pzb25fb2Zfc29ydHMiLCJ2X3ZpZXdzIiwidl9kYXRlX2FkZGVkIiwidF9vZl95b2pzb24kMCIsInNvcnRzX2ZpZWxkIiwiaXRlbV9maWVsZCIsIml0ZW1fdmFsdWUiLCJzb3J0c192YWx1ZSIsInlvanNvbl9vZl90JDAiLCJ2X2l0ZW0iLCJ2X3NvcnRzIiwiY29tcGFyZSQyIiwidG9fanYkMCIsInZpZXdzIiwic29ydF9uYW1lIiwic29ydF9uYW1lJDAiLCJ2aWV3cyQwIiwib2ZfanYkMCIsInRvX2p2JDEiLCJvZl9qdiQxIiwidG9fanYkMiIsIm9mX2p2JDIiLCJ0b19qdiQzIiwib2ZfanYkMyIsInBhdGgkMiIsInRvX2p2JDQiLCJvZl9qdiQ0IiwiY29sbGVjdGlvbl90eXBlIiwicGF0aCQzIiwidG9fanYkNSIsIm9mX2p2JDUiLCJnZXRfa2V5IiwiZ2V0JDYiLCJzdHJpbmciLCJzZXQkMSIsImNvbm5leGlvbnMiLCJjb25uZWN0JDAiLCJyZWZyZXNoIiwiY29ubmV4aW9uIiwic2VydmVyX2lkIiwicmVwb3J0IiwicHJldmlvdXNfc3RhdHVzIiwicmVtYWluaW5nIiwicmVtYWluaW5nJDAiLCJzZXJ2ZXJzX3dpdGhfc3RhdHVzIiwic2VydmVyIiwibmV3X2Nvbm5leGlvbiIsInNlcnZlcnMiLCJ1cmxfZmllbGQiLCJwYXNzd29yZF9maWVsZCIsInN1Ym1pdCQxIiwidWlfZm9ybSIsInVybCIsInVpX3N0YXR1cyIsInN5bmNfcHJvZ3Jlc3MiLCJmdXRfdG9fbHdkIiwic2VydmVyc19saWJyYXJpZXMiLCJ1aSIsInN0YXR1c2VzIiwidWlfZm9ybSQwIiwibm93X3BsYXlpbmciLCJhdWRpb191cmwiLCJpdGVtX2lkIiwic2V0X3BsYXlfdXJsIiwicGxheWxpc3QiLCJjdXJyZW50X2luZGV4IiwicGxheWxpc3QkMCIsIml0ZW0iLCJhbGJ1bV9pZCIsInNlc3Npb24iLCJpbWFnZV9pZCIsImltZ19zcmMiLCJyZXNldF9wbGF5bGlzdCIsIm1ha2UiLCJhdWRpb19lbHQiLCJzZXRfc3JjIiwibmV4dF9pbmRleCIsInNldF9wb3NpdGlvbl9zdGF0ZSQwIiwib25fZXJyb3IiLCJuZXh0JDAiLCJidG5fbmV4dCIsInN0eWxlJDAiLCJucCIsInRyYWNrX2NvdmVyIiwidHh0JDAiLCJ0aXRsZSIsInRyYWNrX2RldGFpbHMiLCJub3dfcGxheWluZyQwIiwiYXQkMiIsIm1ha2UkMTEiLCJvbl9jbGljayQwIiwiY29sdW1ucyIsIm1ha2UkMTIiLCJpbWdfdXJsIiwic3RhcnRfaW5kZXgiLCJpbWFnZV9ibHVyX2hhc2hlcyIsInBsYXlfZnJvbSIsInBsYXlfb25fY2xpY2siLCJpbWdfdXJsJDAiLCJwbGFjZWhvbGRlciIsInJlbmRlciQwIiwibWFrZV9ub3dfcGxheWluZyIsImZldGNoJDEiLCJwbCIsInBsYXllciIsInBsYXllcl91aSIsImZfc2VhcmNoIiwiZl9zb3J0IiwiY2hvaWNlcyIsImZfbGlicmFyaWVzIiwiZl92YWx1ZSIsIm1haW5fdmlldyIsIm1haW5fbGlzdCIsImFwcCIsImlzX3N0b3JhZ2VfcGVyc2lzdGVudCIsIm9uX2xvYWQiLCJhcHAkMCJdLCJzb3VyY2VzIjpbIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLyttbEJ5dGVzLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK2JpZ2FycmF5LmpzIiwiL2J1aWx0aW4vK2ludHMuanMiLCIvYnVpbHRpbi8raGFzaC5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rZm9ybWF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rZnMuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2xleGluZy5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raW8uanMiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9sZXhpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9wcmludGV4Yy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9jb21wbGlhbnRfbGV4eGVyLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYXRhX3NvdXJjZS9qZWxseWZpbl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3N0b3Jlcy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvc3luYy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vbGFuZy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vd29ya2VyX2NsaWVudC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vc2VydmVycy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vcGxheWVyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0QmFzaWNzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsQXRvbWljLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RkbGliLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0ludC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2xpc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9vYmoubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxMYXp5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvb3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcmVzdWx0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0NoYXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jaGFyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvaW50Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYnl0ZXMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdHJpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9hcnJheS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3NldC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0YWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcXVldWUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdHJlYW0ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9idWZmZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9wcmludGYubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3lvanNvbl9jb252X2Vycm9yLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZnVuLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZGlnZXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvaGFzaHRibC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2Zvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbGxiYWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNfb2Zfb2NhbWwtY29tcGlsZXIvcnVudGltZS9qc29vX3J1bnRpbWUubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvZm9ybXMvZmllbGQubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2JycmVyL2RvbV9yZWN0X3JlYWRfb25seS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyZXIvcmVzaXplX29ic2VydmVyLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJlci9tZWRpYV9zZXNzaW9uLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJlci9icnJlci5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvbHdkL2xpYi9sd2QvbHdkLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2x3ZC9sd2RfdXRpbHMubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZF90YWJsZS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvbHdkL2xpYi9sd2QvbHdkX3NlcS5wcC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvbHdkL2xpYi9icnItbHdkL2Vsd2QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDQXJyYXkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDRmxvYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDSGFzaHRibC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NMaXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ09wdGlvbi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NSYW5kb20ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDUmVzdWx0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1NldC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NTdHJpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvbGV4eGVyX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2Vycm9yX2luZm8ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvanNvbl9mbG9hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wYXJzZXJfdG9vbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcGFyc2VyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3ByZXR0eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wcm9jZXNzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3Rva2VuX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3JlYWRlcl9zdHJpbmdfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3lvanNvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3RkL3N0ZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9hdHRycy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS91dGlscy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9jb250cm9sbGVkX3Njcm9sbC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS90YWJsZS9zY2hlbWEubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvdGFibGUvdmlydHVhbF90YWJsZS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS90cmFuc2xhdGVkLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL3BlcnNpc3RlbnQubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvZm9ybXMvZm9ybS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9mb3Jtcy9maWVsZF90ZXh0aW5wdXQubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvZm9ybXMvZmllbGRfc2VsZWN0Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2ZpZWxkX2NoZWNrYm94ZXMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvYnV0dG9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIvcHB4X3lvanNvbl9jb252X2xpYi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGF0YV9zb3VyY2UvamVsbHlmaW4ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3dvcmtlcl9hcGkvd29ya2VyX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvdmlldy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvZGJfd29ya2VyX2FwaS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMtZGF0YS9DQ011bHRpTWFwLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9pbXBvcnQubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3VpLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi91aV9wbGF5bGlzdC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vbWFpbi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0ZF9leGl0Lm1sIl0sIm1hcHBpbmdzIjoiOztBLEM7O0c7OztRO1M7OztHO0k7STtJO0c7RTs7OztHQXFEQSxTQUFTQSxnQkFBZ0JDLElBQUlDLElBQUlDLElBQUlDLElBQUlDO0lBQ3ZDLEdBQUlELE1BQU1GO0tBQUksSUFDRCxJQUFGSSxPQUFP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V0FDOzs7Ozs7Ozs7Ozs7O0lDSEpDO0lBb0JFQztJQUdBQztJQXNCQUM7SUFLQUM7SUFtSEFDO0lDeEpBQztJQUdBQztJQWdDTUM7SUFRQUM7SUFvQ0ZDO0lDWEZDO0lDekdFQzs7OztJQ0pBQztJQ3VEQUM7SUNRY0M7SUFDQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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TTtHQ3VJcUIsZSxVO0c7d0IscUI7O0k7SSxPO0c7Rzs7STtJLE87RzswQixpQzs4QjtHO0csSSxlO3VCLDRCOzRCLGlDOztJO0k7Rzt5QixzQjs7SSw0QjtHOztJLFk7O0ksTzs7Rzs7SSxZOztJO0k7O0c7d0IsTSxPO3lCLGMsTzs7SSxZOztJOzt3QixZOzJCLFUsTzs7SSxZOztJOzs4Qjt3Qiw4Qjt3QixxQjs7STtJLDZCLE8sdUI7Rzs7Ozs7b0I7O00sVTs7OztJO0c7O0k7SSxXOztJO0k7Rzs7STtJLE8seUIsVTtHO0c7OztLLE87NkIsTyxPLGUsTyxPO0k7SSxtQjtHO3VCLE8sbUI7O0ksTztJO0c7eUIsTyxPLHNDOztJLE87YTthO0c7O0ksTztHO1lDM0ZuQkMsYzt1QjttQixnQjt5QixrQjs7STtLLE07STtJLHVCLCtDO0k7SSxxQyw4QjtJO29CLHVEO0k7RzswQixnQzt3Qix1Qjs7STs7OzJCLGlCLG1CO0c7O0ksNkIsZ0IsbUI7RztrQix3Qjs7cUIsbUIsb0I7SSxvQixtQix1QjtJO0c7O0kscUM7Rzt5QixvQjs7SSxzQjs7YyxlOztjLE87YTtHOztJLDRCLE9yQjNDRnJ2QjtHO0c7c0IscUI7MEMsOEI7RzsrQixvQixTOztJO0ksVTs7SztLO0k7STtJO0c7K0IsTyx3QjtHO0k7STtJO0k7STtJO0k7STtJO0c7RztHO0c7RztzQixPLGtCOztJLEksUTs7Ozs7Szs7STtHO0c7RztHO0c7Rzs7SSxXOztJO0c7Rzt1QixPLGE7c0Isa0I7O0k7STtJO0c7eUIsTyxhOztJLEk7Ozs7O0s7O0k7RztzQixpQjtHO3dCLHVCO3NCLHFCO3dCLGlDOzBCO0c7STtJO0k7STtJO0k7STtJO0k7STtJO0k7STtJO3VCLHVCO3FCLHFCO29CLG9CO0csSSwrQjtxQixtQjt1QixxQjtzQixvQjt1Qix1Qjt1Qix1QjtHO3dCLDBCO0csK0I7dUIsa0IsUzs7Ozs7O08sNkJKbUNBVztPOztNOzs7Szs7O00sSTs7NEI7OztVOzs7O0k7STtJLFE7STtJLHNCO0k7Rzs7STtJLE87Rzs7STtJO0c7O0ksa0I7MEIsd0I7STtJO0c7MkIsZ0M7O0ksMEM7Rzt1QixvQixPLHVCOztJLFksK0I7Rzs7STtJLEksUSx1QjtJO0c7d0Isc0I7O0k7STtJO0k7RztHO0k7STtJO0k7STtJO0k7STtJO0k7STtvQyw0QjtHLG1DO0csaUM7RyxnQztHLGtDO29CLDhCOztJO0k7Ozs7O0c7O0ksZ0M7RztrQyxrQyxPO0c7O0k7OztvQjs7TTtNLEk7OztJLE87RztxQixnRDt5QixnRDtzQixnRDt5QixTO3NCLE8sUTtHO0c7STtJO0k7Rzs7SSxPLGtCO0c7NEIsMEIsTzs7SSw2QjtJO0c7RztHOzRCOztJLG1DLGU7RztHOztJO0ksUztJOztLO0s7O0ksc0I7STtHOzs7Ozs7Ozs7Ozs7Ozs7STtJLG9EO0k7STtJLHFCR3BDQWQsbUI7STtJO0k7STtJO0k7STtJLG9EO0k7RztHOztJO0k7RztHO0c7O3dCO0ksc0Isa0M7RztHO0c7RztHO0c7b0IsaUI7RztxQix5Qjs7d0I7SSxzQiwrQjtHOztJLEksaUI7OzswQjs7O0c7RztHOztJO0k7Rzs7STtJO0k7RztHOztJO0k7STtHO0c7RztHO1l1QmhCQXFGLE9BQU83b0IsR0FBSSxPQUFKQSxZQUFrQzt1QjtZQ2lCdkNpekMsYUFBYWp6QyxHQUFJLFlBQUpBLGtCQUFzRDtZQUtuRWt6QyxTQUFPbHpDLEdBQUksT0FBSkEsY0FBaUM7WUFLMUNtekM7SUFBZ0I7O09BQ0Q7O09BQ0Q7ZUFDYzs7R0FBMEI7WUFJdERDLFFBQVFwekMsR0FBR3F6QyxLQUVQampDO0lBRE4sR0FEYWlqQztLQU1HO01BRFBsMEMsSUFMSWswQztNQU1IQyxtQkFiUkgsY0FZT2gwQztNQUpMaUQsV0FDRWdPLFFBSUlrakM7O1NBTE5seEMsV0FDRWdPO0lBT04sa0JBVFVwUSxjQUNOb0M7SUFRSjtHQUFrQztZQU1oQ214QyxTQUFRQzthQUNOQyxXQUFTQyxTQUFRQztLQUNMLElBQVZDLHFDLGVBRE9GO0tBRVgsT0FBQSxXQUhRRixVQUVKSSxXQURlRDtJQUVjO0lBR25DLG9DQUxJRjtHQUs0QztZQ3hEOUNJLGFBQWFsMEMsR0FB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OVcsT0FBQUE7OztRQVpGc3VELHFCQVNnQnp0RCxPQTBCK0MsZ0JBMUIvQ0EsR0FRbEJSLEtBQUFBOzs7TUFBQSxXQUFBQTtrQkFBQUE7VUFBQUE7OztxQkFGSXlXLFVBZkZ3M0MscUJBU2dCenRELE1BQ2RLO1dBRUFsQixTQUZBa0IseUJBQ0F5a0IsUUFDQTNsQixTQUhjYTtHQWlFK0M7O0ksYTtJO0c7O2F6RDBHM0Q4dEQsZ0JBQUsxNEM7S0FDVjtLQUFBO01BQUEsT0FBQSx1QkFDQzI0Qyx3QkFGUzM0Qzs7S0FDVixPQUNDMjRDLDhCQUZTMzRDO0lBQ21CO2FBRHhCdkUsS0FBS3VFLFEsdUJBQUwwNEMsVUFBSzE0QzthQUVUMjRDLDRCQUFxQjM0QyxRQUFPNDRDO0tBQzlCLElBRDhCQyxvQkFBQUQ7S0FDOUI7TUFBTTtPQUR3QkUsMkJBeE81Qjd4QyxrQkF3TzRCNHhDLG1CQUFQNzRDO2VBQU84NEM7Y0FBQUE7O1U7O1U7O1U7O1U7O1U7O1U7O1U7O1UsTzs7b0J5RHBRNUJ4QixxQ3pEb1FxQnQzQzs7VSxPOztvQnlEcFFyQnMzQyxxQ3pEb1FxQnQzQzs7VSxPOztvQnlEcFFyQnMzQyxxQ3pEb1FxQnQzQzs7VSxPOztvQnlEcFFyQnMzQyxxQ3pEb1FxQnQzQzs7VTs7VTs7VSxPOztVLE87O1UsTzs7VSxPOztVLFV5RHhQckIwM0Msa0J6RHdQcUIxM0M7Ozs7YyxPOztjLE87O1U7O1UsZSw0QkFBQUE7VSxPOztVOztVQTRIdkIsbUJBNUh1QkEsUUFBQUEsbUJBQUFBO1UsV3lEN0tyQnU0Qzs7VTs7VTtXLE8sdUJ6RDJLSUcsWUFFaUIxNEM7O1UsT0FGakIwNEMsa0JBRWlCMTRDOztVeURwUHJCMjNDLFd6RG9QcUIzM0M7VTtXLE8sdUJBRmpCMDRDLFlBRWlCMTRDOztVLE9BRmpCMDRDLGtCQUVpQjE0Qzs7VSxZO2lEO1VBMEtyQis0QyxhQTFLcUIvNEM7VTtXLE8sdUJBRmpCMDRDLFlBRWlCMTRDOztVLE9BRmpCMDRDLGtCQUVpQjE0Qzs7VSxjO3VEO1U7VyxPLHVCQUZqQjA0QyxZQUVpQjE0Qzs7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b0hicjFELGNrRnJINENxMUQsTUFDSzs7S0FDNUM7R0FLSDt1QnZGc0ZGOUM7SXVGdEZFO0lBSEExckM7TTlDc1NGOGhCO0k4Q2hTSTJzQjtJQURGQztNOUNpU0Y1c0I7Ozs7b0I4Q2hTSTJzQjtJQUdGRSxXZDlCRmhVO0ljb0NJRyxVbERnQkpudEIsS0c2aEJBa1E7SStDL2lCRSt3QixTYm5DRi9ULG1CYXFDSUM7SUFZRStUO00vQzhnQk50eEI7O1MrQzVnQk0sSUFDTS9sRDtTQUNTLE9sRFdyQncyQztrQmtEWll4MkM7MkJBQ2NBO21CQUNkLE8vQ3loQlpvbUQ7NEIrQzFoQjBCcG1EO3FDQUNnQkE7NkJBRUwsOEJBRktBOzZCQUV2QixPL0MxRG5CNmdELFkrQ3dEMEM3Z0Q7NEJBRThCO2tCQUFDO1FBQUU7O1NsREozRWsyQyxTR3hEQTBLOztvQyxPSDBFQWxLO1VrRGJpQyxzQixrQi9DMUNqQ3NLOztReENvRkFpekI7SXVGcERJcUQsY1o1Q0o1VCxrQnRDcUZBNTRDLEtrRHZDTXVzRDtJQUhKdEg7TTlDOFFGemxCOzs7OztpQjhDelJFOHNCO3FCQUpBRCwwQkFnQkVHO0lBRE9DLFVBQ1BEO0lBb0JGRTtNckJqQkZqYztpQnFCa0IwRHY3RCxHQUFFWSxHQUFFakI7U0FDMUQ7VUFBSW93RSxVekNrR056a0IsbUJ5Q2xHZ0MzckQsR0FBSyxlQUFMQSxPQUF5QixHQURDaUI7MEJBQUVqQjtxQ0FBSks7U0FFdEQsOENBRndEWTtTQVU3QyxJQUFQZ21CLE9OckZOOG9ELGVNMkU0RC92RTtTQVl4RCxpQk41Q05pd0UsZU1nQzBENXZFLFNBVWxENG1CLE9BVEFtcEQ7UUFXcUU7UUFsQ2xFd0g7UUFmVEo7UUFJQUM7SUFnREFLLFlEL0VGcEIsY0NIQVUsWUFrRUVTO0lBb0JFN0M7TWxEdkJKbitCO1FBME5BcUM7O1NrRGxNaUQsWUFDekIsTzlDOFJ4QmdTO1M4QzNSVSxJQUZDNHBCLHFCQUVELE9sRHZDVnQrQixRa0RxQ1dzK0I7U0FFRCxPRHBCVnFDLHVCQ3ZFQUM7UUEyRnVDO0lBTnJDZixnQmxERUZsckQsS2tEREk2cEQ7Ozs7O1E5Q3FPSnJxQjs7OztzQjhDdE9FMHJCO21CQTNEQWtCO0lBd0VGOztlQTdFRTF1Qzs7OztTOUNzU0Y4aEI7Ozs7dUI4QzlRRXlsQixzQkFxQ0EwSDs7SUE1RUZDO005Q3FUQXB0Qjs7MkIsT3dCblNBNFAsc0JBSUFFOzs7SXNCaUZBdWQsd0JuRHRFTTVoQyxRQUdGQztZbUR1RUY0aEM7SUFDRixrQkFMQUQ7SUFNVSxJQUFORSxRbEQ2ZUoxOEIsYWtEMWxCQXU4QjtJQThHQSxTQUFJdDhCO0tBQ0Ysd0NsRGlqQkZXLGFrRG5qQkk4N0IsUUFHb0IsU0FBb0I7S0FEaEM7SUFDZ0M7SUFFRSxlbEQ4aUI5Qzk3Qixha0RuakJJODdCO0lBS0o7SUFBQSxPbERvaUJBbDhCLGtCa0R6aUJJazhCLE9BQ0F6OEI7R0FLbUM7R0FFekMsOEJBVkl3OEI7R25GcWJGbDBEOztFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YiAoYSwgaSwgbGVuKSB7XG4gIHZhciBhMiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGEyWzBdPTA7XG4gIGZvcih2YXIgaTIgPSAxLCBpMT0gaSsxOyBpMiA8PSBsZW47IGkyKyssaTErKyApe1xuICAgIGEyW2kyXT1hW2kxXTtcbiAgfVxuICByZXR1cm4gYTI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYXBwZW5kIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICB2YXIgbDEgPSBhMS5sZW5ndGgsIGwyID0gYTIubGVuZ3RoO1xuICB2YXIgbCA9IGwxK2wyLTFcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsaiA9IDE7XG4gIGZvcig7aTxsMTtpKyspIGFbaV09YTFbaV07XG4gIGZvcig7aTxsO2krKyxqKyspIGFbaV09YTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NvbmNhdCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2NvbmNhdChsKSB7XG4gIHZhciBhID0gWzBdO1xuICB3aGlsZSAobCAhPT0gMCkge1xuICAgIHZhciBiID0gbFsxXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGIubGVuZ3RoOyBpKyspIGEucHVzaChiW2ldKTtcbiAgICBsID0gbFsyXTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+PSAxOyBqLS0pIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vLy8vLy8vLy8vLy8gUGVydmFzaXZlXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3NldCAobXV0YWJsZSwgY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2FycmF5X3NldCAoYXJyYXksIGluZGV4LCBuZXd2YWwpIHtcbiAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS5sZW5ndGggLSAxKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBhcnJheVtpbmRleCsxXT1uZXd2YWw7IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2dldCBtdXRhYmxlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfZ2V0IChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS5sZW5ndGggLSAxKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXlbaW5kZXgrMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfZmlsbFxuZnVuY3Rpb24gY2FtbF9hcnJheV9maWxsKGFycmF5LCBvZnMsIGxlbiwgdil7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgYXJyYXlbb2ZzK2krMV0gPSB2O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoZWNrX2JvdW5kIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfY2hlY2tfYm91bmQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoaW5kZXggPj4+IDAgPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV92ZWN0IChsZW4sIGluaXQpIHtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSBpbml0O1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX2Zsb2F0X3ZlY3QgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX2Zsb2F0X3ZlY3QobGVuKXtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9jcmVhdGUobGVuKXtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiXG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLyBBbiBPQ2FtbCBzdHJpbmcgaXMgYW4gb2JqZWN0IHdpdGggdGhyZWUgZmllbGRzOlxuLy8gLSB0YWcgJ3QnXG4vLyAtIGxlbmd0aCAnbCdcbi8vIC0gY29udGVudHMgJ2MnXG4vL1xuLy8gVGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcgY2FuIGJlIGVpdGhlciBhIEphdmFTY3JpcHQgYXJyYXkgb3Jcbi8vIGEgSmF2YVNjcmlwdCBzdHJpbmcuIFRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmcgY2FuIGJlIGxlc3MgdGhhbiB0aGVcbi8vIGxlbmd0aCBvZiB0aGUgT0NhbWwgc3RyaW5nLiBJbiB0aGlzIGNhc2UsIHJlbWFpbmluZyBieXRlcyBhcmVcbi8vIGFzc3VtZWQgdG8gYmUgemVyb2VzLiBBcnJheXMgYXJlIG11dGFibGUgYnV0IGNvbnN1bWVzIG1vcmUgbWVtb3J5XG4vLyB0aGFuIHN0cmluZ3MuIEEgY29tbW9uIHBhdHRlcm4gaXMgdG8gc3RhcnQgZnJvbSBhbiBlbXB0eSBzdHJpbmcgYW5kXG4vLyBwcm9ncmVzc2l2ZWx5IGZpbGwgaXQgZnJvbSB0aGUgc3RhcnQuIFBhcnRpYWwgc3RyaW5ncyBtYWtlcyBpdFxuLy8gcG9zc2libGUgdG8gaW1wbGVtZW50IHRoaXMgZWZmaWNpZW50bHkuXG4vL1xuLy8gV2hlbiBjb252ZXJ0aW5nIHRvIGFuZCBmcm9tIFVURi0xNiwgd2Uga2VlcCB0cmFjayBvZiB3aGV0aGVyIHRoZVxuLy8gc3RyaW5nIGlzIGNvbXBvc2VkIG9ubHkgb2YgQVNDSUkgY2hhcmFjdGVycyAoaW4gd2hpY2ggY2FzZSwgbm9cbi8vIGNvbnZlcnNpb24gbmVlZHMgdG8gYmUgcGVyZm9ybWVkKSBvciBub3QuXG4vL1xuLy8gVGhlIHN0cmluZyB0YWcgY2FuIHRodXMgdGFrZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcbi8vICAgZnVsbCBzdHJpbmcgICAgIEJZVEUgfCBVTktOT1dOOiAgICAgIDBcbi8vICAgICAgICAgICAgICAgICAgIEJZVEUgfCBBU0NJSTogICAgICAgIDlcbi8vICAgICAgICAgICAgICAgICAgIEJZVEUgfCBOT1RfQVNDSUk6ICAgIDhcbi8vICAgc3RyaW5nIHByZWZpeCAgIFBBUlRJQUw6ICAgICAgICAgICAgIDJcbi8vICAgYXJyYXkgICAgICAgICAgIEFSUkFZOiAgICAgICAgICAgICAgIDRcbi8vXG4vLyBPbmUgY2FuIHVzZSBiaXQgbWFza2luZyB0byBkaXNjcmltaW5hdGUgdGhlc2UgZGlmZmVyZW50IGNhc2VzOlxuLy8gICBrbm93bl9lbmNvZGluZyh4KSA9IHgmOFxuLy8gICBpc19hc2NpaSh4KSA9ICAgICAgIHgmMVxuLy8gICBraW5kKHgpID0gICAgICAgICAgIHgmNlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfc3RyX3JlcGVhdChuLCBzKSB7XG4gIGlmKG4gPT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChzLnJlcGVhdCkge3JldHVybiBzLnJlcGVhdChuKTt9IC8vIEVDTUFzY3JpcHQgNiBhbmQgRmlyZWZveCAyNCtcbiAgdmFyIHIgPSBcIlwiLCBsID0gMDtcbiAgZm9yKDs7KSB7XG4gICAgaWYgKG4gJiAxKSByICs9IHM7XG4gICAgbiA+Pj0gMTtcbiAgICBpZiAobiA9PSAwKSByZXR1cm4gcjtcbiAgICBzICs9IHM7XG4gICAgbCsrO1xuICAgIGlmIChsID09IDkpIHtcbiAgICAgIHMuc2xpY2UoMCwxKTsgLy8gZmxhdHRlbiB0aGUgc3RyaW5nXG4gICAgICAvLyB0aGVuLCB0aGUgZmxhdHRlbmluZyBvZiB0aGUgd2hvbGUgc3RyaW5nIHdpbGwgYmUgZmFzdGVyLFxuICAgICAgLy8gYXMgaXQgd2lsbCBiZSBjb21wb3NlZCBvZiBsYXJnZXIgcGllY2VzXG4gICAgfVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuLy9XZWFrZGVmXG4vLyBQcmUgRUNNQVNjcmlwdCA1LCBbYXBwbHldIHdvdWxkIG5vdCBzdXBwb3J0IGFycmF5LWxpa2Ugb2JqZWN0LlxuLy8gSW4gc3VjaCBzZXR1cCwgVHlwZWRfYXJyYXkgd291bGQgYmUgaW1wbGVtZW50ZWQgYXMgcG9seWZpbGwsIGFuZCBbZi5hcHBseV0gd291bGRcbi8vIGZhaWwgaGVyZS4gTWFyayB0aGUgcHJpbWl0aXZlIGFzIFdlYWtkZWYsIHNvIHRoYXQgcGVvcGxlIGNhbiBvdmVycmlkZSBpdCBlYXNpbHkuXG5mdW5jdGlvbiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKGEsIGksIGxlbikge1xuICB2YXIgZiA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gIGlmIChpID09IDAgJiYgbGVuIDw9IDQwOTYgJiYgbGVuID09IGEubGVuZ3RoKSByZXR1cm4gZi5hcHBseSAobnVsbCwgYSk7XG4gIHZhciBzID0gXCJcIjtcbiAgZm9yICg7IDAgPCBsZW47IGkgKz0gMTAyNCxsZW4tPTEwMjQpXG4gICAgcyArPSBmLmFwcGx5IChudWxsLCBhLnNsaWNlKGksaSArIE1hdGgubWluKGxlbiwgMTAyNCkpKTtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmOF9vZl91dGYxNlxuZnVuY3Rpb24gY2FtbF91dGY4X29mX3V0ZjE2KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBiLCBjLCBkLCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYyA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgKGogPCBsKSAmJiAoYyA9IHMuY2hhckNvZGVBdChqKSkgPCAweDgwOyBqKyspO1xuICAgICAgaWYgKGogLSBpID4gNTEyKSB7IHQuc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiOyBiICs9IHMuc2xpY2UoaSwgaikgfVxuICAgICAgZWxzZSB0ICs9IHMuc2xpY2UoaSwgaik7XG4gICAgICBpZiAoaiA9PSBsKSBicmVhaztcbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhjMCB8IChjID4+IDYpKTtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfSBlbHNlIGlmIChjIDwgMHhkODAwIHx8IGMgPj0gMHhkZmZmKSB7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhlMCB8IChjID4+IDEyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA+PSAweGRiZmYgfHwgaSArIDEgPT0gbCB8fFxuICAgICAgICAgICAgICAgKGQgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBkID4gMHhkZmZmKSB7XG4gICAgICAvLyBVbm1hdGNoZWQgc3Vycm9nYXRlIHBhaXIsIHJlcGxhY2VkIGJ5IFxcdWZmZmQgKHJlcGxhY2VtZW50IGNoYXJhY3RlcilcbiAgICAgIHQgKz0gXCJcXHhlZlxceGJmXFx4YmRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgYyA9IChjIDw8IDEwKSArIGQgLSAweDM1ZmRjMDA7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhmMCB8IChjID4+IDE4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDEyKSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfVxuICAgIGlmICh0Lmxlbmd0aCA+IDEwMjQpIHt0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjt9XG4gIH1cbiAgcmV0dXJuIGIrdDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91dGYxNl9vZl91dGY4XG5mdW5jdGlvbiBjYW1sX3V0ZjE2X29mX3V0Zjgocykge1xuICBmb3IgKHZhciBiID0gXCJcIiwgdCA9IFwiXCIsIGMsIGMxLCBjMiwgdiwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMxID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjMSA8IDB4ODApIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgKGogPCBsKSAmJiAoYzEgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgdiA9IDE7XG4gICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkpIHtcbiAgICAgIGMgPSBjMiArIChjMSA8PCA2KTtcbiAgICAgIGlmIChjMSA8IDB4ZTApIHtcbiAgICAgICAgdiA9IGMgLSAweDMwODA7XG4gICAgICAgIGlmICh2IDwgMHg4MCkgdiA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2ID0gMjtcbiAgICAgICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkpIHtcbiAgICAgICAgICBjID0gYzIgKyAoYyA8PCA2KTtcbiAgICAgICAgICBpZiAoYzEgPCAweGYwKSB7XG4gICAgICAgICAgICB2ID0gYyAtIDB4ZTIwODA7XG4gICAgICAgICAgICBpZiAoKHYgPCAweDgwMCkgfHwgKCh2ID49IDB4ZDdmZikgJiYgKHYgPCAweGUwMDApKSkgdiA9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHYgPSAzO1xuICAgICAgICAgICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkgJiZcbiAgICAgICAgICAgICAgICAoYzEgPCAweGY1KSkge1xuICAgICAgICAgICAgICB2ID0gYzIgLSAweDNjODIwODAgKyAoYyA8PCA2KTtcbiAgICAgICAgICAgICAgaWYgKHYgPCAweDEwMDAwIHx8IHYgPiAweDEwZmZmZikgdiA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2IDwgNCkgeyAvLyBJbnZhbGlkIHNlcXVlbmNlXG4gICAgICBpIC09IHY7XG4gICAgICB0ICs9IFwiXFx1ZmZmZFwiO1xuICAgIH0gZWxzZSBpZiAodiA+IDB4ZmZmZilcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGQ3YzAgKyAodiA+PiAxMCksIDB4ZGMwMCArICh2ICYgMHgzRkYpKVxuICAgIGVsc2VcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2KTtcbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29faXNfYXNjaWlcbmZ1bmN0aW9uIGpzb29faXNfYXNjaWkgKHMpIHtcbiAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBnZXRzIGJldHRlciBhdCBhcm91bmQgdGhpcyBwb2ludCBmb3IgYWxsIGJyb3dzZXJzXG4gIGlmIChzLmxlbmd0aCA8IDI0KSB7XG4gICAgLy8gU3BpZGVybW9ua2V5IGdldHMgbXVjaCBzbG93ZXIgd2hlbiBzLmxlbmd0aCA+PSAyNCAob24gNjQgYml0IGFyY2hzKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgaWYgKHMuY2hhckNvZGVBdChpKSA+IDEyNykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2VcbiAgICByZXR1cm4gIS9bXlxceDAwLVxceDdmXS8udGVzdChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSkge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGlmIChpID49IHMuYy5sZW5ndGgpIHJldHVybiAwO1xuICBjYXNlIDA6IC8qIEJZVEVTICovXG4gICAgcmV0dXJuIHMuYy5jaGFyQ29kZUF0KGkpO1xuICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgcmV0dXJuIHMuY1tpXVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgLy8gVGhlIE9DYW1sIGNvbXBpbGVyIHVzZXMgQ2hhci51bnNhZmVfY2hyIG9uIGludGVnZXJzIGxhcmdlciB0aGFuIDI1NSFcbiAgYyAmPSAweGZmO1xuICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIHtcbiAgICBpZiAoaSA9PSBzLmMubGVuZ3RoKSB7XG4gICAgICBzLmMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoYyk7XG4gICAgICBpZiAoaSArIDEgPT0gcy5sKSBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LT1dOKi9cbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkgKHMpO1xuICB9XG4gIHMuY1tpXSA9IGM7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvciwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQgKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQxNihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDMyKHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSAzKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDEpLFxuICAgICAgYjMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCB8IGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDMyKHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpLFxuICAgICAgYjMgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAyKSxcbiAgICAgIGI0ID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQ2NChzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gNykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspe1xuICAgIGFbNyAtIGpdID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspe1xuICAgIGFbNyAtIGpdID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldCAocywgaSwgYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMSkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjIgPSAweEZGICYgaTE2ID4+IDgsXG4gICAgICBiMSA9IDB4RkYgJiBpMTY7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMSwgYjIpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQxNihzLGksaTE2KXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDE2XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQxNlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDE2KHMsaSxpMTYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MzIocyxpLGkzMil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGI0ID0gMHhGRiAmIGkzMiA+PiAyNCxcbiAgICAgIGIzID0gMHhGRiAmIGkzMiA+PiAxNixcbiAgICAgIGIyID0gMHhGRiAmIGkzMiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTMyO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMiwgYjMpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAzLCBiNCk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDMyKHMsaSxpMzIpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0MzJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0MzIocyxpLGkzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoaTY0KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKykge1xuICAgIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDcgLSBqLCBhW2pdKTtcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQ2NChzLGksaTY0KXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDY0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQ2NFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDY0KHMsaSxpNjQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldCAocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSwgYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmOF9vZl91dGYxNiwgTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyAocykge1xuICB2YXIgdGFnID0gOSAvKiBCWVRFUyB8IEFTQ0lJICovO1xuICBpZiAoIWpzb29faXNfYXNjaWkocykpXG4gICAgdGFnID0gOCAvKiBCWVRFUyB8IE5PVF9BU0NJSSAqLywgcyA9IGNhbWxfdXRmOF9vZl91dGYxNihzKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRhZywgcywgcy5sZW5ndGgpO1xufVxuXG5cbi8vUHJvdmlkZXM6IE1sQnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIGpzb29faXNfYXNjaWksIGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gTWxCeXRlcyAodGFnLCBjb250ZW50cywgbGVuZ3RoKSB7XG4gIHRoaXMudD10YWc7IHRoaXMuYz1jb250ZW50czsgdGhpcy5sPWxlbmd0aDtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKXtcbiAgc3dpdGNoICh0aGlzLnQpIHtcbiAgY2FzZSA5OiAvKkJZVEVTIHwgQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyh0aGlzKTtcbiAgY2FzZSAwOiAvKkJZVEVTIHwgVU5LT1dOKi9cbiAgICBpZiAoanNvb19pc19hc2NpaSh0aGlzLmMpKSB7XG4gICAgICB0aGlzLnQgPSA5OyAvKkJZVEVTIHwgQVNDSUkqL1xuICAgICAgcmV0dXJuIHRoaXMuYztcbiAgICB9XG4gICAgdGhpcy50ID0gODsgLypCWVRFUyB8IE5PVF9BU0NJSSovXG4gIGNhc2UgODogLypCWVRFUyB8IE5PVF9BU0NJSSovXG4gICAgcmV0dXJuIHRoaXMuYztcbiAgfVxufTtcbk1sQnl0ZXMucHJvdG90eXBlLnRvVXRmMTYgPSBmdW5jdGlvbiAoKXtcbiAgdmFyIHIgPSB0aGlzLnRvU3RyaW5nKCk7XG4gIGlmKHRoaXMudCA9PSA5KSByZXR1cm4gclxuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHIpO1xufVxuTWxCeXRlcy5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoKXtcbiAgdmFyIGNvbnRlbnQgPSB0aGlzLnQgPT0gNCA/IHRoaXMuYy5zbGljZSgpIDogdGhpcy5jO1xuICByZXR1cm4gbmV3IE1sQnl0ZXModGhpcy50LGNvbnRlbnQsdGhpcy5sKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMgKHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQllURVMgKi9cbiAgaWYgKHMudCA9PSAyIC8qIFBBUlRJQUwgKi8pXG4gICAgcy5jICs9IGNhbWxfc3RyX3JlcGVhdChzLmwgLSBzLmMubGVuZ3RoLCAnXFwwJylcbiAgZWxzZVxuICAgIHMuYyA9IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyAocy5jLCAwLCBzLmMubGVuZ3RoKTtcbiAgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEFSUkFZICovXG4gIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkocy5sKTtcbiAgdmFyIGIgPSBzLmMsIGwgPSBiLmxlbmd0aCwgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gYi5jaGFyQ29kZUF0KGkpO1xuICBmb3IgKGwgPSBzLmw7IGkgPCBsOyBpKyspIGFbaV0gPSAwO1xuICBzLmMgPSBhO1xuICBzLnQgPSA0OyAvKiBBUlJBWSAqL1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMgKHMpIHtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gIHJldHVybiBzLmM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyAocykge1xuICB2YXIgbCA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShsKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocyxpKTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGlmKGxlbiA8IDApIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcyxjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2J5dGVzKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQnl0ZXMuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuPzI6OSxcIlwiLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2FycmF5IChhKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhhLDAsYS5sZW5ndGgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9hcnJheSAoYSkge1xuICBpZighIChhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICBhID0gbmV3IFVpbnQ4QXJyYXkoYSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKDQsYSxhLmxlbmd0aCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfY29tcGFyZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2NvbXBhcmUoczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8IHMyLmMpPy0xOihzMS5jID4gczIuYyk/MTowO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jID09IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX25vdGVxdWFsKHMxLCBzMikgeyByZXR1cm4gMS1jYW1sX3N0cmluZ19lcXVhbChzMSwgczIpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9ieXRlc19lcXVhbChzMSwgczIpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPD0gczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMixzMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczIsczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9BbGlhczogY2FtbF9maWxsX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT0gMCAmJiAobCA+PSBzLmwgfHwgKHMudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbCA+PSBzLmMubGVuZ3RoKSkpIHtcbiAgICAgIGlmIChjID09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0IChsLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICAgICAgcy50ID0gKGwgPT0gcy5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JsaXRfYnl0ZXMoczEsIGkxLCBzMiwgaTIsIGxlbikge1xuICBpZiAobGVuID09IDApIHJldHVybiAwO1xuICBpZiAoKGkyID09IDApICYmXG4gICAgICAobGVuID49IHMyLmwgfHwgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpKSB7XG4gICAgczIuYyA9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2UgaWYgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09IHMyLmMubGVuZ3RoKSB7XG4gICAgczIuYyArPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIHtcbiAgICBpZiAoczIudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsIGMyID0gczIuYztcbiAgICBpZiAoczEudCA9PSA0IC8qIEFSUkFZICovKSB7XG4gICAgICBpZiAoaTIgPD0gaTEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGwgPSBNYXRoLm1pbiAobGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzIgW2kyICsgaV0gPSBjMS5jaGFyQ29kZUF0KGkxICsgaSk7XG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2JsaXRfc3RyaW5nKGEsYixjLGQsZSkge1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9zdHJpbmcoYSksYixjLGQsZSk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKSB7IHJldHVybiBzLmwgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ191bnNhZmVfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIHMubGVuZ3RoXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmUgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8tMTooczEgPiBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPD0gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7XG4gIChzLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0Zjhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykge1xuICBpZihqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBzO1xuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocylcbiAgZWxzZSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3V0Zjhfb2ZfdXRmMTYocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7IHJldHVybiBuZXcgTWxCeXRlcygwLHMscy5sZW5ndGgpOyB9XG5cblxuLy8gVGhlIHNlY3Rpb24gYmVsb3cgc2hvdWxkIGJlIHVzZWQgd2hlbiB1c2UtanMtc3RyaW5nPWZhbHNlXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsaSxjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19lcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgeyByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIHMuYyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocyl7XG4gIHJldHVybiBzLnRvVXRmMTYoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfYnl0ZXMocykge1xuICByZXR1cm4gKHMgaW5zdGFuY2VvZiBNbEJ5dGVzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHMuY1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuICh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiAmJiAhL1teXFx4MDAtXFx4ZmZdLy50ZXN0KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfaXNfbWxfYnl0ZXMocyk7XG59XG5cbi8vIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGRlcHJlY2F0ZWRcblxuLy9Qcm92aWRlczogY2FtbF9qc190b19ieXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9qc190b19ieXRlX3N0cmluZyhzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX25ld19zdHJpbmcgKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF90b19qc19zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF90b19qc19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc190b19zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3RvX3N0cmluZyAocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX3N0cmluZyh4KSB7IHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyh4KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2ZfYnl0ZXMoeCkgeyByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyh4KSB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIFN5c1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvciAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5TeXNfZXJyb3IsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdCAoY29kZSkge1xuICBpZihnbG9iYWxUaGlzLnF1aXQpIGdsb2JhbFRoaXMucXVpdChjb2RlKTtcbiAgLy9ub2RlanNcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5leGl0KVxuICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5leGl0KGNvZGUpO1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJGdW5jdGlvbiAnZXhpdCcgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uKGV4bil7XG4gIHN3aXRjaChleG5bMl0pIHtcbiAgY2FzZSAtODogLy8gTWF0Y2hfZmFpbHVyZVxuICBjYXNlIC0xMTogLy8gQXNzZXJ0X2ZhaWx1cmVcbiAgY2FzZSAtMTI6IC8vIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG4gICAgcmV0dXJuIDE7XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9leGNlcHRpb24oZXhuKXtcbiAgdmFyIHIgPSBcIlwiO1xuICBpZihleG5bMF0gPT0gMCkge1xuICAgIHIgKz0gZXhuWzFdWzFdO1xuICAgIGlmKGV4bi5sZW5ndGggPT0gMyAmJiBleG5bMl1bMF0gPT0gMCAmJiBjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uKGV4blsxXSkpIHtcblxuICAgICAgdmFyIGJ1Y2tldCA9IGV4blsyXTtcbiAgICAgIHZhciBzdGFydCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFydCA9IDJcbiAgICAgIHZhciBidWNrZXQgPSBleG47XG4gICAgfVxuICAgIHIgKz0gXCIoXCI7XG4gICAgZm9yKHZhciBpID0gc3RhcnQ7IGkgPCBidWNrZXQubGVuZ3RoOyBpICsrKXtcbiAgICAgIGlmKGkgPiBzdGFydCkgcis9XCIsIFwiO1xuICAgICAgdmFyIHYgPSBidWNrZXRbaV1cbiAgICAgIGlmKHR5cGVvZiB2ID09IFwibnVtYmVyXCIpXG4gICAgICAgIHIrPSB2LnRvU3RyaW5nKCk7XG4gICAgICBlbHNlIGlmKHYgaW5zdGFuY2VvZiBNbEJ5dGVzKXtcbiAgICAgICAgcis9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfVxuICAgICAgZWxzZSBpZih0eXBlb2YgdiA9PSBcInN0cmluZ1wiKXtcbiAgICAgICAgcis9ICdcIicgKyB2LnRvU3RyaW5nKCkgKyAnXCInO1xuICAgICAgfVxuICAgICAgZWxzZSByICs9IFwiX1wiO1xuICAgIH1cbiAgICByICs9IFwiKVwiXG4gIH0gZWxzZSBpZiAoZXhuWzBdID09IDI0OCl7XG4gICAgciArPSBleG5bMV1cbiAgfVxuICByZXR1cm4gclxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9mb3JtYXRfZXhjZXB0aW9uLCBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihlcnIpe1xuICBpZihlcnIgaW5zdGFuY2VvZiBBcnJheSAmJiAoZXJyWzBdID09IDAgfHwgZXJyWzBdID09IDI0OCkpIHtcbiAgICB2YXIgaGFuZGxlciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCIpO1xuICAgIGlmKGhhbmRsZXIpIGNhbWxfY2FsbGJhY2soaGFuZGxlciwgW2VycixmYWxzZV0pO1xuICAgIGVsc2Uge1xuICAgICAgdmFyIG1zZyA9IGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgdmFyIGF0X2V4aXQgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIpO1xuICAgICAgaWYoYXRfZXhpdCkgY2FtbF9jYWxsYmFjayhhdF9leGl0LCBbMF0pO1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cpO1xuICAgICAgaWYoZXJyLmpzX2Vycm9yKSB0aHJvdyBlcnIuanNfZXJyb3I7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbmZ1bmN0aW9uIGNhbWxfc2V0X3N0YXRpY19lbnYoayx2KXtcbiAgaWYoIWdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52KVxuICAgIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52ID0ge31cbiAgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZba10gPSB2O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczoganNvb19zeXNfZ2V0ZW52IChjb25zdClcbmZ1bmN0aW9uIGpzb29fc3lzX2dldGVudihuKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICAvL25vZGVqcyBlbnZcbiAgaWYocHJvY2Vzc1xuICAgICAmJiBwcm9jZXNzLmVudlxuICAgICAmJiBwcm9jZXNzLmVudltuXSAhPSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W25dO1xuICBpZihnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudlxuICAgICAmJiBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltuXSlcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0ZW52IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29fc3lzX2dldGVudlxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgaWYociA9PT0gdW5kZWZpbmVkKVxuICAgIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdW5zYWZlX2dldGVudlxuLy9SZXF1aXJlczogY2FtbF9zeXNfZ2V0ZW52XG5mdW5jdGlvbiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52KG5hbWUpe1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIGNhbWxfYXJndiA9ICgoZnVuY3Rpb24gKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgdmFyIG1haW4gPSBcImEub3V0XCI7XG4gIHZhciBhcmdzID0gW11cblxuICBpZihwcm9jZXNzXG4gICAgICYmIHByb2Nlc3MuYXJndlxuICAgICAmJiBwcm9jZXNzLmFyZ3YubGVuZ3RoID4gMSkge1xuICAgIHZhciBhcmd2ID0gcHJvY2Vzcy5hcmd2XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspXG4gICAgYXJnczIucHVzaChjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhhcmdzW2ldKSk7XG4gIHJldHVybiBhcmdzMjtcbn0pKCkpXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbnZhciBjYW1sX2V4ZWN1dGFibGVfbmFtZSA9IGNhbWxfYXJndlsxXVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfYXJndiAoYSkge1xuICByZXR1cm4gWzAsIGNhbWxfYXJndlsxXSwgY2FtbF9hcmd2XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19hcmd2IChhKSB7XG4gIHJldHVybiBjYW1sX2FyZ3Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21vZGlmeV9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX21vZGlmeV9hcmd2KGFyZyl7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShhKXtcbiAgcmV0dXJuIGNhbWxfZXhlY3V0YWJsZV9uYW1lXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgdmFyIGNtZCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGNtZCk7XG4gIGlmICh0eXBlb2YgcmVxdWlyZSAhPSBcInVuZGVmaW5lZFwiKXtcbiAgICB2YXIgY2hpbGRfcHJvY2VzcyA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbiAgICBpZihjaGlsZF9wcm9jZXNzICYmIGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMpXG4gICAgICB0cnkge1xuICAgICAgICBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGNtZCx7c3RkaW86ICdpbmhlcml0J30pO1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICB9XG4gIGVsc2UgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZChjbWQpe1xuICByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lIG11dGFibGVcbnZhciBjYW1sX2luaXRpYWxfdGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgKiAwLjAwMTtcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWUgKCkge1xuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgcmV0dXJuIG5vdyAqIDAuMDAxIC0gY2FtbF9pbml0aWFsX3RpbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlblxuLy9SZXF1aXJlczogY2FtbF9zeXNfdGltZVxuZnVuY3Rpb24gY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuKGIpIHtcbiAgcmV0dXJuIGNhbWxfc3lzX3RpbWUoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQgKCkge1xuICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8pIHtcbiAgICAgaWYgKGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgIHZhciBhID0gZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBJbnQzMkFycmF5KDQpKTtcbiAgICAgICByZXR1cm4gWzAsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM11dO1xuICAgICB9IGVsc2UgaWYgKGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XG4gICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheShnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcygxNikuYnVmZmVyKTtcbiAgICAgICByZXR1cm4gWzAsIGFbMF0sIGFbMV0sIGFbMl0sIGFbM11dO1xuICAgICB9XG4gIH1cbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHZhciB4ID0gbm93XjB4ZmZmZmZmZmYqTWF0aC5yYW5kb20oKTtcbiAgcmV0dXJuIFswLHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuICgpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplICgpIHsgcmV0dXJuIDMyOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSAoKSB7IHJldHVybiAoMHg3RkZGRkZGRi80KSB8IDA7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXggKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIlVuaXhcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiAoKSB7IHJldHVybiBvc190eXBlID09IFwiV2luMzJcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJDeWd3aW5cIiA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwianNfb2Zfb2NhbWxcIildO1xufVxuXG4vL1Byb3ZpZGVzOiBvc190eXBlXG52YXIgb3NfdHlwZSA9IChnbG9iYWxUaGlzLnByb2Nlc3MgJiZcbiAgICAgICAgICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSAmJlxuICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtID09IFwid2luMzJcIikgPyBcIkN5Z3dpblwiIDogXCJVbml4XCI7XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2NvbmZpZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2NvbmZpZyAoKSB7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhvc190eXBlKSwgMzIsIDBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzYXR0eShfY2hhbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3ZhcmlhbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV92YXJpYW50KF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3BhcmFtZXRlcnNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlcigpe3JldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MgKGJvb2wpIHtcbiAgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gYm9vbDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkIChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9ydW50aW1lX3dhcm5pbmdzO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfZW5hYmxlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZShfY2hhbm5lbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiU3BhY2V0aW1lIHByb2ZpbGluZyBvbmx5IHdvcmtzIGZvciBuYXRpdmUgY29kZVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF94ZGdfZGVmYXVsdHNcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX3hkZ19kZWZhdWx0cyhfdW5pdCkge1xuICByZXR1cm4gMDsgLy8gZW1wdHkgbGlzdFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGVcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19yZWd1bGFyX2ZpbGUobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuaXNGaWxlKHJvb3QucmVzdCk7XG59XG4vL0Fsd2F5c1xuLy9SZXF1aXJlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICBpZihwcm9jZXNzICYmIHByb2Nlc3Mub24pIHtcbiAgICBwcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIGZ1bmN0aW9uIChlcnIsIG9yaWdpbikge1xuICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHByb2Nlc3MuZXhpdCAoMik7XG4gICAgfSlcbiAgfVxuICBlbHNlIGlmKGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcil7XG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgIGlmKGV2ZW50LmVycm9yKXtcbiAgICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXZlbnQuZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5jYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCk7XG5cblxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG52YXIgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSBGTEFHKFwid2l0aC1qcy1lcnJvclwiKTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHIgPSBqc29vX3N5c19nZXRlbnYoXCJPQ0FNTFJVTlBBUkFNXCIpXG4gIGlmKHIgIT09IHVuZGVmaW5lZCl7XG4gICAgdmFyIGwgPSByLnNwbGl0KFwiLFwiKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKyl7XG4gICAgICBpZihsW2ldID09IFwiYlwiKSB7IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gMTsgYnJlYWsgfVxuICAgICAgZWxzZSBpZiAobFtpXS5zdGFydHNXaXRoKFwiYj1cIikpIHtcbiAgICAgICAgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSArKGxbaV0uc2xpY2UoMikpfVxuICAgICAgZWxzZSBjb250aW51ZTtcbiAgICB9XG4gIH1cbn0pICgpXG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXNcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX2JhY2t0cmFjZV9zdGF0dXMgKF91bml0KSB7IHJldHVybiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfcmVjb3JkX2JhY2t0cmFjZSAoYikgeyBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IGI7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgKCkgeyByZXR1cm4gWzBdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbGVuZ3RoKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdCgpIHsgcmV0dXJuIDAgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZV9zbG90OiBpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlKGV4biwgYnQpIHsgcmV0dXJuIDAgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrICgpIHsgcmV0dXJuIFswXTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90KCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogIWVmZmVjdHNcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIHZhciBuID0gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGQgPSBuIC0gYXJnc0xlbjtcbiAgaWYgKGQgPT0gMClcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgZyA9IGYuYXBwbHkobnVsbCxhcmdzLnNsaWNlKDAsbikpO1xuICAgIGlmKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBnO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsYXJncy5zbGljZShuKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgc3dpdGNoIChkKSB7XG4gICAgY2FzZSAxOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAxKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAyKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgdmFyIGV4dHJhX2FyZ3MgPSAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKT8xOmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzLmxlbmd0aCtleHRyYV9hcmdzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSBuYXJnc1thcmdzLmxlbmd0aCtpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgbmFyZ3MpXG4gICAgICB9O1xuICAgIH19XG4gICAgZy5sID0gZDtcbiAgICByZXR1cm4gZztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuIChjb25zdCwgc2hhbGxvdylcbi8vSWY6IGVmZmVjdHNcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIHZhciBuID0gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGQgPSBuIC0gYXJnc0xlbjtcbiAgaWYgKGQgPT0gMCkge1xuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9IGVsc2UgaWYgKGQgPCAwKSB7XG4gICAgdmFyIHJlc3QgPSBhcmdzLnNsaWNlKG4gLSAxKTtcbiAgICB2YXIgayA9IGFyZ3MgW2FyZ3NMZW4gLSAxXTtcbiAgICBhcmdzID0gYXJncy5zbGljZSgwLCBuKTtcbiAgICBhcmdzW24gLSAxXSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICBpZiAodHlwZW9mIGcgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGsoZyk7XG4gICAgICB2YXIgYXJncyA9IHJlc3Quc2xpY2UoKTtcbiAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9IGs7XG4gICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihnLCBhcmdzKTsgfTtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzTGVuLS07XG4gICAgdmFyIGsgPSBhcmdzIFthcmdzTGVuXTtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICBjYXNlIDE6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDI6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHksIHope1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDMpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAyXSA9IHo7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICgpe1xuICAgICAgICB2YXIgZXh0cmFfYXJncyA9IChhcmd1bWVudHMubGVuZ3RoID09IDApPzE6YXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyBleHRyYV9hcmdzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApXG4gICAgICAgICAgbmFyZ3NbYXJnc0xlbiArIGldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICAgIH07XG4gICAgfX1cbiAgICBnLmwgPSBkICsgMTtcbiAgICByZXR1cm4gayhnKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlc1xudmFyIGNhbWxfbmFtZWRfdmFsdWVzID0ge307XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUgKGNvbnN0LG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZShubSx2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbnZhciBjYW1sX2dsb2JhbF9kYXRhID0gWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2J1aWxkX3N5bWJvbHNcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J1aWxkX3N5bWJvbHMoc3ltYikge1xuICB2YXIgciA9IHt9O1xuICBpZihzeW1iKSB7XG4gICAgZm9yKHZhciBpID0gMTsgaSA8IHN5bWIubGVuZ3RoOyBpKyspe1xuICAgICAgcltjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzeW1iW2ldWzFdKV0gPSBzeW1iW2ldWzJdXG4gICAgfVxuICB9XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAoY29uc3QsIHNoYWxsb3csIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9jYWxsYmFjaywgY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYgKG5hbWVfb3B0KSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lX29wdDtcbiAgICBpZihnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MpIHtcbiAgICAgIG4gPSBjYW1sX2NhbGxiYWNrKGdsb2JhbFRoaXMudG9wbGV2ZWxSZWxvYywgW25hbWVdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2FtbF9nbG9iYWxfZGF0YS5zeW1ib2xzKSB7XG4gICAgICBpZighY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHgpIHtcbiAgICAgICAgY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHggPSBjYW1sX2J1aWxkX3N5bWJvbHMoY2FtbF9nbG9iYWxfZGF0YS5zeW1ib2xzKVxuICAgICAgfVxuICAgICAgdmFyIG5pZCA9IGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4W25hbWVdXG4gICAgICBpZihuaWQgPj0gMClcbiAgICAgICAgbiA9IG5pZFxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3JlZ2lzdGVyX2dsb2JhbDogY2Fubm90IGxvY2F0ZSBcIiArIG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmKG5hbWVfb3B0KSBjYW1sX2dsb2JhbF9kYXRhW25hbWVfb3B0XSA9IHY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2dsb2JhbF9kYXRhIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZ2V0X2dsb2JhbF9kYXRhICgpIHsgcmV0dXJuIGNhbWxfZ2xvYmFsX2RhdGE7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykgeyByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9tYXliZV9wcmludF9zdGF0c1xuZnVuY3Rpb24gY2FtbF9tYXliZV9wcmludF9zdGF0cyh1bml0KSB7IHJldHVybiAwIH1cbiIsIi8vIEpzX29mX29jYW1sIGxpYnJhcnlcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBKc2xpYlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3B1cmVfZXhwciBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc19wdXJlX2V4cHIgKGYpIHsgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgWzBdKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3NldCAobXV0YWJsZSwgY29uc3QsIG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2pzX3NldChvLGYsdikgeyBvW2ZdPXY7cmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLGYpIHsgcmV0dXJuIG9bZl07IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZGVsZXRlIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZGVsZXRlKG8sZikgeyBkZWxldGUgb1tmXTsgcmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sYykgeyByZXR1cm4gKG8gaW5zdGFuY2VvZiBjKSA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmUocmVzKSB7XG4gIHZhciBjID0gMTtcbiAgd2hpbGUocmVzICYmIHJlcy5qb29fdHJhbXApe1xuICAgIHJlcyA9IHJlcy5qb29fdHJhbXAuYXBwbHkobnVsbCwgcmVzLmpvb19hcmdzKTtcbiAgICBjKys7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVfcmV0dXJuXG5mdW5jdGlvbiBjYW1sX3RyYW1wb2xpbmVfcmV0dXJuKGYsYXJncykge1xuICByZXR1cm4ge2pvb190cmFtcDpmLGpvb19hcmdzOmFyZ3N9O1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfc3RhY2tfZGVwdGhcbi8vSWY6IGVmZmVjdHNcbnZhciBjYW1sX3N0YWNrX2RlcHRoID0gMDtcblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2NoZWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfc3RhY2tfZGVwdGhcbmZ1bmN0aW9uIGNhbWxfc3RhY2tfY2hlY2tfZGVwdGgoKSB7XG4gICAgcmV0dXJuIC0tY2FtbF9zdGFja19kZXB0aCA+IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6ICFlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfY2FsbF9nZW5cbnZhciBjYW1sX2NhbGxiYWNrID0gY2FtbF9jYWxsX2dlbjtcblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoLCBjYW1sX2NhbGxfZ2VuLCBjYW1sX2V4bl9zdGFjaywgY2FtbF9maWJlcl9zdGFjaywgY2FtbF93cmFwX2V4Y2VwdGlvbiwgY2FtbF9yZXN1bWVfc3RhY2ssIGNhbWxfZnJlc2hfb29faWQsIGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnRcbmZ1bmN0aW9uIGNhbWxfY2FsbGJhY2soZixhcmdzKSB7XG4gIGZ1bmN0aW9uIHVuY2F1Z2h0X2VmZmVjdF9oYW5kbGVyKGVmZixrLG1zKSB7XG4gICAgLy8gUmVzdW1lcyB0aGUgY29udGludWF0aW9uIGsgYnkgcmFpc2luZyBleGNlcHRpb24gVW5oYW5kbGVkLlxuICAgIGNhbWxfcmVzdW1lX3N0YWNrKGtbMV0sbXMpO1xuICAgIHZhciBleG4gPSBjYW1sX25hbWVkX3ZhbHVlKFwiRWZmZWN0LlVuaGFuZGxlZFwiKTtcbiAgICBpZihleG4pIGNhbWxfcmFpc2Vfd2l0aF9hcmcoZXhuLCBlZmYpO1xuICAgIGVsc2Uge1xuICAgICAgZXhuID0gWzI0OCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiRWZmZWN0LlVuaGFuZGxlZFwiKSwgY2FtbF9mcmVzaF9vb19pZCgwKV07XG4gICAgICBjYW1sX3JhaXNlX2NvbnN0YW50KGV4bik7XG4gICAgfVxuICB9XG4gIHZhciBzYXZlZF9zdGFja19kZXB0aCA9IGNhbWxfc3RhY2tfZGVwdGg7XG4gIHZhciBzYXZlZF9leG5fc3RhY2sgPSBjYW1sX2V4bl9zdGFjaztcbiAgdmFyIHNhdmVkX2ZpYmVyX3N0YWNrID0gY2FtbF9maWJlcl9zdGFjaztcbiAgdHJ5IHtcbiAgICBjYW1sX2V4bl9zdGFjayA9IDA7XG4gICAgY2FtbF9maWJlcl9zdGFjayA9XG4gICAgICB7aDpbMCwgMCwgMCwgdW5jYXVnaHRfZWZmZWN0X2hhbmRsZXJdLCByOntrOjAsIHg6MCwgZTowfX07XG4gICAgdmFyIHJlcyA9IHtqb29fdHJhbXA6IGYsXG4gICAgICAgICAgICAgICBqb29fYXJnczogYXJncy5jb25jYXQoZnVuY3Rpb24gKHgpe3JldHVybiB4O30pfTtcbiAgICBkbyB7XG4gICAgICBjYW1sX3N0YWNrX2RlcHRoID0gNDA7XG4gICAgICB0cnkge1xuICAgICAgICByZXMgPSBjYW1sX2NhbGxfZ2VuKHJlcy5qb29fdHJhbXAsIHJlcy5qb29fYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIEhhbmRsZSBleGNlcHRpb24gY29taW5nIGZyb20gSmF2YVNjcmlwdCBvciBmcm9tIHRoZSBydW50aW1lLiAqL1xuICAgICAgICBpZiAoIWNhbWxfZXhuX3N0YWNrKSB0aHJvdyBlO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGNhbWxfZXhuX3N0YWNrWzFdO1xuICAgICAgICBjYW1sX2V4bl9zdGFjayA9IGNhbWxfZXhuX3N0YWNrWzJdO1xuICAgICAgICByZXMgPSB7am9vX3RyYW1wOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgam9vX2FyZ3M6IFtjYW1sX3dyYXBfZXhjZXB0aW9uKGUpXX07XG4gICAgICB9XG4gICAgfSB3aGlsZShyZXMgJiYgcmVzLmpvb19hcmdzKVxuICB9IGZpbmFsbHkge1xuICAgIGNhbWxfc3RhY2tfZGVwdGggPSBzYXZlZF9zdGFja19kZXB0aDtcbiAgICBjYW1sX2V4bl9zdGFjayA9IHNhdmVkX2V4bl9zdGFjaztcbiAgICBjYW1sX2ZpYmVyX3N0YWNrID0gc2F2ZWRfZmliZXJfc3RhY2s7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZyh1bml0KXtcbiAgcmV0dXJuIEZMQUcoXCJ1c2UtanMtc3RyaW5nXCIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNvb19mbGFnc19lZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzb29fZmxhZ3NfZWZmZWN0cyh1bml0KXtcbiAgcmV0dXJuIEZMQUcoXCJlZmZlY3RzXCIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd3JhcF9leGNlcHRpb24gY29uc3QgKG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLGNhbWxfbmFtZWRfdmFsdWVcbmZ1bmN0aW9uIGNhbWxfd3JhcF9leGNlcHRpb24oZSkge1xuICBpZiAoRkxBRyhcImV4Y3dyYXBcIikpIHtcbiAgICBpZihlIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiBlO1xuICAgIHZhciBleG47XG4gICAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgICBpZihnbG9iYWxUaGlzLlJhbmdlRXJyb3JcbiAgICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICAgJiYgZS5tZXNzYWdlXG4gICAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSkpXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgICBlbHNlIGlmKGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvclxuICAgICAgICYmIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkludGVybmFsRXJyb3JcbiAgICAgICAmJiBlLm1lc3NhZ2VcbiAgICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKSlcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICAgIGVsc2UgaWYoZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuRXJyb3IgJiYgY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIikpXG4gICAgICBleG4gPSBbMCxjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSxlXTtcbiAgICBlbHNlXG4gICAgICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgICAgIGV4biA9IFswLGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoU3RyaW5nKGUpKV07XG4gICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGVycm9yIGF0IGhhbmQsIGxldCdzIHVzZSBpdC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuRXJyb3IpXG4gICAgICBleG4uanNfZXJyb3IgPSBlO1xuICAgIHJldHVybiBleG47XG4gIH0gZWxzZVxuICAgIHJldHVybiBlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgaWYoY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcpXG4gICAgcmV0dXJuIGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlKGV4biwgZm9yY2UpO1xuICBlbHNlIHJldHVybiBleG5cbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZighZXhuLmpzX2Vycm9yIHx8IGZvcmNlIHx8IGV4blswXSA9PSAyNDgpIGV4bi5qc19lcnJvciA9IG5ldyBnbG9iYWxUaGlzLkVycm9yKFwiSnMgZXhjZXB0aW9uIGNvbnRhaW5pbmcgYmFja3RyYWNlXCIpO1xuICByZXR1cm4gZXhuO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZihleG4uanNfZXJyb3IpIHsgcmV0dXJuIFswLCBleG4uanNfZXJyb3JdOyB9XG4gIHJldHVybiAwO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Jvb2woeCkgeyByZXR1cm4gISF4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHsgcmV0dXJuICt4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fZmxvYXQgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc19mcm9tX2ludDMyXG4vL0FsaWFzOiBjYW1sX2pzX2Zyb21fbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19mbG9hdCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9faW50MzIgY29uc3QgKGNvbnN0KVxuLy9BbGlhczogY2FtbF9qc190b19uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfdG9faW50MzIoeCkgeyByZXR1cm4geHwwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGJbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGxlbjtpKyspIGJbaSsxXSA9IGFbaV07XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkoYSl7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBpPWEubGVuZ3RoIC0gMTsgaT49MDsgaS0tKXtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLGUsbF07XG4gIH1cbiAgcmV0dXJuIGxcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpe1xuICB2YXIgYSA9IFtdO1xuICBmb3IoOyBsICE9PSAwOyBsID0gbFsyXSkge1xuICAgIGEucHVzaChsWzFdKTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc192YXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdmFyKHgpIHtcbiAgdmFyIHggPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyh4KTtcbiAgLy9DaGVja3MgdGhhdCB4IGhhcyB0aGUgZm9ybSBpZGVudFsuaWRlbnRdKlxuICBpZigheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSl7XG4gICAgY29uc29sZS5lcnJvcihcImNhbWxfanNfdmFyOiBcXFwiXCIgKyB4ICsgXCJcXFwiIGlzIG5vdCBhIHZhbGlkIEphdmFTY3JpcHQgdmFyaWFibGUuIGNvbnRpbnVpbmcgLi5cIik7XG4gICAgLy9jb25zb2xlLmVycm9yKFwiSnMuVW5zYWZlLmV2YWxfc3RyaW5nXCIpXG4gIH1cbiAgcmV0dXJuIGV2YWwoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykgeyByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bl9jYWxsIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19mdW5fY2FsbChmLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gZigpO1xuICBjYXNlIDI6IHJldHVybiBmIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gZiAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX29qc19uZXdfYXJyIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9vanNfbmV3X2FycihjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAwOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjIChhWzBdKTtcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBhKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihsZW4gPiAwKXtcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gW3VuZGVmaW5lZF07XG4gICAgfVxuICAgIHZhciByZXMgPSBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICAgIHJldHVybiAocmVzIGluc3RhbmNlb2YgRnVuY3Rpb24pP2NhbWxfanNfd3JhcF9jYWxsYmFjayhyZXMpOnJlcztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5KTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZik7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpOyB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX3dyYXBfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZixhcmdzKTtcbiAgICByZXR1cm4gKHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKT9jYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKTpyZXM7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLFt0aGlzLGFyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QoYXJpdHksIGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcml0eSArIDEpO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoLCBhcml0eSlcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSAtIDE7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpOyB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbi8vSWY6ICFlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgcmV0dXJuIChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSB7XG4gIC8vIEZ1bmN0aW9ucyBoYXZlIGFuIGFkZGl0aW9uYWwgY29udGludWF0aW9uIHBhcmFtZXRlci4gVGhpcyBzaG91bGRcbiAgLy8gbm90IGJlIHZpc2libGUgd2hlbiBjYWxsaW5nIHRoZW0gZnJvbSBKYXZhU2NyaXB0XG4gIHJldHVybiAoKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKSkgLSAxXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXF1YWxzIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZXF1YWxzICh4LCB5KSB7IHJldHVybiArKHggPT0geSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zdHJpY3RfZXF1YWxzIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfc3RyaWN0X2VxdWFscyAoeCwgeSkgeyByZXR1cm4gKyh4ID09PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V2YWxfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V2YWxfc3RyaW5nIChzKSB7cmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19leHByIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V4cHIocykge1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcHVyZV9qc19leHByIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3B1cmVfanNfZXhwciAocyl7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX3B1cmVfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX29iamVjdCAob2JqZWN0X2xpdGVyYWwpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19vYmplY3QgKGEpIHtcbiAgdmFyIG8gPSB7fTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHAgPSBhW2ldO1xuICAgIG9bY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocFsxXSldID0gcFsyXTtcbiAgfVxuICByZXR1cm4gbztcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUmFpc2UgZXhjZXB0aW9uXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9jb25zdGFudCAodGFnKSB7IHRocm93IHRhZzsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnIChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBhcmcpIHsgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWcsIGFyZ10pOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzIChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZ3MgKHRhZywgYXJncykgeyB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoWzAsIHRhZ10uY29uY2F0KGFyZ3MpKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nICh0YWcsIG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aCAobXNnKSB7XG4gIGlmKCFjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlPVsyNDgsY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkZhaWx1cmVcIiksLTNdO1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSwgbXNnKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkludmFsaWRfYXJndW1lbnQsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRW5kX29mX2ZpbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkRpdmlzaW9uX2J5X3plcm8pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub3RfZm91bmQgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuTm90X2ZvdW5kKTsgfVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczoganNvb19mbG9vcl9sb2cyXG52YXIgbG9nMl9vayA9IE1hdGgubG9nMiAmJiBNYXRoLmxvZzIoMS4xMjM1NTgyMDkyODg5NDc0RSszMDcpID09IDEwMjBcbmZ1bmN0aW9uIGpzb29fZmxvb3JfbG9nMih4KSB7XG4gIGlmKGxvZzJfb2spIHJldHVybiBNYXRoLmZsb29yKE1hdGgubG9nMih4KSlcbiAgdmFyIGkgPSAwO1xuICBpZiAoeCA9PSAwKSByZXR1cm4gLUluZmluaXR5O1xuICBpZih4Pj0xKSB7d2hpbGUgKHg+PTIpIHt4Lz0yOyBpKyt9IH1cbiAgZWxzZSB7d2hpbGUgKHggPCAxKSB7eCo9MjsgaS0tfSB9O1xuICByZXR1cm4gaTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzIsIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXG5mdW5jdGlvbiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSlcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgxLCAwLCAweDdmZjApO1xuICAgIGlmICh4ID4gMClcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgwLCAwLCAweDdmZjApXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4ZmZmMClcbiAgfVxuICB2YXIgc2lnbiA9ICh4PT0wICYmIDEveCA9PSAtSW5maW5pdHkpPzB4ODAwMDooeD49MCk/MDoweDgwMDA7XG4gIGlmIChzaWduKSB4ID0gLXg7XG4gIC8vIEludDY0LmJpdHNfb2ZfZmxvYXQgMS4xMjM1NTgyMDkyODg5NDc0RSszMDcgPSAweDdmYjAwMDAwMDAwMDAwMDBMXG4gIC8vIHVzaW5nIE1hdGguTE9HMkUqTWF0aC5sb2coeCkgaW4gcGxhY2Ugb2YgTWF0aC5sb2cyIHJlc3VsdCBpbiBwcmVjaXNpb24gbG9zdFxuICB2YXIgZXhwID0ganNvb19mbG9vcl9sb2cyKHgpICsgMTAyMztcbiAgaWYgKGV4cCA8PSAwKSB7XG4gICAgZXhwID0gMDtcbiAgICB4IC89IE1hdGgucG93KDIsLTEwMjYpO1xuICB9IGVsc2Uge1xuICAgIHggLz0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gICAgaWYgKHggPCAxNikge1xuICAgICAgeCAqPSAyOyBleHAgLT0xOyB9XG4gICAgaWYgKGV4cCA9PSAwKSB7XG4gICAgICB4IC89IDI7IH1cbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsMjQpO1xuICB2YXIgcjMgPSB4fDA7XG4gIHggPSAoeCAtIHIzKSAqIGs7XG4gIHZhciByMiA9IHh8MDtcbiAgeCA9ICh4IC0gcjIpICogaztcbiAgdmFyIHIxID0geHwwO1xuICByMyA9IChyMyAmMHhmKSB8IHNpZ24gfCBleHAgPDwgNDtcbiAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKHIxLCByMiwgcjMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0ICh4KSB7XG4gIHZhciBmbG9hdDMyYSA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gIGZsb2F0MzJhWzBdID0geDtcbiAgdmFyIGludDMyYSA9IG5ldyBJbnQzMkFycmF5KGZsb2F0MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBpbnQzMmFbMF0gfCAwO1xufVxuXG4vL0ZQIGxpdGVyYWxzIGNhbiBiZSB3cml0dGVuIHVzaW5nIHRoZSBoZXhhZGVjaW1hbFxuLy9ub3RhdGlvbiAweDxtYW50aXNzYSBpbiBoZXg+cDxleHBvbmVudD4gZnJvbSBJU08gQzk5LlxuLy9odHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkvanMtaGV4ZmxvYXQvYmxvYi9tYXN0ZXIvaGV4ZmxvYXQuanNcbi8vUHJvdmlkZXM6IGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCAoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSkgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKFwibmFuXCIpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoKHggPiAwKT9cImluZmluaXR5XCI6XCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8xOih4Pj0wKT8wOjE7XG4gIGlmKHNpZ24pIHggPSAteDtcbiAgdmFyIGV4cCA9IDA7XG4gIGlmICh4ID09IDApIHsgfVxuICBlbHNlIGlmICh4IDwgMSkge1xuICAgIHdoaWxlICh4IDwgMSAmJiBleHAgPiAtMTAyMikgIHsgeCAqPSAyOyBleHAtLSB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikgeyB4IC89IDI7IGV4cCsrIH1cbiAgfVxuICB2YXIgZXhwX3NpZ24gPSBleHAgPCAwID8gJycgOiAnKyc7XG4gIHZhciBzaWduX3N0ciA9ICcnO1xuICBpZiAoc2lnbikgc2lnbl9zdHIgPSAnLSdcbiAgZWxzZSB7XG4gICAgc3dpdGNoKHN0eWxlKXtcbiAgICBjYXNlIDQzIC8qICcrJyAqLzogc2lnbl9zdHIgPSAnKyc7IGJyZWFrO1xuICAgIGNhc2UgMzIgLyogJyAnICovOiBzaWduX3N0ciA9ICcgJzsgYnJlYWs7XG4gICAgZGVmYXVsdDogYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwcmVjID49IDAgJiYgcHJlYyA8IDEzKSB7XG4gICAgLyogSWYgYSBwcmVjaXNpb24gaXMgZ2l2ZW4sIGFuZCBpcyBzbWFsbCwgcm91bmQgbWFudGlzc2EgYWNjb3JkaW5nbHkgKi9cbiAgICB2YXIgY3N0ID0gTWF0aC5wb3coMixwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmKHByZWMgPj0gMCl7XG4gICAgdmFyIGlkeCA9IHhfc3RyLmluZGV4T2YoJy4nKTtcbiAgICBpZihpZHg8MCkge1xuICAgICAgeF9zdHIgKz0gJy4nICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsICcwJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHgrMStwcmVjO1xuICAgICAgaWYoeF9zdHIubGVuZ3RoIDwgc2l6ZSlcbiAgICAgICAgeF9zdHIgKz0gY2FtbF9zdHJfcmVwZWF0KHNpemUgLSB4X3N0ci5sZW5ndGgsICcwJyk7XG4gICAgICBlbHNlXG4gICAgICAgIHhfc3RyID0geF9zdHIuc3Vic3RyKDAsc2l6ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoc2lnbl9zdHIgKyAnMHgnICsgeF9zdHIgKyAncCcgKyBleHBfc2lnbiArIGV4cC50b1N0cmluZygxMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgbG8gPSB4LmxvO1xuICB2YXIgbWkgPSB4Lm1pO1xuICB2YXIgaGkgPSB4LmhpO1xuICB2YXIgZXhwID0gKGhpICYgMHg3ZmZmKSA+PiA0O1xuICBpZiAoZXhwID09IDIwNDcpIHtcbiAgICBpZiAoKGxvfG1pfChoaSYweGYpKSA9PSAwKVxuICAgICAgcmV0dXJuIChoaSAmIDB4ODAwMCk/KC1JbmZpbml0eSk6SW5maW5pdHk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsLTI0KTtcbiAgdmFyIHJlcyA9IChsbyprK21pKSprKyhoaSYweGYpO1xuICBpZiAoZXhwID4gMCkge1xuICAgIHJlcyArPSAxNjtcbiAgICByZXMgKj0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gIH0gZWxzZVxuICAgIHJlcyAqPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgaWYgKGhpICYgMHg4MDAwKSByZXMgPSAtIHJlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9zdWIsY2FtbF9pbnQ2NF9vZl9pbnQzMlxuZnVuY3Rpb24gY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgKHgseSkge1xuICBpZihpc05hTih4KSB8fCBpc05hTih5KSkgcmV0dXJuIE5hTjtcbiAgaWYoeD09eSkgcmV0dXJuIHk7XG4gIGlmKHg9PTApe1xuICAgIGlmKHkgPCAwKVxuICAgICAgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpXG4gIH1cbiAgdmFyIGJpdHMgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoeCk7XG4gIHZhciBvbmUgPSBjYW1sX2ludDY0X29mX2ludDMyKDEpO1xuICBpZiAoKHg8eSkgPT0gKHg+MCkpXG4gICAgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSlcbiAgZWxzZVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X3N1YihiaXRzLCBvbmUpXG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCl7XG4gIHJldHVybiBNYXRoLnRydW5jKHgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgaW50MzJhID0gbmV3IEludDMyQXJyYXkoMSk7XG4gIGludDMyYVswXSA9IHg7XG4gIHZhciBmbG9hdDMyYSA9IG5ldyBGbG9hdDMyQXJyYXkoaW50MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBmbG9hdDMyYVswXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jbGFzc2lmeV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jbGFzc2lmeV9mbG9hdCAoeCkge1xuICBpZiAoaXNGaW5pdGUgKHgpKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpID49IDIuMjI1MDczODU4NTA3MjAxNGUtMzA4KSByZXR1cm4gMDtcbiAgICBpZiAoeCAhPSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gMjtcbiAgfVxuICByZXR1cm4gaXNOYU4oeCk/NDozO1xufVxuLy9Qcm92aWRlczogY2FtbF9tb2RmX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX21vZGZfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIHZhciBuZWcgPSAoMS94KSA8IDA7XG4gICAgeCA9IE1hdGguYWJzKHgpO1xuICAgIHZhciBpID0gTWF0aC5mbG9vciAoeCk7XG4gICAgdmFyIGYgPSB4IC0gaTtcbiAgICBpZiAobmVnKSB7IGkgPSAtaTsgZiA9IC1mOyB9XG4gICAgcmV0dXJuIFswLCBmLCBpXTtcbiAgfVxuICBpZiAoaXNOYU4gKHgpKSByZXR1cm4gWzAsIE5hTiwgTmFOXTtcbiAgcmV0dXJuIFswLCAxL3gsIHhdO1xufVxuLy9Qcm92aWRlczogY2FtbF9sZGV4cF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sZGV4cF9mbG9hdCAoeCxleHApIHtcbiAgZXhwIHw9IDA7XG4gIGlmIChleHAgPiAxMDIzKSB7XG4gICAgZXhwIC09IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICBpZiAoZXhwID4gMTAyMykgeyAgLy8gaW4gY2FzZSB4IGlzIHN1Ym5vcm1hbFxuICAgICAgZXhwIC09IDEwMjM7XG4gICAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIH1cbiAgfVxuICBpZiAoZXhwIDwgLTEwMjMpIHtcbiAgICBleHAgKz0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIC0xMDIzKTtcbiAgfVxuICB4ICo9IE1hdGgucG93KDIsIGV4cCk7XG4gIHJldHVybiB4O1xufVxuLy9Qcm92aWRlczogY2FtbF9mcmV4cF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ZyZXhwX2Zsb2F0ICh4KSB7XG4gIGlmICgoeCA9PSAwKSB8fCAhaXNGaW5pdGUoeCkpIHJldHVybiBbMCwgeCwgMF07XG4gIHZhciBuZWcgPSB4IDwgMDtcbiAgaWYgKG5lZykgeCA9IC0geDtcbiAgdmFyIGV4cCA9IE1hdGgubWF4KC0xMDIzLCBqc29vX2Zsb29yX2xvZzIoeCkgKyAxKTtcbiAgeCAqPSBNYXRoLnBvdygyLC1leHApO1xuICB3aGlsZSAoeCA8IDAuNSkge1xuICAgIHggKj0gMjtcbiAgICBleHAtLTtcbiAgfVxuICB3aGlsZSAoeCA+PSAxKSB7XG4gICAgeCAqPSAwLjU7XG4gICAgZXhwKys7XG4gIH1cbiAgaWYgKG5lZykgeCA9IC0geDtcbiAgcmV0dXJuIFswLCB4LCBleHBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfY29tcGFyZSAoeCwgeSkge1xuICBpZiAoeCA9PT0geSkgcmV0dXJuIDA7XG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xO1xuICBpZiAoeCA+IHkpIHJldHVybiAxO1xuICBpZiAoeCA9PT0geCkgcmV0dXJuIDE7XG4gIGlmICh5ID09PSB5KSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvcHlzaWduX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvcHlzaWduX2Zsb2F0ICh4LCB5KSB7XG4gIGlmICh5ID09IDApIHkgPSAxIC8geTtcbiAgeCA9IE1hdGguYWJzKHgpO1xuICByZXR1cm4gKHkgPCAwKT8oLXgpOng7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2lnbmJpdF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaWduYml0X2Zsb2F0KHgpIHtcbiAgaWYgKHggPT0gMCkgeCA9IDEgLyB4O1xuICByZXR1cm4gKHggPCAwKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhwbTFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwbTFfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguZXhwbTEoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZXhwMl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHAyX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgucG93KDIsIHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzFwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzFwX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgubG9nMXAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cyX2Zsb2F0KHgpIHsgcmV0dXJuIE1hdGgubG9nMih4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9oeXBvdF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9oeXBvdF9mbG9hdCAoeCwgeSkgeyByZXR1cm4gTWF0aC5oeXBvdCh4LCB5KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxMF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxMF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5sb2cxMCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9jb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Nvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguY29zaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hY29zaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hY29zaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9zaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3NpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguc2luaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hc2luaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hc2luaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF90YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3RhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgudGFuaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9hdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9hdGFuaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5hdGFuaCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9yb3VuZF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9yb3VuZF9mbG9hdCAoeCkge1xuICBpZiAoeCA+PSAwKSB7XG4gICAgdmFyIHkgPSBNYXRoLmZsb29yKHgpO1xuICAgIHJldHVybiAoeCAtIHkgPj0gMC41KT8oeSArIDEpOnlcbiAgfSBlbHNlIHtcbiAgICB2YXIgeSA9IE1hdGguY2VpbCh4KTtcbiAgICByZXR1cm4gKHkgLSB4ID49IDAuNSk/KHkgLSAxKTp5XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNicnQoeCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9IDEuMCAtICgoKChhNSAqIHQgKyBhNCkgKiB0ICsgYTMpICogdCArIGEyKSAqIHQgKyBhMSkgKiB0ICogTWF0aC5leHAoLXggKiB4KTtcblxuICByZXR1cm4gc2lnbiAqIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmY19mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9lcmZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfZXJmY19mbG9hdCh4KSB7XG4gIHJldHVybiAxIC0gY2FtbF9lcmZfZmxvYXQoeCk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5IChhLCBiKSB7XG4gICAgdmFyIGF0ID0gU1BMSVQgKiBhO1xuICAgIHZhciBhaGkgPSBhdCAtIChhdCAtIGEpO1xuICAgIHZhciBhbG8gPSBhIC0gYWhpO1xuICAgIHZhciBidCA9IFNQTElUICogYjtcbiAgICB2YXIgYmhpID0gYnQgLSAoYnQgLSBiKTtcbiAgICB2YXIgYmxvID0gYiAtIGJoaTtcbiAgICB2YXIgcCA9IGEgKiBiO1xuICAgIHZhciBlID0gKChhaGkgKiBiaGkgLSBwKSArIGFoaSAqIGJsbyArIGFsbyAqIGJoaSkgKyBhbG8gKiBibG87XG4gICAgcmV0dXJuIHtcbiAgICAgIHA6IHAsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSAoYSAtIChzIC0gdikpICsgKGIgLSB2KTtcbiAgICByZXR1cm4ge1xuICAgICAgczogcyxcbiAgICAgIGU6IGVcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkanVzdCAoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4ID8geCAqICgxICsgKHggPCAwID8gLTEgOiArMSkgKiAoeSA8IDAgPyAtMSA6ICsxKSAqIEVQU0lMT04pIDogeDtcbiAgfTtcblxuICBpZiAoeCA9PT0gMCB8fCB4ICE9PSB4IHx8IHggPT09ICsxIC8gMCB8fCB4ID09PSAtMSAvIDAgfHxcbiAgICAgIHkgPT09IDAgfHwgeSAhPT0geSB8fCB5ID09PSArMSAvIDAgfHwgeSA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICsgejtcbiAgfVxuICBpZiAoeiA9PT0gMCkge1xuICAgIHJldHVybiB4ICogeTtcbiAgfVxuICBpZiAoeiAhPT0geiB8fCB6ID09PSArMSAvIDAgfHwgeiA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiBNYXRoLmFicyh4cyAqIHlzKSAqIDQgLyBFUFNJTE9OKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cbiAgaWYgKE1hdGguYWJzKHpzKSA8IE1hdGguYWJzKHhzICogeXMpICogRVBTSUxPTiAvIDQgKiBFUFNJTE9OIC8gNCkge1xuICAgIHpzID0gKHogPCAwID8gLTEgOiArMSkgKiBNSU5fVkFMVUU7XG4gIH1cblxuICB2YXIgeHkgPSBtdWx0aXBseSh4cywgeXMpO1xuICB2YXIgcyA9IGFkZCh4eS5wLCB6cyk7XG4gIHZhciB1ID0gYWRkKHh5LmUsIHMuZSk7XG4gIHZhciBpID0gYWRkKHMucywgdS5zKTtcblxuICB2YXIgZiA9IGkucyArIGFkanVzdChpLmUsIHUuZSk7XG4gIGlmIChmID09PSAwKSB7XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICB2YXIgZnMgPSBmICogc2NhbGU7XG4gIGlmIChNYXRoLmFicyhmcykgPiBNSU5fVkFMVUUpIHtcbiAgICByZXR1cm4gZnM7XG4gIH1cblxuICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdhcyBleHRyYSByb3VuZGluZyBmb3IgYSBkZW5vcm1hbGl6ZWQgdmFsdWUuXG4gIHJldHVybiBmcyArIGFkanVzdChmIC0gZnMgLyBzY2FsZSwgaS5lKSAqIHNjYWxlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2Zsb2F0IChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LGRwKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpIDwgMS4wKSB7XG4gICAgICByZXR1cm4geC50b0ZpeGVkKGRwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGUgPSBwYXJzZUludCh4LnRvU3RyaW5nKCkuc3BsaXQoJysnKVsxXSk7XG4gICAgICBpZiAoZSA+IDIwKSB7XG4gICAgICAgIGUgLT0gMjA7XG4gICAgICAgIHggLz0gTWF0aC5wb3coMTAsZSk7XG4gICAgICAgIHggKz0gKG5ldyBBcnJheShlKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIGlmKGRwID4gMCkge1xuICAgICAgICAgIHggPSB4ICsgJy4nICsgKG5ldyBBcnJheShkcCsxKSkuam9pbignMCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgICAgZWxzZSByZXR1cm4geC50b0ZpeGVkKGRwKVxuICAgIH1cbiAgfVxuICB2YXIgcywgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIHZhciBwcmVjID0gKGYucHJlYyA8IDApPzY6Zi5wcmVjO1xuICBpZiAoeCA8IDAgfHwgKHggPT0gMCAmJiAxL3ggPT0gLUluZmluaXR5KSkgeyBmLnNpZ24gPSAtMTsgeCA9IC14OyB9XG4gIGlmIChpc05hTih4KSkgeyBzID0gXCJuYW5cIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZSBpZiAoIWlzRmluaXRlKHgpKSB7IHMgPSBcImluZlwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlXG4gICAgc3dpdGNoIChmLmNvbnYpIHtcbiAgICBjYXNlICdlJzpcbiAgICAgIHZhciBzID0geC50b0V4cG9uZW50aWFsKHByZWMpO1xuICAgICAgLy8gZXhwb25lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IHR3byBkaWdpdHNcbiAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2YnOlxuICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7IGJyZWFrO1xuICAgIGNhc2UgJ2cnOlxuICAgICAgcHJlYyA9IHByZWM/cHJlYzoxO1xuICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICB2YXIgaiA9IHMuaW5kZXhPZignZScpO1xuICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgIGlmIChleHAgPCAtNCB8fCB4ID49IDFlMjEgfHwgeC50b0ZpeGVkKDApLmxlbmd0aCA+IHByZWMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICB2YXIgaSA9IGogLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgaSA9IHMubGVuZ3RoO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgaWYgKGV4cCA8IDApIHsgcCAtPSBleHAgKyAxOyBzID0geC50b0ZpeGVkKHApOyB9XG4gICAgICAgIGVsc2Ugd2hpbGUgKHMgPSB4LnRvRml4ZWQocCksIHMubGVuZ3RoID4gcHJlYyArIDEpIHAtLTtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgICAgdmFyIGkgPSBzLmxlbmd0aCAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpXG4gIHJlcyA9ICtzO1xuICBpZiAoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLFwiXCIpO1xuICByZXMgPSArcztcbiAgaWYgKCgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSB8fCAvXlsrLV0/bmFuJC9pLnRlc3QocykpIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8vaS5leGVjKHMpO1xuICAvLyAgICAgICAgICAxICAgICAgICAyICAgICAgICAgICAgIDMgICAgICAgICAgIDVcbiAgaWYobSl7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCcnKTtcbiAgICB2YXIgbWFudGlzc2EgPSBwYXJzZUludChtWzFdICsgbVsyXSArIG0zLCAxNik7XG4gICAgdmFyIGV4cG9uZW50ID0gKG1bNV18MCkgLSA0Km0zLmxlbmd0aDtcbiAgICByZXMgPSBtYW50aXNzYSAqIE1hdGgucG93KDIsIGV4cG9uZW50KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmKC9eXFwrP2luZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBJbmZpbml0eTtcbiAgaWYoL14taW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIC1JbmZpbml0eTtcbiAgY2FtbF9mYWlsd2l0aChcImZsb2F0X29mX3N0cmluZ1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdXBkYXRlX2R1bW15XG5mdW5jdGlvbiBjYW1sX3VwZGF0ZV9kdW1teSAoeCwgeSkge1xuICBpZiggeS5mdW4gKSB7IHguZnVuID0geS5mdW47IHJldHVybiAwOyB9XG4gIGlmKCB0eXBlb2YgeT09PVwiZnVuY3Rpb25cIiApIHsgeC5mdW4gPSB5OyByZXR1cm4gMDsgfVxuICB2YXIgaSA9IHkubGVuZ3RoOyB3aGlsZSAoaS0tKSB4W2ldID0geVtpXTsgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYWxsb2NfZHVtbXlfaW5maXhcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfYWxsb2NfZHVtbXlfaW5maXggKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZiAoeCkgeyByZXR1cm4gY2FtbF9jYWxsX2dlbihmLmZ1biwgW3hdKSB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX2Jsb2NrIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX2Jsb2NrICh4KSB7IHJldHVybiArKHggaW5zdGFuY2VvZiBBcnJheSk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial90YWdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX29ial90YWcgKHgpIHtcbiAgaWYgKCh4IGluc3RhbmNlb2YgQXJyYXkpICYmIHhbMF0gPT0gKHhbMF0gPj4+IDApKVxuICAgIHJldHVybiB4WzBdXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh4KSlcbiAgICByZXR1cm4gMjUyXG4gIGVsc2UgaWYgKCh4IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8IHR5cGVvZiB4ID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gMjQ3XG4gIGVsc2UgaWYgKHggJiYgeC5jYW1sX2N1c3RvbSlcbiAgICByZXR1cm4gMjU1XG4gIGVsc2VcbiAgICByZXR1cm4gMTAwMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfdGFnIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF90YWcgKHgsIHRhZykgeyB4WzBdID0gdGFnOyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9vYmpfYmxvY2sgY29uc3QgKGNvbnN0LGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfYmxvY2sgKHRhZywgc2l6ZSkge1xuICB2YXIgbyA9IG5ldyBBcnJheShzaXplKzEpO1xuICBvWzBdPXRhZztcbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gc2l6ZTsgaSsrKSBvW2ldID0gMDtcbiAgcmV0dXJuIG87XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3dpdGhfdGFnXG5mdW5jdGlvbiBjYW1sX29ial93aXRoX3RhZyh0YWcseCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgYVswXSA9IHRhZztcbiAgZm9yKHZhciBpID0gMTsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfZHVwIG11dGFibGUgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX29ial9kdXAgKHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUgKHgsIHMpIHtcbiAgaWYgKHM8PTAgfHwgcyArIDEgPiB4Lmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiT2JqLnRydW5jYXRlXCIpO1xuICBpZiAoeC5sZW5ndGggIT0gcyArIDEpIHgubGVuZ3RoID0gcyArIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9tYWtlX2ZvcndhcmRcbmZ1bmN0aW9uIGNhbWxfb2JqX21ha2VfZm9yd2FyZCAoYix2KSB7XG4gIGJbMF09MjUwO1xuICBiWzFdPXY7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2NvbXBhcmVfYW5kX3N3YXBcbmZ1bmN0aW9uIGNhbWxfb2JqX2NvbXBhcmVfYW5kX3N3YXAoeCxpLG9sZCxuKXtcbiAgaWYoeFtpKzFdID09IG9sZCkge1xuICAgIHhbaSsxXSA9IG47XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfaXNfc2hhcmVkXG5mdW5jdGlvbiBjYW1sX29ial9pc19zaGFyZWQoeCl7XG4gIHJldHVybiAxXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkICh2KSB7IHJldHVybiBbMjUwLCB2XTsgfVxuXG4vLy8vLy8vLy8vLy8vIENhbWxpbnRlcm5hbE9PXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIGNvbnN0XG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAob2ZzID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycmF5IGlzIG5vdCBzcGFyc2VcbiAgICBmb3IgKHZhciBpID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoOyBpIDwgY2FjaGVpZDsgaSsrKVxuICAgICAgY2FtbF9tZXRob2RfY2FjaGVbaV0gPSAwO1xuICB9IGVsc2UgaWYgKG1ldGhzW29mc10gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgLSAxXTtcbiAgfVxuICB2YXIgbGkgPSAzLCBoaSA9IG1ldGhzWzFdICogMiArIDEsIG1pO1xuICB3aGlsZSAobGkgPCBoaSkge1xuICAgIG1pID0gKChsaStoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSsxXSkgaGkgPSBtaS0yO1xuICAgIGVsc2UgbGkgPSBtaTtcbiAgfVxuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IGxpICsgMTtcbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gKHRhZyA9PSBtZXRoc1tsaSsxXSA/IG1ldGhzW2xpXSA6IDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29vX2xhc3RfaWRcbnZhciBjYW1sX29vX2xhc3RfaWQgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9vb19pZFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX3NldF9vb19pZCAoYikge1xuICBiWzJdPWNhbWxfb29fbGFzdF9pZCsrO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mcmVzaF9vb19pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX2ZyZXNoX29vX2lkKCkge1xuICByZXR1cm4gY2FtbF9vb19sYXN0X2lkKys7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfcmF3X2ZpZWxkKG8saSkgeyByZXR1cm4gb1tpKzFdIH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3Jhd19maWVsZChvLGksdikgeyByZXR1cm4gb1tpKzFdID0gdiB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKG8pIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfYWRkX29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9vYmpfYWRkX29mZnNldCh2LG9mZnNldCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiT2JqLmFkZF9vZmZzZXQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdXBkYXRlX3RhZyhiLG8sbikge1xuICAgIGlmKGJbMF09PW8pIHsgYlswXSA9IG47IHJldHVybiAxIH1cbiAgICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmdcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZyhvKSB7XG4gIGlmICgobyBpbnN0YW5jZW9mIEFycmF5KSAmJiBvWzBdID09IChvWzBdID4+PiAwKSAmJlxuICAgICAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLCAyNDYsIDI0NCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcndhcmRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbiAgZnVuY3Rpb24gY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkKG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLDI0NCwyNTApO1xuICByZXR1cm4gMDsgLy8gdW5pdFxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9yZXNldF90b19sYXp5XG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eShvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywyNDQsMjQ2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9yZWFkX3Jlc3VsdFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfcmVhZF9yZXN1bHQobykge1xuICByZXR1cm4gKGNhbWxfb2JqX3RhZyhvKSA9PSAyNTApP29bMV06bztcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPCA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG4vL1ZlcnNpb246ID49IDVcbmZ1bmN0aW9uIGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0KSB7XG4gIHJldHVybiAodCA9PSAyNDUpID8gMSA6IDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZmZzZXRcbnZhciBjYW1sX2ludDY0X29mZnNldCA9IE1hdGgucG93KDIsIC0yNCk7XG5cbi8vUHJvdmlkZXM6IE1sSW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBNbEludDY0IChsbyxtaSxoaSkge1xuICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgdGhpcy5taSA9IG1pICYgMHhmZmZmZmY7XG4gIHRoaXMuaGkgPSBoaSAmIDB4ZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gXCJfalwiXG5NbEludDY0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyx0aGlzLm1pLHRoaXMuaGkpO1xufVxuXG5NbEludDY0LnByb3RvdHlwZS51Y29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIGlmICh0aGlzLmhpID4geC5oaSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmhpIDwgeC5oaSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubG8gPiB4LmxvKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBoaSA9IHRoaXMuaGkgPDwgMTY7XG4gIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICBpZiAoaGkgPiB4aGkpIHJldHVybiAxO1xuICBpZiAoaGkgPCB4aGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxvID0gLSB0aGlzLmxvO1xuICB2YXIgbWkgPSAtIHRoaXMubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSAtIHRoaXMuaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSArIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpICsgeC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gLSB4LmxvO1xuICB2YXIgbWkgPSB0aGlzLm1pIC0geC5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyAqIHgubG87XG4gIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gIHZhciBoaSA9ICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMuaGkgKiB4LmxvICsgdGhpcy5taSAqIHgubWkgKyB0aGlzLmxvICogeC5oaTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMubG98dGhpcy5taXx0aGlzLmhpKSA9PSAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy5oaSA8PCAxNikgPCAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gJiB4LmxvLCB0aGlzLm1pICYgeC5taSwgdGhpcy5oaSAmIHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb3x4LmxvLCB0aGlzLm1pfHgubWksIHRoaXMuaGl8eC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb154LmxvLCB0aGlzLm1pXngubWksIHRoaXMuaGleeC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9sZWZ0ID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMubG8gPDwgcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IHMpIHwgKHRoaXMubG8gPj4gKDI0IC0gcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaGkgPDwgcykgfCAodGhpcy5taSA+PiAoMjQgLSBzKSkpO1xuICB9XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IChzIC0gMjQpKSB8ICh0aGlzLmxvID4+ICg0OCAtIHMpKSk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCgwLCAwLCB0aGlzLmxvIDw8IChzIC0gNDgpKVxufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHRfdW5zaWduZWQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8ICh0aGlzLmhpIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IHMpKTtcbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubWkgPj4gKHMgLSAyNCkpIHwgKHRoaXMuaGkgPDwgKDQ4IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPj4gKHMgLSAyNCkpLFxuICAgICAgMCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAodGhpcy5oaSA+PiAocyAtIDQ4KSwgMCwgMCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9yaWdodCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICB2YXIgaCA9ICh0aGlzLmhpIDw8IDE2KSA+PiAxNjtcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICgodGhpcy5oaSA8PCAxNikgPj4gcykgPj4+IDE2KTtcbiAgdmFyIHNpZ24gPSAodGhpcy5oaSA8PCAxNikgPj4gMzE7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSA+PiAxNixcbiAgICAgIHNpZ24gJiAweGZmZmYpO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDMyKSwgc2lnbiwgc2lnbik7XG59XG5NbEludDY0LnByb3RvdHlwZS5sc2wxID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPDwgMSkgfCAodGhpcy5sbyA+PiAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubG8gPSAodGhpcy5sbyA8PCAxKSAmIDB4ZmZmZmZmO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNyMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPj4+IDEpIHwgKHRoaXMuaGkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gdGhpcy5oaSA+Pj4gMTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnVkaXZtb2QgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgb2Zmc2V0ID0gMDtcbiAgdmFyIG1vZHVsdXMgPSB0aGlzLmNvcHkoKTtcbiAgdmFyIGRpdmlzb3IgPSB4LmNvcHkoKTtcbiAgdmFyIHF1b3RpZW50ID0gbmV3IE1sSW50NjQoMCwwLDApO1xuICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICBvZmZzZXQrKztcbiAgICBkaXZpc29yLmxzbDEoKTtcbiAgfVxuICB3aGlsZSAob2Zmc2V0ID49IDApIHtcbiAgICBvZmZzZXQgLS07XG4gICAgcXVvdGllbnQubHNsMSgpO1xuICAgIGlmIChtb2R1bHVzLnVjb21wYXJlKGRpdmlzb3IpID49IDApIHtcbiAgICAgIHF1b3RpZW50LmxvICsrO1xuICAgICAgbW9kdWx1cyA9IG1vZHVsdXMuc3ViKGRpdmlzb3IpO1xuICAgIH1cbiAgICBkaXZpc29yLmxzcjEoKTtcbiAgfVxuICByZXR1cm4geyBxdW90aWVudCA6IHF1b3RpZW50LCBtb2R1bHVzIDogbW9kdWx1cyB9O1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gKHkpXG57XG4gIHZhciB4ID0gdGhpcztcbiAgaWYgKHkuaXNaZXJvKCkpIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHZhciBzaWduID0geC5oaSBeIHkuaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgcSA9IHgudWRpdm1vZCh5KS5xdW90aWVudDtcbiAgaWYgKHNpZ24gJiAweDgwMDApIHEgPSBxLm5lZygpO1xuICByZXR1cm4gcTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm1vZCA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgciA9IHgudWRpdm1vZCh5KS5tb2R1bHVzO1xuICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gIHJldHVybiByO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxvIHwgKHRoaXMubWkgPDwgMjQpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9GbG9hdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgodGhpcy5oaSA8PCAxNikgKiBNYXRoLnBvdygyLCAzMikgKyB0aGlzLm1pICogTWF0aC5wb3coMiwgMjQpKSArIHRoaXMubG87XG59XG5NbEludDY0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW3RoaXMuaGkgPj4gOCxcbiAgICAgICAgICB0aGlzLmhpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pID4+IDE2LFxuICAgICAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvID4+IDE2LFxuICAgICAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvICYgMHhmZl07XG59XG5NbEludDY0LnByb3RvdHlwZS5sbzMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICgodGhpcy5taSAmIDB4ZmYpIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmhpMzIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMubWkgPj4+IDgpICYgMHhmZmZmKSB8ICh0aGlzLmhpIDw8IDE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgseSkgeyByZXR1cm4geC51Y29tcGFyZSh5KSA8IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NvbXBhcmUoeCx5LCB0b3RhbCkgeyByZXR1cm4geC5jb21wYXJlKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnICh4KSB7IHJldHVybiB4Lm5lZygpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hZGQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYWRkICh4LCB5KSB7IHJldHVybiB4LmFkZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc3ViIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3N1YiAoeCwgeSkgeyByZXR1cm4geC5zdWIoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgseSkgeyByZXR1cm4geC5tdWwoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7IHJldHVybiAreC5pc1plcm8oKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpIHsgcmV0dXJuICt4LmlzTmVnKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hbmQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYW5kICh4LCB5KSB7IHJldHVybiB4LmFuZCh5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29yICh4LCB5KSB7IHJldHVybiB4Lm9yKHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfeG9yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3hvciAoeCwgeSkgeyByZXR1cm4geC54b3IoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9sZWZ0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYgKHgsIHkpIHsgcmV0dXJuIHguZGl2KHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tb2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbW9kICh4LCB5KSB7IHJldHVybiB4Lm1vZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfaW50MzIgKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19pbnQzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMiAoeCkgeyByZXR1cm4geC50b0ludCgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19mbG9hdCAoeCkgeyByZXR1cm4geC50b0Zsb2F0ICgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mb3JtYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF90b19pbnQzMlxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc196ZXJvLCBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZm9ybWF0IChmbXQsIHgpIHtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoZi5zaWduZWRjb252ICYmIGNhbWxfaW50NjRfaXNfbmVnYXRpdmUoeCkpIHtcbiAgICBmLnNpZ24gPSAtMTsgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghIGNhbWxfaW50NjRfaXNfemVybyh4KSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gYnVmZmVyLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIGJ1ZmZlciA9IGNhbWxfc3RyX3JlcGVhdCAobiwgJzAnKSArIGJ1ZmZlcjtcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBidWZmZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3BhcnNlX2RpZ2l0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3VsdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfbXVsLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2Zfc3RyaW5nKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGJhc2U2NCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoYmFzZSk7XG4gIHZhciB0aHJlc2hvbGQgPVxuICAgICAgbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmZiwgMHhmZmZmKS51ZGl2bW9kKGJhc2U2NCkucXVvdGllbnQ7XG4gIHZhciBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gIGZvciAoOzspIHtcbiAgICBpKys7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT0gOTUpIGNvbnRpbnVlO1xuICAgIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICAgIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGJyZWFrO1xuICAgIC8qIERldGVjdCBvdmVyZmxvdyBpbiBtdWx0aXBsaWNhdGlvbiBiYXNlICogcmVzICovXG4gICAgaWYgKGNhbWxfaW50NjRfdWx0KHRocmVzaG9sZCwgcmVzKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gICAgZCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gICAgcmVzID0gY2FtbF9pbnQ2NF9hZGQoY2FtbF9pbnQ2NF9tdWwoYmFzZTY0LCByZXMpLCBkKTtcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gYWRkaXRpb24gKGJhc2UgKiByZXMpICsgZCAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdChyZXMsIGQpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoYmFzZSA9PSAxMCAmJiBjYW1sX2ludDY0X3VsdChuZXcgTWxJbnQ2NCgwLCAwLCAweDgwMDApLCByZXMpKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobG8sIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICBsbyAmIDB4ZmZmZmZmLFxuICAgICgobG8gPj4+IDI0KSAmIDB4ZmYpIHwgKChoaSAmIDB4ZmZmZikgPDwgOCksXG4gICAgKGhpID4+PiAxNikgJiAweGZmZmYpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9sbzMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2xvMzIodil7IHJldHVybiB2LmxvMzIoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGkzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oaTMyKHYpeyByZXR1cm4gdi5oaTMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGFbN10gPDwgMCB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVs0XSA8PCAwIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgICAgICAgICAgICAgICAgICBhWzFdIDw8IDAgfCAoYVswXSA8PCA4KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2J5dGVzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2J5dGVzKHgpIHsgcmV0dXJuIHgudG9BcnJheSgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9oYXNoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2hhc2godil7XG4gIHJldHVybiAodi5sbzMyKCkpIF4gKHYuaGkzMigpKVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmQsIEFuZHkgUmF5XG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG4vL1xuLy8gQmlnYXJyYXkuXG4vL1xuLy8gLSBhbGwgYmlnYXJyYXkgdHlwZXMgaW5jbHVkaW5nIEludDY0IGFuZCBDb21wbGV4LlxuLy8gLSBmb3J0cmFuICsgYyBsYXlvdXRzXG4vLyAtIHN1Yi9zbGljZS9yZXNoYXBlXG4vLyAtIHJldGFpbiBmYXN0IHBhdGggZm9yIDFkIGFycmF5IGFjY2Vzc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2luaXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYmFfaW5pdCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSB7XG4gIHZhciBuX2RpbXMgPSBkaW1zLmxlbmd0aDtcbiAgdmFyIHNpemUgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5fZGltczsgaSsrKSB7XG4gICAgaWYgKGRpbXNbaV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgc2l6ZSA9IHNpemUgKiBkaW1zW2ldO1xuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpe1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgNzogY2FzZSAxMDogY2FzZSAxMTogcmV0dXJuIDI7XG4gIGRlZmF1bHQ6IHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSl7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMDogIHZpZXcgPSBGbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDE6ICB2aWV3ID0gRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAyOiAgdmlldyA9IEludDhBcnJheTsgYnJlYWs7XG4gIGNhc2UgMzogIHZpZXcgPSBVaW50OEFycmF5OyBicmVhaztcbiAgY2FzZSA0OiAgdmlldyA9IEludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDU6ICB2aWV3ID0gVWludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDY6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgNzogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA4OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDk6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTA6IHZpZXcgPSBGbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDExOiB2aWV3ID0gRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAxMjogdmlldyA9IFVpbnQ4QXJyYXk7IGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPCA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycmF5XCJcblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA+PSA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycjAyXCJcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG5mdW5jdGlvbiBNbF9CaWdhcnJheSAoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcblxuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IGNhbWxfYmFfY3VzdG9tX25hbWU7XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHZhciBvZnMgPSAwO1xuICBpZih0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgaWYgKCEgKGFyZyBpbnN0YW5jZW9mIEFycmF5KSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiYmlnYXJyYXkuanM6IGludmFsaWQgb2Zmc2V0XCIpO1xuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBhcmcubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgaWYodGhpcy5sYXlvdXQgPT0gMCAvKiBjX2xheW91dCAqLykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMCB8fCBhcmdbaV0gPj0gdGhpcy5kaW1zW2ldKVxuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIGFyZ1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuZGltcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGFyZ1tpXSA8IDEgfHwgYXJnW2ldID4gdGhpcy5kaW1zW2ldKXtcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgfVxuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyAoYXJnW2ldIC0gMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvZnM7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgbCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGggPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLGgpO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIHIgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gWzI1NCwgciwgaV07XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdXG4gIH1cbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IHZbMV07XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IHZbMl07XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwXG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGEgPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgaWYoYSA9PSBiKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGEgOiBiO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciBpbSA9IHZbMV07XG4gICAgdmFyIHJlID0gdlsyXTtcbiAgICBpZihpbSA9PSByZSl7XG4gICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gaW0gOiByZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhLmZpbGwodik7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIChiLCB0b3RhbCkge1xuICBpZiAodGhpcy5sYXlvdXQgIT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9IGIua2luZCkge1xuICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICB2YXIgazIgPSAgICBiLmtpbmQgfCAoYi5sYXlvdXQgPDwgOCk7XG4gICAgcmV0dXJuIGsyIC0gazE7XG4gIH1cbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYi5kaW1zLmxlbmd0aCkge1xuICAgIHJldHVybiBiLmRpbXMubGVuZ3RoIC0gdGhpcy5kaW1zLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAodGhpcy5kaW1zW2ldICE9IGIuZGltc1tpXSlcbiAgICAgIHJldHVybiAodGhpcy5kaW1zW2ldIDwgYi5kaW1zW2ldKSA/IC0xIDogMTtcbiAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gIGNhc2UgMTA6XG4gIGNhc2UgMTE6XG4gICAgLy8gRmxvYXRzXG4gICAgdmFyIHgsIHk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHggPSB0aGlzLmRhdGFbaV07XG4gICAgICB5ID0gYi5kYXRhW2ldO1xuICAgICAgaWYgKHggPCB5KVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoeCA+IHkpXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKHggIT0geSkge1xuICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICBpZiAoeCA9PSB4KSByZXR1cm4gMTtcbiAgICAgICAgaWYgKHkgPT0geSkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKz0yKSB7XG4gICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA8IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPiBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPCAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApID4gKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAyOlxuICBjYXNlIDM6XG4gIGNhc2UgNDpcbiAgY2FzZSA1OlxuICBjYXNlIDY6XG4gIGNhc2UgODpcbiAgY2FzZSA5OlxuICBjYXNlIDEyOlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldIDwgYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5X2NfMV8xXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgICA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlID0gbmV3IE1sX0JpZ2FycmF5KClcbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIGlmKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpe1xuICAgIGlmKChhcmcgaW5zdGFuY2VvZiBBcnJheSkgJiYgYXJnLmxlbmd0aCA9PSAxKVxuICAgICAgYXJnID0gYXJnWzBdO1xuICAgIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiTWxfQmlnYXJyYXlfY18xXzEub2Zmc2V0XCIpO1xuICB9XG4gIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pXG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJnO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICByZXR1cm4gdGhpcy5kYXRhW29mc107XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgdGhpcy5kYXRhW29mc10gPSB2O1xuICByZXR1cm4gMFxufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHRoaXMuZGF0YS5maWxsKHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLGIsdG90YWwpe1xuICByZXR1cm4gYS5jb21wYXJlKGIsdG90YWwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIE1sX0JpZ2FycmF5X2NfMV8xLCBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpe1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmKGNhbWxfYmFfZ2V0X3NpemUoZGltcykgKiBzaXplX3Blcl9lbGVtZW50ICE9IGRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwibGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggZGltc1wiKTtcbiAgfVxuICBpZihsYXlvdXQgPT0gMCAmJiAvLyBjX2xheW91dFxuICAgICBkaW1zLmxlbmd0aCA9PSAxICYmIC8vIEFycmF5MVxuICAgICBzaXplX3Blcl9lbGVtZW50ID09IDEpIC8vIDEtdG8tMSBtYXBwaW5nXG4gICAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5KGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG5cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGUoa2luZCwgbGF5b3V0LCBkaW1zX21sKSB7XG4gIHZhciBkaW1zID0gY2FtbF9qc19mcm9tX2FycmF5KGRpbXNfbWwpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBjYW1sX2JhX2dldF9zaXplKGRpbXMpKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NoYW5nZV9sYXlvdXRcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9jaGFuZ2VfbGF5b3V0KGJhLCBsYXlvdXQpIHtcbiAgaWYoYmEubGF5b3V0ID09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2JhLmRpbXMubGVuZ3RoIC0gaSAtIDFdO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGxheW91dCwgbmV3X2RpbXMsIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZChiYSkge1xuICByZXR1cm4gYmEua2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9sYXlvdXRcbmZ1bmN0aW9uIGNhbWxfYmFfbGF5b3V0KGJhKSB7XG4gIHJldHVybiBiYS5sYXlvdXQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbnVtX2RpbXNcbmZ1bmN0aW9uIGNhbWxfYmFfbnVtX2RpbXMoYmEpIHtcbiAgcmV0dXJuIGJhLmRpbXMubGVuZ3RoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2RpbShiYSwgaSkge1xuICBpZiAoaSA8IDAgfHwgaSA+PSBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5kaW1cIik7XG4gIHJldHVybiBiYS5kaW1zW2ldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMShiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8yXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMihiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8zXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMyhiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X2dlbmVyaWMoYmEsIGkpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpO1xuICByZXR1cm4gYmEuZ2V0KG9mcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MTYoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiAoYjEgfCAoYjIgPDwgOCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDMyKGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICByZXR1cm4gKCAoYjEgPDwgMCkgIHxcbiAgICAgICAgICAgKGIyIDw8IDgpICB8XG4gICAgICAgICAgIChiMyA8PCAxNikgfFxuICAgICAgICAgICAoYjQgPDwgMjQpICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0NjQoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHZhciBiNSA9IGJhLmdldChvZnMrNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMrNSk7XG4gIHZhciBiNyA9IGJhLmdldChvZnMrNik7XG4gIHZhciBiOCA9IGJhLmdldChvZnMrNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCxiNyxiNixiNSxiNCxiMyxiMixiMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8xKGJhLCBpMCkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChpMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8yXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8yKGJhLCBpMCwgaTEpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8zXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8zKGJhLCBpMCwgaTEsIGkyKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX3NldF9nZW5lcmljKGJhLCBpLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MTYoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDMyKGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMiwgKHYgPj4+IDE2KSAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzMsICh2ID4+PiAyNCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0NjQoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciB2ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcytpLCB2WzctaV0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8xXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8xKGJhLCBpMCwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGkwKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMV0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzMoYmEsIGkwLCBpMSwgaTIsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9IHNyYy5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZHN0LmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKGRzdC5kaW1zW2ldICE9IHNyYy5kaW1zW2ldKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBkc3QuZGF0YS5zZXQoc3JjLmRhdGEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zdWJcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3N1YihiYSwgb2ZzLCBsZW4pIHtcbiAgdmFyIGNoYW5nZWRfZGltO1xuICB2YXIgbXVsID0gMTtcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAoYmEuZGltcy5sZW5ndGggLSAxKTsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IGJhLmRpbXMubGVuZ3RoIC0gMTtcbiAgICBvZnMgPSBvZnMgLSAxO1xuICB9XG4gIGlmIChvZnMgPCAwIHx8IGxlbiA8IDAgfHwgKG9mcyArIGxlbikgPiBiYS5kaW1zW2NoYW5nZWRfZGltXSl7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc3ViOiBiYWQgc3ViLWFycmF5XCIpO1xuICB9XG4gIHZhciBuZXdfZGltcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2ldO1xuICBuZXdfZGltc1tjaGFuZ2VkX2RpbV0gPSBsZW47XG4gIG11bCAqPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIG11bCwgKG9mcyArIGxlbikgKiBtdWwpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zbGljZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zbGljZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbnVtX2luZHMgPSB2aW5kLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gW107XG4gIHZhciBzdWJfZGltcyA9IFtdO1xuICB2YXIgb2ZzO1xuXG4gIGlmIChudW1faW5kcyA+IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnNsaWNlOiB0b28gbWFueSBpbmRpY2VzXCIpO1xuXG4gIC8vIENvbXB1dGUgb2Zmc2V0IGFuZCBjaGVjayBib3VuZHNcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSB2aW5kW2ldO1xuICAgIGZvciAoOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMDtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UobnVtX2luZHMpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2JhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMgKyBpXSA9IHZpbmRbaV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBzaXplX3Blcl9lbGVtZW50LCAob2ZzICsgc2l6ZSkgKiBzaXplX3Blcl9lbGVtZW50KTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIHN1Yl9kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfcmVzaGFwZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuZnVuY3Rpb24gY2FtbF9iYV9yZXNoYXBlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBuZXdfZGltID0gW107XG4gIHZhciBudW1fZGltcyA9IHZpbmQubGVuZ3RoO1xuXG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICB9XG4gIHZhciBudW1fZWx0cyA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgIG5ld19kaW1baV0gPSB2aW5kW2ldO1xuICAgIGlmIChuZXdfZGltW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBudW1fZWx0cyA9IG51bV9lbHRzICogbmV3X2RpbVtpXTtcbiAgfVxuXG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgLy8gQ2hlY2sgdGhhdCBzaXplcyBhZ3JlZVxuICBpZiAobnVtX2VsdHMgIT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgKGJhLmtpbmQgfCAoYmEubGF5b3V0IDw8IDgpKSk7XG4gIGlmKGJhLmNhbWxfY3VzdG9tID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKGJhLmRpbXNbaV0gPCAweGZmZmYpXG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGltc1tpXSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCAweGZmZmYpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIDApO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB3cml0ZXIud3JpdGUoMzIsYmEuZGltc1tpXSlcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgd3JpdGVyLndyaXRlKDgsMCk7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoYmEuZ2V0KGkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGogPSBiYS5nZXQoaSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzJdKSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGNvbXBsZXggPSBiYS5nZXQoaSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMV0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzJdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgbmFtZSl7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmXG4gIHZhciBsYXlvdXQgPSAodGFnID4+IDgpICYgMTtcbiAgdmFyIGRpbXMgPSBbXVxuICBpZihuYW1lID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZV9kaW0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgaWYoc2l6ZV9kaW0gPT0gMHhmZmZmKXtcbiAgICAgICAgdmFyIHNpemVfZGltX2hpID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgdmFyIHNpemVfZGltX2xvID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgaWYoc2l6ZV9kaW1faGkgIT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSBkaW1zLnB1c2gocmVhZGVyLnJlYWQzMnUoKSk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSk7XG4gIHZhciBiYSA9IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHZhciBzaXh0eSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICBpZihzaXh0eSkgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjYW5ub3QgcmVhZCBiaWdhcnJheSB3aXRoIDY0LWJpdCBPQ2FtbCBpbnRzXCIpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW50NjQgPSBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xuICAgICAgYmEuc2V0KGksaW50NjQpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVha1xuICB9XG4gIHN6WzBdID0gKDQgKyBudW1fZGltcykgKiA0O1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vRGVwcmVjYXRlZFxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfZnJvbVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2Zyb20oZGF0YTEsIGRhdGEyLCBqc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKXtcbiAgaWYoZGF0YTIgfHwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSA9PSAyKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiKTtcbiAgfVxuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YTEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2hhc2ggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX2hhc2goYmEpe1xuICB2YXIgbnVtX2VsdHMgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICB2YXIgaCA9IDA7XG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMjU2KSBudW1fZWx0cyA9IDI1NjtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgNCA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9NCl7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCA4KSB8IChiYS5kYXRhW2krMl0gPDwgMTYpIHwgKGJhLmRhdGFbaSszXSA8PCAyNCk7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgdyA9IDA7XG4gICAgc3dpdGNoIChudW1fZWx0cyAmIDMpIHtcbiAgICBjYXNlIDM6IHcgID0gYmEuZGF0YVtpKzJdIDw8IDE2OyAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMjogdyB8PSBiYS5kYXRhW2krMV0gPDwgODsgICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAxOiB3IHw9IGJhLmRhdGFbaSswXTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDIgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTIpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgMTYpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPSAwKVxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIG51bV9lbHRzICo9IDJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYmEpe1xuICByZXR1cm4gYmEuZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGtpbmQ7XG4gIGlmICAgICAgKHRhIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSBraW5kID0gMDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpIGtpbmQgPSAxO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDhBcnJheSkga2luZCA9IDI7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDhBcnJheSkga2luZCA9IDM7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDE2QXJyYXkpIGtpbmQgPSA0O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSBraW5kID0gNTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQzMkFycmF5KSBraW5kID0gNjtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5OiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICByZXR1cm4ga2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZCA9IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSk7XG4gIHZhciB0YSA9XG4gICAgICAvKiBOZWVkZWQgdG8gYXZvaWQgdW5zaWduZWQgc2V0dGVycyBvdmVyZmxvd2luZ1xuICAgICAgICAgdGhlIHJhbmdlIG9mIE9DYW1sIFtpbnQzMl0gdmFsdWVzLiAqL1xuICAgICAgdGEgaW5zdGFuY2VvZiBVaW50MzJBcnJheSA/XG4gICAgICBuZXcgSW50MzJBcnJheSh0YS5idWZmZXIgLHRhLmJ5dGVPZmZzZXQsIHRhLmxlbmd0aCkgOiB0YTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCAwLCBbdGEubGVuZ3RoXSwgdGEpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT0gXCIlZFwiKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiK2kpO1xuICB2YXIgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIGlmIChpIDwgMCkgeyBpZiAoZi5zaWduZWRjb252KSB7IGYuc2lnbiA9IC0xOyBpID0gLWk7IH0gZWxzZSBpID4+Pj0gMDsgfVxuICB2YXIgcyA9IGkudG9TdHJpbmcoZi5iYXNlKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSAnICc7XG4gICAgdmFyIG4gPSBmLnByZWMgLSBzLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIHMgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBzO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Vcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKSB7XG4gIHZhciBpID0gMCwgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLCBiYXNlID0gMTAsIHNpZ24gPSAxO1xuICBpZiAobGVuID4gMCkge1xuICAgIHN3aXRjaCAoY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpKSB7XG4gICAgY2FzZSA0NTogaSsrOyBzaWduID0gLTE7IGJyZWFrO1xuICAgIGNhc2UgNDM6IGkrKzsgc2lnbiA9IDE7IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PSA0OClcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpKSB7XG4gICAgY2FzZSAxMjA6IGNhc2UgODg6IGJhc2UgPSAxNjsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlIDExMTogY2FzZSA3OTogYmFzZSA9ICA4OyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgIDk4OiBjYXNlIDY2OiBiYXNlID0gIDI7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTc6IGNhc2UgODU6IGkgKz0gMjsgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gW2ksIHNpZ24sIGJhc2VdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2RpZ2l0XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2RpZ2l0KGMpIHtcbiAgaWYgKGMgPj0gNDggJiYgYyA8PSA1NykgIHJldHVybiBjIC0gNDg7XG4gIGlmIChjID49IDY1ICYmIGMgPD0gOTApICByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyAocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocyk7XG4gIHZhciBpID0gclswXSwgc2lnbiA9IHJbMV0sIGJhc2UgPSByWzJdO1xuICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICB2YXIgdGhyZXNob2xkID0gLTEgPj4+IDA7XG4gIHZhciBjID0gKGkgPCBsZW4pP2NhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk6MDtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGQ7XG4gIGZvciAoaSsrO2k8bGVuO2krKykge1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAvLyBGb3IgYmFzZSBkaWZmZXJlbnQgZnJvbSAxMCwgd2UgZXhwZWN0IGFuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uLFxuICAvLyBoZW5jZSBhbnkgdmFsdWUgb2YgJ3JlcycgKGxlc3MgdGhhbiAndGhyZXNob2xkJykgaXMgYWNjZXB0YWJsZS5cbiAgLy8gQnV0IHdlIGhhdmUgdG8gY29udmVydCB0aGUgcmVzdWx0IGJhY2sgdG8gYSBzaWduZWQgaW50ZWdlci5cbiAgcmVzID0gc2lnbiAqIHJlcztcbiAgaWYgKChiYXNlID09IDEwKSAmJiAoKHJlcyB8IDApICE9IHJlcykpXG4gICAgLyogU2lnbmVkIHJlcHJlc2VudGF0aW9uIGV4cGVjdGVkLCBhbGxvdyAtMl4obmJpdHMtMSkgdG8gMl4obmJpdHMtMSkgLSAxICovXG4gICAgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX211bCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tdWwoYSxiKXtcbiAgcmV0dXJuIE1hdGguaW11bChhLGIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2RpdlxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9kaXYoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiAoeC95KXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9tb2QoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiB4JXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNlxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoKCh4ICYgMHgwMEZGKSA8PCA4KSB8XG4gICAgICAgICAgICgoeCAmIDB4RkYwMCkgPj4gOCkpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYnN3YXBcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYnN3YXAoeCkge1xuICByZXR1cm4gKCgoeCAmIDB4MDAwMDAwRkYpIDw8IDI0KSB8XG4gICAgICAgICAgKCh4ICYgMHgwMDAwRkYwMCkgPDwgOCkgfFxuICAgICAgICAgICgoeCAmIDB4MDBGRjAwMDApID4+PiA4KSB8XG4gICAgICAgICAgKCh4ICYgMHhGRjAwMDAwMCkgPj4+IDI0KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX3VuaXZfcGFyYW0gbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1ZlcnNpb246IDwgNC4xMlxuZnVuY3Rpb24gY2FtbF9oYXNoX3VuaXZfcGFyYW0gKGNvdW50LCBsaW1pdCwgb2JqKSB7XG4gIHZhciBoYXNoX2FjY3UgPSAwO1xuICBmdW5jdGlvbiBoYXNoX2F1eCAob2JqKSB7XG4gICAgbGltaXQgLS07XG4gICAgaWYgKGNvdW50IDwgMCB8fCBsaW1pdCA8IDApIHJldHVybjtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkgJiYgb2JqWzBdID09PSAob2JqWzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKG9ialswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqWzJdKSB8IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTA6XG4gICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgbGltaXQrKzsgaGFzaF9hdXgob2JqKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgb2JqWzBdKSB8IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSBvYmoubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgaGFzaF9hdXggKG9ialtpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKG9iaikpIHtcbiAgICAgIGNvdW50IC0tO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQob2JqKTtcbiAgICAgIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZvciAodmFyIGIgPSBjb250ZW50LCBsID0gYi5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgICAgfSBlbHNlIHsgLyogQVJSQVkgKi9cbiAgICAgICAgZm9yICh2YXIgYSA9IGNvbnRlbnQsIGwgPSBhLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYVtpXSkgfCAwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcob2JqKSkge1xuICAgICAgdmFyIGpzYnl0ZXMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG9iaik7XG4gICAgICBmb3IgKHZhciBiID0ganNieXRlcywgbCA9IGpzYnl0ZXMubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBmb3IgKHZhciBiID0gb2JqLCBsID0gb2JqLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSAob2JqfDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBjb3VudCAtLTtcbiAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9iaikgfCAwO1xuICAgIH0gZWxzZSBpZiAob2JqID09PSArb2JqKSB7XG4gICAgICAvLyBGbG9hdFxuICAgICAgY291bnQtLTtcbiAgICAgIHZhciBwID0gY2FtbF9pbnQ2NF90b19ieXRlcyAoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IChvYmopKTtcbiAgICAgIGZvciAodmFyIGkgPSA3OyBpID49IDA7IGktLSkgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgcFtpXSkgfCAwO1xuICAgIH0gZWxzZSBpZihvYmogJiYgb2JqLmNhbWxfY3VzdG9tKSB7XG4gICAgICBpZihjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXS5oYXNoKSB7XG4gICAgICAgIHZhciBoID0gY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaChvYmopIHwgMDtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgaCkgfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBoYXNoX2F1eCAob2JqKTtcbiAgcmV0dXJuIGhhc2hfYWNjdSAmIDB4M0ZGRkZGRkY7XG59XG5cbi8vZnVuY3Rpb24gUk9UTDMyKHgsbikgeyByZXR1cm4gKCh4IDw8IG4pIHwgKHggPj4+ICgzMi1uKSkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50KGgsZCkge1xuICBkID0gY2FtbF9tdWwoZCwgMHhjYzllMmQ1MXwwKTtcbiAgZCA9ICgoZCA8PCAxNSkgfCAoZCA+Pj4gKDMyLTE1KSkpOyAvLyBST1RMMzIoZCwgMTUpO1xuICBkID0gY2FtbF9tdWwoZCwgMHgxYjg3MzU5Myk7XG4gIGggXj0gZDtcbiAgaCA9ICgoaCA8PCAxMykgfCAoaCA+Pj4gKDMyLTEzKSkpOyAgIC8vUk9UTDMyKGgsIDEzKTtcbiAgcmV0dXJuICgoKGggKyAoaCA8PCAyKSl8MCkgKyAoMHhlNjU0NmI2NHwwKSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9tdWxcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmluYWwoaCkge1xuICBoIF49IGggPj4+IDE2O1xuICBoID0gY2FtbF9tdWwgKGgsIDB4ODVlYmNhNmJ8MCk7XG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPSBjYW1sX211bCAoaCwgMHhjMmIyYWUzNXwwKTtcbiAgaCBePSBoID4+PiAxNjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9oYXNoX21peF9pbnQ2NFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9mbG9hdCAoaCwgdjApIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfaW50NjQoaCwgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0ICh2MCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnQ2NFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfbG8zMiwgY2FtbF9pbnQ2NF9oaTMyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludDY0IChoLCB2KSB7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2xvMzIodikpO1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9oaTMyKHYpKTtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCwgaSwgdztcbiAgZm9yIChpID0gMDsgaSArIDQgPD0gbGVuOyBpICs9IDQpIHtcbiAgICB3ID0gcy5jaGFyQ29kZUF0KGkpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCA4KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMikgPDwgMTYpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSszKSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHMuY2hhckNvZGVBdChpKzIpIDw8IDE2O1xuICBjYXNlIDI6IHcgfD0gcy5jaGFyQ29kZUF0KGkrMSkgPDwgODtcbiAgY2FzZSAxOlxuICAgIHcgfD0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgZGVmYXVsdDpcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHNbaV1cbiAgICAgIHwgKHNbaSsxXSA8PCA4KVxuICAgICAgfCAoc1tpKzJdIDw8IDE2KVxuICAgICAgfCAoc1tpKzNdIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICBjYXNlIDM6IHcgID0gc1tpKzJdIDw8IDE2O1xuICBjYXNlIDI6IHcgfD0gc1tpKzFdIDw8IDg7XG4gIGNhc2UgMTogdyB8PSBzW2ldO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgZGVmYXVsdDpcbiAgfVxuICBoIF49IGxlbjtcbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlcyhoLCB2KSB7XG4gIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KHYpO1xuICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNvbnRlbnQpXG4gIGVsc2UgLyogQVJSQVkgKi9cbiAgICByZXR1cm4gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCwgY29udGVudCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsIHYpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHYpKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2ggbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0LCBjYW1sX2hhc2hfbWl4X3N0cmluZywgY2FtbF9oYXNoX21peF9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9oYXNoIChjb3VudCwgbGltaXQsIHNlZWQsIG9iaikge1xuICB2YXIgcXVldWUsIHJkLCB3ciwgc3osIG51bSwgaCwgdiwgaSwgbGVuO1xuICBzeiA9IGxpbWl0O1xuICBpZiAoc3ogPCAwIHx8IHN6ID4gMjU2KSBzeiA9IDI1NjtcbiAgbnVtID0gY291bnQ7XG4gIGggPSBzZWVkO1xuICBxdWV1ZSA9IFtvYmpdOyByZCA9IDA7IHdyID0gMTtcbiAgd2hpbGUgKHJkIDwgd3IgJiYgbnVtID4gMCkge1xuICAgIHYgPSBxdWV1ZVtyZCsrXTtcbiAgICBpZiAodiAmJiB2LmNhbWxfY3VzdG9tKXtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50IChoLCBoaCk7XG4gICAgICAgIG51bSAtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKHZbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHZbMl0pO1xuICAgICAgICBudW0tLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MDpcbiAgICAgICAgLy8gRm9yd2FyZFxuICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKSB7XG4gICAgICAgICAgLyogQWxsIGNvbnRpbnVhdGlvbnMgaGFzaCB0byB0aGUgc2FtZSB2YWx1ZSxcbiAgICAgICAgICAgICBzaW5jZSB3ZSBoYXZlIG5vIGlkZWEgaG93IHRvIGRpc3Rpbmd1aXNoIHRoZW0uICovXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdGFnKTtcbiAgICAgICAgZm9yIChpID0gMSwgbGVuID0gdi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgcXVldWVbd3IrK10gPSB2W2ldO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodnwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHYrdisxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLHYpO1xuICAgICAgbnVtLS07XG4gICAgfVxuICB9XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpO1xuICByZXR1cm4gaCAmIDB4M0ZGRkZGRkY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2hhc2hcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfZmluYWwsIGNhbWxfaGFzaF9taXhfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19oYXNoKGgsIHYpe1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdik7XG4gIHZhciBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNGRkZGRkZGO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9jb25zdGFudHNcbnZhciBjYW1sX21hcnNoYWxfY29uc3RhbnRzID0ge1xuICBQUkVGSVhfU01BTExfQkxPQ0s6ICAgICAgICAgMHg4MCxcbiAgUFJFRklYX1NNQUxMX0lOVDogICAgICAgICAgIDB4NDAsXG4gIFBSRUZJWF9TTUFMTF9TVFJJTkc6ICAgICAgICAweDIwLFxuICBDT0RFX0lOVDg6ICAgICAgICAgICAgICAgICAgMHgwMCxcbiAgQ09ERV9JTlQxNjogICAgICAgICAgICAgICAgIDB4MDEsXG4gIENPREVfSU5UMzI6ICAgICAgICAgICAgICAgICAweDAyLFxuICBDT0RFX0lOVDY0OiAgICAgICAgICAgICAgICAgMHgwMyxcbiAgQ09ERV9TSEFSRUQ4OiAgICAgICAgICAgICAgIDB4MDQsXG4gIENPREVfU0hBUkVEMTY6ICAgICAgICAgICAgICAweDA1LFxuICBDT0RFX1NIQVJFRDMyOiAgICAgICAgICAgICAgMHgwNixcbiAgQ09ERV9CTE9DSzMyOiAgICAgICAgICAgICAgIDB4MDgsXG4gIENPREVfQkxPQ0s2NDogICAgICAgICAgICAgICAweDEzLFxuICBDT0RFX1NUUklORzg6ICAgICAgICAgICAgICAgMHgwOSxcbiAgQ09ERV9TVFJJTkczMjogICAgICAgICAgICAgIDB4MEEsXG4gIENPREVfRE9VQkxFX0JJRzogICAgICAgICAgICAweDBCLFxuICBDT0RFX0RPVUJMRV9MSVRUTEU6ICAgICAgICAgMHgwQyxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0JJRzogICAgIDB4MEQsXG4gIENPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6ICAweDBFLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzogICAgMHgwRixcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6IDB4MDcsXG4gIENPREVfQ09ERVBPSU5URVI6ICAgICAgICAgICAweDEwLFxuICBDT0RFX0lORklYUE9JTlRFUjogICAgICAgICAgMHgxMSxcbiAgQ09ERV9DVVNUT006ICAgICAgICAgICAgICAgIDB4MTIsXG4gIENPREVfQ1VTVE9NX0xFTjogICAgICAgICAgICAweDE4LFxuICBDT0RFX0NVU1RPTV9GSVhFRDogICAgICAgICAgMHgxOVxufVxuXG5cbi8vUHJvdmlkZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBVSW50OEFycmF5UmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IHM7IHRoaXMuaSA9IGk7IH1cblVJbnQ4QXJyYXlSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuc1t0aGlzLmkrK10gPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoc1tpXSA8PCA4KSB8IHNbaSArIDFdXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCA+PiAxNikgfCBzW2kgKyAxXTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoc1tpXSA8PCAyNCkgfCAoc1tpKzFdIDw8IDE2KSB8XG4gICAgICAgICAgICAoc1tpKzJdIDw8IDgpIHwgc1tpKzNdKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzW2ldIDw8IDI0KSB8IChzW2krMV0gPDwgMTYpIHxcbiAgICAgIChzW2krMl0gPDwgOCkgfCBzW2krM107XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKSk7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbik7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbFN0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gTWxTdHJpbmdSZWFkZXIgKHMsIGkpIHsgdGhpcy5zID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTsgdGhpcy5pID0gaTsgfVxuTWxTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgocy5jaGFyQ29kZUF0KGkpIDw8IDI0KSB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKHMuY2hhckNvZGVBdChpKzIpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkrMykpID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zdWJzdHJpbmcoaSwgaSArIGxlbikpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIHZhciBzID0gdGhpcy5zO1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIGZvcih2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgYltqXSA9IHMuY2hhckNvZGVBdChpICsgaik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGI7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogQmlnU3RyaW5nUmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheSwgY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gQmlnU3RyaW5nUmVhZGVyIChicywgaSkgeyB0aGlzLnMgPSBiczsgdGhpcy5pID0gaTsgfVxuQmlnU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbWxfYmFfZ2V0XzEodGhpcy5zLHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbWxfYmFfZ2V0XzEodGhpcy5zLHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgOCkgfCBjYW1sX2JhX2dldF8xKHMsaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpIDw8IDI0ID4+IDE2KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpICAgICAgICAgKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgICA8PCAyNCkgfCAoY2FtbF9iYV9nZXRfMShzLGkrMSkgPDwgMTYpIHxcbiAgICAgIChjYW1sX2JhX2dldF8xKHMsaSsyKSA8PCA4KSAgfCBjYW1sX2JhX2dldF8xKHMsaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdmFyIGFyciA9IG5ldyBBcnJheShsZW4pXG4gICAgZm9yKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKXtcbiAgICAgIGFycltqXSA9IGNhbWxfYmFfZ2V0XzEodGhpcy5zLCBpK2opO1xuICAgIH1cbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdmFyIG9mZnNldCA9IHRoaXMub2Zmc2V0KGkpO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIHRoaXMucy5kYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKTtcbiAgfVxufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzIChhKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKGNhbWxfaW50NjRfb2ZfYnl0ZXMgKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlclxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChzLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IE1sU3RyaW5nUmVhZGVyLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyLCBjYW1sX3N0cmluZ19vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKHMsb2ZzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgTWxTdHJpbmdSZWFkZXIgKGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICBzaXplWzBdID0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMgKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyAodik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB3cml0ZXIud3JpdGUgKDgsIGJbaV0pO1xuICBzaXplc1swXSA9IDg7IHNpemVzWzFdID0gODtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl91bm1hcnNoYWxcbmZ1bmN0aW9uIGNhbWxfaW50MzJfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHNpemVbMF0gPSA0O1xuICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHN3aXRjaCAocmVhZGVyLnJlYWQ4dSAoKSkge1xuICBjYXNlIDE6XG4gICAgc2l6ZVswXSA9IDQ7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICBjYXNlIDI6XG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBuYXRpdmUgaW50ZWdlciB2YWx1ZSB0b28gbGFyZ2VcIik7XG4gIGRlZmF1bHQ6IGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPVxuICAgIHtcIl9qXCI6IHtcbiAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQ2NF91bm1hcnNoYWwsXG4gICAgICBzZXJpYWxpemUgIDogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgICAgZml4ZWRfbGVuZ3RoIDogOCxcbiAgICAgIGNvbXBhcmUgOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgICBoYXNoIDogY2FtbF9pbnQ2NF9oYXNoXG4gICAgfSxcbiAgICAgXCJfaVwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9uXCI6IHtcbiAgICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9iaWdhcnJheVwiOntcbiAgICAgICBkZXNlcmlhbGl6ZSA6IChmdW5jdGlvbiAocmVhZGVyLCBzeikge3JldHVybiBjYW1sX2JhX2Rlc2VyaWFsaXplIChyZWFkZXIsc3osXCJfYmlnYXJyYXlcIil9KSxcbiAgICAgICBzZXJpYWxpemUgOiBjYW1sX2JhX3NlcmlhbGl6ZSxcbiAgICAgICBjb21wYXJlIDogY2FtbF9iYV9jb21wYXJlLFxuICAgICAgIGhhc2g6IGNhbWxfYmFfaGFzaCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyMDJcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycjAyXCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH1cbiAgICB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9mbG9hdF9vZl9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX2RlY29tcHJlc3NfaW5wdXRcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpIHtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N0Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT0gMCkge1xuICAgICAgYyA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBuNyA9IG4gPDwgNztcbiAgICAgIGlmIChuICE9IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Rik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG4gIHZhciBtYWdpYyA9IHJlYWRlci5yZWFkMzJ1ICgpXG4gIHN3aXRjaChtYWdpYyl7XG4gIGNhc2UgMHg4NDk1QTZCRTogLyogSW50ZXh0X21hZ2ljX251bWJlcl9zbWFsbCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gMjA7XG4gICAgdmFyIGNvbXByZXNzZWQgPSAwO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciB1bmNvbXByZXNzZWRfZGF0YV9sZW4gPSBkYXRhX2xlbjtcbiAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgX3NpemVfMzIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgX3NpemVfNjQgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkQ6IC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gcmVhZGVyLnJlYWQ4dSgpICYgMHgzRjtcbiAgICB2YXIgY29tcHJlc3NlZCA9IDE7XG4gICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIG51bV9vYmplY3RzID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIF9zaXplXzMyID0gcmVhZHZscSAob3ZlcmZsb3cpO1xuICAgIHZhciBfc2l6ZV82NCA9IHJlYWR2bHEgKG92ZXJmbG93KTtcbiAgICBpZihvdmVyZmxvd1swXSl7XG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIpO1xuICAgIH1cbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkY6IC8qIEludGV4dF9tYWdpY19udW1iZXJfYmlnICovXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIGEgMzItYml0IHBsYXRmb3JtXCIpO1xuICAgIGJyZWFrXG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IGJhZCBvYmplY3RcIik7XG4gICAgYnJlYWs7XG4gIH1cbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gKG51bV9vYmplY3RzID4gMCk/W106bnVsbDtcbiAgdmFyIG9ial9jb3VudGVyID0gMDtcbiAgZnVuY3Rpb24gaW50ZXJuX3JlYyAocmVhZGVyKSB7XG4gICAgdmFyIGNvZGUgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgIGlmIChjb2RlID49IDB4NDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovKSB7XG4gICAgICBpZiAoY29kZSA+PSAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovKSB7XG4gICAgICAgIHZhciB0YWcgPSBjb2RlICYgMHhGO1xuICAgICAgICB2YXIgc2l6ZSA9IChjb2RlID4+IDQpICYgMHg3O1xuICAgICAgICB2YXIgdiA9IFt0YWddO1xuICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZVxuICAgICAgICByZXR1cm4gKGNvZGUgJiAweDNGKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvZGUgPj0gMHgyMC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcgKi8pIHtcbiAgICAgICAgdmFyIGxlbiA9IGNvZGUgJiAweDFGO1xuICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoKGNvZGUpIHtcbiAgICAgICAgY2FzZSAweDAwOiAvL2NzdC5DT0RFX0lOVDg6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkOHMgKCk7XG4gICAgICAgIGNhc2UgMHgwMTogLy9jc3QuQ09ERV9JTlQxNjpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQxNnMgKCk7XG4gICAgICAgIGNhc2UgMHgwMjogLy9jc3QuQ09ERV9JTlQzMjpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG4gICAgICAgIGNhc2UgMHgwMzogLy9jc3QuQ09ERV9JTlQ2NDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGludGVnZXIgdG9vIGxhcmdlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MDQ6IC8vY3N0LkNPREVfU0hBUkVEODpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNTogLy9jc3QuQ09ERV9TSEFSRUQxNjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQxNnUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDY6IC8vY3N0LkNPREVfU0hBUkVEMzI6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA4OiAvL2NzdC5DT0RFX0JMT0NLMzI6XG4gICAgICAgICAgdmFyIGhlYWRlciA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgIHZhciB0YWcgPSBoZWFkZXIgJiAweEZGO1xuICAgICAgICAgIHZhciBzaXplID0gaGVhZGVyID4+IDEwO1xuICAgICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIHY7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgxMzogLy9jc3QuQ09ERV9CTE9DSzY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGRhdGEgYmxvY2sgdG9vIGxhcmdlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MDk6IC8vY3N0LkNPREVfU1RSSU5HODpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEE6IC8vY3N0LkNPREVfU1RSSU5HMzI6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQzogLy9jc3QuQ09ERV9ET1VCTEVfTElUVExFOlxuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgODtpKyspIHRbNyAtIGldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBCOiAvL2NzdC5DT0RFX0RPVUJMRV9CSUc6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFtpXSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgdmFyIHYgPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRTogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbNyAtIGpdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBEOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MDc6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbNyAtIGpdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdltpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBGOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0JJRzpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2IFtpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEwOiAvL2NzdC5DT0RFX0NPREVQT0lOVEVSOlxuICAgICAgICBjYXNlIDB4MTE6IC8vY3N0LkNPREVfSU5GSVhQT0lOVEVSOlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGNvZGUgcG9pbnRlclwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDEyOiAvL2NzdC5DT0RFX0NVU1RPTTpcbiAgICAgICAgY2FzZSAweDE4OiAvL2NzdC5DT0RFX0NVU1RPTV9MRU46XG4gICAgICAgIGNhc2UgMHgxOTogLy9jc3QuQ09ERV9DVVNUT01fRklYRUQ6XG4gICAgICAgICAgdmFyIGMsIHMgPSBcIlwiO1xuICAgICAgICAgIHdoaWxlICgoYyA9IHJlYWRlci5yZWFkOHUgKCkpICE9IDApIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoYyk7XG4gICAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tzXTtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRfc2l6ZTtcbiAgICAgICAgICBpZighb3BzKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB1bmtub3duIGN1c3RvbSBibG9jayBpZGVudGlmaWVyXCIpO1xuICAgICAgICAgIHN3aXRjaChjb2RlKXtcbiAgICAgICAgICBjYXNlIDB4MTI6IC8vIGNzdC5DT0RFX0NVU1RPTSAoZGVwcmVjYXRlZClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxOTogLy8gY3N0LkNPREVfQ1VTVE9NX0ZJWEVEXG4gICAgICAgICAgICBpZighb3BzLmZpeGVkX2xlbmd0aClcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBleHBlY3RlZCBhIGZpeGVkLXNpemUgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IG9wcy5maXhlZF9sZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MTg6IC8vIGNzdC5DT0RFX0NVU1RPTV9MRU5cbiAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICAgIC8vIFNraXAgc2l6ZTY0XG4gICAgICAgICAgICByZWFkZXIucmVhZDMycygpOyByZWFkZXIucmVhZDMycygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvbGRfcG9zID0gcmVhZGVyLmk7XG4gICAgICAgICAgdmFyIHNpemUgPSBbMF07XG4gICAgICAgICAgdmFyIHYgPSBvcHMuZGVzZXJpYWxpemUocmVhZGVyLCBzaXplKTtcbiAgICAgICAgICBpZihleHBlY3RlZF9zaXplICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBpZihleHBlY3RlZF9zaXplICE9IHNpemVbMF0pXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW5jb3JyZWN0IGxlbmd0aCBvZiBzZXJpYWxpemVkIGN1c3RvbSBibG9ja1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGggKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbWVzc2FnZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZihjb21wcmVzc2VkKSB7XG4gICAgaWYoY2FtbF9kZWNvbXByZXNzX2lucHV0KSB7XG4gICAgICB2YXIgZGF0YSA9IHJlYWRlci5yZWFkdWludDhhcnJheShkYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gbmV3IFVpbnQ4QXJyYXkodW5jb21wcmVzc2VkX2RhdGFfbGVuKTtcbiAgICAgIHZhciByZXMgPSBjYW1sX2RlY29tcHJlc3NfaW5wdXQoZGF0YSwgcmVzKTtcbiAgICAgIHZhciByZWFkZXIgPSBuZXcgVUludDhBcnJheVJlYWRlcihyZXMsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGNvbXByZXNzZWQgb2JqZWN0LCBjYW5ub3QgZGVjb21wcmVzc1wiKTtcbiAgICB9XG4gIH1cbiAgdmFyIHJlcyA9IGludGVybl9yZWMgKHJlYWRlcik7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjIChyZWFkZXIpO1xuICB9XG4gIGlmICh0eXBlb2Ygb2ZzIT1cIm51bWJlclwiKSBvZnNbMF0gPSByZWFkZXIuaTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG4vL1ZlcnNpb246IDwgNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAyMFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPj0gNS4xLjBcbnZhciBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgPSAxNlxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSAocywgb2ZzKSB7XG4gIHZhciByID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKSwgb2ZzKTtcbiAgZnVuY3Rpb24gcmVhZHZscShvdmVyZmxvdykge1xuICAgIHZhciBjID0gci5yZWFkOHUoKTtcbiAgICB2YXIgbiA9IGMgJiAweDdGO1xuICAgIHdoaWxlICgoYyAmIDB4ODApICE9IDApIHtcbiAgICAgIGMgPSByLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdGKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cblxuICBzd2l0Y2goci5yZWFkMzJ1KCkpe1xuICBjYXNlIDB4ODQ5NUE2QkU6IC8qIEludGV4dF9tYWdpY19udW1iZXJfc21hbGwgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IDIwO1xuICAgIHZhciBkYXRhX2xlbiA9IHIucmVhZDMydSgpO1xuICAgIGJyZWFrO1xuICBjYXNlIDB4ODQ5NUE2QkQ6IC8qIEludGV4dF9tYWdpY19udW1iZXJfY29tcHJlc3NlZCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gci5yZWFkOHUoKSAmIDB4M0Y7XG4gICAgdmFyIG92ZXJmbG93ID0gW2ZhbHNlXTtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICBpZihvdmVyZmxvd1swXSl7XG4gICAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIHRoaXMgcGxhdGZvcm1cIik7XG4gICAgfVxuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRjogLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi9cbiAgZGVmYXVsdDpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiTWFyc2hhbC5kYXRhX3NpemU6IGJhZCBvYmplY3RcIik7XG4gICAgYnJlYWtcbiAgfVxuICByZXR1cm4gaGVhZGVyX2xlbiAtIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSArIGRhdGFfbGVuO1xufVxuXG4vL1Byb3ZpZGVzOiBNbE9iamVjdFRhYmxlXG52YXIgTWxPYmplY3RUYWJsZTtcbmlmICh0eXBlb2YgZ2xvYmFsVGhpcy5NYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAvKiBwb2x5ZmlsbCAodXNpbmcgbGluZWFyIHNlYXJjaCkgKi9cbiAgICBmdW5jdGlvbiBOYWl2ZUxvb2t1cChvYmpzKSB7IHRoaXMub2JqcyA9IG9ianM7IH1cbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMub2Jqc1tpXSA9PT0gdikgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfTtcbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGhlcmUuIFtNbE9iamVjdFRhYmxlLnN0b3JlXSB3aWxsIHB1c2ggdG8gW3RoaXMub2Jqc10gZGlyZWN0bHkuXG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IE5haXZlTG9va3VwKHRoaXMub2Jqcyk7XG4gICAgfTtcbiAgfSgpO1xufVxuZWxzZSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBnbG9iYWxUaGlzLk1hcCgpO1xuICB9O1xufVxuXG5NbE9iamVjdFRhYmxlLnByb3RvdHlwZS5zdG9yZSA9IGZ1bmN0aW9uKHYpIHtcbiAgdGhpcy5sb29rdXAuc2V0KHYsIHRoaXMub2Jqcy5sZW5ndGgpO1xuICB0aGlzLm9ianMucHVzaCh2KTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUucmVjYWxsID0gZnVuY3Rpb24odikge1xuICB2YXIgaSA9IHRoaXMubG9va3VwLmdldCh2KTtcbiAgcmV0dXJuIChpID09PSB1bmRlZmluZWQpXG4gICAgPyB1bmRlZmluZWQgOiB0aGlzLm9ianMubGVuZ3RoIC0gaTsgICAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogTWxPYmplY3RUYWJsZSwgY2FtbF9saXN0X3RvX2pzX2FycmF5LCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbnZhciBjYW1sX291dHB1dF92YWwgPSBmdW5jdGlvbiAoKXtcbiAgZnVuY3Rpb24gV3JpdGVyICgpIHsgdGhpcy5jaHVuayA9IFtdOyB9XG4gIFdyaXRlci5wcm90b3R5cGUgPSB7XG4gICAgY2h1bmtfaWR4OjIwLCBibG9ja19sZW46MCwgb2JqX2NvdW50ZXI6MCwgc2l6ZV8zMjowLCBzaXplXzY0OjAsXG4gICAgd3JpdGU6ZnVuY3Rpb24gKHNpemUsIHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9hdDpmdW5jdGlvbiAocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3BvcysrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9jb2RlOmZ1bmN0aW9uIChzaXplLCBjb2RlLCB2YWx1ZSkge1xuICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9IGNvZGU7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9zaGFyZWQ6ZnVuY3Rpb24gKG9mZnNldCkge1xuICAgICAgaWYgKG9mZnNldCA8ICgxIDw8IDgpKSB0aGlzLndyaXRlX2NvZGUoOCwgMHgwNCAvKmNzdC5DT0RFX1NIQVJFRDgqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgaWYgKG9mZnNldCA8ICgxIDw8IDE2KSkgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9LFxuICAgIHBvczpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmNodW5rX2lkeCB9LFxuICAgIGZpbmFsaXplOmZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuYmxvY2tfbGVuID0gdGhpcy5jaHVua19pZHggLSAyMDtcbiAgICAgIHRoaXMuY2h1bmtfaWR4ID0gMDtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCAweDg0OTVBNkJFKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLmJsb2NrX2xlbik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5vYmpfY291bnRlcik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLnNpemVfNjQpO1xuICAgICAgcmV0dXJuIHRoaXMuY2h1bms7XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiAodiwgZmxhZ3MpIHtcbiAgICBmbGFncyA9IGNhbWxfbGlzdF90b19qc19hcnJheShmbGFncyk7XG5cbiAgICB2YXIgbm9fc2hhcmluZyA9IChmbGFncy5pbmRleE9mKDAgLypNYXJzaGFsLk5vX3NoYXJpbmcqLykgIT09IC0xKSxcbiAgICAgICAgY2xvc3VyZXMgPSAgKGZsYWdzLmluZGV4T2YoMSAvKk1hcnNoYWwuQ2xvc3VyZXMqLykgIT09IC0xKTtcbiAgICAvKiBNYXJzaGFsLkNvbXBhdF8zMiBpcyByZWR1bmRhbnQgc2luY2UgaW50ZWdlcnMgYXJlIDMyLWJpdCBhbnl3YXkgKi9cblxuICAgIGlmIChjbG9zdXJlcylcbiAgICAgIGNvbnNvbGUud2FybihcImluIGNhbWxfb3V0cHV0X3ZhbDogZmxhZyBNYXJzaGFsLkNsb3N1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXG4gICAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIgKCk7XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIGludGVybl9vYmpfdGFibGUgPSBub19zaGFyaW5nID8gbnVsbCA6IG5ldyBNbE9iamVjdFRhYmxlKCk7XG5cbiAgICBmdW5jdGlvbiBtZW1vKHYpIHtcbiAgICAgIGlmIChub19zaGFyaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICB2YXIgZXhpc3Rpbmdfb2Zmc2V0ID0gaW50ZXJuX29ial90YWJsZS5yZWNhbGwodik7XG4gICAgICBpZiAoZXhpc3Rpbmdfb2Zmc2V0KSB7IHdyaXRlci53cml0ZV9zaGFyZWQoZXhpc3Rpbmdfb2Zmc2V0KTsgcmV0dXJuIHRydWU7IH1cbiAgICAgIGVsc2UgeyBpbnRlcm5fb2JqX3RhYmxlLnN0b3JlKHYpOyByZXR1cm4gZmFsc2U7IH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlcm5fcmVjICh2KSB7XG4gICAgICBpZiAodi5jYW1sX2N1c3RvbSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbmFtZSA9IHYuY2FtbF9jdXN0b207XG4gICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbbmFtZV07XG4gICAgICAgIHZhciBzel8zMl82NCA9IFswLDBdO1xuICAgICAgICBpZighb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZihvcHMuZml4ZWRfbGVuZ3RoID09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE4IC8qY3N0LkNPREVfQ1VTVE9NX0xFTiovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBoZWFkZXJfcG9zID0gd3JpdGVyLnBvcyAoKTtcbiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zLCAzMiwgc3pfMzJfNjRbMF0pO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgNCwgMzIsIDApOyAvLyB6ZXJvXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA4LCAzMiwgc3pfMzJfNjRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBvbGRfcG9zID0gd3JpdGVyLnBvcygpO1xuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgaWYgKG9wcy5maXhlZF9sZW5ndGggIT0gd3JpdGVyLnBvcygpIC0gb2xkX3BvcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGluY29ycmVjdCBmaXhlZCBzaXplcyBzcGVjaWZpZWQgYnkgXCIgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAyICsgKChzel8zMl82NFswXSArIDMpID4+IDIpO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAyICsgKChzel8zMl82NFsxXSArIDcpID4+IDMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICAgIGlmICh2WzBdID09IDI1MSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChBYnN0cmFjdClcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGNvbnRpbnVhdGlvbiB2YWx1ZVwiKTtcbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSAmJiBtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIGlmICh2WzBdIDwgMTYgJiYgdi5sZW5ndGggLSAxIDwgOClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8gKyB2WzBdICsgKCh2Lmxlbmd0aCAtIDEpPDw0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwOCAvKmNzdC5DT0RFX0JMT0NLMzIqLywgKCh2Lmxlbmd0aC0xKSA8PCAxMCkgfCB2WzBdKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gdi5sZW5ndGg7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IHYubGVuZ3RoO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxKSBzdGFjay5wdXNoICh2LCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgICBpZighKGNhbWxfaXNfbWxfYnl0ZXMoY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKSkpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogW0J5dGVzLnRdIGNhbm5vdCBzYWZlbHkgYmUgbWFyc2hhbGVkIHdpdGggWy0tZW5hYmxlIHVzZS1qcy1zdHJpbmddXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT0gKHZ8MCkpe1xuICAgICAgICAgIHZhciB0eXBlX29mX3YgPSB0eXBlb2YgdjtcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIElmIGEgZmxvYXQgaGFwcGVucyB0byBiZSBhbiBpbnRlZ2VyIGl0IGlzIHNlcmlhbGl6ZWQgYXMgYW4gaW50ZWdlclxuICAgICAgICAgIC8vIChKc19vZl9vY2FtbCBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB0eXBlIG9mIGFuIGludGVnZXIgbnVtYmVyIGlzXG4gICAgICAgICAgLy8gZmxvYXQgb3IgaW50ZWdlci4pIFRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGNyYXNoZXMgd2hlblxuICAgICAgICAgIC8vIHVubWFyc2hhbGxpbmcgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bnRpbWUuIEl0IHNlZW1zIGJldHRlciB0b1xuICAgICAgICAgIC8vIHN5c3RlbWF0aWNhbGx5IGZhaWwgb24gbWFyc2hhbGxpbmcuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyAgICAgICAgICBpZih0eXBlX29mX3YgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoXCIrdHlwZV9vZl92K1wiKVwiKTtcbiAgICAgICAgICAvLyAgICAgICAgICB2YXIgdCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHYpKTtcbiAgICAgICAgICAvLyAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MEIgLypjc3QuQ09ERV9ET1VCTEVfQklHKi8pO1xuICAgICAgICAgIC8vICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGk8ODsgaSsrKXt3cml0ZXIud3JpdGUoOCx0W2ldKX1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID49IDAgJiYgdiA8IDB4NDApIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDBYNDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAoMSA8PCA3KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDAgLypjc3QuQ09ERV9JTlQ4Ki8sIHYpO1xuICAgICAgICAgIGVsc2UgaWYgKHYgPj0gLSgxIDw8IDE1KSAmJiB2IDwgKDEgPDwgMTUpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMTYsIDB4MDEgLypjc3QuQ09ERV9JTlQxNiovLCB2KTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwMiAvKmNzdC5DT0RFX0lOVDMyKi8sIHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGV4dGVybl9yZWMgKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIHZhciB2ID0gc3RhY2sucG9wICgpO1xuICAgICAgaWYgKGkgKyAxIDwgdi5sZW5ndGgpIHN0YWNrLnB1c2ggKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWMgKHZbaV0pO1xuICAgIH1cbiAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgd3JpdGVyLm9ial9jb3VudGVyID0gaW50ZXJuX29ial90YWJsZS5vYmpzLmxlbmd0aDtcbiAgICB3cml0ZXIuZmluYWxpemUoKTtcbiAgICByZXR1cm4gd3JpdGVyLmNodW5rO1xuICB9XG59ICgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfYmxpdF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyIChzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKTtcbiAgaWYgKHQubGVuZ3RoID4gbGVuKSBjYW1sX2ZhaWx3aXRoIChcIk1hcnNoYWwudG9fYnVmZmVyOiBidWZmZXIgb3ZlcmZsb3dcIik7XG4gIGNhbWxfYmxpdF9ieXRlcyh0LCAwLCBzLCBvZnMsIHQubGVuZ3RoKTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfdGFnKGEpe1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKGEpKSByZXR1cm4gMjUyOyAvLyBzdHJpbmdfdGFnXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGEpKSByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIEFycmF5ICYmIGFbMF0gPT09IChhWzBdPj4+MCkgJiYgYVswXSA8PSAyNTUpIHtcbiAgICAvLyBMb29rIGxpa2UgYW4gb2NhbWwgYmxvY2tcbiAgICB2YXIgdGFnID0gYVswXSB8IDA7XG4gICAgLy8gaWdub3JlIGRvdWJsZV9hcnJheV90YWcgYmVjYXVzZSB3ZSBjYW5ub3QgYWNjdXJhdGVseSBzZXRcbiAgICAvLyB0aGlzIHRhZyB3aGVuIHdlIGNyZWF0ZSBhbiBhcnJheSBvZiBmbG9hdC5cbiAgICByZXR1cm4gKHRhZyA9PSAyNTQpPzA6dGFnXG4gIH1cbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIFN0cmluZykgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgTnVtYmVyKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYSAmJiBhLmNhbWxfY3VzdG9tKSByZXR1cm4gMTI1NTsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKGEgJiYgYS5jb21wYXJlKSByZXR1cm4gMTI1NjsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIDEyNDc7IC8vIGxpa2UgY2xvc3VyZV90YWcgKDI0NylcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpe1xuICByZXR1cm4gY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXS5jb21wYXJlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKG51bSwgY3VzdG9tLCBzd2FwLCB0b3RhbCkge1xuICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShjdXN0b20pO1xuICBpZihjb21wKSB7XG4gICAgdmFyIHggPSAoc3dhcCA+IDApP2NvbXAoY3VzdG9tLG51bSx0b3RhbCk6Y29tcChudW0sY3VzdG9tLHRvdGFsKTtcbiAgICBpZih0b3RhbCAmJiB4ICE9IHgpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZigreCAhPSAreCkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZigoeCB8IDApICE9IDApIHJldHVybiAoeCB8IDApOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbCAoY29uc3QsIGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW50X2NvbXBhcmUsIGNhbWxfc3RyaW5nX2NvbXBhcmUsIGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20sIGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvcig7Oykge1xuICAgIGlmICghKHRvdGFsICYmIGEgPT09IGIpKSB7XG4gICAgICB2YXIgdGFnX2EgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19hID09IDI1MCkgeyBhID0gYVsxXTsgY29udGludWUgfVxuXG4gICAgICB2YXIgdGFnX2IgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhiKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19iID09IDI1MCkgeyBiID0gYlsxXTsgY29udGludWUgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmKHRhZ19hICE9PSB0YWdfYikge1xuICAgICAgICBpZih0YWdfYSA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2IgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZih0YWdfYiA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2EgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0YWdfYSA8IHRhZ19iKT8tMToxO1xuICAgICAgfVxuICAgICAgc3dpdGNoKHRhZ19hKXtcbiAgICAgICAgLy8gMjQ2OiBMYXp5X3RhZyBoYW5kbGVkIGJlbGxvd1xuICAgICAgY2FzZSAyNDc6IC8vIENsb3N1cmVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjQ4OiAvLyBPYmplY3RcbiAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pO1xuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0OTogLy8gSW5maXhcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTA6IC8vIEZvcndhcmQgdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW4sIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTE6IC8vQWJzdHJhY3RcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUyOiAvLyBPQ2FtbCBieXRlc1xuICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgIHZhciB4ID0gY2FtbF9ieXRlc19jb21wYXJlKGEsIGIpO1xuICAgICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUzOiAvLyBEb3VibGVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5X3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX2FycmF5X3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI1NTogLy8gQ3VzdG9tX3RhZ1xuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI0NzogLy8gRnVuY3Rpb25cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTU6IC8vIEN1c3RvbVxuICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgaWYoY29tcCAhPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYikpe1xuICAgICAgICAgIHJldHVybiAoYS5jYW1sX2N1c3RvbTxiLmNhbWxfY3VzdG9tKT8tMToxO1xuICAgICAgICB9XG4gICAgICAgIGlmKCFjb21wKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICB2YXIgeCA9IGNvbXAoYSxiLHRvdGFsKTtcbiAgICAgICAgaWYoeCAhPSB4KXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgdmFyIHggPSBhLmNvbXBhcmUoYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCkgeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICByZXR1cm4gdG90YWw/LTE6eDtcbiAgICAgICAgfVxuICAgICAgICBpZih4ICE9PSAoeHwwKSl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMDogLy8gTnVtYmVyXG4gICAgICAgIGEgPSArYTtcbiAgICAgICAgYiA9ICtiO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgIT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgaWYgKGEgPT0gYSkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGIgPT0gYikgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDAxOiAvLyBUaGUgcmVzdFxuICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAvLyAxLiBKYXZhU2NyaXB0IHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAyLiBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvL1xuICAgICAgICAvLyAoMykgd2lsbCByYWlzZSBhIFtUeXBlRXJyb3JdXG4gICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgLy8gKDIpIGFuZCAoMyksIGFmdGVyIGV2ZW50dWFsIGNvZXJjaW9uXG4gICAgICAgIC8vIC0gaWYgYSBhbmQgYiBhcmUgc3RyaW5ncywgYXBwbHkgbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uXG4gICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAvLyAgIGFuZCBhcHBseSBzdGFuZGFyZCBjb21wYXJpc29uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEV4Y2VwdGlvbjogYCE9YCB3aWxsIG5vdCBjb2VyY2UvY29udmVydCBpZiBib3RoIGEgYW5kIGIgYXJlIG9iamVjdHNcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhiKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUyMDogLy8gamF2YXNjcmlwdCBzdHJpbmdzXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICB2YXIgYiA9IGIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDY6IC8vIExhenlfdGFnXG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5XG4gICAgICBkZWZhdWx0OiAvLyBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICBpZihjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodGFnX2EpKSB7XG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIChhLmxlbmd0aCA8IGIubGVuZ3RoKT8tMToxO1xuICAgICAgICBpZiAoYS5sZW5ndGggPiAxKSBzdGFjay5wdXNoKGEsIGIsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKSByZXR1cm4gMDtcbiAgICB2YXIgaSA9IHN0YWNrLnBvcCgpO1xuICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgaWYgKGkgKyAxIDwgYS5sZW5ndGgpIHN0YWNrLnB1c2goYSwgYiwgaSArIDEpO1xuICAgIGEgPSBhW2ldO1xuICAgIGIgPSBiW2ldO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZSAoYSwgYikgeyByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdHJ1ZSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaW50X2NvbXBhcmUgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pbnRfY29tcGFyZSAoYSwgYikge1xuICBpZiAoYSA8IGIpIHJldHVybiAoLTEpOyBpZiAoYSA9PSBiKSByZXR1cm4gMDsgcmV0dXJuIDE7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID09IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbm90ZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpICE9IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPj0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JlYXRlcnRoYW4gbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVydGhhbiAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPiAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpIDw9IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3N0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc3RoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpIDwgMCk7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRm9ybWF0XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZm9ybWF0XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZm9ybWF0IChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID1cbiAgICAgIHsganVzdGlmeTonKycsIHNpZ25zdHlsZTonLScsIGZpbGxlcjonICcsIGFsdGVybmF0ZTpmYWxzZSxcbiAgICAgICAgYmFzZTowLCBzaWduZWRjb252OmZhbHNlLCB3aWR0aDowLCB1cHBlcmNhc2U6ZmFsc2UsXG4gICAgICAgIHNpZ246MSwgcHJlYzotMSwgY29udjonZicgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBjID0gZm10LmNoYXJBdChpKTtcbiAgICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlICctJzpcbiAgICAgIGYuanVzdGlmeSA9ICctJzsgYnJlYWs7XG4gICAgY2FzZSAnKyc6IGNhc2UgJyAnOlxuICAgICAgZi5zaWduc3R5bGUgPSBjOyBicmVhaztcbiAgICBjYXNlICcwJzpcbiAgICAgIGYuZmlsbGVyID0gJzAnOyBicmVhaztcbiAgICBjYXNlICcjJzpcbiAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOlxuICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgZi53aWR0aCA9IDA7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYud2lkdGggPSBmLndpZHRoICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJy4nOlxuICAgICAgZi5wcmVjID0gMDtcbiAgICAgIGkrKztcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi5wcmVjID0gZi5wcmVjICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICBjYXNlICdkJzogY2FzZSAnaSc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgJ3UnOlxuICAgICAgZi5iYXNlID0gMTA7IGJyZWFrO1xuICAgIGNhc2UgJ3gnOlxuICAgICAgZi5iYXNlID0gMTY7IGJyZWFrO1xuICAgIGNhc2UgJ1gnOlxuICAgICAgZi5iYXNlID0gMTY7IGYudXBwZXJjYXNlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnbyc6XG4gICAgICBmLmJhc2UgPSA4OyBicmVhaztcbiAgICBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi5jb252ID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnRSc6IGNhc2UgJ0YnOiBjYXNlICdHJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgIGYuY29udiA9IGMudG9Mb3dlckNhc2UgKCk7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCByYXdidWZmZXIpIHtcbiAgaWYgKGYudXBwZXJjYXNlKSByYXdidWZmZXIgPSByYXdidWZmZXIudG9VcHBlckNhc2UoKTtcbiAgdmFyIGxlbiA9IHJhd2J1ZmZlci5sZW5ndGg7XG4gIC8qIEFkanVzdCBsZW4gdG8gcmVmbGVjdCBhZGRpdGlvbmFsIGNoYXJzIChzaWduLCBldGMpICovXG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgKGYuc2lnbiA8IDAgfHwgZi5zaWduc3R5bGUgIT0gJy0nKSkgbGVuKys7XG4gIGlmIChmLmFsdGVybmF0ZSkge1xuICAgIGlmIChmLmJhc2UgPT0gOCkgbGVuICs9IDE7XG4gICAgaWYgKGYuYmFzZSA9PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcgJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICBpZiAoZi5zaWduZWRjb252KSB7XG4gICAgaWYgKGYuc2lnbiA8IDApIGJ1ZmZlciArPSAnLSc7XG4gICAgZWxzZSBpZiAoZi5zaWduc3R5bGUgIT0gJy0nKSBidWZmZXIgKz0gZi5zaWduc3R5bGU7XG4gIH1cbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSA4KSBidWZmZXIgKz0gJzAnO1xuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDE2KSBidWZmZXIgKz0gZi51cHBlcmNhc2U/XCIwWFwiOlwiMHhcIjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnKycgJiYgZi5maWxsZXIgPT0gJzAnKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnMCc7XG4gIGJ1ZmZlciArPSByYXdidWZmZXI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJy0nKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnICc7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGJ1ZmZlcik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gZnNfbm9kZV9zdXBwb3J0ZWQgKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9PSAndW5kZWZpbmVkJylcbn1cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCAoKSB7XG4gIHJldHVybiBmYWxzZVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9SZXF1aXJlczogTWxOb2RlRmQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX3dpdGhfYXJnc1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKHJvb3QpIHtcbiAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm5tID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gKHRoaXMucm9vdCArIG5hbWUpO1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZXhpc3RzU3luYyh0aGlzLm5tKG5hbWUpKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0ZpbGUoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLHttb2RlOm1vZGV9KTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucm1kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5yZWFkZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNEaXJlY3RvcnkoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGIgPSB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICAgIHRoaXMuZnMudW5saW5rU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gYjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZiwgcmFpc2VfdW5peCkge1xuICB2YXIgY29uc3RzID0gcmVxdWlyZSgnY29uc3RhbnRzJyk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGtleSBpbiBmKXtcbiAgICBzd2l0Y2goa2V5KXtcbiAgICBjYXNlIFwicmRvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1JET05MWTsgYnJlYWs7XG4gICAgY2FzZSBcIndyb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19XUk9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJhcHBlbmRcIiAgOlxuICAgICAgcmVzIHw9IGNvbnN0cy5PX1dST05MWSB8IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjcmVhdGVcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0NSRUFUOyAgICBicmVhaztcbiAgICBjYXNlIFwidHJ1bmNhdGVcIiA6IHJlcyB8PSBjb25zdHMuT19UUlVOQzsgICAgYnJlYWs7XG4gICAgY2FzZSBcImV4Y2xcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fRVhDTDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJiaW5hcnlcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTsgICBicmVhaztcbiAgICBjYXNlIFwidGV4dFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19URVhUOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm5vbmJsb2NrXCIgOiByZXMgfD0gY29uc3RzLk9fTk9OQkxPQ0s7IGJyZWFrO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHZhciBmZCA9IHRoaXMuZnMub3BlblN5bmModGhpcy5ubShuYW1lKSwgcmVzKTtcbiAgICB2YXIgaXNDaGFyYWN0ZXJEZXZpY2UgPSB0aGlzLmZzLmxzdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0NoYXJhY3RlckRldmljZSgpO1xuICAgIGYuaXNDaGFyYWN0ZXJEZXZpY2UgPSBpc0NoYXJhY3RlckRldmljZTtcbiAgICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlbmFtZSA9IGZ1bmN0aW9uKG8sIG4sIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJlbmFtZVN5bmModGhpcy5ubShvKSwgdGhpcy5ubShuKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3RhdCA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiB0aGlzLnN0YXRzX2Zyb21fanMoanNfc3RhdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmxzdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMubHN0YXRTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiB0aGlzLnN0YXRzX2Zyb21fanMoanNfc3RhdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN5bWxpbmsgPSBmdW5jdGlvbih0b19kaXIsIHRhcmdldCwgcGF0aCwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMuc3ltbGlua1N5bmModGhpcy5ubSh0YXJnZXQpLCB0aGlzLm5tKHBhdGgpLCB0b19kaXIgPyAnZGlyJyA6ICdmaWxlJyk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGxpbmsgPSB0aGlzLmZzLnJlYWRsaW5rU3luYyh0aGlzLm5tKG5hbWUpLCAndXRmOCcpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhsaW5rKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLm9wZW5kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJhaXNlX25vZGVqc19lcnJvciA9IGZ1bmN0aW9uKGVyciwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpIHtcbiAgICB2YXIgYXJncyA9IG1ha2VfdW5peF9lcnJfYXJncyhlcnIuY29kZSwgZXJyLnN5c2NhbGwsIGVyci5wYXRoLCBlcnIuZXJybm8pO1xuICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0c19mcm9tX2pzID0gZnVuY3Rpb24oanNfc3RhdHMpIHtcbiAgLyogPT09VW5peC5maWxlX2tpbmQ9PT1cbiAgICogdHlwZSBmaWxlX2tpbmQgPVxuICAgKiAgICAgU19SRUcgICAgICAgICAgICAgICAgICAgICAgICgqKiBSZWd1bGFyIGZpbGUgKilcbiAgICogICB8IFNfRElSICAgICAgICAgICAgICAgICAgICAgICAoKiogRGlyZWN0b3J5ICopXG4gICAqICAgfCBTX0NIUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIENoYXJhY3RlciBkZXZpY2UgKilcbiAgICogICB8IFNfQkxLICAgICAgICAgICAgICAgICAgICAgICAoKiogQmxvY2sgZGV2aWNlICopXG4gICAqICAgfCBTX0xOSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFN5bWJvbGljIGxpbmsgKilcbiAgICogICB8IFNfRklGTyAgICAgICAgICAgICAgICAgICAgICAoKiogTmFtZWQgcGlwZSAqKVxuICAgKiAgIHwgU19TT0NLICAgICAgICAgICAgICAgICAgICAgICgqKiBTb2NrZXQgKilcbiAgICovXG4gIHZhciBmaWxlX2tpbmQ7XG4gIGlmIChqc19zdGF0cy5pc0ZpbGUoKSkge1xuICAgIGZpbGVfa2luZCA9IDA7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZpbGVfa2luZCA9IDE7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDI7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNCbG9ja0RldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMztcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgZmlsZV9raW5kID0gNDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0ZJRk8oKSkge1xuICAgIGZpbGVfa2luZCA9IDU7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTb2NrZXQoKSkge1xuICAgIGZpbGVfa2luZCA9IDY7XG4gIH1cbiAgLyogPT09VW5peC5zdGF0cz09PVxuICAgKiB0eXBlIHN0YXRzID1cbiAgICogIHsgc3RfZGV2IDogaW50OyAgICAgICAgICAgICAgICgqKiBEZXZpY2UgbnVtYmVyICopXG4gICAqICAgIHN0X2lubyA6IGludDsgICAgICAgICAgICAgICAoKiogSW5vZGUgbnVtYmVyICopXG4gICAqICAgIHN0X2tpbmQgOiBmaWxlX2tpbmQ7ICAgICAgICAoKiogS2luZCBvZiB0aGUgZmlsZSAqKVxuICAgKiAgICBzdF9wZXJtIDogZmlsZV9wZXJtOyAgICAgICAgKCoqIEFjY2VzcyByaWdodHMgKilcbiAgICogICAgc3RfbmxpbmsgOiBpbnQ7ICAgICAgICAgICAgICgqKiBOdW1iZXIgb2YgbGlua3MgKilcbiAgICogICAgc3RfdWlkIDogaW50OyAgICAgICAgICAgICAgICgqKiBVc2VyIGlkIG9mIHRoZSBvd25lciAqKVxuICAgKiAgICBzdF9naWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAgKilcbiAgICogICAgc3RfcmRldiA6IGludDsgICAgICAgICAgICAgICgqKiBEZXZpY2UgSUQgKGlmIHNwZWNpYWwgZmlsZSkgKilcbiAgICogICAgc3Rfc2l6ZSA6IGludDsgICAgICAgICAgICAgICgqKiBTaXplIGluIGJ5dGVzICopXG4gICAqICAgIHN0X2F0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBhY2Nlc3MgdGltZSAqKVxuICAgKiAgICBzdF9tdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUgKilcbiAgICogICAgc3RfY3RpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IHN0YXR1cyBjaGFuZ2UgdGltZSAqKVxuICAgKiAgfVxuICAgKi9cbiAgcmV0dXJuIEJMT0NLKFxuICAgIDAsXG4gICAganNfc3RhdHMuZGV2LFxuICAgIGpzX3N0YXRzLmlubyxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAganNfc3RhdHMuc2l6ZSxcbiAgICBqc19zdGF0cy5hdGltZU1zLFxuICAgIGpzX3N0YXRzLm10aW1lTXMsXG4gICAganNfc3RhdHMuY3RpbWVNc1xuICApO1xufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKCkge1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGZFxuLy9SZXF1aXJlczogTWxGaWxlLCBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZywgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9ieXRlc19zZXQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbE5vZGVGZChmZCwgZmxhZ3Mpe1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5mZCA9IGZkO1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5NbE5vZGVGZC5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuTWxOb2RlRmQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRmQ7XG5cbk1sTm9kZUZkLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5mdHJ1bmNhdGVTeW5jKHRoaXMuZmQsbGVufDApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpLnNpemU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHRyeSB7XG4gICAgaWYodGhpcy5mbGFncy5pc0NoYXJhY3RlckRldmljZSlcbiAgICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZiwgYnVmX29mZnNldCwgbGVuKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLmZzLndyaXRlU3luYyh0aGlzLmZkLCBidWYsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiAwO1xufVxuTWxOb2RlRmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYSxidWZfb2Zmc2V0LGxlbil7XG4gIHRyeSB7XG4gICAgaWYodGhpcy5mbGFncy5pc0NoYXJhY3RlckRldmljZSlcbiAgICAgIHZhciByZWFkID0gdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBhLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgIGVsc2VcbiAgICAgIHZhciByZWFkID0gdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBhLCBidWZfb2Zmc2V0LCBsZW4sIG9mZnNldCk7XG4gICAgcmV0dXJuIHJlYWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmNsb3NlU3luYyh0aGlzLmZkKTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGZFxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRmQoKXtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZFxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3Mpe1xuICBpZihmbGFncy5uYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbiAgICAgIHZhciBmZDIgPSBmcy5vcGVuU3luYyhmbGFncy5uYW1lLCBcInJzXCIpO1xuICAgICAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZDIsIGZsYWdzKTtcbiAgICB9IGNhdGNoKGUpIHsgIH1cbiAgfVxuICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkLCBmbGFncyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIER1bW15IGZpbGVzeXN0ZW1cblxuLy9Qcm92aWRlczogY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKXtcbiAgcmV0dXJuIChuYW1lLnNsaWNlKC0xKSAhPT0gXCIvXCIpID8gKG5hbWUgKyBcIi9cIikgOiBuYW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoLCBmc19ub2RlX3N1cHBvcnRlZFxuaWYoZnNfbm9kZV9zdXBwb3J0ZWQgKCkgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QpXG4gIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZCgpLnJlcGxhY2UoL1xcXFwvZywnLycpO1xuZWxzZVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9ICBcIi9zdGF0aWNcIjtcbmNhbWxfY3VycmVudF9kaXIgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKGNhbWxfY3VycmVudF9kaXIpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9yb290XG4vL1JlcXVpcmVzOiBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBjYW1sX2dldF9yb290KHBhdGgpe1xuICB2YXIgeCA9IHBhdGhfaXNfYWJzb2x1dGUocGF0aCk7XG4gIGlmICgheCkgcmV0dXJuO1xuICByZXR1cm4geFswXSArIFwiL1wifVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Jvb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ2V0X3Jvb3QsIGNhbWxfY3VycmVudF9kaXIsIGNhbWxfZmFpbHdpdGhcbnZhciBjYW1sX3Jvb3QgPSBjYW1sX2dldF9yb290KGNhbWxfY3VycmVudF9kaXIpIHx8IGNhbWxfZmFpbHdpdGgoXCJ1bmFibGUgdG8gY29tcHV0ZSBjYW1sX3Jvb3RcIik7XG5cblxuLy9Qcm92aWRlczogTWxGaWxlXG5mdW5jdGlvbiBNbEZpbGUoKXsgIH1cblxuLy9Qcm92aWRlczogcGF0aF9pc19hYnNvbHV0ZVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpIHtcbiAgZnVuY3Rpb24gcG9zaXgocGF0aCkge1xuICAgIGlmIChwYXRoLmNoYXJBdCgwKSA9PT0gJy8nKSByZXR1cm4gW1wiXCIsIHBhdGguc3Vic3RyaW5nKDEpXTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiB3aW4zMihwYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcbiAgICB2YXIgc3BsaXREZXZpY2VSZSA9IC9eKFthLXpBLVpdOnxbXFxcXC9dezJ9W15cXFxcL10rW1xcXFwvXStbXlxcXFwvXSspPyhbXFxcXC9dKT8oW1xcc1xcU10qPykkLztcbiAgICB2YXIgcmVzdWx0ID0gc3BsaXREZXZpY2VSZS5leGVjKHBhdGgpO1xuICAgIHZhciBkZXZpY2UgPSByZXN1bHRbMV0gfHwgJyc7XG4gICAgdmFyIGlzVW5jID0gQm9vbGVhbihkZXZpY2UgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gJzonKTtcblxuICAgIC8vIFVOQyBwYXRocyBhcmUgYWx3YXlzIGFic29sdXRlXG4gICAgaWYgKEJvb2xlYW4ocmVzdWx0WzJdIHx8IGlzVW5jKSkge1xuICAgICAgdmFyIHJvb3QgPSAocmVzdWx0WzFdIHx8ICcnKTtcbiAgICAgIHZhciBzZXAgPSAocmVzdWx0WzJdIHx8ICcnKTtcbiAgICAgIHJldHVybiBbcm9vdCwgcGF0aC5zdWJzdHJpbmcocm9vdC5sZW5ndGggKyBzZXAubGVuZ3RoKV1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luMzIgOiBwb3NpeDtcbiAgfVxuICBlbHNlIHJldHVybiBwb3NpeFxufVxudmFyIHBhdGhfaXNfYWJzb2x1dGUgPSBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX3BhdGhcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBjYW1sX21ha2VfcGF0aCAobmFtZSkge1xuICBuYW1lPWNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZiggIXBhdGhfaXNfYWJzb2x1dGUobmFtZSkgKVxuICAgIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAwID0gcGF0aF9pc19hYnNvbHV0ZShuYW1lKTtcbiAgdmFyIGNvbXAgPSBjb21wMFsxXS5zcGxpdChcIi9cIik7XG4gIHZhciBuY29tcCA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGk8Y29tcC5sZW5ndGg7IGkrKyl7XG4gICAgc3dpdGNoKGNvbXBbaV0pe1xuICAgIGNhc2UgXCIuLlwiOiBpZihuY29tcC5sZW5ndGg+MSkgbmNvbXAucG9wKCk7IGJyZWFrO1xuICAgIGNhc2UgXCIuXCI6IGJyZWFrO1xuICAgIGNhc2UgXCJcIjogYnJlYWs7XG4gICAgZGVmYXVsdDogbmNvbXAucHVzaChjb21wW2ldKTticmVha1xuICAgIH1cbiAgfVxuICBuY29tcC51bnNoaWZ0KGNvbXAwWzBdKTtcbiAgbmNvbXAub3JpZyA9IG5hbWU7XG4gIHJldHVybiBuY29tcDtcbn1cblxuLy9Qcm92aWRlczpqc29vX21vdW50X3BvaW50XG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIE1sTm9kZURldmljZSwgY2FtbF9yb290LCBmc19ub2RlX3N1cHBvcnRlZFxudmFyIGpzb29fbW91bnRfcG9pbnQgPSBbXVxuaWYgKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOmNhbWxfcm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShjYW1sX3Jvb3QpfSk7XG59IGVsc2Uge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn1cbmpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpcIi9zdGF0aWMvXCIsIGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKFwiL3N0YXRpYy9cIil9KTtcblxuLy9Qcm92aWRlczpjYW1sX2xpc3RfbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGlzdF9tb3VudF9wb2ludCgpe1xuICB2YXIgcHJldiA9IDBcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspe1xuICAgIHZhciBvbGQgPSBwcmV2O1xuICAgIHByZXYgPSBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhqc29vX21vdW50X3BvaW50W2ldLnBhdGgpLCBvbGRdXG4gIH1cbiAgcmV0dXJuIHByZXY7XG59XG5cbi8vUHJvdmlkZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2V0X3Jvb3QsIE1sTm9kZURldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IHBhdGguam9pbihcIi9cIik7XG4gIHZhciBuYW1lX3NsYXNoID0gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKTtcbiAgdmFyIHJlcztcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbSA9IGpzb29fbW91bnRfcG9pbnRbaV07XG4gICAgaWYobmFtZV9zbGFzaC5zZWFyY2gobS5wYXRoKSA9PSAwXG4gICAgICAgJiYgKCFyZXMgfHwgcmVzLnBhdGgubGVuZ3RoIDwgbS5wYXRoLmxlbmd0aCkpXG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICB9XG4gIGlmKCAhcmVzICYmIGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICB2YXIgcm9vdCA9IGNhbWxfZ2V0X3Jvb3QobmFtZSk7XG4gICAgaWYgKHJvb3QgJiYgcm9vdC5tYXRjaCgvXlthLXpBLVpdOlxcLyQvKSl7XG4gICAgICB2YXIgbSA9IHtwYXRoOnJvb3QsZGV2aWNlOm5ldyBNbE5vZGVEZXZpY2Uocm9vdCl9O1xuICAgICAganNvb19tb3VudF9wb2ludC5wdXNoKG0pO1xuICAgICAgcmVzID0ge3BhdGg6bS5wYXRoLGRldmljZTptLmRldmljZSxyZXN0Om5hbWUuc3Vic3RyaW5nKG0ucGF0aC5sZW5ndGgsbmFtZS5sZW5ndGgpfTtcbiAgICB9XG4gIH1cbiAgaWYoIHJlcyApIHJldHVybiByZXM7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwibm8gZGV2aWNlIGZvdW5kIGZvciBcIiArIG5hbWVfc2xhc2gpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vdW50X2F1dG9sb2FkXG4vL1JlcXVpcmVzOiBNbEZha2VEZXZpY2UsIGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX21vdW50X2F1dG9sb2FkKG5hbWUsZil7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gY2FtbF90cmFpbGluZ19zbGFzaChwYXRoLmpvaW4oXCIvXCIpKTtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOm5hbWUsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UobmFtZSxmKX0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VubW91bnRcbi8vUmVxdWlyZXM6IGpzb29fbW91bnRfcG9pbnQsIGNhbWxfbWFrZV9wYXRoLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3VubW91bnQobmFtZSl7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gY2FtbF90cmFpbGluZ19zbGFzaChwYXRoLmpvaW4oXCIvXCIpKTtcbiAgdmFyIGlkeCA9IC0xO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKylcbiAgICBpZihqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT0gbmFtZSkgaWR4ID0gaTtcbiAgaWYoaWR4ID4gLTEpIGpzb29fbW91bnRfcG9pbnQuc3BsaWNlKGlkeCwxKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0Y3dkXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfY3VycmVudF9kaXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jaGRpclxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIGlmKHJvb3QucmVzdCkgY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocm9vdC5wYXRoICsgcm9vdC5yZXN0KTtcbiAgICBlbHNlIGNhbWxfY3VycmVudF9kaXIgPSByb290LnBhdGg7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhkaXIpKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKG5hbWUpe1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9hX2RpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2FfZGlyKG5hbWUpe1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2ZpbGVfZXhpc3RzXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfZmlsZV9leGlzdHMgKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfYV9kaXIsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZWFkX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5yZWFkZGlyKHJvb3QucmVzdCk7XG4gIHZhciBsID0gbmV3IEFycmF5KGEubGVuZ3RoICsgMSk7XG4gIGxbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGEubGVuZ3RoO2krKylcbiAgICBsW2krMV0gPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGFbaV0pO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVtb3ZlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlbW92ZShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIG9rID0gcm9vdC5kZXZpY2UudW5saW5rKHJvb3QucmVzdCk7XG4gIGlmKG9rID09IDApIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNfZGlyZWN0b3J5XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNfZGlyZWN0b3J5KG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLmlzX2Rpcihyb290LnJlc3QpO1xuICByZXR1cm4gYT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbmFtZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlbmFtZShvLG4pe1xuICB2YXIgb19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobyk7XG4gIHZhciBuX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuKTtcbiAgaWYob19yb290LmRldmljZSAhPSBuX3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N5c19yZW5hbWU6IGNhbm5vdCBtb3ZlIGZpbGUgYmV0d2VlbiB0d28gZmlsZXN5c3RlbVwiKTtcbiAgaWYoIW9fcm9vdC5kZXZpY2UucmVuYW1lKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N5c19yZW5hbWU6IG5vIGltcGxlbWVudGVkXCIpO1xuICBvX3Jvb3QuZGV2aWNlLnJlbmFtZShvX3Jvb3QucmVzdCwgbl9yb290LnJlc3QpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3N5c19ta2RpcihuYW1lLCBwZXJtKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcm9vdC5kZXZpY2UubWtkaXIocm9vdC5yZXN0LHBlcm0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub3RfYV9kaXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3JtZGlyKG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ybWRpcihyb290LnJlc3QpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZSh2ZmQsIGtpbmQsIGxheW91dCwgc2hhcmVkLCBkaW1zLCBwb3MpIHtcbiAgLy8gdmFyIGRhdGEgPSBjYW1sX3N5c19mZHNbdmZkXTtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfYmFfbWFwX2ZpbGUgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX21hcF9maWxlXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlKGFyZ3YsYXJnbil7XG4gIHJldHVybiBjYW1sX2JhX21hcF9maWxlKGFyZ3ZbMF0sYXJndlsxXSxhcmd2WzJdLGFyZ3ZbM10sYXJndls0XSxhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsY29udGVudCl7XG4gIGlmKGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSlcbiAgICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KTtcbiAgZWxzZSB7XG4gICAgaWYoIWdsb2JhbFRoaXMuY2FtbF9mc190bXApIGdsb2JhbFRoaXMuY2FtbF9mc190bXAgPSBbXTtcbiAgICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wLnB1c2goe25hbWU6bmFtZSxjb250ZW50OmNvbnRlbnR9KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mc19pbml0XG4vL1JlcXVpcmVzOiBqc29vX2NyZWF0ZV9maWxlXG5mdW5jdGlvbiBjYW1sX2ZzX2luaXQgKCl7XG4gIHZhciB0bXA9Z2xvYmFsVGhpcy5jYW1sX2ZzX3RtcFxuICBpZih0bXApe1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0bXAubGVuZ3RoOyBpKyspe1xuICAgICAganNvb19jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSx0bXBbaV0uY29udGVudCk7XG4gICAgfVxuICB9XG4gIGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZSA9IGpzb29fY3JlYXRlX2ZpbGU7XG4gIGdsb2JhbFRoaXMuY2FtbF9mc190bXAgPSBbXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZighIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKSBjYW1sX2ZhaWx3aXRoKFwiY2Fubm90IHJlZ2lzdGVyIGZpbGVcIik7XG4gIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKHJvb3QucmVzdCxjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczoganNvb19jcmVhdGVfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfZmlsZSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24ganNvb19jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIG5hbWUgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpO1xuICB2YXIgY29udGVudCA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY29udGVudCk7XG4gIHJldHVybiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsIGNvbnRlbnQpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVhZF9maWxlX2NvbnRlbnRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVhZF9maWxlX2NvbnRlbnQgKG5hbWUpIHtcbiAgdmFyIG5hbWUgPSAodHlwZW9mIG5hbWUgPT0gXCJzdHJpbmdcIik/Y2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTpuYW1lO1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3Qse3Jkb25seToxfSk7XG4gICAgdmFyIGxlbiAgPSBmaWxlLmxlbmd0aCgpO1xuICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIGZpbGUucmVhZCgwLGJ1ZiwwLGxlbik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGJ1ZilcbiAgfVxuICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbn1cbiIsIi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5ICgpIHtcbiAgcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF90aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfdGltZSAoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKGNhbWxfdW5peF9nZXR0aW1lb2ZkYXkgKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ210aW1lXG4vL0FsaWFzOiB1bml4X2dtdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X2dtdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKERhdGUuVVRDKGQuZ2V0VVRDRnVsbFllYXIoKSwgMCwgMSkpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFVUQ1NlY29uZHMoKSwgZC5nZXRVVENNaW51dGVzKCksIGQuZ2V0VVRDSG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0VVRDRGF0ZSgpLCBkLmdldFVUQ01vbnRoKCksIGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RheSgpLCBkb3ksXG4gICAgICAgICAgICAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8pXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbG9jYWx0aW1lICh0KSB7XG4gIHZhciBkID0gbmV3IERhdGUgKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSAobmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICB2YXIgamFuID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgdmFyIGp1bCA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgNiwgMSk7XG4gIHZhciBzdGRUaW1lem9uZU9mZnNldCA9IE1hdGgubWF4KGphbi5nZXRUaW1lem9uZU9mZnNldCgpLCBqdWwuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFNlY29uZHMoKSwgZC5nZXRNaW51dGVzKCksIGQuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0RGF0ZSgpLCBkLmdldE1vbnRoKCksIGQuZ2V0RnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldERheSgpLCBkb3ksXG4gICAgICAgICAgICAgICAoZC5nZXRUaW1lem9uZU9mZnNldCgpIDwgc3RkVGltZXpvbmVPZmZzZXQpIHwgMCAvKiBkYXlsaWdodCBzYXZpbmdzIHRpbWUgIGZpZWxkLiAqLylcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X21rdGltZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2xvY2FsdGltZVxuLy9BbGlhczogdW5peF9ta3RpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta3RpbWUodG0pe1xuICB2YXIgZCA9IChuZXcgRGF0ZSh0bVs2XSsxOTAwLHRtWzVdLHRtWzRdLHRtWzNdLHRtWzJdLHRtWzFdKSkuZ2V0VGltZSgpO1xuICB2YXIgdCA9IE1hdGguZmxvb3IoZCAvIDEwMDApO1xuICB2YXIgdG0yID0gY2FtbF91bml4X2xvY2FsdGltZSh0KTtcbiAgcmV0dXJuIEJMT0NLKDAsdCx0bTIpO1xufVxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXJ0dXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9zdGFydHVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbGVhbnVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fY2xlYW51cFxuZnVuY3Rpb24gY2FtbF91bml4X2NsZWFudXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkIGNvbnN0XG4vL0FsaWFzOiB3aW5faGFuZGxlX2ZkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmlsZWRlc2NyX29mX2ZkKHgpIHtyZXR1cm4geDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2lzYXR0eVxuZnVuY3Rpb24gY2FtbF91bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuICAgIHJldHVybiB0dHkuaXNhdHR5KGZpbGVEZXNjcmlwdG9yKT8xOjA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaXNhdHR5XG4vL0FsaWFzOiB1bml4X2lzYXR0eVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF91bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLCBcIkVBQ0NFU1wiLCBcIkVBR0FJTlwiLCBcIkVCQURGXCIsIFwiRUJVU1lcIiwgXCJFQ0hJTERcIiwgXCJFREVBRExLXCIsIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLCBcIkVGQVVMVFwiLCBcIkVGQklHXCIsIFwiRUlOVFJcIiwgXCJFSU5WQUxcIiwgXCJFSU9cIiwgXCJFSVNESVJcIiwgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIiwgXCJFTkFNRVRPT0xPTkdcIiwgXCJFTkZJTEVcIiwgXCJFTk9ERVZcIiwgXCJFTk9FTlRcIiwgXCJFTk9FWEVDXCIsIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsIFwiRU5PU1BDXCIsIFwiRU5PU1lTXCIsIFwiRU5PVERJUlwiLCBcIkVOT1RFTVBUWVwiLCBcIkVOT1RUWVwiLCBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIiwgXCJFUElQRVwiLCBcIkVSQU5HRVwiLCBcIkVST0ZTXCIsIFwiRVNQSVBFXCIsIFwiRVNSQ0hcIiwgXCJFWERFVlwiLCBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIiwgXCJFQUxSRUFEWVwiLCBcIkVOT1RTT0NLXCIsIFwiRURFU1RBRERSUkVRXCIsIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsIFwiRU5PUFJPVE9PUFRcIiwgXCJFUFJPVE9OT1NVUFBPUlRcIiwgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsIFwiRVBGTk9TVVBQT1JUXCIsIFwiRUFGTk9TVVBQT1JUXCIsIFwiRUFERFJJTlVTRVwiLCBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLCBcIkVORVRVTlJFQUNIXCIsIFwiRU5FVFJFU0VUXCIsIFwiRUNPTk5BQk9SVEVEXCIsIFwiRUNPTk5SRVNFVFwiLCBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsIFwiRU5PVENPTk5cIiwgXCJFU0hVVERPV05cIiwgXCJFVE9PTUFOWVJFRlNcIiwgXCJFVElNRURPVVRcIiwgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIiwgXCJFSE9TVFVOUkVBQ0hcIiwgXCJFTE9PUFwiLCBcIkVPVkVSRkxPV1wiXG5dO1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5XG4gICAgfVxuICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIHZhcmlhbnRzLCBmYWxsYmFjayB0byBFVU5LTk9XTkVSUihpbnQpXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIGVycm5vKTtcbiAgfVxuICB2YXIgYXJncyA9IFtcbiAgICB2YXJpYW50LFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHN5c2NhbGwgfHwgXCJcIiksXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aCB8fCBcIlwiKVxuICBdO1xuICByZXR1cm4gYXJncztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3N0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnN0YXQocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X3N0YXQsIGNhbWxfaW50NjRfb2ZfaW50MzJcbi8vQWxpYXM6IHVuaXhfc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXRfNjQobmFtZSkge1xuICB2YXIgciA9IGNhbWxfdW5peF9zdGF0KG5hbWUpO1xuICByWzldID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihyWzldKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbHN0YXRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubHN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xzdGF0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbHN0YXQsIGNhbWxfaW50NjRfb2ZfaW50MzJcbi8vQWxpYXM6IHVuaXhfbHN0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9sc3RhdF82NChuYW1lKSB7XG4gIHZhciByID0gY2FtbF91bml4X2xzdGF0KG5hbWUpO1xuICByWzldID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihyWzldKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta2RpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfbWtkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ybWRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3ltbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3ltbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3N5bWxpbmsodG9fZGlyLCBzcmMsIGRzdCkge1xuICB2YXIgc3JjX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShzcmMpO1xuICB2YXIgZHN0X3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkc3QpO1xuICBpZihzcmNfcm9vdC5kZXZpY2UgIT0gZHN0X3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3ltbGluazogY2Fubm90IHN5bWxpbmsgYmV0d2VlbiB0d28gZmlsZXN5c3RlbXNcIik7XG4gIGlmICghc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmsodG9fZGlyLCBzcmNfcm9vdC5yZXN0LCBkc3Rfcm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3JlYWRsaW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZGxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnJlYWRsaW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9yZWFkbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5yZWFkbGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF91bmxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3VubGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3VubGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudW5saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF91bmxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UudW5saW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHVpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0dWlkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0dWlkKHVuaXQpIHtcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQpe1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKCk7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dldHB3dWlkXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9BbGlhczogdW5peF9nZXRwd3VpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldHB3dWlkKHVuaXQpIHtcbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2hhc19zeW1saW5rXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9BbGlhczogdW5peF9oYXNfc3ltbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X2hhc19zeW1saW5rKHVuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCk/MTowXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9vcGVuZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9vcGVuZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfb3BlbmRpcihwYXRoKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UocGF0aCk7XG4gIGlmICghcm9vdC5kZXZpY2Uub3BlbmRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfb3BlbmRpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHZhciBkaXJfaGFuZGxlID0gcm9vdC5kZXZpY2Uub3BlbmRpcihyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG4gIHJldHVybiB7IHBvaW50ZXIgOiBkaXJfaGFuZGxlLCBwYXRoOiBwYXRoIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRkaXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL0FsaWFzOiB1bml4X3JlYWRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpIHtcbiAgdmFyIGVudHJ5O1xuICB0cnkge1xuICAgICAgZW50cnkgPSBkaXJfaGFuZGxlLnBvaW50ZXIucmVhZFN5bmMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwicmVhZGRpclwiLCBkaXJfaGFuZGxlLnBhdGgpKTtcbiAgfVxuICBpZiAoZW50cnkgPT09IG51bGwpIHtcbiAgICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhlbnRyeS5uYW1lKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xvc2VkaXJcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vQWxpYXM6IHVuaXhfY2xvc2VkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKSB7XG4gIHRyeSB7XG4gICAgICBkaXJfaGFuZGxlLnBvaW50ZXIuY2xvc2VTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIGRpcl9oYW5kbGUucGF0aCkpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZXdpbmRkaXJcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpciwgY2FtbF91bml4X29wZW5kaXJcbi8vQWxpYXM6IHVuaXhfcmV3aW5kZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmV3aW5kZGlyKGRpcl9oYW5kbGUpIHtcbiAgY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpO1xuICB2YXIgbmV3X2Rpcl9oYW5kbGUgPSBjYW1sX3VuaXhfb3BlbmRpcihkaXJfaGFuZGxlLnBhdGgpO1xuICBkaXJfaGFuZGxlLnBvaW50ZXIgPSBuZXdfZGlyX2hhbmRsZS5wb2ludGVyO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRmaXJzdFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfb3BlbmRpciwgY2FtbF91bml4X3JlYWRkaXJcbi8vQWxpYXM6IHdpbl9maW5kZmlyc3RcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kZmlyc3QocGF0aCkge1xuICAvLyBUaGUgV2luZG93cyBjb2RlIGFkZHMgdGhpcyBnbG9iIHRvIHRoZSBwYXRoLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdFxuICB2YXIgcGF0aF9qcyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHBhdGgpO1xuICBwYXRoX2pzID0gcGF0aF9qcy5yZXBsYWNlKC8oXnxbXFxcXFxcL10pXFwqXFwuXFwqJC8sIFwiXCIpO1xuICBwYXRoID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aF9qcyk7XG4gIC8vICouKiBpcyBub3cgc3RyaXBwZWRcbiAgdmFyIGRpcl9oYW5kbGUgPSBjYW1sX3VuaXhfb3BlbmRpcihwYXRoKTtcbiAgdmFyIGZpcnN0X2VudHJ5ID0gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG4gIC8vIFRoZSBXaW5kb3dzIGJpbmRpbmdzIHR5cGUgZGlyX2hhbmRsZSBhcyBhbiBgaW50YCBidXQgaXQncyBub3QgaW4gSlNcbiAgcmV0dXJuIFswLCBmaXJzdF9lbnRyeSwgZGlyX2hhbmRsZV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kbmV4dFxuLy9SZXF1aXJlczogY2FtbF91bml4X3JlYWRkaXJcbi8vQWxpYXM6IHdpbl9maW5kbmV4dFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRuZXh0KGRpcl9oYW5kbGUpIHtcbiAgcmV0dXJuIGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZGNsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXJcbi8vQWxpYXM6IHdpbl9maW5kY2xvc2VcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kY2xvc2UoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nIGNvbnN0XG4vL0FsaWFzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nICgpIHtyZXR1cm4gMDt9XG5cblxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBNbEZha2VGZCwgY2FtbF9jcmVhdGVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXksIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZXNcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJnc1xuZnVuY3Rpb24gTWxGYWtlRGV2aWNlIChyb290LCBmKSB7XG4gIHRoaXMuY29udGVudD17fTtcbiAgdGhpcy5yb290ID0gcm9vdDtcbiAgdGhpcy5sb29rdXBGdW4gPSBmO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuY3JlYXRlX2Rpcl9pZl9uZWVkZWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjb21wID0gbmFtZS5zcGxpdChcIi9cIik7XG4gIHZhciByZXMgPSBcIlwiO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgY29tcC5sZW5ndGggLSAxOyBpKyspe1xuICAgIHJlcyArPSBjb21wW2ldICsgXCIvXCI7XG4gICAgaWYodGhpcy5jb250ZW50W3Jlc10pIGNvbnRpbnVlO1xuICAgIHRoaXMuY29udGVudFtyZXNdID0gU3ltYm9sKFwiZGlyZWN0b3J5XCIpO1xuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnNsYXNoID0gZnVuY3Rpb24obmFtZSl7XG4gIHJldHVybiAvXFwvJC8udGVzdChuYW1lKT9uYW1lOihuYW1lICsgXCIvXCIpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5sb29rdXAgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKCF0aGlzLmNvbnRlbnRbbmFtZV0gJiYgdGhpcy5sb29rdXBGdW4pIHtcbiAgICB2YXIgcmVzID0gdGhpcy5sb29rdXBGdW4oY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnJvb3QpLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpKTtcbiAgICBpZihyZXMgIT09IDApIHtcbiAgICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgICB0aGlzLmNvbnRlbnRbbmFtZV09bmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcocmVzWzFdKSk7XG4gICAgfVxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgLy8gVGhlIHJvb3Qgb2YgdGhlIGRldmljZSBleGlzdHNcbiAgaWYobmFtZSA9PSBcIlwiKSByZXR1cm4gMTtcbiAgLy8gQ2hlY2sgaWYgYSBkaXJlY3RvcnkgZXhpc3RzXG4gIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVfc2xhc2hdKSByZXR1cm4gMTtcbiAgLy8gQ2hlY2sgaWYgYSBmaWxlIGV4aXN0c1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lXT8xOjA7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzRmlsZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYodGhpcy5leGlzdHMobmFtZSkgJiYgIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm1rZGlyID0gZnVuY3Rpb24obmFtZSxtb2RlLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgaWYodGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUVYSVNUXCIsIFwibWtkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogRmlsZSBleGlzdHNcIik7XG4gICAgfVxuICB9XG4gIHZhciBwYXJlbnQgPSAvXiguKilcXC9bXi9dKy8uZXhlYyhuYW1lKTtcbiAgcGFyZW50ID0gKHBhcmVudCAmJiBwYXJlbnRbMV0pIHx8ICcnO1xuICBpZighdGhpcy5leGlzdHMocGFyZW50KSl7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT0VOVFwiLCBcIm1rZGlyXCIsIHRoaXMubm0ocGFyZW50KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHBhcmVudCArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBpZighdGhpcy5pc19kaXIocGFyZW50KSl7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RESVJcIiwgXCJta2RpclwiLCB0aGlzLm5tKHBhcmVudCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihwYXJlbnQgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKHRoaXMuc2xhc2gobmFtZSkpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ybWRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICB2YXIgbmFtZV9zbGFzaCA9IChuYW1lID09IFwiXCIpP1wiXCI6KHRoaXMuc2xhc2gobmFtZSkpO1xuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSspXCIpO1xuICBpZighdGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PRU5UXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RESVJcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICBpZihuLm1hdGNoKHIpKSB7XG4gICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URU1QVFlcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCI6IERpcmVjdG9yeSBub3QgZW1wdHlcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF07XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJlYWRkaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBuYW1lX3NsYXNoID0gKG5hbWUgPT0gXCJcIik/XCJcIjoodGhpcy5zbGFzaChuYW1lKSk7XG4gIGlmKCF0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgfVxuICBpZighdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgfVxuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSspXCIpO1xuICB2YXIgc2VlbiA9IHt9XG4gIHZhciBhID0gW107XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICB2YXIgbSA9IG4ubWF0Y2gocik7XG4gICAgaWYobSAmJiAhc2VlblttWzFdXSkge3NlZW5bbVsxXV0gPSB0cnVlOyBhLnB1c2gobVsxXSl9XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW5kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcblxuICB2YXIgYSA9IHRoaXMucmVhZGRpcihuYW1lKTtcbiAgdmFyIGMgPSBmYWxzZTtcbiAgdmFyIGkgPSAwO1xuICByZXR1cm4geyByZWFkU3luYyA6IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGMpIHtcbiAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogY2xvc2VkaXIgZmFpbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZihpID09IGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgZW50cnkgPSBhW2ldO1xuICAgIGkrKztcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeSB9XG4gIH0pXG4gICAgLCBjbG9zZVN5bmM6IChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoYykge1xuICAgICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogY2xvc2VkaXIgZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjID0gdHJ1ZTtcbiAgICAgIGEgPSBbXTtcbiAgICB9KVxuICB9XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzX2RpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYobmFtZSA9PSBcIlwiKSAgcmV0dXJuIHRydWU7XG4gIHZhciBuYW1lX3NsYXNoID0gdGhpcy5zbGFzaChuYW1lKTtcbiAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXT8xOjA7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG9rID0gdGhpcy5jb250ZW50W25hbWVdP3RydWU6ZmFsc2U7XG4gIGRlbGV0ZSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIHJldHVybiBvaztcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYpIHtcbiAgdmFyIGZpbGU7XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGlzIGEgZGlyZWN0b3J5XCIpO1xuICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICBpZihmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKCk7XG4gIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlICh0aGlzLm5tKG5hbWUpKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sRmFrZUZkKHRoaXMubm0obmFtZSksIGZpbGUsIGYpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG4gIHZhciBmaWxlO1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gICAgaWYoZi50cnVuY2F0ZSkgZmlsZS50cnVuY2F0ZSgpO1xuICB9IGVsc2UgaWYgKGYuY3JlYXRlKSB7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSAodGhpcy5ubShuYW1lKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWdpc3Rlcj0gZnVuY3Rpb24gKG5hbWUsY29udGVudCl7XG4gIHZhciBmaWxlO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV0pIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gIGlmKGNhbWxfaXNfbWxfYnl0ZXMoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNvbnRlbnQpO1xuICBpZihjYW1sX2lzX21sX3N0cmluZyhjb250ZW50KSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9hcnJheShjb250ZW50KSk7XG4gIGVsc2UgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudC50b1N0cmluZykge1xuICAgIHZhciBieXRlcyA9IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSkpO1xuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShieXRlcyk7XG4gIH1cbiAgaWYoZmlsZSl7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICB9XG4gIGVsc2UgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogcmVnaXN0ZXJpbmcgZmlsZSB3aXRoIGludmFsaWQgY29udGVudCB0eXBlXCIpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IE1sRmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbmZ1bmN0aW9uIE1sRmFrZUZpbGUoY29udGVudCl7XG4gIHRoaXMuZGF0YSA9IGNvbnRlbnQ7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZSA9IG5ldyBNbEZpbGUgKCk7XG5NbEZha2VGaWxlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZUZpbGVcbk1sRmFrZUZpbGUucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdmFyIG9sZCA9IHRoaXMuZGF0YTtcbiAgdGhpcy5kYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICBjYW1sX2JsaXRfYnl0ZXMob2xkLCAwLCB0aGlzLmRhdGEsIDAsIGxlbik7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aCh0aGlzLmRhdGEpO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgdmFyIG5ld19zdHIgPSBjYW1sX2NyZWF0ZV9ieXRlcyhvZmZzZXQgKyBsZW4pO1xuICAgIHZhciBvbGRfZGF0YSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGRfZGF0YSwgMCwgdGhpcy5kYXRhLCAwLCBjbGVuKTtcbiAgfVxuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBwb3MsIHRoaXMuZGF0YSwgb2Zmc2V0LCBsZW4pO1xuICByZXR1cm4gMFxufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKG9mZnNldCxidWYscG9zLGxlbil7XG4gIHZhciBjbGVuID0gdGhpcy5sZW5ndGgoKTtcbiAgaWYob2Zmc2V0ICsgbGVuID49IGNsZW4pIHtcbiAgICBsZW4gPSBjbGVuIC0gb2Zmc2V0O1xuICB9XG4gIGlmKGxlbikge1xuICAgIHZhciBkYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICAgIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgZGF0YSwgMCwgbGVuKTtcbiAgICBidWYuc2V0KGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoZGF0YSksIHBvcyk7XG4gIH1cbiAgcmV0dXJuIGxlblxufVxuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sRmFrZUZkX291dChmZCxmbGFncykge1xuICBNbEZha2VGaWxlLmNhbGwodGhpcywgY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICB0aGlzLmxvZyA9IChmdW5jdGlvbiAocykgeyByZXR1cm4gMCB9KTtcbiAgaWYoZmQgPT0gMSAmJiB0eXBlb2YgY29uc29sZS5sb2cgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5sb2c7XG4gIGVsc2UgaWYoZmQgPT0gMiAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmVycm9yO1xuICBlbHNlIGlmKHR5cGVvZiBjb25zb2xlLmxvZyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmxvZ1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMCB9XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKG9mZnNldCxidWYscG9zLGxlbikge1xuICBpZih0aGlzLmxvZykge1xuICAgIGlmKGxlbiA+IDBcbiAgICAgICAmJiBwb3MgPj0gMFxuICAgICAgICYmIHBvcytsZW4gPD0gYnVmLmxlbmd0aFxuICAgICAgICYmIGJ1Zltwb3MrbGVuLTFdID09IDEwKVxuICAgICAgbGVuIC0tO1xuICAgIC8vIERvIG5vdCBvdXRwdXQgdGhlIGxhc3QgXFxuIGlmIHByZXNlbnRcbiAgICAvLyBhcyBjb25zb2xlIGxvZ2dpbmcgZGlzcGxheSBhIG5ld2xpbmUgYXQgdGhlIGVuZFxuICAgIHZhciBzcmMgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIHBvcywgc3JjLCAwLCBsZW4pO1xuICAgIHRoaXMubG9nKHNyYy50b1V0ZjE2KCkpO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMuZmQgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBhbHJlYWR5IGNsb3NlZFwiKTtcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5mZCAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGlzIHdyaXRlIG9ubHlcIik7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxvZyA9IHVuZGVmaW5lZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGZFxuLy9SZXF1aXJlczogTWxGYWtlRmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sRmFrZUZkKG5hbWUsIGZpbGUsZmxhZ3MpIHtcbiAgdGhpcy5maWxlID0gZmlsZTtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuXG5NbEZha2VGZC5wcm90b3R5cGUuZXJyX2Nsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5uYW1lICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgYWxyZWFkeSBjbG9zZWRcIik7XG59XG5NbEZha2VGZC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5sZW5ndGggKClcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAob2Zmc2V0LGJ1Zixwb3MsbGVuKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS53cml0ZShvZmZzZXQsYnVmLHBvcyxsZW4pXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAob2Zmc2V0LCBidWYsIHBvcywgbGVuKSB7XG4gIGlmKHRoaXMuZmlsZSkgcmV0dXJuIHRoaXMuZmlsZS5yZWFkKG9mZnNldCwgYnVmLCBwb3MsIGxlbilcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZmlsZSA9IHVuZGVmaW5lZDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKHMuY2hhckNvZGVBdCgyICogaSkgfCAocy5jaGFyQ29kZUF0KDIgKiBpICsgMSkgPDwgOCkpIDw8IDE2ID4+IDE2O1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheSwgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSByZXR1cm4gLWJhc2UtMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKXtcbiAgICAgIGlmIChsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9PSAwKVxuICAgICAgICByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2VcbiAgICAgICAgYyA9IDI1NjtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIFJlYWQgbmV4dCBpbnB1dCBjaGFyICovXG4gICAgICBjID0gYnVmZmVyW2xleGJ1ZltsZXhfY3Vycl9wb3NdXTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdICsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qIE5ldyBsZXhlciBlbmdpbmUsIHdpdGggbWVtb3J5IG9mIHBvc2l0aW9ucyAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl9tZW0ocywgaSwgbWVtLCBjdXJyX3Bvcykge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChkc3QgPT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gY3Vycl9wb3M7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9sZXhfcnVuX3RhZyhzLCBpLCBtZW0pIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybiA7XG4gICAgdmFyIHNyYyA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChzcmMgPT0gMHhmZilcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSAtMTtcbiAgICBlbHNlXG4gICAgICBtZW0gW2RzdCArIDFdID0gbWVtIFtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX25ld19sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfbWVtID0gMTA7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcbiAgdmFyIGxleF9iYXNlX2NvZGUgPSA2O1xuICB2YXIgbGV4X2JhY2t0cmtfY29kZSA9IDc7XG4gIHZhciBsZXhfZGVmYXVsdF9jb2RlID0gODtcbiAgdmFyIGxleF90cmFuc19jb2RlID0gOTtcbiAgdmFyIGxleF9jaGVja19jb2RlID0gMTA7XG4gIHZhciBsZXhfY29kZSA9IDExO1xuXG4gIGlmICghdGJsLmxleF9kZWZhdWx0KSB7XG4gICAgdGJsLmxleF9iYXNlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV0pO1xuICAgIHRibC5sZXhfYmFja3RyayA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF0pO1xuICB9XG4gIGlmICghdGJsLmxleF9kZWZhdWx0X2NvZGUpIHtcbiAgICB0YmwubGV4X2Jhc2VfY29kZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VfY29kZV0pO1xuICAgIHRibC5sZXhfYmFja3Rya19jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0X2NvZGVdKTtcbiAgfVxuICBpZiAodGJsLmxleF9jb2RlID09IG51bGwpIHRibC5sZXhfY29kZSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcodGJsW2xleF9jb2RlXSk7XG5cbiAgdmFyIGMsIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMobGV4YnVmW2xleF9idWZmZXJdKTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvcig7Oykge1xuICAgIC8qIExvb2t1cCBiYXNlIGFkZHJlc3Mgb3IgYWN0aW9uIG51bWJlciBmb3IgY3VycmVudCBzdGF0ZSAqL1xuICAgIHZhciBiYXNlID0gdGJsLmxleF9iYXNlW3N0YXRlXTtcbiAgICBpZiAoYmFzZSA8IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2Jhc2VfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgcmV0dXJuIC1iYXNlLTE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICB2YXIgcHN0YXRlID0gc3RhdGUgO1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSwgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PSBwc3RhdGUpXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfdHJhbnNfY29kZVtiYXNlX2NvZGUgKyBjXTtcbiAgICAgIGVsc2VcbiAgICAgICAgcGNfb2ZmID0gdGJsLmxleF9kZWZhdWx0X2NvZGVbcHN0YXRlXTtcbiAgICAgIGlmIChwY19vZmYgPiAwKVxuICAgICAgICBjYW1sX2xleF9ydW5fbWVtXG4gICAgICAodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSwgbGV4YnVmW2xleF9jdXJyX3Bvc10pO1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfY2hhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUsIGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1SW5pdCwgY2FtbF9NRDVVcGRhdGUsIGNhbWxfTUQ1RmluYWxcbmZ1bmN0aW9uIGNhbWxfbWQ1X2NoYW4oY2hhbmlkLHRvcmVhZCl7XG4gIHZhciBjdHggPSBjYW1sX01ENUluaXQoKTtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDQwOTYpO1xuICBpZih0b3JlYWQgPCAwKXtcbiAgICB3aGlsZSh0cnVlKXtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsYnVmZmVyLDAsYnVmZmVyLmxlbmd0aCk7XG4gICAgICBpZihyZWFkID09IDApIGJyZWFrO1xuICAgICAgY2FtbF9NRDVVcGRhdGUoY3R4LGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlKHRvcmVhZCA+IDApIHtcbiAgICAgIHZhciByZWFkID0gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsYnVmZmVyLDAsICh0b3JlYWQgPiBidWZmZXIubGVuZ3RoID8gYnVmZmVyLmxlbmd0aCA6IHRvcmVhZCkpO1xuICAgICAgaWYocmVhZCA9PSAwKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICAgIHRvcmVhZCAtPSByZWFkXG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShjYW1sX01ENUZpbmFsKGN0eCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX21kNV9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tZDVfc3RyaW5nKHMsIG9mcywgbGVuKSB7XG4gIHJldHVybiBjYW1sX21kNV9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhzKSxvZnMsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVUcmFuc2Zvcm1cbnZhciBjYW1sX01ENVRyYW5zZm9ybSA9IChmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGFkZCAoeCwgeSkgeyByZXR1cm4gKHggKyB5KSB8IDA7IH1cbiAgZnVuY3Rpb24geHgocSxhLGIseCxzLHQpIHtcbiAgICBhID0gYWRkKGFkZChhLCBxKSwgYWRkKHgsIHQpKTtcbiAgICByZXR1cm4gYWRkKChhIDw8IHMpIHwgKGEgPj4+ICgzMiAtIHMpKSwgYik7XG4gIH1cbiAgZnVuY3Rpb24gZmYoYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gZ2coYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGQpIHwgKGMgJiAofmQpKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTsgfVxuICBmdW5jdGlvbiBpaShhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdCk7IH1cblxuICByZXR1cm4gZnVuY3Rpb24gKHcsIGJ1ZmZlcikge1xuICAgIHZhciBhID0gd1swXSwgYiA9IHdbMV0sIGMgPSB3WzJdLCBkID0gd1szXTtcblxuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDBdLCA3LCAweEQ3NkFBNDc4KTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyAxXSwgMTIsIDB4RThDN0I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbIDJdLCAxNywgMHgyNDIwNzBEQik7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsgM10sIDIyLCAweEMxQkRDRUVFKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyA0XSwgNywgMHhGNTdDMEZBRik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNV0sIDEyLCAweDQ3ODdDNjJBKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWyA2XSwgMTcsIDB4QTgzMDQ2MTMpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbIDddLCAyMiwgMHhGRDQ2OTUwMSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOF0sIDcsIDB4Njk4MDk4RDgpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDldLCAxMiwgMHg4QjQ0RjdBRik7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMF0sIDE3LCAweEZGRkY1QkIxKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzExXSwgMjIsIDB4ODk1Q0Q3QkUpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbMTJdLCA3LCAweDZCOTAxMTIyKTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWzEzXSwgMTIsIDB4RkQ5ODcxOTMpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTRdLCAxNywgMHhBNjc5NDM4RSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNV0sIDIyLCAweDQ5QjQwODIxKTtcblxuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDFdLCA1LCAweEY2MUUyNTYyKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWyA2XSwgOSwgMHhDMDQwQjM0MCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMV0sIDE0LCAweDI2NUU1QTUxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyAwXSwgMjAsIDB4RTlCNkM3QUEpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDVdLCA1LCAweEQ2MkYxMDVEKTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzEwXSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE0LCAweEQ4QTFFNjgxKTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyA0XSwgMjAsIDB4RTdEM0ZCQzgpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbIDldLCA1LCAweDIxRTFDREU2KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWzE0XSwgOSwgMHhDMzM3MDdENik7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsgM10sIDE0LCAweEY0RDUwRDg3KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWyA4XSwgMjAsIDB4NDU1QTE0RUQpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbMTNdLCA1LCAweEE5RTNFOTA1KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyWyAyXSwgOSwgMHhGQ0VGQTNGOCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlclsgN10sIDE0LCAweDY3NkYwMkQ5KTtcbiAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyWzEyXSwgMjAsIDB4OEQyQTRDOEEpO1xuXG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNV0sIDQsIDB4RkZGQTM5NDIpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDhdLCAxMSwgMHg4NzcxRjY4MSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMV0sIDE2LCAweDZEOUQ2MTIyKTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzE0XSwgMjMsIDB4RkRFNTM4MEMpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDFdLCA0LCAweEE0QkVFQTQ0KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyA0XSwgMTEsIDB4NEJERUNGQTkpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbIDddLCAxNiwgMHhGNkJCNEI2MCk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMF0sIDIzLCAweEJFQkZCQzcwKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWzEzXSwgNCwgMHgyODlCN0VDNik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMF0sIDExLCAweEVBQTEyN0ZBKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWyAzXSwgMTYsIDB4RDRFRjMwODUpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbIDZdLCAyMywgMHgwNDg4MUQwNSk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOV0sIDQsIDB4RDlENEQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbMTJdLCAxMSwgMHhFNkRCOTlFNSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNV0sIDE2LCAweDFGQTI3Q0Y4KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWyAyXSwgMjMsIDB4QzRBQzU2NjUpO1xuXG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMF0sIDYsIDB4RjQyOTIyNDQpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbIDddLCAxMCwgMHg0MzJBRkY5Nyk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE1LCAweEFCOTQyM0E3KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyA1XSwgMjEsIDB4RkM5M0EwMzkpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbMTJdLCA2LCAweDY1NUI1OUMzKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWyAzXSwgMTAsIDB4OEYwQ0NDOTIpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNSwgMHhGRkVGRjQ3RCk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMV0sIDIxLCAweDg1ODQ1REQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyA4XSwgNiwgMHg2RkE4N0U0Rik7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNV0sIDEwLCAweEZFMkNFNkUwKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWyA2XSwgMTUsIDB4QTMwMTQzMTQpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbMTNdLCAyMSwgMHg0RTA4MTFBMSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNF0sIDYsIDB4Rjc1MzdFODIpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTFdLCAxMCwgMHhCRDNBRjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsgMl0sIDE1LCAweDJBRDdEMkJCKTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyA5XSwgMjEsIDB4RUI4NkQzOTEpO1xuXG4gICAgd1swXSA9IGFkZChhLCB3WzBdKTtcbiAgICB3WzFdID0gYWRkKGIsIHdbMV0pO1xuICAgIHdbMl0gPSBhZGQoYywgd1syXSk7XG4gICAgd1szXSA9IGFkZChkLCB3WzNdKTtcbiAgfX0pKClcblxuLy9Qcm92aWRlczogY2FtbF9NRDVJbml0XG5mdW5jdGlvbiBjYW1sX01ENUluaXQoKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoNjQpO1xuICB2YXIgYjMyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gIHZhciBiOCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gIHJldHVybiB7bGVuOjAsXG4gICAgICAgICAgdzpuZXcgVWludDMyQXJyYXkoWzB4Njc0NTIzMDEsIDB4RUZDREFCODksIDB4OThCQURDRkUsIDB4MTAzMjU0NzZdKSxcbiAgICAgICAgICBiMzI6YjMyLFxuICAgICAgICAgIGI4OmI4fVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVVwZGF0ZVxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1VXBkYXRlKGN0eCwgaW5wdXQsIGlucHV0X2xlbil7XG4gIHZhciBpbl9idWYgPSBjdHgubGVuICYgMHgzZjtcbiAgdmFyIGlucHV0X3BvcyA9IDA7XG4gIGN0eC5sZW4gKz0gaW5wdXRfbGVuO1xuICBpZihpbl9idWYpe1xuICAgIHZhciBtaXNzaW5nID0gNjQgLSBpbl9idWY7XG4gICAgaWYoaW5wdXRfbGVuIDwgbWlzc2luZykge1xuICAgICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLGlucHV0X2xlbiksaW5fYnVmKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KDAsbWlzc2luZyksaW5fYnVmKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IG1pc3Npbmc7XG4gICAgaW5wdXRfcG9zICs9IG1pc3Npbmc7XG4gIH1cbiAgd2hpbGUoaW5wdXRfbGVuID49IDY0KXtcbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KGlucHV0X3BvcyxpbnB1dF9wb3MgKyA2NCksIDApO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gNjQ7XG4gICAgaW5wdXRfcG9zICs9IDY0O1xuICB9XG4gIGlmKGlucHV0X2xlbilcbiAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KGlucHV0X3BvcyxpbnB1dF9wb3MgKyBpbnB1dF9sZW4pLCAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVGaW5hbFxuLy9SZXF1aXJlczogY2FtbF9NRDVUcmFuc2Zvcm1cbmZ1bmN0aW9uIGNhbWxfTUQ1RmluYWwoY3R4KXtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICBjdHguYjhbaW5fYnVmXSA9IDB4ODA7XG4gIGluX2J1ZiArKztcbiAgaWYoaW5fYnVmID4gNTYpIHtcbiAgICBmb3IodmFyIGogPSBpbl9idWY7IGogPCA2NDsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgNTY7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IodmFyIGogPSBpbl9idWY7IGogPCA1NjsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9XG4gIGN0eC5iMzJbMTRdID0gY3R4LmxlbiA8PCAzO1xuICBjdHguYjMyWzE1XSA9IChjdHgubGVuID4+IDI5KSAmIDB4MUZGRkZGRkY7XG4gIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgdmFyIHQgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKVxuICAgICAgdFtpICogNCArIGpdID0gKGN0eC53W2ldID4+ICg4ICogaikpICYgMHhGRjtcbiAgcmV0dXJuIHQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9ieXRlcyhzLCBvZnMsIGxlbikge1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBhID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhzKTtcbiAgY2FtbF9NRDVVcGRhdGUoY3R4LGEuc3ViYXJyYXkob2ZzLCBvZnMgKyBsZW4pLCBsZW4pO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoY2FtbF9NRDVGaW5hbChjdHgpKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSW9cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZmRzXG52YXIgY2FtbF9zeXNfZmRzID0gbmV3IEFycmF5KDMpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jbG9zZVxuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG5mdW5jdGlvbiBjYW1sX3N5c19jbG9zZShmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUpIGZpbGUuY2xvc2UoKTtcbiAgZGVsZXRlIGNhbWxfc3lzX2Zkc1tmZF07XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBNbEZha2VGZF9vdXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9SZXF1aXJlczogY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUsaWR4KSB7XG4gIGlmKGlkeCA9PSB1bmRlZmluZWQpe1xuICAgIGlkeCA9IGNhbWxfc3lzX2Zkcy5sZW5ndGg7XG4gIH1cbiAgY2FtbF9zeXNfZmRzW2lkeF0gPSBmaWxlO1xuICByZXR1cm4gaWR4IHwgMDtcbn1cbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW4gKG5hbWUsIGZsYWdzLCBfcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUoZmxhZ3Mpe1xuICAgIHN3aXRjaChmbGFnc1sxXSl7XG4gICAgY2FzZSAwOiBmLnJkb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAxOiBmLndyb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAyOiBmLmFwcGVuZCA9IDE7YnJlYWs7XG4gICAgY2FzZSAzOiBmLmNyZWF0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA0OiBmLnRydW5jYXRlID0gMTticmVhaztcbiAgICBjYXNlIDU6IGYuZXhjbCA9IDE7IGJyZWFrO1xuICAgIGNhc2UgNjogZi5iaW5hcnkgPSAxO2JyZWFrO1xuICAgIGNhc2UgNzogZi50ZXh0ID0gMTticmVhaztcbiAgICBjYXNlIDg6IGYubm9uYmxvY2sgPSAxO2JyZWFrO1xuICAgIH1cbiAgICBmbGFncz1mbGFnc1syXTtcbiAgfVxuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3QsZik7XG4gIHJldHVybiBjYW1sX3N5c19vcGVuX2ludGVybmFsIChmaWxlLCB1bmRlZmluZWQpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZmlsZShmZCwgZmxhZ3MpIHtcbiAgICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm4gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3MpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICByZXR1cm4gbmV3IE1sRmFrZUZkX291dChmZCwgZmxhZ3MpXG4gIH1cbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDAse3Jkb25seToxLGFsdG5hbWU6XCIvZGV2L3N0ZGluXCIsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAwKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDEse2J1ZmZlcmVkOjIsd3Jvbmx5OjEsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAxKTtcbiAgY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlKDIse2J1ZmZlcmVkOjIsd3Jvbmx5OjEsaXNDaGFyYWN0ZXJEZXZpY2U6dHJ1ZX0pLCAyKTtcbn0pKClcblxuXG4vLyBvY2FtbCBDaGFubmVsc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZShjaGFuaWQsIG5hbWUpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGNoYW4ubmFtZSA9IG5hbWU7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxzXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBBcnJheSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dF9jaGFubmVsc19saXN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX291dF9jaGFubmVsc19saXN0ICgpIHtcbiAgdmFyIGwgPSAwO1xuICBmb3IodmFyIGMgPSAwOyBjIDwgY2FtbF9tbF9jaGFubmVscy5sZW5ndGg7IGMrKyl7XG4gICAgaWYoY2FtbF9tbF9jaGFubmVsc1tjXSAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm9wZW5lZCAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm91dClcbiAgICAgIGw9WzAsY2FtbF9tbF9jaGFubmVsc1tjXS5mZCxsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX29wZW5cbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCAoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlLmZsYWdzLnJkb25seSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIisgZmQgKyBcIiBpcyByZWFkb25seVwiKTtcbiAgdmFyIGJ1ZmZlcmVkID0gKGZpbGUuZmxhZ3MuYnVmZmVyZWQgIT09IHVuZGVmaW5lZCkgPyBmaWxlLmZsYWdzLmJ1ZmZlcmVkIDogMTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpmaWxlLFxuICAgIG9mZnNldDpmaWxlLmZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjAsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OnRydWUsXG4gICAgYnVmZmVyX2N1cnI6MCxcbiAgICBidWZmZXI6bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFxuICAgIGJ1ZmZlcmVkOmJ1ZmZlcmVkXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiAoZmQpICB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZS5mbGFncy53cm9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgd3JpdGVvbmx5XCIpO1xuICB2YXIgcmVmaWxsID0gbnVsbDtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpmaWxlLFxuICAgIG9mZnNldDpmaWxlLmZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjAsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICBidWZmZXJfY3VycjowLFxuICAgIGJ1ZmZlcl9tYXg6MCxcbiAgICBidWZmZXI6bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFxuICAgIHJlZmlsbDpyZWZpbGxcbiAgfTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFubmVsLmZkXT1jaGFubmVsO1xuICByZXR1cm4gY2hhbm5lbC5mZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbl93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3MoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luKGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0X3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzKGZkLCBmbGFncyl7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQoZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuLy9BbGlhczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG5mdW5jdGlvbiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvcihjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgcmV0dXJuIGNoYW4uZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZShjaGFuaWQsbW9kZSl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjaGFuLmZpbGUuZmxhZ3MudGV4dCA9ICFtb2RlXG4gIGNoYW4uZmlsZS5mbGFncy5iaW5hcnkgPSBtb2RlXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9pc19iaW5hcnlfbW9kZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2VcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZihjaGFuLm9wZW5lZCkge1xuICAgIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gICAgY2FtbF9zeXNfY2xvc2UoY2hhbi5mZCk7XG4gICAgY2hhbi5mZCA9IC0xO1xuICAgIGNoYW4uYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5sZW5ndGgoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemVfNjQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjaGFuLmZpbGUubGVuZ3RoICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0KGNoYW5pZCxmKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjaGFuLm91dHB1dCA9IChmdW5jdGlvbiAocykge2Yocyl9KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbChjaGFuaWQsZikge1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ucmVmaWxsID0gZjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZmlsbCAoY2hhbikge1xuICBpZihjaGFuLnJlZmlsbCAhPSBudWxsKXtcbiAgICB2YXIgc3RyID0gY2hhbi5yZWZpbGwoKTtcbiAgICB2YXIgc3RyX2EgPSBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyhzdHIpO1xuICAgIGlmIChzdHJfYS5sZW5ndGggPT0gMCkge1xuICAgICAgY2hhbi5yZWZpbGwgPSBudWxsXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoY2hhbi5idWZmZXIubGVuZ3RoIDwgY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKXtcbiAgICAgICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShjaGFuLmJ1ZmZlcl9tYXggKyBzdHJfYS5sZW5ndGgpO1xuICAgICAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgICAgIGNoYW4uYnVmZmVyID0gYjtcbiAgICAgIH1cbiAgICAgIGNoYW4uYnVmZmVyLnNldChzdHJfYSxjaGFuLmJ1ZmZlcl9tYXgpO1xuICAgICAgY2hhbi5vZmZzZXQgKz0gc3RyX2EubGVuZ3RoO1xuICAgICAgY2hhbi5idWZmZXJfbWF4ICs9IHN0cl9hLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5yZWFkID0gY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsIGNoYW4uYnVmZmVyLCBjaGFuLmJ1ZmZlcl9tYXgsIGNoYW4uYnVmZmVyLmxlbmd0aCAtIGNoYW4uYnVmZmVyX21heCk7XG4gICAgY2hhbi5vZmZzZXQgKz0gbnJlYWQ7XG4gICAgY2hhbi5idWZmZXJfbWF4ICs9IG5yZWFkO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQgKGNoYW5pZCwgYiwgaSwgbCkge1xuICB2YXIgYmEgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGIpO1xuICByZXR1cm4gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsIGJhLCBpLCBsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2JpZ2FycmF5IChjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF9iYV90b190eXBlZF9hcnJheShiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfYmxvY2sgKGNoYW5pZCwgYmEsIGksIGwpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciBuID0gbDtcbiAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgaWYobCA8PSBhdmFpbCkge1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBsKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBsO1xuICB9XG4gIGVsc2UgaWYoYXZhaWwgPiAwKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsY2hhbi5idWZmZXJfY3VyciArIGF2YWlsKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBhdmFpbDtcbiAgICBuID0gYXZhaWw7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICBjYW1sX3JlZmlsbChjaGFuKTtcbiAgICB2YXIgYXZhaWwgPSBjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgIGlmKG4gPiBhdmFpbCkgbiA9IGF2YWlsO1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBuKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBuO1xuICB9XG4gIHJldHVybiBuIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVscywgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZSAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgaGVhZGVyID0gbmV3IFVpbnQ4QXJyYXkoY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgZnVuY3Rpb24gYmxvY2soYnVmZmVyLCBvZmZzZXQsIG4pIHtcbiAgICB2YXIgciA9IDA7XG4gICAgd2hpbGUociA8IG4pe1xuICAgICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpe1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICAgICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpXG4gICAgICAgIGJyZWFrO1xuICAgICAgYnVmZmVyW29mZnNldCtyXSA9IGNoYW4uYnVmZmVyW2NoYW4uYnVmZmVyX2N1cnJdO1xuICAgICAgY2hhbi5idWZmZXJfY3VycisrO1xuICAgICAgcisrO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB2YXIgciA9IGJsb2NrKGhlYWRlciwgMCwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgaWYociA9PSAwKVxuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgZWxzZSBpZiAociA8IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHRydW5jYXRlZCBvYmplY3RcIik7XG4gIHZhciBsZW4gPSBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChjYW1sX2J5dGVzX29mX2FycmF5KGhlYWRlciksIDApO1xuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuICsgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgYnVmLnNldChoZWFkZXIsMCk7XG4gIHZhciByID0gYmxvY2soYnVmLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUsIGxlbilcbiAgaWYociA8IGxlbilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHRydW5jYXRlZCBvYmplY3QgXCIgKyByICsgXCIgIFwiICsgbGVuKTtcbiAgdmFyIG9mZnNldCA9IFswXTtcbiAgdmFyIHJlcyA9IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIG9mZnNldCk7XG4gIGNoYW4ub2Zmc2V0ID0gY2hhbi5vZmZzZXQgKyBvZmZzZXRbMF07XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX3RvX291dHNpZGVfaGVhcChjKSB7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlKGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfcmVmaWxsXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2NoYXIgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpe1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gIH1cbiAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KVxuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgdmFyIHJlcyA9IGNoYW4uYnVmZmVyW2NoYW4uYnVmZmVyX2N1cnJdO1xuICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2NoYXIsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfaW50IChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgNDsgaSsrKXtcbiAgICByZXMgPSAocmVzIDw8IDgpICsgY2FtbF9tbF9pbnB1dF9jaGFyKGNoYW5pZCkgfCAwO1xuICB9XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgaWYocG9zID49IGNoYW4ub2Zmc2V0IC0gY2hhbi5idWZmZXJfbWF4XG4gICAgICYmIHBvcyA8PSBjaGFuLm9mZnNldFxuICAgICAmJiBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5KSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IGNoYW4uYnVmZmVyX21heCAtIChjaGFuLm9mZnNldCAtIHBvcyk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbihjaGFuaWQscG9zKXtcbiAgcmV0dXJuIGNhbWxfc2Vla19pbihjaGFuaWQscG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0LCBjYW1sX3NlZWtfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbl82NChjaGFuaWQscG9zKXtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19pbihjaGFuaWQsIHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX3Bvc19pbihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLm9mZnNldCAtIChjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19pbihjaGFuaWQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3NfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luXzY0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjYW1sX3Bvc19pbihjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfcmVmaWxsXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X3NjYW5fbGluZShjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgdmFyIHAgPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBkbyB7XG4gICAgaWYocCA+PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPiAwKSB7XG4gICAgICAgIGNoYW4uYnVmZmVyLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyKSwwKTtcbiAgICAgICAgcCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9tYXggLT0gY2hhbi5idWZmZXJfY3VycjtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgICB9XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9tYXggPj0gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtKGNoYW4uYnVmZmVyX21heCkgfCAwO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZfbWF4ID0gY2hhbi5idWZmZXJfbWF4O1xuICAgICAgY2FtbF9yZWZpbGwgKGNoYW4pO1xuICAgICAgaWYocHJldl9tYXggPT0gY2hhbi5idWZmZXJfbWF4KSB7XG4gICAgICAgIHJldHVybiAtKGNoYW4uYnVmZmVyX21heCkgfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoY2hhbi5idWZmZXJbcCsrXSAhPSAxMCk7XG4gIHJldHVybiAocCAtIGNoYW4uYnVmZmVyX2N1cnIpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9mbHVzaFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbHNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9mbHVzaCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBmbHVzaCBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBpZighY2hhbi5idWZmZXIgfHwgY2hhbi5idWZmZXJfY3VyciA9PSAwKSByZXR1cm4gMDtcbiAgaWYoY2hhbi5vdXRwdXQpIHtcbiAgICBjaGFuLm91dHB1dChjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoY2hhbi5idWZmZXIsIDAsIGNoYW4uYnVmZmVyX2N1cnIpKTtcbiAgfSBlbHNlIHtcbiAgICBjaGFuLmZpbGUud3JpdGUoY2hhbi5vZmZzZXQsIGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgfVxuICBjaGFuLm9mZnNldCArPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vb3V0cHV0IHRvIG91dF9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X3RhXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfdGEoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBvdXRwdXQgdG8gYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKTtcbiAgaWYoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGggPiBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoKTtcbiAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgY2hhbi5idWZmZXIgPSBiXG4gIH1cbiAgc3dpdGNoKGNoYW4uYnVmZmVyZWQpe1xuICBjYXNlIDA6IC8vIFVuYnVmZmVyZWRcbiAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICBicmVha1xuICBjYXNlIDE6IC8vIEJ1ZmZlcmVkICh0aGUgZGVmYXVsdClcbiAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlci5sZW5ndGgpXG4gICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIGJyZWFrO1xuICBjYXNlIDI6IC8vIEJ1ZmZlcmVkIChvbmx5IGZvciBzdGRvdXQgYW5kIHN0ZGVycilcbiAgICB2YXIgaWQgPSBidWZmZXIubGFzdEluZGV4T2YoMTApXG4gICAgaWYoaWQgPCAwKSB7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKVxuICAgICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIuc3ViYXJyYXkoMCwgaWQgKyAxKSwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGlkICsgMTtcbiAgICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLnN1YmFycmF5KGlkICsgMSksIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoIC0gaWQgLSAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfbWxfb3V0cHV0X3RhXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9ieXRlcyhjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbik7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfYmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXksIGNhbWxfbWxfb3V0cHV0X3RhXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9iaWdhcnJheShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbik7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dChjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pe1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksb2Zmc2V0LGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9jaGFyIChjaGFuaWQsYykge1xuICB2YXIgcyA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nLCBjYW1sX21sX291dHB1dCxjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlIChjaGFuaWQsdixmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9zZWVrX291dChjaGFuaWQsIHBvcyl7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9zZWVrX291dFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dChjaGFuaWQscG9zKXtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9zZWVrX291dFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dF82NChjaGFuaWQscG9zKXtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfcG9zX291dChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLm9mZnNldCArIGNoYW4uYnVmZmVyX2N1cnJcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX291dChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfcG9zX291dChjaGFuaWQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX291dFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0XzY0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdCAoY2FtbF9wb3Nfb3V0KGNoYW5pZCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50IChjaGFuaWQsaSkge1xuICB2YXIgYXJyID0gWyhpPj4yNCkgJiAweEZGLChpPj4xNikgJiAweEZGLChpPj44KSAmIDB4RkYsaSAmIDB4RkYgXTtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lzX2J1ZmZlcmVkXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lzX2J1ZmZlcmVkKGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLmJ1ZmZlcmVkID8gMSA6IDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYnVmZmVyZWRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2J1ZmZlcmVkKGNoYW5pZCx2KSB7XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5idWZmZXJlZCA9IHY7XG4gIGlmKCF2KSBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHJldHVybiAwXG59XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBsZXhlcnMgZ2VuZXJhdGVkIGJ5IGNhbWxsZXggKilcblxudHlwZSBwb3NpdGlvbiA9IHtcbiAgcG9zX2ZuYW1lIDogc3RyaW5nO1xuICBwb3NfbG51bSA6IGludDtcbiAgcG9zX2JvbCA6IGludDtcbiAgcG9zX2NudW0gOiBpbnQ7XG59XG5cbmxldCBkdW1teV9wb3MgPSB7XG4gIHBvc19mbmFtZSA9IFwiXCI7XG4gIHBvc19sbnVtID0gMDtcbiAgcG9zX2JvbCA9IDA7XG4gIHBvc19jbnVtID0gLTE7XG59XG5cbnR5cGUgbGV4YnVmID1cbiAgeyByZWZpbGxfYnVmZiA6IGxleGJ1ZiAtPiB1bml0O1xuICAgIG11dGFibGUgbGV4X2J1ZmZlciA6IGJ5dGVzO1xuICAgIG11dGFibGUgbGV4X2J1ZmZlcl9sZW4gOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfYWJzX3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9zdGFydF9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfY3Vycl9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfbGFzdF9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfbGFzdF9hY3Rpb24gOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfZW9mX3JlYWNoZWQgOiBib29sO1xuICAgIG11dGFibGUgbGV4X21lbSA6IGludCBhcnJheTtcbiAgICBtdXRhYmxlIGxleF9zdGFydF9wIDogcG9zaXRpb247XG4gICAgbXV0YWJsZSBsZXhfY3Vycl9wIDogcG9zaXRpb247XG4gIH1cblxudHlwZSBsZXhfdGFibGVzID1cbiAgeyBsZXhfYmFzZTogc3RyaW5nO1xuICAgIGxleF9iYWNrdHJrOiBzdHJpbmc7XG4gICAgbGV4X2RlZmF1bHQ6IHN0cmluZztcbiAgICBsZXhfdHJhbnM6IHN0cmluZztcbiAgICBsZXhfY2hlY2s6IHN0cmluZztcbiAgICBsZXhfYmFzZV9jb2RlIDogc3RyaW5nO1xuICAgIGxleF9iYWNrdHJrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2RlZmF1bHRfY29kZSA6IHN0cmluZztcbiAgICBsZXhfdHJhbnNfY29kZSA6IHN0cmluZztcbiAgICBsZXhfY2hlY2tfY29kZSA6IHN0cmluZztcbiAgICBsZXhfY29kZTogc3RyaW5nO31cblxuZXh0ZXJuYWwgY19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50ID0gXCJjYW1sX2xleF9lbmdpbmVcIlxuZXh0ZXJuYWwgY19uZXdfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX25ld19sZXhfZW5naW5lXCJcblxubGV0IGVuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgbGV0IHJlc3VsdCA9IGNfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgaWYgcmVzdWx0ID49IDAgJiYgYnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zIHRoZW4gYmVnaW5cbiAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgZW5kO1xuICByZXN1bHRcblxuXG5sZXQgbmV3X2VuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgbGV0IHJlc3VsdCA9IGNfbmV3X2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cbmxldCBsZXhfcmVmaWxsIHJlYWRfZnVuIGF1eF9idWZmZXIgbGV4YnVmID1cbiAgbGV0IHJlYWQgPVxuICAgIHJlYWRfZnVuIGF1eF9idWZmZXIgKEJ5dGVzLmxlbmd0aCBhdXhfYnVmZmVyKSBpblxuICBsZXQgbiA9XG4gICAgaWYgcmVhZCA+IDBcbiAgICB0aGVuIHJlYWRcbiAgICBlbHNlIChsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWU7IDApIGluXG4gICgqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1ZmZlcjpcbiAgICAgICAgPC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tPlxuICAgICAgICB8ICBqdW5rIHwgICAgICB2YWxpZCBkYXRhICAgICB8ICAganVuayAgICB8XG4gICAgICAgIF4gICAgICAgXiAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgIF5cbiAgICAgICAgMCAgICBzdGFydF9wb3MgICAgICAgICAgICAgYnVmZmVyX2VuZCAgICBCeXRlcy5sZW5ndGggYnVmZmVyXG4gICopXG4gIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG4gPiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIgdGhlbiBiZWdpblxuICAgICgqIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuXG4gICAgICAgPD0gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyXG4gICAgdGhlbiBiZWdpblxuICAgICAgKCogQnV0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpZiB3ZSByZWNsYWltIHRoZSBqdW5rIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgIG9mIHRoZSBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcylcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgKCogV2UgbXVzdCBncm93IHRoZSBidWZmZXIuICBEb3VibGluZyBpdHMgc2l6ZSB3aWxsIHByb3ZpZGUgZW5vdWdoXG4gICAgICAgICBzcGFjZSBzaW5jZSBuIDw9IFN0cmluZy5sZW5ndGggYXV4X2J1ZmZlciA8PSBTdHJpbmcubGVuZ3RoIGJ1ZmZlci5cbiAgICAgICAgIFdhdGNoIG91dCBmb3Igc3RyaW5nIGxlbmd0aCBvdmVyZmxvdywgdGhvdWdoLiAqKVxuICAgICAgbGV0IG5ld2xlbiA9XG4gICAgICAgIEludC5taW4gKDIgKiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuID4gbmV3bGVuXG4gICAgICB0aGVuIGZhaWx3aXRoIFwiTGV4aW5nLmxleF9yZWZpbGw6IGNhbm5vdCBncm93IGJ1ZmZlclwiO1xuICAgICAgbGV0IG5ld2J1ZiA9IEJ5dGVzLmNyZWF0ZSBuZXdsZW4gaW5cbiAgICAgICgqIENvcHkgdGhlIHZhbGlkIGRhdGEgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGJ1ZmZlciAqKVxuICAgICAgQnl0ZXMuYmxpdCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3Bvc1xuICAgICAgICAgICAgICAgICAgbmV3YnVmIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3Bvcyk7XG4gICAgICBsZXhidWYubGV4X2J1ZmZlciA8LSBuZXdidWZcbiAgICBlbmQ7XG4gICAgKCogUmVhbGxvY2F0aW9uIG9yIG5vdCwgd2UgaGF2ZSBzaGlmdGVkIHRoZSBkYXRhIGxlZnQgYnlcbiAgICAgICBzdGFydF9wb3MgY2hhcmFjdGVyczsgdXBkYXRlIHRoZSBwb3NpdGlvbnMgKilcbiAgICBsZXQgcyA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gICAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIGxleGJ1Zi5sZXhfYWJzX3BvcyArIHM7XG4gICAgbGV4YnVmLmxleF9jdXJyX3BvcyA8LSBsZXhidWYubGV4X2N1cnJfcG9zIC0gcztcbiAgICBsZXhidWYubGV4X3N0YXJ0X3BvcyA8LSAwO1xuICAgIGxleGJ1Zi5sZXhfbGFzdF9wb3MgPC0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIHMgO1xuICAgIGxldCB0ID0gbGV4YnVmLmxleF9tZW0gaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIHQtMSBkb1xuICAgICAgbGV0IHYgPSB0LihpKSBpblxuICAgICAgaWYgdiA+PSAwIHRoZW5cbiAgICAgICAgdC4oaSkgPC0gdi1zXG4gICAgZG9uZVxuICBlbmQ7XG4gICgqIFRoZXJlIGlzIG5vdyBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gIEJ5dGVzLmJsaXQgYXV4X2J1ZmZlciAwIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiBuO1xuICBsZXhidWYubGV4X2J1ZmZlcl9sZW4gPC0gbGV4YnVmLmxleF9idWZmZXJfbGVuICsgblxuXG5sZXQgemVyb19wb3MgPSB7XG4gIHBvc19mbmFtZSA9IFwiXCI7XG4gIHBvc19sbnVtID0gMTtcbiAgcG9zX2JvbCA9IDA7XG4gIHBvc19jbnVtID0gMDtcbn1cblxubGV0IGZyb21fZnVuY3Rpb24gPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIGYgPVxuICB7IHJlZmlsbF9idWZmID0gbGV4X3JlZmlsbCBmIChCeXRlcy5jcmVhdGUgNTEyKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMuY3JlYXRlIDEwMjQ7XG4gICAgbGV4X2J1ZmZlcl9sZW4gPSAwO1xuICAgIGxleF9hYnNfcG9zID0gMDtcbiAgICBsZXhfc3RhcnRfcG9zID0gMDtcbiAgICBsZXhfY3Vycl9wb3MgPSAwO1xuICAgIGxleF9sYXN0X3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfYWN0aW9uID0gMDtcbiAgICBsZXhfbWVtID0gW3x8XTtcbiAgICBsZXhfZW9mX3JlYWNoZWQgPSBmYWxzZTtcbiAgICBsZXhfc3RhcnRfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gICAgbGV4X2N1cnJfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gIH1cblxubGV0IGZyb21fY2hhbm5lbCA/d2l0aF9wb3NpdGlvbnMgaWMgPVxuICBmcm9tX2Z1bmN0aW9uID93aXRoX3Bvc2l0aW9ucyAoZnVuIGJ1ZiBuIC0+IGlucHV0IGljIGJ1ZiAwIG4pXG5cbmxldCBmcm9tX3N0cmluZyA/KHdpdGhfcG9zaXRpb25zID0gdHJ1ZSkgcyA9XG4gIHsgcmVmaWxsX2J1ZmYgPSAoZnVuIGxleGJ1ZiAtPiBsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWUpO1xuICAgIGxleF9idWZmZXIgPSBCeXRlcy5vZl9zdHJpbmcgczsgKCogaGF2ZSB0byBtYWtlIGEgY29weSBmb3IgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB1bnNhZmUtc3RyaW5nIG1vZGUgKilcbiAgICBsZXhfYnVmZmVyX2xlbiA9IFN0cmluZy5sZW5ndGggcztcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gdHJ1ZTtcbiAgICBsZXhfc3RhcnRfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gICAgbGV4X2N1cnJfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gIH1cblxubGV0IHNldF9wb3NpdGlvbiBsZXhidWYgcG9zaXRpb24gPVxuICBsZXhidWYubGV4X2N1cnJfcCAgPC0ge3Bvc2l0aW9uIHdpdGggcG9zX2ZuYW1lID0gbGV4YnVmLmxleF9jdXJyX3AucG9zX2ZuYW1lfTtcbiAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIHBvc2l0aW9uLnBvc19jbnVtXG5cbmxldCBzZXRfZmlsZW5hbWUgbGV4YnVmIGZuYW1lID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgPC0ge2xleGJ1Zi5sZXhfY3Vycl9wIHdpdGggcG9zX2ZuYW1lID0gZm5hbWV9XG5cbmxldCB3aXRoX3Bvc2l0aW9ucyBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3NcblxubGV0IGxleGVtZSBsZXhidWYgPVxuICBsZXQgbGVuID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gIEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3MgbGVuXG5cbmxldCBzdWJfbGV4ZW1lIGxleGJ1ZiBpMSBpMiA9XG4gIGxldCBsZW4gPSBpMi1pMSBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGkxIGxlblxuXG5sZXQgc3ViX2xleGVtZV9vcHQgbGV4YnVmIGkxIGkyID1cbiAgaWYgaTEgPj0gMCB0aGVuIGJlZ2luXG4gICAgbGV0IGxlbiA9IGkyLWkxIGluXG4gICAgU29tZSAoQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW4pXG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgTm9uZVxuICBlbmRcblxubGV0IHN1Yl9sZXhlbWVfY2hhciBsZXhidWYgaSA9IEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciBpXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXJfb3B0IGxleGJ1ZiBpID1cbiAgaWYgaSA+PSAwIHRoZW5cbiAgICBTb21lIChCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxuXG5sZXQgbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPVxuICBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgKGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgaSlcblxubGV0IGxleGVtZV9zdGFydCBsZXhidWYgPSBsZXhidWYubGV4X3N0YXJ0X3AucG9zX2NudW1cbmxldCBsZXhlbWVfZW5kIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19jbnVtXG5cbmxldCBsZXhlbWVfc3RhcnRfcCBsZXhidWYgPSBsZXhidWYubGV4X3N0YXJ0X3BcbmxldCBsZXhlbWVfZW5kX3AgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3BcblxubGV0IG5ld19saW5lIGxleGJ1ZiA9XG4gIGxldCBsY3AgPSBsZXhidWYubGV4X2N1cnJfcCBpblxuICBpZiBsY3AgIT0gZHVtbXlfcG9zIHRoZW5cbiAgICBsZXhidWYubGV4X2N1cnJfcCA8LVxuICAgICAgeyBsY3Agd2l0aFxuICAgICAgICBwb3NfbG51bSA9IGxjcC5wb3NfbG51bSArIDE7XG4gICAgICAgIHBvc19ib2wgPSBsY3AucG9zX2NudW07XG4gICAgICB9XG5cblxuXG4oKiBEaXNjYXJkIGRhdGEgbGVmdCBpbiBsZXhlciBidWZmZXIuICopXG5cbmxldCBmbHVzaF9pbnB1dCBsYiA9XG4gIGxiLmxleF9jdXJyX3BvcyA8LSAwO1xuICBsYi5sZXhfYWJzX3BvcyA8LSAwO1xuICBsZXQgbGNwID0gbGIubGV4X2N1cnJfcCBpblxuICBpZiBsY3AgIT0gZHVtbXlfcG9zIHRoZW5cbiAgICBsYi5sZXhfY3Vycl9wIDwtIHt6ZXJvX3BvcyB3aXRoIHBvc19mbmFtZSA9IGxjcC5wb3NfZm5hbWV9O1xuICBsYi5sZXhfYnVmZmVyX2xlbiA8LSAwO1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIFByaW50ZlxuXG50eXBlIHQgPSBleG4gPSAuLlxuXG5sZXQgcHJpbnRlcnMgPSBBdG9taWMubWFrZSBbXVxuXG5sZXQgbG9jZm10ID0gZm9ybWF0X29mX3N0cmluZyBcIkZpbGUgXFxcIiVzXFxcIiwgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZDogJXNcIlxuXG5sZXQgZmllbGQgeCBpID1cbiAgbGV0IGYgPSBPYmouZmllbGQgeCBpIGluXG4gIGlmIG5vdCAoT2JqLmlzX2Jsb2NrIGYpIHRoZW5cbiAgICBzcHJpbnRmIFwiJWRcIiAoT2JqLm1hZ2ljIGYgOiBpbnQpICAgICAgICAgICAoKiBjYW4gYWxzbyBiZSBhIGNoYXIgKilcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouc3RyaW5nX3RhZyB0aGVuXG4gICAgc3ByaW50ZiBcIiVTXCIgKE9iai5tYWdpYyBmIDogc3RyaW5nKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5kb3VibGVfdGFnIHRoZW5cbiAgICBzdHJpbmdfb2ZfZmxvYXQgKE9iai5tYWdpYyBmIDogZmxvYXQpXG4gIGVsc2VcbiAgICBcIl9cIlxuXG5sZXQgcmVjIG90aGVyX2ZpZWxkcyB4IGkgPVxuICBpZiBpID49IE9iai5zaXplIHggdGhlbiBcIlwiXG4gIGVsc2Ugc3ByaW50ZiBcIiwgJXMlc1wiIChmaWVsZCB4IGkpIChvdGhlcl9maWVsZHMgeCAoaSsxKSlcblxubGV0IGZpZWxkcyB4ID1cbiAgbWF0Y2ggT2JqLnNpemUgeCB3aXRoXG4gIHwgMCAtPiBcIlwiXG4gIHwgMSAtPiBcIlwiXG4gIHwgMiAtPiBzcHJpbnRmIFwiKCVzKVwiIChmaWVsZCB4IDEpXG4gIHwgXyAtPiBzcHJpbnRmIFwiKCVzJXMpXCIgKGZpZWxkIHggMSkgKG90aGVyX2ZpZWxkcyB4IDIpXG5cbmxldCB1c2VfcHJpbnRlcnMgeCA9XG4gIGxldCByZWMgY29udiA9IGZ1bmN0aW9uXG4gICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICAobWF0Y2ggaGQgeCB3aXRoXG4gICAgICAgICB8IE5vbmUgfCBleGNlcHRpb24gXyAtPiBjb252IHRsXG4gICAgICAgICB8IFNvbWUgcyAtPiBTb21lIHMpXG4gICAgfCBbXSAtPiBOb25lIGluXG4gIGNvbnYgKEF0b21pYy5nZXQgcHJpbnRlcnMpXG5cbmxldCB0b19zdHJpbmdfZGVmYXVsdCA9IGZ1bmN0aW9uXG4gIHwgT3V0X29mX21lbW9yeSAtPiBcIk91dCBvZiBtZW1vcnlcIlxuICB8IFN0YWNrX292ZXJmbG93IC0+IFwiU3RhY2sgb3ZlcmZsb3dcIlxuICB8IE1hdGNoX2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzUpIFwiUGF0dGVybiBtYXRjaGluZyBmYWlsZWRcIlxuICB8IEFzc2VydF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIkFzc2VydGlvbiBmYWlsZWRcIlxuICB8IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIlVuZGVmaW5lZCByZWN1cnNpdmUgbW9kdWxlXCJcbiAgfCB4IC0+XG4gICAgICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgICAgIGlmIE9iai50YWcgeCA8PiAwIHRoZW5cbiAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIHggMCkgOiBzdHJpbmcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9XG4gICAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIChPYmouZmllbGQgeCAwKSAwKSA6IHN0cmluZykgaW5cbiAgICAgICAgY29uc3RydWN0b3IgXiAoZmllbGRzIHgpXG5cbmxldCB0b19zdHJpbmcgZSA9XG4gIG1hdGNoIHVzZV9wcmludGVycyBlIHdpdGhcbiAgfCBTb21lIHMgLT4gc1xuICB8IE5vbmUgLT4gdG9fc3RyaW5nX2RlZmF1bHQgZVxuXG5sZXQgcHJpbnQgZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGZsdXNoIHN0ZGVycjtcbiAgICByYWlzZSB4XG5cbmxldCBjYXRjaCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBmbHVzaCBzdGRvdXQ7XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGV4aXQgMlxuXG50eXBlIHJhd19iYWNrdHJhY2Vfc2xvdFxudHlwZSByYXdfYmFja3RyYWNlX2VudHJ5ID0gcHJpdmF0ZSBpbnRcbnR5cGUgcmF3X2JhY2t0cmFjZSA9IHJhd19iYWNrdHJhY2VfZW50cnkgYXJyYXlcblxubGV0IHJhd19iYWNrdHJhY2VfZW50cmllcyBidCA9IGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlOlxuICB1bml0IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlXCJcblxuZXh0ZXJuYWwgcmFpc2Vfd2l0aF9iYWNrdHJhY2U6IGV4biAtPiByYXdfYmFja3RyYWNlIC0+ICdhXG4gID0gXCIlcmFpc2Vfd2l0aF9iYWNrdHJhY2VcIlxuXG50eXBlIGJhY2t0cmFjZV9zbG90ID1cbiAgfCBLbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSAgICA6IGJvb2w7XG4gICAgICBmaWxlbmFtZSAgICA6IHN0cmluZztcbiAgICAgIGxpbmVfbnVtYmVyIDogaW50O1xuICAgICAgc3RhcnRfY2hhciAgOiBpbnQ7XG4gICAgICBlbmRfY2hhciAgICA6IGludDtcbiAgICAgIGlzX2lubGluZSAgIDogYm9vbDtcbiAgICAgIGRlZm5hbWUgICAgIDogc3RyaW5nO1xuICAgIH1cbiAgfCBVbmtub3duX2xvY2F0aW9uIG9mIHtcbiAgICAgIGlzX3JhaXNlIDogYm9vbFxuICAgIH1cblxuKCogdG8gYXZvaWQgd2FybmluZyAqKVxubGV0IF8gPSBbS25vd25fbG9jYXRpb24geyBpc19yYWlzZSA9IGZhbHNlOyBmaWxlbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW5saW5lID0gZmFsc2U7IGRlZm5hbWUgPSBcIlwiIH07XG4gICAgICAgICBVbmtub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZSB9XVxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IGJhY2t0cmFjZV9zbG90ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlOlxuICByYXdfYmFja3RyYWNlIC0+IGJhY2t0cmFjZV9zbG90IGFycmF5ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZVwiXG5cbmxldCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQgPVxuICB0cnkgU29tZSAoY29udmVydF9yYXdfYmFja3RyYWNlIGJ0KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgcG9zIHNsb3QgPVxuICBsZXQgaW5mbyBpc19yYWlzZSA9XG4gICAgaWYgaXNfcmFpc2UgdGhlblxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGF0XCIgZWxzZSBcIlJlLXJhaXNlZCBhdFwiXG4gICAgZWxzZVxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb24gYXRcIiBlbHNlIFwiQ2FsbGVkIGZyb21cIlxuICBpblxuICBtYXRjaCBzbG90IHdpdGhcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGlmIGwuaXNfcmFpc2UgdGhlblxuICAgICAgICAoKiBjb21waWxlci1pbnNlcnRlZCByZS1yYWlzZSwgc2tpcHBlZCAqKSBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIFNvbWUgKHNwcmludGYgXCIlcyB1bmtub3duIGxvY2F0aW9uXCIgKGluZm8gZmFsc2UpKVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIFNvbWUgKHNwcmludGYgXCIlcyAlcyBpbiBmaWxlIFxcXCIlc1xcXCIlcywgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZFwiXG4gICAgICAgICAgICAgIChpbmZvIGwuaXNfcmFpc2UpIGwuZGVmbmFtZSBsLmZpbGVuYW1lXG4gICAgICAgICAgICAgIChpZiBsLmlzX2lubGluZSB0aGVuIFwiIChpbmxpbmVkKVwiIGVsc2UgXCJcIilcbiAgICAgICAgICAgICAgbC5saW5lX251bWJlciBsLnN0YXJ0X2NoYXIgbC5lbmRfY2hhcilcblxubGV0IHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgIGZwcmludGYgb3V0Y2hhblxuICAgICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBmcHJpbnRmIG91dGNoYW4gXCIlc1xcblwiIHN0clxuICAgICAgZG9uZVxuXG5sZXQgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIHJhd19iYWNrdHJhY2UgPVxuICBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDogcHJpbnRzIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBwcmludF9iYWNrdHJhY2Ugb3V0Y2hhbiA9XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmxldCBiYWNrdHJhY2VfdG9fc3RyaW5nIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gYnByaW50ZiBiIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmU7XG4gICAgICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgcmF3X2JhY2t0cmFjZSA9XG4gIGJhY2t0cmFjZV90b19zdHJpbmcgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19pbmxpbmVcbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcblxudHlwZSBsb2NhdGlvbiA9IHtcbiAgZmlsZW5hbWUgOiBzdHJpbmc7XG4gIGxpbmVfbnVtYmVyIDogaW50O1xuICBzdGFydF9jaGFyIDogaW50O1xuICBlbmRfY2hhciA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5saW5lX251bWJlcjtcbiAgICAgIHN0YXJ0X2NoYXIgID0gbC5zdGFydF9jaGFyO1xuICAgICAgZW5kX2NoYXIgICAgPSBsLmVuZF9jaGFyO1xuICAgIH1cblxubGV0IGJhY2t0cmFjZV9zbG90X2RlZm5hbWUgPSBmdW5jdGlvblxuICB8IFVua25vd25fbG9jYXRpb24gX1xuICB8IEtub3duX2xvY2F0aW9uIHsgZGVmbmFtZSA9IFwiXCIgfSAtPiBOb25lXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBTb21lIGwuZGVmbmFtZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzIHJhd19iYWNrdHJhY2UgPVxuICAoKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBTb21lIGlzXG4gICAgIHJldHVybmVkIG9ubHkgaWYgYSBwYXJ0IG9mIHRoZSB0cmFjZSBpcyB1c2FibGUuIFRoaXMgZ2l2ZXMgdXNcbiAgICAgYSBiaXQgbW9yZSB3b3JrIHRoYW4ganVzdCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UsIGJ1dCBpdCBtYWtlcyB0aGVcbiAgICAgQVBJIG1vcmUgdXNlci1mcmllbmRseSAtLSBvdGhlcndpc2UgbW9zdCB1c2VycyB3b3VsZCBoYXZlIHRvXG4gICAgIHJlaW1wbGVtZW50IHRoZSBcIlByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBzb3JyeVwiIGxvZ2ljXG4gICAgIHRoZW1zZWx2ZXMuICopXG4gIG1hdGNoIGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlIHdpdGhcbiAgICB8IE5vbmUgLT4gTm9uZVxuICAgIHwgU29tZSBiYWNrdHJhY2UgLT5cbiAgICAgIGxldCB1c2FibGVfc2xvdCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG4gICAgICAgIHwgS25vd25fbG9jYXRpb24gXyAtPiB0cnVlIGluXG4gICAgICBsZXQgcmVjIGV4aXN0c191c2FibGUgPSBmdW5jdGlvblxuICAgICAgICB8ICgtMSkgLT4gZmFsc2VcbiAgICAgICAgfCBpIC0+IHVzYWJsZV9zbG90IGJhY2t0cmFjZS4oaSkgfHwgZXhpc3RzX3VzYWJsZSAoaSAtIDEpIGluXG4gICAgICBpZiBleGlzdHNfdXNhYmxlIChBcnJheS5sZW5ndGggYmFja3RyYWNlIC0gMSlcbiAgICAgIHRoZW4gU29tZSBiYWNrdHJhY2VcbiAgICAgIGVsc2UgTm9uZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSBlbnRyeSA9XG4gIGJhY2t0cmFjZV9zbG90cyBbfCBlbnRyeSB8XVxuXG5tb2R1bGUgU2xvdCA9IHN0cnVjdFxuICB0eXBlIHQgPSBiYWNrdHJhY2Vfc2xvdFxuICBsZXQgZm9ybWF0ID0gZm9ybWF0X2JhY2t0cmFjZV9zbG90XG4gIGxldCBpc19yYWlzZSA9IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlXG4gIGxldCBpc19pbmxpbmUgPSBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmVcbiAgbGV0IGxvY2F0aW9uID0gYmFja3RyYWNlX3Nsb3RfbG9jYXRpb25cbiAgbGV0IG5hbWUgPSBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lXG5lbmRcblxubGV0IHJhd19iYWNrdHJhY2VfbGVuZ3RoIGJ0ID0gQXJyYXkubGVuZ3RoIGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX3Nsb3QgOlxuICByYXdfYmFja3RyYWNlIC0+IGludCAtPiByYXdfYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCBvcHRpb25cbiAgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcIlxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDpcbiAgIHJldHVybnMgdGhlICpzdHJpbmcqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IGdldF9iYWNrdHJhY2UgKCkgPSByYXdfYmFja3RyYWNlX3RvX3N0cmluZyAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmV4dGVybmFsIHJlY29yZF9iYWNrdHJhY2U6IGJvb2wgLT4gdW5pdCA9IFwiY2FtbF9yZWNvcmRfYmFja3RyYWNlXCJcbmV4dGVybmFsIGJhY2t0cmFjZV9zdGF0dXM6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXCJcblxubGV0IHJlYyByZWdpc3Rlcl9wcmludGVyIGZuID1cbiAgbGV0IG9sZF9wcmludGVycyA9IEF0b21pYy5nZXQgcHJpbnRlcnMgaW5cbiAgbGV0IG5ld19wcmludGVycyA9IGZuIDo6IG9sZF9wcmludGVycyBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgcHJpbnRlcnMgb2xkX3ByaW50ZXJzIG5ld19wcmludGVycyBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIHJlZ2lzdGVyX3ByaW50ZXIgZm5cblxuZXh0ZXJuYWwgZ2V0X2NhbGxzdGFjazogaW50IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrXCJcblxubGV0IGV4bl9zbG90IHggPVxuICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgaWYgT2JqLnRhZyB4ID0gMCB0aGVuIE9iai5maWVsZCB4IDAgZWxzZSB4XG5cbmxldCBleG5fc2xvdF9pZCB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAxKSA6IGludClcblxubGV0IGV4bl9zbG90X25hbWUgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMCkgOiBzdHJpbmcpXG5cbmV4dGVybmFsIGdldF9kZWJ1Z19pbmZvX3N0YXR1cyA6IHVuaXQgLT4gaW50ID0gXCJjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzXCJcblxuKCogRGVzY3JpcHRpb25zIGZvciBlcnJvcnMgaW4gc3RhcnR1cC5oLiBTZWUgYWxzbyBiYWNrdHJhY2UuYyAqKVxubGV0IGVycm9ycyA9IFt8IFwiXCI7XG4gICgqIEZJTEVfTk9UX0ZPVU5EICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBub3QgZm91bmQpXCI7XG4gICgqIEJBRF9CWVRFQ09ERSAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0KVwiO1xuICAoKiBXUk9OR19NQUdJQyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgaGFzIHdyb25nIG1hZ2ljIG51bWJlcilcIjtcbiAgKCogTk9fRkRTICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBjYW5ub3QgYmUgb3BlbmVkO1xcbiBcXFxuICAgICAgLS0gdG9vIG1hbnkgb3BlbiBmaWxlcy4gVHJ5IHJ1bm5pbmcgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MilcIlxufF1cblxubGV0IGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2UgPVxuICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgbGV0IHN0YXR1cyA9IGdldF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSBpblxuICBpZiBzdGF0dXMgPCAwIHRoZW5cbiAgICBwcmVycl9lbmRsaW5lIGVycm9ycy4oYWJzIHN0YXR1cyk7XG4gIGZsdXNoIHN0ZGVyclxuXG5sZXQgdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgPSByZWYgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlclxuXG5sZXQgc2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGZuID0gdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgOj0gZm5cblxubGV0IGVtcHR5X2JhY2t0cmFjZSA6IHJhd19iYWNrdHJhY2UgPSBbfCB8XVxuXG5sZXQgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpID1cbiAgdHJ5XG4gICAgZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgd2l0aCBfICgqIE91dF9vZl9tZW1vcnk/ICopIC0+XG4gICAgZW1wdHlfYmFja3RyYWNlXG5cbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgKCogR2V0IHRoZSBiYWNrdHJhY2Ugbm93LCBpbiBjYXNlIG9uZSBvZiB0aGUgW2F0X2V4aXRdIGZ1bmN0aW9uXG4gICAgICAgZGVzdHJveXMgaXQuICopXG4gICAgbGV0IHJhd19iYWNrdHJhY2UgPVxuICAgICAgaWYgZGVidWdnZXJfaW5fdXNlICgqIFNhbWUgdGVzdCBhcyBpbiBbcnVudGltZS9wcmludGV4Yy5jXSAqKSB0aGVuXG4gICAgICAgIGVtcHR5X2JhY2t0cmFjZVxuICAgICAgZWxzZVxuICAgICAgICB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgICBpblxuICAgICh0cnkgU3RkbGliLmRvX2F0X2V4aXQgKCkgd2l0aCBfIC0+ICgpKTtcbiAgICB0cnlcbiAgICAgICF1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZVxuICAgIHdpdGggZXhuJyAtPlxuICAgICAgbGV0IHJhd19iYWNrdHJhY2UnID0gdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3IgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXI6IGV4Y2VwdGlvbiAlc1xcblwiXG4gICAgICAgICh0b19zdHJpbmcgZXhuJyk7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlJztcbiAgICAgIGZsdXNoIHN0ZGVyclxuICB3aXRoXG4gICAgfCBPdXRfb2ZfbWVtb3J5IC0+XG4gICAgICAgIHByZXJyX2VuZGxpbmVcbiAgICAgICAgICBcIkZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5IGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyXCJcblxuKCogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgW2NhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXSBpblxuICAgW3J1bnRpbWUvcHJpbnRleGMuY10gd2hpY2ggZXhwZWN0cyBubyBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24gZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2VcbiAgd2l0aCBfIC0+XG4gICAgKCogVGhlcmUgaXMgbm90IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgKilcbiAgICAoKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCJcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXG4iLCIjIDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuIFxuICBtb2R1bGUgTGV4aW5nID0gc3RydWN0XG4gICAgKCogT3ZlcnJpZGUgdGhlIExleGluZy5lbmdpbmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgcG9zaXRpb24gcmVjb3JkXG4gICAgICAgZWFjaCB0aW1lIGEgcnVsZSBpcyBtYXRjaGVkLiBSZWR1Y2VzIHRvdGFsIHBhcnNlIHRpbWUgYnkgYXJvdW5kIDMwJS5cbiAgICAgICBJZGVhIHN0b2xlbiBmcm9tIHlvanNvbiAqKVxuXG4gICAgaW5jbHVkZSBMZXhpbmdcblxuICAgIGV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcblxuICAgIGxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gICAgICBsZXQgcmVzdWx0ID0gY19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICAgICAgKCpcbiAgICAgIGlmIHJlc3VsdCA+PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgICAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgICAgIGVuZDtcbiAgICAgICopXG4gICAgICByZXN1bHRcbiAgZW5kXG4gIG9wZW4gVG9rZW5zXG5cblxuICBtb2R1bGUgdHlwZSBMZXggPSBzaWdcbiAgICB2YWwgcmVhZCA6IExleGluZy5sZXhidWYgLT4gVG9rZW5zLnRva2VuXG4gIGVuZFxuXG4gIG1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IExleCA9IHN0cnVjdFxuXG4jIDMzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxubGV0IF9fb2NhbWxfbGV4X3RhYmxlcyA9IHtcbiAgTGV4aW5nLmxleF9iYXNlID1cbiAgIFwiXFwwMDBcXDAwMFxcMjI5XFwyNTVcXDAxN1xcMDAwXFwyMzJcXDI1NVxcMDAzXFwwMDBcXDIzNFxcMjU1XFwxMjZcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMTEzXFwwMDBcXDAwMFxcMDAwXFwwMDFcXDAwMFxcMDAxXFwwMDBcXDAwMlxcMDAwXFwxMjNcXDAwMFxcMjQzXFwyNTVcXDI0NFxcMjU1XFxcbiAgICBcXDI0NVxcMjU1XFwyNDZcXDI1NVxcMjQ3XFwyNTVcXDI0OFxcMjU1XFwyNDlcXDI1NVxcMjUwXFwyNTVcXDI1MVxcMjU1XFwyNTJcXDI1NVxcXG4gICAgXFwwMDFcXDAwMFxcMDAyXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAyXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAzXFwwMDBcXDI1NFxcMjU1XFwwMDNcXDAwMFxcMDAxXFwwMDBcXDAxMVxcMDAwXFwyNTNcXDI1NVxcMjM5XFwyNTVcXDAwM1xcMDAwXFxcbiAgICBcXDAxMFxcMDAwXFwwMTFcXDAwMFxcMDA1XFwwMDBcXDI0MlxcMjU1XFwwMjBcXDAwMFxcMDE5XFwwMDBcXDA0OFxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNjdcXDAwMFxcMDYzXFwwMDBcXDA3NVxcMDAwXFwwODRcXDAwMFxcMjQxXFwyNTVcXDA4NVxcMDAwXFwwODNcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA3NVxcMDAwXFwwNzFcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwOTNcXDAwMFxcMjQwXFwyNTVcXDA5NVxcMDAwXFxcbiAgICBcXDA5M1xcMDAwXFwwODlcXDAwMFxcMDk1XFwwMDBcXDA4NVxcMDAwXFwwODFcXDAwMFxcMDAxXFwwMDBcXDAzMlxcMDAwXFwxNTVcXDAwMFxcXG4gICAgXFwxODZcXDAwMFxcMjA5XFwwMDBcXDIxOVxcMDAwXFwyMjlcXDAwMFxcMjQwXFwwMDBcXDI1MFxcMDAwXFwwMThcXDAwMVxcMDY2XFwwMDFcXFxuICAgIFxcMjM2XFwyNTVcXDIzNVxcMjU1XFwwOTRcXDAwMVxcMTE3XFwwMDFcXDE1NVxcMDAxXFwxNzhcXDAwMVxcMDUzXFwwMDBcXDIzMVxcMjU1XFxcbiAgICBcXDA4OFxcMDAxXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwwMTRcXDAwMFxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrID1cbiAgIFwiXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMDIyXFwwMDBcXDI1NVxcMjU1XFwwMjZcXDAwMFxcMDE3XFwwMDBcXFxuICAgIFxcMDE3XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMThcXDAwMFxcMjU1XFwyNTVcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMDE4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDI1XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDNcXDAwMFxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0ID1cbiAgIFwiXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg2XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA4OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcIjtcbiAgTGV4aW5nLmxleF90cmFucyA9XG4gICBcIlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMDAzXFwwMDBcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDA2XFwwMDBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMTlcXDAwMFxcMDE4XFwwMDBcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDE1XFwwMDBcXDAxM1xcMDAwXFwwNzFcXDAwMFxcMDAyXFwwMDBcXFxuICAgIFxcMDA3XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDE0XFwwMDBcXDA4N1xcMDAwXFwwMTdcXDAwMFxcMDkzXFwwMDBcXDAxNlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwODZcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAxMVxcMDAwXFwwNTlcXDAwMFxcMDc3XFwwMDBcXDAwMFxcMDAwXFwwNzdcXDAwMFxcMDA5XFwwMDBcXDAzOFxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDAwMFxcMDAwXFwwMjFcXDAwMFxcMDAwXFwwMDBcXDAyMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA2OVxcMDAwXFwwMzRcXDAwMFxcMDMwXFwwMDBcXDA1MFxcMDAwXFwwNzBcXDAwMFxcMDI1XFwwMDBcXDAyOVxcMDAwXFxcbiAgICBcXDAzM1xcMDAwXFwwMTJcXDAwMFxcMDYwXFwwMDBcXDA0M1xcMDAwXFwwMzFcXDAwMFxcMDM2XFwwMDBcXDAyNFxcMDAwXFwwNTNcXDAwMFxcXG4gICAgXFwwNTFcXDAwMFxcMDM4XFwwMDBcXDAyN1xcMDAwXFwwMzJcXDAwMFxcMDI2XFwwMDBcXDAyOFxcMDAwXFwwMzVcXDAwMFxcMDM3XFwwMDBcXFxuICAgIFxcMDQ0XFwwMDBcXDA0MlxcMDAwXFwwNDVcXDAwMFxcMDIzXFwwMDBcXDA0NlxcMDAwXFwwMjJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA0N1xcMDAwXFwwNzFcXDAwMFxcXG4gICAgXFwwODBcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA3XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDQ4XFwwMDBcXDA3MFxcMDAwXFwwNDlcXDAwMFxcXG4gICAgXFwwNDNcXDAwMFxcMDM4XFwwMDBcXDA1MlxcMDAwXFwwNTRcXDAwMFxcMDU1XFwwMDBcXDA1NlxcMDAwXFwwNTdcXDAwMFxcMDU4XFwwMDBcXFxuICAgIFxcMDUyXFwwMDBcXDA2M1xcMDAwXFwwNjFcXDAwMFxcMDYyXFwwMDBcXDA0MFxcMDAwXFwwNjRcXDAwMFxcMDY1XFwwMDBcXDA2NlxcMDAwXFxcbiAgICBcXDA2N1xcMDAwXFwwNjhcXDAwMFxcMDYyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDAwMFxcMDAwXFwwNzBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzhcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDM5XFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzVcXDAwMFxcMDAwXFwwMDBcXDA3NVxcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwMDVcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA5MVxcMDAwXFwwMDBcXDAwMFxcMDgxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwOTJcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc4XFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDAwXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDkwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfY2hlY2sgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDA0XFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDA0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDA3XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDJcXDAwMFxcMDAwXFwwMDBcXDA5MlxcMDAwXFwwMDBcXDAwMFxcMDg2XFwwMDBcXFxuICAgIFxcMDAyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDdcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDEwXFwwMDBcXDA3MFxcMDAwXFwyNTVcXDI1NVxcMDcwXFwwMDBcXDAwMFxcMDAwXFwwNjlcXDAwMFxcXG4gICAgXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXFxuICAgIFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDlcXDAwMFxcMDI0XFwwMDBcXDAyNVxcMDAwXFwwMzlcXDAwMFxcMDA3XFwwMDBcXDAwMFxcMDAwXFwwMjhcXDAwMFxcXG4gICAgXFwwMzJcXDAwMFxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwNDJcXDAwMFxcMDMwXFwwMDBcXDAzNVxcMDAwXFwwMDBcXDAwMFxcMDExXFwwMDBcXFxuICAgIFxcMDEyXFwwMDBcXDAzNFxcMDAwXFwwMjZcXDAwMFxcMDMxXFwwMDBcXDAwMFxcMDAwXFwwMjdcXDAwMFxcMDI0XFwwMDBcXDAzNlxcMDAwXFxcbiAgICBcXDA0MFxcMDAwXFwwNDFcXDAwMFxcMDQ0XFwwMDBcXDAwMFxcMDAwXFwwNDVcXDAwMFxcMDAwXFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwNDZcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcXG4gICAgXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDA0N1xcMDAwXFwwMDhcXDAwMFxcMDQ4XFwwMDBcXFxuICAgIFxcMDQ5XFwwMDBcXDA1MFxcMDAwXFwwNTFcXDAwMFxcMDUzXFwwMDBcXDA1NFxcMDAwXFwwNTVcXDAwMFxcMDU2XFwwMDBcXDA1N1xcMDAwXFxcbiAgICBcXDA1OFxcMDAwXFwwNTlcXDAwMFxcMDYwXFwwMDBcXDA2MVxcMDAwXFwwMTNcXDAwMFxcMDYzXFwwMDBcXDA2NFxcMDAwXFwwNjVcXDAwMFxcXG4gICAgXFwwNjZcXDAwMFxcMDY3XFwwMDBcXDA2OFxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXFxuICAgIFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwyNTVcXDI1NVxcMDA4XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDEzXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAxM1xcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDczXFwwMDBcXDI1NVxcMjU1XFwwNzNcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXFxuICAgIFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXFxuICAgIFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3OFxcMDAwXFwwODZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwODhcXDAwMFxcMjU1XFwyNTVcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDc4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA2XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMDg4XFwwMDBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwwNzhcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODJcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDI1NVxcMjU1XFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2Jhc2VfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2JhY2t0cmtfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHRfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X3RyYW5zX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9jaGVja19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY29kZSA9XG4gICBcIlwiO1xufVxuXG5sZXQgcmVjIHJlYWQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiAwXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA1NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBCT09MIHRydWUgKVxuIyAyNzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxIC0+XG4jIDU5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEJPT0wgZmFsc2UgKVxuIyAyNzYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyIC0+XG4jIDYxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE5VTEwgKVxuIyAyODEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAzIC0+XG4jIDYzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE9TIClcbiMgMjg2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNCAtPlxuIyA2NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBPRSApXG4jIDI5MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDUgLT5cbiMgNjcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQVMgKVxuIyAyOTYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA2IC0+XG4jIDY5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEFFIClcbiMgMzAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNyAtPlxuIyA3MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdHVwbGUgVFMgdGhlbiBUU1xuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMwOSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDggLT5cbiMgNzYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3R1cGxlIFRFIHRoZW4gVEVcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA5IC0+XG4jIDgxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF92YXJpYW50IFZTIHRoZW4gVlNcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMjUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMCAtPlxuIyA4NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdmFyaWFudCBWRSB0aGVuIFZFXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzMzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTEgLT5cbiMgOTEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ09NTUEgKVxuIyAzMzggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMiAtPlxuIyA5MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDT0xPTiApXG4jIDM0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEzIC0+XG4jIDk1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBORUdJTkZJTklUWSApXG4jIDM0OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE0IC0+XG4jIDk3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBJTkZJTklUWSApXG4jIDM1MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE1IC0+XG4jIDk5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBJTkZJTklUWSApXG4jIDM1OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE2IC0+XG4jIDEwMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgTkFOIClcbiMgMzYzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTcgLT5cbiMgMTAzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBMZXh4ZXJfdXRpbHMuc3RyaW5nMm51bSAoTGV4aW5nLmxleGVtZSBsZXhidWYpIHdpdGhcbiAgICAgIHwgSU5UIF8gYXMgdG9rIC0+IENvbXBsaWFuY2UubGV4X2ludGVnZXIgdG9rXG4gICAgICB8IExBUkdFSU5UIF8gYXMgdG9rIC0+IENvbXBsaWFuY2UubGV4X2xhcmdlaW50IHRva1xuICAgICAgfCB0b2sgLT4gdG9rXG4gICAgKVxuIyAzNzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxOCAtPlxuIyAxMTAgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIChGTE9BVCAoZmxvYXRfb2Zfc3RyaW5nIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikpKSApXG4jIDM3OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE5IC0+XG4jIDExMiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBTVFJJTkcgXCJcIiApXG4jIDM4MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIwIC0+XG5sZXRcbiMgMTEzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1xuIyAzODkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG49IExleGluZy5zdWJfbGV4ZW1lIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgMSkgKGxleGJ1Zi5MZXhpbmcubGV4X2N1cnJfcG9zICsgLTEpIGluXG4jIDExNCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBTVFJJTkcgKExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgcykgKVxuIyAzOTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMSAtPlxuIyAxMTYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggRU9GIClcbiMgMzk4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjIgLT5cbiMgMTE4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIHJlYWQgbGV4YnVmIClcbiMgNDAzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjMgLT5cbiMgMTIwIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy51cGRhdGVfcG9zIGxleGJ1ZjsgcmVhZCBsZXhidWY7IClcbiMgNDA4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjQgLT5cbiMgMTIyIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBDb21wbGlhbmNlLmNvbW1lbnRfY2hlY2sgKCkgd2l0aFxuICAgICAgfCBPayAoKSAtPiByZWFkX2NvbW1lbnQgbGV4YnVmOyByZWFkIGxleGJ1ZlxuICAgICAgfCBFcnJvciBlcnIgLT4gIENPTVBMSUFOQ0VfRVJST1IgZXJyXG4gICAgKVxuIyA0MTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNSAtPlxuIyAxMjggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIENvbXBsaWFuY2UuY29tbWVudF9jaGVjayAoKSB3aXRoXG4gICAgICB8IE9rICgpIC0+IHJlYWQgbGV4YnVmXG4gICAgICB8IEVycm9yIGVyciAtPiAgQ09NUExJQU5DRV9FUlJPUiBlcnJcbiAgICApXG4jIDQyNiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI2IC0+XG4jIDEzNCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIikgKVxuIyA0MzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9jb21tZW50IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiA4OFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyAxMzkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggKCkgKVxuIyA0NDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxIC0+XG4jIDE0MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMudXBkYXRlX3BvcyBsZXhidWY7IHJlYWRfY29tbWVudCBsZXhidWYgKVxuIyA0NDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyIC0+XG4jIDE0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIFwidW5leHBlY3RlZCBFT0YgaW4gY29tbWVudFwiIClcbiMgNDUzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMyAtPlxuIyAxNDUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggcmVhZF9jb21tZW50IGxleGJ1ZiApXG4jIDQ1OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuOztcblxuIyAxNDcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuIFxuICBlbmRcblxuIyA0NjkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG4iLCJtb2R1bGUgWW9qc29uID0gU3RkLllvanNvblxub3BlbiBCcnJcblxudHlwZSBtZXRob2QnID0gR2V0IHwgUG9zdFxuXG5sZXQganN0cl9vZl9tZXRob2QgPSBmdW5jdGlvbiBHZXQgLT4gSnN0ci52IFwiR0VUXCIgfCBQb3N0IC0+IEpzdHIudiBcIlBPU1RcIlxuXG5tb2R1bGUgVHlwZXMgPSBzdHJ1Y3RcbiAgdHlwZSBvcmRlciA9IEFzY2VuZGluZyB8IERlc2NlbmRpbmcgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgc29ydCA9XG4gICAgfCBBbGJ1bVxuICAgIHwgQWxidW1BcnRpc3RcbiAgICB8IEFydGlzdFxuICAgIHwgQnVkZ2V0XG4gICAgfCBDb21tdW5pdHlSYXRpbmdcbiAgICB8IENyaXRpY1JhdGluZ1xuICAgIHwgRGF0ZUNyZWF0ZWRcbiAgICB8IERhdGVQbGF5ZWRcbiAgICB8IFBsYXlDb3VudFxuICAgIHwgUHJlbWllcmVEYXRlXG4gICAgfCBQcm9kdWN0aW9uWWVhclxuICAgIHwgU29ydE5hbWVcbiAgICB8IFJhbmRvbVxuICAgIHwgUmV2ZW51ZVxuICAgIHwgUnVudGltZVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5lbmRcblxudHlwZSB1c2VyID0ge1xuICBuYW1lIDogc3RyaW5nOyBbQGtleSBcIk5hbWVcIl1cbiAgc2VydmVyX2lkIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlcklkXCJdXG4gIHNlcnZlcl9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiU2VydmVyTmFtZVwiXVxuICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxufVxuW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG5tb2R1bGUgdHlwZSBRdWVyeSA9IHNpZ1xuICB0eXBlIHBhdGhfcGFyYW1zXG4gIHR5cGUgcGFyYW1zIFtAQGRlcml2aW5nIHlvanNvbl1cbiAgdHlwZSByZXNwb25zZSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdmFsIG1ldGhvZCcgOiBtZXRob2QnXG4gIHZhbCBlbmRwb2ludCA6IHBhdGhfcGFyYW1zIC0+IHN0cmluZ1xuZW5kXG5cbm1vZHVsZSBBdXRoZW50aWNhdGVfYnlfbmFtZSA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuXG4gIHR5cGUgcGFyYW1zID0geyB1c2VybmFtZSA6IHN0cmluZzsgW0BrZXkgXCJVc2VybmFtZVwiXSBwdyA6IHN0cmluZyBbQGtleSBcIlB3XCJdIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgdXNlciA6IHVzZXI7IFtAa2V5IFwiVXNlclwiXVxuICAgIGFjY2Vzc190b2tlbiA6IHN0cmluZzsgW0BrZXkgXCJBY2Nlc3NUb2tlblwiXVxuICAgIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICBsZXQgbWV0aG9kJyA9IFBvc3RcbiAgbGV0IGVuZHBvaW50IF8gPSBcIi9Vc2Vycy9BdXRoZW50aWNhdGVCeU5hbWVcIlxuZW5kXG5cbm1vZHVsZSBJdGVtID0gc3RydWN0XG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoID0gKHN0cmluZyAqIHN0cmluZykgbGlzdFxuXG4gIGxldCBpbWFnZV9ibHVyX2hhc2hfb2ZfeW9qc29uIHkgPVxuICAgIGxldCBhc3NvYyA9IFlvanNvbi5TYWZlLlV0aWwudG9fYXNzb2MgeSBpblxuICAgIExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgdikpIGFzc29jXG5cbiAgbGV0IHlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2ggaSA6IFlvanNvbi5TYWZlLnQgPVxuICAgIGxldCBhc3NvYyA9IExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgYFN0cmluZyB2KSkgaSBpblxuICAgIGBBc3NvYyBhc3NvY1xuXG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoZXMgPSB7XG4gICAgcHJpbWFyeSA6IGltYWdlX2JsdXJfaGFzaCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQcmltYXJ5XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgdHlwZV8gPVxuICAgIHwgQWdncmVnYXRlRm9sZGVyXG4gICAgfCBBdWRpb1xuICAgIHwgQXVkaW9Cb29rXG4gICAgfCBCYXNlUGx1Z2luRm9sZGVyXG4gICAgfCBCb29rXG4gICAgfCBCb3hTZXRcbiAgICB8IENoYW5uZWxcbiAgICB8IENoYW5uZWxGb2xkZXJJdGVtXG4gICAgfCBDb2xsZWN0aW9uRm9sZGVyXG4gICAgfCBFcGlzb2RlXG4gICAgfCBGb2xkZXJcbiAgICB8IEdlbnJlXG4gICAgfCBMaXZlVHZDaGFubmVsXG4gICAgfCBMaXZlVHZQcm9ncmFtXG4gICAgfCBNYW51YWxQbGF5bGlzdHNGb2xkZXJcbiAgICB8IE1vdmllXG4gICAgfCBNdXNpY0FsYnVtXG4gICAgfCBNdXNpY0FydGlzdFxuICAgIHwgTXVzaWNHZW5yZVxuICAgIHwgTXVzaWNWaWRlb1xuICAgIHwgUGVyc29uXG4gICAgfCBQaG90b1xuICAgIHwgUGhvdG9BbGJ1bVxuICAgIHwgUGxheWxpc3RcbiAgICB8IFBsYXlsaXN0c0ZvbGRlclxuICAgIHwgUHJvZ3JhbVxuICAgIHwgUmVjb3JkaW5nXG4gICAgfCBTZWFzb25cbiAgICB8IFNlcmllc1xuICAgIHwgU3R1ZGlvXG4gICAgfCBUcmFpbGVyXG4gICAgfCBUdkNoYW5uZWxcbiAgICB8IFR2UHJvZ3JhbVxuICAgIHwgVXNlclJvb3RGb2xkZXJcbiAgICB8IFVzZXJWaWV3XG4gICAgfCBWaWRlb1xuICAgIHwgWWVhclxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBmaWVsZCA9XG4gICAgfCBBaXJUaW1lXG4gICAgfCBCYXNpY1N5bmNJbmZvXG4gICAgfCBDYW5EZWxldGVcbiAgICB8IENhbkRvd25sb2FkXG4gICAgfCBDaGFubmVsSW1hZ2VcbiAgICB8IENoYW5uZWxJbmZvXG4gICAgfCBDaGFwdGVyc1xuICAgIHwgQ2hpbGRDb3VudFxuICAgIHwgQ3VtdWxhdGl2ZVJ1blRpbWVUaWNrc1xuICAgIHwgQ3VzdG9tUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZUxhc3RNZWRpYUFkZGVkXG4gICAgfCBEYXRlTGFzdFJlZnJlc2hlZFxuICAgIHwgRGF0ZUxhc3RTYXZlZFxuICAgIHwgRGlzcGxheVByZWZlcmVuY2VzSWRcbiAgICB8IEVuYWJsZU1lZGlhU291cmNlRGlzcGxheVxuICAgIHwgRXRhZ1xuICAgIHwgRXh0ZXJuYWxFdGFnXG4gICAgfCBFeHRlcm5hbFNlcmllc0lkXG4gICAgfCBFeHRlcm5hbFVybHNcbiAgICB8IEV4dHJhSWRzXG4gICAgfCBHZW5yZXNcbiAgICB8IEhlaWdodFxuICAgIHwgSG9tZVBhZ2VVcmxcbiAgICB8IEluaGVyaXRlZFBhcmVudGFsUmF0aW5nVmFsdWVcbiAgICB8IElzSERcbiAgICB8IEl0ZW1Db3VudHNcbiAgICB8IExvY2FsVHJhaWxlckNvdW50XG4gICAgfCBNZWRpYVNvdXJjZUNvdW50XG4gICAgfCBNZWRpYVNvdXJjZXNcbiAgICB8IE1lZGlhU3RyZWFtc1xuICAgIHwgT3JpZ2luYWxUaXRsZVxuICAgIHwgT3ZlcnZpZXdcbiAgICB8IFBhcmVudElkXG4gICAgfCBQYXRoXG4gICAgfCBQZW9wbGVcbiAgICB8IFBsYXlBY2Nlc3NcbiAgICB8IFByZXNlbnRhdGlvblVuaXF1ZUtleVxuICAgIHwgUHJpbWFyeUltYWdlQXNwZWN0UmF0aW9cbiAgICB8IFByb2R1Y3Rpb25Mb2NhdGlvbnNcbiAgICB8IFByb3ZpZGVySWRzXG4gICAgfCBSZWN1cnNpdmVJdGVtQ291bnRcbiAgICB8IFJlZnJlc2hTdGF0ZVxuICAgIHwgUmVtb3RlVHJhaWxlcnNcbiAgICB8IFNjcmVlbnNob3RJbWFnZVRhZ3NcbiAgICB8IFNlYXNvblVzZXJEYXRhXG4gICAgfCBTZXJpZXNQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFNlcmllc1ByaW1hcnlJbWFnZVxuICAgIHwgU2VyaWVzU3R1ZGlvXG4gICAgfCBTZXJ2aWNlTmFtZVxuICAgIHwgU2V0dGluZ3NcbiAgICB8IFNvcnROYW1lXG4gICAgfCBTcGVjaWFsRXBpc29kZU51bWJlcnNcbiAgICB8IFNwZWNpYWxGZWF0dXJlQ291bnRcbiAgICB8IFN0dWRpb3NcbiAgICB8IFN5bmNJbmZvXG4gICAgfCBUYWdsaW5lc1xuICAgIHwgVGFnc1xuICAgIHwgVGhlbWVTb25nSWRzXG4gICAgfCBUaGVtZVZpZGVvSWRzXG4gICAgfCBXaWR0aFxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgKCogVGhlIFtUeXBlXSBmaWVsZCBpcyBhY3R1YWxseSBhIGpzb24gc3RyaW5nIGJ1dCB3ZSB3YW50IHRvIHNlZSBpdCBhcyBhXG4gICAgIHZhcmlhbnQgKHdoaWNoIGlzIGEgbGlzdCBvZiBvbmUgc3RyaW5nKSAqKVxuICB0eXBlIHR5cGVfc3RyID0gdHlwZV9cblxuICBsZXQgdHlwZV9zdHJfb2ZfeW9qc29uIGogPVxuICAgIGxldCBzID0gWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgaiBpblxuICAgIHR5cGVfX29mX3lvanNvbiAoYExpc3QgWyBgU3RyaW5nIHMgXSlcblxuICBsZXQgeW9qc29uX29mX3R5cGVfc3RyIHRzID1cbiAgICBtYXRjaCB5b2pzb25fb2ZfdHlwZV8gdHMgd2l0aCBgTGlzdCBbIGpzb24gXSAtPiBqc29uIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB0eXBlIHQgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgc29ydF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlNvcnROYW1lXCJdXG4gICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICBwYXRoIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlBhdGhcIl1cbiAgICBhbGJ1bV9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJBbGJ1bUlkXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbiBvcHRpb247XG4gICAgICAgICgqIFtQYXJlbnRJZF0gbWlnaHQgYWJzZW50LCBbbnVsbF0sIG9yIGEgc3RyaW5nICopXG4gICAgICAgIFtAeW9qc29uLm9wdGlvbl1cbiAgICAgICAgW0BrZXkgXCJQYXJlbnRJZFwiXVxuICAgIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICAgIGltYWdlX2JsdXJfaGFzaGVzIDogaW1hZ2VfYmx1cl9oYXNoZXM7IFtAa2V5IFwiSW1hZ2VCbHVySGFzaGVzXCJdXG4gICAgdHlwZV8gOiB0eXBlX3N0cjsgW0BrZXkgXCJUeXBlXCJdXG4gICAgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nIG9wdGlvbjtcbiAgICAgICAgW0BkZWZhdWx0IE5vbmVdIFtAeW9qc29uX2Ryb3BfZGVmYXVsdCAoID0gKV0gW0BrZXkgXCJDb2xsZWN0aW9uVHlwZVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpZHMgOiBzdHJpbmcgbGlzdDsgW0BkZWZhdWx0IFtdXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiaWRzXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInBhcmVudElkXCJdXG4gICAgdXNlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJ1c2VySWRcIl1cbiAgICBmaWVsZHMgOiBJdGVtLmZpZWxkIGxpc3Q7XG4gICAgaW5jbHVkZV9pdGVtX3R5cGVzIDogSXRlbS50eXBlXyBsaXN0OyBbQGtleSBcImluY2x1ZGVJdGVtVHlwZXNcIl1cbiAgICBzdGFydF9pbmRleCA6IGludCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzdGFydEluZGV4XCJdXG4gICAgbGltaXQgOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dXG4gICAgc29ydF9vcmRlciA6IFR5cGVzLm9yZGVyIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInNvcnRPcmRlclwiXVxuICAgIHNvcnRfYnkgOiBUeXBlcy5zb3J0IGxpc3Q7IFtAa2V5IFwic29ydEJ5XCJdXG4gICAgcmVjdXJzaXZlIDogYm9vbDtcbiAgICBlbmFibGVfdXNlcl9kYXRhIDogYm9vbDsgW0BrZXkgXCJlbmFibGVVc2VyRGF0YVwiXVxuICAgIGVuYWJsZV9pbWFnZXMgOiBib29sOyBbQGtleSBcImVuYWJsZUltYWdlc1wiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IF8gPSBcIi9JdGVtc1wiXG5lbmRcblxubW9kdWxlIFZpZXdzID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB7IHVzZXJfaWQgOiBzdHJpbmcgfVxuXG4gIHR5cGUgcGFyYW1zID0ge1xuICAgIGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA6IGJvb2w7IFtAa2V5IFwiaW5jbHVkZUV4dGVybmFsQ29udGVudFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IHBwID0gUHJpbnRmLnNwcmludGYgXCIvVXNlcnMvJXMvVmlld3NcIiBwcC51c2VyX2lkXG5lbmRcblxubW9kdWxlIFZpcnR1YWxfZm9sZGVycyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgdmlydHVhbF9mb2xkZXIgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgbG9jYXRpb25zIDogc3RyaW5nIGxpc3Q7IFtAa2V5IFwiTG9jYXRpb25zXCJdXG4gICAgaXRlbV9pZCA6IHN0cmluZzsgW0BrZXkgXCJJdGVtSWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgdHlwZSByZXNwb25zZSA9IHZpcnR1YWxfZm9sZGVyIGxpc3QgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gUHJpbnRmLnNwcmludGYgXCIvTGlicmFyeS9WaXJ0dWFsRm9sZGVyc1wiXG5lbmRcblxubW9kdWxlIFN5c3RlbSA9IHN0cnVjdFxuICBtb2R1bGUgSW5mbyA9IHN0cnVjdFxuICAgIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG4gICAgdHlwZSBwYXJhbXMgPSB1bml0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICAgIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgICBsb2NhbF9hZGRyZXNzIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiTG9jYWxBZHJlc3NcIl1cbiAgICAgIHNlcnZlcl9uYW1lIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlck5hbWVcIl1cbiAgICAgIHByb2R1Y3RfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIlByb2R1Y3ROYW1lXCJdXG4gICAgICBvcGVyYXRpbmdfc3lzdGVtIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiT3BlcmF0aW5nU3lzdGVtXCJdXG4gICAgICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxuICAgIH1cbiAgICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgICBsZXQgbWV0aG9kJyA9IEdldFxuICAgIGxldCBlbmRwb2ludCBfID0gXCIvU3lzdGVtL0luZm9cIlxuICBlbmRcbmVuZFxuXG4oKiBGb3J3YXJkIGRlY2xhcmF0aW9uIHRvIGJlIGZpbGxlZCBieSB0aGUgYXBwICopXG5sZXQgc2Vzc2lvbl91dWlkID0gcmVmIE5vbmVcbmxldCBzZXRfc2Vzc2lvbl91dWlkIHMgPSBzZXNzaW9uX3V1aWQgOj0gU29tZSBzXG5cbmxldCBhdXRob3JpemF0aW9uID90b2tlbiAoKSA9XG4gIGxldCB0b2tlbiA9XG4gICAgbWF0Y2ggdG9rZW4gd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIHQgLT4gUHJpbnRmLnNwcmludGYgXCIsIFRva2VuPSVTXCIgdFxuICBpblxuICBsZXQgc2Vzc2lvbl91dWlkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OlwiXCIgIXNlc3Npb25fdXVpZCBpblxuICBQcmludGYuc3ByaW50ZlxuICAgIFwiTWVkaWFCcm93c2VyIENsaWVudD1cXFwiT2NhbWl4XFxcIiwgRGV2aWNlPVxcXCJGaXJlZm94XFxcIiwgRGV2aWNlSWQ9XFxcIiVzXFxcIiwgXFxcbiAgICAgVmVyc2lvbj1cXFwiMC4xXFxcIiVzXCJcbiAgICBzZXNzaW9uX3V1aWQgdG9rZW5cblxubGV0IHJlcXVlc3QgKHR5cGUgcHAgcCByKSA/YmFzZV91cmwgP3Rva2VuID9oZWFkZXJzXG4gICAgKG1vZHVsZSBRIDogUXVlcnlcbiAgICAgIHdpdGggdHlwZSBwYXRoX3BhcmFtcyA9IHBwXG4gICAgICAgYW5kIHR5cGUgcGFyYW1zID0gcFxuICAgICAgIGFuZCB0eXBlIHJlc3BvbnNlID0gcikgKHBhcmFtcyA6IHApIChwYXRoX3BhcmFtcyA6IHBwKSA6IHIgRnV0Lm9yX2Vycm9yID1cbiAgbGV0IG9wZW4gQnJyX2lvLkZldGNoIGluXG4gIGxldCB1cmkgPVxuICAgIEpzdHIuKFxuICAgICAgVXJpLm9mX2pzdHIgP2Jhc2U6KE9wdGlvbi5tYXAgdiBiYXNlX3VybCkgKHYgKFEuZW5kcG9pbnQgcGF0aF9wYXJhbXMpKSlcbiAgICB8PiBSZXN1bHQuZ2V0X29rXG4gIGluXG4gIGxldCBhdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgaW5cbiAgQ29uc29sZS5sb2cgWyBhdXRob3JpemF0aW9uIF07XG4gIGxldCBoZWFkZXJzID1cbiAgICBIZWFkZXJzLm9mX2Fzc29jID9pbml0OmhlYWRlcnNcbiAgICAgIEpzdHIuXG4gICAgICAgIFtcbiAgICAgICAgICAodiBcImNvbnRlbnQtdHlwZVwiLCB2IFwidGV4dC9qc29uXCIpO1xuICAgICAgICAgICh2IFwiWC1FbWJ5LUF1dGhvcml6YXRpb25cIiwgdiBhdXRob3JpemF0aW9uKTtcbiAgICAgICAgXVxuICBpblxuICBsZXQgbWV0aG9kJyA9IGpzdHJfb2ZfbWV0aG9kIFEubWV0aG9kJyBpblxuICBsZXQgaW5pdCwgdXJsID1cbiAgICBtYXRjaCBRLm1ldGhvZCcgd2l0aFxuICAgIHwgR2V0IC0+XG4gICAgICAgIGxldCBwYXJhbXMgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEpzb24uZGVjb2RlIHw+IFJlc3VsdC5nZXRfb2sgfD4gVXJpLlBhcmFtcy5vZl9vYmpcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVyaV93aXRoX3BhcmFtcyA9IFVyaS53aXRoX3F1ZXJ5X3BhcmFtcyB1cmkgcGFyYW1zIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgKCksIFVyaS50b19qc3RyIHVyaV93aXRoX3BhcmFtcylcbiAgICB8IFBvc3QgLT5cbiAgICAgICAgbGV0IGJvZHkgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEJvZHkub2ZfanN0clxuICAgICAgICBpblxuICAgICAgICAoUmVxdWVzdC5pbml0IH5oZWFkZXJzIH5tZXRob2QnIH5ib2R5ICgpLCBVcmkudG9fanN0ciB1cmkpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCogcmVzID0gcmVxdWVzdCBAQCBSZXF1ZXN0LnYgfmluaXQgdXJsIGluXG4gIGxldCsganNvbiA9IFJlc3BvbnNlLmFzX2JvZHkgcmVzIHw+IEJvZHkudGV4dCBpblxuICBsZXQgeW9qc29uID0gWW9qc29uLlNhZmUuZnJvbV9zdHJpbmcgKEpzdHIudG9fc3RyaW5nIGpzb24pIGluXG4gIHRyeSBRLnJlc3BvbnNlX29mX3lvanNvbiB5b2pzb25cbiAgd2l0aCBlIC0+XG4gICAgQ29uc29sZS5sb2cgWyBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgZGVjb2RpbmcgcmVzcG9uc2U6IFwiOyBqc29uIF07XG4gICAgQ29uc29sZS5sb2cgWyBlIF07XG4gICAgcmFpc2UgZVxuIiwib3BlbiEgU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJycl9pb1xubW9kdWxlIEFwaSA9IERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4oKiBQcm9wb3NpdGlvbjpcbiAgIC0gVXNlIHByaW1hcnkga2V5IHRvIHByb3ZpZGUgZmlsdGVyaW5nXG4gICAtIFVzZSBpbmRleCBrZXlzIHRvIHByb3ZpZGUgc29ydHNcblxuICAgQmlnIHByaW1hcnkga2V5cyBkcml2ZSB0aGUgY29zdCBvZiBbZ2V0X2FsbF9rZXlzXSB1cC5cbiAgIFdlIGNvdWxkIGRlbGVnYXRlIHNvbWUgZmlsdGVyaW5nIHRvIHRoZSBpbmRleCBrZXlzIGlmIG5lY2Vzc2FyeS5cblxuICAgIFdlIGNvdWxkIGFsc28gdHJpZWQgdG8gcHJlLXByb2Nlc3Mgb3IgY29tcHJlc3MgdGhlIGtleXMgKilcblxubGV0IHRfdG9fanYgZW5jb2RlciB0ID1cbiAgZW5jb2RlciB0IHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLm9mX3N0cmluZyB8PiBCcnIuSnNvbi5kZWNvZGVcbiAgfD4gUmVzdWx0LmdldF9leG5cblxubGV0IGp2X3RvX3QgZGVjb2RlciBqID1cbiAgbGV0IGpzb24gPSBCcnIuSnNvbi5lbmNvZGUgaiBpblxuICBPayAoSnN0ci50b19zdHJpbmcganNvbiB8PiBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyB8PiBkZWNvZGVyKVxuXG5tb2R1bGUgT3JkZXJyZWRfaXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0geyBpZCA6IGludDsgaXRlbSA6IHN0cmluZyBvcHRpb24gfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9pbnQga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9faW50IGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJpZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cbiAgbGV0IGdldF9rZXkgdCA9IHQuaWRcbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbi5BcGlcblxuICB0eXBlIHNvcnRzID0geyBkYXRlX2FkZGVkIDogaW50OyB2aWV3cyA6IHN0cmluZyBsaXN0OyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSB0ID0geyBzb3J0cyA6IHNvcnRzOyBpdGVtIDogSXRlbS50IH0gW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBjb21wYXJlIHQgdCcgPSBTdHJpbmcuY29tcGFyZSB0LnNvcnRzLnNvcnRfbmFtZSB0Jy5zb3J0cy5zb3J0X25hbWVcblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0geyBpZCA6IHN0cmluZzsgc29ydF9uYW1lIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiB7IGlkOyBzb3J0X25hbWU7IHZpZXdzIH0gPVxuICAgICAgbGV0IGlkID0gSnYub2Zfc3RyaW5nIGlkIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gSnYub2Zfc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgbGV0IHZpZXdzID0gSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgdmlld3MgaW5cbiAgICAgIEp2Lm9mX2p2X2FycmF5IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi50b19qdl9hcnJheSBqIHdpdGhcbiAgICAgIHwgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF0gLT5cbiAgICAgICAgICBsZXQgaWQgPSBKdi50b19zdHJpbmcgaWQgaW5cbiAgICAgICAgICBsZXQgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgICAgIGxldCB2aWV3cyA9IEp2LnRvX2xpc3QgSnYudG9fc3RyaW5nIHZpZXdzIGluXG4gICAgICAgICAgeyBpZDsgc29ydF9uYW1lOyB2aWV3cyB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9XG4gICAgICBJbmRleGVkX2RiLktleV9wYXRoLihcbiAgICAgICAgUyBbfCBJZCBcIml0ZW0uSWRcIjsgSWQgXCJpdGVtLk5hbWVcIjsgSWQgXCJzb3J0cy52aWV3c1wiIHxdKVxuICBlbmRcblxuICBtb2R1bGUgS2V5X2RhdGVfYWRkZWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwic29ydHMuZGF0ZV9hZGRlZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfaWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaXRlbS5JZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdmlld19raW5kID0gc3RydWN0XG4gICAgKCogdG9kbzogdXNlIGEgZW51bSBmb3Iga2luZHMgKilcbiAgICB0eXBlIHQgPSB7IHR5cGUnIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiBfayA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgdHlwZSc7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgeyB0eXBlJyA9IEp2LnRvX3N0cmluZyB0eXBlJzsgdmlld3MgPSBKdi4odG9fbGlzdCB0b19zdHJpbmcgdmlld3MpIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5UeXBlXCI7IElkIFwic29ydHMudmlld3NcIiB8XVxuICBlbmRcblxuICBtb2R1bGUgS2V5X3R5cGVfbmFtZSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuXG4gICAgbGV0IHRvX2p2IF90ID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCBjb2xsZWN0aW9uX3R5cGU7IHNvcnRfbmFtZSB8XSAtPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25fdHlwZSA9IEp2LnRvX3N0cmluZyBjb2xsZWN0aW9uX3R5cGU7XG4gICAgICAgICAgICBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lO1xuICAgICAgICAgIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uQ29sbGVjdGlvblR5cGVcIjsgSWQgXCJzb3J0cy5zb3J0X25hbWVcIiB8XVxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuXG4gIGxldCBnZXRfa2V5IHQgPVxuICAgIHtcbiAgICAgIEtleS5zb3J0X25hbWUgPSB0LnNvcnRzLnNvcnRfbmFtZTtcbiAgICAgIGlkID0gdC5pdGVtLkl0ZW0uaWQ7XG4gICAgICB2aWV3cyA9IHQuc29ydHMudmlld3M7XG4gICAgfVxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlciA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4gICgqIHRvZG86IG11bHRpc2VydmVyOiB3ZSBzaG91bGQgYWRkIGEgc2VydmVyX2lkIGtleSAqKVxuICB0eXBlIHQgPSBWaXJ0dWFsX2ZvbGRlcnMudmlydHVhbF9mb2xkZXIgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiSXRlbUlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcInZpcnR1YWxfZm9sZGVyc1wiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG4gIGxldCBnZXRfa2V5IHQgPSB0LlZpcnR1YWxfZm9sZGVycy5pdGVtX2lkXG5lbmRcblxubW9kdWxlIE9yZGVycmVkX2l0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoT3JkZXJyZWRfaXRlbXMpXG5tb2R1bGUgSXRlbXNfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChJdGVtcylcbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcl9zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKFZpcnR1YWxfZm9sZGVyKVxuXG5tb2R1bGUgSXRlbXNCeURhdGVBZGRlZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfZGF0ZV9hZGRlZClcblxubW9kdWxlIEl0ZW1zQnlWaWV3QW5kS2luZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV92aWV3X2FuZF9raW5kXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfdmlld19raW5kKVxuXG5tb2R1bGUgSXRlbXNCeUlkID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2lkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfaWQpXG5cbm1vZHVsZSBJdGVtc0J5VHlwZUFuZE5hbWUgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdHlwZV9hbmRfbmFtZVwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3R5cGVfbmFtZSlcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2lvLkluZGV4ZWRfZGJcbm1vZHVsZSBTb3VyY2UgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIE9JID0gU3RvcmVzLk9yZGVycmVkX2l0ZW1zX3N0b3JlXG5tb2R1bGUgSSA9IFN0b3Jlcy5JdGVtc19zdG9yZVxubW9kdWxlIFZGID0gU3RvcmVzLlZpcnR1YWxfZm9sZGVyX3N0b3JlXG5vcGVuIFNvdXJjZS5BcGlcblxuKCogSXRlbXMgSGllcmFyY2h5XG5cbiAgIFVzZXJSb290Rm9sZGVyIChcIk1lZGlhIEZvbGRlcnNcIiBcImU5ZDUwNzVhNTU1YzFjYmMzOTRlZWM0Y2VmMjk1Mjc0XCIpXG4gICAgICAgICAgICAgICAgICAoR2V0cyB0aGUgcm9vdCBmb2xkZXIgZnJvbSBhIHVzZXIncyBsaWJyYXJ5LiApXG4gICBeIENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIEFnZ3JlZ2F0ZUZvbGRlciAoXCJyb290XCIgXCJmMjdjYWEzN2U1MTQyMjI1Y2NlZGVkNDhmNjU1MzUwMlwiKVxuICAgXiBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpXG4gICBeIEZvbGRlcisgPC0gTXVzaWNBcnRpc3QgPC0gTXVzaWNBbGJ1bSA8LSBBdWRpb1xuXG4gICBKZWxseWZpbiBjb25zaWRlcnMgdGhhdCBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpID09IENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIFRoaXMgZXF1YWxpdHkgY2FuIGJlIHJldHJpdmVkIGJ5IHF1ZXJ5aW5nIHRoZSBcIlZpcnR1YWxGb2xkZXJzXCIgYW5kIGxvb2sgYXRcbiAgIHRoZSBsb2NhdGlvbnMnIHBhdGhzLiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgbm90IGFjY2Vzc2libGUgdG8gdW5wcml2aWxlZGdlZCB1c2Vycy4uLlxuXG4gICBUbyBhY3R1YWxseSBrbm93IHdoaWNoIGZvbGRlcnMgYXJlIHBhcnQgb2YgYSB1c2VyIHZpZXcgd2UgbmVlZCB0byBxdWVyeSB0aGVcbiAgIGl0ZW1zIHRoYXQgaGF2ZSB0aGlzIHZpZXcncyBpZCBhcyBhIFtwYXJlbnRJZF0uIFRoZSBhY3R1YWwgW3BhcmVudElkXSBvZlxuICAgdGhlc2UgaXRlbXMgd2lsbCBiZSBkaWZmZXJlbnQgYW5kIGFyZSB0aGUgaWRzIGFjdHVhbCBmb2xkZXJzIHRoYXRcbiAgIGNvbnN0aXR1dGUgdGhpcyB2aWV3LlxuXG4gICBGb3Igc2ltcGxpY2l0eSAoPykgd2UgY29uc2lkZXIgdGhhdCBhbiBpdGVtIGlzIHBhcnQgb2YgYSB2aWV3IGlmIGl0cyBwYXRoIGlzXG4gICBwcmVmaXhlZCBieSBvbmUgb2YgdGhlIHZpZXcncyB2aXJ0dWFsIGZvbGRlciBsb2NhdGlvbnMuXG4qKVxuXG5sZXQgY2h1bmtfc2l6ZSA9IDUwMFxubGV0IGluY2x1ZGVfaXRlbV90eXBlcyA9IFsgU291cmNlLkFwaS5JdGVtLk11c2ljQXJ0aXN0OyBNdXNpY0FsYnVtOyBBdWRpbyBdXG5cbmxldCBmZXRjaF90b3RhbF9pdGVtX2NvdW50IHNvdXJjZSA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgcmVzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICB7XG4gICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkqKVxuICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgZmllbGRzID0gW107XG4gICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzO1xuICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICBsaW1pdCA9IFNvbWUgMDtcbiAgICAgICAgICBzb3J0X29yZGVyID0gU29tZSBBc2NlbmRpbmc7XG4gICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlO1xuICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICgpXG4gIGluXG4gIHJlcy50b3RhbF9yZWNvcmRfY291bnRcblxudHlwZSBkYl9pbmZvcyA9IHtcbiAgbGFzdF9rZXkgOiBpbnQgb3B0aW9uO1xuICBsYXN0X3ZhbHVlIDogU3RvcmVzLk9yZGVycmVkX2l0ZW1zLnQgb3B0aW9uO1xufVxuXG5sZXQgZ2V0X2RiX2luZm9zIGlkYiA9XG4gIGxldCBpbmZvcywgc2V0X2luZm9zID0gRnV0LmNyZWF0ZSAoKSBpblxuICBsZXQgdHJhbnNhY3Rpb24gPSBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpIF0gfm1vZGU6UmVhZG9ubHkgaWRiIGluXG4gIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICBsZXQgcmVxID0gT0kub3Blbl9jdXJzb3IgfmRpcmVjdGlvbjpQcmV2IHN0b3JlIGluXG4gIGxldCBsYXN0X2tleSA9IHJlZiBOb25lIGluXG4gIGxldCBfID1cbiAgICBSZXF1ZXN0Lm9uX3N1Y2Nlc3MgcmVxIH5mOihmdW4gXyBxIC0+XG4gICAgICAgIG1hdGNoIFJlcXVlc3QucmVzdWx0IHEgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBOb25lIH1cbiAgICAgICAgfCBTb21lIGN1cnNvciAtPiAoXG4gICAgICAgICAgICBpZiBPcHRpb24uaXNfbm9uZSAhbGFzdF9rZXkgdGhlblxuICAgICAgICAgICAgICBsYXN0X2tleSA6PSBPSS5DdXJzb3Jfd2l0aF92YWx1ZS5rZXkgY3Vyc29yO1xuICAgICAgICAgICAgbWF0Y2ggT0kuQ3Vyc29yX3dpdGhfdmFsdWUudmFsdWUgY3Vyc29yIHdpdGhcbiAgICAgICAgICAgIHwgU29tZSAoeyBpdGVtID0gU29tZSBfOyBfIH0gYXMgaXRlbSkgLT5cbiAgICAgICAgICAgICAgICBzZXRfaW5mb3MgeyBsYXN0X2tleSA9ICFsYXN0X2tleTsgbGFzdF92YWx1ZSA9IFNvbWUgaXRlbSB9XG4gICAgICAgICAgICB8IF8gLT4gT0kuQ3Vyc29yX3dpdGhfdmFsdWUuY29udGludWUgY3Vyc29yKSlcbiAgaW5cbiAgaW5mb3NcblxubGV0IGlzX2RiX2NvbnNpc3RlbnQgfnNvdXJjZTpfIH5sYXN0X3NvdXJjZV9pdGVtX2tleSBkYl9zeW5jX2luZm9zID1cbiAgbGV0IGxhc3Rfa2V5ID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OigtMSkgZGJfc3luY19pbmZvcy5sYXN0X2tleSBpblxuICBpZiBsYXN0X2tleSA+IGxhc3Rfc291cmNlX2l0ZW1fa2V5IHRoZW5cbiAgICAoKiBUaGVyZSBhcmUgZmV3ZXIgaXRlbXMgaW4gdGhlIHNvdXJjZSB0aGFuIGV4cGVjdGVkICopXG4gICAgZmFsc2VcbiAgZWxzZVxuICAgICgqIFRvZG86IGNoZWNrIHRoYXQgdGhlIGxhc3Qga25vd24gaXRlbSBpcyB0aGUgc2FtZSB0aGFuIGluIHRoZSBzb3VyY2UgKilcbiAgICB0cnVlXG5cbnR5cGUgc3RhdHVzID1cbiAgfCBVbmtub3duXG4gIHwgSW5fc3luY1xuICB8IEluY29uc2lzdGVudFxuICB8IE5ld19pdGVtcyBvZiB7XG4gICAgICBmaXJzdF9taXNzaW5nX2tleSA6IGludDtcbiAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7XG4gICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludDtcbiAgICB9XG4gIHwgUGFydGlhbF9mZXRjaCBvZiB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IDogaW50IH1cblxudHlwZSBwcm9ncmVzcyA9IHsgdG90YWwgOiBpbnQ7IHJlbWFpbmluZyA6IGludCB9XG50eXBlIHJlcG9ydCA9IHsgc3RhdHVzIDogc3RhdHVzOyBzeW5jX3Byb2dyZXNzIDogcHJvZ3Jlc3Mgb3B0aW9uIH1cblxubGV0IGluaXRpYWxfcmVwb3J0ID0geyBzdGF0dXMgPSBVbmtub3duOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9XG5cbmxldCBsb2dfc3RhdHVzID0gZnVuY3Rpb25cbiAgfCBVbmtub3duIC0+IENvbnNvbGUuaW5mbyBbIFwiRGF0YWJhc2Ugc3RhdHVzIGlzIHVua25vd25cIiBdXG4gIHwgSW5fc3luYyAtPiBDb25zb2xlLmluZm8gWyBcIkRhdGFiYXNlIGlzIHN5bmNocm9uaXplZFwiIF1cbiAgfCBJbmNvbnNpc3RlbnQgLT4gQ29uc29sZS53YXJuIFsgXCJEYXRhYmFzZSBpcyBvdXQtb2Ytc3luY1wiIF1cbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBDb25zb2xlLmluZm9cbiAgICAgICAgW1xuICAgICAgICAgIFwiTmV3IGl0ZW1zIHdlcmUgYWRkZWQgdG8gdGhlIHNvdXJjZS5cIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X21pc3Npbmdfa2V5ICsgMTtcbiAgICAgICAgICBcIm5ldyBpdGVtc1wiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfdW5mZXRjaGVkX2tleSArIDE7XG4gICAgICAgICAgXCJ1bmZldGNoZWQgaXRlbXNcIjtcbiAgICAgICAgXVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9IC0+XG4gICAgICBDb25zb2xlLmluZm9cbiAgICAgICAgW1xuICAgICAgICAgIFwiU29tZSBpdGVtcyBoYXZlIG5vdCBiZWVuIGZldGNoZWQgeWV0LlwiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfdW5mZXRjaGVkX2tleSArIDE7XG4gICAgICAgICAgXCJ1bmZldGNoZWQgaXRlbXNcIjtcbiAgICAgICAgXVxuXG5sZXQgY2hlY2tfc3RhdHVzIH5zb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQqIGRiX2luZm9zID0gZ2V0X2RiX2luZm9zIGlkYiBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHRvdGFsX2l0ZW1fY291bnQgPSBmZXRjaF90b3RhbF9pdGVtX2NvdW50IHNvdXJjZSBpblxuICAoKiBLZXlzIHN0YXJ0IGF0IDAsIGl0J3MgbmF0dXJhbCB0byBjb3VudCBpdGVtIGJ5IHN0YXJ0aW5nIHdpdGggMCAqKVxuICBsZXQgbGFzdF9zb3VyY2VfaXRlbV9rZXkgPSB0b3RhbF9pdGVtX2NvdW50IC0gMSBpblxuICBpZiBub3QgKGlzX2RiX2NvbnNpc3RlbnQgfnNvdXJjZSB+bGFzdF9zb3VyY2VfaXRlbV9rZXkgZGJfaW5mb3MpIHRoZW5cbiAgICBJbmNvbnNpc3RlbnRcbiAgZWxzZVxuICAgIG1hdGNoIGRiX2luZm9zIHdpdGhcbiAgICB8IHsgbGFzdF9rZXkgPSBOb25lOyBsYXN0X3ZhbHVlID0gTm9uZSB9IC0+XG4gICAgICAgICgqIFRoZSBkYiBoYXMgbm90IHlldCBiZWVuIHBvcHVsYXRlZCB3aXRoIHBsYWNlaG9sZGVycyAqKVxuICAgICAgICBOZXdfaXRlbXNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaXJzdF9taXNzaW5nX2tleSA9IDA7XG4gICAgICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5ID0gMDtcbiAgICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgICAgIH1cbiAgICB8IHsgbGFzdF9rZXkgPSBTb21lIGtleTsgbGFzdF92YWx1ZSA9IGl0ZW0gfSB3aGVuIGtleSA8IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gICAgICAtPlxuICAgICAgICAoKiBOZXcgaXRlbXMgd2VyZSBhZGRlZCB0byB0aGUgc291cmNlIHNpbmNlIHRoZSBsYXN0IHN5bmMgKilcbiAgICAgICAgbGV0IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPVxuICAgICAgICAgIG1hdGNoIGl0ZW0gd2l0aCBOb25lIC0+IDAgfCBTb21lIHsgaWQ7IF8gfSAtPiBpZCArIDFcbiAgICAgICAgaW5cbiAgICAgICAgTmV3X2l0ZW1zXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlyc3RfbWlzc2luZ19rZXkgPSBrZXkgKyAxO1xuICAgICAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleTtcbiAgICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgICAgIH1cbiAgICB8IHsgbGFzdF9rZXkgPSBTb21lIGtleTsgbGFzdF92YWx1ZSA9IGl0ZW0gfSB3aGVuIGtleSA9IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gICAgICAtPiAoXG4gICAgICAgIG1hdGNoIGl0ZW0gd2l0aFxuICAgICAgICB8IFNvbWUgeyBpZDsgXyB9IHdoZW4gaWQgPSBrZXkgLT4gSW5fc3luY1xuICAgICAgICB8IFNvbWUgeyBpZDsgXyB9IC0+XG4gICAgICAgICAgICBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA9IGlkICsgMTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgIFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5ID0gMDsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSlcbiAgICB8IF8gLT4gSW5jb25zaXN0ZW50XG5cbmxldCB1cGRhdGVfdmlld3Mgc291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgdmlld3MgPVxuICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgIChtb2R1bGUgU291cmNlLkFwaS5WaWV3cylcbiAgICAgIHsgaW5jbHVkZV9leHRlcm5hbF9jb250ZW50ID0gZmFsc2UgfVxuICAgICAgeyB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZCB9XG4gIGluXG4gIExpc3QuaXRlciB2aWV3cy5pdGVtcyB+ZjooZnVuIChpdGVtIDogSXRlbS50KSAtPlxuICAgICAgbGV0IG9wZW4gQnJyX2lvLkluZGV4ZWRfZGIgaW5cbiAgICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSk7IChtb2R1bGUgSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgICBpblxuICAgICAgbGV0IHNfaXRlbXMgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBJKSB0cmFuc2FjdGlvbiBpblxuICAgICAgbGV0IHNvcnRfbmFtZSA9IE9wdGlvbi52YWx1ZSBpdGVtLnNvcnRfbmFtZSB+ZGVmYXVsdDppdGVtLm5hbWUgaW5cbiAgICAgIEkucHV0IHsgc29ydHMgPSB7IGRhdGVfYWRkZWQgPSAtMTsgdmlld3MgPSBbXTsgc29ydF9uYW1lIH07IGl0ZW0gfSBzX2l0ZW1zXG4gICAgICB8PiBpZ25vcmUpO1xuICB2aWV3c1xuXG5sZXQgZGVkdWNlX3ZpcnR1YWxfZm9sZGVyc19mcm9tX3ZpZXdzIHNvdXJjZSAodmlld3MgOiBWaWV3cy5yZXNwb25zZSkgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgcGFyZW50X2lkc19vZl92aWV3X2NoaWxkcmVuIHsgSXRlbS5pZDsgXyB9ID1cbiAgICBsZXQrIHJlcyA9XG4gICAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICAgIHBhcmVudF9pZCA9IFNvbWUgaWQ7XG4gICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgIGZpZWxkcyA9IFsgUGFyZW50SWQgXTtcbiAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcyA9IFtdO1xuICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgICAgbGltaXQgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9vcmRlciA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X2J5ID0gW107XG4gICAgICAgICAgICByZWN1cnNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICgpXG4gICAgaW5cbiAgICBMaXN0LmZvbGRfbGVmdCB+aW5pdDpTdHJpbmcuU2V0LmVtcHR5IHJlcy5pdGVtc1xuICAgICAgfmY6KGZ1biBzZXQgeyBJdGVtLnBhcmVudF9pZDsgXyB9IC0+XG4gICAgICAgIG1hdGNoIHBhcmVudF9pZCB3aXRoXG4gICAgICAgIHwgTm9uZSB8IFNvbWUgTm9uZSAtPiBzZXRcbiAgICAgICAgfCBTb21lIChTb21lIHBpZCkgLT4gU3RyaW5nLlNldC5hZGQgcGlkIHNldClcbiAgaW5cbiAgbGV0IHBhdGhzX29mX3BhcmVudHMgcGFyZW50cyA9XG4gICAgbGV0KyByZXMgPVxuICAgICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRzID0gU3RyaW5nLlNldC50b19saXN0IHBhcmVudHM7XG4gICAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICBmaWVsZHMgPSBbIFBhdGggXTtcbiAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcyA9IFtdO1xuICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgICAgbGltaXQgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9vcmRlciA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X2J5ID0gW107XG4gICAgICAgICAgICByZWN1cnNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICgpXG4gICAgaW5cbiAgICBMaXN0LmZpbHRlcl9tYXAgcmVzLml0ZW1zIH5mOihmdW4geyBJdGVtLmlkOyBwYXRoOyBfIH0gLT5cbiAgICAgICAgT3B0aW9uLm1hcCAoZnVuIHBhdGggLT4gKGlkLCBwYXRoKSkgcGF0aClcbiAgaW5cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQrIHJlc3VsdCA9XG4gICAgTGlzdC5tYXAgdmlld3MuaXRlbXMgfmY6KGZ1biAoeyBJdGVtLmlkOyBfIH0gYXMgdmlldykgLT5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgbGV0KiBwYXJlbnRzID0gcGFyZW50X2lkc19vZl92aWV3X2NoaWxkcmVuIHZpZXcgaW5cbiAgICAgICAgbGV0KyBwYXRocyA9IHBhdGhzX29mX3BhcmVudHMgcGFyZW50cyBpblxuICAgICAgICAoaWQsIHBhdGhzKSlcbiAgICB8PiBGdXQub2ZfbGlzdFxuICBpblxuICBSZXN1bHQuZmxhdHRlbl9sIHJlc3VsdFxuXG5sZXQgdmlld3Nfb2ZfcGF0aCAodmZvbGRlcnMgOiAoc3RyaW5nICogKHN0cmluZyAqIHN0cmluZykgbGlzdCkgbGlzdCkgcGF0aCA9XG4gICgqIFdlIGxvb2sgYXQgdGhlIHByZWZpeCBvZiBhIHBhdGggdG8gZGV0ZXJtaW5lIHdoaWNoIHZpcnR1YWxfZm9sZGVyIChhbmQgdGh1c1xuICAgICB2aWV3KSBpdCdzIGEgcGFydCBvZi4gKilcbiAgTGlzdC5maWx0ZXJfbWFwIHZmb2xkZXJzIH5mOihmdW4gKHZpZXdfaWQsIGxvY2F0aW9ucykgLT5cbiAgICAgIGlmIExpc3QuZXhpc3RzIGxvY2F0aW9ucyB+ZjooZnVuIChfLCBwcmUpIC0+IFN0cmluZy5wcmVmaXggfnByZSBwYXRoKSB0aGVuXG4gICAgICAgIFNvbWUgdmlld19pZFxuICAgICAgZWxzZSBOb25lKVxuXG5sZXQgc3luYyA/KHJlcG9ydCA9IGZ1biBfIC0+ICgpKSB+KHNvdXJjZSA6IFNvdXJjZS5jb25uZXhpb24pIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCBtYWtlX3BsYWNlaG9sZGVycyBmaXJzdCBsYXN0ID1cbiAgICAoKiB0b2RvOiBlcnJvciBoYW5kbGluZyAqKVxuICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgIGluXG4gICAgbGV0IHN0b3JlID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gICAgZm9yIGkgPSBmaXJzdCB0byBsYXN0IGRvXG4gICAgICBpZ25vcmUgQEAgT0kucHV0IHsgaWQgPSBpOyBpdGVtID0gTm9uZSB9IHN0b3JlXG4gICAgZG9uZVxuICBpblxuICBsZXQgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdCBsYXN0ID1cbiAgICBsZXQgb3BlbiBTb3VyY2UgaW5cbiAgICBsZXQqIHZpZXdzID0gdXBkYXRlX3ZpZXdzIHNvdXJjZSBpZGIgaW5cbiAgICBsZXQqIHZmb2xkZXJzID0gZGVkdWNlX3ZpcnR1YWxfZm9sZGVyc19mcm9tX3ZpZXdzIHNvdXJjZSB2aWV3cyBpblxuICAgIGxldCAoKSA9IENvbnNvbGUuaW5mbyBbIFwiRmV0Y2hpbmcgaXRlbXNcIjsgZmlyc3Q7IFwidG9cIjsgbGFzdDsgXCI6XCIgXSBpblxuICAgIGxldCBmZXRjaF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGxldCB0b3RhbCA9IGxhc3QgLSBmaXJzdCArIDEgaW5cbiAgICBsZXQgcmVjIGVucXVldWUgfnN0YXJ0X2luZGV4IHRvZG8gPVxuICAgICAgaWYgdG9kbyA+IDAgdGhlbiAoXG4gICAgICAgIGxldCBsaW1pdCA9IG1pbiB0b2RvIGNodW5rX3NpemUgaW5cbiAgICAgICAgbGV0IHJlcSA9XG4gICAgICAgICAgQXBpLkl0ZW1zLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAoKiB0b2RvIG1ha2Ugc29ydCBleHBsaWNpdCAoYnkgZGF0ZSBhZGRlZCBkYXRlKSAqKVxuICAgICAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICAgIGZpZWxkcyA9IFsgUGFyZW50SWQ7IFBhdGggXTtcbiAgICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzO1xuICAgICAgICAgICAgICBzdGFydF9pbmRleCA9IFNvbWUgc3RhcnRfaW5kZXg7XG4gICAgICAgICAgICAgIGxpbWl0ID0gU29tZSBsaW1pdDtcbiAgICAgICAgICAgICAgc29ydF9vcmRlciA9IFNvbWUgQXNjZW5kaW5nO1xuICAgICAgICAgICAgICBzb3J0X2J5ID0gWyBEYXRlQ3JlYXRlZCBdO1xuICAgICAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICBpblxuICAgICAgICBRdWV1ZS5hZGQgcmVxIGZldGNoX3F1ZXVlO1xuICAgICAgICBlbnF1ZXVlIH5zdGFydF9pbmRleDooc3RhcnRfaW5kZXggKyBsaW1pdCkgKHRvZG8gLSBsaW1pdCkpXG4gICAgaW5cbiAgICBlbnF1ZXVlIH5zdGFydF9pbmRleDpmaXJzdCB0b3RhbDtcbiAgICBsZXQgdG90YWxfcXVlcmllcyA9IFF1ZXVlLmxlbmd0aCBmZXRjaF9xdWV1ZSBpblxuICAgIGxldCByZWMgcnVuX3F1ZXVlID8odGhyZWFkcyA9IDEpIHEgPVxuICAgICAgYXNzZXJ0ICh0aHJlYWRzID4gMCk7XG4gICAgICBsZXQgcmVjIHRha2VfbiBhY2MgbiA9XG4gICAgICAgIGlmIG4gPSAwIHRoZW4gTGlzdC5yZXYgYWNjXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBtYXRjaCBRdWV1ZS50YWtlX29wdCBxIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgICAgICAgfCBTb21lIGVsdCAtPiB0YWtlX24gKGVsdCA6OiBhY2MpIChuIC0gMSlcbiAgICAgIGluXG4gICAgICBsZXQgZiByZXEgPVxuICAgICAgICBsZXQrIHsgQXBpLkl0ZW1zLnN0YXJ0X2luZGV4OyBpdGVtczsgXyB9ID1cbiAgICAgICAgICBxdWVyeSBzb3VyY2UgKG1vZHVsZSBBcGkuSXRlbXMpIHJlcSAoKVxuICAgICAgICBpblxuICAgICAgICBsZXQgKCkgPVxuICAgICAgICAgIHJlcG9ydFxuICAgICAgICAgIEBAIFNvbWVcbiAgICAgICAgICAgICAgIHsgdG90YWwgPSB0b3RhbF9xdWVyaWVzOyByZW1haW5pbmcgPSBRdWV1ZS5sZW5ndGggZmV0Y2hfcXVldWUgfVxuICAgICAgICBpblxuICAgICAgICBsZXQgaWRiX3B1dCB+c3RhcnRfaW5kZXggaXRlbXMgPVxuICAgICAgICAgIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gICAgICAgICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgICAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSk7IChtb2R1bGUgSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQgc19saXN0ID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gICAgICAgICAgbGV0IHNfaXRlbXMgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBJKSB0cmFuc2FjdGlvbiBpblxuICAgICAgICAgIExpc3QuaXRlcmkgaXRlbXMgfmY6KGZ1biBpbmRleCAoeyBBcGkuSXRlbS5pZDsgcGF0aDsgXyB9IGFzIGl0ZW0pIC0+XG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHN0YXJ0X2luZGV4ICsgaW5kZXggaW5cbiAgICAgICAgICAgICAgbGV0IHBhdGggPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6XCJcIiBwYXRoIGluXG4gICAgICAgICAgICAgIGxldCB2aWV3cyA9IHZpZXdzX29mX3BhdGggdmZvbGRlcnMgcGF0aCBpblxuICAgICAgICAgICAgICBsZXQgc29ydF9uYW1lID0gT3B0aW9uLnZhbHVlIGl0ZW0uc29ydF9uYW1lIH5kZWZhdWx0Oml0ZW0ubmFtZSBpblxuICAgICAgICAgICAgICBpZ25vcmUgKE9JLnB1dCB7IGlkID0gaW5kZXg7IGl0ZW0gPSBTb21lIGlkIH0gc19saXN0KTtcbiAgICAgICAgICAgICAgaWdub3JlXG4gICAgICAgICAgICAgICAgKEkucHV0XG4gICAgICAgICAgICAgICAgICAgeyBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA9IGluZGV4OyB2aWV3czsgc29ydF9uYW1lIH07IGl0ZW0gfVxuICAgICAgICAgICAgICAgICAgIHNfaXRlbXMpKVxuICAgICAgICBpblxuICAgICAgICBpZGJfcHV0IH5zdGFydF9pbmRleCBpdGVtc1xuICAgICAgaW5cbiAgICAgIGxldCByZXFzID0gdGFrZV9uIFtdIHRocmVhZHMgaW5cbiAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgIGxldCogcmVxcyA9IEZ1dC5vZl9saXN0IChMaXN0Lm1hcCB+ZiByZXFzKSBpblxuICAgICAgaWYgTGlzdC5pc19lbXB0eSByZXFzIHRoZW4gRnV0Lm9rICgpIGVsc2UgcnVuX3F1ZXVlIHFcbiAgICBpblxuICAgIHJ1bl9xdWV1ZSBmZXRjaF9xdWV1ZVxuICBpblxuICBmdW5jdGlvblxuICB8IE5ld19pdGVtcyB7IGZpcnN0X21pc3Npbmdfa2V5OyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgLT5cbiAgICAgIG1ha2VfcGxhY2Vob2xkZXJzIGZpcnN0X21pc3Npbmdfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdF91bmZldGNoZWRfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gIHwgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0gLT5cbiAgICAgIGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3RfdW5mZXRjaGVkX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICB8IEluY29uc2lzdGVudCAtPiBGdXQub2sgKClcbiAgfCBfIC0+IEZ1dC5vayAoKVxuXG5sZXQgY2hlY2tfYW5kX3N5bmMgP3JlcG9ydCB+c291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCogc3RhdHVzID0gY2hlY2tfc3RhdHVzIH5zb3VyY2UgaWRiIGluXG4gIGxldCBpbml0aWFsID0geyBpbml0aWFsX3JlcG9ydCB3aXRoIHN0YXR1cyB9IGluXG4gIGxldCByZXBvcnQnID1cbiAgICBPcHRpb24ubWFwXG4gICAgICAoZnVuIHJlcG9ydCAtPlxuICAgICAgICBsZXQgKCkgPSAoKiBTZW5kIGEgZmlyc3QgcmVwb3J0ICopIHJlcG9ydCBpbml0aWFsIGluXG4gICAgICAgIGZ1biBzeW5jX3Byb2dyZXNzIC0+IHJlcG9ydCB7IGluaXRpYWwgd2l0aCBzeW5jX3Byb2dyZXNzIH0pXG4gICAgICByZXBvcnRcbiAgaW5cbiAgbGV0KyAoKSA9IHN5bmMgP3JlcG9ydDpyZXBvcnQnIH5zb3VyY2UgaWRiIHN0YXR1cyBpblxuICBPcHRpb24uaXRlclxuICAgIChmdW4gcmVwb3J0IC0+IHJlcG9ydCB7IHN0YXR1cyA9IEluX3N5bmM7IHN5bmNfcHJvZ3Jlc3MgPSBOb25lIH0pXG4gICAgcmVwb3J0XG4iLCJ0eXBlIGxhbmcnID0gRnIgfCBFblxuXG5tb2R1bGUgQ29uZmlnIDogQnJyX2x3ZF91aS5UcmFuc2xhdGVkLkNvbmZpZyB3aXRoIHR5cGUgbGFuZyA9IGxhbmcnID0gc3RydWN0XG4gIHR5cGUgbGFuZyA9IGxhbmcnXG5cbiAgbGV0IHN0cmluZ3MgPVxuICAgIFtcbiAgICAgICgoRnIsIFwiY2xpY2tcIiksIFwiQ2xpcXVleiBzdXIgbGUgYm91dG9uICFcIik7XG4gICAgICAoKEVuLCBcImNsaWNrXCIpLCBcIkNsaWNrIG9uIHRoZSBCdXR0b24gIVwiKTtcbiAgICBdXG5cbiAgbGV0IGFjdGl2ZSA9IEx3ZC52YXIgRnJcblxuICBsZXQgZ2V0IGxhbmcgc3RyaW5nID1cbiAgICBMaXN0LmFzc29jX29wdCAobGFuZywgc3RyaW5nKSBzdHJpbmdzIHw+IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpzdHJpbmdcbmVuZFxuXG5sZXQgc2V0LCBfcyA9IEJycl9sd2RfdWkuVHJhbnNsYXRlZC5tYWtlIChtb2R1bGUgQ29uZmlnKVxubGV0IF9zIHMgZiA9IEx3ZC5tYXAgKF9zIHMpIH5mXG4iLCJpbmNsdWRlIERiLldvcmtlcl9hcGkuU3RhcnRfY2xpZW50IChzdHJ1Y3RcbiAgbGV0IHVybCA9IFwiLi9kYl93b3JrZXIuYmMuanNcIlxuZW5kKVxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyXG5cbnR5cGUgc2VydmVyID0ge1xuICBjb25uZXhpb24gOiBEUy5jb25uZXhpb247XG4gIHN0YXR1cyA6IERiLlN5bmMucmVwb3J0IEx3ZC52YXI7XG4gIHJlZnJlc2ggOiB1bml0IEx3ZC52YXI7XG59XG5cbmxldCBjb25uZXhpb25zIDogKHN0cmluZyAqIERTLmNvbm5leGlvbikgTHdkX3NlcS50IEx3ZC52YXIgPVxuICBCcnJfbHdkX3VpLlBlcnNpc3RlbnQudmFyIH5rZXk6XCJ1aV9zZXJ2ZXJzXCIgTHdkX3NlcS5lbXB0eVxuXG5sZXQgY29ubmVjdCAoc2VydmVyX2lkLCB7IGNvbm5leGlvbjsgc3RhdHVzOyByZWZyZXNoIH0pID1cbiAgbGV0IF8gPVxuICAgIFdvcmtlcl9jbGllbnQubGlzdGVuIFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSB+ZjooZnVuIChpZCwgcmVwb3J0KSAtPlxuICAgICAgICAoKiBUT0RPOiBzdWJzY3JpYmUgdG8gYSBzcGVjaWZpYyBzZXJ2ZXIncyB1cGRhdGVzICopXG4gICAgICAgIGxldCBwcmV2aW91c19zdGF0dXMgPSBMd2QucGVlayBzdGF0dXMgaW5cbiAgICAgICAgaWYgU3RyaW5nLmVxdWFsIHNlcnZlcl9pZCBpZCB0aGVuIChcbiAgICAgICAgICBMd2Quc2V0IHN0YXR1cyByZXBvcnQ7XG4gICAgICAgICAgbWF0Y2ggKHByZXZpb3VzX3N0YXR1cy5zeW5jX3Byb2dyZXNzLCByZXBvcnQuc3luY19wcm9ncmVzcykgd2l0aFxuICAgICAgICAgIHwgU29tZSB7IHJlbWFpbmluZzsgXyB9LCBTb21lIHsgcmVtYWluaW5nID0gcmVtYWluaW5nJzsgXyB9XG4gICAgICAgICAgICB3aGVuIHJlbWFpbmluZyA8PiByZW1haW5pbmcnIC0+XG4gICAgICAgICAgICAgIEx3ZC5zZXQgcmVmcmVzaCAoKVxuICAgICAgICAgIHwgU29tZSB7IHJlbWFpbmluZzsgXyB9LCBOb25lIC0+IEx3ZC5zZXQgcmVmcmVzaCAoKVxuICAgICAgICAgIHwgXyAtPiAoKSkpXG4gIGluXG4gIGlnbm9yZSAoV29ya2VyX2NsaWVudC5xdWVyeSBAQCBBZGRfc2VydmVycyBbIChzZXJ2ZXJfaWQsIGNvbm5leGlvbikgXSlcblxubGV0IHNlcnZlcnNfd2l0aF9zdGF0dXMgPVxuICBMd2Rfc2VxLm1hcFxuICAgIChmdW4gKGlkLCBjb25uZXhpb24pIC0+XG4gICAgICBsZXQgc3RhdHVzID0gTHdkLnZhciBEYi5TeW5jLmluaXRpYWxfcmVwb3J0IGluXG4gICAgICBsZXQgcmVmcmVzaCA9IEx3ZC52YXIgKCkgaW5cbiAgICAgIGxldCBzZXJ2ZXIgPSAoaWQsIHsgY29ubmV4aW9uOyBzdGF0dXM7IHJlZnJlc2ggfSkgaW5cbiAgICAgIGNvbm5lY3Qgc2VydmVyO1xuICAgICAgc2VydmVyKVxuICAgIChMd2QuZ2V0IGNvbm5leGlvbnMpXG5cbmxldCBuZXdfY29ubmV4aW9uIH5iYXNlX3VybCB+dXNlcm5hbWUgfnBhc3N3b3JkID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyBjb25uZXhpb24gPSBEUy5jb25uZWN0IHsgYmFzZV91cmw7IHVzZXJuYW1lOyBwYXNzd29yZCB9IGluXG4gIGxldCBzZXJ2ZXJfaWQgPSBjb25uZXhpb24uYXV0aF9yZXNwb25zZS5zZXJ2ZXJfaWQgaW5cbiAgKCogVE9ETyBDSEVDSyBTRVJWRVIgSUQgKilcbiAgTHdkLnVwZGF0ZVxuICAgIChmdW4gc2VydmVycyAtPiBMd2Rfc2VxLihjb25jYXQgc2VydmVycyAoZWxlbWVudCAoc2VydmVyX2lkLCBjb25uZXhpb24pKSkpXG4gICAgY29ubmV4aW9uc1xuXG5tb2R1bGUgQ29ubmVjdF9mb3JtID0gc3RydWN0XG4gIG9wZW4gQnJyX2x3ZF91aS5Gb3JtXG5cbiAgdHlwZSB0ID0ge1xuICAgIHVybCA6IHN0cmluZyBGaWVsZC52YWxpZGF0aW9uO1xuICAgIHVzZXJuYW1lIDogc3RyaW5nIEZpZWxkLnZhbGlkYXRpb247XG4gICAgcGFzc3dvcmQgOiBzdHJpbmcgRmllbGQudmFsaWRhdGlvbjtcbiAgfVxuXG4gIGxldCBkZWZhdWx0ID0geyB1cmwgPSBFbXB0eTsgdXNlcm5hbWUgPSBFbXB0eTsgcGFzc3dvcmQgPSBFbXB0eSB9XG5cbiAgbGV0IGZpZWxkcyA9XG4gICAgbGV0IHVybF9maWVsZCA9XG4gICAgICBmaWVsZFxuICAgICAgICAoTHdkLnB1cmVcbiAgICAgICAgQEAgRmllbGQudGV4dF9pbnB1dCB+cmVxdWlyZWQ6dHJ1ZSAoU29tZSBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA5NlwiKSlcbiAgICAgICAgKGZ1biB0IHYgLT4geyB0IHdpdGggdXJsID0gdiB9KVxuICAgIGluXG4gICAgbGV0IHVzZXJuYW1lX2ZpZWxkID1cbiAgICAgIGZpZWxkXG4gICAgICAgIChMd2QucHVyZSBAQCBGaWVsZC50ZXh0X2lucHV0IH5yZXF1aXJlZDp0cnVlIE5vbmUpXG4gICAgICAgIChmdW4gdCB2IC0+IHsgdCB3aXRoIHVzZXJuYW1lID0gdiB9KVxuICAgIGluXG4gICAgbGV0IHBhc3N3b3JkX2ZpZWxkID1cbiAgICAgIGZpZWxkXG4gICAgICAgIChMd2QucHVyZSBAQCBGaWVsZC5wYXNzd29yZF9pbnB1dCB+cmVxdWlyZWQ6dHJ1ZSBOb25lKVxuICAgICAgICAoZnVuIHQgdiAtPiB7IHQgd2l0aCBwYXNzd29yZCA9IHYgfSlcbiAgICBpblxuICAgIGxldCBzdWJtaXQgPVxuICAgICAgZmllbGQgKEx3ZC5wdXJlIEBAIEZpZWxkLnN1Ym1pdCAoYFAgXCJDb25uZWN0XCIpKSAoZnVuIHQgX3YgLT4gdClcbiAgICBpblxuICAgIEx3ZC5yZXR1cm5cbiAgICAgIChMd2Rfc2VxLm9mX2xpc3QgWyB1cmxfZmllbGQ7IHVzZXJuYW1lX2ZpZWxkOyBwYXNzd29yZF9maWVsZDsgc3VibWl0IF0pXG5lbmRcblxubGV0IHVpX2Zvcm0gKCkgPVxuICBsZXQgb3BlbiBCcnJfbHdkX3VpLkZvcm0gaW5cbiAgY3JlYXRlXG4gICAgKG1vZHVsZSBDb25uZWN0X2Zvcm0pXG4gICAgKGZ1biB0IC0+XG4gICAgICBDb25zb2xlLmxvZyBbIFwiRm9ybSBzdWJtaXR0ZWQ6XCI7IHQgXTtcbiAgICAgIG1hdGNoIHQgd2l0aFxuICAgICAgKCogRklYTUU6IHZhbGlkYXRpb24gYWxyZWFkeSBoYXBwZW5lZCwgaXQncyByZWR1bmRhbnQgdG8gaGF2ZSB0byBtYXRjaCAqKVxuICAgICAgfCB7IHVybCA9IE9rIHVybDsgdXNlcm5hbWUgPSBPayB1c2VybmFtZTsgcGFzc3dvcmQgPSBPayBwYXNzd29yZCB9IC0+XG4gICAgICAgICAgQ29uc29sZS5sb2cgWyBcIkZvcm0gc3VibWl0dGVkOlwiOyB1cmw7IHVzZXJuYW1lIF07XG4gICAgICAgICAgaWdub3JlIEBAIG5ld19jb25uZXhpb24gfmJhc2VfdXJsOnVybCB+dXNlcm5hbWUgfnBhc3N3b3JkXG4gICAgICB8IF8gLT4gKCkpXG5cbmxldCB1aV9zdGF0dXMgc2VydmVyID1cbiAgbGV0IHN0YXR1cyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBzZXJ2ZXIuc3RhdHVzKSB+ZjooZnVuIHsgc3RhdHVzOyBzeW5jX3Byb2dyZXNzIH0gLT5cbiAgICAgICAgbWF0Y2ggKHN0YXR1cywgc3luY19wcm9ncmVzcykgd2l0aFxuICAgICAgICB8IEluX3N5bmMsIE5vbmUgLT4gRWwudHh0JyBcIlN5bmNocm9uaXplZFwiXG4gICAgICAgIHwgXywgU29tZSB7IERiLlN5bmMudG90YWw7IHJlbWFpbmluZyB9IC0+XG4gICAgICAgICAgICBFbC50eHQnXG4gICAgICAgICAgICBAQCBQcmludGYuc3ByaW50ZiBcIlN5bmMgaW4gcHJvZ3Jlc3M6ICVpLyVpXCIgKHRvdGFsIC0gcmVtYWluaW5nKVxuICAgICAgICAgICAgICAgICB0b3RhbFxuICAgICAgICB8IF8gLT4gRWwudHh0JyBcIkRlc3luY2hyb25pemVkXCIpXG4gIGluXG4gIHN0YXR1c1xuXG5sZXQgZnV0X3RvX2x3ZCB+aW5pdCBmID1cbiAgbGV0IHYgPSBMd2QudmFyIGluaXQgaW5cbiAgbGV0ICgpID0gRnV0LmF3YWl0IGYgKEx3ZC5zZXQgdikgaW5cbiAgTHdkLmdldCB2XG5cbmxldCBzZXJ2ZXJzX2xpYnJhcmllcyA9XG4gIEx3ZF9zZXEubWFwXG4gICAgKGZ1biAoc2VydmVyX2lkLCB7IHJlZnJlc2g7IF8gfSkgLT5cbiAgICAgIGxldCB2aWV3cyA9XG4gICAgICAgIEx3ZC5iaW5kIChMd2QuZ2V0IHJlZnJlc2gpIH5mOihmdW4gKCkgLT5cbiAgICAgICAgICAgIFdvcmtlcl9jbGllbnQucXVlcnkgKEdldF9zZXJ2ZXJfbGlicmFyaWVzIHNlcnZlcl9pZClcbiAgICAgICAgICAgIHw+IEZ1dC5tYXAgKFJlc3VsdC5nZXRfb3IgfmRlZmF1bHQ6W10pXG4gICAgICAgICAgICB8PiBmdXRfdG9fbHdkIH5pbml0OltdKVxuICAgICAgaW5cbiAgICAgIChzZXJ2ZXJfaWQsIHZpZXdzKSlcbiAgICBzZXJ2ZXJzX3dpdGhfc3RhdHVzXG5cbmxldCB1aSAoKSA9XG4gIGxldCBzdGF0dXNlcyA9XG4gICAgTHdkX3NlcS5tYXAgKGZ1biAoXywgc2VydmVyKSAtPiB1aV9zdGF0dXMgc2VydmVyKSBzZXJ2ZXJzX3dpdGhfc3RhdHVzXG4gIGluXG4gIGxldCB1aV9mb3JtID1cbiAgICBMd2QubWFwIHNlcnZlcnNfd2l0aF9zdGF0dXMgfmY6KGZ1biBzIC0+XG4gICAgICAgIG1hdGNoIEx3ZF9zZXEudmlldyBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBMd2Rfc2VxLmVsZW1lbnQgQEAgRWx3ZC5kaXYgWyBgUiAodWlfZm9ybSAoKSkgXVxuICAgICAgICB8IF8gLT4gTHdkX3NlcS5lbXB0eSlcbiAgaW5cbiAgRWx3ZC5kaXYgWyBgUyAoTHdkX3NlcS5saWZ0IHVpX2Zvcm0pOyBgUyAoTHdkX3NlcS5saWZ0IHN0YXR1c2VzKSBdXG4iLCJvcGVuISBJbXBvcnRcbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxudHlwZSBwbGF5c3RhdGUgPSB7XG4gIHBsYXlsaXN0IDogRGIuVmlldy50IG9wdGlvbiBMd2QudmFyO1xuICBjdXJyZW50X2luZGV4IDogaW50IEx3ZC52YXI7XG59XG5cbnR5cGUgdCA9IEVsd2QudCBMd2QudFxuXG5sZXQgcGxheXN0YXRlID0geyBwbGF5bGlzdCA9IEx3ZC52YXIgTm9uZTsgY3VycmVudF9pbmRleCA9IEx3ZC52YXIgMCB9XG5cbnR5cGUgbm93X3BsYXlpbmcgPSB7IGl0ZW0gOiBEUy5BcGkuSXRlbS50OyB1cmwgOiBzdHJpbmcgfVxuXG5sZXQgbm93X3BsYXlpbmcgPSBMd2QudmFyIE5vbmVcblxuKCogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qZWxseWZpbi9qZWxseWZpbi9ibG9iLzQ3ODY5MDFiYjc5NmMzZTkxMmYxM2I2ODY1NzFmZGU4ZDE2ZjQ5YzUvdGVzdHMvSmVsbHlmaW4uTW9kZWwuVGVzdHMvVGVzdCUyMERhdGEvRGV2aWNlUHJvZmlsZS1GaXJlZm94Lmpzb24gKilcblxuKCoqIFBsYXliYWNrIGlzc3VlIHdpdGggYWxhYyBmaWxlcyAoYW5kIHByb2JhYmx5IGFsbCBjb2RlY3Mgbm9uLW5hdGl2ZWx5XG4gICAgICBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIpXG4gICAgLSBTb21lIGNsaWVudHMgKHNvbml4ZCkgZ2l2ZSB1cCwgbXB2IGJhc2VkIHBsYXllcnMgd29yay5cbiAgICAtIFRoZSBvZmZpY2lhbCBjbGllbnQgbWFuYWdlIHRvIHBsYXkgdGhlIGZpbGUgYnV0IGdpdmVzIGEgYmxvYiB0byB0aGUgYXVkaW9cbiAgICAgIHBsYXllciBpbnN0ZWFkIG9mIGEgaGxzIHVybCBhcyBpdCBkb2VzIGZvciBvdGhlciBmaWxlcy5cbiAgICAtIEplbGx5ZmluIHNob3VsZCB1c2UgdGhlIGRldmljZSBpZCBhbmQgYXNzb2NpYXRlZCBjYXBhYmlsaXRpZXMgdG9cbiAgICAgIGF1dG9tYXRpY2FsbHkgdHJhbnNjb2RlLCBzaG91bGRuJ3QgaXQgP1xuXG4qKVxubGV0IGF1ZGlvX3VybCAoc2VydmVyIDogRFMuY29ubmV4aW9uKSBpdGVtX2lkID1cbiAgUHJpbnRmLnNwcmludGZcbiAgICBcIiVzL0F1ZGlvLyVzL3VuaXZlcnNhbD9hcGlfa2V5PSVzJmF1ZGlvQ29kZWM9YWFjJmNvbnRhaW5lcj1vcHVzLG1wMyxhYWMsbTRhLG00YixmbGFjLHdhdixvZ2cmdHJhbnNjb2RpbmdDb250YWluZXI9dHMmdHJhbnNjb2RpbmdQcm90b2NvbD1obHNcIlxuICAgIHNlcnZlci5iYXNlX3VybCBpdGVtX2lkIHNlcnZlci5hdXRoX3Jlc3BvbnNlLmFjY2Vzc190b2tlblxuXG5tb2R1bGUgUGxheWJhY2tfY29udHJvbGxlciAoUCA6IHNpZ1xuICB2YWwgZmV0Y2ggOlxuICAgIERiLlZpZXcudCAtPlxuICAgIGludCBhcnJheSAtPlxuICAgIChEYi5TdG9yZXMuSXRlbXMudCBvcHRpb24gYXJyYXksIERiLldvcmtlcl9hcGkuZXJyb3IpIEZ1dC5yZXN1bHRcbmVuZCkgPVxuc3RydWN0XG4gIGxldCBzZXRfcGxheV91cmwgcGxheWxpc3QgY3VycmVudF9pbmRleCA9XG4gICAgbWF0Y2ggcGxheWxpc3Qgd2l0aFxuICAgIHwgTm9uZSAtPiBGdXQub2sgKClcbiAgICB8IFNvbWUgcGxheWxpc3QgLT5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgbGV0KyBpdGVtID1cbiAgICAgICAgICBsZXQrIHJlc3VsdCA9IFAuZmV0Y2ggcGxheWxpc3QgW3wgY3VycmVudF9pbmRleCB8XSBpblxuICAgICAgICAgIG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgICAgICAgfCBbfCBTb21lIHsgRGIuU3RvcmVzLkl0ZW1zLml0ZW07IF8gfSB8XSAtPlxuICAgICAgICAgICAgICBsZXQgeyBEUy5BcGkuSXRlbS5zZXJ2ZXJfaWQ7IGlkOyBhbGJ1bV9pZDsgbmFtZTsgXyB9ID0gaXRlbSBpblxuICAgICAgICAgICAgICBsZXQgc2VydmVycyA9IEx3ZF9zZXEudG9fbGlzdCAoTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zKSBpblxuICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID0gTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzIGluXG4gICAgICAgICAgICAgIGxldCB1cmwgPSBhdWRpb191cmwgY29ubmV4aW9uIGlkIGluXG4gICAgICAgICAgICAgIGxldCAoKSA9IENvbnNvbGUubG9nIFsgXCJOb3cgcGxheWluZzpcIjsgbmFtZTsgSnYub2Zfc3RyaW5nIHVybCBdIGluXG4gICAgICAgICAgICAgIGxldCAoKSA9XG4gICAgICAgICAgICAgICAgbGV0IG9wZW4gQnJyX2lvLk1lZGlhLlNlc3Npb24gaW5cbiAgICAgICAgICAgICAgICBsZXQgc2Vzc2lvbiA9IG9mX25hdmlnYXRvciBHLm5hdmlnYXRvciBpblxuICAgICAgICAgICAgICAgIGxldCBpbWFnZV9pZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDppZCBhbGJ1bV9pZCBpblxuICAgICAgICAgICAgICAgIGxldCBpbWdfc3JjID1cbiAgICAgICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICAgICAgICAgIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9NTAwJmZvcm1hdD1KcGdcIlxuICAgICAgICAgICAgICAgICAgICBjb25uZXhpb24uYmFzZV91cmwgaW1hZ2VfaWRcbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IG5hbWUgaW5cbiAgICAgICAgICAgICAgICBsZXQgYWxidW0gPSBcIlwiIGluXG4gICAgICAgICAgICAgICAgbGV0IGFydGlzdCA9IFwiXCIgaW5cbiAgICAgICAgICAgICAgICBsZXQgYXJ0d29yayA9XG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBNZWRpYV9tZXRhZGF0YS5zcmMgPSBpbWdfc3JjO1xuICAgICAgICAgICAgICAgICAgICAgIHNpemVzID0gXCI1MDB4NTAwXCI7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZScgPSBcImltYWdlL2pwZWdcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIENvbnNvbGUubG9nIFsgYXJ0d29yayBdO1xuICAgICAgICAgICAgICAgIHNldF9tZXRhZGF0YSBzZXNzaW9uIHsgdGl0bGU7IGFydGlzdDsgYWxidW07IGFydHdvcmsgfVxuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICB7IGl0ZW07IHVybCB9XG4gICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICBpblxuICAgICAgICBMd2Quc2V0IG5vd19wbGF5aW5nIChTb21lIGl0ZW0pXG5cbiAgbGV0IHJlc2V0X3BsYXlsaXN0IHBsYXlsaXN0ID1cbiAgICBpZ25vcmUgQEAgc2V0X3BsYXlfdXJsIChTb21lIHBsYXlsaXN0KSAwO1xuICAgIEx3ZC5zZXQgcGxheXN0YXRlLnBsYXlsaXN0IChTb21lIHBsYXlsaXN0KTtcbiAgICBMd2Quc2V0IHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IDBcblxuICBsZXQgbWFrZSAoKSA9XG4gICAgbGV0IGF1ZGlvX2VsdCA9XG4gICAgICBFbC5hdWRpb1xuICAgICAgICB+YXQ6XG4gICAgICAgICAgW1xuICAgICAgICAgICAgQXQudiAoSnN0ci52IFwiY29udHJvbHNcIikgKEpzdHIudiBcInRydWVcIik7XG4gICAgICAgICAgICBBdC52IChKc3RyLnYgXCJhdXRvcGxheVwiKSAoSnN0ci52IFwidHJ1ZVwiKTtcbiAgICAgICAgICAgIEF0LnYgKEpzdHIudiBcInByZWxvYWRcIikgKEpzdHIudiBcImF1dG9cIik7XG4gICAgICAgICAgXVxuICAgICAgICBbXVxuICAgIGluXG4gICAgbGV0IHNldF9zcmMgdXJsID0gRWwuc2V0X2F0IChKc3RyLnYgXCJzcmNcIikgKFNvbWUgKEpzdHIudiB1cmwpKSBhdWRpb19lbHQgaW5cbiAgICBsZXQgX2F1dG9fcGxheSA9XG4gICAgICAoKiBXZSBjYW5ub3QgcmVseSBvbiB0aGUgbWFpbiBbTHdkXSBvYnNlcnZlciBmb3IgcGxheWJhY2sgY29udHJvbCBiZWNhdXNlXG4gICAgICAgICBpdCBpcyB0aWVkIHRvIHRoZSBbcmVxdWVzdEFuaW1hdGlvbkZyYW1lc10gY2FsbGJhY2suIFRoaXMgcHJldmVudCB0aGVcbiAgICAgICAgIHBsYXllciB0byBzdGFydCBwbGF5aW5nIHRoZSBuZXh0IHNvbmcgaWYgdGhlIHRhYiBpcyBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICAgICopXG4gICAgICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIChMd2QuZ2V0IG5vd19wbGF5aW5nKSBpblxuICAgICAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+XG4gICAgICAgICAgbWF0Y2ggTHdkLnF1aWNrX3NhbXBsZSByb290IHdpdGhcbiAgICAgICAgICB8IFNvbWUgeyB1cmw7IF8gfSAtPiBzZXRfc3JjIHVybFxuICAgICAgICAgIHwgTm9uZSAtPiAoKSk7XG4gICAgICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG4gICAgaW5cbiAgICBsZXQgbmV4dCAoKSA9XG4gICAgICBsZXQgcGxheWxpc3QgPSBMd2QucGVlayBwbGF5c3RhdGUucGxheWxpc3QgaW5cbiAgICAgIGxldCBjdXJyZW50X2luZGV4ID0gTHdkLnBlZWsgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggaW5cbiAgICAgIGxldCBuZXh0X2luZGV4ID0gY3VycmVudF9pbmRleCArIDEgaW5cbiAgICAgIGlnbm9yZSBAQCBzZXRfcGxheV91cmwgcGxheWxpc3QgbmV4dF9pbmRleDtcbiAgICAgIEx3ZC5zZXQgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggbmV4dF9pbmRleFxuICAgIGluXG4gICAgbGV0IHByZXYgKCkgPVxuICAgICAgbGV0IHBsYXlsaXN0ID0gTHdkLnBlZWsgcGxheXN0YXRlLnBsYXlsaXN0IGluXG4gICAgICBsZXQgY3VycmVudF9pbmRleCA9IEx3ZC5wZWVrIHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IGluXG4gICAgICBsZXQgbmV4dF9pbmRleCA9IG1heCAwIChjdXJyZW50X2luZGV4IC0gMSkgaW5cbiAgICAgIGlnbm9yZSBAQCBzZXRfcGxheV91cmwgcGxheWxpc3QgbmV4dF9pbmRleDtcbiAgICAgIEx3ZC5zZXQgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggbmV4dF9pbmRleFxuICAgIGluXG4gICAgbGV0IHNldF9wb3NpdGlvbl9zdGF0ZSA9XG4gICAgICAoKiBFbmFibGUgY29udHJvbCBmcm9tIE9TICopXG4gICAgICBsZXQgb3BlbiBCcnJfaW8uTWVkaWEuU2Vzc2lvbiBpblxuICAgICAgbGV0IHNlc3Npb24gPSBvZl9uYXZpZ2F0b3IgRy5uYXZpZ2F0b3IgaW5cbiAgICAgIGxldCBzZXRfcG9zaXRpb25fc3RhdGUgKCkgPVxuICAgICAgICBsZXQgZHVyYXRpb24gPSBFbC5wcm9wIChFbC5Qcm9wLmZsb2F0IChKc3RyLnYgXCJkdXJhdGlvblwiKSkgYXVkaW9fZWx0IGluXG4gICAgICAgIGlmIG5vdCAoRmxvYXQuaXNfbmFuIGR1cmF0aW9uKSB0aGVuXG4gICAgICAgICAgbGV0IHBsYXliYWNrX3JhdGUgPVxuICAgICAgICAgICAgRWwucHJvcCAoRWwuUHJvcC5mbG9hdCAoSnN0ci52IFwicGxheWJhY2tSYXRlXCIpKSBhdWRpb19lbHRcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBwb3NpdGlvbiA9XG4gICAgICAgICAgICBFbC5wcm9wIChFbC5Qcm9wLmZsb2F0IChKc3RyLnYgXCJjdXJyZW50VGltZVwiKSkgYXVkaW9fZWx0XG4gICAgICAgICAgaW5cbiAgICAgICAgICBzZXRfcG9zaXRpb25fc3RhdGUgfmR1cmF0aW9uIH5wbGF5YmFja19yYXRlIH5wb3NpdGlvbiBzZXNzaW9uXG4gICAgICBpblxuICAgICAgc2V0X2FjdGlvbl9oYW5kbGVyIHNlc3Npb24gQWN0aW9uLm5leHRfdHJhY2sgbmV4dDtcbiAgICAgIHNldF9hY3Rpb25faGFuZGxlciBzZXNzaW9uIEFjdGlvbi5wcmV2aW91c190cmFjayBwcmV2O1xuICAgICAgc2V0X3Bvc2l0aW9uX3N0YXRlXG4gICAgaW5cbiAgICBsZXQgb25fZXJyb3IgZXYgPVxuICAgICAgRXYuc3RvcF9pbW1lZGlhdGVfcHJvcGFnYXRpb24gZXY7XG4gICAgICBFdi5wcmV2ZW50X2RlZmF1bHQgZXY7XG4gICAgICBDb25zb2xlLmxvZ1xuICAgICAgICBbXG4gICAgICAgICAgXCJBIHBsYXliYWNrIGVycm9yIGhhcHBlbmVkLiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGNvZGVjIFxcXG4gICAgICAgICAgIHVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLlwiO1xuICAgICAgICAgIGV2O1xuICAgICAgICBdO1xuICAgICAgbmV4dCAoKVxuICAgIGluXG4gICAgbGV0IG5leHQgXyA9IG5leHQgKCkgaW5cbiAgICBsZXQgKCkgPVxuICAgICAgbGV0IHRhcmdldCA9IEVsLmFzX3RhcmdldCBhdWRpb19lbHQgaW5cbiAgICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXYuZW5kZWQgbmV4dCB0YXJnZXQ7XG4gICAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2LmVycm9yIG9uX2Vycm9yIHRhcmdldDtcbiAgICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXYucGxheSAoZnVuIF8gLT4gc2V0X3Bvc2l0aW9uX3N0YXRlICgpKSB0YXJnZXRcbiAgICBpblxuICAgIGxldCBidG5fbmV4dCA9XG4gICAgICBCcnJfbHdkX3VpLkJ1dHRvbi52IH5ldjpbIGBQIChFbHdkLmhhbmRsZXIgRXYuY2xpY2sgbmV4dCkgXSAoYFAgXCJORVhUXCIpXG4gICAgaW5cbiAgICBsZXQgb3BlbiBCcnJfbHdkX3VpIGluXG4gICAgbGV0IG5vd19wbGF5aW5nID1cbiAgICAgIGxldCB0cmFja19jb3ZlciA9XG4gICAgICAgIGxldCBzdHlsZSA9XG4gICAgICAgICAgTHdkLm1hcCAoTHdkLmdldCBub3dfcGxheWluZykgfmY6KGZ1biBucCAtPlxuICAgICAgICAgICAgICBsZXQgc3JjID1cbiAgICAgICAgICAgICAgICBtYXRjaCBucCB3aXRoXG4gICAgICAgICAgICAgICAgfCBOb25lIC0+IFwidHJhY2sucG5nXCJcbiAgICAgICAgICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZDsgYWxidW1faWQ7IHNlcnZlcl9pZDsgXyB9OyBfIH0gLT5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlX2lkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmlkIGFsYnVtX2lkIGluXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXJ2ZXJzID1cbiAgICAgICAgICAgICAgICAgICAgICBMd2Rfc2VxLnRvX2xpc3QgKEx3ZC5wZWVrIFNlcnZlcnMuY29ubmV4aW9ucylcbiAgICAgICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5leGlvbiA6IERTLmNvbm5leGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzXG4gICAgICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgICAgICgqIHRvZG86IHRoaXMgaXMgZG9uZSBpbiBtdWx0aXBsZSBwbGFjZXMsIHdlIHNob3VsZCBmYWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdXQuICopXG4gICAgICAgICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICAgICAgICAgICAgXCIlcy9JdGVtcy8lcy9JbWFnZXMvUHJpbWFyeT93aWR0aD01MDAmZm9ybWF0PUpwZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uLmJhc2VfdXJsIGltYWdlX2lkXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCVTKVwiIHNyYylcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGF0ID1cbiAgICAgICAgICBBdHRycy4oXG4gICAgICAgICAgICBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwibm93LXBsYXlpbmctY292ZXJcIikgW11cbiAgICAgICAgICAgIHw+IGFkZCBBdC5OYW1lLnN0eWxlIChgUiBzdHlsZSkpXG4gICAgICAgIGluXG4gICAgICAgIEVsd2QuZGl2IH5hdCBbXVxuICAgICAgaW5cbiAgICAgIGxldCB0cmFja19kZXRhaWxzID1cbiAgICAgICAgbGV0IGF0ID0gQXR0cnMuYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcIm5vdy1wbGF5aW5nLWRldGFpbHNcIikgW10gaW5cbiAgICAgICAgbGV0IHRpdGxlID1cbiAgICAgICAgICBsZXQgdHh0ID1cbiAgICAgICAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgbm93X3BsYXlpbmcpIH5mOihmdW5jdGlvblxuICAgICAgICAgICAgICB8IE5vbmUgLT4gRWwudHh0JyBcIk5vdGhpbmcgcGxheWluZ1wiXG4gICAgICAgICAgICAgIHwgU29tZSB7IGl0ZW0gPSB7IG5hbWU7IF8gfTsgXyB9IC0+IEVsLnR4dCcgbmFtZSlcbiAgICAgICAgICBpblxuICAgICAgICAgIEVsd2Quc3BhbiBbIGBSIHR4dCBdXG4gICAgICAgIGluXG4gICAgICAgIEVsd2QuZGl2IH5hdCBbIGBSIHRpdGxlIF1cbiAgICAgIGluXG4gICAgICBsZXQgYXQgPVxuICAgICAgICBBdHRycy4oXG4gICAgICAgICAgYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcImJveFwiKSBbXVxuICAgICAgICAgIHw+IGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJub3ctcGxheWluZy1kaXNwbGF5XCIpKVxuICAgICAgaW5cbiAgICAgIEVsd2QuZGl2IH5hdCBbIGBSIHRyYWNrX2NvdmVyOyBgUiB0cmFja19kZXRhaWxzIF1cbiAgICBpblxuICAgIGxldCBhdCA9XG4gICAgICBBdHRycy4oXG4gICAgICAgIGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJwbGF5ZXItd3JhcHBlclwiKSBbXVxuICAgICAgICB8PiBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwiYm94XCIpKVxuICAgIGluXG4gICAgRWx3ZC5kaXYgfmF0IFsgYFIgbm93X3BsYXlpbmc7IGBQIGF1ZGlvX2VsdDsgYFIgYnRuX25leHQgXVxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBhZGRpbmcgcG9zaXRpb24uICopXG50eXBlIHBhZHR5ID1cbiAgfCBMZWZ0ICAgKCogVGV4dCBpcyBsZWZ0IGp1c3RpZmllZCAoJy0nIG9wdGlvbikuICAgICAgICAgICAgICAgKilcbiAgfCBSaWdodCAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgKG5vICctJyBvcHRpb24pLiAgICAgICAgICAgKilcbiAgfCBaZXJvcyAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgYnkgemVyb3MgKHNlZSAnMCcgb3B0aW9uKS4gKilcblxuKCoqKilcblxuKCogSW50ZWdlciBjb252ZXJzaW9uLiAqKVxudHlwZSBpbnRfY29udiA9XG4gIHwgSW50X2QgfCBJbnRfcGQgfCBJbnRfc2QgICAgICAgICgqICAlZCB8ICUrZCB8ICUgZCAgKilcbiAgfCBJbnRfaSB8IEludF9waSB8IEludF9zaSAgICAgICAgKCogICVpIHwgJStpIHwgJSBpICAqKVxuICB8IEludF94IHwgSW50X0N4ICAgICAgICAgICAgICAgICAoKiAgJXggfCAlI3ggICAgICAgICopXG4gIHwgSW50X1ggfCBJbnRfQ1ggICAgICAgICAgICAgICAgICgqICAlWCB8ICUjWCAgICAgICAgKilcbiAgfCBJbnRfbyB8IEludF9DbyAgICAgICAgICAgICAgICAgKCogICVvIHwgJSNvICAgICAgICAqKVxuICB8IEludF91ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJXUgICAgICAgICAgICAgICopXG4gIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1ICAgICAgICgqICAlI2QgfCAlI2kgfCAlI3UgKilcblxuKCogRmxvYXQgY29udmVyc2lvbi4gKilcbnR5cGUgZmxvYXRfZmxhZ19jb252ID1cbiAgfCBGbG9hdF9mbGFnXyAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3AgICAgICAgICAgICAgICAgICAgKCogJStbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19zICAgICAgICAgICAgICAgICAgICgqICUgW2ZlRWdHRmhIXSAqKVxudHlwZSBmbG9hdF9raW5kX2NvbnYgPVxuICB8IEZsb2F0X2YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWYgfCAlK2YgfCAlIGYgICopXG4gIHwgRmxvYXRfZSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZSB8ICUrZSB8ICUgZSAgKilcbiAgfCBGbG9hdF9FICAgICAgICAgICAgICAgICAgICAgICAgKCogICVFIHwgJStFIHwgJSBFICAqKVxuICB8IEZsb2F0X2cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWcgfCAlK2cgfCAlIGcgICopXG4gIHwgRmxvYXRfRyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRyB8ICUrRyB8ICUgRyAgKilcbiAgfCBGbG9hdF9GICAgICAgICAgICAgICAgICAgICAgICAgKCogICVGIHwgJStGIHwgJSBGICAqKVxuICB8IEZsb2F0X2ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWggfCAlK2ggfCAlIGggICopXG4gIHwgRmxvYXRfSCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlSCB8ICUrSCB8ICUgSCAgKilcbiAgfCBGbG9hdF9DRiAgICAgICAgICAgICAgICAgICAgICAgKCogICUjRnwgJSsjRnwgJSAjRiAqKVxudHlwZSBmbG9hdF9jb252ID0gZmxvYXRfZmxhZ19jb252ICogZmxvYXRfa2luZF9jb252XG5cbigqKiopXG5cbigqIENoYXIgc2V0cyAoc2VlICVbLi4uXSkgYXJlIGJpdG1hcHMgaW1wbGVtZW50ZWQgYXMgMzItY2hhciBzdHJpbmdzLiAqKVxudHlwZSBjaGFyX3NldCA9IHN0cmluZ1xuXG4oKioqKVxuXG4oKiBDb3VudGVyIHVzZWQgaW4gU2NhbmYuICopXG50eXBlIGNvdW50ZXIgPVxuICB8IExpbmVfY291bnRlciAgICAgKCogICVsICAgICAgKilcbiAgfCBDaGFyX2NvdW50ZXIgICAgICgqICAlbiAgICAgICopXG4gIHwgVG9rZW5fY291bnRlciAgICAoKiAgJU4sICVMICAqKVxuXG4oKioqKVxuXG4oKiBQYWRkaW5nIG9mIHN0cmluZ3MgYW5kIG51bWJlcnMuICopXG50eXBlICgnYSwgJ2IpIHBhZGRpbmcgPVxuICAoKiBObyBwYWRkaW5nIChleDogXCIlZFwiKSAqKVxuICB8IE5vX3BhZGRpbmcgIDogKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBMaXRlcmFsIHBhZGRpbmcgKGV4OiBcIiU4ZFwiKSAqKVxuICB8IExpdF9wYWRkaW5nIDogcGFkdHkgKiBpbnQgLT4gKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBQYWRkaW5nIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKmRcIikgKilcbiAgfCBBcmdfcGFkZGluZyA6IHBhZHR5IC0+IChpbnQgLT4gJ2EsICdhKSBwYWRkaW5nXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2QsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcGFkZGluZyBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwYWRfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBQcmVjaXNpb24gb2YgZmxvYXRzIGFuZCAnMCctcGFkZGluZyBvZiBpbnRlZ2Vycy4gKilcbnR5cGUgKCdhLCAnYikgcHJlY2lzaW9uID1cbiAgKCogTm8gcHJlY2lzaW9uIChleDogXCIlZlwiKSAqKVxuICB8IE5vX3ByZWNpc2lvbiA6ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBMaXRlcmFsIHByZWNpc2lvbiAoZXg6IFwiJS4zZlwiKSAqKVxuICB8IExpdF9wcmVjaXNpb24gOiBpbnQgLT4gKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIFByZWNpc2lvbiBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKSAqKVxuICB8IEFyZ19wcmVjaXNpb24gOiAoaW50IC0+ICdhLCAnYSkgcHJlY2lzaW9uXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2YsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcHJlY2lzaW9uIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHByZWNfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBzZWUgdGhlIEN1c3RvbSBmb3JtYXQgY29tYmluYXRvciAqKVxudHlwZSAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5ID1cbiAgfCBDdXN0b21femVybyA6ICgnYSwgc3RyaW5nLCAnYSkgY3VzdG9tX2FyaXR5XG4gIHwgQ3VzdG9tX3N1Y2MgOiAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5IC0+XG4gICAgKCdhLCAneCAtPiAnYiwgJ3ggLT4gJ2MpIGN1c3RvbV9hcml0eVxuXG4oKioqKVxuXG4oKiAgICAgICAgUmVsYXRpb25hbCBmb3JtYXQgdHlwZXNcblxuSW4gdGhlIGZpcnN0IGZvcm1hdCtnYWR0cyBpbXBsZW1lbnRhdGlvbiwgdGhlIHR5cGUgZm9yICUoLi4lKSBpbiB0aGVcbmZtdCBHQURUIHdhcyBhcyBmb2xsb3dzOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICogKCdkMSwgJ3ExLCAnZDIsICdxMikgcmVhZGVyX25iX3VuaWZpZXIgKlxuICAgICgneCwgJ2IsICdjLCAnZDEsICdxMSwgJ3UpIGZtdHR5ICpcbiAgICAoJ3UsICdiLCAnYywgJ3ExLCAnZTEsICdmKSBmbXQgLT5cbiAgICAgICgoJ3gsICdiLCAnYywgJ2QyLCAncTIsICd1KSBmb3JtYXQ2IC0+ICd4LCAnYiwgJ2MsICdkMSwgJ2UxLCAnZikgZm10XG5cbk5vdGljZSB0aGF0IHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2YgcG9zaXRpb24gaW4gdGhlIGZvcm1hdCBhcmd1bWVudFxuKCgneCwgLi4sICd1KSBmb3JtYXQ2IC0+IC4uKSBpcyBlcXVhbCB0byB0aGUgJ3UgcGFyYW1ldGVyIGluICdhXG5wb3NpdGlvbiBpbiB0aGUgZm9ybWF0IHRhaWwgKCgndSwgLi4sICdmKSBmbXQpLiBUaGlzIG1lYW5zIHRoYXQgdGhlXG50eXBlIG9mIHRoZSBleHBlY3RlZCBmb3JtYXQgcGFyYW1ldGVyIGRlcGVuZHMgb2Ygd2hlcmUgdGhlICUoLi4uJSlcbmFyZSBpbiB0aGUgZm9ybWF0IHN0cmluZzpcblxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpXCJcbiAgLSA6ICh1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiB1bml0XG4gID0gPGZ1bj5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKSVkXCJcbiAgLSA6IChpbnQgLT4gdW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCBpbnQgLT4gdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IGludCAtPiB1bml0XG4gID0gPGZ1bj5cblxuT24gdGhlIGNvbnRyYXJ5LCB0aGUgbGVnYWN5IHR5cGVyIGdpdmVzIGEgY2xldmVyIHR5cGUgdGhhdCBkb2VzIG5vdFxuZGVwZW5kIG9uIHRoZSBwb3NpdGlvbiBvZiAlKC4uJSkgaW4gdGhlIGZvcm1hdCBzdHJpbmcuIEZvciBleGFtcGxlLFxuJSglKSB3aWxsIGhhdmUgdGhlIHBvbHltb3JwaGljIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpOiBpdCBjYW5cbmJlIGNvbmNhdGVuYXRlZCB0byBhbnkgZm9ybWF0IHR5cGUsIGFuZCBvbmx5IGVuZm9yY2VzIHRoZSBjb25zdHJhaW50XG50aGF0IGl0cyAnYSBhbmQgJ2YgcGFyYW1ldGVycyBhcmUgZXF1YWwgKG5vIGZvcm1hdCBhcmd1bWVudHMpIGFuZCAnZFxuYW5kICdlIGFyZSBlcXVhbCAobm8gcmVhZGVyIGFyZ3VtZW50KS5cblxuVGhlIHdlYWtlbmluZyBvZiB0aGlzIHBhcmFtZXRlciB0eXBlIGluIHRoZSBHQURUIHZlcnNpb24gYnJva2UgdXNlclxuY29kZSAoaW4gZmFjdCBpdCBlc3NlbnRpYWxseSBtYWRlICUoLi4uJSkgdW51c2FibGUgZXhjZXB0IGF0IHRoZSBsYXN0XG5wb3NpdGlvbiBvZiBhIGZvcm1hdCkuIEluIHBhcnRpY3VsYXIsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IHdvcmtcbmFueW1vcmU6XG5cbiAgZnVuIHNlcCAtPlxuICAgIEZvcm1hdC5wcmludGYgXCJmb28lKCUpYmFyJSglKWJhelwiIHNlcCBzZXBcblxuQXMgdGhlIHR5cGUtY2hlY2tlciB3b3VsZCByZXF1aXJlIHR3byAqaW5jb21wYXRpYmxlKiB0eXBlcyBmb3IgdGhlICUoJSlcbmluIGRpZmZlcmVudCBwb3NpdGlvbnMuXG5cblRoZSBzb2x1dGlvbiB0byByZWdhaW4gYSBnZW5lcmFsIHR5cGUgZm9yICUoLi4lKSBpcyB0byBnZW5lcmFsaXplIHRoaXNcbnRlY2huaXF1ZSwgbm90IG9ubHkgb24gdGhlICdkLCAnZSBwYXJhbWV0ZXJzLCBidXQgb24gYWxsIHNpeFxucGFyYW1ldGVycyBvZiBhIGZvcm1hdDogd2UgaW50cm9kdWNlIGEgXCJyZWxhdGlvbmFsXCIgdHlwZVxuICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxud2hvc2UgdmFsdWVzIGFyZSBwcm9vZnMgdGhhdCAoJ2ExLCAuLiwgJ2YxKSBhbmQgKCdhMiwgLi4sICdmMikgbW9yYWxseVxuY29ycmVzcG9uZCB0byB0aGUgc2FtZSBmb3JtYXQgdHlwZTogJ2ExIGlzIG9idGFpbmVkIGZyb20gJ2YxLCdiMSwnYzFcbmluIHRoZSBleGFjdCBzYW1lIHdheSB0aGF0ICdhMiBpcyBvYnRhaW5lZCBmcm9tICdmMiwnYjIsJ2MyLCBldGMuXG5cbkZvciBleGFtcGxlLCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0d28gZm9ybWF0IHR5cGVzIGJlZ2lubmluZyB3aXRoIGEgQ2hhclxucGFyYW1ldGVyIGlzIGFzIGZvbGxvd3M6XG5cbnwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5JbiB0aGUgZ2VuZXJhbCBjYXNlLCB0aGUgdGVybSBzdHJ1Y3R1cmUgb2YgZm10dHlfcmVsIGlzIChhbG1vc3RbMV0pXG5pc29tb3JwaGljIHRvIHRoZSBmbXR0eSBvZiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb246IGV2ZXJ5XG5jb25zdHJ1Y3RvciBpcyByZS1yZWFkIHdpdGggYSBiaW5hcnksIHJlbGF0aW9uYWwgdHlwZSwgaW5zdGVhZCBvZiB0aGVcbnByZXZpb3VzIHVuYXJ5IHR5cGluZy4gZm10dHkgY2FuIHRoZW4gYmUgcmUtZGVmaW5lZCBhcyB0aGUgZGlhZ29uYWwgb2ZcbmZtdHR5X3JlbDpcblxuICB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuXG5PbmNlIHdlIGhhdmUgdGhpcyBmbXR0eV9yZWwgdHlwZSBpbiBwbGFjZSwgd2UgY2FuIGdpdmUgdGhlIG1vcmVcbmdlbmVyYWwgdHlwZSB0byAlKC4uLiUpOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuV2UgYWNjZXB0IGFueSBmb3JtYXQgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2KSAodGhpcyBpc1xuY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZm9ybWF0KSwgYnV0IGFsc29cbnJlcXVpcmUgYSBwcm9vZiB0aGF0IHRoaXMgZm9ybWF0IGlzIGluIHJlbGF0aW9uIHRvIGFub3RoZXIgZm9ybWF0IHRoYXRcbmlzIGNvbmNhdGVuYWJsZSB0byB0aGUgZm9ybWF0IHRhaWwuIFdoZW4gZXhlY3V0aW5nIGEgJSguLi4lKSBmb3JtYXRcbihpbiBjYW1saW50ZXJuYWxGb3JtYXQubWw6bWFrZV9wcmludGYgb3Igc2NhbmYubWw6bWFrZV9zY2FuZiksIHdlXG50cmFuc3R5cGUgdGhlIGZvcm1hdCBhbG9uZyB0aGlzIHJlbGF0aW9uIHVzaW5nIHRoZSAncmVjYXN0JyBmdW5jdGlvblxudG8gdHJhbnNwb3NlIGJldHdlZW4gcmVsYXRlZCBmb3JtYXQgdHlwZXMuXG5cbiAgdmFsIHJlY2FzdCA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxKSBmbXRcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdFxuXG5OT1RFIFsxXTogdGhlIHR5cGluZyBvZiBGb3JtYXRfc3Vic3RfdHkgcmVxdWlyZXMgbm90IG9uZSBmb3JtYXQgdHlwZSwgYnV0XG50d28sIG9uZSB0byBlc3RhYmxpc2ggdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0IGFyZ3VtZW50IGFuZCB0aGVcbmZpcnN0IHNpeCBwYXJhbWV0ZXJzLCBhbmQgdGhlIG90aGVyIGZvciB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXRcbmFyZ3VtZW50IGFuZCB0aGUgbGFzdCBzaXggcGFyYW1ldGVycy5cblxufCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbldoZW4gd2UgZ2VuZXJhdGUgYSBmb3JtYXQgQVNULCB3ZSBnZW5lcmF0ZSBleGFjdGx5IHRoZSBzYW1lIHdpdG5lc3NcbmZvciBib3RoIHJlbGF0aW9ucywgYW5kIHRoZSB3aXRuZXNzLWNvbnZlcnNpb24gZnVuY3Rpb25zIGluXG5jYW1saW50ZXJuYWxGb3JtYXQgZG8gcmVseSBvbiB0aGlzIGludmFyaWFudC4gRm9yIGV4YW1wbGUsIHRoZVxuZnVuY3Rpb24gdGhhdCBwcm92ZXMgdGhhdCB0aGUgcmVsYXRpb24gaXMgdHJhbnNpdGl2ZVxuXG4gIHZhbCB0cmFucyA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG5cbmRvZXMgYXNzdW1lIHRoYXQgdGhlIHR3byBpbnB1dHMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIHRlcm0gc3RydWN0dXJlXG4oYW5kIGlzIG9ubHkgZXZlcnkgdXNlZCBmb3IgYXJndW1lbnQgd2l0bmVzc2VzIG9mIHRoZVxuRm9ybWF0X3N1YnN0X3R5IGNvbnN0cnVjdG9yKS5cbiopXG5cbigqIFR5cGUgb2YgYSBibG9jayB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggICAoKiBIb3Jpem9udGFsIGJsb2NrIG5vIGxpbmUgYnJlYWtpbmcgKilcbiAgfCBQcF92Ym94ICAgKCogVmVydGljYWwgYmxvY2sgZWFjaCBicmVhayBsZWFkcyB0byBhIG5ldyBsaW5lICopXG4gIHwgUHBfaHZib3ggICgqIEhvcml6b250YWwtdmVydGljYWwgYmxvY2s6IHNhbWUgYXMgdmJveCwgZXhjZXB0IGlmIHRoaXMgYmxvY2tcbiAgICAgICAgICAgICAgICAgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBvbiBhIHNpbmdsZSBsaW5lICopXG4gIHwgUHBfaG92Ym94ICgqIEhvcml6b250YWwgb3IgVmVydGljYWwgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrICopXG4gIHwgUHBfYm94ICAgICgqIEhvcml6b250YWwgb3IgSW5kZW50IGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jaywgb3JcbiAgICAgICAgICAgICAgICAgd2hlbiBpdCBsZWFkcyB0byBhIG5ldyBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBsaW5lICopXG4gIHwgUHBfZml0cyAgICgqIEludGVybmFsIHVzYWdlOiB3aGVuIGEgYmxvY2sgZml0cyBvbiBhIHNpbmdsZSBsaW5lICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGZvcm1hdHRpbmdfbGl0ID1cbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF0gICAqKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAfSAgICopXG4gIHwgQnJlYWsgb2Ygc3RyaW5nICogaW50ICogaW50ICAgICAgICAgICgqIEAsIHwgQCAgfCBAOyB8IEA7PD4gKilcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQD8gICAqKVxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXFxuICAqKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBALiAgICopXG4gIHwgTWFnaWNfc2l6ZSBvZiBzdHJpbmcgKiBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA8bj4gKilcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQEAgICAqKVxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAJSUgICopXG4gIHwgU2Nhbl9pbmRpYyBvZiBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBYICAgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuID1cbiAgfCBPcGVuX3RhZyA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQHsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuICB8IE9wZW5fYm94IDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAWyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IHR5cGUgZWxlbWVudHMuICopXG4oKiBJbiBwYXJ0aWN1bGFyIHVzZWQgdG8gcmVwcmVzZW50ICUoLi4uJSkgYW5kICV7Li4uJX0gY29udGVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcbmFuZCAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsID1cbiAgfCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBTdHJpbmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChzdHJpbmcgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBzdHJpbmcgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVkICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDMyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDMyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50MzIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgTmF0aXZlaW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAobmF0aXZlaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgbmF0aXZlaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDY0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDY0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50NjQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgRmxvYXRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVmICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoZmxvYXQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBmbG9hdCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBCb29sX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChib29sIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgYm9vbCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEZvcm1hdF9hcmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcbiAgfCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9ycy4gKilcbiAgfCBBbHBoYV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICd4IC0+ICdjMSkgLT4gJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICd4IC0+ICdjMikgLT4gJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgVGhldGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAnYzEpIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAnYzIpIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEFueV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVXNlZCBmb3IgY3VzdG9tIGZvcm1hdHMgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgUmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEVuZF9vZl9mbXR0eSA6XG4gICAgICAoJ2YxLCAnYjEsICdjMSwgJ2QxLCAnZDEsICdmMSxcbiAgICAgICAnZjIsICdiMiwgJ2MyLCAnZDIsICdkMiwgJ2YyKSBmbXR0eV9yZWxcblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgZWxlbWVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCA9XG4gIHwgQ2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50MzIgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBOYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbltkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIG5hdGl2ZWludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50NjQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICAgICAgZmxvYXRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGZsb2F0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtiQl0gKilcbiAgICAgICgneCwgYm9vbCAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsdXNoIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IFN0cmluZ19saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIGFiYyAqKVxuICAgICAgc3RyaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2hhcl9saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogeCAqKVxuICAgICAgY2hhciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgRm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IEFscGhhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ3ggLT4gJ2MpIC0+ICd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFRoZXRhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ2MpIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcjogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgZm9ybWF0dGluZ19saXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXR0aW5nX2dlbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgICgnYTEsICdiLCAnYywgJ2QxLCAnZTEsICdmMSkgZm9ybWF0dGluZ19nZW4gKlxuICAgICAgKCdmMSwgJ2IsICdjLCAnZTEsICdlMiwgJ2YyKSBmbXQgLT4gKCdhMSwgJ2IsICdjLCAnZDEsICdlMiwgJ2YyKSBmbXRcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4IC0+ICdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVsuLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChzdHJpbmcgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtubE5MXSAqKVxuICAgICAgY291bnRlciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGludCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IElnbm9yZWRfcGFyYW0gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgaWdub3JlZCAqICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEN1c3RvbSBwcmludGluZyBmb3JtYXQgKFBSIzY0NTIsIEdQUiMxNDApXG5cbiAgICAgV2UgaW5jbHVkZSBhIHR5cGUgQ3VzdG9tIG9mIFwiY3VzdG9tIGNvbnZlcnRlcnNcIiwgd2hlcmUgYW5cbiAgICAgYXJiaXRyYXJ5IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgb25lIG9yIG1vcmVcbiAgICAgYXJndW1lbnRzLiBUaGVyZSBpcyBubyBzeW50YXggZm9yIGN1c3RvbSBjb252ZXJ0ZXJzLCBpdCBpcyBvbmx5XG4gICAgIGludGVuZGVkIGZvciBjdXN0b20gcHJvY2Vzc29ycyB0aGF0IHdpc2ggdG8gcmVseSBvbiB0aGVcbiAgICAgc3RkbGliLWRlZmluZWQgZm9ybWF0IEdBRFRzLlxuXG4gICAgIEZvciBpbnN0YW5jZSBhIHByZS1wcm9jZXNzb3IgY291bGQgY2hvb3NlIHRvIGludGVycHJldCBzdHJpbmdzXG4gICAgIHByZWZpeGVkIHdpdGggW1wiIVwiXSBhcyBmb3JtYXQgc3RyaW5ncyB3aGVyZSBbJXt7IC4uLiB9fV0gaXNcbiAgICAgYSBzcGVjaWFsIGZvcm0gdG8gcGFzcyBhIHRvX3N0cmluZyBmdW5jdGlvbiwgc28gdGhhdCBvbmUgY291bGRcbiAgICAgd3JpdGU6XG5cbiAgICAge1tcbiAgICAgICB0eXBlIHQgPSB7IHggOiBpbnQ7IHkgOiBpbnQgfVxuXG4gICAgICAgbGV0IHN0cmluZ19vZl90IHQgPSBQcmludGYuc3ByaW50ZiBcInsgeCA9ICVkOyB5ID0gJWQgfVwiIHQueCB0LnlcblxuICAgICAgIFByaW50Zi5wcmludGYgIVwidCA9ICV7e3N0cmluZ19vZl90fX1cIiB7IHggPSA0MjsgeSA9IDQyIH1cbiAgICAgXX1cbiAgKilcbiAgfCBDdXN0b20gOlxuICAgICAgKCdhLCAneCwgJ3kpIGN1c3RvbV9hcml0eSAqICh1bml0IC0+ICd4KSAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBlbmQgb2YgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiAqKVxuICB8IEVuZF9vZl9mb3JtYXQgOlxuICAgICAgICAoJ2YsICdiLCAnYywgJ2UsICdlLCAnZikgZm10XG5cbigqKiopXG5cbigqIFR5cGUgZm9yIGlnbm9yZWQgcGFyYW1ldGVycyAoc2VlIFwiJV9cIikuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWQgPVxuICB8IElnbm9yZWRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9zICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9TICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX25kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2YgKilcbiAgICAgIHBhZF9vcHRpb24gKiBwcmVjX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfYm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQiAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfey4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8oLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3JlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgKilcbiAgICAgICgnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1suLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1tubE5MXSAqKVxuICAgICAgY291bnRlciAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG5cbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9XG4gIEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ICogc3RyaW5nXG5cbmxldCByZWMgZXJhc2VfcmVsIDogdHlwZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCAuXG4gIChhLCBiLCBjLCBkLCBlLCBmLFxuICAgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eVxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgX3R5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkxLCBlcmFzZV9yZWwgcmVzdClcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwZSBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXQgdHlwZXMuICopXG4oKiBVc2VkIGJ5OlxuICAgKiByZWFkZXJfbmJfdW5pZmllcl9vZl9mbXR0eSB0byBjb3VudCByZWFkZXJzIGluIGFuIGZtdHR5LFxuICAgKiBTY2FuZi50YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIHRvIGV4dHJhY3QgcmVhZGVycyBpbnNpZGUgJSguLi4lKSxcbiAgICogQ2FtbGludGVybmFsRm9ybWF0LmZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IHRvIGV4dHJhY3QgZm9ybWF0IHR5cGUuICopXG5cbigqXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10dHkgPVxuKilcbmxldCByZWMgY29uY2F0X2ZtdHR5IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gICAgICAgZzEgajEgZzIgajJcbiAgLlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZDEsIGExLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZDIsIGEyKSBmbXR0eV9yZWwgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKGcxLCBiMSwgYzEsIGoxLCBlMSwgZjEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBlMiwgZjIpIGZtdHR5X3JlbCA9XG5mdW4gZm10dHkxIGZtdHR5MiAtPiBtYXRjaCBmbXR0eTEgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IGZtdHR5MlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdHMuICopXG5sZXQgcmVjIGNvbmNhdF9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10ID1cbmZ1biBmbXQxIGZtdDIgLT4gbWF0Y2ggZm10MSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgU3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgQ2FtbF9zdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IENoYXIgKHJlc3QpIC0+XG4gICAgQ2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBDYW1sX2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBCb29sIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEFscGhhIHJlc3QgLT5cbiAgICBBbHBoYSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIFRoZXRhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIEN1c3RvbSAoYXJpdHksIGYsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFJlYWRlciByZXN0IC0+XG4gICAgUmVhZGVyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgRmx1c2ggKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBDaGFyX2xpdGVyYWwgICAoY2hyLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdF9hcmcgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZyAgIChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX25leHRfY2hhciAocmVzdCkgLT5cbiAgICBTY2FuX25leHRfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIElnbm9yZWRfcGFyYW0gKGlnbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGZtdDJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIEdhYnJpZWwgU2NoZXJlciwgcHJvamV0IFBhcnRvdXQsIElOUklBIFBhcmlzLVNhY2xheSAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMjAgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2FtbGludGVybmFsQXRvbWljIGlzIGEgZGVwZW5kZW5jeSBvZiBTdGRsaWIsIHNvIGl0IGlzIGNvbXBpbGVkIHdpdGhcbiAgIC1ub3BlcnZhc2l2ZXMuICopXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogV2UgYXJlIG5vdCByZXVzaW5nICgnYSByZWYpIGRpcmVjdGx5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlYXNvblxuICAgYWJvdXQgYXRvbWljaXR5IGlmIHdlIHdpc2ggdG86IGV2ZW4gaW4gYSBzZXF1ZW50aWFsIGltcGxlbWVudGF0aW9uLFxuICAgc2lnbmFscyBhbmQgb3RoZXIgYXN5bmNocm9ub3VzIGNhbGxiYWNrcyBtaWdodCBicmVhayBhdG9taWNpdHkuICopXG50eXBlICdhIHQgPSB7bXV0YWJsZSB2OiAnYX1cblxubGV0IG1ha2UgdiA9IHt2fVxubGV0IGdldCByID0gci52XG5sZXQgc2V0IHIgdiA9IHIudiA8LSB2XG5cbigqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBzZXQgdG8gbmV2ZXIgYmUgaW5saW5lZDogRmxhbWJkYSBpc1xuICAgYWxsb3dlZCB0byBtb3ZlIHN1cnJvdW5kaW5nIGNvZGUgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLFxuICAgaW5jbHVkaW5nIGFsbG9jYXRpb25zLiAqKVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZXhjaGFuZ2UgciB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIHY7XG4gICgqIEVORCBBVE9NSUMgKilcbiAgY3VyXG5cbmxldFtAaW5saW5lIG5ldmVyXSBjb21wYXJlX2FuZF9zZXQgciBzZWVuIHYgPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICBpZiBjdXIgPT0gc2VlbiB0aGVuIChcbiAgICByLnYgPC0gdjtcbiAgICAoKiBFTkQgQVRPTUlDICopXG4gICAgdHJ1ZVxuICApIGVsc2VcbiAgICBmYWxzZVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZmV0Y2hfYW5kX2FkZCByIG4gPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICByLnYgPC0gKGN1ciArIG4pO1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXQgaW5jciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgMSlcbmxldCBkZWNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAoLTEpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCBvciApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+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+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldCByZWMgKCBAICkgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBoZCA6OiB0bCAtPiBoZCA6OiAodGwgQCBsMilcblxuKCogSS9PIG9wZXJhdGlvbnMgKilcblxudHlwZSBpbl9jaGFubmVsXG50eXBlIG91dF9jaGFubmVsXG5cbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9vdXQgOiBpbnQgLT4gb3V0X2NoYW5uZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFwiXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3JfaW4gOiBpbnQgLT4gaW5fY2hhbm5lbCA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cIlxuXG5sZXQgc3RkaW4gPSBvcGVuX2Rlc2NyaXB0b3JfaW4gMFxubGV0IHN0ZG91dCA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMVxubGV0IHN0ZGVyciA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMlxuXG4oKiBHZW5lcmFsIG91dHB1dCBmdW5jdGlvbnMgKilcblxudHlwZSBvcGVuX2ZsYWcgPVxuICAgIE9wZW5fcmRvbmx5IHwgT3Blbl93cm9ubHkgfCBPcGVuX2FwcGVuZFxuICB8IE9wZW5fY3JlYXQgfCBPcGVuX3RydW5jIHwgT3Blbl9leGNsXG4gIHwgT3Blbl9iaW5hcnkgfCBPcGVuX3RleHQgfCBPcGVuX25vbmJsb2NrXG5cbmV4dGVybmFsIG9wZW5fZGVzYyA6IHN0cmluZyAtPiBvcGVuX2ZsYWcgbGlzdCAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX3N5c19vcGVuXCJcblxuZXh0ZXJuYWwgc2V0X291dF9jaGFubmVsX25hbWU6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9vdXRfZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0KG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X291dF9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX291dCBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl90ZXh0XSAwbzY2NiBuYW1lXG5cbmxldCBvcGVuX291dF9iaW4gbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fYmluYXJ5XSAwbzY2NiBuYW1lXG5cbmV4dGVybmFsIGZsdXNoIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9mbHVzaFwiXG5cbmV4dGVybmFsIG91dF9jaGFubmVsc19saXN0IDogdW5pdCAtPiBvdXRfY2hhbm5lbCBsaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFwiXG5cbmxldCBmbHVzaF9hbGwgKCkgPVxuICBsZXQgcmVjIGl0ZXIgPSBmdW5jdGlvblxuICAgICAgW10gLT4gKClcbiAgICB8IGE6OmwgLT5cbiAgICAgICAgYmVnaW4gdHJ5XG4gICAgICAgICAgICBmbHVzaCBhXG4gICAgICAgIHdpdGggU3lzX2Vycm9yIF8gLT5cbiAgICAgICAgICAoKSAoKiBpZ25vcmUgY2hhbm5lbHMgY2xvc2VkIGR1cmluZyBhIHByZWNlZGluZyBmbHVzaC4gKilcbiAgICAgICAgZW5kO1xuICAgICAgICBpdGVyIGxcbiAgaW4gaXRlciAob3V0X2NoYW5uZWxzX2xpc3QgKCkpXG5cbmV4dGVybmFsIHVuc2FmZV9vdXRwdXQgOiBvdXRfY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0X2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9vdXRwdXRfc3RyaW5nIDogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0XCJcblxuZXh0ZXJuYWwgb3V0cHV0X2NoYXIgOiBvdXRfY2hhbm5lbCAtPiBjaGFyIC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuXG5sZXQgb3V0cHV0X2J5dGVzIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0IG9jIHMgMCAoYnl0ZXNfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXRfc3RyaW5nIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIDAgKHN0cmluZ19sZW5ndGggcylcblxubGV0IG91dHB1dCBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dFwiXG4gIGVsc2UgdW5zYWZlX291dHB1dCBvYyBzIG9mcyBsZW5cblxubGV0IG91dHB1dF9zdWJzdHJpbmcgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IHN0cmluZ19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0X3N1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyBvZnMgbGVuXG5cbmV4dGVybmFsIG91dHB1dF9ieXRlIDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuZXh0ZXJuYWwgb3V0cHV0X2JpbmFyeV9pbnQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfaW50XCJcblxuZXh0ZXJuYWwgbWFyc2hhbF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgLT4gdW5pdCBsaXN0IC0+IHVuaXRcbiAgICAgPSBcImNhbWxfb3V0cHV0X3ZhbHVlXCJcbmxldCBvdXRwdXRfdmFsdWUgY2hhbiB2ID0gbWFyc2hhbF90b19jaGFubmVsIGNoYW4gdiBbXVxuXG5leHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XCJcbmV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX291dFwiXG5leHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX291dF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9vdXQgb2MgPSBmbHVzaCBvYzsgY2xvc2Vfb3V0X2NoYW5uZWwgb2NcbmxldCBjbG9zZV9vdXRfbm9lcnIgb2MgPVxuICAodHJ5IGZsdXNoIG9jIHdpdGggXyAtPiAoKSk7XG4gICh0cnkgY2xvc2Vfb3V0X2NoYW5uZWwgb2Mgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX291dCA6IG91dF9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBHZW5lcmFsIGlucHV0IGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBzZXRfaW5fY2hhbm5lbF9uYW1lOiBpbl9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9pbl9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9pbihvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9pbl9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX2luIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fdGV4dF0gMCBuYW1lXG5cbmxldCBvcGVuX2luX2JpbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX2JpbmFyeV0gMCBuYW1lXG5cbmV4dGVybmFsIGlucHV0X2NoYXIgOiBpbl9jaGFubmVsIC0+IGNoYXIgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5cbmV4dGVybmFsIHVuc2FmZV9pbnB1dCA6IGluX2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9pbnB1dFwiXG5cbmxldCBpbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcImlucHV0XCJcbiAgZWxzZSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWMgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBsZW4gPD0gMCB0aGVuICgpIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW4gaW5cbiAgICBpZiByID0gMFxuICAgIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyAob2ZzICsgcikgKGxlbiAtIHIpXG4gIGVuZFxuXG5sZXQgcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwicmVhbGx5X2lucHV0XCJcbiAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVhbGx5X2lucHV0X3N0cmluZyBpYyBsZW4gPVxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSBsZW4gaW5cbiAgcmVhbGx5X2lucHV0IGljIHMgMCBsZW47XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG5leHRlcm5hbCBpbnB1dF9zY2FuX2xpbmUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcIlxuXG5sZXQgaW5wdXRfbGluZSBjaGFuID1cbiAgbGV0IHJlYyBidWlsZF9yZXN1bHQgYnVmIHBvcyA9IGZ1bmN0aW9uXG4gICAgW10gLT4gYnVmXG4gIHwgaGQgOjogdGwgLT5cbiAgICAgIGxldCBsZW4gPSBieXRlc19sZW5ndGggaGQgaW5cbiAgICAgIGJ5dGVzX2JsaXQgaGQgMCBidWYgKHBvcyAtIGxlbikgbGVuO1xuICAgICAgYnVpbGRfcmVzdWx0IGJ1ZiAocG9zIC0gbGVuKSB0bCBpblxuICBsZXQgcmVjIHNjYW4gYWNjdSBsZW4gPVxuICAgIGxldCBuID0gaW5wdXRfc2Nhbl9saW5lIGNoYW4gaW5cbiAgICBpZiBuID0gMCB0aGVuIGJlZ2luICAgICAgICAgICAgICAgICAgICgqIG4gPSAwOiB3ZSBhcmUgYXQgRU9GICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICAgIHwgXyAgLT4gYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gYWNjdVxuICAgIGVuZCBlbHNlIGlmIG4gPiAwIHRoZW4gYmVnaW4gICAgICAgICAgKCogbiA+IDA6IG5ld2xpbmUgZm91bmQgaW4gYnVmZmVyICopXG4gICAgICBsZXQgcmVzID0gYnl0ZXNfY3JlYXRlIChuIC0gMSkgaW5cbiAgICAgIGlnbm9yZSAodW5zYWZlX2lucHV0IGNoYW4gcmVzIDAgKG4gLSAxKSk7XG4gICAgICBpZ25vcmUgKGlucHV0X2NoYXIgY2hhbik7ICAgICAgICAgICAoKiBza2lwIHRoZSBuZXdsaW5lICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmVzXG4gICAgICB8ICBfIC0+IGxldCBsZW4gPSBsZW4gKyBuIC0gMSBpblxuICAgICAgICAgICAgICBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiAocmVzIDo6IGFjY3UpXG4gICAgZW5kIGVsc2UgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAoKiBuIDwgMDogbmV3bGluZSBub3QgZm91bmQgKilcbiAgICAgIGxldCBiZWcgPSBieXRlc19jcmVhdGUgKC1uKSBpblxuICAgICAgaWdub3JlKHVuc2FmZV9pbnB1dCBjaGFuIGJlZyAwICgtbikpO1xuICAgICAgc2NhbiAoYmVnIDo6IGFjY3UpIChsZW4gLSBuKVxuICAgIGVuZFxuICBpbiBieXRlc191bnNhZmVfdG9fc3RyaW5nIChzY2FuIFtdIDApXG5cbmV4dGVybmFsIGlucHV0X2J5dGUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcbmV4dGVybmFsIGlucHV0X2JpbmFyeV9pbnQgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9pbnRcIlxuZXh0ZXJuYWwgaW5wdXRfdmFsdWUgOiBpbl9jaGFubmVsIC0+ICdhID0gXCJjYW1sX2lucHV0X3ZhbHVlXCJcbmV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5cIlxuZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX2luXCJcbmV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX2luIDogaW5fY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX2luX25vZXJyIGljID0gKHRyeSBjbG9zZV9pbiBpYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfaW4gOiBpbl9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgb3V0cHV0ICopXG5cbmxldCBwcmludF9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRvdXQgY1xubGV0IHByaW50X3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgc1xubGV0IHByaW50X2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3Rkb3V0IHNcbmxldCBwcmludF9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJpbnRfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmludF9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzOyBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxubGV0IHByaW50X25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGVycm9yICopXG5cbmxldCBwcmVycl9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRlcnIgY1xubGV0IHByZXJyX3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgc1xubGV0IHByZXJyX2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3RkZXJyIHNcbmxldCBwcmVycl9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJlcnJfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmVycl9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzOyBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxubGV0IHByZXJyX25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxuXG4oKiBJbnB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgaW5wdXQgKilcblxubGV0IHJlYWRfbGluZSAoKSA9IGZsdXNoIHN0ZG91dDsgaW5wdXRfbGluZSBzdGRpblxubGV0IHJlYWRfaW50ICgpID0gaW50X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2ludF9vcHQgKCkgPSBpbnRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0ICgpID0gZmxvYXRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXRfb3B0ICgpID0gZmxvYXRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcblxuKCogT3BlcmF0aW9ucyBvbiBsYXJnZSBmaWxlcyAqKVxuXG5tb2R1bGUgTGFyZ2VGaWxlID1cbiAgc3RydWN0XG4gICAgZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX291dF82NFwiXG4gICAgZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50NjRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgICBleHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5fNjRcIlxuICAgIGV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX2luXzY0XCJcbiAgICBleHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgZW5kXG5cbigqIEZvcm1hdHMgKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NlxuICAgPSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDZcbiAgID0gRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm10XG4gICAgICAgICAgICAgICAqIHN0cmluZ1xuXG50eXBlICgnYSwgJ2IsICdjLCAnZCkgZm9ybWF0NCA9ICgnYSwgJ2IsICdjLCAnYywgJ2MsICdkKSBmb3JtYXQ2XG5cbnR5cGUgKCdhLCAnYiwgJ2MpIGZvcm1hdCA9ICgnYSwgJ2IsICdjLCAnYykgZm9ybWF0NFxuXG5sZXQgc3RyaW5nX29mX2Zvcm1hdCAoRm9ybWF0IChfZm10LCBzdHIpKSA9IHN0clxuXG5leHRlcm5hbCBmb3JtYXRfb2Zfc3RyaW5nIDpcbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgKCBeXiApIChGb3JtYXQgKGZtdDEsIHN0cjEpKSAoRm9ybWF0IChmbXQyLCBzdHIyKSkgPVxuICBGb3JtYXQgKENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5jb25jYXRfZm10IGZtdDEgZm10MixcbiAgICAgICAgICBzdHIxIF4gXCIlLFwiIF4gc3RyMilcblxuKCogTWlzY2VsbGFuZW91cyAqKVxuXG5leHRlcm5hbCBzeXNfZXhpdCA6IGludCAtPiAnYSA9IFwiY2FtbF9zeXNfZXhpdFwiXG5cbmxldCBleGl0X2Z1bmN0aW9uID0gQ2FtbGludGVybmFsQXRvbWljLm1ha2UgZmx1c2hfYWxsXG5cbmxldCByZWMgYXRfZXhpdCBmID1cbiAgbGV0IG1vZHVsZSBBdG9taWMgPSBDYW1saW50ZXJuYWxBdG9taWMgaW5cbiAgKCogTVBSIzcyNTMsIE1QUiM3Nzk2OiBtYWtlIHN1cmUgXCJmXCIgaXMgZXhlY3V0ZWQgb25seSBvbmNlICopXG4gIGxldCBmX3lldF90b19ydW4gPSBBdG9taWMubWFrZSB0cnVlIGluXG4gIGxldCBvbGRfZXhpdCA9IEF0b21pYy5nZXQgZXhpdF9mdW5jdGlvbiBpblxuICBsZXQgbmV3X2V4aXQgKCkgPVxuICAgIGlmIEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZl95ZXRfdG9fcnVuIHRydWUgZmFsc2UgdGhlbiBmICgpIDtcbiAgICBvbGRfZXhpdCAoKVxuICBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZXhpdF9mdW5jdGlvbiBvbGRfZXhpdCBuZXdfZXhpdCBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIGF0X2V4aXQgZlxuXG5sZXQgZG9fYXRfZXhpdCAoKSA9IChDYW1saW50ZXJuYWxBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbmV4dGVybmFsIG1ham9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX21ham9yXCJcbmV4dGVybmFsIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgOiB1bml0IC0+IGJvb2xcbiAgPSBcImNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWRcIlxubGV0ICgpID0gaWYgbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCAoKSB0aGVuIGF0X2V4aXQgbWFqb3JcblxuKCpNT0RVTEVfQUxJQVNFUyopXG5tb2R1bGUgQXJnICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgID0gQXJyYXlcbm1vZHVsZSBBcnJheUxhYmVscyAgPSBBcnJheUxhYmVsc1xubW9kdWxlIEF0b21pYyAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICA9IEJpZ2FycmF5XG5tb2R1bGUgQm9vbCAgICAgICAgID0gQm9vbFxubW9kdWxlIEJ1ZmZlciAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICA9IEJ5dGVzXG5tb2R1bGUgQnl0ZXNMYWJlbHMgID0gQnl0ZXNMYWJlbHNcbm1vZHVsZSBDYWxsYmFjayAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICA9IENoYXJcbm1vZHVsZSBDb21wbGV4ICAgICAgPSBDb21wbGV4XG5tb2R1bGUgRGlnZXN0ICAgICAgID0gRGlnZXN0XG5tb2R1bGUgRWl0aGVyICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgID0gRXBoZW1lcm9uXG5tb2R1bGUgRmlsZW5hbWUgICAgID0gRmlsZW5hbWVcbm1vZHVsZSBGbG9hdCAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICA9IEZvcm1hdFxubW9kdWxlIEZ1biAgICAgICAgICA9IEZ1blxubW9kdWxlIEdjICAgICAgICAgICA9IEdjXG5tb2R1bGUgR2VubGV4ICAgICAgID0gR2VubGV4XG5tb2R1bGUgSGFzaHRibCAgICAgID0gSGFzaHRibFxubW9kdWxlIEluX2NoYW5uZWwgICA9IEluX2NoYW5uZWxcbm1vZHVsZSBJbnQgICAgICAgICAgPSBJbnRcbm1vZHVsZSBJbnQzMiAgICAgICAgPSBJbnQzMlxubW9kdWxlIEludDY0ICAgICAgICA9IEludDY0XG5tb2R1bGUgTGF6eSAgICAgICAgID0gTGF6eVxubW9kdWxlIExleGluZyAgICAgICA9IExleGluZ1xubW9kdWxlIExpc3QgICAgICAgICA9IExpc3Rcbm1vZHVsZSBMaXN0TGFiZWxzICAgPSBMaXN0TGFiZWxzXG5tb2R1bGUgTWFwICAgICAgICAgID0gTWFwXG5tb2R1bGUgTWFyc2hhbCAgICAgID0gTWFyc2hhbFxubW9kdWxlIE1vcmVMYWJlbHMgICA9IE1vcmVMYWJlbHNcbm1vZHVsZSBOYXRpdmVpbnQgICAgPSBOYXRpdmVpbnRcbm1vZHVsZSBPYmogICAgICAgICAgPSBPYmpcbm1vZHVsZSBPbyAgICAgICAgICAgPSBPb1xubW9kdWxlIE9wdGlvbiAgICAgICA9IE9wdGlvblxubW9kdWxlIE91dF9jaGFubmVsICA9IE91dF9jaGFubmVsXG5tb2R1bGUgUGFyc2luZyAgICAgID0gUGFyc2luZ1xubW9kdWxlIFBlcnZhc2l2ZXMgICA9IFBlcnZhc2l2ZXNcbm1vZHVsZSBQcmludGV4YyAgICAgPSBQcmludGV4Y1xubW9kdWxlIFByaW50ZiAgICAgICA9IFByaW50ZlxubW9kdWxlIFF1ZXVlICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgID0gUmFuZG9tXG5tb2R1bGUgUmVzdWx0ICAgICAgID0gUmVzdWx0XG5tb2R1bGUgU2NhbmYgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZXEgICAgICAgICAgPSBTZXFcbm1vZHVsZSBTZXQgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgPSBTdGFja1xubW9kdWxlIFN0ZExhYmVscyAgICA9IFN0ZExhYmVsc1xubW9kdWxlIFN0cmVhbSAgICAgICA9IFN0cmVhbVxubW9kdWxlIFN0cmluZyAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyA9IFN0cmluZ0xhYmVsc1xubW9kdWxlIFN5cyAgICAgICAgICA9IFN5c1xubW9kdWxlIFVjaGFyICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgID0gVW5pdFxubW9kdWxlIFdlYWsgICAgICAgICA9IFdlYWtcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbmluY2x1ZGUgSW50XG5cbnR5cGUgdCA9IGludFxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5sZXQgYWRkID0gKCArIClcbmxldCBzdWIgPSAoIC0gKVxubGV0IG11bCA9ICggKiApXG5sZXQgZGl2ID0gKCAvIClcbmxldCBzdWNjID0gc3VjY1xubGV0IHByZWQgPSBwcmVkXG5sZXQgYWJzID0gYWJzXG5sZXQgbWF4X2ludCA9IG1heF9pbnRcbmxldCBtaW5faW50ID0gbWluX2ludFxubGV0IGVxdWFsIChhIDogaW50KSBiID0gU3RkbGliLiggPSApIGEgYlxubGV0IGNvbXBhcmUgKGEgOiBpbnQpIGIgPSBjb21wYXJlIGEgYlxuXG4oKiB1c2UgRk5WOlxuICAgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRm93bGVyJUUyJTgwJTkzTm9sbCVFMiU4MCU5M1ZvX2hhc2hfZnVuY3Rpb24gKilcbmxldCBoYXNoIChuIDogaW50KSA6IGludCA9XG4gIGxldCBvZmZzZXRfYmFzaXMgPSAweGNiZjI5Y2U0ODQyMjIzMjVMIGluXG4gIGxldCBwcmltZSA9IDB4MTAwMDAwMDAxYjNMIGluXG5cbiAgbGV0IGggPSByZWYgb2Zmc2V0X2Jhc2lzIGluXG4gIGZvciBrID0gMCB0byA3IGRvXG4gICAgKGggOj0gSW50NjQuKG11bCAhaCBwcmltZSkpO1xuICAgICgqIGggOj0gaCB4b3IgKGstdGggYnl0ZSBvZiBuKSAqKVxuICAgIGggOj0gSW50NjQuKGxvZ3hvciAhaCAob2ZfaW50ICgobiBsc3IgKGsgKiA4KSkgbGFuZCAweGZmKSkpXG4gIGRvbmU7XG4gICgqIHRydW5jYXRlIGJhY2sgdG8gaW50IGFuZCByZW1vdmUgc2lnbiAqKVxuICBJbnQ2NC50b19pbnQgIWggbGFuZCBtYXhfaW50XG5cbmxldCByYW5nZSBpIGogeWllbGQgPVxuICBsZXQgcmVjIHVwIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIHVwIChpICsgMSkgaiB5aWVsZFxuICAgIClcbiAgYW5kIGRvd24gaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgZG93biAoaSAtIDEpIGogeWllbGRcbiAgICApXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIHlpZWxkXG4gIGVsc2VcbiAgICBkb3duIGkgaiB5aWVsZFxuXG5sZXQgcmFuZ2UnIGkgaiB5aWVsZCA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSkgeWllbGRcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgKClcbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKSB5aWVsZFxuXG5sZXQgc2lnbiBpID0gY29tcGFyZSBpIDBcbmxldCBuZWcgaSA9IC1pXG5cbmxldCBwb3cgYSBiID1cbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgICB8IDEgLT4gYWNjXG4gICAgfCBuIC0+XG4gICAgICBpZiBuIG1vZCAyID0gMCB0aGVuXG4gICAgICAgIGF1eCAoYWNjICogYWNjKSAobiAvIDIpXG4gICAgICBlbHNlXG4gICAgICAgIGFjYyAqIGF1eCAoYWNjICogYWNjKSAobiAvIDIpXG4gIGluXG4gIG1hdGNoIGIgd2l0aFxuICB8IDAgLT5cbiAgICBpZiBhID0gMCB0aGVuXG4gICAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcInBvdzogdW5kZWZpbmVkIHZhbHVlIDBeMFwiKVxuICAgIGVsc2VcbiAgICAgIDFcbiAgfCBiIHdoZW4gYiA8IDAgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcInBvdzogY2FuJ3QgcmFpc2UgaW50IHRvIG5lZ2F0aXZlIHBvd2VyXCIpXG4gIHwgYiAtPiBhdXggYSBiXG5cbm1vZHVsZSBJbmZpeCA6IHNpZ1xuICB2YWwgKCA9ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8PiApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPCApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPiApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPD0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCAtLSApIDogdCAtPiB0IC0+IHQgaXRlclxuICB2YWwgKCAtLV4gKSA6IHQgLT4gdCAtPiB0IGl0ZXJcbiAgdmFsICggKyApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggLSApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggfi0gKSA6IHQgLT4gdFxuICB2YWwgKCAqICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAvICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAqKiApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbW9kICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBsYW5kICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBsb3IgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGx4b3IgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCBsbm90IDogdCAtPiB0XG4gIHZhbCAoIGxzbCApIDogdCAtPiBpbnQgLT4gdFxuICB2YWwgKCBsc3IgKSA6IHQgLT4gaW50IC0+IHRcbiAgdmFsICggYXNyICkgOiB0IC0+IGludCAtPiB0XG5lbmQgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdGRsaWJcblxuICBsZXQgKCAtLSApID0gcmFuZ2VcbiAgbGV0ICggLS1eICkgPSByYW5nZSdcbiAgbGV0ICggKiogKSA9IHBvd1xuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxubGV0IG1pbiA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLm1pblxubGV0IG1heCA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLm1heFxuXG5sZXQgZmxvb3JfZGl2IGEgbiA9XG4gIGlmIGEgPCAwICYmIG4gPj0gMCB0aGVuXG4gICAgKChhICsgMSkgLyBuKSAtIDFcbiAgZWxzZSBpZiBhID4gMCAmJiBuIDwgMCB0aGVuXG4gICAgKChhIC0gMSkgLyBuKSAtIDFcbiAgZWxzZVxuICAgIGEgLyBuXG5cbmxldCBib29sX25lcSAoYSA6IGJvb2wpIGIgPSBTdGRsaWIuKCA8PiApIGEgYlxuXG5sZXQgcmVtIGEgbiA9XG4gIGxldCB5ID0gYSBtb2QgbiBpblxuICBpZiBib29sX25lcSAoeSA8IDApIChuIDwgMCkgJiYgeSA8PiAwIHRoZW5cbiAgICB5ICsgblxuICBlbHNlXG4gICAgeVxuXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gbiBzdCA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgblxubGV0IHJhbmRvbV9zbWFsbCA9IHJhbmRvbSAxMDBcbmxldCByYW5kb21fcmFuZ2UgaSBqIHN0ID0gaSArIHJhbmRvbSAoaiAtIGkpIHN0XG5sZXQgcHAgZm10ID0gRm9ybWF0LnBwX3ByaW50X2ludCBmbXRcbmxldCBtb3N0X3NpZ25pZmljYW50X2JpdCA9IC0xIGx4b3IgKC0xIGxzciAxKVxubGV0IHRvX3N0cmluZyA9IHN0cmluZ19vZl9pbnRcbmxldCBvZl9zdHJpbmcgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcbmxldCBvZl9zdHJpbmdfZXhuID0gU3RkbGliLmludF9vZl9zdHJpbmdcbmxldCB0b19mbG9hdCA9IGZsb2F0X29mX2ludFxubGV0IG9mX2Zsb2F0ID0gaW50X29mX2Zsb2F0XG5cbnR5cGUgb3V0cHV0ID0gY2hhciAtPiB1bml0XG5cbigqIGFic3RyYWN0IHByaW50ZXIgKilcbmxldCB0b19iaW5hcnlfZ2VuIChvdXQgOiBvdXRwdXQpIG4gPVxuICBsZXQgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiAoXG4gICAgICBvdXQgJy0nO1xuICAgICAgLW5cbiAgICApIGVsc2VcbiAgICAgIG5cbiAgaW5cbiAgb3V0ICcwJztcbiAgb3V0ICdiJztcbiAgbGV0IHJlYyBsb29wIHN0YXJ0ZWQgYml0IG4gPVxuICAgIGlmIGJpdCA9IDAgdGhlbiAoXG4gICAgICBpZiBub3Qgc3RhcnRlZCB0aGVuIG91dCAnMCdcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGIgPSBuIGxhbmQgYml0IGluXG4gICAgICBpZiBiID0gMCB0aGVuIChcbiAgICAgICAgaWYgc3RhcnRlZCB0aGVuIG91dCAnMCc7XG4gICAgICAgIGxvb3Agc3RhcnRlZCAoYml0IGxzciAxKSBuXG4gICAgICApIGVsc2UgKFxuICAgICAgICBvdXQgJzEnO1xuICAgICAgICBsb29wIHRydWUgKGJpdCBsc3IgMSkgblxuICAgICAgKVxuICAgIClcbiAgaW5cbiAgbG9vcCBmYWxzZSBtb3N0X3NpZ25pZmljYW50X2JpdCBuXG5cbmxldCBwcF9iaW5hcnkgb3V0IG4gPSB0b19iaW5hcnlfZ2VuIChGb3JtYXQucHBfcHJpbnRfY2hhciBvdXQpIG5cblxubGV0IHRvX3N0cmluZ19iaW5hcnkgbiA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDE2IGluXG4gIHRvX2JpbmFyeV9nZW4gKEJ1ZmZlci5hZGRfY2hhciBidWYpIG47XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiB5aWVsZCA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgcmFuZ2UgKGkgKyBzdGVwKSBqIHlpZWxkXG4gICAgKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0ludC5yYW5nZV9ieVwiKVxuICBlbHNlIGlmXG4gICAgaWYgc3RlcCA+IDAgdGhlblxuICAgICAgaSA+IGpcbiAgICBlbHNlXG4gICAgICBpIDwgalxuICB0aGVuXG4gICAgKClcbiAgZWxzZVxuICAgIHJhbmdlIGkgKCgoaiAtIGkpIC8gc3RlcCAqIHN0ZXApICsgaSkgeWllbGRcblxuKCpcbiAgZnJvbSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYW1taW5nX3dlaWdodFxuXG4gIC8vVGhpcyB1c2VzIGZld2VyIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0aGFuIGFueSBvdGhlciBrbm93blxuICAvL2ltcGxlbWVudGF0aW9uIG9uIG1hY2hpbmVzIHdpdGggc2xvdyBtdWx0aXBsaWNhdGlvbi5cbiAgLy9JdCB1c2VzIDE3IGFyaXRobWV0aWMgb3BlcmF0aW9ucy5cbiAgaW50IHBvcGNvdW50XzIodWludDY0X3QgeCkge1xuICAgIHggLT0gKHggPj4gMSkgJiBtMTsgICAgICAgICAgICAgLy9wdXQgY291bnQgb2YgZWFjaCAyIGJpdHMgaW50byB0aG9zZSAyIGJpdHNcbiAgICB4ID0gKHggJiBtMikgKyAoKHggPj4gMikgJiBtMik7IC8vcHV0IGNvdW50IG9mIGVhY2ggNCBiaXRzIGludG8gdGhvc2UgNCBiaXRzXG4gICAgeCA9ICh4ICsgKHggPj4gNCkpICYgbTQ7ICAgICAgICAvL3B1dCBjb3VudCBvZiBlYWNoIDggYml0cyBpbnRvIHRob3NlIDggYml0c1xuICAgIHggKz0geCA+PiAgODsgIC8vcHV0IGNvdW50IG9mIGVhY2ggMTYgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICB4ICs9IHggPj4gMTY7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDMyIGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgeCArPSB4ID4+IDMyOyAgLy9wdXQgY291bnQgb2YgZWFjaCA2NCBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHJldHVybiB4ICYgMHg3ZjtcbiAgfVxuXG4gICBtMSA9IDB4NTU1NTU1NTU1NTU1NTU1NVxuICAgbTIgPSAweDMzMzMzMzMzMzMzMzMzMzNcbiAgIG00ID0gMHgwZjBmMGYwZjBmMGYwZjBmXG4qKVxubGV0IHBvcGNvdW50IChiIDogaW50KSA6IGludCA9XG4gIGxldCBtMSA9IDB4NTU1NTU1NTU1NTU1NTU1NUwgaW5cbiAgbGV0IG0yID0gMHgzMzMzMzMzMzMzMzMzMzMzTCBpblxuICBsZXQgbTQgPSAweDBmMGYwZjBmMGYwZjBmMGZMIGluXG4gIGxldCBvcGVuIEludDY0IGluXG4gIGxldCBiID0gb2ZfaW50IGIgaW5cbiAgKCogaW50LT5pbnQ2NCAqKVxuICBsZXQgYiA9IGxvZ2FuZCBiIDB4N2ZmZmZmZmZmZmZmZmZmZkwgaW5cblxuICAoKiByZW1vdmUgc2lnbiBiaXQsIHdlIGRlYWwgd2l0aCB1aW50NjQgaGVyZSAqKVxuICBsZXQgYiA9IHN1YiBiIChsb2dhbmQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxKSBtMSkgaW5cbiAgbGV0IGIgPSBhZGQgKGxvZ2FuZCBiIG0yKSAobG9nYW5kIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMikgbTIpIGluXG4gIGxldCBiID0gbG9nYW5kIChhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDQpKSBtNCBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgOCkgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDE2KSBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMzIpIGluXG4gIGxldCBiID0gbG9nYW5kIGIgMHg3ZkwgaW5cbiAgdG9faW50IGJcblxubGV0IGxvZ2FuZCA9ICggbGFuZCApXG5sZXQgbG9nb3IgPSAoIGxvciApXG5sZXQgbG9neG9yID0gKCBseG9yIClcbmxldCBsb2dub3QgPSBsbm90XG5sZXQgc2hpZnRfbGVmdCA9ICggbHNsIClcbmxldCBzaGlmdF9yaWdodCA9ICggYXNyIClcbmxldCBzaGlmdF9yaWdodF9sb2dpY2FsID0gKCBsc3IgKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgIFRoaXMgaXMgYSBsYWdnZWQtRmlib25hY2NpIEYoNTUsIDI0LCArKSB3aXRoIGEgbW9kaWZpZWQgYWRkaXRpb25cbiAgIGZ1bmN0aW9uIHRvIGVuaGFuY2UgdGhlIG1peGluZyBvZiBiaXRzLlxuICAgSWYgd2UgdXNlIG5vcm1hbCBhZGRpdGlvbiwgdGhlIGxvdy1vcmRlciBiaXQgZmFpbHMgdGVzdHMgMSBhbmQgN1xuICAgb2YgdGhlIERpZWhhcmQgdGVzdCBzdWl0ZSwgYW5kIGJpdHMgMSBhbmQgMiBhbHNvIGZhaWwgdGVzdCA3LlxuICAgSWYgd2UgdXNlIG11bHRpcGxpY2F0aW9uIGFzIHN1Z2dlc3RlZCBieSBNYXJzYWdsaWEsIGl0IGRvZXNuJ3QgZmFyZVxuICAgbXVjaCBiZXR0ZXIuXG4gICBCeSBtaXhpbmcgdGhlIGJpdHMgb2Ygb25lIG9mIHRoZSBudW1iZXJzIGJlZm9yZSBhZGRpdGlvbiAoWE9SIHRoZVxuICAgNSBoaWdoLW9yZGVyIGJpdHMgaW50byB0aGUgbG93LW9yZGVyIGJpdHMpLCB3ZSBnZXQgYSBnZW5lcmF0b3IgdGhhdFxuICAgcGFzc2VzIGFsbCB0aGUgRGllaGFyZCB0ZXN0cy5cbiopXG5cbmV4dGVybmFsIHJhbmRvbV9zZWVkOiB1bml0IC0+IGludCBhcnJheSA9IFwiY2FtbF9zeXNfcmFuZG9tX3NlZWRcIlxuXG5tb2R1bGUgU3RhdGUgPSBzdHJ1Y3RcblxuICB0eXBlIHQgPSB7IHN0IDogaW50IGFycmF5OyBtdXRhYmxlIGlkeCA6IGludCB9XG5cbiAgbGV0IG5ld19zdGF0ZSAoKSA9IHsgc3QgPSBBcnJheS5tYWtlIDU1IDA7IGlkeCA9IDAgfVxuICBsZXQgYXNzaWduIHN0MSBzdDIgPVxuICAgIEFycmF5LmJsaXQgc3QyLnN0IDAgc3QxLnN0IDAgNTU7XG4gICAgc3QxLmlkeCA8LSBzdDIuaWR4XG5cblxuICBsZXQgZnVsbF9pbml0IHMgc2VlZCA9XG4gICAgbGV0IGNvbWJpbmUgYWNjdSB4ID0gRGlnZXN0LnN0cmluZyAoYWNjdSBeIEludC50b19zdHJpbmcgeCkgaW5cbiAgICBsZXQgZXh0cmFjdCBkID1cbiAgICAgIENoYXIuY29kZSBkLlswXSArIChDaGFyLmNvZGUgZC5bMV0gbHNsIDgpICsgKENoYXIuY29kZSBkLlsyXSBsc2wgMTYpXG4gICAgICArIChDaGFyLmNvZGUgZC5bM10gbHNsIDI0KVxuICAgIGluXG4gICAgbGV0IHNlZWQgPSBpZiBBcnJheS5sZW5ndGggc2VlZCA9IDAgdGhlbiBbfCAwIHxdIGVsc2Ugc2VlZCBpblxuICAgIGxldCBsID0gQXJyYXkubGVuZ3RoIHNlZWQgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgZG9cbiAgICAgIHMuc3QuKGkpIDwtIGk7XG4gICAgZG9uZTtcbiAgICBsZXQgYWNjdSA9IHJlZiBcInhcIiBpblxuICAgIGZvciBpID0gMCB0byA1NCArIEludC5tYXggNTUgbCBkb1xuICAgICAgbGV0IGogPSBpIG1vZCA1NSBpblxuICAgICAgbGV0IGsgPSBpIG1vZCBsIGluXG4gICAgICBhY2N1IDo9IGNvbWJpbmUgIWFjY3Ugc2VlZC4oayk7XG4gICAgICBzLnN0LihqKSA8LSAocy5zdC4oaikgbHhvciBleHRyYWN0ICFhY2N1KSBsYW5kIDB4M0ZGRkZGRkY7ICAoKiBQUiM1NTc1ICopXG4gICAgZG9uZTtcbiAgICBzLmlkeCA8LSAwXG5cblxuICBsZXQgbWFrZSBzZWVkID1cbiAgICBsZXQgcmVzdWx0ID0gbmV3X3N0YXRlICgpIGluXG4gICAgZnVsbF9pbml0IHJlc3VsdCBzZWVkO1xuICAgIHJlc3VsdFxuXG5cbiAgbGV0IG1ha2Vfc2VsZl9pbml0ICgpID0gbWFrZSAocmFuZG9tX3NlZWQgKCkpXG5cbiAgbGV0IGNvcHkgcyA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGFzc2lnbiByZXN1bHQgcztcbiAgICByZXN1bHRcblxuXG4gICgqIFJldHVybnMgMzAgcmFuZG9tIGJpdHMgYXMgYW4gaW50ZWdlciAwIDw9IHggPCAxMDczNzQxODI0ICopXG4gIGxldCBiaXRzIHMgPVxuICAgIHMuaWR4IDwtIChzLmlkeCArIDEpIG1vZCA1NTtcbiAgICBsZXQgY3VydmFsID0gcy5zdC4ocy5pZHgpIGluXG4gICAgbGV0IG5ld3ZhbCA9IHMuc3QuKChzLmlkeCArIDI0KSBtb2QgNTUpXG4gICAgICAgICAgICAgICAgICsgKGN1cnZhbCBseG9yICgoY3VydmFsIGxzciAyNSkgbGFuZCAweDFGKSkgaW5cbiAgICBsZXQgbmV3dmFsMzAgPSBuZXd2YWwgbGFuZCAweDNGRkZGRkZGIGluICAoKiBQUiM1NTc1ICopXG4gICAgcy5zdC4ocy5pZHgpIDwtIG5ld3ZhbDMwO1xuICAgIG5ld3ZhbDMwXG5cblxuICBsZXQgcmVjIGludGF1eCBzIG4gPVxuICAgIGxldCByID0gYml0cyBzIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiAweDNGRkZGRkZGIC0gbiArIDEgdGhlbiBpbnRhdXggcyBuIGVsc2UgdlxuXG4gIGxldCBpbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPiAweDNGRkZGRkZGIHx8IGJvdW5kIDw9IDBcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludFwiXG4gICAgZWxzZSBpbnRhdXggcyBib3VuZFxuXG4gIGxldCByZWMgaW50NjNhdXggcyBuID1cbiAgICBsZXQgbWF4X2ludF8zMiA9ICgxIGxzbCAzMCkgKyAweDNGRkZGRkZGIGluICgqIDB4N0ZGRkZGRkYgKilcbiAgICBsZXQgYjEgPSBiaXRzIHMgaW5cbiAgICBsZXQgYjIgPSBiaXRzIHMgaW5cbiAgICBsZXQgKHIsIG1heF9pbnQpID1cbiAgICAgIGlmIG4gPD0gbWF4X2ludF8zMiB0aGVuXG4gICAgICAgICgqIDMxIHJhbmRvbSBiaXRzIG9uIGJvdGggNjQtYml0IE9DYW1sIGFuZCBKYXZhU2NyaXB0LlxuICAgICAgICAgICBVc2UgdXBwZXIgMTUgYml0cyBvZiBiMSBhbmQgMTYgYml0cyBvZiBiMi4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKGIyIGxhbmQgMHgzRkZGQzAwMCkgbHNsIDEpIGxvciAoYjEgbHNyIDE1KSlcbiAgICAgICAgaW5cbiAgICAgICAgICAoYnBvcywgbWF4X2ludF8zMilcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IGIzID0gYml0cyBzIGluXG4gICAgICAgICgqIDYyIHJhbmRvbSBiaXRzIG9uIDY0LWJpdCBPQ2FtbDsgdW5yZWFjaGFibGUgb24gSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDIwIGJpdHMgb2YgYjEgYW5kIDIxIGJpdHMgb2YgYjIgYW5kIGIzLiAqKVxuICAgICAgICBsZXQgYnBvcyA9XG4gICAgICAgICAgKCgoKGIzIGxhbmQgMHgzRkZGRkUwMCkgbHNsIDEyKSBsb3IgKGIyIGxzciA5KSkgbHNsIDIwKVxuICAgICAgICAgICAgbG9yIChiMSBsc3IgMTApXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnQpXG4gICAgaW5cbiAgICBsZXQgdiA9IHIgbW9kIG4gaW5cbiAgICBpZiByIC0gdiA+IG1heF9pbnQgLSBuICsgMSB0aGVuIGludDYzYXV4IHMgbiBlbHNlIHZcblxuICBsZXQgZnVsbF9pbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5mdWxsX2ludFwiXG4gICAgZWxzZSBpZiBib3VuZCA+IDB4M0ZGRkZGRkYgdGhlblxuICAgICAgaW50NjNhdXggcyBib3VuZFxuICAgIGVsc2VcbiAgICAgIGludGF1eCBzIGJvdW5kXG5cblxuICBsZXQgcmVjIGludDMyYXV4IHMgbiA9XG4gICAgbGV0IGIxID0gSW50MzIub2ZfaW50IChiaXRzIHMpIGluXG4gICAgbGV0IGIyID0gSW50MzIuc2hpZnRfbGVmdCAoSW50MzIub2ZfaW50IChiaXRzIHMgbGFuZCAxKSkgMzAgaW5cbiAgICBsZXQgciA9IEludDMyLmxvZ29yIGIxIGIyIGluXG4gICAgbGV0IHYgPSBJbnQzMi5yZW0gciBuIGluXG4gICAgaWYgSW50MzIuc3ViIHIgdiA+IEludDMyLmFkZCAoSW50MzIuc3ViIEludDMyLm1heF9pbnQgbikgMWxcbiAgICB0aGVuIGludDMyYXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQzMiBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50MzJcIlxuICAgIGVsc2UgaW50MzJhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQ2NGF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDY0Lm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDY0LnNoaWZ0X2xlZnQgKEludDY0Lm9mX2ludCAoYml0cyBzKSkgMzAgaW5cbiAgICBsZXQgYjMgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcyBsYW5kIDcpKSA2MCBpblxuICAgIGxldCByID0gSW50NjQubG9nb3IgYjEgKEludDY0LmxvZ29yIGIyIGIzKSBpblxuICAgIGxldCB2ID0gSW50NjQucmVtIHIgbiBpblxuICAgIGlmIEludDY0LnN1YiByIHYgPiBJbnQ2NC5hZGQgKEludDY0LnN1YiBJbnQ2NC5tYXhfaW50IG4pIDFMXG4gICAgdGhlbiBpbnQ2NGF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50NjQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMExcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDY0XCJcbiAgICBlbHNlIGludDY0YXV4IHMgYm91bmRcblxuXG4gIGxldCBuYXRpdmVpbnQgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIGJvdW5kIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoaW50MzIgcyAoTmF0aXZlaW50LnRvX2ludDMyIGJvdW5kKSlcbiAgICBlbHNlIGZ1biBzIGJvdW5kIC0+IEludDY0LnRvX25hdGl2ZWludCAoaW50NjQgcyAoSW50NjQub2ZfbmF0aXZlaW50IGJvdW5kKSlcblxuXG4gICgqIFJldHVybnMgYSBmbG9hdCAwIDw9IHggPD0gMSB3aXRoIGF0IG1vc3QgNjAgYml0cyBvZiBwcmVjaXNpb24uICopXG4gIGxldCByYXdmbG9hdCBzID1cbiAgICBsZXQgc2NhbGUgPSAxMDczNzQxODI0LjAgICgqIDJeMzAgKilcbiAgICBhbmQgcjEgPSBTdGRsaWIuZmxvYXQgKGJpdHMgcylcbiAgICBhbmQgcjIgPSBTdGRsaWIuZmxvYXQgKGJpdHMgcylcbiAgICBpbiAocjEgLy4gc2NhbGUgKy4gcjIpIC8uIHNjYWxlXG5cblxuICBsZXQgZmxvYXQgcyBib3VuZCA9IHJhd2Zsb2F0IHMgKi4gYm91bmRcblxuICBsZXQgYm9vbCBzID0gKGJpdHMgcyBsYW5kIDEgPSAwKVxuXG4gIGxldCBiaXRzMzIgcyA9XG4gICAgbGV0IGIxID0gSW50MzIuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgMTQpIGluICAoKiAxNiBiaXRzICopXG4gICAgbGV0IGIyID0gSW50MzIuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgMTQpIGluICAoKiAxNiBiaXRzICopXG4gICAgSW50MzIuKGxvZ29yIGIxIChzaGlmdF9sZWZ0IGIyIDE2KSlcblxuICBsZXQgYml0czY0IHMgPVxuICAgIGxldCBiMSA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDkpIGluICAoKiAyMSBiaXRzICopXG4gICAgbGV0IGIyID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOSkgaW4gICgqIDIxIGJpdHMgKilcbiAgICBsZXQgYjMgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA4KSBpbiAgKCogMjIgYml0cyAqKVxuICAgIEludDY0Lihsb2dvciBiMSAobG9nb3IgKHNoaWZ0X2xlZnQgYjIgMjEpIChzaGlmdF9sZWZ0IGIzIDQyKSkpXG5cbiAgbGV0IG5hdGl2ZWJpdHMgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoYml0czMyIHMpXG4gICAgZWxzZSBmdW4gcyAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGJpdHM2NCBzKVxuXG5lbmRcblxuKCogVGhpcyBpcyB0aGUgc3RhdGUgeW91IGdldCB3aXRoIFtpbml0IDI3MTgyODE4XSBhbmQgdGhlbiBhcHBseWluZ1xuICAgdGhlIFwibGFuZCAweDNGRkZGRkZGXCIgZmlsdGVyIHRvIHRoZW0uICBTZWUgIzU1NzUsICM1NzkzLCAjNTk3Ny4gKilcbmxldCBkZWZhdWx0ID0ge1xuICBTdGF0ZS5zdCA9IFt8XG4gICAgICAweDNhZTI1MjJiOyAweDFkOGQ0NjM0OyAweDE1YjRmYWQwOyAweDE4YjE0YWNlOyAweDEyZjhhM2M0OyAweDNiMDg2YzQ3O1xuICAgICAgMHgxNmQ0NjdkNjsgMHgxMDFkOTFjNzsgMHgzMjFkZjE3NzsgMHgwMTc2YzE5MzsgMHgxZmY3MmJmMTsgMHgxZTg4OTEwOTtcbiAgICAgIDB4MGI0NjRiMTg7IDB4MmI4NmI5N2M7IDB4MDg5MWRhNDg7IDB4MDMxMzc0NjM7IDB4MDg1YWM1YTE7IDB4MTVkNjFmMmY7XG4gICAgICAweDNiY2VkMzU5OyAweDI5YzFjMTMyOyAweDNhODY3NjZlOyAweDM2NmQ4Yzg2OyAweDFmNWI2MjIyOyAweDNjZTFiNTlmO1xuICAgICAgMHgyZWJmNzhlMTsgMHgyN2NkMWI4NjsgMHgyNThmM2RjMzsgMHgzODlhODE5NDsgMHgwMmU0YzQ0YzsgMHgxOGM0M2Y3ZDtcbiAgICAgIDB4MGY2ZTUzNGY7IDB4MWU3ZGYzNTk7IDB4MDU1ZDBiN2U7IDB4MTBlODRlN2U7IDB4MTI2MTk4ZTQ7IDB4MGU3NzIyY2I7XG4gICAgICAweDFjYmVkZTI4OyAweDMzOTFiOTY0OyAweDNkNDBlOTJhOyAweDBjNTk5MzNkOyAweDBiOGNkMGI3OyAweDI0ZWZmZjFjO1xuICAgICAgMHgyODAzZmRhYTsgMHgwOGViYzcyZTsgMHgwZjUyMmUzMjsgMHgwNTM5OGVkYzsgMHgyMTQ0YTA0YzsgMHgwYWVmM2NiZDtcbiAgICAgIDB4MDFhZDQ3MTk7IDB4MzViOTNjZDY7IDB4MmE1NTlkNGY7IDB4MWU2ZmQ3Njg7IDB4MjZlMjdmMzY7IDB4MTg2ZjE4YzM7XG4gICAgICAweDJmYmY5NjdhO1xuICAgIHxdO1xuICBTdGF0ZS5pZHggPSAwO1xufVxuXG5sZXQgYml0cyAoKSA9IFN0YXRlLmJpdHMgZGVmYXVsdFxubGV0IGludCBib3VuZCA9IFN0YXRlLmludCBkZWZhdWx0IGJvdW5kXG5sZXQgZnVsbF9pbnQgYm91bmQgPSBTdGF0ZS5mdWxsX2ludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50MzIgYm91bmQgPSBTdGF0ZS5pbnQzMiBkZWZhdWx0IGJvdW5kXG5sZXQgbmF0aXZlaW50IGJvdW5kID0gU3RhdGUubmF0aXZlaW50IGRlZmF1bHQgYm91bmRcbmxldCBpbnQ2NCBib3VuZCA9IFN0YXRlLmludDY0IGRlZmF1bHQgYm91bmRcbmxldCBmbG9hdCBzY2FsZSA9IFN0YXRlLmZsb2F0IGRlZmF1bHQgc2NhbGVcbmxldCBib29sICgpID0gU3RhdGUuYm9vbCBkZWZhdWx0XG5sZXQgYml0czMyICgpID0gU3RhdGUuYml0czMyIGRlZmF1bHRcbmxldCBiaXRzNjQgKCkgPSBTdGF0ZS5iaXRzNjQgZGVmYXVsdFxubGV0IG5hdGl2ZWJpdHMgKCkgPSBTdGF0ZS5uYXRpdmViaXRzIGRlZmF1bHRcblxubGV0IGZ1bGxfaW5pdCBzZWVkID0gU3RhdGUuZnVsbF9pbml0IGRlZmF1bHQgc2VlZFxubGV0IGluaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IFt8IHNlZWQgfF1cbmxldCBzZWxmX2luaXQgKCkgPSBmdWxsX2luaXQgKHJhbmRvbV9zZWVkKCkpXG5cbigqIE1hbmlwdWxhdGluZyB0aGUgY3VycmVudCBzdGF0ZS4gKilcblxubGV0IGdldF9zdGF0ZSAoKSA9IFN0YXRlLmNvcHkgZGVmYXVsdFxubGV0IHNldF9zdGF0ZSBzID0gU3RhdGUuYXNzaWduIGRlZmF1bHQgc1xuXG4oKioqKioqKioqKioqKioqKioqKipcblxuKCogVGVzdCBmdW5jdGlvbnMuICBOb3QgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkuXG4gICBUaGUgW2NoaXNxdWFyZV0gZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG4gPiAxMHIuXG4gICBJdCByZXR1cm5zIGEgdHJpcGxlIChsb3csIGFjdHVhbCwgaGlnaCkuXG4gICBJZiBsb3cgPD0gYWN0dWFsIDw9IGhpZ2gsIHRoZSBbZ10gZnVuY3Rpb24gcGFzc2VkIHRoZSB0ZXN0LFxuICAgb3RoZXJ3aXNlIGl0IGZhaWxlZC5cblxuICBTb21lIHJlc3VsdHM6XG5cbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgNTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAwIDEwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMjk5NzkyNjQzOyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDE0MTQyMTM2OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAyNDsgY2hpc3F1YXJlIGRpZmYgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZiAxMDA7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZjIgMTAyNDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMTQxNDIxMzY7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuaW5pdCAyOTk3OTI2NDM7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5MzYuNzU0NDQ2Nzk2NjMyNDY1LCA5OTcuNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg5Ljc0MDAwMDAwMDAwNTIzODcsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoNDg1OC41Nzg2NDM3NjI2OSwgNTA0NS41LCA1MTQxLjQyMTM1NjIzNzMxKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID1cbig5MzYuNzU0NDQ2Nzk2NjMyNDY1LCA5NDQuODA1OTk5OTk5OTgyMzA1LCAxMDYzLjI0NTU1MzIwMzM2NzU0KVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwMTkuMTk3NDQwMDAwMDAzNTUsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwNTkuMzE3NzYwMDAwMDA1MzYsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwMzkuOTg0NjM5OTk5OTk1MTIsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwNTQuMzgyMDc5OTk5OTk1NzcsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgOTAuMDk2MDAwMDAwMDA1LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwNzYuNzg3MjAwMDAwMDA2MTIsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODUuMTc2MDAwMDAwMDA2NzUyMSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjIxNjAwMDAwMDAwMDM0OTIsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4MC42MjIwMDAwMDAwMDMwMjY4LCAxMjAuKVxuXG4qKVxuXG4oKiBSZXR1cm4gdGhlIHN1bSBvZiB0aGUgc3F1YXJlcyBvZiB2W2kwLGkxWyAqKVxubGV0IHJlYyBzdW1zcSB2IGkwIGkxID1cbiAgaWYgaTAgPj0gaTEgdGhlbiAwLjBcbiAgZWxzZSBpZiBpMSA9IGkwICsgMSB0aGVuIFN0ZGxpYi5mbG9hdCB2LihpMCkgKi4gU3RkbGliLmZsb2F0IHYuKGkwKVxuICBlbHNlIHN1bXNxIHYgaTAgKChpMCtpMSkvMikgKy4gc3Vtc3EgdiAoKGkwK2kxKS8yKSBpMVxuXG5cbmxldCBjaGlzcXVhcmUgZyBuIHIgPVxuICBpZiBuIDw9IDEwICogciB0aGVuIGludmFsaWRfYXJnIFwiY2hpc3F1YXJlXCI7XG4gIGxldCBmID0gQXJyYXkubWFrZSByIDAgaW5cbiAgZm9yIGkgPSAxIHRvIG4gZG9cbiAgICBsZXQgdCA9IGcgciBpblxuICAgIGYuKHQpIDwtIGYuKHQpICsgMVxuICBkb25lO1xuICBsZXQgdCA9IHN1bXNxIGYgMCByXG4gIGFuZCByID0gU3RkbGliLmZsb2F0IHJcbiAgYW5kIG4gPSBTdGRsaWIuZmxvYXQgbiBpblxuICBsZXQgc3IgPSAyLjAgKi4gc3FydCByIGluXG4gIChyIC0uIHNyLCAgIChyICouIHQgLy4gbikgLS4gbiwgICByICsuIHNyKVxuXG5cbigqIFRoaXMgaXMgdG8gdGVzdCBmb3IgbGluZWFyIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcmFuZG9tIG51bWJlcnMuXG4qKVxubGV0IHN0ID0gcmVmIDBcbmxldCBpbml0X2RpZmYgciA9IHN0IDo9IGludCByXG5sZXQgZGlmZiByID1cbiAgbGV0IHgxID0gIXN0XG4gIGFuZCB4MiA9IGludCByXG4gIGluXG4gIHN0IDo9IHgyO1xuICBpZiB4MSA+PSB4MiB0aGVuXG4gICAgeDEgLSB4MlxuICBlbHNlXG4gICAgciArIHgxIC0geDJcblxuXG5sZXQgc3QxID0gcmVmIDBcbmFuZCBzdDIgPSByZWYgMFxuXG5cbigqIFRoaXMgaXMgdG8gdGVzdCBmb3IgcXVhZHJhdGljIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcmFuZG9tXG4gICBudW1iZXJzLlxuKilcbmxldCBpbml0X2RpZmYyIHIgPSBzdDEgOj0gaW50IHI7IHN0MiA6PSBpbnQgclxubGV0IGRpZmYyIHIgPVxuICBsZXQgeDEgPSAhc3QxXG4gIGFuZCB4MiA9ICFzdDJcbiAgYW5kIHgzID0gaW50IHJcbiAgaW5cbiAgc3QxIDo9IHgyO1xuICBzdDIgOj0geDM7XG4gICh4MyAtIHgyIC0geDIgKyB4MSArIDIqcikgbW9kIHJcblxuXG4qKioqKioqKioqKioqKioqKioqKilcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQW4gYWxpYXMgZm9yIHRoZSB0eXBlIG9mIGxpc3RzLiAqKVxudHlwZSAnYSB0ID0gJ2EgbGlzdCA9IFtdIHwgKDo6KSBvZiAnYSAqICdhIGxpc3RcblxuKCogTGlzdCBvcGVyYXRpb25zICopXG5cbmxldCByZWMgbGVuZ3RoX2F1eCBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGxlblxuICB8IF86OmwgLT4gbGVuZ3RoX2F1eCAobGVuICsgMSkgbFxuXG5sZXQgbGVuZ3RoIGwgPSBsZW5ndGhfYXV4IDAgbFxuXG5sZXQgY29ucyBhIGwgPSBhOjpsXG5cbmxldCBoZCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFpbHdpdGggXCJoZFwiXG4gIHwgYTo6XyAtPiBhXG5cbmxldCB0bCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFpbHdpdGggXCJ0bFwiXG4gIHwgXzo6bCAtPiBsXG5cbmxldCBudGggbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhaWx3aXRoIFwibnRoXCJcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBhIGVsc2UgbnRoX2F1eCBsIChuLTEpXG4gIGluIG50aF9hdXggbCBuXG5cbmxldCBudGhfb3B0IGwgbiA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0Lm50aFwiIGVsc2VcbiAgbGV0IHJlYyBudGhfYXV4IGwgbiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCBhOjpsIC0+IGlmIG4gPSAwIHRoZW4gU29tZSBhIGVsc2UgbnRoX2F1eCBsIChuLTEpXG4gIGluIG50aF9hdXggbCBuXG5cbmxldCBhcHBlbmQgPSAoQClcblxubGV0IHJlYyByZXZfYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICAgIFtdIC0+IGwyXG4gIHwgYSA6OiBsIC0+IHJldl9hcHBlbmQgbCAoYSA6OiBsMilcblxubGV0IHJldiBsID0gcmV2X2FwcGVuZCBsIFtdXG5cbmxldCByZWMgaW5pdF90YWlscmVjX2F1eCBhY2MgaSBuIGYgPVxuICBpZiBpID49IG4gdGhlbiBhY2NcbiAgZWxzZSBpbml0X3RhaWxyZWNfYXV4IChmIGkgOjogYWNjKSAoaSsxKSBuIGZcblxubGV0IHJlYyBpbml0X2F1eCBpIG4gZiA9XG4gIGlmIGkgPj0gbiB0aGVuIFtdXG4gIGVsc2VcbiAgICBsZXQgciA9IGYgaSBpblxuICAgIHIgOjogaW5pdF9hdXggKGkrMSkgbiBmXG5cbmxldCByZXZfaW5pdF90aHJlc2hvbGQgPVxuICBtYXRjaCBTeXMuYmFja2VuZF90eXBlIHdpdGhcbiAgfCBTeXMuTmF0aXZlIHwgU3lzLkJ5dGVjb2RlIC0+IDEwXzAwMFxuICAoKiBXZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIHRoZSBzdGFjaywgYmV0dGVyIGJlIHNhZmUgYW5kIGFzc3VtZSBpdCdzXG4gICAgIHNtYWxsLiAqKVxuICB8IFN5cy5PdGhlciBfIC0+IDUwXG5cbmxldCBpbml0IGxlbiBmID1cbiAgaWYgbGVuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5pbml0XCIgZWxzZVxuICBpZiBsZW4gPiByZXZfaW5pdF90aHJlc2hvbGQgdGhlbiByZXYgKGluaXRfdGFpbHJlY19hdXggW10gMCBsZW4gZilcbiAgZWxzZSBpbml0X2F1eCAwIGxlbiBmXG5cbmxldCByZWMgZmxhdHRlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBsOjpyIC0+IGwgQCBmbGF0dGVuIHJcblxubGV0IGNvbmNhdCA9IGZsYXR0ZW5cblxubGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBhOjpsIC0+IGxldCByID0gZiBhIGluIHIgOjogbWFwIGYgbFxuXG5sZXQgcmVjIG1hcGkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGE6OmwgLT4gbGV0IHIgPSBmIGkgYSBpbiByIDo6IG1hcGkgKGkgKyAxKSBmIGxcblxubGV0IG1hcGkgZiBsID0gbWFwaSAwIGYgbFxuXG5sZXQgcmV2X21hcCBmIGwgPVxuICBsZXQgcmVjIHJtYXBfZiBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGFjY3VcbiAgICB8IGE6OmwgLT4gcm1hcF9mIChmIGEgOjogYWNjdSkgbFxuICBpblxuICBybWFwX2YgW10gbFxuXG5cbmxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBhOyBpdGVyIGYgbFxuXG5sZXQgcmVjIGl0ZXJpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKClcbiAgfCBhOjpsIC0+IGYgaSBhOyBpdGVyaSAoaSArIDEpIGYgbFxuXG5sZXQgaXRlcmkgZiBsID0gaXRlcmkgMCBmIGxcblxubGV0IHJlYyBmb2xkX2xlZnQgZiBhY2N1IGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmb2xkX2xlZnQgZiAoZiBhY2N1IGEpIGxcblxubGV0IHJlYyBmb2xkX3JpZ2h0IGYgbCBhY2N1ID1cbiAgbWF0Y2ggbCB3aXRoXG4gICAgW10gLT4gYWNjdVxuICB8IGE6OmwgLT4gZiBhIChmb2xkX3JpZ2h0IGYgbCBhY2N1KVxuXG5sZXQgcmVjIG1hcDIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gbGV0IHIgPSBmIGExIGEyIGluIHIgOjogbWFwMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5tYXAyXCJcblxubGV0IHJldl9tYXAyIGYgbDEgbDIgPVxuICBsZXQgcmVjIHJtYXAyX2YgYWNjdSBsMSBsMiA9XG4gICAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIHwgKFtdLCBbXSkgLT4gYWNjdVxuICAgIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBybWFwMl9mIChmIGExIGEyIDo6IGFjY3UpIGwxIGwyXG4gICAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LnJldl9tYXAyXCJcbiAgaW5cbiAgcm1hcDJfZiBbXSBsMSBsMlxuXG5cbmxldCByZWMgaXRlcjIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiAoKVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMjsgaXRlcjIgZiBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuaXRlcjJcIlxuXG5sZXQgcmVjIGZvbGRfbGVmdDIgZiBhY2N1IGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGFjY3VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGZvbGRfbGVmdDIgZiAoZiBhY2N1IGExIGEyKSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9sZWZ0MlwiXG5cbmxldCByZWMgZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1ID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGFjY3VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGYgYTEgYTIgKGZvbGRfcmlnaHQyIGYgbDEgbDIgYWNjdSlcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvbGRfcmlnaHQyXCJcblxubGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IHRydWVcbiAgfCBhOjpsIC0+IHAgYSAmJiBmb3JfYWxsIHAgbFxuXG5sZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gcCBhIHx8IGV4aXN0cyBwIGxcblxubGV0IHJlYyBmb3JfYWxsMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IHRydWVcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHAgYTEgYTIgJiYgZm9yX2FsbDIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9yX2FsbDJcIlxuXG5sZXQgcmVjIGV4aXN0czIgcCBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBmYWxzZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiB8fCBleGlzdHMyIHAgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmV4aXN0czJcIlxuXG5sZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gY29tcGFyZSBhIHggPSAwIHx8IG1lbSB4IGxcblxubGV0IHJlYyBtZW1xIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBhID09IHggfHwgbWVtcSB4IGxcblxubGV0IHJlYyBhc3NvYyB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAoYSxiKTo6bCAtPiBpZiBjb21wYXJlIGEgeCA9IDAgdGhlbiBiIGVsc2UgYXNzb2MgeCBsXG5cbmxldCByZWMgYXNzb2Nfb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBjb21wYXJlIGEgeCA9IDAgdGhlbiBTb21lIGIgZWxzZSBhc3NvY19vcHQgeCBsXG5cbmxldCByZWMgYXNzcSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBiIGVsc2UgYXNzcSB4IGxcblxubGV0IHJlYyBhc3NxX29wdCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBOb25lXG4gIHwgKGEsYik6OmwgLT4gaWYgYSA9PSB4IHRoZW4gU29tZSBiIGVsc2UgYXNzcV9vcHQgeCBsXG5cbmxldCByZWMgbWVtX2Fzc29jIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gY29tcGFyZSBhIHggPSAwIHx8IG1lbV9hc3NvYyB4IGxcblxubGV0IHJlYyBtZW1fYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWxzZVxuICB8IChhLCBfKSA6OiBsIC0+IGEgPT0geCB8fCBtZW1fYXNzcSB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCAoYSwgXyBhcyBwYWlyKSA6OiBsIC0+XG4gICAgICBpZiBjb21wYXJlIGEgeCA9IDAgdGhlbiBsIGVsc2UgcGFpciA6OiByZW1vdmVfYXNzb2MgeCBsXG5cbmxldCByZWMgcmVtb3ZlX2Fzc3EgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCAoYSwgXyBhcyBwYWlyKSA6OiBsIC0+IGlmIGEgPT0geCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NxIHggbFxuXG5sZXQgcmVjIGZpbmQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHggZWxzZSBmaW5kIHAgbFxuXG5sZXQgcmVjIGZpbmRfb3B0IHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gU29tZSB4IGVsc2UgZmluZF9vcHQgcCBsXG5cbmxldCByZWMgZmluZF9tYXAgZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPlxuICAgICBiZWdpbiBtYXRjaCBmIHggd2l0aFxuICAgICAgIHwgU29tZSBfIGFzIHJlc3VsdCAtPiByZXN1bHRcbiAgICAgICB8IE5vbmUgLT4gZmluZF9tYXAgZiBsXG4gICAgIGVuZFxuXG5sZXQgZmluZF9hbGwgcCA9XG4gIGxldCByZWMgZmluZCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByZXYgYWNjdVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBmaW5kICh4IDo6IGFjY3UpIGwgZWxzZSBmaW5kIGFjY3UgbCBpblxuICBmaW5kIFtdXG5cbmxldCBmaWx0ZXIgPSBmaW5kX2FsbFxuXG5sZXQgZmlsdGVyaSBwIGwgPVxuICBsZXQgcmVjIGF1eCBpIGFjYyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmV2IGFjY1xuICB8IHg6OmwgLT4gYXV4IChpICsgMSkgKGlmIHAgaSB4IHRoZW4geDo6YWNjIGVsc2UgYWNjKSBsXG4gIGluXG4gIGF1eCAwIFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiA9XG4gIGxldCByZWMgYXV4IGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmV2IGFjY3VcbiAgICB8IHggOjogbCAtPlxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYXV4IGFjY3UgbFxuICAgICAgICB8IFNvbWUgdiAtPiBhdXggKHYgOjogYWNjdSkgbFxuICBpblxuICBhdXggW11cblxubGV0IGNvbmNhdF9tYXAgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmV2IGFjY1xuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgbGV0IHhzID0gZiB4IGluXG4gICAgICAgYXV4IGYgKHJldl9hcHBlbmQgeHMgYWNjKSBsXG4gIGluIGF1eCBmIFtdIGxcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2N1IGwgPVxuICBsZXQgcmVjIGF1eCBhY2N1IGxfYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1LCByZXYgbF9hY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbGV0IGFjY3UsIHggPSBmIGFjY3UgeCBpblxuICAgICAgICBhdXggYWNjdSAoeCA6OiBsX2FjY3UpIGwgaW5cbiAgYXV4IGFjY3UgW10gbFxuXG5sZXQgcGFydGl0aW9uIHAgbCA9XG4gIGxldCByZWMgcGFydCB5ZXMgbm8gPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgeWVzLCByZXYgbm8pXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHBhcnQgKHggOjogeWVzKSBubyBsIGVsc2UgcGFydCB5ZXMgKHggOjogbm8pIGwgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwIHAgbCA9XG4gIGxldCByZWMgcGFydCBsZWZ0IHJpZ2h0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IGxlZnQsIHJldiByaWdodClcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggcCB4IHdpdGhcbiAgICAgICB8IEVpdGhlci5MZWZ0IHYgLT4gcGFydCAodiA6OiBsZWZ0KSByaWdodCBsXG4gICAgICAgfCBFaXRoZXIuUmlnaHQgdiAtPiBwYXJ0IGxlZnQgKHYgOjogcmlnaHQpIGxcbiAgICAgZW5kXG4gIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcmVjIHNwbGl0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoW10sIFtdKVxuICB8ICh4LHkpOjpsIC0+XG4gICAgICBsZXQgKHJ4LCByeSkgPSBzcGxpdCBsIGluICh4OjpyeCwgeTo6cnkpXG5cbmxldCByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gKGExLCBhMikgOjogY29tYmluZSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuY29tYmluZVwiXG5cbigqKiBzb3J0aW5nICopXG5cbmxldCByZWMgbWVyZ2UgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgbDIgLT4gbDJcbiAgfCBsMSwgW10gLT4gbDFcbiAgfCBoMSA6OiB0MSwgaDIgOjogdDIgLT5cbiAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICB0aGVuIGgxIDo6IG1lcmdlIGNtcCB0MSBsMlxuICAgICAgZWxzZSBoMiA6OiBtZXJnZSBjbXAgbDEgdDJcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyIDw9IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPiAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgc29ydCA9IHN0YWJsZV9zb3J0XG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCogTm90ZTogb24gYSBsaXN0IG9mIGxlbmd0aCBiZXR3ZWVuIGFib3V0IDEwMDAwMCAoZGVwZW5kaW5nIG9uIHRoZSBtaW5vclxuICAgaGVhcCBzaXplIGFuZCB0aGUgdHlwZSBvZiB0aGUgbGlzdCkgYW5kIFN5cy5tYXhfYXJyYXlfc2l6ZSwgaXQgaXNcbiAgIGFjdHVhbGx5IGZhc3RlciB0byB1c2UgdGhlIGZvbGxvd2luZywgYnV0IGl0IG1pZ2h0IGFsc28gdXNlIG1vcmUgbWVtb3J5XG4gICBiZWNhdXNlIHRoZSBhcmd1bWVudCBsaXN0IGNhbm5vdCBiZSBkZWFsbG9jYXRlZCBpbmNyZW1lbnRhbGx5LlxuXG4gICBBbHNvLCB0aGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyBpbiB0aGlzIGNvZGUgb3IgaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiBvYmpfdHJ1bmNhdGUuXG5cbmV4dGVybmFsIG9ial90cnVuY2F0ZSA6ICdhIGFycmF5IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5cbmxldCBhcnJheV90b19saXN0X2luX3BsYWNlIGEgPVxuICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBhY2N1IG4gcCA9XG4gICAgaWYgcCA8PSAwIHRoZW4gYWNjdSBlbHNlIGJlZ2luXG4gICAgICBpZiBwID0gbiB0aGVuIGJlZ2luXG4gICAgICAgIG9ial90cnVuY2F0ZSBhIHA7XG4gICAgICAgIGxvb3AgKGEuKHAtMSkgOjogYWNjdSkgKG4tMTAwMCkgKHAtMSlcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIGxvb3AgKGEuKHAtMSkgOjogYWNjdSkgbiAocC0xKVxuICAgICAgZW5kXG4gICAgZW5kXG4gIGluXG4gIGxvb3AgW10gKGwtMTAwMCkgbFxuXG5cbmxldCBzdGFibGVfc29ydCBjbXAgbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIEFycmF5LnN0YWJsZV9zb3J0IGNtcCBhO1xuICBhcnJheV90b19saXN0X2luX3BsYWNlIGFcblxuKilcblxuXG4oKiogc29ydGluZyArIHJlbW92aW5nIGR1cGxpY2F0ZXMgKilcblxubGV0IHNvcnRfdW5pcSBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZSB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA8IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gLT4gLTFcbiAgfCBfLCBbXSAtPiAxXG4gIHwgXyA6OiBsMSwgXyA6OiBsMiAtPiBjb21wYXJlX2xlbmd0aHMgbDEgbDJcbjs7XG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhfd2l0aCBsIG4gPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPlxuICAgIGlmIG4gPSAwIHRoZW4gMCBlbHNlXG4gICAgICBpZiBuID4gMCB0aGVuIC0xIGVsc2UgMVxuICB8IF8gOjogbCAtPlxuICAgIGlmIG4gPD0gMCB0aGVuIDEgZWxzZVxuICAgICAgY29tcGFyZV9sZW5ndGhfd2l0aCBsIChuLTEpXG47O1xuXG4oKiogezEgQ29tcGFyaXNvbn0gKilcblxuKCogTm90ZTogd2UgYXJlICpub3QqIHNob3J0Y3V0dGluZyB0aGUgbGlzdCBieSB1c2luZ1xuICAgW0xpc3QuY29tcGFyZV9sZW5ndGhzXSBmaXJzdDsgdGhpcyBtYXkgYmUgc2xvd2VyIG9uIGxvbmcgbGlzdHNcbiAgIGltbWVkaWF0ZWx5IHN0YXJ0IHdpdGggZGlzdGluY3QgZWxlbWVudHMuIEl0IGlzIGFsc28gaW5jb3JyZWN0IGZvclxuICAgW2NvbXBhcmVdIGJlbG93LCBhbmQgaXQgaXMgYmV0dGVyIChwcmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2UpIHRvXG4gICB1c2UgdGhlIHNhbWUgYXBwcm9hY2ggZm9yIGJvdGggZnVuY3Rpb25zLiAqKVxubGV0IHJlYyBlcXVhbCBlcSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IHRydWVcbiAgfCBbXSwgXzo6XyB8IF86Ol8sIFtdIC0+IGZhbHNlXG4gIHwgYTE6OmwxLCBhMjo6bDIgLT4gZXEgYTEgYTIgJiYgZXF1YWwgZXEgbDEgbDJcblxubGV0IHJlYyBjb21wYXJlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXzo6XyAtPiAtMVxuICB8IF86Ol8sIFtdIC0+IDFcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPlxuICAgIGxldCBjID0gY21wIGExIGEyIGluXG4gICAgaWYgYyA8PiAwIHRoZW4gY1xuICAgIGVsc2UgY29tcGFyZSBjbXAgbDEgbDJcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBsID1cbiAgbGV0IHJlYyBhdXggbCAoKSA9IG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gU2VxLk5pbFxuICAgIHwgeCA6OiB0YWlsIC0+IFNlcS5Db25zICh4LCBhdXggdGFpbClcbiAgaW5cbiAgYXV4IGxcblxubGV0IG9mX3NlcSBzZXEgPVxuICBsZXQgcmVjIGRpcmVjdCBkZXB0aCBzZXEgOiBfIGxpc3QgPVxuICAgIGlmIGRlcHRoPTBcbiAgICB0aGVuXG4gICAgICBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBzZXFcbiAgICAgIHw+IHJldiAoKiB0YWlscmVjICopXG4gICAgZWxzZSBtYXRjaCBzZXEoKSB3aXRoXG4gICAgICB8IFNlcS5OaWwgLT4gW11cbiAgICAgIHwgU2VxLkNvbnMgKHgsIG5leHQpIC0+IHggOjogZGlyZWN0IChkZXB0aC0xKSBuZXh0XG4gIGluXG4gIGRpcmVjdCA1MDAgc2VxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE9wZXJhdGlvbnMgb24gaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIG9mIHZhbHVlcyAqKVxuXG50eXBlIHRcblxudHlwZSByYXdfZGF0YSA9IG5hdGl2ZWludFxuXG5leHRlcm5hbCByZXByIDogJ2EgLT4gdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG9iaiA6IHQgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBtYWdpYyA6ICdhIC0+ICdiID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgaXNfaW50IDogdCAtPiBib29sID0gXCIlb2JqX2lzX2ludFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBpc19ibG9jayBhID0gbm90IChpc19pbnQgYSlcbmV4dGVybmFsIHRhZyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial90YWdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2V0X3RhZyA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3NldF90YWdcIlxuZXh0ZXJuYWwgc2l6ZSA6IHQgLT4gaW50ID0gXCIlb2JqX3NpemVcIlxuZXh0ZXJuYWwgcmVhY2hhYmxlX3dvcmRzIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1wiXG5leHRlcm5hbCBmaWVsZCA6IHQgLT4gaW50IC0+IHQgPSBcIiVvYmpfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X2ZpZWxkIDogdCAtPiBpbnQgLT4gdCAtPiB1bml0ID0gXCIlb2JqX3NldF9maWVsZFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfZ2V0XCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfc2V0IDpcbiAgICBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfc2V0XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGRvdWJsZV9maWVsZCB4IGkgPSBmbG9hdGFycmF5X2dldCAob2JqIHggOiBmbG9hdGFycmF5KSBpXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBzZXRfZG91YmxlX2ZpZWxkIHggaSB2ID1cbiAgZmxvYXRhcnJheV9zZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaSB2XG5leHRlcm5hbCByYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSA9IFwiY2FtbF9vYmpfcmF3X2ZpZWxkXCJcbmV4dGVybmFsIHNldF9yYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9vYmpfc2V0X3Jhd19maWVsZFwiXG5cbmV4dGVybmFsIG5ld19ibG9jayA6IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9vYmpfYmxvY2tcIlxuZXh0ZXJuYWwgZHVwIDogdCAtPiB0ID0gXCJjYW1sX29ial9kdXBcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5leHRlcm5hbCBhZGRfb2Zmc2V0IDogdCAtPiBJbnQzMi50IC0+IHQgPSBcImNhbWxfb2JqX2FkZF9vZmZzZXRcIlxuZXh0ZXJuYWwgd2l0aF90YWcgOiBpbnQgLT4gdCAtPiB0ID0gXCJjYW1sX29ial93aXRoX3RhZ1wiXG5cbmxldCBmaXJzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMFxubGV0IGxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDI0NVxuXG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcbmxldCBmaW5hbF90YWcgPSBjdXN0b21fdGFnXG5cblxubGV0IGludF90YWcgPSAxMDAwXG5sZXQgb3V0X29mX2hlYXBfdGFnID0gMTAwMVxubGV0IHVuYWxpZ25lZF90YWcgPSAxMDAyXG5cbm1vZHVsZSBDbG9zdXJlID0gc3RydWN0XG4gIHR5cGUgaW5mbyA9IHtcbiAgICBhcml0eTogaW50O1xuICAgIHN0YXJ0X2VudjogaW50O1xuICB9XG5cbiAgbGV0IGluZm9fb2ZfcmF3IChpbmZvIDogbmF0aXZlaW50KSA9XG4gICAgbGV0IG9wZW4gTmF0aXZlaW50IGluXG4gICAgbGV0IGFyaXR5ID1cbiAgICAgICgqIHNpZ25lZDogbmVnYXRpdmUgZm9yIHR1cGxlZCBmdW5jdGlvbnMgKilcbiAgICAgIGlmIFN5cy53b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyA1NilcbiAgICAgIGVsc2VcbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDI0KVxuICAgIGluXG4gICAgbGV0IHN0YXJ0X2VudiA9XG4gICAgICAoKiBzdGFydF9lbnYgaXMgdW5zaWduZWQsIGJ1dCB3ZSBrbm93IGl0IGNhbiBhbHdheXMgZml0IGFuIE9DYW1sXG4gICAgICAgICBpbnRlZ2VyIHNvIHdlIHVzZSBbdG9faW50XSBpbnN0ZWFkIG9mIFt1bnNpZ25lZF90b19pbnRdLiAqKVxuICAgICAgdG9faW50IChzaGlmdF9yaWdodF9sb2dpY2FsIChzaGlmdF9sZWZ0IGluZm8gOCkgOSkgaW5cbiAgICB7IGFyaXR5OyBzdGFydF9lbnYgfVxuXG4gICgqIG5vdGU6IHdlIGV4cGVjdCBhIGNsb3N1cmUsIG5vdCBhbiBpbmZpeCBwb2ludGVyICopXG4gIGxldCBpbmZvIChvYmogOiB0KSA9XG4gICAgYXNzZXJ0ICh0YWcgb2JqID0gY2xvc3VyZV90YWcpO1xuICAgIGluZm9fb2ZfcmF3IChyYXdfZmllbGQgb2JqIDEpXG5lbmRcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbmxldCBleHRlbnNpb25fY29uc3RydWN0b3IgPSBFeHRlbnNpb25fY29uc3RydWN0b3Iub2ZfdmFsXG5sZXQgZXh0ZW5zaW9uX25hbWUgPSBFeHRlbnNpb25fY29uc3RydWN0b3IubmFtZVxubGV0IGV4dGVuc2lvbl9pZCA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5pZFxuXG5tb2R1bGUgRXBoZW1lcm9uID0gc3RydWN0XG4gIHR5cGUgb2JqX3QgPSB0XG5cbiAgdHlwZSB0ICgqKiBlcGhlbWVyb24gKilcblxuICAgKCoqIFRvIGNoYW5nZSBpbiBzeW5jIHdpdGggd2Vhay5oICopXG4gIGxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcbiAgbGV0IG1heF9lcGhlX2xlbmd0aCA9IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9lcGhlX2NyZWF0ZVwiOztcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEludGVybmFscyBvZiBmb3JjaW5nIGxhenkgdmFsdWVzLiAqKVxuXG50eXBlICdhIHQgPSAnYSBsYXp5X3RcblxuZXhjZXB0aW9uIFVuZGVmaW5lZFxuXG5sZXQgcmFpc2VfdW5kZWZpbmVkID0gT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBVbmRlZmluZWQpXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6IE9iai50IC0+IE9iai50IC0+IHVuaXQgPSBcImNhbWxfb2JqX21ha2VfZm9yd2FyZFwiXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gICAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICAgIHJlc3VsdFxuICB3aXRoIGUgLT5cbiAgICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgKE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgZSkpO1xuICAgIHJhaXNlIGVcblxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfdmFsX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICByZXN1bHRcblxuXG4oKiBbZm9yY2VdIGlzIG5vdCB1c2VkLCBzaW5jZSBbTGF6eS5mb3JjZV0gaXMgZGVjbGFyZWQgYXMgYSBwcmltaXRpdmVcbiAgIHdob3NlIGNvZGUgaW5saW5lcyB0aGUgdGFnIHRlc3RzIG9mIGl0cyBhcmd1bWVudCwgZXhjZXB0IHdoZW4gYWZsXG4gICBpbnN0cnVtZW50YXRpb24gaXMgdHVybmVkIG9uLiAqKVxuXG5sZXQgZm9yY2UgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gICgqIFVzaW5nIFtTeXMub3BhcXVlX2lkZW50aXR5XSBwcmV2ZW50cyB0d28gcG90ZW50aWFsIHByb2JsZW1zOlxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBoYXZlIEZvcndhcmRfdGFnLCB0aGVuIGl0cyB0YWcgY291bGQgaGF2ZVxuICAgICAgIGNoYW5nZWQgZHVyaW5nIEdDLCBzbyB0aGF0IGluZm9ybWF0aW9uIG11c3QgYmUgZm9yZ290dGVuIChzZWUgR1BSIzcxM1xuICAgICAgIGFuZCBpc3N1ZSAjNzMwMSlcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgaW1tdXRhYmxlLCB0aGVuIGlmIHRoZSBjb21waWxlclxuICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBsYXN0IGJyYW5jaCBpcyBub3QgdGFrZW4gaXQgd2lsbCBpc3N1ZSBhXG4gICAgICAgd2FybmluZyA1OSAobW9kaWZpY2F0aW9uIG9mIGFuIGltbXV0YWJsZSB2YWx1ZSkgKilcbiAgbGV0IGx6diA9IFN5cy5vcGFxdWVfaWRlbnRpdHkgbHp2IGluXG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfbGF6eV9ibG9jayBsenZcblxuXG5sZXQgZm9yY2VfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIGx6dlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAoJ2EsICdlKSB0ID0gKCdhLCAnZSkgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnZVxuXG5sZXQgb2sgdiA9IE9rIHZcbmxldCBlcnJvciBlID0gRXJyb3IgZVxubGV0IHZhbHVlIHIgfmRlZmF1bHQgPSBtYXRjaCByIHdpdGggT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5sZXQgZ2V0X29rID0gZnVuY3Rpb24gT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBFcnJvciBfXCJcbmxldCBnZXRfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGUgfCBPayBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIE9rIF9cIlxubGV0IGJpbmQgciBmID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBqb2luID0gZnVuY3Rpb24gT2sgciAtPiByIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXAgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gT2sgKGYgdikgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcF9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBFcnJvciAoZiBlKSB8IE9rIF8gYXMgdiAtPiB2XG5sZXQgZm9sZCB+b2sgfmVycm9yID0gZnVuY3Rpb24gT2sgdiAtPiBvayB2IHwgRXJyb3IgZSAtPiBlcnJvciBlXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gT2sgdiAtPiBmIHYgfCBFcnJvciBfIC0+ICgpXG5sZXQgaXRlcl9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBmIGUgfCBPayBfIC0+ICgpXG5sZXQgaXNfb2sgPSBmdW5jdGlvbiBPayBfIC0+IHRydWUgfCBFcnJvciBfIC0+IGZhbHNlXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBfIC0+IHRydWUgfCBPayBfIC0+IGZhbHNlXG5cbmxldCBlcXVhbCB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBfLCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IE9rIF8sIEVycm9yIF8gLT4gLTFcbnwgRXJyb3IgXywgT2sgXyAtPiAxXG5cbmxldCB0b19vcHRpb24gPSBmdW5jdGlvbiBPayB2IC0+IFNvbWUgdiB8IEVycm9yIF8gLT4gTm9uZVxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBPayB2IC0+IFt2XSB8IEVycm9yIF8gLT4gW11cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBPayB2IC0+IFNlcS5yZXR1cm4gdiB8IEVycm9yIF8gLT4gU2VxLmVtcHR5XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgVXRpbHMgYXJvdW5kIGNoYXJ9XG5cbiAgICBAc2luY2UgMC4xNCAqKVxuXG5pbmNsdWRlIENoYXJcblxubGV0IHBwX2J1ZiA9IEJ1ZmZlci5hZGRfY2hhclxubGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2NoYXJcbmxldCBvZl9pbnRfZXhuID0gQ2hhci5jaHJcbmxldCBvZl9pbnQgYyA9IHRyeSBTb21lIChvZl9pbnRfZXhuIGMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcbmxldCB0b19pbnQgPSBDaGFyLmNvZGVcbmxldCB0b19zdHJpbmcgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA9IClcbiAgbGV0ICggPD4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD4gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGNvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdW5zYWZlX2NocjogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBjaHIgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPiAyNTUgdGhlbiBpbnZhbGlkX2FyZyBcIkNoYXIuY2hyXCIgZWxzZSB1bnNhZmVfY2hyIG5cblxuZXh0ZXJuYWwgYnl0ZXNfY3JlYXRlOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCBlc2NhcGVkID0gZnVuY3Rpb25cbiAgfCAnXFwnJyAtPiBcIlxcXFwnXCJcbiAgfCAnXFxcXCcgLT4gXCJcXFxcXFxcXFwiXG4gIHwgJ1xcbicgLT4gXCJcXFxcblwiXG4gIHwgJ1xcdCcgLT4gXCJcXFxcdFwiXG4gIHwgJ1xccicgLT4gXCJcXFxcclwiXG4gIHwgJ1xcYicgLT4gXCJcXFxcYlwiXG4gIHwgJyAnIC4uICd+JyBhcyBjIC0+XG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAxIGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCBjO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG4gIHwgYyAtPlxuICAgICAgbGV0IG4gPSBjb2RlIGMgaW5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDQgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwICdcXFxcJztcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAxICh1bnNhZmVfY2hyICg0OCArIG4gLyAxMDApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAyICh1bnNhZmVfY2hyICg0OCArIChuIC8gMTApIG1vZCAxMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDMgKHVuc2FmZV9jaHIgKDQ4ICsgbiBtb2QgMTApKTtcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuXG5sZXQgbG93ZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onXG4gIHwgJ1xcMTkyJyAuLiAnXFwyMTQnXG4gIHwgJ1xcMjE2JyAuLiAnXFwyMjInIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyArIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgdXBwZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnYScgLi4gJ3onXG4gIHwgJ1xcMjI0JyAuLiAnXFwyNDYnXG4gIHwgJ1xcMjQ4JyAuLiAnXFwyNTQnIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgbG93ZXJjYXNlX2FzY2lpID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onIGFzIGMgLT4gdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6JyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjIC0gMzIpXG4gIHwgYyAtPiBjXG5cbnR5cGUgdCA9IGNoYXJcblxubGV0IGNvbXBhcmUgYzEgYzIgPSBjb2RlIGMxIC0gY29kZSBjMlxubGV0IGVxdWFsIChjMTogdCkgKGMyOiB0KSA9IGNvbXBhcmUgYzEgYzIgPSAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIHN0cmluZy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIHN0cmluZ19sZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2ZpbGxfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGJ5dGVzID0gXCIlYnl0ZXNfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV9ibGl0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbmxldCBtYWtlIG4gYyA9XG4gIGxldCBzID0gY3JlYXRlIG4gaW5cbiAgdW5zYWZlX2ZpbGwgcyAwIG4gYztcbiAgc1xuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIGZvciBpID0gMCB0byBuIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgcyBpIChmIGkpXG4gIGRvbmU7XG4gIHNcblxubGV0IGVtcHR5ID0gY3JlYXRlIDBcblxubGV0IGNvcHkgcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgdW5zYWZlX2JsaXQgcyAwIHIgMCBsZW47XG4gIHJcblxubGV0IHRvX3N0cmluZyBiID0gdW5zYWZlX3RvX3N0cmluZyAoY29weSBiKVxubGV0IG9mX3N0cmluZyBzID0gY29weSAodW5zYWZlX29mX3N0cmluZyBzKVxuXG5sZXQgc3ViIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLnN1YiAvIEJ5dGVzLnN1YlwiXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgICB1bnNhZmVfYmxpdCBzIG9mcyByIDAgbGVuO1xuICAgIHJcbiAgZW5kXG5cbmxldCBzdWJfc3RyaW5nIGIgb2ZzIGxlbiA9IHVuc2FmZV90b19zdHJpbmcgKHN1YiBiIG9mcyBsZW4pXG5cbigqIGFkZGl0aW9uIHdpdGggYW4gb3ZlcmZsb3cgY2hlY2sgKilcbmxldCAoKyspIGEgYiA9XG4gIGxldCBjID0gYSArIGIgaW5cbiAgbWF0Y2ggYSA8IDAsIGIgPCAwLCBjIDwgMCB3aXRoXG4gIHwgdHJ1ZSAsIHRydWUgLCBmYWxzZVxuICB8IGZhbHNlLCBmYWxzZSwgdHJ1ZSAgLT4gaW52YWxpZF9hcmcgXCJCeXRlcy5leHRlbmRcIiAoKiBvdmVyZmxvdyAqKVxuICB8IF8gLT4gY1xuXG5sZXQgZXh0ZW5kIHMgbGVmdCByaWdodCA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyArKyBsZWZ0ICsrIHJpZ2h0IGluXG4gIGxldCByID0gY3JlYXRlIGxlbiBpblxuICBsZXQgKHNyY29mZiwgZHN0b2ZmKSA9IGlmIGxlZnQgPCAwIHRoZW4gLWxlZnQsIDAgZWxzZSAwLCBsZWZ0IGluXG4gIGxldCBjcHlsZW4gPSBJbnQubWluIChsZW5ndGggcyAtIHNyY29mZikgKGxlbiAtIGRzdG9mZikgaW5cbiAgaWYgY3B5bGVuID4gMCB0aGVuIHVuc2FmZV9ibGl0IHMgc3Jjb2ZmIHIgZHN0b2ZmIGNweWxlbjtcbiAgclxuXG5sZXQgZmlsbCBzIG9mcyBsZW4gYyA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmZpbGwgLyBCeXRlcy5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBzIG9mcyBsZW4gY1xuXG5sZXQgYmxpdCBzMSBvZnMxIHMyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnl0ZXMuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgczEgb2ZzMSBzMiBvZnMyIGxlblxuXG5sZXQgYmxpdF9zdHJpbmcgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IHN0cmluZ19sZW5ndGggczEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIHMyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuYmxpdCAvIEJ5dGVzLmJsaXRfc3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfYmxpdF9zdHJpbmcgczEgb2ZzMSBzMiBvZnMyIGxlblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiQnl0ZXMuY29uY2F0XCJcblxubGV0IHJlYyBzdW1fbGVuZ3RocyBhY2Mgc2VwbGVuID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2NcbiAgfCBoZCA6OiBbXSAtPiBsZW5ndGggaGQgKyBhY2NcbiAgfCBoZCA6OiB0bCAtPiBzdW1fbGVuZ3RocyAoZW5zdXJlX2dlIChsZW5ndGggaGQgKyBzZXBsZW4gKyBhY2MpIGFjYykgc2VwbGVuIHRsXG5cbmxldCByZWMgdW5zYWZlX2JsaXRzIGRzdCBwb3Mgc2VwIHNlcGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZHN0XG4gIHwgaGQgOjogW10gLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7IGRzdFxuICB8IGhkIDo6IHRsIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpO1xuICAgIHVuc2FmZV9ibGl0IHNlcCAwIGRzdCAocG9zICsgbGVuZ3RoIGhkKSBzZXBsZW47XG4gICAgdW5zYWZlX2JsaXRzIGRzdCAocG9zICsgbGVuZ3RoIGhkICsgc2VwbGVuKSBzZXAgc2VwbGVuIHRsXG5cbmxldCBjb25jYXQgc2VwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBlbXB0eVxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW5cbiAgICAgICAgICB1bnNhZmVfYmxpdHNcbiAgICAgICAgICAgIChjcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCBzMSBzMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBzMSBpblxuICBsZXQgbDIgPSBsZW5ndGggczIgaW5cbiAgbGV0IHIgPSBjcmVhdGUgKGwxICsgbDIpIGluXG4gIHVuc2FmZV9ibGl0IHMxIDAgciAwIGwxO1xuICB1bnNhZmVfYmxpdCBzMiAwIHIgbDEgbDI7XG4gIHJcblxuXG5leHRlcm5hbCBjaGFyX2NvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgY2hhcl9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgaXNfc3BhY2UgPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IHRyaW0gcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpIDwgbGVuICYmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGxldCBqID0gcmVmIChsZW4gLSAxKSBpblxuICB3aGlsZSAhaiA+PSAhaSAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFqKSBkb1xuICAgIGRlY3IgalxuICBkb25lO1xuICBpZiAhaiA+PSAhaSB0aGVuXG4gICAgc3ViIHMgIWkgKCFqIC0gIWkgKyAxKVxuICBlbHNlXG4gICAgZW1wdHlcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgIG4gOj0gIW4gK1xuICAgICAgKG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICB8ICdcXFwiJyB8ICdcXFxcJyB8ICdcXG4nIHwgJ1xcdCcgfCAnXFxyJyB8ICdcXGInIC0+IDJcbiAgICAgICB8ICcgJyAuLiAnficgLT4gMVxuICAgICAgIHwgXyAtPiA0KVxuICBkb25lO1xuICBpZiAhbiA9IGxlbmd0aCBzIHRoZW4gY29weSBzIGVsc2UgYmVnaW5cbiAgICBsZXQgcycgPSBjcmVhdGUgIW4gaW5cbiAgICBuIDo9IDA7XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgICAgYmVnaW4gbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAoJ1xcXCInIHwgJ1xcXFwnKSBhcyBjIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiBjXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAnbidcbiAgICAgIHwgJ1xcdCcgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICd0J1xuICAgICAgfCAnXFxyJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3InXG4gICAgICB8ICdcXGInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAnYidcbiAgICAgIHwgKCcgJyAuLiAnficpIGFzIGMgLT4gdW5zYWZlX3NldCBzJyAhbiBjXG4gICAgICB8IGMgLT5cbiAgICAgICAgICBsZXQgYSA9IGNoYXJfY29kZSBjIGluXG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIGEgLyAxMDApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgKGEgLyAxMCkgbW9kIDEwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIGEgbW9kIDEwKSk7XG4gICAgICBlbmQ7XG4gICAgICBpbmNyIG5cbiAgICBkb25lO1xuICAgIHMnXG4gIGVuZFxuXG5sZXQgbWFwIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IHMgaSkpIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IG1hcGkgZiBzID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBsID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG8gdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICBkb25lO1xuICAhclxuXG5sZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDAgZG9cbiAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICBkb25lO1xuICAhclxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsIHAgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBzIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgbG93ZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG5sZXQgYXBwbHkxIGYgcyA9XG4gIGlmIGxlbmd0aCBzID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY29weSBzIGluXG4gICAgdW5zYWZlX3NldCByIDAgKGYodW5zYWZlX2dldCBzIDApKTtcbiAgICByXG4gIGVuZFxuXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlX2FzY2lpIHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZV9hc2NpaSBzXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgZW5kc193aXRoIH5zdWZmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fc3VmID0gbGVuZ3RoIHN1ZmZpeCBpblxuICBsZXQgZGlmZiA9IGxlbl9zIC0gbGVuX3N1ZiBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3N1ZiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyAoZGlmZiArIGkpIDw+IHVuc2FmZV9nZXQgc3VmZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gZGlmZiA+PSAwICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlYyBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSBpbmRleF9yZWMgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X29wdCBzIGMgPSBpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5pbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICBpbmRleF9yZWNfb3B0IHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbSAvIEJ5dGVzLnJpbmRleF9mcm9tXCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWMgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tX29wdCAvIEJ5dGVzLnJpbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjX29wdCBzIGkgY1xuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5jb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKGluZGV4X3JlYyBzIGwgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgY29udGFpbnMgcyBjID0gY29udGFpbnNfZnJvbSBzIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5cbnR5cGUgdCA9IGJ5dGVzXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmV4dGVybmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfYnl0ZXNfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHNwbGl0X29uX2NoYXIgc2VwIHMgPVxuICBsZXQgciA9IHJlZiBbXSBpblxuICBsZXQgaiA9IHJlZiAobGVuZ3RoIHMpIGluXG4gIGZvciBpID0gbGVuZ3RoIHMgLSAxIGRvd250byAwIGRvXG4gICAgaWYgdW5zYWZlX2dldCBzIGkgPSBzZXAgdGhlbiBiZWdpblxuICAgICAgciA6PSBzdWIgcyAoaSArIDEpICghaiAtIGkgLSAxKSA6OiAhcjtcbiAgICAgIGogOj0gaVxuICAgIGVuZFxuICBkb25lO1xuICBzdWIgcyAwICFqIDo6ICFyXG5cbigqIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGltcGxlbWVudGVkIHZpYSBvdGhlciBkZXByZWNhdGVkIGZ1bmN0aW9ucyAqKVxuW0BAQG9jYW1sLndhcm5pbmcgXCItM1wiXVxubGV0IHVwcGVyY2FzZSBzID0gbWFwIENoYXIudXBwZXJjYXNlIHNcbmxldCBsb3dlcmNhc2UgcyA9IG1hcCBDaGFyLmxvd2VyY2FzZSBzXG5cbmxldCBjYXBpdGFsaXplIHMgPSBhcHBseTEgQ2hhci51cHBlcmNhc2Ugc1xubGV0IHVuY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIubG93ZXJjYXNlIHNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGxldCBidWYgPSByZWYgKG1ha2UgMjU2ICdcXDAwMCcpIGluXG4gIGxldCByZXNpemUgKCkgPVxuICAgICgqIHJlc2l6ZSAqKVxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1pbiAoMiAqIGxlbmd0aCAhYnVmKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICBpZiBsZW5ndGggIWJ1ZiA9IG5ld19sZW4gdGhlbiBmYWlsd2l0aCBcIkJ5dGVzLm9mX3NlcTogY2Fubm90IGdyb3cgYnl0ZXNcIjtcbiAgICBsZXQgbmV3X2J1ZiA9IG1ha2UgbmV3X2xlbiAnXFwwMDAnIGluXG4gICAgYmxpdCAhYnVmIDAgbmV3X2J1ZiAwICFuO1xuICAgIGJ1ZiA6PSBuZXdfYnVmXG4gIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBjIC0+XG4gICAgICAgaWYgIW4gPSBsZW5ndGggIWJ1ZiB0aGVuIHJlc2l6ZSgpO1xuICAgICAgIHNldCAhYnVmICFuIGM7XG4gICAgICAgaW5jciBuKVxuICAgIGk7XG4gIHN1YiAhYnVmIDAgIW5cblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuKCogVGhlIGdldF8gZnVuY3Rpb25zIGFyZSBhbGwgZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcblxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZ1XCJcbmV4dGVybmFsIGdldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9ieXRlc19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX2J5dGVzX2dldDY0XCJcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBzZXRfaW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2XCJcbmV4dGVybmFsIHNldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMlwiXG5leHRlcm5hbCBzZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjRcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuICBlbHNlIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuXG5sZXQgZ2V0X2ludDggYiBpID1cbiAgKChnZXRfdWludDggYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDgpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDgpXG5cbmxldCBnZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfaW50MTZfbmUgYiBpID1cbiAgKChnZXRfdWludDE2X25lIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfbGUgYiBpID1cbiAgKChnZXRfdWludDE2X2xlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfYmUgYiBpID1cbiAgKChnZXRfdWludDE2X2JlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MzJfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDMyX2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeFxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfYmUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4IGVsc2VcbiAgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIChzd2FwMTYgeClcblxubGV0IHNldF9pbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MTZfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF91aW50OCA9IHNldF9pbnQ4XG5sZXQgc2V0X3VpbnQxNl9uZSA9IHNldF9pbnQxNl9uZVxubGV0IHNldF91aW50MTZfYmUgPSBzZXRfaW50MTZfYmVcbmxldCBzZXRfdWludDE2X2xlID0gc2V0X2ludDE2X2xlXG5cbigqIFVURiBjb2RlY3MgYW5kIHZhbGlkYXRpb25zICopXG5cbmxldCBkZWNfaW52YWxpZCA9IFVjaGFyLnV0Zl9kZWNvZGVfaW52YWxpZFxubGV0W0BpbmxpbmVdIGRlY19yZXQgbiB1ID0gVWNoYXIudXRmX2RlY29kZSBuIChVY2hhci51bnNhZmVfb2ZfaW50IHUpXG5cbigqIEluIGNhc2Ugb2YgZGVjb2RpbmcgZXJyb3IsIGlmIHdlIGVycm9yIG9uIHRoZSBmaXJzdCBieXRlLCB3ZVxuICAgY29uc3VtZSB0aGUgYnl0ZSwgb3RoZXJ3aXNlIHdlIGNvbnN1bWUgdGhlIFtuXSBieXRlcyBwcmVjZWVkaW5nXG4gICB0aGUgZXJyb3JpbmcgYnl0ZS5cblxuICAgVGhpcyBtZWFucyB0aGF0IGlmIGEgY2xpZW50IHVzZXMgZGVjb2RlcyB3aXRob3V0IGNhcmluZyBhYm91dFxuICAgdmFsaWRpdHkgaXQgbmF0dXJhbGx5IHJlcGxhY2UgYm9ndXMgZGF0YSB3aXRoIFVjaGFyLnJlcCBhY2NvcmRpbmdcbiAgIHRvIHRoZSBXSEFUV0cgRW5jb2Rpbmcgc3RhbmRhcmQuIE90aGVyIHNjaGVtZXMgYXJlIHBvc3NpYmxlIGJ5XG4gICBjb25zdWx0aW5nIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyBvbiBpbnZhbGlkIGRlY29kZXMuIEZvciBtb3JlXG4gICBkZXRhaWxzIHNlZSBodHRwczovL2hzaXZvbmVuLmZpL2Jyb2tlbi11dGYtOC9cblxuICAgRm9yIHRoaXMgcmVhc29uIGluIFtnZXRfdXRmXzhfdWNoYXJdIHdlIGdyYWR1YWxseSBjaGVjayB0aGUgbmV4dFxuICAgYnl0ZSBpcyBhdmFpbGFibGUgcmF0aGVyIHRoYW4gZG9pbmcgaXQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICBmaXJzdCBieXRlLiBDb250cmFzdCB3aXRoIFtpc192YWxpZF91dGZfOF0uICopXG5cbigqIFVURi04ICopXG5cbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3hCRiBiID0gYiBsc3IgNiA8PiAwYjEwXG5sZXRbQGlubGluZV0gbm90X2luX3hBMF90b194QkYgYiA9IGIgbHNyIDUgPD4gMGIxMDFcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g5RiBiID0gYiBsc3IgNSA8PiAwYjEwMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94OTBfdG9feEJGIGIgPSBiIDwgMHg5MCB8fCAweEJGIDwgYlxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feDhGIGIgPSBiIGxzciA0IDw+IDB4OFxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfMiBiMCBiMSA9XG4gICgoYjAgbGFuZCAweDFGKSBsc2wgNikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIgPVxuICAoKGIwIGxhbmQgMHgwRikgbHNsIDEyKSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCA2KSBsb3JcbiAgKChiMiBsYW5kIDB4M0YpKVxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMyA9XG4gICgoYjAgbGFuZCAweDA3KSBsc2wgMTgpIGxvclxuICAoKGIxIGxhbmQgMHgzRikgbHNsIDEyKSBsb3JcbiAgKChiMiBsYW5kIDB4M0YpIGxzbCA2KSBsb3JcbiAgKChiMyBsYW5kIDB4M0YpKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIGIgaSA9XG4gIGxldCBiMCA9IGdldF91aW50OCBiIGkgaW4gKCogcmFpc2VzIGlmIFtpXSBpcyBub3QgYSB2YWxpZCBpbmRleC4gKilcbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgYjAgd2l0aCAoKiBTZWUgVGhlIFVuaWNvZGUgU3RhbmRhcmQsIFRhYmxlIDMuNyAqKVxuICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBkZWNfcmV0IDEgYjBcbiAgfCAnXFx4QzInIC4uICdcXHhERicgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgZGVjX3JldCAyICh1dGZfOF91Y2hhcl8yIGIwIGIxKVxuICB8ICdcXHhFMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feEEwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFRCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3g5RiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEYwJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94OTBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8ICdcXHhGMScgLi4gJ1xceEYzJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8ICdcXHhGNCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3g4RiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCBfIC0+IGRlY19pbnZhbGlkIDFcblxubGV0IHNldF91dGZfOF91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweDAwN0YgLT5cbiAgICAgIHNldF91aW50OCBiIGkgdTtcbiAgICAgIDFcbiAgfCB1IHdoZW4gdSA8PSAweDA3RkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEMwIGxvciAodSBsc3IgNikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDIpXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhFMCBsb3IgKHUgbHNyIDEyKSk7XG4gICAgICAgc2V0IGIgKGkgKyAxKSAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAzKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhGMCBsb3IgKHUgbHNyIDE4KSk7XG4gICAgICAgc2V0IGIgKGkgKyAxKSAoMHg4MCBsb3IgKCh1IGxzciAxMikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgKGkgKyAyKSAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICA0KVxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfOCBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50OCBpblxuICAgIG1hdGNoIENoYXIudW5zYWZlX2NociAoZ2V0IGIgaSkgd2l0aFxuICAgIHwgJ1xceDAwJyAuLiAnXFx4N0YnIC0+IGxvb3AgbWF4IGIgKGkgKyAxKVxuICAgIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3hBMF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RTEnIC4uICdcXHhFQycgfCAnXFx4RUUnIC4uICdcXHhFRicgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEVEJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194OUYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjAnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDkwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGNCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDhGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8IF8gLT4gZmFsc2VcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcblxuKCogVVRGLTE2QkUgKilcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBiIGkgPVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBpZiBpID0gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gIG1hdGNoIGdldCBiIGkgd2l0aFxuICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gZGVjX3JldCAyIHVcbiAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBkZWNfaW52YWxpZCAyXG4gIHwgaGkgLT4gKCogY29tYmluZSBbaGldIHdpdGggYSBsb3cgc3Vycm9nYXRlICopXG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgKG1heCAtIGkgKyAxKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfaW52YWxpZCAyICgqIHJldHJ5IGhlcmUgKilcbiAgICAgIHwgbG8gLT5cbiAgICAgICAgICBsZXQgdSA9ICgoKGhpIGxhbmQgMHgzRkYpIGxzbCAxMCkgbG9yIChsbyBsYW5kIDB4M0ZGKSkgKyAweDEwMDAwIGluXG4gICAgICAgICAgZGVjX3JldCA0IHVcblxubGV0IHNldF91dGZfMTZiZV91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQxNl9iZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlIChzZXQgYiBpIHU7IDIpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgICBsZXQgaGkgPSAoMHhEODAwIGxvciAodScgbHNyIDEwKSkgaW5cbiAgICAgIGxldCBsbyA9ICgweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSkgaW5cbiAgICAgIHNldCBiIGkgaGk7IHNldCBiIChpICsgMikgbG87IDRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfYmUgaW5cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgaWYgaSA9IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gbG9vcCBtYXggYiAoaSArIDIpXG4gICAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBmYWxzZVxuICAgIHwgX2hpIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBmYWxzZVxuICAgICAgICB8IF9sbyAtPiBsb29wIG1heCBiIChpICsgNClcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcblxuKCogVVRGLTE2TEUgKilcblxubGV0IGdldF91dGZfMTZsZV91Y2hhciBiIGkgPVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBpZiBpID0gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gIG1hdGNoIGdldCBiIGkgd2l0aFxuICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gZGVjX3JldCAyIHVcbiAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBkZWNfaW52YWxpZCAyXG4gIHwgaGkgLT4gKCogY29tYmluZSBbaGldIHdpdGggYSBsb3cgc3Vycm9nYXRlICopXG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgKG1heCAtIGkgKyAxKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfaW52YWxpZCAyICgqIHJldHJ5IGhlcmUgKilcbiAgICAgIHwgbG8gLT5cbiAgICAgICAgICBsZXQgdSA9ICgoKGhpIGxhbmQgMHgzRkYpIGxzbCAxMCkgbG9yIChsbyBsYW5kIDB4M0ZGKSkgKyAweDEwMDAwIGluXG4gICAgICAgICAgZGVjX3JldCA0IHVcblxubGV0IHNldF91dGZfMTZsZV91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQxNl9sZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlIChzZXQgYiBpIHU7IDIpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgICBsZXQgaGkgPSAoMHhEODAwIGxvciAodScgbHNyIDEwKSkgaW5cbiAgICAgIGxldCBsbyA9ICgweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSkgaW5cbiAgICAgIHNldCBiIGkgaGk7IHNldCBiIChpICsgMikgbG87IDRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfbGUgaW5cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgaWYgaSA9IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gbG9vcCBtYXggYiAoaSArIDIpXG4gICAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBmYWxzZVxuICAgIHwgX2hpIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBmYWxzZVxuICAgICAgICB8IF9sbyAtPiBsb29wIG1heCBiIChpICsgNClcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IEdhbGxpdW0sIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU3RyaW5nIG9wZXJhdGlvbnMsIGJhc2VkIG9uIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMuIFdoZW4geW91IG1vZGlmeSB0aGUgb25lIGluIHRoaXMgZmlsZSB5b3UgbmVlZCB0b1xuICAgbW9kaWZ5IGl0cyBkdXBsaWNhdGUgaW4gYnl0ZXMubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGdldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlc3RyaW5nX3NhZmVfc2V0XCJcbmV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfc3RyaW5nXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogc3RyaW5nIC0+IGludCAtPiAgYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbm1vZHVsZSBCID0gQnl0ZXNcblxubGV0IGJ0cyA9IEIudW5zYWZlX3RvX3N0cmluZ1xubGV0IGJvcyA9IEIudW5zYWZlX29mX3N0cmluZ1xuXG5sZXQgbWFrZSBuIGMgPVxuICBCLm1ha2UgbiBjIHw+IGJ0c1xubGV0IGluaXQgbiBmID1cbiAgQi5pbml0IG4gZiB8PiBidHNcbmxldCBlbXB0eSA9IFwiXCJcbmxldCBjb3B5IHMgPVxuICBCLmNvcHkgKGJvcyBzKSB8PiBidHNcbmxldCBvZl9ieXRlcyA9IEIudG9fc3RyaW5nXG5sZXQgdG9fYnl0ZXMgPSBCLm9mX3N0cmluZ1xubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBCLnN1YiAoYm9zIHMpIG9mcyBsZW4gfD4gYnRzXG5sZXQgZmlsbCA9XG4gIEIuZmlsbFxubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCA9ICggXiApXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXJpIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG5sZXQgbWFwIGYgcyA9XG4gIEIubWFwIGYgKGJvcyBzKSB8PiBidHNcbmxldCBtYXBpIGYgcyA9XG4gIEIubWFwaSBmIChib3MgcykgfD4gYnRzXG5sZXQgZm9sZF9yaWdodCBmIHggYSA9XG4gIEIuZm9sZF9yaWdodCBmIChib3MgeCkgYVxubGV0IGZvbGRfbGVmdCBmIGEgeCA9XG4gIEIuZm9sZF9sZWZ0IGYgYSAoYm9zIHgpXG5sZXQgZXhpc3RzIGYgcyA9XG4gIEIuZXhpc3RzIGYgKGJvcyBzKVxubGV0IGZvcl9hbGwgZiBzID1cbiAgQi5mb3JfYWxsIGYgKGJvcyBzKVxuXG4oKiBCZXdhcmU6IHdlIGNhbm5vdCB1c2UgQi50cmltIG9yIEIuZXNjYXBlIGJlY2F1c2UgdGhleSBhbHdheXMgbWFrZSBhXG4gICBjb3B5LCBidXQgU3RyaW5nLm1saSBzcGVsbHMgb3V0IHNvbWUgY2FzZXMgd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkXG4gICB0byBtYWtlIGEgY29weS4gKilcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBpZiBzID0gXCJcIiB0aGVuIHNcbiAgZWxzZSBpZiBpc19zcGFjZSAodW5zYWZlX2dldCBzIDApIHx8IGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgKGxlbmd0aCBzIC0gMSkpXG4gICAgdGhlbiBidHMgKEIudHJpbSAoYm9zIHMpKVxuICBlbHNlIHNcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCByZWMgZXNjYXBlX2lmX25lZWRlZCBzIG4gaSA9XG4gICAgaWYgaSA+PSBuIHRoZW4gcyBlbHNlXG4gICAgICBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICdcXFwiJyB8ICdcXFxcJyB8ICdcXDAwMCcuLidcXDAzMScgfCAnXFwxMjcnLi4gJ1xcMjU1JyAtPlxuICAgICAgICAgIGJ0cyAoQi5lc2NhcGVkIChib3MgcykpXG4gICAgICB8IF8gLT4gZXNjYXBlX2lmX25lZWRlZCBzIG4gKGkrMSlcbiAgaW5cbiAgZXNjYXBlX2lmX25lZWRlZCBzIChsZW5ndGggcykgMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIGluZGV4X3JlYyBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSBpbmRleF9yZWMgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleCBzIGMgPSBpbmRleF9yZWMgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X29wdCBzIGMgPSBpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbSAvIEJ5dGVzLmluZGV4X2Zyb21cIiBlbHNlXG4gICAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5pbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICBpbmRleF9yZWNfb3B0IHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjIHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgcmluZGV4X3JlYyBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbSAvIEJ5dGVzLnJpbmRleF9mcm9tXCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWMgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIHJpbmRleF9yZWNfb3B0IHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tX29wdCAvIEJ5dGVzLnJpbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjX29wdCBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5jb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKGluZGV4X3JlYyBzIGwgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgY29udGFpbnMgcyBjID0gY29udGFpbnNfZnJvbSBzIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yY29udGFpbnNfZnJvbSAvIEJ5dGVzLnJjb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKHJpbmRleF9yZWMgcyBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgcyA9XG4gIEIudXBwZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgbG93ZXJjYXNlX2FzY2lpIHMgPVxuICBCLmxvd2VyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IHVuY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi51bmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgZW5kc193aXRoIH5zdWZmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fc3VmID0gbGVuZ3RoIHN1ZmZpeCBpblxuICBsZXQgZGlmZiA9IGxlbl9zIC0gbGVuX3N1ZiBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3N1ZiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyAoZGlmZiArIGkpIDw+IHVuc2FmZV9nZXQgc3VmZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gZGlmZiA+PSAwICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9XG4gIEIudXBwZXJjYXNlIChib3MgcykgfD4gYnRzXG5sZXQgbG93ZXJjYXNlIHMgPVxuICBCLmxvd2VyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGNhcGl0YWxpemUgcyA9XG4gIEIuY2FwaXRhbGl6ZSAoYm9zIHMpIHw+IGJ0c1xubGV0IHVuY2FwaXRhbGl6ZSBzID1cbiAgQi51bmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcblxudHlwZSB0ID0gc3RyaW5nXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmV4dGVybmFsIGVxdWFsIDogc3RyaW5nIC0+IHN0cmluZyAtPiBib29sID0gXCJjYW1sX3N0cmluZ19lcXVhbFwiIFtAQG5vYWxsb2NdXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9IGJvcyBzIHw+IEIudG9fc2VxXG5cbmxldCB0b19zZXFpIHMgPSBib3MgcyB8PiBCLnRvX3NlcWlcblxubGV0IG9mX3NlcSBnID0gQi5vZl9zZXEgZyB8PiBidHNcblxuKCogVVRGIGRlY29kZXJzIGFuZCB2YWxpZGF0b3JzICopXG5cbmxldCBnZXRfdXRmXzhfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzhfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzggcyA9IEIuaXNfdmFsaWRfdXRmXzggKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmJlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmJlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmJlIChib3MgcylcblxubGV0IGdldF91dGZfMTZsZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZsZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZsZSBzID0gQi5pc192YWxpZF91dGZfMTZsZSAoYm9zIHMpXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbmV4dGVybmFsIGdldF91aW50OCA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfc3RyaW5nX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX3N0cmluZ19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9zdHJpbmdfZ2V0NjRcIlxuXG5sZXQgZ2V0X2ludDggcyBpID0gQi5nZXRfaW50OCAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2xlIHMgaSA9IEIuZ2V0X3VpbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2JlIHMgaSA9IEIuZ2V0X3VpbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbmUgcyBpID0gQi5nZXRfaW50MTZfbmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2xlIHMgaSA9IEIuZ2V0X2ludDE2X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9iZSBzIGkgPSBCLmdldF9pbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfbGUgcyBpID0gQi5nZXRfaW50MzJfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2JlIHMgaSA9IEIuZ2V0X2ludDMyX2JlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9sZSBzIGkgPSBCLmdldF9pbnQ2NF9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfYmUgcyBpID0gQi5nZXRfaW50NjRfYmUgKGJvcyBzKSBpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBhcnJheXMuICopXG50eXBlICdhIHQgPSAnYSBhcnJheVxuXG4oKiBBcnJheSBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGxlbmd0aCA6ICdhIGFycmF5IC0+IGludCA9IFwiJWFycmF5X2xlbmd0aFwiXG5leHRlcm5hbCBnZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSA9IFwiJWFycmF5X3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVhcnJheV9zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV91bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfdW5zYWZlX3NldFwiXG5leHRlcm5hbCBtYWtlOiBpbnQgLT4gJ2EgLT4gJ2EgYXJyYXkgPSBcImNhbWxfbWFrZV92ZWN0XCJcbmV4dGVybmFsIGNyZWF0ZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCB1bnNhZmVfc3ViIDogJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9zdWJcIlxuZXh0ZXJuYWwgYXBwZW5kX3ByaW0gOiAnYSBhcnJheSAtPiAnYSBhcnJheSAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9hcHBlbmRcIlxuZXh0ZXJuYWwgY29uY2F0IDogJ2EgYXJyYXkgbGlzdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9jb25jYXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2JsaXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYXJyYXlfZmlsbFwiXG5leHRlcm5hbCBjcmVhdGVfZmxvYXQ6IGludCAtPiBmbG9hdCBhcnJheSA9IFwiY2FtbF9tYWtlX2Zsb2F0X3ZlY3RcIlxubGV0IG1ha2VfZmxvYXQgPSBjcmVhdGVfZmxvYXRcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGZvciB4ID0gMCB0byBwcmVkIHN4IGRvXG4gICAgdW5zYWZlX3NldCByZXMgeCAoY3JlYXRlIHN5IGluaXQpXG4gIGRvbmU7XG4gIHJlc1xuXG5sZXQgY3JlYXRlX21hdHJpeCA9IG1ha2VfbWF0cml4XG5cbmxldCBjb3B5IGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIHVuc2FmZV9zdWIgYSAwIGxcblxubGV0IGFwcGVuZCBhMSBhMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBhMSBpblxuICBpZiBsMSA9IDAgdGhlbiBjb3B5IGEyXG4gIGVsc2UgaWYgbGVuZ3RoIGEyID0gMCB0aGVuIHVuc2FmZV9zdWIgYTEgMCBsMVxuICBlbHNlIGFwcGVuZF9wcmltIGExIGEyXG5cbmxldCBzdWIgYSBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5zdWJcIlxuICBlbHNlIHVuc2FmZV9zdWIgYSBvZnMgbGVuXG5cbmxldCBmaWxsIGEgb2ZzIGxlbiB2ID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBhIG9mcyBsZW4gdlxuXG5sZXQgYmxpdCBhMSBvZnMxIGEyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIGExIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBhMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlblxuXG5sZXQgaXRlciBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IGl0ZXIyIGYgYSBiID1cbiAgaWYgbGVuZ3RoIGEgPD4gbGVuZ3RoIGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkgZG9uZVxuXG5sZXQgbWFwIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcCBmIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIE5vbmVcbiAgICBlbHNlXG4gICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU2V0cyBvdmVyIG9yZGVyZWQgdHlwZXMgKilcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUgZWx0XG4gICAgdHlwZSB0XG4gICAgdmFsIGVtcHR5OiB0XG4gICAgdmFsIGlzX2VtcHR5OiB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBlbHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGFkZDogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCBzaW5nbGV0b246IGVsdCAtPiB0XG4gICAgdmFsIHJlbW92ZTogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCB1bmlvbjogdCAtPiB0IC0+IHRcbiAgICB2YWwgaW50ZXI6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGRpc2pvaW50OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBkaWZmOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBzdWJzZXQ6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChlbHQgLT4gdW5pdCkgLT4gdCAtPiB1bml0XG4gICAgdmFsIG1hcDogKGVsdCAtPiBlbHQpIC0+IHQgLT4gdFxuICAgIHZhbCBmb2xkOiAoZWx0IC0+ICdhIC0+ICdhKSAtPiB0IC0+ICdhIC0+ICdhXG4gICAgdmFsIGZvcl9hbGw6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGV4aXN0czogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZmlsdGVyOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdFxuICAgIHZhbCBmaWx0ZXJfbWFwOiAoZWx0IC0+IGVsdCBvcHRpb24pIC0+IHQgLT4gdFxuICAgIHZhbCBwYXJ0aXRpb246IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0ICogdFxuICAgIHZhbCBjYXJkaW5hbDogdCAtPiBpbnRcbiAgICB2YWwgZWxlbWVudHM6IHQgLT4gZWx0IGxpc3RcbiAgICB2YWwgbWluX2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWluX2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBtYXhfZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtYXhfZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGNob29zZTogdCAtPiBlbHRcbiAgICB2YWwgY2hvb3NlX29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIHNwbGl0OiBlbHQgLT4gdCAtPiB0ICogYm9vbCAqIHRcbiAgICB2YWwgZmluZDogZWx0IC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfb3B0OiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmRfZmlyc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmRfbGFzdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBvZl9saXN0OiBlbHQgbGlzdCAtPiB0XG4gICAgdmFsIHRvX3NlcV9mcm9tIDogZWx0IC0+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+XG4gICAgICAgICAgICBsZXQgcmlnaHQsIGwgPSBzdWIgKG4gLSBubCAtIDEpIGwgaW5cbiAgICAgICAgICAgIGNyZWF0ZSBsZWZ0IG1pZCByaWdodCwgbFxuICAgICAgaW5cbiAgICAgIGZzdCAoc3ViIChMaXN0Lmxlbmd0aCBsKSBsKVxuXG4gICAgbGV0IG9mX2xpc3QgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gZW1wdHlcbiAgICAgIHwgW3gwXSAtPiBzaW5nbGV0b24geDBcbiAgICAgIHwgW3gwOyB4MV0gLT4gYWRkIHgxIChzaW5nbGV0b24geDApXG4gICAgICB8IFt4MDsgeDE7IHgyXSAtPiBhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzXSAtPiBhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzOyB4NF0gLT4gYWRkIHg0IChhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSkpXG4gICAgICB8IF8gLT4gb2Zfc29ydGVkX2xpc3QgKExpc3Quc29ydF91bmlxIE9yZC5jb21wYXJlIGwpXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIHMgeCAtPiBhZGQgeCBzKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgYyA9IHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHJlYyBzbm9jX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gc25vY19lbnVtIHIgKE1vcmUodiwgbCwgZSkpXG5cbiAgICBsZXQgcmVjIHJldl9zZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fcmV2X3NlcSBjID0gcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBzID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBzIGMgPSBtYXRjaCBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgcjsgdjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBzIEVuZClcbiAgZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9IHsgbXV0YWJsZSBjIDogJ2EgbGlzdDsgbXV0YWJsZSBsZW4gOiBpbnQ7IH1cblxuZXhjZXB0aW9uIEVtcHR5XG5cbmxldCBjcmVhdGUgKCkgPSB7IGMgPSBbXTsgbGVuID0gMDsgfVxuXG5sZXQgY2xlYXIgcyA9IHMuYyA8LSBbXTsgcy5sZW4gPC0gMFxuXG5sZXQgY29weSBzID0geyBjID0gcy5jOyBsZW4gPSBzLmxlbjsgfVxuXG5sZXQgcHVzaCB4IHMgPSBzLmMgPC0geCA6OiBzLmM7IHMubGVuIDwtIHMubGVuICsgMVxuXG5sZXQgcG9wIHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgaGRcbiAgfCBbXSAgICAgLT4gcmFpc2UgRW1wdHlcblxubGV0IHBvcF9vcHQgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBTb21lIGhkXG4gIHwgW10gICAgIC0+IE5vbmVcblxubGV0IHRvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBoZFxuICB8IFtdICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCB0b3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IFNvbWUgaGRcbiAgfCBbXSAgICAtPiBOb25lXG5cbmxldCBpc19lbXB0eSBzID0gKHMuYyA9IFtdKVxuXG5sZXQgbGVuZ3RoIHMgPSBzLmxlblxuXG5sZXQgaXRlciBmIHMgPSBMaXN0Lml0ZXIgZiBzLmNcblxubGV0IGZvbGQgZiBhY2MgcyA9IExpc3QuZm9sZF9sZWZ0IGYgYWNjIHMuY1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBMaXN0LnRvX3NlcSBzLmNcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBzID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBzIGc7XG4gIHNcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgRnJhbmNvaXMgUG90dGllciwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgSmVyZW1pZSBEaW1pbm8sIEphbmUgU3RyZWV0IEV1cm9wZSAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXhjZXB0aW9uIEVtcHR5XG5cbnR5cGUgJ2EgY2VsbCA9XG4gIHwgTmlsXG4gIHwgQ29ucyBvZiB7IGNvbnRlbnQ6ICdhOyBtdXRhYmxlIG5leHQ6ICdhIGNlbGwgfVxuXG50eXBlICdhIHQgPSB7XG4gIG11dGFibGUgbGVuZ3RoOiBpbnQ7XG4gIG11dGFibGUgZmlyc3Q6ICdhIGNlbGw7XG4gIG11dGFibGUgbGFzdDogJ2EgY2VsbFxufVxuXG5sZXQgY3JlYXRlICgpID0ge1xuICBsZW5ndGggPSAwO1xuICBmaXJzdCA9IE5pbDtcbiAgbGFzdCA9IE5pbFxufVxuXG5sZXQgY2xlYXIgcSA9XG4gIHEubGVuZ3RoIDwtIDA7XG4gIHEuZmlyc3QgPC0gTmlsO1xuICBxLmxhc3QgPC0gTmlsXG5cbmxldCBhZGQgeCBxID1cbiAgbGV0IGNlbGwgPSBDb25zIHtcbiAgICBjb250ZW50ID0geDtcbiAgICBuZXh0ID0gTmlsXG4gIH0gaW5cbiAgbWF0Y2ggcS5sYXN0IHdpdGhcbiAgfCBOaWwgLT5cbiAgICBxLmxlbmd0aCA8LSAxO1xuICAgIHEuZmlyc3QgPC0gY2VsbDtcbiAgICBxLmxhc3QgPC0gY2VsbFxuICB8IENvbnMgbGFzdCAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoICsgMTtcbiAgICBsYXN0Lm5leHQgPC0gY2VsbDtcbiAgICBxLmxhc3QgPC0gY2VsbFxuXG5sZXQgcHVzaCA9XG4gIGFkZFxuXG5sZXQgcGVlayBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IHJhaXNlIEVtcHR5XG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBjb250ZW50XG5cbmxldCBwZWVrX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudCB9IC0+IFNvbWUgY29udGVudFxuXG5sZXQgdG9wID1cbiAgcGVla1xuXG5sZXQgdGFrZSBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IHJhaXNlIEVtcHR5XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSAtPlxuICAgIGNsZWFyIHE7XG4gICAgY29udGVudFxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCAtIDE7XG4gICAgcS5maXJzdCA8LSBuZXh0O1xuICAgIGNvbnRlbnRcblxubGV0IHRha2Vfb3B0IHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gTm9uZVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIFNvbWUgY29udGVudFxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCAtIDE7XG4gICAgcS5maXJzdCA8LSBuZXh0O1xuICAgIFNvbWUgY29udGVudFxuXG5sZXQgcG9wID1cbiAgdGFrZVxuXG5sZXQgY29weSA9XG4gIGxldCByZWMgY29weSBxX3JlcyBwcmV2IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IHFfcmVzLmxhc3QgPC0gcHJldjsgcV9yZXNcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCByZXMgPSBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IGluXG4gICAgICBiZWdpbiBtYXRjaCBwcmV2IHdpdGhcbiAgICAgIHwgTmlsIC0+IHFfcmVzLmZpcnN0IDwtIHJlc1xuICAgICAgfCBDb25zIHAgLT4gcC5uZXh0IDwtIHJlc1xuICAgICAgZW5kO1xuICAgICAgY29weSBxX3JlcyByZXMgbmV4dFxuICBpblxuICBmdW4gcSAtPiBjb3B5IHsgbGVuZ3RoID0gcS5sZW5ndGg7IGZpcnN0ID0gTmlsOyBsYXN0ID0gTmlsIH0gTmlsIHEuZmlyc3RcblxubGV0IGlzX2VtcHR5IHEgPVxuICBxLmxlbmd0aCA9IDBcblxubGV0IGxlbmd0aCBxID1cbiAgcS5sZW5ndGhcblxubGV0IGl0ZXIgPVxuICBsZXQgcmVjIGl0ZXIgZiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgZiBjb250ZW50O1xuICAgICAgaXRlciBmIG5leHRcbiAgaW5cbiAgZnVuIGYgcSAtPiBpdGVyIGYgcS5maXJzdFxuXG5sZXQgZm9sZCA9XG4gIGxldCByZWMgZm9sZCBmIGFjY3UgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gYWNjdVxuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgbGV0IGFjY3UgPSBmIGFjY3UgY29udGVudCBpblxuICAgICAgZm9sZCBmIGFjY3UgbmV4dFxuICBpblxuICBmdW4gZiBhY2N1IHEgLT4gZm9sZCBmIGFjY3UgcS5maXJzdFxuXG5sZXQgdHJhbnNmZXIgcTEgcTIgPVxuICBpZiBxMS5sZW5ndGggPiAwIHRoZW5cbiAgICBtYXRjaCBxMi5sYXN0IHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgcTIubGVuZ3RoIDwtIHExLmxlbmd0aDtcbiAgICAgIHEyLmZpcnN0IDwtIHExLmZpcnN0O1xuICAgICAgcTIubGFzdCA8LSBxMS5sYXN0O1xuICAgICAgY2xlYXIgcTFcbiAgICB8IENvbnMgbGFzdCAtPlxuICAgICAgcTIubGVuZ3RoIDwtIHEyLmxlbmd0aCArIHExLmxlbmd0aDtcbiAgICAgIGxhc3QubmV4dCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcSA9XG4gIGxldCByZWMgYXV4IGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICB8IE5pbCAtPiBTZXEuTmlsXG4gICAgfCBDb25zIHsgY29udGVudD14OyBuZXh0OyB9IC0+IFNlcS5Db25zICh4LCBhdXggbmV4dClcbiAgaW5cbiAgYXV4IHEuZmlyc3RcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBxID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBxIGc7XG4gIHFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgRGFuaWVsIGRlIFJhdWdsYXVkcmUsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0gJ2EgY2VsbCBvcHRpb25cbmFuZCAnYSBjZWxsID0geyBtdXRhYmxlIGNvdW50IDogaW50OyBtdXRhYmxlIGRhdGEgOiAnYSBkYXRhIH1cbmFuZCAnYSBkYXRhID1cbiAgICBTZW1wdHlcbiAgfCBTY29ucyBvZiAnYSAqICdhIGRhdGFcbiAgfCBTYXBwIG9mICdhIGRhdGEgKiAnYSBkYXRhXG4gIHwgU2xhenkgb2YgJ2EgZGF0YSBMYXp5LnRcbiAgfCBTZ2VuIG9mICdhIGdlblxuICB8IFNidWZmaW8gOiBidWZmaW8gLT4gY2hhciBkYXRhXG5hbmQgJ2EgZ2VuID0geyBtdXRhYmxlIGN1cnIgOiAnYSBvcHRpb24gb3B0aW9uOyBmdW5jIDogaW50IC0+ICdhIG9wdGlvbiB9XG5hbmQgYnVmZmlvID1cbiAgeyBpYyA6IGluX2NoYW5uZWw7IGJ1ZmYgOiBieXRlczsgbXV0YWJsZSBsZW4gOiBpbnQ7IG11dGFibGUgaW5kIDogaW50IH1cblxuZXhjZXB0aW9uIEZhaWx1cmVcbmV4Y2VwdGlvbiBFcnJvciBvZiBzdHJpbmdcblxubGV0IGNvdW50ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IDBcbiAgfCBTb21lIHsgY291bnQgfSAtPiBjb3VudFxubGV0IGRhdGEgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gU2VtcHR5XG4gIHwgU29tZSB7IGRhdGEgfSAtPiBkYXRhXG5cbmxldCBmaWxsX2J1ZmYgYiA9XG4gIGIubGVuIDwtIGlucHV0IGIuaWMgYi5idWZmIDAgKEJ5dGVzLmxlbmd0aCBiLmJ1ZmYpOyBiLmluZCA8LSAwXG5cblxubGV0IHJlYyBnZXRfZGF0YSA6IHR5cGUgdi4gaW50IC0+IHYgZGF0YSAtPiB2IGRhdGEgPSBmdW4gY291bnQgZCAtPiBtYXRjaCBkIHdpdGhcbiAoKiBSZXR1cm5zIGVpdGhlciBTZW1wdHkgb3IgU2NvbnMoYSwgXykgZXZlbiB3aGVuIGQgaXMgYSBnZW5lcmF0b3JcbiAgICBvciBhIGJ1ZmZlci4gSW4gdGhvc2UgY2FzZXMsIHRoZSBpdGVtIGEgaXMgc2VlbiBhcyBleHRyYWN0ZWQgZnJvbVxuIHRoZSBnZW5lcmF0b3IvYnVmZmVyLlxuIFRoZSBjb3VudCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgY2FsbGluZyBgU2dlbi1mdW5jdGlvbnMnLiAgKilcbiAgIFNlbXB0eSB8IFNjb25zIChfLCBfKSAtPiBkXG4gfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIGNvdW50IGQxIHdpdGhcbiAgICAgICBTY29ucyAoYSwgZDExKSAtPiBTY29ucyAoYSwgU2FwcCAoZDExLCBkMikpXG4gICAgIHwgU2VtcHR5IC0+IGdldF9kYXRhIGNvdW50IGQyXG4gICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgZW5kXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBOb25lfSAtPiBTZW1wdHlcbiB8IFNnZW4gKHtjdXJyID0gU29tZShTb21lIGEpfSBhcyBnKSAtPlxuICAgICBnLmN1cnIgPC0gTm9uZTsgU2NvbnMoYSwgZClcbiB8IFNnZW4gZyAtPlxuICAgICBiZWdpbiBtYXRjaCBnLmZ1bmMgY291bnQgd2l0aFxuICAgICAgIE5vbmUgLT4gZy5jdXJyIDwtIFNvbWUoTm9uZSk7IFNlbXB0eVxuICAgICB8IFNvbWUgYSAtPiBTY29ucyhhLCBkKVxuICAgICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgIGVuZFxuIHwgU2J1ZmZpbyBiIC0+XG4gICAgIGlmIGIuaW5kID49IGIubGVuIHRoZW4gZmlsbF9idWZmIGI7XG4gICAgIGlmIGIubGVuID09IDAgdGhlbiBTZW1wdHkgZWxzZVxuICAgICAgIGxldCByID0gQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQgaW5cbiAgICAgICAoKiBXYXJuaW5nOiBhbnlvbmUgdXNpbmcgZyB0aGlua3MgdGhhdCBhbiBpdGVtIGhhcyBiZWVuIHJlYWQgKilcbiAgICAgICBiLmluZCA8LSBzdWNjIGIuaW5kOyBTY29ucyhyLCBkKVxuIHwgU2xhenkgZiAtPiBnZXRfZGF0YSBjb3VudCAoTGF6eS5mb3JjZSBmKVxuXG5cbmxldCByZWMgcGVla19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdiBvcHRpb24gPSBmdW4gcyAtPlxuICgqIGNvbnN1bHQgdGhlIGZpcnN0IGl0ZW0gb2YgcyAqKVxuIG1hdGNoIHMuZGF0YSB3aXRoXG4gICBTZW1wdHkgLT4gTm9uZVxuIHwgU2NvbnMgKGEsIF8pIC0+IFNvbWUgYVxuIHwgU2FwcCAoXywgXykgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZ2V0X2RhdGEgcy5jb3VudCBzLmRhdGEgd2l0aFxuICAgICAgIFNjb25zKGEsIF8pIGFzIGQgLT4gcy5kYXRhIDwtIGQ7IFNvbWUgYVxuICAgICB8IFNlbXB0eSAtPiBOb25lXG4gICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgZW5kXG4gfCBTbGF6eSBmIC0+IHMuZGF0YSA8LSAoTGF6eS5mb3JjZSBmKTsgcGVla19kYXRhIHNcbiB8IFNnZW4ge2N1cnIgPSBTb21lIGF9IC0+IGFcbiB8IFNnZW4gZyAtPiBsZXQgeCA9IGcuZnVuYyBzLmNvdW50IGluIGcuY3VyciA8LSBTb21lIHg7IHhcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gYmVnaW4gcy5kYXRhIDwtIFNlbXB0eTsgTm9uZSBlbmRcbiAgICAgZWxzZSBTb21lIChCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZiBiLmluZClcblxuXG5sZXQgcGVlayA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBOb25lXG4gIHwgU29tZSBzIC0+IHBlZWtfZGF0YSBzXG5cblxubGV0IHJlYyBqdW5rX2RhdGEgOiB0eXBlIHYuIHYgY2VsbCAtPiB1bml0ID0gZnVuIHMgLT5cbiAgbWF0Y2ggcy5kYXRhIHdpdGhcbiAgICBTY29ucyAoXywgZCkgLT4gcy5jb3VudCA8LSAoc3VjYyBzLmNvdW50KTsgcy5kYXRhIDwtIGRcbiAgfCBTZ2VuICh7Y3VyciA9IFNvbWUgX30gYXMgZykgLT4gcy5jb3VudCA8LSAoc3VjYyBzLmNvdW50KTsgZy5jdXJyIDwtIE5vbmVcbiAgfCBTYnVmZmlvIGIgLT5cbiAgICAgIGlmIGIuaW5kID49IGIubGVuIHRoZW4gZmlsbF9idWZmIGI7XG4gICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gcy5kYXRhIDwtIFNlbXB0eVxuICAgICAgZWxzZSAocy5jb3VudCA8LSAoc3VjYyBzLmNvdW50KTsgYi5pbmQgPC0gc3VjYyBiLmluZClcbiAgfCBfIC0+XG4gICAgICBtYXRjaCBwZWVrX2RhdGEgcyB3aXRoXG4gICAgICAgIE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBfIC0+IGp1bmtfZGF0YSBzXG5cblxubGV0IGp1bmsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIGRhdGEgLT4ganVua19kYXRhIGRhdGFcblxubGV0IHJlYyBuZ2V0X2RhdGEgbiBzID1cbiAgaWYgbiA8PSAwIHRoZW4gW10sIHMuZGF0YSwgMFxuICBlbHNlXG4gICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgU29tZSBhIC0+XG4gICAgICAgIGp1bmtfZGF0YSBzO1xuICAgICAgICBsZXQgKGFsLCBkLCBrKSA9IG5nZXRfZGF0YSAocHJlZCBuKSBzIGluIGEgOjogYWwsIFNjb25zIChhLCBkKSwgc3VjYyBrXG4gICAgfCBOb25lIC0+IFtdLCBzLmRhdGEsIDBcblxuXG5sZXQgbnBlZWtfZGF0YSBuIHMgPVxuICBsZXQgKGFsLCBkLCBsZW4pID0gbmdldF9kYXRhIG4gcyBpblxuICBzLmNvdW50IDwtIChzLmNvdW50IC0gbGVuKTtcbiAgcy5kYXRhIDwtIGQ7XG4gIGFsXG5cblxubGV0IG5wZWVrIG4gPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIGQgLT4gbnBlZWtfZGF0YSBuIGRcblxubGV0IG5leHQgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBhIC0+IGp1bmsgczsgYVxuICB8IE5vbmUgLT4gcmFpc2UgRmFpbHVyZVxuXG5cbmxldCBlbXB0eSBzID1cbiAgbWF0Y2ggcGVlayBzIHdpdGhcbiAgICBTb21lIF8gLT4gcmFpc2UgRmFpbHVyZVxuICB8IE5vbmUgLT4gKClcblxuXG5sZXQgaXRlciBmIHN0cm0gPVxuICBsZXQgcmVjIGRvX3JlYyAoKSA9XG4gICAgbWF0Y2ggcGVlayBzdHJtIHdpdGhcbiAgICAgIFNvbWUgYSAtPiBqdW5rIHN0cm07IGlnbm9yZShmIGEpOyBkb19yZWMgKClcbiAgICB8IE5vbmUgLT4gKClcbiAgaW5cbiAgZG9fcmVjICgpXG5cblxuKCogU3RyZWFtIGJ1aWxkaW5nIGZ1bmN0aW9ucyAqKVxuXG5sZXQgZnJvbSBmID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2dlbiB7Y3VyciA9IE5vbmU7IGZ1bmMgPSBmfX1cblxubGV0IG9mX2xpc3QgbCA9XG4gIFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IExpc3QuZm9sZF9yaWdodCAoZnVuIHggbCAtPiBTY29ucyAoeCwgbCkpIGwgU2VtcHR5fVxuXG5cbmxldCBvZl9zdHJpbmcgcyA9XG4gIGxldCBjb3VudCA9IHJlZiAwIGluXG4gIGZyb20gKGZ1biBfIC0+XG4gICAgKCogV2UgY2Fubm90IHVzZSB0aGUgaW5kZXggcGFzc2VkIGJ5IHRoZSBbZnJvbV0gZnVuY3Rpb24gZGlyZWN0bHlcbiAgICAgICBiZWNhdXNlIGl0IHJldHVybnMgdGhlIGN1cnJlbnQgc3RyZWFtIGNvdW50LCB3aXRoIGFic29sdXRlbHkgbm9cbiAgICAgICBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIHN0YXJ0IGZyb20gMC4gRm9yIGV4YW1wbGUsIGluIHRoZSBjYXNlXG4gICAgICAgb2YgW1N0cmVhbS5pY29ucyAnYycgKFN0cmVhbS5mcm9tX3N0cmluZyBcImFiXCIpXSwgdGhlIGZpcnN0XG4gICAgICAgYWNjZXNzIHRvIHRoZSBzdHJpbmcgd2lsbCBiZSBtYWRlIHdpdGggY291bnQgWzFdIGFscmVhZHkuXG4gICAgKilcbiAgICBsZXQgYyA9ICFjb3VudCBpblxuICAgIGlmIGMgPCBTdHJpbmcubGVuZ3RoIHNcbiAgICB0aGVuIChpbmNyIGNvdW50OyBTb21lIHMuW2NdKVxuICAgIGVsc2UgTm9uZSlcblxuXG5sZXQgb2ZfYnl0ZXMgcyA9XG4gIGxldCBjb3VudCA9IHJlZiAwIGluXG4gIGZyb20gKGZ1biBfIC0+XG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgQnl0ZXMubGVuZ3RoIHNcbiAgICB0aGVuIChpbmNyIGNvdW50OyBTb21lIChCeXRlcy5nZXQgcyBjKSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2NoYW5uZWwgaWMgPVxuICBTb21lIHtjb3VudCA9IDA7XG4gICAgICAgIGRhdGEgPSBTYnVmZmlvIHtpYyA9IGljOyBidWZmID0gQnl0ZXMuY3JlYXRlIDQwOTY7IGxlbiA9IDA7IGluZCA9IDB9fVxuXG5cbigqIFN0cmVhbSBleHByZXNzaW9ucyBidWlsZGVycyAqKVxuXG5sZXQgaWFwcCBpIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTYXBwIChkYXRhIGksIGRhdGEgcyl9XG5sZXQgaWNvbnMgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2NvbnMgKGksIGRhdGEgcyl9XG5sZXQgaXNpbmcgaSA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBTZW1wdHkpfVxuXG5sZXQgbGFwcCBmIHMgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTYXBwIChkYXRhIChmICgpKSwgZGF0YSBzKSkpfVxuXG5sZXQgbGNvbnMgZiBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2NvbnMgKGYgKCksIGRhdGEgcykpKX1cbmxldCBsc2luZyBmID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2NvbnMgKGYgKCksIFNlbXB0eSkpKX1cblxubGV0IHNlbXB0eSA9IE5vbmVcbmxldCBzbGF6eSBmID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoZGF0YSAoZiAoKSkpKX1cblxuKCogRm9yIGRlYnVnZ2luZyB1c2UgKilcblxubGV0IHJlYyBkdW1wIDogdHlwZSB2LiAodiAtPiB1bml0KSAtPiB2IHQgLT4gdW5pdCA9IGZ1biBmIHMgLT5cbiAgcHJpbnRfc3RyaW5nIFwie2NvdW50ID0gXCI7XG4gIHByaW50X2ludCAoY291bnQgcyk7XG4gIHByaW50X3N0cmluZyBcIjsgZGF0YSA9IFwiO1xuICBkdW1wX2RhdGEgZiAoZGF0YSBzKTtcbiAgcHJpbnRfc3RyaW5nIFwifVwiO1xuICBwcmludF9uZXdsaW5lICgpXG5hbmQgZHVtcF9kYXRhIDogdHlwZSB2LiAodiAtPiB1bml0KSAtPiB2IGRhdGEgLT4gdW5pdCA9IGZ1biBmIC0+XG4gIGZ1bmN0aW9uXG4gICAgU2VtcHR5IC0+IHByaW50X3N0cmluZyBcIlNlbXB0eVwiXG4gIHwgU2NvbnMgKGEsIGQpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTY29ucyAoXCI7XG4gICAgICBmIGE7XG4gICAgICBwcmludF9zdHJpbmcgXCIsIFwiO1xuICAgICAgZHVtcF9kYXRhIGYgZDtcbiAgICAgIHByaW50X3N0cmluZyBcIilcIlxuICB8IFNhcHAgKGQxLCBkMikgLT5cbiAgICAgIHByaW50X3N0cmluZyBcIlNhcHAgKFwiO1xuICAgICAgZHVtcF9kYXRhIGYgZDE7XG4gICAgICBwcmludF9zdHJpbmcgXCIsIFwiO1xuICAgICAgZHVtcF9kYXRhIGYgZDI7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTbGF6eSBfIC0+IHByaW50X3N0cmluZyBcIlNsYXp5XCJcbiAgfCBTZ2VuIF8gLT4gcHJpbnRfc3RyaW5nIFwiU2dlblwiXG4gIHwgU2J1ZmZpbyBfIC0+IHByaW50X3N0cmluZyBcIlNidWZmaW9cIlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgUGllcnJlIFdlaXMgYW5kIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5OSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeHRlbnNpYmxlIGJ1ZmZlcnMgKilcblxudHlwZSB0ID1cbiB7bXV0YWJsZSBidWZmZXIgOiBieXRlcztcbiAgbXV0YWJsZSBwb3NpdGlvbiA6IGludDtcbiAgbXV0YWJsZSBsZW5ndGggOiBpbnQ7XG4gIGluaXRpYWxfYnVmZmVyIDogYnl0ZXN9XG4oKiBJbnZhcmlhbnRzOiBhbGwgcGFydHMgb2YgdGhlIGNvZGUgcHJlc2VydmUgdGhlIGludmFyaWFudHMgdGhhdDpcbiAgIC0gWzAgPD0gYi5wb3NpdGlvbiA8PSBiLmxlbmd0aF1cbiAgIC0gW2IubGVuZ3RoID0gQnl0ZXMubGVuZ3RoIGIuYnVmZmVyXVxuXG4gICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCBbYi5wb3NpdGlvbiA9IGIubGVuZ3RoXSBpcyBsZWdhbCxcbiAgIGl0IG1lYW5zIHRoYXQgdGhlIGJ1ZmZlciBpcyBmdWxsIGFuZCB3aWxsIGhhdmUgdG8gYmUgZXh0ZW5kZWRcbiAgIGJlZm9yZSBhbnkgZnVydGhlciBhZGRpdGlvbi4gKilcblxubGV0IGNyZWF0ZSBuID1cbiBsZXQgbiA9IGlmIG4gPCAxIHRoZW4gMSBlbHNlIG4gaW5cbiBsZXQgbiA9IGlmIG4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBTeXMubWF4X3N0cmluZ19sZW5ndGggZWxzZSBuIGluXG4gbGV0IHMgPSBCeXRlcy5jcmVhdGUgbiBpblxuIHtidWZmZXIgPSBzOyBwb3NpdGlvbiA9IDA7IGxlbmd0aCA9IG47IGluaXRpYWxfYnVmZmVyID0gc31cblxubGV0IGNvbnRlbnRzIGIgPSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxubGV0IHRvX2J5dGVzIGIgPSBCeXRlcy5zdWIgYi5idWZmZXIgMCBiLnBvc2l0aW9uXG5cbmxldCBzdWIgYiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGIucG9zaXRpb24gLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5zdWJcIlxuICBlbHNlIEJ5dGVzLnN1Yl9zdHJpbmcgYi5idWZmZXIgb2ZzIGxlblxuXG5cbmxldCBibGl0IHNyYyBzcmNvZmYgZHN0IGRzdG9mZiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IHNyY29mZiA8IDAgfHwgc3Jjb2ZmID4gc3JjLnBvc2l0aW9uIC0gbGVuXG4gICAgICAgICAgICAgfHwgZHN0b2ZmIDwgMCB8fCBkc3RvZmYgPiAoQnl0ZXMubGVuZ3RoIGRzdCkgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5ibGl0XCJcbiAgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9ibGl0IHNyYy5idWZmZXIgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuXG5cblxubGV0IG50aCBiIG9mcyA9XG4gIGlmIG9mcyA8IDAgfHwgb2ZzID49IGIucG9zaXRpb24gdGhlblxuICAgaW52YWxpZF9hcmcgXCJCdWZmZXIubnRoXCJcbiAgZWxzZSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIG9mc1xuXG5cbmxldCBsZW5ndGggYiA9IGIucG9zaXRpb25cblxubGV0IGNsZWFyIGIgPSBiLnBvc2l0aW9uIDwtIDBcblxubGV0IHJlc2V0IGIgPVxuICBiLnBvc2l0aW9uIDwtIDA7XG4gIGIuYnVmZmVyIDwtIGIuaW5pdGlhbF9idWZmZXI7XG4gIGIubGVuZ3RoIDwtIEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlclxuXG4oKiBbcmVzaXplIGIgbW9yZV0gZW5zdXJlcyB0aGF0IFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gaG9sZHNcbiAgIGJ5IGR5bmFtaWNhbGx5IGV4dGVuZGluZyBbYi5idWZmZXJdIGlmIG5lY2Vzc2FyeSAtLSBhbmQgdGh1c1xuICAgaW5jcmVhc2luZyBbYi5sZW5ndGhdLlxuXG4gICBJbiBwYXJ0aWN1bGFyLCBhZnRlciBbcmVzaXplIGIgbW9yZV0gaXMgY2FsbGVkLCBhIGRpcmVjdCBhY2Nlc3Mgb2ZcbiAgIHNpemUgW21vcmVdIGF0IFtiLnBvc2l0aW9uXSB3aWxsIGFsd2F5cyBiZSBpbi1ib3VuZHMsIHNvIHRoYXRcbiAgICh1bnNhZmVfe2dldCxzZXR9KSBtYXkgYmUgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG4qKVxubGV0IHJlc2l6ZSBiIG1vcmUgPVxuICBsZXQgb2xkX3BvcyA9IGIucG9zaXRpb24gaW5cbiAgbGV0IG9sZF9sZW4gPSBiLmxlbmd0aCBpblxuICBsZXQgbmV3X2xlbiA9IHJlZiBvbGRfbGVuIGluXG4gIHdoaWxlIG9sZF9wb3MgKyBtb3JlID4gIW5ld19sZW4gZG8gbmV3X2xlbiA6PSAyICogIW5ld19sZW4gZG9uZTtcbiAgaWYgIW5ld19sZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBiZWdpblxuICAgIGlmIG9sZF9wb3MgKyBtb3JlIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgIHRoZW4gbmV3X2xlbiA6PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICBlbHNlIGZhaWx3aXRoIFwiQnVmZmVyLmFkZDogY2Fubm90IGdyb3cgYnVmZmVyXCJcbiAgZW5kO1xuICBsZXQgbmV3X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAhbmV3X2xlbiBpblxuICAoKiBQUiM2MTQ4OiBsZXQncyBrZWVwIHVzaW5nIFtibGl0XSByYXRoZXIgdGhhbiBbdW5zYWZlX2JsaXRdIGluXG4gICAgIHRoaXMgdHJpY2t5IGZ1bmN0aW9uIHRoYXQgaXMgc2xvdyBhbnl3YXkuICopXG4gIEJ5dGVzLmJsaXQgYi5idWZmZXIgMCBuZXdfYnVmZmVyIDAgYi5wb3NpdGlvbjtcbiAgYi5idWZmZXIgPC0gbmV3X2J1ZmZlcjtcbiAgYi5sZW5ndGggPC0gIW5ld19sZW47XG4gIGFzc2VydCAoYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGgpO1xuICBhc3NlcnQgKG9sZF9wb3MgKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgKClcbiAgKCogTm90ZTogdGhlcmUgYXJlIHZhcmlvdXMgc2l0dWF0aW9ucyAocHJlZW1wdGl2ZSB0aHJlYWRzLCBzaWduYWxzIGFuZFxuICAgICBnYyBmaW5hbGl6ZXJzKSB3aGVyZSBPQ2FtbCBjb2RlIG1heSBiZSBydW4gYXN5bmNocm9ub3VzbHk7IGluXG4gICAgIHBhcnRpY3VsYXIsIHRoZXJlIG1heSBiZSBhIHJhY2Ugd2l0aCBhbm90aGVyIHVzZXIgb2YgW2JdLCBjaGFuZ2luZ1xuICAgICBpdHMgbXV0YWJsZSBmaWVsZHMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgW3Jlc2l6ZV0gY2FsbC4gVGhlIEJ1ZmZlclxuICAgICBtb2R1bGUgZG9lcyBub3QgcHJvdmlkZSBhbnkgY29ycmVjdG5lc3MgZ3VhcmFudGVlIGlmIHRoYXQgaGFwcGVucyxcbiAgICAgYnV0IHdlIG11c3Qgc3RpbGwgZW5zdXJlIHRoYXQgdGhlIGRhdGFzdHJ1Y3R1cmUgaW52YXJpYW50cyBob2xkIGZvclxuICAgICBtZW1vcnktc2FmZXR5IC0tIGFzIHdlIHBsYW4gdG8gdXNlIFt1bnNhZmVfe2dldCxzZXR9XS5cblxuICAgICBUaGVyZSBhcmUgdHdvIHBvdGVudGlhbCBhbGxvY2F0aW9uIHBvaW50cyBpbiB0aGlzIGZ1bmN0aW9uLFxuICAgICBbcmVmXSBhbmQgW0J5dGVzLmNyZWF0ZV0sIGJ1dCBhbGwgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgZmllbGRzXG4gICAgIG9mIFtiXSBoYXBwZW4gYmVmb3JlIGJvdGggb2YgdGhlbSBvciBhZnRlciBib3RoIG9mIHRoZW0uXG5cbiAgICAgV2UgdGhlcmVmb3JlIGFzc3VtZSB0aGF0IFtiLnBvc2l0aW9uXSBtYXkgY2hhbmdlIGF0IHRoZXNlIGFsbG9jYXRpb25zLFxuICAgICBhbmQgY2hlY2sgdGhhdCB0aGUgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBwb3N0Y29uZGl0aW9uXG4gICAgIGhvbGRzIGZvciBib3RoIHZhbHVlcyBvZiBbYi5wb3NpdGlvbl0sIGJlZm9yZSBvciBhZnRlciB0aGUgZnVuY3Rpb25cbiAgICAgaXMgY2FsbGVkLiBNb3JlIHByZWNpc2VseSwgdGhlIGZvbGxvd2luZyBpbnZhcmlhbnRzIG11c3QgaG9sZCBpZiB0aGVcbiAgICAgZnVuY3Rpb24gcmV0dXJucyBjb3JyZWN0bHksIGluIGFkZGl0aW9uIHRvIHRoZSB1c3VhbCBidWZmZXIgaW52YXJpYW50czpcbiAgICAgLSBbb2xkKGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtuZXcoYi5wb3NpdGlvbikgKyBtb3JlIDw9IG5ldyhiLmxlbmd0aCldXG4gICAgIC0gW29sZChiLmxlbmd0aCkgPD0gbmV3KGIubGVuZ3RoKV1cblxuICAgICBOb3RlOiBbYi5wb3NpdGlvbiArIG1vcmUgPD0gb2xkKGIubGVuZ3RoKV0gZG9lcyAqbm90KlxuICAgICBob2xkIGluIGdlbmVyYWwsIGFzIGl0IGlzIHByZWNpc2VseSB0aGUgY2FzZSB3aGVyZSB5b3UgbmVlZFxuICAgICB0byBjYWxsIFtyZXNpemVdIHRvIGluY3JlYXNlIFtiLmxlbmd0aF0uXG5cbiAgICAgTm90ZTogW2Fzc2VydF0gYWJvdmUgZG9lcyBub3QgbWVhbiB0aGF0IHdlIGtub3cgdGhlIGNvbmRpdGlvbnNcbiAgICAgYWx3YXlzIGhvbGQsIGJ1dCB0aGF0IHRoZSBmdW5jdGlvbiBtYXkgcmV0dXJuIGNvcnJlY3RseVxuICAgICBvbmx5IGlmIHRoZXkgaG9sZC5cblxuICAgICBOb3RlOiB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIGRvZXMgbm90IG5lZWRcbiAgICAgdG8gYmUgY2hlY2tlZCB3aXRoIHRoaXMgbGV2ZWwgb2Ygc2NydXRpbnksIGdpdmVuIHRoYXQgdGhleVxuICAgICByZWFkL3dyaXRlIHRoZSBidWZmZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgY2hlY2tpbmcgdGhhdFxuICAgICBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGQgb3IgY2FsbGluZyBbcmVzaXplXS5cbiAgKilcblxubGV0IGFkZF9jaGFyIGIgYyA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDE7XG4gIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgcG9zIGM7XG4gIGIucG9zaXRpb24gPC0gcG9zICsgMVxuXG5sZXQgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4ID0gNFxubGV0IHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXggPSA0XG5cbmxldCByZWMgYWRkX3V0Zl84X3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzhfdWNoYXIgYi5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzhfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmJlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmJlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZiZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IHJlYyBhZGRfdXRmXzE2bGVfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzE2bGVfdWNoYXIgYi5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgYWRkX3N1YnN0cmluZyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGlmIG9mZnNldCA8IDAgfHwgbGVuIDwgMCB8fCBvZmZzZXQgPiBTdHJpbmcubGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfc3Vic3RyaW5nL2FkZF9zdWJieXRlc1wiO1xuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIGxlbiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIGxlbjtcbiAgQnl0ZXMudW5zYWZlX2JsaXRfc3RyaW5nIHMgb2Zmc2V0IGIuYnVmZmVyIGIucG9zaXRpb24gbGVuO1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX3N1YmJ5dGVzIGIgcyBvZmZzZXQgbGVuID1cbiAgYWRkX3N1YnN0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpIG9mZnNldCBsZW5cblxubGV0IGFkZF9zdHJpbmcgYiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIGxlbiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIGxlbjtcbiAgQnl0ZXMudW5zYWZlX2JsaXRfc3RyaW5nIHMgMCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9ieXRlcyBiIHMgPSBhZGRfc3RyaW5nIGIgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcylcblxubGV0IGFkZF9idWZmZXIgYiBicyA9XG4gIGFkZF9zdWJieXRlcyBiIGJzLmJ1ZmZlciAwIGJzLnBvc2l0aW9uXG5cbigqIHRoaXMgKHByaXZhdGUpIGZ1bmN0aW9uIGNvdWxkIG1vdmUgaW50byB0aGUgc3RhbmRhcmQgbGlicmFyeSAqKVxubGV0IHJlYWxseV9pbnB1dF91cF90byBpYyBidWYgb2ZzIGxlbiA9XG4gIGxldCByZWMgbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZCB+b2ZzIH50b19yZWFkID1cbiAgICBpZiB0b19yZWFkID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gaW5wdXQgaWMgYnVmIG9mcyB0b19yZWFkIGluXG4gICAgICBpZiByID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBsZXQgYWxyZWFkeV9yZWFkID0gYWxyZWFkeV9yZWFkICsgciBpblxuICAgICAgICBsZXQgb2ZzID0gb2ZzICsgciBpblxuICAgICAgICBsZXQgdG9fcmVhZCA9IHRvX3JlYWQgLSByIGluXG4gICAgICAgIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZFxuICAgICAgZW5kXG4gICAgZW5kXG4gIGluIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQ6MCB+b2ZzIH50b19yZWFkOmxlblxuXG5cbmxldCB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gPVxuICBpZiBiLnBvc2l0aW9uICsgbGVuID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIGxldCBuID0gcmVhbGx5X2lucHV0X3VwX3RvIGljIGIuYnVmZmVyIGIucG9zaXRpb24gbGVuIGluXG4gICgqIFRoZSBhc3NlcnRpb24gYmVsb3cgbWF5IGZhaWwgaW4gd2VpcmQgc2NlbmFyaW8gd2hlcmVcbiAgICAgdGhyZWFkZWQvZmluYWxpemVyIGNvZGUsIHJ1biBhc3luY2hyb25vdXNseSBkdXJpbmcgdGhlXG4gICAgIFtyZWFsbHlfaW5wdXRfdXBfdG9dIGNhbGwsIHJhY2VzIG9uIHRoZSBidWZmZXI7IHdlIGRvbid0IGVuc3VyZVxuICAgICBjb3JyZWN0bmVzcyBpbiB0aGlzIGNhc2UsIGJ1dCBuZWVkIHRvIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIGZvclxuICAgICBtZW1vcnktc2FmZXR5IChzZWUgZGlzY3Vzc2lvbiBvZiBbcmVzaXplXSkuICopXG4gIGFzc2VydCAoYi5wb3NpdGlvbiArIG4gPD0gYi5sZW5ndGgpO1xuICBiLnBvc2l0aW9uIDwtIGIucG9zaXRpb24gKyBuO1xuICBuXG5cbmxldCBhZGRfY2hhbm5lbCBiIGljIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gICAoKiBQUiM1MDA0ICopXG4gICAgaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX2NoYW5uZWxcIjtcbiAgbGV0IG4gPSB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gaW5cbiAgKCogSXQgaXMgaW50ZW50aW9uYWwgdGhhdCBhIGNvbnN1bWVyIGNhdGNoaW5nIEVuZF9vZl9maWxlXG4gICAgIHdpbGwgc2VlIHRoZSBkYXRhIHdyaXR0ZW4gKHNlZSAjNjcxOSwgIzcxMzYpLiAqKVxuICBpZiBuIDwgbGVuIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGU7XG4gICgpXG5cbmxldCBvdXRwdXRfYnVmZmVyIG9jIGIgPVxuICBvdXRwdXQgb2MgYi5idWZmZXIgMCBiLnBvc2l0aW9uXG5cbmxldCBjbG9zaW5nID0gZnVuY3Rpb25cbiAgfCAnKCcgLT4gJyknXG4gIHwgJ3snIC0+ICd9J1xuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbigqIG9wZW5pbmcgYW5kIGNsb3Npbmc6IG9wZW4gYW5kIGNsb3NlIGNoYXJhY3RlcnMsIHR5cGljYWxseSAoIGFuZCApXG4gICBrOiBiYWxhbmNlIG9mIG9wZW5pbmcgYW5kIGNsb3NpbmcgY2hhcnNcbiAgIHM6IHRoZSBzdHJpbmcgd2hlcmUgd2UgYXJlIHNlYXJjaGluZ1xuICAgc3RhcnQ6IHRoZSBpbmRleCB3aGVyZSB3ZSBzdGFydCB0aGUgc2VhcmNoLiAqKVxubGV0IGFkdmFuY2VfdG9fY2xvc2luZyBvcGVuaW5nIGNsb3NpbmcgayBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGsgaSBsaW0gPVxuICAgIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgICBpZiBzLltpXSA9IG9wZW5pbmcgdGhlbiBhZHZhbmNlIChrICsgMSkgKGkgKyAxKSBsaW0gZWxzZVxuICAgIGlmIHMuW2ldID0gY2xvc2luZyB0aGVuXG4gICAgICBpZiBrID0gMCB0aGVuIGkgZWxzZSBhZHZhbmNlIChrIC0gMSkgKGkgKyAxKSBsaW1cbiAgICBlbHNlIGFkdmFuY2UgayAoaSArIDEpIGxpbSBpblxuICBhZHZhbmNlIGsgc3RhcnQgKFN0cmluZy5sZW5ndGggcylcblxubGV0IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgaSBsaW0gPVxuICAgIGlmIGkgPj0gbGltIHRoZW4gbGltIGVsc2VcbiAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgfCAnYScgLi4gJ3onIHwgJ0EnIC4uICdaJyB8ICcwJyAuLiAnOScgfCAnXycgLT4gYWR2YW5jZSAoaSArIDEpIGxpbVxuICAgIHwgXyAtPiBpIGluXG4gIGFkdmFuY2Ugc3RhcnQgKFN0cmluZy5sZW5ndGggcylcblxuKCogV2UgYXJlIGp1c3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBpZGVudCBpbiBzLCBzdGFydGluZyBhdCBzdGFydC4gKilcbmxldCBmaW5kX2lkZW50IHMgc3RhcnQgbGltID1cbiAgaWYgc3RhcnQgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgbWF0Y2ggcy5bc3RhcnRdIHdpdGhcbiAgKCogUGFyZW50aGVzaXplZCBpZGVudCA/ICopXG4gIHwgJygnIHwgJ3snIGFzIGMgLT5cbiAgICAgbGV0IG5ld19zdGFydCA9IHN0YXJ0ICsgMSBpblxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fY2xvc2luZyBjIChjbG9zaW5nIGMpIDAgcyBuZXdfc3RhcnQgaW5cbiAgICAgU3RyaW5nLnN1YiBzIG5ld19zdGFydCAoc3RvcCAtIHN0YXJ0IC0gMSksIHN0b3AgKyAxXG4gICgqIFJlZ3VsYXIgaWRlbnQgKilcbiAgfCBfIC0+XG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19ub25fYWxwaGEgcyAoc3RhcnQgKyAxKSBpblxuICAgICBTdHJpbmcuc3ViIHMgc3RhcnQgKHN0b3AgLSBzdGFydCksIHN0b3BcblxuKCogU3Vic3RpdHV0ZSAkaWRlbnQsICQoaWRlbnQpLCBvciAke2lkZW50fSBpbiBzLFxuICAgIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24gbWFwcGluZyBmLiAqKVxubGV0IGFkZF9zdWJzdGl0dXRlIGIgZiBzID1cbiAgbGV0IGxpbSA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgcmVjIHN1YnN0IHByZXZpb3VzIGkgPVxuICAgIGlmIGkgPCBsaW0gdGhlbiBiZWdpblxuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnJCcgYXMgY3VycmVudCB3aGVuIHByZXZpb3VzID0gJ1xcXFwnIC0+XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnJCcgLT5cbiAgICAgICAgIGxldCBqID0gaSArIDEgaW5cbiAgICAgICAgIGxldCBpZGVudCwgbmV4dF9pID0gZmluZF9pZGVudCBzIGogbGltIGluXG4gICAgICAgICBhZGRfc3RyaW5nIGIgKGYgaWRlbnQpO1xuICAgICAgICAgc3Vic3QgJyAnIG5leHRfaVxuICAgICAgfCBjdXJyZW50IHdoZW4gcHJldmlvdXMgPT0gJ1xcXFwnIC0+XG4gICAgICAgICBhZGRfY2hhciBiICdcXFxcJztcbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0ICcgJyAoaSArIDEpXG4gICAgICB8ICdcXFxcJyBhcyBjdXJyZW50IC0+XG4gICAgICAgICBzdWJzdCBjdXJyZW50IChpICsgMSlcbiAgICAgIHwgY3VycmVudCAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgZW5kIGVsc2VcbiAgICBpZiBwcmV2aW91cyA9ICdcXFxcJyB0aGVuIGFkZF9jaGFyIGIgcHJldmlvdXMgaW5cbiAgc3Vic3QgJyAnIDBcblxubGV0IHRydW5jYXRlIGIgbGVuID1cbiAgICBpZiBsZW4gPCAwIHx8IGxlbiA+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLnRydW5jYXRlXCJcbiAgICBlbHNlXG4gICAgICBiLnBvc2l0aW9uIDwtIGxlblxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBhZGRfc2VxIGIgc2VxID0gU2VxLml0ZXIgKGFkZF9jaGFyIGIpIHNlcVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgYiA9IGNyZWF0ZSAzMiBpblxuICBhZGRfc2VxIGIgaTtcbiAgYlxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50MTYgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDMyIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMydVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDY0IDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0dVwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5cbmxldCBhZGRfaW50OCBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDEgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICB1bnNhZmVfc2V0X2ludDggYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDE2X25lIGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgMiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDI7XG4gIHVuc2FmZV9zZXRfaW50MTYgYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDMyX25lIGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgNCBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDQ7XG4gIHVuc2FmZV9zZXRfaW50MzIgYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDY0X25lIGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgOCBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDg7XG4gIHVuc2FmZV9zZXRfaW50NjQgYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDE2X2xlIGIgeCA9XG4gIGFkZF9pbnQxNl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQxNl9iZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDE2IHgpXG5cbmxldCBhZGRfaW50MzJfbGUgYiB4ID1cbiAgYWRkX2ludDMyX25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDMyX2JlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwMzIgeClcblxubGV0IGFkZF9pbnQ2NF9sZSBiIHggPVxuICBhZGRfaW50NjRfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50NjRfYmUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXA2NCB4KVxuXG5sZXQgYWRkX3VpbnQ4ID0gYWRkX2ludDhcbmxldCBhZGRfdWludDE2X25lID0gYWRkX2ludDE2X25lXG5sZXQgYWRkX3VpbnQxNl9sZSA9IGFkZF9pbnQxNl9sZVxubGV0IGFkZF91aW50MTZfYmUgPSBhZGRfaW50MTZfYmVcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3NcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgKCogVG9vbHMgdG8gbWFuaXB1bGF0ZSBzY2FubmluZyBzZXQgb2YgY2hhcnMgKHNlZSAlWy4uLl0pICopXG5cbnR5cGUgbXV0YWJsZV9jaGFyX3NldCA9IGJ5dGVzXG5cbigqIENyZWF0ZSBhIGZyZXNoLCBlbXB0eSwgbXV0YWJsZSBjaGFyIHNldC4gKilcbmxldCBjcmVhdGVfY2hhcl9zZXQgKCkgPSBCeXRlcy5tYWtlIDMyICdcXDAwMCdcblxuKCogQWRkIGEgY2hhciBpbiBhIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgPVxuICBsZXQgaW5kID0gaW50X29mX2NoYXIgYyBpblxuICBsZXQgc3RyX2luZCA9IGluZCBsc3IgMyBhbmQgbWFzayA9IDEgbHNsIChpbmQgbGFuZCAwYjExMSkgaW5cbiAgQnl0ZXMuc2V0IGNoYXJfc2V0IHN0cl9pbmRcbiAgICAoY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIChCeXRlcy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbG9yIG1hc2spKVxuXG5sZXQgZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgQnl0ZXMudG9fc3RyaW5nIGNoYXJfc2V0XG5cbigqIENvbXB1dGUgdGhlIGNvbXBsZW1lbnQgb2YgYSBjaGFyIHNldC4gKilcbmxldCByZXZfY2hhcl9zZXQgY2hhcl9zZXQgPVxuICBsZXQgY2hhcl9zZXQnID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gIGZvciBpID0gMCB0byAzMSBkb1xuICAgIEJ5dGVzLnNldCBjaGFyX3NldCcgaVxuICAgICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoU3RyaW5nLmdldCBjaGFyX3NldCBpKSBseG9yIDB4RkYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBjaGFyX3NldCdcblxuKCogUmV0dXJuIHRydWUgaWYgYSBgYycgaXMgaW4gYGNoYXJfc2V0Jy4gKilcbmxldCBpc19pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIChpbnRfb2ZfY2hhciAoU3RyaW5nLmdldCBjaGFyX3NldCBzdHJfaW5kKSBsYW5kIG1hc2spIDw+IDBcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIElnbm9yZWQgcGFyYW0gY29udmVyc2lvbiAqKVxuXG4oKiBHQURUIHVzZWQgdG8gYWJzdHJhY3QgYW4gZXhpc3RlbnRpYWwgdHlwZSBwYXJhbWV0ZXIuICopXG4oKiBTZWUgcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0LiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFyYW1fZm9ybWF0X2ViYiA9IFBhcmFtX2Zvcm1hdF9FQkIgOlxuICAgICgneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFyYW1fZm9ybWF0X2ViYlxuXG4oKiBDb21wdXRlIGEgcGFkZGluZyBhc3NvY2lhdGVkIHRvIGEgcGFkX29wdGlvbiAoc2VlIFwiJV80MmRcIikuICopXG5sZXQgcGFkX29mX3BhZF9vcHQgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gTm9fcGFkZGluZ1xuICB8IFNvbWUgd2lkdGggLT4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcblxuKCogQ29tcHV0ZSBhIHByZWNpc2lvbiBhc3NvY2lhdGVkIHRvIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfLjQyZlwiKS4gKilcbmxldCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0ID0gbWF0Y2ggcHJlY19vcHQgd2l0aFxuICB8IE5vbmUgLT4gTm9fcHJlY2lzaW9uXG4gIHwgU29tZSBuZGVjIC0+IExpdF9wcmVjaXNpb24gbmRlY1xuXG4oKiBUdXJuIGFuIGlnbm9yZWQgcGFyYW0gaW50byBpdHMgZXF1aXZhbGVudCBub3QtaWdub3JlZCBmb3JtYXQgbm9kZS4gKilcbigqIFVzZWQgZm9yIGZvcm1hdCBwcmV0dHktcHJpbnRpbmcgYW5kIFNjYW5mLiAqKVxubGV0IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPiAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFyYW1fZm9ybWF0X2ViYiA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENoYXIgZm10KVxuICB8IElnbm9yZWRfY2FtbF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2FtbF9jaGFyIGZtdClcbiAgfCBJZ25vcmVkX3N0cmluZyBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU3RyaW5nIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfc3RyaW5nIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfaW50IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChJbnQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQzMiAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEludDMyIChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoTmF0aXZlaW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50NjQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQ2NCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2Zsb2F0IChwYWRfb3B0LCBwcmVjX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRmxvYXQgKChGbG9hdF9mbGFnXywgRmxvYXRfZiksXG4gICAgICAgICAgICAgIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIHByZWNfb2ZfcHJlY19vcHQgcHJlY19vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9ib29sIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChCb29sIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHkpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHksIGZtdCkpXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfcmVhZGVyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoUmVhZGVyIGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10KSlcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdClcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZXMgKilcblxudHlwZSAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW4gPVxuICB8IEFjY19vcGVuX3RhZyBvZiAoJ2IsICdjKSBhY2NcbiAgfCBBY2Nfb3Blbl9ib3ggb2YgKCdiLCAnYykgYWNjXG5cbigqIFJldmVyc2VkIGxpc3Qgb2YgcHJpbnRpbmcgYXRvbXMuICopXG4oKiBVc2VkIHRvIGFjY3VtdWxhdGUgcHJpbnRmIGFyZ3VtZW50cy4gKilcbmFuZCAoJ2IsICdjKSBhY2MgPVxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCBvZiAoJ2IsICdjKSBhY2MgKiBmb3JtYXR0aW5nX2xpdFxuICAgICAgKCogU3BlY2lhbCBmbXR0aW5nIChib3gpICopXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIG9mICgnYiwgJ2MpIGFjYyAqICgnYiwgJ2MpIGFjY19mb3JtYXR0aW5nX2dlblxuICAgICAgKCogU3BlY2lhbCBmbXR0aW5nIChib3gpICopXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogTGl0ZXJhbCBzdHJpbmcgKilcbiAgfCBBY2NfY2hhcl9saXRlcmFsICAgb2YgKCdiLCAnYykgYWNjICogY2hhciAgICAgICAoKiBMaXRlcmFsIGNoYXIgKilcbiAgfCBBY2NfZGF0YV9zdHJpbmcgICAgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nICAgICAoKiBHZW5lcmF0ZWQgc3RyaW5nICopXG4gIHwgQWNjX2RhdGFfY2hhciAgICAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogR2VuZXJhdGVkIGNoYXIgKilcbiAgfCBBY2NfZGVsYXkgICAgICAgICAgb2YgKCdiLCAnYykgYWNjICogKCdiIC0+ICdjKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRGVsYXllZCBwcmludGluZyAoJWEsICV0KSAqKVxuICB8IEFjY19mbHVzaCAgICAgICAgICBvZiAoJ2IsICdjKSBhY2MgICAgICAgICAgICAgICgqIEZsdXNoICopXG4gIHwgQWNjX2ludmFsaWRfYXJnICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZ1xuICAgICAgKCogUmFpc2UgSW52YWxpZF9hcmd1bWVudCBtc2cgKilcbiAgfCBFbmRfb2ZfYWNjXG5cbigqIExpc3Qgb2YgaGV0ZXJvZ2VuZW91cyB2YWx1ZXMuICopXG4oKiBVc2VkIHRvIGFjY3VtdWxhdGUgc2NhbmYgY2FsbGJhY2sgYXJndW1lbnRzLiAqKVxudHlwZSAoJ2EsICdiKSBoZXRlcl9saXN0ID1cbiAgfCBDb25zIDogJ2MgKiAoJ2EsICdiKSBoZXRlcl9saXN0IC0+ICgnYyAtPiAnYSwgJ2IpIGhldGVyX2xpc3RcbiAgfCBOaWwgOiAoJ2IsICdiKSBoZXRlcl9saXN0XG5cbigqIEV4aXN0ZW50aWFsIEJsYWNrIEJveGVzLiAqKVxuKCogVXNlZCB0byBhYnN0cmFjdCBzb21lIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVycy4gKilcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10dHkuICopXG4oKiBTZWUgdGhlIHR5cGVfcGFkZGluZyBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZGRpbmdfZm10dHlfZWJiID0gUGFkZGluZ19mbXR0eV9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYW4gZm10dHkuICopXG4oKiBTZWUgdGhlIHR5cGVfcGFkcHJlYyBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZHByZWNfZm10dHlfZWJiID0gUGFkcHJlY19mbXR0eV9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAneikgcHJlY2lzaW9uICogKCd6LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYiA9IFBhZGRpbmdfZm10X0VCQiA6XG4gICAgIChfLCAneCAtPiAnYSkgcGFkZGluZyAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdlLCAnZikgcGFkZGluZ19mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHByZWNpc2lvbiBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiID0gUHJlY2lzaW9uX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdlLCAnZikgcHJlY2lzaW9uX2ZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3BhZHByZWNfZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdwLCAnYiwgJ2MsICdlLCAnZikgcGFkcHJlY19mbXRfZWJiID0gUGFkcHJlY19mbXRfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3AgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCdwLCAnYiwgJ2MsICdlLCAnZikgcGFkcHJlY19mbXRfZWJiXG5cbigqIEFic3RyYWN0IHRoZSAnYSBhbmQgJ2QgcGFyYW1ldGVycyBvZiBhbiBmbXQuICopXG4oKiBPdXRwdXQgdHlwZSBvZiB0aGUgZm9ybWF0IHBhcnNpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYiwgJ2MsICdlLCAnZikgZm10X2ViYiA9IEZtdF9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgnYiwgJ2MsICdlLCAnZikgZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9mb3JtYXRfZ2VuIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYiA9IEZtdF9mbXR0eV9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgZm10ICpcbiAgICAgKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhbiBmbXR0eSBhbmQgYW4gZm10LiAqKVxuKCogU2VlIHRoZSB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X2ZtdF9lYmIgPSBGbXR0eV9mbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdHR5ICpcbiAgICAgKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgLT5cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X2ZtdF9lYmJcblxuKCogQWJzdHJhY3QgYWxsIGZtdHR5IHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBmb3JtYXQgdHlwZXMuICopXG50eXBlIGZtdHR5X2ViYiA9IEZtdHR5X0VCQiA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPiBmbXR0eV9lYmJcblxuKCogQWJzdHJhY3QgYWxsIHBhZGRpbmcgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIHBhZGRpbmdzLiAqKVxudHlwZSBwYWRkaW5nX2ViYiA9IFBhZGRpbmdfRUJCIDogKCdhLCAnYikgcGFkZGluZyAtPiBwYWRkaW5nX2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgcHJlY2lzaW9uIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwcmVjaXNpb25zLiAqKVxudHlwZSBwcmVjaXNpb25fZWJiID0gUHJlY2lzaW9uX0VCQiA6ICgnYSwgJ2IpIHByZWNpc2lvbiAtPiBwcmVjaXNpb25fZWJiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29uc3RhbnRzICopXG5cbigqIERlZmF1bHQgcHJlY2lzaW9uIGZvciBmbG9hdCBwcmludGluZy4gKilcbmxldCBkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udiA9XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgfCBGbG9hdF9oIHwgRmxvYXRfSFxuICB8IEZsb2F0X0NGIC0+IC02XG4gICgqIEZvciAlaCAlSCBhbmQgJSNGIGZvcm1hdHMsIGEgbmVnYXRpdmUgcHJlY2lzaW9uIG1lYW5zIFwiYXMgbWFueSBkaWdpdHMgYXNcbiAgICAgbmVjZXNzYXJ5XCIuICBGb3IgdGhlIG90aGVyIEZQIGZvcm1hdHMsIHdlIHRha2UgdGhlIGFic29sdXRlIHZhbHVlXG4gICAgIG9mIHRoZSBwcmVjaXNpb24sIGhlbmNlIDYgZGlnaXRzIGJ5IGRlZmF1bHQuICopXG4gIHwgRmxvYXRfRiAtPiAxMlxuICAoKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgT0NhbWwgZmxvYXQgcHJpbnRpbmcgKCVGKS4gKilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBFeHRlcm5hbHMgKilcblxuZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0OiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5leHRlcm5hbCBmb3JtYXRfaW50OiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQzMjogc3RyaW5nIC0+IGludDMyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9pbnQzMl9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X25hdGl2ZWludDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5leHRlcm5hbCBmb3JtYXRfaW50NjQ6IHN0cmluZyAtPiBpbnQ2NCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50NjRfZm9ybWF0XCJcbmV4dGVybmFsIGhleHN0cmluZ19vZl9mbG9hdDogZmxvYXQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2hleHN0cmluZ19vZl9mbG9hdFwiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAoKiBUb29scyB0byBwcmV0dHktcHJpbnQgZm9ybWF0cyAqKVxuXG4oKiBUeXBlIG9mIGV4dGVuc2libGUgY2hhcmFjdGVyIGJ1ZmZlcnMuICopXG50eXBlIGJ1ZmZlciA9IHtcbiAgbXV0YWJsZSBpbmQgOiBpbnQ7XG4gIG11dGFibGUgYnl0ZXMgOiBieXRlcztcbn1cblxuKCogQ3JlYXRlIGEgZnJlc2ggYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jcmVhdGUgaW5pdF9zaXplID0geyBpbmQgPSAwOyBieXRlcyA9IEJ5dGVzLmNyZWF0ZSBpbml0X3NpemUgfVxuXG4oKiBDaGVjayBzaXplIG9mIHRoZSBidWZmZXIgYW5kIGdyb3cgaXQgaWYgbmVlZGVkLiAqKVxubGV0IGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBvdmVyaGVhZCA9XG4gIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYnVmLmJ5dGVzIGluXG4gIGxldCBtaW5fbGVuID0gYnVmLmluZCArIG92ZXJoZWFkIGluXG4gIGlmIG1pbl9sZW4gPiBsZW4gdGhlbiAoXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWF4IChsZW4gKiAyKSBtaW5fbGVuIGluXG4gICAgbGV0IG5ld19zdHIgPSBCeXRlcy5jcmVhdGUgbmV3X2xlbiBpblxuICAgIEJ5dGVzLmJsaXQgYnVmLmJ5dGVzIDAgbmV3X3N0ciAwIGxlbjtcbiAgICBidWYuYnl0ZXMgPC0gbmV3X3N0cjtcbiAgKVxuXG4oKiBBZGQgdGhlIGNoYXJhY3RlciBgYycgdG8gdGhlIGJ1ZmZlciBgYnVmJy4gKilcbmxldCBidWZmZXJfYWRkX2NoYXIgYnVmIGMgPVxuICBidWZmZXJfY2hlY2tfc2l6ZSBidWYgMTtcbiAgQnl0ZXMuc2V0IGJ1Zi5ieXRlcyBidWYuaW5kIGM7XG4gIGJ1Zi5pbmQgPC0gYnVmLmluZCArIDFcblxuKCogQWRkIHRoZSBzdHJpbmcgYHMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHMgPVxuICBsZXQgc3RyX2xlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBidWZmZXJfY2hlY2tfc2l6ZSBidWYgc3RyX2xlbjtcbiAgU3RyaW5nLmJsaXQgcyAwIGJ1Zi5ieXRlcyBidWYuaW5kIHN0cl9sZW47XG4gIGJ1Zi5pbmQgPC0gYnVmLmluZCArIHN0cl9sZW5cblxuKCogR2V0IHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIuICopXG5sZXQgYnVmZmVyX2NvbnRlbnRzIGJ1ZiA9XG4gIEJ5dGVzLnN1Yl9zdHJpbmcgYnVmLmJ5dGVzIDAgYnVmLmluZFxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgY29udmVyc2lvbiB0byBjaGFyLiAqKVxubGV0IGNoYXJfb2ZfaWNvbnYgaWNvbnYgPSBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X2QgfCBJbnRfcGQgfCBJbnRfc2QgfCBJbnRfQ2QgLT4gJ2QnIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2lcbiAgfCBJbnRfQ2kgLT4gJ2knIHwgSW50X3ggfCBJbnRfQ3ggLT4gJ3gnIHwgSW50X1ggfCBJbnRfQ1ggLT4gJ1gnIHwgSW50X29cbiAgfCBJbnRfQ28gLT4gJ28nIHwgSW50X3UgfCBJbnRfQ3UgLT4gJ3UnXG5cbigqIENvbnZlcnQgYSBmbG9hdCBjb252ZXJzaW9uIHRvIGNoYXIuICopXG4oKiBgY0YnIHdpbGwgYmUgJ0YnIGZvciBkaXNwbGF5aW5nIGZvcm1hdCBhbmQgJ2cnIHRvIGNhbGwgbGliYyBwcmludGYgKilcbmxldCBjaGFyX29mX2Zjb252ID8oY0Y9J0YnKSBmY29udiA9IG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZiAtPiAnZicgfCBGbG9hdF9lIC0+ICdlJ1xuICB8IEZsb2F0X0UgLT4gJ0UnIHwgRmxvYXRfZyAtPiAnZydcbiAgfCBGbG9hdF9HIC0+ICdHJyB8IEZsb2F0X0YgLT4gY0ZcbiAgfCBGbG9hdF9oIC0+ICdoJyB8IEZsb2F0X0ggLT4gJ0gnXG4gIHwgRmxvYXRfQ0YgLT4gJ0YnXG5cblxuKCogQ29udmVydCBhIHNjYW5uaW5nIGNvdW50ZXIgdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2NvdW50ZXIgY291bnRlciA9IG1hdGNoIGNvdW50ZXIgd2l0aFxuICB8IExpbmVfY291bnRlciAgLT4gJ2wnXG4gIHwgQ2hhcl9jb3VudGVyICAtPiAnbidcbiAgfCBUb2tlbl9jb3VudGVyIC0+ICdOJ1xuXG4oKioqKVxuXG4oKiBQcmludCBhIGNoYXJfc2V0IGluIGEgYnVmZmVyIHdpdGggdGhlIE9DYW1sIGZvcm1hdCBsZXhpY2FsIGNvbnZlbnRpb24uICopXG5sZXQgYnByaW50X2NoYXJfc2V0IGJ1ZiBjaGFyX3NldCA9XG4gIGxldCByZWMgcHJpbnRfc3RhcnQgc2V0ID1cbiAgICBsZXQgaXNfYWxvbmUgYyA9XG4gICAgICBsZXQgYmVmb3JlLCBhZnRlciA9IENoYXIuKGNociAoY29kZSBjIC0gMSksIGNociAoY29kZSBjICsgMSkpIGluXG4gICAgICBpc19pbl9jaGFyX3NldCBzZXQgY1xuICAgICAgJiYgbm90IChpc19pbl9jaGFyX3NldCBzZXQgYmVmb3JlICYmIGlzX2luX2NoYXJfc2V0IHNldCBhZnRlcikgaW5cbiAgICBpZiBpc19hbG9uZSAnXScgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICddJztcbiAgICBwcmludF9vdXQgc2V0IDE7XG4gICAgaWYgaXNfYWxvbmUgJy0nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLSc7XG4gIGFuZCBwcmludF9vdXQgc2V0IGkgPVxuICAgIGlmIGkgPCAyNTYgdGhlblxuICAgICAgaWYgaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBpKSB0aGVuIHByaW50X2ZpcnN0IHNldCBpXG4gICAgICBlbHNlIHByaW50X291dCBzZXQgKGkgKyAxKVxuICBhbmQgcHJpbnRfZmlyc3Qgc2V0IGkgPVxuICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgIHwgJ1xcMjU1JyAtPiBwcmludF9jaGFyIGJ1ZiAyNTU7XG4gICAgfCAnXScgfCAnLScgLT4gcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIHwgXyAtPiBwcmludF9zZWNvbmQgc2V0IChpICsgMSk7XG4gIGFuZCBwcmludF9zZWNvbmQgc2V0IGkgPVxuICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlblxuICAgICAgbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgICB8ICdcXDI1NScgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU0O1xuICAgICAgICBwcmludF9jaGFyIGJ1ZiAyNTU7XG4gICAgICB8ICddJyB8ICctJyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgICAgfCBfIHdoZW4gbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IChpICsgMSkpKSAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgICBwcmludF9jaGFyIGJ1ZiBpO1xuICAgICAgICBwcmludF9vdXQgc2V0IChpICsgMik7XG4gICAgICB8IF8gLT5cbiAgICAgICAgcHJpbnRfaW4gc2V0IChpIC0gMSkgKGkgKyAyKTtcbiAgICBlbHNlIChcbiAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgKVxuICBhbmQgcHJpbnRfaW4gc2V0IGkgaiA9XG4gICAgaWYgaiA9IDI1NiB8fCBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaikpIHRoZW4gKFxuICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChpbnRfb2ZfY2hhciAnLScpO1xuICAgICAgcHJpbnRfY2hhciBidWYgKGogLSAxKTtcbiAgICAgIGlmIGogPCAyNTYgdGhlbiBwcmludF9vdXQgc2V0IChqICsgMSk7XG4gICAgKSBlbHNlXG4gICAgICBwcmludF9pbiBzZXQgaSAoaiArIDEpO1xuICBhbmQgcHJpbnRfY2hhciBidWYgaSA9IG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICB8ICdAJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQCc7XG4gICAgfCBjICAgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjO1xuICBpblxuICBidWZmZXJfYWRkX2NoYXIgYnVmICdbJztcbiAgcHJpbnRfc3RhcnQgKFxuICAgIGlmIGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0ICdcXDAwMCdcbiAgICB0aGVuICggYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXic7IHJldl9jaGFyX3NldCBjaGFyX3NldCApXG4gICAgZWxzZSBjaGFyX3NldFxuICApO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmICddJ1xuXG4oKioqKVxuXG4oKiBQcmludCBhIHBhZHR5IGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcGFkdHkgYnVmIHBhZHR5ID0gbWF0Y2ggcGFkdHkgd2l0aFxuICB8IExlZnQgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nXG4gIHwgUmlnaHQgLT4gKClcbiAgfCBaZXJvcyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcwJ1xuXG4oKiBQcmludCB0aGUgJ18nIG9mIGFuIGlnbm9yZWQgZmxhZyBpZiBuZWVkZWQuICopXG5sZXQgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWcgPVxuICBpZiBpZ25fZmxhZyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ18nXG5cbigqKiopXG5cbmxldCBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHdpZHRoIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyB3aWR0aClcblxuKCoqKilcblxuKCogUHJpbnQgcGFkZGluZyBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZGRpbmcgOiB0eXBlIGEgYiAuIGJ1ZmZlciAtPiAoYSwgYikgcGFkZGluZyAtPiB1bml0ID1cbmZ1biBidWYgcGFkIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPiAoKVxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgbikgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBuKTtcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGJwcmludF9wYWR0eSBidWYgcGFkdHk7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKidcblxuKCogUHJpbnQgcHJlY2lzaW9uIGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcHJlY2lzaW9uIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHByZWNpc2lvbiAtPiB1bml0ID1cbiAgZnVuIGJ1ZiBwcmVjIC0+IG1hdGNoIHByZWMgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiAtPiAoKVxuICB8IExpdF9wcmVjaXNpb24gbiAtPlxuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy4nO1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBuKTtcbiAgfCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiLipcIlxuXG4oKioqKVxuXG4oKiBQcmludCB0aGUgb3B0aW9uYWwgJysnLCAnICcgb3IgJyMnIGFzc29jaWF0ZWQgdG8gYW4gaW50IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9wZCB8IEludF9waSAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcrJ1xuICB8IEludF9zZCB8IEludF9zaSAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcgJ1xuICB8IEludF9DeCB8IEludF9DWCB8IEludF9DbyB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBJbnRfZCB8IEludF9pIHwgSW50X3ggfCBJbnRfWCB8IEludF9vIHwgSW50X3UgLT4gKClcblxuKCogUHJpbnQgYW4gY29tcGxldGUgaW50IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJTMuKmRcIikuICopXG5sZXQgYnByaW50X2ludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpXG5cbigqIFByaW50IGEgY29tcGxldGUgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NCBmb3JtYXQgaW4gYSBidWZmZXIuICopXG5sZXQgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjIGMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKioqKVxuXG4oKiBQcmludCB0aGUgb3B0aW9uYWwgJysnLCAnICcgYW5kL29yICcjJyBhc3NvY2lhdGVkIHRvIGEgZmxvYXQgY29udmVyc2lvbi4gKilcbmxldCBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnYgPVxuICBiZWdpbiBtYXRjaCBmc3QgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2ZsYWdfcCAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcrJ1xuICB8IEZsb2F0X2ZsYWdfcyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcgJ1xuICB8IEZsb2F0X2ZsYWdfIC0+ICgpIGVuZDtcbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9DRiAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcjJ1xuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HXG4gIHwgRmxvYXRfRiB8IEZsb2F0X2ggfCBGbG9hdF9IIC0+ICgpXG5cbigqIFByaW50IGEgY29tcGxldGUgZmxvYXQgZm9ybWF0IGluIGEgYnVmZmVyIChleDogXCIlKyouM2ZcIikuICopXG5sZXQgYnByaW50X2Zsb2F0X2ZtdCBidWYgaWduX2ZsYWcgZmNvbnYgcGFkIHByZWMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9mY29udiBmY29udilcblxuKCogQ29tcHV0ZSB0aGUgbGl0ZXJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBGb3JtYXR0aW5nX2xpdC4gKilcbigqIFVzZWQgYnkgUHJpbnRmIGFuZCBTY2FuZiB3aGVyZSBmb3JtYXR0aW5nIGlzIG5vdCBpbnRlcnByZXRlZC4gKilcbmxldCBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm9ybWF0dGluZ19saXQgPSBtYXRjaCBmb3JtYXR0aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgLT4gXCJAXVwiXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgLT4gXCJAfVwiXG4gIHwgQnJlYWsgKHN0ciwgXywgXykgICAgLT4gc3RyXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgLT4gXCJAP1wiXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgLT4gXCJAXFxuXCJcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAtPiBcIkAuXCJcbiAgfCBNYWdpY19zaXplIChzdHIsIF8pICAtPiBzdHJcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAtPiBcIkBAXCJcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAtPiBcIkAlXCJcbiAgfCBTY2FuX2luZGljIGMgLT4gXCJAXCIgXiAoU3RyaW5nLm1ha2UgMSBjKVxuXG4oKioqKVxuXG4oKiBQcmludCBhIGxpdGVyYWwgY2hhciBpbiBhIGJ1ZmZlciwgZXNjYXBlICclJyBieSBcIiUlXCIuICopXG5sZXQgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgY2hyID0gbWF0Y2ggY2hyIHdpdGhcbiAgfCAnJScgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSVcIlxuICB8IF8gLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjaHJcblxuKCogUHJpbnQgYSBsaXRlcmFsIHN0cmluZyBpbiBhIGJ1ZmZlciwgZXNjYXBlIGFsbCAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyID1cbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggc3RyIC0gMSBkb1xuICAgIGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIHN0ci5baV1cbiAgZG9uZVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgcHJldHR5LXByaW50aW5nICopXG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IHR5cGUgKGFuIGZtdHR5KSBpbiBhIGJ1ZmZlci4gKilcbmxldCByZWMgYnByaW50X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCAuXG4gICAgYnVmZmVyIC0+IChhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gdW5pdCA9XG5mdW4gYnVmIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlY1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFN0cmluZ190eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVzXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50X3R5IHJlc3QgICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWlcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnQzMl90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbGlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IE5hdGl2ZWludF90eSByZXN0IC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVuaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJUxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGbG9hdF90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlZlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEJvb2xfdHkgcmVzdCAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVCXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWFcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBUaGV0YV90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIldFwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFueV90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiU/XCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgUmVhZGVyX3R5IHJlc3QgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXJcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlX3JcIjtcbiAgICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHksIHJlc3QpIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXtcIjsgYnByaW50X2ZtdHR5IGJ1ZiBzdWJfZm10dHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJX1cIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViX2ZtdHR5LCBfLCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUoXCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IEVuZF9vZl9mbXR0eSAtPiAoKVxuXG4oKioqKVxuXG5sZXQgcmVjIGludF9vZl9jdXN0b21fYXJpdHkgOiB0eXBlIGEgYiBjIC5cbiAgKGEsIGIsIGMpIGN1c3RvbV9hcml0eSAtPiBpbnQgPVxuICBmdW5jdGlvblxuICB8IEN1c3RvbV96ZXJvIC0+IDBcbiAgfCBDdXN0b21fc3VjYyB4IC0+IDEgKyBpbnRfb2ZfY3VzdG9tX2FyaXR5IHhcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmb3JtYXQgaW4gYSBidWZmZXIuICopXG5sZXQgYnByaW50X2ZtdCBidWYgZm10ID1cbiAgbGV0IHJlYyBmbXRpdGVyIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGJvb2wgLT4gdW5pdCA9XG4gIGZ1biBmbXQgaWduX2ZsYWcgLT4gbWF0Y2ggZm10IHdpdGhcbiAgICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAncyc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnUyc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICdsJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbic7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnTCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQyc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0InO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnYSc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFRoZXRhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3QnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgZm9yIF9pID0gMSB0byBpbnRfb2ZfY3VzdG9tX2FyaXR5IGFyaXR5IGRvXG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnPyc7XG4gICAgICBkb25lO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgUmVhZGVyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3InOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlIVwiO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBzdHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG4gICAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNocjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAneyc7XG4gICAgICBicHJpbnRfZm10dHkgYnVmIGZtdHR5OyBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnfSc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJygnO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyknO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHdpZHRoX29wdDsgYnByaW50X2NoYXJfc2V0IGJ1ZiBjaGFyX3NldDtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2NvdW50ZXIgY291bnRlcik7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIFwiMGNcIjsgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgICBsZXQgUGFyYW1fZm9ybWF0X0VCQiBmbXQnID0gcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0IGluXG4gICAgICBmbXRpdGVyIGZtdCcgdHJ1ZTtcblxuICAgIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIChzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCk7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGZtdGluZ19nZW4gd2l0aFxuICAgICAgfCBPcGVuX3RhZyAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAe1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICB8IE9wZW5fYm94IChGb3JtYXQgKF8sIHN0cikpIC0+XG4gICAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIkBbXCI7IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzdHJcbiAgICAgIGVuZDtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgRW5kX29mX2Zvcm1hdCAtPiAoKVxuXG4gIGluIGZtdGl0ZXIgZm10IGZhbHNlXG5cbigqKiopXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdG8gc3RyaW5nLiAqKVxubGV0IHN0cmluZ19vZl9mbXQgZm10ID1cbiAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgYnByaW50X2ZtdCBidWYgZm10O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGUgZXh0cmFjdGlvbiAqKVxuXG50eXBlIChfLCBfKSBlcSA9IFJlZmwgOiAoJ2EsICdhKSBlcVxuXG4oKiBJbnZhcmlhbnQ6IHRoaXMgZnVuY3Rpb24gaXMgdGhlIGlkZW50aXR5IG9uIHZhbHVlcy5cblxuICAgSW4gcGFydGljdWxhciwgaWYgKHR5MSwgdHkyKSBoYXZlIGVxdWFsIHZhbHVlcywgdGhlblxuICAgKHRyYW5zIChzeW1tIHR5MSkgdHkyKSByZXNwZWN0cyB0aGUgJ3RyYW5zJyBwcmVjb25kaXRpb24uICopXG5sZXQgcmVjIHN5bW0gOiB0eXBlIGExIGIxIGMxIGQxIGUxIGYxIGEyIGIyIGMyIGQyIGUyIGYyIC5cbiAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsXG4gICAgYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10dHlfcmVsXG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+IENoYXJfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnRfdHkgcmVzdCAtPiBJbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+IEludDMyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPiBJbnQ2NF90eSAoc3ltbSByZXN0KVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+IE5hdGl2ZWludF90eSAoc3ltbSByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT4gRmxvYXRfdHkgKHN5bW0gcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT4gQm9vbF90eSAoc3ltbSByZXN0KVxuICB8IFN0cmluZ190eSByZXN0IC0+IFN0cmluZ190eSAoc3ltbSByZXN0KVxuICB8IFRoZXRhX3R5IHJlc3QgLT4gVGhldGFfdHkgKHN5bW0gcmVzdClcbiAgfCBBbHBoYV90eSByZXN0IC0+IEFscGhhX3R5IChzeW1tIHJlc3QpXG4gIHwgQW55X3R5IHJlc3QgLT4gQW55X3R5IChzeW1tIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT4gUmVhZGVyX3R5IChzeW1tIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPiBJZ25vcmVkX3JlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBzeW1tIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MiwgdHkxLCBzeW1tIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG5sZXQgcmVjIGZtdHR5X3JlbF9kZXQgOiB0eXBlIGExIGIgYyBkMSBlMSBmMSBhMiBkMiBlMiBmMiAuXG4gIChhMSwgYiwgYywgZDEsIGUxLCBmMSxcbiAgIGEyLCBiLCBjLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoKGYxLCBmMikgZXEgLT4gKGExLCBhMikgZXEpXG4gICogKChhMSwgYTIpIGVxIC0+IChmMSwgZjIpIGVxKVxuICAqICgoZTEsIGUyKSBlcSAtPiAoZDEsIGQyKSBlcSlcbiAgKiAoKGQxLCBkMikgZXEgLT4gKGUxLCBlMikgZXEpXG49IGZ1bmN0aW9uXG4gIHwgRW5kX29mX2ZtdHR5IC0+XG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcblxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuICB8IEZvcm1hdF9hcmdfdHkgKF90eSwgcmVzdCkgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGxldCBhZywgZ2EsIGRqLCBqZCA9IGZtdHR5X3JlbF9kZXQgdHkgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIGxldCBSZWZsID0gYWcgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBnYSBSZWZsIGluIGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIGxldCBSZWZsID0gZGogUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBqZCBSZWZsIGluIGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuXG4oKiBQcmVjb25kaXRpb246IHdlIGFzc3VtZSB0aGF0IHRoZSB0d28gZm10dHlfcmVsIGFyZ3VtZW50cyBoYXZlIGVxdWFsXG4gICB2YWx1ZXMgKGF0IHBvc3NpYmx5IGRpc3RpbmN0IHR5cGVzKTsgdGhpcyBpbnZhcmlhbnQgY29tZXMgZnJvbSB0aGUgd2F5XG4gICBmbXR0eV9yZWwgd2l0bmVzc2VzIGFyZSBwcm9kdWNlZCBieSB0aGUgdHlwZS1jaGVja2VyXG5cbiAgIFRoZSBjb2RlIGJlbG93IHVzZXMgKGFzc2VydCBmYWxzZSkgd2hlbiB0aGlzIGFzc3VtcHRpb24gaXMgYnJva2VuLiBUaGVcbiAgIGNvZGUgcGF0dGVybiBpcyB0aGUgZm9sbG93aW5nOlxuXG4gICAgIHwgRm9vIHgsIEZvbyB5IC0+XG4gICAgICAgKCogY2FzZSB3aGVyZSBpbmRlZWQgYm90aCB2YWx1ZXNcbiAgICAgICAgICBzdGFydCB3aXRoIGNvbnN0cnVjdG9yIEZvbyAqKVxuICAgICB8IEZvbyBfLCBfXG4gICAgIHwgXywgRm9vIF8gLT5cbiAgICAgICAoKiBkaWZmZXJlbnQgaGVhZCBjb25zdHJ1Y3RvcnM6IGJyb2tlbiBwcmVjb25kaXRpb24gKilcbiAgICAgICBhc3NlcnQgZmFsc2VcbiopXG5hbmQgdHJhbnMgOiB0eXBlXG4gIGExIGIxIGMxIGQxIGUxIGYxXG4gIGEyIGIyIGMyIGQyIGUyIGYyXG4gIGEzIGIzIGMzIGQzIGUzIGYzXG4uXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuLT4gKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHlfcmVsXG49IGZ1biB0eTEgdHkyIC0+IG1hdGNoIHR5MSwgdHkyIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QxLCBDaGFyX3R5IHJlc3QyIC0+IENoYXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFN0cmluZ190eSByZXN0MSwgU3RyaW5nX3R5IHJlc3QyIC0+IFN0cmluZ190eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQm9vbF90eSByZXN0MSwgQm9vbF90eSByZXN0MiAtPiBCb29sX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnRfdHkgcmVzdDEsIEludF90eSByZXN0MiAtPiBJbnRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDMyX3R5IHJlc3QxLCBJbnQzMl90eSByZXN0MiAtPiBJbnQzMl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50NjRfdHkgcmVzdDEsIEludDY0X3R5IHJlc3QyIC0+IEludDY0X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdDEsIE5hdGl2ZWludF90eSByZXN0MiAtPiBOYXRpdmVpbnRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZsb2F0X3R5IHJlc3QxLCBGbG9hdF90eSByZXN0MiAtPiBGbG9hdF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG5cbiAgfCBBbHBoYV90eSByZXN0MSwgQWxwaGFfdHkgcmVzdDIgLT4gQWxwaGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEFscGhhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQWxwaGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IFRoZXRhX3R5IHJlc3QxLCBUaGV0YV90eSByZXN0MiAtPiBUaGV0YV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgVGhldGFfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBUaGV0YV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgQW55X3R5IHJlc3QxLCBBbnlfdHkgcmVzdDIgLT4gQW55X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbnlfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBBbnlfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IFJlYWRlcl90eSByZXN0MSwgUmVhZGVyX3R5IHJlc3QyIC0+IFJlYWRlcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgUmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgUmVhZGVyX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0MSwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDIgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBJZ25vcmVkX3JlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRm9ybWF0X2FyZ190eSAodHkxLCByZXN0MSksIEZvcm1hdF9hcmdfdHkgKHR5MiwgcmVzdDIpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHJhbnMgdHkxIHR5MiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X2FyZ190eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEZvcm1hdF9hcmdfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkxMiwgcmVzdDEpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkyMSwgdHkyMiwgcmVzdDIpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxMikgdHkyMSBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgbGV0IFJlZmwgPSBmMiBSZWZsIGluXG4gICAgbGV0IFJlZmwgPSBmNCBSZWZsIGluXG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTExLCB0eTIyLCB0cmFucyByZXN0MSByZXN0MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfc3Vic3RfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEVuZF9vZl9mbXR0eSwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuICB8IEVuZF9vZl9mbXR0eSwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBFbmRfb2ZfZm10dHkgLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCByZWMgZm10dHlfb2ZfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZvcm1hdHRpbmdfZ2VuIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBmb3JtYXR0aW5nX2dlbiAtPiBtYXRjaCBmb3JtYXR0aW5nX2dlbiB3aXRoXG4gIHwgT3Blbl90YWcgKEZvcm1hdCAoZm10LCBfKSkgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IE9wZW5fYm94IChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogRXh0cmFjdCB0aGUgdHlwZSByZXByZXNlbnRhdGlvbiAoYW4gZm10dHkpIG9mIGEgZm9ybWF0LiAqKVxuYW5kIGZtdHR5X29mX2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm10dHkgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcblxuICB8IEludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50MzIgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50MzJfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKE5hdGl2ZWludF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnQ2NF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBGbG9hdCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChGbG9hdF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcblxuICB8IENoYXIgcmVzdCAgICAgICAgICAgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IENhbWxfY2hhciByZXN0ICAgICAgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEJvb2wgKHBhZCwgcmVzdCkgICAgICAgICAgIC0+XG4gICAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoQm9vbF90eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuICB8IEFscGhhIHJlc3QgICAgICAgICAgICAgICAgIC0+IEFscGhhX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBUaGV0YSByZXN0ICAgICAgICAgICAgICAgICAtPiBUaGV0YV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgICAgLT4gZm10dHlfb2ZfY3VzdG9tIGFyaXR5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBSZWFkZXIgcmVzdCAgICAgICAgICAgICAgICAtPiBSZWFkZXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRm9ybWF0X2FyZyAoXywgdHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdCAoXywgdHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eSwgdHksIGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRmx1c2ggcmVzdCAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG5cbiAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPiBTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+IEludF90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAgLT4gZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAgLT5cbiAgICBjb25jYXRfZm10dHkgKGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIGZtdGluZ19nZW4pIChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEVuZF9vZl9mb3JtYXQgICAgICAgICAgICAgIC0+IEVuZF9vZl9mbXR0eVxuXG5hbmQgZm10dHlfb2ZfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAoeSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGFyaXR5IGZtdHR5IC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBmbXR0eVxuICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+IEFueV90eSAoZm10dHlfb2ZfY3VzdG9tIGFyaXR5IGZtdHR5KVxuXG4oKiBFeHRyYWN0IHRoZSBmbXR0eSBvZiBhbiBpZ25vcmVkIHBhcmFtZXRlciBmb2xsb3dlZCBieSB0aGUgcmVzdCBvZlxuICAgdGhlIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IGNvbmNhdF9mbXR0eSBmbXR0eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IElnbm9yZWRfcmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgZm10KVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuXG4oKiBBZGQgYW4gSW50X3R5IG5vZGUgaWYgcGFkZGluZyBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpzXCIpLiAqKVxuYW5kIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgOiB0eXBlIHggYSBiIGMgZCBlIGYgLlxuICAgICh4LCBhKSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoeCwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuICBmdW4gcGFkIGZtdHR5IC0+IG1hdGNoIHBhZCB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgIC0+IGZtdHR5XG4gICAgfCBMaXRfcGFkZGluZyBfIC0+IGZtdHR5XG4gICAgfCBBcmdfcGFkZGluZyBfIC0+IEludF90eSBmbXR0eVxuXG4oKiBBZGQgYW4gSW50X3R5IG5vZGUgaWYgcHJlY2lzaW9uIGlzIHRha2VuIGFzIGFuIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpLiopXG5hbmQgZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcHJlY2lzaW9uIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoeCwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuICBmdW4gcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgICB8IE5vX3ByZWNpc2lvbiAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3ByZWNpc2lvbiBfIC0+IGZtdHR5XG4gICAgfCBBcmdfcHJlY2lzaW9uICAgLT4gSW50X3R5IGZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGluZyAqKVxuXG4oKiBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSBmb3JtYXQgZG9lcyBub3QgbWF0Y2ggYSBnaXZlbiBmb3JtYXQgdHlwZS4gKilcbmV4Y2VwdGlvbiBUeXBlX21pc21hdGNoXG5cbigqIFR5cGUgYSBwYWRkaW5nLiAqKVxuKCogVGFrZSBhbiBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgdGhlIGludGVnZXIgc2hvdWxkIGJlIGtlcHQgYXMgYXJndW1lbnQuICopXG4oKiBSYWlzZSBUeXBlX21pc21hdGNoIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCB0eXBlX3BhZGRpbmcgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFkZGluZ19mbXR0eV9lYmIgPVxuZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQsIGZtdHR5IHdpdGhcbiAgfCBOb19wYWRkaW5nLCBfIC0+IFBhZGRpbmdfZm10dHlfRUJCIChOb19wYWRkaW5nLCBmbXR0eSlcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBfIC0+IFBhZGRpbmdfZm10dHlfRUJCIChMaXRfcGFkZGluZyAocGFkdHksdyksZm10dHkpXG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEludF90eSByZXN0IC0+IFBhZGRpbmdfZm10dHlfRUJCIChBcmdfcGFkZGluZyBwYWR0eSxyZXN0KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBDb252ZXJ0IGEgKHVwYWRkaW5nLCB1cHJlY2lzaW9uKSB0byBhIChwYWRkaW5nLCBwcmVjaXNpb24pLiAqKVxuKCogVGFrZSBvbmUgb3IgdHdvIEludF90eSBmcm9tIHRoZSBmbXR0eSBpZiBuZWVkZWQuICopXG4oKiBSYWlzZSBUeXBlX21pc21hdGNoIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCB0eXBlX3BhZHByZWMgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSB6IC5cbiAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHopIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFkcHJlY19mbXR0eV9lYmIgPVxuZnVuIHBhZCBwcmVjIGZtdHR5IC0+IG1hdGNoIHByZWMsIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBOb19wcmVjaXNpb24sIHJlc3QpXG4gIHwgTGl0X3ByZWNpc2lvbiBwLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIExpdF9wcmVjaXNpb24gcCwgcmVzdClcbiAgfCBBcmdfcHJlY2lzaW9uLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBJbnRfdHkgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBBcmdfcHJlY2lzaW9uLCByZXN0KVxuICB8IF8sIFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIFR5cGUgYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogSWYgdHlwaW5nIHN1Y2NlZWQsIGdlbmVyYXRlIGEgY29weSBvZiB0aGUgZm9ybWF0IHdpdGggdGhlIHNhbWVcbiAgICB0eXBlIHBhcmFtZXRlcnMgYXMgdGhlIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgcmVjIHR5cGVfZm9ybWF0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5IHdpdGhcbiAgfCBGbXRfZm10dHlfRUJCIChmbXQnLCBFbmRfb2ZfZm10dHkpIC0+IGZtdCdcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0X2dlbiA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gZm10IGZtdHR5IC0+IG1hdGNoIGZtdCwgZm10dHkgd2l0aFxuICB8IENoYXIgZm10X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBDYW1sX2NoYXIgZm10X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDYW1sX2NoYXIgZm10JywgZm10dHknKVxuICB8IFN0cmluZyAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChTdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBDYW1sX3N0cmluZyAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChDYW1sX3N0cmluZyAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludDMyX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQ2NF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50NjQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEZsb2F0X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBCb29sIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBCb29sX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChCb29sIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgRmx1c2ggZm10X3Jlc3QsIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRmx1c2ggZm10JywgZm10dHknKVxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFN0cmluZ19saXRlcmFsIChzdHIsIGZtdCcpLCBmbXR0eScpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDaGFyX2xpdGVyYWwgKGNociwgZm10JyksIGZtdHR5JylcblxuICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpLFxuICAgIEZvcm1hdF9hcmdfdHkgKHN1Yl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1Yl9mbXR0eSA8PiBGbXR0eV9FQkIgc3ViX2ZtdHR5JyB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eScsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eTEsIF9zdWJfZm10dHkyLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViX2ZtdHR5MSkgdGhlblxuICAgICAgcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9XG4gICAgICB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgKGVyYXNlX3JlbCBmbXR0eV9yZXN0KVxuICAgIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHkxLCBmbXQnKSwgZm10dHknKVxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgQWxwaGEgZm10X3Jlc3QsIEFscGhhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQWxwaGEgZm10JywgZm10dHknKVxuICB8IFRoZXRhIGZtdF9yZXN0LCBUaGV0YV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFRoZXRhIGZtdCcsIGZtdHR5JylcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10JyksIGZtdHR5JylcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZ19nZW4sIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfZm9ybWF0dGluZ19nZW4gZm9ybWF0dGluZ19nZW4gZm10X3Jlc3QgZm10dHlfcmVzdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgZm10X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFJlYWRlciBmbXQnLCBmbXR0eScpXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10X3Jlc3QpLCBTdHJpbmdfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXQnKSwgZm10dHknKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10JyksIGZtdHR5JylcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtIGlnbiByZXN0IGZtdHR5X3Jlc3RcblxuICB8IEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QgLT4gRm10X2ZtdHR5X0VCQiAoRW5kX29mX2Zvcm1hdCwgZm10dHlfcmVzdClcblxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG5hbmQgdHlwZV9mb3JtYXR0aW5nX2dlbiA6IHR5cGUgYTEgYTMgYjEgYjMgYzEgYzMgZDEgZDMgZTEgZTIgZTMgZjEgZjIgZjMgLlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChmMSwgYjEsIGMxLCBlMSwgZTIsIGYyKSBmbXQgLT5cbiAgICAoYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHkgLT5cbiAgICAoYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10X2ZtdHR5X2ViYiA9XG5mdW4gZm9ybWF0dGluZ19nZW4gZm10MCBmbXR0eTAgLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdDEsIHN0cikpIC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDIsIGZtdHR5MikgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MSBmbXR0eTAgaW5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MywgZm10dHkzKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQwIGZtdHR5MiBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQyLCBzdHIpKSwgZm10MyksIGZtdHR5MylcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG5cbigqIFR5cGUgYW4gSWdub3JlZF9wYXJhbSBub2RlIGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbmFuZCB0eXBlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHAgcSB4IHkgeiB0IHUgdiBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIHksIHosIHQsIHEsIHApIGlnbm9yZWQgLT5cbiAgICAocCwgeSwgeiwgcSwgdSwgdikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGlnbiBmbXQgZm10dHkgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludCBfICAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludDMyIF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCBfICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludDY0IF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zsb2F0IF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSkgLT5cbiAgICB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIChJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSkpIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eScsIEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eSBmbXQgZm10dHkgaW5cbiAgICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10JyksXG4gICAgICAgICAgICAgICAgICAgZm10dHknKVxuICB8IElnbm9yZWRfcmVhZGVyIC0+IChcbiAgICBtYXRjaCBmbXR0eSB3aXRoXG4gICAgfCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9yZWFkZXIsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSA6IHR5cGUgYTEgYTIgYjEgYjIgYzEgYzIgZDEgZDIgZTEgZTIgZjEgZjIgLlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZDIsIGEyKSBpZ25vcmVkIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdCAtPlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eSAtPlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRfZm10dHlfZWJiXG49IGZ1biBpZ24gZm10IGZtdHR5IC0+XG4gIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSBpblxuICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChpZ24sIGZtdCcpLCBmbXR0eScpXG5cbigqIFR5cGluZyBvZiB0aGUgY29tcGxleCBjYXNlOiBcIiVfKC4uLiUpXCIuICopXG5hbmQgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gOiB0eXBlIHcgeCB5IHogcCBzIHQgdSBhIGIgYyBkIGUgZiAuXG4gICAgKHcsIHgsIHksIHosIHMsIHApIGZtdHR5IC0+XG4gICAgKHAsIHgsIHksIHMsIHQsIHUpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlfZm10X2ViYiA9XG5mdW4gc3ViX2ZtdHR5IGZtdCBmbXR0eSAtPiBtYXRjaCBzdWJfZm10dHksIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKENoYXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFN0cmluZ190eSBzdWJfZm10dHlfcmVzdCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFN0cmluZ190eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnQzMl90eSBzdWJfZm10dHlfcmVzdCwgSW50MzJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IE5hdGl2ZWludF90eSBzdWJfZm10dHlfcmVzdCwgTmF0aXZlaW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKE5hdGl2ZWludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50NjRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDY0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBGbG9hdF90eSBzdWJfZm10dHlfcmVzdCwgRmxvYXRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QsIEJvb2xfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQm9vbF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgQWxwaGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIEFscGhhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBUaGV0YV90eSBzdWJfZm10dHlfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFJlYWRlcl90eSBzdWJfZm10dHlfcmVzdCwgUmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFJlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIElnbm9yZWRfcmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcblxuICB8IEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHksIHN1Yl9mbXR0eV9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgc3ViMl9mbXR0eSA8PiBGbXR0eV9FQkIgc3ViMl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIHN1Yl9mbXR0eV9yZXN0JyksIGZtdCcpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5LCAgc3ViMl9mbXR0eSwgIHN1Yl9mbXR0eV9yZXN0KSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHknLCBzdWIyX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICAoKiBUT0RPIGRlZmluZSBGbXR0eV9yZWxfRUJCIHRvIHJlbW92ZSB0aG9zZSBlcmFzZV9yZWwgKilcbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIxX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIxX2ZtdHR5JylcbiAgICB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMl9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMl9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBzdWJfZm10dHknID0gdHJhbnMgKHN5bW0gc3ViMV9mbXR0eScpIHN1YjJfZm10dHknIGluXG4gICAgbGV0IF8sIGYyLCBfLCBmNCA9IGZtdHR5X3JlbF9kZXQgc3ViX2ZtdHR5JyBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIChlcmFzZV9yZWwgc3ViX2ZtdHR5X3Jlc3QpIGZtdCBmbXR0eV9yZXN0XG4gICAgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHknLCBzdWIyX2ZtdHR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW0gc3ViX2ZtdHR5X3Jlc3QnKSxcbiAgICAgICAgICAgICAgICAgICBmbXQnKVxuICB8IEVuZF9vZl9mbXR0eSwgZm10dHkgLT5cbiAgICBGbXR0eV9mbXRfRUJCIChFbmRfb2ZfZm10dHksIHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkpXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgYHJlY2FzdGAgaXMgYSBiaXQgZGlzYXBwb2ludGluZy4gVGhlXG4gICBpbnZhcmlhbnQgcHJvdmlkZWQgYnkgdGhlIHR5cGUgYXJlIHZlcnkgc3Ryb25nOiB0aGUgaW5wdXQgZm9ybWF0J3NcbiAgIHR5cGUgaXMgaW4gcmVsYXRpb24gdG8gdGhlIG91dHB1dCB0eXBlJ3MgYXMgd2l0bmVzc2VkIGJ5IHRoZVxuICAgZm10dHlfcmVsIGFyZ3VtZW50LiBPbmUgd291bGQgYXQgZmlyc3QgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYmVcbiAgIHRvdGFsLCBhbmQgaW1wbGVtZW50YWJsZSBieSBleGhhdXN0aXZlIHBhdHRlcm4gbWF0Y2hpbmcuIEluc3RlYWQsXG4gICB3ZSByZXVzZSB0aGUgaGlnaGx5IHBhcnRpYWwgYW5kIG11Y2ggbGVzcyB3ZWxsLWRlZmluZWQgZnVuY3Rpb25cbiAgIGB0eXBlX2Zvcm1hdGAgdGhhdCBoYXMgbG9zdCBhbGwga25vd2xlZGdlIG9mIHRoZSBjb3JyZXNwb25kZW5jZVxuICAgYmV0d2VlbiB0aGUgYXJndW1lbnQncyB0eXBlcy5cblxuICAgQmVzaWRlcyB0aGUgZmFjdCB0aGF0IHRoaXMgZnVuY3Rpb24gcmV1c2VzIGEgbG90IG9mIHRoZVxuICAgYHR5cGVfZm9ybWF0YCBsb2dpYyAoZWcuOiBzZWVpbmcgSW50X3R5IGluIHRoZSBmbXR0eSBwYXJhbWV0ZXIgZG9lc1xuICAgbm90IGxldCB5b3UgbWF0Y2ggb24gSW50IG9ubHksIGFzIHlvdSBtYXkgaW4gZmFjdCBoYXZlIEZsb2F0XG4gICAoQXJnX3BhZGRpbmcsIC4uLikgKFwiJS4qZFwiKSBiZWdpbm5pbmcgd2l0aCBhbiBJbnRfdHkpLCBpdCBpcyBhbHNvXG4gICBhIHBhcnRpYWwgZnVuY3Rpb24sIGJlY2F1c2UgdGhlIHR5cGluZyBpbmZvcm1hdGlvbiBpbiBhIGZvcm1hdCBpc1xuICAgbm90IHF1aXRlIGVub3VnaCB0byByZWNvbnN0cnVjdCBpdCB1bmFtYmlndW91c2x5LiBGb3IgZXhhbXBsZSwgdGhlXG4gICBmb3JtYXQgdHlwZXMgb2YgXCIlZCVfclwiIGFuZCBcIiVfciVkXCIgaGF2ZSB0aGUgc2FtZSBmb3JtYXQ2XG4gICBwYXJhbWV0ZXJzLCBidXQgdGhleSBhcmUgbm90IGF0IGFsbCBleGNoYW5nZWFibGUsIGFuZCBwdXR0aW5nIG9uZVxuICAgaW4gcGxhY2Ugb2YgdGhlIG90aGVyIG11c3QgcmVzdWx0IGluIGEgZHluYW1pYyBmYWlsdXJlLlxuXG4gICBHaXZlbiB0aGF0OlxuICAgLSB3ZSdkIGhhdmUgdG8gZHVwbGljYXRlIGEgbG90IG9mIG5vbi10cml2aWFsIHR5cGluZyBsb2dpYyBmcm9tIHR5cGVfZm9ybWF0XG4gICAtIHRoaXMgd291bGRuJ3QgZXZlbiBlbGltaW5hdGUgKGFsbCkgdGhlIGR5bmFtaWMgZmFpbHVyZXNcbiAgIHdlIGRlY2lkZWQgdG8ganVzdCByZXVzZSB0eXBlX2Zvcm1hdCBkaXJlY3RseSBmb3Igbm93LlxuKilcbmxldCByZWNhc3QgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRcbj0gZnVuIGZtdCBmbXR0eSAtPlxuICB0eXBlX2Zvcm1hdCBmbXQgKGVyYXNlX3JlbCAoc3ltbSBmbXR0eSkpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFByaW50aW5nIHRvb2xzICopXG5cbigqIEFkZCBwYWRkaW5nIHNwYWNlcyBhcm91bmQgYSBzdHJpbmcuICopXG5sZXQgZml4X3BhZGRpbmcgcGFkdHkgd2lkdGggc3RyID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCB3aWR0aCwgcGFkdHkgPVxuICAgIGFicyB3aWR0aCxcbiAgICAoKiB3aGlsZSBsaXRlcmFsIHBhZGRpbmcgd2lkdGhzIGFyZSBhbHdheXMgbm9uLW5lZ2F0aXZlLFxuICAgICAgIGR5bmFtaWNhbGx5LXNldCB3aWR0aHMgKEFyZ19wYWRkaW5nLCBlZy4gJSpkKSBtYXkgYmUgbmVnYXRpdmU7XG4gICAgICAgd2UgaW50ZXJwcmV0IHRob3NlIGFzIHNwZWNpZnlpbmcgYSBwYWRkaW5nLXRvLXRoZS1sZWZ0OyB0aGlzXG4gICAgICAgbWVhbnMgdGhhdCAnMCcgbWF5IGdldCBkcm9wcGVkIGV2ZW4gaWYgaXQgd2FzIGV4cGxpY2l0bHkgc2V0LFxuICAgICAgIGJ1dDpcbiAgICAgICAtIHRoaXMgaXMgd2hhdCB0aGUgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRvZXMsIGFuZFxuICAgICAgICAgd2UgcHJlc2VydmUgY29tcGF0aWJpbGl0eSBpZiBwb3NzaWJsZVxuICAgICAgIC0gd2UgY291bGQgb25seSBzaWduYWwgdGhpcyBpc3N1ZSBieSBmYWlsaW5nIGF0IHJ1bnRpbWUsXG4gICAgICAgICB3aGljaCBpcyBub3QgdmVyeSBuaWNlLi4uICopXG4gICAgaWYgd2lkdGggPCAwIHRoZW4gTGVmdCBlbHNlIHBhZHR5IGluXG4gIGlmIHdpZHRoIDw9IGxlbiB0aGVuIHN0ciBlbHNlXG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2Ugd2lkdGggKGlmIHBhZHR5ID0gWmVyb3MgdGhlbiAnMCcgZWxzZSAnICcpIGluXG4gICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgIHwgTGVmdCAgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzIDAgbGVuXG4gICAgfCBSaWdodCAtPiBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHdpZHRoIC0gbGVuKSBsZW5cbiAgICB8IFplcm9zIHdoZW4gbGVuID4gMCAmJiAoc3RyLlswXSA9ICcrJyB8fCBzdHIuWzBdID0gJy0nIHx8IHN0ci5bMF0gPSAnICcpIC0+XG4gICAgICBCeXRlcy5zZXQgcmVzIDAgc3RyLlswXTtcbiAgICAgIFN0cmluZy5ibGl0IHN0ciAxIHJlcyAod2lkdGggLSBsZW4gKyAxKSAobGVuIC0gMSlcbiAgICB8IFplcm9zIHdoZW4gbGVuID4gMSAmJiBzdHIuWzBdID0gJzAnICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICAgIFN0cmluZy5ibGl0IHN0ciAyIHJlcyAod2lkdGggLSBsZW4gKyAyKSAobGVuIC0gMilcbiAgICB8IFplcm9zIC0+XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHdpZHRoIC0gbGVuKSBsZW5cbiAgICBlbmQ7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogQWRkICcwJyBwYWRkaW5nIHRvIGludCwgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NCBzdHJpbmcgcmVwcmVzZW50YXRpb24uICopXG5sZXQgZml4X2ludF9wcmVjaXNpb24gcHJlYyBzdHIgPVxuICBsZXQgcHJlYyA9IGFicyBwcmVjIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBtYXRjaCBzdHIuWzBdIHdpdGhcbiAgfCAoJysnIHwgJy0nIHwgJyAnKSBhcyBjIHdoZW4gcHJlYyArIDEgPiBsZW4gLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSAocHJlYyArIDEpICcwJyBpblxuICAgIEJ5dGVzLnNldCByZXMgMCBjO1xuICAgIFN0cmluZy5ibGl0IHN0ciAxIHJlcyAocHJlYyAtIGxlbiArIDIpIChsZW4gLSAxKTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8ICcwJyB3aGVuIHByZWMgKyAyID4gbGVuICYmIGxlbiA+IDEgJiYgKHN0ci5bMV0gPSAneCcgfHwgc3RyLlsxXSA9ICdYJykgLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSAocHJlYyArIDIpICcwJyBpblxuICAgIEJ5dGVzLnNldCByZXMgMSBzdHIuWzFdO1xuICAgIFN0cmluZy5ibGl0IHN0ciAyIHJlcyAocHJlYyAtIGxlbiArIDQpIChsZW4gLSAyKTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8ICcwJyAuLiAnOScgfCAnYScgLi4gJ2YnIHwgJ0EnIC4uICdGJyB3aGVuIHByZWMgPiBsZW4gLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSBwcmVjICcwJyBpblxuICAgIFN0cmluZy5ibGl0IHN0ciAwIHJlcyAocHJlYyAtIGxlbikgbGVuO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgXyAtPlxuICAgIHN0clxuXG4oKiBFc2NhcGUgYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBPQ2FtbCBsZXhpbmcgY29udmVudGlvbi4gKilcbmxldCBzdHJpbmdfdG9fY2FtbF9zdHJpbmcgc3RyID1cbiAgbGV0IHN0ciA9IFN0cmluZy5lc2NhcGVkIHN0ciBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcXCInIGluXG4gIFN0cmluZy51bnNhZmVfYmxpdCBzdHIgMCByZXMgMSBsO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBHZW5lcmF0ZSB0aGUgZm9ybWF0X2ludC9pbnQzMi9uYXRpdmVpbnQvaW50NjQgZmlyc3QgYXJndW1lbnRcbiAgIGZyb20gYW4gaW50X2NvbnYuICopXG5sZXQgZm9ybWF0X29mX2ljb252ID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVkXCIgfCBJbnRfcGQgLT4gXCIlK2RcIiB8IEludF9zZCAtPiBcIiUgZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlaVwiIHwgSW50X3BpIC0+IFwiJStpXCIgfCBJbnRfc2kgLT4gXCIlIGlcIlxuICB8IEludF94IC0+IFwiJXhcIiB8IEludF9DeCAtPiBcIiUjeFwiXG4gIHwgSW50X1ggLT4gXCIlWFwiIHwgSW50X0NYIC0+IFwiJSNYXCJcbiAgfCBJbnRfbyAtPiBcIiVvXCIgfCBJbnRfQ28gLT4gXCIlI29cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJXVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252TCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlTGRcIiB8IEludF9wZCAtPiBcIiUrTGRcIiB8IEludF9zZCAtPiBcIiUgTGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJUxpXCIgfCBJbnRfcGkgLT4gXCIlK0xpXCIgfCBJbnRfc2kgLT4gXCIlIExpXCJcbiAgfCBJbnRfeCAtPiBcIiVMeFwiIHwgSW50X0N4IC0+IFwiJSNMeFwiXG4gIHwgSW50X1ggLT4gXCIlTFhcIiB8IEludF9DWCAtPiBcIiUjTFhcIlxuICB8IEludF9vIC0+IFwiJUxvXCIgfCBJbnRfQ28gLT4gXCIlI0xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVMdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZsID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVsZFwiIHwgSW50X3BkIC0+IFwiJStsZFwiIHwgSW50X3NkIC0+IFwiJSBsZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbGlcIiB8IEludF9waSAtPiBcIiUrbGlcIiB8IEludF9zaSAtPiBcIiUgbGlcIlxuICB8IEludF94IC0+IFwiJWx4XCIgfCBJbnRfQ3ggLT4gXCIlI2x4XCJcbiAgfCBJbnRfWCAtPiBcIiVsWFwiIHwgSW50X0NYIC0+IFwiJSNsWFwiXG4gIHwgSW50X28gLT4gXCIlbG9cIiB8IEludF9DbyAtPiBcIiUjbG9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJWx1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udm4gPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJW5kXCIgfCBJbnRfcGQgLT4gXCIlK25kXCIgfCBJbnRfc2QgLT4gXCIlIG5kXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVuaVwiIHwgSW50X3BpIC0+IFwiJStuaVwiIHwgSW50X3NpIC0+IFwiJSBuaVwiXG4gIHwgSW50X3ggLT4gXCIlbnhcIiB8IEludF9DeCAtPiBcIiUjbnhcIlxuICB8IEludF9YIC0+IFwiJW5YXCIgfCBJbnRfQ1ggLT4gXCIlI25YXCJcbiAgfCBJbnRfbyAtPiBcIiVub1wiIHwgSW50X0NvIC0+IFwiJSNub1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlbnVcIlxuXG4oKiBHZW5lcmF0ZSB0aGUgZm9ybWF0X2Zsb2F0IGZpcnN0IGFyZ3VtZW50IGZyb20gYSBmbG9hdF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjID1cbiAgICBsZXQgcHJlYyA9IGFicyBwcmVjIGluXG4gICAgbGV0IHN5bWIgPSBjaGFyX29mX2Zjb252IH5jRjonZycgZmNvbnYgaW5cbiAgICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICAgIGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udjtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgcHJlYyk7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBzeW1iO1xuICAgIGJ1ZmZlcl9jb250ZW50cyBidWZcblxubGV0IHRyYW5zZm9ybV9pbnRfYWx0IGljb252IHMgPVxuICBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1IC0+XG4gICAgbGV0IGRpZ2l0cyA9XG4gICAgICBsZXQgbiA9IHJlZiAwIGluXG4gICAgICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgICAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgICB8ICcwJy4uJzknIC0+IGluY3IgblxuICAgICAgICB8IF8gLT4gKClcbiAgICAgIGRvbmU7XG4gICAgICAhblxuICAgIGluXG4gICAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzICsgKGRpZ2l0cyAtIDEpIC8gMykgaW5cbiAgICBsZXQgcG9zID0gcmVmIDAgaW5cbiAgICBsZXQgcHV0IGMgPSBCeXRlcy5zZXQgYnVmICFwb3MgYzsgaW5jciBwb3MgaW5cbiAgICBsZXQgbGVmdCA9IHJlZiAoKGRpZ2l0cyAtIDEpIG1vZCAzICsgMSkgaW5cbiAgICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgJzAnLi4nOScgYXMgYyAtPlxuICAgICAgICAgIGlmICFsZWZ0ID0gMCB0aGVuIChwdXQgJ18nOyBsZWZ0IDo9IDMpOyBkZWNyIGxlZnQ7IHB1dCBjXG4gICAgICB8IGMgLT4gcHV0IGNcbiAgICBkb25lO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmXG4gIHwgXyAtPiBzXG5cbigqIENvbnZlcnQgYW4gaW50ZWdlciB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gYSBjb252ZXJzaW9uLiAqKVxubGV0IGNvbnZlcnRfaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludCAoZm9ybWF0X29mX2ljb252IGljb252KSBuKVxubGV0IGNvbnZlcnRfaW50MzIgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50MzIgKGZvcm1hdF9vZl9pY29udmwgaWNvbnYpIG4pXG5sZXQgY29udmVydF9uYXRpdmVpbnQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfbmF0aXZlaW50IChmb3JtYXRfb2ZfaWNvbnZuIGljb252KSBuKVxubGV0IGNvbnZlcnRfaW50NjQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50NjQgKGZvcm1hdF9vZl9pY29udkwgaWNvbnYpIG4pXG5cbigqIENvbnZlcnQgYSBmbG9hdCB0byBzdHJpbmcuICopXG4oKiBGaXggc3BlY2lhbCBjYXNlIG9mIFwiT0NhbWwgZmxvYXQgZm9ybWF0XCIuICopXG5sZXQgY29udmVydF9mbG9hdCBmY29udiBwcmVjIHggPVxuICBsZXQgaGV4ICgpID1cbiAgICBsZXQgc2lnbiA9XG4gICAgICBtYXRjaCBmc3QgZmNvbnYgd2l0aFxuICAgICAgfCBGbG9hdF9mbGFnX3AgLT4gJysnXG4gICAgICB8IEZsb2F0X2ZsYWdfcyAtPiAnICdcbiAgICAgIHwgXyAtPiAnLScgaW5cbiAgICBoZXhzdHJpbmdfb2ZfZmxvYXQgeCBwcmVjIHNpZ24gaW5cbiAgbGV0IGFkZF9kb3RfaWZfbmVlZGVkIHN0ciA9XG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gICAgbGV0IHJlYyBpc192YWxpZCBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5baV0gd2l0aFxuICAgICAgICB8ICcuJyB8ICdlJyB8ICdFJyAtPiB0cnVlXG4gICAgICAgIHwgXyAtPiBpc192YWxpZCAoaSArIDEpIGluXG4gICAgaWYgaXNfdmFsaWQgMCB0aGVuIHN0ciBlbHNlIHN0ciBeIFwiLlwiIGluXG4gIGxldCBjYW1sX3NwZWNpYWxfdmFsIHN0ciA9IG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IHggd2l0aFxuICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPiBzdHJcbiAgICB8IEZQX2luZmluaXRlIC0+IGlmIHggPCAwLjAgdGhlbiBcIm5lZ19pbmZpbml0eVwiIGVsc2UgXCJpbmZpbml0eVwiXG4gICAgfCBGUF9uYW4gLT4gXCJuYW5cIiBpblxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2ggLT4gaGV4ICgpXG4gIHwgRmxvYXRfSCAtPiBTdHJpbmcudXBwZXJjYXNlX2FzY2lpIChoZXggKCkpXG4gIHwgRmxvYXRfQ0YgLT4gY2FtbF9zcGVjaWFsX3ZhbCAoaGV4ICgpKVxuICB8IEZsb2F0X0YgLT5cbiAgICBsZXQgc3RyID0gZm9ybWF0X2Zsb2F0IChmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYykgeCBpblxuICAgIGNhbWxfc3BlY2lhbF92YWwgKGFkZF9kb3RfaWZfbmVlZGVkIHN0cilcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfRyAtPlxuICAgIGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHhcblxuKCogQ29udmVydCBhIGNoYXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBPQ2FtbCBsZXhpY2FsIGNvbnZlbnRpb24uICopXG5sZXQgZm9ybWF0X2NhbWxfY2hhciBjID1cbiAgbGV0IHN0ciA9IENoYXIuZXNjYXBlZCBjIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKGwgKyAyKSAnXFwnJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogQ29udmVydCBhIGZvcm1hdCB0eXBlIHRvIHN0cmluZyAqKVxubGV0IHN0cmluZ19vZl9mbXR0eSBmbXR0eSA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXR0eSBidWYgZm10dHk7XG4gIGJ1ZmZlcl9jb250ZW50cyBidWZcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICgqIEdlbmVyaWMgcHJpbnRpbmcgZnVuY3Rpb24gKilcblxuKCogTWFrZSBhIGdlbmVyaWMgcHJpbnRpbmcgZnVuY3Rpb24uICopXG4oKiBVc2VkIHRvIGdlbmVyYXRlIFByaW50ZiBhbmQgRm9ybWF0IHByaW50aW5nIGZ1bmN0aW9ucy4gKilcbigqIFBhcmFtZXRlcnM6XG4gICAgIGs6IGEgY29udGludWF0aW9uIGZpbmFsbHkgYXBwbGllZCB0byB0aGUgb3V0cHV0IHN0cmVhbSBhbmQgdGhlIGFjY3VtdWxhdG9yLlxuICAgICBvOiB0aGUgb3V0cHV0IHN0cmVhbSAoc2VlIGssICVhIGFuZCAldCkuXG4gICAgIGFjYzogcmV2IGxpc3Qgb2YgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1c2gsIGZvcm1hdHRpbmcsIC4uLikuXG4gICAgIGZtdDogdGhlIGZvcm1hdC4gKilcbmxldCByZWMgbWFrZV9wcmludGYgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXQgLT4gbWF0Y2ggZm10IHdpdGhcbiAgfCBDaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9jYW1sX2NoYXIgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIChmdW4gc3RyIC0+IHN0cilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCBzdHJpbmdfdG9fY2FtbF9zdHJpbmdcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludCBpY29udlxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQzMiBpY29udlxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfbmF0aXZlaW50IGljb252XG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludDY0IGljb252XG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGZjb252XG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCBzdHJpbmdfb2ZfYm9vbFxuICB8IEFscGhhIHJlc3QgLT5cbiAgICBmdW4gZiB4IC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmdW4gbyAtPiBmIG8geCkpIHJlc3RcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgZnVuIGYgLT4gbWFrZV9wcmludGYgayAoQWNjX2RlbGF5IChhY2MsIGYpKSByZXN0XG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmICgpKVxuICB8IFJlYWRlciBfIC0+XG4gICAgKCogVGhpcyBjYXNlIGlzIGltcG9zc2libGUsIGJ5IHR5cGluZyBvZiBmb3JtYXRzLiAqKVxuICAgICgqIEluZGVlZCwgc2luY2UgcHJpbnRmIGFuZCBjby4gdGFrZSBhIGZvcm1hdDQgYXMgYXJndW1lbnQsIHRoZSAnZCBhbmQgJ2VcbiAgICAgICB0eXBlIHBhcmFtZXRlcnMgb2YgZm10IGFyZSBvYnZpb3VzbHkgZXF1YWxzLiBUaGUgUmVhZGVyIGlzIHRoZVxuICAgICAgIG9ubHkgY29uc3RydWN0b3Igd2hpY2ggdG91Y2ggJ2QgYW5kICdlIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgZm9ybWF0XG4gICAgICAgdHlwZSwgaXQgYWRkcyBhbiAoLT4pIHRvIHRoZSAnZCBwYXJhbWV0ZXJzLiBDb25zZXF1ZW50bHksIGEgZm9ybWF0NFxuICAgICAgIGNhbm5vdCBjb250YWluIGEgUmVhZGVyIG5vZGUsIGV4Y2VwdCBpbiB0aGUgc3ViLWZvcm1hdCBhc3NvY2lhdGVkIHRvXG4gICAgICAgYW4gJXsuLi4lfS4gSXQncyBub3QgYSBwcm9ibGVtIGJlY2F1c2UgbWFrZV9wcmludGYgZG8gbm90IGNhbGxcbiAgICAgICBpdHNlbGYgcmVjdXJzaXZlbHkgb24gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0byAley4uLiV9LiAqKVxuICAgIGFzc2VydCBmYWxzZVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfZmx1c2ggYWNjKSByZXN0XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19zdHJpbmdfbGl0ZXJhbCAoYWNjLCBzdHIpKSByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2NoYXJfbGl0ZXJhbCAoYWNjLCBjaHIpKSByZXN0XG5cbiAgfCBGb3JtYXRfYXJnIChfLCBzdWJfZm10dHksIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gc3RyaW5nX29mX2ZtdHR5IHN1Yl9mbXR0eSBpblxuICAgIChmdW4gc3RyIC0+XG4gICAgICBpZ25vcmUgc3RyO1xuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHR5KSkgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgIGZ1biAoRm9ybWF0IChmbXQsIF8pKSAtPiBtYWtlX3ByaW50ZiBrIGFjY1xuICAgICAgKGNvbmNhdF9mbXQgKHJlY2FzdCBmbXQgZm10dHkpIHJlc3QpXG5cbiAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPlxuICAgIGxldCBuZXdfYWNjID0gQWNjX2ludmFsaWRfYXJnIChhY2MsIFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlW1wiKSBpblxuICAgIGZ1biBfIC0+IG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT5cbiAgICAoKiBUaGlzIGNhc2Ugc2hvdWxkIGJlIHJlZnVzZWQgZm9yIFByaW50Zi4gKilcbiAgICAoKiBBY2NlcHRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKilcbiAgICAoKiBJbnRlcnByZXQgJWwsICVuIGFuZCAlTCBhcyAldS4gKilcbiAgICBmdW4gbiAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZm9ybWF0X2ludCBcIiV1XCIgbikgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX2NoYXIgKGFjYywgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIG1ha2VfaWdub3JlZF9wYXJhbSBrIGFjYyBpZ24gcmVzdFxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfbGl0IChhY2MsIGZtdGluZ19saXQpKSByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBsZXQgaycga2FjYyA9XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19nZW4gKGFjYywgQWNjX29wZW5fdGFnIGthY2MpKSByZXN0IGluXG4gICAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXQnXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBsZXQgaycga2FjYyA9XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19nZW4gKGFjYywgQWNjX29wZW5fYm94IGthY2MpKSByZXN0IGluXG4gICAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXQnXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgayBhY2NcblxuKCogRGVsYXkgdGhlIGVycm9yIChJbnZhbGlkX2FyZ3VtZW50IFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlX1wiKS4gKilcbigqIEdlbmVyYXRlIGZ1bmN0aW9ucyB0byB0YWtlIHJlbWFpbmluZyBhcmd1bWVudHMgKGFmdGVyIHRoZSBcIiVfXCIpLiAqKVxuYW5kIG1ha2VfaWdub3JlZF9wYXJhbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIGZtdHR5IGZtdFxuICB8IElnbm9yZWRfcmVhZGVyICAgICAgICAgICAgICAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG5cblxuKCogU3BlY2lhbCBjYXNlIG9mIHByaW50ZiBcIiVfKFwiLiAqKVxuYW5kIG1ha2VfZnJvbV9mbXR0eSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGZtdHR5IC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXR0eSBmbXQgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFN0cmluZ190eSByZXN0ICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludF90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludDMyX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IE5hdGl2ZWludF90eSByZXN0ICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludDY0X3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEZsb2F0X3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEJvb2xfdHkgcmVzdCAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFscGhhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQW55X3R5IHJlc3QgICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgUmVhZGVyX3R5IF8gICAgICAgICAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgXyAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgRm9ybWF0X2FyZ190eSAoXywgcmVzdCkgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgRW5kX29mX2ZtdHR5ICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIChjb25jYXRfZm10dHkgdHkgcmVzdCkgZm10XG5cbigqIEluc2VydCBhbiBBY2NfaW52YWxpZF9hcmcgaW4gdGhlIGFjY3VtdWxhdG9yIGFuZCBjb250aW51ZSB0byBnZW5lcmF0ZVxuICAgY2xvc3VyZXMgdG8gZ2V0IHRoZSByZW1haW5pbmcgYXJndW1lbnRzLiAqKVxuYW5kIG1ha2VfaW52YWxpZF9hcmcgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXQgLT5cbiAgbWFrZV9wcmludGYgayAoQWNjX2ludmFsaWRfYXJnIChhY2MsIFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlX1wiKSkgZm10XG5cbigqIEZpeCBwYWRkaW5nLCB0YWtlIGl0IGFzIGFuIGV4dHJhIGludGVnZXIgYXJndW1lbnQgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfcGFkZGluZyA6IHR5cGUgeCB6IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB6IC0+IGEpIHBhZGRpbmcgLT4gKHogLT4gc3RyaW5nKSAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgdHJhbnMgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIHRyYW5zIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZml4X3BhZGRpbmcgcGFkdHkgd2lkdGggKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5IC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG5cbigqIEZpeCBwYWRkaW5nIGFuZCBwcmVjaXNpb24gZm9yIGludCwgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NC4gKilcbigqIFRha2Ugb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gOiB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPiAoaW50X2NvbnYgLT4geiAtPiBzdHJpbmcpIC0+XG4gICAgaW50X2NvbnYgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHByZWMgdHJhbnMgaWNvbnYgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IHRyYW5zIGljb252IHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcblxuKCogQ29udmVydCBhIGZsb2F0LCBmaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGlmIG5lZWRlZC4gKilcbigqIFRha2UgdGhlIGZsb2F0IGFyZ3VtZW50IGFuZCBvbmUgb3IgdHdvIGV4dHJhIGludGVnZXIgYXJndW1lbnRzIGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIGZsb2F0IC0+IGEpIHByZWNpc2lvbiAtPiBmbG9hdF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIGZjb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiBwIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbGV0IHN0cicgPSBmaXhfcGFkZGluZyBwYWR0eSB3IHN0ciBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cicpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbGV0IHN0cicgPSBmaXhfcGFkZGluZyBwYWR0eSB3IHN0ciBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cicpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5hbmQgbWFrZV9jdXN0b20gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IHggLT4geSA9XG4gIGZ1biBrIGFjYyByZXN0IGFyaXR5IGYgLT4gbWF0Y2ggYXJpdHkgd2l0aFxuICB8IEN1c3RvbV96ZXJvIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+XG4gICAgZnVuIHggLT5cbiAgICAgIG1ha2VfY3VzdG9tIGsgYWNjIHJlc3QgYXJpdHkgKGYgeClcblxubGV0IGNvbnN0IHggXyA9IHhcblxubGV0IHJlYyBtYWtlX2lwcmludGYgOiB0eXBlIGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbiAgZnVuIGsgbyBmbXQgLT4gbWF0Y2ggZm10IHdpdGhcbiAgICB8IENoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQ2FtbF9zdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfc3RyaW5nIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBOYXRpdmVpbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEludDY0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBGbG9hdCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgQm9vbCAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEJvb2wgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBBbHBoYSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IFRoZXRhIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX2N1c3RvbV9hcml0eSBrIG8gcmVzdCBhcml0eVxuICAgIHwgUmVhZGVyIF8gLT5cbiAgICAgICAgKCogVGhpcyBjYXNlIGlzIGltcG9zc2libGUsIGJ5IHR5cGluZyBvZiBmb3JtYXRzLiAgU2VlIHRoZVxuICAgICAgICAgICBub3RlIGluIHRoZSBjb3JyZXNwb25kaW5nIGNhc2UgZm9yIG1ha2VfcHJpbnRmLiAqKVxuICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICB8IEZsdXNoIHJlc3QgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgRm9ybWF0X2FyZyAoXywgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpIC0+XG4gICAgICAgIGZ1biAoRm9ybWF0IChmbXQsIF8pKSAtPlxuICAgICAgICAgIG1ha2VfaXByaW50ZiBrIG9cbiAgICAgICAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuICAgIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaWdub3JlZF9wYXJhbSAoZnVuIF8gLT4gayBvKSAoRW5kX29mX2FjYykgaWduIHJlc3RcbiAgICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiAoZnVuIGtvYyAtPiBtYWtlX2lwcmludGYgayBrb2MgcmVzdCkgbyBmbXQnXG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgICAgICBrIG9cbmFuZCBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiA6XG4gIHR5cGUgeCB5IHogYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPiBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPiB4ID1cbiAgZnVuIGsgbyBmbXQgcGFkIHByZWMgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgICAsIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBOb19wYWRkaW5nICAgLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgTGl0X3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IExpdF9wYWRkaW5nIF8sIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKSlcbmFuZCBmbl9vZl9jdXN0b21fYXJpdHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+XG4gIHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB5ID1cbiAgZnVuIGsgbyBmbXQgLT4gZnVuY3Rpb25cbiAgICB8IEN1c3RvbV96ZXJvIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gZm10XG4gICAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgICAgICBjb25zdCAoZm5fb2ZfY3VzdG9tX2FyaXR5IGsgbyBmbXQgYXJpdHkpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnRpbnVhdGlvbnMgZm9yIG1ha2VfcHJpbnRmICopXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgbyBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBcIkB7XCI7IG91dHB1dF9hY2MgbyBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBcIkBbXCI7IG91dHB1dF9hY2MgbyBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9jaGFyIG8gY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZiBvXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBmbHVzaCBvXG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgbyBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBidWZwdXRfYWNjIGIgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkB7XCI7IGJ1ZnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAW1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDsgZiBiXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBidWZwdXRfYWNjIGIgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogRGlmZmVyIGZyb20gYnVmcHV0X2FjYyBieSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgJWEgYW5kICV0LiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgc3RycHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBzdHJwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgKGYgKCkpXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBzdHJwdXRfYWNjIGIgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBFcnJvciBtYW5hZ2VtZW50ICopXG5cbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgcHJldHR5LXByaW50ZWQgZXJyb3IgbWVzc2FnZS4gKilcbmxldCBmYWlsd2l0aF9tZXNzYWdlIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBrIGFjYyA9IHN0cnB1dF9hY2MgYnVmIGFjYzsgZmFpbHdpdGggKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXR0aW5nIHRvb2xzICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYW4gb3BlbiBibG9jayBkZXNjcmlwdGlvbiAoaW5kZW50LCBibG9ja190eXBlKSAqKVxubGV0IG9wZW5fYm94X29mX3N0cmluZyBzdHIgPVxuICBpZiBzdHIgPSBcIlwiIHRoZW4gKDAsIFBwX2JveCkgZWxzZVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCBpbnZhbGlkX2JveCAoKSA9IGZhaWx3aXRoX21lc3NhZ2UgXCJpbnZhbGlkIGJveCBkZXNjcmlwdGlvbiAlU1wiIHN0ciBpblxuICAgIGxldCByZWMgcGFyc2Vfc3BhY2VzIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuIGkgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnICcgfCAnXFx0JyAtPiBwYXJzZV9zcGFjZXMgKGkgKyAxKVxuICAgICAgICB8IF8gLT4gaVxuICAgIGFuZCBwYXJzZV9sd29yZCBpIGogPVxuICAgICAgaWYgaiA9IGxlbiB0aGVuIGogZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2pdIHdpdGhcbiAgICAgICAgfCAnYScgLi4gJ3onIC0+IHBhcnNlX2x3b3JkIGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4galxuICAgIGFuZCBwYXJzZV9pbnQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBwYXJzZV9pbnQgaSAoaiArIDEpXG4gICAgICAgIHwgXyAtPiBqIGluXG4gICAgbGV0IHdzdGFydCA9IHBhcnNlX3NwYWNlcyAwIGluXG4gICAgbGV0IHdlbmQgPSBwYXJzZV9sd29yZCB3c3RhcnQgd3N0YXJ0IGluXG4gICAgbGV0IGJveF9uYW1lID0gU3RyaW5nLnN1YiBzdHIgd3N0YXJ0ICh3ZW5kIC0gd3N0YXJ0KSBpblxuICAgIGxldCBuc3RhcnQgPSBwYXJzZV9zcGFjZXMgd2VuZCBpblxuICAgIGxldCBuZW5kID0gcGFyc2VfaW50IG5zdGFydCBuc3RhcnQgaW5cbiAgICBsZXQgaW5kZW50ID1cbiAgICAgIGlmIG5zdGFydCA9IG5lbmQgdGhlbiAwIGVsc2VcbiAgICAgICAgdHJ5IGludF9vZl9zdHJpbmcgKFN0cmluZy5zdWIgc3RyIG5zdGFydCAobmVuZCAtIG5zdGFydCkpXG4gICAgICAgIHdpdGggRmFpbHVyZSBfIC0+IGludmFsaWRfYm94ICgpIGluXG4gICAgbGV0IGV4cF9lbmQgPSBwYXJzZV9zcGFjZXMgbmVuZCBpblxuICAgIGlmIGV4cF9lbmQgPD4gbGVuIHRoZW4gaW52YWxpZF9ib3ggKCk7XG4gICAgbGV0IGJveF90eXBlID0gbWF0Y2ggYm94X25hbWUgd2l0aFxuICAgICAgfCBcIlwiIHwgXCJiXCIgLT4gUHBfYm94XG4gICAgICB8IFwiaFwiICAgICAgLT4gUHBfaGJveFxuICAgICAgfCBcInZcIiAgICAgIC0+IFBwX3Zib3hcbiAgICAgIHwgXCJodlwiICAgICAtPiBQcF9odmJveFxuICAgICAgfCBcImhvdlwiICAgIC0+IFBwX2hvdmJveFxuICAgICAgfCBfICAgICAgICAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIChpbmRlbnQsIGJveF90eXBlKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFBhcnNpbmcgdG9vbHMgKilcblxuKCogQ3JlYXRlIGEgcGFkZGluZ19mbXRfZWJiIGZyb20gYSBwYWRkaW5nIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHBhZGRpbmcgdG8gZGlzam9pbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50IGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgOiB0eXBlIHggeSAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHBhZGRpbmdfZm10X2ViYiA9XG5mdW4gcGFkIGZtdCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgICAgICAgICAtPiBQYWRkaW5nX2ZtdF9FQkIgKE5vX3BhZGRpbmcsIGZtdClcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkZGluZ19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIGZtdClcbiAgfCBBcmdfcGFkZGluZyBzICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChBcmdfcGFkZGluZyBzLCBmbXQpXG5cbigqIENyZWF0ZSBhIHByZWNpc2lvbl9mbXRfZWJiIGZyb20gYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcHJlY2lzaW9uIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgOiB0eXBlIHggeSAuXG4gICAgKHgsIHkpIHByZWNpc2lvbiAtPiAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgICAoXywgXywgXywgXywgXykgcHJlY2lzaW9uX2ZtdF9lYmIgPVxuZnVuIHByZWMgZm10IC0+IG1hdGNoIHByZWMgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiAgICAtPiBQcmVjaXNpb25fZm10X0VCQiAoTm9fcHJlY2lzaW9uLCBmbXQpXG4gIHwgTGl0X3ByZWNpc2lvbiBwIC0+IFByZWNpc2lvbl9mbXRfRUJCIChMaXRfcHJlY2lzaW9uIHAsIGZtdClcbiAgfCBBcmdfcHJlY2lzaW9uICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKEFyZ19wcmVjaXNpb24sIGZtdClcblxuKCogQ3JlYXRlIGEgcGFkcHJlY19mbXRfZWJiIGZyb20gYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIGFuZCB0aGUgcHJlY2lzaW9uIHRvIGRpc2pvaW4gdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50c1xuICAgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3BhZHByZWNfZm10X2ViYiA6IHR5cGUgeCB5IHogdCAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPlxuICAgIChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAoXywgXywgXywgXywgXykgcGFkcHJlY19mbXRfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXQgLT5cbiAgbGV0IFByZWNpc2lvbl9mbXRfRUJCIChwcmVjLCBmbXQnKSA9IG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgcHJlYyBmbXQgaW5cbiAgbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkcHJlY19mbXRfRUJCIChOb19wYWRkaW5nLCBwcmVjLCBmbXQnKVxuICB8IExpdF9wYWRkaW5nIChzLCB3KSAtPiBQYWRwcmVjX2ZtdF9FQkIgKExpdF9wYWRkaW5nIChzLCB3KSwgcHJlYywgZm10JylcbiAgfCBBcmdfcGFkZGluZyBzICAgICAgLT4gUGFkcHJlY19mbXRfRUJCIChBcmdfcGFkZGluZyBzLCBwcmVjLCBmbXQnKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgcGFyc2luZyAqKVxuXG4oKiBQYXJzZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBmb3JtYXQgYW5kIGNyZWF0ZSBhIGZtdF9lYmIuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gaW4gY2FzZSBvZiBpbnZhbGlkIGZvcm1hdC4gKilcbmxldCBmbXRfZWJiX29mX3N0cmluZyA/bGVnYWN5X2JlaGF2aW9yIHN0ciA9XG4gICgqIFBhcmFtZXRlcnMgbmFtaW5nIGNvbnZlbnRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIGxpdF9zdGFydDogc3RhcnQgb2YgdGhlIGxpdGVyYWwgc2VxdWVuY2UuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gc3RyX2luZDogY3VycmVudCBpbmRleCBpbiB0aGUgc3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBlbmRfaW5kOiBlbmQgb2YgdGhlIGN1cnJlbnQgKHN1Yi0pZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHBjdF9pbmQ6IGluZGV4IG9mIHRoZSAnJScgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAqKVxuICAoKiAgIC0gemVybzogIGlzIHRoZSAnMCcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBtaW51czogaXMgdGhlICctJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBsdXM6ICBpcyB0aGUgJysnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gaGFzaDogIGlzIHRoZSAnIycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBzcGFjZTogaXMgdGhlICcgJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGlnbjogICBpcyB0aGUgJ18nIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gcGFkOiBwYWRkaW5nIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwcmVjOiBwcmVjaXNpb24gb2YgdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN5bWI6IGNoYXIgcmVwcmVzZW50aW5nIHRoZSBjb252ZXJzaW9uICgnYycsICdzJywgJ2QnLCAuLi4pLiAqKVxuICAoKiAgIC0gY2hhcl9zZXQ6IHNldCBvZiBjaGFyYWN0ZXJzIGFzIGJpdG1hcCAoc2VlIHNjYW5mICVbLi4uXSkuICAgICopXG5cbiAgbGV0IGxlZ2FjeV9iZWhhdmlvciA9IG1hdGNoIGxlZ2FjeV9iZWhhdmlvciB3aXRoXG4gICAgfCBTb21lIGZsYWcgLT4gZmxhZ1xuICAgIHwgTm9uZSAtPiB0cnVlXG4gICgqICBXaGVuIHRoaXMgZmxhZyBpcyBlbmFibGVkLCB0aGUgZm9ybWF0IHBhcnNlciB0cmllcyB0byBiZWhhdmUgYXNcbiAgICAgIHRoZSA8NC4wMiBpbXBsZW1lbnRhdGlvbnMsIGluIHBhcnRpY3VsYXIgaXQgaWdub3JlcyBtb3N0IGJlbmluZVxuICAgICAgbm9uc2Vuc2ljYWwgZm9ybWF0LiBXaGVuIHRoZSBmbGFnIGlzIGRpc2FibGVkLCBpdCB3aWxsIHJlamVjdCBhbnlcbiAgICAgIGZvcm1hdCB0aGF0IGlzIG5vdCBhY2NlcHRlZCBieSB0aGUgc3BlY2lmaWNhdGlvbi5cblxuICAgICAgQSB0eXBpY2FsIGV4YW1wbGUgd291bGQgYmUgXCIlKyBkXCI6IHNwZWNpZnlpbmcgYm90aCAnKycgKGlmIHRoZVxuICAgICAgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aCBhICcrJyB0byBnZXQgdGhlIHNhbWUgd2lkdGggYXNcbiAgICAgIG5lZ2F0aXZlIG51bWJlcnMpIGFuZCAnICcgKGlmIHRoZSBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoXG4gICAgICBhIHNwYWNlKSBkb2VzIG5vdCBtYWtlIHNlbnNlLCBidXQgdGhlIGxlZ2FjeSAoPCA0LjAyKVxuICAgICAgaW1wbGVtZW50YXRpb24gd2FzIGhhcHB5IHRvIGp1c3QgaWdub3JlIHRoZSBzcGFjZS5cbiAgKilcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UuICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmQgbXNnID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBtc2dcbiAgaW5cblxuICAoKiBVc2VkIHdoZW4gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IChvciB0aGUgY3VycmVudCBzdWItZm9ybWF0KSB3YXMgZW5jb3VudGVyZWRcbiAgICAgIHVuZXhwZWN0ZWRseS4gKilcbiAgbGV0IHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIGVuZF9pbmRcbiAgICAgIFwidW5leHBlY3RlZCBlbmQgb2YgZm9ybWF0XCJcbiAgaW5cblxuICAoKiBVc2VkIGZvciAlMGM6IG5vIG90aGVyIHdpZHRocyBhcmUgaW1wbGVtZW50ZWQgKilcbiAgbGV0IGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZFxuICAgICAgXCJub24temVybyB3aWR0aHMgYXJlIHVuc3VwcG9ydGVkIGZvciAlYyBjb252ZXJzaW9uc1wiXG4gIGluXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiBvcHRpb24gZGVwZW5kZW5jeVxuICAgICBwcm9ibGVtLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfd2l0aG91dCBzdHJfaW5kIGMgcyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJyVjJyB3aXRob3V0ICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIGMgc1xuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiB1bmV4cGVjdGVkXG4gICAgIGNoYXJhY3Rlci4gKilcbiAgbGV0IGV4cGVjdGVkX2NoYXJhY3RlciBzdHJfaW5kIGV4cGVjdGVkIHJlYWQgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXMgZXhwZWN0ZWQsIHJlYWQgJUNcIlxuICAgICAgc3RyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZFxuICBpblxuXG4gICgqIFBhcnNlIHRoZSBzdHJpbmcgZnJvbSBiZWdfaW5kIChpbmNsdWRlZCkgdG8gZW5kX2luZCAoZXhjbHVkZWQpLiAqKVxuICBsZXQgcmVjIHBhcnNlIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGJlZ19pbmQgZW5kX2luZCAtPiBwYXJzZV9saXRlcmFsIGJlZ19pbmQgYmVnX2luZCBlbmRfaW5kXG5cbiAgKCogUmVhZCBsaXRlcmFsIGNoYXJhY3RlcnMgdXAgdG8gJyUnIG9yICdAJyBzcGVjaWFsIGNoYXJhY3RlcnMuICopXG4gIGFuZCBwYXJzZV9saXRlcmFsIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBFbmRfb2ZfZm9ybWF0IGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9mb3JtYXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2FmdGVyX2F0IChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX2xpdGVyYWwgbGl0X3N0YXJ0IChzdHJfaW5kICsgMSkgZW5kX2luZFxuXG4gICgqIFBhcnNlIGEgZm9ybWF0IGFmdGVyICclJyAqKVxuICBhbmQgcGFyc2VfZm9ybWF0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgZW5kX2luZCAtPiBwYXJzZV9pZ24gcGN0X2luZCAocGN0X2luZCArIDEpIGVuZF9pbmRcblxuICBhbmQgcGFyc2VfaWduIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdfJyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIChzdHJfaW5kKzEpIGVuZF9pbmQgdHJ1ZVxuICAgICAgfCBfIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGZhbHNlXG5cbiAgYW5kIHBhcnNlX2ZsYWdzIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiXG4gID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGlnbiAtPlxuICAgIGxldCB6ZXJvID0gcmVmIGZhbHNlIGFuZCBtaW51cyA9IHJlZiBmYWxzZVxuICAgIGFuZCBwbHVzID0gcmVmIGZhbHNlIGFuZCBzcGFjZSA9IHJlZiBmYWxzZVxuICAgIGFuZCBoYXNoID0gcmVmIGZhbHNlIGluXG4gICAgbGV0IHNldF9mbGFnIHN0cl9pbmQgZmxhZyA9XG4gICAgICAoKiBpbiBsZWdhY3kgbW9kZSwgZHVwbGljYXRlIGZsYWdzIGFyZSBhY2NlcHRlZCAqKVxuICAgICAgaWYgIWZsYWcgJiYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBkdXBsaWNhdGUgZmxhZyAlQ1wiXG4gICAgICAgICAgc3RyIHN0cl9pbmQgc3RyLltzdHJfaW5kXTtcbiAgICAgIGZsYWcgOj0gdHJ1ZTtcbiAgICBpblxuICAgIGxldCByZWMgcmVhZF9mbGFncyBzdHJfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzAnIC0+IHNldF9mbGFnIHN0cl9pbmQgemVybzsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnLScgLT4gc2V0X2ZsYWcgc3RyX2luZCBtaW51czsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcrJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHBsdXM7ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyMnIC0+IHNldF9mbGFnIHN0cl9pbmQgaGFzaDsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcgJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHNwYWNlOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kXG4gICAgICAgICAgIXplcm8gIW1pbnVzICFwbHVzICFoYXNoICFzcGFjZSBpZ25cbiAgICAgIGVuZFxuICAgIGluXG4gICAgcmVhZF9mbGFncyBzdHJfaW5kXG5cbiAgKCogVHJ5IHRvIHJlYWQgYSBkaWdpdGFsIG9yIGEgJyonIHBhZGRpbmcuICopXG4gIGFuZCBwYXJzZV9wYWRkaW5nIDogdHlwZSBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgemVybyBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFkdHkgPSBtYXRjaCB6ZXJvLCBtaW51cyB3aXRoXG4gICAgICB8IGZhbHNlLCBmYWxzZSAtPiBSaWdodFxuICAgICAgfCBmYWxzZSwgdHJ1ZSAgLT4gTGVmdFxuICAgICAgfCAgdHJ1ZSwgZmFsc2UgLT4gWmVyb3NcbiAgICAgIHwgIHRydWUsIHRydWUgIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExlZnRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJy0nIFwiMFwiIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICBsZXQgbmV3X2luZCwgd2lkdGggPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIChMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIChBcmdfcGFkZGluZyBwYWR0eSlcbiAgICB8IF8gLT5cbiAgICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICAgIHwgTGVmdCAgLT5cbiAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICctJyBcInBhZGRpbmdcIjtcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgfCBaZXJvcyAtPlxuICAgICAgICAgKCogYSAnMCcgcGFkZGluZyBpbmRpY2F0aW9uIG5vdCBmb2xsb3dlZCBieSBhbnl0aGluZyBzaG91bGRcbiAgICAgICAgICAgYmUgaW50ZXJwcmV0ZWQgYXMgYSBSaWdodCBwYWRkaW5nIG9mIHdpZHRoIDAuIFRoaXMgaXMgdXNlZFxuICAgICAgICAgICBieSBzY2FubmluZyBjb252ZXJzaW9ucyAlMHMgYW5kICUwYyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICAoTGl0X3BhZGRpbmcgKFJpZ2h0LCAwKSlcbiAgICAgIHwgUmlnaHQgLT5cbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgZW5kXG5cbiAgKCogSXMgcHJlY2lzaW9uIGRlZmluZWQ/ICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wYWRkaW5nIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJy4nIC0+XG4gICAgICBwYXJzZV9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWRcbiAgICB8IHN5bWIgLT5cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgTm9fcHJlY2lzaW9uIHBhZCBzeW1iXG5cbiAgKCogUmVhZCB0aGUgZGlnaXRhbCBvciAnKicgcHJlY2lzaW9uLiAqKVxuICBhbmQgcGFyc2VfcHJlY2lzaW9uIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmQgPVxuICAgICAgbGV0IG5ld19pbmQsIHByZWMgPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIHByZWMpIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZFxuICAgIHwgKCcrJyB8ICctJykgYXMgc3ltYiB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPlxuICAgICAgKCogTGVnYWN5IG1vZGUgd291bGQgYWNjZXB0IGFuZCBpZ25vcmUgJysnIG9yICctJyBiZWZvcmUgdGhlXG4gICAgICAgICBpbnRlZ2VyIGRlc2NyaWJpbmcgdGhlIGRlc2lyZWQgcHJlY2lzaW9uOyBub3RlIHRoYXQgdGhpc1xuICAgICAgICAgY2Fubm90IGhhcHBlbiBmb3IgcGFkZGluZyB3aWR0aCwgYXMgJysnIGFuZCAnLScgYWxyZWFkeSBoYXZlXG4gICAgICAgICBhIHNlbWFudGljcyB0aGVyZS5cblxuICAgICAgICAgVGhhdCBzYWlkLCB0aGUgaWRlYSAoc3VwcG9ydGVkIGJ5IHRoaXMgdHdlYWspIHRoYXQgd2lkdGggYW5kXG4gICAgICAgICBwcmVjaXNpb24gbGl0ZXJhbHMgYXJlIFwiaW50ZWdlciBsaXRlcmFsc1wiIGluIHRoZSBPQ2FtbCBzZW5zZSBpc1xuICAgICAgICAgc3RpbGwgYmxhdGFudGx5IHdyb25nLCBhcyAxMjNfNDU2IG9yIDB4RkYgYXJlIHJlamVjdGVkLiAqKVxuICAgICAgcGFyc2VfbGl0ZXJhbCAobWludXMgfHwgc3ltYiA9ICctJykgKHN0cl9pbmQgKyAxKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiBwYWQgQXJnX3ByZWNpc2lvblxuICAgIHwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogbm90ZSB0aGF0IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IGlnbm9yZSAnLicgd2l0aG91dFxuICAgICAgICAgICBhIG51bWJlciAoYXMgaXQgZG9lcyBmb3IgcGFkZGluZyBpbmRpY2F0aW9ucyksIGJ1dFxuICAgICAgICAgICBpbnRlcnByZXRzIGl0IGFzICcuMCcgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gMClcbiAgICAgIGVsc2VcbiAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICcuJyBcInByZWNpc2lvblwiXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wcmVjaXNpb24gOiB0eXBlIHggeSB6IHQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9jb252ICh0eXBlIHUpICh0eXBlIHYpIChwYWRwcmVjIDogKHUsIHYpIHBhZGRpbmcpID1cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgcHJlYyBwYWRwcmVjIHN0ci5bc3RyX2luZF0gaW5cbiAgICAoKiBpbiBsZWdhY3kgbW9kZSwgc29tZSBmb3JtYXRzICglcyBhbmQgJVMpIGFjY2VwdCBhIHdlaXJkIG1peCBvZlxuICAgICAgIHBhZGRpbmcgYW5kIHByZWNpc2lvbiwgd2hpY2ggaXMgbWVyZ2VkIGFzIGEgc2luZ2xlIHBhZGRpbmdcbiAgICAgICBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGluICUuMTBzIHRoZSBwcmVjaXNpb24gaXMgaW1wbGljaXRseVxuICAgICAgIHVuZGVyc3Rvb2QgYXMgcGFkZGluZyAlMTBzLCBidXQgdGhlIGxlZnQtcGFkZGluZyBjb21wb25lbnQgbWF5XG4gICAgICAgYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhIGxlZnQgcGFkZGluZyBvciBhIG5lZ2F0aXZlIHByZWNpc2lvbjpcbiAgICAgICAlLS4zcyBhbmQgJS4tM3MgYXJlIGVxdWl2YWxlbnQgdG8gJS0zcyAqKVxuICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgfCBOb19wYWRkaW5nIC0+IChcbiAgICAgIG1hdGNoIG1pbnVzLCBwcmVjIHdpdGhcbiAgICAgICAgfCBfLCBOb19wcmVjaXNpb24gLT4gcGFyc2VfY29udiBOb19wYWRkaW5nXG4gICAgICAgIHwgZmFsc2UsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoUmlnaHQsIG4pKVxuICAgICAgICB8IHRydWUsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoTGVmdCwgbikpXG4gICAgICAgIHwgZmFsc2UsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgUmlnaHQpXG4gICAgICAgIHwgdHJ1ZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBMZWZ0KVxuICAgIClcbiAgICB8IHBhZCAtPiBwYXJzZV9jb252IHBhZFxuXG4gICgqIENhc2UgYW5hbHlzaXMgb24gY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2NvbnZlcnNpb24gOiB0eXBlIHggeSB6IHQgdSB2IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+ICh4LCB5KSBwYWRkaW5nIC0+XG4gICAgICAgICh6LCB0KSBwcmVjaXNpb24gLT4gKHUsIHYpIHBhZGRpbmcgLT4gY2hhciAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIHBhZHByZWMgc3ltYiAtPlxuICAgICgqIEZsYWdzIHVzZWQgdG8gY2hlY2sgb3B0aW9uIHVzYWdlcy9jb21wYXRpYmlsaXRpZXMuICopXG4gICAgbGV0IHBsdXNfdXNlZCAgPSByZWYgZmFsc2UgYW5kIGhhc2hfdXNlZCA9IHJlZiBmYWxzZVxuICAgIGFuZCBzcGFjZV91c2VkID0gcmVmIGZhbHNlIGFuZCBpZ25fdXNlZCAgID0gcmVmIGZhbHNlXG4gICAgYW5kIHBhZF91c2VkICAgPSByZWYgZmFsc2UgYW5kIHByZWNfdXNlZCAgPSByZWYgZmFsc2UgaW5cblxuICAgICgqIEFjY2VzcyB0byBvcHRpb25zLCB1cGRhdGUgZmxhZ3MuICopXG4gICAgbGV0IGdldF9wbHVzICAgICgpID0gcGx1c191c2VkICA6PSB0cnVlOyBwbHVzXG4gICAgYW5kIGdldF9oYXNoICAgKCkgPSBoYXNoX3VzZWQgOj0gdHJ1ZTsgaGFzaFxuICAgIGFuZCBnZXRfc3BhY2UgICAoKSA9IHNwYWNlX3VzZWQgOj0gdHJ1ZTsgc3BhY2VcbiAgICBhbmQgZ2V0X2lnbiAgICAgKCkgPSBpZ25fdXNlZCAgIDo9IHRydWU7IGlnblxuICAgIGFuZCBnZXRfcGFkICAgICAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkXG4gICAgYW5kIGdldF9wcmVjICAgICgpID0gcHJlY191c2VkICA6PSB0cnVlOyBwcmVjXG4gICAgYW5kIGdldF9wYWRwcmVjICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRwcmVjIGluXG5cbiAgICBsZXQgZ2V0X2ludF9wYWQgKCkgOiAoeCx5KSBwYWRkaW5nID1cbiAgICAgICgqICU1LjNkIGlzIGFjY2VwdGVkIGFuZCBtZWFuaW5nZnVsOiBwYWQgdG8gbGVuZ3RoIDUgd2l0aFxuICAgICAgICAgc3BhY2VzLCBidXQgZmlyc3QgcGFkIHdpdGggemVyb3MgdXB0byBsZW5ndGggMyAoMC1wYWRkaW5nXG4gICAgICAgICBpcyB0aGUgaW50ZXJwcmV0YXRpb24gb2YgXCJwcmVjaXNpb25cIiBmb3IgaW50ZWdlciBmb3JtYXRzKS5cblxuICAgICAgICAgJTA1LjNkIGlzIHJlZHVuZGFudDogcGFkIHRvIGxlbmd0aCA1ICp3aXRoIHplcm9zKiwgYnV0XG4gICAgICAgICBmaXJzdCBwYWQgd2l0aCB6ZXJvcy4uLiBUbyBhZGQgaW5zdWx0IHRvIHRoZSBpbmp1cnksIHRoZVxuICAgICAgICAgbGVnYWN5IGltcGxlbWVudGF0aW9uIGlnbm9yZXMgdGhlIDAtcGFkZGluZyBpbmRpY2F0aW9uIGFuZFxuICAgICAgICAgZG9lcyB0aGUgNSBwYWRkaW5nIHdpdGggc3BhY2VzIGluc3RlYWQuIFdlIHJldXNlIHRoaXNcbiAgICAgICAgIGludGVycHJldGF0aW9uIGZvciBjb21wYXRpYmlsaXR5LCBidXQgc3RhdGljYWxseSByZWplY3QgdGhpc1xuICAgICAgICAgZm9ybWF0IHdoZW4gdGhlIGxlZ2FjeSBtb2RlIGlzIGRpc2FibGVkLCB0byBwcm90ZWN0IHN0cmljdFxuICAgICAgICAgdXNlcnMgZnJvbSB0aGlzIGNvcm5lciBjYXNlLiAqKVxuICAgICAgIG1hdGNoIGdldF9wYWQgKCksIGdldF9wcmVjICgpIHdpdGhcbiAgICAgICAgIHwgcGFkLCBOb19wcmVjaXNpb24gLT4gcGFkXG4gICAgICAgICB8IE5vX3BhZGRpbmcsIF8gICAgIC0+IE5vX3BhZGRpbmdcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCBuKSwgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIG4pXG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIFplcm9zLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IExpdF9wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZFxuICAgICAgICAgfCBBcmdfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWQgaW5cblxuICAgICgqIENoZWNrIHRoYXQgcGFkdHkgPD4gWmVyb3MuICopXG4gICAgbGV0IGNoZWNrX25vXzAgc3ltYiAodHlwZSBhIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgOiAoYSxiKSBwYWRkaW5nID1cbiAgICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nICgoTGVmdCB8IFJpZ2h0KSwgXykgLT4gcGFkXG4gICAgICB8IEFyZ19wYWRkaW5nIChMZWZ0IHwgUmlnaHQpIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgICB8IEFyZ19wYWRkaW5nIFplcm9zIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICBpblxuXG4gICAgKCogR2V0IHBhZGRpbmcgYXMgYSBwYWRfb3B0aW9uIChzZWUgXCIlX1wiLCBcIiV7XCIsIFwiJShcIiBhbmQgXCIlW1wiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBvcHRfb2ZfcGFkIGMgKHR5cGUgYSkgKHR5cGUgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA9IG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gTm9uZVxuICAgICAgfCBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKSAtPiBTb21lIHdpZHRoXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicwJ1wiXG4gICAgICB8IExpdF9wYWRkaW5nIChMZWZ0LCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJy0nXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicqJ1wiXG4gICAgaW5cbiAgICBsZXQgZ2V0X3BhZF9vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZCAoKSkgaW5cbiAgICBsZXQgZ2V0X3BhZHByZWNfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWRwcmVjICgpKSBpblxuXG4gICAgKCogR2V0IHByZWNpc2lvbiBhcyBhIHByZWNfb3B0aW9uIChzZWUgXCIlX2ZcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgZ2V0X3ByZWNfb3B0ICgpID0gbWF0Y2ggZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgfCBOb19wcmVjaXNpb24gICAgICAgLT4gTm9uZVxuICAgICAgfCBMaXRfcHJlY2lzaW9uIG5kZWMgLT4gU29tZSBuZGVjXG4gICAgICB8IEFyZ19wcmVjaXNpb24gICAgICAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJyonXCJcbiAgICBpblxuXG4gICAgbGV0IGZtdF9yZXN1bHQgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICcsJyAtPlxuICAgICAgcGFyc2Ugc3RyX2luZCBlbmRfaW5kXG4gICAgfCAnYycgLT5cbiAgICAgIGxldCBjaGFyX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICVjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChDaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBzY2FuX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICUwYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9zY2FuX25leHRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBiZWdpbiBtYXRjaCBnZXRfcGFkX29wdCAnYycgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIDAgLT4gc2Nhbl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIF9uIC0+XG4gICAgICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3JcbiAgICAgICAgICAgdGhlbiBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kXG4gICAgICAgICAgIGVsc2UgKCogbGVnYWN5IGlnbm9yZXMgJWMgd2lkdGhzICopIGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICBlbmRcbiAgICB8ICdDJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NhbWxfY2hhcixmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKENhbWxfY2hhciBmbXRfcmVzdClcbiAgICB8ICdzJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKFN0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdTJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9jYW1sX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT5cbiAgICAgIGxldCBpY29udiA9IGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdOJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gVG9rZW5fY291bnRlciBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgfCAnbicgfCAnTCcgd2hlbiBzdHJfaW5kPWVuZF9pbmQgfHwgbm90IChpc19pbnRfYmFzZSBzdHIuW3N0cl9pbmRdKSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gY291bnRlcl9vZl9jaGFyIHN5bWIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQzMiAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDMyIChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnbicgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSlcbiAgICAgICAgICAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ0wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQ2NCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDY0IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnZicgfCAnZScgfCAnRScgfCAnZycgfCAnRycgfCAnRicgfCAnaCcgfCAnSCcgLT5cbiAgICAgIGxldCBmY29udiA9XG4gICAgICAgIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmRcbiAgICAgICAgICAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZmxvYXQgKGdldF9wYWRfb3B0ICdfJywgZ2V0X3ByZWNfb3B0ICgpKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChGbG9hdCAoZmNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2InIHwgJ0InIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Jvb2wgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEJvb2wgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnYScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChBbHBoYSBmbXRfcmVzdClcbiAgICB8ICd0JyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKFRoZXRhIGZtdF9yZXN0KVxuICAgIHwgJ3InIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKFJlYWRlciBmbXRfcmVzdClcbiAgICB8ICchJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZsdXNoIGZtdF9yZXN0KVxuICAgIHwgKCclJyB8ICdAJykgYXMgYyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoYywgZm10X3Jlc3QpKVxuICAgIHwgJ3snIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnfScgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ3snLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICcoJyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJyknIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnKCcsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJ1snIC0+XG4gICAgICBsZXQgbmV4dF9pbmQsIGNoYXJfc2V0ID0gcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ18nLCBjaGFyX3NldCkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnWycsIGNoYXJfc2V0LCBmbXRfcmVzdCkpXG4gICAgfCAnLScgfCAnKycgfCAnIycgfCAnICcgfCAnXycgLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGZsYWcgJUMgaXMgb25seSBhbGxvd2VkIGFmdGVyIHRoZSAnJSUnLCBiZWZvcmUgcGFkZGluZyBhbmQgcHJlY2lzaW9uXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgc3ltYlxuICAgIHwgXyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgaW52YWxpZCBjb252ZXJzaW9uIFxcXCIlJSVjXFxcIlwiIHN0ciAoc3RyX2luZCAtIDEpIHN5bWJcbiAgICBpblxuICAgICgqIENoZWNrIGZvciB1bnVzZWQgb3B0aW9ucywgYW5kIHJlamVjdCB0aGVtIGFzIGluY29tcGF0aWJsZS5cblxuICAgICAgIFN1Y2ggY2hlY2tzIG5lZWQgdG8gYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsIGFzIHRoZSBsZWdhY3lcbiAgICAgICBwYXJzZXIgc2lsZW50bHkgaWdub3JlZCBpbmNvbXBhdGlibGUgZmxhZ3MuICopXG4gICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuIGJlZ2luXG4gICAgaWYgbm90ICFwbHVzX3VzZWQgJiYgcGx1cyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiO1xuICAgIGlmIG5vdCAhaGFzaF91c2VkICYmIGhhc2ggdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIjtcbiAgICBpZiBub3QgIXNwYWNlX3VzZWQgJiYgc3BhY2UgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIjtcbiAgICBpZiBub3QgIXBhZF91c2VkICAmJiBQYWRkaW5nX0VCQiBwYWQgPD4gUGFkZGluZ19FQkIgTm9fcGFkZGluZyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcImBwYWRkaW5nJ1wiO1xuICAgIGlmIG5vdCAhcHJlY191c2VkICYmIFByZWNpc2lvbl9FQkIgcHJlYyA8PiBQcmVjaXNpb25fRUJCIE5vX3ByZWNpc2lvbiB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgKGlmIGlnbiB0aGVuICdfJyBlbHNlIHN5bWIpXG4gICAgICAgIFwiYHByZWNpc2lvbidcIjtcbiAgICBpZiBpZ24gJiYgcGx1cyB0aGVuIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKydcIjtcbiAgICBlbmQ7XG4gICAgKCogdGhpcyBsYXN0IHRlc3QgbXVzdCBub3QgYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsXG4gICAgICAgYXMgaWdub3JpbmcgaXQgd291bGQgdHlwaWNhbGx5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0eXBpbmdcbiAgICAgICB0aGFuIHdoYXQgdGhlIGxlZ2FjeSBwYXJzZXIgdXNlZCAqKVxuICAgIGlmIG5vdCAhaWduX3VzZWQgJiYgaWduIHRoZW5cbiAgICAgIGJlZ2luIG1hdGNoIHN5bWIgd2l0aFxuICAgICAgICAoKiBhcmd1bWVudC1sZXNzIGZvcm1hdHMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIGluIGxlZ2FjeSBtb2RlICopXG4gICAgICAgIHwgKCdAJyB8ICclJyB8ICchJyB8ICcsJykgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gKClcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInXydcIlxuICAgICAgZW5kO1xuICAgIGZtdF9yZXN1bHRcblxuICAoKiBQYXJzZSBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIChhZnRlciAnQCcpLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgRW5kX29mX2Zvcm1hdCkpXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdbJyAtPlxuICAgICAgICBwYXJzZV90YWcgZmFsc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICddJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfYm94LCBmbXRfcmVzdCkpXG4gICAgICB8ICd7JyAtPlxuICAgICAgICBwYXJzZV90YWcgdHJ1ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ30nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV90YWcsIGZtdF9yZXN0KSlcbiAgICAgIHwgJywnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJALFwiLCAwLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnICcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAgXCIsIDEsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICc7JyAtPlxuICAgICAgICBwYXJzZV9nb29kX2JyZWFrIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnPycgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZGbHVzaCwgZm10X3Jlc3QpKVxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRm9yY2VfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnLicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZsdXNoX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIHBhcnNlX21hZ2ljX3NpemUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9hdCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgd2hlbiBzdHJfaW5kICsgMSA8IGVuZF9pbmQgJiYgc3RyLltzdHJfaW5kICsgMV0gPSAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfcGVyY2VudCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIGZtdF9yZXN0KSlcbiAgICAgIHwgYyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyBjLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDxuYW1lPiBhZnRlciBcIkB7XCIgb3IgXCJAW1wiLiAqKVxuICBhbmQgcGFyc2VfdGFnIDogdHlwZSBlIGYgLiBib29sIC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gaXNfb3Blbl90YWcgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgdHJ5XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgbGV0IGluZCA9IFN0cmluZy5pbmRleF9mcm9tIHN0ciAoc3RyX2luZCArIDEpICc+JyBpblxuICAgICAgICBpZiBpbmQgPj0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN1Yl9zdHIgPSBTdHJpbmcuc3ViIHN0ciBzdHJfaW5kIChpbmQgLSBzdHJfaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCAoaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKHN1Yl9mbXQsIHN1Yl9zdHIpIGluXG4gICAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoRW5kX29mX2Zvcm1hdCwgXCJcIikgaW5cbiAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPHdpZHRoIG9mZnNldD4gYWZ0ZXIgXCJAO1wiLiAqKVxuICBhbmQgcGFyc2VfZ29vZF9icmVhayA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBsZXQgbmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0ID1cbiAgICAgIHRyeVxuICAgICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB8fCBzdHIuW3N0cl9pbmRdIDw+ICc8JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IChcbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCB3aWR0aCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8zXSB3aXRoXG4gICAgICAgICAgICAgIHwgJz4nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF8zLXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzMgKyAxLCBCcmVhayAocywgd2lkdGgsIDApXG4gICAgICAgICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzQsIG9mZnNldCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8zIGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF81ID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfNCBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzVdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzUtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfNSArIDEsIEJyZWFrIChzLCB3aWR0aCwgb2Zmc2V0KVxuICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgIClcbiAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgc3RyX2luZCwgQnJlYWsgKFwiQDtcIiwgMSwgMClcbiAgICBpblxuICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIHRoZSBzaXplIGluIGEgPG4+LiAqKVxuICBhbmQgcGFyc2VfbWFnaWNfc2l6ZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBtYXRjaFxuICAgICAgdHJ5XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHNpemUgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF8zXSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZCAtIDIpIChzdHJfaW5kXzMgLSBzdHJfaW5kICsgMykgaW5cbiAgICAgICAgICBTb21lIChzdHJfaW5kXzMgKyAxLCBNYWdpY19zaXplIChzLCBzaXplKSlcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIE5vbmVcbiAgICB3aXRoXG4gICAgfCBTb21lIChuZXh0X2luZCwgZm9ybWF0dGluZ19saXQpIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuICAgIHwgTm9uZSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljICc8JywgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIGFuZCBjb25zdHJ1Y3QgYSBjaGFyIHNldC4gKilcbiAgYW5kIHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcblxuICAgIGxldCBjaGFyX3NldCA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICAgIGxldCBhZGRfY2hhciBjID1cbiAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjO1xuICAgIGluXG4gICAgbGV0IGFkZF9yYW5nZSBjIGMnID1cbiAgICAgIGZvciBpID0gaW50X29mX2NoYXIgYyB0byBpbnRfb2ZfY2hhciBjJyBkb1xuICAgICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgKGNoYXJfb2ZfaW50IGkpO1xuICAgICAgZG9uZTtcbiAgICBpblxuXG4gICAgbGV0IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZCA9XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6ICclJScgYWxvbmUgaXMgbm90IGFjY2VwdGVkIGluIGNoYXJhY3RlciBzZXRzLCBcXFxuICAgICAgICAgdXNlICUlJSUgaW5zdGVhZCBhdCBwb3NpdGlvbiAlZC5cIiBzdHIgc3RyX2luZFxuICAgIGluXG5cbiAgICAoKiBQYXJzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgY2hhciBzZXQuICopXG4gICAgbGV0IHJlYyBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGxldCBjID0gc3RyLltzdHJfaW5kXSBpblxuICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogUGFyc2UgdGhlIGNvbnRlbnQgb2YgYSBjaGFyIHNldCB1bnRpbCB0aGUgZmlyc3QgJ10nLiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9jb250ZW50IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFRlc3QgZm9yIHJhbmdlIGluIGNoYXIgc2V0LiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyB3aGVuIGMgPSAnJScgLT5cbiAgICAgICAgYWRkX2NoYXIgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGlmIGMgPSAnJScgdGhlbiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQ7XG4gICAgICAgICgqIG5vdGUgdGhhdCAnQCcgYWxvbmUgaXMgYWNjZXB0ZWQsIGFzIGRvbmUgYnkgdGhlIGxlZ2FjeVxuICAgICAgICAgICBpbXBsZW1lbnRhdGlvbjsgdGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IHJlcXVpcmVzICVAXG4gICAgICAgICAgIHNvIHdlIGNvdWxkIHdhcm4gb24gdGhhdCAqKVxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjJ1xuXG4gICAgKCogTWFuYWdlIHJhbmdlIGluIGNoYXIgc2V0IChleGNlcHQgaWYgdGhlICctJyB0aGUgbGFzdCBjaGFyIGJlZm9yZSAnXScpICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyAtPlxuICAgICAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMikgZW5kX2luZFxuICAgICAgICAgIHwgXyAtPiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmRcbiAgICAgICAgZW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgIGluXG4gICAgbGV0IHN0cl9pbmQsIHJldmVyc2UgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgICB8ICdeJyAtPiBzdHJfaW5kICsgMSwgdHJ1ZVxuICAgICAgICB8IF8gLT4gc3RyX2luZCwgZmFsc2UgaW5cbiAgICBsZXQgbmV4dF9pbmQgPSBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICBsZXQgY2hhcl9zZXQgPSBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgaW5cbiAgICBuZXh0X2luZCwgKGlmIHJldmVyc2UgdGhlbiByZXZfY2hhcl9zZXQgY2hhcl9zZXQgZWxzZSBjaGFyX3NldClcblxuICAoKiBDb25zdW1lIGFsbCBuZXh0IHNwYWNlcywgcmFpc2UgYW4gRmFpbHVyZSBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGlmIHN0ci5bc3RyX2luZF0gPSAnICcgdGhlbiBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGVsc2Ugc3RyX2luZFxuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlIGlmIGVuZF9pbmQgaXNcbiAgICAgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCBhY2MgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gYWNjICogMTAgKyAoaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJykgaW5cbiAgICAgIGlmIG5ld19hY2MgPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogaW50ZWdlciAlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxpbWl0ICVkXCJcbiAgICAgICAgICBzdHIgbmV3X2FjYyBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG5ld19hY2NcbiAgICB8IF8gLT4gc3RyX2luZCwgYWNjXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmVcbiAgICAgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfaW50ZWdlciBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwXG4gICAgfCAnLScgLT4gKFxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgICAgbGV0IG5leHRfaW5kLCBuID0gcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIDAgaW5cbiAgICAgICAgbmV4dF9pbmQsIC1uXG4gICAgICB8IGMgLT5cbiAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJkaWdpdFwiIGNcbiAgICApXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIEFkZCBhIGxpdGVyYWwgdG8gYSBmb3JtYXQgZnJvbSBhIGxpdGVyYWwgY2hhcmFjdGVyIHN1Yi1zZXF1ZW5jZS4gKilcbiAgYW5kIGFkZF9saXRlcmFsIDogdHlwZSBhIGQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gKGEsIF8sIF8sIGQsIGUsIGYpIGZtdCAtPlxuICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZm10IC0+IG1hdGNoIHN0cl9pbmQgLSBsaXRfc3RhcnQgd2l0aFxuICAgIHwgMCAgICAtPiBGbXRfRUJCIGZtdFxuICAgIHwgMSAgICAtPiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKHN0ci5bbGl0X3N0YXJ0XSwgZm10KSlcbiAgICB8IHNpemUgLT4gRm10X0VCQiAoU3RyaW5nX2xpdGVyYWwgKFN0cmluZy5zdWIgc3RyIGxpdF9zdGFydCBzaXplLCBmbXQpKVxuXG4gICgqIFNlYXJjaCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXRcbiAgICAgKGkuZS4gdGhlIGNvcnJlc3BvbmRpbmcgXCIlfVwiIG9yIFwiJSlcIikgKilcbiAgYW5kIHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IHVuY2xvc2VkIHN1Yi1mb3JtYXQsIFxcXG4gICAgICAgICBleHBlY3RlZCBcXFwiJSUlY1xcXCIgYXQgY2hhcmFjdGVyIG51bWJlciAlZFwiIHN0ciBjIGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnJScgLT5cbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgaWYgc3RyLltzdHJfaW5kICsgMV0gPSBjIHRoZW4gKCogRW5kIG9mIGZvcm1hdCBmb3VuZCAqKSBzdHJfaW5kIGVsc2VcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICB8ICdfJyAtPlxuICAgICAgICAgICgqIFNlYXJjaCBmb3IgXCIlXyhcIiBvciBcIiVfe1wiLiAqKVxuICAgICAgICAgIGlmIHN0cl9pbmQgKyAyID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDJdIHdpdGhcbiAgICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCBjXG4gICAgICAgICAgZW5kXG4gICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgKCogJXsuLi4lfSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgKCogJSguLi4lKSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJ30nIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICUoLi4uJX0uICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJyknXCIgJ30nXG4gICAgICAgIHwgJyknIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICV7Li4uJSkuICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJ30nXCIgJyknXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIGVuZFxuICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICgqIENoZWNrIGlmIHN5bWIgaXMgYSB2YWxpZCBpbnQgY29udmVyc2lvbiBhZnRlciBcIiVsXCIsIFwiJW5cIiBvciBcIiVMXCIgKilcbiAgYW5kIGlzX2ludF9iYXNlIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPiB0cnVlXG4gICAgfCBfIC0+IGZhbHNlXG5cbiAgKCogQ29udmVydCBhIGNoYXIgKGwsIG4gb3IgTCkgdG8gaXRzIGFzc29jaWF0ZWQgY291bnRlci4gKilcbiAgYW5kIGNvdW50ZXJfb2ZfY2hhciBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnbCcgLT4gTGluZV9jb3VudGVyICB8ICduJyAtPiBDaGFyX2NvdW50ZXJcbiAgICB8ICdMJyAtPiBUb2tlbl9jb3VudGVyIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBpbnRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBtYXRjaCBwbHVzLCBoYXNoLCBzcGFjZSwgc3ltYiB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X2QgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9pXG4gICAgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnZCcgLT4gSW50X3NkIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2knIC0+IEludF9zaVxuICAgIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9wZCB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfcGlcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd4JyAtPiBJbnRfeCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnWCcgLT4gSW50X1hcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd4JyAtPiBJbnRfQ3ggfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnWCcgLT4gSW50X0NYXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnbycgLT4gSW50X29cbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdvJyAtPiBJbnRfQ29cbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd1JyAtPiBJbnRfdVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2QnIC0+IEludF9DZFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2knIC0+IEludF9DaVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3UnIC0+IEludF9DdVxuICAgIHwgXywgdHJ1ZSwgXywgJ3gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DeFxuICAgIHwgXywgdHJ1ZSwgXywgJ1gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DWFxuICAgIHwgXywgdHJ1ZSwgXywgJ28nIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9Db1xuICAgIHwgXywgdHJ1ZSwgXywgKCdkJyB8ICdpJyB8ICd1JykgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGZhbHNlIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIlxuICAgIHwgdHJ1ZSwgXywgdHJ1ZSwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgdHJ1ZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCJcbiAgICB8IHRydWUsIF8sIGZhbHNlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgZmFsc2UgaGFzaCBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCBmYWxzZSwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzcGFjZSwgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgZmxvYXRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIGxldCBmbGFnID0gbWF0Y2ggcGx1cywgc3BhY2Ugd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfXG4gICAgfCBmYWxzZSwgIHRydWUgLT4gRmxvYXRfZmxhZ19zXG4gICAgfCAgdHJ1ZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19wXG4gICAgfCAgdHJ1ZSwgIHRydWUgLT5cbiAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBGbG9hdF9mbGFnX3BcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiIGluXG4gICAgbGV0IGtpbmQgPSBtYXRjaCBoYXNoLCBzeW1iIHdpdGhcbiAgICB8IF8sICdmJyAtPiBGbG9hdF9mXG4gICAgfCBfLCAnZScgLT4gRmxvYXRfZVxuICAgIHwgXywgJ0UnIC0+IEZsb2F0X0VcbiAgICB8IF8sICdnJyAtPiBGbG9hdF9nXG4gICAgfCBfLCAnRycgLT4gRmxvYXRfR1xuICAgIHwgXywgJ2gnIC0+IEZsb2F0X2hcbiAgICB8IF8sICdIJyAtPiBGbG9hdF9IXG4gICAgfCBmYWxzZSwgJ0YnIC0+IEZsb2F0X0ZcbiAgICB8IHRydWUsICdGJyAtPiBGbG9hdF9DRlxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2UgaW5cbiAgICBmbGFnLCBraW5kXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGluY29tcGF0aWJsZSBvcHRpb25zLiopXG4gIGFuZCBpbmNvbXBhdGlibGVfZmxhZyA6IHR5cGUgYSAuIGludCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmcgLT4gYSA9XG4gICAgZnVuIHBjdF9pbmQgc3RyX2luZCBzeW1iIG9wdGlvbiAtPlxuICAgICAgbGV0IHN1YmZtdCA9IFN0cmluZy5zdWIgc3RyIHBjdF9pbmQgKHN0cl9pbmQgLSBwY3RfaW5kKSBpblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJyVjJyBpbiBzdWItZm9ybWF0ICVTXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgb3B0aW9uIHN5bWIgc3ViZm10XG5cbiAgaW4gcGFyc2UgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAoKiBHdWFyZGVkIHN0cmluZyB0byBmb3JtYXQgY29udmVyc2lvbnMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2ZtdHR5IHN0ciBmbXR0eSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgZm10dHksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCJcbiAgICAgIHN0ciAoc3RyaW5nX29mX2ZtdHR5IGZtdHR5KVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGNvbXBhdGlibGUgd2l0aCBhbiBvdGhlciBmb3JtYXQuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCBzdHIgKEZvcm1hdCAoZm10Jywgc3RyJykpID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCAoZm10dHlfb2ZfZm10IGZtdCcpLCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiIHN0ciBzdHInXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIFhhdmllciBMZXJveSBhbmQgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG5sZXQga2ZwcmludGYgayBvIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBvIGFjYzsgayBvKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGticHJpbnRmIGsgYiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IGJ1ZnB1dF9hY2MgYiBhY2M7IGsgYikgRW5kX29mX2FjYyBmbXRcbmxldCBpa2ZwcmludGYgayBvYyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIG9jIGZtdFxubGV0IGlrYnByaW50ZiA9IGlrZnByaW50ZlxuXG5sZXQgZnByaW50ZiBvYyBmbXQgPSBrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgYnByaW50ZiBiIGZtdCA9IGticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IGlmcHJpbnRmIG9jIGZtdCA9IGlrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgaWJwcmludGYgYiBmbXQgPSBpa2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3Rkb3V0IGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBzdGRlcnIgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGsnIGFjYyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBzdHJwdXRfYWNjIGJ1ZiBhY2M7XG4gICAgayAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXRcblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgKGZ1biBzIC0+IHMpIGZtdFxuXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG4iLCIoKiBDb252X2Vycm9yOiBNb2R1bGUgZm9yIEhhbmRsaW5nIEVycm9ycyBkdXJpbmcgQXV0b21hdGVkIFlvanNvblxuICAgQ29udmVyc2lvbnMgKilcblxub3BlbiEgU3RkTGFiZWxzXG5vcGVuIFlvanNvbl9jb252XG5cbmxldCBzcHJpbnRmID0gUHJpbnRmLnNwcmludGZcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgdHVwbGVzICopXG5cbmxldCB0dXBsZV9vZl9zaXplX25fZXhwZWN0ZWQgbG9jIG4geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiB0dXBsZSBvZiBzaXplICVkIGV4cGVjdGVkXCIgbG9jIG4pIHlvanNvblxuOztcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgc3VtIHR5cGVzICopXG5cbmxldCBzdGFnX25vX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGlzIGNvbnN0cnVjdG9yIGRvZXMgbm90IHRha2UgYXJndW1lbnRzXCIpIHlvanNvblxuOztcblxubGV0IHN0YWdfaW5jb3JyZWN0X25fYXJncyBsb2MgdGFnIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIHNwcmludGYgXCIlc19vZl95b2pzb246IHN1bSB0YWcgJVMgaGFzIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzXCIgbG9jIHRhZ1xuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHN0YWdfdGFrZXNfYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHRoaXMgY29uc3RydWN0b3IgcmVxdWlyZXMgYXJndW1lbnRzXCIpIHlvanNvblxuOztcblxubGV0IG5lc3RlZF9saXN0X2ludmFsaWRfc3VtIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogZXhwZWN0ZWQgYSB2YXJpYW50IHR5cGUsIHNhdyBhIG5lc3RlZCBsaXN0XCIpIHlvanNvblxuOztcblxubGV0IGVtcHR5X2xpc3RfaW52YWxpZF9zdW0gbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBleHBlY3RlZCBhIHZhcmlhbnQgdHlwZSwgc2F3IGFuIGVtcHR5IGxpc3RcIikgeW9qc29uXG47O1xuXG5sZXQgdW5leHBlY3RlZF9zdGFnIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdW5leHBlY3RlZCB2YXJpYW50IGNvbnN0cnVjdG9yXCIpIHlvanNvblxuOztcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgcmVjb3JkcyAqKVxuXG5sZXQgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdCB+bG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgbGV0IGZsZF9uYW1lc19zdHIgPSBTdHJpbmcuY29uY2F0IChMaXN0LnJldiByZXZfZmxkX25hbWVzKSB+c2VwOlwiIFwiIGluXG4gIGxldCBtc2cgPSBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiAlczogJXNcIiBsb2Mgd2hhdCBmbGRfbmFtZXNfc3RyIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX2R1cGxpY2F0ZV9maWVsZHMgbG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdDpcImR1cGxpY2F0ZSBmaWVsZHNcIiB+bG9jIHJldl9mbGRfbmFtZXMgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX2V4dHJhX2ZpZWxkcyBsb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb24gPVxuICByZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIH53aGF0OlwiZXh0cmEgZmllbGRzXCIgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvblxuOztcblxubGV0IHJlYyByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIGZpZWxkcyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gU3RyaW5nLmNvbmNhdCAoTGlzdC5yZXYgZmllbGRzKSB+c2VwOlwiIFwiXG4gIHwgKHRydWUsIGZpZWxkKSA6OiByZXN0IC0+IHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgKGZpZWxkIDo6IGZpZWxkcykgcmVzdFxuICB8IF8gOjogcmVzdCAtPiByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIGZpZWxkcyByZXN0XG47O1xuXG5sZXQgcmVjb3JkX3VuZGVmaW5lZF9lbGVtZW50cyBsb2MgeW9qc29uIGxzdCA9XG4gIGxldCB1bmRlZmluZWQgPSByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIFtdIGxzdCBpblxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiB0aGUgZm9sbG93aW5nIHJlY29yZCBlbGVtZW50cyB3ZXJlIHVuZGVmaW5lZDogJXNcIiBsb2MgdW5kZWZpbmVkXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX2xpc3RfaW5zdGVhZF9hdG9tIGxvYyB5b2pzb24gPVxuICBsZXQgbXNnID0gbG9jIF4gXCJfb2ZfeW9qc29uOiBsaXN0IGluc3RlYWQgb2YgYXRvbSBmb3IgcmVjb3JkIGV4cGVjdGVkXCIgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfcG9seV9maWVsZF92YWx1ZSBsb2MgeW9qc29uID1cbiAgbGV0IG1zZyA9XG4gICAgbG9jXG4gICAgXiBcIl9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IHZhbHVlcyBvZiB0eXBlcyByZXN1bHRpbmcgZnJvbSBwb2x5bW9ycGhpYyByZWNvcmQgXFxcbiAgICAgICBmaWVsZHNcIlxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgcG9seW1vcnBoaWMgdmFyaWFudHMgKilcblxuZXhjZXB0aW9uIE5vX3ZhcmlhbnRfbWF0Y2hcblxubGV0IG5vX3ZhcmlhbnRfbWF0Y2ggKCkgPSByYWlzZSBOb192YXJpYW50X21hdGNoXG5cbmxldCBub19tYXRjaGluZ192YXJpYW50X2ZvdW5kIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogbm8gbWF0Y2hpbmcgdmFyaWFudCBmb3VuZFwiKSB5b2pzb25cbjs7XG5cbmxldCBwdGFnX25vX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IGRvZXMgbm90IHRha2UgYXJndW1lbnRzXCIpIHlvanNvblxuOztcblxubGV0IHB0YWdfaW5jb3JyZWN0X25fYXJncyBsb2MgY25zdHIgeW9qc29uID1cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZlxuICAgICAgXCIlc19vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgdGFnICVTIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c1wiXG4gICAgICBsb2NcbiAgICAgIGNuc3RyXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcHRhZ190YWtlc19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCB0YWcgdGFrZXMgYW4gYXJndW1lbnRcIikgeW9qc29uXG47O1xuXG5sZXQgbmVzdGVkX2xpc3RfaW52YWxpZF9wb2x5X3ZhciBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yXG4gICAgKGxvYyBeIFwiX29mX3lvanNvbjogYSBuZXN0ZWQgbGlzdCBpcyBhbiBpbnZhbGlkIHBvbHltb3JwaGljIHZhcmlhbnRcIilcbiAgICB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV9saXN0X2ludmFsaWRfcG9seV92YXIgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvclxuICAgIChsb2MgXiBcIl9vZl95b2pzb246IHRoZSBlbXB0eSBsaXN0IGlzIGFuIGludmFsaWQgcG9seW1vcnBoaWMgdmFyaWFudFwiKVxuICAgIHlvanNvblxuOztcblxubGV0IGVtcHR5X3R5cGUgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0cnlpbmcgdG8gY29udmVydCBhbiBlbXB0eSB0eXBlXCIpIHlvanNvblxuOztcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXh0ZXJuYWwgaWQgOiAnYSAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmxldCBjb25zdCBjIF8gPSBjXG5sZXQgZmxpcCBmIHggeSA9IGYgeSB4XG5sZXQgbmVnYXRlIHAgdiA9IG5vdCAocCB2KVxuXG5leGNlcHRpb24gRmluYWxseV9yYWlzZWQgb2YgZXhuXG5cbmxldCAoKSA9IFByaW50ZXhjLnJlZ2lzdGVyX3ByaW50ZXIgQEAgZnVuY3Rpb25cbnwgRmluYWxseV9yYWlzZWQgZXhuIC0+IFNvbWUgKFwiRnVuLkZpbmFsbHlfcmFpc2VkOiBcIiBeIFByaW50ZXhjLnRvX3N0cmluZyBleG4pXG58IF8gLT4gTm9uZVxuXG5sZXQgcHJvdGVjdCB+KGZpbmFsbHkgOiB1bml0IC0+IHVuaXQpIHdvcmsgPVxuICBsZXQgZmluYWxseV9ub19leG4gKCkgPVxuICAgIHRyeSBmaW5hbGx5ICgpIHdpdGggZSAtPlxuICAgICAgbGV0IGJ0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIFByaW50ZXhjLnJhaXNlX3dpdGhfYmFja3RyYWNlIChGaW5hbGx5X3JhaXNlZCBlKSBidFxuICBpblxuICBtYXRjaCB3b3JrICgpIHdpdGhcbiAgfCByZXN1bHQgLT4gZmluYWxseV9ub19leG4gKCkgOyByZXN1bHRcbiAgfCBleGNlcHRpb24gd29ya19leG4gLT5cbiAgICAgIGxldCB3b3JrX2J0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIGZpbmFsbHlfbm9fZXhuICgpIDtcbiAgICAgIFByaW50ZXhjLnJhaXNlX3dpdGhfYmFja3RyYWNlIHdvcmtfZXhuIHdvcmtfYnRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTWVzc2FnZSBkaWdlc3QgKE1ENSkgKilcblxudHlwZSB0ID0gc3RyaW5nXG5cbmxldCBjb21wYXJlID0gU3RyaW5nLmNvbXBhcmVcbmxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG5leHRlcm5hbCB1bnNhZmVfc3RyaW5nOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9zdHJpbmdcIlxuZXh0ZXJuYWwgY2hhbm5lbDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfY2hhblwiXG5cbmxldCBzdHJpbmcgc3RyID1cbiAgdW5zYWZlX3N0cmluZyBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbmxldCBieXRlcyBiID0gc3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpXG5cbmxldCBzdWJzdHJpbmcgc3RyIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gU3RyaW5nLmxlbmd0aCBzdHIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9zdHJpbmcgc3RyIG9mcyBsZW5cblxubGV0IHN1YmJ5dGVzIGIgb2ZzIGxlbiA9IHN1YnN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKSBvZnMgbGVuXG5cbmxldCBmaWxlIGZpbGVuYW1lID1cbiAgbGV0IGljID0gb3Blbl9pbl9iaW4gZmlsZW5hbWUgaW5cbiAgbWF0Y2ggY2hhbm5lbCBpYyAoLTEpIHdpdGhcbiAgICB8IGQgLT4gY2xvc2VfaW4gaWM7IGRcbiAgICB8IGV4Y2VwdGlvbiBlIC0+IGNsb3NlX2luIGljOyByYWlzZSBlXG5cbmxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPVxuICBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbmxldCBpbnB1dCBjaGFuID0gcmVhbGx5X2lucHV0X3N0cmluZyBjaGFuIDE2XG5cbmxldCBjaGFyX2hleCBuID1cbiAgQ2hhci51bnNhZmVfY2hyIChuICsgaWYgbiA8IDEwIHRoZW4gQ2hhci5jb2RlICcwJyBlbHNlIChDaGFyLmNvZGUgJ2EnIC0gMTApKVxuXG5sZXQgdG9faGV4IGQgPVxuICBpZiBTdHJpbmcubGVuZ3RoIGQgPD4gMTYgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC50b19oZXhcIjtcbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAzMiBpblxuICBmb3IgaSA9IDAgdG8gMTUgZG9cbiAgICBsZXQgeCA9IENoYXIuY29kZSBkLltpXSBpblxuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIpIChjaGFyX2hleCAoeCBsc3IgNCkpO1xuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIrMSkgKGNoYXJfaGV4ICh4IGxhbmQgMHgwZikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuXG5sZXQgZnJvbV9oZXggcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA8PiAzMiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LmZyb21faGV4XCI7XG4gIGxldCBkaWdpdCBjID1cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8ICcwJy4uJzknIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJ1xuICAgIHwgJ0EnLi4nRicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ0EnICsgMTBcbiAgICB8ICdhJy4uJ2YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdhJyArIDEwXG4gICAgfCBfIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRGlnZXN0LmZyb21faGV4XCIpXG4gIGluXG4gIGxldCBieXRlIGkgPSBkaWdpdCBzLltpXSBsc2wgNCArIGRpZ2l0IHMuW2krMV0gaW5cbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAxNiBpblxuICBmb3IgaSA9IDAgdG8gMTUgZG9cbiAgICBCeXRlcy5zZXQgcmVzdWx0IGkgKENoYXIuY2hyIChieXRlICgyICogaSkpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSGFzaCB0YWJsZXMgKilcblxuKCogV2UgZG8gZHluYW1pYyBoYXNoaW5nLCBhbmQgcmVzaXplIHRoZSB0YWJsZSBhbmQgcmVoYXNoIHRoZSBlbGVtZW50c1xuICAgd2hlbiBidWNrZXRzIGJlY29tZSB0b28gbG9uZy4gKilcblxudHlwZSAoJ2EsICdiKSB0ID1cbiAgeyBtdXRhYmxlIHNpemU6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBudW1iZXIgb2YgZW50cmllcyAqKVxuICAgIG11dGFibGUgZGF0YTogKCdhLCAnYikgYnVja2V0bGlzdCBhcnJheTsgICgqIHRoZSBidWNrZXRzICopXG4gICAgc2VlZDogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIGZvciByYW5kb21pemF0aW9uICopXG4gICAgbXV0YWJsZSBpbml0aWFsX3NpemU6IGludDsgICAgICAgICAgICAgICAgKCogaW5pdGlhbCBhcnJheSBzaXplICopXG4gIH1cblxuYW5kICgnYSwgJ2IpIGJ1Y2tldGxpc3QgPVxuICAgIEVtcHR5XG4gIHwgQ29ucyBvZiB7IG11dGFibGUga2V5OiAnYTtcbiAgICAgICAgICAgICAgbXV0YWJsZSBkYXRhOiAnYjtcbiAgICAgICAgICAgICAgbXV0YWJsZSBuZXh0OiAoJ2EsICdiKSBidWNrZXRsaXN0IH1cblxuKCogVGhlIHNpZ24gb2YgaW5pdGlhbF9zaXplIGVuY29kZXMgdGhlIGZhY3QgdGhhdCBhIHRyYXZlcnNhbCBpc1xuICAgb25nb2luZyBvciBub3QuXG5cbiAgIFRoaXMgZGlzYWJsZXMgdGhlIGVmZmljaWVudCBpbiBwbGFjZSBpbXBsZW1lbnRhdGlvbiBvZiByZXNpemluZy5cbiopXG5cbmxldCBvbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gIHx8IGguaW5pdGlhbF9zaXplIDwgMFxuXG5sZXQgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgaC5pbml0aWFsX3NpemUgPC0gLSBoLmluaXRpYWxfc2l6ZVxuXG4oKiBUbyBwaWNrIHJhbmRvbSBzZWVkcyBpZiByZXF1ZXN0ZWQgKilcblxubGV0IHJhbmRvbWl6ZWRfZGVmYXVsdCA9XG4gIGxldCBwYXJhbXMgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiT0NBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJDQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPiBcIlwiIGluXG4gIFN0cmluZy5jb250YWlucyBwYXJhbXMgJ1InXG5cbmxldCByYW5kb21pemVkID0gcmVmIHJhbmRvbWl6ZWRfZGVmYXVsdFxuXG5sZXQgcmFuZG9taXplICgpID0gcmFuZG9taXplZCA6PSB0cnVlXG5sZXQgaXNfcmFuZG9taXplZCAoKSA9ICFyYW5kb21pemVkXG5cbmxldCBwcm5nID0gbGF6eSAoUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0KCkpXG5cbigqIEZ1bmN0aW9ucyB3aGljaCBhcHBlYXIgYmVmb3JlIHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSBtdXN0IGVpdGhlciBiZVxuICAgaW5kZXBlbmRlbnQgb2YgdGhlIGhhc2ggZnVuY3Rpb24gb3IgdGFrZSBpdCBhcyBhIHBhcmFtZXRlciAoc2VlICMyMjAyIGFuZFxuICAgY29kZSBiZWxvdyB0aGUgZnVuY3RvciBkZWZpbml0aW9ucy4gKilcblxuKCogQ3JlYXRpbmcgYSBmcmVzaCwgZW1wdHkgdGFibGUgKilcblxubGV0IHJlYyBwb3dlcl8yX2Fib3ZlIHggbiA9XG4gIGlmIHggPj0gbiB0aGVuIHhcbiAgZWxzZSBpZiB4ICogMiA+IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4geFxuICBlbHNlIHBvd2VyXzJfYWJvdmUgKHggKiAyKSBuXG5cbmxldCBjcmVhdGUgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaW5pdGlhbF9zaXplID1cbiAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IGluaXRpYWxfc2l6ZSBpblxuICBsZXQgc2VlZCA9IGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpIGVsc2UgMCBpblxuICB7IGluaXRpYWxfc2l6ZSA9IHM7IHNpemUgPSAwOyBzZWVkID0gc2VlZDsgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eSB9XG5cbmxldCBjbGVhciBoID1cbiAgaWYgaC5zaXplID4gMCB0aGVuIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgQXJyYXkuZmlsbCBoLmRhdGEgMCAoQXJyYXkubGVuZ3RoIGguZGF0YSkgRW1wdHlcbiAgZW5kXG5cbmxldCByZXNldCBoID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBoLmRhdGEgaW5cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gICAgfHwgbGVuID0gYWJzIGguaW5pdGlhbF9zaXplIHRoZW5cbiAgICBjbGVhciBoXG4gIGVsc2UgYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBoLmRhdGEgPC0gQXJyYXkubWFrZSAoYWJzIGguaW5pdGlhbF9zaXplKSBFbXB0eVxuICBlbmRcblxubGV0IGNvcHlfYnVja2V0bGlzdCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gRW1wdHlcbiAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICBsZXQgcmVjIGxvb3AgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgIHwgQ29ucyBwcmVjIC0+ICBwcmVjLm5leHQgPC0gclxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgbG9vcCByIG5leHRcbiAgICAgIGluXG4gICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgIGxvb3AgciBuZXh0O1xuICAgICAgclxuXG5sZXQgY29weSBoID0geyBoIHdpdGggZGF0YSA9IEFycmF5Lm1hcCBjb3B5X2J1Y2tldGxpc3QgaC5kYXRhIH1cblxubGV0IGxlbmd0aCBoID0gaC5zaXplXG5cbmxldCBpbnNlcnRfYWxsX2J1Y2tldHMgaW5kZXhmdW4gaW5wbGFjZSBvZGF0YSBuZGF0YSA9XG4gIGxldCBuc2l6ZSA9IEFycmF5Lmxlbmd0aCBuZGF0YSBpblxuICBsZXQgbmRhdGFfdGFpbCA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgbGV0IHJlYyBpbnNlcnRfYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+ICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGFzIGNlbGwgLT5cbiAgICAgICAgbGV0IGNlbGwgPVxuICAgICAgICAgIGlmIGlucGxhY2UgdGhlbiBjZWxsXG4gICAgICAgICAgZWxzZSBDb25zIHtrZXk7IGRhdGE7IG5leHQgPSBFbXB0eX1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG5pZHggPSBpbmRleGZ1biBrZXkgaW5cbiAgICAgICAgYmVnaW4gbWF0Y2ggbmRhdGFfdGFpbC4obmlkeCkgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IG5kYXRhLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gY2VsbDtcbiAgICAgICAgZW5kO1xuICAgICAgICBuZGF0YV90YWlsLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICBpbnNlcnRfYnVja2V0IG5leHRcbiAgaW5cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBvZGF0YSAtIDEgZG9cbiAgICBpbnNlcnRfYnVja2V0IG9kYXRhLihpKVxuICBkb25lO1xuICBpZiBpbnBsYWNlIHRoZW5cbiAgICBmb3IgaSA9IDAgdG8gbnNpemUgLSAxIGRvXG4gICAgICBtYXRjaCBuZGF0YV90YWlsLihpKSB3aXRoXG4gICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gRW1wdHlcbiAgICBkb25lXG5cbmxldCByZXNpemUgaW5kZXhmdW4gaCA9XG4gIGxldCBvZGF0YSA9IGguZGF0YSBpblxuICBsZXQgb3NpemUgPSBBcnJheS5sZW5ndGggb2RhdGEgaW5cbiAgbGV0IG5zaXplID0gb3NpemUgKiAyIGluXG4gIGlmIG5zaXplIDwgU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiBiZWdpblxuICAgIGxldCBuZGF0YSA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgICBsZXQgaW5wbGFjZSA9IG5vdCAob25nb2luZ190cmF2ZXJzYWwgaCkgaW5cbiAgICBoLmRhdGEgPC0gbmRhdGE7ICAgICAgICAgICgqIHNvIHRoYXQgaW5kZXhmdW4gc2VlcyB0aGUgbmV3IGJ1Y2tldCBjb3VudCAqKVxuICAgIGluc2VydF9hbGxfYnVja2V0cyAoaW5kZXhmdW4gaCkgaW5wbGFjZSBvZGF0YSBuZGF0YVxuICBlbmRcblxubGV0IGl0ZXIgZiBoID1cbiAgbGV0IHJlYyBkb19idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgKClcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBmIGtleSBkYXRhOyBkb19idWNrZXQgbmV4dCBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBkb19idWNrZXQgZC4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCByZWMgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gRW1wdHlcbiAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBFbXB0eVxuICAgICAgZW5kXG4gIHwgKENvbnMgKHtrZXk7IGRhdGE7IG5leHR9IGFzIGMpKSBhcyBzbG90IC0+XG4gICAgICBiZWdpbiBtYXRjaCBmIGtleSBkYXRhIHdpdGhcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyBuZXh0XG4gICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBzbG90XG4gICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIHNsb3RcbiAgICAgICAgICBlbmQ7XG4gICAgICAgICAgYy5kYXRhIDwtIGRhdGE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBzbG90IG5leHRcbiAgICAgIGVuZFxuXG5sZXQgZmlsdGVyX21hcF9pbnBsYWNlIGYgaCA9XG4gIGxldCBkID0gaC5kYXRhIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIEVtcHR5IGguZGF0YS4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaFxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IGZvbGQgZiBoIGluaXQgPVxuICBsZXQgcmVjIGRvX2J1Y2tldCBiIGFjY3UgPVxuICAgIG1hdGNoIGIgd2l0aFxuICAgICAgRW1wdHkgLT5cbiAgICAgICAgYWNjdVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGRvX2J1Y2tldCBuZXh0IChmIGtleSBkYXRhIGFjY3UpIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGxldCBhY2N1ID0gcmVmIGluaXQgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBhY2N1IDo9IGRvX2J1Y2tldCBkLihpKSAhYWNjdVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgICFhY2N1XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG50eXBlIHN0YXRpc3RpY3MgPSB7XG4gIG51bV9iaW5kaW5nczogaW50O1xuICBudW1fYnVja2V0czogaW50O1xuICBtYXhfYnVja2V0X2xlbmd0aDogaW50O1xuICBidWNrZXRfaGlzdG9ncmFtOiBpbnQgYXJyYXlcbn1cblxubGV0IHJlYyBidWNrZXRfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFjY3VcbiAgfCBDb25ze25leHR9IC0+IGJ1Y2tldF9sZW5ndGggKGFjY3UgKyAxKSBuZXh0XG5cbmxldCBzdGF0cyBoID1cbiAgbGV0IG1ibCA9XG4gICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gbSBiIC0+IEludC5tYXggbSAoYnVja2V0X2xlbmd0aCAwIGIpKSAwIGguZGF0YSBpblxuICBsZXQgaGlzdG8gPSBBcnJheS5tYWtlIChtYmwgKyAxKSAwIGluXG4gIEFycmF5Lml0ZXJcbiAgICAoZnVuIGIgLT5cbiAgICAgIGxldCBsID0gYnVja2V0X2xlbmd0aCAwIGIgaW5cbiAgICAgIGhpc3RvLihsKSA8LSBoaXN0by4obCkgKyAxKVxuICAgIGguZGF0YTtcbiAgeyBudW1fYmluZGluZ3MgPSBoLnNpemU7XG4gICAgbnVtX2J1Y2tldHMgPSBBcnJheS5sZW5ndGggaC5kYXRhO1xuICAgIG1heF9idWNrZXRfbGVuZ3RoID0gbWJsO1xuICAgIGJ1Y2tldF9oaXN0b2dyYW0gPSBoaXN0byB9XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgdGJsID1cbiAgKCogY2FwdHVyZSBjdXJyZW50IGFycmF5LCBzbyB0aGF0IGV2ZW4gaWYgdGhlIHRhYmxlIGlzIHJlc2l6ZWQgd2VcbiAgICAga2VlcCBpdGVyYXRpbmcgb24gdGhlIHNhbWUgYXJyYXkgKilcbiAgbGV0IHRibF9kYXRhID0gdGJsLmRhdGEgaW5cbiAgKCogc3RhdGU6IGluZGV4ICogbmV4dCBidWNrZXQgdG8gdHJhdmVyc2UgKilcbiAgbGV0IHJlYyBhdXggaSBidWNrICgpID0gbWF0Y2ggYnVjayB3aXRoXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIHRibF9kYXRhXG4gICAgICAgIHRoZW4gU2VxLk5pbFxuICAgICAgICBlbHNlIGF1eChpKzEpIHRibF9kYXRhLihpKSAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBTZXEuQ29ucyAoKGtleSwgZGF0YSksIGF1eCBpIG5leHQpXG4gIGluXG4gIGF1eCAwIEVtcHR5XG5cbmxldCB0b19zZXFfa2V5cyBtID0gU2VxLm1hcCBmc3QgKHRvX3NlcSBtKVxuXG5sZXQgdG9fc2VxX3ZhbHVlcyBtID0gU2VxLm1hcCBzbmQgKHRvX3NlcSBtKVxuXG4oKiBGdW5jdG9yaWFsIGludGVyZmFjZSAqKVxuXG5tb2R1bGUgdHlwZSBIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgU2VlZGVkSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogaW50IC0+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+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZVNlZWRlZChIOiBTZWVkZWRIYXNoZWRUeXBlKTogKFNlZWRlZFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGtleSA9IEgudFxuICAgIHR5cGUgJ2EgaGFzaHRibCA9IChrZXksICdhKSB0XG4gICAgdHlwZSAnYSB0ID0gJ2EgaGFzaHRibFxuICAgIGxldCBjcmVhdGUgPSBjcmVhdGVcbiAgICBsZXQgY2xlYXIgPSBjbGVhclxuICAgIGxldCByZXNldCA9IHJlc2V0XG4gICAgbGV0IGNvcHkgPSBjb3B5XG5cbiAgICBsZXQga2V5X2luZGV4IGgga2V5ID1cbiAgICAgIChILmhhc2ggaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG5cbiAgICBsZXQgYWRkIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICAgICAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxuICAgIGxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICgpXG4gICAgICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBiZWdpblxuICAgICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBuZXh0XG4gICAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2UgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IGMgbmV4dFxuXG4gICAgbGV0IHJlbW92ZSBoIGtleSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IEVtcHR5IGguZGF0YS4oaSlcblxuICAgIGxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbiAgICBsZXQgZmluZCBoIGtleSA9XG4gICAgICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBkMSBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxuICAgIGxldCByZWMgZmluZF9yZWNfb3B0IGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBTb21lIGRhdGEgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHRcblxuICAgIGxldCBmaW5kX29wdCBoIGtleSA9XG4gICAgICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbiAgICBsZXQgZmluZF9hbGwgaCBrZXkgPVxuICAgICAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgW11cbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YT1kOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGQgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICB0cnVlXG4gICAgICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbiAgICBsZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgICAgIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgICAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICAgICAgZW5kXG5cbiAgICBsZXQgbWVtIGgga2V5ID1cbiAgICAgIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgICAgICBILmVxdWFsIGsga2V5IHx8IG1lbV9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCBhZGRfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxuICAgIGxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG5cbiAgICBsZXQgaXRlciA9IGl0ZXJcbiAgICBsZXQgZmlsdGVyX21hcF9pbnBsYWNlID0gZmlsdGVyX21hcF9pbnBsYWNlXG4gICAgbGV0IGZvbGQgPSBmb2xkXG4gICAgbGV0IGxlbmd0aCA9IGxlbmd0aFxuICAgIGxldCBzdGF0cyA9IHN0YXRzXG4gICAgbGV0IHRvX3NlcSA9IHRvX3NlcVxuICAgIGxldCB0b19zZXFfa2V5cyA9IHRvX3NlcV9rZXlzXG4gICAgbGV0IHRvX3NlcV92YWx1ZXMgPSB0b19zZXFfdmFsdWVzXG4gIGVuZFxuXG5tb2R1bGUgTWFrZShIOiBIYXNoZWRUeXBlKTogKFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWQoc3RydWN0XG4gICAgICAgIHR5cGUgdCA9IEgudFxuICAgICAgICBsZXQgZXF1YWwgPSBILmVxdWFsXG4gICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbigqIFBvbHltb3JwaGljIGhhc2ggZnVuY3Rpb24tYmFzZWQgdGFibGVzICopXG4oKiBDb2RlIGluY2x1ZGVkIGJlbG93IHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSB0byBndWFyZCBhZ2FpbnN0IGFjY2lkZW50YWxcbiAgIHVzZSAtIHNlZSAjMjIwMiAqKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cblxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbmxldCBoYXNoX3BhcmFtIG4xIG4yIHggPSBzZWVkZWRfaGFzaF9wYXJhbSBuMSBuMiAwIHhcbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5cbmxldCBrZXlfaW5kZXggaCBrZXkgPVxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNFxuICB0aGVuIChzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJIYXNodGJsOiB1bnN1cHBvcnRlZCBoYXNoIHRhYmxlIGZvcm1hdFwiXG5cbmxldCBhZGQgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxubGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgICgpXG4gIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgZW5kXG4gICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxubGV0IHJlbW92ZSBoIGtleSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbmxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbmxldCBmaW5kIGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG5sZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBOb25lXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbmxldCBmaW5kX29wdCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gTm9uZVxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbmxldCBmaW5kX2FsbCBoIGtleSA9XG4gIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBbXVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiBkYXRhIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxubGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHRydWVcbiAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxubGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBsID0gaC5kYXRhLihpKSBpblxuICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgZW5kXG5cbmxldCBtZW0gaCBrZXkgPVxuICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBmYWxzZVxuICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICBjb21wYXJlIGsga2V5ID0gMCB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxubGV0IGFkZF9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbmxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gIHRibFxuXG5sZXQgcmVidWlsZCA/KHJhbmRvbSA9ICFyYW5kb21pemVkKSBoID1cbiAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IChBcnJheS5sZW5ndGggaC5kYXRhKSBpblxuICBsZXQgc2VlZCA9XG4gICAgaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKExhenkuZm9yY2UgcHJuZylcbiAgICBlbHNlIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5zZWVkXG4gICAgZWxzZSAwIGluXG4gIGxldCBoJyA9IHtcbiAgICBzaXplID0gaC5zaXplO1xuICAgIGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHk7XG4gICAgc2VlZCA9IHNlZWQ7XG4gICAgaW5pdGlhbF9zaXplID0gaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLmluaXRpYWxfc2l6ZSBlbHNlIHNcbiAgfSBpblxuICBpbnNlcnRfYWxsX2J1Y2tldHMgKGtleV9pbmRleCBoJykgZmFsc2UgaC5kYXRhIGgnLmRhdGE7XG4gIGgnXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBQaWVycmUgV2VpcywgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEEgcHJldHR5LXByaW50aW5nIGZhY2lsaXR5IGFuZCBkZWZpbml0aW9uIG9mIGZvcm1hdHRlcnMgZm9yICdwYXJhbGxlbCdcbiAgIChpLmUuIHVucmVsYXRlZCBvciBpbmRlcGVuZGVudCkgcHJldHR5LXByaW50aW5nIG9uIG11bHRpcGxlIG91dCBjaGFubmVscy4gKilcblxuKCpcbiAgIFRoZSBwcmV0dHktcHJpbnRpbmcgZW5naW5lIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy5cbiopXG5cbmxldCBpZCB4ID0geFxuXG4oKiBBIGRldm90ZWQgdHlwZSBmb3Igc2l6ZXMgdG8gYXZvaWQgY29uZnVzaW9uXG4gICBiZXR3ZWVuIHNpemVzIGFuZCBtZXJlIGludGVnZXJzLiAqKVxubW9kdWxlIFNpemUgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHRvX2ludCA6IHQgLT4gaW50XG4gIHZhbCBvZl9pbnQgOiBpbnQgLT4gdFxuICB2YWwgemVybyA6IHRcbiAgdmFsIHVua25vd24gOiB0XG4gIHZhbCBpc19rbm93biA6IHQgLT4gYm9vbFxuZW5kICA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgdG9faW50ID0gaWRcbiAgbGV0IG9mX2ludCA9IGlkXG4gIGxldCB6ZXJvID0gMFxuICBsZXQgdW5rbm93biA9IC0xXG4gIGxldCBpc19rbm93biBuID0gbiA+PSAwXG5lbmRcblxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRpbmcgYm94ZXMgZGVmaW5pdGlvbjpcbiAgIGEgcHJldHR5LXByaW50aW5nIGJveCBpcyBlaXRoZXJcbiAgIC0gaGJveDogaG9yaXpvbnRhbCBib3ggKG5vIGxpbmUgc3BsaXR0aW5nKVxuICAgLSB2Ym94OiB2ZXJ0aWNhbCBib3ggKGV2ZXJ5IGJyZWFrIGhpbnQgc3BsaXRzIHRoZSBsaW5lKVxuICAgLSBodmJveDogaG9yaXpvbnRhbC92ZXJ0aWNhbCBib3hcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIGJveCBpZiBpdCBmaXRzIG9uXG4gICAgICB0aGUgY3VycmVudCBsaW5lLCBvdGhlcndpc2UgdGhlIGJveCBiZWhhdmVzIGFzIGEgdmVydGljYWwgYm94KVxuICAgLSBob3Zib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3hcbiAgICAgKHRoZSBib3ggaXMgY29tcGFjdGluZyBtYXRlcmlhbCwgcHJpbnRpbmcgYXMgbXVjaCBtYXRlcmlhbCBhcyBwb3NzaWJsZVxuICAgICAgb24gZXZlcnkgbGluZXMpXG4gICAtIGJveDogaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjb21wYWN0aW5nIGJveCB3aXRoIGVuaGFuY2VkIGJveCBzdHJ1Y3R1cmVcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGJveCBidXQgYnJlYWsgaGludHMgc3BsaXRcbiAgICAgIHRoZSBsaW5lIGlmIHNwbGl0dGluZyB3b3VsZCBtb3ZlIHRvIHRoZSBsZWZ0KVxuKilcbnR5cGUgYm94X3R5cGUgPSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCB8IFBwX3Zib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHNcblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIHRva2VucyBkZWZpbml0aW9uOlxuICAgYXJlIGVpdGhlciB0ZXh0IHRvIHByaW50IG9yIHByZXR0eSBwcmludGluZ1xuICAgZWxlbWVudHMgdGhhdCBkcml2ZSBpbmRlbnRhdGlvbiBhbmQgbGluZSBzcGxpdHRpbmcuICopXG50eXBlIHBwX3Rva2VuID1cbiAgfCBQcF90ZXh0IG9mIHN0cmluZyAgICAgICAgICAoKiBub3JtYWwgdGV4dCAqKVxuICB8IFBwX2JyZWFrIG9mIHsgICAgICAgICAgICAgICgqIGNvbXBsZXRlIGJyZWFrICopXG4gICAgICBmaXRzOiBzdHJpbmcgKiBpbnQgKiBzdHJpbmc7ICAgKCogbGluZSBpcyBub3Qgc3BsaXQgKilcbiAgICAgIGJyZWFrczogc3RyaW5nICogaW50ICogc3RyaW5nOyAoKiBsaW5lIGlzIHNwbGl0ICopXG4gICAgfVxuICB8IFBwX3RicmVhayBvZiBpbnQgKiBpbnQgICAgICgqIGdvIHRvIG5leHQgdGFidWxhdGlvbiAqKVxuICB8IFBwX3N0YWIgICAgICAgICAgICAgICAgICAgICgqIHNldCBhIHRhYnVsYXRpb24gKilcbiAgfCBQcF9iZWdpbiBvZiBpbnQgKiBib3hfdHlwZSAoKiBiZWdpbm5pbmcgb2YgYSBib3ggKilcbiAgfCBQcF9lbmQgICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSBib3ggKilcbiAgfCBQcF90YmVnaW4gb2YgdGJveCAgICAgICAgICAoKiBiZWdpbm5pbmcgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX3RlbmQgICAgICAgICAgICAgICAgICAgICgqIGVuZCBvZiBhIHRhYnVsYXRpb24gYm94ICopXG4gIHwgUHBfbmV3bGluZSAgICAgICAgICAgICAgICAgKCogdG8gZm9yY2UgYSBuZXdsaW5lIGluc2lkZSBhIGJveCAqKVxuICB8IFBwX2lmX25ld2xpbmUgICAgICAgICAgICAgICgqIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIHRoaXMgdmVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgaGFzIGJlZW4gYnJva2VuICopXG4gIHwgUHBfb3Blbl90YWcgb2Ygc3RhZyAgICAgICAgICgqIG9wZW5pbmcgYSB0YWcgbmFtZSAqKVxuICB8IFBwX2Nsb3NlX3RhZyAgICAgICAgICAgICAgICgqIGNsb3NpbmcgdGhlIG1vc3QgcmVjZW50bHkgb3BlbiB0YWcgKilcblxuYW5kIHN0YWcgPSAuLlxuXG5hbmQgdGJveCA9IFBwX3Rib3ggb2YgaW50IGxpc3QgcmVmICAoKiBUYWJ1bGF0aW9uIGJveCAqKVxuXG50eXBlIHRhZyA9IHN0cmluZ1xudHlwZSBzdGFnICs9IFN0cmluZ190YWcgb2YgdGFnXG5cblxuKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlOlxuICAgcHJldHR5LXByaW50aW5nIG1hdGVyaWFsIGlzIG5vdCB3cml0dGVuIGluIHRoZSBvdXRwdXQgYXMgc29vbiBhcyBlbWl0dGVkO1xuICAgaW5zdGVhZCwgdGhlIG1hdGVyaWFsIGlzIHNpbXBseSByZWNvcmRlZCBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUsXG4gICB1bnRpbCB0aGUgZW5jbG9zaW5nIGJveCBoYXMgYSBrbm93biBjb21wdXRlZCBzaXplIGFuZCBwcm9wZXIgc3BsaXR0aW5nXG4gICBkZWNpc2lvbnMgY2FuIGJlIG1hZGUuXG5cbiAgIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBjb250YWlucyBmb3JtYXR0aW5nIGVsZW1lbnRzIHRvIGJlIHByaW50ZWQuXG4gICBFYWNoIGZvcm1hdHRpbmcgZWxlbWVudCBpcyBhIHR1cGxlIChzaXplLCB0b2tlbiwgbGVuZ3RoKSwgd2hlcmVcbiAgIC0gbGVuZ3RoIGlzIHRoZSBkZWNsYXJlZCBsZW5ndGggb2YgdGhlIHRva2VuLFxuICAgLSBzaXplIGlzIGVmZmVjdGl2ZSBzaXplIG9mIHRoZSB0b2tlbiB3aGVuIGl0IGlzIHByaW50ZWRcbiAgICAgKHNpemUgaXMgc2V0IHdoZW4gdGhlIHNpemUgb2YgdGhlIGJveCBpcyBrbm93biwgc28gdGhhdCBzaXplIG9mIGJyZWFrXG4gICAgICBoaW50cyBhcmUgZGVmaW5pdGl2ZSkuICopXG50eXBlIHBwX3F1ZXVlX2VsZW0gPSB7XG4gIG11dGFibGUgc2l6ZSA6IFNpemUudDtcbiAgdG9rZW4gOiBwcF90b2tlbjtcbiAgbGVuZ3RoIDogaW50O1xufVxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9xdWV1ZSA9IHBwX3F1ZXVlX2VsZW0gUXVldWUudFxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjazogc2Nhbm5pbmcgZWxlbWVudCBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9zY2FuX2VsZW0gPSB7XG4gIGxlZnRfdG90YWwgOiBpbnQ7ICgqIFZhbHVlIG9mIHBwX2xlZnRfdG90YWwgd2hlbiB0aGUgZWxlbWVudCB3YXMgZW5xdWV1ZWQuICopXG4gIHF1ZXVlX2VsZW0gOiBwcF9xdWV1ZV9lbGVtXG59XG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOlxuICAgdGhlIGZvcm1hdHRpbmcgc3RhY2sgY29udGFpbnMgdGhlIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZVxuICAgYm94ZXM7IHRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrIGlzIHVzZWQgdG8gc3BsaXQgdGhlIGxpbmVzXG4gICB3aGlsZSBwcmludGluZyB0b2tlbnMuICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOiBmb3JtYXR0aW5nIHN0YWNrIGVsZW1lbnQgZGVmaW5pdGlvbi5cbiAgIEVhY2ggc3RhY2sgZWxlbWVudCBkZXNjcmliZXMgYSBwcmV0dHktcHJpbnRpbmcgYm94LiAqKVxudHlwZSBwcF9mb3JtYXRfZWxlbSA9IHsgYm94X3R5cGUgOiBib3hfdHlwZTsgd2lkdGggOiBpbnQgfVxuXG4oKiBUaGUgZm9ybWF0dGVyIGRlZmluaXRpb24uXG4gICBFYWNoIGZvcm1hdHRlciB2YWx1ZSBpcyBhIHByZXR0eS1wcmludGVyIGluc3RhbmNlIHdpdGggYWxsIGl0c1xuICAgbWFjaGluZXJ5LiAqKVxudHlwZSBmb3JtYXR0ZXIgPSB7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay4gKilcbiAgcHBfc2Nhbl9zdGFjayA6IHBwX3NjYW5fZWxlbSBTdGFjay50O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjay4gKilcbiAgcHBfZm9ybWF0X3N0YWNrIDogcHBfZm9ybWF0X2VsZW0gU3RhY2sudDtcbiAgcHBfdGJveF9zdGFjayA6IHRib3ggU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHNlbWFudGljcyB0YWcgc3RhY2suICopXG4gIHBwX3RhZ19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgcHBfbWFya19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgKCogVmFsdWUgb2YgcmlnaHQgbWFyZ2luLiAqKVxuICBtdXRhYmxlIHBwX21hcmdpbiA6IGludDtcbiAgKCogTWluaW1hbCBzcGFjZSBsZWZ0IGJlZm9yZSBtYXJnaW4sIHdoZW4gb3BlbmluZyBhIGJveC4gKilcbiAgbXV0YWJsZSBwcF9taW5fc3BhY2VfbGVmdCA6IGludDtcbiAgKCogTWF4aW11bSB2YWx1ZSBvZiBpbmRlbnRhdGlvbjpcbiAgICAgbm8gYm94IGNhbiBiZSBvcGVuZWQgZnVydGhlci4gKilcbiAgbXV0YWJsZSBwcF9tYXhfaW5kZW50IDogaW50O1xuICAoKiBTcGFjZSByZW1haW5pbmcgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbiAgbXV0YWJsZSBwcF9zcGFjZV9sZWZ0IDogaW50O1xuICAoKiBDdXJyZW50IHZhbHVlIG9mIGluZGVudGF0aW9uLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJlbnRfaW5kZW50IDogaW50O1xuICAoKiBUcnVlIHdoZW4gdGhlIGxpbmUgaGFzIGJlZW4gYnJva2VuIGJ5IHRoZSBwcmV0dHktcHJpbnRlci4gKilcbiAgbXV0YWJsZSBwcF9pc19uZXdfbGluZSA6IGJvb2w7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBhbHJlYWR5IHByaW50ZWQuICopXG4gIG11dGFibGUgcHBfbGVmdF90b3RhbCA6IGludDtcbiAgKCogVG90YWwgd2lkdGggb2YgdG9rZW5zIGV2ZXIgcHV0IGluIHF1ZXVlLiAqKVxuICBtdXRhYmxlIHBwX3JpZ2h0X3RvdGFsIDogaW50O1xuICAoKiBDdXJyZW50IG51bWJlciBvZiBvcGVuIGJveGVzLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJfZGVwdGggOiBpbnQ7XG4gICgqIE1heGltdW0gbnVtYmVyIG9mIGJveGVzIHdoaWNoIGNhbiBiZSBzaW11bHRhbmVvdXNseSBvcGVuLiAqKVxuICBtdXRhYmxlIHBwX21heF9ib3hlcyA6IGludDtcbiAgKCogRWxsaXBzaXMgc3RyaW5nLiAqKVxuICBtdXRhYmxlIHBwX2VsbGlwc2lzIDogc3RyaW5nO1xuICAoKiBPdXRwdXQgZnVuY3Rpb24uICopXG4gIG11dGFibGUgcHBfb3V0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQ7XG4gICgqIEZsdXNoaW5nIGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9mbHVzaCA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIG5ldyBsaW5lcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIGJyZWFrIGhpbnRzIHNwYWNlcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X2luZGVudCA6IGludCAtPiB1bml0O1xuICAoKiBBcmUgdGFncyBwcmludGVkID8gKilcbiAgbXV0YWJsZSBwcF9wcmludF90YWdzIDogYm9vbDtcbiAgKCogQXJlIHRhZ3MgbWFya2VkID8gKilcbiAgbXV0YWJsZSBwcF9tYXJrX3RhZ3MgOiBib29sO1xuICAoKiBGaW5kIG9wZW5pbmcgYW5kIGNsb3NpbmcgbWFya2VycyBvZiB0YWdzLiAqKVxuICBtdXRhYmxlIHBwX21hcmtfb3Blbl90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9tYXJrX2Nsb3NlX3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtdXRhYmxlIHBwX3ByaW50X29wZW5fdGFnIDogc3RhZyAtPiB1bml0O1xuICBtdXRhYmxlIHBwX3ByaW50X2Nsb3NlX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxuICBwcF9xdWV1ZSA6IHBwX3F1ZXVlO1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgc3BlY2lmaWMgdGFnIGhhbmRsaW5nIGZ1bmN0aW9ucy4gKilcbnR5cGUgZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fc3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgcHJpbnRfb3Blbl9zdGFnIDogc3RhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV9zdGFnIDogc3RhZyAtPiB1bml0O1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25zIHRvIG91dHB1dCBtYXRlcmlhbC4gKilcbnR5cGUgZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPSB7XG4gIG91dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICBvdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gIG91dF9uZXdsaW5lIDogdW5pdCAtPiB1bml0O1xuICBvdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gIG91dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbn1cblxuXG4oKlxuXG4gIEF1eGlsaWFyaWVzIGFuZCBiYXNpYyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEVudGVyIGEgdG9rZW4gaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2VucXVldWUgc3RhdGUgdG9rZW4gPVxuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBzdGF0ZS5wcF9yaWdodF90b3RhbCArIHRva2VuLmxlbmd0aDtcbiAgUXVldWUuYWRkIHRva2VuIHN0YXRlLnBwX3F1ZXVlXG5cblxubGV0IHBwX2NsZWFyX3F1ZXVlIHN0YXRlID1cbiAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSAxOyBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSAxO1xuICBRdWV1ZS5jbGVhciBzdGF0ZS5wcF9xdWV1ZVxuXG5cbigqIFBwX2luZmluaXR5OiBsYXJnZSB2YWx1ZSBmb3IgZGVmYXVsdCB0b2tlbnMgc2l6ZS5cblxuICAgUHBfaW5maW5pdHkgaXMgZG9jdW1lbnRlZCBhcyBiZWluZyBncmVhdGVyIHRoYW4gMWUxMDsgdG8gYXZvaWRcbiAgIGNvbmZ1c2lvbiBhYm91dCB0aGUgd29yZCAnZ3JlYXRlcicsIHdlIGNob29zZSBwcF9pbmZpbml0eSBncmVhdGVyXG4gICB0aGFuIDFlMTAgKyAxOyBmb3IgY29ycmVjdCBoYW5kbGluZyBvZiB0ZXN0cyBpbiB0aGUgYWxnb3JpdGhtLFxuICAgcHBfaW5maW5pdHkgbXVzdCBiZSBldmVuIG9uZSBtb3JlIHRoYW4gMWUxMCArIDE7IGxldCdzIHN0YW5kIG9uIHRoZVxuICAgc2FmZSBzaWRlIGJ5IGNob29zaW5nIDEuZTEwKzEwLlxuXG4gICBQcF9pbmZpbml0eSBjb3VsZCBwcm9iYWJseSBiZSAxMDczNzQxODIzIHRoYXQgaXMgMl4zMCAtIDEsIHRoYXQgaXNcbiAgIHRoZSBtaW5pbWFsIHVwcGVyIGJvdW5kIGZvciBpbnRlZ2Vyczsgbm93IHRoYXQgbWF4X2ludCBpcyBkZWZpbmVkLFxuICAgdGhpcyBsaW1pdCBjb3VsZCBhbHNvIGJlIGRlZmluZWQgYXMgbWF4X2ludCAtIDEuXG5cbiAgIEhvd2V2ZXIsIGJlZm9yZSBzZXR0aW5nIHBwX2luZmluaXR5IHRvIHNvbWV0aGluZyBhcm91bmQgbWF4X2ludCwgd2VcbiAgIG11c3QgY2FyZWZ1bGx5IGRvdWJsZS1jaGVjayBhbGwgdGhlIGludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zXG4gICB0aGF0IGludm9sdmUgcHBfaW5maW5pdHksIHNpbmNlIGFueSBvdmVyZmxvdyB3b3VsZCB3cmVjayBoYXZvYyB0aGVcbiAgIHByZXR0eS1wcmludGluZyBhbGdvcml0aG0ncyBpbnZhcmlhbnRzLiBHaXZlbiB0aGF0IHRoaXMgYXJpdGhtZXRpY1xuICAgY29ycmVjdG5lc3MgY2hlY2sgaXMgZGlmZmljdWx0IGFuZCBlcnJvciBwcm9uZSBhbmQgZ2l2ZW4gdGhhdCAxZTEwXG4gICArIDEgaXMgaW4gcHJhY3RpY2UgbGFyZ2UgZW5vdWdoLCB0aGVyZSBpcyBubyBuZWVkIHRvIGF0dGVtcHQgdG8gc2V0XG4gICBwcF9pbmZpbml0eSB0byB0aGUgdGhlb3JldGljYWxseSBtYXhpbXVtIGxpbWl0LiBJdCBpcyBub3Qgd29ydGggdGhlXG4gICBidXJkZW4gISAqKVxubGV0IHBwX2luZmluaXR5ID0gMTAwMDAwMDAxMFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIGZvciB0aGUgZm9ybWF0dGVyLiAqKVxubGV0IHBwX291dHB1dF9zdHJpbmcgc3RhdGUgcyA9IHN0YXRlLnBwX291dF9zdHJpbmcgcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5hbmQgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZSAoKVxuYW5kIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9zcGFjZXMgblxuYW5kIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9pbmRlbnQgblxuXG4oKiBGb3JtYXQgYSB0ZXh0dWFsIHRva2VuICopXG5sZXQgZm9ybWF0X3BwX3RleHQgc3RhdGUgc2l6ZSB0ZXh0ID1cbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gc2l6ZTtcbiAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSB0ZXh0O1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSBmYWxzZVxuXG4oKiBGb3JtYXQgYSBzdHJpbmcgYnkgaXRzIGxlbmd0aCwgaWYgbm90IGVtcHR5ICopXG5sZXQgZm9ybWF0X3N0cmluZyBzdGF0ZSBzID1cbiAgaWYgcyA8PiBcIlwiIHRoZW4gZm9ybWF0X3BwX3RleHQgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG4oKiBUbyBmb3JtYXQgYSBicmVhaywgaW5kZW50aW5nIGEgbmV3IGxpbmUuICopXG5sZXQgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKGJlZm9yZSwgb2Zmc2V0LCBhZnRlcikgd2lkdGggPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX2lzX25ld19saW5lIDwtIHRydWU7XG4gIGxldCBpbmRlbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZnNldCBpblxuICAoKiBEb24ndCBpbmRlbnQgbW9yZSB0aGFuIHBwX21heF9pbmRlbnQuICopXG4gIGxldCByZWFsX2luZGVudCA9IEludC5taW4gc3RhdGUucHBfbWF4X2luZGVudCBpbmRlbnQgaW5cbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gcmVhbF9pbmRlbnQ7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfY3VycmVudF9pbmRlbnQ7XG4gIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgc3RhdGUucHBfY3VycmVudF9pbmRlbnQ7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBmb3JjZSBhIGxpbmUgYnJlYWsgaW5zaWRlIGEgYm94OiBubyBvZmZzZXQgaXMgYWRkZWQuICopXG5sZXQgYnJlYWtfbGluZSBzdGF0ZSB3aWR0aCA9IGJyZWFrX25ld19saW5lIHN0YXRlIChcIlwiLCAwLCBcIlwiKSB3aWR0aFxuXG4oKiBUbyBmb3JtYXQgYSBicmVhayB0aGF0IGZpdHMgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbmxldCBicmVha19zYW1lX2xpbmUgc3RhdGUgKGJlZm9yZSwgd2lkdGgsIGFmdGVyKSA9XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYmVmb3JlO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgLSB3aWR0aDtcbiAgcHBfb3V0cHV0X3NwYWNlcyBzdGF0ZSB3aWR0aDtcbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBhZnRlclxuXG5cbigqIFRvIGluZGVudCBubyBtb3JlIHRoYW4gcHBfbWF4X2luZGVudCwgaWYgb25lIHRyaWVzIHRvIG9wZW4gYSBib3hcbiAgIGJleW9uZCBwcF9tYXhfaW5kZW50LCB0aGVuIHRoZSBib3ggaXMgcmVqZWN0ZWQgb24gdGhlIGxlZnRcbiAgIGJ5IHNpbXVsYXRpbmcgYSBicmVhay4gKilcbmxldCBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICB8IE5vbmUgLT4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGVcbiAgfCBTb21lIHsgYm94X3R5cGU7IHdpZHRoIH0gLT5cbiAgICBpZiB3aWR0aCA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlblxuICAgICAgbWF0Y2ggYm94X3R5cGUgd2l0aFxuICAgICAgfCBQcF9maXRzIHwgUHBfaGJveCAtPiAoKVxuICAgICAgfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuXG5cbigqIFRvIHNraXAgYSB0b2tlbiwgaWYgdGhlIHByZXZpb3VzIGxpbmUgaGFzIGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3NraXBfdG9rZW4gc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS50YWtlX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBwcmludF9pZl9uZXdsaW5lIG11c3QgaGF2ZSBiZWVuIHRoZSBsYXN0IHByaW50aW5nIGNvbW1hbmQgKilcbiAgfCBTb21lIHsgc2l6ZTsgbGVuZ3RoOyBfIH0gLT5cbiAgICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIHN0YXRlLnBwX2xlZnRfdG90YWwgLSBsZW5ndGg7XG4gICAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0ICsgU2l6ZS50b19pbnQgc2l6ZVxuXG5cbigqXG5cbiAgVGhlIG1haW4gcHJldHR5IHByaW50aW5nIGZ1bmN0aW9ucy5cblxuKilcblxuKCogRm9ybWF0dGluZyBhIHRva2VuIHdpdGggYSBnaXZlbiBzaXplLiAqKVxubGV0IGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplID0gZnVuY3Rpb25cblxuICB8IFBwX3RleHQgcyAtPlxuICAgIGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgc1xuXG4gIHwgUHBfYmVnaW4gKG9mZiwgdHkpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBpZiBpbnNlcnRpb25fcG9pbnQgPiBzdGF0ZS5wcF9tYXhfaW5kZW50IHRoZW5cbiAgICAgICgqIGNhbiBub3Qgb3BlbiBhIGJveCByaWdodCB0aGVyZS4gKilcbiAgICAgIGJlZ2luIHBwX2ZvcmNlX2JyZWFrX2xpbmUgc3RhdGUgZW5kO1xuICAgIGxldCB3aWR0aCA9IHN0YXRlLnBwX3NwYWNlX2xlZnQgLSBvZmYgaW5cbiAgICBsZXQgYm94X3R5cGUgPVxuICAgICAgbWF0Y2ggdHkgd2l0aFxuICAgICAgfCBQcF92Ym94IC0+IFBwX3Zib3hcbiAgICAgIHwgUHBfaGJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IHwgUHBfZml0cyAtPlxuICAgICAgICBpZiBzaXplID4gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuIHR5IGVsc2UgUHBfZml0cyBpblxuICAgIFN0YWNrLnB1c2ggeyBib3hfdHlwZTsgd2lkdGggfSBzdGF0ZS5wcF9mb3JtYXRfc3RhY2tcblxuICB8IFBwX2VuZCAtPlxuICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHw+IGlnbm9yZVxuXG4gIHwgUHBfdGJlZ2luIChQcF90Ym94IF8gYXMgdGJveCkgLT5cbiAgICBTdGFjay5wdXNoIHRib3ggc3RhdGUucHBfdGJveF9zdGFja1xuXG4gIHwgUHBfdGVuZCAtPlxuICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3N0YWIgLT5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHJlYyBhZGRfdGFiIG4gPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IFtuXVxuICAgICAgICB8IHggOjogbCBhcyBscyAtPiBpZiBuIDwgeCB0aGVuIG4gOjogbHMgZWxzZSB4IDo6IGFkZF90YWIgbiBsIGluXG4gICAgICB0YWJzIDo9IGFkZF90YWIgKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQpICF0YWJzXG4gICAgZW5kXG5cbiAgfCBQcF90YnJlYWsgKG4sIG9mZikgLT5cbiAgICBsZXQgaW5zZXJ0aW9uX3BvaW50ID0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCBpblxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gdGFidWxhdGlvbiBib3guICopXG4gICAgfCBTb21lIChQcF90Ym94IHRhYnMpIC0+XG4gICAgICBsZXQgdGFiID1cbiAgICAgICAgbWF0Y2ggIXRhYnMgd2l0aFxuICAgICAgICB8IFtdIC0+IGluc2VydGlvbl9wb2ludFxuICAgICAgICB8IGZpcnN0IDo6IF8gLT5cbiAgICAgICAgICBsZXQgcmVjIGZpbmQgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCBoZWFkIDo6IHRhaWwgLT5cbiAgICAgICAgICAgICAgaWYgaGVhZCA+PSBpbnNlcnRpb25fcG9pbnQgdGhlbiBoZWFkIGVsc2UgZmluZCB0YWlsXG4gICAgICAgICAgICB8IFtdIC0+IGZpcnN0IGluXG4gICAgICAgICAgZmluZCAhdGFicyBpblxuICAgICAgbGV0IG9mZnNldCA9IHRhYiAtIGluc2VydGlvbl9wb2ludCBpblxuICAgICAgaWYgb2Zmc2V0ID49IDBcbiAgICAgIHRoZW4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIChcIlwiLCBvZmZzZXQgKyBuLCBcIlwiKVxuICAgICAgZWxzZSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgdGFiICsgb2ZmLCBcIlwiKSBzdGF0ZS5wcF9tYXJnaW5cbiAgICBlbmRcblxuICB8IFBwX25ld2xpbmUgLT5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IHdpZHRoOyBffSAtPiBicmVha19saW5lIHN0YXRlIHdpZHRoXG4gICAgZW5kXG5cbiAgfCBQcF9pZl9uZXdsaW5lIC0+XG4gICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgIT0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgIHRoZW4gcHBfc2tpcF90b2tlbiBzdGF0ZVxuXG4gIHwgUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSAtPlxuICAgIGxldCBiZWZvcmUsIG9mZiwgXyA9IGJyZWFrcyBpblxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiBib3guICopXG4gICAgfCBTb21lIHsgYm94X3R5cGU7IHdpZHRoIH0gLT5cbiAgICAgIGJlZ2luIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfaG92Ym94IC0+XG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgICAgZWxzZSBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF9ib3ggLT5cbiAgICAgICAgKCogSGF2ZSB0aGUgbGluZSBqdXN0IGJlZW4gYnJva2VuIGhlcmUgPyAqKVxuICAgICAgICBpZiBzdGF0ZS5wcF9pc19uZXdfbGluZSB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzIGVsc2VcbiAgICAgICAgaWYgc2l6ZSArIFN0cmluZy5sZW5ndGggYmVmb3JlID4gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoIGVsc2VcbiAgICAgICAgKCogYnJlYWsgdGhlIGxpbmUgaGVyZSBsZWFkcyB0byBuZXcgaW5kZW50YXRpb24gPyAqKVxuICAgICAgICBpZiBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA+IHN0YXRlLnBwX21hcmdpbiAtIHdpZHRoICsgb2ZmXG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfaHZib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2ZpdHMgLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfdmJveCAtPiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgIHwgUHBfaGJveCAtPiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgZW5kXG4gICAgZW5kXG5cbiAgIHwgUHBfb3Blbl90YWcgdGFnX25hbWUgLT5cbiAgICAgbGV0IG1hcmtlciA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBtYXJrZXI7XG4gICAgIFN0YWNrLnB1c2ggdGFnX25hbWUgc3RhdGUucHBfbWFya19zdGFja1xuXG4gICB8IFBwX2Nsb3NlX3RhZyAtPlxuICAgICBiZWdpbiBtYXRjaCBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX21hcmtfc3RhY2sgd2l0aFxuICAgICB8IE5vbmUgLT4gKCkgKCogTm8gbW9yZSB0YWcgdG8gY2xvc2UuICopXG4gICAgIHwgU29tZSB0YWdfbmFtZSAtPlxuICAgICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyB0YWdfbmFtZSBpblxuICAgICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyXG4gICAgIGVuZFxuXG5cbigqIFByaW50IGlmIHRva2VuIHNpemUgaXMga25vd24gZWxzZSBwcmludGluZyBpcyBkZWxheWVkLlxuICAgUHJpbnRpbmcgaXMgZGVsYXllZCB3aGVuIHRoZSB0ZXh0IHdhaXRpbmcgaW4gdGhlIHF1ZXVlIHJlcXVpcmVzXG4gICBtb3JlIHJvb20gdG8gZm9ybWF0IHRoYW4gZXhpc3RzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgcmVjIGFkdmFuY2VfbGVmdCBzdGF0ZSA9XG4gIG1hdGNoIFF1ZXVlLnBlZWtfb3B0IHN0YXRlLnBwX3F1ZXVlIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIE5vIHRva2VucyB0byBwcmludCAqKVxuICB8IFNvbWUgeyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gLT5cbiAgICBsZXQgcGVuZGluZ19jb3VudCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsIC0gc3RhdGUucHBfbGVmdF90b3RhbCBpblxuICAgIGlmIFNpemUuaXNfa25vd24gc2l6ZSB8fCBwZW5kaW5nX2NvdW50ID49IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiBiZWdpblxuICAgICAgUXVldWUudGFrZSBzdGF0ZS5wcF9xdWV1ZSB8PiBpZ25vcmU7ICgqIE5vdCBlbXB0eTogd2UgcGVlayBpbnRvIGl0ICopXG4gICAgICBsZXQgc2l6ZSA9IGlmIFNpemUuaXNfa25vd24gc2l6ZSB0aGVuIFNpemUudG9faW50IHNpemUgZWxzZSBwcF9pbmZpbml0eSBpblxuICAgICAgZm9ybWF0X3BwX3Rva2VuIHN0YXRlIHNpemUgdG9rZW47XG4gICAgICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIGxlbmd0aCArIHN0YXRlLnBwX2xlZnRfdG90YWw7XG4gICAgICAoYWR2YW5jZV9sZWZ0IFtAdGFpbGNhbGxdKSBzdGF0ZVxuICAgIGVuZFxuXG5cbigqIFRvIGVucXVldWUgYSB0b2tlbiA6IHRyeSB0byBhZHZhbmNlLiAqKVxubGV0IGVucXVldWVfYWR2YW5jZSBzdGF0ZSB0b2sgPSBwcF9lbnF1ZXVlIHN0YXRlIHRvazsgYWR2YW5jZV9sZWZ0IHN0YXRlXG5cblxuKCogVG8gZW5xdWV1ZSBzdHJpbmdzLiAqKVxubGV0IGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgcyA9XG4gIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemU7IHRva2VuID0gUHBfdGV4dCBzOyBsZW5ndGggPSBTaXplLnRvX2ludCBzaXplIH1cblxuXG5sZXQgZW5xdWV1ZV9zdHJpbmcgc3RhdGUgcyA9XG4gIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIChTaXplLm9mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSkgc1xuXG5cbigqIFJvdXRpbmVzIGZvciBzY2FuIHN0YWNrXG4gICBkZXRlcm1pbmUgc2l6ZSBvZiBib3hlcy4gKilcblxuKCogVGhlIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG5sZXQgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YWNrID1cbiAgU3RhY2suY2xlYXIgc3RhY2s7XG4gIGxldCBxdWV1ZV9lbGVtID0geyBzaXplID0gU2l6ZS51bmtub3duOyB0b2tlbiA9IFBwX3RleHQgXCJcIjsgbGVuZ3RoID0gMCB9IGluXG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gLTE7IHF1ZXVlX2VsZW0gfSBzdGFja1xuXG4oKiBTZXR0aW5nIHRoZSBzaXplIG9mIGJveGVzIG9uIHNjYW4gc3RhY2s6XG4gICBpZiB0eSA9IHRydWUgdGhlbiBzaXplIG9mIGJyZWFrIGlzIHNldCBlbHNlIHNpemUgb2YgYm94IGlzIHNldDtcbiAgIGluIGVhY2ggY2FzZSBwcF9zY2FuX3N0YWNrIGlzIHBvcHBlZC5cblxuICAgTm90ZTpcbiAgIFBhdHRlcm4gbWF0Y2hpbmcgb24gc2NhbiBzdGFjayBpcyBleGhhdXN0aXZlLCBzaW5jZSBzY2FuX3N0YWNrIGlzIG5ldmVyXG4gICBlbXB0eS5cbiAgIFBhdHRlcm4gbWF0Y2hpbmcgb24gdG9rZW4gaW4gc2NhbiBzdGFjayBpcyBhbHNvIGV4aGF1c3RpdmUsXG4gICBzaW5jZSBzY2FuX3B1c2ggaXMgdXNlZCBvbiBicmVha3MgYW5kIG9wZW5pbmcgb2YgYm94ZXMuICopXG5sZXQgc2V0X3NpemUgc3RhdGUgdHkgPVxuICBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogc2Nhbl9zdGFjayBpcyBuZXZlciBlbXB0eS4gKilcbiAgfCBTb21lIHsgbGVmdF90b3RhbDsgcXVldWVfZWxlbSB9IC0+XG4gICAgbGV0IHNpemUgPSBTaXplLnRvX2ludCBxdWV1ZV9lbGVtLnNpemUgaW5cbiAgICAoKiB0ZXN0IGlmIHNjYW4gc3RhY2sgY29udGFpbnMgYW55IGRhdGEgdGhhdCBpcyBub3Qgb2Jzb2xldGUuICopXG4gICAgaWYgbGVmdF90b3RhbCA8IHN0YXRlLnBwX2xlZnRfdG90YWwgdGhlblxuICAgICAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2tcbiAgICBlbHNlXG4gICAgICBtYXRjaCBxdWV1ZV9lbGVtLnRva2VuIHdpdGhcbiAgICAgIHwgUHBfYnJlYWsgXyB8IFBwX3RicmVhayAoXywgXykgLT5cbiAgICAgICAgaWYgdHkgdGhlbiBiZWdpblxuICAgICAgICAgIHF1ZXVlX2VsZW0uc2l6ZSA8LSBTaXplLm9mX2ludCAoc3RhdGUucHBfcmlnaHRfdG90YWwgKyBzaXplKTtcbiAgICAgICAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgfD4gaWdub3JlXG4gICAgICAgIGVuZFxuICAgICAgfCBQcF9iZWdpbiAoXywgXykgLT5cbiAgICAgICAgaWYgbm90IHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfdGV4dCBfIHwgUHBfc3RhYiB8IFBwX3RiZWdpbiBfIHwgUHBfdGVuZCB8IFBwX2VuZFxuICAgICAgfCBQcF9uZXdsaW5lIHwgUHBfaWZfbmV3bGluZSB8IFBwX29wZW5fdGFnIF8gfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgICAgKCkgKCogc2Nhbl9wdXNoIGlzIG9ubHkgdXNlZCBmb3IgYnJlYWtzIGFuZCBib3hlcy4gKilcblxuXG4oKiBQdXNoIGEgdG9rZW4gb24gcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suXG4gICBJZiBiIGlzIHRydWUgc2V0X3NpemUgaXMgY2FsbGVkLiAqKVxubGV0IHNjYW5fcHVzaCBzdGF0ZSBiIHRva2VuID1cbiAgcHBfZW5xdWV1ZSBzdGF0ZSB0b2tlbjtcbiAgaWYgYiB0aGVuIHNldF9zaXplIHN0YXRlIHRydWU7XG4gIGxldCBlbGVtID0geyBsZWZ0X3RvdGFsID0gc3RhdGUucHBfcmlnaHRfdG90YWw7IHF1ZXVlX2VsZW0gPSB0b2tlbiB9IGluXG4gIFN0YWNrLnB1c2ggZWxlbSBzdGF0ZS5wcF9zY2FuX3N0YWNrXG5cblxuKCogVG8gb3BlbiBhIG5ldyBib3ggOlxuICAgdGhlIHVzZXIgbWF5IHNldCB0aGUgZGVwdGggYm91bmQgcHBfbWF4X2JveGVzXG4gICBhbnkgdGV4dCBuZXN0ZWQgZGVlcGVyIGlzIHByaW50ZWQgYXMgdGhlIGVsbGlwc2lzIHN0cmluZy4gKilcbmxldCBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IGJyX3R5ID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF9iZWdpbiAoaW5kZW50LCBicl90eSk7IGxlbmd0aCA9IDAgfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSBmYWxzZSBlbGVtIGVsc2VcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA9IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nIHN0YXRlIHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVGhlIGJveCB3aGljaCBpcyBhbHdheXMgb3Blbi4gKilcbmxldCBwcF9vcGVuX3N5c19ib3ggc3RhdGUgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9ob3Zib3hcblxuKCogQ2xvc2UgYSBib3gsIHNldHRpbmcgc2l6ZXMgb2YgaXRzIHN1YiBib3hlcy4gKilcbmxldCBwcF9jbG9zZV9ib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgYmVnaW5cbiAgICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2VuZDsgbGVuZ3RoID0gMCB9O1xuICAgICAgc2V0X3NpemUgc3RhdGUgdHJ1ZTsgc2V0X3NpemUgc3RhdGUgZmFsc2VcbiAgICBlbmQ7XG4gICAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoIC0gMTtcbiAgZW5kXG5cblxuKCogT3BlbiBhIHRhZywgcHVzaGluZyBpdCBvbiB0aGUgdGFnIHN0YWNrLiAqKVxubGV0IHBwX29wZW5fc3RhZyBzdGF0ZSB0YWdfbmFtZSA9XG4gIGlmIHN0YXRlLnBwX3ByaW50X3RhZ3MgdGhlblxuICBiZWdpblxuICAgIFN0YWNrLnB1c2ggdGFnX25hbWUgc3RhdGUucHBfdGFnX3N0YWNrO1xuICAgIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIHRhZ19uYW1lXG4gIGVuZDtcbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBsZXQgdG9rZW4gPSBQcF9vcGVuX3RhZyB0YWdfbmFtZSBpblxuICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbjsgbGVuZ3RoID0gMCB9XG5cblxuKCogQ2xvc2UgYSB0YWcsIHBvcHBpbmcgaXQgZnJvbSB0aGUgdGFnIHN0YWNrLiAqKVxubGV0IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9tYXJrX3RhZ3MgdGhlblxuICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2Nsb3NlX3RhZzsgbGVuZ3RoID0gMCB9O1xuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgICBtYXRjaCBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3RhZ19zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgIHwgU29tZSB0YWdfbmFtZSAtPlxuICAgICAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIHRhZ19uYW1lXG5cbmxldCBwcF9vcGVuX3RhZyBzdGF0ZSBzID0gcHBfb3Blbl9zdGFnIHN0YXRlIChTdHJpbmdfdGFnIHMpXG5sZXQgcHBfY2xvc2VfdGFnIHN0YXRlICgpID0gcHBfY2xvc2Vfc3RhZyBzdGF0ZSAoKVxuXG5sZXQgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX3ByaW50X3RhZ3MgPC0gYlxubGV0IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX21hcmtfdGFncyA8LSBiXG5sZXQgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9wcmludF90YWdzXG5sZXQgcHBfZ2V0X21hcmtfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmtfdGFnc1xubGV0IHBwX3NldF90YWdzIHN0YXRlIGIgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiOyBwcF9zZXRfbWFya190YWdzIHN0YXRlIGJcblxuXG4oKiBIYW5kbGluZyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zOiBnZXQvc2V0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBtYXJrX29wZW5fc3RhZyA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnO1xuICBwcmludF9vcGVuX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZztcbiAgcHJpbnRfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZztcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl9zdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3N0YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fc3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2Vfc3RhZyA9IHBjdDtcbiAgfSA9XG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gbW90O1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBtY3Q7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHBvdDtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHBjdFxuXG5cbigqIEluaXRpYWxpemUgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfcmluaXQgc3RhdGUgPVxuICBwcF9jbGVhcl9xdWV1ZSBzdGF0ZTtcbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX2Zvcm1hdF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGJveF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGFnX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9tYXJrX3N0YWNrO1xuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSAwO1xuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIDA7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luO1xuICBwcF9vcGVuX3N5c19ib3ggc3RhdGVcblxubGV0IGNsZWFyX3RhZ19zdGFjayBzdGF0ZSA9XG4gIFN0YWNrLml0ZXIgKGZ1biBfIC0+IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSkgc3RhdGUucHBfdGFnX3N0YWNrXG5cblxuKCogRmx1c2hpbmcgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG5sZXQgcHBfZmx1c2hfcXVldWUgc3RhdGUgYiA9XG4gIGNsZWFyX3RhZ19zdGFjayBzdGF0ZTtcbiAgd2hpbGUgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgZG9cbiAgICBwcF9jbG9zZV9ib3ggc3RhdGUgKClcbiAgZG9uZTtcbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gcHBfaW5maW5pdHk7XG4gIGFkdmFuY2VfbGVmdCBzdGF0ZTtcbiAgaWYgYiB0aGVuIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBwcF9yaW5pdCBzdGF0ZVxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gZm9ybWF0IHZhbHVlcyBhbmQgdXNlIGJveGVzLlxuXG4qKVxuXG4oKiBUbyBmb3JtYXQgYSBzdHJpbmcuICopXG5sZXQgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSBzaXplIHMgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzXG4gIHRoZW4gZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgc2l6ZSBzXG5cblxubGV0IHBwX3ByaW50X2FzIHN0YXRlIGlzaXplIHMgPVxuICBwcF9wcmludF9hc19zaXplIHN0YXRlIChTaXplLm9mX2ludCBpc2l6ZSkgc1xuXG5cbmxldCBwcF9wcmludF9zdHJpbmcgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxubGV0IHBwX3ByaW50X2J5dGVzIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoQnl0ZXMubGVuZ3RoIHMpIChCeXRlcy50b19zdHJpbmcgcylcblxuKCogVG8gZm9ybWF0IGFuIGludGVnZXIuICopXG5sZXQgcHBfcHJpbnRfaW50IHN0YXRlIGkgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKEludC50b19zdHJpbmcgaSlcblxuKCogVG8gZm9ybWF0IGEgZmxvYXQuICopXG5sZXQgcHBfcHJpbnRfZmxvYXQgc3RhdGUgZiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Zsb2F0IGYpXG5cbigqIFRvIGZvcm1hdCBhIGJvb2xlYW4uICopXG5sZXQgcHBfcHJpbnRfYm9vbCBzdGF0ZSBiID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfYm9vbCBiKVxuXG4oKiBUbyBmb3JtYXQgYSBjaGFyLiAqKVxubGV0IHBwX3ByaW50X2NoYXIgc3RhdGUgYyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIDEgKFN0cmluZy5tYWtlIDEgYylcblxuXG4oKiBPcGVuaW5nIGJveGVzLiAqKVxubGV0IHBwX29wZW5faGJveCBzdGF0ZSAoKSA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSAwIFBwX2hib3hcbmFuZCBwcF9vcGVuX3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF92Ym94XG5cbmFuZCBwcF9vcGVuX2h2Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaHZib3hcbmFuZCBwcF9vcGVuX2hvdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2hvdmJveFxuYW5kIHBwX29wZW5fYm94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfYm94XG5cblxuKCogUHJpbnRpbmcgcXVldWVkIHRleHQuXG5cbiAgIFtwcF9wcmludF9mbHVzaF0gcHJpbnRzIGFsbCBwZW5kaW5nIGl0ZW1zIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhbmRcbiAgIHRoZW4gZmx1c2hlcyB0aGUgbG93IGxldmVsIG91dHB1dCBkZXZpY2Ugb2YgdGhlIGZvcm1hdHRlciB0byBhY3R1YWxseVxuICAgZGlzcGxheSBwcmludGluZyBtYXRlcmlhbC5cblxuICAgW3BwX3ByaW50X25ld2xpbmVdIGJlaGF2ZXMgYXMgW3BwX3ByaW50X2ZsdXNoXSBhZnRlciBwcmludGluZyBhbiBhZGRpdGlvbmFsXG4gICBuZXcgbGluZS4gKilcbmxldCBwcF9wcmludF9uZXdsaW5lIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgdHJ1ZTsgc3RhdGUucHBfb3V0X2ZsdXNoICgpXG5hbmQgcHBfcHJpbnRfZmx1c2ggc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSBmYWxzZTsgc3RhdGUucHBfb3V0X2ZsdXNoICgpXG5cblxuKCogVG8gZ2V0IGEgbmV3bGluZSB3aGVuIG9uZSBkb2VzIG5vdCB3YW50IHRvIGNsb3NlIHRoZSBjdXJyZW50IGJveC4gKilcbmxldCBwcF9mb3JjZV9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBUbyBmb3JtYXQgc29tZXRoaW5nLCBvbmx5IGluIGNhc2UgdGhlIGxpbmUgaGFzIGp1c3QgYmVlbiBicm9rZW4uICopXG5sZXQgcHBfcHJpbnRfaWZfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZVxuICAgICAgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2lmX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIEdlbmVyYWxpemVkIGJyZWFrIGhpbnQgdGhhdCBhbGxvd3MgcHJpbnRpbmcgc3RyaW5ncyBiZWZvcmUvYWZ0ZXJcbiAgIHNhbWUtbGluZSBvZmZzZXQgKHdpZHRoKSBvciBuZXctbGluZSBvZmZzZXQgKilcbmxldCBwcF9wcmludF9jdXN0b21fYnJlYWsgc3RhdGUgfmZpdHMgfmJyZWFrcyA9XG4gIGxldCBiZWZvcmUsIHdpZHRoLCBhZnRlciA9IGZpdHMgaW5cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgdG9rZW4gPSBQcF9icmVhayB7IGZpdHM7IGJyZWFrcyB9IGluXG4gICAgbGV0IGxlbmd0aCA9IFN0cmluZy5sZW5ndGggYmVmb3JlICsgd2lkdGggKyBTdHJpbmcubGVuZ3RoIGFmdGVyIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuOyBsZW5ndGggfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSB0cnVlIGVsZW1cblxuKCogUHJpbnRpbmcgYnJlYWsgaGludHM6XG4gICBBIGJyZWFrIGhpbnQgaW5kaWNhdGVzIHdoZXJlIGEgYm94IG1heSBiZSBicm9rZW4uXG4gICBJZiBsaW5lIGlzIGJyb2tlbiB0aGVuIG9mZnNldCBpcyBhZGRlZCB0byB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnRcbiAgIGJveCBlbHNlICh0aGUgdmFsdWUgb2YpIHdpZHRoIGJsYW5rcyBhcmUgcHJpbnRlZC4gKilcbmxldCBwcF9wcmludF9icmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBwcF9wcmludF9jdXN0b21fYnJlYWsgc3RhdGVcbiAgICB+Zml0czooXCJcIiwgd2lkdGgsIFwiXCIpIH5icmVha3M6KFwiXCIsIG9mZnNldCwgXCJcIilcblxuXG4oKiBQcmludCBhIHNwYWNlIDpcbiAgIGEgc3BhY2UgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIGEgc2luZ2xlIHNwYWNlIGlmIHRoZSBicmVhayBkb2VzIG5vdFxuICAgc3BsaXQgdGhlIGxpbmU7XG4gICBhIGN1dCBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgbm90aGluZyBpZiB0aGUgYnJlYWsgZG9lcyBub3Qgc3BsaXQgdGhlXG4gICBsaW5lLiAqKVxubGV0IHBwX3ByaW50X3NwYWNlIHN0YXRlICgpID0gcHBfcHJpbnRfYnJlYWsgc3RhdGUgMSAwXG5hbmQgcHBfcHJpbnRfY3V0IHN0YXRlICgpID0gcHBfcHJpbnRfYnJlYWsgc3RhdGUgMCAwXG5cblxuKCogVGFidWxhdGlvbiBib3hlcy4gKilcbmxldCBwcF9vcGVuX3Rib3ggc3RhdGUgKCkgPVxuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggKyAxO1xuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUuemVybyBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RiZWdpbiAoUHBfdGJveCAocmVmIFtdKSk7IGxlbmd0aCA9IDAgfSBpblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtXG5cblxuKCogQ2xvc2UgYSB0YWJ1bGF0aW9uIGJveC4gKilcbmxldCBwcF9jbG9zZV90Ym94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgIGxldCBlbGVtID0geyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX3RlbmQ7IGxlbmd0aCA9IDAgfSBpblxuICAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbTtcbiAgICAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoIC0gMVxuICBlbmRcblxuXG4oKiBQcmludCBhIHRhYnVsYXRpb24gYnJlYWsuICopXG5sZXQgcHBfcHJpbnRfdGJyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJyZWFrICh3aWR0aCwgb2Zmc2V0KTsgbGVuZ3RoID0gd2lkdGggfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSB0cnVlIGVsZW1cblxuXG5sZXQgcHBfcHJpbnRfdGFiIHN0YXRlICgpID0gcHBfcHJpbnRfdGJyZWFrIHN0YXRlIDAgMFxuXG5sZXQgcHBfc2V0X3RhYiBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBlbGVtID0geyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX3N0YWI7IGxlbmd0aCA9IDAgfSBpblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtXG5cblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGNvbnRyb2wgdGhlIHByZXR0eS1wcmludGVyc1xuXG4qKVxuXG4oKiBTZXRfbWF4X2JveGVzLiAqKVxubGV0IHBwX3NldF9tYXhfYm94ZXMgc3RhdGUgbiA9IGlmIG4gPiAxIHRoZW4gc3RhdGUucHBfbWF4X2JveGVzIDwtIG5cblxuKCogVG8ga25vdyB0aGUgY3VycmVudCBtYXhpbXVtIG51bWJlciBvZiBib3hlcyBhbGxvd2VkLiAqKVxubGV0IHBwX2dldF9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxubGV0IHBwX292ZXJfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfY3Vycl9kZXB0aCA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG4oKiBFbGxpcHNpcy4gKilcbmxldCBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSBzID0gc3RhdGUucHBfZWxsaXBzaXMgPC0gc1xuYW5kIHBwX2dldF9lbGxpcHNpc190ZXh0IHN0YXRlICgpID0gc3RhdGUucHBfZWxsaXBzaXNcblxuXG4oKiBUbyBzZXQgdGhlIG1hcmdpbiBvZiBwcmV0dHktcHJpbnRlci4gKilcbmxldCBwcF9saW1pdCBuID1cbiAgaWYgbiA8IHBwX2luZmluaXR5IHRoZW4gbiBlbHNlIHByZWQgcHBfaW5maW5pdHlcblxuXG4oKiBJbnRlcm5hbCBwcmV0dHktcHJpbnRlciBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIG4gPVxuICBpZiBuID49IDEgdGhlblxuICAgIGxldCBuID0gcHBfbGltaXQgbiBpblxuICAgIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0IDwtIG47XG4gICAgc3RhdGUucHBfbWF4X2luZGVudCA8LSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9yaW5pdCBzdGF0ZVxuXG5cbigqIEluaXRpYWxseSwgd2UgaGF2ZSA6XG4gICBwcF9tYXhfaW5kZW50ID0gcHBfbWFyZ2luIC0gcHBfbWluX3NwYWNlX2xlZnQsIGFuZFxuICAgcHBfc3BhY2VfbGVmdCA9IHBwX21hcmdpbi4gKilcbmxldCBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuID1cbiAgaWYgbiA+IDEgdGhlblxuICAgIHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSAoc3RhdGUucHBfbWFyZ2luIC0gbilcblxuXG5sZXQgcHBfZ2V0X21heF9pbmRlbnQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXhfaW5kZW50XG5cbmxldCBwcF9zZXRfbWFyZ2luIHN0YXRlIG4gPVxuICBpZiBuID49IDEgdGhlblxuICAgIGxldCBuID0gcHBfbGltaXQgbiBpblxuICAgIHN0YXRlLnBwX21hcmdpbiA8LSBuO1xuICAgIGxldCBuZXdfbWF4X2luZGVudCA9XG4gICAgICAoKiBUcnkgdG8gbWFpbnRhaW4gbWF4X2luZGVudCB0byBpdHMgYWN0dWFsIHZhbHVlLiAqKVxuICAgICAgaWYgc3RhdGUucHBfbWF4X2luZGVudCA8PSBzdGF0ZS5wcF9tYXJnaW5cbiAgICAgIHRoZW4gc3RhdGUucHBfbWF4X2luZGVudCBlbHNlXG4gICAgICAoKiBJZiBwb3NzaWJsZSBtYWludGFpbiBwcF9taW5fc3BhY2VfbGVmdCB0byBpdHMgYWN0dWFsIHZhbHVlLFxuICAgICAgICAgaWYgdGhpcyBsZWFkcyB0byBhIHRvbyBzbWFsbCBtYXhfaW5kZW50LCB0YWtlIGhhbGYgb2YgdGhlXG4gICAgICAgICBuZXcgbWFyZ2luLCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMS4gKilcbiAgICAgICBJbnQubWF4IChJbnQubWF4IChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdClcbiAgICAgICAgICAgICAgICAoc3RhdGUucHBfbWFyZ2luIC8gMikpIDEgaW5cbiAgICAoKiBSZWJ1aWxkIGludmFyaWFudHMuICopXG4gICAgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbmV3X21heF9pbmRlbnRcblxuXG4oKiogR2VvbWV0cnkgZnVuY3Rpb25zIGFuZCB0eXBlcyAqKVxudHlwZSBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDppbnQ7IG1hcmdpbjogaW50fVxuXG5sZXQgdmFsaWRhdGVfZ2VvbWV0cnkge21hcmdpbjsgbWF4X2luZGVudH0gPVxuICBpZiBtYXhfaW5kZW50IDwgMiB0aGVuXG4gICAgRXJyb3IgXCJtYXhfaW5kZW50IDwgMlwiXG4gIGVsc2UgaWYgbWFyZ2luIDw9IG1heF9pbmRlbnQgdGhlblxuICAgIEVycm9yIFwibWFyZ2luIDw9IG1heF9pbmRlbnRcIlxuICBlbHNlIE9rICgpXG5cbmxldCBjaGVja19nZW9tZXRyeSBnZW9tZXRyeSA9XG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBPayAoKSAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmdpblxuXG5sZXQgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUge21hcmdpbjsgbWF4X2luZGVudH0gPVxuICBwcF9zZXRfbWFyZ2luIHN0YXRlIG1hcmdpbjtcbiAgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbWF4X2luZGVudDtcbiAgKClcblxubGV0IHBwX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgbXNnIC0+XG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgKFwiRm9ybWF0LnBwX3NldF9nZW9tZXRyeTogXCIgXiBtc2cpKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBfbXNnIC0+XG4gICAgICgpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpID1cbiAgeyBtYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0YXRlICgpOyBtYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RhdGUgKCkgfVxuXG5sZXQgcHBfdXBkYXRlX2dlb21ldHJ5IHN0YXRlIHVwZGF0ZSA9XG4gIGxldCBnZW9tZXRyeSA9IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSBpblxuICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSAodXBkYXRlIGdlb21ldHJ5KVxuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgIG91dF9zdHJpbmcgPSBmO1xuICAgICAgb3V0X2ZsdXNoID0gZztcbiAgICAgIG91dF9uZXdsaW5lID0gaDtcbiAgICAgIG91dF9zcGFjZXMgPSBpO1xuICAgICAgb3V0X2luZGVudCA9IGo7XG4gICAgfSA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjtcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGc7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGg7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gaTtcbiAgc3RhdGUucHBfb3V0X2luZGVudCA8LSBqXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUgKCkgPSB7XG4gIG91dF9zdHJpbmcgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nO1xuICBvdXRfZmx1c2ggPSBzdGF0ZS5wcF9vdXRfZmx1c2g7XG4gIG91dF9uZXdsaW5lID0gc3RhdGUucHBfb3V0X25ld2xpbmU7XG4gIG91dF9zcGFjZXMgPSBzdGF0ZS5wcF9vdXRfc3BhY2VzO1xuICBvdXRfaW5kZW50ID0gc3RhdGUucHBfb3V0X2luZGVudDtcbn1cblxuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIHN0cmluZyBvdXRwdXQgYW5kIGZsdXNoIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgZiBnID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmOyBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZ1xuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaClcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfbmV3bGluZSBzdGF0ZSAoKSA9IHN0YXRlLnBwX291dF9zdHJpbmcgXCJcXG5cIiAwICAxXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBzcGFjZXMuICopXG5sZXQgYmxhbmtfbGluZSA9IFN0cmluZy5tYWtlIDgwICcgJ1xubGV0IHJlYyBkaXNwbGF5X2JsYW5rcyBzdGF0ZSBuID1cbiAgaWYgbiA+IDAgdGhlblxuICBpZiBuIDw9IDgwIHRoZW4gc3RhdGUucHBfb3V0X3N0cmluZyBibGFua19saW5lIDAgbiBlbHNlXG4gIGJlZ2luXG4gICAgc3RhdGUucHBfb3V0X3N0cmluZyBibGFua19saW5lIDAgODA7XG4gICAgZGlzcGxheV9ibGFua3Mgc3RhdGUgKG4gLSA4MClcbiAgZW5kXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IGluZGVudGF0aW9uIG9mIG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X2luZGVudCA9IGRpc3BsYXlfYmxhbmtzXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucyBhcyBwcmludGluZyB0byBhIGdpdmVuXG4gICBbUGVydmFzaXZlLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHN0YXRlIG9jID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBvdXRwdXRfc3Vic3RyaW5nIG9jO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gKGZ1biAoKSAtPiBmbHVzaCBvYyk7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBzdGF0ZTtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBkaXNwbGF5X2JsYW5rcyBzdGF0ZTtcbiAgc3RhdGUucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBzdGF0ZVxuXG4oKlxuXG4gIERlZmluaW5nIHNwZWNpZmljIGZvcm1hdHRlcnNcblxuKilcblxubGV0IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nX3RhZyBzIC0+IFwiPFwiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5sZXQgZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nX3RhZyBzIC0+IFwiPC9cIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxuXG5sZXQgZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyA9IGlnbm9yZVxubGV0IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnID0gaWdub3JlXG5cbigqIEJ1aWxkaW5nIGEgZm9ybWF0dGVyIGdpdmVuIGl0cyBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLlxuICAgT3RoZXIgZmllbGRzIGdldCByZWFzb25hYmxlIGRlZmF1bHQgdmFsdWVzLiAqKVxubGV0IHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgaiA9XG4gICgqIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBmb3JtYXR0ZXIgY29udGFpbnMgYSBkdW1teSBib3guICopXG4gIGxldCBwcF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICBsZXQgc3lzX3RvayA9XG4gICAgeyBzaXplID0gU2l6ZS51bmtub3duOyB0b2tlbiA9IFBwX2JlZ2luICgwLCBQcF9ob3Zib3gpOyBsZW5ndGggPSAwIH0gaW5cbiAgUXVldWUuYWRkIHN5c190b2sgcHBfcXVldWU7XG4gIGxldCBzY2FuX3N0YWNrID0gU3RhY2suY3JlYXRlICgpIGluXG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzY2FuX3N0YWNrO1xuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IDE7IHF1ZXVlX2VsZW0gPSBzeXNfdG9rIH0gc2Nhbl9zdGFjaztcbiAgbGV0IHBwX21hcmdpbiA9IDc4XG4gIGFuZCBwcF9taW5fc3BhY2VfbGVmdCA9IDEwIGluXG4gIHtcbiAgICBwcF9zY2FuX3N0YWNrID0gc2Nhbl9zdGFjaztcbiAgICBwcF9mb3JtYXRfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGJveF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90YWdfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFya19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJnaW4gPSBwcF9tYXJnaW47XG4gICAgcHBfbWluX3NwYWNlX2xlZnQgPSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9tYXhfaW5kZW50ID0gcHBfbWFyZ2luIC0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfc3BhY2VfbGVmdCA9IHBwX21hcmdpbjtcbiAgICBwcF9jdXJyZW50X2luZGVudCA9IDA7XG4gICAgcHBfaXNfbmV3X2xpbmUgPSB0cnVlO1xuICAgIHBwX2xlZnRfdG90YWwgPSAxO1xuICAgIHBwX3JpZ2h0X3RvdGFsID0gMTtcbiAgICBwcF9jdXJyX2RlcHRoID0gMTtcbiAgICBwcF9tYXhfYm94ZXMgPSBtYXhfaW50O1xuICAgIHBwX2VsbGlwc2lzID0gXCIuXCI7XG4gICAgcHBfb3V0X3N0cmluZyA9IGY7XG4gICAgcHBfb3V0X2ZsdXNoID0gZztcbiAgICBwcF9vdXRfbmV3bGluZSA9IGg7XG4gICAgcHBfb3V0X3NwYWNlcyA9IGk7XG4gICAgcHBfb3V0X2luZGVudCA9IGo7XG4gICAgcHBfcHJpbnRfdGFncyA9IGZhbHNlO1xuICAgIHBwX21hcmtfdGFncyA9IGZhbHNlO1xuICAgIHBwX21hcmtfb3Blbl90YWcgPSBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWc7XG4gICAgcHBfbWFya19jbG9zZV90YWcgPSBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnO1xuICAgIHBwX3ByaW50X29wZW5fdGFnID0gZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZztcbiAgICBwcF9wcmludF9jbG9zZV90YWcgPSBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZztcbiAgICBwcF9xdWV1ZSA9IHBwX3F1ZXVlO1xuICB9XG5cblxuKCogQnVpbGQgYSBmb3JtYXR0ZXIgb3V0IG9mIGl0cyBvdXQgZnVuY3Rpb25zLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfZnVuY3Rpb25zIG91dF9mdW5zID1cbiAgcHBfbWFrZV9mb3JtYXR0ZXJcbiAgICBvdXRfZnVucy5vdXRfc3RyaW5nXG4gICAgb3V0X2Z1bnMub3V0X2ZsdXNoXG4gICAgb3V0X2Z1bnMub3V0X25ld2xpbmVcbiAgICBvdXRfZnVucy5vdXRfc3BhY2VzXG4gICAgb3V0X2Z1bnMub3V0X2luZGVudFxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd2l0aCBkZWZhdWx0IGZ1bmN0aW9ucyB0byBvdXRwdXQgc3BhY2VzLFxuICBpbmRlbnRhdGlvbiwgYW5kIG5ldyBsaW5lcy4gKilcbmxldCBtYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggPVxuICBsZXQgcHBmID0gcHBfbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoIGlnbm9yZSBpZ25vcmUgaWdub3JlIGluXG4gIHBwZi5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgcHBmO1xuICBwcGYucHBfb3V0X3NwYWNlcyA8LSBkaXNwbGF5X2JsYW5rcyBwcGY7XG4gIHBwZi5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHBwZjtcbiAgcHBmXG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3cml0aW5nIHRvIGEgZ2l2ZW4gW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9jaGFubmVsIG9jID1cbiAgbWFrZV9mb3JtYXR0ZXIgKG91dHB1dF9zdWJzdHJpbmcgb2MpIChmdW4gKCkgLT4gZmx1c2ggb2MpXG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3cml0aW5nIHRvIGEgZ2l2ZW4gW0J1ZmZlci50XSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgPVxuICBtYWtlX2Zvcm1hdHRlciAoQnVmZmVyLmFkZF9zdWJzdHJpbmcgYikgaWdub3JlXG5cblxuKCogQWxsb2NhdGluZyBidWZmZXIgZm9yIHByZXR0eS1wcmludGluZyBwdXJwb3Nlcy5cbiAgIERlZmF1bHQgYnVmZmVyIHNpemUgaXMgcHBfYnVmZmVyX3NpemUgb3IgNTEyLlxuKilcbmxldCBwcF9idWZmZXJfc2l6ZSA9IDUxMlxubGV0IHBwX21ha2VfYnVmZmVyICgpID0gQnVmZmVyLmNyZWF0ZSBwcF9idWZmZXJfc2l6ZVxuXG4oKiBUaGUgc3RhbmRhcmQgKHNoYXJlZCkgYnVmZmVyLiAqKVxubGV0IHN0ZGJ1ZiA9IHBwX21ha2VfYnVmZmVyICgpXG5cbigqIFByZWRlZmluZWQgZm9ybWF0dGVycyBzdGFuZGFyZCBmb3JtYXR0ZXIgdG8gcHJpbnRcbiAgIHRvIFtTdGRsaWIuc3Rkb3V0XSwgW1N0ZGxpYi5zdGRlcnJdLCBhbmQgeyFzdGRidWZ9LiAqKVxubGV0IHN0ZF9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgU3RkbGliLnN0ZG91dFxuYW5kIGVycl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgU3RkbGliLnN0ZGVyclxuYW5kIHN0cl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIHN0ZGJ1ZlxuXG5cbigqIFtmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGJ1ZiBwcGZdIGZsdXNoZXMgZm9ybWF0dGVyIFtwcGZdLFxuICAgdGhlbiByZXR1cm5zIHRoZSBjb250ZW50cyBvZiBidWZmZXIgW2J1Zl0gdGhhdCBpcyByZXNldC5cbiAgIEZvcm1hdHRlciBbcHBmXSBpcyBzdXBwb3NlZCB0byBwcmludCB0byBidWZmZXIgW2J1Zl0sIG90aGVyd2lzZSB0aGlzXG4gICBmdW5jdGlvbiBpcyBub3QgcmVhbGx5IHVzZWZ1bC4gKilcbmxldCBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGJ1ZiBwcGYgPVxuICBwcF9mbHVzaF9xdWV1ZSBwcGYgZmFsc2U7XG4gIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICBCdWZmZXIucmVzZXQgYnVmO1xuICBzXG5cblxuKCogRmx1c2ggW3N0cl9mb3JtYXR0ZXJdIGFuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIFtzdGRidWZdLiAqKVxubGV0IGZsdXNoX3N0cl9mb3JtYXR0ZXIgKCkgPSBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIHN0ZGJ1ZiBzdHJfZm9ybWF0dGVyXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZ1xuKilcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nIGlzIHByZXR0eS1wcmludGluZyB3aXRoIG5vIGxvdyBsZXZlbCBvdXRwdXQuXG5cbiAgV2hlbiB1c2luZyBhIHN5bWJvbGljIGZvcm1hdHRlciwgYWxsIHJlZ3VsYXIgcHJldHR5LXByaW50aW5nIGFjdGl2aXRpZXNcbiAgb2NjdXIgYnV0IG91dHB1dCBtYXRlcmlhbCBpcyBzeW1ib2xpYyBhbmQgc3RvcmVkIGluIGEgYnVmZmVyIG9mIG91dHB1dFxuICBpdGVtcy4gQXQgdGhlIGVuZCBvZiBwcmV0dHktcHJpbnRpbmcsIGZsdXNoaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGFsbG93c1xuICBwb3N0LXByb2Nlc3Npbmcgb2Ygc3ltYm9saWMgb3V0cHV0IGJlZm9yZSBsb3cgbGV2ZWwgb3V0cHV0IG9wZXJhdGlvbnMuXG4qKVxuXG50eXBlIHN5bWJvbGljX291dHB1dF9pdGVtID1cbiAgfCBPdXRwdXRfZmx1c2hcbiAgfCBPdXRwdXRfbmV3bGluZVxuICB8IE91dHB1dF9zdHJpbmcgb2Ygc3RyaW5nXG4gIHwgT3V0cHV0X3NwYWNlcyBvZiBpbnRcbiAgfCBPdXRwdXRfaW5kZW50IG9mIGludFxuXG50eXBlIHN5bWJvbGljX291dHB1dF9idWZmZXIgPSB7XG4gIG11dGFibGUgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDogc3ltYm9saWNfb3V0cHV0X2l0ZW0gbGlzdDtcbn1cblxubGV0IG1ha2Vfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciAoKSA9XG4gIHsgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzID0gW10gfVxuXG5sZXQgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIFtdXG5cbmxldCBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBMaXN0LnJldiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBpdGVtcyA9IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiBpblxuICBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYjtcbiAgaXRlbXNcblxubGV0IGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgaXRlbSA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gaXRlbSA6OiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmb3JtYXR0ZXJfb2Zfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgc3ltYm9saWNfZmx1c2ggc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9mbHVzaFxuICBhbmQgc3ltYm9saWNfbmV3bGluZSBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X25ld2xpbmVcbiAgYW5kIHN5bWJvbGljX3N0cmluZyBzb2IgcyBpIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zdHJpbmcgKFN0cmluZy5zdWIgcyBpIG4pKVxuICBhbmQgc3ltYm9saWNfc3BhY2VzIHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3BhY2VzIG4pXG4gIGFuZCBzeW1ib2xpY19pbmRlbnQgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9pbmRlbnQgbikgaW5cblxuICBsZXQgZiA9IHN5bWJvbGljX3N0cmluZyBzb2JcbiAgYW5kIGcgPSBzeW1ib2xpY19mbHVzaCBzb2JcbiAgYW5kIGggPSBzeW1ib2xpY19uZXdsaW5lIHNvYlxuICBhbmQgaSA9IHN5bWJvbGljX3NwYWNlcyBzb2JcbiAgYW5kIGogPSBzeW1ib2xpY19pbmRlbnQgc29iIGluXG4gIHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgalxuXG4oKlxuXG4gIEJhc2ljIGZ1bmN0aW9ucyBvbiB0aGUgJ3N0YW5kYXJkJyBmb3JtYXR0ZXJcbiAgKHRoZSBmb3JtYXR0ZXIgdGhhdCBwcmludHMgdG8gW1N0ZGxpYi5zdGRvdXRdKS5cblxuKilcblxubGV0IG9wZW5faGJveCA9IHBwX29wZW5faGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl92Ym94ID0gcHBfb3Blbl92Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2h2Ym94ID0gcHBfb3Blbl9odmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9ob3Zib3ggPSBwcF9vcGVuX2hvdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9ib3ggPSBwcF9vcGVuX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfYm94ID0gcHBfY2xvc2VfYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3RhZyA9IHBwX29wZW5fdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90YWcgPSBwcF9jbG9zZV90YWcgc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fc3RhZyA9IHBwX29wZW5fc3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2Vfc3RhZyA9IHBwX2Nsb3NlX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2FzID0gcHBfcHJpbnRfYXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3N0cmluZyA9IHBwX3ByaW50X3N0cmluZyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYnl0ZXMgPSBwcF9wcmludF9ieXRlcyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaW50ID0gcHBfcHJpbnRfaW50IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbG9hdCA9IHBwX3ByaW50X2Zsb2F0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jaGFyID0gcHBfcHJpbnRfY2hhciBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYm9vbCA9IHBwX3ByaW50X2Jvb2wgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2JyZWFrID0gcHBfcHJpbnRfYnJlYWsgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2N1dCA9IHBwX3ByaW50X2N1dCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfc3BhY2UgPSBwcF9wcmludF9zcGFjZSBzdGRfZm9ybWF0dGVyXG5hbmQgZm9yY2VfbmV3bGluZSA9IHBwX2ZvcmNlX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ZsdXNoID0gcHBfcHJpbnRfZmx1c2ggc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X25ld2xpbmUgPSBwcF9wcmludF9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9pZl9uZXdsaW5lID0gcHBfcHJpbnRfaWZfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBvcGVuX3Rib3ggPSBwcF9vcGVuX3Rib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3Rib3ggPSBwcF9jbG9zZV90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YnJlYWsgPSBwcF9wcmludF90YnJlYWsgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X3RhYiA9IHBwX3NldF90YWIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3RhYiA9IHBwX3ByaW50X3RhYiBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWFyZ2luID0gcHBfc2V0X21hcmdpbiBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21heF9pbmRlbnQgPSBwcF9zZXRfbWF4X2luZGVudCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZ2VvbWV0cnkgPSBwcF9zZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHNhZmVfc2V0X2dlb21ldHJ5ID0gcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9nZW9tZXRyeSA9IHBwX2dldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgdXBkYXRlX2dlb21ldHJ5ID0gcHBfdXBkYXRlX2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfYm94ZXMgPSBwcF9zZXRfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWF4X2JveGVzID0gcHBfZ2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgb3Zlcl9tYXhfYm94ZXMgPSBwcF9vdmVyX21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZWxsaXBzaXNfdGV4dCA9IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZWxsaXBzaXNfdGV4dCA9IHBwX2dldF9lbGxpcHNpc190ZXh0IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3ByaW50X3RhZ3MgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X3ByaW50X3RhZ3MgPVxuICBwcF9nZXRfcHJpbnRfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X21hcmtfdGFncyA9XG4gIHBwX3NldF9tYXJrX3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJrX3RhZ3MgPVxuICBwcF9nZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfdGFncyA9XG4gIHBwX3NldF90YWdzIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgKilcblxuKCogVG8gZm9ybWF0IGEgbGlzdCAqKVxubGV0IHJlYyBwcF9wcmludF9saXN0ID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKClcbiAgfCBbdl0gLT4gcHBfdiBwcGYgdlxuICB8IHYgOjogdnMgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfcHJpbnRfbGlzdCB+cHBfc2VwIHBwX3YgcHBmIHZzXG5cbigqIFRvIGZvcm1hdCBhIHNlcXVlbmNlICopXG5sZXQgcmVjIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiAoKVxuICB8IFNlcS5Db25zICh2LCBzZXEpIC0+XG4gICAgcHBfc2VwIHBwZiAoKTtcbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG5sZXQgcHBfcHJpbnRfc2VxID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxXG5cbigqIFRvIGZvcm1hdCBmcmVlLWZsb3dpbmcgdGV4dCAqKVxubGV0IHBwX3ByaW50X3RleHQgcHBmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBsZWZ0ID0gcmVmIDAgaW5cbiAgbGV0IHJpZ2h0ID0gcmVmIDAgaW5cbiAgbGV0IGZsdXNoICgpID1cbiAgICBwcF9wcmludF9zdHJpbmcgcHBmIChTdHJpbmcuc3ViIHMgIWxlZnQgKCFyaWdodCAtICFsZWZ0KSk7XG4gICAgaW5jciByaWdodDsgbGVmdCA6PSAhcmlnaHQ7XG4gIGluXG4gIHdoaWxlICghcmlnaHQgPD4gbGVuKSBkb1xuICAgIG1hdGNoIHMuWyFyaWdodF0gd2l0aFxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBmbHVzaCAoKTtcbiAgICAgICAgcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGZsdXNoICgpOyBwcF9wcmludF9zcGFjZSBwcGYgKClcbiAgICAgICgqIHRoZXJlIGlzIG5vIHNwZWNpZmljIHN1cHBvcnQgZm9yICdcXHQnXG4gICAgICAgICBhcyBpdCBpcyB1bmNsZWFyIHdoYXQgYSByaWdodCBzZW1hbnRpY3Mgd291bGQgYmUgKilcbiAgICAgIHwgXyAtPiBpbmNyIHJpZ2h0XG4gIGRvbmU7XG4gIGlmICFsZWZ0IDw+IGxlbiB0aGVuIGZsdXNoICgpXG5cbmxldCBwcF9wcmludF9vcHRpb24gPyhub25lID0gZnVuIF8gKCkgLT4gKCkpIHBwX3YgcHBmID0gZnVuY3Rpb25cbnwgTm9uZSAtPiBub25lIHBwZiAoKVxufCBTb21lIHYgLT4gcHBfdiBwcGYgdlxuXG5sZXQgcHBfcHJpbnRfcmVzdWx0IH5vayB+ZXJyb3IgcHBmID0gZnVuY3Rpb25cbnwgT2sgdiAtPiBvayBwcGYgdlxufCBFcnJvciBlIC0+IGVycm9yIHBwZiBlXG5cbmxldCBwcF9wcmludF9laXRoZXIgfmxlZnQgfnJpZ2h0IHBwZiA9IGZ1bmN0aW9uXG58IEVpdGhlci5MZWZ0IGwgLT4gbGVmdCBwcGYgbFxufCBFaXRoZXIuUmlnaHQgciAtPiByaWdodCBwcGYgclxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5sZXQgY29tcHV0ZV90YWcgb3V0cHV0IHRhZ19hY2MgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgb3V0cHV0IHBwZiB0YWdfYWNjO1xuICBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBpZiBsZW4gPCAyIHRoZW4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICBlbHNlIEJ1ZmZlci5zdWIgYnVmIDEgKGxlbiAtIDIpXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICBEZWZpbmluZyBjb250aW51YXRpb25zIHRvIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgb2ZcbiAgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLlxuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxuKCogSW50ZXJwcmV0IGEgZm9ybWF0dGluZyBlbnRpdHkgb24gYSBmb3JtYXR0ZXIuICopXG5sZXQgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmbXRpbmdfbGl0ID0gbWF0Y2ggZm10aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9ib3ggcHBmICgpXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV90YWcgcHBmICgpXG4gIHwgQnJlYWsgKF8sIHdpZHRoLCBvZmZzZXQpICAtPiBwcF9wcmludF9icmVhayBwcGYgd2lkdGggb2Zmc2V0XG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9mbHVzaCBwcGYgKClcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgIC0+IHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9wcmludF9uZXdsaW5lIHBwZiAoKVxuICB8IE1hZ2ljX3NpemUgKF8sIF8pICAgICAgICAgLT4gKClcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICdAJ1xuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJyUnXG4gIHwgU2Nhbl9pbmRpYyBjICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCc7IHBwX3ByaW50X2NoYXIgcHBmIGNcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogRGlmZmVyIGZyb20gUHJpbnRmLm91dHB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mIGZvcm1hdHRpbmcuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBwcGYgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoU3RyaW5nLm1ha2UgMSBjKTtcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGYpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGY7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX29wZW5fc3RhZyBwcGYgKFN0cmluZ190YWcgKGNvbXB1dGVfdGFnIG91dHB1dF9hY2MgYWNjJykpXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIGxldCAoaW5kZW50LCBidHkpID0gb3Blbl9ib3hfb2Zfc3RyaW5nIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpIGluXG4gICAgcHBfb3Blbl9ib3hfZ2VuIHBwZiBpbmRlbnQgYnR5XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfY2hhciBwcGYgYztcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgZiBwcGY7XG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBwcGYgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogRGlmZmVyIGZyb20gUHJpbnRmLmJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mIGZvcm1hdHRpbmcuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi4gKilcbmxldCByZWMgc3RycHV0X2FjYyBwcGYgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoU3RyaW5nLm1ha2UgMSBjKTtcbiAgfCBBY2NfZGVsYXkgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChmICgpKTtcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGYpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGY7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX29wZW5fc3RhZyBwcGYgKFN0cmluZ190YWcgKGNvbXB1dGVfdGFnIHN0cnB1dF9hY2MgYWNjJykpXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIGxldCAoaW5kZW50LCBidHkpID0gb3Blbl9ib3hfb2Zfc3RyaW5nIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpIGluXG4gICAgcHBfb3Blbl9ib3hfZ2VuIHBwZiBpbmRlbnQgYnR5XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfY2hhciBwcGYgYztcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiAoZiAoKSk7XG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBwcGYgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKlxuXG4gIERlZmluaW5nIFtmcHJpbnRmXSBhbmQgdmFyaW91cyBmbGF2b3JzIG9mIFtmcHJpbnRmXS5cblxuKilcblxubGV0IGtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIHBwZiBhY2M7IGsgcHBmKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmFuZCBpa2ZwcmludGYgayBwcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBwcGYgZm10XG5cbmxldCBpZnByaW50ZiBfcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGlnbm9yZSAoKSBmbXRcblxubGV0IGZwcmludGYgcHBmID0ga2ZwcmludGYgaWdub3JlIHBwZlxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZF9mb3JtYXR0ZXIgZm10XG5sZXQgZXByaW50ZiBmbXQgPSBmcHJpbnRmIGVycl9mb3JtYXR0ZXIgZm10XG5cbmxldCBrZHByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBrIChmdW4gcHBmIC0+IG91dHB1dF9hY2MgcHBmIGFjYykpXG4gICAgRW5kX29mX2FjYyBmbXRcblxubGV0IGRwcmludGYgZm10ID0ga2RwcmludGYgKGZ1biBpIC0+IGkpIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBiID0gcHBfbWFrZV9idWZmZXIgKCkgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPVxuICAgIHN0cnB1dF9hY2MgcHBmIGFjYztcbiAgICBrIChmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGIgcHBmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgaWQgZm10XG5cbmxldCBrYXNwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBiID0gcHBfbWFrZV9idWZmZXIgKCkgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPVxuICAgIG91dHB1dF9hY2MgcHBmIGFjYztcbiAgICBrIChmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGIgcHBmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxubGV0IGFzcHJpbnRmIGZtdCA9IGthc3ByaW50ZiBpZCBmbXRcblxuKCogRmx1c2hpbmcgc3RhbmRhcmQgZm9ybWF0dGVycyBhdCBlbmQgb2YgZXhlY3V0aW9uLiAqKVxuXG5sZXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyAoKSA9XG4gIHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXIgKCk7XG4gIHBwX3ByaW50X2ZsdXNoIGVycl9mb3JtYXR0ZXIgKClcblxubGV0ICgpID0gYXRfZXhpdCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzXG5cbigqXG5cbiAgRGVwcmVjYXRlZCBzdHVmZi5cblxuKilcblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGVcbiAgICB+b3V0OmYgfmZsdXNoOmcgfm5ld2xpbmU6aCB+c3BhY2VzOmkgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgZiBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGlcblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoLFxuICAgc3RhdGUucHBfb3V0X25ld2xpbmUsIHN0YXRlLnBwX291dF9zcGFjZXMpXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHNldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHNldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5cbigqIERlcHJlY2F0ZWQgOiBlcnJvciBwcm9uZSBmdW5jdGlvbiwgZG8gbm90IHVzZSBpdC5cbiAgIFRoaXMgZnVuY3Rpb24gaXMgbmVpdGhlciBjb21wb3NpdGlvbmFsIG5vciBpbmNyZW1lbnRhbCwgc2luY2UgaXQgZmx1c2hlc1xuICAgdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGF0IGVhY2ggY2FsbC5cbiAgIFRvIGdldCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LCBkZWZpbmUgYSBmb3JtYXR0ZXIgb2YgeW91ciBvd24gd3JpdGluZyB0b1xuICAgdGhlIGJ1ZmZlciBhcmd1bWVudCwgYXMgaW5cbiAgIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGJcbiAgIHRoZW4gdXNlIHshZnByaW50ZiBwcGZ9IGFzIHVzdWFsLiAqKVxubGV0IGJwcmludGYgYiAoRm9ybWF0IChmbXQsIF8pIDogKCdhLCBmb3JtYXR0ZXIsIHVuaXQpIGZvcm1hdCkgPVxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9IG91dHB1dF9hY2MgcHBmIGFjYzsgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG4oKiBEZXByZWNhdGVkIDogYWxpYXMgZm9yIGtzcHJpbnRmLiAqKVxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuXG5cblxuKCogRGVwcmVjYXRlZCB0YWcgZnVuY3Rpb25zICopXG5cbnR5cGUgZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPSB7XG4gIG1hcmtfb3Blbl90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3RhZyA6IHRhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fdGFnIDogdGFnIC0+IHVuaXQ7XG4gIHByaW50X2Nsb3NlX3RhZyA6IHRhZyAtPiB1bml0O1xufVxuXG5cbmxldCBwcF9zZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3RhZyA9IG1jdDtcbiAgICAgcHJpbnRfb3Blbl90YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3RhZyA9IHBjdDtcbiAgIH0gPVxuICBsZXQgc3RyaW5naWZ5IGYgZSA9IGZ1bmN0aW9uIFN0cmluZ190YWcgcyAtPiBmIHMgfCBfIC0+IGUgaW5cbiAgc3RhdGUucHBfbWFya19vcGVuX3RhZyA8LSBzdHJpbmdpZnkgbW90IFwiXCI7XG4gIHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBtY3QgXCJcIjtcbiAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgPC0gc3RyaW5naWZ5IHBvdCAoKTtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBwY3QgKClcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBmbXQgKCkgPVxuICBsZXQgZnVucyA9IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgZm10ICgpIGluXG4gIGxldCBtYXJrX29wZW5fdGFnIHMgPSBmdW5zLm1hcmtfb3Blbl9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBtYXJrX2Nsb3NlX3RhZyBzID0gZnVucy5tYXJrX2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X29wZW5fdGFnIHMgPSBmdW5zLnByaW50X29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgcHJpbnRfY2xvc2VfdGFnIHMgPSBmdW5zLnByaW50X2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAge21hcmtfb3Blbl90YWc7IG1hcmtfY2xvc2VfdGFnOyBwcmludF9vcGVuX3RhZzsgcHJpbnRfY2xvc2VfdGFnfVxuXG5sZXQgc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iLCJtb2R1bGUgSnMgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgdHlwZSAnYSBqc19hcnJheSA9IHRcblxuICB0eXBlICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2sgPSB0XG5cbiAgZXh0ZXJuYWwgc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19zdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcIlxuXG4gIGV4dGVybmFsIGJ5dGVzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc2J5dGVzX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fYnl0ZXN0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzXCJcblxuICBleHRlcm5hbCBib29sIDogYm9vbCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgdG9fYm9vbCA6IHQgLT4gYm9vbCA9IFwiY2FtbF9qc190b19ib29sXCJcblxuICBleHRlcm5hbCBhcnJheSA6ICdhIGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnJvbV9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fYXJyYXkgOiB0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2pzX3RvX2FycmF5XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfZmxvYXQgOiBmbG9hdCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG4gIGV4dGVybmFsIGZsb2F0X29mX251bWJlciA6IHQgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9pbnQzMiA6IGludDMyIC0+IHQgPSBcImNhbWxfanNfZnJvbV9pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgaW50MzJfb2ZfbnVtYmVyIDogdCAtPiBpbnQzMiA9IFwiY2FtbF9qc190b19pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCBuYXRpdmVpbnRfb2ZfbnVtYmVyIDogdCAtPiBuYXRpdmVpbnQgPSBcImNhbWxfanNfdG9fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCB0eXBlb2YgOiB0IC0+IHQgPSBcImNhbWxfanNfdHlwZW9mXCJcblxuICBleHRlcm5hbCBpbnN0YW5jZW9mIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfaW5zdGFuY2VvZlwiXG5cbiAgZXh0ZXJuYWwgZGVidWdnZXIgOiB1bml0IC0+IHVuaXQgPSBcImRlYnVnZ2VyXCJcblxuICBleHRlcm5hbCBnZXQgOiB0IC0+IHQgLT4gdCA9IFwiY2FtbF9qc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldCA6IHQgLT4gdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfc2V0XCJcblxuICBleHRlcm5hbCBkZWxldGUgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19kZWxldGVcIlxuXG4gIGV4dGVybmFsIGNhbGwgOiB0IC0+IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2NhbGxcIlxuXG4gIGV4dGVybmFsIGZ1bl9jYWxsIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnVuX2NhbGxcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbCA6IHQgLT4gc3RyaW5nIC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19tZXRoX2NhbGxcIlxuXG4gIGV4dGVybmFsIG5ld19vYmogOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19uZXdcIlxuXG4gIGV4dGVybmFsIG5ld19vYmpfYXJyIDogdCAtPiB0IGpzX2FycmF5IC0+IHQgPSBcImNhbWxfb2pzX25ld19hcnJcIlxuXG4gIGV4dGVybmFsIG9iaiA6IChzdHJpbmcgKiB0KSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX29iamVjdFwiXG5cbiAgZXh0ZXJuYWwgZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgcHVyZV9leHByIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2pzX3B1cmVfZXhwclwiXG5cbiAgZXh0ZXJuYWwgZXZhbF9zdHJpbmcgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXZhbF9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGpzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgcHVyZV9qc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX3B1cmVfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICh0IGpzX2FycmF5IC0+ICdiKSAtPiAoJ2MsIHQganNfYXJyYXkgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAoJ2IgLT4gdCBqc19hcnJheSAtPiAnYSkgLT4gKCdiLCB0IGpzX2FycmF5IC0+ICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tcIlxuXG4gIGV4dGVybmFsIHdyYXBfbWV0aF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdhLCAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja1wiXG5lbmRcblxubW9kdWxlIFN5cyA9IHN0cnVjdFxuICB0eXBlICdhIGNhbGxiYWNrID0gJ2FcblxuICBleHRlcm5hbCBjcmVhdGVfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IGNvbnRlbnQ6c3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfY3JlYXRlX2ZpbGVcIlxuXG4gIGV4dGVybmFsIHJlYWRfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IHN0cmluZyA9IFwiY2FtbF9yZWFkX2ZpbGVfY29udGVudFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfb3V0cHV0JyA6IG91dF9jaGFubmVsIC0+IChqc19zdHJpbmc6SnMudCAtPiB1bml0KSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9pbnB1dCcgOiBpbl9jaGFubmVsIC0+ICh1bml0IC0+IHN0cmluZykgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfcG9pbnQgOiB1bml0IC0+IHN0cmluZyBsaXN0ID0gXCJjYW1sX2xpc3RfbW91bnRfcG9pbnRcIlxuXG4gIGV4dGVybmFsIG1vdW50X2F1dG9sb2FkIDogc3RyaW5nIC0+IChzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb24pIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tb3VudF9hdXRvbG9hZFwiXG5cbiAgZXh0ZXJuYWwgdW5tb3VudCA6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3VubW91bnRcIlxuXG4gIG1vZHVsZSBDb25maWcgPSBzdHJ1Y3RcbiAgICBleHRlcm5hbCB1c2VfanNfc3RyaW5nIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1wiXG5cbiAgICBleHRlcm5hbCBlZmZlY3RzIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1wiXG4gIGVuZFxuXG4gIGxldCB2ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLnNcblxuICBsZXQgZ2l0X3ZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uZ2l0X3ZlcnNpb25cbmVuZFxuXG5tb2R1bGUgRXJyb3IgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHJhaXNlXyA6IHQgLT4gJ2FcblxuICB2YWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4blxuICAoKiogQXR0YWNoIGEgSmF2YXNTY3JpcHQgZXJyb3IgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLiAgaWYgW2ZvcmNlID0gZmFsc2VdIGFuZCBhXG4gICAgSmF2YXNTY3JpcHQgZXJyb3IgaXMgYWxyZWFkeSBhdHRhY2hlZCwgaXQgd2lsbCBkbyBub3RoaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB0b1xuICAgIHN0b3JlIGFuZCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlcy5cblxuICAgIEF0dGFjaGluZyBKYXZhc1NjcmlwdCBlcnJvcnMgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSB3aGVuIGNvbXBpbGluZyB3aXRoXG4gICAgWy0tZW5hYmxlIHdpdGgtanMtZXJyb3JdLiAqKVxuXG4gIHZhbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb25cbiAgKCoqIEV4dHJhY3QgYSBKYXZhU2NyaXB0IGVycm9yIGF0dGFjaGVkIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbiwgaWYgYW55LiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgICAgIGluc3BlY3QgYW4gZXZlbnR1YWwgc3RhY2sgc3RyYWNlLCBlc3BlY2lhbGx5IHdoZW4gc291cmNlbWFwIGlzIGVuYWJsZWQuICopXG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG4gICgqKiBUaGUgW0Vycm9yXSBleGNlcHRpb24gd3JhcCBqYXZhc2NyaXB0IGV4Y2VwdGlvbnMgd2hlbiBjYXVnaHQgYnkgT0NhbWwgY29kZS5cbiAgICAgIEluIGNhc2UgdGhlIGphdmFzY3JpcHQgZXhjZXB0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBqYXZhc2NyaXB0IFtFcnJvcl0sXG4gICAgICBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYW5kIHdyYXBwZWQgaW50byBhIFtGYWlsdXJlXSBleGNlcHRpb24uXG4gICopXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG5cbiAgbGV0IF8gPSBDYWxsYmFjay5yZWdpc3Rlcl9leGNlcHRpb24gXCJqc0Vycm9yXCIgKEV4biAoT2JqLm1hZ2ljIFt8fF0pKVxuXG4gIGxldCByYWlzZV8gOiB0IC0+ICdhID0gSnMuanNfZXhwciBcIihmdW5jdGlvbiAoZXhuKSB7IHRocm93IGV4biB9KVwiXG5cbiAgZXh0ZXJuYWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uID0gXCJjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cIlxuXG4gIGV4dGVybmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG4gPSBcImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXCJcbmVuZFxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMi02MFwiXVxuXG5tb2R1bGUgRm9yX2NvbXBhdGliaWxpdHlfb25seSA9IHN0cnVjdFxuICAoKiBBZGQgcHJpbWl0aXZlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiBFeGlzdGluZyB1c2VycyBtaWdodFxuICAgICBkZXBlbmQgb24gaXQgKGUuZy4gZ2VuX2pzX2FwaSksIHdlIGRvbnQgd2FudCB0aGUgb2NhbWwgY29tcGlsZXJcbiAgICAgdG8gY29tcGxhaW4gYWJvdXQgdGhlc2VzIG1pc3NpbmcgcHJpbWl0aXZlcy4gKilcblxuICBleHRlcm5hbCBjYW1sX2pzX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IEpzLnQgPSBcImNhbWxfanNfZnJvbV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19ieXRlX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF9vZl9qc19hcnJheSA6ICdhIEpzLmpzX2FycmF5IC0+ICdhIGxpc3QgPSBcImNhbWxfbGlzdF9vZl9qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X3RvX2pzX2FycmF5IDogJ2EgbGlzdCAtPiAnYSBKcy5qc19hcnJheSA9IFwiY2FtbF9saXN0X3RvX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCB2YXJpYWJsZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc192YXJcIlxuZW5kXG5cbm1vZHVsZSBUeXBlZF9hcnJheSA9IHN0cnVjdFxuICB0eXBlICgnYSwgJ2IpIHR5cGVkQXJyYXkgPSBKcy50XG5cbiAgdHlwZSBhcnJheUJ1ZmZlciA9IEpzLnRcblxuICB0eXBlIHVpbnQ4QXJyYXkgPSBKcy50XG5cbiAgZXh0ZXJuYWwga2luZCA6ICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYikgQmlnYXJyYXkua2luZFxuICAgID0gXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGZyb21fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50IC0+ICgnYSwgJ2IpIHR5cGVkQXJyYXlcbiAgICA9IFwiY2FtbF9iYV90b190eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnRcbiAgICA9IFwiY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5XCJcblxuICBtb2R1bGUgQmlnc3RyaW5nID0gc3RydWN0XG4gICAgdHlwZSB0ID0gKGNoYXIsIEJpZ2FycmF5LmludDhfdW5zaWduZWRfZWx0LCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuQXJyYXkxLnRcblxuICAgIGV4dGVybmFsIHRvX2FycmF5QnVmZmVyIDogdCAtPiBhcnJheUJ1ZmZlciA9IFwiYmlnc3RyaW5nX3RvX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCB0b191aW50OEFycmF5IDogdCAtPiB1aW50OEFycmF5ID0gXCJiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXlcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfYXJyYXlCdWZmZXIgOiBhcnJheUJ1ZmZlciAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHQgPSBcImJpZ3N0cmluZ19vZl90eXBlZF9hcnJheVwiXG4gIGVuZFxuXG4gIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfYXJyYXlcIlxuZW5kXG5cbm1vZHVsZSBJbnQ2NCA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGVfaW50NjRfbG9fbWlfaGkgOiBpbnQgLT4gaW50IC0+IGludCAtPiBJbnQ2NC50XG4gICAgPSBcImNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXCJcbmVuZFxuIiwib3BlbiEgU3RkXG5vcGVuISBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2Rcbm1vZHVsZSBBID0gQXR0cnNcblxudHlwZSAnYSB2YWxpZGF0aW9uID0gT2sgb2YgJ2EgfCBFcnJvciBvZiBzdHJpbmcgfCBFbXB0eVxudHlwZSBsYWJlbCA9IEVsd2QudCBFbHdkLmNvbFxudHlwZSAnYSBkZXNjID0geyBuYW1lIDogc3RyaW5nOyBkZWZhdWx0IDogJ2E7IGxhYmVsIDogbGFiZWwgfVxuXG4oKiBBIGZvcm0gZmllbGQgaXMgY29tcG9zZWQgb2Y6XG4gICAtIEFuIGh0bWwgaW5wdXQgZWxlbWVudCB3aXRoIHBvdGVudGlhbCB2YWxpZGF0aW9uIHZpYSBhdHRyaWJ1dGVzXG4gICAtIEEgdmFsaWRhdGlvbiBmdW5jdGlvbiB0aGF0IHJlcGxhY2Ugb3IgY29tcGxldGUgdGhlIHN0YW5kYXJkIHZhbGlkYXRpb25cbiAgIC0gQSBmdW5jdGlvbiB0aGF0IHJldGlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCAqKVxudHlwZSAnYSB0ID0ge1xuICBlbHQgOiBFbHdkLnQgTHdkLnQ7XG4gIHZhbHVlIDogJ2Egb3B0aW9uIEx3ZC52YXI7XG4gIHZhbGlkYXRlIDogJ2EgLT4gJ2EgdmFsaWRhdGlvbjtcbn1cblxubGV0IGdldF92YWx1ZSB0ID1cbiAgbGV0IGp2ID0gRWwudG9fanYgdCBpblxuICBKdi5nZXQganYgXCJ2YWx1ZVwiXG5cbmxldCBtYWtlX2hhbmRsZXIgfih2YWx1ZSA6IEp2LnQgLT4gJ2EpIH4odmFsdWVfY2hhbmdlX2V2ZW50IDogXyBFdi50eXBlJylcbiAgICBkZWZhdWx0X3ZhbHVlID1cbiAgbGV0IHZhciA9IEx3ZC52YXIgZGVmYXVsdF92YWx1ZSBpblxuICBsZXQgb25fY2hhbmdlID1cbiAgICBFbHdkLmhhbmRsZXIgdmFsdWVfY2hhbmdlX2V2ZW50IChmdW4gZXYgLT5cbiAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgIGxldCB2ID0gSnYuZ2V0IHQgXCJ2YWx1ZVwiIGluXG4gICAgICAgIEx3ZC5zZXQgdmFyIChTb21lICh2YWx1ZSB2KSkpXG4gIGluXG4gIChvbl9jaGFuZ2UsIHZhcilcblxuKCogVE9ETzogaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gc3BsaXQgdGhlIHZhbGlkYXRpb24gYXBydCBmcm9tIHRoZSBmaWVsZFxuICAgY3JlYXRpb24uIFZhbGlkYXRpb24gbWFrZSBtb3JlIHNlbnNlIGluIHRoZSBjYXNlIG9mIGEgZm9ybS4gVGhlcmUgaXMgYW5cbiAgIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdGV4dCBpbnB1dHMgaW4gYEZpZWxkX3RleHRpbnB1dGAgdGhhdCBzaG91bGRcbiAgIGJlIHVzZWQgaW5zdGVhZC4gKilcbmxldCBtYWtlX2lucHV0IH4odmFsdWUgOiBKdi50IC0+ICdhKSA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXZcbiAgICA/KHJlcXVpcmVkID0gZmFsc2UpIH52YWx1ZV9jaGFuZ2VfZXZlbnQgP3BhdHRlcm4gfnR5cGUnIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgdHlwZScgPSBBdC50eXBlJyAoSnN0ci52IHR5cGUnKSBpblxuICBsZXQgYXQgPSBgUCB0eXBlJyA6OiBhdCBpblxuICBsZXQgYXQgPVxuICAgIGF0IHw+IEEuYWRkX2Jvb2wgQXQucmVxdWlyZWQgcmVxdWlyZWQgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGF0dGVybiBwYXR0ZXJuXG4gIGluXG4gIGxldCB2YWxpZGF0ZSA9IE9wdGlvbi52YWx1ZSB2YWxpZGF0ZSB+ZGVmYXVsdDooZnVuIHYgLT4gT2sgdikgaW5cbiAgbGV0IG9uX2NoYW5nZSwgdmFsdWUgPVxuICAgIG1ha2VfaGFuZGxlciB+dmFsdWUgfnZhbHVlX2NoYW5nZV9ldmVudCBkZWZhdWx0X3ZhbHVlXG4gIGluXG4gIGxldCBldiA9IGBQIG9uX2NoYW5nZSA6OiBPcHRpb24udG9fbGlzdCBldiBpblxuICBsZXQgZWx0ID0gRWx3ZC5pbnB1dCA/ZCB+YXQgfmV2ICgpIGluXG4gIHsgZWx0OyB2YWx1ZTsgdmFsaWRhdGUgfVxuXG5sZXQgdGV4dF9pbnB1dCA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXYgP3JlcXVpcmVkID9wYXR0ZXJuID9wbGFjZWhvbGRlclxuICAgIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgYXQgPVxuICAgIGF0XG4gICAgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGxhY2Vob2xkZXIgcGxhY2Vob2xkZXJcbiAgICB8PiBBLmFkZF9vcHQgQXQuTmFtZS52YWx1ZSBkZWZhdWx0X3ZhbHVlXG4gIGluXG4gIGxldCB2YWx1ZSA9IEp2LnRvX3N0cmluZyBpblxuICBtYWtlX2lucHV0IH52YWx1ZSA/dmFsaWRhdGUgP2QgfmF0ID9ldiA/cmVxdWlyZWQgP3BhdHRlcm5cbiAgICB+dmFsdWVfY2hhbmdlX2V2ZW50OkV2LmtleXVwIH50eXBlJzpcInRleHRcIiBkZWZhdWx0X3ZhbHVlXG5cbmxldCBwYXNzd29yZF9pbnB1dCA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXYgP3JlcXVpcmVkID9wYXR0ZXJuID9wbGFjZWhvbGRlclxuICAgIF92YWx1ZSA9XG4gIGxldCBhdCA9IGF0IHw+IEEuYWRkX29wdCBBdC5OYW1lLnBsYWNlaG9sZGVyIHBsYWNlaG9sZGVyIGluXG4gIGxldCB2YWx1ZSA9IEp2LnRvX3N0cmluZyBpblxuICBtYWtlX2lucHV0IH52YWx1ZSB+dmFsdWVfY2hhbmdlX2V2ZW50OkV2LmtleXVwID92YWxpZGF0ZSA/ZCB+YXQgP2V2ID9yZXF1aXJlZFxuICAgID9wYXR0ZXJuIH50eXBlJzpcInBhc3N3b3JkXCIgTm9uZVxuXG5sZXQgc3VibWl0ID9kID8oYXQgPSBbXSkgP2V2IHRleHQgPVxuICBsZXQgYXQgPSBBLmFkZCBBdC5OYW1lLnZhbHVlIHRleHQgYXQgaW5cbiAgKCogVE9ETyB0aGlzIHNob3VsZCBiZSBtb3JlIHByZWNpc2UuIFN1Ym1pdCBpbnB1dHMgYXJlIGRpZmZlcmVudC4gKilcbiAgbWFrZV9pbnB1dCB+dmFsdWU6aWdub3JlIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYuY2hhbmdlID9kIH5hdCA/ZXZcbiAgICB+dHlwZSc6XCJzdWJtaXRcIiBOb25lXG4iLCJ0eXBlIHQgPSBKdi50XG5cbmV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgeCB0ID0gSnYuZ2V0IHQgXCJ4XCIgfD4gSnYudG9faW50XG5sZXQgeSB0ID0gSnYuZ2V0IHQgXCJ5XCIgfD4gSnYudG9faW50XG5sZXQgd2lkdGggdCA9IEp2LmdldCB0IFwid2lkdGhcIiB8PiBKdi50b19pbnRcbmxldCBoZWlnaHQgdCA9IEp2LmdldCB0IFwiaGVpZ2h0XCIgfD4gSnYudG9faW50XG5sZXQgdG9wIHQgPSBKdi5nZXQgdCBcInRvcFwiIHw+IEp2LnRvX2ludFxubGV0IHJpZ2h0IHQgPSBKdi5nZXQgdCBcInJpZ2h0XCIgfD4gSnYudG9faW50XG5sZXQgYm90dG9tIHQgPSBKdi5nZXQgdCBcImJvdHRvbVwiIHw+IEp2LnRvX2ludFxubGV0IGxlZnQgdCA9IEp2LmdldCB0IFwibGVmdFwiIHw+IEp2LnRvX2ludFxuIiwib3BlbiBCcnJcblxudHlwZSB0ID0gSnYudFxuXG5leHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxubW9kdWxlIEVudHJ5ID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICB0eXBlIGJveF9zaXplID0geyBibG9ja19zaXplIDogaW50OyBpbmxpbmVfc2l6ZSA6IGludCB9XG5cbiAgbGV0IGJveF9zaXplX29mX2p2IGp2ID1cbiAgICB7XG4gICAgICBibG9ja19zaXplID0gSnYuZ2V0IGp2IFwiYmxvY2tTaXplXCIgfD4gSnYudG9faW50O1xuICAgICAgaW5saW5lX3NpemUgPSBKdi5nZXQganYgXCJpbmxpbmVTaXplXCIgfD4gSnYudG9faW50O1xuICAgIH1cblxuICBsZXQgYm9yZGVyX2JveF9zaXplIHQgPSBKdi5nZXQgdCBcImJvcmRlckJveFNpemVcIiB8PiBKdi50b19hcnJheSBib3hfc2l6ZV9vZl9qdlxuXG4gIGxldCBjb250ZW50X2JveF9zaXplIHQgPVxuICAgIEp2LmdldCB0IFwiY29udGVudEJveFNpemVcIiB8PiBKdi50b19hcnJheSBib3hfc2l6ZV9vZl9qdlxuXG4gIGxldCBjb250ZW50X3JlY3QgdCA9IEp2LmdldCB0IFwiY29udGVudFJlY3RcIiB8PiBEb21fcmVjdF9yZWFkX29ubHkub2ZfanZcblxuICBsZXQgZGV2aWNlX3BpeGVsX2NvbnRlbnRfYm94X3NpemUgdCA9XG4gICAgSnYuZ2V0IHQgXCJkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplXCIgfD4gSnYudG9fYXJyYXkgYm94X3NpemVfb2ZfanZcblxuICBsZXQgdGFyZ2V0IHQgPSBKdi5nZXQgdCBcInRhcmdldFwiIHw+IEVsLm9mX2p2XG5lbmRcblxudHlwZSBib3ggPSBDb250ZW50X2JveCB8IEJvcmRlcl9ib3ggfCBEZXZpY2VfcGl4ZWxfY29udGVudF9ib3hcblxubGV0IHN0cmluZ19vZl9ib3ggPSBmdW5jdGlvblxuICB8IENvbnRlbnRfYm94IC0+IFwiY29udGVudC1ib3hcIlxuICB8IEJvcmRlcl9ib3ggLT4gXCJib3JkZXItYm94XCJcbiAgfCBEZXZpY2VfcGl4ZWxfY29udGVudF9ib3ggLT4gXCJkZXZpY2UtcGl4ZWwtY29udGVudC1ib3hcIlxuXG5sZXQgZGlzY29ubmVjdCB0ID0gaWdub3JlIEBAIEp2LmNhbGwgdCBcImRpc2Nvbm5lY3RcIiBbfHxdXG5cbmxldCBvYnNlcnZlIHQgP2JveCB0YXJnZXQgPVxuICBsZXQgYXJncyA9XG4gICAgbGV0IHRhcmdldCA9IEVsLnRvX2p2IHRhcmdldCBpblxuICAgIG1hdGNoIGJveCB3aXRoXG4gICAgfCBOb25lIC0+IFt8IHRhcmdldCB8XVxuICAgIHwgU29tZSBiIC0+XG4gICAgICAgIGxldCBib3ggPSBKdi5vYmogW3wgKFwiYm94XCIsIEp2Lm9mX3N0cmluZyAoc3RyaW5nX29mX2JveCBiKSkgfF0gaW5cbiAgICAgICAgW3wgdGFyZ2V0OyBib3ggfF1cbiAgaW5cbiAgSnYuY2FsbCB0IFwib2JzZXJ2ZVwiIGFyZ3MgfD4gaWdub3JlXG5cbmxldCB1bm9ic2VydmUgdCB0YXJnZXQgPVxuICBsZXQgdGFyZ2V0ID0gRWwudG9fanYgdGFyZ2V0IGluXG4gIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJkaXNjb25uZWN0XCIgW3wgdGFyZ2V0IHxdXG5cbmxldCBjcmVhdGUgfmNhbGxiYWNrID1cbiAgbGV0IGNhbGxiYWNrIGVudHJpZXMgb2JzZXJ2ZXIgPVxuICAgIGxldCBlbnRyaWVzID0gSnYudG9fbGlzdCBFbnRyeS5vZl9qdiBlbnRyaWVzIGluXG4gICAgY2FsbGJhY2sgZW50cmllcyAob2ZfanYgb2JzZXJ2ZXIpXG4gIGluXG4gIGxldCBhcmdzID0gW3wgSnYucmVwciBjYWxsYmFjayB8XSBpblxuICBKdi5uZXcnIChKdi5nZXQgSnYuZ2xvYmFsIFwiUmVzaXplT2JzZXJ2ZXJcIikgYXJnc1xuIiwib3BlbiBCcnJcblxudHlwZSB0ID0gSnYudFxuXG5leHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxubGV0IG9mX25hdmlnYXRvciBuID0gSnYuZ2V0IChOYXZpZ2F0b3IudG9fanYgbikgXCJtZWRpYVNlc3Npb25cIlxuXG5tb2R1bGUgTWVkaWFfbWV0YWRhdGEgPSBzdHJ1Y3RcbiAgdHlwZSBpbWcgPSB7IHNyYyA6IHN0cmluZzsgc2l6ZXMgOiBzdHJpbmc7IHR5cGUnIDogc3RyaW5nIH1cblxuICBsZXQgaW1nX3RvX2p2IGltZyA9XG4gICAgSnYub2JqXG4gICAgICBbfFxuICAgICAgICAoXCJzcmNcIiwgSnYub2Zfc3RyaW5nIGltZy5zcmMpO1xuICAgICAgICAoXCJzaXplc1wiLCBKdi5vZl9zdHJpbmcgaW1nLnNpemVzKTtcbiAgICAgICAgKFwidHlwZVwiLCBKdi5vZl9zdHJpbmcgaW1nLnR5cGUnKTtcbiAgICAgIHxdXG5cbiAgbGV0IG1heWJlX3N0cmluZyBqdiBwcm9wID1cbiAgICBtYXRjaCBKdi5maW5kIGp2IHByb3Agd2l0aCBOb25lIC0+IFwidW5rbm93blwiIHwgU29tZSBqdiAtPiBKdi50b19zdHJpbmcganZcblxuICBsZXQgaW1nX29mX2p2IGp2ID1cbiAgICBsZXQgc3JjID0gbWF5YmVfc3RyaW5nIGp2IFwic3JjXCIgaW5cbiAgICBsZXQgc2l6ZXMgPSBtYXliZV9zdHJpbmcganYgXCJzaXplc1wiIGluXG4gICAgbGV0IHR5cGUnID0gbWF5YmVfc3RyaW5nIGp2IFwidHlwZVwiIGluXG4gICAgeyBzcmM7IHNpemVzOyB0eXBlJyB9XG5cbiAgdHlwZSB0ID0ge1xuICAgIHRpdGxlIDogc3RyaW5nO1xuICAgIGFydGlzdCA6IHN0cmluZztcbiAgICBhbGJ1bSA6IHN0cmluZztcbiAgICBhcnR3b3JrIDogaW1nIGxpc3Q7XG4gIH1cblxuICBsZXQgdG9fanYgdCA9XG4gICAgbGV0IGFydHdvcmsgPSBKdi5vZl9saXN0IGltZ190b19qdiB0LmFydHdvcmsgaW5cbiAgICBKdi5vYmpcbiAgICAgIFt8XG4gICAgICAgIChcInRpdGxlXCIsIEp2Lm9mX3N0cmluZyB0LnRpdGxlKTtcbiAgICAgICAgKFwiYXJ0aXN0XCIsIEp2Lm9mX3N0cmluZyB0LmFydGlzdCk7XG4gICAgICAgIChcImFsYnVtXCIsIEp2Lm9mX3N0cmluZyB0LmFsYnVtKTtcbiAgICAgICAgKFwiYXJ0d29ya1wiLCBhcnR3b3JrKTtcbiAgICAgIHxdXG5cbiAgbGV0IG9mX2p2IGp2ID1cbiAgICBsZXQgdGl0bGUgPSBtYXliZV9zdHJpbmcganYgXCJ0aXRsZVwiIGluXG4gICAgbGV0IGFydGlzdCA9IG1heWJlX3N0cmluZyBqdiBcImFydGlzdFwiIGluXG4gICAgbGV0IGFsYnVtID0gbWF5YmVfc3RyaW5nIGp2IFwiYWxidW1cIiBpblxuICAgIGxldCBhcnR3b3JrID1cbiAgICAgIG1hdGNoIEp2LmZpbmQganYgXCJhcnR3b3JrXCIgd2l0aFxuICAgICAgfCBOb25lIC0+IFtdXG4gICAgICB8IFNvbWUganYgLT4gSnYudG9fbGlzdCBpbWdfb2ZfanYganZcbiAgICBpblxuICAgIHsgdGl0bGU7IGFydGlzdDsgYWxidW07IGFydHdvcmsgfVxuZW5kXG5cbmxldCBtZXRhZGF0YSB0ID0gSnYuZ2V0IHQgXCJtZXRhZGF0YVwiIHw+IEp2LnRvX29wdGlvbiBNZWRpYV9tZXRhZGF0YS5vZl9qdlxuXG5sZXQgc2V0X21ldGFkYXRhIHQgdiA9XG4gIENvbnNvbGUubG9nIFsgXCJTZXQgbWV0YWRhdGFcIjsgTWVkaWFfbWV0YWRhdGEudG9fanYgdiBdO1xuICBsZXQgbWV0YWRhdGEgPVxuICAgIEp2Lm5ldycgKEp2LmdldCBKdi5nbG9iYWwgXCJNZWRpYU1ldGFkYXRhXCIpIFt8IE1lZGlhX21ldGFkYXRhLnRvX2p2IHYgfF1cbiAgaW5cbiAgSnYuc2V0IHQgXCJtZXRhZGF0YVwiIG1ldGFkYXRhXG5cbm1vZHVsZSBBY3Rpb24gPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSnN0ci50XG5cbiAgbGV0IG5leHRfdHJhY2sgPSBKc3RyLnYgXCJuZXh0dHJhY2tcIlxuICBsZXQgcHJldmlvdXNfdHJhY2sgPSBKc3RyLnYgXCJwcmV2aW91c3RyYWNrXCJcbmVuZFxuXG5sZXQgc2V0X2FjdGlvbl9oYW5kbGVyIHQgYWN0aW9uIGYgPVxuICBsZXQgY2FsbGJhY2sgPSBKdi5jYWxsYmFjayB+YXJpdHk6MSBmIGluXG4gIEp2LmNhbGwgdCBcInNldEFjdGlvbkhhbmRsZXJcIiBbfCBKdi5vZl9qc3RyIGFjdGlvbjsgY2FsbGJhY2sgfF0gfD4gaWdub3JlXG5cbmxldCBzZXRfcG9zaXRpb25fc3RhdGUgP2R1cmF0aW9uID9wbGF5YmFja19yYXRlID9wb3NpdGlvbiB0ID1cbiAgbGV0IG1heWJlX2Zsb2F0IG5hbWUgdiA9IE9wdGlvbi5tYXAgKGZ1biB2IC0+IChuYW1lLCBKdi5vZl9mbG9hdCB2KSkgdiBpblxuICBsZXQgZHVyYXRpb24gPSBtYXliZV9mbG9hdCBcImR1cmF0aW9uXCIgZHVyYXRpb24gaW5cbiAgbGV0IHBsYXliYWNrX3JhdGUgPSBtYXliZV9mbG9hdCBcInBsYXliYWNrUmF0ZVwiIHBsYXliYWNrX3JhdGUgaW5cbiAgbGV0IHBvc2l0aW9uID0gbWF5YmVfZmxvYXQgXCJwb3NpdGlvblwiIHBvc2l0aW9uIGluXG4gIGxldCBhcmdzID1cbiAgICBsZXQgc3RhdGVfZGljdCA9XG4gICAgICBMaXN0LmZpbHRlcl9tYXAgRnVuLmlkIFsgZHVyYXRpb247IHBsYXliYWNrX3JhdGU7IHBvc2l0aW9uIF1cbiAgICBpblxuICAgIG1hdGNoIHN0YXRlX2RpY3Qgd2l0aCBbXSAtPiBbfHxdIHwgc2QgLT4gW3wgSnYub2JqIChBcnJheS5vZl9saXN0IHNkKSB8XVxuICBpblxuICBDb25zb2xlLmxvZyBbIGFyZ3MgXTtcbiAgSnYuY2FsbCB0IFwic2V0UG9zaXRpb25TdGF0ZVwiIGFyZ3MgfD4gaWdub3JlXG4iLCJtb2R1bGUgSnYgPSBKdlxubW9kdWxlIEpzdHIgPSBKc3RyXG5cbm1vZHVsZSBCcnIgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBCcnJcblxuICBtb2R1bGUgRWwgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgUyA9IFN0eWxlXG4gICAgaW5jbHVkZSBFbFxuICAgIG1vZHVsZSBTdHlsZSA9IFNcbiAgZW5kXG5cbiAgbW9kdWxlIEV2ID0gc3RydWN0XG4gICAgaW5jbHVkZSBFdlxuXG4gICAgbW9kdWxlIFN1Ym1pdCA9IHN0cnVjdFxuICAgICAgdHlwZSAnYSBldmVudCA9ICdhIHRcbiAgICAgIHR5cGUgdCA9IEp2LnRcbiAgICBlbmRcblxuICAgIGxldCBzdWJtaXQgPSBUeXBlLnZvaWQgKEpzdHIudiBcInN1Ym1pdFwiKVxuICBlbmRcblxuICBtb2R1bGUgQXQgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIEF0XG5cbiAgICBtb2R1bGUgTmFtZSA9IHN0cnVjdFxuICAgICAgaW5jbHVkZSBOYW1lXG5cbiAgICAgIGxldCBwYXR0ZXJuID0gSnN0ci52IFwicGF0dGVyblwiXG4gICAgZW5kXG5cbiAgICBsZXQgZHJhZ2dhYmxlIHMgPSB2IE5hbWUuZHJhZ2dhYmxlIHNcbiAgZW5kXG5lbmRcblxubW9kdWxlIEJycl9pbyA9IHN0cnVjdFxuICBpbmNsdWRlIEJycl9pb1xuICBtb2R1bGUgSW5kZXhlZF9kYiA9IEluZGV4ZWRfZGJcblxuICBtb2R1bGUgTWVkaWEgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1lZGlhXG4gICAgbW9kdWxlIFNlc3Npb24gPSBNZWRpYV9zZXNzaW9uXG4gIGVuZFxuXG4gIG1vZHVsZSBTdG9yYWdlID0gc3RydWN0XG4gICAgaW5jbHVkZSBTdG9yYWdlXG5cbiAgICBtb2R1bGUgTWFuYWdlciA9IHN0cnVjdFxuICAgICAgKCogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1N0b3JhZ2VNYW5hZ2VyICopXG4gICAgICB0eXBlIHQgPSBKdi50XG5cbiAgICAgIGluY2x1ZGUgKEp2LklkIDogSnYuQ09OViB3aXRoIHR5cGUgdCA6PSB0KVxuXG4gICAgICBsZXQgcGVyc2lzdCB0ID0gSnYuY2FsbCB0IFwicGVyc2lzdFwiIFt8fF0gfD4gRnV0Lm9mX3Byb21pc2Ugfm9rOkp2LnRvX2Jvb2xcbiAgICBlbmRcblxuICAgIGxldCBtYW5hZ2VyIChuIDogQnJyLk5hdmlnYXRvci50KSA9XG4gICAgICBKdi5nZXQgKEJyci5OYXZpZ2F0b3IudG9fanYgbikgXCJzdG9yYWdlXCIgfD4gTWFuYWdlci5vZl9qdlxuICBlbmRcbmVuZFxuXG5tb2R1bGUgQnJyX3dlYndvcmtlcnMgPSBCcnJfd2Vid29ya2Vyc1xubW9kdWxlIEJycl93ZWJtaWRpID0gQnJyX3dlYm1pZGlcbm1vZHVsZSBCcnJfd2ViZ3B1ID0gQnJyX3dlYmdwdVxubW9kdWxlIEJycl93ZWJjcnlwdG8gPSBCcnJfd2ViY3J5cHRvXG5tb2R1bGUgQnJyX3dlYmF1ZGlvID0gQnJyX3dlYmF1ZGlvXG5tb2R1bGUgQnJyX2NhbnZhcyA9IEJycl9jYW52YXNcbm1vZHVsZSBGdXQgPSBGdXRcbm1vZHVsZSBJbnRlcnNlY3Rpb25fb2JzZXJ2ZXIgPSBJbnRlcnNlY3Rpb25fb2JzZXJ2ZXJcbm1vZHVsZSBNdXRhdGlvbl9vYnNlcnZlciA9IE11dGF0aW9uX29ic2VydmVyXG5tb2R1bGUgUmVzaXplX29ic2VydmVyID0gUmVzaXplX29ic2VydmVyXG5tb2R1bGUgRG9tX3JlY3RfcmVhZF9vbmx5ID0gRG9tX3JlY3RfcmVhZF9vbmx5XG4iLCIoKiogQ3JlYXRlLW9ubHkgdmVyc2lvbiBvZiBbT2JqLnRdICopXG5tb2R1bGUgQW55IDogc2lnXG4gIHR5cGUgdFxuICB2YWwgYW55IDogJ2EgLT4gdFxuZW5kID0gc3RydWN0XG4gIHR5cGUgdCA9IE9iai50XG4gIGxldCBhbnkgPSBPYmoucmVwclxuZW5kXG5cbnR5cGUgJ2EgZXZhbCA9XG4gIHwgRXZhbF9ub25lXG4gIHwgRXZhbF9wcm9ncmVzc1xuICB8IEV2YWxfc29tZSBvZiAnYVxuXG50eXBlICdhIHRfID1cbiAgfCBQdXJlIG9mICdhXG4gIHwgT3BlcmF0b3IgOiB7XG4gICAgICBtdXRhYmxlIHZhbHVlIDogJ2EgZXZhbDsgKCogY2FjaGVkIHZhbHVlICopXG4gICAgICBtdXRhYmxlIHRyYWNlIDogdHJhY2U7ICgqIGxpc3Qgb2YgcGFyZW50cyB0aGlzIGNhbiBpbnZhbGlkYXRlICopXG4gICAgICBtdXRhYmxlIHRyYWNlX2lkeCA6IHRyYWNlX2lkeDsgKCogbGlzdCBvZiBkaXJlY3QgY2hpbGRyZW4gdGhhdCBjYW4gaW52YWxpZGF0ZSB0aGlzICopXG4gICAgICBkZXNjOiAnYSBkZXNjO1xuICAgIH0gLT4gJ2EgdF9cbiAgfCBSb290IDoge1xuICAgICAgbXV0YWJsZSB2YWx1ZSA6ICdhIGV2YWw7ICgqIGNhY2hlZCB2YWx1ZSAqKVxuICAgICAgbXV0YWJsZSB0cmFjZV9pZHggOiB0cmFjZV9pZHg7ICgqIGxpc3Qgb2YgZGlyZWN0IGNoaWxkcmVuIHRoYXQgY2FuIGludmFsaWRhdGUgdGhpcyAqKVxuICAgICAgbXV0YWJsZSBvbl9pbnZhbGlkYXRlIDogJ2EgLT4gdW5pdDtcbiAgICAgIG11dGFibGUgYWNxdWlyZWQgOiBib29sO1xuICAgICAgY2hpbGQgOiAnYSB0XztcbiAgICB9IC0+ICdhIHRfXG5cbmFuZCBfIGRlc2MgPVxuICB8IE1hcCAgOiAnYSB0XyAqICgnYSAtPiAnYikgLT4gJ2IgZGVzY1xuICB8IE1hcDIgOiAnYSB0XyAqICdiIHRfICogKCdhIC0+ICdiIC0+ICdjKSAtPiAnYyBkZXNjXG4gIHwgUGFpciA6ICdhIHRfICogJ2IgdF8gLT4gKCdhICogJ2IpIGRlc2NcbiAgfCBBcHAgIDogKCdhIC0+ICdiKSB0XyAqICdhIHRfIC0+ICdiIGRlc2NcbiAgfCBKb2luIDogeyBjaGlsZCA6ICdhIHRfIHRfOyBtdXRhYmxlIGludGVybWVkaWF0ZSA6ICdhIHRfIG9wdGlvbiB9IC0+ICdhIGRlc2NcbiAgfCBWYXIgIDogeyBtdXRhYmxlIGJpbmRpbmcgOiAnYSB9IC0+ICdhIGRlc2NcbiAgfCBQcmltIDogeyBhY3F1aXJlIDogJ2EgdCAtPiAnYTtcbiAgICAgICAgICAgICByZWxlYXNlIDogJ2EgdCAtPiAnYSAtPiB1bml0IH0gLT4gJ2EgZGVzY1xuICB8IEZpeCA6IHsgZG9jIDogJ2EgdF87IHdydCA6IF8gdF8gfSAtPiAnYSBkZXNjXG5cbigqIGEgc2V0IG9mIChhY3RpdmUpIHBhcmVudHMgZm9yIGEgWydhIHRdLCB1c2VkIGR1cmluZyBpbnZhbGlkYXRpb24gKilcbmFuZCB0cmFjZSA9XG4gIHwgVDBcbiAgfCBUMSA6IF8gdF8gLT4gdHJhY2VcbiAgfCBUMiA6IF8gdF8gKiBfIHRfIC0+IHRyYWNlXG4gIHwgVDMgOiBfIHRfICogXyB0XyAqIF8gdF8gLT4gdHJhY2VcbiAgfCBUNCA6IF8gdF8gKiBfIHRfICogXyB0XyAqIF8gdF8gLT4gdHJhY2VcbiAgfCBUbiA6IHsgbXV0YWJsZSBhY3RpdmUgOiBpbnQ7IG11dGFibGUgY291bnQgOiBpbnQ7XG4gICAgICAgICAgIG11dGFibGUgZW50cmllcyA6IEFueS50IHRfIGFycmF5IH0gLT4gdHJhY2VcblxuKCogYSBzZXQgb2YgZGlyZWN0IGNoaWxkcmVuIGZvciBhIGNvbXBvc2l0ZSBkb2N1bWVudCAqKVxuYW5kIHRyYWNlX2lkeCA9XG4gIHwgSTBcbiAgfCBJMSA6IHsgbXV0YWJsZSBpZHggOiBpbnQgO1xuICAgICAgICAgICBvYmogOiAnYSB0XztcbiAgICAgICAgICAgbXV0YWJsZSBuZXh0IDogdHJhY2VfaWR4IH0gLT4gdHJhY2VfaWR4XG5cbigqIFRoZSB0eXBlIHN5c3RlbSBjYW5ub3Qgc2VlIHRoYXQgdCBpcyBjb3ZhcmlhbnQgaW4gaXRzIHBhcmFtZXRlci5cbiAgIFVzZSB0aGUgRm9yY2UgdG8gY29udmluY2UgaXQuICopXG5hbmQgKydhIHRcbmV4dGVybmFsIGluaiA6ICdhIHRfIC0+ICdhIHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBwcmogOiAnYSB0IC0+ICdhIHRfID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgcHJqMiA6ICdhIHQgdCAtPiAnYSB0XyB0XyA9IFwiJWlkZW50aXR5XCJcblxuKCogQmFzaWMgY29tYmluYXRvcnMgKilcbmxldCByZXR1cm4geCA9IGluaiAoUHVyZSB4KVxubGV0IHB1cmUgeCA9IGluaiAoUHVyZSB4KVxuXG5sZXQgaXNfcHVyZSB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgeCAtPiBTb21lIHhcbiAgfCBfIC0+IE5vbmVcblxubGV0IGR1bW15ID0gUHVyZSAoQW55LmFueSAoKSlcblxubGV0IG9wZXJhdG9yIGRlc2MgPVxuICBPcGVyYXRvciB7IHZhbHVlID0gRXZhbF9ub25lOyB0cmFjZSA9IFQwOyBkZXNjOyB0cmFjZV9pZHggPSBJMCB9XG5cbmxldCBtYXAgeCB+ZiA9IGluaiAoXG4gICAgbWF0Y2ggcHJqIHggd2l0aFxuICAgIHwgUHVyZSB2eCAtPiBQdXJlIChmIHZ4KVxuICAgIHwgeCAtPiBvcGVyYXRvciAoTWFwICh4LCBmKSlcbiAgKVxuXG5sZXQgbWFwMiB4IHkgfmYgPSBpbmogKFxuICAgIG1hdGNoIHByaiB4LCBwcmogeSB3aXRoXG4gICAgfCBQdXJlIHZ4LCBQdXJlIHZ5IC0+IFB1cmUgKGYgdnggdnkpXG4gICAgfCB4LCB5IC0+IG9wZXJhdG9yIChNYXAyICh4LCB5LCBmKSlcbiAgKVxuXG5sZXQgcGFpciB4IHkgPSBpbmogKFxuICAgIG1hdGNoIHByaiB4LCBwcmogeSB3aXRoXG4gICAgfCBQdXJlIHZ4LCBQdXJlIHZ5IC0+IFB1cmUgKHZ4LCB2eSlcbiAgICB8IHgsIHkgLT4gb3BlcmF0b3IgKFBhaXIgKHgsIHkpKVxuICApXG5cbmxldCBhcHAgZiB4ID0gaW5qIChcbiAgICBtYXRjaCBwcmogZiwgcHJqIHggd2l0aFxuICAgIHwgUHVyZSB2ZiwgUHVyZSB2eCAtPiBQdXJlICh2ZiB2eClcbiAgICB8IGYsIHggLT4gb3BlcmF0b3IgKEFwcCAoZiwgeCkpXG4gIClcblxubGV0IGpvaW4gY2hpbGQgPSBpbmogKFxuICAgIG1hdGNoIHByajIgY2hpbGQgd2l0aFxuICAgIHwgUHVyZSB2IC0+IHZcbiAgICB8IGNoaWxkIC0+IG9wZXJhdG9yIChKb2luIHsgY2hpbGQ7IGludGVybWVkaWF0ZSA9IE5vbmUgfSlcbiAgKVxuXG5sZXQgYmluZCB4IH5mID0gam9pbiAobWFwIH5mIHgpXG5cbigqIE1hbmFnZW1lbnQgb2YgdHJhY2UgaW5kaWNlcyAqKVxuXG5sZXQgYWRkciBvYyBvYmogPVxuICBQcmludGYuZnByaW50ZiBvYyBcIjB4JTA4eFwiIChPYmoubWFnaWMgb2JqIDogaW50KVxuXG5leHRlcm5hbCB0X2VxdWFsIDogXyB0XyAtPiBfIHRfIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCBvYmpfdCA6ICdhIHRfIC0+IEFueS50IHRfID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgcmVjIGR1bXBfdHJhY2UgOiB0eXBlIGEuIGEgdF8gLT4gdW5pdCA9XG4gIGZ1biBvYmogLT4gbWF0Y2ggb2JqIHdpdGhcbiAgfCBQdXJlIF8gLT4gUHJpbnRmLmVwcmludGYgXCIlYTogUHVyZSBfXFxuJSFcIiBhZGRyIG9ialxuICB8IE9wZXJhdG9yIHQgLT5cbiAgICBQcmludGYuZXByaW50ZiBcIiVhOiBPcGVyYXRvciBfIC0+ICVhXFxuJSFcIiBhZGRyIG9iaiBkdW1wX3RyYWNlX2F1eCB0LnRyYWNlO1xuICAgIGJlZ2luIG1hdGNoIHQudHJhY2Ugd2l0aFxuICAgICAgfCBUMCAtPiAoKVxuICAgICAgfCBUMSBhIC0+IGR1bXBfdHJhY2UgYVxuICAgICAgfCBUMiAoYSxiKSAtPiBkdW1wX3RyYWNlIGE7IGR1bXBfdHJhY2UgYlxuICAgICAgfCBUMyAoYSxiLGMpIC0+IGR1bXBfdHJhY2UgYTsgZHVtcF90cmFjZSBiOyBkdW1wX3RyYWNlIGNcbiAgICAgIHwgVDQgKGEsYixjLGQpIC0+IGR1bXBfdHJhY2UgYTsgZHVtcF90cmFjZSBiOyBkdW1wX3RyYWNlIGM7IGR1bXBfdHJhY2UgZFxuICAgICAgfCBUbiB0IC0+IEFycmF5Lml0ZXIgZHVtcF90cmFjZSB0LmVudHJpZXNcbiAgICBlbmRcbiAgfCBSb290IF8gLT4gUHJpbnRmLmVwcmludGYgXCIlYTogUm9vdCBfXFxuJSFcIiBhZGRyIG9ialxuXG5hbmQgZHVtcF90cmFjZV9hdXggb2MgPSBmdW5jdGlvblxuICB8IFQwIC0+IFByaW50Zi5mcHJpbnRmIG9jIFwiVDBcIlxuICB8IFQxIGEgLT4gUHJpbnRmLmZwcmludGYgb2MgXCJUMSAlYVwiIGFkZHIgYVxuICB8IFQyIChhLGIpIC0+XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJUMiAoJWEsICVhKVwiIGFkZHIgYSBhZGRyIGJcbiAgfCBUMyAoYSxiLGMpIC0+XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJUMyAoJWEsICVhLCAlYSlcIiBhZGRyIGEgYWRkciBiIGFkZHIgY1xuICB8IFQ0IChhLGIsYyxkKSAtPlxuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwiVDQgKCVhLCAlYSwgJWEsICVhKVwiIGFkZHIgYSBhZGRyIGIgYWRkciBjIGFkZHIgZFxuICB8IFRuIHQgLT5cbiAgICBQcmludGYuZnByaW50ZiBvYyBcIlRuIHthY3RpdmUgPSAlZDsgY291bnQgPSAlZDsgZW50cmllcyA9IFwiXG4gICAgICB0LmFjdGl2ZSB0LmNvdW50O1xuICAgIEFycmF5Lml0ZXIgKFByaW50Zi5mcHJpbnRmIG9jIFwiKCVhKVwiIGFkZHIpIHQuZW50cmllcztcbiAgICBQcmludGYuZnByaW50ZiBvYyBcIn1cIlxuXG5sZXQgZHVtcF90cmFjZSB4ID0gZHVtcF90cmFjZSAob2JqX3QgKHByaiB4KSlcblxubGV0IGFkZF9pZHggb2JqIGlkeCA9IGZ1bmN0aW9uXG4gIHwgUHVyZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCcgLT4gdCcudHJhY2VfaWR4IDwtIEkxIHsgaWR4OyBvYmo7IG5leHQgPSB0Jy50cmFjZV9pZHggfVxuICB8IE9wZXJhdG9yIHQnIC0+IHQnLnRyYWNlX2lkeCA8LSBJMSB7IGlkeDsgb2JqOyBuZXh0ID0gdCcudHJhY2VfaWR4IH1cblxubGV0IHJlYyByZW1faWR4X3JlYyBvYmogPSBmdW5jdGlvblxuICB8IEkwIC0+IGFzc2VydCBmYWxzZVxuICB8IEkxIHQgYXMgc2VsZiAtPlxuICAgIGlmIHRfZXF1YWwgdC5vYmogb2JqXG4gICAgdGhlbiAodC5pZHgsIHQubmV4dClcbiAgICBlbHNlIChcbiAgICAgIGxldCBpZHgsIHJlc3VsdCA9IHJlbV9pZHhfcmVjIG9iaiB0Lm5leHQgaW5cbiAgICAgIHQubmV4dCA8LSByZXN1bHQ7XG4gICAgICAoaWR4LCBzZWxmKVxuICAgIClcblxuKCogcmVtb3ZlIFtvYmpdIGZyb20gdGhlIGx3ZCdzIHRyYWNlLiAqKVxubGV0IHJlbV9pZHggb2JqID0gZnVuY3Rpb25cbiAgfCBQdXJlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0JyAtPlxuICAgIGxldCBpZHgsIHRyYWNlX2lkeCA9IHJlbV9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHggaW5cbiAgICB0Jy50cmFjZV9pZHggPC0gdHJhY2VfaWR4OyBpZHhcbiAgfCBPcGVyYXRvciB0JyAtPlxuICAgIGxldCBpZHgsIHRyYWNlX2lkeCA9IHJlbV9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHggaW5cbiAgICB0Jy50cmFjZV9pZHggPC0gdHJhY2VfaWR4OyBpZHhcblxuKCogbW92ZSBbb2JqXSBmcm9tIG9sZCBpbmRleCB0byBuZXcgaW5kZXguICopXG5sZXQgcmVjIG1vdl9pZHhfcmVjIG9iaiBvbGRpZHggbmV3aWR4ID0gZnVuY3Rpb25cbiAgfCBJMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJMSB0IC0+XG4gICAgaWYgdC5pZHggPSBvbGRpZHggJiYgdF9lcXVhbCB0Lm9iaiBvYmpcbiAgICB0aGVuIHQuaWR4IDwtIG5ld2lkeFxuICAgIGVsc2UgbW92X2lkeF9yZWMgb2JqIG9sZGlkeCBuZXdpZHggdC5uZXh0XG5cbmxldCBtb3ZfaWR4IG9iaiBvbGRpZHggbmV3aWR4ID0gZnVuY3Rpb25cbiAgfCBQdXJlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0JyAtPiBtb3ZfaWR4X3JlYyBvYmogb2xkaWR4IG5ld2lkeCB0Jy50cmFjZV9pZHhcbiAgfCBPcGVyYXRvciB0JyAtPiBtb3ZfaWR4X3JlYyBvYmogb2xkaWR4IG5ld2lkeCB0Jy50cmFjZV9pZHhcblxubGV0IHJlYyBnZXRfaWR4X3JlYyBvYmogPSBmdW5jdGlvblxuICB8IEkwIC0+IGFzc2VydCBmYWxzZVxuICB8IEkxIHQgLT5cbiAgICBpZiB0X2VxdWFsIHQub2JqIG9ialxuICAgIHRoZW4gdC5pZHhcbiAgICBlbHNlIGdldF9pZHhfcmVjIG9iaiB0Lm5leHRcblxuKCogZmluZCBpbmRleCBvZiBbb2JqXSBpbiB0aGUgZ2l2ZW4gbHdkICopXG5sZXQgZ2V0X2lkeCBvYmogPSBmdW5jdGlvblxuICB8IFB1cmUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQnIC0+IGdldF9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHhcbiAgfCBPcGVyYXRvciB0JyAtPiBnZXRfaWR4X3JlYyBvYmogdCcudHJhY2VfaWR4XG5cbnR5cGUgc3RhdHVzID1cbiAgfCBOZXV0cmFsXG4gIHwgU2FmZVxuICB8IFVuc2FmZVxuXG50eXBlIHNlbnNpdGl2aXR5ID1cbiAgfCBTdHJvbmdcbiAgfCBGcmFnaWxlXG5cbigqIFByb3BhZ2F0aW5nIGludmFsaWRhdGlvbiByZWN1cnNpdmVseS5cbiAgIEVhY2ggZG9jdW1lbnQgaXMgaW52YWxpZGF0ZWQgYXQgbW9zdCBvbmNlLFxuICAgYW5kIG9ubHkgaWYgaXQgaGFzIFt0LnZhbHVlID0gU29tZSBfXS4gKilcbmxldCByZWMgaW52YWxpZGF0ZV9ub2RlIDogdHlwZSBhIC4gc3RhdHVzIHJlZiAtPiBzZW5zaXRpdml0eSAtPiBhIHRfIC0+IHVuaXQgPVxuICBmdW4gc3RhdHVzIHNlbnNpdGl2aXR5IG5vZGUgLT5cbiAgbWF0Y2ggbm9kZSwgc2Vuc2l0aXZpdHkgd2l0aFxuICB8IFB1cmUgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290ICh7dmFsdWU7IF99IGFzIHQpLCBfIC0+XG4gICAgdC52YWx1ZSA8LSBFdmFsX25vbmU7XG4gICAgYmVnaW4gbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBFdmFsX25vbmUgLT4gKClcbiAgICAgIHwgRXZhbF9wcm9ncmVzcyAtPlxuICAgICAgICBzdGF0dXMgOj0gVW5zYWZlXG4gICAgICB8IEV2YWxfc29tZSB4IC0+XG4gICAgICAgIGJlZ2luIG1hdGNoIHNlbnNpdGl2aXR5IHdpdGhcbiAgICAgICAgICB8IFN0cm9uZyAtPiAoKVxuICAgICAgICAgIHwgRnJhZ2lsZSAtPiBzdGF0dXMgOj0gVW5zYWZlXG4gICAgICAgIGVuZDtcbiAgICAgICAgdC5vbl9pbnZhbGlkYXRlIHggKCogdXNlciBjYWxsYmFjayB0aGF0IHtpIG9ic2VydmVzfSB0aGlzIHJvb3QuICopXG4gICAgZW5kXG4gIHwgT3BlcmF0b3Ige3ZhbHVlID0gRXZhbF9ub25lOyBffSwgRnJhZ2lsZSAtPlxuICAgIGJlZ2luIG1hdGNoICFzdGF0dXMgd2l0aFxuICAgICAgfCBVbnNhZmUgfCBTYWZlIC0+ICgpXG4gICAgICB8IF8gLT4gc3RhdHVzIDo9IFNhZmVcbiAgICBlbmRcbiAgfCBPcGVyYXRvciB7dmFsdWUgPSBFdmFsX25vbmU7IF99LCBfIC0+ICgpXG4gIHwgT3BlcmF0b3Ige2Rlc2MgPSBGaXgge3dydCA9IE9wZXJhdG9yIHt2YWx1ZSA9IEV2YWxfbm9uZTsgX307IF99OyBffSwgRnJhZ2lsZSAtPlxuICAgIGJlZ2luIG1hdGNoICFzdGF0dXMgd2l0aFxuICAgICAgfCBTYWZlIHwgVW5zYWZlIC0+ICgpXG4gICAgICB8IE5ldXRyYWwgLT4gc3RhdHVzIDo9IFNhZmVcbiAgICBlbmRcbiAgfCBPcGVyYXRvciB7ZGVzYyA9IEZpeCB7d3J0ID0gT3BlcmF0b3Ige3ZhbHVlID0gRXZhbF9zb21lIF87IF99OyBffTsgX30sIEZyYWdpbGUgLT5cbiAgICAoKVxuICB8IE9wZXJhdG9yIHQsIF8gLT5cbiAgICBsZXQgc2Vuc2l0aXZpdHkgPVxuICAgICAgbWF0Y2ggdC52YWx1ZSB3aXRoIEV2YWxfcHJvZ3Jlc3MgLT4gRnJhZ2lsZSB8IF8gLT4gc2Vuc2l0aXZpdHlcbiAgICBpblxuICAgIHQudmFsdWUgPC0gRXZhbF9ub25lO1xuICAgICgqIGludmFsaWRhdGUgcGFyZW50cyByZWN1cnNpdmVseSAqKVxuICAgIGludmFsaWRhdGVfdHJhY2Ugc3RhdHVzIHNlbnNpdGl2aXR5IHQudHJhY2VcblxuKCogaW52YWxpZGF0ZSByZWN1cnNpdmVseSBkb2N1bWVudHMgaW4gdGhlIGdpdmVuIHRyYWNlICopXG5hbmQgaW52YWxpZGF0ZV90cmFjZSBzdGF0dXMgc2Vuc2l0aXZpdHkgPSBmdW5jdGlvblxuICB8IFQwIC0+ICgpXG4gIHwgVDEgeCAtPiBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHhcbiAgfCBUMiAoeCwgeSkgLT5cbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHg7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB5XG4gIHwgVDMgKHgsIHksIHopIC0+XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB4O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeTtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHpcbiAgfCBUNCAoeCwgeSwgeiwgdykgLT5cbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHg7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB5O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgejtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHdcbiAgfCBUbiB0IC0+XG4gICAgbGV0IGFjdGl2ZSA9IHQuYWN0aXZlIGluXG4gICAgdC5hY3RpdmUgPC0gMDtcbiAgICBmb3IgaSA9IDAgdG8gYWN0aXZlIC0gMSBkb1xuICAgICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB0LmVudHJpZXMuKGkpXG4gICAgZG9uZVxuXG5sZXQgZGVmYXVsdF91bnNhZmVfbXV0YXRpb25fbG9nZ2VyICgpID1cbiAgbGV0IGNhbGxzdGFjayA9IFByaW50ZXhjLmdldF9jYWxsc3RhY2sgMjAgaW5cbiAgUHJpbnRmLmZwcmludGYgc3RkZXJyXG4gICAgXCJMd2Q6IHVuc2FmZSBtdXRhdGlvbiAodmFyaWFibGUgaW52YWxpZGF0ZWQgZHVyaW5nIGV2YWx1YXRpb24pIGF0XFxuJWFcIlxuICAgIFByaW50ZXhjLnByaW50X3Jhd19iYWNrdHJhY2UgY2FsbHN0YWNrXG5cbmxldCB1bnNhZmVfbXV0YXRpb25fbG9nZ2VyID0gcmVmIGRlZmF1bHRfdW5zYWZlX211dGF0aW9uX2xvZ2dlclxuXG5sZXQgZG9faW52YWxpZGF0ZSBzZW5zaXRpdml0eSBub2RlID1cbiAgbGV0IHN0YXR1cyA9IHJlZiBOZXV0cmFsIGluXG4gIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgbm9kZTtcbiAgbGV0IHVuc2FmZSA9XG4gICAgbWF0Y2ggIXN0YXR1cyB3aXRoXG4gICAgfCBOZXV0cmFsIHwgU2FmZSAtPiBmYWxzZVxuICAgIHwgVW5zYWZlIC0+IHRydWVcbiAgaW5cbiAgaWYgdW5zYWZlIHRoZW4gIXVuc2FmZV9tdXRhdGlvbl9sb2dnZXIgKClcblxuKCogVmFyaWFibGVzICopXG50eXBlICdhIHZhciA9ICdhIHRfXG5sZXQgdmFyIHggPSBvcGVyYXRvciAoVmFyIHtiaW5kaW5nID0geH0pXG5sZXQgZ2V0IHggPSBpbmogeFxuXG5sZXQgc2V0ICh2eDpfIHZhcikgeCA6IHVuaXQgPVxuICBtYXRjaCB2eCB3aXRoXG4gIHwgT3BlcmF0b3IgKHtkZXNjID0gVmFyIHY7IF99KSAtPlxuICAgICgqIHNldCB0aGUgdmFyaWFibGUsIGFuZCBpbnZhbGlkYXRlIGFsbCBvYnNlcnZlcnMgKilcbiAgICB2LmJpbmRpbmcgPC0geDtcbiAgICBkb19pbnZhbGlkYXRlIFN0cm9uZyB2eFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwZWVrID0gZnVuY3Rpb25cbiAgfCBPcGVyYXRvciAoe2Rlc2MgPSBWYXIgdjsgX30pIC0+IHYuYmluZGluZ1xuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCB1cGRhdGUgZiB2ID0gc2V0IHYgKGYgKHBlZWsgdikpXG5cbmxldCBtYXlfdXBkYXRlIGYgdiA9XG4gIG1hdGNoIGYgKHBlZWsgdikgd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gc2V0IHYgeFxuXG4oKiBQcmltaXRpdmVzICopXG50eXBlICdhIHByaW0gPSAnYSB0XG5sZXQgcHJpbSB+YWNxdWlyZSB+cmVsZWFzZSA9XG4gIGluaiAob3BlcmF0b3IgKFByaW0geyBhY3F1aXJlOyByZWxlYXNlIH0pKVxubGV0IGdldF9wcmltIHggPSB4XG5cbmxldCBpbnZhbGlkYXRlIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgT3BlcmF0b3Ige2Rlc2MgPSBQcmltIHA7IHZhbHVlOyBffSBhcyB0IC0+XG4gICAgKCogdGhlIHZhbHVlIGlzIGludmFsaWRhdGVkLCBiZSBzdXJlIHRvIGludmFsaWRhdGUgYWxsIHBhcmVudHMgYXMgd2VsbCAqKVxuICAgIGJlZ2luIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgRXZhbF9ub25lIC0+ICgpXG4gICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gZG9faW52YWxpZGF0ZSBGcmFnaWxlIHQ7XG4gICAgICB8IEV2YWxfc29tZSB2IC0+XG4gICAgICAgIGRvX2ludmFsaWRhdGUgU3Ryb25nIHQ7XG4gICAgICAgIHAucmVsZWFzZSB4IHZcbiAgICBlbmRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBGaXggcG9pbnQgKilcblxubGV0IGZpeCBkb2MgfndydCA9IG1hdGNoIHByaiB3cnQgd2l0aFxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBQdXJlIF8gLT4gZG9jXG4gIHwgT3BlcmF0b3IgXyBhcyB3cnQgLT4gaW5qIChvcGVyYXRvciAoRml4IHtkb2MgPSBwcmogZG9jOyB3cnR9KSlcblxudHlwZSByZWxlYXNlX2xpc3QgPVxuICB8IFJlbGVhc2VfZG9uZVxuICB8IFJlbGVhc2VfbW9yZSA6XG4gICAgICB7IG9yaWdpbiA6ICdhIHRfOyBlbGVtZW50IDogJ2IgdF87IG5leHQgOiByZWxlYXNlX2xpc3QgfSAtPiByZWxlYXNlX2xpc3RcblxudHlwZSByZWxlYXNlX3F1ZXVlID0gcmVsZWFzZV9saXN0IHJlZlxubGV0IG1ha2VfcmVsZWFzZV9xdWV1ZSAoKSA9IHJlZiBSZWxlYXNlX2RvbmVcblxudHlwZSByZWxlYXNlX2ZhaWx1cmUgPSBleG4gKiBQcmludGV4Yy5yYXdfYmFja3RyYWNlXG5cbigqIFtzdWJfcmVsZWFzZSBbXSBvcmlnaW4gc2VsZl0gaXMgY2FsbGVkIHdoZW4gW29yaWdpbl0gaXMgcmVsZWFzZWQsXG4gICB3aGVyZSBbb3JpZ2luXSBpcyByZWFjaGFibGUgZnJvbSBbc2VsZl0ncyB0cmFjZS5cbiAgIFdlJ3JlIGdvaW5nIHRvIHJlbW92ZSBbb3JpZ2luXSBmcm9tIHRoYXQgdHJhY2UgYXMgW29yaWdpbl0gaXMgbm93IGRlYWQuXG5cbiAgIFtzdWJfcmVsZWFzZV0gY2Fubm90IHJhaXNlLlxuICAgSWYgYSBwcmltaXRpdmUgcmFpc2VzLCB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodCBhbmQgYSB3YXJuaW5nIGlzIGVtaXR0ZWQuICopXG5sZXQgcmVjIHN1Yl9yZWxlYXNlXG4gIDogdHlwZSBhIGIgLiByZWxlYXNlX2ZhaWx1cmUgbGlzdCAtPiBhIHRfIC0+IGIgdF8gLT4gcmVsZWFzZV9mYWlsdXJlIGxpc3RcbiAgPSBmdW4gZmFpbHVyZXMgb3JpZ2luIC0+IGZ1bmN0aW9uXG4gICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBQdXJlIF8gLT4gZmFpbHVyZXNcbiAgICB8IE9wZXJhdG9yIHQgYXMgc2VsZiAtPlxuICAgICAgKCogY29tcHV0ZSBbdC50cmFjZSBcXCB7b3JpZ2lufV0gKilcbiAgICAgIGxldCB0cmFjZSA9IG1hdGNoIHQudHJhY2Ugd2l0aFxuICAgICAgICB8IFQwIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFQxIHggLT4gYXNzZXJ0ICh0X2VxdWFsIHggb3JpZ2luKTsgVDBcbiAgICAgICAgfCBUMiAoeCwgeSkgLT5cbiAgICAgICAgICBpZiB0X2VxdWFsIHggb3JpZ2luIHRoZW4gVDEgeVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB5IG9yaWdpbiB0aGVuIFQxIHhcbiAgICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgICB8IFQzICh4LCB5LCB6KSAtPlxuICAgICAgICAgIGlmIHRfZXF1YWwgeCBvcmlnaW4gdGhlbiBUMiAoeSwgeilcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeSBvcmlnaW4gdGhlbiBUMiAoeCwgeilcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeiBvcmlnaW4gdGhlbiBUMiAoeCwgeSlcbiAgICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgICB8IFQ0ICh4LCB5LCB6LCB3KSAtPlxuICAgICAgICAgIGlmIHRfZXF1YWwgeCBvcmlnaW4gdGhlbiBUMyAoeSwgeiwgdylcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeSBvcmlnaW4gdGhlbiBUMyAoeCwgeiwgdylcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeiBvcmlnaW4gdGhlbiBUMyAoeCwgeSwgdylcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgdyBvcmlnaW4gdGhlbiBUMyAoeCwgeSwgeilcbiAgICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgICB8IFRuIHRuIGFzIHRyYWNlIC0+XG4gICAgICAgICAgbGV0IHJldmlkeCA9IHJlbV9pZHggc2VsZiBvcmlnaW4gaW5cbiAgICAgICAgICBhc3NlcnQgKHRfZXF1YWwgdG4uZW50cmllcy4ocmV2aWR4KSBvcmlnaW4pO1xuICAgICAgICAgIGxldCBjb3VudCA9IHRuLmNvdW50IC0gMSBpblxuICAgICAgICAgIHRuLmNvdW50IDwtIGNvdW50O1xuICAgICAgICAgIGlmIHJldmlkeCA8IGNvdW50IHRoZW4gKFxuICAgICAgICAgICAgbGV0IG9iaiA9IHRuLmVudHJpZXMuKGNvdW50KSBpblxuICAgICAgICAgICAgdG4uZW50cmllcy4ocmV2aWR4KSA8LSBvYmo7XG4gICAgICAgICAgICB0bi5lbnRyaWVzLihjb3VudCkgPC0gZHVtbXk7XG4gICAgICAgICAgICBtb3ZfaWR4IHNlbGYgY291bnQgcmV2aWR4IG9ialxuICAgICAgICAgICkgZWxzZVxuICAgICAgICAgICAgdG4uZW50cmllcy4ocmV2aWR4KSA8LSBkdW1teTtcbiAgICAgICAgICBpZiB0bi5hY3RpdmUgPiBjb3VudCB0aGVuIHRuLmFjdGl2ZSA8LSBjb3VudDtcbiAgICAgICAgICBpZiBjb3VudCA9IDQgdGhlbiAoXG4gICAgICAgICAgICAoKiBkb3duZ3JhZGUgdG8gW1Q0XSB0byBzYXZlIHNwYWNlICopXG4gICAgICAgICAgICBsZXQgYSA9IHRuLmVudHJpZXMuKDApIGFuZCBiID0gdG4uZW50cmllcy4oMSkgaW5cbiAgICAgICAgICAgIGxldCBjID0gdG4uZW50cmllcy4oMikgYW5kIGQgPSB0bi5lbnRyaWVzLigzKSBpblxuICAgICAgICAgICAgaWdub3JlIChyZW1faWR4IHNlbGYgYSA6IGludCk7XG4gICAgICAgICAgICBpZ25vcmUgKHJlbV9pZHggc2VsZiBiIDogaW50KTtcbiAgICAgICAgICAgIGlnbm9yZSAocmVtX2lkeCBzZWxmIGMgOiBpbnQpO1xuICAgICAgICAgICAgaWdub3JlIChyZW1faWR4IHNlbGYgZCA6IGludCk7XG4gICAgICAgICAgICBUNCAoYSwgYiwgYywgZClcbiAgICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCB0bi5lbnRyaWVzIGluXG4gICAgICAgICAgICBpZiBjb3VudCA8PSBsZW4gbHNyIDIgdGhlblxuICAgICAgICAgICAgICBUbiB7IGFjdGl2ZSA9IHRuLmFjdGl2ZTsgY291bnQgPSB0bi5jb3VudDtcbiAgICAgICAgICAgICAgICAgICBlbnRyaWVzID0gQXJyYXkuc3ViIHRuLmVudHJpZXMgMCAobGVuIGxzciAxKSB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHRyYWNlXG4gICAgICAgICAgKVxuICAgICAgaW5cbiAgICAgIHQudHJhY2UgPC0gdHJhY2U7XG4gICAgICBtYXRjaCB0cmFjZSB3aXRoXG4gICAgICB8IFQwIC0+XG4gICAgICAgICgqIFtzZWxmXSBpcyBub3QgYWN0aXZlIGFueW1vcmUsIHNpbmNlIGl0J3Mgbm90IHJlYWNoYWJsZVxuICAgICAgICAgICBmcm9tIGFueSByb290LiBXZSBjYW4gcmVsZWFzZSBpdHMgY2FjaGVkIHZhbHVlIGFuZFxuICAgICAgICAgICByZWN1cnNpdmVseSByZWxlYXNlIGl0cyBzdWJ0cmVlLiAqKVxuICAgICAgICBsZXQgdmFsdWUgPSB0LnZhbHVlIGluXG4gICAgICAgIHQudmFsdWUgPC0gRXZhbF9wcm9ncmVzcztcbiAgICAgICAgYmVnaW4gbWF0Y2ggdC5kZXNjIHdpdGhcbiAgICAgICAgICB8IE1hcCAgKHgsIF8pIC0+IHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgeFxuICAgICAgICAgIHwgTWFwMiAoeCwgeSwgXykgLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHgpIHNlbGYgeVxuICAgICAgICAgIHwgUGFpciAoeCwgeSkgLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHgpIHNlbGYgeVxuICAgICAgICAgIHwgQXBwICAoeCwgeSkgLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHgpIHNlbGYgeVxuICAgICAgICAgIHwgSm9pbiAoeyBjaGlsZDsgaW50ZXJtZWRpYXRlIH0gYXMgdCkgLT5cbiAgICAgICAgICAgIGxldCBmYWlsdXJlcyA9IHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgY2hpbGQgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIGludGVybWVkaWF0ZSB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBmYWlsdXJlc1xuICAgICAgICAgICAgICB8IFNvbWUgY2hpbGQnIC0+XG4gICAgICAgICAgICAgICAgdC5pbnRlcm1lZGlhdGUgPC0gTm9uZTtcbiAgICAgICAgICAgICAgICBzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIGNoaWxkJ1xuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfCBWYXIgIF8gLT4gZmFpbHVyZXNcbiAgICAgICAgICB8IEZpeCB7ZG9jOyB3cnR9IC0+XG4gICAgICAgICAgICBzdWJfcmVsZWFzZSAoc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB3cnQpIHNlbGYgZG9jXG4gICAgICAgICAgfCBQcmltIHQgLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgICAgICAgICAgfCBFdmFsX25vbmUgIHwgRXZhbF9wcm9ncmVzcyAtPiBmYWlsdXJlc1xuICAgICAgICAgICAgICB8IEV2YWxfc29tZSB4IC0+XG4gICAgICAgICAgICAgICAgYmVnaW4gbWF0Y2ggdC5yZWxlYXNlIChpbmogc2VsZikgeCB3aXRoXG4gICAgICAgICAgICAgICAgICB8ICgpIC0+IGZhaWx1cmVzXG4gICAgICAgICAgICAgICAgICB8IGV4Y2VwdGlvbiBleG4gLT5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgICAgICAgICAgICAgICAgKGV4biwgYnQpIDo6IGZhaWx1cmVzXG4gICAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgZW5kXG4gICAgICB8IF8gLT4gZmFpbHVyZXNcblxuKCogW3N1Yl9hY3F1aXJlXSBjYW5ub3QgcmFpc2UgKilcbmxldCByZWMgc3ViX2FjcXVpcmUgOiB0eXBlIGEgYiAuIGEgdF8gLT4gYiB0XyAtPiB1bml0ID0gZnVuIG9yaWdpbiAtPlxuICBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBQdXJlIF8gLT4gKClcbiAgfCBPcGVyYXRvciB0IGFzIHNlbGYgLT5cbiAgICAoKiBbYWNxdWlyZV0gaXMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoaXMgb3BlcmF0b3JcbiAgICAgICBpcyB1c2VkLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYWNxdWlyZSBpdHMgY2hpbGRyZW4gKilcbiAgICBsZXQgYWNxdWlyZSA9IG1hdGNoIHQudHJhY2Ugd2l0aCBUMCAtPiB0cnVlIHwgXyAtPiBmYWxzZSBpblxuICAgIGxldCB0cmFjZSA9IG1hdGNoIHQudHJhY2Ugd2l0aFxuICAgICAgfCBUMCAtPiBUMSBvcmlnaW5cbiAgICAgIHwgVDEgeCAtPiBUMiAob3JpZ2luLCB4KVxuICAgICAgfCBUMiAoeCwgeSkgLT4gVDMgKG9yaWdpbiwgeCwgeSlcbiAgICAgIHwgVDMgKHgsIHksIHopIC0+IFQ0IChvcmlnaW4sIHgsIHksIHopXG4gICAgICB8IFQ0ICh4LCB5LCB6LCB3KSAtPlxuICAgICAgICBsZXQgb2JqX29yaWdpbiA9IG9ial90IG9yaWdpbiBpblxuICAgICAgICBsZXQgZW50cmllcyA9XG4gICAgICAgICAgW3wgb2JqX3QgeDsgb2JqX3QgeTsgb2JqX3Qgejsgb2JqX3Qgdzsgb2JqX29yaWdpbjsgZHVtbXk7IGR1bW15OyBkdW1teSB8XVxuICAgICAgICBpblxuICAgICAgICBmb3IgaSA9IDAgdG8gNCBkbyBhZGRfaWR4IHNlbGYgaSBlbnRyaWVzLihpKSBkb25lO1xuICAgICAgICBUbiB7IGFjdGl2ZSA9IDU7IGNvdW50ID0gNTsgZW50cmllcyB9XG4gICAgICB8IFRuIHRuIGFzIHRyYWNlIC0+XG4gICAgICAgIGxldCBpbmRleCA9IHRuLmNvdW50IGluXG4gICAgICAgIGxldCBlbnRyaWVzLCB0cmFjZSA9XG4gICAgICAgICAgKCogcG9zc2libHkgcmVzaXplIGFycmF5IFtlbnRyaWVzXSAqKVxuICAgICAgICAgIGlmIGluZGV4IDwgQXJyYXkubGVuZ3RoIHRuLmVudHJpZXMgdGhlbiAoXG4gICAgICAgICAgICB0bi5jb3VudCA8LSB0bi5jb3VudCArIDE7XG4gICAgICAgICAgICAodG4uZW50cmllcywgdHJhY2UpXG4gICAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gQXJyYXkubWFrZSAoaW5kZXggKiAyKSBkdW1teSBpblxuICAgICAgICAgICAgQXJyYXkuYmxpdCB0bi5lbnRyaWVzIDAgZW50cmllcyAwIGluZGV4O1xuICAgICAgICAgICAgKGVudHJpZXMsIFRuIHsgYWN0aXZlID0gdG4uYWN0aXZlOyBjb3VudCA9IGluZGV4ICsgMTsgZW50cmllcyB9KVxuICAgICAgICAgIClcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG9ial9vcmlnaW4gPSBvYmpfdCBvcmlnaW4gaW5cbiAgICAgICAgZW50cmllcy4oaW5kZXgpIDwtIG9ial9vcmlnaW47XG4gICAgICAgIGFkZF9pZHggc2VsZiBpbmRleCBvYmpfb3JpZ2luO1xuICAgICAgICB0cmFjZVxuICAgIGluXG4gICAgdC50cmFjZSA8LSB0cmFjZTtcbiAgICBpZiBhY3F1aXJlIHRoZW4gKFxuICAgICAgKCogYWNxdWlyZSBpbW1lZGlhdGUgY2hpbGRyZW4sIGFuZCBzbyBvbiByZWN1cnNpdmVseSAqKVxuICAgICAgbWF0Y2ggdC5kZXNjIHdpdGhcbiAgICAgIHwgTWFwICAoeCwgXykgLT4gc3ViX2FjcXVpcmUgc2VsZiB4XG4gICAgICB8IE1hcDIgKHgsIHksIF8pIC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeDtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB5XG4gICAgICB8IFBhaXIgKHgsIHkpIC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeDtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB5XG4gICAgICB8IEFwcCAgKHgsIHkpIC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeDtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB5XG4gICAgICB8IEZpeCAge2RvYzsgd3J0fSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIGRvYztcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB3cnRcbiAgICAgIHwgSm9pbiB7IGNoaWxkOyBpbnRlcm1lZGlhdGUgfSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIGNoaWxkO1xuICAgICAgICBiZWdpbiBtYXRjaCBpbnRlcm1lZGlhdGUgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBfIC0+XG4gICAgICAgICAgICBhc3NlcnQgZmFsc2UgKCogdGhpcyBjYW4ndCBpbml0aWFsaXplZCBhbHJlYWR5LCBmaXJzdC10aW1lIGFjcXVpcmUgKilcbiAgICAgICAgZW5kXG4gICAgICB8IFZhciAgXyAtPiAoKVxuICAgICAgfCBQcmltIF8gLT4gKClcbiAgICApXG5cbigqIG1ha2Ugc3VyZSB0aGF0IFtvcmlnaW5dIGlzIGluIFtzZWxmLnRyYWNlXSwgcGFzc2VkIGFzIGxhc3QgYXJnLiAqKVxubGV0IGFjdGl2YXRlX3RyYWNpbmcgc2VsZiBvcmlnaW4gPSBmdW5jdGlvblxuICB8IFRuIHRuIC0+XG4gICAgbGV0IGlkeCA9IGdldF9pZHggc2VsZiBvcmlnaW4gaW4gKCogaW5kZXggb2YgW3NlbGZdIGluIFtvcmlnaW4udHJhY2VfaWR4XSAqKVxuICAgIGxldCBhY3RpdmUgPSB0bi5hY3RpdmUgaW5cbiAgICAoKiBbaWR4IDwgYWN0aXZlXSBtZWFucyBbc2VsZl0gaXMgYWxyZWFkeSB0cmFjZWQgYnkgW29yaWdpbl0uXG4gICAgICAgV2Ugb25seSBoYXZlIHRvIGFkZCBbc2VsZl0gdG8gdGhlIGVudHJpZXMgaWYgW2lkeCA+PSBhY3RpdmVdLiAqKVxuICAgIGlmIGlkeCA+PSBhY3RpdmUgdGhlbiAoXG4gICAgICB0bi5hY3RpdmUgPC0gYWN0aXZlICsgMTtcbiAgICApO1xuICAgIGlmIGlkeCA+IGFjdGl2ZSB0aGVuIChcbiAgICAgICgqIHN3YXAgd2l0aCBsYXN0IGVudHJ5IGluIFt0bi5lbnRyaWVzXSAqKVxuICAgICAgbGV0IG9sZCA9IHRuLmVudHJpZXMuKGFjdGl2ZSkgaW5cbiAgICAgIHRuLmVudHJpZXMuKGlkeCkgPC0gb2xkO1xuICAgICAgdG4uZW50cmllcy4oYWN0aXZlKSA8LSBvYmpfdCBvcmlnaW47XG4gICAgICBtb3ZfaWR4IHNlbGYgYWN0aXZlIGlkeCBvbGQ7XG4gICAgICBtb3ZfaWR4IHNlbGYgaWR4IGFjdGl2ZSBvcmlnaW5cbiAgICApXG4gIHwgXyAtPiAoKVxuXG5sZXQgc3ViX2lzX2RhbWFnZWQgPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBQdXJlIF8gLT4gZmFsc2VcbiAgfCBPcGVyYXRvciB7dmFsdWU7IF99IC0+XG4gICAgbWF0Y2ggdmFsdWUgd2l0aFxuICAgIHwgRXZhbF9ub25lIC0+IHRydWVcbiAgICB8IEV2YWxfc29tZSBfIC0+IGZhbHNlXG4gICAgfCBFdmFsX3Byb2dyZXNzIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBbc3ViX3NhbXBsZSBvcmlnaW4gc2VsZl0gY29tcHV0ZXMgYSB2YWx1ZSBmb3IgW3NlbGZdLlxuXG4gICBbc3ViX3NhbXBsZV0gcmFpc2UgaWYgYW55IHVzZXItcHJvdmlkZWQgY29tcHV0YXRpb24gcmFpc2VzLlxuICAgR3JhcGggd2lsbCBiZSBsZWZ0IGluIGEgY29oZXJlbnQgc3RhdGUgYnV0IGV4Y2VwdGlvbiB3aWxsIGJlIHByb3BhZ2F0ZWRcbiAgIHRvIHRoZSBvYnNlcnZlci4gKilcbmxldCBzdWJfc2FtcGxlIHF1ZXVlID1cbiAgbGV0IHJlYyBhdXggOiB0eXBlIGEgYiAuIGEgdF8gLT4gYiB0XyAtPiBiID0gZnVuIG9yaWdpbiAtPlxuICAgIGZ1bmN0aW9uXG4gICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBQdXJlIHggLT4geFxuICAgIHwgT3BlcmF0b3IgdCBhcyBzZWxmIC0+XG4gICAgICAoKiB0cnkgdG8gdXNlIGNhY2hlZCB2YWx1ZSwgaWYgcHJlc2VudCAqKVxuICAgICAgbWF0Y2ggdC52YWx1ZSB3aXRoXG4gICAgICB8IEV2YWxfc29tZSB2YWx1ZSAtPlxuICAgICAgICBhY3RpdmF0ZV90cmFjaW5nIHNlbGYgb3JpZ2luIHQudHJhY2U7XG4gICAgICAgIHZhbHVlXG4gICAgICB8IF8gLT5cbiAgICAgICAgdC52YWx1ZSA8LSBFdmFsX3Byb2dyZXNzO1xuICAgICAgICBsZXQgcmVzdWx0IDogYiA9IG1hdGNoIHQuZGVzYyB3aXRoXG4gICAgICAgICAgfCBNYXAgICh4LCBmKSAtPiBmIChhdXggc2VsZiB4KVxuICAgICAgICAgIHwgTWFwMiAoeCwgeSwgZikgLT4gZiAoYXV4IHNlbGYgeCkgKGF1eCBzZWxmIHkpXG4gICAgICAgICAgfCBQYWlyICh4LCB5KSAtPiAoYXV4IHNlbGYgeCwgYXV4IHNlbGYgeSlcbiAgICAgICAgICB8IEFwcCAgKGYsIHgpIC0+IChhdXggc2VsZiBmKSAoYXV4IHNlbGYgeClcbiAgICAgICAgICB8IEZpeCB7ZG9jOyB3cnR9IC0+XG4gICAgICAgICAgICBsZXQgXyA9IGF1eCBzZWxmIHdydCBpblxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF1eCBzZWxmIGRvYyBpblxuICAgICAgICAgICAgaWYgc3ViX2lzX2RhbWFnZWQgd3J0IHRoZW5cbiAgICAgICAgICAgICAgYXV4IG9yaWdpbiBzZWxmXG4gICAgICAgICAgICBlbHNlIChcbiAgICAgICAgICAgICAgaWYgc3ViX2lzX2RhbWFnZWQgZG9jIHRoZW5cbiAgICAgICAgICAgICAgICBkb19pbnZhbGlkYXRlIEZyYWdpbGUgc2VsZjtcbiAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICApXG4gICAgICAgICAgfCBKb2luIHggLT5cbiAgICAgICAgICAgIGxldCBpbnRlcm1lZGlhdGUgPVxuICAgICAgICAgICAgICAoKiBXZSBoYXZlbid0IHRvdWNoZWQgYW55IHN0YXRlIHlldCxcbiAgICAgICAgICAgICAgICAgaXQgaXMgc2FmZSBmb3IgW2F1eF0gdG8gcmFpc2UgKilcbiAgICAgICAgICAgICAgYXV4IHNlbGYgeC5jaGlsZFxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHguaW50ZXJtZWRpYXRlIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgeC5pbnRlcm1lZGlhdGUgPC0gU29tZSBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgIHwgU29tZSB4JyB3aGVuIHgnICE9IGludGVybWVkaWF0ZSAtPlxuICAgICAgICAgICAgICAgIHF1ZXVlIDo9IFJlbGVhc2VfbW9yZSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbiA9IHNlbGY7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSB4JztcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9ICFxdWV1ZTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgeC5pbnRlcm1lZGlhdGUgPC0gU29tZSBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgIHwgU29tZSBfIC0+ICgpXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBhdXggc2VsZiBpbnRlcm1lZGlhdGVcbiAgICAgICAgICB8IFZhciAgeCAtPiB4LmJpbmRpbmdcbiAgICAgICAgICB8IFByaW0gdCAtPiB0LmFjcXVpcmUgKGluaiBzZWxmKVxuICAgICAgICBpblxuICAgICAgICBiZWdpbiBtYXRjaCB0LnZhbHVlIHdpdGhcbiAgICAgICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gdC52YWx1ZSA8LSBFdmFsX3NvbWUgcmVzdWx0O1xuICAgICAgICAgIHwgRXZhbF9ub25lIHwgRXZhbF9zb21lIF8gLT4gKClcbiAgICAgICAgZW5kO1xuICAgICAgICAoKiBbc2VsZl0ganVzdCBiZWNhbWUgYWN0aXZlLCBzbyBpdCBtYXkgaW52YWxpZGF0ZSBbb3JpZ2luXSBpbiBjYXNlIGl0c1xuICAgICAgICAgICB2YWx1ZSBjaGFuZ2VzIGJlY2F1c2Ugb2YgW3QuZGVzY10sIGxpa2UgaWYgaXQncyBhIHZhcmlhYmxlIGFuZCBnZXRzXG4gICAgICAgICAgIG11dGF0ZWQsIG9yIGlmIGl0J3MgYSBwcmltaXRpdmUgdGhhdCBnZXRzIGludmFsaWRhdGVkLlxuICAgICAgICAgICBXZSBuZWVkIHRvIHB1dCBbb3JpZ2luXSBpbnRvIFtzZWxmLnRyYWNlXSBpbiBjYXNlIGl0IGlzbid0IHRoZXJlIHlldC4gKilcbiAgICAgICAgYWN0aXZhdGVfdHJhY2luZyBzZWxmIG9yaWdpbiB0LnRyYWNlO1xuICAgICAgICByZXN1bHRcbiAgaW5cbiAgYXV4XG5cbnR5cGUgJ2Egcm9vdCA9ICdhIHRcblxubGV0IG9ic2VydmUgPyhvbl9pbnZhbGlkYXRlPWlnbm9yZSkgY2hpbGQgOiBfIHJvb3QgPVxuICBsZXQgcm9vdCA9IFJvb3Qge1xuICAgICAgY2hpbGQgPSBwcmogY2hpbGQ7XG4gICAgICB2YWx1ZSA9IEV2YWxfbm9uZTtcbiAgICAgIG9uX2ludmFsaWRhdGU7XG4gICAgICB0cmFjZV9pZHggPSBJMDtcbiAgICAgIGFjcXVpcmVkID0gZmFsc2U7XG4gICAgfSBpblxuICBpbmogcm9vdFxuXG5leGNlcHRpb24gUmVsZWFzZV9mYWlsdXJlIG9mIGV4biBvcHRpb24gKiByZWxlYXNlX2ZhaWx1cmUgbGlzdFxuXG5sZXQgcmF3X2ZsdXNoX3JlbGVhc2VfcXVldWUgcXVldWUgPVxuICBsZXQgcmVjIGF1eCBmYWlsdXJlcyA9IGZ1bmN0aW9uXG4gICAgfCBSZWxlYXNlX2RvbmUgLT4gZmFpbHVyZXNcbiAgICB8IFJlbGVhc2VfbW9yZSB0IC0+XG4gICAgICBsZXQgZmFpbHVyZXMgPSBzdWJfcmVsZWFzZSBmYWlsdXJlcyB0Lm9yaWdpbiB0LmVsZW1lbnQgaW5cbiAgICAgIGF1eCBmYWlsdXJlcyB0Lm5leHRcbiAgaW5cbiAgYXV4IFtdIHF1ZXVlXG5cbmxldCBmbHVzaF9yZWxlYXNlX3F1ZXVlIHF1ZXVlID1cbiAgbGV0IHF1ZXVlJyA9ICFxdWV1ZSBpblxuICBxdWV1ZSA6PSBSZWxlYXNlX2RvbmU7XG4gIHJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIHF1ZXVlJ1xuXG5sZXQgc2FtcGxlIHF1ZXVlIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSBfIHwgT3BlcmF0b3IgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQgYXMgc2VsZiAtPlxuICAgIG1hdGNoIHQudmFsdWUgd2l0aFxuICAgIHwgRXZhbF9zb21lIHZhbHVlIC0+IHZhbHVlXG4gICAgfCBfIC0+XG4gICAgICAoKiBubyBjYWNoZWQgdmFsdWUsIGNvbXB1dGUgaXQgbm93ICopXG4gICAgICBpZiBub3QgdC5hY3F1aXJlZCB0aGVuIChcbiAgICAgICAgdC5hY3F1aXJlZCA8LSB0cnVlO1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHQuY2hpbGQ7XG4gICAgICApO1xuICAgICAgdC52YWx1ZSA8LSBFdmFsX3Byb2dyZXNzO1xuICAgICAgbGV0IHZhbHVlID0gc3ViX3NhbXBsZSBxdWV1ZSBzZWxmIHQuY2hpbGQgaW5cbiAgICAgIGJlZ2luIG1hdGNoIHQudmFsdWUgd2l0aFxuICAgICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gdC52YWx1ZSA8LSBFdmFsX3NvbWUgdmFsdWU7ICgqIGNhY2hlIHZhbHVlICopXG4gICAgICAgIHwgRXZhbF9ub25lIHwgRXZhbF9zb21lIF8gLT4gKClcbiAgICAgIGVuZDtcbiAgICAgIHZhbHVlXG5cbmxldCBpc19kYW1hZ2VkIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSBfIHwgT3BlcmF0b3IgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHt2YWx1ZSA9IEV2YWxfc29tZSBfOyBffSAtPiBmYWxzZVxuICB8IFJvb3Qge3ZhbHVlID0gRXZhbF9ub25lIHwgRXZhbF9wcm9ncmVzczsgX30gLT4gdHJ1ZVxuXG5sZXQgcmVsZWFzZSBxdWV1ZSB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgXyB8IE9wZXJhdG9yIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0IGFzIHNlbGYgLT5cbiAgICBpZiB0LmFjcXVpcmVkIHRoZW4gKFxuICAgICAgKCogcmVsZWFzZSBzdWJ0cmVlLCByZW1vdmUgY2FjaGVkIHZhbHVlICopXG4gICAgICB0LnZhbHVlIDwtIEV2YWxfbm9uZTtcbiAgICAgIHQuYWNxdWlyZWQgPC0gZmFsc2U7XG4gICAgICBxdWV1ZSA6PSBSZWxlYXNlX21vcmUgeyBvcmlnaW4gPSBzZWxmOyBlbGVtZW50ID0gdC5jaGlsZDsgbmV4dCA9ICFxdWV1ZSB9XG4gICAgKVxuXG5sZXQgc2V0X29uX2ludmFsaWRhdGUgeCBmID1cbiAgbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgXyB8IE9wZXJhdG9yIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0IC0+IHQub25faW52YWxpZGF0ZSA8LSBmXG5cbmxldCBmbHVzaF9vcl9mYWlsIG1haW5fZXhuIHF1ZXVlID1cbiAgbWF0Y2ggZmx1c2hfcmVsZWFzZV9xdWV1ZSBxdWV1ZSB3aXRoXG4gIHwgW10gLT4gKClcbiAgfCBmYWlsdXJlcyAtPiByYWlzZSAoUmVsZWFzZV9mYWlsdXJlIChtYWluX2V4biwgZmFpbHVyZXMpKVxuXG5sZXQgcXVpY2tfc2FtcGxlIHJvb3QgPVxuICBsZXQgcXVldWUgPSByZWYgUmVsZWFzZV9kb25lIGluXG4gIG1hdGNoIHNhbXBsZSBxdWV1ZSByb290IHdpdGhcbiAgfCByZXN1bHQgLT4gZmx1c2hfb3JfZmFpbCBOb25lIHF1ZXVlOyByZXN1bHRcbiAgfCBleGNlcHRpb24gZXhuIC0+IGZsdXNoX29yX2ZhaWwgKFNvbWUgZXhuKSBxdWV1ZTsgcmFpc2UgZXhuXG5cbmxldCBxdWlja19yZWxlYXNlIHJvb3QgPVxuICBsZXQgcXVldWUgPSByZWYgUmVsZWFzZV9kb25lIGluXG4gIHJlbGVhc2UgcXVldWUgcm9vdDtcbiAgZmx1c2hfb3JfZmFpbCBOb25lIHF1ZXVlXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKD4+PSkgeCBmID0gYmluZCB4IH5mXG4gIGxldCAoPnw9KSB4IGYgPSBtYXAgeCB+ZlxuICBsZXQgKDwqPikgPSBhcHBcbmVuZFxuXG4oKiRSXG4gIGxldCB4ID0gdmFyIDAgaW5cbiAgbGV0IHkgPSBtYXAgfmY6c3VjYyAoZ2V0IHgpIGluXG4gIGxldCBvX3kgPSBMd2Qub2JzZXJ2ZSB5IGluXG4gIGFzc2VydF9lcXVhbCAxIChxdWlja19zYW1wbGUgb195KTtcbiAgc2V0IHggMTA7XG4gIGFzc2VydF9lcXVhbCAxMSAocXVpY2tfc2FtcGxlIG9feSk7XG4gICopXG4iLCJcbnR5cGUgJ2EgbW9ub2lkID0gJ2EgKiAoJ2EgLT4gJ2EgLT4gJ2EpXG5cbmxldCBsaWZ0X21vbm9pZCAoemVybywgcGx1cykgPVxuICAoTHdkLnJldHVybiB6ZXJvLCBMd2QubWFwMiB+ZjpwbHVzKVxuXG5sZXQgbWFwX3JlZHVjZSBpbmogKHplcm8sIHBsdXMpIGl0ZW1zID1cbiAgbGV0IHJlYyBjb25zX21vbm9pZCBjIHhzIHYgPVxuICAgIG1hdGNoIHhzIHdpdGhcbiAgICB8IChjJywgdicpIDo6IHhzIHdoZW4gYyA9IGMnIC0+XG4gICAgICBjb25zX21vbm9pZCAoYyArIDEpIHhzIChwbHVzIHYnIHYpXG4gICAgfCB4cyAtPiAoYywgdikgOjogeHNcbiAgaW5cbiAgbGV0IGNvbnNfbW9ub2lkIHhzIHYgPSBjb25zX21vbm9pZCAwIHhzIChpbmogdikgaW5cbiAgbWF0Y2ggTGlzdC5mb2xkX2xlZnQgY29uc19tb25vaWQgW10gaXRlbXMgd2l0aFxuICB8IFtdIC0+IHplcm9cbiAgfCAoXyx4KSA6OiB4cyAtPlxuICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIChfLCB2KSAtPiBwbHVzIHYgYWNjKSB4IHhzXG5cbmxldCByZWR1Y2UgbW9ub2lkIGl0ZW1zID0gbWFwX3JlZHVjZSAoZnVuIHggLT4geCkgbW9ub2lkIGl0ZW1zXG5cbmxldCByZWMgY29uc19sd2RfbW9ub2lkIHBsdXMgYyB4cyB2ID1cbiAgbWF0Y2ggeHMgd2l0aFxuICB8IChjJywgdicpIDo6IHhzIHdoZW4gYyA9IGMnIC0+XG4gICAgY29uc19sd2RfbW9ub2lkIHBsdXMgKGMgKyAxKSB4cyAoTHdkLm1hcDIgfmY6cGx1cyB2JyB2KVxuICB8IHhzIC0+IChjLCB2KSA6OiB4c1xuXG5sZXQgcGFjayAoemVybywgcGx1cykgaXRlbXMgPVxuICBtYXRjaCBMaXN0LmZvbGRfbGVmdCAoY29uc19sd2RfbW9ub2lkIHBsdXMgMCkgW10gaXRlbXMgd2l0aFxuICB8IFtdIC0+IEx3ZC5yZXR1cm4gemVyb1xuICB8IChfLHgpIDo6IHhzIC0+XG4gICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgKF8sIHYpIC0+IEx3ZC5tYXAyIH5mOnBsdXMgdiBhY2MpIHggeHNcblxubGV0IHBhY2tfc2VxICh6ZXJvLCBwbHVzKSBpdGVtcyA9XG4gIG1hdGNoIFNlcS5mb2xkX2xlZnQgKGNvbnNfbHdkX21vbm9pZCBwbHVzIDApIFtdIGl0ZW1zIHdpdGhcbiAgfCBbXSAtPiBMd2QucmV0dXJuIHplcm9cbiAgfCAoXyx4KSA6OiB4cyAtPlxuICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIChfLCB2KSAtPiBMd2QubWFwMiB+ZjpwbHVzIHYgYWNjKSB4IHhzXG5cbmxldCByZWMgbWFwX2wgKGY6J2EgLT4gJ2IgTHdkLnQpIChsOidhIGxpc3QpIDogJ2IgbGlzdCBMd2QudCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IEx3ZC5yZXR1cm4gW11cbiAgfCB4IDo6IHRsIC0+IEx3ZC5tYXAyIH5mOkxpc3QuY29ucyAoZiB4KSAobWFwX2wgZiB0bClcblxubGV0IGZsYXR0ZW5fbCAobDonYSBMd2QudCBsaXN0KSA6ICdhIGxpc3QgTHdkLnQgPVxuICBtYXBfbCAoZnVuIHgtPngpIGxcblxuKCoqIHsxIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zfVxuXG4gICAgSSBkb24ndCBrbm93IHdoZXJlIHRvIHB1dCB0aGVzZSwgYnV0IHRoZXkgYXJlIHVzZWZ1bCwgZXNwZWNpYWxseSBmb3JcbiAgICBVSS1yZWxhdGVkIGNvbXB1dGF0aW9ucy5cbiopXG5cbmxldCBtaW5pIGEgYiA6IGludCA9IGlmIGIgPCBhIHRoZW4gYiBlbHNlIGFcblxubGV0IG1heGkgYSBiIDogaW50ID0gaWYgYiA+IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgY2xhbXBpIHggfm1pbiB+bWF4IDogaW50ID1cbiAgaWYgeCA8IG1pbiB0aGVuXG4gICAgbWluXG4gIGVsc2UgaWYgeCA+IG1heCB0aGVuXG4gICAgbWF4XG4gIGVsc2VcbiAgICB4XG5cbmxldCBtaW5mIGEgYiA6IGZsb2F0ID0gaWYgYiA8IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgbWF4ZiBhIGIgOiBmbG9hdCA9IGlmIGIgPiBhIHRoZW4gYiBlbHNlIGFcblxubGV0IGNsYW1wZiB4IH5taW4gfm1heCA6IGZsb2F0ID1cbiAgaWYgeCA8IG1pbiB0aGVuXG4gICAgbWluXG4gIGVsc2UgaWYgeCA+IG1heCB0aGVuXG4gICAgbWF4XG4gIGVsc2VcbiAgICB4XG4iLCJ0eXBlICdhIGJpbmRpbmcgPVxuICB8IEJvdW5kIG9mIHsgdmFsdWUgOiAnYSA7IG11dGFibGUgdmFsaWQgOiBib29sIH1cbiAgfCBVbmJvdW5kXG5cbnR5cGUgJ2EgdHJlZSA9XG4gIHwgTGVhZlxuICB8IE5vZGUgb2Yge1xuICAgICAgbXV0YWJsZSB2ZXJzaW9uIDogaW50O1xuICAgICAgbXV0YWJsZSBsZWZ0ICAgIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgYmluZGluZyA6ICdhIGJpbmRpbmc7XG4gICAgICBtdXRhYmxlIHJpZ2h0ICAgOiAnYSB0cmVlO1xuICAgICAgbXV0YWJsZSBwYXJlbnQgIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgc2l6ZSAgICA6IGludDtcbiAgICB9XG4gIHwgUm9vdCBvZiB7XG4gICAgICBtdXRhYmxlIHZlcnNpb24gOiBpbnQ7XG4gICAgICBtdXRhYmxlIGNoaWxkIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgZ2VuZXJhdGlvbiA6IHVuaXQgcmVmO1xuICAgICAgbXV0YWJsZSBvbl9pbnZhbGlkYXRlIDogT2JqLnQgTHdkLnByaW0gbGlzdDtcbiAgICB9XG5cbnR5cGUgJ2EgdCA9ICdhIHRyZWVcbnR5cGUgJ2Egcm93ID0gJ2EgdHJlZVxuXG5sZXQgbm90X29yaWdpbiA9IHJlZiAoKSAoKiBub3QgeyFvcmlnaW59ICopXG5sZXQgb3JpZ2luID0gcmVmICgpICgqIG5vdCB7IW5vdF9vcmlnaW59ICopXG5cbmxldCBtYWtlICgpID1cbiAgUm9vdCB7IGNoaWxkID0gTGVhZjsgZ2VuZXJhdGlvbiA9IG9yaWdpbjsgdmVyc2lvbiA9IDA7IG9uX2ludmFsaWRhdGUgPSBbXSB9XG5cbmxldCBzZXRfcGFyZW50IH5wYXJlbnQgPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIG4gLT4gbi5wYXJlbnQgPC0gcGFyZW50XG4gIHwgTGVhZiAtPiAoKVxuXG5sZXQgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQgfm5ld2NoaWxkID1cbiAgbWF0Y2ggcGFyZW50IHdpdGhcbiAgfCBSb290IHIgLT5cbiAgICBhc3NlcnQgKHIuY2hpbGQgPT0gb2xkY2hpbGQpO1xuICAgIHIuY2hpbGQgPC0gbmV3Y2hpbGRcbiAgfCBOb2RlIG4gd2hlbiBuLmxlZnQgPT0gb2xkY2hpbGQgLT5cbiAgICBuLmxlZnQgPC0gbmV3Y2hpbGRcbiAgfCBOb2RlIG4gd2hlbiBuLnJpZ2h0ID09IG9sZGNoaWxkIC0+XG4gICAgbi5yaWdodCA8LSBuZXdjaGlsZFxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBtYWtlX25vZGUgc2V0IH5sZWZ0IH5yaWdodCB+cGFyZW50ID1cbiAgbGV0IGJpbmRpbmcgPSBtYXRjaCBzZXQgd2l0aFxuICAgIHwgTm9uZSAtPiBVbmJvdW5kXG4gICAgfCBTb21lIHZhbHVlIC0+IEJvdW5kIHsgdmFsdWUgOyB2YWxpZCA9IHRydWUgfVxuICBpblxuICBsZXQgbm9kZSA9IE5vZGUgeyBsZWZ0OyByaWdodDsgcGFyZW50OyB2ZXJzaW9uID0gMDsgc2l6ZSA9IDA7IGJpbmRpbmcgfSBpblxuICBzZXRfcGFyZW50IGxlZnQgIH5wYXJlbnQ6bm9kZTtcbiAgc2V0X3BhcmVudCByaWdodCB+cGFyZW50Om5vZGU7XG4gIG5vZGVcblxubGV0IHJlYyByYXdfaW52YWxpZGF0ZSA9IGZ1bmN0aW9uXG4gIHwgTm9kZSB7IHNpemUgPSAwOyBfIH0gLT4gKClcbiAgfCBOb2RlIHQgLT5cbiAgICB0LnNpemUgPC0gMDtcbiAgICByYXdfaW52YWxpZGF0ZSB0LnBhcmVudFxuICB8IFJvb3QgciAtPlxuICAgIExpc3QuaXRlciBMd2QuaW52YWxpZGF0ZSByLm9uX2ludmFsaWRhdGVcbiAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcHJlcGVuZCA/c2V0ID0gZnVuY3Rpb25cbiAgfCBSb290IHIgYXMgcGFyZW50IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgcGFyZW50O1xuICAgIGxldCBub2RlID0gbWFrZV9ub2RlIHNldCB+bGVmdDpMZWFmIH5yaWdodDpyLmNoaWxkIH5wYXJlbnQgaW5cbiAgICByLmNoaWxkIDwtIG5vZGU7XG4gICAgbm9kZVxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwcmVwZW5kJyB4IHNldCA9IGlnbm9yZSAocHJlcGVuZCB4IH5zZXQpXG5cbmxldCBhcHBlbmQgP3NldCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCByIGFzIHBhcmVudCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHBhcmVudDtcbiAgICBsZXQgbm9kZSA9IG1ha2Vfbm9kZSBzZXQgfmxlZnQ6ci5jaGlsZCB+cmlnaHQ6TGVhZiB+cGFyZW50IGluXG4gICAgci5jaGlsZCA8LSBub2RlO1xuICAgIG5vZGVcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgYXBwZW5kJyB4IHNldCA9IGlnbm9yZSAoYXBwZW5kIHggfnNldClcblxubGV0IGJlZm9yZSA/c2V0ID0gZnVuY3Rpb25cbiAgfCBOb2RlIHsgcGFyZW50ID0gTGVhZiA7IF8gfSB8IExlYWYgLT4gTGVhZlxuICB8IE5vZGUgbiBhcyBwYXJlbnQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSBwYXJlbnQ7XG4gICAgbGV0IG5vZGUgPSBtYWtlX25vZGUgc2V0IH5sZWZ0Om4ubGVmdCB+cmlnaHQ6TGVhZiB+cGFyZW50IGluXG4gICAgbi5sZWZ0IDwtIG5vZGU7XG4gICAgbm9kZVxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGFmdGVyID9zZXQgPSBmdW5jdGlvblxuICB8IE5vZGUgeyBwYXJlbnQgPSBMZWFmIDsgXyB9IHwgTGVhZiAtPiBMZWFmXG4gIHwgTm9kZSBuIGFzIHBhcmVudCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHBhcmVudDtcbiAgICBsZXQgbm9kZSA9IG1ha2Vfbm9kZSBzZXQgfmxlZnQ6TGVhZiB+cmlnaHQ6bi5yaWdodCB+cGFyZW50IGluXG4gICAgbi5yaWdodCA8LSBub2RlO1xuICAgIG5vZGVcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBnZXQgPSBmdW5jdGlvblxuICB8IE5vZGUgeyBiaW5kaW5nID0gQm91bmQgeyB2YWx1ZSA7IF8gfSA7IF8gfSAtPiBTb21lIHZhbHVlXG4gIHwgTGVhZiB8IFJvb3QgXyB8IE5vZGUgeyBiaW5kaW5nID0gVW5ib3VuZCA7IF8gfSAtPiBOb25lXG5cbmxldCBpbnZhbGlkYXRlX2JpbmRpbmcgPSBmdW5jdGlvblxuICB8IFVuYm91bmQgLT4gKClcbiAgfCBCb3VuZCBiIC0+IGIudmFsaWQgPC0gZmFsc2VcblxubGV0IHNldF9iaW5kaW5nIHggPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIHwgTm9kZSB7IHBhcmVudCA9IExlYWY7IF8gfSAtPiAoKVxuICB8IE5vZGUgbiBhcyB0IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgdDtcbiAgICBpbnZhbGlkYXRlX2JpbmRpbmcgbi5iaW5kaW5nO1xuICAgIG4uYmluZGluZyA8LSB4XG5cbmxldCBzZXQgdCB2YWx1ZSA9IHNldF9iaW5kaW5nIChCb3VuZCB7IHZhbHVlOyB2YWxpZCA9IHRydWUgfSkgdFxubGV0IHVuc2V0IHQgPSBzZXRfYmluZGluZyBVbmJvdW5kIHRcblxubGV0IGlzX2JvdW5kID0gZnVuY3Rpb25cbiAgfCBMZWFmIHwgTm9kZSB7IHBhcmVudCA9IExlYWY7IF8gfSAtPiBmYWxzZVxuICB8IFJvb3QgXyB8IE5vZGUgXyAtPiB0cnVlXG5cbmxldCByZWMgam9pbiBsZWZ0ID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUgKHsgbGVmdCA9IExlYWY7IF8gfSBhcyBuKSBhcyBzZWxmIC0+XG4gICAgbi5sZWZ0IDwtIGxlZnQ7XG4gICAgc2V0X3BhcmVudCBsZWZ0IH5wYXJlbnQ6c2VsZjtcbiAgICBzZWxmXG4gIHwgTm9kZSBub2RlIC0+XG4gICAgam9pbiBsZWZ0IG5vZGUubGVmdFxuXG5sZXQgcmVtb3ZlID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIHwgTm9kZSB7cGFyZW50ID0gTGVhZjsgX30gLT4gKClcbiAgfCBOb2RlICh7bGVmdDsgcmlnaHQ7IHBhcmVudDsgX30gYXMgbikgYXMgdCAtPlxuICAgIGludmFsaWRhdGVfYmluZGluZyBuLmJpbmRpbmc7XG4gICAgbi5sZWZ0IDwtIExlYWY7XG4gICAgbi5yaWdodCA8LSBMZWFmO1xuICAgIG4ucGFyZW50IDwtIExlYWY7XG4gICAgbi5iaW5kaW5nIDwtIFVuYm91bmQ7XG4gICAgbi52ZXJzaW9uIDwtIG1heF9pbnQ7XG4gICAgbGV0IGpvaW4sIGludmFsaWQgPSBtYXRjaCBsZWZ0LCByaWdodCB3aXRoXG4gICAgICB8IExlYWYsIG90aGVyIHwgb3RoZXIsIExlYWYgLT4gKG90aGVyLCBwYXJlbnQpXG4gICAgICB8IF8gLT4gKHJpZ2h0LCBqb2luIGxlZnQgcmlnaHQpXG4gICAgaW5cbiAgICByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZDp0IH5uZXdjaGlsZDpqb2luO1xuICAgIHNldF9wYXJlbnQgam9pbiB+cGFyZW50O1xuICAgIHJhd19pbnZhbGlkYXRlIGludmFsaWRcblxubGV0IHJlYyBjbGVhciA9IGZ1bmN0aW9uXG4gIHwgTGVhZiAtPiAoKVxuICB8IE5vZGUgKHtsZWZ0OyByaWdodDsgX30gYXMgbikgLT5cbiAgICBpbnZhbGlkYXRlX2JpbmRpbmcgbi5iaW5kaW5nO1xuICAgIG4ubGVmdCA8LSBMZWFmO1xuICAgIG4ucmlnaHQgPC0gTGVhZjtcbiAgICBuLnBhcmVudCA8LSBMZWFmO1xuICAgIG4uYmluZGluZyA8LSBVbmJvdW5kO1xuICAgIG4udmVyc2lvbiA8LSBtYXhfaW50O1xuICAgIGNsZWFyIGxlZnQ7XG4gICAgY2xlYXIgcmlnaHRcbiAgfCBSb290IHIgYXMgcm9vdCAtPlxuICAgIGxldCBjaGlsZCA9IHIuY2hpbGQgaW5cbiAgICByLmNoaWxkIDwtIExlYWY7XG4gICAgY2xlYXIgY2hpbGQ7XG4gICAgcmF3X2ludmFsaWRhdGUgcm9vdFxuXG4oKiBUcmVlIGJhbGFuY2luZyAqKVxuXG5sZXQgc2l6ZSA9IGZ1bmN0aW9uXG4gIHwgTm9kZSBub2RlIC0+XG4gICAgYXNzZXJ0IChub2RlLnNpemUgPD4gMCk7XG4gICAgbm9kZS5zaXplXG4gIHwgTGVhZiAtPiAwXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiogW3NtYWxsZXJfZWxsIHNtaW4gc21heF0gaWZmXG4gICAgLSBbc21pbl0gaXMgbGVzcyB0aGFuIFtzbWF4XVxuICAgIC0gW3NtaW5dIGFuZCBbc21heF0gZGlmZmVycyBieSBsZXNzIHRoYW4gdHdvIG1hZ25pdHVkZSBvcmRlcnMsIGkuZVxuICAgICAgbXNicyhzbWluKSA+PSBtc2JzKHNtYXgpIC0gMVxuICAgICAgd2hlcmUgbXNicyBpcyB0aGUgaW5kZXggb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCAqKVxubGV0IHNtYWxsZXJfZWxsIHNtaW4gc21heCA9IChzbWluIDwgc21heCkgJiYgKChzbWluIGxhbmQgc21heCkgbHNsIDEgPCBzbWF4KVxuXG4oKiogW2Rpc2JhbGFuY2VkIHNtaW4gc21heF0gY2hlY2sgaWYgdHdvIHN1Yi10cmVlcyBvZiBzaXplIFtzbWluXSBhbmQgW3NtYXhdLFxuICAgIGFyZSBkaXNiYWxhbmN6ZWQuIFRoYXQgaXMsIG1zYnMoc21pbikgPCBtc2JzKHNtYXgpIC0gMSAqKVxubGV0IGRpc2JhbGFuY2VkIHNtaW4gc21heCA9IHNtYWxsZXJfZWxsIHNtaW4gKHNtYXggbHNyIDEpXG5cbmxldCByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZCB+bmV3Y2hpbGQgPVxuICBtYXRjaCBwYXJlbnQgd2l0aFxuICB8IFJvb3QgciAtPlxuICAgIGFzc2VydCAoci5jaGlsZCA9PSBvbGRjaGlsZCk7XG4gICAgci5jaGlsZCA8LSBuZXdjaGlsZDtcbiAgfCBOb2RlIG4gd2hlbiBuLmxlZnQgPT0gb2xkY2hpbGQgLT5cbiAgICBuLmxlZnQgPC0gbmV3Y2hpbGRcbiAgfCBOb2RlIG4gd2hlbiBuLnJpZ2h0ID09IG9sZGNoaWxkIC0+XG4gICAgbi5yaWdodCA8LSBuZXdjaGlsZFxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCByZWMgcm90X2xlZnQgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgTm9kZSAoeyByaWdodCA9IChOb2RlIHJuKSBhcyByOyBffSBhcyBzbikgYXMgcyAtPlxuICAgIGxldCBwYXJlbnQgPSBzbi5wYXJlbnQgaW5cbiAgICBsZXQgcmwgPSBtYXRjaCBybi5sZWZ0IHdpdGhcbiAgICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBMZWFmIC0+IExlYWZcbiAgICAgIHwgKE5vZGUgcmxuKSBhcyBybCAtPlxuICAgICAgICBybG4ucGFyZW50IDwtIHM7XG4gICAgICAgIHJsXG4gICAgaW5cbiAgICBybi5sZWZ0IDwtIHM7XG4gICAgc24ucmlnaHQgPC0gcmw7XG4gICAgc24ucGFyZW50IDwtIHI7XG4gICAgcm4ucGFyZW50IDwtIHBhcmVudDtcbiAgICByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZDpzIH5uZXdjaGlsZDpyO1xuICAgIGlnbm9yZSAoYmFsYW5jZSB2ZXJzaW9uIHMpO1xuICAgIGJhbGFuY2UgdmVyc2lvbiByXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuYW5kIHJvdF9yaWdodCB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBOb2RlICh7IGxlZnQgPSAoTm9kZSBsbikgYXMgbDsgX30gYXMgc24pIGFzIHMgLT5cbiAgICBsZXQgcGFyZW50ID0gc24ucGFyZW50IGluXG4gICAgbGV0IGxyID0gbWF0Y2ggbG4ucmlnaHQgd2l0aFxuICAgICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IExlYWYgLT4gTGVhZlxuICAgICAgfCAoTm9kZSBscm4pIGFzIGxyIC0+XG4gICAgICAgIGxybi5wYXJlbnQgPC0gcztcbiAgICAgICAgbHJcbiAgICBpblxuICAgIGxuLnJpZ2h0IDwtIHM7XG4gICAgc24ubGVmdCA8LSBscjtcbiAgICBzbi5wYXJlbnQgPC0gbDtcbiAgICBsbi5wYXJlbnQgPC0gcGFyZW50O1xuICAgIHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkOnMgfm5ld2NoaWxkOmw7XG4gICAgaWdub3JlIChiYWxhbmNlIHZlcnNpb24gcyk7XG4gICAgYmFsYW5jZSB2ZXJzaW9uIGxcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5hbmQgaW5jX2xlZnQgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIHtyaWdodDsgX30gYXMgc2VsZiAtPlxuICAgIGJlZ2luIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICAgIHwgTm9kZSBybiB3aGVuIHNtYWxsZXJfZWxsIChzaXplIHJuLnJpZ2h0KSAoc2l6ZSBybi5sZWZ0KSAtPlxuICAgICAgICBpZ25vcmUgKHJvdF9yaWdodCB2ZXJzaW9uIHJpZ2h0KVxuICAgICAgfCBfIC0+ICgpXG4gICAgZW5kO1xuICAgIHJvdF9sZWZ0IHZlcnNpb24gc2VsZlxuXG5hbmQgaW5jX3JpZ2h0IHZlcnNpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSB7bGVmdDsgX30gYXMgc2VsZiAtPlxuICAgIGJlZ2luIG1hdGNoIGxlZnQgd2l0aFxuICAgICAgfCBOb2RlIGxuIHdoZW4gc21hbGxlcl9lbGwgKHNpemUgbG4ubGVmdCkgKHNpemUgbG4ucmlnaHQpIC0+XG4gICAgICAgIGlnbm9yZSAocm90X2xlZnQgdmVyc2lvbiBsZWZ0KVxuICAgICAgfCBfIC0+ICgpXG4gICAgZW5kO1xuICAgIHJvdF9yaWdodCB2ZXJzaW9uIHNlbGZcblxuYW5kIGJhbGFuY2UgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIG5vZGUgYXMgc2VsZiAtPlxuICAgIGxldCBzbCA9IHNpemUgbm9kZS5sZWZ0IGFuZCBzciA9IHNpemUgbm9kZS5yaWdodCBpblxuICAgIGlmIHNsIDwgc3IgdGhlbiAoXG4gICAgICBpZiBkaXNiYWxhbmNlZCBzbCBzclxuICAgICAgdGhlbiBpbmNfbGVmdCB2ZXJzaW9uIHNlbGZcbiAgICAgIGVsc2UgKG5vZGUudmVyc2lvbiA8LSB2ZXJzaW9uOyBub2RlLnNpemUgPC0gMSArIHNsICsgc3I7IHNlbGYpXG4gICAgKSBlbHNlIChcbiAgICAgIGlmIGRpc2JhbGFuY2VkIHNyIHNsXG4gICAgICB0aGVuIGluY19yaWdodCB2ZXJzaW9uIHNlbGZcbiAgICAgIGVsc2UgKG5vZGUudmVyc2lvbiA8LSB2ZXJzaW9uOyBub2RlLnNpemUgPC0gMSArIHNsICsgc3I7IHNlbGYpXG4gICAgKVxuXG5sZXQgcmVjIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+ICgpXG4gIHwgTGVhZiAtPiAoKVxuICB8IE5vZGUgbm9kZSBhcyBzZWxmIC0+XG4gICAgaWYgbm9kZS5zaXplID0gMCB0aGVuXG4gICAgICBtYXRjaCBub2RlLmxlZnQgd2l0aFxuICAgICAgfCBOb2RlIHtzaXplID0gMDsgX30gLT5cbiAgICAgICAgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uIG5vZGUubGVmdFxuICAgICAgfCBfIC0+XG4gICAgICAgIG1hdGNoIG5vZGUucmlnaHQgd2l0aFxuICAgICAgICB8IE5vZGUge3NpemUgPSAwOyBffSAtPlxuICAgICAgICAgIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiBub2RlLnJpZ2h0XG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGxldCBwYXJlbnQgPSBub2RlLnBhcmVudCBpblxuICAgICAgICAgIGlnbm9yZSAoYmFsYW5jZSB2ZXJzaW9uIHNlbGYpO1xuICAgICAgICAgIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiBwYXJlbnRcblxubGV0IHJlYyByZXNldF92ZXJzaW9uIHZlcnNpb24gPSBmdW5jdGlvblxuICB8IExlYWYgLT4gKClcbiAgfCBOb2RlIG4gLT5cbiAgICBuLnZlcnNpb24gPC0gdmVyc2lvbjtcbiAgICByZXNldF92ZXJzaW9uIHZlcnNpb24gbi5sZWZ0O1xuICAgIHJlc2V0X3ZlcnNpb24gdmVyc2lvbiBuLnJpZ2h0XG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmViYWxhbmNlID0gZnVuY3Rpb25cbiAgfCBSb290IHIgLT5cbiAgICBiZWdpbiBtYXRjaCByLmNoaWxkIHdpdGhcbiAgICAgIHwgTm9kZSB7IHNpemUgPSAwOyBfIH0gLT5cbiAgICAgICAgbGV0IHZlcnNpb24gPSBzdWNjIHIudmVyc2lvbiBpblxuICAgICAgICBsZXQgdmVyc2lvbiA9XG4gICAgICAgICAgaWYgdmVyc2lvbiA9IG1heF9pbnQgdGhlbiAoXG4gICAgICAgICAgICByLmdlbmVyYXRpb24gPC0gcmVmICgpO1xuICAgICAgICAgICAgcmVzZXRfdmVyc2lvbiAwIHIuY2hpbGQ7XG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICAgIGVsc2UgdmVyc2lvblxuICAgICAgICBpblxuICAgICAgICByLnZlcnNpb24gPC0gdmVyc2lvbjtcbiAgICAgICAgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uIHIuY2hpbGQ7XG4gICAgICAgIHZlcnNpb25cbiAgICAgIHwgTm9kZSBfIHwgTGVhZiAtPiByLnZlcnNpb25cbiAgICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgIGVuZFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwbHVzICh6ZXJvLCBwbHVzKSB4IHkgPVxuICBpZiB4ID09IHplcm8gdGhlbiB5XG4gIGVsc2UgaWYgeSA9PSB6ZXJvIHRoZW4geFxuICBlbHNlIHBsdXMgeCB5XG5cbnR5cGUgKCdhLCAnYikgcmVkdWN0aW9uX3RyZWUgPVxuICB8IFJlZF9sZWFmXG4gIHwgUmVkX25vZGUgb2Yge1xuICAgICAgY2VsbDogJ2Egcm93O1xuICAgICAgYmluZGluZzogJ2EgYmluZGluZztcbiAgICAgIHJlZHVjdGlvbjogJ2I7XG4gICAgICBhZ2dyZWdhdGU6ICdiO1xuICAgICAgbGVmdCA6ICgnYSwgJ2IpIHJlZHVjdGlvbl90cmVlO1xuICAgICAgcmlnaHQgOiAoJ2EsICdiKSByZWR1Y3Rpb25fdHJlZTtcbiAgICB9XG5cbnR5cGUgKCdhLCAnYikgcmVkdWN0aW9uID0ge1xuICBtdXRhYmxlIHZlcnNpb246IGludDtcbiAgc291cmNlOiAnYSB0cmVlO1xuICBtdXRhYmxlIHJlc3VsdCA6ICgnYSwgJ2IpIHJlZHVjdGlvbl90cmVlO1xuICBtdXRhYmxlIGdlbmVyYXRpb246IHVuaXQgcmVmO1xuICBtYXBwZXI6ICdhIHJvdyAtPiAnYSAtPiAnYjtcbiAgbW9ub2lkOiAnYiBMd2RfdXRpbHMubW9ub2lkO1xufVxuXG5cbmxldCBleHRyYWN0X2JpbmRpbmdzIHRyZWUgPVxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICAgIHwgUmVkX2xlYWYgLT4gYWNjXG4gICAgfCBSZWRfbm9kZSBybm9kZSAtPlxuICAgICAgbGV0IGFjYyA9IGF1eCBhY2Mgcm5vZGUucmlnaHQgaW5cbiAgICAgIGxldCBhY2MgPSBtYXRjaCBybm9kZS5iaW5kaW5nIHdpdGhcbiAgICAgICAgfCBVbmJvdW5kIC0+IGFjY1xuICAgICAgICB8IEJvdW5kIHsgdmFsaWQgPSBmYWxzZTsgXyB9IC0+IGFjY1xuICAgICAgICB8IF8gLT4gKHJub2RlLmJpbmRpbmcsIHJub2RlLnJlZHVjdGlvbikgOjogYWNjXG4gICAgICBpblxuICAgICAgYXV4IGFjYyBybm9kZS5sZWZ0XG4gIGluXG4gIGF1eCBbXSB0cmVlXG5cbmxldCBmdWxsX3JlYnVpbGQgcmVkIHRyZWUgPVxuICBsZXQgYmluZGluZ3MgPSByZWYgKGV4dHJhY3RfYmluZGluZ3MgcmVkLnJlc3VsdCkgaW5cbiAgbGV0IHJlYyBhdXggPSBmdW5jdGlvblxuICAgIHwgTm9kZSBub2RlIGFzIGNlbGwgLT5cbiAgICAgIGxldCBsZWZ0ID0gYXV4IG5vZGUubGVmdCBpblxuICAgICAgbGV0IHJlZHVjdGlvbiA9XG4gICAgICAgIG1hdGNoIG5vZGUuYmluZGluZywgIWJpbmRpbmdzIHdpdGhcbiAgICAgICAgfCBVbmJvdW5kLCBfIC0+IGZzdCByZWQubW9ub2lkXG4gICAgICAgIHwgYmluZGluZywgKChiaW5kaW5nJywgcmVkdWN0aW9uKSA6OiBiaW5kaW5ncycpXG4gICAgICAgICAgd2hlbiBiaW5kaW5nID09IGJpbmRpbmcnIC0+XG4gICAgICAgICAgYmluZGluZ3MgOj0gYmluZGluZ3MnO1xuICAgICAgICAgIHJlZHVjdGlvblxuICAgICAgICB8IEJvdW5kIGIsIF8gLT4gYXNzZXJ0IGIudmFsaWQ7IHJlZC5tYXBwZXIgY2VsbCBiLnZhbHVlXG4gICAgICBpblxuICAgICAgbGV0IHJpZ2h0ID0gYXV4IG5vZGUucmlnaHQgaW5cbiAgICAgIGxldCBhZ2dyZWdhdGUgPSBtYXRjaCBsZWZ0IHdpdGhcbiAgICAgICAgfCBSZWRfbGVhZiAtPiByZWR1Y3Rpb25cbiAgICAgICAgfCBSZWRfbm9kZSByIC0+IHBsdXMgcmVkLm1vbm9pZCByLmFnZ3JlZ2F0ZSByZWR1Y3Rpb25cbiAgICAgIGluXG4gICAgICBsZXQgYWdncmVnYXRlID0gbWF0Y2ggcmlnaHQgd2l0aFxuICAgICAgICB8IFJlZF9sZWFmIC0+IGFnZ3JlZ2F0ZVxuICAgICAgICB8IFJlZF9ub2RlIHIgLT4gcGx1cyByZWQubW9ub2lkIGFnZ3JlZ2F0ZSByLmFnZ3JlZ2F0ZVxuICAgICAgaW5cbiAgICAgIFJlZF9ub2RlIHtcbiAgICAgICAgY2VsbDtcbiAgICAgICAgYmluZGluZyA9IG5vZGUuYmluZGluZztcbiAgICAgICAgcmVkdWN0aW9uO1xuICAgICAgICBhZ2dyZWdhdGU7XG4gICAgICAgIGxlZnQ7XG4gICAgICAgIHJpZ2h0O1xuICAgICAgfVxuICAgIHwgTGVhZiAtPiBSZWRfbGVhZlxuICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICBpblxuICBsZXQgcmVzdWx0ID0gYXV4IHRyZWUgaW5cbiAgYXNzZXJ0ICghYmluZGluZ3MgPSBbXSk7XG4gIHJlc3VsdFxuXG5sZXQgZXh0cmFjdF9mcmluZ2UgdmVyc2lvbiB0cmVlID1cbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgICB8IFJlZF9sZWFmIC0+IGFjY1xuICAgIHwgUmVkX25vZGUgcm5vZGUgYXMgdHJlZSAtPlxuICAgICAgbWF0Y2ggcm5vZGUuY2VsbCB3aXRoXG4gICAgICB8IE5vZGUgbm9kZSB3aGVuIG5vZGUudmVyc2lvbiA8PSB2ZXJzaW9uIC0+IHRyZWUgOjogYWNjXG4gICAgICB8IF8gLT5cbiAgICAgICAgbGV0IGFjYyA9IGF1eCBhY2Mgcm5vZGUucmlnaHQgaW5cbiAgICAgICAgbGV0IGFjYyA9IG1hdGNoIHJub2RlLmJpbmRpbmcgd2l0aFxuICAgICAgICAgIHwgVW5ib3VuZCAtPiBhY2NcbiAgICAgICAgICB8IEJvdW5kIHsgdmFsaWQgPSBmYWxzZTsgXyB9IC0+IGFjY1xuICAgICAgICAgIHwgXyAtPiB0cmVlIDo6IGFjY1xuICAgICAgICBpblxuICAgICAgICBhdXggYWNjIHJub2RlLmxlZnRcbiAgaW5cbiAgYXV4IFtdIHRyZWVcblxubGV0IGluY3JlbWVudGFsX3JlYnVpbGQgcmVkIHZlcnNpb24gdHJlZSA9XG4gIGxldCBmcmluZ2UgPSByZWYgKGV4dHJhY3RfZnJpbmdlIHZlcnNpb24gcmVkLnJlc3VsdCkgaW5cbiAgbGV0IHJlYyBhdXggPSBmdW5jdGlvblxuICAgIHwgTm9kZSBub2RlIGFzIGNlbGwgd2hlbiBub2RlLnZlcnNpb24gPD0gdmVyc2lvbiAtPlxuICAgICAgYmVnaW4gbWF0Y2ggIWZyaW5nZSB3aXRoXG4gICAgICAgIHwgKFJlZF9ub2RlIHJub2RlIGFzIHJlZHVjdGlvbikgOjogZnJpbmdlJyAtPlxuICAgICAgICAgIGFzc2VydCAocm5vZGUuY2VsbCA9PSBjZWxsKTtcbiAgICAgICAgICBmcmluZ2UgOj0gZnJpbmdlJztcbiAgICAgICAgICByZWR1Y3Rpb25cbiAgICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgZW5kXG4gICAgfCBOb2RlIG5vZGUgYXMgY2VsbCAtPlxuICAgICAgbGV0IGxlZnQgPSBhdXggbm9kZS5sZWZ0IGluXG4gICAgICBsZXQgcmVkdWN0aW9uID1cbiAgICAgICAgbWF0Y2ggbm9kZS5iaW5kaW5nLCAhZnJpbmdlIHdpdGhcbiAgICAgICAgfCBVbmJvdW5kLCBfIC0+IGZzdCByZWQubW9ub2lkXG4gICAgICAgIHwgYmluZGluZywgKFJlZF9ub2RlIHJub2RlIDo6IGZyaW5nZScpXG4gICAgICAgICAgd2hlbiBiaW5kaW5nID09IHJub2RlLmJpbmRpbmcgLT5cbiAgICAgICAgICBmcmluZ2UgOj0gZnJpbmdlJztcbiAgICAgICAgICBybm9kZS5yZWR1Y3Rpb25cbiAgICAgICAgfCBCb3VuZCBiLCBfIC0+XG4gICAgICAgICAgYXNzZXJ0IGIudmFsaWQ7IHJlZC5tYXBwZXIgY2VsbCBiLnZhbHVlXG4gICAgICBpblxuICAgICAgbGV0IHJpZ2h0ID0gYXV4IG5vZGUucmlnaHQgaW5cbiAgICAgIGxldCBhZ2dyZWdhdGUgPSBtYXRjaCBsZWZ0IHdpdGhcbiAgICAgICAgfCBSZWRfbGVhZiAtPiByZWR1Y3Rpb25cbiAgICAgICAgfCBSZWRfbm9kZSByIC0+IHBsdXMgcmVkLm1vbm9pZCByLmFnZ3JlZ2F0ZSByZWR1Y3Rpb25cbiAgICAgIGluXG4gICAgICBsZXQgYWdncmVnYXRlID0gbWF0Y2ggcmlnaHQgd2l0aFxuICAgICAgICB8IFJlZF9sZWFmIC0+IGFnZ3JlZ2F0ZVxuICAgICAgICB8IFJlZF9ub2RlIHIgLT4gcGx1cyByZWQubW9ub2lkIGFnZ3JlZ2F0ZSByLmFnZ3JlZ2F0ZVxuICAgICAgaW5cbiAgICAgIFJlZF9ub2RlIHtcbiAgICAgICAgY2VsbDtcbiAgICAgICAgYmluZGluZyA9IG5vZGUuYmluZGluZztcbiAgICAgICAgcmVkdWN0aW9uO1xuICAgICAgICBhZ2dyZWdhdGU7XG4gICAgICAgIGxlZnQ7XG4gICAgICAgIHJpZ2h0O1xuICAgICAgfVxuICAgIHwgUm9vdCBfIHwgTGVhZiAtPiBSZWRfbGVhZlxuICBpblxuICBsZXQgcmVzdWx0ID0gYXV4IHRyZWUgaW5cbiAgYXNzZXJ0ICghZnJpbmdlID0gW10pO1xuICByZXN1bHRcblxubGV0IGV2YWwgcmVkID1cbiAgbWF0Y2ggcmVkLnNvdXJjZSB3aXRoXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHJvb3QgLT5cbiAgICBsZXQgdmVyc2lvbiA9IHJlYmFsYW5jZSByZWQuc291cmNlIGluXG4gICAgaWYgdHJ1ZSB0aGVuIChcbiAgICAgIGlmIHJlZC5nZW5lcmF0aW9uICE9IHJvb3QuZ2VuZXJhdGlvbiB0aGVuIChcbiAgICAgICAgcmVkLmdlbmVyYXRpb24gPC0gcm9vdC5nZW5lcmF0aW9uO1xuICAgICAgICByZWQucmVzdWx0IDwtIGZ1bGxfcmVidWlsZCByZWQgcm9vdC5jaGlsZDtcbiAgICAgICkgZWxzZSAoXG4gICAgICAgIHJlZC5yZXN1bHQgPC0gaW5jcmVtZW50YWxfcmVidWlsZCByZWQgcmVkLnZlcnNpb24gcm9vdC5jaGlsZFxuICAgICAgKTtcbiAgICApIGVsc2UgKFxuICAgICAgcmVkLnJlc3VsdCA8LSBmdWxsX3JlYnVpbGQgcmVkIHJvb3QuY2hpbGQ7XG4gICAgKTtcbiAgICByZWQudmVyc2lvbiA8LSB2ZXJzaW9uO1xuICAgIG1hdGNoIHJlZC5yZXN1bHQgd2l0aFxuICAgIHwgUmVkX2xlYWYgLT4gZnN0IHJlZC5tb25vaWRcbiAgICB8IFJlZF9ub2RlIHIgLT4gci5hZ2dyZWdhdGVcblxubGV0IG9wYXF1ZSA6ICdhIEx3ZC5wcmltIC0+IE9iai50IEx3ZC5wcmltID0gT2JqLm1hZ2ljXG5cbmxldCBtYXBfcmVkdWNlIG1hcHBlciBtb25vaWQgc291cmNlID1cbiAgbGV0IHJlZHVjdGlvbiA9IHtcbiAgICBzb3VyY2U7IG1hcHBlcjsgbW9ub2lkO1xuICAgIHJlc3VsdCA9IFJlZF9sZWFmO1xuICAgIGdlbmVyYXRpb24gPSBub3Rfb3JpZ2luO1xuICAgIHZlcnNpb24gPSAwO1xuICB9IGluXG4gIGxldCBwcmltID0gTHdkLnByaW1cbiAgICAgIH5hY3F1aXJlOihmdW4gc2VsZiAtPlxuICAgICAgICAgIG1hdGNoIHJlZHVjdGlvbi5zb3VyY2Ugd2l0aFxuICAgICAgICAgIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IFJvb3Qgcm9vdCAtPlxuICAgICAgICAgICAgcm9vdC5vbl9pbnZhbGlkYXRlIDwtIG9wYXF1ZSBzZWxmIDo6IHJvb3Qub25faW52YWxpZGF0ZTtcbiAgICAgICAgICAgIHJlZHVjdGlvblxuICAgICAgICApXG4gICAgICB+cmVsZWFzZTooZnVuIHNlbGYgcmVkdWN0aW9uIC0+XG4gICAgICAgICAgbWF0Y2ggcmVkdWN0aW9uLnNvdXJjZSB3aXRoXG4gICAgICAgICAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgUm9vdCByb290IC0+XG4gICAgICAgICAgICByb290Lm9uX2ludmFsaWRhdGUgPC1cbiAgICAgICAgICAgICAgTGlzdC5maWx0ZXIgKCghPSkgKG9wYXF1ZSBzZWxmKSkgcm9vdC5vbl9pbnZhbGlkYXRlXG4gICAgICAgIClcbiAgaW5cbiAgTHdkLm1hcCB+ZjpldmFsIChMd2QuZ2V0X3ByaW0gcHJpbSlcblxubGV0IHJlZHVjZSBtb25vaWQgc291cmNlID0gbWFwX3JlZHVjZSAoZnVuIF8geCAtPiB4KSBtb25vaWQgc291cmNlXG5cbmxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgfCBMZWFmIC0+ICgpXG4gIHwgTm9kZSB0IC0+XG4gICAgaXRlciBmIHQubGVmdDtcbiAgICBiZWdpbiBtYXRjaCB0LmJpbmRpbmcgd2l0aFxuICAgICAgfCBCb3VuZCB4IC0+IGYgeC52YWx1ZVxuICAgICAgfCBVbmJvdW5kIC0+ICgpXG4gICAgZW5kO1xuICAgIGl0ZXIgZiB0LnJpZ2h0XG4gIHwgUm9vdCB0IC0+XG4gICAgaXRlciBmIHQuY2hpbGRcblxubGV0IHJlYyBsZWZ0X21vc3QgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gTm9uZVxuICB8IE5vZGUgbiBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggbGVmdF9tb3N0IG4ubGVmdCB3aXRoXG4gICAgfCBTb21lIF8gYXMgeCAtPiB4XG4gICAgfCBOb25lIC0+IFNvbWUgc2VsZlxuXG5sZXQgcmVjIHJpZ2h0X21vc3QgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gTm9uZVxuICB8IE5vZGUgbiBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggcmlnaHRfbW9zdCBuLnJpZ2h0IHdpdGhcbiAgICB8IFNvbWUgXyBhcyB4IC0+IHhcbiAgICB8IE5vbmUgLT4gU29tZSBzZWxmXG5cbmxldCBmaXJzdCA6ICdhIHQgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHJvb3QgLT4gbGVmdF9tb3N0IHJvb3QuY2hpbGRcblxubGV0IGxhc3QgOiAnYSB0IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCByb290IC0+IHJpZ2h0X21vc3Qgcm9vdC5jaGlsZFxuXG5sZXQgbmV4dCA6ICdhIHJvdyAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiAtPiBOb25lXG4gIHwgTm9kZSBuIGFzIHNlbGYgLT5cbiAgICBtYXRjaCBsZWZ0X21vc3Qgbi5yaWdodCB3aXRoXG4gICAgfCBTb21lIF8gYXMgeCAtPiB4XG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgcmVjIHdhbGtfcm9vdCBzZWxmID0gZnVuY3Rpb25cbiAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFJvb3QgXyAtPiBOb25lXG4gICAgICAgIHwgTm9kZSBuJyBhcyBwYXJlbnQgLT5cbiAgICAgICAgICBpZiBuJy5sZWZ0ID09IHNlbGYgdGhlbiBTb21lIHBhcmVudCBlbHNlIChcbiAgICAgICAgICAgIGFzc2VydCAobicucmlnaHQgPT0gc2VsZik7XG4gICAgICAgICAgICB3YWxrX3Jvb3QgcGFyZW50IG4nLnBhcmVudFxuICAgICAgICAgIClcbiAgICAgIGluXG4gICAgICB3YWxrX3Jvb3Qgc2VsZiBuLnBhcmVudFxuXG5sZXQgcHJldiA6ICdhIHJvdyAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiAtPiBOb25lXG4gIHwgTm9kZSBuIGFzIHNlbGYgLT5cbiAgICBtYXRjaCByaWdodF9tb3N0IG4ubGVmdCB3aXRoXG4gICAgfCBTb21lIF8gYXMgeCAtPiB4XG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgcmVjIHdhbGtfcm9vdCBzZWxmID0gZnVuY3Rpb25cbiAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFJvb3QgXyAtPiBOb25lXG4gICAgICAgIHwgTm9kZSBuJyBhcyBwYXJlbnQgLT5cbiAgICAgICAgICBpZiBuJy5yaWdodCA9PSBzZWxmIHRoZW4gU29tZSBwYXJlbnQgZWxzZSAoXG4gICAgICAgICAgICBhc3NlcnQgKG4nLmxlZnQgPT0gc2VsZik7XG4gICAgICAgICAgICB3YWxrX3Jvb3QgcGFyZW50IG4nLnBhcmVudFxuICAgICAgICAgIClcbiAgICAgIGluXG4gICAgICB3YWxrX3Jvb3Qgc2VsZiBuLnBhcmVudFxuIiwiXG50eXBlICErJ2EgdCA9XG5cblxuICB8IE5pbFxuICB8IExlYWYgb2YgeyBtdXRhYmxlIG1hcms6IGludDsgdjogJ2E7IH1cbiAgfCBKb2luIG9mIHsgbXV0YWJsZSBtYXJrOiBpbnQ7IGw6ICdhIHQ7IHI6ICdhIHQ7IH1cblxudHlwZSAnYSBzZXEgPSAnYSB0XG5cbmxldCBlbXB0eSA9IE5pbFxuXG5sZXQgZWxlbWVudCB2ID0gTGVhZiB7IG1hcmsgPSAwOyB2IH1cblxubGV0IG1hc2tfYml0cyA9IDJcblxubGV0IG1heGkgYSBiIDogaW50ID0gaWYgYiA+IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgcmFuayA9IGZ1bmN0aW9uXG4gIHwgTmlsIC0+IDBcbiAgfCBMZWFmIHQgLT5cbiAgICBpZiB0Lm1hcmsgPD4gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkx3ZF9zZXEucmFuazogbm9kZSBpcyBtYXJrZWRcIjtcbiAgICAwXG4gIHwgSm9pbiB0IC0+XG4gICAgaWYgdC5tYXJrIGxhbmQgbWFza19iaXRzIDw+IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJMd2Rfc2VxLnJhbms6IG5vZGUgaXMgbWFya2VkXCI7XG4gICAgdC5tYXJrIGxzciBtYXNrX2JpdHNcblxubGV0IGNvbmNhdCBhIGIgPSBtYXRjaCBhLCBiIHdpdGhcbiAgfCBOaWwsIHggfCB4LCBOaWwgLT4geFxuICB8IGwsIHIgLT4gSm9pbiB7IG1hcmsgPSAobWF4aSAocmFuayBsKSAocmFuayByKSArIDEpIGxzbCBtYXNrX2JpdHM7IGw7IHIgfVxuXG50eXBlICgnYSwgJ2IpIHZpZXcgPVxuICB8IEVtcHR5XG4gIHwgRWxlbWVudCBvZiAnYVxuICB8IENvbmNhdCBvZiAnYiAqICdiXG5cbmxldCB2aWV3ID0gZnVuY3Rpb25cbiAgfCBOaWwgICAgLT4gRW1wdHlcbiAgfCBMZWFmIHQgLT4gRWxlbWVudCB0LnZcbiAgfCBKb2luIHQgLT4gQ29uY2F0ICh0LmwsIHQucilcblxubW9kdWxlIEJhbGFuY2VkIDogc2lnXG4gIHR5cGUgJ2EgdCA9IHByaXZhdGUgJ2Egc2VxXG4gIHZhbCBlbXB0eSA6ICdhIHRcbiAgdmFsIGVsZW1lbnQgOiAnYSAtPiAnYSB0XG4gIHZhbCBjb25jYXQgOiAnYSB0IC0+ICdhIHQgLT4gJ2EgdFxuXG4gIHZhbCB2aWV3IDogJ2EgdCAtPiAoJ2EsICdhIHQpIHZpZXdcbmVuZCA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBzZXFcblxuICBsZXQgZW1wdHkgPSBlbXB0eVxuICBsZXQgZWxlbWVudCA9IGVsZW1lbnRcblxuICBsZXQgY2hlY2sgbCByID0gYWJzIChsIC0gcikgPD0gMVxuXG4gIGxldCByZWMgbm9kZV9sZWZ0IGwgciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXIgdGhlbiBjb25jYXQgbCByIGVsc2UgbWF0Y2ggbCB3aXRoXG4gICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgSm9pbiB0IC0+XG4gICAgICAgIGlmIGNoZWNrIChyYW5rIHQubCkgbWxcbiAgICAgICAgdGhlbiBjb25jYXQgdC5sIChub2RlX2xlZnQgdC5yIHIpXG4gICAgICAgIGVsc2UgbWF0Y2ggdC5yIHdpdGhcbiAgICAgICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IEpvaW4gdHIgLT5cbiAgICAgICAgICAgIGxldCB0cnIgPSBub2RlX2xlZnQgdHIuciByIGluXG4gICAgICAgICAgICBpZiBjaGVjayAoMSArIG1heGkgKHJhbmsgdC5sKSAocmFuayB0ci5sKSkgKHJhbmsgdHJyKVxuICAgICAgICAgICAgdGhlbiBjb25jYXQgKGNvbmNhdCB0LmwgdHIubCkgdHJyXG4gICAgICAgICAgICBlbHNlIGNvbmNhdCB0LmwgKGNvbmNhdCB0ci5sIHRycilcblxuICBsZXQgcmVjIG5vZGVfcmlnaHQgbCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtciBtbCB0aGVuIGNvbmNhdCBsIHIgZWxzZSBtYXRjaCByIHdpdGhcbiAgICAgIHwgTmlsIHwgTGVhZiBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBKb2luIHQgLT5cbiAgICAgICAgaWYgY2hlY2sgKHJhbmsgdC5yKSBtclxuICAgICAgICB0aGVuIGNvbmNhdCAobm9kZV9yaWdodCBsIHQubCkgdC5yXG4gICAgICAgIGVsc2UgbWF0Y2ggdC5sIHdpdGhcbiAgICAgICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IEpvaW4gdGwgLT5cbiAgICAgICAgICAgIGxldCB0bGwgPSBub2RlX3JpZ2h0IGwgdGwubCBpblxuICAgICAgICAgICAgaWYgY2hlY2sgKDEgKyBtYXhpIChyYW5rIHRsLnIpIChyYW5rIHQucikpIChyYW5rIHRsbClcbiAgICAgICAgICAgIHRoZW4gY29uY2F0IHRsbCAoY29uY2F0IHRsLnIgdC5yKVxuICAgICAgICAgICAgZWxzZSBjb25jYXQgKGNvbmNhdCB0bGwgdGwucikgdC5yXG5cbiAgbGV0IGNvbmNhdCBsIHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1sIG1yXG4gICAgdGhlbiBjb25jYXQgbCByXG4gICAgZWxzZSBpZiBtbCA8PSBtclxuICAgIHRoZW4gbm9kZV9yaWdodCBsIHJcbiAgICBlbHNlIG5vZGVfbGVmdCBsIHJcblxuICBsZXQgdmlldyA9IHZpZXdcbmVuZFxuXG5tb2R1bGUgTWFya2luZyA6IHNpZ1xuICB0eXBlIG1hcmsgPSAoKnByaXZhdGUqKSBpbnRcbiAgdmFsIGlzX3NoYXJlZCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfbm90X3NoYXJlZCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfbm9uZSA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfYm90aCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfb2xkIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19uZXcgOiBtYXJrIC0+IGJvb2xcbiAgKCp2YWwgaGFzX29sZCA6IG1hcmsgLT4gYm9vbCopXG4gICgqdmFsIGhhc19uZXcgOiBtYXJrIC0+IGJvb2wqKVxuICB2YWwgc2V0X2JvdGggOiBtYXJrIC0+IG1hcmtcbiAgdmFsIHVubWFyayA6IG1hcmsgLT4gbWFya1xuICB2YWwgZ2V0X2luZGV4IDogbWFyayAtPiBpbnRcbiAgdmFsIHdpdGhfaW5kZXhfbmV3IDogaW50IC0+IG1hcmtcblxuICB0eXBlIHN0YXRzXG4gIHZhbCBtYXJrZWQgOiBzdGF0cyAtPiBpbnRcbiAgdmFsIHNoYXJlZCA6IHN0YXRzIC0+IGludFxuICB2YWwgYmxvY2tlZCA6IHN0YXRzIC0+IGludFxuXG4gIHR5cGUgdHJhdmVyc2FsXG4gIHZhbCBvbGRfc3RhdHMgOiB0cmF2ZXJzYWwgLT4gc3RhdHNcbiAgdmFsIG5ld19zdGF0cyA6IHRyYXZlcnNhbCAtPiBzdGF0c1xuXG4gIHZhbCB1bnNhZmVfdHJhdmVyc2UgOiBvbGRfcm9vdDpfIHNlcSAtPiBuZXdfcm9vdDpfIHNlcSAtPiB0cmF2ZXJzYWxcblxuICB2YWwgcmVzdG9yZSA6IF8gc2VxIC0+IHVuaXRcbmVuZCA9IHN0cnVjdFxuICB0eXBlIG1hcmsgPSBpbnRcblxuICBsZXQgbWFza19ub25lID0gMFxuICBsZXQgbWFza19vbGQgID0gMVxuICBsZXQgbWFza19uZXcgID0gMlxuICBsZXQgbWFza19ib3RoID0gM1xuXG4gIGxldCBpc19zaGFyZWQgbSA9IG0gPSAtMVxuICBsZXQgaXNfbm90X3NoYXJlZCBtID0gbSA8PiAtMVxuICBsZXQgaXNfbm9uZSBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfbm9uZVxuICBsZXQgaXNfYm90aCBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfYm90aFxuICBsZXQgaXNfb2xkICBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfb2xkXG4gIGxldCBpc19uZXcgIG0gPSBtIGxhbmQgbWFza19ib3RoID0gbWFza19uZXdcbiAgKCpsZXQgaGFzX29sZCBtID0gbSBsYW5kIG1hc2tfb2xkIDw+IDAqKVxuICAoKmxldCBoYXNfbmV3IG0gPSBtIGxhbmQgbWFza19uZXcgPD4gMCopXG4gIGxldCBzZXRfYm90aCBtID0gbSBsb3IgbWFza19ib3RoXG5cbiAgbGV0IGdldF9pbmRleCBtID0gbSBsc3IgbWFza19iaXRzXG4gIGxldCB3aXRoX2luZGV4X25ldyBpbmRleCA9IChpbmRleCBsc2wgbWFza19iaXRzKSBsb3IgbWFza19uZXdcblxuICBsZXQgdW5tYXJrIG0gPSBtIGxhbmQgbG5vdCBtYXNrX2JvdGhcblxuICB0eXBlIHN0YXRzID0ge1xuICAgIG11dGFibGUgbWFya2VkOiBpbnQ7XG4gICAgbXV0YWJsZSBzaGFyZWQ6IGludDtcbiAgICBtdXRhYmxlIGJsb2NrZWQ6IGludDtcbiAgfVxuICBsZXQgbWFya2VkIHMgPSBzLm1hcmtlZFxuICBsZXQgc2hhcmVkIHMgPSBzLnNoYXJlZFxuICBsZXQgYmxvY2tlZCBzID0gcy5ibG9ja2VkXG5cbiAgbGV0IG1rX3N0YXRzICgpID0geyBtYXJrZWQgPSAwOyBzaGFyZWQgPSAwOyBibG9ja2VkID0gMCB9XG5cbiAgbGV0IG5ld19tYXJrZWQgc3RhdHMgPSBzdGF0cy5tYXJrZWQgPC0gc3RhdHMubWFya2VkICsgMVxuICBsZXQgbmV3X3NoYXJlZCBzdGF0cyA9IHN0YXRzLnNoYXJlZCA8LSBzdGF0cy5zaGFyZWQgKyAxXG4gIGxldCBuZXdfYmxvY2tlZCBzdGF0cyA9IHN0YXRzLmJsb2NrZWQgPC0gc3RhdHMuYmxvY2tlZCArIDFcblxuICBsZXQgcmVjIGJsb2NrIHN0YXRzIG1hc2sgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBMZWFmIHQnIC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gbWFza19ib3RoICYmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gMFxuICAgICAgdGhlbiAoXG4gICAgICAgIGlmIG1hcmsgbGFuZCBtYXNrID0gMCB0aGVuIG5ld19tYXJrZWQgc3RhdHMgZWxzZSBhc3NlcnQgZmFsc2U7XG4gICAgICAgIG5ld19ibG9ja2VkIHN0YXRzO1xuICAgICAgICB0Jy5tYXJrIDwtIG1hcmsgbG9yIG1hc2tfYm90aFxuICAgICAgKVxuICAgIHwgSm9pbiB0JyAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IG1hc2tfYm90aCAmJiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IDBcbiAgICAgIHRoZW4gKFxuICAgICAgICBpZiBtYXJrIGxhbmQgbWFzayA9IDAgdGhlbiBuZXdfbWFya2VkIHN0YXRzIGVsc2UgYXNzZXJ0IGZhbHNlO1xuICAgICAgICBuZXdfYmxvY2tlZCBzdGF0cztcbiAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrX2JvdGg7XG4gICAgICAgIGJsb2NrIHN0YXRzIG1hc2sgdCcubDtcbiAgICAgICAgYmxvY2sgc3RhdHMgbWFzayB0Jy5yO1xuICAgICAgKVxuXG4gIGxldCBlbnF1ZXVlIHN0YXRzIHEgbWFzayA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IExlYWYgdCcgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayBsYW5kIG1hc2sgPSAwIHRoZW4gKFxuICAgICAgICAoKiBOb3QgeWV0IHNlZW4gKilcbiAgICAgICAgbmV3X21hcmtlZCBzdGF0cztcbiAgICAgICAgaWYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiAwIHRoZW4gKFxuICAgICAgICAgICgqIE5ld2x5IHNoYXJlZCwgY2xlYXIgbWFzayAqKVxuICAgICAgICAgIHQnLm1hcmsgPC0gLTE7XG4gICAgICAgICAgbmV3X2Jsb2NrZWQgc3RhdHM7XG4gICAgICAgICAgbmV3X3NoYXJlZCBzdGF0cztcbiAgICAgICAgKSBlbHNlXG4gICAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrO1xuICAgICAgKTtcbiAgICAgIGlmIG1hcmsgPD4gLTEgJiYgbWFyayBsYW5kIG1hc2tfYm90aCA9IG1hc2tfYm90aCB0aGVuIChcbiAgICAgICAgdCcubWFyayA8LSAtMTtcbiAgICAgICAgbmV3X3NoYXJlZCBzdGF0c1xuICAgICAgKVxuICAgIHwgSm9pbiB0JyBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgbGFuZCBtYXNrID0gMCB0aGVuIChcbiAgICAgICAgKCogTm90IHlldCBzZWVuICopXG4gICAgICAgIG5ld19tYXJrZWQgc3RhdHM7XG4gICAgICAgIGlmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gMCB0aGVuIChcbiAgICAgICAgICAoKiBOZXdseSBzaGFyZWQsIGNsZWFyIG1hc2sgKilcbiAgICAgICAgICB0Jy5tYXJrIDwtIC0xO1xuICAgICAgICAgIG5ld19ibG9ja2VkIHN0YXRzO1xuICAgICAgICAgIG5ld19zaGFyZWQgc3RhdHM7XG4gICAgICAgICAgYmxvY2sgc3RhdHMgbWFzayB0Jy5sO1xuICAgICAgICAgIGJsb2NrIHN0YXRzIG1hc2sgdCcucjtcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAoKiBGaXJzdCBtYXJrICopXG4gICAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrO1xuICAgICAgICAgIFF1ZXVlLnB1c2ggdCBxXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBpZiBtYXJrIDw+IC0xICYmIG1hcmsgbGFuZCBtYXNrX2JvdGggPSBtYXNrX2JvdGggdGhlbiAoXG4gICAgICAgIHQnLm1hcmsgPC0gLTE7XG4gICAgICAgIG5ld19zaGFyZWQgc3RhdHNcbiAgICAgIClcblxuICBsZXQgZGVxdWV1ZSBzdGF0cyBxIG1hc2sgPVxuICAgIG1hdGNoIFF1ZXVlLnBvcCBxIHdpdGhcbiAgICB8IEpvaW4gdCAtPlxuICAgICAgaWYgdC5tYXJrIGxhbmQgbWFza19ib3RoID0gbWFzayB0aGVuIChcbiAgICAgICAgZW5xdWV1ZSBzdGF0cyBxIG1hc2sgdC5sO1xuICAgICAgICBlbnF1ZXVlIHN0YXRzIHEgbWFzayB0LnI7XG4gICAgICApXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIGxldCB0cmF2ZXJzZTEgc3RhdHMgcSBtYXNrID1cbiAgICB3aGlsZSBub3QgKFF1ZXVlLmlzX2VtcHR5IHEpIGRvXG4gICAgICBkZXF1ZXVlIHN0YXRzIHEgbWFza1xuICAgIGRvbmVcblxuICBsZXQgcmVjIHRyYXZlcnNlIHNvbGQgc25ldyBxb2xkIHFuZXcgPVxuICAgIGlmIFF1ZXVlLmlzX2VtcHR5IHFvbGQgdGhlblxuICAgICAgdHJhdmVyc2UxIHNuZXcgcW5ldyBtYXNrX25ld1xuICAgIGVsc2UgaWYgUXVldWUuaXNfZW1wdHkgcW5ldyB0aGVuXG4gICAgICB0cmF2ZXJzZTEgc29sZCBxb2xkIG1hc2tfb2xkXG4gICAgZWxzZSAoXG4gICAgICBkZXF1ZXVlIHNvbGQgcW9sZCBtYXNrX29sZDtcbiAgICAgIGRlcXVldWUgc25ldyBxbmV3IG1hc2tfbmV3O1xuICAgICAgdHJhdmVyc2Ugc29sZCBzbmV3IHFvbGQgcW5ld1xuICAgIClcblxuICB0eXBlIHRyYXZlcnNhbCA9IHtcbiAgICBvbGRfc3RhdHM6IHN0YXRzO1xuICAgIG5ld19zdGF0czogc3RhdHM7XG4gIH1cblxuICBsZXQgb2xkX3N0YXRzIHRyID0gdHIub2xkX3N0YXRzXG4gIGxldCBuZXdfc3RhdHMgdHIgPSB0ci5uZXdfc3RhdHNcblxuICBsZXQgdW5zYWZlX3RyYXZlcnNlIH5vbGRfcm9vdCB+bmV3X3Jvb3QgPVxuICAgIGxldCBvbGRfc3RhdHMgPSBta19zdGF0cyAoKSBpblxuICAgIGxldCBuZXdfc3RhdHMgPSBta19zdGF0cyAoKSBpblxuICAgIGxldCBvbGRfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgbmV3X3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgZW5xdWV1ZSBvbGRfc3RhdHMgb2xkX3F1ZXVlIG1hc2tfb2xkIG9sZF9yb290O1xuICAgIGVucXVldWUgbmV3X3N0YXRzIG5ld19xdWV1ZSBtYXNrX25ldyBuZXdfcm9vdDtcbiAgICB0cmF2ZXJzZSBvbGRfc3RhdHMgbmV3X3N0YXRzIG9sZF9xdWV1ZSBuZXdfcXVldWU7XG4gICAge29sZF9zdGF0czsgbmV3X3N0YXRzfVxuXG4gIGxldCByZXN0b3JlID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgTGVhZiB0IC0+IHQubWFyayA8LSAwXG4gICAgfCBKb2luIHQgLT5cbiAgICAgIHQubWFyayA8LSAobWF4aSAocmFuayB0LmwpIChyYW5rIHQucikgKyAxKSBsc2wgbWFza19iaXRzXG5lbmRcblxuKCogTWFya3MgZ28gdGhyb3VnaCBtYW55IHN0YXRlcy5cblxuICAgQSBtYXJrIGlzIHVzdWFsbHkgc3BsaXQgaW4gdHdvIHBhcnRzOlxuICAgLSB0aGUgbWFzaywgbWFkZSBvZiB0aGUgdHdvIGxlYXN0IHNpZ25pZmljYW50IGJpdHNcbiAgIC0gdGhlIGluZGV4IGlzIGFuIHVuc2lnbmVkIGludGVnZXIgZm9ybWVkIG9mIGFsbCB0aGUgcmVtYWluaW5nIGJpdHNcblxuICAgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgZGlzdGluZ3Vpc2hlZCBtYXNrIHdpdGggdmFsdWUgLTEgKGFsbCBiaXRzIHNldCB0byAxKVxuICAgdGhhdCBkZW5vdGUgYSBcImxvY2tlZFwiIG5vZGUuXG5cbiAgIFdoZW4gdGhlIG1hc2sgaXMgMCwgdGhlIGluZGV4IGRlbm90ZXMgdGhlIHJhbmsgb2YgdGhlIG5vZGU6IHRoZSBkZXB0aCBvZlxuICAgdGhlIHRyZWUgcm9vdGVkIGF0IHRoaXMgbm9kZS5cbiAgIFdoZW4gdGhlIG1hc2sgaXMgbm9uLXplcm8sIHRoZSBpbmRleCBtZWFuaW5nIGlzIGxlZnQgdG8gdGhlIHRyYXZlcnNhbFxuICAgYWxnb3JpdGhtLlxuICAgUmVzdG9yaW5nIHRoZSBtYXJrIHNldHMgdGhlIG1hc2sgdG8gMCBhbmQgdGhlIGluZGV4dCB0byB0aGUgcmFuayxcbiAgIGJ1dCBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlIGNoaWxkcmVuIG9mIHRoZSBub2RlIGFyZSB0aGVtc2VsdmVzIHJlc3RvcmVkLlxuKilcblxubW9kdWxlIFJlZHVjZXIgPSBzdHJ1Y3RcbiAgdHlwZSAoKydhLCAnYikgeGZvcm0gPVxuICAgIHwgWEVtcHR5XG4gICAgfCBYTGVhZiBvZiB7IGE6ICdhIHQ7IG11dGFibGUgYjogJ2Igb3B0aW9uOyB9XG4gICAgfCBYSm9pbiBvZiB7IGE6ICdhIHQ7IG11dGFibGUgYjogJ2Igb3B0aW9uO1xuICAgICAgICAgICAgICAgICBsOiAoJ2EsICdiKSB4Zm9ybTsgcjogKCdhLCAnYikgeGZvcm07IH1cblxuICB0eXBlICgnYSwgJ2IpIHVubWFya19zdGF0ZSA9IHtcbiAgICBkcm9wcGVkIDogJ2Igb3B0aW9uIGFycmF5O1xuICAgIG11dGFibGUgZHJvcHBlZF9sZWFmIDogaW50O1xuICAgIG11dGFibGUgZHJvcHBlZF9qb2luIDogaW50O1xuICAgIHNoYXJlZCA6ICdhIHNlcSBhcnJheTtcbiAgICBzaGFyZWRfeCA6ICgnYSwgJ2IpIHhmb3JtIGxpc3QgYXJyYXk7XG4gICAgbXV0YWJsZSBzaGFyZWRfaW5kZXg6IGludDtcbiAgfVxuXG4gIGxldCBuZXh0X3NoYXJlZF9pbmRleCBzdCA9XG4gICAgbGV0IHJlc3VsdCA9IHN0LnNoYXJlZF9pbmRleCBpblxuICAgIHN0LnNoYXJlZF9pbmRleCA8LSByZXN1bHQgKyAxO1xuICAgIHJlc3VsdFxuXG4gIGxldCByZWMgdW5ibG9jayA9IGZ1bmN0aW9uXG4gICAgfCBYRW1wdHkgLT4gKClcbiAgICB8IFhMZWFmIHthID0gTmlsIHwgSm9pbiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFhKb2luIHthID0gTmlsIHwgTGVhZiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFhMZWFmIHthID0gTGVhZiB0JzsgX30gLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19ub3Rfc2hhcmVkIG1hcmsgJiYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlblxuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgfCBYSm9pbiB7YSA9IEpvaW4gdCc7IGw7IHI7IF99IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfbm90X3NoYXJlZCBtYXJrICYmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgIHVuYmxvY2sgbDtcbiAgICAgICAgdW5ibG9jayByXG4gICAgICApXG5cbiAgbGV0IHJlYyB1bm1hcmtfb2xkIHN0ID0gZnVuY3Rpb25cbiAgICB8IFhFbXB0eSAtPiAoKVxuICAgIHwgWExlYWYge2EgPSBOaWwgfCBKb2luIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgIHwgWEpvaW4ge2EgPSBOaWwgfCBMZWFmIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgIHwgWExlYWYge2EgPSBMZWFmIHQnIGFzIGE7IGJ9IGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19vbGQgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGRyb3BwZWRfbGVhZiA9IHN0LmRyb3BwZWRfbGVhZiBpblxuICAgICAgICBpZiBkcm9wcGVkX2xlYWYgPiAtMSB0aGVuIChcbiAgICAgICAgICBzdC5kcm9wcGVkLihkcm9wcGVkX2xlYWYpIDwtIGI7XG4gICAgICAgICAgc3QuZHJvcHBlZF9sZWFmIDwtIGRyb3BwZWRfbGVhZiArIDE7XG4gICAgICAgICAgYXNzZXJ0IChzdC5kcm9wcGVkX2xlYWYgPD0gc3QuZHJvcHBlZF9qb2luKTtcbiAgICAgICAgKTtcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrXG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19zaGFyZWQgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbmV4dF9zaGFyZWRfaW5kZXggc3QgaW5cbiAgICAgICAgc3Quc2hhcmVkLihpbmRleCkgPC0gYTtcbiAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSBbdF07XG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy53aXRoX2luZGV4X25ldyBpbmRleDtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBNYXJraW5nLmdldF9pbmRleCBtYXJrIGluXG4gICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0gdCA6OiBzdC5zaGFyZWRfeC4oaW5kZXgpO1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgICAgKCp0Jy5tYXJrIDwtIG1hcmsgbGFuZCBsbm90IGJvdGhfbWFzayopXG4gICAgICApXG4gICAgfCBYSm9pbiB7YSA9IEpvaW4gdCcgYXMgYTsgbDsgcjsgYn0gYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX3NoYXJlZCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBuZXh0X3NoYXJlZF9pbmRleCBzdCBpblxuICAgICAgICBzdC5zaGFyZWQuKGluZGV4KSA8LSBhO1xuICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIFt0XTtcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLndpdGhfaW5kZXhfbmV3IGluZGV4O1xuICAgICAgICB1bmJsb2NrIGw7XG4gICAgICAgIHVuYmxvY2sgcjtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW4gKFxuICAgICAgICBpZiBzdC5kcm9wcGVkX2pvaW4gPiAtMSB0aGVuIChcbiAgICAgICAgICBsZXQgZHJvcHBlZF9qb2luID0gc3QuZHJvcHBlZF9qb2luIC0gMSBpblxuICAgICAgICAgIHN0LmRyb3BwZWQuKGRyb3BwZWRfam9pbikgPC0gYjtcbiAgICAgICAgICBzdC5kcm9wcGVkX2pvaW4gPC0gZHJvcHBlZF9qb2luO1xuICAgICAgICAgIGFzc2VydCAoc3QuZHJvcHBlZF9sZWFmIDw9IHN0LmRyb3BwZWRfam9pbik7XG4gICAgICAgICk7XG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgdW5tYXJrX29sZCBzdCBsO1xuICAgICAgICB1bm1hcmtfb2xkIHN0IHI7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19uZXcgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbWFyayBsc3IgbWFza19iaXRzIGluXG4gICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0gdCA6OiBzdC5zaGFyZWRfeC4oaW5kZXgpO1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgIClcblxuICBsZXQgcHJlcGFyZV9zaGFyZWQgc3QgPVxuICAgIGZvciBpID0gMCB0byBzdC5zaGFyZWRfaW5kZXggLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCBzdC5zaGFyZWQuKGkpIHdpdGhcbiAgICAgICAgfCBOaWwgLT4gKClcbiAgICAgICAgfCBMZWFmIHQgLT4gdC5tYXJrIDwtIE1hcmtpbmcuc2V0X2JvdGggdC5tYXJrXG4gICAgICAgIHwgSm9pbiB0IC0+IHQubWFyayA8LSBNYXJraW5nLnNldF9ib3RoIHQubWFya1xuICAgICAgZW5kO1xuICAgICAgbWF0Y2ggc3Quc2hhcmVkX3guKGkpIHdpdGhcbiAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IFtfXSAtPiAoKVxuICAgICAgfCB4cyAtPiBzdC5zaGFyZWRfeC4oaSkgPC0gTGlzdC5yZXYgeHNcbiAgICBkb25lXG5cbiAgbGV0IHJlYyB1bm1hcmtfbmV3IHN0ID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiBYRW1wdHlcbiAgICB8IExlYWYgdCcgYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX25vdF9zaGFyZWQgbWFyayAmJiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbWFyayBsc3IgbWFza19iaXRzIGluXG4gICAgICAgIG1hdGNoIHN0LnNoYXJlZF94LihpbmRleCkgd2l0aFxuICAgICAgICB8IFtdIC0+IFhMZWFmIHthID0gdDsgYiA9IE5vbmV9XG4gICAgICAgIHwgeCA6OiB4cyAtPiBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIHhzOyB4XG4gICAgICApIGVsc2UgKFxuICAgICAgICB0Jy5tYXJrIDwtIDA7XG4gICAgICAgIFhMZWFmIHthID0gdDsgYiA9IE5vbmV9XG4gICAgICApXG4gICAgfCBKb2luIHQnIGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayA9IC0xIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBuZXh0X3NoYXJlZF9pbmRleCBzdCBpblxuICAgICAgICB0Jy5tYXJrIDwtIDA7XG4gICAgICAgIHN0LnNoYXJlZC4oaW5kZXgpIDwtIHQ7XG4gICAgICAgIGxldCBsID0gdW5tYXJrX25ldyBzdCB0Jy5sIGluXG4gICAgICAgIGxldCByID0gdW5tYXJrX25ldyBzdCB0Jy5yIGluXG4gICAgICAgIFhKb2luIHthID0gdDsgYiA9IE5vbmU7IGw7IHJ9XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG1hcmsgbHNyIG1hc2tfYml0cyBpblxuICAgICAgICBtYXRjaCBzdC5zaGFyZWRfeC4oaW5kZXgpIHdpdGhcbiAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCB4IDo6IHhzIC0+XG4gICAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSB4cztcbiAgICAgICAgICBpZiB4cyA9PSBbXSB0aGVuIHQnLm1hcmsgPC0gMDtcbiAgICAgICAgICB4XG4gICAgICApIGVsc2UgKFxuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIHQnLm1hcms7XG4gICAgICAgIGxldCBsID0gdW5tYXJrX25ldyBzdCB0Jy5sIGluXG4gICAgICAgIGxldCByID0gdW5tYXJrX25ldyBzdCB0Jy5yIGluXG4gICAgICAgIFhKb2luIHthID0gdDsgYiA9IE5vbmU7IGw7IHJ9XG4gICAgICApXG5cbiAgdHlwZSAnYiBkcm9wcGVkID0ge1xuICAgIGxlYXZlczogaW50O1xuICAgIHRhYmxlOiAnYiBvcHRpb24gYXJyYXk7XG4gICAgZXh0cmFfbGVhZjogJ2IgbGlzdDtcbiAgICBleHRyYV9qb2luOiAnYiBsaXN0O1xuICB9XG5cbiAgbGV0IG5vX2Ryb3BwZWQgPVxuICAgIHsgbGVhdmVzID0gMDsgdGFibGUgPSBbfHxdOyBleHRyYV9sZWFmID0gW107IGV4dHJhX2pvaW4gPSBbXSB9XG5cbiAgbGV0IGRpZmYgZ2V0X2Ryb3BwZWQgeG9sZCB0bmV3ID0gbWF0Y2ggeG9sZCwgdG5ldyB3aXRoXG4gICAgfCBYRW1wdHksIE5pbCAtPiBub19kcm9wcGVkLCBYRW1wdHlcbiAgICB8IChYTGVhZiB7YTsgX30gfCBYSm9pbiB7YTsgX30pLCBfIHdoZW4gYSA9PSB0bmV3IC0+IG5vX2Ryb3BwZWQsIHhvbGRcbiAgICB8IF8gLT5cbiAgICAgIGxldCB0cmF2ZXJzYWwgPVxuICAgICAgICBNYXJraW5nLnVuc2FmZV90cmF2ZXJzZVxuICAgICAgICAgIH5vbGRfcm9vdDoobWF0Y2ggeG9sZCB3aXRoXG4gICAgICAgICAgICAgIHwgWEVtcHR5IC0+IGVtcHR5XG4gICAgICAgICAgICAgIHwgKFhMZWFmIHthOyBffSB8IFhKb2luIHthOyBffSkgLT4gYVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH5uZXdfcm9vdDp0bmV3XG4gICAgICBpblxuICAgICAgbGV0IHNvbGQgPSBNYXJraW5nLm9sZF9zdGF0cyB0cmF2ZXJzYWwgaW5cbiAgICAgIGxldCBzbmV3ID0gTWFya2luZy5uZXdfc3RhdHMgdHJhdmVyc2FsIGluXG4gICAgICBsZXQgbmJfZHJvcHBlZCA9XG4gICAgICAgIE1hcmtpbmcubWFya2VkIHNvbGQgLSAoTWFya2luZy5ibG9ja2VkIHNvbGQgKyBNYXJraW5nLmJsb2NrZWQgc25ldylcbiAgICAgIGluXG4gICAgICBsZXQgbmJfc2hhcmVkID1cbiAgICAgICAgTWFya2luZy5zaGFyZWQgc29sZCArIE1hcmtpbmcuc2hhcmVkIHNuZXdcbiAgICAgIGluXG4gICAgICBsZXQgc3QgPSB7XG4gICAgICAgIGRyb3BwZWQgPSBpZiBnZXRfZHJvcHBlZCB0aGVuIEFycmF5Lm1ha2UgbmJfZHJvcHBlZCBOb25lIGVsc2UgW3x8XTtcbiAgICAgICAgZHJvcHBlZF9sZWFmID0gaWYgZ2V0X2Ryb3BwZWQgdGhlbiAwIGVsc2UgLSAxO1xuICAgICAgICBkcm9wcGVkX2pvaW4gPSBpZiBnZXRfZHJvcHBlZCB0aGVuIG5iX2Ryb3BwZWQgZWxzZSAtIDE7XG4gICAgICAgIHNoYXJlZCA9IEFycmF5Lm1ha2UgbmJfc2hhcmVkIE5pbDtcbiAgICAgICAgc2hhcmVkX3ggPSBBcnJheS5tYWtlIG5iX3NoYXJlZCBbXTtcbiAgICAgICAgc2hhcmVkX2luZGV4ID0gMDtcbiAgICAgIH0gaW5cbiAgICAgICgqUHJpbnRmLmVwcmludGYgXCJzb2xkLnNoYXJlZDolZCBzb2xkLm1hcmtlZDolZCBzb2xkLmJsb2NrZWQ6JWRcXG4lIVwiXG4gICAgICAgIHNvbGQuc2hhcmVkIHNvbGQubWFya2VkIHNvbGQuYmxvY2tlZDtcbiAgICAgIFByaW50Zi5lcHJpbnRmIFwic25ldy5zaGFyZWQ6JWQgc25ldy5tYXJrZWQ6JWQgc25ldy5ibG9ja2VkOiVkXFxuJSFcIlxuICAgICAgICBzbmV3LnNoYXJlZCBzbmV3Lm1hcmtlZCBzbmV3LmJsb2NrZWQ7KilcbiAgICAgIHVubWFya19vbGQgc3QgeG9sZDtcbiAgICAgIGFzc2VydCAoc3QuZHJvcHBlZF9sZWFmID0gc3QuZHJvcHBlZF9qb2luKTtcbiAgICAgIHByZXBhcmVfc2hhcmVkIHN0O1xuICAgICAgbGV0IHJlc3VsdCA9IHVubWFya19uZXcgc3QgdG5ldyBpblxuICAgICAgKCpQcmludGYuZXByaW50ZiBcIm5ld19jb21wdXRlZDolZCUhXFxuXCIgIW5ld19jb21wdXRlZDsqKVxuICAgICAgZm9yIGkgPSBzdC5zaGFyZWRfaW5kZXggLSAxIGRvd250byAwIGRvXG4gICAgICAgIE1hcmtpbmcucmVzdG9yZSBzdC5zaGFyZWQuKGkpXG4gICAgICBkb25lO1xuICAgICAgaWYgZ2V0X2Ryb3BwZWQgdGhlbiAoXG4gICAgICAgIGxldCB4bGVhZiA9IHJlZiBbXSBpblxuICAgICAgICBsZXQgeGpvaW4gPSByZWYgW10gaW5cbiAgICAgICAgZm9yIGkgPSAwIHRvIHN0LnNoYXJlZF9pbmRleCAtIDEgZG9cbiAgICAgICAgICBMaXN0Lml0ZXIgKGZ1bmN0aW9uXG4gICAgICAgICAgICAgIHwgWExlYWYgeyBiID0gU29tZSBiOyBffSAtPiB4bGVhZiA6PSBiIDo6ICF4bGVhZlxuICAgICAgICAgICAgICB8IFhKb2luIHsgYiA9IFNvbWUgYjsgX30gLT4geGpvaW4gOj0gYiA6OiAheGpvaW5cbiAgICAgICAgICAgICAgfCBfIC0+ICgpXG4gICAgICAgICAgICApIHN0LnNoYXJlZF94LihpKVxuICAgICAgICBkb25lO1xuICAgICAgICAoeyBsZWF2ZXMgPSBzdC5kcm9wcGVkX2xlYWY7XG4gICAgICAgICAgIHRhYmxlID0gc3QuZHJvcHBlZDtcbiAgICAgICAgICAgZXh0cmFfbGVhZiA9ICF4bGVhZjtcbiAgICAgICAgICAgZXh0cmFfam9pbiA9ICF4am9pbiB9LCByZXN1bHQpXG4gICAgICApIGVsc2VcbiAgICAgICAgbm9fZHJvcHBlZCwgcmVzdWx0XG5cbiAgdHlwZSAoJ2EsICdiKSBtYXBfcmVkdWNlID0ge1xuICAgIG1hcDogJ2EgLT4gJ2I7XG4gICAgcmVkdWNlOiAnYiAtPiAnYiAtPiAnYjtcbiAgfVxuXG4gIGxldCBldmFsIG1hcF9yZWR1Y2UgPSBmdW5jdGlvblxuICAgIHwgWEVtcHR5IC0+IE5vbmVcbiAgICB8IG90aGVyIC0+XG4gICAgICBsZXQgcmVjIGF1eCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgWEVtcHR5IHwgWExlYWYge2EgPSBOaWwgfCBKb2luIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFhMZWFmIHtiID0gU29tZSBiOyBffSB8IFhKb2luIHtiID0gU29tZSBiOyBffSAtPiBiXG4gICAgICAgIHwgWExlYWYgKHthID0gTGVhZiB0JztfIH0gYXMgdCkgLT5cbiAgICAgICAgICBsZXQgcmVzdWx0ID0gbWFwX3JlZHVjZS5tYXAgdCcudiBpblxuICAgICAgICAgIHQuYiA8LSBTb21lIHJlc3VsdDtcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgfCBYSm9pbiB0IC0+XG4gICAgICAgICAgbGV0IGwgPSBhdXggdC5sIGFuZCByID0gYXV4IHQuciBpblxuICAgICAgICAgIGxldCByZXN1bHQgPSBtYXBfcmVkdWNlLnJlZHVjZSBsIHIgaW5cbiAgICAgICAgICB0LmIgPC0gU29tZSByZXN1bHQ7XG4gICAgICAgICAgcmVzdWx0XG4gICAgICBpblxuICAgICAgU29tZSAoYXV4IG90aGVyKVxuXG4gIHR5cGUgKCdhLCAnYikgcmVkdWNlciA9ICgnYSwgJ2IpIG1hcF9yZWR1Y2UgKiAoJ2EsICdiKSB4Zm9ybVxuXG4gIGxldCBtYWtlIH5tYXAgfnJlZHVjZSA9ICh7bWFwOyByZWR1Y2V9LCBYRW1wdHkpXG5cbiAgbGV0IHJlZHVjZSAobWFwX3JlZHVjZSwgdHJlZSA6IF8gcmVkdWNlcikgPVxuICAgIGV2YWwgbWFwX3JlZHVjZSB0cmVlXG5cbiAgbGV0IHVwZGF0ZSAobWFwX3JlZHVjZSwgb2xkX3RyZWUgOiBfIHJlZHVjZXIpIG5ld190cmVlIDogXyByZWR1Y2VyID1cbiAgICBsZXQgXywgdHJlZSA9IGRpZmYgZmFsc2Ugb2xkX3RyZWUgbmV3X3RyZWUgaW5cbiAgICAobWFwX3JlZHVjZSwgdHJlZSlcblxuICBsZXQgdXBkYXRlX2FuZF9nZXRfZHJvcHBlZCAobWFwX3JlZHVjZSwgb2xkX3RyZWUgOiBfIHJlZHVjZXIpIG5ld190cmVlXG4gICAgOiBfIGRyb3BwZWQgKiBfIHJlZHVjZXIgPVxuICAgIGxldCBkcm9wcGVkLCB0cmVlID0gZGlmZiB0cnVlIG9sZF90cmVlIG5ld190cmVlIGluXG4gICAgKGRyb3BwZWQsIChtYXBfcmVkdWNlLCB0cmVlKSlcblxuICBsZXQgZm9sZF9kcm9wcGVkIGtpbmQgZiBkcm9wcGVkIGFjYyA9XG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBsZXQgc3RhcnQsIGJvdW5kID0gbWF0Y2gga2luZCB3aXRoXG4gICAgICB8IGBBbGwgICAgLT4gMCwgQXJyYXkubGVuZ3RoIGRyb3BwZWQudGFibGVcbiAgICAgIHwgYE1hcCAgICAtPiAwLCBkcm9wcGVkLmxlYXZlc1xuICAgICAgfCBgUmVkdWNlIC0+IGRyb3BwZWQubGVhdmVzLCBBcnJheS5sZW5ndGggZHJvcHBlZC50YWJsZVxuICAgIGluXG4gICAgZm9yIGkgPSBzdGFydCB0byBib3VuZCAtIDEgZG9cbiAgICAgIG1hdGNoIGRyb3BwZWQudGFibGUuKGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIHggLT4gYWNjIDo9IGYgeCAhYWNjXG4gICAgZG9uZTtcbiAgICBiZWdpbiBtYXRjaCBraW5kIHdpdGhcbiAgICAgIHwgYEFsbCB8IGBNYXAgLT5cbiAgICAgICAgTGlzdC5pdGVyIChmdW4geCAtPiBhY2MgOj0gZiB4ICFhY2MpIGRyb3BwZWQuZXh0cmFfbGVhZlxuICAgICAgfCBgUmVkdWNlIC0+ICgpXG4gICAgZW5kO1xuICAgIGJlZ2luIG1hdGNoIGtpbmQgd2l0aFxuICAgICAgfCBgQWxsIHwgYFJlZHVjZSAtPlxuICAgICAgICBMaXN0Lml0ZXIgKGZ1biB4IC0+IGFjYyA6PSBmIHggIWFjYykgZHJvcHBlZC5leHRyYV9qb2luXG4gICAgICB8IGBNYXAgLT4gKClcbiAgICBlbmQ7XG4gICAgIWFjY1xuZW5kXG5cbigqIEx3ZCBpbnRlcmZhY2UgKilcblxubGV0IHJlYyBwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSA9IGZ1bmN0aW9uXG4gIHwgTmlsICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIHQgLT4gbWFwIHQudlxuICB8IEpvaW4gdCAtPlxuICAgIHJlZHVjZVxuICAgICAgKHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlIHQubClcbiAgICAgIChwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSB0LnIpXG5cbmxldCBmb2xkIH5tYXAgfnJlZHVjZSBzZXEgPVxuICBtYXRjaCBMd2QuaXNfcHVyZSBzZXEgd2l0aFxuICB8IFNvbWUgTmlsIC0+IEx3ZC5wdXJlIE5vbmVcbiAgfCBTb21lIG90aGVyIC0+IEx3ZC5wdXJlIChTb21lIChwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSBvdGhlcikpXG4gIHwgTm9uZSAtPlxuICAgIGxldCByZWR1Y2VyID0gcmVmIChSZWR1Y2VyLm1ha2Ugfm1hcCB+cmVkdWNlKSBpblxuICAgIEx3ZC5tYXAgc2VxIH5mOmJlZ2luIGZ1biBzZXEgLT5cbiAgICAgIGxldCByZWR1Y2VyJyA9IFJlZHVjZXIudXBkYXRlICFyZWR1Y2VyIHNlcSBpblxuICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgIFJlZHVjZXIucmVkdWNlIHJlZHVjZXInXG4gICAgZW5kXG5cbmxldCBmb2xkX21vbm9pZCBtYXAgKHplcm8sIHJlZHVjZSkgc2VxID1cbiAgbWF0Y2ggTHdkLmlzX3B1cmUgc2VxIHdpdGhcbiAgfCBTb21lIE5pbCAtPiBMd2QucHVyZSB6ZXJvXG4gIHwgU29tZSBvdGhlciAtPiBMd2QucHVyZSAocHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2Ugb3RoZXIpXG4gIHwgTm9uZSAtPlxuICAgIGxldCByZWR1Y2VyID0gcmVmIChSZWR1Y2VyLm1ha2Ugfm1hcCB+cmVkdWNlKSBpblxuICAgIEx3ZC5tYXAgc2VxIH5mOmJlZ2luIGZ1biBzZXEgLT5cbiAgICAgIGxldCByZWR1Y2VyJyA9IFJlZHVjZXIudXBkYXRlICFyZWR1Y2VyIHNlcSBpblxuICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgIG1hdGNoIFJlZHVjZXIucmVkdWNlIHJlZHVjZXInIHdpdGhcbiAgICAgIHwgTm9uZSAtPiB6ZXJvXG4gICAgICB8IFNvbWUgeCAtPiB4XG4gICAgZW5kXG5cbmxldCBtb25vaWQgPSAoZW1wdHksIGNvbmNhdClcblxubGV0IHRyYW5zZm9ybV9saXN0IGxzIGYgPVxuICBMd2RfdXRpbHMubWFwX3JlZHVjZSBmIG1vbm9pZCBsc1xuXG5sZXQgb2ZfbGlzdCBscyA9IHRyYW5zZm9ybV9saXN0IGxzIGVsZW1lbnRcblxubGV0IHJlYyBvZl9zdWJfYXJyYXkgZiBhcnIgaSBqID1cbiAgaWYgaiA8IGkgdGhlbiBlbXB0eVxuICBlbHNlIGlmIGogPSBpIHRoZW4gZiBhcnIuKGkpXG4gIGVsc2VcbiAgICBsZXQgayA9IGkgKyAoaiAtIGkpIC8gMiBpblxuICAgIGNvbmNhdCAob2Zfc3ViX2FycmF5IGYgYXJyIGkgaykgKG9mX3N1Yl9hcnJheSBmIGFyciAoayArIDEpIGopXG5cbmxldCB0cmFuc2Zvcm1fYXJyYXkgYXJyIGYgPSBvZl9zdWJfYXJyYXkgZiBhcnIgMCAoQXJyYXkubGVuZ3RoIGFyciAtIDEpXG5cbmxldCBvZl9hcnJheSBhcnIgPSB0cmFuc2Zvcm1fYXJyYXkgYXJyIGVsZW1lbnRcblxubGV0IHRvX2xpc3QgeCA9XG4gIGxldCByZWMgZm9sZCB4IGFjYyA9IG1hdGNoIHggd2l0aFxuICAgIHwgTmlsIC0+IGFjY1xuICAgIHwgTGVhZiB0IC0+IHQudiA6OiBhY2NcbiAgICB8IEpvaW4gdCAtPiBmb2xkIHQubCAoZm9sZCB0LnIgYWNjKVxuICBpblxuICBmb2xkIHggW11cblxubGV0IHRvX2FycmF5IHggPVxuICBsZXQgcmVjIGNvdW50ID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiAwXG4gICAgfCBMZWFmIF8gLT4gMVxuICAgIHwgSm9pbiB0IC0+IGNvdW50IHQubCArIGNvdW50IHQuclxuICBpblxuICBtYXRjaCBjb3VudCB4IHdpdGhcbiAgfCAwIC0+IFt8fF1cbiAgfCBuIC0+XG4gICAgbGV0IHJlYyBmaXJzdCA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTGVhZiB0IC0+IHQudlxuICAgICAgfCBKb2luIHQgLT4gZmlyc3QgdC5sXG4gICAgaW5cbiAgICBsZXQgZmlyc3QgPSBmaXJzdCB4IGluXG4gICAgbGV0IGFyciA9IEFycmF5Lm1ha2UgbiBmaXJzdCBpblxuICAgIGxldCByZWMgZm9sZCBpID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+IGlcbiAgICAgIHwgTGVhZiB0IC0+IGFyci4oaSkgPC0gdC52OyBpICsgMVxuICAgICAgfCBKb2luIHQgLT5cbiAgICAgICAgbGV0IGkgPSBmb2xkIGkgdC5sIGluXG4gICAgICAgIGxldCBpID0gZm9sZCBpIHQuciBpblxuICAgICAgICBpXG4gICAgaW5cbiAgICBsZXQgXyA6IGludCA9IGZvbGQgMCB4IGluXG4gICAgYXJyXG5cbmxldCBsd2RfZW1wdHkgOiAnYSB0IEx3ZC50ID0gTHdkLnB1cmUgTmlsXG5sZXQgbHdkX21vbm9pZCA6ICdhLiAnYSB0IEx3ZC50IEx3ZF91dGlscy5tb25vaWQgPVxuICAobHdkX2VtcHR5LCBmdW4geCB5IC0+IEx3ZC5tYXAyIH5mOmNvbmNhdCB4IHkpXG5cbmxldCBtYXAgZiBzZXEgPVxuICBmb2xkX21vbm9pZCAoZnVuIHggLT4gZWxlbWVudCAoZiB4KSkgbW9ub2lkIHNlcVxuXG5sZXQgZmlsdGVyIGYgc2VxID1cbiAgZm9sZF9tb25vaWQgKGZ1biB4IC0+IGlmIGYgeCB0aGVuIGVsZW1lbnQgeCBlbHNlIGVtcHR5KSBtb25vaWQgc2VxXG5cbmxldCBmaWx0ZXJfbWFwIGYgc2VxID1cbiAgbGV0IHNlbGVjdCB4ID0gbWF0Y2ggZiB4IHdpdGhcbiAgICB8IFNvbWUgeSAtPiBlbGVtZW50IHlcbiAgICB8IE5vbmUgLT4gZW1wdHlcbiAgaW5cbiAgZm9sZF9tb25vaWQgc2VsZWN0IG1vbm9pZCBzZXFcblxubGV0IGJpbmQgKHNlcSA6ICdhIHNlcSBMd2QudCkgKGYgOiAnYSAtPiAnYiBzZXEgTHdkLnQpICA6ICdiIHNlcSBMd2QudCA9XG4gIEx3ZC5qb2luIChmb2xkX21vbm9pZCBmIGx3ZF9tb25vaWQgc2VxKVxuXG5sZXQgc2VxX2JpbmQgKHNlcSA6ICdhIHNlcSBMd2QudCkgKGYgOiAnYSAtPiAnYiBzZXEpICA6ICdiIHNlcSBMd2QudCA9XG4gIGZvbGRfbW9ub2lkIGYgbW9ub2lkIHNlcVxuXG5sZXQgbGlmdCAoc2VxIDogJ2EgTHdkLnQgc2VxIEx3ZC50KSA6ICdhIHNlcSBMd2QudCA9XG4gIGJpbmQgc2VxIChMd2QubWFwIH5mOmVsZW1lbnQpXG5cbm1vZHVsZSBCYWxhbmNlZFRyZWUgOiBzaWdcbiAgdHlwZSAnYSB0ID1cbiAgICB8IExlYWZcbiAgICB8IE5vZGUgb2Yge1xuICAgICAgICByYW5rOiBpbnQ7XG4gICAgICAgIGw6ICdhIHQ7XG4gICAgICAgIHg6IGludCAqICdhIHNlcTtcbiAgICAgICAgcjogJ2EgdDtcbiAgICAgICAgbXV0YWJsZSBzZXE6ICdhIHNlcTtcbiAgICAgIH1cbiAgdmFsIGxlYWYgOiAnYSB0XG4gICgqdmFsIG5vZGUgOiAnYSB0IC0+IGludCAqICdhIHNlcSAtPiAnYSB0IC0+ICdhIHQqKVxuXG4gIHZhbCBpbnNlcnQgOiBjbXA6KCdhIC0+ICdhIC0+IGludCkgLT4gaW50IC0+ICdhIHNlcSAtPiAnYSB0IC0+ICdhIHRcbiAgKCp2YWwgdW5pb24gOiBjbXA6KCdhIC0+ICdhIC0+IGludCkgLT4gJ2EgdCAtPiAnYSB0IC0+ICdhIHQqKVxuZW5kID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9XG4gICAgfCBMZWFmXG4gICAgfCBOb2RlIG9mIHtcbiAgICAgICAgcmFuazogaW50O1xuICAgICAgICBsOiAnYSB0O1xuICAgICAgICB4OiBpbnQgKiAnYSBzZXE7XG4gICAgICAgIHI6ICdhIHQ7XG4gICAgICAgIG11dGFibGUgc2VxOiAnYSBzZXE7XG4gICAgICB9XG5cbiAgbGV0IGxlYWYgPSBMZWFmXG5cbiAgbGV0IHJhbmsgPSBmdW5jdGlvblxuICAgIHwgTGVhZiAtPiAwXG4gICAgfCBOb2RlIHQgLT4gdC5yYW5rXG5cbiAgbGV0IGNoZWNrIGwgciA9IGFicyAobCAtIHIpIDw9IDFcblxuICBsZXQgbm9kZSBsIHggciA9XG4gICAgTm9kZSB7bDsgeDsgcjsgc2VxID0gZW1wdHk7IHJhbmsgPSBtYXhpIChyYW5rIGwpIChyYW5rIHIpICsgMX1cblxuICBsZXQgcmVjIG5vZGVfbGVmdCBsIHggciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXIgdGhlbiBub2RlIGwgeCByIGVsc2UgbWF0Y2ggbCB3aXRoXG4gICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IE5vZGUgdCAtPlxuICAgICAgICBpZiBjaGVjayAocmFuayB0LmwpIG1sXG4gICAgICAgIHRoZW4gbm9kZSB0LmwgdC54IChub2RlX2xlZnQgdC5yIHggcilcbiAgICAgICAgZWxzZSBtYXRjaCB0LnIgd2l0aFxuICAgICAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IE5vZGUgdHIgLT5cbiAgICAgICAgICAgIGxldCB0cnIgPSBub2RlX2xlZnQgdHIuciB4IHIgaW5cbiAgICAgICAgICAgIGlmIGNoZWNrICgxICsgbWF4aSAocmFuayB0LmwpIChyYW5rIHRyLmwpKSAocmFuayB0cnIpXG4gICAgICAgICAgICB0aGVuIG5vZGUgKG5vZGUgdC5sIHQueCB0ci5sKSB0ci54IHRyclxuICAgICAgICAgICAgZWxzZSBub2RlIHQubCB0LnggKG5vZGUgdHIubCB0ci54IHRycilcblxuICBsZXQgcmVjIG5vZGVfcmlnaHQgbCB4IHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1yIG1sIHRoZW4gbm9kZSBsIHggciBlbHNlIG1hdGNoIHIgd2l0aFxuICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBOb2RlIHQgLT5cbiAgICAgICAgaWYgY2hlY2sgKHJhbmsgdC5yKSBtclxuICAgICAgICB0aGVuIG5vZGUgKG5vZGVfcmlnaHQgbCB4IHQubCkgdC54IHQuclxuICAgICAgICBlbHNlIG1hdGNoIHQubCB3aXRoXG4gICAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgTm9kZSB0bCAtPlxuICAgICAgICAgICAgbGV0IHRsbCA9IG5vZGVfcmlnaHQgbCB4IHRsLmwgaW5cbiAgICAgICAgICAgIGlmIGNoZWNrICgxICsgbWF4aSAocmFuayB0bC5yKSAocmFuayB0LnIpKSAocmFuayB0bGwpXG4gICAgICAgICAgICB0aGVuIG5vZGUgdGxsIHRsLnggKG5vZGUgdGwuciB0LnggdC5yKVxuICAgICAgICAgICAgZWxzZSBub2RlIChub2RlIHRsbCB0bC54IHRsLnIpIHQueCB0LnJcblxuICBsZXQgbm9kZSBsIHggciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXJcbiAgICB0aGVuIG5vZGUgbCB4IHJcbiAgICBlbHNlIGlmIG1sIDw9IG1yXG4gICAgdGhlbiBub2RlX3JpZ2h0IGwgeCByXG4gICAgZWxzZSBub2RlX2xlZnQgbCB4IHJcblxuICBsZXQgcmVjIGpvaW4gbCByID0gbWF0Y2ggbCwgciB3aXRoXG4gICAgfCBMZWFmLCB0IHwgdCwgTGVhZiAtPiB0XG4gICAgfCBOb2RlIHRsLCBOb2RlIHRyIC0+XG4gICAgICBpZiB0bC5yYW5rIDw9IHRyLnJhbmsgdGhlblxuICAgICAgICBub2RlIChqb2luIGwgdHIubCkgdHIueCB0ci5yXG4gICAgICBlbHNlXG4gICAgICAgIG5vZGUgdGwubCB0bC54IChqb2luIHRsLnIgcilcblxuICBsZXQgZ2V0X2VsZW1lbnQgPSBmdW5jdGlvblxuICAgIHwgTmlsIHwgSm9pbiBfIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgTGVhZiB7djtffSAtPiB2XG5cbiAgKCpsZXQgcmVjIHNwbGl0IH5jbXAgayA9IGZ1bmN0aW9uXG4gICAgfCBMZWFmIC0+IExlYWYsIDAsIExlYWZcbiAgICB8IE5vZGUgdCAtPlxuICAgICAgbGV0IGMgPSBjbXAgayAoZ2V0X2VsZW1lbnQgKHNuZCAodC54KSkpIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIGxldCBsJywgdicsIHInID0gc3BsaXQgfmNtcCBrIHQubCBpblxuICAgICAgICBsJywgdicsIGpvaW4gcicgdC5yXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgbGV0IGwnLCB2JywgcicgPSBzcGxpdCB+Y21wIGsgdC5yIGluXG4gICAgICAgIGpvaW4gdC5sIGwnLCB2JywgcidcbiAgICAgIGVsc2VcbiAgICAgICAgKHQubCwgZnN0IHQueCwgdC5yKVxuXG4gIGxldCByZWMgdW5pb24gfmNtcCB0MSB0MiA9XG4gICAgbWF0Y2ggdDEsIHQyIHdpdGhcbiAgICB8IExlYWYsIHQgfCB0LCBMZWFmIC0+IHRcbiAgICB8IE5vZGUgdDEsIHQyICAtPlxuICAgICAgbGV0IG0xLCBrMSA9IHQxLnggaW5cbiAgICAgIGxldCBsMiwgbTIsIHIyID0gc3BsaXQgfmNtcCAoZ2V0X2VsZW1lbnQgazEpIHQyIGluXG4gICAgICBsZXQgbCcgPSB1bmlvbiB+Y21wIHQxLmwgbDIgaW5cbiAgICAgIGxldCByJyA9IHVuaW9uIH5jbXAgdDEuciByMiBpblxuICAgICAgbGV0IG0gPSBtMSArIG0yIGluXG4gICAgICBpZiBtID0gMCB0aGVuXG4gICAgICAgIGpvaW4gbCcgcidcbiAgICAgIGVsc2UgKFxuICAgICAgICBhc3NlcnQgKG0gPiAwKTtcbiAgICAgICAgbm9kZSBsJyAobSwgazEpIHInO1xuICAgICAgKVxuICAgICopXG5cbiAgbGV0IGluc2VydCB+Y21wIG0xIHMgdCA9XG4gICAgYXNzZXJ0IChtMSA8PiAwKTtcbiAgICBsZXQgcmVjIGF1eCA9IGZ1bmN0aW9uXG4gICAgICB8IExlYWYgLT4gbm9kZSBMZWFmIChtMSwgcykgTGVhZlxuICAgICAgfCBOb2RlIHQgLT5cbiAgICAgICAgbGV0IG0yLCB4ID0gdC54IGluXG4gICAgICAgIGxldCBjID0gY21wIChnZXRfZWxlbWVudCBzKSAoZ2V0X2VsZW1lbnQgeCkgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgIGxldCBtID0gbTEgKyBtMiBpblxuICAgICAgICAgIGlmIG0gPSAwIHRoZW5cbiAgICAgICAgICAgIGpvaW4gdC5sIHQuclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5vZGUgdC5sIChtLCB4KSB0LnJcbiAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgbGV0IGwnID0gYXV4IHQubCBpblxuICAgICAgICAgIG5vZGUgbCcgdC54IHQuclxuICAgICAgICBlbHNlXG4gICAgICAgICAgbGV0IHInID0gYXV4IHQuciBpblxuICAgICAgICAgIG5vZGUgdC5sIHQueCByJ1xuICAgIGluXG4gICAgYXV4IHRcbmVuZFxuXG5sZXQgcmVjIHNlcV9vZl90cmVlID0gZnVuY3Rpb25cbiAgfCBCYWxhbmNlZFRyZWUuTGVhZiAtPiBlbXB0eVxuICB8IEJhbGFuY2VkVHJlZS5Ob2RlIHQgLT5cbiAgICBtYXRjaCB0LnNlcSB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIGxldCBzbCA9IHNlcV9vZl90cmVlIHQubCBpblxuICAgICAgbGV0IHNyID0gc2VxX29mX3RyZWUgdC5yIGluXG4gICAgICBhc3NlcnQgKGZzdCB0LnggPiAwKTtcbiAgICAgIGxldCBzZXEgPSBjb25jYXQgc2wgKGNvbmNhdCAoc25kIHQueCkgc3IpIGluXG4gICAgICB0LnNlcSA8LSBzZXE7XG4gICAgICBzZXFcbiAgICB8IHNlcSAtPiBzZXFcblxubGV0IHNvcnRfdW5pcSBjbXAgc2VxID1cbiAgbGV0IHByZXZpb3VzX3NlcSA9IHJlZiBlbXB0eSBpblxuICBsZXQgcHJldmlvdXNfdHJlZSA9IHJlZiBCYWxhbmNlZFRyZWUubGVhZiBpblxuICBsZXQgZiBuZXdfc2VxID1cbiAgICBsZXQgb2xkX3NlcSA9ICFwcmV2aW91c19zZXEgaW5cbiAgICBsZXQgb2xkX3RyZWUgPSAhcHJldmlvdXNfdHJlZSBpblxuICAgIGxldCBfID0gTWFya2luZy51bnNhZmVfdHJhdmVyc2Ugfm9sZF9yb290Om9sZF9zZXEgfm5ld19yb290Om5ld19zZXEgaW5cbiAgICBsZXQgcmVjIHVuYmxvY2sgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gKClcbiAgICAgIHwgTGVhZiB0IC0+IHQubWFyayA8LSBNYXJraW5nLnVubWFyayB0Lm1hcmtcbiAgICAgIHwgSm9pbiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICB1bmJsb2NrIHQubDtcbiAgICAgICAgdW5ibG9jayB0LnI7XG4gICAgICAgIGlmIE1hcmtpbmcuaXNfc2hhcmVkIG1hcmsgdGhlbiAoXG4gICAgICAgICAgTWFya2luZy5yZXN0b3JlIHNlcTtcbiAgICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICAgIHQubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICApIGVsc2VcbiAgICAgICAgICBhc3NlcnQgKE1hcmtpbmcuaXNfbm9uZSBtYXJrKVxuICAgIGluXG4gICAgbGV0IHJlYyB1bm1hcmtfbmV3IHRyZWUgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gdHJlZVxuICAgICAgfCBMZWFmIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIHQubWFyayA8LSAwO1xuICAgICAgICBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW5cbiAgICAgICAgICBCYWxhbmNlZFRyZWUuaW5zZXJ0IH5jbXAgKCsxKSBzZXEgdHJlZVxuICAgICAgICBlbHNlIChcbiAgICAgICAgICBhc3NlcnQgKE1hcmtpbmcuaXNfYm90aCBtYXJrIHx8IE1hcmtpbmcuaXNfbm9uZSBtYXJrKTtcbiAgICAgICAgICB0cmVlXG4gICAgICAgIClcbiAgICAgIHwgSm9pbiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW4gKFxuICAgICAgICAgIHQubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICAgIHVubWFya19uZXcgKHVubWFya19uZXcgdHJlZSB0LmwpIHQuclxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgIHVuYmxvY2sgc2VxO1xuICAgICAgICAgIHRyZWVcbiAgICAgICAgKVxuICAgIGluXG4gICAgbGV0IHJlYyB1bm1hcmtfb2xkIHRyZWUgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gdHJlZVxuICAgICAgfCBMZWFmIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIHQubWFyayA8LSAwO1xuICAgICAgICBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW5cbiAgICAgICAgICBCYWxhbmNlZFRyZWUuaW5zZXJ0IH5jbXAgKC0xKSBzZXEgdHJlZVxuICAgICAgICBlbHNlIChcbiAgICAgICAgICBhc3NlcnQgKE1hcmtpbmcuaXNfYm90aCBtYXJrIHx8IE1hcmtpbmcuaXNfbm9uZSBtYXJrKTtcbiAgICAgICAgICB0cmVlXG4gICAgICAgIClcbiAgICAgIHwgSm9pbiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW4gKFxuICAgICAgICAgIHQubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICAgIHVubWFya19vbGQgKHVubWFya19vbGQgdHJlZSB0LmwpIHQuclxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgIHVuYmxvY2sgc2VxO1xuICAgICAgICAgIHRyZWVcbiAgICAgICAgKVxuICAgIGluXG4gICAgbGV0IG5ld190cmVlID0gdW5tYXJrX29sZCAodW5tYXJrX25ldyBvbGRfdHJlZSBuZXdfc2VxKSBvbGRfc2VxIGluXG4gICAgcHJldmlvdXNfc2VxIDo9IG5ld19zZXE7XG4gICAgcHJldmlvdXNfdHJlZSA6PSBuZXdfdHJlZTtcbiAgICBzZXFfb2ZfdHJlZSBuZXdfdHJlZVxuICBpblxuICBMd2QubWFwIHNlcSB+ZlxuIiwib3BlbiBCcnJcbm9wZW4gRWxcblxudHlwZSB0ID0gRWwudFxuXG50eXBlICdhIGNvbCA9IFtcbiAgfCBgUCBvZiAnYVxuICAoKiogUHVyZSBlbGVtZW50ICopXG4gIHwgYFIgb2YgJ2EgTHdkLnRcbiAgKCoqIFJlYWN0aXZlIGVsZW1lbnQgKilcbiAgfCBgUyBvZiAnYSBMd2Rfc2VxLnQgTHdkLnRcbiAgKCoqIFJlYWN0aXZlIHNlcXVlbmNlIG9mIGVsZW1lbnRzICopXG5dIGxpc3RcbigqKiBEZXNjcmliaW5nIGNvbGxlY3Rpb25zIG9mIGVsZW1lbnRzICopXG5cbnR5cGUgaGFuZGxlciA9IEhhbmRsZXIgOiB7XG4gICAgb3B0czogRXYubGlzdGVuX29wdHMgb3B0aW9uO1xuICAgIHR5cGUnOiAnYSBFdi50eXBlJztcbiAgICBmdW5jOiAnYSBFdi50IC0+IHVuaXQ7XG4gIH0gLT4gaGFuZGxlclxuXG5sZXQgaGFuZGxlciA/b3B0cyB0eXBlJyBmdW5jID1cbiAgSGFuZGxlciB7b3B0czsgdHlwZSc7IGZ1bmN9XG5cbmxldCBpc19wdXJlX2VsZW1lbnQgPSBmdW5jdGlvblxuICB8IGBQIF8gLT4gdHJ1ZVxuICB8IGBSIHggLT4gT3B0aW9uLmlzX3NvbWUgKEx3ZC5pc19wdXJlIHgpXG4gIHwgYFMgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcblxubGV0IGV4dHJhY3RfcHVyZV9lbGVtZW50IHggPSBPcHRpb24uZ2V0IChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgZXh0cmFjdF9wdXJlX2VsZW1lbnRzIHhzID1cbiAgTGlzdC5mbGF0dGVuIChcbiAgICBMaXN0Lm1hcCAoZnVuY3Rpb25cbiAgICAgICAgfCBgUCB4IC0+IFt4XVxuICAgICAgICB8IGBSIHggLT4gW2V4dHJhY3RfcHVyZV9lbGVtZW50IHhdXG4gICAgICAgIHwgYFMgeCAtPiBMd2Rfc2VxLnRvX2xpc3QgKGV4dHJhY3RfcHVyZV9lbGVtZW50IHgpXG4gICAgICApIHhzXG4gIClcblxubGV0IHByZXBhcmVfY29sIDogXyBjb2wgLT4gXyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW10sIFtdXG4gIHwgY29sIC0+XG4gICAgbGV0IHB1cmUsIGltcHVyZSA9IExpc3QucGFydGl0aW9uIGlzX3B1cmVfZWxlbWVudCBjb2wgaW5cbiAgICBleHRyYWN0X3B1cmVfZWxlbWVudHMgcHVyZSwgaW1wdXJlXG5cbigqKiBSZWFjdGl2ZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyAqKVxuXG5sZXQgY29uc3VtZV9jaGlsZHJlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW10sIE5vbmVcbiAgfCBbYFAgeF0gLT4gW3hdLCBOb25lXG4gIHwgW2BTIHhdIC0+IFtdLCBTb21lIHhcbiAgfCBbYFIgeF0gLT4gW10sIFNvbWUgKEx3ZC5tYXAgfmY6THdkX3NlcS5lbGVtZW50IHgpXG4gIHwgY29sIC0+XG4gICAgaWYgTGlzdC5mb3JfYWxsIGlzX3B1cmVfZWxlbWVudCBjb2xcbiAgICB0aGVuXG4gICAgICBMaXN0LmZsYXR0ZW4gKFxuICAgICAgICBMaXN0Lm1hcCAoZnVuY3Rpb25cbiAgICAgICAgICAgIHwgYFAgeCAtPiBbeF1cbiAgICAgICAgICAgIHwgYFIgeCAtPiBbZXh0cmFjdF9wdXJlX2VsZW1lbnQgeF1cbiAgICAgICAgICAgIHwgYFMgeCAtPiBMd2Rfc2VxLnRvX2xpc3QgKGV4dHJhY3RfcHVyZV9lbGVtZW50IHgpXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbFxuICAgICAgKSwgTm9uZVxuICAgIGVsc2UgW10sIFNvbWUgKFxuICAgICAgICBMd2RfdXRpbHMubWFwX3JlZHVjZSAoZnVuY3Rpb25cbiAgICAgICAgICAgIHwgYFAgeCAtPiBMd2QucHVyZSAoTHdkX3NlcS5lbGVtZW50IHgpXG4gICAgICAgICAgICB8IGBSIHggLT4gTHdkLm1hcCB+ZjpMd2Rfc2VxLmVsZW1lbnQgeFxuICAgICAgICAgICAgfCBgUyB4IC0+IHhcbiAgICAgICAgICApIEx3ZF9zZXEubHdkX21vbm9pZFxuICAgICAgICAgIGNvbFxuICAgICAgKVxuXG50eXBlIGNoaWxkX3RyZWUgPVxuICB8IExlYWYgb2YgRWwudFxuICB8IElubmVyIG9mIHsgbXV0YWJsZSBib3VuZDogSnYudDtcbiAgICAgICAgICAgICAgIGxlZnQ6IGNoaWxkX3RyZWU7IHJpZ2h0OiBjaGlsZF90cmVlOyB9XG5cbmxldCBjaGlsZF9ub2RlIG5vZGUgPSBMZWFmIG5vZGVcblxubGV0IGNoaWxkX2pvaW4gbGVmdCByaWdodCA9IElubmVyIHsgYm91bmQgPSBKdi5udWxsOyBsZWZ0OyByaWdodCB9XG5cbmxldCBqdl9wYXJlbnROb2RlID0gSnN0ci52IFwicGFyZW50Tm9kZVwiXG5sZXQganZfbmV4dFNpYmxpbmcgPSBKc3RyLnYgXCJuZXh0U2libGluZ1wiXG5sZXQganZfYXBwZW5kID0gSnN0ci52IFwiYXBwZW5kXCJcbmxldCBqdl9iZWZvcmUgPSBKc3RyLnYgXCJiZWZvcmVcIlxubGV0IGp2X3JlbW92ZSA9IEpzdHIudiBcInJlbW92ZVwiXG5sZXQganZfY29udGFpbnMgPSBKc3RyLnYgXCJjb250YWluc1wiXG5cbmxldCBqdl90b1JlbW92ZSA9XG4gIEpzdHIudiBcImx3ZC10by1yZW1vdmVcIiAoKiBIQUNLIENvdWxkIGJlIHR1cm5lZCBpbnRvIGEgSmF2YXNjcmlwdCBzeW1ib2wgKilcblxubGV0IGNvbnRhaW5zX2ZvY3VzIG5vZGUgPVxuICBtYXRjaCBCcnIuRG9jdW1lbnQuYWN0aXZlX2VsIChCcnIuRWwuZG9jdW1lbnQgbm9kZSkgd2l0aFxuICB8IE5vbmUgLT4gZmFsc2VcbiAgfCBTb21lIGVsIC0+XG4gICAgSnYudG9fYm9vbCAoSnYuY2FsbCcgKEVsLnRvX2p2IG5vZGUpIGp2X2NvbnRhaW5zIFt8RWwudG9fanYgZWx8XSlcblxubGV0IHVwZGF0ZV9jaGlsZHJlblxuICAgIChzZWxmIDogRWwudClcbiAgICAoY2hpbGRyZW4gOiBFbC50IEx3ZF9zZXEudCBMd2QudCkgOiBFbC50IEx3ZC50ID1cbiAgbGV0IHJlZHVjZXIgPVxuICAgIHJlZiAoTHdkX3NlcS5SZWR1Y2VyLm1ha2Ugfm1hcDpjaGlsZF9ub2RlIH5yZWR1Y2U6Y2hpbGRfam9pbilcbiAgaW5cbiAgTHdkLm1hcCBjaGlsZHJlbiB+ZjpiZWdpbiBmdW4gY2hpbGRyZW4gLT5cbiAgICBsZXQgZHJvcHBlZCwgcmVkdWNlcicgPVxuICAgICAgTHdkX3NlcS5SZWR1Y2VyLnVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQgIXJlZHVjZXIgY2hpbGRyZW4gaW5cbiAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgIGxldCBzY2hlZHVsZV9mb3JfcmVtb3ZhbCBjaGlsZCAoKSA9IG1hdGNoIGNoaWxkIHdpdGhcbiAgICAgIHwgTGVhZiBub2RlIC0+IEp2LnNldCcgKEVsLnRvX2p2IG5vZGUpIGp2X3RvUmVtb3ZlIEp2LnRydWUnO1xuICAgICAgfCBJbm5lciBfIC0+ICgpXG4gICAgaW5cbiAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXAgc2NoZWR1bGVfZm9yX3JlbW92YWwgZHJvcHBlZCAoKTtcbiAgICBsZXQgcHJlc2VydmVfZm9jdXMgPSBjb250YWluc19mb2N1cyBzZWxmIGluXG4gICAgYmVnaW4gbWF0Y2ggTHdkX3NlcS5SZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJyB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSB0cmVlIC0+XG4gICAgICAgIGxldCByZWMgdXBkYXRlIGFjYyA9IGZ1bmN0aW9uXG4gICAgICAgICAgfCBMZWFmIG5vZGUgLT5cbiAgICAgICAgICAgIGxldCBub2RlJyA9IEVsLnRvX2p2IG5vZGUgaW5cbiAgICAgICAgICAgIEp2LmRlbGV0ZScgbm9kZScganZfdG9SZW1vdmU7XG4gICAgICAgICAgICAoKkJyci5Db25zb2xlLmxvZyBbXCJVcGRhdGluZyBcIjsgbm9kZV07KilcbiAgICAgICAgICAgIGlmIEp2LmdldCcgbm9kZScganZfcGFyZW50Tm9kZSAhPSBFbC50b19qdiBzZWxmIHRoZW4gKFxuICAgICAgICAgICAgICBpZiBKdi5pc19udWxsIGFjY1xuICAgICAgICAgICAgICB0aGVuIGlnbm9yZSAoSnYuY2FsbCcgKEVsLnRvX2p2IHNlbGYpIGp2X2FwcGVuZCBbfG5vZGUnfF0pXG4gICAgICAgICAgICAgIGVsc2UgaWdub3JlIChKdi5jYWxsJyBhY2MganZfYmVmb3JlIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICkgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICgqIENoZWNrIGlmIHRoZXJlIGlzIG5vdCBhbnkgd29yayB0byBkbyAqKVxuICAgICAgICAgICAgICBKdi5nZXQnIG5vZGUnIGp2X25leHRTaWJsaW5nICE9IGFjYyAmJlxuICAgICAgICAgICAgICAoKiBDaGVjayBpZiB3ZSBhcmUgaW4gdGhlIGZvY3VzIGNhc2UgYW5kIHRyeSB0byBcImJ1YmJsZSBzb3J0XCIgdG9cbiAgICAgICAgICAgICAgICAgcHJlc2VydmUgZm9jdXMgKilcbiAgICAgICAgICAgICAgbm90IChcbiAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9mb2N1cyAmJiBjb250YWluc19mb2N1cyBub2RlICYmXG4gICAgICAgICAgICAgICAgbGV0IHJlYyBzaGlmdF9zaWJsaW5ncyAoKSA9XG4gICAgICAgICAgICAgICAgICBsZXQgc2libGluZyA9IEp2LmdldCcgbm9kZScganZfbmV4dFNpYmxpbmcgaW5cbiAgICAgICAgICAgICAgICAgIGlmIHNpYmxpbmcgPT0gYWNjIHRoZW4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiBKdi5pc19udWxsIHNpYmxpbmcgdGhlbiBmYWxzZVxuICAgICAgICAgICAgICAgICAgZWxzZSAoXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZSAoSnYuY2FsbCcgbm9kZScganZfYmVmb3JlIFt8c2libGluZ3xdKTtcbiAgICAgICAgICAgICAgICAgICAgc2hpZnRfc2libGluZ3MgKClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIHNoaWZ0X3NpYmxpbmdzICgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkgdGhlbiAoXG4gICAgICAgICAgICAgIGlmIEp2LmlzX251bGwgYWNjXG4gICAgICAgICAgICAgIHRoZW4gaWdub3JlIChKdi5jYWxsJyAoRWwudG9fanYgc2VsZikganZfYXBwZW5kIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICAgZWxzZSBpZ25vcmUgKEp2LmNhbGwnIGFjYyBqdl9iZWZvcmUgW3xub2RlJ3xdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5vZGUnXG4gICAgICAgICAgfCBJbm5lciB0IC0+XG4gICAgICAgICAgICBpZiBKdi5pc19udWxsIHQuYm91bmQgdGhlbiAoXG4gICAgICAgICAgICAgIGxldCBhY2MgPSB1cGRhdGUgYWNjIHQucmlnaHQgaW5cbiAgICAgICAgICAgICAgbGV0IGFjYyA9IHVwZGF0ZSBhY2MgdC5sZWZ0IGluXG4gICAgICAgICAgICAgIHQuYm91bmQgPC0gYWNjO1xuICAgICAgICAgICAgICBhY2NcbiAgICAgICAgICAgICkgZWxzZVxuICAgICAgICAgICAgICB0LmJvdW5kXG4gICAgICAgIGluXG4gICAgICAgIGlnbm9yZSAodXBkYXRlIEp2Lm51bGwgdHJlZSlcbiAgICBlbmQ7XG4gICAgbGV0IHJlbW92ZV9jaGlsZCBjaGlsZCAoKSA9IG1hdGNoIGNoaWxkIHdpdGhcbiAgICAgIHwgTGVhZiBub2RlIC0+XG4gICAgICAgIGxldCBub2RlID0gRWwudG9fanYgbm9kZSBpblxuICAgICAgICBpZiBKdi5pc19zb21lIChKdi5nZXQnIG5vZGUganZfdG9SZW1vdmUpIHRoZW4gKFxuICAgICAgICAgICgqQnJyLkNvbnNvbGUubG9nIFtcIlJlbW92aW5nIFwiOyBub2RlXTsqKVxuICAgICAgICAgIEp2LmRlbGV0ZScgbm9kZSBqdl90b1JlbW92ZTtcbiAgICAgICAgICBpZ25vcmUgKEp2LmNhbGwnIG5vZGUganZfcmVtb3ZlIFt8fF0pXG4gICAgICAgIClcbiAgICAgIHwgSW5uZXIgXyAtPiAoKVxuICAgIGluXG4gICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwIHJlbW92ZV9jaGlsZCBkcm9wcGVkICgpO1xuICAgIHNlbGZcbiAgZW5kXG5cbmxldCBwdXJlX3VuaXQgPSBMd2QucHVyZSAoKVxuXG5sZXQgZHVtbXlfa3ZfYXQgPSAoSnN0ci5lbXB0eSwgSnN0ci5lbXB0eSlcblxubGV0IGF0dGFjaF9hdHRyaWJzIGVsIGF0dHJpYnMgPVxuICBsZXQgc2V0X2t2IChrLCB2KSA9XG4gICAgaWYgSnN0ci5lcXVhbCBrIEF0Lk5hbWUuY2xhc3MnXG4gICAgdGhlbiBFbC5zZXRfY2xhc3MgdiB0cnVlIGVsXG4gICAgZWxzZSBFbC5zZXRfYXQgayAoU29tZSB2KSBlbFxuICBpblxuICBsZXQgdW5zZXRfa3YgKGssIHYpID1cbiAgICBpZiBKc3RyLmVxdWFsIGsgQXQuTmFtZS5jbGFzcydcbiAgICB0aGVuIEVsLnNldF9jbGFzcyB2IGZhbHNlIGVsXG4gICAgZWxzZSBFbC5zZXRfYXQgayBOb25lIGVsXG4gIGluXG4gIGxldCBzZXRfbHdkX2F0ICgpID1cbiAgICBsZXQgcHJldiA9IHJlZiBkdW1teV9rdl9hdCBpblxuICAgIGZ1biBhdCAtPlxuICAgICAgaWYgIXByZXYgIT0gZHVtbXlfa3ZfYXQgdGhlblxuICAgICAgICB1bnNldF9rdiAhcHJldjtcbiAgICAgIGxldCBwYWlyID0gQXQudG9fcGFpciBhdCBpblxuICAgICAgc2V0X2t2IHBhaXI7XG4gICAgICBwcmV2IDo9IHBhaXJcbiAgaW5cbiAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgKGZ1bmN0aW9uXG4gICAgICB8IGBQIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IGBSIGF0IC0+IEx3ZC5tYXAgfmY6KHNldF9sd2RfYXQgKCkpIGF0XG4gICAgICB8IGBTIGF0cyAtPlxuICAgICAgICBsZXQgc2V0X2F0JyBhdCA9XG4gICAgICAgICAgbGV0IGt2ID0gQXQudG9fcGFpciBhdCBpblxuICAgICAgICAgIHNldF9rdiBrdjtcbiAgICAgICAgICBrdlxuICAgICAgICBpblxuICAgICAgICBsZXQgcmVkdWNlciA9XG4gICAgICAgICAgcmVmIChMd2Rfc2VxLlJlZHVjZXIubWFrZVxuICAgICAgICAgICAgICAgICB+bWFwOnNldF9hdCdcbiAgICAgICAgICAgICAgICAgfnJlZHVjZTooZnVuIF8gXyAtPiBkdW1teV9rdl9hdCkpXG4gICAgICAgIGluXG4gICAgICAgIGxldCB1cGRhdGUgYXRzID1cbiAgICAgICAgICBsZXQgZHJvcHBlZCwgcmVkdWNlcicgPVxuICAgICAgICAgICAgTHdkX3NlcS5SZWR1Y2VyLnVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQgIXJlZHVjZXIgYXRzXG4gICAgICAgICAgaW5cbiAgICAgICAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci5mb2xkX2Ryb3BwZWQgYE1hcFxuICAgICAgICAgICAgKGZ1biBrdiAoKSAtPiB1bnNldF9rdiBrdilcbiAgICAgICAgICAgIGRyb3BwZWQgKCk7XG4gICAgICAgICAgaWdub3JlIChMd2Rfc2VxLlJlZHVjZXIucmVkdWNlIHJlZHVjZXInOiBfIG9wdGlvbilcbiAgICAgICAgaW5cbiAgICAgICAgTHdkLm1hcCB+Zjp1cGRhdGUgYXRzXG4gICAgKSAocHVyZV91bml0LCBmdW4gXyBfIC0+IHB1cmVfdW5pdClcbiAgICBhdHRyaWJzXG5cbmxldCBsaXN0ZW4gZWwgKEhhbmRsZXIge29wdHM7IHR5cGUnOyBmdW5jfSkgPVxuICBFdi5saXN0ZW4gP29wdHMgdHlwZScgZnVuYyAoRWwuYXNfdGFyZ2V0IGVsKVxuXG5sZXQgYXR0YWNoX2V2ZW50cyBlbCBldmVudHMgPVxuICBMd2RfdXRpbHMubWFwX3JlZHVjZSAoZnVuY3Rpb25cbiAgICAgIHwgYFAgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgYFIgYXQgLT5cbiAgICAgICAgbGV0IGNhY2hlZCA9IHJlZiBOb25lIGluXG4gICAgICAgIEx3ZC5tYXAgfmY6KGZ1biBoIC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCAhY2FjaGVkIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgICAgIHwgU29tZSBsIC0+IEV2LnVubGlzdGVuIGxcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGNhY2hlZCA6PSBTb21lIChsaXN0ZW4gZWwgaClcbiAgICAgICAgICApIGF0XG4gICAgICB8IGBTIGF0cyAtPlxuICAgICAgICBsZXQgcmVkdWNlciA9XG4gICAgICAgICAgcmVmIChMd2Rfc2VxLlJlZHVjZXIubWFrZVxuICAgICAgICAgICAgICAgICB+bWFwOihsaXN0ZW4gZWwpXG4gICAgICAgICAgICAgICAgIH5yZWR1Y2U6KGZ1biB4IF95IC0+IHgpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgdXBkYXRlIGF0cyA9XG4gICAgICAgICAgbGV0IGRyb3BwZWQsIHJlZHVjZXInID1cbiAgICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci51cGRhdGVfYW5kX2dldF9kcm9wcGVkICFyZWR1Y2VyIGF0c1xuICAgICAgICAgIGluXG4gICAgICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXBcbiAgICAgICAgICAgIChmdW4gbCAoKSAtPiBFdi51bmxpc3RlbiBsKVxuICAgICAgICAgICAgZHJvcHBlZCAoKTtcbiAgICAgICAgICBpZ25vcmUgKEx3ZF9zZXEuUmVkdWNlci5yZWR1Y2UgcmVkdWNlcic6IF8gb3B0aW9uKVxuICAgICAgICBpblxuICAgICAgICBMd2QubWFwIH5mOnVwZGF0ZSBhdHNcbiAgICApIChwdXJlX3VuaXQsIGZ1biBfIF8gLT4gcHVyZV91bml0KVxuICAgIGV2ZW50c1xuXG5sZXQgdiA/ZCA/KGF0PVtdKSA/KGV2PVtdKSB0YWcgY2hpbGRyZW4gPVxuICBsZXQgYXQsIGltcHVyZV9hdCA9IHByZXBhcmVfY29sIGF0IGluXG4gIGxldCBldiwgaW1wdXJlX2V2ID0gcHJlcGFyZV9jb2wgZXYgaW5cbiAgbGV0IGNoaWxkcmVuLCBpbXB1cmVfY2hpbGRyZW4gPSBjb25zdW1lX2NoaWxkcmVuIGNoaWxkcmVuIGluXG4gIGxldCBlbCA9IEVsLnYgP2QgfmF0IHRhZyBjaGlsZHJlbiBpblxuICBsZXQgcmVzdWx0ID1cbiAgICBtYXRjaCBpbXB1cmVfYXQsIGltcHVyZV9jaGlsZHJlbiB3aXRoXG4gICAgfCBbXSwgTm9uZSAtPiBMd2QucHVyZSBlbFxuICAgIHwgW10sIFNvbWUgY2hpbGRyZW4gLT5cbiAgICAgIHVwZGF0ZV9jaGlsZHJlbiBlbCBjaGlsZHJlblxuICAgIHwgYXQsIE5vbmUgLT5cbiAgICAgIEx3ZC5tYXAgfmY6KGZ1biAoKSAtPiBlbCkgKGF0dGFjaF9hdHRyaWJzIGVsIGF0KVxuICAgIHwgYXQsIFNvbWUgY2hpbGRyZW4gLT5cbiAgICAgIEx3ZC5tYXAyIH5mOihmdW4gKCkgZWwgLT4gZWwpXG4gICAgICAgIChhdHRhY2hfYXR0cmlicyBlbCBhdClcbiAgICAgICAgKHVwZGF0ZV9jaGlsZHJlbiBlbCBjaGlsZHJlbilcbiAgaW5cbiAgTGlzdC5pdGVyIChmdW4gaCAtPiBpZ25vcmUgKGxpc3RlbiBlbCBoKSkgZXY7XG4gIGxldCByZXN1bHQgPVxuICAgIG1hdGNoIGltcHVyZV9ldiB3aXRoXG4gICAgfCBbXSAtPiByZXN1bHRcbiAgICB8IGV2cyAtPlxuICAgICAgTHdkLm1hcDIgfmY6KGZ1biAoKSBlbCAtPiBlbClcbiAgICAgICAgKGF0dGFjaF9ldmVudHMgZWwgZXZzKVxuICAgICAgICByZXN1bHRcbiAgaW5cbiAgcmVzdWx0XG5cbigqKiB7MTplbHMgRWxlbWVudCBjb25zdHJ1Y3RvcnN9ICopXG5cbnR5cGUgY29ucyA9ICA/ZDpkb2N1bWVudCAtPiA/YXQ6QXQudCBjb2wgLT4gP2V2OmhhbmRsZXIgY29sIC0+IHQgY29sIC0+IHQgTHdkLnRcbigqKiBUaGUgdHlwZSBmb3IgZWxlbWVudCBjb25zdHJ1Y3RvcnMuIFRoaXMgaXMgc2ltcGx5IHshdn0gd2l0aCBhXG4gICAgcHJlLWFwcGxpZWQgZWxlbWVudCBuYW1lLiAqKVxuXG50eXBlIHZvaWRfY29ucyA9ID9kOmRvY3VtZW50IC0+ID9hdDpBdC50IGNvbCAtPiA/ZXY6aGFuZGxlciBjb2wgLT4gdW5pdCAtPiB0IEx3ZC50XG4oKiogVGhlIHR5cGUgZm9yIHZvaWQgZWxlbWVudCBjb25zdHJ1Y3RvcnMuIFRoaXMgaXMgc2ltcGx5IHshdn1cbiAgICB3aXRoIGEgcHJlLWFwcGxpZWQgZWxlbWVudCBuYW1lIGFuZCB3aXRob3V0IGNoaWxkcmVuLiAqKVxuXG5sZXQgY29ucyBuYW1lID9kID9hdCA/ZXYgY3MgPSB2ID9kID9hdCA/ZXYgbmFtZSBjc1xubGV0IHZvaWRfY29ucyBuYW1lID9kID9hdCA/ZXYgKCkgPSB2ID9kID9hdCA/ZXYgbmFtZSBbXVxuXG5sZXQgYSA9IGNvbnMgTmFtZS5hXG5sZXQgYWJiciA9IGNvbnMgTmFtZS5hYmJyXG5sZXQgYWRkcmVzcyA9IGNvbnMgTmFtZS5hZGRyZXNzXG5sZXQgYXJlYSA9IHZvaWRfY29ucyBOYW1lLmFyZWFcbmxldCBhcnRpY2xlID0gY29ucyBOYW1lLmFydGljbGVcbmxldCBhc2lkZSA9IGNvbnMgTmFtZS5hc2lkZVxubGV0IGF1ZGlvID0gY29ucyBOYW1lLmF1ZGlvXG5sZXQgYiA9IGNvbnMgTmFtZS5iXG5sZXQgYmFzZSA9IHZvaWRfY29ucyBOYW1lLmJhc2VcbmxldCBiZGkgPSBjb25zIE5hbWUuYmRpXG5sZXQgYmRvID0gY29ucyBOYW1lLmJkb1xubGV0IGJsb2NrcXVvdGUgPSBjb25zIE5hbWUuYmxvY2txdW90ZVxubGV0IGJvZHkgPSBjb25zIE5hbWUuYm9keVxubGV0IGJyID0gdm9pZF9jb25zIE5hbWUuYnJcbmxldCBidXR0b24gPSBjb25zIE5hbWUuYnV0dG9uXG5sZXQgY2FudmFzID0gY29ucyBOYW1lLmNhbnZhc1xubGV0IGNhcHRpb24gPSBjb25zIE5hbWUuY2FwdGlvblxubGV0IGNpdGUgPSBjb25zIE5hbWUuY2l0ZVxubGV0IGNvZGUgPSBjb25zIE5hbWUuY29kZVxubGV0IGNvbCA9IHZvaWRfY29ucyBOYW1lLmNvbFxubGV0IGNvbGdyb3VwID0gY29ucyBOYW1lLmNvbGdyb3VwXG5sZXQgY29tbWFuZCA9IGNvbnMgTmFtZS5jb21tYW5kXG5sZXQgZGF0YWxpc3QgPSBjb25zIE5hbWUuZGF0YWxpc3RcbmxldCBkZCA9IGNvbnMgTmFtZS5kZFxubGV0IGRlbCA9IGNvbnMgTmFtZS5kZWxcbmxldCBkZXRhaWxzID0gY29ucyBOYW1lLmRldGFpbHNcbmxldCBkZm4gPSBjb25zIE5hbWUuZGZuXG5sZXQgZGl2ID0gY29ucyBOYW1lLmRpdlxubGV0IGRsID0gY29ucyBOYW1lLmRsXG5sZXQgZHQgPSBjb25zIE5hbWUuZHRcbmxldCBlbSA9IGNvbnMgTmFtZS5lbVxubGV0IGVtYmVkID0gdm9pZF9jb25zIE5hbWUuZW1iZWRcbmxldCBmaWVsZHNldCA9IGNvbnMgTmFtZS5maWVsZHNldFxubGV0IGZpZ2NhcHRpb24gPSBjb25zIE5hbWUuZmlnY2FwdGlvblxubGV0IGZpZ3VyZSA9IGNvbnMgTmFtZS5maWd1cmVcbmxldCBmb290ZXIgPSBjb25zIE5hbWUuZm9vdGVyXG5sZXQgZm9ybSA9IGNvbnMgTmFtZS5mb3JtXG5sZXQgaDEgPSBjb25zIE5hbWUuaDFcbmxldCBoMiA9IGNvbnMgTmFtZS5oMlxubGV0IGgzID0gY29ucyBOYW1lLmgzXG5sZXQgaDQgPSBjb25zIE5hbWUuaDRcbmxldCBoNSA9IGNvbnMgTmFtZS5oNVxubGV0IGg2ID0gY29ucyBOYW1lLmg2XG5sZXQgaGVhZCA9IGNvbnMgTmFtZS5oZWFkXG5sZXQgaGVhZGVyID0gY29ucyBOYW1lLmhlYWRlclxubGV0IGhncm91cCA9IGNvbnMgTmFtZS5oZ3JvdXBcbmxldCBociA9IHZvaWRfY29ucyBOYW1lLmhyXG5sZXQgaHRtbCA9IGNvbnMgTmFtZS5odG1sXG5sZXQgaSA9IGNvbnMgTmFtZS5pXG5sZXQgaWZyYW1lID0gY29ucyBOYW1lLmlmcmFtZVxubGV0IGltZyA9IHZvaWRfY29ucyBOYW1lLmltZ1xubGV0IGlucHV0ID0gdm9pZF9jb25zIE5hbWUuaW5wdXRcbmxldCBpbnMgPSBjb25zIE5hbWUuaW5zXG5sZXQga2JkID0gY29ucyBOYW1lLmtiZFxubGV0IGtleWdlbiA9IGNvbnMgTmFtZS5rZXlnZW5cbmxldCBsYWJlbCA9IGNvbnMgTmFtZS5sYWJlbFxubGV0IGxlZ2VuZCA9IGNvbnMgTmFtZS5sZWdlbmRcbmxldCBsaSA9IGNvbnMgTmFtZS5saVxubGV0IGxpbmsgPSB2b2lkX2NvbnMgTmFtZS5saW5rXG5sZXQgbWFwID0gY29ucyBOYW1lLm1hcFxubGV0IG1hcmsgPSBjb25zIE5hbWUubWFya1xubGV0IG1lbnUgPSBjb25zIE5hbWUubWVudVxubGV0IG1ldGEgPSB2b2lkX2NvbnMgTmFtZS5tZXRhXG5sZXQgbWV0ZXIgPSBjb25zIE5hbWUubWV0ZXJcbmxldCBuYXYgPSBjb25zIE5hbWUubmF2XG5sZXQgbm9zY3JpcHQgPSBjb25zIE5hbWUubm9zY3JpcHRcbmxldCBvYmplY3QnID0gY29ucyBOYW1lLm9iamVjdCdcbmxldCBvbCA9IGNvbnMgTmFtZS5vbFxubGV0IG9wdGdyb3VwID0gY29ucyBOYW1lLm9wdGdyb3VwXG5sZXQgb3B0aW9uID0gY29ucyBOYW1lLm9wdGlvblxubGV0IG91dHB1dCA9IGNvbnMgTmFtZS5vdXRwdXRcbmxldCBwID0gY29ucyBOYW1lLnBcbmxldCBwYXJhbSA9IHZvaWRfY29ucyBOYW1lLnBhcmFtXG5sZXQgcHJlID0gY29ucyBOYW1lLnByZVxubGV0IHByb2dyZXNzID0gY29ucyBOYW1lLnByb2dyZXNzXG5sZXQgcSA9IGNvbnMgTmFtZS5xXG5sZXQgcnAgPSBjb25zIE5hbWUucnBcbmxldCBydCA9IGNvbnMgTmFtZS5ydFxubGV0IHJ1YnkgPSBjb25zIE5hbWUucnVieVxubGV0IHMgPSBjb25zIE5hbWUuc1xubGV0IHNhbXAgPSBjb25zIE5hbWUuc2FtcFxubGV0IHNjcmlwdCA9IGNvbnMgTmFtZS5zY3JpcHRcbmxldCBzZWN0aW9uID0gY29ucyBOYW1lLnNlY3Rpb25cbmxldCBzZWxlY3QgPSBjb25zIE5hbWUuc2VsZWN0XG5sZXQgc21hbGwgPSBjb25zIE5hbWUuc21hbGxcbmxldCBzb3VyY2UgPSB2b2lkX2NvbnMgTmFtZS5zb3VyY2VcbmxldCBzcGFuID0gY29ucyBOYW1lLnNwYW5cbmxldCBzdHJvbmcgPSBjb25zIE5hbWUuc3Ryb25nXG5sZXQgc3R5bGUgPSBjb25zIE5hbWUuc3R5bGVcbmxldCBzdWIgPSBjb25zIE5hbWUuc3ViXG5sZXQgc3VtbWFyeSA9IGNvbnMgTmFtZS5zdW1tYXJ5XG5sZXQgc3VwID0gY29ucyBOYW1lLnN1cFxubGV0IHRhYmxlID0gY29ucyBOYW1lLnRhYmxlXG5sZXQgdGJvZHkgPSBjb25zIE5hbWUudGJvZHlcbmxldCB0ZCA9IGNvbnMgTmFtZS50ZFxubGV0IHRleHRhcmVhID0gY29ucyBOYW1lLnRleHRhcmVhXG5sZXQgdGZvb3QgPSBjb25zIE5hbWUudGZvb3RcbmxldCB0aCA9IGNvbnMgTmFtZS50aFxubGV0IHRoZWFkID0gY29ucyBOYW1lLnRoZWFkXG5sZXQgdGltZSA9IGNvbnMgTmFtZS50aW1lXG5sZXQgdGl0bGUgPSBjb25zIE5hbWUudGl0bGVcbmxldCB0ciA9IGNvbnMgTmFtZS50clxubGV0IHRyYWNrID0gdm9pZF9jb25zIE5hbWUudHJhY2tcbmxldCB1ID0gY29ucyBOYW1lLnVcbmxldCB1bCA9IGNvbnMgTmFtZS51bFxubGV0IHZhciA9IGNvbnMgTmFtZS52YXJcbmxldCB2aWRlbyA9IGNvbnMgTmFtZS52aWRlb1xubGV0IHdiciA9IHZvaWRfY29ucyBOYW1lLndiclxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEFycmF5IHV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBlcXVhbCA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2Egb3JkID0gJ2EgLT4gJ2EgLT4gaW50XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBBcnJheXN9ICopXG5cbmluY2x1ZGUgQXJyYXlcblxubGV0IGVtcHR5ID0gW3x8XVxuXG5sZXQgZ2V0X3NhZmUgYSBpID1cbiAgaWYgaSA+PSAwICYmIGkgPCBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgU29tZSAoQXJyYXkudW5zYWZlX2dldCBhIGkpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBtYXBfaW5wbGFjZSBmIGEgPSBBcnJheS5pdGVyaSAoZnVuIGkgZSAtPiBBcnJheS51bnNhZmVfc2V0IGEgaSAoZiBlKSkgYVxubGV0IG1hcGlfaW5wbGFjZSBmIGEgPSBBcnJheS5pdGVyaSAoZnVuIGkgZSAtPiBBcnJheS51bnNhZmVfc2V0IGEgaSAoZiBpIGUpKSBhXG5sZXQgZm9sZCA9IEFycmF5LmZvbGRfbGVmdFxuXG5sZXQgZm9sZGkgZiBhY2MgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChmIGFjYyBpIGEuKGkpKSAoaSArIDEpXG4gIGluXG4gIGF1eCBhY2MgMFxuXG5sZXQgZm9sZF93aGlsZSBmIGFjYyBhID1cbiAgbGV0IHJlYyBmb2xkX3doaWxlX2kgZiBhY2MgaSA9XG4gICAgaWYgaSA8IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IGFjYywgY29udCA9IGYgYWNjIGEuKGkpIGluXG4gICAgICBtYXRjaCBjb250IHdpdGhcbiAgICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgICB8IGBDb250aW51ZSAtPiBmb2xkX3doaWxlX2kgZiBhY2MgKGkgKyAxKVxuICAgICkgZWxzZVxuICAgICAgYWNjXG4gIGluXG4gIGZvbGRfd2hpbGVfaSBmIGFjYyAwXG5cbmxldCBmb2xkX21hcCBmIGFjYyBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAoKiBuZWVkIHNwZWNpYWwgY2FzZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSByZXN1bHQgKilcbiAgaWYgbiA9IDAgdGhlblxuICAgIGFjYywgW3x8XVxuICBlbHNlIChcbiAgICBsZXQgYWNjLCBiMCA9IGYgYWNjIGEuKDApIGluXG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgbiBiMCBpblxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgZm9yIGkgPSAxIHRvIG4gLSAxIGRvXG4gICAgICBsZXQgbmV3X2FjYywgYiA9IGYgIWFjYyBhLihpKSBpblxuICAgICAgYWNjIDo9IG5ld19hY2M7XG4gICAgICByZXMuKGkpIDwtIGJcbiAgICBkb25lO1xuICAgICFhY2MsIHJlc1xuICApXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgKG4gKyAxKSBhY2MgaW5cbiAgQXJyYXkuaXRlcmlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBmIHJlcy4oaSkgeCBpblxuICAgICAgcmVzLihpICsgMSkgPC0gbmV3X2FjYylcbiAgICBhO1xuICByZXNcblxubGV0IHJldmVyc2VfaW5fcGxhY2UgYSA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBsZW4gPiAwIHRoZW5cbiAgICBmb3IgayA9IDAgdG8gKGxlbiAtIDEpIC8gMiBkb1xuICAgICAgbGV0IHQgPSBhLihrKSBpblxuICAgICAgYS4oaykgPC0gYS4obGVuIC0gMSAtIGspO1xuICAgICAgYS4obGVuIC0gMSAtIGspIDwtIHRcbiAgICBkb25lXG5cbmxldCBzb3J0ZWQgY21wIGEgPVxuICBsZXQgYiA9IEFycmF5LmNvcHkgYSBpblxuICBBcnJheS5zb3J0IGNtcCBiO1xuICBiXG5cbmxldCBzb3J0X2luZGljZXMgY21wIGEgPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgbGV0IGIgPSBBcnJheS5pbml0IGxlbiAoZnVuIGsgLT4gaykgaW5cbiAgQXJyYXkuc29ydCAoZnVuIGsxIGsyIC0+IGNtcCBhLihrMSkgYS4oazIpKSBiO1xuICBiXG5cbmxldCBzb3J0X3JhbmtpbmcgY21wIGEgPSBzb3J0X2luZGljZXMgY29tcGFyZSAoc29ydF9pbmRpY2VzIGNtcCBhKVxuXG5sZXQgcmV2IGEgPVxuICBsZXQgYiA9IEFycmF5LmNvcHkgYSBpblxuICByZXZlcnNlX2luX3BsYWNlIGI7XG4gIGJcblxuZXhjZXB0aW9uIEZvdW5kXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgZWx0IGEgPVxuICB0cnlcbiAgICBBcnJheS5pdGVyIChmdW4gZSAtPiBpZiBlcSBlIGVsdCB0aGVuIHJhaXNlX25vdHJhY2UgRm91bmQpIGE7XG4gICAgZmFsc2VcbiAgd2l0aCBGb3VuZCAtPiB0cnVlXG5cbmxldCByZWMgZmluZF9hdXggZiBhIGkgPVxuICBpZiBpID49IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBOb25lXG4gIGVsc2UgKFxuICAgIG1hdGNoIGYgaSBhLihpKSB3aXRoXG4gICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgTm9uZSAtPiBmaW5kX2F1eCBmIGEgKGkgKyAxKVxuICApXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbmxldCBmaW5kX21hcCBmIGEgPSBmaW5kX2F1eCAoZnVuIF8gLT4gZikgYSAwXG5sZXQgZmluZCA9IGZpbmRfbWFwXG5sZXQgZmluZF9tYXBfaSBmIGEgPSBmaW5kX2F1eCBmIGEgMFxubGV0IGZpbmRpID0gZmluZF9tYXBfaVxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG5sZXQgZmluZF9pZHggcCBhID1cbiAgZmluZF9hdXhcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBhIDBcblxubGV0IG1heCBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRcbiAgICAgICAgIChmdW4gYWNjIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYWNjIGVsdCA8IDAgdGhlblxuICAgICAgICAgICAgIGVsdFxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgYS4oMCkgYSlcblxubGV0IG1heF9leG4gY21wIGEgPVxuICBtYXRjaCBtYXggY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5Lm1heF9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgYXJnbWF4IGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZGlcbiAgICAgICAgIChmdW4gYWNjIGkgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhLihhY2MpIGVsdCA8IDAgdGhlblxuICAgICAgICAgICAgIGlcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIDAgYSlcblxubGV0IGFyZ21heF9leG4gY21wIGEgPVxuICBtYXRjaCBhcmdtYXggY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5LmFyZ21heF9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgbWluIGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZFxuICAgICAgICAgKGZ1biBhY2MgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhY2MgZWx0ID4gMCB0aGVuXG4gICAgICAgICAgICAgZWx0XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICBhLigwKSBhKVxuXG5sZXQgbWluX2V4biBjbXAgYSA9XG4gIG1hdGNoIG1pbiBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkubWluX2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBhcmdtaW4gY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkaVxuICAgICAgICAgKGZ1biBhY2MgaSBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGEuKGFjYykgZWx0ID4gMCB0aGVuXG4gICAgICAgICAgICAgaVxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgMCBhKVxuXG5sZXQgYXJnbWluX2V4biBjbXAgYSA9XG4gIG1hdGNoIGFyZ21pbiBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkuYXJnbWluX2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBmaWx0ZXJfbWFwIGYgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYScgPSBBcnJheS5vZl9saXN0IGFjYyBpblxuICAgICAgcmV2ZXJzZV9pbl9wbGFjZSBhJztcbiAgICAgIGEnXG4gICAgKSBlbHNlIChcbiAgICAgIG1hdGNoIGYgYS4oaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGF1eCBhY2MgKGkgKyAxKVxuICAgICAgfCBTb21lIHggLT4gYXV4ICh4IDo6IGFjYykgKGkgKyAxKVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIDBcblxubGV0IGZpbHRlciBwIGEgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1biB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIHhcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBhXG5cbigqIGFwcGVuZCBbcmV2IGFdIGluIGZyb250IG9mIFthY2NdICopXG5sZXQgcmVjIF9fcmV2X2FwcGVuZF9saXN0IGEgYWNjIGkgPVxuICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIGFjY1xuICBlbHNlXG4gICAgX19yZXZfYXBwZW5kX2xpc3QgYSAoYS4oaSkgOjogYWNjKSAoaSArIDEpXG5cbmxldCBmbGF0X21hcCBmIGEgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IGEnID0gQXJyYXkub2ZfbGlzdCBhY2MgaW5cbiAgICAgIHJldmVyc2VfaW5fcGxhY2UgYSc7XG4gICAgICBhJ1xuICAgICkgZWxzZSAoXG4gICAgICBsZXQgYScgPSBmIGEuKGkpIGluXG4gICAgICBhdXggKF9fcmV2X2FwcGVuZF9saXN0IGEnIGFjYyAwKSAoaSArIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gMFxuXG5sZXQgbW9ub2lkX3Byb2R1Y3QgZiBhMSBhMiA9XG4gIGxldCBuYTEgPSBsZW5ndGggYTEgaW5cbiAgaW5pdFxuICAgIChuYTEgKiBsZW5ndGggYTIpXG4gICAgKGZ1biBpX3Byb2QgLT5cbiAgICAgIGxldCBpID0gaV9wcm9kIG1vZCBuYTEgaW5cbiAgICAgIGxldCBqID0gaV9wcm9kIC8gbmExIGluXG4gICAgICBmIGExLihpKSBhMi4oaikpXG5cbmxldCByZWMgX2xvb2t1cF9yZWMgfmNtcCBrIGEgaSBqID1cbiAgaWYgaSA+IGogdGhlblxuICAgIHJhaXNlIE5vdF9mb3VuZFxuICBlbHNlIGlmIGkgPSBqIHRoZW5cbiAgICBpZiBjbXAgayBhLihpKSA9IDAgdGhlblxuICAgICAgaVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICBlbHNlIChcbiAgICBsZXQgbWlkZGxlID0gKGogKyBpKSAvIDIgaW5cbiAgICBtYXRjaCBjbXAgayBhLihtaWRkbGUpIHdpdGhcbiAgICB8IDAgLT4gbWlkZGxlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gX2xvb2t1cF9yZWMgfmNtcCBrIGEgaSAobWlkZGxlIC0gMSlcbiAgICB8IF8gLT4gX2xvb2t1cF9yZWMgfmNtcCBrIGEgKG1pZGRsZSArIDEpIGpcbiAgKVxuXG5sZXQgX2xvb2t1cF9leG4gfmNtcCBrIGEgaSBqID1cbiAgaWYgaSA+IGogdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gIG1hdGNoIGNtcCBrIGEuKGkpIHdpdGhcbiAgfCAwIC0+IGlcbiAgfCBuIHdoZW4gbiA8IDAgLT4gcmFpc2UgTm90X2ZvdW5kICgqIHRvbyBsb3cgKilcbiAgfCBfIHdoZW4gaSA9IGogLT4gcmFpc2UgTm90X2ZvdW5kICgqIHRvbyBoaWdoICopXG4gIHwgXyAtPlxuICAgIChtYXRjaCBjbXAgayBhLihqKSB3aXRoXG4gICAgfCAwIC0+IGpcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSAoaSArIDEpIChqIC0gMSlcbiAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kKVxuKCogdG9vIGhpZ2ggKilcblxubGV0IGxvb2t1cF9leG4gfmNtcCBrIGEgPSBfbG9va3VwX2V4biB+Y21wIGsgYSAwIChBcnJheS5sZW5ndGggYSAtIDEpXG5cbmxldCBsb29rdXAgfmNtcCBrIGEgPVxuICB0cnkgU29tZSAoX2xvb2t1cF9leG4gfmNtcCBrIGEgMCAoQXJyYXkubGVuZ3RoIGEgLSAxKSlcbiAgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgYnNlYXJjaCB+Y21wIGsgYSA9XG4gIGxldCByZWMgYXV4IGkgaiA9XG4gICAgaWYgaSA+IGogdGhlblxuICAgICAgYEp1c3RfYWZ0ZXIgalxuICAgIGVsc2UgKFxuICAgICAgbGV0IG1pZGRsZSA9IGkgKyAoKGogLSBpKSAvIDIpIGluXG4gICAgICAoKiBhdm9pZCBvdmVyZmxvdyAqKVxuICAgICAgbWF0Y2ggY21wIGsgYS4obWlkZGxlKSB3aXRoXG4gICAgICB8IDAgLT4gYEF0IG1pZGRsZVxuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gYXV4IGkgKG1pZGRsZSAtIDEpXG4gICAgICB8IF8gLT4gYXV4IChtaWRkbGUgKyAxKSBqXG4gICAgKVxuICBpblxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW5cbiAgICBgRW1wdHlcbiAgZWxzZSAoXG4gICAgbWF0Y2ggY21wIGEuKDApIGssIGNtcCBhLihuIC0gMSkgayB3aXRoXG4gICAgfCBjLCBfIHdoZW4gYyA+IDAgLT4gYEFsbF9iaWdnZXJcbiAgICB8IF8sIGMgd2hlbiBjIDwgMCAtPiBgQWxsX2xvd2VyXG4gICAgfCBfIC0+IGF1eCAwIChuIC0gMSlcbiAgKVxuXG5sZXQgcmVjIF9mb3JfYWxsMiBwIGExIGEyIGkxIGkyIH5sZW4gPVxuICBsZW4gPSAwXG4gIHx8IChwIGExLihpMSkgYTIuKGkyKSAmJiBfZm9yX2FsbDIgcCBhMSBhMiAoaTEgKyAxKSAoaTIgKyAxKSB+bGVuOihsZW4gLSAxKSlcblxubGV0IGZvcl9hbGwyIHAgYSBiID1cbiAgQXJyYXkubGVuZ3RoIGEgPSBBcnJheS5sZW5ndGggYiAmJiBfZm9yX2FsbDIgcCBhIGIgMCAwIH5sZW46KEFycmF5Lmxlbmd0aCBhKVxuXG5sZXQgcmVjIF9leGlzdHMyIHAgYTEgYTIgaTEgaTIgfmxlbiA9XG4gIGxlbiA+IDBcbiAgJiYgKHAgYTEuKGkxKSBhMi4oaTIpIHx8IF9leGlzdHMyIHAgYTEgYTIgKGkxICsgMSkgKGkyICsgMSkgfmxlbjoobGVuIC0gMSkpXG5cbmxldCBleGlzdHMyIHAgYSBiID1cbiAgX2V4aXN0czIgcCBhIGIgMCAwIH5sZW46KFN0ZGxpYi5taW4gKEFycmF5Lmxlbmd0aCBhKSAoQXJyYXkubGVuZ3RoIGIpKVxuXG5sZXQgX2ZvbGQyIGYgYWNjIGEgYiBpIGogfmxlbiA9XG4gIGxldCByZWMgYXV4IGFjYyBvID1cbiAgICBpZiBvID0gbGVuIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2UgKFxuICAgICAgbGV0IGFjYyA9IGYgYWNjIChBcnJheS5nZXQgYSAoaSArIG8pKSAoQXJyYXkuZ2V0IGIgKGogKyBvKSkgaW5cbiAgICAgIGF1eCBhY2MgKG8gKyAxKVxuICAgIClcbiAgaW5cbiAgYXV4IGFjYyAwXG5cbmxldCBmb2xkMiBmIGFjYyBhIGIgPVxuICBpZiBsZW5ndGggYSA8PiBsZW5ndGggYiB0aGVuIGludmFsaWRfYXJnIFwiZm9sZDJcIjtcbiAgX2ZvbGQyIGYgYWNjIGEgYiAwIDAgfmxlbjooQXJyYXkubGVuZ3RoIGEpXG5cbmxldCAoIC0tICkgaSBqID1cbiAgaWYgaSA8PSBqIHRoZW5cbiAgICBBcnJheS5pbml0IChqIC0gaSArIDEpIChmdW4gayAtPiBpICsgaylcbiAgZWxzZVxuICAgIEFycmF5LmluaXQgKGkgLSBqICsgMSkgKGZ1biBrIC0+IGkgLSBrKVxuXG5sZXQgKCAtLV4gKSBpIGogPVxuICBpZiBpID0gaiB0aGVuXG4gICAgW3x8XVxuICBlbHNlIGlmIGkgPiBqIHRoZW5cbiAgICBBcnJheS5pbml0IChpIC0gaikgKGZ1biBrIC0+IGkgLSBrKVxuICBlbHNlXG4gICAgQXJyYXkuaW5pdCAoaiAtIGkpIChmdW4gayAtPiBpICsgaylcblxuKCoqIGFsbCB0aGUgZWxlbWVudHMgb2YgYSwgYnV0IHRoZSBpLXRoLCBpbnRvIGEgbGlzdCAqKVxubGV0IGV4Y2VwdF9pZHggYSBpID1cbiAgZm9sZGlcbiAgICAoZnVuIGFjYyBqIGVsdCAtPlxuICAgICAgaWYgaSA9IGogdGhlblxuICAgICAgICBhY2NcbiAgICAgIGVsc2VcbiAgICAgICAgZWx0IDo6IGFjYylcbiAgICBbXSBhXG5cbmxldCBlcXVhbCBlcSBhIGIgPVxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIGVxIGEuKGkpIGIuKGkpICYmIGF1eCAoaSArIDEpXG4gIGluXG4gIEFycmF5Lmxlbmd0aCBhID0gQXJyYXkubGVuZ3RoIGIgJiYgYXV4IDBcblxubGV0IGNvbXBhcmUgY21wIGEgYiA9XG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGIgdGhlblxuICAgICAgICAwXG4gICAgICBlbHNlXG4gICAgICAgIC0xXG4gICAgZWxzZSBpZiBpID0gQXJyYXkubGVuZ3RoIGIgdGhlblxuICAgICAgMVxuICAgIGVsc2UgKFxuICAgICAgbGV0IGMgPSBjbXAgYS4oaSkgYi4oaSkgaW5cbiAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgYXV4IChpICsgMSlcbiAgICAgIGVsc2VcbiAgICAgICAgY1xuICAgIClcbiAgaW5cbiAgYXV4IDBcblxuKCogc3dhcCBlbGVtZW50cyBvZiBhcnJheSAqKVxubGV0IHN3YXAgYSBpIGogPVxuICBpZiBpIDw+IGogdGhlbiAoXG4gICAgbGV0IHRtcCA9IGEuKGkpIGluXG4gICAgYS4oaSkgPC0gYS4oaik7XG4gICAgYS4oaikgPC0gdG1wXG4gIClcblxuKCogc2h1ZmZsZSBhW2kg4oCmIGpdIHVzaW5nIHRoZSBnaXZlbiBpbnQgcmFuZG9tIGdlbmVyYXRvclxuICAgU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVyLVlhdGVzX3NodWZmbGUgKilcbmxldCBfc2h1ZmZsZSBfcmFuZF9pbnQgYSBpIGogPVxuICBmb3IgayA9IGogLSAxIGRvd250byBpICsgMSBkb1xuICAgIGxldCBsID0gX3JhbmRfaW50IChrICsgMSkgaW5cbiAgICBsZXQgdG1wID0gYS4obCkgaW5cbiAgICBhLihsKSA8LSBhLihrKTtcbiAgICBhLihrKSA8LSB0bXBcbiAgZG9uZVxuXG5sZXQgc2h1ZmZsZSBhID0gX3NodWZmbGUgUmFuZG9tLmludCBhIDAgKEFycmF5Lmxlbmd0aCBhKVxubGV0IHNodWZmbGVfd2l0aCBzdCBhID0gX3NodWZmbGUgKFJhbmRvbS5TdGF0ZS5pbnQgc3QpIGEgMCAoQXJyYXkubGVuZ3RoIGEpXG5cbmxldCByYW5kb21fY2hvb3NlIGEgPVxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5yYW5kb21fY2hvb3NlXCI7XG4gIGZ1biBzdCAtPiBhLihSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCByYW5kb21fbGVuIG4gZyBzdCA9IEFycmF5LmluaXQgbiAoZnVuIF8gLT4gZyBzdClcblxubGV0IHJhbmRvbSBnIHN0ID1cbiAgbGV0IG4gPSBSYW5kb20uU3RhdGUuaW50IHN0IDFfMDAwIGluXG4gIHJhbmRvbV9sZW4gbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbiA9IDEgKyBSYW5kb20uU3RhdGUuaW50IHN0IDFfMDAwIGluXG4gIHJhbmRvbV9sZW4gbiBnIHN0XG5cbmxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgID8ocHBfc2VwID0gZnVuIG91dCAoKSAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCIsQCBcIikgcHBfaXRlbSBvdXQgYSA9XG4gIHBwX3N0YXJ0IG91dCAoKTtcbiAgZm9yIGsgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGsgPiAwIHRoZW4gcHBfc2VwIG91dCAoKTtcbiAgICBwcF9pdGVtIG91dCBhLihrKVxuICBkb25lO1xuICBwcF9zdG9wIG91dCAoKVxuXG5sZXQgcHBfaSA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgID8ocHBfc2VwID0gZnVuIG91dCAoKSAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCIsQCBcIikgcHBfaXRlbSBvdXQgYSA9XG4gIHBwX3N0YXJ0IG91dCAoKTtcbiAgZm9yIGsgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGsgPiAwIHRoZW4gcHBfc2VwIG91dCAoKTtcbiAgICBwcF9pdGVtIGsgb3V0IGEuKGspXG4gIGRvbmU7XG4gIHBwX3N0b3Agb3V0ICgpXG5cbmxldCB0b19zdHJpbmcgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGEgPVxuICBBcnJheS50b19saXN0IGEgfD4gTGlzdC5tYXAgaXRlbV90b19zdHJpbmcgfD4gU3RyaW5nLmNvbmNhdCBzZXBcblxubGV0IHRvX3NlcSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA+PSBsZW5ndGggYSB0aGVuXG4gICAgICBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgU2VxLkNvbnMgKGEuKGkpLCBhdXggKGkgKyAxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX2l0ZXIgYSBrID0gaXRlciBrIGFcblxubGV0IHRvX2dlbiBhID1cbiAgbGV0IGsgPSByZWYgMCBpblxuICBmdW4gKCkgLT5cbiAgICBpZiAhayA8IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IHggPSBhLighaykgaW5cbiAgICAgIGluY3IgaztcbiAgICAgIFNvbWUgeFxuICAgICkgZWxzZVxuICAgICAgTm9uZVxuXG4oKiogezIgR2VuZXJpYyBGdW5jdGlvbnN9ICopXG5cbm1vZHVsZSB0eXBlIE1PTk9fQVJSQVkgPSBzaWdcbiAgdHlwZSBlbHRcbiAgdHlwZSB0XG5cbiAgdmFsIGxlbmd0aCA6IHQgLT4gaW50XG4gIHZhbCBnZXQgOiB0IC0+IGludCAtPiBlbHRcbiAgdmFsIHNldCA6IHQgLT4gaW50IC0+IGVsdCAtPiB1bml0XG5lbmRcblxuKCogRHVhbCBQaXZvdCBRdWlja3NvcnQgKFlhcm9zbGF2c2tpeSlcbiAgIGZyb20gXCJhdmVyYWdlIGNhc2UgYW5hbHlzaXMgb2YgSmF2YSA3J3MgRHVhbCBQaXZvdCBRdWlja3NvcnRcIiAqKVxubW9kdWxlIFNvcnRHZW5lcmljIChBIDogTU9OT19BUlJBWSkgPSBzdHJ1Y3RcbiAgbW9kdWxlIFJhbmQgPSBSYW5kb20uU3RhdGVcblxuICBsZXQgc2VlZF8gPSBbfCAxMjM0NTYgfF1cblxuICB0eXBlIHN0YXRlID0ge1xuICAgIG11dGFibGUgbDogaW50OyAoKiBsZWZ0IHBvaW50ZXIgKilcbiAgICBtdXRhYmxlIGc6IGludDsgKCogcmlnaHQgcG9pbnRlciAqKVxuICAgIG11dGFibGUgazogaW50O1xuICB9XG5cbiAgbGV0IHJhbmRfaWR4XyByYW5kIGkgaiA9IGkgKyBSYW5kLmludCByYW5kIChqIC0gaSlcblxuICBsZXQgc3dhcF8gYSBpIGogPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgICgpXG4gICAgZWxzZSAoXG4gICAgICBsZXQgdG1wID0gQS5nZXQgYSBpIGluXG4gICAgICBBLnNldCBhIGkgKEEuZ2V0IGEgaik7XG4gICAgICBBLnNldCBhIGogdG1wXG4gICAgKVxuXG4gIGxldCBzb3J0IH5jbXAgYSA9XG4gICAgbGV0IHJlYyBpbnNlcnRfIGEgaSBrID1cbiAgICAgIGlmIGsgPCBpIHRoZW5cbiAgICAgICAgKClcbiAgICAgIGVsc2UgaWYgY21wIChBLmdldCBhIGspIChBLmdldCBhIChrICsgMSkpID4gMCB0aGVuIChcbiAgICAgICAgc3dhcF8gYSBrIChrICsgMSk7XG4gICAgICAgIGluc2VydF8gYSBpIChrIC0gMSlcbiAgICAgIClcbiAgICBpblxuICAgICgqIHJlY3Vyc2l2ZSBwYXJ0IG9mIGluc2VydGlvbiBzb3J0ICopXG4gICAgbGV0IHJlYyBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogayA9XG4gICAgICBpZiBrIDwgaiB0aGVuIChcbiAgICAgICAgaW5zZXJ0XyBhIGkgKGsgLSAxKTtcbiAgICAgICAgc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIChrICsgMSlcbiAgICAgIClcbiAgICBpblxuICAgICgqIGluc2VydGlvbiBzb3J0LCBmb3Igc21hbGwgc2xpY2VzICopXG4gICAgbGV0IHNvcnRfaW5zZXJ0aW9uIGEgaSBqID1cbiAgICAgIGlmIGogLSBpID4gMSB0aGVuIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiAoaSArIDEpXG4gICAgaW5cbiAgICBsZXQgcmFuZCA9IFJhbmQubWFrZSBzZWVkXyBpblxuICAgICgqIHNvcnQgc2xpY2UuXG4gICAgICAgVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGUgdHdvIHBpdm90cyBhcmUgZXF1YWwsIGJ1dCBpdCdzIHVubGlrZWx5LiAqKVxuICAgIGxldCByZWMgc29ydF9zbGljZV8gfnN0IGEgaSBqID1cbiAgICAgIGlmIGogLSBpID4gMTAgdGhlbiAoXG4gICAgICAgIHN0LmwgPC0gaTtcbiAgICAgICAgc3QuZyA8LSBqIC0gMTtcbiAgICAgICAgc3QuayA8LSBpO1xuICAgICAgICAoKiBjaG9vc2UgcGl2b3RzICopXG4gICAgICAgIGxldCBwID0gQS5nZXQgYSAocmFuZF9pZHhfIHJhbmQgaSBqKSBpblxuICAgICAgICBsZXQgcSA9IEEuZ2V0IGEgKHJhbmRfaWR4XyByYW5kIGkgaikgaW5cbiAgICAgICAgKCogaW52YXJpYW50OiBzdC5wIDw9IHN0LnEsIHN3YXAgdGhlbSBvdGhlcndpc2UgKilcbiAgICAgICAgbGV0IHAsIHEgPVxuICAgICAgICAgIGlmIGNtcCBwIHEgPiAwIHRoZW5cbiAgICAgICAgICAgIHEsIHBcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBwLCBxXG4gICAgICAgIGluXG4gICAgICAgIHdoaWxlIHN0LmsgPD0gc3QuZyBkb1xuICAgICAgICAgIGxldCBjdXIgPSBBLmdldCBhIHN0LmsgaW5cbiAgICAgICAgICBpZiBjbXAgY3VyIHAgPCAwIHRoZW4gKFxuICAgICAgICAgICAgKCogaW5zZXJ0IGluIGxlZnRtb3N0IGJhbmQgKilcbiAgICAgICAgICAgIGlmIHN0LmsgPD4gc3QubCB0aGVuIHN3YXBfIGEgc3QuayBzdC5sO1xuICAgICAgICAgICAgc3QubCA8LSBzdC5sICsgMVxuICAgICAgICAgICkgZWxzZSBpZiBjbXAgY3VyIHEgPiAwIHRoZW4gKFxuICAgICAgICAgICAgKCogaW5zZXJ0IGluIHJpZ2h0bW9zdCBiYW5kICopXG4gICAgICAgICAgICB3aGlsZSBzdC5rIDwgc3QuZyAmJiBjbXAgKEEuZ2V0IGEgc3QuZykgcSA+IDAgZG9cbiAgICAgICAgICAgICAgc3QuZyA8LSBzdC5nIC0gMVxuICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgIHN3YXBfIGEgc3QuayBzdC5nO1xuICAgICAgICAgICAgc3QuZyA8LSBzdC5nIC0gMTtcbiAgICAgICAgICAgICgqIHRoZSBlbGVtZW50IHN3YXBwZWQgZnJvbSB0aGUgcmlnaHQgbWlnaHQgYmUgaW4gdGhlIGZpcnN0IHNpdHVhdGlvbi5cbiAgICAgICAgICAgICAgIHRoYXQgaXMsIDwgcCAgKHdlIGtub3cgaXQncyA8PSBxIGFscmVhZHkpICopXG4gICAgICAgICAgICBpZiBjbXAgKEEuZ2V0IGEgc3QuaykgcCA8IDAgdGhlbiAoXG4gICAgICAgICAgICAgIGlmIHN0LmsgPD4gc3QubCB0aGVuIHN3YXBfIGEgc3QuayBzdC5sO1xuICAgICAgICAgICAgICBzdC5sIDwtIHN0LmwgKyAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdC5rIDwtIHN0LmsgKyAxXG4gICAgICAgIGRvbmU7XG4gICAgICAgICgqIHNhdmUgdmFsdWVzIGJlZm9yZSByZWN1cnNpbmcgKilcbiAgICAgICAgbGV0IGwgPSBzdC5sIGFuZCBnID0gc3QuZyBhbmQgc29ydF9taWRkbGUgPSBjbXAgcCBxIDwgMCBpblxuICAgICAgICBzb3J0X3NsaWNlXyB+c3QgYSBpIGw7XG4gICAgICAgIGlmIHNvcnRfbWlkZGxlIHRoZW4gc29ydF9zbGljZV8gfnN0IGEgbCAoZyArIDEpO1xuICAgICAgICBzb3J0X3NsaWNlXyB+c3QgYSAoZyArIDEpIGpcbiAgICAgICkgZWxzZVxuICAgICAgICBzb3J0X2luc2VydGlvbiBhIGkgalxuICAgIGluXG4gICAgaWYgQS5sZW5ndGggYSA+IDAgdGhlbiAoXG4gICAgICBsZXQgc3QgPSB7IGwgPSAwOyBnID0gQS5sZW5ndGggYTsgayA9IDAgfSBpblxuICAgICAgc29ydF9zbGljZV8gfnN0IGEgMCAoQS5sZW5ndGggYSlcbiAgICApXG5lbmRcblxubGV0IHNvcnRfZ2VuZXJpYyAodHlwZSBhcnIgZWx0KVxuICAgIChtb2R1bGUgQSA6IE1PTk9fQVJSQVkgd2l0aCB0eXBlIHQgPSBhcnIgYW5kIHR5cGUgZWx0ID0gZWx0KSB+Y21wIGEgPVxuICBsZXQgbW9kdWxlIFMgPSBTb3J0R2VuZXJpYyAoQSkgaW5cbiAgUy5zb3J0IH5jbXAgYVxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPj49ICkgYSBmID0gZmxhdF9tYXAgZiBhXG4gIGxldCAoID4+fCApIGEgZiA9IG1hcCBmIGFcbiAgbGV0ICggPnw9ICkgYSBmID0gbWFwIGYgYVxuICBsZXQgKCAtLSApID0gKCAtLSApXG4gIGxldCAoIC0tXiApID0gKCAtLV4gKVxuXG4gIHR5cGUgJ2EgdCA9ICdhIGFycmF5XG5cbiAgbGV0ICggbGV0KiApID0gKCA+Pj0gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBhMSBhMiA9IG1vbm9pZF9wcm9kdWN0IChmdW4geCB5IC0+IHgsIHkpIGExIGEyXG4gIGxldCAoIGFuZCogKSA9ICggYW5kKyApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuXG5cbnR5cGUgdCA9IGZsb2F0XG5cbnR5cGUgZnBjbGFzcyA9IFN0ZGxpYi5mcGNsYXNzID1cbiAgfCBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPSApXG4gIGxldCAoIDw+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw+IClcbiAgbGV0ICggPCApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8IClcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPD0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD0gKVxuICBsZXQgKCA+PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+PSApXG4gIGxldCAoIH4tICkgOiB0IC0+IHQgPSBTdGRsaWIuKCB+LS4gKVxuICBsZXQgKCArICkgOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi4oICsuIClcbiAgbGV0ICggLSApIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIuKCAtLiApXG4gIGxldCAoICogKSA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLiggKi4gKVxuICBsZXQgKCAvICkgOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi4oIC8uIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbmxldCBuYW4gPSBTdGRsaWIubmFuXG5sZXQgaW5maW5pdHkgPSBTdGRsaWIuaW5maW5pdHlcbmxldCBuZWdfaW5maW5pdHkgPSBTdGRsaWIubmVnX2luZmluaXR5XG5sZXQgbWF4X3ZhbHVlID0gaW5maW5pdHlcbmxldCBtaW5fdmFsdWUgPSBuZWdfaW5maW5pdHlcbmxldCBtYXhfZmluaXRlX3ZhbHVlID0gU3RkbGliLm1heF9mbG9hdFxubGV0IGVwc2lsb24gPSBTdGRsaWIuZXBzaWxvbl9mbG9hdFxubGV0IHBpID0gMHgxLjkyMWZiNTQ0NDJkMThwKzFcbmxldCBpc19uYW4geCA9IFN0ZGxpYi4oY2xhc3NpZnlfZmxvYXQgeCA9IFN0ZGxpYi5GUF9uYW4pXG5sZXQgYWRkID0gKCArLiApXG5sZXQgc3ViID0gKCAtLiApXG5sZXQgbXVsID0gKCAqLiApXG5sZXQgZGl2ID0gKCAvLiApXG5sZXQgbmVnID0gKCB+LS4gKVxubGV0IGFicyA9IFN0ZGxpYi5hYnNfZmxvYXRcbmxldCBzY2FsZSA9ICggKi4gKVxuXG5sZXQgbWluICh4IDogdCkgeSA9XG4gIG1hdGNoIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB4LCBTdGRsaWIuY2xhc3NpZnlfZmxvYXQgeSB3aXRoXG4gIHwgRlBfbmFuLCBfIC0+IHlcbiAgfCBfLCBGUF9uYW4gLT4geFxuICB8IF8gLT5cbiAgICBpZiB4IDwgeSB0aGVuXG4gICAgICB4XG4gICAgZWxzZVxuICAgICAgeVxuXG5sZXQgbWF4ICh4IDogdCkgeSA9XG4gIG1hdGNoIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB4LCBTdGRsaWIuY2xhc3NpZnlfZmxvYXQgeSB3aXRoXG4gIHwgRlBfbmFuLCBfIC0+IHlcbiAgfCBfLCBGUF9uYW4gLT4geFxuICB8IF8gLT5cbiAgICBpZiB4ID4geSB0aGVuXG4gICAgICB4XG4gICAgZWxzZVxuICAgICAgeVxuXG5sZXQgZXF1YWwgKGEgOiBmbG9hdCkgYiA9IGEgPSBiXG5sZXQgaGFzaCA6IHQgLT4gaW50ID0gSGFzaHRibC5oYXNoXG5sZXQgY29tcGFyZSAoYSA6IGZsb2F0KSBiID0gU3RkbGliLmNvbXBhcmUgYSBiXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2Zsb2F0XG5cbmxldCBmc2lnbiBhID1cbiAgaWYgaXNfbmFuIGEgdGhlblxuICAgIG5hblxuICBlbHNlIGlmIGEgPSAwLiB0aGVuXG4gICAgYVxuICBlbHNlXG4gICAgU3RkbGliLmNvcHlzaWduIDEuIGFcblxuZXhjZXB0aW9uIFRyYXBOYU4gb2Ygc3RyaW5nXG5cbmxldCBzaWduX2V4biAoYSA6IGZsb2F0KSA9XG4gIGlmIGlzX25hbiBhIHRoZW5cbiAgICByYWlzZSAoVHJhcE5hTiBcInNpZ25fZXhuXCIpXG4gIGVsc2VcbiAgICBjb21wYXJlIGEgMC5cblxubGV0IHJvdW5kIHggPVxuICBsZXQgbG93ID0gZmxvb3IgeCBpblxuICBsZXQgaGlnaCA9IGNlaWwgeCBpblxuICBpZiB4IC0uIGxvdyA+IGhpZ2ggLS4geCB0aGVuXG4gICAgaGlnaFxuICBlbHNlXG4gICAgbG93XG5cbmxldCB0b19pbnQgKGEgOiBmbG9hdCkgPSBTdGRsaWIuaW50X29mX2Zsb2F0IGFcbmxldCBvZl9pbnQgKGEgOiBpbnQpID0gU3RkbGliLmZsb2F0X29mX2ludCBhXG5sZXQgdG9fc3RyaW5nIChhIDogZmxvYXQpID0gU3RkbGliLnN0cmluZ19vZl9mbG9hdCBhXG5sZXQgb2Zfc3RyaW5nX2V4biAoYSA6IHN0cmluZykgPSBTdGRsaWIuZmxvYXRfb2Zfc3RyaW5nIGFcblxubGV0IG9mX3N0cmluZ19vcHQgKGEgOiBzdHJpbmcpID1cbiAgdHJ5IFNvbWUgKFN0ZGxpYi5mbG9hdF9vZl9zdHJpbmcgYSkgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgcmFuZG9tIG4gc3QgPSBSYW5kb20uU3RhdGUuZmxvYXQgc3QgblxubGV0IHJhbmRvbV9zbWFsbCA9IHJhbmRvbSAxMDAuMFxubGV0IHJhbmRvbV9yYW5nZSBpIGogc3QgPSBpICsuIHJhbmRvbSAoaiAtLiBpKSBzdFxubGV0IGVxdWFsX3ByZWNpc2lvbiB+ZXBzaWxvbiBhIGIgPSBhYnNfZmxvYXQgKGEgLS4gYikgPCBlcHNpbG9uXG5sZXQgY2xhc3NpZnkgPSBTdGRsaWIuY2xhc3NpZnlfZmxvYXRcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBFeHRlbnNpb24gdG8gdGhlIHN0YW5kYXJkIEhhc2h0Ymx9ICAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBlcSA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2EgaGFzaCA9ICdhIC0+IGludFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBQb2x5bW9ycGhpYyB0YWJsZXN9ICopXG5cbm1vZHVsZSBQb2x5ID0gc3RydWN0XG4gIGxldCBnZXQgdGJsIHggPSB0cnkgU29tZSAoSGFzaHRibC5maW5kIHRibCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBnZXRfb3IgdGJsIHggfmRlZmF1bHQgPSB0cnkgSGFzaHRibC5maW5kIHRibCB4IHdpdGggTm90X2ZvdW5kIC0+IGRlZmF1bHRcbiAgbGV0IGtleXMgdGJsIGsgPSBIYXNodGJsLml0ZXIgKGZ1biBrZXkgXyAtPiBrIGtleSkgdGJsXG4gIGxldCB2YWx1ZXMgdGJsIGsgPSBIYXNodGJsLml0ZXIgKGZ1biBfIHYgLT4gayB2KSB0YmxcbiAgbGV0IGtleXNfbGlzdCB0YmwgPSBIYXNodGJsLmZvbGQgKGZ1biBrIF8gYSAtPiBrIDo6IGEpIHRibCBbXVxuICBsZXQgdmFsdWVzX2xpc3QgdGJsID0gSGFzaHRibC5mb2xkIChmdW4gXyB2IGEgLT4gdiA6OiBhKSB0YmwgW11cblxuICBsZXQgYWRkX2xpc3QgdGJsIGsgdiA9XG4gICAgbGV0IGwgPSB0cnkgSGFzaHRibC5maW5kIHRibCBrIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgSGFzaHRibC5yZXBsYWNlIHRibCBrICh2IDo6IGwpXG5cbiAgbGV0IGluY3IgPyhieSA9IDEpIHRibCB4ID1cbiAgICBsZXQgbiA9IGdldF9vciB0YmwgeCB+ZGVmYXVsdDowIGluXG4gICAgaWYgbiArIGJ5IDw9IDAgdGhlblxuICAgICAgSGFzaHRibC5yZW1vdmUgdGJsIHhcbiAgICBlbHNlXG4gICAgICBIYXNodGJsLnJlcGxhY2UgdGJsIHggKG4gKyBieSlcblxuICBsZXQgZGVjciA/KGJ5ID0gMSkgdGJsIHggPVxuICAgIHRyeVxuICAgICAgbGV0IG4gPSBIYXNodGJsLmZpbmQgdGJsIHggaW5cbiAgICAgIGlmIG4gLSBieSA8PSAwIHRoZW5cbiAgICAgICAgSGFzaHRibC5yZW1vdmUgdGJsIHhcbiAgICAgIGVsc2VcbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIHRibCB4IChuIC0gYnkpXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gKClcblxuICBsZXQgbWFwX2xpc3QgZiBoID0gSGFzaHRibC5mb2xkIChmdW4geCB5IGFjYyAtPiBmIHggeSA6OiBhY2MpIGggW11cbiAgbGV0IHRvX2l0ZXIgdGJsIGsgPSBIYXNodGJsLml0ZXIgKGZ1biBrZXkgdiAtPiBrIChrZXksIHYpKSB0YmxcbiAgbGV0IGFkZF9pdGVyIHRibCBpID0gaSAoZnVuIChrLCB2KSAtPiBIYXNodGJsLmFkZCB0YmwgayB2KVxuXG4gIGxldCBhZGRfaXRlcl93aXRoIH5mIHRibCBpID1cbiAgICBpIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBIYXNodGJsLmFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG5cbiAgbGV0IGFkZF9zZXEgdGJsIHNlcSA9IFNlcS5pdGVyIChmdW4gKGssIHYpIC0+IEhhc2h0YmwuYWRkIHRibCBrIHYpIHNlcVxuXG4gIGxldCBhZGRfc2VxX3dpdGggfmYgdGJsIHNlcSA9XG4gICAgU2VxLml0ZXJcbiAgICAgIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBIYXNodGJsLmFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG4gICAgICBzZXFcblxuICAoKiBoZWxwZXIgZm9yIGJ1aWxkaW5nIGhhc2h0YWJsZXMgYnkgYnVsayBtdXRhdGlvbiAqKVxuICBsZXRbQGlubGluZV0gbWtfdGJsXyBmIHggPVxuICAgIGxldCB0YmwgPSBIYXNodGJsLmNyZWF0ZSAzMiBpblxuICAgIGYgdGJsIHg7XG4gICAgdGJsXG5cbiAgbGV0IG9mX2l0ZXIgaSA9IG1rX3RibF8gYWRkX2l0ZXIgaVxuICBsZXQgb2Zfc2VxIGkgPSBta190YmxfIGFkZF9zZXEgaVxuICBsZXQgb2ZfaXRlcl93aXRoIH5mIGkgPSBta190YmxfIChhZGRfaXRlcl93aXRoIH5mKSBpXG4gIGxldCBvZl9zZXFfd2l0aCB+ZiBpID0gbWtfdGJsXyAoYWRkX3NlcV93aXRoIH5mKSBpXG4gIGxldCBhZGRfaXRlcl9jb3VudCB0YmwgaSA9IGkgKGZ1biBrIC0+IGluY3IgdGJsIGspXG4gIGxldCBhZGRfc2VxX2NvdW50IHRibCBzZXEgPSBTZXEuaXRlciAoZnVuIGsgLT4gaW5jciB0Ymwgaykgc2VxXG4gIGxldCBvZl9pdGVyX2NvdW50IGkgPSBta190YmxfIGFkZF9pdGVyX2NvdW50IGlcbiAgbGV0IG9mX3NlcV9jb3VudCBpID0gbWtfdGJsXyBhZGRfc2VxX2NvdW50IGlcbiAgbGV0IHRvX2xpc3QgdGJsID0gSGFzaHRibC5mb2xkIChmdW4gayB2IGwgLT4gKGssIHYpIDo6IGwpIHRibCBbXVxuXG4gIGxldCBvZl9saXN0IGwgPVxuICAgIGxldCB0YmwgPSBIYXNodGJsLmNyZWF0ZSAzMiBpblxuICAgIExpc3QuaXRlciAoZnVuIChrLCB2KSAtPiBIYXNodGJsLmFkZCB0YmwgayB2KSBsO1xuICAgIHRibFxuXG4gIGxldCBvZl9saXN0X3dpdGggfmYgbCA9XG4gICAgbGV0IHRibCA9IEhhc2h0YmwuY3JlYXRlIDMyIGluXG4gICAgTGlzdC5pdGVyXG4gICAgICAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBIYXNodGJsLmZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gSGFzaHRibC5hZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuICAgICAgbDtcbiAgICB0YmxcblxuICBsZXQgdXBkYXRlIHRibCB+ZiB+ayA9XG4gICAgbGV0IHYgPSBnZXQgdGJsIGsgaW5cbiAgICBtYXRjaCB2LCBmIGsgdiB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+ICgpXG4gICAgfCBOb25lLCBTb21lIHYnIC0+IEhhc2h0YmwuYWRkIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIFNvbWUgdicgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIE5vbmUgLT4gSGFzaHRibC5yZW1vdmUgdGJsIGtcblxuICBsZXQgZ2V0X29yX2FkZCB0YmwgfmYgfmsgPVxuICAgIHRyeSBIYXNodGJsLmZpbmQgdGJsIGtcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IHYgPSBmIGsgaW5cbiAgICAgIEhhc2h0YmwuYWRkIHRibCBrIHY7XG4gICAgICB2XG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpXG4gICAgICA/KHBwX2Fycm93ID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAIC0+IFwiKSBwcF9rIHBwX3YgZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIEhhc2h0YmwuaXRlclxuICAgICAgKGZ1biBrIHYgLT5cbiAgICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcHBfc2VwIGZtdCAoKTtcbiAgICAgICAgcHBfayBmbXQgaztcbiAgICAgICAgcHBfYXJyb3cgZm10ICgpO1xuICAgICAgICBwcF92IGZtdCB2KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG5cbmluY2x1ZGUgUG9seVxuXG4oKiogezIgRnVuY3Rvcn0gKilcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICBpbmNsdWRlIEhhc2h0YmwuU1xuXG4gIHZhbCBnZXQgOiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgKCoqIFtnZXQgdGJsIGtdIGZpbmRzIGEgYmluZGluZyBmb3IgdGhlIGtleSBba10gaWYgcHJlc2VudCxcbiAgICAgIG9yIHJldHVybnMgW05vbmVdIGlmIG5vIHZhbHVlIGlzIGZvdW5kLlxuICAgICAgU2FmZSB2ZXJzaW9uIG9mIHshSGFzaHRibC5maW5kfS4gKilcblxuICB2YWwgZ2V0X29yIDogJ2EgdCAtPiBrZXkgLT4gZGVmYXVsdDonYSAtPiAnYVxuICAoKiogW2dldF9vciB0YmwgayB+ZGVmYXVsdF0gcmV0dXJucyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byBba10gaWYgcHJlc2VudCxcbiAgICAgIGFuZCByZXR1cm5zIFtkZWZhdWx0XSBvdGhlcndpc2UgKGlmIFtrXSBkb2Vzbid0IGJlbG9uZyBpbiBbdGJsXSkuXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBhZGRfbGlzdCA6ICdhIGxpc3QgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAoKiogW2FkZF9saXN0IHRibCB4IHldIGFkZHMgW3ldIHRvIHRoZSBsaXN0IFt4XSBpcyBib3VuZCB0by4gSWYgW3hdIGlzXG4gICAgICBub3QgYm91bmQsIGl0IGJlY29tZXMgYm91bmQgdG8gW3ldLlxuICAgICAgQHNpbmNlIDAuMTYgKilcblxuICB2YWwgaW5jciA6ID9ieTppbnQgLT4gaW50IHQgLT4ga2V5IC0+IHVuaXRcbiAgKCoqIFtpbmNyID9ieSB0YmwgeF0gaW5jcmVtZW50cyBvciBpbml0aWFsaXplcyB0aGUgY291bnRlciBhc3NvY2lhdGVkIHdpdGggW3hdLlxuICAgICAgSWYgW2dldCB0YmwgeCA9IE5vbmVdLCB0aGVuIGFmdGVyIHVwZGF0ZSwgW2dldCB0YmwgeCA9IFNvbWUgMV07XG4gICAgICBvdGhlcndpc2UsIGlmIFtnZXQgdGJsIHggPSBTb21lIG5dLCBub3cgW2dldCB0YmwgeCA9IFNvbWUgKG4rMSldLlxuICAgICAgQHBhcmFtIGJ5IGlmIHNwZWNpZmllZCwgdGhlIGludCB2YWx1ZSBpcyBpbmNyZW1lbnRlZCBieSBbYnldIHJhdGhlciB0aGFuIDEuXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBkZWNyIDogP2J5OmludCAtPiBpbnQgdCAtPiBrZXkgLT4gdW5pdFxuICAoKiogW2RlY3IgP2J5IHRibCB4XSBpcyBsaWtlIHshaW5jcn0gYnV0IHN1YnRyYWN0IDEgKG9yIHRoZSB2YWx1ZSBvZiBbYnldKS5cbiAgICAgIElmIHRoZSB2YWx1ZSByZWFjaGVzIDAsIHRoZSBrZXkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0YWJsZS5cbiAgICAgIFRoaXMgZG9lcyBub3RoaW5nIGlmIHRoZSBrZXkgaXMgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdGFibGUuXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBrZXlzIDogJ2EgdCAtPiBrZXkgaXRlclxuICAoKiogIFtrZXlzIHRibCBmXSBpdGVyYXRlcyBvbiBrZXlzIChzaW1pbGFyIG9yZGVyIGFzIHshSGFzaHRibC5pdGVyfSkuICopXG5cbiAgdmFsIHZhbHVlcyA6ICdhIHQgLT4gJ2EgaXRlclxuICAoKiogIFt2YWx1ZXMgdGJsIGZdIGl0ZXJhdGVzIG9uIHZhbHVlcyBpbiB0aGUgdGFibGUuICopXG5cbiAgdmFsIGtleXNfbGlzdCA6IF8gdCAtPiBrZXkgbGlzdFxuICAoKiogW2tleXNfbGlzdCB0YmxdIGlzIHRoZSBsaXN0IG9mIGtleXMgaW4gW3RibF0uXG4gICAgICBJZiB0aGUga2V5IGlzIGluIHRoZSBIYXNodGFibGUgbXVsdGlwbGUgdGltZXMsIGFsbCBvY2N1cnJlbmNlcyB3aWxsIGJlIHJldHVybmVkLlxuICAgICAgQHNpbmNlIDAuOCAqKVxuXG4gIHZhbCB2YWx1ZXNfbGlzdCA6ICdhIHQgLT4gJ2EgbGlzdFxuICAoKiogW3ZhbHVlc19saXN0IHRdIGlzIHRoZSBsaXN0IG9mIHZhbHVlcyBpbiBbdF0uXG4gICAgICBAc2luY2UgMC44ICopXG5cbiAgdmFsIG1hcF9saXN0IDogKGtleSAtPiAnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiBsaXN0XG4gICgqKiBNYXAgb24gYSBoYXNodGFibGUncyBpdGVtcywgY29sbGVjdCBpbnRvIGEgbGlzdC4gKilcblxuICB2YWwgdG9faXRlciA6ICdhIHQgLT4gKGtleSAqICdhKSBpdGVyXG4gICgqKiBJdGVyYXRlIG9uIGJpbmRpbmdzIGluIHRoZSB0YWJsZS5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2l0ZXIgOiAnYSB0IC0+IChrZXkgKiAnYSkgaXRlciAtPiB1bml0XG4gICgqKiBBZGQgdGhlIGNvcnJlc3BvbmRpbmcgcGFpcnMgdG8gdGhlIHRhYmxlLCB1c2luZyB7IUhhc2h0YmwuYWRkfS5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2l0ZXJfd2l0aCA6XG4gICAgZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgaXRlciAtPiB1bml0XG4gICgqKiBBZGQgdGhlIGNvcnJlc3BvbmRpbmcgcGFpcnMgdG8gdGhlIHRhYmxlLCB1c2luZyB7IUhhc2h0YmwuYWRkfS5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAoKiogQWRkIHRoZSBjb3JyZXNwb25kaW5nIHBhaXJzIHRvIHRoZSB0YWJsZSwgdXNpbmcgeyFIYXNodGJsLmFkZH0uXG4gICAgICBSZW5hbWVkIGZyb20gW2FkZF9zdGRfc2VxXSBzaW5jZSAzLjAuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIGFkZF9zZXFfd2l0aCA6XG4gICAgZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAoKiogQWRkIHRoZSBjb3JyZXNwb25kaW5nIHBhaXJzIHRvIHRoZSB0YWJsZSwgdXNpbmcgeyFIYXNodGJsLmFkZH0uXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCBvZl9pdGVyIDogKGtleSAqICdhKSBpdGVyIC0+ICdhIHRcbiAgKCoqIEZyb20gdGhlIGdpdmVuIGJpbmRpbmdzLCBhZGRlZCBpbiBvcmRlci5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgb2ZfaXRlcl93aXRoIDogZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAoa2V5ICogJ2EpIGl0ZXIgLT4gJ2EgdFxuICAoKiogRnJvbSB0aGUgZ2l2ZW4gYmluZGluZ3MsIGFkZGVkIGluIG9yZGVyLlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gICgqKiBGcm9tIHRoZSBnaXZlbiBiaW5kaW5ncywgYWRkZWQgaW4gb3JkZXIuXG4gICAgICBSZW5hbWVkIGZyb20gW29mX3N0ZF9zZXFdIHNpbmNlIDMuMC5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgb2Zfc2VxX3dpdGggOiBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICAoKiogRnJvbSB0aGUgZ2l2ZW4gYmluZGluZ3MsIGFkZGVkIGluIG9yZGVyLlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgYWRkX2l0ZXJfY291bnQgOiBpbnQgdCAtPiBrZXkgaXRlciAtPiB1bml0XG4gICgqKiBbYWRkX2l0ZXJfY291bnQgdGJsIGldIGluY3JlbWVudHMgdGhlIGNvdW50IG9mIGVhY2ggZWxlbWVudCBvZiBbaV1cbiAgICAgIGJ5IGNhbGxpbmcgeyFpbmNyfS4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvdW50aW5nIGhvdyBtYW55IHRpbWVzIGVhY2hcbiAgICAgIGVsZW1lbnQgb2YgW2ldIG9jY3Vycy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX3NlcV9jb3VudCA6IGludCB0IC0+IGtleSBTZXEudCAtPiB1bml0XG4gICgqKiBbYWRkX3NlcV9jb3VudCB0Ymwgc2VxXSBpbmNyZW1lbnRzIHRoZSBjb3VudCBvZiBlYWNoIGVsZW1lbnQgb2YgW3NlcV1cbiAgICAgIGJ5IGNhbGxpbmcgeyFpbmNyfS4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvdW50aW5nIGhvdyBtYW55IHRpbWVzIGVhY2hcbiAgICAgIGVsZW1lbnQgb2YgW3NlcV0gb2NjdXJzLlxuICAgICAgUmVuYW1lZCBmcm9tIFtvZl9zdGRfc2VxX2NvdW50XSBzaW5jZSAzLjAuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIG9mX2l0ZXJfY291bnQgOiBrZXkgaXRlciAtPiBpbnQgdFxuICAoKiogTGlrZSB7IWFkZF9zZXFfY291bnR9LCBidXQgYWxsb2NhdGVzIGEgbmV3IHRhYmxlIGFuZCByZXR1cm5zIGl0LlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBvZl9zZXFfY291bnQgOiBrZXkgU2VxLnQgLT4gaW50IHRcbiAgKCoqIExpa2UgeyFhZGRfc2VxX2NvdW50fSwgYnV0IGFsbG9jYXRlcyBhIG5ldyB0YWJsZSBhbmQgcmV0dXJucyBpdC5cbiAgICAgIFJlbmFtZWQgZnJvbSBbb2Zfc3RkX3NlcV9jb3VudF0gc2luY2UgMy4wLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCB0b19saXN0IDogJ2EgdCAtPiAoa2V5ICogJ2EpIGxpc3RcbiAgKCoqIFt0b19saXN0IHRibF0gcmV0dXJucyB0aGUgbGlzdCBvZiAoa2V5LHZhbHVlKSBiaW5kaW5ncyAob3JkZXIgdW5zcGVjaWZpZWQpLiAqKVxuXG4gIHZhbCBvZl9saXN0IDogKGtleSAqICdhKSBsaXN0IC0+ICdhIHRcbiAgKCoqIFtvZl9saXN0IGxdIGJ1aWxkcyBhIHRhYmxlIGZyb20gdGhlIGdpdmVuIGxpc3QgW2xdIG9mIGJpbmRpbmdzIFtrX2kgLT4gdl9pXSxcbiAgICAgIGFkZGVkIGluIG9yZGVyIHVzaW5nIHshYWRkfS4gSWYgYSBrZXkgb2NjdXJzIHNldmVyYWwgdGltZXMsXG4gICAgICBpdCB3aWxsIGJlIGFkZGVkIHNldmVyYWwgdGltZXMsIGFuZCB0aGUgdmlzaWJsZSBiaW5kaW5nXG4gICAgICB3aWxsIGJlIHRoZSBsYXN0IG9uZS4gKilcblxuICB2YWwgb2ZfbGlzdF93aXRoIDogZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAoa2V5ICogJ2EpIGxpc3QgLT4gJ2EgdFxuICAoKiogW29mX2xpc3QgbF0gYnVpbGRzIGEgdGFibGUgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBbbF0gb2YgYmluZGluZ3MgW2tfaSAtPiB2X2ldLlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgdXBkYXRlIDogJ2EgdCAtPiBmOihrZXkgLT4gJ2Egb3B0aW9uIC0+ICdhIG9wdGlvbikgLT4gazprZXkgLT4gdW5pdFxuICAoKiogW3VwZGF0ZSB0YmwgfmYgfmtdIHVwZGF0ZXMga2V5IFtrXSBieSBjYWxsaW5nIFtmIGsgKFNvbWUgdildIGlmXG4gICAgICBba10gd2FzIG1hcHBlZCB0byBbdl0sIG9yIFtmIGsgTm9uZV0gb3RoZXJ3aXNlOyBpZiB0aGUgY2FsbFxuICAgICAgcmV0dXJucyBbTm9uZV0gdGhlbiBba10gaXMgcmVtb3ZlZC9zdGF5cyByZW1vdmVkLCBpZiB0aGUgY2FsbFxuICAgICAgcmV0dXJucyBbU29tZSB2J10gdGhlbiB0aGUgYmluZGluZyBbayAtPiB2J10gaXMgaW5zZXJ0ZWRcbiAgICAgIHVzaW5nIHshSGFzaHRibC5yZXBsYWNlfS5cbiAgICAgIEBzaW5jZSAwLjE0ICopXG5cbiAgdmFsIGdldF9vcl9hZGQgOiAnYSB0IC0+IGY6KGtleSAtPiAnYSkgLT4gazprZXkgLT4gJ2FcbiAgKCoqIFtnZXRfb3JfYWRkIHRibCB+ayB+Zl0gZmluZHMgYW5kIHJldHVybnMgdGhlIGJpbmRpbmcgb2YgW2tdXG4gICAgICBpbiBbdGJsXSwgaWYgaXQgZXhpc3RzLiBJZiBpdCBkb2VzIG5vdCBleGlzdCwgdGhlbiBbZiBrXVxuICAgICAgaXMgY2FsbGVkIHRvIG9idGFpbiBhIG5ldyBiaW5kaW5nIFt2XTsgW2sgLT4gdl0gaXMgYWRkZWRcbiAgICAgIHRvIFt0YmxdIGFuZCBbdl0gaXMgcmV0dXJuZWQuXG4gICAgICBAc2luY2UgMS4wICopXG5cbiAgdmFsIHBwIDpcbiAgICA/cHBfc3RhcnQ6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3N0b3A6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3NlcDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfYXJyb3c6dW5pdCBwcmludGVyIC0+XG4gICAga2V5IHByaW50ZXIgLT5cbiAgICAnYSBwcmludGVyIC0+XG4gICAgJ2EgdCBwcmludGVyXG4gICgqKiBbcHAgfnBwX3N0YXJ0IH5wcF9zdG9wIH5wcF9zZXAgfnBwIGFycm93IHBwX2sgcHBfdl0gcmV0dXJucyBhIHRhYmxlIHByaW50ZXJcbiAgICAgIGdpdmVuIGEgW3BwX2tdIHByaW50ZXJcbiAgICAgIGZvciBpbmRpdmlkdWFsIGtleSBhbmQgYSBbcHBfdl0gcHJpbnRlciBmb3IgaW5kaXZpZHVhbCB2YWx1ZS5cbiAgICAgIFtwcF9zdGFydF0gYW5kIFtwcF9zdG9wXSBjb250cm9sIHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIGRlbGltaXRlcnMsXG4gICAgICBieSBkZWZhdWx0IHByaW50IG5vdGhpbmcuIFtwcF9zZXBdIGNvbnRyb2wgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIGJpbmRpbmcuXG4gICAgICBbcHBfYXJyb3ddIGNvbnRyb2wgdGhlIGFycm93IGJldHdlZW4gdGhlIGtleSBhbmQgdmFsdWUuXG4gICAgICBSZW5hbWVkIGZyb20gW3ByaW50XSBzaW5jZSAyLjAuXG4gICAgICBAc2luY2UgMC4xMyAqKVxuZW5kXG5cbm1vZHVsZSBNYWtlIChYIDogSGFzaHRibC5IYXNoZWRUeXBlKSA6XG4gIFMgd2l0aCB0eXBlIGtleSA9IFgudCBhbmQgdHlwZSAnYSB0ID0gJ2EgSGFzaHRibC5NYWtlKFgpLnQgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBIYXNodGJsLk1ha2UgKFgpXG5cbiAgbGV0IGdldCB0YmwgeCA9IHRyeSBTb21lIChmaW5kIHRibCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBnZXRfb3IgdGJsIHggfmRlZmF1bHQgPSB0cnkgZmluZCB0YmwgeCB3aXRoIE5vdF9mb3VuZCAtPiBkZWZhdWx0XG5cbiAgbGV0IGluY3IgPyhieSA9IDEpIHRibCB4ID1cbiAgICBsZXQgbiA9IGdldF9vciB0YmwgeCB+ZGVmYXVsdDowIGluXG4gICAgaWYgbiArIGJ5IDw9IDAgdGhlblxuICAgICAgcmVtb3ZlIHRibCB4XG4gICAgZWxzZVxuICAgICAgcmVwbGFjZSB0YmwgeCAobiArIGJ5KVxuXG4gIGxldCBhZGRfbGlzdCB0YmwgayB2ID1cbiAgICBsZXQgbCA9IHRyeSBmaW5kIHRibCBrIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgcmVwbGFjZSB0YmwgayAodiA6OiBsKVxuXG4gIGxldCBkZWNyID8oYnkgPSAxKSB0YmwgeCA9XG4gICAgdHJ5XG4gICAgICBsZXQgbiA9IGZpbmQgdGJsIHggaW5cbiAgICAgIGlmIG4gLSBieSA8PSAwIHRoZW5cbiAgICAgICAgcmVtb3ZlIHRibCB4XG4gICAgICBlbHNlXG4gICAgICAgIHJlcGxhY2UgdGJsIHggKG4gLSBieSlcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKVxuXG4gIGxldCBrZXlzIHRibCBrID0gaXRlciAoZnVuIGtleSBfIC0+IGsga2V5KSB0YmxcbiAgbGV0IHZhbHVlcyB0YmwgayA9IGl0ZXIgKGZ1biBfIHYgLT4gayB2KSB0YmxcbiAgbGV0IGtleXNfbGlzdCB0YmwgPSBmb2xkIChmdW4gayBfIGEgLT4gayA6OiBhKSB0YmwgW11cbiAgbGV0IHZhbHVlc19saXN0IHRibCA9IGZvbGQgKGZ1biBfIHYgYSAtPiB2IDo6IGEpIHRibCBbXVxuICBsZXQgbWFwX2xpc3QgZiBoID0gZm9sZCAoZnVuIHggeSBhY2MgLT4gZiB4IHkgOjogYWNjKSBoIFtdXG5cbiAgbGV0IHVwZGF0ZSB0YmwgfmYgfmsgPVxuICAgIGxldCB2ID0gZ2V0IHRibCBrIGluXG4gICAgbWF0Y2ggdiwgZiBrIHYgd2l0aFxuICAgIHwgTm9uZSwgTm9uZSAtPiAoKVxuICAgIHwgTm9uZSwgU29tZSB2JyAtPiBhZGQgdGJsIGsgdidcbiAgICB8IFNvbWUgXywgU29tZSB2JyAtPiByZXBsYWNlIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIE5vbmUgLT4gcmVtb3ZlIHRibCBrXG5cbiAgbGV0IGdldF9vcl9hZGQgdGJsIH5mIH5rID1cbiAgICB0cnkgZmluZCB0Ymwga1xuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgdiA9IGYgayBpblxuICAgICAgYWRkIHRibCBrIHY7XG4gICAgICB2XG5cbiAgbGV0IHRvX2l0ZXIgdGJsIGsgPSBpdGVyIChmdW4ga2V5IHYgLT4gayAoa2V5LCB2KSkgdGJsXG4gIGxldCBhZGRfaXRlciB0YmwgaSA9IGkgKGZ1biAoaywgdikgLT4gYWRkIHRibCBrIHYpXG5cbiAgbGV0IGFkZF9pdGVyX3dpdGggfmYgdGJsIGkgPVxuICAgIGkgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBhZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IHJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcblxuICBsZXQgYWRkX3NlcSB0Ymwgc2VxID0gU2VxLml0ZXIgKGZ1biAoaywgdikgLT4gYWRkIHRibCBrIHYpIHNlcVxuXG4gIGxldCBhZGRfc2VxX3dpdGggfmYgdGJsIHNlcSA9XG4gICAgU2VxLml0ZXJcbiAgICAgIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIGZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiByZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG4gICAgICBzZXFcblxuICAoKiBoZWxwZXIgZm9yIGJ1aWxkaW5nIGhhc2h0YWJsZXMgYnkgYnVsayBtdXRhdGlvbiAqKVxuICBsZXRbQGlubGluZV0gbWtfdGJsXyBmIHggPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBmIHRibCB4O1xuICAgIHRibFxuXG4gIGxldCBvZl9pdGVyIGkgPSBta190YmxfIGFkZF9pdGVyIGlcbiAgbGV0IG9mX3NlcSBpID0gbWtfdGJsXyBhZGRfc2VxIGlcbiAgbGV0IG9mX2l0ZXJfd2l0aCB+ZiBpID0gbWtfdGJsXyAoYWRkX2l0ZXJfd2l0aCB+ZikgaVxuICBsZXQgb2Zfc2VxX3dpdGggfmYgaSA9IG1rX3RibF8gKGFkZF9zZXFfd2l0aCB+ZikgaVxuICBsZXQgYWRkX2l0ZXJfY291bnQgdGJsIGkgPSBpIChmdW4gayAtPiBpbmNyIHRibCBrKVxuICBsZXQgYWRkX3NlcV9jb3VudCB0Ymwgc2VxID0gU2VxLml0ZXIgKGZ1biBrIC0+IGluY3IgdGJsIGspIHNlcVxuXG4gIGxldCBvZl9pdGVyX2NvdW50IHNlcSA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIGFkZF9pdGVyX2NvdW50IHRibCBzZXE7XG4gICAgdGJsXG5cbiAgbGV0IG9mX3NlcV9jb3VudCBpID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgYWRkX3NlcV9jb3VudCB0YmwgaTtcbiAgICB0YmxcblxuICBsZXQgdG9fbGlzdCB0YmwgPSBmb2xkIChmdW4gayB2IGwgLT4gKGssIHYpIDo6IGwpIHRibCBbXVxuXG4gIGxldCBvZl9saXN0IGwgPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1biAoaywgdikgLT4gYWRkIHRibCBrIHYpIGw7XG4gICAgdGJsXG5cbiAgbGV0IG9mX2xpc3Rfd2l0aCB+ZiBsID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgTGlzdC5pdGVyXG4gICAgICAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBmaW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gcmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuICAgICAgbDtcbiAgICB0YmxcblxuICBsZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICAgID8ocHBfc2VwID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIilcbiAgICAgID8ocHBfYXJyb3cgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkAgLT4gXCIpIHBwX2sgcHBfdiBmbXQgbSA9XG4gICAgcHBfc3RhcnQgZm10ICgpO1xuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgaXRlclxuICAgICAgKGZ1biBrIHYgLT5cbiAgICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcHBfc2VwIGZtdCAoKTtcbiAgICAgICAgcHBfayBmbXQgaztcbiAgICAgICAgcHBfYXJyb3cgZm10ICgpO1xuICAgICAgICBwcF92IGZtdCB2KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG4iLCIoKiBiYWNrcG9ydCBuZXcgZnVuY3Rpb25zIGZyb20gc3RkbGliIGhlcmUgKilcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gOjogXyAtPiAtMVxuICB8IF8gOjogXywgW10gLT4gMVxuICB8IF8gOjogdGFpbDEsIF8gOjogdGFpbDIgLT4gY29tcGFyZV9sZW5ndGhzIHRhaWwxIHRhaWwyXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhfd2l0aCBsIG4gPVxuICBtYXRjaCBsLCBuIHdpdGhcbiAgfCBfIHdoZW4gbiA8IDAgLT4gMVxuICB8IFtdLCAwIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8gOjogdGFpbCwgXyAtPiBjb21wYXJlX2xlbmd0aF93aXRoIHRhaWwgKG4gLSAxKVxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgKHksIHYpIDo6IF8gd2hlbiBTdGRsaWIuKCA9ICkgeCB5IC0+IFNvbWUgdlxuICB8IF8gOjogdGFpbCAtPiBhc3NvY19vcHQgeCB0YWlsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8ICh5LCB2KSA6OiBfIHdoZW4gU3RkbGliLiggPT0gKSB4IHkgLT4gU29tZSB2XG4gIHwgXyA6OiB0YWlsIC0+IGFzc3Ffb3B0IHggdGFpbFxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG4oKiBlbmQgb2YgYmFja3BvcnQgKilcblxuaW5jbHVkZSBMaXN0XG5cbmxldCBlbXB0eSA9IFtdXG5cbmxldCBpc19lbXB0eSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gdHJ1ZVxuICB8IF8gOjogXyAtPiBmYWxzZVxuXG5sZXQgbWd1YXJkIGMgPVxuICBpZiBjIHRoZW5cbiAgICBbICgpIF1cbiAgZWxzZVxuICAgIFtdXG5cbigqKiBtYXggZGVwdGggZm9yIGRpcmVjdCByZWN1cnNpb24gKilcbmxldCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gPSAxMDAwXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWlsX21hcCBmIGwgPVxuICAoKiBVbndpbmQgdGhlIGxpc3Qgb2YgdHVwbGVzLCByZWNvbnN0cnVjdGluZyB0aGUgZnVsbCBsaXN0IGZyb250LXRvLWJhY2suXG4gICAgIEBwYXJhbSB0YWlsX2FjYyBhIHN1ZmZpeCBvZiB0aGUgZmluYWwgbGlzdDsgd2UgYXBwZW5kIHR1cGxlcycgY29udGVudFxuICAgICBhdCB0aGUgZnJvbnQgb2YgaXQgKilcbiAgbGV0IHJlYyByZWJ1aWxkIHRhaWxfYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHRhaWxfYWNjXG4gICAgfCAoeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgeTYsIHk3LCB5OCkgOjogYnMgLT5cbiAgICAgIHJlYnVpbGRcbiAgICAgICAgKHkwIDo6IHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IHk1IDo6IHk2IDo6IHk3IDo6IHk4IDo6IHRhaWxfYWNjKVxuICAgICAgICBic1xuICBpblxuICAoKiBDcmVhdGUgYSBjb21wcmVzc2VkIHJldmVyc2UtbGlzdCByZXByZXNlbnRhdGlvbiB1c2luZyB0dXBsZXNcbiAgICAgQHBhcmFtIHR1cGxlX2FjYyBhIHJldmVyc2UgbGlzdCBvZiBjaHVua3MgbWFwcGVkIHdpdGggW2ZdICopXG4gIGxldCByZWMgZGl2ZSB0dXBsZV9hY2MgPSBmdW5jdGlvblxuICAgIHwgeDAgOjogeDEgOjogeDIgOjogeDMgOjogeDQgOjogeDUgOjogeDYgOjogeDcgOjogeDggOjogeHMgLT5cbiAgICAgIGxldCB5MCA9IGYgeDAgaW5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIGxldCB5NSA9IGYgeDUgaW5cbiAgICAgIGxldCB5NiA9IGYgeDYgaW5cbiAgICAgIGxldCB5NyA9IGYgeDcgaW5cbiAgICAgIGxldCB5OCA9IGYgeDggaW5cbiAgICAgIGRpdmUgKCh5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCB5NiwgeTcsIHk4KSA6OiB0dXBsZV9hY2MpIHhzXG4gICAgfCB4cyAtPlxuICAgICAgKCogUmV2ZXJzZSBkaXJlY3Rpb24sIGZpbmlzaGluZyBvZmYgd2l0aCBhIGRpcmVjdCBtYXAgKilcbiAgICAgIGxldCB0YWlsID0gTGlzdC5tYXAgZiB4cyBpblxuICAgICAgcmVidWlsZCB0YWlsIHR1cGxlX2FjY1xuICBpblxuICBkaXZlIFtdIGxcblxubGV0IG1hcCBmIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBmIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgWyB4IF0gLT4gWyBmIHggXVxuICAgIHwgWyB4MTsgeDIgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgWyB5MTsgZiB4MiBdXG4gICAgfCBbIHgxOyB4MjsgeDMgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgWyB5MTsgeTI7IGYgeDMgXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHRhaWxfbWFwIGYgbFxuICAgIHwgeDEgOjogeDIgOjogeDMgOjogeDQgOjogbCcgLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IGRpcmVjdCBmIChpIC0gMSkgbCdcbiAgaW5cbiAgZGlyZWN0IGYgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxubGV0IGFwcGVuZCBsMSBsMiA9XG4gIGxldFtAaW5saW5lXSBzYWZlIGwxIGwyID0gTGlzdC5yZXZfYXBwZW5kIChMaXN0LnJldiBsMSkgbDIgaW5cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gbDJcbiAgICB8IFsgeCBdIC0+IHggOjogbDJcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyXG4gICAgfCB4IDo6IHkgOjogdGwxIC0+IHggOjogeSA6OiBkaXJlY3QgKGkgLSAxKSB0bDEgbDJcbiAgaW5cbiAgZGlyZWN0IDEwMDAgbDEgbDJcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogdGwgLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIHggOjogbWFwIGYgdGxcblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgeCA6OiB0bDEgLT4geCA6OiBhcHBlbmQgdGwxIGwyXG5cbltAQEBlbHNlX11cblxuKCogVFJNQyBmdW5jdGlvbnMgb24gPj0gNS4xLCBubyBuZWVkIHRvIGJyaW5nIG91ciBvd24gKilcblxuW0BAQGVuZGlmXVxuXG4oKiBXcmFwcGVyIGFyb3VuZCBbYXBwZW5kXSB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugb2Ygc2hvcnQgW2wxXSxcbiAgIGFuZCBmb3IgdGhlIGNhc2Ugb2YgW2wyID0gW11dIChzYXZlcyB0aGUgd2hvbGUgY29weSBvZiBbbDFdISkgKilcbmxldFtAaW5saW5lXSBhcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBfIC0+IGwyXG4gIHwgXywgW10gLT4gbDFcbiAgfCBbIHggXSwgXyAtPiB4IDo6IGwyXG4gIHwgeCA6OiB5IDo6IHRsMSwgXyAtPiB4IDo6IHkgOjogYXBwZW5kIHRsMSBsMlxuXG5sZXQgKCBAICkgPSBhcHBlbmRcbmxldFtAaW5saW5lXSBjb25zJyBsIHggPSB4IDo6IGxcblxubGV0IGNvbnNfbWF5YmUgbyBsID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgU29tZSB4IC0+IHggOjogbFxuICB8IE5vbmUgLT4gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgZGlyZWN0X2RlcHRoX2ZpbHRlcl8gPSAxMF8wMDBcblxubGV0IGZpbHRlciBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBsIFtdXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IGRpcmVjdCBpIHAgbCdcbiAgICB8IHggOjogbCcgLT4geCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gIGFuZCBzYWZlIHAgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IHNhZmUgcCBsJyBhY2NcbiAgICB8IHggOjogbCcgLT4gc2FmZSBwIGwnICh4IDo6IGFjYylcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9maWx0ZXJfIHAgbFxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgZmlsdGVyIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCBrZWVwID0gZiB4IGluXG4gICAgaWYga2VlcCB0aGVuXG4gICAgICB4IDo6IGZpbHRlciBmIHRsXG4gICAgZWxzZVxuICAgICAgZmlsdGVyIGYgdGxcblxuW0BAQGVsc2VfXVxuKCogc3RkbGliJ3MgZmlsdGVyIHVzZXMgVFJNQyBhZnRlciA1LjEgKilcblxuW0BAQGVuZGlmXVxuXG5sZXQgZm9sZF9yaWdodCBmIGwgYWNjID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgZiAoTGlzdC5yZXYgbCkgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZGlyZWN0IChpIC0gMSkgZiBsJyBhY2MgaW5cbiAgICAgIGYgeCBhY2NcbiAgYW5kIHNhZmUgZiBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIHggYWNjIGluXG4gICAgICBzYWZlIGYgbCcgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gZiBsIGFjY1xuXG5sZXQgcmVjIGZvbGRfd2hpbGUgZiBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGUgOjogbCAtPlxuICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBlIGluXG4gICAgKG1hdGNoIGNvbnQgd2l0aFxuICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZSBmIGFjYyBsKVxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5sZXQgZm9sZF9vbl9tYXAgfmYgfnJlZHVjZSBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IHJlZHVjZSBhY2MgKGYgeCkgaW5cbiAgICAgIGF1eCBhY2MgbCdcbiAgaW5cbiAgYXV4IGFjYyBsXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGxfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbF9hY2NcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIHggaW5cbiAgICAgIGxldCBsX2FjYyA9IGFjYyA6OiBsX2FjYyBpblxuICAgICAgYXV4IGYgYWNjIGxfYWNjIHRhaWxcbiAgaW5cbiAgYXV4IGYgYWNjIFsgYWNjIF0gbFxuXG5sZXQgcmVkdWNlIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gU29tZSAoZm9sZF9sZWZ0IGYgeCBsKVxuXG5sZXQgcmVkdWNlX2V4biBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDTGlzdC5yZWR1Y2VfZXhuXCIpXG4gIHwgeCA6OiBsIC0+IGZvbGRfbGVmdCBmIHggbFxuXG5sZXQgZm9sZF9tYXAyIGYgYWNjIGwxIGwyID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJmb2xkX21hcDJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4MSB4MiBpblxuICAgICAgYXV4IGYgYWNjICh5IDo6IG1hcF9hY2MpIGwxJyBsMidcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGwxIGwyXG5cbmxldCBmb2xkX2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9maWx0ZXJfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbmxldCBmb2xkX2ZsYXRfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9mbGF0X21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbigqIGtlZXAgdGhpcyBiZWNhdXNlIGl0J3MgdGFpbHJlYyBmb3IgPCA1LjEgKilcbmxldCBpbml0IGxlbiBmID1cbiAgbGV0IHJlYyBpbmRpcmVjdF8gaSBhY2MgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgaW5kaXJlY3RfIChpICsgMSkgKHggOjogYWNjKVxuICAgIClcbiAgaW5cbiAgbGV0IHJlYyBkaXJlY3RfIGkgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIGlmIGkgPCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gdGhlbiAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgeCA6OiBkaXJlY3RfIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGluZGlyZWN0XyBpIFtdXG4gIGluXG4gIGlmIGxlbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiaW5pdFwiXG4gIGVsc2UgaWYgbGVuID0gMCB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIGRpcmVjdF8gMFxuXG5sZXQgcmVjIHVuZm9sZF9rb250IGYgc2VlZCBrID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IGsgW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPlxuICAgIGxldCBrJyB0bCA9IGsgKHYgOjogdGwpIGluXG4gICAgdW5mb2xkX2tvbnQgZiBuZXh0IGsnXG5cbmxldFtAaW5saW5lXSB1bmZvbGQgZiBzZWVkID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIHNlZWQgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHVuZm9sZF9rb250IGYgc2VlZCAoZnVuIHggLT4geClcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGYgc2VlZCB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiBkaXJlY3QgKGkgLSAxKSBmIG5leHRcbiAgICApXG4gIGluXG4gIGRpcmVjdCAxMDAgZiBzZWVkXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBpbml0XyBpIG4gZiA9XG4gICAgaWYgaSA9IG4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICB4IDo6IGluaXRfIChpICsgMSkgbiBmXG4gICAgKVxuICBpblxuICBpbml0XyAwIG4gZlxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB1bmZvbGQgZiBzZWVkID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiB1bmZvbGQgZiBuZXh0XG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdW5mb2xkIGYgc2VlZCA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogdW5mb2xkIGYgbmV4dFxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgY29tcGFyZSBmIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IF8sIFtdIC0+IDFcbiAgfCBbXSwgXyAtPiAtMVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgbGV0IGMgPSBmIHgxIHgyIGluXG4gICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgIGNcbiAgICBlbHNlXG4gICAgICBjb21wYXJlIGYgbDEnIGwyJ1xuXG5sZXQgcmVjIGVxdWFsIGYgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF8gfCBfLCBbXSAtPiBmYWxzZVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+IGYgeDEgeDIgJiYgZXF1YWwgZiBsMScgbDInXG5cbltAQEBpZmx0IDUuMV1cblxubGV0IHJlYyBmbGF0X21hcF9rb250IGYgbCBrb250ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4ga29udCBbXVxuICB8IFsgeCBdIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBrb250IHhcbiAgfCB4IDo6IGwnIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBsZXQga29udCcgdGFpbCA9IGtvbnQgKGFwcGVuZCB4IHRhaWwpIGluXG4gICAgZmxhdF9tYXBfa29udCBmIGwnIGtvbnQnXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IFsgeCBdIC0+IGYgeFxuICB8IF8gOjogXyAtPiBmbGF0X21hcF9rb250IGYgbCBGdW4uaWRcblxuW0BAQGVsc2VfXVxuXG5sZXQgZmxhdF9tYXAgPSBjb25jYXRfbWFwXG5cbltAQEBlbmRpZl1cblxubGV0IGZsYXRfbWFwX2kgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpIGwga29udCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBrb250IFtdXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgeSA9IGYgaSB4IGluXG4gICAgICBsZXQga29udCcgdGFpbCA9XG4gICAgICAgIG1hdGNoIHkgd2l0aFxuICAgICAgICB8IFtdIC0+IGtvbnQgdGFpbFxuICAgICAgICB8IFsgeCBdIC0+IGtvbnQgKHggOjogdGFpbClcbiAgICAgICAgfCBbIHg7IHkgXSAtPiBrb250ICh4IDo6IHkgOjogdGFpbClcbiAgICAgICAgfCBsIC0+IGtvbnQgKGFwcGVuZCBsIHRhaWwpXG4gICAgICBpblxuICAgICAgYXV4IGYgKGkgKyAxKSBsJyBrb250J1xuICBpblxuICBhdXggZiAwIGwgKGZ1biBsIC0+IGwpXG5cbmxldCBmbGF0dGVuIGwgPSBmb2xkX3JpZ2h0IGFwcGVuZCBsIFtdXG5cbmxldCBjb3VudCBmIGwgPVxuICBmb2xkX2xlZnRcbiAgICAoZnVuIG4geCAtPlxuICAgICAgaWYgZiB4IHRoZW5cbiAgICAgICAgc3VjYyBuXG4gICAgICBlbHNlXG4gICAgICAgIG4pXG4gICAgMCBsXG5cbmxldCBjb3VudF90cnVlX2ZhbHNlIHAgbCA9XG4gIGZvbGRfbGVmdFxuICAgIChmdW4gKG9rLCBrbykgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgb2sgKyAxLCBrb1xuICAgICAgZWxzZVxuICAgICAgICBvaywga28gKyAxKVxuICAgICgwLCAwKSBsXG5cbmxldFtAaW5saW5lXSBwcm9kdWN0IGYgbDEgbDIgPSBmbGF0X21hcCAoZnVuIHggLT4gbWFwIChmdW4geSAtPiBmIHggeSkgbDIpIGwxXG5cbmxldCBmb2xkX3Byb2R1Y3QgZiBhY2MgbDEgbDIgPVxuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gYWNjIHgxIC0+IExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHgyIC0+IGYgYWNjIHgxIHgyKSBhY2MgbDIpXG4gICAgYWNjIGwxXG5cbmxldCBkaWFnb25hbCBsID1cbiAgbGV0IHJlYyBnZW4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeSAtPiAoeCwgeSkgOjogYWNjKSBhY2MgbCcgaW5cbiAgICAgIGdlbiBhY2MgbCdcbiAgaW5cbiAgZ2VuIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXBfZWl0aGVyIGYgbCA9XG4gIGxldCByZWMgaXRlciBmIGwxIGwyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbDEsIExpc3QucmV2IGwyXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgQ0NFaXRoZXIuTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgQ0NFaXRoZXIuUmlnaHQgeSAtPiBpdGVyIGYgbDEgKHkgOjogbDIpIHRsKVxuICBpblxuICBpdGVyIGYgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX2ZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyBpdGVyIGYgbDEgbDIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsMSwgTGlzdC5yZXYgbDJcbiAgICB8IHggOjogdGwgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBgTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgYFJpZ2h0IHkgLT4gaXRlciBmIGwxICh5IDo6IGwyKSB0bFxuICAgICAgfCBgRHJvcCAtPiBpdGVyIGYgbDEgbDIgdGwpXG4gIGluXG4gIGl0ZXIgZiBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwID0gcGFydGl0aW9uX2ZpbHRlcl9tYXBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGNvbWJpbmUgbDEgbDIgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcbiAgYW5kIHNhZmUgbDEgbDIgYWNjID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gc2FmZSBsMScgbDInIEBAICgoeDEsIHgyKSA6OiBhY2MpXG4gICAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGwxIGwyXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IFtdXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogY29tYmluZSBsMScgbDInXG4gIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcblxuW0BAQGVuZGlmXVxuXG5sZXQgY29tYmluZV9nZW4gbDEgbDIgPVxuICBsZXQgbDEgPSByZWYgbDEgaW5cbiAgbGV0IGwyID0gcmVmIGwyIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICFsMSwgIWwyIHdpdGhcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gTm9uZVxuICAgIHwgeDEgOjogdGFpbDEsIHgyIDo6IHRhaWwyIC0+XG4gICAgICBsMSA6PSB0YWlsMTtcbiAgICAgIGwyIDo9IHRhaWwyO1xuICAgICAgU29tZSAoeDEsIHgyKVxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgY29tYmluZV9zaG9ydGVzdCBsMSBsMiA9XG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBfLCBbXSB8IFtdLCBfIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICBhbmQgc2FmZSBsMSBsMiBhY2MgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MgPSAoeDEsIHgyKSA6OiBhY2MgaW5cbiAgICAgIHNhZmUgbDEnIGwyJyBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbWJpbmVfc2hvcnRlc3QgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IF8sIFtdIHwgW10sIF8gLT4gW11cbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBjb21iaW5lX3Nob3J0ZXN0IGwxJyBsMidcblxuW0BAQGVuZGlmXVxuXG5sZXQgc3BsaXQgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXSwgW11cbiAgICB8IFsgKHgxLCB5MSkgXSAtPiBbIHgxIF0sIFsgeTEgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5MikgXSAtPiBbIHgxOyB4MiBdLCBbIHkxOyB5MiBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKTsgKHgzLCB5MykgXSAtPiBbIHgxOyB4MjsgeDMgXSwgWyB5MTsgeTI7IHkzIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpOyAoeDMsIHkzKTsgKHg0LCB5NCkgXSAtPlxuICAgICAgWyB4MTsgeDI7IHgzOyB4NCBdLCBbIHkxOyB5MjsgeTM7IHk0IF1cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzcGxpdF9zbG93IFtdIFtdIGxcbiAgICB8ICh4MSwgeTEpIDo6ICh4MiwgeTIpIDo6ICh4MywgeTMpIDo6ICh4NCwgeTQpIDo6ICh4NSwgeTUpIDo6IGwnIC0+XG4gICAgICBsZXQgcngsIHJ5ID0gZGlyZWN0IChpIC0gMSkgbCcgaW5cbiAgICAgIHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IHg1IDo6IHJ4LCB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiB5NSA6OiByeVxuICBhbmQgc3BsaXRfc2xvdyBhY2MxIGFjYzIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MxLCBMaXN0LnJldiBhY2MyXG4gICAgfCAoeDEsIHgyKSA6OiB0YWlsIC0+XG4gICAgICBsZXQgYWNjMSA9IHgxIDo6IGFjYzEgYW5kIGFjYzIgPSB4MiA6OiBhY2MyIGluXG4gICAgICBzcGxpdF9zbG93IGFjYzEgYWNjMiB0YWlsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgcmV0dXJuIHggPSBbIHggXVxubGV0IHB1cmUgPSByZXR1cm5cbmxldCAoIDwqPiApIGZ1bnMgbCA9IHByb2R1Y3QgKGZ1biBmIHggLT4gZiB4KSBmdW5zIGxcblxubGV0IGNhcnRlc2lhbl9wcm9kdWN0IGwgPVxuICAoKiBbbGVmdF06IGVsZW1lbnRzIHBpY2tlZCBzbyBmYXJcbiAgICAgW3JpZ2h0XTogc2V0cyB0byBwaWNrIGVsZW1lbnRzIGZyb21cbiAgICAgW2FjY106IGFjY3VtdWxhdG9yIGZvciB0aGUgcmVzdWx0LCB0byBwYXNzIHRvIGNvbnRpbnVhdGlvblxuICAgICBba106IGNvbnRpbnVhdGlvbiAqKVxuICBsZXQgcmVjIHByb2RfcmVjIGxlZnQgcmlnaHQgayBhY2MgPVxuICAgIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICB8IFtdIC0+IGsgYWNjIChMaXN0LnJldiBsZWZ0KVxuICAgIHwgbDEgOjogdGFpbCAtPlxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBwcm9kX3JlYyAoeCA6OiBsZWZ0KSB0YWlsIGsgYWNjKSBhY2MgbDFcbiAgaW5cbiAgcHJvZF9yZWMgW10gbCAoZnVuIGFjYyBsJyAtPiBsJyA6OiBhY2MpIFtdXG5cbigqIGNhcnRlc2lhbiBwcm9kdWN0IG9mIGxpc3RzIG9mIGxpc3RzICopXG5sZXQgbWFwX3Byb2R1Y3RfbCBmIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGYgbCBpblxuICBjYXJ0ZXNpYW5fcHJvZHVjdCBsXG5cbmxldCByZWMgc29ydGVkX21lbSB+Y21wIHggbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGZhbHNlXG4gIHwgeSA6OiB0YWlsIC0+XG4gICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgIHwgMCAtPiB0cnVlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gZmFsc2VcbiAgICB8IF8gLT4gKHNvcnRlZF9tZW0gW0B0YWlsY2FsbF0pIH5jbXAgeCB0YWlsKVxuXG5sZXQgc29ydGVkX21lcmdlIH5jbXAgbDEgbDIgPVxuICBsZXQgcmVjIHJlY3Vyc2UgY21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDFcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogYWNjKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDIgOjogYWNjKSBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IHgyIDo6IGFjYykgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydGVkX2RpZmYgfmNtcCBsMSBsMiA9XG4gIGxldCByZWMgcmVjdXJzZSBjbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwxXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IGFjYykgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIGNtcCBhY2MgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydF91bmlxIH5jbXAgbCA9IExpc3Quc29ydF91bmlxIGNtcCBsXG5cbmxldCBpc19zb3J0ZWQgfmNtcCBsID1cbiAgbGV0IHJlYyBhdXggY21wID0gZnVuY3Rpb25cbiAgICB8IFtdIHwgWyBfIF0gLT4gdHJ1ZVxuICAgIHwgeCA6OiAoeSA6OiBfIGFzIHRhaWwpIC0+IGNtcCB4IHkgPD0gMCAmJiBhdXggY21wIHRhaWxcbiAgaW5cbiAgYXV4IGNtcCBsXG5cbmxldCBzb3J0ZWRfaW5zZXJ0IH5jbXAgPyh1bmlxID0gZmFsc2UpIHggbCA9XG4gIGxldCByZWMgYXV4IGNtcCB1bmlxIHggbGVmdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0IFsgeCBdXG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBsZXQgbCcgPVxuICAgICAgICAgIGlmIHVuaXEgdGhlblxuICAgICAgICAgICAgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHggOjogbFxuICAgICAgICBpblxuICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCBsJ1xuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgKHggOjogbClcbiAgICAgIHwgXyAtPiBhdXggY21wIHVuaXEgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIHVuaXEgeCBbXSBsXG5cbmxldCBzb3J0ZWRfcmVtb3ZlIH5jbXAgPyhhbGwgPSBmYWxzZSkgeCBsID1cbiAgbGV0IHJlYyBhdXggY21wIGFsbCB4IGxlZnQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsZWZ0XG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBpZiBhbGwgdGhlblxuICAgICAgICAgIGF1eCBjbXAgYWxsIHggbGVmdCB0YWlsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCB0YWlsXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCBsXG4gICAgICB8IF8gLT4gYXV4IGNtcCBhbGwgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIGFsbCB4IFtdIGxcblxubGV0IHVuaXFfc3VjYyB+ZXEgbCA9XG4gIGxldCByZWMgZiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFsgeCBdIC0+IExpc3QucmV2ICh4IDo6IGFjYylcbiAgICB8IHggOjogKHkgOjogXyBhcyB0YWlsKSB3aGVuIGVxIHggeSAtPiBmIGFjYyB0YWlsXG4gICAgfCB4IDo6IHRhaWwgLT4gZiAoeCA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgZiBbXSBsXG5cbmxldCBncm91cF9zdWNjIH5lcSBsID1cbiAgbGV0IHJlYyBmIH5lcSBhY2MgY3VyIGwgPVxuICAgIG1hdGNoIGN1ciwgbCB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIDo6IF8sIFtdIC0+IExpc3QucmV2IChMaXN0LnJldiBjdXIgOjogYWNjKVxuICAgIHwgW10sIHggOjogdGwgLT4gZiB+ZXEgYWNjIFsgeCBdIHRsXG4gICAgfCB5IDo6IF8sIHggOjogdGwgd2hlbiBlcSB4IHkgLT4gZiB+ZXEgYWNjICh4IDo6IGN1cikgdGxcbiAgICB8IF8sIHggOjogdGwgLT4gZiB+ZXEgKExpc3QucmV2IGN1ciA6OiBhY2MpIFsgeCBdIHRsXG4gIGluXG4gIGYgfmVxIFtdIFtdIGxcblxubGV0IHNvcnRlZF9tZXJnZV91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDIpIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICgqIGRyb3Agb25lIG9mIHRoZSBbeF0gKilcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbmxldCBzb3J0ZWRfZGlmZl91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IGFjY1xuICAgIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWtlIG4gbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBuIFtdIGxcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSAobiAtIDEpIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIG4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIHdoZW4gbiA9IDAgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+IHNhZmUgKG4gLSAxKSAoeCA6OiBhY2MpIGwnXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbiBsXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdGFrZSBuIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBuID4gMCB0aGVuXG4gICAgICB4IDo6IHRha2UgKG4gLSAxKSBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wIG4gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgXyB3aGVuIG4gPSAwIC0+IGxcbiAgfCBfIDo6IGwnIC0+IGRyb3AgKG4gLSAxKSBsJ1xuXG5sZXQgaGRfdGwgPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhaWx3aXRoIFwiaGRfdGxcIlxuICB8IHggOjogbCAtPiB4LCBsXG5cbmxldCB0YWtlX2Ryb3AgbiBsID0gdGFrZSBuIGwsIGRyb3AgbiBsXG5cbmxldCBzdWJsaXN0c19vZl9sZW4gPyhsYXN0ID0gZnVuIF8gLT4gTm9uZSkgP29mZnNldCBuIGwgPVxuICBpZiBuIDwgMSB0aGVuIGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBuIG11c3QgYmUgPiAwXCI7XG4gIGxldCBvZmZzZXQgPVxuICAgIG1hdGNoIG9mZnNldCB3aXRoXG4gICAgfCBOb25lIC0+IG5cbiAgICB8IFNvbWUgbyB3aGVuIG8gPCAxIC0+IGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBvZmZzZXQgbXVzdCBiZSA+IDBcIlxuICAgIHwgU29tZSBvIC0+IG9cbiAgaW5cbiAgKCogYWRkIHN1Yi1saXN0cyBvZiBbbF0gdG8gW2FjY10gKilcbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIGxldCBncm91cCA9IHRha2UgbiBsIGluXG4gICAgaWYgaXNfZW1wdHkgZ3JvdXAgdGhlblxuICAgICAgYWNjXG4gICAgKCogdGhpcyB3YXMgdGhlIGxhc3QgZ3JvdXAsIHdlIGFyZSBkb25lICopXG4gICAgZWxzZSBpZiBMaXN0Lmxlbmd0aCBncm91cCA8IG4gKCogbGFzdCBncm91cCwgd2l0aCBtaXNzaW5nIGVsZW1lbnRzICopIHRoZW4gKFxuICAgICAgbWF0Y2ggbGFzdCBncm91cCB3aXRoXG4gICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICB8IFNvbWUgZ3JvdXAnIC0+IGdyb3VwJyA6OiBhY2NcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGwnID0gZHJvcCBvZmZzZXQgbCBpblxuICAgICAgYXV4IChncm91cCA6OiBhY2MpIGwnICgqIGNvbnRpbnVlICopXG4gICAgKVxuICBpblxuICBMaXN0LnJldiAoYXV4IFtdIGwpXG5cbmxldCBjaHVua3MgbiBsID0gc3VibGlzdHNfb2ZfbGVuIH5sYXN0OihmdW4geCAtPiBTb21lIHgpIG4gbFxuXG5sZXQgaW50ZXJzcGVyc2UgeCBsID1cbiAgbGV0IHJlYyBhdXhfZGlyZWN0IGkgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIF8gXSAtPiBsXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gYXV4X3RhaWxyZWMgW10geCBsXG4gICAgfCB5IDo6IHRhaWwgLT4geSA6OiB4IDo6IGF1eF9kaXJlY3QgKGkgLSAxKSB4IHRhaWxcbiAgYW5kIGF1eF90YWlscmVjIGFjYyB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbIHkgXSAtPiBMaXN0LnJldiAoeSA6OiBhY2MpXG4gICAgfCB5IDo6IHRhaWwgLT4gYXV4X3RhaWxyZWMgKHggOjogeSA6OiBhY2MpIHggdGFpbFxuICBpblxuICBhdXhfZGlyZWN0IDFfMDAwIHggbFxuXG5sZXQgaW50ZXJsZWF2ZSBsMSBsMiA6IF8gbGlzdCA9XG4gIGxldCByZWMgYXV4IGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKVxuICAgIHwgXywgW10gLT4gTGlzdC5yZXYgKExpc3QucmV2X2FwcGVuZCBsMSBhY2MpXG4gICAgfCB4MSA6OiB0bDEsIHgyIDo6IHRsMiAtPiBhdXggKHgyIDo6IHgxIDo6IGFjYykgdGwxIHRsMlxuICBpblxuICBhdXggW10gbDEgbDJcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRha2Vfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgW10gbFxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIHAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBzYWZlIHAgKHggOjogYWNjKSBsJ1xuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBwIGxcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB0YWtlX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICB4IDo6IHRha2Vfd2hpbGUgcCBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICBkcm9wX3doaWxlIHAgbCdcbiAgICBlbHNlXG4gICAgICBsXG5cbmxldCB0YWtlX2Ryb3Bfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW10sIFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIFtdIGxcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgaWYgcCB4IHRoZW4gKFxuICAgICAgICBsZXQgbDEsIGwyID0gZGlyZWN0IChpIC0gMSkgcCB0YWlsIGluXG4gICAgICAgIHggOjogbDEsIGwyXG4gICAgICApIGVsc2VcbiAgICAgICAgW10sIGxcbiAgYW5kIHNhZmUgcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MsIFtdXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHNhZmUgcCAoeCA6OiBhY2MpIHRhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjLCBsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gcCBsXG5cbmxldCBsYXN0IG4gbCA9XG4gIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IG4gdGhlblxuICAgIGxcbiAgZWxzZVxuICAgIGRyb3AgKGxlbiAtIG4pIGxcblxubGV0IGhlYWRfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuXG5sZXQgdGFpbF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBfIDo6IHRhaWwgLT4gU29tZSB0YWlsXG5cbmxldCByZWMgbGFzdF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBbIHggXSAtPiBTb21lIHhcbiAgfCBfIDo6IHRhaWwgLT4gbGFzdF9vcHQgdGFpbFxuXG5sZXQgZmluZF9wcmVkID0gZmluZF9vcHRcblxubGV0IGZpbmRfcHJlZF9leG4gcCBsID1cbiAgbWF0Y2ggZmluZF9wcmVkIHAgbCB3aXRoXG4gIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBTb21lIHggLT4geFxuXG5sZXQgZmluZF9tYXBpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiBpIHggd2l0aFxuICAgICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBOb25lIC0+IGF1eCBmIChpICsgMSkgbCcpXG4gIGluXG4gIGF1eCBmIDAgbFxuXG5sZXQgZmluZF9tYXAgZiBsID0gZmluZF9tYXBpIChmdW4gXyAtPiBmKSBsXG5cbmxldCBmaW5kX2lkeCBwIGwgPVxuICBmaW5kX21hcGlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBsXG5cbmxldCByZW1vdmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlJyBlcSB4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeSA6OiB0YWlsIHdoZW4gZXEgeCB5IC0+IHJlbW92ZScgZXEgeCBhY2MgdGFpbFxuICAgIHwgeSA6OiB0YWlsIC0+IHJlbW92ZScgZXEgeCAoeSA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgcmVtb3ZlJyBlcSB4IFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyByZWN1cnNlIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYycgPVxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICAgIHwgU29tZSB5IC0+IHkgOjogYWNjXG4gICAgICBpblxuICAgICAgcmVjdXJzZSBhY2MnIGwnXG4gIGluXG4gIHJlY3Vyc2UgW10gbFxuXG5sZXQga2VlcF9zb21lIGwgPSBmaWx0ZXJfbWFwIChmdW4geCAtPiB4KSBsXG5cbmxldCBrZWVwX29rIGwgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1bmN0aW9uXG4gICAgICB8IE9rIHggLT4gU29tZSB4XG4gICAgICB8IEVycm9yIF8gLT4gTm9uZSlcbiAgICBsXG5cbmxldCBhbGxfc29tZSBsID1cbiAgdHJ5XG4gICAgU29tZVxuICAgICAgKG1hcFxuICAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgIHwgU29tZSB4IC0+IHhcbiAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgYWxsX29rIGwgPVxuICBsZXQgZXJyID0gcmVmIE5vbmUgaW5cbiAgdHJ5XG4gICAgT2tcbiAgICAgIChtYXBcbiAgICAgICAgIChmdW5jdGlvblxuICAgICAgICAgICB8IE9rIHggLT4geFxuICAgICAgICAgICB8IEVycm9yIGUgLT5cbiAgICAgICAgICAgICBlcnIgOj0gU29tZSBlO1xuICAgICAgICAgICAgIHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBlIC0+IEVycm9yIGUpXG5cbmxldCBncm91cF9ieSAodHlwZSBrKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpID8oZXEgPSBTdGRsaWIuKCA9ICkpIGwgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0ga1xuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICAoKiBjb21wdXRlIGdyb3VwIHRhYmxlICopXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGwgPSB0cnkgVGJsLmZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIFRibC5yZXBsYWNlIHRibCB4ICh4IDo6IGwpKVxuICAgIGw7XG4gIFRibC5mb2xkIChmdW4gXyB4IGFjYyAtPiB4IDo6IGFjYykgdGJsIFtdXG5cbmxldCBqb2luIH5qb2luX3JvdyBzMSBzMiA6IF8gdCA9XG4gIGZsYXRfbWFwIChmdW4gYSAtPiBmaWx0ZXJfbWFwIChqb2luX3JvdyBhKSBzMikgczFcblxubGV0IGpvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmMSBmMiB+bWVyZ2UgYzFcbiAgICBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIFRibC5hZGQgdGJsIGtleSB4KVxuICAgIGMxO1xuICBsZXQgcmVzID0gcmVmIFtdIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgbGV0IGtleSA9IGYyIHkgaW5cbiAgICAgIGxldCB4cyA9IFRibC5maW5kX2FsbCB0Ymwga2V5IGluXG4gICAgICBMaXN0Lml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggbWVyZ2Uga2V5IHggeSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHogLT4gcmVzIDo9IHogOjogIXJlcylcbiAgICAgICAgeHMpXG4gICAgYzI7XG4gICFyZXNcblxudHlwZSAoJ2EsICdiKSBqb2luX2FsbF9jZWxsID0ge1xuICBtdXRhYmxlIGphX2xlZnQ6ICdhIGxpc3Q7XG4gIG11dGFibGUgamFfcmlnaHQ6ICdiIGxpc3Q7XG59XG5cbmxldCBqb2luX2FsbF9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYxIGYyXG4gICAgfm1lcmdlIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgKCogYnVpbGQgdGhlIG1hcCBba2V5IC0+IGNlbGxdICopXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYyA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgYy5qYV9sZWZ0IDwtIHggOjogYy5qYV9sZWZ0XG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBUYmwuYWRkIHRibCBrZXkgeyBqYV9sZWZ0ID0gWyB4IF07IGphX3JpZ2h0ID0gW10gfSlcbiAgICBjMTtcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICBsZXQga2V5ID0gZjIgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBjLmphX3JpZ2h0IDwtIHkgOjogYy5qYV9yaWdodFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gVGJsLmFkZCB0Ymwga2V5IHsgamFfbGVmdCA9IFtdOyBqYV9yaWdodCA9IFsgeSBdIH0pXG4gICAgYzI7XG4gIFRibC5mb2xkXG4gICAgKGZ1biBrZXkgY2VsbCByZXMgLT5cbiAgICAgIG1hdGNoIG1lcmdlIGtleSBjZWxsLmphX2xlZnQgY2VsbC5qYV9yaWdodCB3aXRoXG4gICAgICB8IE5vbmUgLT4gcmVzXG4gICAgICB8IFNvbWUgeiAtPiB6IDo6IHJlcylcbiAgICB0YmwgW11cblxubGV0IGdyb3VwX2pvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyIChmdW4geCAtPiBUYmwucmVwbGFjZSB0YmwgeCBbXSkgYzE7XG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgKCogcHJvamVjdCBbeV0gaW50byBzb21lIGVsZW1lbnQgb2YgW2MxXSAqKVxuICAgICAgbGV0IGtleSA9IGYgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBsID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBUYmwucmVwbGFjZSB0Ymwga2V5ICh5IDo6IGwpXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKSlcbiAgICBjMjtcbiAgVGJsLmZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgbGV0IHJlYyBzZWFyY2ggZXEgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhbHNlXG4gICAgfCB5IDo6IGwnIC0+IGVxIHggeSB8fCBzZWFyY2ggZXEgeCBsJ1xuICBpblxuICBzZWFyY2ggZXEgeCBsXG5cbmxldCBhZGRfbm9kdXAgfmVxIHggbCA9XG4gIGlmIG1lbSB+ZXEgeCBsIHRoZW5cbiAgICBsXG4gIGVsc2VcbiAgICB4IDo6IGxcblxubGV0IHJlbW92ZV9vbmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlX29uZSB+ZXEgeCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IHkgOjogdGwgd2hlbiBlcSB4IHkgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyB0bFxuICAgIHwgeSA6OiB0bCAtPiByZW1vdmVfb25lIH5lcSB4ICh5IDo6IGFjYykgdGxcbiAgaW5cbiAgaWYgbWVtIH5lcSB4IGwgdGhlblxuICAgIHJlbW92ZV9vbmUgfmVxIHggW10gbFxuICBlbHNlXG4gICAgbFxuXG5sZXQgc3Vic2V0IH5lcSBsMSBsMiA9IExpc3QuZm9yX2FsbCAoZnVuIHQgLT4gbWVtIH5lcSB0IGwyKSBsMVxuXG5sZXQgdW5pcSB+ZXEgbCA9XG4gIGxldCByZWMgdW5pcSBlcSBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBMaXN0LmV4aXN0cyAoZXEgeCkgeHMgLT4gdW5pcSBlcSBhY2MgeHNcbiAgICB8IHggOjogeHMgLT4gdW5pcSBlcSAoeCA6OiBhY2MpIHhzXG4gIGluXG4gIHVuaXEgZXEgW10gbFxuXG5sZXQgdW5pb24gfmVxIGwxIGwyID1cbiAgbGV0IHJlYyB1bmlvbiBlcSBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gdW5pb24gZXEgYWNjIHhzIGwyXG4gICAgfCB4IDo6IHhzIC0+IHVuaW9uIGVxICh4IDo6IGFjYykgeHMgbDJcbiAgaW5cbiAgdW5pb24gZXEgW10gbDEgbDJcblxubGV0IGludGVyIH5lcSBsMSBsMiA9XG4gIGxldCByZWMgaW50ZXIgZXEgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gaW50ZXIgZXEgKHggOjogYWNjKSB4cyBsMlxuICAgIHwgXyA6OiB4cyAtPiBpbnRlciBlcSBhY2MgeHMgbDJcbiAgaW5cbiAgaW50ZXIgZXEgW10gbDEgbDJcblxubGV0IG1hcGkgZiBsID1cbiAgbGV0IHIgPSByZWYgMCBpblxuICBtYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCB5ID0gZiAhciB4IGluXG4gICAgICBpbmNyIHI7XG4gICAgICB5KVxuICAgIGxcblxubGV0IGl0ZXJpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+ICgpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBmIGkgeDtcbiAgICAgIGF1eCBmIChpICsgMSkgbCdcbiAgaW5cbiAgYXV4IGYgMCBsXG5cbmxldCBpdGVyaTIgZiBsMSBsMiA9XG4gIGxldCByZWMgYXV4IGYgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiAoKVxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcIml0ZXJpMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgZiBpIHgxIHgyO1xuICAgICAgYXV4IGYgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGF1eCBmIDAgbDEgbDJcblxubGV0IGZvbGRpIGYgYWNjIGwgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyBpIHggaW5cbiAgICAgIGZvbGRpIGYgYWNjIChpICsgMSkgbCdcbiAgaW5cbiAgZm9sZGkgZiBhY2MgMCBsXG5cbmxldCBmb2xkaTIgZiBhY2MgbDEgbDIgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gYWNjXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiZm9sZGkyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgaSB4MSB4MiBpblxuICAgICAgZm9sZGkgZiBhY2MgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGZvbGRpIGYgYWNjIDAgbDEgbDJcblxubGV0IHJlYyBnZXRfYXRfaWR4X3JlYyBpIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IF8gd2hlbiBpID0gMCAtPiB4XG4gIHwgXyA6OiBsJyAtPiBnZXRfYXRfaWR4X3JlYyAoaSAtIDEpIGwnXG5cbmxldCBnZXRfYXRfaWR4X2V4biBpIGwgPVxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBnZXRfYXRfaWR4X3JlYyBpIGxcblxubGV0IGdldF9hdF9pZHggaSBsID0gdHJ5IFNvbWUgKGdldF9hdF9pZHhfZXhuIGkgbCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgc2V0X2F0X2lkeCBpIHggbDAgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGwwXG4gICAgfCBfIDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyAoeCA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IGluc2VydF9hdF9pZHggaSB4IGwgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpIHggPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBbIHggXVxuICAgIHwgeSA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgKHggOjogeSA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKSB4XG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsIFtdIGkgeFxuXG5sZXQgcmVtb3ZlX2F0X2lkeCBpIGwwID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBsMFxuICAgIHwgXyA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbCdcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICByYW5nZSBpIChqIC0gc3RlcCkgKGogOjogYWNjKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0xpc3QucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIFtdXG5cbmxldCByYW5nZSBpIGogPVxuICBsZXQgcmVjIHVwIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgdXAgaSAoaiAtIDEpIChqIDo6IGFjYylcbiAgYW5kIGRvd24gaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICBkb3duIGkgKGogKyAxKSAoaiA6OiBhY2MpXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIFtdXG4gIGVsc2VcbiAgICBkb3duIGkgaiBbXVxuXG5sZXQgcmFuZ2UnIGkgaiA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSlcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKVxuXG5sZXQgKCAtLSApID0gcmFuZ2VcbmxldCAoIC0tXiApID0gcmFuZ2UnXG5cbmxldCByZXBsaWNhdGUgaSB4ID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoeCA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubGV0IHJlcGVhdCBpIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChMaXN0LnJldl9hcHBlbmQgbCBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubW9kdWxlIEFzc29jID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdCA9ICgnYSAqICdiKSBsaXN0XG5cbiAgbGV0IHJlYyBzZWFyY2hfZXhuIGVxIGwgeCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8ICh5LCB6KSA6OiBsJyAtPlxuICAgICAgaWYgZXEgeCB5IHRoZW5cbiAgICAgICAgelxuICAgICAgZWxzZVxuICAgICAgICBzZWFyY2hfZXhuIGVxIGwnIHhcblxuICBsZXQgZ2V0X2V4biB+ZXEgeCBsID0gc2VhcmNoX2V4biBlcSBsIHhcbiAgbGV0IGdldCB+ZXEgeCBsID0gdHJ5IFNvbWUgKHNlYXJjaF9leG4gZXEgbCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgKCogc2VhcmNoIGZvciBhIGJpbmRpbmcgZm9yIFt4XSBpbiBbbF0sIGFuZCBjYWxscyBbZiB4IChTb21lIHYpIHJlc3RdXG4gICAgIG9yIFtmIHggTm9uZSByZXN0XSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBmaW5kcyB0aGUgYmluZGluZy5cbiAgICAgW3Jlc3RdIGlzIHRoZSBsaXN0IG9mIHRoZSBvdGhlciBiaW5kaW5ncyAqKVxuICBsZXQgcmVjIHNlYXJjaF9zZXQgZXEgYWNjIGwgeCB+ZiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmIHggTm9uZSBhY2NcbiAgICB8ICh4JywgeScpIDo6IGwnIC0+XG4gICAgICBpZiBlcSB4IHgnIHRoZW5cbiAgICAgICAgZiB4IChTb21lIHknKSAoTGlzdC5yZXZfYXBwZW5kIGFjYyBsJylcbiAgICAgIGVsc2VcbiAgICAgICAgc2VhcmNoX3NldCBlcSAoKHgnLCB5JykgOjogYWNjKSBsJyB4IH5mXG5cbiAgbGV0IHNldCB+ZXEgeCB5IGwgPSBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIHggXyBsIC0+ICh4LCB5KSA6OiBsKVxuXG4gIGxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgICB0cnlcbiAgICAgIGlnbm9yZSAoc2VhcmNoX2V4biBlcSBsIHgpO1xuICAgICAgdHJ1ZVxuICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbiAgbGV0IHVwZGF0ZSB+ZXEgZiB4IGwgPVxuICAgIHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4geCBvcHRfeSByZXN0IC0+XG4gICAgICAgIG1hdGNoIGYgb3B0X3kgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gcmVzdCAoKiBkcm9wICopXG4gICAgICAgIHwgU29tZSB5JyAtPiAoeCwgeScpIDo6IHJlc3QpXG5cbiAgbGV0IHJlbW92ZSB+ZXEgeCBsID1cbiAgICBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIF8gb3B0X3kgcmVzdCAtPlxuICAgICAgICBtYXRjaCBvcHRfeSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBsICgqIGtlZXAgYXMgaXMgKilcbiAgICAgICAgfCBTb21lIF8gLT4gcmVzdClcblxuICBsZXQga2V5cyBsID0gbWFwIChmdW4gKGssIF8pIC0+IGspIGxcbiAgbGV0IHZhbHVlcyBsID0gbWFwIChmdW4gKF8sIHYpIC0+IHYpIGxcbiAgbGV0IG1hcF92YWx1ZXMgZiBsID0gbWFwIChmdW4gKGssIHYpIC0+IGssIGYgdikgbFxuZW5kXG5cbmxldCBhc3NvYyA9IEFzc29jLmdldF9leG5cbmxldCBhc3NvY19vcHQgPSBBc3NvYy5nZXRcbmxldCBtZW1fYXNzb2MgPSBBc3NvYy5tZW1cbmxldCByZW1vdmVfYXNzb2MgPSBBc3NvYy5yZW1vdmVcblxuKCoqIHsyIFJlZmVyZW5jZXMgb24gTGlzdHN9ICopXG5cbm1vZHVsZSBSZWYgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2EgbGlzdCByZWZcblxuICBsZXQgcHVzaCBsIHggPSBsIDo9IHggOjogIWxcblxuICBsZXQgcG9wIGwgPVxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbCA6PSB0YWlsO1xuICAgICAgU29tZSB4XG5cbiAgbGV0IHBvcF9leG4gbCA9XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJDQ0xpc3QuUmVmLnBvcF9leG5cIlxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsIDo9IHRhaWw7XG4gICAgICB4XG5cbiAgbGV0IGNyZWF0ZSAoKSA9IHJlZiBbXVxuICBsZXQgY2xlYXIgbCA9IGwgOj0gW11cbiAgbGV0IGxpZnQgZiBsID0gZiAhbFxuICBsZXQgcHVzaF9saXN0IHIgbCA9IHIgOj0gTGlzdC5yZXZfYXBwZW5kIGwgIXJcbmVuZFxuXG4oKiogezIgTW9uYWRpYyBPcGVyYXRpb25zfSAqKVxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIG9wZW4gTVxuXG4gIGxldCBtYXBfbSBmIGwgPVxuICAgIGxldCByZWMgYXV4IGYgYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IHJldHVybiAoTGlzdC5yZXYgYWNjKVxuICAgICAgfCB4IDo6IHRhaWwgLT4gZiB4ID4+PSBmdW4geCcgLT4gYXV4IGYgKHgnIDo6IGFjYykgdGFpbFxuICAgIGluXG4gICAgYXV4IGYgW10gbFxuXG4gIGxldCByZWMgbWFwX21fcGFyIGYgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBNLnJldHVybiBbXVxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgbGV0IHgnID0gZiB4IGluXG4gICAgICBsZXQgdGwnID0gbWFwX21fcGFyIGYgdGwgaW5cbiAgICAgIHgnID4+PSBmdW4geCcgLT5cbiAgICAgIHRsJyA+Pj0gZnVuIHRsJyAtPiBNLnJldHVybiAoeCcgOjogdGwnKVxuXG4gIGxldCBzZXF1ZW5jZV9tIGwgPSBtYXBfbSAoZnVuIHggLT4geCkgbFxuXG4gIGxldCByZWMgZm9sZF9tIGYgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gcmV0dXJuIGFjY1xuICAgIHwgeCA6OiBsJyAtPiBmIGFjYyB4ID4+PSBmdW4gYWNjJyAtPiBmb2xkX20gZiBhY2MnIGwnXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tX2xlbiBsZW4gZyBzdCA9IGluaXQgbGVuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbGVuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIGxlbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbGVuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBsZW4gZyBzdFxuXG5sZXQgcmFuZG9tX2Nob29zZSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgXyA6OiBfIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICBmdW4gc3QgLT5cbiAgICAgIGxldCBpID0gUmFuZG9tLlN0YXRlLmludCBzdCBsZW4gaW5cbiAgICAgIExpc3QubnRoIGwgaVxuXG5sZXQgcmFuZG9tX3NlcXVlbmNlIGwgc3QgPSBtYXAgKGZ1biBnIC0+IGcgc3QpIGxcblxubGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIGwgaW5cbiAgc3RhcnQgXiBTdHJpbmcuY29uY2F0IHNlcCBsIF4gc3RvcFxuXG5sZXQgdG9faXRlciBsIGsgPSBMaXN0Lml0ZXIgayBsXG5cbmxldCByZWMgdG9fc2VxIGwgKCkgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBTZXEuTmlsXG4gIHwgeCA6OiB0bCAtPiBTZXEuQ29ucyAoeCwgdG9fc2VxIHRsKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgaSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5yZXYgIWxcblxubGV0IG9mX3NlcV9yZXYgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgcyA9XG4gICAgbWF0Y2ggcyAoKSB3aXRoXG4gICAgfCBTZXEuTmlsIC0+IGFjY1xuICAgIHwgU2VxLkNvbnMgKHgsIHRsKSAtPiBsb29wICh4IDo6IGFjYykgdGxcbiAgaW5cbiAgbG9vcCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBvZl9zZXEgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgc2VxID1cbiAgICBpZiBpIDw9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgKG9mX3NlcV9yZXYgc2VxKVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+IHggOjogZGlyZWN0IChpIC0gMSkgdGxcbiAgICApXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5bQEBAZW5kaWZdXG5cbmxldCB0b19nZW4gbCA9XG4gIGxldCBsID0gcmVmIGwgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbCA6PSBsJztcbiAgICAgIFNvbWUgeFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGcgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHNhZmUgW10gZ1xuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSB4IC0+IHggOjogZGlyZWN0IChpIC0gMSkgZ1xuICAgIClcbiAgYW5kIHNhZmUgYWNjIGcgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFNvbWUgeCAtPiBzYWZlICh4IDo6IGFjYykgZ1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGdcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9nZW4gZyA9XG4gIG1hdGNoIGcgKCkgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4geCA6OiBvZl9nZW4gZ1xuXG5bQEBAZW5kaWZdXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXRbQGlubGluZV0gKCA+fD0gKSBsIGYgPSBtYXAgZiBsXG4gIGxldFtAaW5saW5lXSAoID4+PSApIGwgZiA9IGZsYXRfbWFwIGYgbFxuICBsZXQgKCBAICkgPSAoIEAgKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBsMSBsMiA9IHByb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgbDEgbDJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbiAgbGV0ICggYW5kJiApID0gY29tYmluZV9zaG9ydGVzdFxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX2l0ZW0gZm10IGwgPVxuICBsZXQgcmVjIHByaW50IGZtdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IHggOjogKF8gOjogXyBhcyBsKSAtPlxuICAgICAgcHBfaXRlbSBmbXQgeDtcbiAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICBwcmludCBmbXQgbFxuICAgIHwgWyB4IF0gLT4gcHBfaXRlbSBmbXQgeFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgcHBfc3RhcnQgZm10ICgpO1xuICBwcmludCBmbXQgbDtcbiAgcHBfc3RvcCBmbXQgKClcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBPcHRpb25zfSAqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb25cblxubGV0W0BpbmxpbmVdIG1hcCBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gU29tZSAoZiB4KVxuXG5sZXQgbWFwX29yIH5kZWZhdWx0IGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IG1hcF9sYXp5IGRlZmF1bHRfZm4gZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBpc19ub25lID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiAwXG4gIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBmIHggeVxuXG5sZXQgZXF1YWwgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSBfLCBOb25lIHwgTm9uZSwgU29tZSBfIC0+IGZhbHNlXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gZiB4IHlcblxubGV0IHJldHVybiB4ID0gU29tZSB4XG5sZXQgc29tZSA9IHJldHVyblxubGV0IG5vbmUgPSBOb25lXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBmbGF0X21hcF9sIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBiaW5kIG8gZiA9IGZsYXRfbWFwIGYgb1xubGV0ICggPj49ICkgPSBiaW5kXG5sZXQgcHVyZSB4ID0gU29tZSB4XG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYsIHggd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIGYsIFNvbWUgeCAtPiBTb21lIChmIHgpXG5cbmxldCBvcl8gfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfXG4gIHwgU29tZSBfIC0+IGFcblxubGV0IG9yX2xhenkgfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfICgpXG4gIHwgU29tZSBfIC0+IGFcblxubGV0ICggPCs+ICkgYSBiID0gb3JfIH5lbHNlXzpiIGFcbmxldCBjaG9pY2UgbCA9IExpc3QuZm9sZF9sZWZ0ICggPCs+ICkgTm9uZSBsXG5cbmxldCBtYXAyIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lIChmIHggeSlcblxubGV0IGZpbHRlciBwID0gZnVuY3Rpb25cbiAgfCBTb21lIHggYXMgbyB3aGVuIHAgeCAtPiBvXG4gIHwgXyAtPiBOb25lXG5cbmxldCBpZl8gcCB4ID1cbiAgaWYgcCB4IHRoZW5cbiAgICBTb21lIHhcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSB4IC0+IHAgeFxuXG5sZXQgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIHggLT4gcCB4XG5cbmxldCBpdGVyIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBmb2xkIGYgYWNjIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGFjY1xuICB8IFNvbWUgeCAtPiBmIGFjYyB4XG5cbmxldCBnZXRfb3IgfmRlZmF1bHQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCB2YWx1ZSB4IH5kZWZhdWx0ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB5IC0+IHlcblxubGV0IGdldF9leG4gPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDT3B0aW9uLmdldF9leG5cIlxuXG5sZXQgZ2V0X2V4bl9vciBtc2cgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBtc2dcblxubGV0IGdldF9sYXp5IGRlZmF1bHRfZm4geCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdF9mbiAoKVxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCBzZXF1ZW5jZV9sIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTb21lIChMaXN0LnJldiBhY2MpXG4gICAgfCBTb21lIHggOjogbCcgLT4gYXV4ICh4IDo6IGFjYykgbCdcbiAgICB8IE5vbmUgOjogXyAtPiByYWlzZSBFeGl0XG4gIGluXG4gIHRyeSBhdXggW10gbCB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgd3JhcCA/KGhhbmRsZXIgPSBmdW4gXyAtPiB0cnVlKSBmIHggPVxuICB0cnkgU29tZSAoZiB4KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHdyYXAyID8oaGFuZGxlciA9IGZ1biBfIC0+IHRydWUpIGYgeCB5ID1cbiAgdHJ5IFNvbWUgKGYgeCB5KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHRvX2xpc3QgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gWyB4IF1cblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICB8IHggOjogXyAtPiBTb21lIHhcbiAgfCBbXSAtPiBOb25lXG5cbmxldCB0b19yZXN1bHQgZXJyID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIGVyclxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCB0b19yZXN1bHRfbGF6eSBlcnJfZm4gPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgKGVycl9mbiAoKSlcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgb2ZfcmVzdWx0ID0gZnVuY3Rpb25cbiAgfCBFcnJvciBfIC0+IE5vbmVcbiAgfCBPayB4IC0+IFNvbWUgeFxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPnw9ICkgeCBmID0gbWFwIGYgeFxuICBsZXQgKCA+Pj0gKSA9ICggPj49IClcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoIDwrPiApID0gKCA8Kz4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgbzEgbzIgPVxuICAgIG1hdGNoIG8xLCBvMiB3aXRoXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lICh4LCB5KVxuICAgIHwgXyAtPiBOb25lXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGlmIFJhbmRvbS5TdGF0ZS5ib29sIHN0IHRoZW5cbiAgICBTb21lIChnIHN0KVxuICBlbHNlXG4gICAgTm9uZVxuXG5leGNlcHRpb24gRXhpdENob2ljZVxuXG5sZXQgY2hvaWNlX2l0ZXIgcyA9XG4gIGxldCByID0gcmVmIE5vbmUgaW5cbiAgKHRyeVxuICAgICBzIChmdW5jdGlvblxuICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgIHwgU29tZSBfIGFzIG8gLT5cbiAgICAgICAgIHIgOj0gbztcbiAgICAgICAgIHJhaXNlIEV4aXRDaG9pY2UpXG4gICB3aXRoIEV4aXRDaG9pY2UgLT4gKCkpO1xuICAhclxuXG5sZXQgcmVjIGNob2ljZV9zZXEgcyA9XG4gIG1hdGNoIHMgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gTm9uZVxuICB8IFNlcS5Db25zIChTb21lIHgsIF8pIC0+IFNvbWUgeFxuICB8IFNlcS5Db25zIChOb25lLCB0bCkgLT4gY2hvaWNlX3NlcSB0bFxuXG5sZXQgdG9fZ2VuIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGZ1biAoKSAtPiBOb25lXG4gIHwgU29tZSBfIC0+XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuIChcbiAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgIG9cbiAgICAgICkgZWxzZVxuICAgICAgICBOb25lXG5cbmxldCB0b19pdGVyIG8gayA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gayB4XG5cbmxldCB0b19zZXEgbyAoKSA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gU2VxLk5pbFxuICB8IFNvbWUgeCAtPiBTZXEuQ29ucyAoeCwgU2VxLmVtcHR5KVxuXG5sZXQgcHAgcHB4IG91dCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIk5vbmVcIlxuICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJAW1NvbWUgJWFAXVwiIHBweCB4XG5cbmxldCBmbGF0dGVuID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gTm9uZVxuXG5sZXQgcmV0dXJuX2lmIGIgeCA9XG4gIGlmIGIgdGhlblxuICAgIFNvbWUgeFxuICBlbHNlXG4gICAgTm9uZVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFJhbmRvbSBHZW5lcmF0b3JzfSAqKVxuXG5pbmNsdWRlIFJhbmRvbVxuXG50eXBlIHN0YXRlID0gUmFuZG9tLlN0YXRlLnRcbnR5cGUgJ2EgdCA9IHN0YXRlIC0+ICdhXG50eXBlICdhIHJhbmRvbV9nZW4gPSAnYSB0XG5cbmxldCByZXR1cm4geCBfc3QgPSB4XG5sZXQgZmxhdF9tYXAgZiBnIHN0ID0gZiAoZyBzdCkgc3RcbmxldCAoID4+PSApIGcgZiBzdCA9IGZsYXRfbWFwIGYgZyBzdFxubGV0IG1hcCBmIGcgc3QgPSBmIChnIHN0KVxubGV0ICggPnw9ICkgZyBmIHN0ID0gbWFwIGYgZyBzdFxubGV0IGRlbGF5IGYgc3QgPSBmICgpIHN0XG5cbmxldCBfY2hvb3NlX2FycmF5IGEgc3QgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkNDUmFuZG9tLmNob29zZV9hcnJheVwiO1xuICBhLihSYW5kb20uU3RhdGUuaW50IHN0IChBcnJheS5sZW5ndGggYSkpXG5cbmxldCBjaG9vc2VfYXJyYXkgYSBzdCA9XG4gIHRyeSBTb21lIChfY2hvb3NlX2FycmF5IGEgc3Qgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IGNob29zZSBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgY2hvb3NlX2FycmF5IGFcblxubGV0IGNob29zZV9leG4gbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIGZ1biBzdCAtPiBfY2hvb3NlX2FycmF5IGEgc3Qgc3RcblxubGV0IGNob29zZV9yZXR1cm4gbCA9IF9jaG9vc2VfYXJyYXkgKEFycmF5Lm9mX2xpc3QgbClcblxuZXhjZXB0aW9uIFBpY2tfZnJvbV9lbXB0eVxuXG5sZXQgcGlja19saXN0IGwgPVxuICBsZXQgbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgaWYgbiA9IDAgdGhlbiByYWlzZSBQaWNrX2Zyb21fZW1wdHk7XG4gIGZ1biBzdCAtPiBMaXN0Lm50aCBsIChSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCBwaWNrX2FycmF5IGEgPVxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW4gcmFpc2UgUGlja19mcm9tX2VtcHR5O1xuICBmdW4gc3QgLT4gQXJyYXkuZ2V0IGEgKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IGludCBpIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBpXG5sZXQgc21hbGxfaW50ID0gaW50IDEwMFxubGV0IGludF9yYW5nZSBpIGogc3QgPSBpICsgUmFuZG9tLlN0YXRlLmludCBzdCAoaiAtIGkgKyAxKVxubGV0IGZsb2F0IGYgc3QgPSBSYW5kb20uU3RhdGUuZmxvYXQgc3QgZlxubGV0IHNtYWxsX2Zsb2F0ID0gZmxvYXQgMTAwLjBcbmxldCBmbG9hdF9yYW5nZSBpIGogc3QgPSBpICsuIFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCAoaiAtLiBpKVxuXG4oKiBUT0RPOiBzYW1wbGUgZnVuY3Rpb25zICopXG5cbmxldCByZXBsaWNhdGUgbiBnIHN0ID1cbiAgbGV0IHJlYyBhdXggYWNjIG4gPVxuICAgIGlmIG4gPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoZyBzdCA6OiBhY2MpIChuIC0gMSlcbiAgaW5cbiAgYXV4IFtdIG5cblxuKCogU2FtcGxlIHdpdGhvdXQgcmVwbGFjZW1lbnQgdXNpbmcgcmVqZWN0aW9uIHNhbXBsaW5nLiAqKVxubGV0IHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgKHR5cGUgZWx0KSB+Y21wIGsgKHJuZyA6IGVsdCB0KSBzdCA9XG4gIGxldCBtb2R1bGUgUyA9IFNldC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBlbHRcblxuICAgIGxldCBjb21wYXJlID0gY21wXG4gIGVuZCkgaW5cbiAgbGV0IHJlYyBhdXggcyBrID1cbiAgICBpZiBrIDw9IDAgdGhlblxuICAgICAgUy5lbGVtZW50cyBzXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IHJuZyBzdCBpblxuICAgICAgaWYgUy5tZW0geCBzIHRoZW5cbiAgICAgICAgYXV4IHMga1xuICAgICAgZWxzZVxuICAgICAgICBhdXggKFMuYWRkIHggcykgKGsgLSAxKVxuICAgIClcbiAgaW5cbiAgaWYgayA8PSAwIHRoZW4gaW52YWxpZF9hcmcgXCJzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzXCI7XG4gIGF1eCBTLmVtcHR5IGtcblxubGV0IGxpc3Rfc2VxIGwgc3QgPSBMaXN0Lm1hcCAoZnVuIGYgLT4gZiBzdCkgbFxuXG5sZXQgc3BsaXQgaSBzdCA9XG4gIGlmIGkgPCAyIHRoZW5cbiAgICBOb25lXG4gIGVsc2UgKFxuICAgIGxldCBqID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgKGkgLSAxKSBpblxuICAgIFNvbWUgKGosIGkgLSBqKVxuICApXG5cbmxldCBfZGlmZl9saXN0IH5sYXN0IGwgPVxuICBsZXQgcmVjIGRpZmZfbGlzdCBhY2MgPSBmdW5jdGlvblxuICAgIHwgWyBhIF0gLT4gU29tZSAoKGxhc3QgLSBhKSA6OiBhY2MpXG4gICAgfCBhIDo6IChiIDo6IF8gYXMgcikgLT4gZGlmZl9saXN0ICgoYiAtIGEpIDo6IGFjYykgclxuICAgIHwgW10gLT4gTm9uZVxuICBpblxuICBkaWZmX2xpc3QgW10gbFxuXG4oKiBQYXJ0aXRpb24gb2YgYW4gaW50IGludG8gW2xlbl0gaW50ZWdlcnMgdW5pZm9ybWx5LlxuICAgV2UgZmlyc3Qgc2FtcGxlIChsZW4tMSkgcG9pbnRzIGZyb20gdGhlIHNldCB7MSwuLmktMX0gd2l0aG91dCByZXBsYWNlbWVudC5cbiAgIFdlIHNvcnQgdGhlc2UgcG9pbnRzIGFuZCBhZGQgYmFjayAwIGFuZCBpLCB3ZSBoYXZlIHRodXNcbiAgIHhfMCA9IDAgPCB4XzEgPCB4XzIgPCDigKYgPCB4X3tsZW4tMX0gPCBpID0geF97bGVufS5cbiAgIElmIHdlIGRlZmluZSwgeV9rID0geF97aysxfSAtIHhfe2t9IGZvciBrIGluIDAg4oCmIChsZW4tMSksIHRoZW4gYnkgY29uc3RydWN0aW9uXG4gICDiiJFfayB5X2sgPSDiiJFfayAoeF97aysxfSAtIHhfayApID0geF97bGVufSAtIHhfMCA9IGkuICopXG5sZXQgc3BsaXRfbGlzdCBpIH5sZW4gc3QgPVxuICBpZiBsZW4gPD0gMSB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLnNwbGl0X2xpc3RcIjtcbiAgaWYgaSA+PSBsZW4gdGhlbiAoXG4gICAgbGV0IHhzID1cbiAgICAgIHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgfmNtcDpjb21wYXJlIChsZW4gLSAxKSAoaW50X3JhbmdlIDEgKGkgLSAxKSkgc3RcbiAgICBpblxuICAgIF9kaWZmX2xpc3Qgfmxhc3Q6aSAoMCA6OiB4cylcbiAgKSBlbHNlXG4gICAgTm9uZVxuXG5sZXQgcmV0cnkgPyhtYXggPSAxMCkgZyBzdCA9XG4gIGxldCByZWMgYXV4IG4gPVxuICAgIG1hdGNoIGcgc3Qgd2l0aFxuICAgIHwgTm9uZSB3aGVuIG4gPSAwIC0+IE5vbmVcbiAgICB8IE5vbmUgLT4gYXV4IChuIC0gMSkgKCogcmV0cnkgKilcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gIGluXG4gIGF1eCBtYXhcblxubGV0IHJlYyB0cnlfc3VjY2Vzc2l2ZWx5IGwgc3QgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBOb25lXG4gIHwgZyA6OiBsJyAtPlxuICAgIChtYXRjaCBnIHN0IHdpdGhcbiAgICB8IE5vbmUgLT4gdHJ5X3N1Y2Nlc3NpdmVseSBsJyBzdFxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXMpXG5cbmxldCAoIDw/PiApIGEgYiA9IHRyeV9zdWNjZXNzaXZlbHkgWyBhOyBiIF1cblxuZXhjZXB0aW9uIEJhY2t0cmFja1xuXG5sZXQgX2Nob29zZV9hcnJheV9jYWxsIGEgZiBzdCA9XG4gIHRyeSBmIChfY2hvb3NlX2FycmF5IGEgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IHJhaXNlIEJhY2t0cmFja1xuXG5sZXQgZml4ID8oc3ViMSA9IFtdKSA/KHN1YjIgPSBbXSkgPyhzdWJuID0gW10pIH5iYXNlIGZ1ZWwgc3QgPVxuICBsZXQgc3ViMSA9IEFycmF5Lm9mX2xpc3Qgc3ViMVxuICBhbmQgc3ViMiA9IEFycmF5Lm9mX2xpc3Qgc3ViMlxuICBhbmQgc3VibiA9IEFycmF5Lm9mX2xpc3Qgc3VibiBpblxuICAoKiByZWN1cnNpdmUgZnVuY3Rpb24gd2l0aCBmdWVsICopXG4gIGxldCByZWMgbWFrZSBmdWVsIHN0ID1cbiAgICBpZiBmdWVsID0gMCB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIGlmIGZ1ZWwgPSAxIHRoZW5cbiAgICAgIGJhc2Ugc3RcbiAgICBlbHNlXG4gICAgICBfdHJ5X290aGVyd2lzZSAwXG4gICAgICAgIFt8XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1YjEgKGZ1biBmIC0+IGYgKG1ha2UgKGZ1ZWwgLSAxKSkgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWIyIChmdW4gZiAtPlxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdCBmdWVsIHN0IHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEJhY2t0cmFja1xuICAgICAgICAgICAgICB8IFNvbWUgKGksIGopIC0+IGYgKG1ha2UgaSkgKG1ha2Ugaikgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWJuIChmdW4gKGxlbiwgZikgLT5cbiAgICAgICAgICAgICAgbGV0IGxlbiA9IGxlbiBzdCBpblxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdF9saXN0IGZ1ZWwgfmxlbiBzdCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBCYWNrdHJhY2tcbiAgICAgICAgICAgICAgfCBTb21lIGwnIC0+IGYgKGZ1biBzdCAtPiBMaXN0Lm1hcCAoZnVuIHggLT4gbWFrZSB4IHN0KSBsJykgc3QpO1xuICAgICAgICAgIGJhc2UgKCogYmFzZSBjYXNlIHRoZW4gKik7XG4gICAgICAgIHxdXG4gIGFuZCBfdHJ5X290aGVyd2lzZSBpIGEgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIChcbiAgICAgIHRyeSBhLihpKSBzdCB3aXRoIEJhY2t0cmFjayAtPiBfdHJ5X290aGVyd2lzZSAoaSArIDEpIGFcbiAgICApXG4gIGluXG4gIG1ha2UgKGZ1ZWwgc3QpIHN0XG5cbmxldCBwdXJlIHggX3N0ID0geFxubGV0ICggPCo+ICkgZiBnIHN0ID0gZiBzdCAoZyBzdClcbmxldCAoIGxldCsgKSA9ICggPnw9IClcbmxldCAoIGxldCogKSA9ICggPj49IClcbmxldFtAaW5saW5lXSAoIGFuZCsgKSBhMSBhMiBzdCA9IGExIHN0LCBhMiBzdFxubGV0ICggYW5kKiApID0gKCBhbmQrIClcbmxldCBfX2RlZmF1bHRfc3RhdGUgPSBSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQgKClcbmxldCBydW4gPyhzdCA9IF9fZGVmYXVsdF9zdGF0ZSkgZyA9IGcgc3RcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBFcnJvciBNb25hZH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIG9yZCA9ICdhIC0+ICdhIC0+IGludFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBCYXNpY3N9ICopXG5cbnR5cGUgbm9ucmVjICgrJ2dvb2QsICsnYmFkKSByZXN1bHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9XG4gIHwgT2sgb2YgJ2dvb2RcbiAgfCBFcnJvciBvZiAnYmFkXG5cbnR5cGUgKCsnZ29vZCwgKydiYWQpIHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9IE9rIG9mICdnb29kIHwgRXJyb3Igb2YgJ2JhZFxuXG5sZXQgcmV0dXJuIHggPSBPayB4XG5sZXQgZmFpbCBzID0gRXJyb3Igc1xuXG5sZXQgZmFpbF9wcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgUHJpbnRmLmticHJpbnRmIChmdW4gYnVmIC0+IGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKSBidWYgZm9ybWF0XG5cbmxldCBmYWlsX2ZwcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmb3JtYXRcblxubGV0IGFkZF9jdHggbXNnIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBFcnJvciBlIC0+IEVycm9yIChlIF4gXCJcXG5jb250ZXh0OlwiIF4gbXNnKVxuICB8IE9rIHggLT4gT2sgeFxuXG5sZXQgYWRkX2N0eGYgbXNnID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCBlIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgYWRkX2N0eCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgZSlcbiAgICBvdXQgbXNnXG5cbmxldCBvZl9leG4gZSA9XG4gIGxldCBtc2cgPSBQcmludGV4Yy50b19zdHJpbmcgZSBpblxuICBFcnJvciBtc2dcblxubGV0IG9mX2V4bl90cmFjZSBlID1cbiAgbGV0IHJlcyA9XG4gICAgUHJpbnRmLnNwcmludGYgXCIlc1xcbiVzXCIgKFByaW50ZXhjLnRvX3N0cmluZyBlKSAoUHJpbnRleGMuZ2V0X2JhY2t0cmFjZSAoKSlcbiAgaW5cbiAgRXJyb3IgcmVzXG5cbmxldCBvcHRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE5vbmUgLT4gT2sgTm9uZVxuICB8IFNvbWUgeCAtPlxuICAgIChtYXRjaCBmIHggd2l0aFxuICAgIHwgT2sgeCAtPiBPayAoU29tZSB4KVxuICAgIHwgRXJyb3IgZSAtPiBFcnJvciBlKVxuXG5sZXQgbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IG1hcF9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gIHwgRXJyb3IgeSAtPiBFcnJvciAoZiB5KVxuXG5sZXQgbWFwMiBmIGcgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIChnIHMpXG5cbmxldCBpdGVyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG5sZXQgaXRlcl9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyAtPiAoKVxuICB8IEVycm9yIGVyciAtPiBmIGVyclxuXG5leGNlcHRpb24gR2V0X2Vycm9yXG5cbmxldCBnZXRfZXhuID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IHJhaXNlIEdldF9lcnJvclxuXG5sZXQgZ2V0X29yIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IGRlZmF1bHRcblxubGV0IGdldF9sYXp5IGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIGUgLT4gZiBlXG5cbmxldCBnZXRfb3JfZmFpbHdpdGggPSBmdW5jdGlvblxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIG1zZyAtPiBmYWlsd2l0aCBtc2dcblxubGV0IG1hcF9vciBmIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIF8gLT4gZGVmYXVsdFxuXG5sZXQgY2F0Y2ggZSB+b2sgfmVyciA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHkgLT4gZXJyIHlcblxubGV0IGZsYXRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbmxldCBlcXVhbCB+ZXJyIGVxIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gZXEgeCB5XG4gIHwgRXJyb3IgcywgRXJyb3IgcycgLT4gZXJyIHMgcydcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5lcnIgY21wIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gY21wIHggeVxuICB8IE9rIF8sIF8gLT4gMVxuICB8IF8sIE9rIF8gLT4gLTFcbiAgfCBFcnJvciBzLCBFcnJvciBzJyAtPiBlcnIgcyBzJ1xuXG5sZXQgZm9sZCB+b2sgfmVycm9yIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBPayB4IC0+IG9rIHhcbiAgfCBFcnJvciBzIC0+IGVycm9yIHNcblxubGV0IGZvbGRfb2sgZiBhY2MgciA9XG4gIG1hdGNoIHIgd2l0aFxuICB8IE9rIHggLT4gZiBhY2MgeFxuICB8IEVycm9yIF8gLT4gYWNjXG5cbmxldCBpc19vayA9IGZ1bmN0aW9uXG4gIHwgT2sgXyAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvblxuICB8IE9rIF8gLT4gZmFsc2VcbiAgfCBFcnJvciBfIC0+IHRydWVcblxuKCoqIHsyIFdyYXBwZXJzfSAqKVxuXG5sZXQgZ3VhcmQgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCBndWFyZF9zdHIgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IG9mX2V4biBlXG5sZXQgZ3VhcmRfc3RyX3RyYWNlIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBvZl9leG5fdHJhY2UgZVxubGV0IHdyYXAxIGYgeCA9IHRyeSByZXR1cm4gKGYgeCkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCB3cmFwMiBmIHggeSA9IHRyeSByZXR1cm4gKGYgeCB5KSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IHdyYXAzIGYgeCB5IHogPSB0cnkgcmV0dXJuIChmIHggeSB6KSB3aXRoIGUgLT4gRXJyb3IgZVxuXG4oKiogezIgQXBwbGljYXRpdmV9ICopXG5cbmxldCBwdXJlID0gcmV0dXJuXG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYgd2l0aFxuICB8IEVycm9yIHMgLT4gZmFpbCBzXG4gIHwgT2sgZiAtPiBtYXAgZiB4XG5cbmxldCBqb2luIHQgPVxuICBtYXRjaCB0IHdpdGhcbiAgfCBPayAoT2sgbykgLT4gT2sgb1xuICB8IE9rIChFcnJvciBlKSAtPiBFcnJvciBlXG4gIHwgRXJyb3IgXyBhcyBlIC0+IGVcblxubGV0IGJvdGggeCB5ID1cbiAgbWF0Y2ggeCwgeSB3aXRoXG4gIHwgT2sgbywgT2sgbycgLT4gT2sgKG8sIG8nKVxuICB8IE9rIF8sIEVycm9yIGUgLT4gRXJyb3IgZVxuICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuXG4oKiogezIgQ29sbGVjdGlvbnN9ICopXG5cbmxldCBtYXBfbCBmIGwgPVxuICBsZXQgcmVjIG1hcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBPayAoTGlzdC5yZXYgYWNjKVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgICAgfCBPayB5IC0+IG1hcCAoeSA6OiBhY2MpIGwnKVxuICBpblxuICBtYXAgW10gbFxuXG5sZXQgZmxhdHRlbl9sIGwgPVxuICBsZXQgcmVjIGxvb3AgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gT2sgKExpc3QucmV2IGFjYylcbiAgICB8IE9rIHggOjogbCcgLT4gbG9vcCAoeCA6OiBhY2MpIGwnXG4gICAgfCBFcnJvciBlIDo6IF8gLT4gRXJyb3IgZVxuICBpblxuICBsb29wIFtdIGxcblxuZXhjZXB0aW9uIExvY2FsRXhpdFxuXG5sZXQgZm9sZF9pdGVyIGYgYWNjIHNlcSA9XG4gIGxldCBlcnIgPSByZWYgTm9uZSBpblxuICB0cnlcbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIHNlcSAoZnVuIHggLT5cbiAgICAgICAgbWF0Y2ggZiAhYWNjIHggd2l0aFxuICAgICAgICB8IEVycm9yIHMgLT5cbiAgICAgICAgICBlcnIgOj0gU29tZSBzO1xuICAgICAgICAgIHJhaXNlIExvY2FsRXhpdFxuICAgICAgICB8IE9rIHkgLT4gYWNjIDo9IHkpO1xuICAgIE9rICFhY2NcbiAgd2l0aCBMb2NhbEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBzIC0+IEVycm9yIHMpXG5cbmxldCBmb2xkX2wgZiBhY2MgbCA9IGZvbGRfaXRlciBmIGFjYyAoZnVuIGsgLT4gTGlzdC5pdGVyIGsgbClcblxuKCoqIHsyIE1pc2N9ICopXG5cbmxldCBjaG9vc2UgbCA9XG4gIGxldCByZWMgZmluZF8gPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCAoT2sgXyBhcyByZXMpIDo6IF8gLT4gcmVzXG4gICAgfCBFcnJvciBfIDo6IGwnIC0+IGZpbmRfIGwnXG4gIGluXG4gIHRyeSBmaW5kXyBsXG4gIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgbGV0IGwnID1cbiAgICAgIExpc3QubWFwXG4gICAgICAgIChmdW5jdGlvblxuICAgICAgICAgIHwgRXJyb3IgcyAtPiBzXG4gICAgICAgICAgfCBPayBfIC0+IGFzc2VydCBmYWxzZSlcbiAgICAgICAgbFxuICAgIGluXG4gICAgRXJyb3IgbCdcblxubGV0IHJldHJ5IG4gZiA9XG4gIGxldCByZWMgcmV0cnkgbiBhY2MgPVxuICAgIG1hdGNoIG4gd2l0aFxuICAgIHwgMCAtPiBmYWlsIChMaXN0LnJldiBhY2MpXG4gICAgfCBfIC0+XG4gICAgICAobWF0Y2ggZiAoKSB3aXRoXG4gICAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSlcbiAgaW5cbiAgcmV0cnkgbiBbXVxuXG4oKiogezIgSW5maXh9ICopXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCA+fD0gKSBlIGYgPSBtYXAgZiBlXG4gIGxldCAoID4+PSApIGUgZiA9IGZsYXRfbWFwIGYgZVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG5cbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIHgxIHgyID1cbiAgICBtYXRjaCB4MSwgeDIgd2l0aFxuICAgIHwgT2sgeCwgT2sgeSAtPiBPayAoeCwgeSlcbiAgICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuICAgIHwgXywgRXJyb3IgZSAtPiBFcnJvciBlXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbigqKiB7MiBNb25hZGljIE9wZXJhdGlvbnN9ICopXG5cbm1vZHVsZSB0eXBlIE1PTkFEID0gc2lnXG4gIHR5cGUgJ2EgdFxuXG4gIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG4gIHZhbCAoID4+PSApIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuZW5kXG5cbm1vZHVsZSBUcmF2ZXJzZSAoTSA6IE1PTkFEKSA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSA9IE0uKCA+Pj0gKVxuXG4gIGxldCBtYXBfbSBmIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgcyAtPiBNLnJldHVybiAoRXJyb3IgcylcbiAgICB8IE9rIHggLT4gZiB4ID4+PSBmdW4geSAtPiBNLnJldHVybiAoT2sgeSlcblxuICBsZXQgc2VxdWVuY2VfbSBtID0gbWFwX20gKGZ1biB4IC0+IHgpIG1cblxuICBsZXQgZm9sZF9tIGYgYWNjIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgXyAtPiBNLnJldHVybiBhY2NcbiAgICB8IE9rIHggLT4gZiBhY2MgeCA+Pj0gZnVuIHkgLT4gTS5yZXR1cm4geVxuXG4gIGxldCByZXRyeV9tIG4gZiA9XG4gICAgbGV0IHJlYyByZXRyeSBuIGFjYyA9XG4gICAgICBtYXRjaCBuIHdpdGhcbiAgICAgIHwgMCAtPiBNLnJldHVybiAoZmFpbCAoTGlzdC5yZXYgYWNjKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBmICgpID4+PSAoIGZ1bmN0aW9uXG4gICAgICAgIHwgT2sgeCAtPiBNLnJldHVybiAoT2sgeClcbiAgICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSApXG4gICAgaW5cbiAgICByZXRyeSBuIFtdXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG5sZXQgdG9fb3B0ID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IFNvbWUgeFxuICB8IEVycm9yIF8gLT4gTm9uZVxuXG5sZXQgb2Zfb3B0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIFwib2Zfb3B0XCJcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgdG9fc2VxIGUgKCkgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG4gIHwgRXJyb3IgXyAtPiBTZXEuTmlsXG5cbmxldCB0b19pdGVyIGUgayA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gayB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG50eXBlICgnYSwgJ2IpIGVycm9yID0gWyBgT2sgb2YgJ2EgfCBgRXJyb3Igb2YgJ2IgXVxuXG5sZXQgb2ZfZXJyID0gZnVuY3Rpb25cbiAgfCBgT2sgeCAtPiBPayB4XG4gIHwgYEVycm9yIHkgLT4gRXJyb3IgeVxuXG5sZXQgdG9fZXJyID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IGBPayB4XG4gIHwgRXJyb3IgeSAtPiBgRXJyb3IgeVxuXG4oKiogezIgSU99ICopXG5cbmxldCBwcCBwcF94IGZtdCBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW29rKEAsJWEpQF1cIiBwcF94IHhcbiAgfCBFcnJvciBzIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbZXJyb3IoQCwlcylAXVwiIHNcblxubGV0IHBwJyBwcF94IHBwX2UgZm10IGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbb2soQCwlYSlAXVwiIHBwX3ggeFxuICB8IEVycm9yIHMgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtlcnJvcihALCVhKUBdXCIgcHBfZSBzXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgV3JhcHBlciBhcm91bmQgU2V0fSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID0gU2V0Lk9yZGVyZWRUeXBlXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBTZXQuU1xuXG4gIHZhbCBtaW5fZWx0X29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshbWluX2VsdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIG1heF9lbHRfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFtYXhfZWx0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgY2hvb3NlX29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshY2hvb3NlfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9vcHQgOiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgKCoqIEZpbmQgbWluaW11bSBlbGVtZW50IHNhdGlzZnlpbmcgcHJlZGljYXRlLlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0X29wdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kX2ZpcnN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdF9tYXAgOiAoZWx0IC0+ICdhIG9wdGlvbikgLT4gdCAtPiAnYSBvcHRpb25cbiAgKCoqIFtmaW5kX2ZpcnN0X21hcCBmIHNdIGZpbmQgdGhlIG1pbmltdW0gZWxlbWVudCBbeF0gb2YgW3NdIHN1Y2ggdGhhdCBbZiB4ID0gU29tZSB5XVxuICAgICAgYW5kIHJldHVybiBbU29tZSB5XS4gT3RoZXJ3aXNlIHJldHVybnMgW05vbmVdLlxuICAgICAgQHNpbmNlIDMuMTIgKilcblxuICB2YWwgZmluZF9sYXN0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAoKiogRmluZCBtYXhpbXVtIGVsZW1lbnQgc2F0aXNmeWluZyBwcmVkaWNhdGUuXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfbGFzdF9vcHQgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZF9sYXN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9sYXN0X21hcCA6IChlbHQgLT4gJ2Egb3B0aW9uKSAtPiB0IC0+ICdhIG9wdGlvblxuICAoKiogW2ZpbmRfbGFzdF9tYXAgZiBzXSBmaW5kIHRoZSBtYXhpbXVtIGVsZW1lbnQgW3hdIG9mIFtzXSBzdWNoIHRoYXQgW2YgeCA9IFNvbWUgeV1cbiAgICAgIGFuZCByZXR1cm4gW1NvbWUgeV0uIE90aGVyd2lzZSByZXR1cm5zIFtOb25lXS5cbiAgICAgIEBzaW5jZSAzLjEyICopXG5cbiAgdmFsIG9mX2l0ZXIgOiBlbHQgaXRlciAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbaXRlcl0gb2YgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX3NlcSA6IGVsdCBTZXEudCAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbc2VxXSBvZiBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgYWRkX2l0ZXIgOiB0IC0+IGVsdCBpdGVyIC0+IHRcbiAgKCoqIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgKCoqIEBzaW5jZSAzLjAgKilcblxuICB2YWwgdG9faXRlciA6IHQgLT4gZWx0IGl0ZXJcbiAgKCoqIFt0b19pdGVyIHRdIGNvbnZlcnRzIHRoZSBzZXQgW3RdIHRvIGEgW2l0ZXJdIG9mIHRoZSBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2xpc3QgOiB0IC0+IGVsdCBsaXN0IC0+IHRcbiAgKCoqIEBzaW5jZSAwLjE0ICopXG5cbiAgdmFsIHRvX2xpc3QgOiB0IC0+IGVsdCBsaXN0XG4gICgqKiBbdG9fbGlzdCB0XSBjb252ZXJ0cyB0aGUgc2V0IFt0XSB0byBhIGxpc3Qgb2YgdGhlIGVsZW1lbnRzLiAqKVxuXG4gIHZhbCB0b19zdHJpbmcgOlxuICAgID9zdGFydDpzdHJpbmcgLT5cbiAgICA/c3RvcDpzdHJpbmcgLT5cbiAgICA/c2VwOnN0cmluZyAtPlxuICAgIChlbHQgLT4gc3RyaW5nKSAtPlxuICAgIHQgLT5cbiAgICBzdHJpbmdcbiAgKCoqICBQcmludCB0aGUgc2V0IGluIGEgc3RyaW5nXG4gICAgICAgQHNpbmNlIDIuNyAqKVxuXG4gIHZhbCBwcCA6XG4gICAgP3BwX3N0YXJ0OnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zdG9wOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zZXA6dW5pdCBwcmludGVyIC0+XG4gICAgZWx0IHByaW50ZXIgLT5cbiAgICB0IHByaW50ZXJcbiAgKCoqIFByaW50IHRoZSBzZXQuICopXG5lbmRcblxubW9kdWxlIE1ha2UgKE8gOiBNYXAuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBTID0gU2V0Lk1ha2UgKE8pXG5cbiAgKCogYmFja3BvcnQgZnVuY3Rpb25zIGZyb20gcmVjZW50IHN0ZGxpYi5cbiAgICAgdGhleSB3aWxsIGJlIHNoYWRvd2VkIGJ5IGluY2x1c2lvbiBvZiBbU10gaWYgcHJlc2VudC4gKilcblxuICBbQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG4gIGxldCBmaW5kX29wdCB4IHMgPSB0cnkgU29tZSAoUy5maW5kIHggcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgY2hvb3NlX29wdCBzID0gdHJ5IFNvbWUgKFMuY2hvb3NlIHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1pbl9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5taW5fZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1heF9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5tYXhfZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBleGNlcHRpb24gRmluZF9iaW5kaW5nX2V4aXRcblxuICBsZXQgZmluZF9maXJzdF9vcHQgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICB0cnlcbiAgICAgIFMuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBpZiBmIHggdGhlbiAoXG4gICAgICAgICAgICByZXMgOj0gU29tZSB4O1xuICAgICAgICAgICAgcmFpc2UgRmluZF9iaW5kaW5nX2V4aXRcbiAgICAgICAgICApKVxuICAgICAgICBtO1xuICAgICAgTm9uZVxuICAgIHdpdGggRmluZF9iaW5kaW5nX2V4aXQgLT4gIXJlc1xuXG4gIGxldCBmaW5kX2ZpcnN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9maXJzdF9vcHQgZiBtIHdpdGhcbiAgICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCBTb21lIHggLT4geFxuXG4gIGxldCBmaW5kX2ZpcnN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIHRyeVxuICAgICAgUy5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHkgLT5cbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHk7XG4gICAgICAgICAgICByYWlzZSBGaW5kX2JpbmRpbmdfZXhpdClcbiAgICAgICAgbTtcbiAgICAgIE5vbmVcbiAgICB3aXRoIEZpbmRfYmluZGluZ19leGl0IC0+ICFyZXNcblxuICAoKiBsaW5lYXIgdGltZSwgbXVzdCB0cmF2ZXJzZSB0aGUgd2hvbGUgc2V04oCmICopXG4gIGxldCBmaW5kX2xhc3Rfb3B0IGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgUy5pdGVyIChmdW4geCAtPiBpZiBmIHggdGhlbiByZXMgOj0gU29tZSB4KSBtO1xuICAgICFyZXNcblxuICBsZXQgZmluZF9sYXN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9sYXN0X29wdCBmIG0gd2l0aFxuICAgIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IFNvbWUgeCAtPiB4XG5cbiAgW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxuICBpbmNsdWRlIFNcblxuICAoKiBVc2UgZmluZF9sYXN0IHdoaWNoIGlzIGxpbmVhciB0aW1lIG9uIE9DYW1sIDwgNC4wNSAqKVxuICBsZXQgZmluZF9sYXN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIGxldCBfID1cbiAgICAgIGZpbmRfbGFzdF9vcHRcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICB8IFNvbWUgeSAtPlxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeTtcbiAgICAgICAgICAgIHRydWUpXG4gICAgICAgIG1cbiAgICBpblxuICAgICFyZXNcblxuICBsZXQgYWRkX3NlcSBzZXEgc2V0ID1cbiAgICBsZXQgc2V0ID0gcmVmIHNldCBpblxuICAgIFNlcS5pdGVyIChmdW4geCAtPiBzZXQgOj0gYWRkIHggIXNldCkgc2VxO1xuICAgICFzZXRcblxuICBsZXQgb2Zfc2VxIHMgPSBhZGRfc2VxIHMgZW1wdHlcblxuICBsZXQgYWRkX2l0ZXIgc2V0IGkgPVxuICAgIGxldCBzZXQgPSByZWYgc2V0IGluXG4gICAgaSAoZnVuIHggLT4gc2V0IDo9IGFkZCB4ICFzZXQpO1xuICAgICFzZXRcblxuICBsZXQgb2ZfaXRlciBzID0gYWRkX2l0ZXIgZW1wdHkgc1xuICBsZXQgdG9faXRlciBzIHlpZWxkID0gaXRlciB5aWVsZCBzXG4gIGxldCBhZGRfbGlzdCA9IExpc3QuZm9sZF9sZWZ0IChmdW4gc2V0IHggLT4gYWRkIHggc2V0KVxuICBsZXQgdG9fbGlzdCA9IGVsZW1lbnRzXG5cbiAgbGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIixcIikgZWx0X3RvX3N0cmluZyBoID1cbiAgICB0b19saXN0IGggfD4gQ0NMaXN0LnRvX3N0cmluZyB+c3RhcnQgfnN0b3AgfnNlcCBlbHRfdG9fc3RyaW5nXG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX3ggZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4geCAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF94IGZtdCB4KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQmFzaWMgU3RyaW5nIFV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxuXG4oKiBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgKilcblxuaW5jbHVkZSBTdHJpbmdcblxubGV0IGNvbXBhcmVfaW50IChhIDogaW50KSBiID0gU3RkbGliLmNvbXBhcmUgYSBiXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgaGFzaCBzID0gSGFzaHRibC5oYXNoIHNcbmxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoXG5sZXQgaXNfZW1wdHkgcyA9IGVxdWFsIHMgXCJcIlxuXG5sZXQgcmV2IHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGluaXQgbiAoZnVuIGkgLT4gcy5bbiAtIGkgLSAxXSlcblxubGV0IHJlYyBfdG9fbGlzdCBzIGFjYyBpIGxlbiA9XG4gIGlmIGxlbiA9IDAgdGhlblxuICAgIExpc3QucmV2IGFjY1xuICBlbHNlXG4gICAgX3RvX2xpc3QgcyAocy5baV0gOjogYWNjKSAoaSArIDEpIChsZW4gLSAxKVxuXG5sZXQgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW4gPVxuICBsZXQgcmVjIGNoZWNrIGsgPVxuICAgIGlmIGsgPSBsZW4gdGhlblxuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIENDQ2hhci5lcXVhbCBzdWIuW2kgKyBrXSBzLltqICsga10gJiYgY2hlY2sgKGsgKyAxKVxuICBpblxuICBqICsgbGVuIDw9IFN0cmluZy5sZW5ndGggcyAmJiBjaGVjayAwXG5cbmxldCBpc19zdWIgfnN1YiBpIHMgaiB+bGVuID1cbiAgaWYgaSArIGxlbiA+IFN0cmluZy5sZW5ndGggc3ViIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pc19zdWJcIjtcbiAgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW5cblxudHlwZSBfIGRpcmVjdGlvbiA9XG4gIHwgRGlyZWN0IDogWyBgRGlyZWN0IF0gZGlyZWN0aW9uXG4gIHwgUmV2ZXJzZSA6IFsgYFJldmVyc2UgXSBkaXJlY3Rpb25cblxuKCogd2UgZm9sbG93IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tudXRo4oCTTW9ycmlz4oCTUHJhdHRfYWxnb3JpdGhtICopXG5tb2R1bGUgRmluZCA9IHN0cnVjdFxuICB0eXBlICdhIGttcF9wYXR0ZXJuID0geyBmYWlsdXJlOiBpbnQgYXJyYXk7IHN0cjogc3RyaW5nIH1cbiAgKCogaW52YXJpYW50OiBbbGVuZ3RoIGZhaWx1cmUgPSBsZW5ndGggc3RyXS5cbiAgICAgV2UgdXNlIGEgcGhhbnRvbSB0eXBlIHRvIGF2b2lkIG1peGluZyB0aGUgZGlyZWN0aW9ucy4gKilcblxuICBsZXQga21wX3BhdHRlcm5fbGVuZ3RoIHAgPSBTdHJpbmcubGVuZ3RoIHAuc3RyXG5cbiAgKCogYWNjZXNzIHRoZSBbaV0tdGggZWxlbWVudCBvZiBbc10gYWNjb3JkaW5nIHRvIGRpcmVjdGlvbiBbZGlyXSAqKVxuICBsZXQgZ2V0XyA6IHR5cGUgYS4gZGlyOmEgZGlyZWN0aW9uIC0+IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9XG4gICBmdW4gfmRpciAtPlxuICAgIG1hdGNoIGRpciB3aXRoXG4gICAgfCBEaXJlY3QgLT4gU3RyaW5nLmdldFxuICAgIHwgUmV2ZXJzZSAtPiBmdW4gcyBpIC0+IHMuW1N0cmluZy5sZW5ndGggcyAtIGkgLSAxXVxuXG4gIGxldCBrbXBfY29tcGlsZV8gOiB0eXBlIGEuIGRpcjphIGRpcmVjdGlvbiAtPiBzdHJpbmcgLT4gYSBrbXBfcGF0dGVybiA9XG4gICBmdW4gfmRpciBzdHIgLT5cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHN0ciBpblxuICAgIGxldCBnZXQgPSBnZXRfIH5kaXIgaW5cbiAgICAoKiBob3cgdG8gcmVhZCBlbGVtZW50cyBvZiB0aGUgc3RyaW5nICopXG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IDAgLT4geyBmYWlsdXJlID0gW3x8XTsgc3RyIH1cbiAgICB8IDEgLT4geyBmYWlsdXJlID0gW3wgLTEgfF07IHN0ciB9XG4gICAgfCBfIC0+XG4gICAgICAoKiBhdCBsZWFzdCAyIGVsZW1lbnRzLCB0aGUgYWxnb3JpdGhtIGNhbiB3b3JrICopXG4gICAgICBsZXQgZmFpbHVyZSA9IEFycmF5Lm1ha2UgbGVuIDAgaW5cbiAgICAgIGZhaWx1cmUuKDApIDwtIC0xO1xuICAgICAgKCogaTogY3VycmVudCBpbmRleCBpbiBzdHIgKilcbiAgICAgIGxldCBpID0gcmVmIDIgaW5cbiAgICAgICgqIGo6IGluZGV4IG9mIGNhbmRpZGF0ZSBzdWJzdHJpbmcgKilcbiAgICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgICAgIG1hdGNoICFqIHdpdGhcbiAgICAgICAgfCBfIHdoZW4gQ0NDaGFyLmVxdWFsIChnZXQgc3RyICghaSAtIDEpKSAoZ2V0IHN0ciAhaikgLT5cbiAgICAgICAgICAoKiBzdWJzdHJpbmcgc3RhcnRpbmcgYXQgIWogY29udGludWVzIG1hdGNoaW5nIGN1cnJlbnQgY2hhciAqKVxuICAgICAgICAgIGluY3IgajtcbiAgICAgICAgICBmYWlsdXJlLighaSkgPC0gIWo7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIHwgMCAtPlxuICAgICAgICAgICgqIGJhY2sgdG8gdGhlIGJlZ2lubmluZyAqKVxuICAgICAgICAgIGZhaWx1cmUuKCFpKSA8LSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAoKiBmYWxsYmFjayBmb3IgdGhlIHByZWZpeCBzdHJpbmcgKilcbiAgICAgICAgICBhc3NlcnQgKCFqID4gMCk7XG4gICAgICAgICAgaiA6PSBmYWlsdXJlLighailcbiAgICAgIGRvbmU7XG4gICAgICAoKiBGb3JtYXQucHJpbnRmIFwie0BbZmFpbHVyZTolYSwgc3RyOiVzQF19QC5cIiBDQ0Zvcm1hdC4oYXJyYXkgaW50KSBmYWlsdXJlIHN0cjsgKilcbiAgICAgIHsgZmFpbHVyZTsgc3RyIH1cblxuICBsZXQga21wX2NvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOkRpcmVjdCBzXG4gIGxldCBrbXBfcmNvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOlJldmVyc2Ugc1xuXG4gICgqIHByb3BlciBzZWFyY2ggZnVuY3Rpb24uXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfZmluZCB+cGF0dGVybiBzIGlkeCA9XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gICAgbGV0IGkgPSByZWYgaWR4IGluXG4gICAgbGV0IGogPSByZWYgMCBpblxuICAgIGxldCBwYXRfbGVuID0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm4gaW5cbiAgICB3aGlsZSAhaiA8IHBhdF9sZW4gJiYgIWkgKyAhaiA8IGxlbiBkb1xuICAgICAgbGV0IGMgPSBTdHJpbmcuZ2V0IHMgKCFpICsgIWopIGluXG4gICAgICBsZXQgZXhwZWN0ZWQgPSBTdHJpbmcuZ2V0IHBhdHRlcm4uc3RyICFqIGluXG4gICAgICBpZiBDQ0NoYXIuZXF1YWwgYyBleHBlY3RlZCB0aGVuXG4gICAgICAgICgqIGNoYXIgbWF0Y2hlcyAqKVxuICAgICAgICBpbmNyIGpcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgZmFpbF9vZmZzZXQgPSBwYXR0ZXJuLmZhaWx1cmUuKCFqKSBpblxuICAgICAgICBpZiBmYWlsX29mZnNldCA+PSAwIHRoZW4gKFxuICAgICAgICAgIGFzc2VydCAoZmFpbF9vZmZzZXQgPCAhaik7XG4gICAgICAgICAgKCogZm9sbG93IHRoZSBmYWlsdXJlIGxpbmsgKilcbiAgICAgICAgICBpIDo9ICFpICsgIWogLSBmYWlsX29mZnNldDtcbiAgICAgICAgICBqIDo9IGZhaWxfb2Zmc2V0XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogYmVnaW5uaW5nIG9mIHBhdHRlcm4gKilcbiAgICAgICAgICBqIDo9IDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIClcbiAgICAgIClcbiAgICBkb25lO1xuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICAhaVxuICAgIGVsc2VcbiAgICAgIC0xXG5cbiAgKCogcHJvcGVyIHNlYXJjaCBmdW5jdGlvbiwgZnJvbSB0aGUgcmlnaHQuXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfcmZpbmQgfnBhdHRlcm4gcyBpZHggPVxuICAgIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICAgIGxldCBpID0gcmVmIChsZW4gLSBpZHggLSAxKSBpblxuICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICBsZXQgcGF0X2xlbiA9IGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuIGluXG4gICAgd2hpbGUgIWogPCBwYXRfbGVuICYmICFpICsgIWogPCBsZW4gZG9cbiAgICAgIGxldCBjID0gU3RyaW5nLmdldCBzIChsZW4gLSAhaSAtICFqIC0gMSkgaW5cbiAgICAgIGxldCBleHBlY3RlZCA9XG4gICAgICAgIFN0cmluZy5nZXQgcGF0dGVybi5zdHIgKFN0cmluZy5sZW5ndGggcGF0dGVybi5zdHIgLSAhaiAtIDEpXG4gICAgICBpblxuICAgICAgaWYgQ0NDaGFyLmVxdWFsIGMgZXhwZWN0ZWQgdGhlblxuICAgICAgICAoKiBjaGFyIG1hdGNoZXMgKilcbiAgICAgICAgaW5jciBqXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IGZhaWxfb2Zmc2V0ID0gcGF0dGVybi5mYWlsdXJlLighaikgaW5cbiAgICAgICAgaWYgZmFpbF9vZmZzZXQgPj0gMCB0aGVuIChcbiAgICAgICAgICBhc3NlcnQgKGZhaWxfb2Zmc2V0IDwgIWopO1xuICAgICAgICAgICgqIGZvbGxvdyB0aGUgZmFpbHVyZSBsaW5rICopXG4gICAgICAgICAgaSA6PSAhaSArICFqIC0gZmFpbF9vZmZzZXQ7XG4gICAgICAgICAgaiA6PSBmYWlsX29mZnNldFxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBwYXR0ZXJuICopXG4gICAgICAgICAgaiA6PSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICApXG4gICAgICApXG4gICAgZG9uZTtcbiAgICAoKiBhZGp1c3QgcmVzdWx0OiBmaXJzdCwgW3JlcyA9IHN0cmluZy5sZW5ndGggcyAtIHJlcyAtMV0gdG8gY29udmVydFxuICAgICAgIGJhY2sgdG8gcmVhbCBpbmRpY2VzOyB0aGVuLCB3aGF0IHdlIGdvdCBpcyBhY3R1YWxseSB0aGUgcG9zaXRpb25cbiAgICAgICBvZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBzbyB3ZSBzdWJ0cmFjdCB0aGUgW2xlbmd0aCBvZiB0aGUgcGF0dGVybiAtMV1cbiAgICAgICB0byBvYnRhaW4gdGhlIHJlYWwgcmVzdWx0LiAqKVxuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICBsZW4gLSAhaSAtIGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuXG4gICAgZWxzZVxuICAgICAgLTFcblxuICB0eXBlICdhIHBhdHRlcm4gPSBQX2NoYXIgb2YgY2hhciB8IFBfS01QIG9mICdhIGttcF9wYXR0ZXJuXG5cbiAgbGV0IHBhdHRlcm5fbGVuZ3RoID0gZnVuY3Rpb25cbiAgICB8IFBfY2hhciBfIC0+IDFcbiAgICB8IFBfS01QIHAgLT4ga21wX3BhdHRlcm5fbGVuZ3RoIHBcblxuICBsZXQgY29tcGlsZSBzdWIgOiBbIGBEaXJlY3QgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfY29tcGlsZSBzdWIpXG5cbiAgbGV0IHJjb21waWxlIHN1YiA6IFsgYFJldmVyc2UgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfcmNvbXBpbGUgc3ViKVxuXG4gIGxldCBmaW5kID8oc3RhcnQgPSAwKSB+KHBhdHRlcm4gOiBbIGBEaXJlY3QgXSBwYXR0ZXJuKSBzID1cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyBzdGFydCBjIHdpdGggTm90X2ZvdW5kIC0+IC0xKVxuICAgIHwgUF9LTVAgcGF0dGVybiAtPiBrbXBfZmluZCB+cGF0dGVybiBzIHN0YXJ0XG5cbiAgbGV0IHJmaW5kID9zdGFydCB+KHBhdHRlcm4gOiBbIGBSZXZlcnNlIF0gcGF0dGVybikgcyA9XG4gICAgbGV0IHN0YXJ0ID1cbiAgICAgIG1hdGNoIHN0YXJ0IHdpdGhcbiAgICAgIHwgU29tZSBuIC0+IG5cbiAgICAgIHwgTm9uZSAtPiBTdHJpbmcubGVuZ3RoIHMgLSAxXG4gICAgaW5cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLnJpbmRleF9mcm9tIHMgc3RhcnQgYyB3aXRoIE5vdF9mb3VuZCAtPiAtMSlcbiAgICB8IFBfS01QIHBhdHRlcm4gLT4ga21wX3JmaW5kIH5wYXR0ZXJuIHMgc3RhcnRcbmVuZFxuXG5sZXQgZmluZCA/KHN0YXJ0ID0gMCkgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLmZpbmQgfnN0YXJ0IH5wYXR0ZXJuIHNcblxubGV0IGZpbmRfYWxsID8oc3RhcnQgPSAwKSB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+XG4gICAgbGV0IGkgPSByZWYgc3RhcnQgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGxldCByZXMgPSBGaW5kLmZpbmQgfnN0YXJ0OiFpIH5wYXR0ZXJuIHMgaW5cbiAgICAgIGlmIHJlcyA9IH4tMSB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBpIDo9IHJlcyArIDE7XG4gICAgICAgICgqIHBvc3NpYmxlIG92ZXJsYXAgKilcbiAgICAgICAgU29tZSByZXNcbiAgICAgIClcblxubGV0IGZpbmRfYWxsX2wgP3N0YXJ0IH5zdWIgcyA9XG4gIGxldCByZWMgYXV4IGFjYyBnID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBTb21lIGkgLT4gYXV4IChpIDo6IGFjYykgZ1xuICBpblxuICBhdXggW10gKGZpbmRfYWxsID9zdGFydCB+c3ViIHMpXG5cbmxldCBtZW0gP3N0YXJ0IH5zdWIgcyA9IGZpbmQgP3N0YXJ0IH5zdWIgcyA+PSAwXG5cbmxldCByZmluZCB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLnJjb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLnJmaW5kIH5zdGFydDooU3RyaW5nLmxlbmd0aCBzIC0gMSkgfnBhdHRlcm4gc1xuXG4oKiBSZXBsYWNlIHN1YnN0cmluZyBbcy5bcG9zXSDigKYgcy5bcG9zK2xlbi0xXV0gYnkgW2J5XSBpbiBbc10gKilcbmxldCByZXBsYWNlX2F0XyB+cG9zIH5sZW4gfmJ5IHMgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKGxlbmd0aCBzICsgbGVuZ3RoIGJ5IC0gbGVuKSBpblxuICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgMCBwb3M7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGIgYnk7XG4gIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAocG9zICsgbGVuKSAoU3RyaW5nLmxlbmd0aCBzIC0gcG9zIC0gbGVuKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJlcGxhY2UgPyh3aGljaCA9IGBBbGwpIH5zdWIgfmJ5IHMgPVxuICBpZiBpc19lbXB0eSBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnJlcGxhY2VcIjtcbiAgbWF0Y2ggd2hpY2ggd2l0aFxuICB8IGBMZWZ0IC0+XG4gICAgbGV0IGkgPSBmaW5kIH5zdGFydDowIH5zdWIgcyBpblxuICAgIGlmIGkgPj0gMCB0aGVuXG4gICAgICByZXBsYWNlX2F0XyB+cG9zOmkgfmxlbjooU3RyaW5nLmxlbmd0aCBzdWIpIH5ieSBzXG4gICAgZWxzZVxuICAgICAgc1xuICB8IGBSaWdodCAtPlxuICAgIGxldCBpID0gcmZpbmQgfnN1YiBzIGluXG4gICAgaWYgaSA+PSAwIHRoZW5cbiAgICAgIHJlcGxhY2VfYXRfIH5wb3M6aSB+bGVuOihTdHJpbmcubGVuZ3RoIHN1YikgfmJ5IHNcbiAgICBlbHNlXG4gICAgICBzXG4gIHwgYEFsbCAtPlxuICAgICgqIGNvbXBpbGUgc2VhcmNoIHBhdHRlcm4gb25seSBvbmNlICopXG4gICAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgbGV0IHN0YXJ0ID0gcmVmIDAgaW5cbiAgICB3aGlsZSAhc3RhcnQgPCBTdHJpbmcubGVuZ3RoIHMgZG9cbiAgICAgIGxldCBpID0gRmluZC5maW5kIH5zdGFydDohc3RhcnQgfnBhdHRlcm4gcyBpblxuICAgICAgaWYgaSA+PSAwIHRoZW4gKFxuICAgICAgICAoKiBiZXR3ZWVuIGxhc3QgYW5kIGN1ciBvY2N1cnJlbmNlcyAqKVxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgIXN0YXJ0IChpIC0gIXN0YXJ0KTtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiBieTtcbiAgICAgICAgc3RhcnQgOj0gaSArIFN0cmluZy5sZW5ndGggc3ViXG4gICAgICApIGVsc2UgKFxuICAgICAgICAoKiBhZGQgcmVtYWluZGVyICopXG4gICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAhc3RhcnQgKFN0cmluZy5sZW5ndGggcyAtICFzdGFydCk7XG4gICAgICAgIHN0YXJ0IDo9IFN0cmluZy5sZW5ndGggcyAoKiBzdG9wICopXG4gICAgICApXG4gICAgZG9uZTtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuXG5tb2R1bGUgU3BsaXQgPSBzdHJ1Y3RcbiAgdHlwZSBkcm9wX2lmX2VtcHR5ID0geyBmaXJzdDogYm9vbDsgbGFzdDogYm9vbCB9XG5cbiAgbGV0IG5vX2Ryb3AgPSB7IGZpcnN0ID0gZmFsc2U7IGxhc3QgPSBmYWxzZSB9XG4gIGxldCBkZWZhdWx0X2Ryb3AgPSBub19kcm9wXG5cbiAgdHlwZSBzcGxpdF9zdGF0ZSA9IFNwbGl0U3RvcCB8IFNwbGl0QXQgb2YgaW50ICgqIHByZXZpb3VzICopXG5cbiAgbGV0IHJlYyBfc3BsaXQgfmJ5IHMgc3RhdGUgPVxuICAgIG1hdGNoIHN0YXRlIHdpdGhcbiAgICB8IFNwbGl0U3RvcCAtPiBOb25lXG4gICAgfCBTcGxpdEF0IHByZXYgLT4gX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2XG5cbiAgYW5kIF9zcGxpdF9zZWFyY2ggfmJ5IHMgcHJldiA9XG4gICAgbGV0IGogPSBGaW5kLmZpbmQgfnN0YXJ0OnByZXYgfnBhdHRlcm46YnkgcyBpblxuICAgIGlmIGogPCAwIHRoZW5cbiAgICAgIFNvbWUgKFNwbGl0U3RvcCwgcHJldiwgU3RyaW5nLmxlbmd0aCBzIC0gcHJldilcbiAgICBlbHNlXG4gICAgICBTb21lIChTcGxpdEF0IChqICsgRmluZC5wYXR0ZXJuX2xlbmd0aCBieSksIHByZXYsIGogLSBwcmV2KVxuXG4gIGxldCBfdHVwbGUzIHggeSB6ID0geCwgeSwgelxuXG4gIGxldCBfbWtnZW4gfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IHN0YXRlID0gcmVmIChTcGxpdEF0IDApIGluXG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBuZXh0ICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyAhc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT5cbiAgICAgICAgc3RhdGUgOj0gc3RhdGUnO1xuICAgICAgICBuZXh0ICgpXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBOb25lXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIFNvbWUgKGsgcyBpIGxlbilcbiAgICBpblxuICAgIG5leHRcblxuICBsZXQgZ2VuID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgZ2VuX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rZ2VuIH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rbGlzdCB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIGJ1aWxkIGFjYyBzdGF0ZSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBidWlsZCBhY2Mgc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBMaXN0LnJldiBhY2NcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IGJ1aWxkIChrIHMgaSBsZW4gOjogYWNjKSBzdGF0ZSdcbiAgICBpblxuICAgIGJ1aWxkIFtdIChTcGxpdEF0IDApXG5cbiAgbGV0IGxpc3RfID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGxpc3RfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rc2VxIH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgbWFrZSBzdGF0ZSAoKSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gbWFrZSBzdGF0ZScgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IFNlcS5Db25zIChrIHMgaSBsZW4sIG1ha2Ugc3RhdGUnKVxuICAgIGluXG4gICAgbWFrZSAoU3BsaXRBdCAwKVxuXG4gIGxldCBzZXEgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBzZXFfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtzZXEgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtfaXRlciB+ZHJvcCB+YnkgcyBmIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYXV4IHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gYXV4IHN0YXRlJ1xuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIGsgKGYgcyBpIGxlbik7XG4gICAgICAgIGF1eCBzdGF0ZSdcbiAgICBpblxuICAgIGF1eCAoU3BsaXRBdCAwKVxuXG4gIGxldCBpdGVyID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBpdGVyX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rX2l0ZXIgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBsZWZ0X2V4biB+YnkgcyA9XG4gICAgbGV0IGkgPSBmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IGxlZnQgfmJ5IHMgPSB0cnkgU29tZSAobGVmdF9leG4gfmJ5IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBsZXQgcmlnaHRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IHJmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IHJpZ2h0IH5ieSBzID0gdHJ5IFNvbWUgKHJpZ2h0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuZW5kXG5cbmxldCBzcGxpdCB+YnkgcyA9IFNwbGl0Lmxpc3RfY3B5IH5ieSBzXG5cbmxldCBjb21wYXJlX3ZlcnNpb25zIGEgYiA9XG4gIGxldCBvZl9pbnQgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmUgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggb2ZfaW50IHgsIG9mX2ludCB5IHdpdGhcbiAgICAgIHwgTm9uZSwgTm9uZSAtPlxuICAgICAgICBsZXQgYyA9IFN0cmluZy5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBhKSAoU3BsaXQuZ2VuX2NweSB+Ynk6XCIuXCIgYilcblxudHlwZSBuYXRfY2h1bmsgPSBOQ19jaGFyIG9mIGNoYXIgfCBOQ19pbnQgb2YgaW50XG5cbmxldCBjb21wYXJlX25hdHVyYWwgYSBiID1cbiAgKCogc3RyZWFtIG9mIGNodW5rcyAqKVxuICBsZXQgY2h1bmtzIHMgOiB1bml0IC0+IG5hdF9jaHVuayBvcHRpb24gPVxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgcmVjIG5leHQgKCkgPVxuICAgICAgaWYgIWkgPSBsZW5ndGggcyB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnKVxuICAgICAgICB8IGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgU29tZSAoTkNfY2hhciBjKVxuICAgICAgKVxuICAgIGFuZCByZWFkX2ludCBuID1cbiAgICAgIGlmICFpID0gbGVuZ3RoIHMgdGhlblxuICAgICAgICBTb21lIChOQ19pbnQgbilcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoKDEwICogbikgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcpXG4gICAgICAgIHwgXyAtPiBTb21lIChOQ19pbnQgbilcbiAgICAgIClcbiAgICBpblxuICAgIG5leHRcbiAgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggeCwgeSB3aXRoXG4gICAgICB8IE5DX2NoYXIgeCwgTkNfY2hhciB5IC0+XG4gICAgICAgIGxldCBjID0gQ2hhci5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IE5DX2ludCBfLCBOQ19jaGFyIF8gLT4gMVxuICAgICAgfCBOQ19jaGFyIF8sIE5DX2ludCBfIC0+IC0xXG4gICAgICB8IE5DX2ludCB4LCBOQ19pbnQgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChjaHVua3MgYSkgKGNodW5rcyBiKVxuXG5sZXQgZWRpdF9kaXN0YW5jZSA/KGN1dG9mZiA9IG1heF9pbnQpIHMxIHMyID1cbiAgbGV0IG4xID0gbGVuZ3RoIHMxIGluXG4gIGxldCBuMiA9IGxlbmd0aCBzMiBpblxuICBpZiBuMSA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjJcbiAgZWxzZSBpZiBuMiA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjFcbiAgZWxzZSBpZiBlcXVhbCBzMSBzMiB0aGVuXG4gICAgMFxuICBlbHNlIGlmIG4xIC0gbjIgPj0gY3V0b2ZmIHx8IG4yIC0gbjEgPj0gY3V0b2ZmIHRoZW5cbiAgICBjdXRvZmZcbiAgKCogYXQgbGVhc3QgY3V0b2ZmIGluc2VydHMgKilcbiAgZWxzZSAoXG4gICAgdHJ5XG4gICAgICAoKiBkaXN0YW5jZSB2ZWN0b3JzICh2MD1wcmV2aW91cywgdjE9Y3VycmVudCkgKilcbiAgICAgIGxldCB2MCA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgIGxldCB2MSA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgICgqIGluaXRpYWxpemUgdjA6IHYwKGkpID0gQSgwKShpKSA9IGRlbGV0ZSBpIGNoYXJzIGZyb20gdCAqKVxuICAgICAgbGV0IGxvd2VyX2JvdW5kID0gcmVmIG1heF9pbnQgaW5cbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczIgZG9cbiAgICAgICAgdjAuKGkpIDwtIGlcbiAgICAgIGRvbmU7XG4gICAgICAoKiBtYWluIGxvb3AgZm9yIHRoZSBib3R0b20gdXAgZHluYW1pYyBhbGdvcml0aG0gKilcbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczEgLSAxIGRvXG4gICAgICAgICgqIGZpcnN0IGVkaXQgZGlzdGFuY2UgaXMgdGhlIGRlbGV0aW9uIG9mIGkrMSBlbGVtZW50cyBmcm9tIHMgKilcbiAgICAgICAgdjEuKDApIDwtIGkgKyAxO1xuXG4gICAgICAgICgqIHRyeSBhZGQvZGVsZXRlL3JlcGxhY2Ugb3BlcmF0aW9ucyAqKVxuICAgICAgICBmb3IgaiA9IDAgdG8gbGVuZ3RoIHMyIC0gMSBkb1xuICAgICAgICAgIGxldCBjb3N0ID1cbiAgICAgICAgICAgIGlmIENoYXIuZXF1YWwgKFN0cmluZy5nZXQgczEgaSkgKFN0cmluZy5nZXQgczIgaikgdGhlblxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICBpblxuICAgICAgICAgIHYxLihqICsgMSkgPC0gbWluICh2MS4oaikgKyAxKSAobWluICh2MC4oaiArIDEpICsgMSkgKHYwLihqKSArIGNvc3QpKVxuICAgICAgICBkb25lO1xuXG4gICAgICAgIGlmXG4gICAgICAgICAgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxXG4gICAgICAgICAgJiYgaSA8PSAyICogY3V0b2ZmXG4gICAgICAgICAgJiYgKDIgKiBjdXRvZmYpIC0gaSA8IFN0cmluZy5sZW5ndGggczJcbiAgICAgICAgdGhlblxuICAgICAgICAgIGxvd2VyX2JvdW5kIDo9IG1pbiAhbG93ZXJfYm91bmQgdjEuKCgyICogY3V0b2ZmKSAtIGkpO1xuICAgICAgICAoKiBkaWQgd2UgY29tcHV0ZSB1cCB0byB0aGUgZGlhZ29uYWwgMipjdXRvZmYrMT8gKilcbiAgICAgICAgaWYgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxICYmIGkgPSBjdXRvZmYgKiAyICYmICFsb3dlcl9ib3VuZCA+PSBjdXRvZmZcbiAgICAgICAgdGhlblxuICAgICAgICAgIHJhaXNlX25vdHJhY2UgRXhpdDtcblxuICAgICAgICAoKiBjb3B5IHYxIGludG8gdjAgZm9yIG5leHQgaXRlcmF0aW9uICopXG4gICAgICAgIEFycmF5LmJsaXQgdjEgMCB2MCAwIChsZW5ndGggczIgKyAxKVxuICAgICAgZG9uZTtcbiAgICAgIHYxLihsZW5ndGggczIpXG4gICAgd2l0aCBFeGl0IC0+IGN1dG9mZlxuICApXG5cbmxldCByZXBlYXQgcyBuID1cbiAgYXNzZXJ0IChuID49IDApO1xuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGFzc2VydCAobGVuID4gMCk7XG4gIGluaXQgKGxlbiAqIG4pIChmdW4gaSAtPiBzLltpIG1vZCBsZW5dKVxuXG5sZXQgcHJlZml4IH5wcmUgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHByZSBpblxuICBpZiBsZW4gPiBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIGZhbHNlXG4gIGVsc2UgKFxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZiBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIGkpIChTdHJpbmcudW5zYWZlX2dldCBwcmUgaSlcbiAgICAgIHRoZW5cbiAgICAgICAgZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgY2hlY2sgKGkgKyAxKVxuICAgIGluXG4gICAgY2hlY2sgMFxuICApXG5cbmxldCBzdWZmaXggfnN1ZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3VmIGluXG4gIGlmIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IG9mZiA9IFN0cmluZy5sZW5ndGggcyAtIGxlbiBpblxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZlxuICAgICAgICBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIChvZmYgKyBpKSkgKFN0cmluZy51bnNhZmVfZ2V0IHN1ZiBpKVxuICAgICAgdGhlblxuICAgICAgICBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBjaGVjayAoaSArIDEpXG4gICAgaW5cbiAgICBjaGVjayAwXG4gIClcblxubGV0IHRha2UgbiBzID1cbiAgaWYgbiA8IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgU3RyaW5nLnN1YiBzIDAgblxuICBlbHNlXG4gICAgc1xuXG5sZXQgZHJvcCBuIHMgPVxuICBpZiBuIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgbiAoU3RyaW5nLmxlbmd0aCBzIC0gbilcbiAgZWxzZVxuICAgIFwiXCJcblxubGV0IHRha2VfZHJvcCBuIHMgPSB0YWtlIG4gcywgZHJvcCBuIHNcblxubGV0IGNob3Bfc3VmZml4IH5zdWYgcyA9XG4gIGlmIHN1ZmZpeCB+c3VmIHMgdGhlblxuICAgIFNvbWUgKFN0cmluZy5zdWIgcyAwIChTdHJpbmcubGVuZ3RoIHMgLSBTdHJpbmcubGVuZ3RoIHN1ZikpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBjaG9wX3ByZWZpeCB+cHJlIHMgPVxuICBpZiBwcmVmaXggfnByZSBzIHRoZW5cbiAgICBTb21lXG4gICAgICAoU3RyaW5nLnN1YiBzIChTdHJpbmcubGVuZ3RoIHByZSkgKFN0cmluZy5sZW5ndGggcyAtIFN0cmluZy5sZW5ndGggcHJlKSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGJsaXQgPSBTdHJpbmcuYmxpdFxuXG5sZXQgZm9sZCBmIGFjYyBzID1cbiAgbGV0IHJlYyBmb2xkX3JlYyBmIGFjYyBzIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZF9yZWMgZiAoZiBhY2Mgcy5baV0pIHMgKGkgKyAxKVxuICBpblxuICBmb2xkX3JlYyBmIGFjYyBzIDBcblxubGV0IGZvbGRpIGYgYWNjIHMgPVxuICBsZXQgcmVjIGZvbGRfcmVjIGYgYWNjIHMgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkX3JlYyBmIChmIGFjYyBpIHMuW2ldKSBzIChpICsgMSlcbiAgaW5cbiAgZm9sZF9yZWMgZiBhY2MgcyAwXG5cbmxldCBwYWQgPyhzaWRlID0gYExlZnQpID8oYyA9ICcgJykgbiBzID1cbiAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGlmIGxlbl9zID49IG4gdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IHBhZF9sZW4gPSBuIC0gbGVuX3MgaW5cbiAgICBtYXRjaCBzaWRlIHdpdGhcbiAgICB8IGBMZWZ0IC0+XG4gICAgICBpbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgaWYgaSA8IHBhZF9sZW4gdGhlblxuICAgICAgICAgICAgY1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHMuW2kgLSBwYWRfbGVuXSlcbiAgICB8IGBSaWdodCAtPlxuICAgICAgaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgIGlmIGkgPCBsZW5fcyB0aGVuXG4gICAgICAgICAgICBzLltpXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGMpXG4gIClcblxubGV0IF90b19nZW4gcyBpMCBsZW4gPVxuICBsZXQgaSA9IHJlZiBpMCBpblxuICBmdW4gKCkgLT5cbiAgICBpZiAhaSA9IGkwICsgbGVuIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlIChcbiAgICAgIGxldCBjID0gU3RyaW5nLnVuc2FmZV9nZXQgcyAhaSBpblxuICAgICAgaW5jciBpO1xuICAgICAgU29tZSBjXG4gICAgKVxuXG5sZXQgdG9fZ2VuIHMgPSBfdG9fZ2VuIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxubGV0IG9mX2NoYXIgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgbGV0IHJlYyBhdXggKCkgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBCdWZmZXIuY29udGVudHMgYlxuICAgIHwgU29tZSBjIC0+XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYiBjO1xuICAgICAgYXV4ICgpXG4gIGluXG4gIGF1eCAoKVxuXG5sZXQgdG9faXRlciBzIGsgPSBTdHJpbmcuaXRlciBrIHNcblxubGV0IHJlYyBfdG9fc2VxIHMgaSBsZW4gKCkgPVxuICBpZiBsZW4gPSAwIHRoZW5cbiAgICBTZXEuTmlsXG4gIGVsc2VcbiAgICBTZXEuQ29ucyAocy5baV0sIF90b19zZXEgcyAoaSArIDEpIChsZW4gLSAxKSlcblxubGV0IHRvX3NlcSBzID0gX3RvX3NlcSBzIDAgKFN0cmluZy5sZW5ndGggcylcblxubGV0IG9mX2l0ZXIgaSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBpIChCdWZmZXIuYWRkX2NoYXIgYik7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIFNlcS5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYikgc2VxO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgdG9fbGlzdCBzID0gX3RvX2xpc3QgcyBbXSAwIChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBvZl9saXN0IGwgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgTGlzdC5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYnVmKSBsO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBvZl9hcnJheSBhID0gaW5pdCAoQXJyYXkubGVuZ3RoIGEpIChmdW4gaSAtPiBhLihpKSlcbmxldCB0b19hcnJheSBzID0gQXJyYXkuaW5pdCAoU3RyaW5nLmxlbmd0aCBzKSAoZnVuIGkgLT4gcy5baV0pXG5cbmxldCBsaW5lc19nZW4gcyA9XG4gIFNwbGl0Lmdlbl9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzX2l0ZXIgcyA9XG4gIFNwbGl0Lml0ZXJfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lc19zZXEgcyA9XG4gIFNwbGl0LnNlcV9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzIHMgPVxuICBTcGxpdC5saXN0X2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgY29uY2F0X2dlbl9idWYgfnNlcCBnIDogQnVmZmVyLnQgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCByZWMgYXV4IH5maXJzdCAoKSA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IGJcbiAgICB8IFNvbWUgcyAtPlxuICAgICAgaWYgbm90IGZpcnN0IHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gICAgICBhdXggfmZpcnN0OmZhbHNlICgpXG4gIGluXG4gIGF1eCB+Zmlyc3Q6dHJ1ZSAoKVxuXG5sZXQgY29uY2F0X2dlbiB+c2VwIGcgPVxuICBsZXQgYnVmID0gY29uY2F0X2dlbl9idWYgfnNlcCBnIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGNvbmNhdF9pdGVyX2J1ZiB+c2VwIGkgOiBCdWZmZXIudCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBpIChmdW4gcyAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzKTtcbiAgYnVmXG5cbmxldCBjb25jYXRfaXRlciB+c2VwIGkgPVxuICBsZXQgYnVmID0gY29uY2F0X2l0ZXJfYnVmIH5zZXAgaSBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjb25jYXRfc2VxX2J1ZiB+c2VwIHNlcSA6IEJ1ZmZlci50ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBzIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHMpXG4gICAgc2VxO1xuICBidWZcblxubGV0IGNvbmNhdF9zZXEgfnNlcCBzZXEgPVxuICBsZXQgYnVmID0gY29uY2F0X3NlcV9idWYgfnNlcCBzZXEgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lcyBsID1cbiAgbGV0IGxlbiA9IExpc3QuZm9sZF9sZWZ0IChmdW4gbiBzIC0+IG4gKyAxICsgU3RyaW5nLmxlbmd0aCBzKSAwIGwgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBsZW4gaW5cbiAgbGV0IHJlYyBhdXhfYmxpdCBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT5cbiAgICAgIGFzc2VydCAoaSA9IGxlbik7XG4gICAgICBCeXRlcy50b19zdHJpbmcgYnVmXG4gICAgfCBzIDo6IHRhaWwgLT5cbiAgICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgQnl0ZXMuYmxpdF9zdHJpbmcgcyAwIGJ1ZiBpIGxlbl9zO1xuICAgICAgQnl0ZXMuc2V0IGJ1ZiAoaSArIGxlbl9zKSAnXFxuJztcbiAgICAgIGF1eF9ibGl0IChpICsgbGVuX3MgKyAxKSB0YWlsXG4gIGluXG4gIGF1eF9ibGl0IDAgbFxuXG5sZXQgdW5saW5lc19nZW4gZyA9XG4gIGxldCBidWYgPSBjb25jYXRfZ2VuX2J1ZiB+c2VwOlwiXFxuXCIgZyBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzX2l0ZXIgaSA9XG4gIGxldCBidWYgPSBjb25jYXRfaXRlcl9idWYgfnNlcDpcIlxcblwiIGkgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lc19zZXEgc2VxID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9zZXFfYnVmIH5zZXA6XCJcXG5cIiBzZXEgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgc2V0IHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnNldFwiO1xuICBpbml0IChTdHJpbmcubGVuZ3RoIHMpIChmdW4gaiAtPlxuICAgICAgaWYgaSA9IGogdGhlblxuICAgICAgICBjXG4gICAgICBlbHNlXG4gICAgICAgIHMuW2pdKVxuXG5sZXQgaXRlciA9IFN0cmluZy5pdGVyXG5cbmxldCBmaWx0ZXJfbWFwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgIG1hdGNoIGYgYyB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBjJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMnKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGZpbHRlciBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyIChmdW4gYyAtPiBpZiBmIGMgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVuaXEgZXEgcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA9IDAgdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuWzBdO1xuICAgIGxldCBfID1cbiAgICAgIGZvbGRcbiAgICAgICAgKGZ1biBwcmV2aW91c19jIGMgLT5cbiAgICAgICAgICBpZiBub3QgKGVxIHByZXZpb3VzX2MgYykgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7XG4gICAgICAgICAgYylcbiAgICAgICAgcy5bMF0gc1xuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICApXG5cbmxldCBmbGF0X21hcCA/c2VwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJpXG4gICAgKGZ1biBpIGMgLT5cbiAgICAgIChtYXRjaCBzZXAgd2l0aFxuICAgICAgfCBTb21lIF8gd2hlbiBpID0gMCAtPiAoKVxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgc2VwIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXApO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChmIGMpKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxuZXhjZXB0aW9uIE15RXhpdFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICB0cnlcbiAgICBpdGVyIChmdW4gYyAtPiBpZiBub3QgKHAgYykgdGhlbiByYWlzZSBNeUV4aXQpIHM7XG4gICAgdHJ1ZVxuICB3aXRoIE15RXhpdCAtPiBmYWxzZVxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIHRyeVxuICAgIGl0ZXIgKGZ1biBjIC0+IGlmIHAgYyB0aGVuIHJhaXNlIE15RXhpdCkgcztcbiAgICBmYWxzZVxuICB3aXRoIE15RXhpdCAtPiB0cnVlXG5cbmxldCBkcm9wX3doaWxlIGYgcyA9XG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW5ndGggcyAmJiBmICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGlmICFpID4gMCB0aGVuXG4gICAgc3ViIHMgIWkgKGxlbmd0aCBzIC0gIWkpXG4gIGVsc2VcbiAgICBzXG5cbmxldCByZHJvcF93aGlsZSBmIHMgPVxuICBsZXQgaSA9IHJlZiAobGVuZ3RoIHMgLSAxKSBpblxuICB3aGlsZSAhaSA+PSAwICYmIGYgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBkZWNyIGlcbiAgZG9uZTtcbiAgaWYgIWkgPCBsZW5ndGggcyAtIDEgdGhlblxuICAgIHN1YiBzIDAgKCFpICsgMSlcbiAgZWxzZVxuICAgIHNcblxuKCogbm90aW9uIG9mIHdoaXRlc3BhY2UgZm9yIHRyaW0gKilcbmxldCBpc19zcGFjZV8gPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IGx0cmltIHMgPSBkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5sZXQgcnRyaW0gcyA9IHJkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5cbmxldCBtYXAyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5tYXAyXCI7XG4gIGluaXQgKFN0cmluZy5sZW5ndGggczEpIChmdW4gaSAtPiBmIHMxLltpXSBzMi5baV0pXG5cbmxldCBpdGVyMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcjJcIjtcbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggczEgLSAxIGRvXG4gICAgZiBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGl0ZXJpMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcmkyXCI7XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMxIC0gMSBkb1xuICAgIGYgaSBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGZvbGQyIGYgYWNjIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuZm9sZDJcIjtcbiAgbGV0IHJlYyBmb2xkJyBhY2MgczEgczIgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggczEgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZCcgKGYgYWNjIHMxLltpXSBzMi5baV0pIHMxIHMyIChpICsgMSlcbiAgaW5cbiAgZm9sZCcgYWNjIHMxIHMyIDBcblxubGV0IGZvcl9hbGwyIHAgczEgczIgPVxuICB0cnlcbiAgICBpdGVyMiAoZnVuIGMxIGMyIC0+IGlmIG5vdCAocCBjMSBjMikgdGhlbiByYWlzZSBNeUV4aXQpIHMxIHMyO1xuICAgIHRydWVcbiAgd2l0aCBNeUV4aXQgLT4gZmFsc2VcblxubGV0IGV4aXN0czIgcCBzMSBzMiA9XG4gIHRyeVxuICAgIGl0ZXIyIChmdW4gYzEgYzIgLT4gaWYgcCBjMSBjMiB0aGVuIHJhaXNlIE15RXhpdCkgczEgczI7XG4gICAgZmFsc2VcbiAgd2l0aCBNeUV4aXQgLT4gdHJ1ZVxuXG4oKiogezIgQXNjaWkgZnVuY3Rpb25zfSAqKVxuXG5sZXQgZXF1YWxfY2FzZWxlc3MgczEgczIgOiBib29sID1cbiAgU3RyaW5nLmxlbmd0aCBzMSA9IFN0cmluZy5sZW5ndGggczJcbiAgJiYgZm9yX2FsbDJcbiAgICAgICAoZnVuIGMxIGMyIC0+XG4gICAgICAgICBDQ0NoYXIuZXF1YWwgKENDQ2hhci5sb3dlcmNhc2VfYXNjaWkgYzEpIChDQ0NoYXIubG93ZXJjYXNlX2FzY2lpIGMyKSlcbiAgICAgICBzMSBzMlxuXG5sZXQgdG9faGV4IChzIDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIGxldCBpX3RvX2hleCAoaSA6IGludCkgPVxuICAgIGlmIGkgPCAxMCB0aGVuXG4gICAgICBDaGFyLmNociAoaSArIENoYXIuY29kZSAnMCcpXG4gICAgZWxzZVxuICAgICAgQ2hhci5jaHIgKGkgLSAxMCArIENoYXIuY29kZSAnYScpXG4gIGluXG5cbiAgbGV0IHJlcyA9IEJ5dGVzLmNyZWF0ZSAoMiAqIGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbGV0IG4gPSBDaGFyLmNvZGUgKGdldCBzIGkpIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAoMiAqIGkpIChpX3RvX2hleCAoKG4gbGFuZCAweGYwKSBsc3IgNCkpO1xuICAgIEJ5dGVzLnNldCByZXMgKCgyICogaSkgKyAxKSAoaV90b19oZXggKG4gbGFuZCAweDBmKSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxubGV0IG9mX2hleF9leG4gKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IG5fb2ZfYyA9IGZ1bmN0aW9uXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnYScgLi4gJ2YnIGFzIGMgLT4gMTAgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYSdcbiAgICB8ICdBJyAuLiAnRicgYXMgYyAtPiAxMCArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJ1xuICAgIHwgXyAtPiBpbnZhbGlkX2FyZyBcInN0cmluZzogaW52YWxpZCBoZXhcIlxuICBpblxuICBpZiBTdHJpbmcubGVuZ3RoIHMgbW9kIDIgPD4gMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJzdHJpbmc6IGhleCBzZXF1ZW5jZSBtdXN0IGJlIG9mIGV2ZW4gbGVuZ3RoXCI7XG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChTdHJpbmcubGVuZ3RoIHMgLyAyKSAnXFx4MDAnIGluXG4gIGZvciBpID0gMCB0byAoU3RyaW5nLmxlbmd0aCBzIC8gMikgLSAxIGRvXG4gICAgbGV0IG4xID0gbl9vZl9jIChTdHJpbmcuZ2V0IHMgKDIgKiBpKSkgaW5cbiAgICBsZXQgbjIgPSBuX29mX2MgKFN0cmluZy5nZXQgcyAoKDIgKiBpKSArIDEpKSBpblxuICAgIGxldCBuID0gKG4xIGxzbCA0KSBsb3IgbjIgaW5cbiAgICBCeXRlcy5zZXQgcmVzIGkgKENoYXIuY2hyIG4pXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbmxldCBvZl9oZXggcyA9IHRyeSBTb21lIChvZl9oZXhfZXhuIHMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IHBwX2J1ZiBidWYgcyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuXG5sZXQgcHAgZm10IHMgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCJcXFwiJXNcXFwiXCIgc1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApID0gZXF1YWxcbiAgbGV0ICggPD4gKSBhIGIgPSBub3QgKGVxdWFsIGEgYilcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwib3BlbiBMZXhpbmdcblxuZXhjZXB0aW9uIExleF9lcnJvciBvZiBzdHJpbmdcblxubGV0IGxleF9lcnJvciBlcnIgPSByYWlzZSAoTGV4X2Vycm9yIGVycilcblxubGV0IGVycm9yX3BvcyBsZXhidWYgPSBcbiAgbGV0IHN0YXJ0ID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxldCBjbnVtID0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHN0YXJ0LnBvc19ib2wgaW5cbiAgbGV0IGVudW0gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gc3RhcnQucG9zX2JvbCBpblxuICAoc3RhcnQucG9zX2xudW0sIGNudW0sIGVudW0pXG5cbmxldCBlcnJvcl9wb3NfbXNnIChsZXhidWYgOiBMZXhpbmcubGV4YnVmKSA9XG4gIGxldCAobGluZSwgY251bSwgZW51bSkgPSBlcnJvcl9wb3MgbGV4YnVmIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgbGluZSBjbnVtIGVudW1cblxubGV0IHN0cmluZzJudW0gcyA9XG4gIHRyeSAoVG9rZW5zLklOVCAoaW50X29mX3N0cmluZyBzKSkgd2l0aFxuICB8IEZhaWx1cmUgXyAtPiBUb2tlbnMuTEFSR0VJTlQgc1xuXG5sZXQgdXBkYXRlX3BvcyBsZXhidWYgPVxuICBsZXQgcG9zID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxleGJ1Zi5sZXhfc3RhcnRfcCA8LVxuICAgIHsgcG9zIHdpdGggcG9zX2JvbCA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zO1xuICAgICAgICAgICAgICAgcG9zX2xudW0gPSBwb3MucG9zX2xudW0gKyAxXG4gICAgfVxuXG5sZXQgaW50X29mX2hleGNoYXIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJy4uJzknIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCdcbiAgfCAnYScuLidmJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ2EnICsgMTBcbiAgfCAnQScuLidGJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ0EnICsgMTBcbiAgfCBjIC0+IGxleF9lcnJvciAoXCJpbnZhbGlkIGhleCBjaGFyIGluIHVuaWNvZGUgZXNjYXBlOiAnXCIgXiAoU3RyaW5nLm1ha2UgMSBjKSBeIFwiJ1wiKVxuXG5cbmxldCB1dGY4X29mX2NvZGUgYnVmIGlkeCB1ID1cbiAgbGV0IGkgPSByZWYgaWR4IGluXG5cbiAgbGV0IGFkZF9jaGFyIGIgYyA9IEJ5dGVzLnVuc2FmZV9zZXQgYiAhaSBjOyBpIDo9ICFpICsgMSBpblxuXG4gIGxldCBtYXhfdXNlZF9iaXRzIG4gdSA9ICh1IGxzciBuKSA9IDAgaW5cblxuICBpZiBtYXhfdXNlZF9iaXRzIDcgdSB0aGVuXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociB1KVxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMTEgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTAwMDAwMCBsb3IgKCh1IGxzciA2KSBsYW5kIDBiMDAwMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSlcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAxNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAwMDExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKVxuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDIxIHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDAwMDExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAyNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTExMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAwMDAwMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmRcbiAgZWxzZSBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTExMDAgbG9yICgodSBsc3IgMzApIGxhbmQgMGIwMDAwMDAwMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmQ7XG4gICFpXG5cbmxldCB1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIGJ1ZiBpZHggaGlnaCBsb3cgPVxuICBsZXQgaGlnaCA9IGhpZ2ggLSAweEQ4MDAgaW5cbiAgbGV0IGxvdyA9IGxvdyAtIDB4REMwMCBpblxuICBsZXQgY29kZSA9IDB4MTAwMDAgKyAoKGhpZ2ggbHNsIDEwKSBsb3IgbG93KSBpblxuICAgIHV0Zjhfb2ZfY29kZSBidWYgaWR4IGNvZGVcblxubGV0IGVzY2FwaW5nX2Vycm9yIG1zZyBzIGMgb2ZmID1cbiAgbGV0IG9mZnMgPSBzdHJpbmdfb2ZfaW50IG9mZiBpblxuICBsZXQgY3MgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgU29tZSBjIC0+IFwiICdcIiBeIChTdHJpbmcubWFrZSAxIGMpIF4gXCInIFwiXG4gICAgfCBOb25lIC0+IFwiXCJcbiAgaW5cbiAgICBsZXhfZXJyb3IgKG1zZyBeIFwiIGF0IG9mZnNldCBcIiBeIG9mZnMgXiBjcyBeIFwiOiBcIiBeIHMpXG5cbmxldCB1bmVzY2FwZV9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBzJyA9IEJ5dGVzLmNyZWF0ZSBsIGluXG4gIGxldCBqID0gcmVmIDAgaW5cbiAgbGV0IHUxID0gcmVmIDAgaW5cbiAgbGV0IHUyID0gcmVmIDAgaW5cbiAgbGV0IHN0YXRlID0gcmVmIGBDaGFyIGluXG5cbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgbWF0Y2ggIXN0YXRlIHdpdGhcbiAgICB8IGBDaGFyIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICAgICB8ICdcXFxcJyAtPiBzdGF0ZSA6PSBgRXNjYXBlXG4gICAgICAgICB8IGMgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiBjOyBqIDo9ICFqICsgMVxuICAgICAgIGVuZDtcbiAgICB8IGBFc2NhcGUgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICB8ICdcIicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1wiJzsgICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnXFxcXCcgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxcXCc7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnLycgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJy8nOyAgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdiJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxiJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdmJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFwwMTInOyBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICduJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxuJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdyJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxyJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd0JyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFx0JzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd1JyAgLT4gc3RhdGUgOj0gYFUxX2gxXG4gICAgICAgfCBfICAgIC0+IGVzY2FwaW5nX2Vycm9yIFwiaW52YWxpZCBlc2NhcGUgaW4gc3RyaW5nXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZW5kO1xuICAgIHwgYFUxX2gxIC0+IHUxIDo9IGludF9vZl9oZXhjaGFyIHMuW2ldOyAgc3RhdGUgOj0gYFUxX2gyXG4gICAgfCBgVTFfaDIgLT4gdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTFfaDNcbiAgICB8IGBVMV9oMyAtPiB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMV9oNFxuICAgIHwgYFUxX2g0IC0+XG4gICAgICB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTtcbiAgICAgIGlmICF1MSA+PSAweEQ4MDAgJiYgIXUxIDw9IDB4REJGRiB0aGVuXG4gICAgICAgIHN0YXRlIDo9IGBVMl9ic1xuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBqIDo9IHV0Zjhfb2ZfY29kZSBzJyAhaiAhdTE7XG4gICAgICAgIHN0YXRlIDo9IGBDaGFyXG4gICAgICBlbmRcbiAgICB8IGBVMl9icyAtPlxuICAgICAgaWYgcy5baV0gPD4gJ1xcXFwnIHRoZW5cbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJleHBlY3RlZCBsb3cgc3Vycm9nYXRlIGVzY2FwZSBjaGFyIChcXFxcKVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX3VcbiAgICB8IGBVMl91IC0+XG4gICAgICBpZiBzLltpXSA8PiAndScgdGhlblxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImV4cGVjdGVkIGxvdyBzdXJyb2dhdGUgZXNjYXBlIHNlcXVlbmNlICh1KVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX2gxXG4gICAgfCBgVTJfaDEgLT4gdTIgOj0gaW50X29mX2hleGNoYXIgcy5baV07ICBzdGF0ZSA6PSBgVTJfaDJcbiAgICB8IGBVMl9oMiAtPiB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMl9oM1xuICAgIHwgYFUyX2gzIC0+IHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUyX2g0XG4gICAgfCBgVTJfaDQgLT5cbiAgICAgIHN0YXRlIDo9IGBDaGFyO1xuICAgICAgdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7XG4gICAgICBpZiAhdTIgPj0gMHhEQzAwICYmICF1MiA8PSAweERGRkYgdGhlblxuICAgICAgICBqIDo9IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgcycgIWogIXUxICF1MiBcbiAgICAgIGVsc2VcbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJpbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRidcIiBzIE5vbmUgaVxuICBkb25lO1xuICBiZWdpblxuICAgIG1hdGNoICFzdGF0ZSB3aXRoXG4gICAgfCBgQ2hhciAtPiAoKVxuICAgIHwgXyAtPiBlc2NhcGluZ19lcnJvciBcImVuZCBvZiBzdHJpbmcgaW4gZXNjYXBlIHNlcXVlbmNlXCIgcyBOb25lIGxcbiAgZW5kO1xuICBpZiAhaiA8PiBsIHRoZW4gQnl0ZXMudW5zYWZlX3RvX3N0cmluZyAoQnl0ZXMuc3ViIHMnIDAgIWopIGVsc2Ugc1xuXG4iLCIoKiBjb250YWlucyB0aGUgbGluZSBhbmQgY2hhcmFjdGVyIHNwYW4gb2Ygd2hlcmUgdGhlIGVycm9yIG9jY3VyZWQgKilcblxudHlwZSB0ID0ge1xuICBsaW5lIDogaW50XG47IHN0YXJ0X2NoYXIgOiBpbnRcbjsgZW5kX2NoYXIgOiBpbnRcbjsgbXNnIDogc3RyaW5nXG59XG5cbmV4Y2VwdGlvbiBKc29uX2Vycm9yX2luZm8gb2YgdFxuXG5sZXQgY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlbXNnID1cbiAgbGV0IChlbGluZSwgc2NoYXIsIGVjaGFyKSA9IExleHhlcl91dGlscy5lcnJvcl9wb3MgbGV4YnVmIGluXG4gIHsgbGluZSA9IGVsaW5lOyBzdGFydF9jaGFyID0gc2NoYXI7IGVuZF9jaGFyID0gZWNoYXI7IG1zZyA9IGVtc2cgfVxuXG5sZXQgdG9fc3RyaW5nIGluZm8gPVxuICBsZXQgbG9jID0gUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgaW5mby5saW5lIGluZm8uc3RhcnRfY2hhciBpbmZvLmVuZF9jaGFyIGluXG4gIGluZm8ubXNnIF4gXCIgYXQgXCIgXiBsb2NcbiIsImV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxuKCogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGFuIGludGVnZXIsIGhhbmRsZXMgMzBiaXQsIDYyYml0IGFuZCBKc29vIHVzaW5nIDMyYml0IGludHMgKilcbmxldCBtYXhfanNvbl9pbnQgPVxuICBsZXQgcmVjIGxvZzIgbiA9IGlmIG4gPD0gMSB0aGVuIDAgZWxzZSAxICsgbG9nMihuIGFzciAxKSBpblxuICBsZXQgYml0cyBuID0gbG9nMiBuICsgMSBpblxuICBpZiBiaXRzIG1heF9pbnQgPiA1MyB0aGVuICgxIGxzbCA1MykgLSAxIGVsc2UgbWF4X2ludFxuXG5sZXQgbWF4X2pzb25faW50X2FzX2Zsb2F0ID0gZmxvYXRfb2ZfaW50IG1heF9qc29uX2ludFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0X2pzb24gZiA9XG4gIGxldCBpc19pbnQgPSAoZmxvYXRfb2ZfaW50IChpbnRfb2ZfZmxvYXQgZikpID0gZiBpblxuICBpZiBpc19pbnQgJiYgYWJzX2Zsb2F0IGYgPD0gbWF4X2pzb25faW50X2FzX2Zsb2F0IHRoZW4gYmVnaW4gKCogSUVFRSBtYXggaW50IGluIGEgZmxvYXQgd2hlbiBpbiA2NGJpdCBpbnQgbW9kZSopXG4gICAgbGV0IGludF92YWx1ZSA9IGludF9vZl9mbG9hdCBmIGluIChzdHJpbmdfb2ZfaW50IGludF92YWx1ZSkgXiBcIi4wXCJcbiAgZW5kXG4gIGVsc2UgYmVnaW5cbiAgICAoKiAlLjE3ZyBvZnRlbiBjcmVhdGVzIG92ZXJseSBsb25nIG91dHB1dCwgYXR0ZW1wdCB0byBjb252ZXJ0IGF0IGxvd2VyIHByZWNlc3Npb24gZmlyc3QgKilcbiAgICBsZXQgcyA9IGZvcm1hdF9mbG9hdCBcIiUuMTZnXCIgZiBpblxuICAgIGxldCBzID0gaWYgZmxvYXRfb2Zfc3RyaW5nIHMgPSBmIHRoZW4gcyBlbHNlIGZvcm1hdF9mbG9hdCBcIiUuMTdnXCIgZiBpblxuICAgIGlmIG5vdCAoU3RyaW5nLmNvbnRhaW5zIHMgJy4nIHx8IFN0cmluZy5jb250YWlucyBzICdlJykgdGhlbiBzIF4gXCIuMFwiXG4gICAgZWxzZSBzXG4gIGVuZFxuIiwiXG5sZXQgdG9rZW5fZXJyb3IgdG9rID1cbiAgbGV0IG9wZW4gVG9rZW5zIGluXG4gIGxldCBlcnIgPSBtYXRjaCB0b2sgd2l0aFxuICAgIHwgU1RSSU5HIHMgLT4gXCJ1bmV4cGVjdGVkIHN0cmluZyAnXCIgXiBzIF4gXCInXCJcbiAgICB8IE9TIC0+IFwidW5leHBlY3RlZCAneydcIlxuICAgIHwgT0UgLT4gXCJ1bmV4cGVjdGVkICd9J1wiXG4gICAgfCBOVUxMIC0+IFwidW5leHBlY3RlZCBudWxsIHZhbHVlXCJcbiAgICB8IE5FR0lORklOSVRZIC0+IFwidW5leHBlY3RlZCBuZWdhdGl2ZSBpbmZpbml0eVwiXG4gICAgfCBOQU4gLT4gXCJ1bmV4cGVjdGVkIE5vdC1hLU51bWJlclwiXG4gICAgfCBMRVhfRVJST1IgcyAtPiBzXG4gICAgfCBMQVJHRUlOVCBzIC0+IFwidW5leHBlY3RlZCBsYXJnZSBpbnRlZ2VyICdcIiBeIHMgXiBcIidcIlxuICAgIHwgSU5UIGkgLT4gXCJ1bmV4cGVjdGVkIGludGVnZXIgJ1wiIF4gKHN0cmluZ19vZl9pbnQgaSkgXiBcIidcIlxuICAgIHwgSU5GSU5JVFkgLT4gXCJ1bmV4cGVjdGVkIGluZmluaXR5XCJcbiAgICB8IEZMT0FUIGYgLT4gXCJ1bmV4cGVjdGVkIGZsb2F0ICdcIiBeIChzdHJpbmdfb2ZfZmxvYXQgZikgXiBcIidcIlxuICAgIHwgRU9GIC0+IFwidW5leHBlY3RlZCBlbmQtb2YtaW5wdXRcIlxuICAgIHwgQ09NUExJQU5DRV9FUlJPUiBzIC0+IFwiY29tcGxpYW5jZSBlcnJvciAnXCIgXiBzIF4gXCInXCJcbiAgICB8IENPTU1BIC0+IFwidW5leHBlY3RlZCAnLCdcIlxuICAgIHwgQ09MT04gLT4gXCJ1bmV4cGVjdGVkICc6J1wiXG4gICAgfCBCT09MIGIgLT4gXCJ1bmV4cGVjdGVkIGJvb2xlYW4gJ1wiIF4gKGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIikgXiBcIidcIlxuICAgIHwgQVMgLT4gXCJ1bmV4cGVjdGVkICdbJ1wiXG4gICAgfCBBRSAtPiBcInVuZXhwZWN0ZWQgJ10nXCJcbiAgICB8IFRTIC0+IFwidW5leHBlY3RlZCAnKCdcIlxuICAgIHwgVEUgLT4gXCJ1bmV4cGVjdGVkICcpJ1wiXG4gICAgfCBWUyAtPiBcInVuZXhwZWN0ZWQgJzwnXCJcbiAgICB8IFZFIC0+IFwidW5leHBlY3RlZCAnPidcIlxuICBpblxuICAgIGBTeW50YXhfZXJyb3IgZXJyXG4iLCJtb2R1bGUgdHlwZSBQYXJzZXIgPSBzaWdcbiAgbW9kdWxlIENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlNcblxuICB2YWwgZGVjb2RlXG4gICAgOiAgcmVhZGVyIDogKHVuaXQgLT4gVG9rZW5zLnRva2VuKVxuICAgIC0+IChDb21wbGlhbmNlLmpzb24gb3B0aW9uLCBzdHJpbmcpIHJlc3VsdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IFBhcnNlclxuICB3aXRoIG1vZHVsZSBDb21wbGlhbmNlID0gQ29tcGxpYW5jZVxuPSBzdHJ1Y3RcblxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IENvbXBsaWFuY2VcblxuICBleGNlcHRpb24gUGFyc2VfZXJyb3Igb2YgW2BFb2YgfCBgU3ludGF4X2Vycm9yIG9mIHN0cmluZ11cblxuICBsZXQganNvbl92YWx1ZSB+cmVhZGVyID0gXG4gICAgbGV0IG9wZW4gVG9rZW5zIGluXG4gICAgbGV0IG9wZW4gUGFyc2VyX3Rvb2xzIGluXG4gICAgbGV0IHJlYyB0b2tlbl92YWx1ZSB0b2sgPSBiZWdpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgSU5UIGkgLT4gQ29tcGxpYW5jZS5pbnRlZ2VyIGlcbiAgICAgIHwgU1RSSU5HIHMgLT4gQ29tcGxpYW5jZS5zdHJpbmcgc1xuICAgICAgfCBCT09MIGIgLT4gQ29tcGxpYW5jZS5ib29sIGJcbiAgICAgIHwgRkxPQVQgZiAtPiBDb21wbGlhbmNlLm51bWJlciAoYEZsb2F0IGYpXG4gICAgICB8IElORklOSVRZIC0+IENvbXBsaWFuY2UubnVtYmVyIGBJbmZpbml0eVxuICAgICAgfCBORUdJTkZJTklUWSAtPiBDb21wbGlhbmNlLm51bWJlciBgTmVnaW5maW5pdHlcbiAgICAgIHwgTkFOIC0+IENvbXBsaWFuY2UubnVtYmVyIGBOYW5cbiAgICAgIHwgTlVMTCAtPiBDb21wbGlhbmNlLm51bGxcbiAgICAgIHwgTEFSR0VJTlQgcyAtPiBDb21wbGlhbmNlLmxhcmdlaW50IHNcbiAgICAgIHwgRU9GIC0+IHJhaXNlIChQYXJzZV9lcnJvciBgRW9mKVxuICAgICAgfCBDT01NQSB8IENPTE9OIHwgQUUgfCBPRSB8IFRFIHwgVkUgfCBMRVhfRVJST1IgXyB8IENPTVBMSUFOQ0VfRVJST1IgXyAtPlxuICAgICAgICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICB8IEFTIC0+IGFycmF5X3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IE9TIC0+IG9iamVjdF92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBUUyAtPiB0dXBsZV92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBWUyAtPiB2YXJpYW50X3ZhbHVlX3N0YXJ0ICgpXG4gICAgZW5kXG4gICAgYW5kIHZhbHVlICgpID0gdG9rZW5fdmFsdWUgKHJlYWRlciAoKSlcbiAgICBhbmQgYXJyYXlfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHRvayA9IHJlYWRlciAoKSBpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IFtdXG4gICAgICB8IF8gLT4gYXJyYXlfdmFsdWVzX3N0YXJ0IHRvayBbXVxuICAgIGVuZFxuICAgIGFuZCBhcnJheV92YWx1ZXNfc3RhcnQgdG9rIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHRva2VuX3ZhbHVlIHRvayBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGFycmF5X3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdG9rID0gcmVhZGVyICgpIGluXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIFtdXG4gICAgICB8IF8gLT4gb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgW11cbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gY29sb25fdmFsdWUgdG9rICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gb2JqZWN0X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IGtleV9jb2xvbl92YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IG9iamVjdF92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgY29sb25fdmFsdWUgdiAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBrZXlfY29sb25fdmFsdWUgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdjEgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQ09NTUEgLT4gYmVnaW5cbiAgICAgICAgbGV0IHYyID0gdmFsdWUgKCkgaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBURSAtPiBDb21wbGlhbmNlLnR1cGxlIFt2MTsgdjJdXG4gICAgICAgIHwgQ09NTUEgLT4gdHVwbGVfdmFsdWVzIFt2MjsgdjFdXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFRFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInR1cGxlIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGVsZW1lbnRzXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFRFIC0+IENvbXBsaWFuY2UudHVwbGUgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiB0dXBsZV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdmFyaWFudF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IFZFIC0+IENvbXBsaWFuY2UudmFyaWFudCBrIE5vbmVcbiAgICAgICAgfCBDT0xPTiAtPiB2YXJpYW50X2VuZCBrIChTb21lICh2YWx1ZSAoKSkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFZFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInZhcmlhbnQgbXVzdCBoYXZlIGF0IGxlYXN0IGEgc3RyaW5nXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB2YXJpYW50X2VuZCBrIHYgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgVkUgLT4gQ29tcGxpYW5jZS52YXJpYW50IGsgdlxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGluXG4gICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gTm9uZVxuICAgIHwgZXhjZXB0aW9uIGV4bl8gLT4gcmFpc2UgZXhuX1xuICAgIHwgRU9GIC0+IE5vbmVcbiAgICB8IHRvayAtPiBTb21lICh0b2tlbl92YWx1ZSB0b2spXG5cbiAgbGV0IGRlY29kZSB+cmVhZGVyID0gXG4gICAgbWF0Y2gganNvbl92YWx1ZSB+cmVhZGVyIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gRXJyb3IgXCJVbmV4cGVjdGVkIGVuZC1vZi1pbnB1dFwiXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIGVycikpIC0+IEVycm9yIGVyclxuICAgIHwgZXhjZXB0aW9uIChMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVycikgLT4gRXJyb3IgZXJyXG4gICAgfCByZXMgLT4gT2sgcmVzXG5cbmVuZFxuIiwibGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG5sZXQgYWRkX2hleF9ieXRlIH5hZGRfY2hhciBpID1cbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxubGV0IGVzY2FwZSB+YWRkX2NoYXIgfmFkZF9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgfmFkZF9jaGFyIChpbnRfb2ZfY2hhciBjKVxuICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gIGRvbmVcbiBcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIHByZXR0eV9wcmludCA6IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHByZXR0eV9wcmludF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbGV0IHRvX2pzb25fc3RyaW5nIHMgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBVdGlscy5lc2NhcGUgfmFkZF9jaGFyIH5hZGRfc3RyaW5nIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBhZGRfcXVvdGVfc3RyaW5nIHM7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBwcF9saXN0IHNlcCBwcHggb3V0IGwgPVxuICAgIGxldCBwcF9zZXAgb3V0ICgpID0gRm9ybWF0LmZwcmludGYgb3V0IFwiJXNAIFwiIHNlcCBpblxuICAgIEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXAgcHB4IG91dCBsXG5cbiAgbGV0IHJlYyBmb3JtYXQgKG91dDpGb3JtYXQuZm9ybWF0dGVyKSBqc29uIDogdW5pdCA9XG4gICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBOdWxsIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gRm9ybWF0LnBwX3ByaW50X2Jvb2wgb3V0IGJcbiAgICAgIHwgYEludCBpIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChzdHJpbmdfb2ZfaW50IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+XG4gICAgICAgIGxldCBzID0gQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYgaW5cbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHRvX2pzb25fc3RyaW5nIHMpXG4gICAgICB8IGBJbnRsaXQgc1xuICAgICAgfCBgRmxvYXRsaXQgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgTGlzdCBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIltdXCJcbiAgICAgIHwgYExpc3QgbCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJbQDs8MSAwPkBbPGhvdj4lYUBdQDs8MSAtMj5dXCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0KSBsXG4gICAgICB8IGBBc3NvYyBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcInt9XCJcbiAgICAgIHwgYEFzc29jIGwgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwie0A7PDEgMD4lYUA7PDEgLTI+fVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdF9maWVsZCkgbFxuICAgICAgfCBgVHVwbGUgbCAtPlxuICAgICAgICBpZiBsID0gW10gdGhlbiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIigpXCJcbiAgICAgICAgZWxzZSBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQCwlYUA7PDAgLTI+KVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdCkgbFxuICAgICAgfCBgVmFyaWFudCAocywgTm9uZSkgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPCVzPlwiICh0b19qc29uX3N0cmluZyBzKVxuICAgICAgfCBgVmFyaWFudCAocywgU29tZSBqc29uKSAtPlxuICAgICAgICBsZXQgcyA9IHRvX2pzb25fc3RyaW5nIHMgaW5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPEBbPGh2Mj4lczogJWFAXT5cIiBzIGZvcm1hdCBqc29uXG5cbiAgYW5kIGZvcm1hdF9maWVsZCBvdXQgKG5hbWUsIGpzb24pID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JXM6ICVhQF1cIiAodG9fanNvbl9zdHJpbmcgbmFtZSkgZm9ybWF0IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50IG91dCBqc29uID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JWFAXVwiIGZvcm1hdCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludF90b19zdHJpbmcganNvbiA9XG4gICAgRm9ybWF0LmFzcHJpbnRmIFwiJWFcIiBwcmV0dHlfcHJpbnQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyBpblxuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhQD9cIiBwcmV0dHlfcHJpbnQganNvblxuXG5lbmRcbiIsImxldCBlcnJvciBtc2cgX2pzb24gPSByYWlzZSAoRmFpbHVyZSBtc2cpXG5cbm1vZHVsZSBJbnRlcm5hbCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBTID0gc2lnXG4gICAgdHlwZSBqc29uXG4gICAgdmFsIG51bGwgOiB1bml0IC0+IGpzb25cbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfc3RyaWN0X2ludGYgPSBzaWdcbiAgICB0eXBlIGpzb25cblxuICAgIHZhbCBtZW1iZXIgOiBzdHJpbmcgLT4gWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4ganNvblxuICAgIHZhbCBpbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uXG4gICAgdmFsIG1hcCA6IChqc29uIC0+IGpzb24pIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdXG4gICAgdmFsIHRvX2Fzc29jIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4gKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB2YWwgdG9fYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSAtPiBib29sXG4gICAgdmFsIHRvX2Zsb2F0IDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fc3RyaW5nIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgXSAtPiBzdHJpbmdcbiAgICB2YWwgdG9fc3RyaW5nX29wdGlvbiA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIHwgYE51bGwgXSAtPiBzdHJpbmcgb3B0aW9uXG4gICAgdmFsIHRvX29wdGlvbiA6ICgoWz4gYE51bGwgXSBhcyAnYSkgLT4ganNvbikgLT4gJ2EgLT4ganNvbiBvcHRpb25cbiAgICB2YWwgdG9fbGlzdCA6IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb24gbGlzdFxuICAgIHZhbCB0b19ib29sX29wdGlvbiA6IFs+IGBCb29sIG9mIGJvb2wgfCBgTnVsbCBdIC0+IGJvb2wgb3B0aW9uXG4gICAgdmFsIHRvX2Zsb2F0X29wdGlvbiA6IFs+IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIHRvX251bWJlciA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX251bWJlcl9vcHRpb24gOiBbPiBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCBjb252ZXJ0X2VhY2ggOiAoanNvbiAtPiBqc29uKSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uIGxpc3RcbiAgICB2YWwgcmV2X2ZpbHRlcl9tYXAgOiAoJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSBsaXN0IC0+ICdhIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbWFwIDogKCdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIHJldl9mbGF0dGVuIDogJ2EgbGlzdCAtPiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZsYXR0ZW4gOiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9pbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbGlzdCA6IFs+IGBMaXN0IG9mICdhIF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9hc3NvYyA6IFs+IGBBc3NvYyBvZiAnYSBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSBsaXN0IC0+IGJvb2wgbGlzdFxuICAgIHZhbCBmaWx0ZXJfZmxvYXQgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgICB2YWwgZmlsdGVyX3N0cmluZyAgOiBbPiBgU3RyaW5nIG9mIHN0cmluZyBdIGxpc3QgLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgZmlsdGVyX21lbWJlciA6IHN0cmluZyAtPiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gICAgdmFsIGtleXMgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IF0gLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgdmFsdWVzIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCBdIC0+ICdhIGxpc3RcbiAgICB2YWwgY29tYmluZSA6IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF0gLT4gWz4gYEFzc29jIG9mICdhIGxpc3QgXSAtPiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIFNoYXJlZCA9IHN0cnVjdFxuICAgIGxldCByZWMgcmV2X2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYWNjXG4gICAgICB8IGhkOjp0bCAtPlxuICAgICAgICBtYXRjaCBmIGhkIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHJldl9maWx0ZXJfbWFwIGYgYWNjIHRsXG4gICAgICAgIHwgU29tZSB2IC0+IHJldl9maWx0ZXJfbWFwIGYgKHY6OmFjYykgdGxcblxuICAgIGxldCBmaWx0ZXJfbWFwIGYgbCA9IExpc3QucmV2IChyZXZfZmlsdGVyX21hcCBmIFtdIGwpXG5cbiAgICBsZXQgcmVjIHJldl9mbGF0dGVuIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBhY2NcbiAgICAgIHwgaGQ6OnRsIC0+XG4gICAgICAgIG1hdGNoIGhkIHdpdGhcbiAgICAgICAgfCBgTGlzdCBsMiAtPiByZXZfZmxhdHRlbiAoTGlzdC5yZXZfYXBwZW5kIGwyIGFjYykgdGxcbiAgICAgICAgfCBfIC0+IHJldl9mbGF0dGVuIGFjYyB0bFxuXG4gICAgbGV0IGZsYXR0ZW4gbCA9IExpc3QucmV2IChyZXZfZmxhdHRlbiBbXSBsKVxuXG4gIGVuZFxuXG4gIG1vZHVsZSBTdHJpY3QoTSA6IFMpIDogSW50ZXJuYWxfc3RyaWN0X2ludGZcbiAgICB3aXRoIHR5cGUganNvbiA9IE0uanNvblxuICA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IE0uanNvblxuXG4gICAgbGV0IGFzc29jIG5hbWUgb2JqIDoganNvbiA9IHRyeSBMaXN0LmFzc29jIG5hbWUgb2JqIHdpdGggTm90X2ZvdW5kIC0+IE0ubnVsbCAoKVxuXG4gICAgbGV0IG1lbWJlciBuYW1lIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgQXNzb2Mgb2JqIC0+IGFzc29jIG5hbWUgb2JqXG4gICAgICB8IGpzb24gLT4gZXJyb3IgKFwiRXhwZWN0ZWQgYEFzc29jIHRvIGZpbmQgbmFtZSAnXCIgXiBuYW1lIF4gXCInIGluXCIpIGpzb25cblxuICAgIGxldCBpbmRleCBpIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICAgICAgICBsZXQgaScgPSBpZiBpIDwgMCB0aGVuIGxlbiArIGkgZWxzZSBpIGluXG4gICAgICAgICAgaWYgaScgPCAwIHx8IGknID49IGxlbiB0aGVuIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChzdHJpbmdfb2ZfaW50IGkgXiBcIiBvdXQgb2YgYm91bmRzXCIpKVxuICAgICAgICAgIGVsc2UgTGlzdC5udGggbCBpJ1xuICAgICAgfCBqc29uIC0+IGVycm9yIFwiQ2FuJ3QgaW5kZXggbm9uZSBgTGlzdCB0eXBlIFwiIGpzb25cblxuICAgIGxldCBtYXAgZiB2ID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBmIGwpXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJDYW4ndCBtYXAgb3ZlciBub25lIGBMaXN0IHR5cGUgXCIganNvblxuXG4gICAgbGV0IHRvX2Fzc29jID0gZnVuY3Rpb24gfCBgQXNzb2Mgb2JqIC0+IG9iaiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQXNzb2NcIiBqc29uXG4gICAgbGV0IHRvX2Jvb2wgPSBmdW5jdGlvbiB8IGBCb29sIGIgLT4gYiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQm9vbFwiIGpzb25cbiAgICBsZXQgdG9fZmxvYXQgPSBmdW5jdGlvbiB8IGBGbG9hdCBmIC0+IGYgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgICB8IGBTdHJpbmcgcyAtPiBzXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgU3RyaW5nXCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZ19vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgU3RyaW5nIHMgLT4gU29tZSBzXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBTdHJpbmcgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fb3B0aW9uIGYgdiA6IGpzb24gb3B0aW9uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IHYgLT4gU29tZSAoZiB2KVxuXG4gICAgbGV0IHRvX2xpc3QgdiA6IGpzb24gbGlzdCA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPiBsXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgTGlzdFwiIGpzb25cblxuICAgIGxldCB0b19mbG9hdF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX2Jvb2xfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEJvb2wgYiAtPiBTb21lIGJcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEJvb2wgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gZlxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX251bWJlcl9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IGNvbnZlcnRfZWFjaCBmID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgbCAtPiBMaXN0Lm1hcCBmIGxcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBMaXN0XCIganNvblxuXG4gICAgbGV0IHJldl9maWx0ZXJfbWFwID0gU2hhcmVkLnJldl9maWx0ZXJfbWFwXG4gICAgbGV0IGZpbHRlcl9tYXAgPSBTaGFyZWQuZmlsdGVyX21hcFxuXG4gICAgbGV0IHJldl9mbGF0dGVuID0gU2hhcmVkLnJldl9mbGF0dGVuXG4gICAgbGV0IGZsYXR0ZW4gPSBTaGFyZWQuZmxhdHRlblxuXG4gICAgbGV0IGZpbHRlcl9pbmRleCBpIGwgPVxuICAgICAgZmlsdGVyX21hcCAoZnVuY3Rpb24gfCBgTGlzdCBsIC0+ICh0cnkgU29tZSAoTGlzdC5udGggbCBpKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbGlzdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYExpc3QgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Fzc29jIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Jvb2wgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBCb29sIGIgLT4gU29tZSBiIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9mbG9hdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEZsb2F0IGYgLT4gU29tZSBmIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9zdHJpbmcgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBTdHJpbmcgcyAtPiBTb21lIHMgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbWVtYmVyIGsgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiAodHJ5IFNvbWUgKExpc3QuYXNzb2MgayBsKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICAgICAgZmlsdGVyX21hcCAoXG4gICAgICAgIGZ1bmN0aW9uXG4gICAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICApIGxcblxuICAgIGxldCBrZXlzIG8gPSB0b19hc3NvYyBvIHw+IExpc3QubWFwIChmdW4gKGtleSwgXykgLT4ga2V5KVxuXG4gICAgbGV0IHZhbHVlcyBvID0gdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChfLCB2YWx1ZSkgLT4gdmFsdWUpXG5cbiAgICBsZXQgY29tYmluZSBmaXJzdCBzZWNvbmQgPVxuICAgICAgbWF0Y2ggKGZpcnN0LCBzZWNvbmQpIHdpdGhcbiAgICAgIHwgKGBBc3NvYyBhLCBgQXNzb2MgYikgLT4gYEFzc29jIChhIEAgYilcbiAgICAgIHwgKF8sIF8pIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRXhwZWN0ZWQgdHdvIG9iamVjdHNcIilcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGVsIC0+ICBlbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9iYXNpY19pbnRmID0gc2lnXG5cbiAgICB2YWwgdG9fbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19udW1iZXJfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCB0b19pbnQgOiBbPiBgSW50IG9mIGludCBdIC0+IGludFxuICAgIHZhbCB0b19pbnRfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgTnVsbCBdIC0+IGludCBvcHRpb25cbiAgICB2YWwgZmlsdGVyX2ludCA6IFs+IGBJbnQgb2YgaW50IF0gbGlzdCAtPiBpbnQgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgZW5kXG5cbiAgbW9kdWxlIEJhc2ljKE0gOiBTKSA6IEludGVybmFsX2Jhc2ljX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCB0b19udW1iZXIgPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gZmxvYXQgaVxuICAgICAgfCBgRmxvYXQgZiAtPiBmXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50IG9yIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXJfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50LCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9faW50ID0gZnVuY3Rpb24gfCBgSW50IGkgLT4gaSB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50XCIganNvblxuXG4gICAgbGV0IHRvX2ludF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gU29tZSBpXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgZmlsdGVyX2ludCBsID0gU2hhcmVkLmZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBJbnQgaSAtPiBTb21lIGkgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX251bWJlciBsID1cbiAgICAgIFNoYXJlZC5maWx0ZXJfbWFwIChcbiAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgfCBgSW50IGkgLT4gU29tZSAoZmxvYXQgaSlcbiAgICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgICkgbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9leHRlbmRlZF9pbnRmID0gc2lnXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgfFxuICAgICAgICAgICAgICAgICAgIGBUdXBsZSBvZiAnYSBsaXN0IHwgYFZhcmlhbnQgb2YgJ2IgKiAnYSBvcHRpb24gXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIEV4dGVuZGVkKE0gOiBTKSA6IEludGVybmFsX2V4dGVuZGVkX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgVHVwbGUgbFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGBWYXJpYW50IChrLCBTb21lIHYpIGFzIHYxIC0+XG4gICAgICAgIGxldCB2JyA9IHNvcnQgdiBpbiBpZiB2JyA9PSB2IHRoZW4gdjEgZWxzZSBgVmFyaWFudCAoaywgU29tZSB2JylcbiAgICAgIHwgZWwgLT4gIGVsXG4gIGVuZFxuXG5lbmRcblxubW9kdWxlIFN0cmljdCA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uU3RyaWN0Lmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5kZWQgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkV4dGVuZGVkLmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuRXh0ZW5kZWQoTSlcbmVuZFxuXG5tb2R1bGUgWW9qc29uX3NhZmUgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPVxuICAgICAgW1xuICAgICAgfCBgTnVsbFxuICAgICAgfCBgQm9vbCBvZiBib29sXG4gICAgICB8IGBJbnQgb2YgaW50XG4gICAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgICAgfCBgU3RyaW5nIG9mIHN0cmluZ1xuICAgICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgICAgXVxuXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuICBpbmNsdWRlIEludGVybmFsLkV4dGVuZGVkKE0pXG5lbmRcbiIsImxldCB0b2tlbl90b19zdHJpbmcgKHRvazpUb2tlbnMudG9rZW4pID1cbiAgbWF0Y2ggdG9rIHdpdGhcbiAgfCBTVFJJTkcgcyAtPiBzXG4gIHwgT1MgLT4gXCJ7XCJcbiAgfCBPRSAtPiBcIn1cIlxuICB8IE5VTEwgLT4gXCJOdWxsXCJcbiAgfCBORUdJTkZJTklUWSAtPiBcIi1JbmZpbml0eVwiXG4gIHwgTkFOIC0+IFwiTkFOXCJcbiAgfCBMRVhfRVJST1IgZXJyIC0+IFwiaW5wdXQgZXJyb3IgJ1wiIF4gZXJyIF4gXCInXCJcbiAgfCBMQVJHRUlOVCBzIC0+IHNcbiAgfCBJTlQgaSAtPiBzdHJpbmdfb2ZfaW50IGlcbiAgfCBJTkZJTklUWSAtPiBcIkluZmluaXR5XCJcbiAgfCBGTE9BVCBmIC0+IHN0cmluZ19vZl9mbG9hdCBmXG4gIHwgRU9GIC0+IFwiZW5kLW9mLWZpbGVcIlxuICB8IENPTVBMSUFOQ0VfRVJST1IgZXJyIC0+IGVyclxuICB8IENPTU1BIC0+IFwiLFwiXG4gIHwgQ09MT04gLT4gXCI6XCJcbiAgfCBCT09MIGIgLT4gaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG4gIHwgQVMgLT4gXCJbXCJcbiAgfCBBRSAtPiBcIl1cIlxuICB8IFZTIC0+IFwiPFwiXG4gIHwgVkUgLT4gXCI+XCJcbiAgfCBUUyAtPiBcIihcIlxuICB8IFRFIC0+IFwiKVwiXG4iLCJtb2R1bGUgdHlwZSBSZWFkZXJfc3RyaW5nX2ZpbGUgPSBzaWdcbiAgdHlwZSBqc29uXG5cbiAgdmFsIGpzb25fb2Zfc3RyaW5nIDogc3RyaW5nIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9zdHJpbmdfZXhuIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZmlsZSA6IHN0cmluZyAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9leG4gOiBzdHJpbmcgLT4ganNvblxuICB2YWwganNvbl9vZl9jaGFubmVsIDogaW5fY2hhbm5lbCAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfY2hhbm5lbF9leG4gOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uX2V4biA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uXG4gIHZhbCBqc29uX29mX2xleGJ1ZiA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9leG4gOiBMZXhpbmcubGV4YnVmIC0+IGpzb25cbiAgdmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBvZl9maWxlIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIG9mX2NoYW5uZWwgOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIG9mX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb25cblxuICB2YWwganNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIDogc3RyaW5nIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gOiBpbl9jaGFubmVsIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mbyA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA6ID9zdHJlYW06Ym9vbCAtPiBMZXhpbmcubGV4YnVmIC0+IChqc29uIG9wdGlvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2NoYW5uZWwgOiA/ZmluOih1bml0IC0+IHVuaXQpIC0+IGluX2NoYW5uZWwgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZmlsZSA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9sZXhidWYgOiBMZXhpbmcubGV4YnVmIC0+IGpzb24gU3RyZWFtLnRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIDogP2ZpbjoodW5pdCAtPiB1bml0KSAtPiBpbl9jaGFubmVsIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uIFN0cmVhbS50XG5lbmRcblxubW9kdWxlIE1ha2UgKExleHhlciA6IENvbXBsaWFudF9sZXh4ZXIuTGV4ICkgKFBhcnNlciA6IFBhcnNlci5QYXJzZXIpIDogUmVhZGVyX3N0cmluZ19maWxlXG4gIHdpdGggdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuPSBzdHJ1Y3RcbiAgdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuXG4gIGxldCByZWFkX2pzb24nIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgIHwgT2sgTm9uZSAtPiBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEVPRiAtPiBPayByZXNcbiAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgfCB0b2sgLT4gRXJyb3IgKFwianVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTogXCIgXiAoVG9rZW5fdXRpbHMudG9rZW5fdG9fc3RyaW5nIHRvaykpXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuXG4gIGxldCByZWFkX2pzb24gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIHMgaW5cbiAgICAgIEVycm9yIChFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbylcblxuICBsZXQganNvbl9vZl9zdHJpbmcgcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9zdHJpbmdfZXhuIHMgPVxuICAgIG1hdGNoIGpzb25fb2Zfc3RyaW5nIHMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBvZl9zdHJpbmcgcyA9IGpzb25fb2Zfc3RyaW5nX2V4biBzXG5cbiAgbGV0IGpzb25fb2ZfZmlsZSBmaWxlbmFtZSA9XG4gICAgdHJ5IGJlZ2luXG4gICAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgICBsZXQgcmVzID0gcmVhZF9qc29uIH5sZXhidWYgaW5cbiAgICAgICAgY2xvc2VfaW4gaW5jO1xuICAgICAgICByZXNcbiAgICBlbmRcbiAgICB3aXRoIFN5c19lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9leG4gZmlsZW5hbWUgPVxuICAgIG1hdGNoIGpzb25fb2ZfZmlsZSBmaWxlbmFtZSB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbCBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbF9leG4gaW5jID1cbiAgICBtYXRjaCBqc29uX29mX2NoYW5uZWwgaW5jIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbiBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXhuIGxleGJ1ZiA9XG4gICAgbWF0Y2gganNvbl9vZl9sZXhidWYgbGV4YnVmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9leG4gZiA9XG4gICAgbWF0Y2gganNvbl9vZl9mdW5jdGlvbiBmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQgb2ZfZmlsZSA9IGpzb25fb2ZfZmlsZV9leG5cbiAgbGV0IG9mX2NoYW5uZWwgPSBqc29uX29mX2NoYW5uZWxfZXhuXG4gIGxldCBvZl9mdW5jdGlvbiA9IGpzb25fb2ZfZnVuY3Rpb25fZXhuXG5cbiAgKCogRXJyb3JfaW5mby50IHJldHVybmluZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG4gIGxldCBqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lID1cbiAgICB0cnkgYmVnaW5cbiAgICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgICBsZXQgcmVzID0ganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jIGluXG4gICAgICAgIGNsb3NlX2luIGluYztcbiAgICAgICAgcmVzXG4gICAgZW5kXG4gICAgd2l0aCBTeXNfZXJyb3IgZXJyIC0+IEVycm9yIHsgRXJyb3JfaW5mby5saW5lID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDsgbXNnID0gZXJyIH1cblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gICgqIEludGVybmFsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb24gc3VwcG9ydGluZyB0aGUgc3RyZWFtIGZsYWcgKilcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgPyhzdHJlYW0gPSBmYWxzZSkgbGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IHJlcyA9IG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgfCBPayBOb25lIC0+IGlmIHN0cmVhbSB0aGVuIE9rIE5vbmUgZWxzZSBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHN0cmVhbSB3aXRoXG4gICAgICB8IHRydWUgLT4gT2sgKFNvbWUgcmVzKVxuICAgICAgfCBmYWxzZSAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IEVPRiAtPiBPayAoU29tZSByZXMpXG4gICAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgICB8IHRvayAtPiBFcnJvciAoXCJqdW5rIGFmdGVyIGVuZCBvZiBKU09OIHZhbHVlOiBcIiBeIChUb2tlbl91dGlscy50b2tlbl90b19zdHJpbmcgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgIGluXG4gICAgbWF0Y2ggcmVzIHdpdGhcbiAgICB8IE9rIHJlcyAtPiBPayByZXNcbiAgICB8IEVycm9yIHMgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBzIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG5cbiAgKCogU3RyZWFtLnQgcmV0dXJuaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtIH5maW4gfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgICB8IE9rIE5vbmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IE9rIChTb21lIHJlcykgLT4gU29tZSByZXNcbiAgICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIGxldCAoKSA9IGZpbiAoKSBpblxuICAgICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICAgIGxldCBtc2cgPSBFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbyBpblxuICAgICAgICByYWlzZSAoRmFpbHVyZSBtc2cpXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID8oZmluID0gZnVuICgpIC0+ICgpKSBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpbmMpIGluY1xuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWYgbGV4YnVmID1cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gICgqIFN0cmVhbS50IEpzb25fZXJyb3JfaW5mbyByYWlzaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICAgIHwgT2sgTm9uZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBTb21lIHJlc1xuICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgbGV0ICgpID0gZmluICgpIGluXG4gICAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgICAgcmFpc2UgKEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uX2Vycm9yX2luZm8gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGluYykgaW5jXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG5lbmRcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIGpzb25fdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19maWxlX2V4biA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbCA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2V4biA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW1fZXhuIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bSA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bV9leG4gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19jaGFubmVsIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fY2hhbm5lbF9odW0gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogSW50ZiA9IHN0cnVjdFxuXG4gIGxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxuICBsZXQgYWRkX2hleF9ieXRlIG9jIGkgPVxuICAgIG91dHB1dF9jaGFyIG9jIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gICAgb3V0cHV0X2NoYXIgb2MgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIG9jIHMgPVxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSBvYyAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfZm10IG9jIGpzb24gfmVvbCB+aW5jciB+cHNlcCA9IFxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBvYyBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcHNlcCA9IFwiOlwiIF4gcHNlcCBpblxuICAgIGxldCByZWMgZm10IG9mZiB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICd7JzsgYWRkX3N0cmluZyBlb2w7IGpzb25fYXNzb2MgKG9mZiArIGluY3IpIG87XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJ1snOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSBsO1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJygnOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSB0O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICc8JzsgYWRkX3N0cmluZyBlb2w7ICB2YXJpYW50IChvZmYgKyBpbmNyKSB2O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIG9mZiBvID1cbiAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFwiIF4gZW9sIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgcGFpciBvZmYgdiApIG9cbiAgICBhbmQgcGFpciBvZmYgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfc3RyaW5nIHBzZXA7IGZtdCBvZmYgdlxuICAgIGFuZCBqc29uX2xpc3Qgb2ZmIGwgPVxuICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXCIgXiBlb2wgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBmbXQgb2ZmIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgb2ZmIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgcHNlcDsgZm10IChvZmYgKyBpbmNyKSBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCAwIGpzb247XG4gICAgYWRkX3N0cmluZyBlb2xcblxuICBsZXQganNvbl90b19jaGFubmVsJyA9IGpzb25fdG9fY2hhbm5lbF9mbXQgfmVvbDpcIlwiIH5pbmNyOjAgfnBzZXA6XCJcIlxuICBsZXQganNvbl90b19jaGFubmVsX2h1bScgPSBqc29uX3RvX2NoYW5uZWxfZm10IH5lb2w6XCJcXG5cIiB+aW5jcjoyIH5wc2VwOlwiIFwiXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fY2hhbm5lbCcgb2MganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW0gb2MganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2NoYW5uZWxfaHVtJyBvYyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19jaGFubmVsX2V4biA9IGpzb25fdG9fY2hhbm5lbCdcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW1fZXhuID0ganNvbl90b19jaGFubmVsX2h1bSdcblxuICBsZXQganNvbl90b19maWxlIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIGxldCByZXMgPSBqc29uX3RvX2NoYW5uZWwgb2MganNvbiBpblxuICAgIGNsb3NlX291dCBvYztcbiAgICByZXNcblxuICBsZXQganNvbl90b19maWxlX2h1bSBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICBsZXQgcmVzID0ganNvbl90b19jaGFubmVsX2h1bSBvYyBqc29uIGluXG4gICAgY2xvc2Vfb3V0IG9jO1xuICAgIHJlc1xuXG4gIGxldCBqc29uX3RvX2ZpbGVfZXhuIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoanNvbl90b19jaGFubmVsJyBvYyBqc29uOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCBqc29uX3RvX2ZpbGVfaHVtX2V4biBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKGpzb25fdG9fY2hhbm5lbF9odW0nIG9jIGpzb247IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHRvX2ZpbGUgPSBqc29uX3RvX2ZpbGVfZXhuXG4gIGxldCB0b19maWxlX2h1bSA9IGpzb25fdG9fZmlsZV9odW1fZXhuXG4gIGxldCB0b19jaGFubmVsID0ganNvbl90b19jaGFubmVsX2V4blxuICBsZXQgdG9fY2hhbm5lbF9odW0gPSBqc29uX3RvX2NoYW5uZWxfaHVtX2V4blxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCBvYyBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiBqc29uX3RvX2NoYW5uZWxfZXhuIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgZmlsZSBzdHJlYW0gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKHN0cmVhbV90b19jaGFubmVsIG9jIHN0cmVhbTsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cbmVuZFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwganNvbl90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IChzdHJpbmcsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX3N0cmluZ19leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHN0cmluZywgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bV9leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBqc29uX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9leG4gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2h1bSA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9odW1fZXhuIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2J1ZmZlcl9odW0gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHN0cmluZ1xuICB2YWwgc3RyZWFtX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IEludGYgPSBzdHJ1Y3RcblxuICBsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbiAgbGV0IGFkZF9oZXhfYnl0ZSBidWYgaSA9XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIGJ1ZiBzID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIGJ1ZiAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT4gYWRkX2NoYXIgJ3snOyBqc29uX2Fzc29jIG87IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+IGFkZF9jaGFyICdbJzsganNvbl9saXN0IGw7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT4gYWRkX2NoYXIgJygnOyBqc29uX2xpc3QgdDsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT4gYWRkX2NoYXIgJzwnOyAgdmFyaWFudCB2OyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBvID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBwYWlyIHYgKSBvXG4gICAgYW5kIHBhaXIgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfY2hhciAnOic7IGZtdCB2XG4gICAgYW5kIGpzb25fbGlzdCBsID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBmbXQgdiApIGxcbiAgICBhbmQgdmFyaWFudCAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfY2hhciAnOic7IGZtdCBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCBqc29uXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bScgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IGxkciB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJ7XFxuXCI7IGpzb25fYXNzb2MgKGxkciBeIFwiICBcIikgbztcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiW1xcblwiOyBqc29uX2xpc3QgKGxkciBeIFwiICBcIikgbDtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCIoXFxuXCI7IGpzb25fbGlzdCAobGRyIF4gXCIgIFwiKSB0O1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCI8XCI7ICB2YXJpYW50IChsZHIgXiBcIiAgXCIpIHY7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2MgbGRyIG8gPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IHBhaXIgbGRyIHYgKSBvXG4gICAgYW5kIHBhaXIgbGRyIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX3N0cmluZyBcIjogXCI7IGZtdCBsZHIgdlxuICAgIGFuZCBqc29uX2xpc3QgbGRyIGwgPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IGZtdCBsZHIgIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgbGRyIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgXCI6IFwiOyBmbXQgKGxkciBeIFwiICBcIikgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQgXCJcIiBqc29uO1xuICAgIGFkZF9jaGFyICdcXG4nXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nJyBqc29uID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb247XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBqc29uX3RvX3N0cmluZyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nJyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19idWZmZXIgYnVmIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19idWZmZXInIGJ1ZiBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19zdHJpbmdfZXhuID0ganNvbl90b19zdHJpbmcnXG4gIGxldCB0b19zdHJpbmcgPSBqc29uX3RvX3N0cmluZydcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2V4biA9IGpzb25fdG9fYnVmZmVyJ1xuICBsZXQgdG9fYnVmZmVyID0ganNvbl90b19idWZmZXInXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bScganNvbiA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAganNvbl90b19idWZmZXJfaHVtJyBidWYganNvbjtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bSBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nX2h1bScganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bSBidWYganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW1fZXhuID0ganNvbl90b19zdHJpbmdfaHVtJ1xuICBsZXQgdG9fc3RyaW5nX2h1bSA9IGpzb25fdG9fc3RyaW5nX2h1bSdcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bV9leG4gPSBqc29uX3RvX2J1ZmZlcl9odW0nXG4gIGxldCB0b19idWZmZXJfaHVtID0ganNvbl90b19idWZmZXJfaHVtJ1xuXG4gIGxldCBzdHJlYW1fdG9fc3RyaW5nIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2J1ZmZlciBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fYnVmZmVyIGJ1ZiBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19idWZmZXIgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG5lbmRcbiIsImV4Y2VwdGlvbiBKc29uX2Vycm9yIG9mIHN0cmluZ1xuXG5sZXQganNvbl9lcnJvciBtc2cgPSByYWlzZSAoSnNvbl9lcnJvciBtc2cpXG5cbnR5cGUgbGV4ZXJfc3RhdGUgPSB7XG4gIGJ1ZiA6IEJ1ZmZlci50O1xuICBtdXRhYmxlIGxudW0gOiBpbnQ7XG4gIG11dGFibGUgYm9sIDogaW50O1xuICBtdXRhYmxlIGZuYW1lIDogc3RyaW5nIG9wdGlvbjtcbn1cblxubGV0IGluaXRfbGV4ZXIgP2J1ZjpfID9mbmFtZSA/KGxudW0gPSAxKSAoKSA9XG4gIHtcbiAgICBidWYgPSBCdWZmZXIuY3JlYXRlIDE2ICAoKiB1bnVzZWQgKilcbiAgOyBsbnVtID0gbG51bVxuICA7IGJvbCA9IDBcbiAgOyBmbmFtZSA9IGZuYW1lXG4gIH1cblxubW9kdWxlIENvbW1vbl9yZWFkZXIgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIG1vZHVsZSBJbnRlcm5hbF9yZWFkZXIgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgTGV4eGVyID0gQ29tcGxpYW50X2xleHhlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgbW9kdWxlIFBhcnNlciA9IFBhcnNlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBSZWFkZXJfc3RyaW5nX2ZpbGUuTWFrZSAoTGV4eGVyKSAoUGFyc2VyKVxuICBlbmRcblxuICB0eXBlIGpzb24gPSBJbnRlcm5hbF9yZWFkZXIuanNvblxuICB0eXBlIHQgPSBqc29uXG4gIHR5cGUganNvbl9saW5lID0gWyBgSnNvbiBvZiB0IHwgYEV4biBvZiBleG4gXVxuXG4gICgqIEhlbHBlciBmdW5jdGlvbnMgKilcbiAgbGV0IGVycm9yX3RvX3N0cmluZyAoZXJyb3JfaW5mbzpFcnJvcl9pbmZvLnQpIGZuYW1lIGxudW0gPVxuICAgIGxldCBsbnVtID0gbWF0Y2ggbG51bSB3aXRoIFNvbWUgbG51bSAtPiBsbnVtIHwgTm9uZSAtPiAxIGluXG4gICAgbGV0IGluZm8gPSB7IGVycm9yX2luZm8gd2l0aCBsaW5lID0gbG51bSArIGVycm9yX2luZm8ubGluZSAtIDEgfSBpblxuICAgIGxldCBmbmFtZSA9IG1hdGNoIGZuYW1lIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBcIkxpbmVcIlxuICAgICAgfCBTb21lIG5hbWUgLT4gXCJGaWxlIFwiIF4gbmFtZSBeIFwiLCBsaW5lXCJcbiAgICBpblxuICAgIGxldCBsb2MgPSBQcmludGYuc3ByaW50ZiBcIiVzICVkIGNoYXJzICVkLSVkOiBcIiBmbmFtZSBpbmZvLmxpbmUgaW5mby5zdGFydF9jaGFyIGluZm8uZW5kX2NoYXIgaW5cbiAgICBsb2MgXiBpbmZvLm1zZ1xuXG4gIGxldCBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBmIGEgZm5hbWUgbG51bSA9XG4gICAgbWF0Y2ggZiBhIHdpdGhcbiAgICB8IE9rIGpzb24gLT4ganNvblxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gICgqIFJlYWRlcnMgKilcbiAgbGV0IGZyb21fc3RyaW5nID9idWY6XyA/Zm5hbWUgP2xudW0gcyA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gcyBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fY2hhbm5lbCA/YnVmOl8gP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9maWxlID9idWY6XyA/Zm5hbWUgP2xudW0gZmlsZW5hbWUgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fbGV4YnVmIGxleHN0YXRlID9zdHJlYW0gbGV4YnVmID1cbiAgICBsZXQgZm5hbWUgPSBsZXhzdGF0ZS5mbmFtZSBpblxuICAgIGxldCBsbnVtID0gU29tZSBsZXhzdGF0ZS5sbnVtIGluXG4gICAgbWF0Y2ggSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0ID9zdHJlYW0gbGV4YnVmIHdpdGhcbiAgICB8IE9rIChTb21lIGpzb24pIC0+IGpzb25cbiAgICB8IE9rIE5vbmUgLT4ganNvbl9lcnJvciBcIkJsYW5rIGlucHV0IGRhdGFcIlxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gIGxldCByZWFkX3QgbGV4c3RhdGUgbGV4YnVmID0gZnJvbV9sZXhidWYgbGV4c3RhdGUgbGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBzdHJlYW1fZiBhIGZuYW1lIGxudW0gPVxuICAgIGxldCBzdHJlYW0gPSBzdHJlYW1fZiBhIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggU3RyZWFtLm5leHQgc3RyZWFtIHdpdGhcbiAgICAgIHwgdiAtPiBTb21lIHZcbiAgICAgIHwgZXhjZXB0aW9uIFN0cmVhbS5GYWlsdXJlIC0+IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJfaW5mbyBmbmFtZSBsbnVtKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmcgP2J1ZjpfID9mbmFtZSA/bG51bSBzID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIHMgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyAoSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyB+ZmluKSBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSA/YnVmOl8gP2ZuYW1lID9sbnVtIGZpbGVuYW1lID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1ZiBsZXhzdGF0ZSA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgbGV4YnVmID1cbiAgICBsZXQgc3RyZWFtID0gSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFN0cmVhbS5uZXh0IHN0cmVhbSB3aXRoXG4gICAgICB8IHYgLT4gU29tZSB2XG4gICAgICB8IGV4Y2VwdGlvbiBTdHJlYW0uRmFpbHVyZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGZpbiAoKTsganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycl9pbmZvIGxleHN0YXRlLmZuYW1lIChTb21lIGxleHN0YXRlLmxudW0pKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID8obG51bSA9IDEpIGljID1cbiAgICBsZXQgZiBpID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgbG51bSA9IGxudW0gKyBpIGluXG4gICAgICAgIGxldCBsaW5lID0gaW5wdXRfbGluZSBpYyBpbiBTb21lIChgSnNvbiAoZnJvbV9zdHJpbmcgP2ZuYW1lIH5sbnVtIGxpbmUpKVxuICAgICAgd2l0aFxuICAgICAgICB8IEVuZF9vZl9maWxlIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgICB8IGV4bl8gLT4gZmluICgpOyBTb21lIChgRXhuIGV4bl8pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9maWxlID9idWY6XyA/Zm5hbWU6XyA/bG51bTpfIGZpbGVuYW1lID1cbiAgICBsZXQgaWMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgbGluZXN0cmVhbV9mcm9tX2NoYW5uZWwgfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGljKSBpY1xuZW5kXG5cbm1vZHVsZSBDb21tb25fd3JpdGVyIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBtb2R1bGUgSW50ZXJuYWxfd3JpdGVyID0gc3RydWN0XG4gICAgaW5jbHVkZSBXcml0ZXJfc3RyaW5nLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFdyaXRlcl9maWxlLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFByZXR0eS5NYWtlKENvbXBsaWFuY2UpXG4gIGVuZFxuXG4gIGxldCB0b19zdGFuZGFyZCBqc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2ICAoKiBpbnQgaXMgb2sgb24gb3V0cHV0ICopXG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBGbG9hdGxpdCB2IC0+IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHYpXG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIFN0cmluZy5sZW5ndGggcyB3aXRoXG4gICAgICAgIHwgMCB8IDEgLT4gYFN0cmluZyBzICAgICAgICAgKCogbWFsZm9ybWVkLCBzaG91bGQgaGF2ZSBkb3VibGUtcXVvdGVzIGF0IHN0YXJ0IGFuZCBlbmQgKilcbiAgICAgICAgfCBfIC0+IGBTdHJpbmcgKFN0cmluZy5zdWIgcyAxIChTdHJpbmcubGVuZ3RoIHMgLSAyKSlcbiAgICAgICAgZW5kXG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCBsKVxuICAgICAgfCBgQXNzb2MgYSAtPiBgQXNzb2MgKExpc3QubWFwIChmdW4gKGlkLCB2KSAtPiAoaWQsIG1hcCB2KSkgYSlcbiAgICAgIHwgYFR1cGxlIHRwbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIHRwbClcbiAgICAgIHwgYFZhcmlhbnQgKG5hbWUsIGpvcHQpIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBqb3B0IHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBgU3RyaW5nIG5hbWVcbiAgICAgICAgIHwgU29tZSB2IC0+IGBMaXN0IFsgYFN0cmluZyBuYW1lOyAobWFwIHYpIF1cbiAgICAgICAgZW5kXG4gICAgaW5cbiAgICBtYXAganNvblxuXG4gICgqIFdyaXRlcnMgKilcblxuICBsZXQgdG9fc3RyaW5nID9idWY6XyA/bGVuOl8gPyhzdGQgPSBmYWxzZSkganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX3N0cmluZyAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fc3RyaW5nIGpzb25cblxuICBsZXQgdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID8oc3RkID0gZmFsc2UpIG91dF9jaGFubmVsIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19jaGFubmVsIG91dF9jaGFubmVsICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2NoYW5uZWwgb3V0X2NoYW5uZWwganNvblxuXG4gIGxldCB0b19maWxlID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBmaWxlbmFtZSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fZmlsZSBmaWxlbmFtZSAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci50b19maWxlIGZpbGVuYW1lIGpzb25cblxuICBsZXQgdG9fb3V0YnVmID8oc3RkID0gZmFsc2UpIGJ1ZiBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiBqc29uXG5cbiAgbGV0IHRvX291dHB1dCA/YnVmOl8gP2xlbjpfID9zdGQgb3V0IGpzb24gPVxuICAgIGxldCBzdHIgPSB0b19zdHJpbmcgP3N0ZCBqc29uIGluXG4gICAgb3V0I291dHB1dCBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IHN0cmVhbV90b19zdHJpbmcgP2J1ZjpfID9sZW46XyA/c3RkIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXJcbiAgICAgIChmdW4ganNvbiAtPiB0b19vdXRidWYgP3N0ZCBidWYganNvbjsgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID9zdGQgb2Mgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fY2hhbm5lbCA/c3RkIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgP2xlbjpfID9zdGQgZmlsZW5hbWUgc3RyZWFtID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlbmFtZSBpblxuICAgIHRyeSAoc3RyZWFtX3RvX2NoYW5uZWwgP3N0ZCBvYyBzdHJlYW07IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHN0cmVhbV90b19vdXRidWYgP3N0ZCBidWYgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fb3V0YnVmID9zdGQgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCB3cml0ZV90IGJ1ZiBqc29uID0gdG9fb3V0YnVmIGJ1ZiBqc29uXG5cbiAgKCogUHJldHR5IHByaW50ZXJzICopXG4gIGxldCBwcmV0dHlfcHJpbnQgPyhzdGQgPSBmYWxzZSkgb3V0IGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnQgb3V0ICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludCBvdXQganNvblxuXG4gIGxldCBwcmV0dHlfdG9fc3RyaW5nID8oc3RkID0gZmFsc2UpIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fc3RyaW5nICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19zdHJpbmcganNvblxuXG4gIGxldCBwcmV0dHlfdG9fY2hhbm5lbCA/KHN0ZCA9IGZhbHNlKSBvYyBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MganNvblxuXG4gICgqIFV0aWxpdGllcyAqKVxuICBsZXQgc2hvdyBqc29uID0gVXRpbGl0aWVzLmpzb25fdG9fc3RyaW5nX3JlcHIganNvblxuICBsZXQgcHAgb3V0IGpzb24gPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoc2hvdyBqc29uKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5CYXNpYy5qc29uXG5cbiAgICBvcGVuIFRva2Vuc1xuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgc1xuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgXyA9IENPTVBMSUFOQ0VfRVJST1IgXCJJbnRlZ2VyIG91dCBvZiBib3VuZHNcIlxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSBmYWxzZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IGZhbHNlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnQgaVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nIHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBfbCA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICBsZXQgdmFyaWFudCBfbCA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0IGZcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXQgKDEuMCAvLiAwLjApXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0ICgtMS4wIC8uIDAuMClcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXQgKDAuMCAvLiAwLjApXG4gICAgfCBgRmxvYXRsaXQgXyAtPiAgcmFpc2UgKEZhaWx1cmUgXCJmbG9hdGxpdCBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuQmFzaWMuc29ydFxuXG4gIG1vZHVsZSBVdGlsID0gc3RydWN0XG4gICAgaW5jbHVkZSBQcm9jZXNzLkJhc2ljXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBTYWZlID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG4gICAgdHlwZSBqc29uID1cbiAgICAgIFtcbiAgICAgIHwgYE51bGxcbiAgICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgICAgfCBgSW50IG9mIGludFxuICAgICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgICAgfCBgRmxvYXQgb2YgZmxvYXRcbiAgICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICAoKiB5b2pzb24gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nICopXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCB0b2tlbiA9IHRva2VuXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IHRydWVcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSB0cnVlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBJbnRsaXQgc1xuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50IGlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZyBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgbCA9IGBUdXBsZSBsXG4gICAgbGV0IHZhcmlhbnQgayB2ID0gYFZhcmlhbnQgKGssIHYpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXQgZlxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdCAoMS4wIC8uIDAuMClcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXQgKC0xLjAgLy4gMC4wKVxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdCAoMC4wIC8uIDAuMClcbiAgICB8IGBGbG9hdGxpdCBfIC0+ICByYWlzZSAoRmFpbHVyZSBcImZsb2F0bGl0IG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIHNhZmUgbW9kZVwiKVxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5cbiAgbGV0IHRvX2Jhc2ljIGpzb24gOiBCYXNpYy5qc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIGwpXG4gICAgICB8IGBBc3NvYyBhIC0+IGBBc3NvYyAoTGlzdC5tYXAgKGZ1biAoaWQsIHYpIC0+IChpZCwgbWFwIHYpKSBhKVxuICAgICAgfCBgVHVwbGUgdHBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgdHBsKVxuICAgICAgfCBgVmFyaWFudCAobmFtZSwgam9wdCkgLT5cbiAgICAgICAgIG1hdGNoIGpvcHQgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IGBTdHJpbmcgbmFtZVxuICAgICAgICAgfCBTb21lIHYgLT4gYExpc3QgWyBgU3RyaW5nIG5hbWU7IChtYXAgdikgXVxuICAgIGluXG4gICAgbWFwIGpzb25cblxuICBtb2R1bGUgVXRpbCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgUHJvY2Vzcy5Zb2pzb25fc2FmZVxuICBlbmRcbmVuZFxuXG5tb2R1bGUgUmF3ID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG5cbiAgdHlwZSBqc29uID1cbiAgICBbXG4gICAgfCBgTnVsbFxuICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICB8IGBGbG9hdGxpdCBvZiBzdHJpbmdcbiAgICB8IGBTdHJpbmdsaXQgb2Ygc3RyaW5nXG4gICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICgqIHlvanNvbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgKilcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBcIlxcXCJcIiBeIHMgXiBcIlxcXCJcIlxuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgdG9rZW4gPSB0b2tlblxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSB0cnVlXG4gICAgbGV0IGxleF90dXBsZSBfID0gdHJ1ZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgSW50bGl0IHNcbiAgICBsZXQgaW50ZWdlciBpID0gYEludGxpdCAoc3RyaW5nX29mX2ludCBpKVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nbGl0IHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBsID0gYFR1cGxlIGxcbiAgICBsZXQgdmFyaWFudCBrIHYgPSBgVmFyaWFudCAoaywgdilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdGxpdCAoc3RyaW5nX29mX2Zsb2F0IGYpXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0bGl0IFwiSW5maW5pdHlcIlxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdGxpdCBcIi1JbmZpbml0eVwiXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0bGl0IFwiTmFOXCJcbiAgICB8IGBGbG9hdGxpdCBmIC0+ICBgRmxvYXRsaXQgZlxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5lbmRcbiIsImluY2x1ZGUgQ29udGFpbmVyc0xhYmVsc1xuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG4gIG1vZHVsZSBTZXQgPSBTZXQuTWFrZSAoU3RyaW5nKVxuZW5kXG5cbm1vZHVsZSBZb2pzb24gPSBzdHJ1Y3RcbiAgaW5jbHVkZSBKc29ueHQuWW9qc29uXG5lbmRcblxubW9kdWxlIEVuY29kaW5ncyA9IHN0cnVjdFxuICBsZXQgdG9fanN0ciB0ID0gSnYucmVwciB0IHw+IEJyci5Kc29uLmVuY29kZVxuICBsZXQgdG9fanYgdCA9IHRvX2pzdHIgdCB8PiBKdi5vZl9qc3RyXG5cbiAgbGV0IG9mX2pzdHIganN0ciA9XG4gICAgbWF0Y2ggQnJyLkpzb24uZGVjb2RlIGpzdHIgd2l0aFxuICAgIHwgT2sgdiAtPiBPayAoT2JqLm1hZ2ljIHYpXG4gICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgQnJyLkNvbnNvbGUuZXJyb3IgWyBlcnIgXTtcbiAgICAgICAgRXJyb3IgKGBNc2cgXCJGYWlsZWQgdG8gdW5tYXJzaGFsIGRhdGFcIilcblxuICBsZXQgb2ZfanYganYgPSBKdi50b19qc3RyIGp2IHw+IG9mX2pzdHJcbmVuZFxuXG5sZXQgcmFuZG9tX3N0YXRlID0gUmFuZG9tLmdldF9zdGF0ZSAoKVxubGV0IG5ld191dWlkX3Y0ICgpID0gVXVpZG0udjRfZ2VuIHJhbmRvbV9zdGF0ZSAoKVxuXG4oKiogW3RlZSBmIHhdIGFwcGxpZXMgW2ZdIHRvIFt4XSBhbmQgcmV0dXJucyBbeF0gKilcbmxldCB0ZWUgZiB4ID1cbiAgbGV0ICgpID0gZiB4IGluXG4gIHhcbiIsIm9wZW4gU3RkXG5cbm1vZHVsZSBDbGFzc2VzID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nLlNldFxuXG4gIHR5cGUgbm9ucmVjIHQgPSB0XG4gIHR5cGUgbW9kaWZpZXIgPSBBZGQgb2Ygc3RyaW5nIGxpc3QgfCBSZXBsYWNlIG9mIHN0cmluZyBsaXN0XG5cbiAgbGV0IG1ha2UgbCA9IG9mX2xpc3QgbFxuICBsZXQgdXBkYXRlIHQgPSBmdW5jdGlvbiBBZGQgbCAtPiBhZGRfbGlzdCB0IGwgfCBSZXBsYWNlIGwgLT4gb2ZfbGlzdCBsXG5cbiAgbGV0IHRvX3N0cmluZyB0ID1cbiAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4gYyAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgICAgUHJpbnRmLmJwcmludGYgYiBcIiVzXCIgYylcbiAgICAgICAgZWxzZSBQcmludGYuYnByaW50ZiBiIFwiICVzXCIgYylcbiAgICAgIHQ7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcblxuICBsZXQgYXRfb2Zfc3RyaW5nIGMgPSBCcnIuQXQuY2xhc3MnIEBAIEpzdHIudiBjXG5cbiAgbW9kdWxlIFAgPSBzdHJ1Y3RcbiAgICBsZXQgdG9fYXQgdCA9XG4gICAgICBMaXN0Lm1hcCAodG9fbGlzdCB0KSB+ZjooZnVuIGMgLT4gYFAgKEJyci5BdC5jbGFzcycgQEAgSnN0ci52IGMpKVxuICBlbmRcbmVuZFxuXG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgdCA9IHsgY2xhc3NlcyA6IENsYXNzZXMudDsgYXR0cnMgOiBBdC50IEVsd2QuY29sIH1cbigqKiBDbGFzc2VzIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBidXQgYXJlIGV2ZW50dWFsbHkgdHJhbnNsYXRlZCB0byBBdC50ICopXG5cbmxldCBlbXB0eSA9IHsgY2xhc3NlcyA9IENsYXNzZXMuZW1wdHk7IGF0dHJzID0gW10gfVxuXG5sZXQgdG9fYXQgP2lkIHQgPVxuICBsZXQgYXQgPSBMaXN0LnJldl9hcHBlbmQgdC5hdHRycyBAQCBDbGFzc2VzLlAudG9fYXQgdC5jbGFzc2VzIGluXG4gIG1hdGNoIGlkIHdpdGggTm9uZSAtPiBhdCB8IFNvbWUgaWQgLT4gYFAgKEF0LmlkIChKc3RyLnYgaWQpKSA6OiBhdFxuXG5sZXQgY2xhc3NlcyBsID0geyBlbXB0eSB3aXRoIGNsYXNzZXMgPSBDbGFzc2VzLm9mX2xpc3QgbCB9XG5cbmxldCB1bmlvbiB7IGNsYXNzZXM7IGF0dHJzIH0geyBjbGFzc2VzID0gYzsgYXR0cnMgPSBhIH0gPVxuICB7IGNsYXNzZXMgPSBDbGFzc2VzLnVuaW9uIGNsYXNzZXMgYzsgYXR0cnMgPSBMaXN0LnJldl9hcHBlbmQgYXR0cnMgYSB9XG5cbm1vZHVsZSBCdWlsZGVyID0gc3RydWN0XG4gIHR5cGUgYXQgPSBDIG9mIHN0cmluZyB8IEF0IG9mIEF0LnRcblxuICBsZXQgKCArICkgdCA9IGZ1bmN0aW9uXG4gICAgfCBDIGNsYXNzbmFtZSAtPlxuICAgICAgICBsZXQgY2xhc3NlcyA9IENsYXNzZXMuYWRkIGNsYXNzbmFtZSB0LmNsYXNzZXMgaW5cbiAgICAgICAgeyB0IHdpdGggY2xhc3NlcyB9XG4gICAgfCBBdCBhdCAtPlxuICAgICAgICBsZXQgYXR0cnMgPSBgUCBhdCA6OiB0LmF0dHJzIGluXG4gICAgICAgIHsgdCB3aXRoIGF0dHJzIH1cblxuICBsZXQgd2l0aF9pZCBzIHQgPVxuICAgIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICAgIHRvX2F0IHsgdCB3aXRoIGF0dHJzIH1cbmVuZFxuXG4oKiBuZXcgQVBJICopXG5cbmxldCBhZGQgYXRfbmFtZSB2IGF0ID1cbiAgbGV0IGEgPVxuICAgIG1hdGNoIHYgd2l0aFxuICAgIHwgYFAgdiAtPiBgUCAoQXQudiBhdF9uYW1lIEBAIEpzdHIudiB2KVxuICAgIHwgYFIgdiAtPiBgUiAoTHdkLm1hcCB2IH5mOihmdW4gdiAtPiBBdC52IGF0X25hbWUgQEAgSnN0ci52IHYpKVxuICAgIHwgYFMgXyAtPiBmYWlsd2l0aCBcIlRPRE8gbm90IGltcGxlbWVudGVkXCJcbiAgaW5cbiAgYSA6OiBhdFxuXG5sZXQgYWRkX2Jvb2wgYXRfIHYgYXQgPSBtYXRjaCB2IHdpdGggZmFsc2UgLT4gYXQgfCB0cnVlIC0+IGBQIGF0XyA6OiBhdFxuXG5sZXQgYWRkX3N0ciBhdF9uYW1lIHYgYXQgPVxuICBtYXRjaCB2IHdpdGggXCJcIiAtPiBhdCB8IHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikgOjogYXRcblxubGV0IGFkZF9vcHQgYXRfbmFtZSB2IGF0ID1cbiAgbWF0Y2ggdiB3aXRoIE5vbmUgLT4gYXQgfCBTb21lIHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikgOjogYXRcblxudHlwZSBhdCA9IEMgb2Ygc3RyaW5nIHwgQSBvZiBBdC50XG50eXBlICdhdCB0JyA9ICdhdCBFbHdkLmNvbFxuXG5sZXQgbWFwX2NvbCBmID0gZnVuY3Rpb25cbiAgfCBgUCB2IC0+IGBQIChmIHYpXG4gIHwgYFIgdiAtPiBgUiAoTHdkLm1hcCB2IH5mKVxuICB8IGBTIHYgLT4gYFMgKEx3ZF9zZXEubWFwIGYgdilcblxubGV0IG9mX2F0ID0gZnVuY3Rpb24gQSBhdCAtPiBhdCB8IEMgbmFtZSAtPiBBdC5jbGFzcycgKEpzdHIudiBuYW1lKVxubGV0IGNvbnMgYXQgdCA9IG1hcF9jb2wgb2ZfYXQgYXQgOjogdFxubGV0IGNsYXNzXyBuID0gY29ucyAobWFwX2NvbCAoZnVuIG4gLT4gQyBuKSBuKSBbXVxuXG5tb2R1bGUgTyA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyBhdCA9IGF0ID0gQyBvZiBzdHJpbmcgfCBBIG9mIEF0LnRcblxuICBsZXQgdiBhdCA9IGNvbnMgYXQgW11cbiAgbGV0ICggJDo6ICkgYXQgdCA9IGNvbnMgYXQgdFxuZW5kXG5cbmxldCB3aXRoX2lkIHMgdCA9XG4gIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICB0b19hdCB7IHQgd2l0aCBhdHRycyB9XG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJcblxudHlwZSAnYSBvbmVfbWF5YmVfcmVhY3RpdmUgPSBbIGBQIG9mICdhIHwgYFIgb2YgJ2EgTHdkLnQgXVxudHlwZSAnYSBtYXliZV9yZWFjdGl2ZSA9IFsgJ2Egb25lX21heWJlX3JlYWN0aXZlIHwgYFMgb2YgJ2EgTHdkX3NlcS50IEx3ZC50IF1cblxubGV0IGlzX3B1cmVfZWxlbWVudCA9IGZ1bmN0aW9uXG4gIHwgYFAgXyAtPiB0cnVlXG4gIHwgYFIgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcbiAgfCBgUyB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgcHVyZSB0ID0gYFAgdFxubGV0IHJlYWN0aXZlIHQgPSBgUiB0XG5sZXQgc2VxdWVuY2UgdCA9IGBTIHRcblxubW9kdWxlIFVuaXQgPSBzdHJ1Y3RcbiAgKCoqIENvbnZlcnNpb24gYmV0d2VlbiBDU1MgdW5pdHMuIFZlcnkgZWFybHkgV0lQLiAqKVxuICB0eXBlIHQgPSBQeCBvZiBmbG9hdCB8IFJlbSBvZiBmbG9hdCB8IEVtIG9mIGZsb2F0XG5cbiAgbGV0IG9mX3N0cmluZyBzID1cbiAgICAoKiBUT0RPOiBwcm9wZXIgcGFyc2luZyAqKVxuICAgIG1hdGNoIFN0cmluZy5jaG9wX3N1ZmZpeCB+c3VmOlwicHhcIiBzIHdpdGhcbiAgICB8IFNvbWUgaSAtPiAoXG4gICAgICAgIG1hdGNoIEludC5vZl9zdHJpbmcgaSB3aXRoXG4gICAgICAgIHwgU29tZSBpIC0+IFNvbWUgKFB4IChmbG9hdF9vZl9pbnQgaSkpXG4gICAgICAgIHwgTm9uZSAtPiBGbG9hdC5vZl9zdHJpbmdfb3B0IGkgfD4gT3B0aW9uLm1hcCAoZnVuIGkgLT4gUHggaSkpXG4gICAgfCBOb25lIC0+IChcbiAgICAgICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJyZW1cIiBzIHdpdGhcbiAgICAgICAgfCBTb21lIGYgLT4gRmxvYXQub2Zfc3RyaW5nX29wdCBmIHw+IE9wdGlvbi5tYXAgKGZ1biBmIC0+IFJlbSBmKVxuICAgICAgICB8IE5vbmUgLT4gKFxuICAgICAgICAgICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJlbVwiIHMgd2l0aFxuICAgICAgICAgICAgfCBTb21lIGYgLT4gRmxvYXQub2Zfc3RyaW5nX29wdCBmIHw+IE9wdGlvbi5tYXAgKGZ1biBmIC0+IFJlbSBmKVxuICAgICAgICAgICAgfCBOb25lIC0+IE5vbmUpKVxuXG4gIGxldCB0b19zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBQcmludGYuc3ByaW50ZiBcIiVmcHhcIiBpXG4gICAgfCBSZW0gZiAtPiBQcmludGYuc3ByaW50ZiBcIiVmcmVtXCIgZlxuICAgIHwgRW0gZiAtPiBQcmludGYuc3ByaW50ZiBcIiVmZW1cIiBmXG5cbiAgbGV0IHRvX3B4ID8ocGFyZW50ID0gRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSA9XG4gICAgbGV0IGdldF9mb250X3NpemVfaW5fcHggcGFyZW50ID1cbiAgICAgIGxldCBmb250X3NpemUgPVxuICAgICAgICBFbC5jb21wdXRlZF9zdHlsZSAoSnN0ci52IFwiZm9udC1zaXplXCIpIHBhcmVudCB8PiBKc3RyLnRvX3N0cmluZ1xuICAgICAgaW5cbiAgICAgIG1hdGNoIG9mX3N0cmluZyBmb250X3NpemUgd2l0aFxuICAgICAgfCBOb25lIC0+IDE2LlxuICAgICAgfCBTb21lIChQeCBpKSAtPiBpXG4gICAgICB8IFNvbWUgXyAtPiBmYWlsd2l0aCBcIm5vdCBpbXBsZW1lbnRlZFwiXG4gICAgaW5cbiAgICBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBpXG4gICAgfCBSZW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCAoRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSBpblxuICAgICAgICBmICouIGZvbnRfc2l6ZVxuICAgIHwgRW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCBwYXJlbnQgaW5cbiAgICAgICAgZiAqLiBmb250X3NpemVcbmVuZFxuXG5sZXQgbGlzdGVuIH5mIHQgPVxuICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIHQgaW5cbiAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+IGYgKEx3ZC5xdWlja19zYW1wbGUgcm9vdCkpO1xuICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG5cbmxldCBtYXAzIH5mIGEgYiBjID1cbiAgTHdkLm1hcDIgYSBiIH5mOihmdW4gYSBiIC0+IChhLCBiKSkgfD4gTHdkLm1hcDIgYyB+ZjooZnVuIGMgKGEsIGIpIC0+IGYgYSBiIGMpXG5cbmxldCB0cmlwbGUgYSBiIGMgPSBtYXAzIGEgYiBjIH5mOihmdW4gYSBiIGMgLT4gKGEsIGIsIGMpKVxuIiwib3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxubW9kdWxlIEEgPSBBdHRyc1xuXG50eXBlIHRhcmdldCA9IFBvcyBvZiBpbnQgfCBFbCBvZiBFbHdkLnRcbnR5cGUgdCA9IHsgZWx0IDogRWx3ZC50IEx3ZC50OyBzY3JvbGxfcG9zaXRpb24gOiB0YXJnZXQgb3B0aW9uIEx3ZC52YXIgfVxuXG4oKiBUT0RPOiBtYWtlIGEgcHJvcGVyIGJpbmRpbmcgKilcbmxldCBqc19zY3JvbGwgZWx0IHRhcmdldCA9XG4gIG1hdGNoIHRhcmdldCB3aXRoXG4gIHwgUG9zIHggLT5cbiAgICAgIGxldCBlbHQgPSBFbC50b19qdiBlbHQgaW5cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIGVsdCBcInNjcm9sbFwiIFt8IEp2Lm9mX2ludCAwOyBKdi5vZl9pbnQgeCB8XVxuICB8IEVsIGVsIC0+IEVsLnNjcm9sbF9pbnRvX3ZpZXcgZWxcblxubGV0IG1ha2UgPyhhdCA9IFtdKSB+c2Nyb2xsX3RhcmdldCBlbHQgPVxuICBsZXQgYWN0aXZlID0gTHdkLnZhciB0cnVlIGluXG4gIGxldCBhdCA9IEEuTy4oYFAgKEMgXCJsd2R1aS1jb250cm9sbGVkLXNjcm9sbC13cmFwcGVyXCIpICQ6OiBhdCkgaW5cbiAgbGV0IGNvbnRyb2xzID1cbiAgICBsZXQgYXQgPSBBLmNsYXNzXyAoYFAgXCJsd2R1aS1jb250cm9sbGVkLXNjcm9sbC1jb250cm9sc1wiKSBpblxuICAgIGxldCBldiA9XG4gICAgICBsZXQgb25fY2xpY2sgXyA9IEx3ZC5zZXQgYWN0aXZlIHRydWUgaW5cbiAgICAgIGxldCBoYW5kbGVyID0gRWx3ZC5oYW5kbGVyIEV2LmNsaWNrIG9uX2NsaWNrIGluXG4gICAgICBbIGBQIGhhbmRsZXIgXVxuICAgIGluXG4gICAgRWx3ZC5kaXYgfmF0IH5ldiBbIGBSIChFbHdkLmJ1dHRvbiBbIGBQIChFbC50eHQnIFwiU2hvdyBwbGF5aW5nXCIpIF0pIF1cbiAgaW5cbiAgbGV0IG9uX3doZWVsID1cbiAgICBFbHdkLmhhbmRsZXIgRXYud2hlZWwgKGZ1biBfZXYgLT5cbiAgICAgICAgaWYgTHdkLnBlZWsgYWN0aXZlIHRoZW4gTHdkLnNldCBhY3RpdmUgZmFsc2UpXG4gIGluXG4gIGxldCBlbHQgPVxuICAgIGxldCBzdGF0ZSA9IFV0aWxzLnRyaXBsZSBlbHQgKEx3ZC5nZXQgYWN0aXZlKSBzY3JvbGxfdGFyZ2V0IGluXG4gICAgTHdkLm1hcCBzdGF0ZSB+ZjooZnVuIChlbHQsIGFjdGl2ZSwgcG9zKSAtPlxuICAgICAgICBpZiBhY3RpdmUgdGhlbiBPcHRpb24uaXRlciAoanNfc2Nyb2xsIGVsdCkgcG9zO1xuICAgICAgICBlbHQpXG4gIGluXG4gIEVsd2QuZGl2IH5hdCB+ZXY6WyBgUCBvbl93aGVlbCBdIFsgYFIgZWx0OyBgUiBjb250cm9scyBdXG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG5tb2R1bGUgQ29sdW1ucyA9IHN0cnVjdFxuICB0eXBlIGNvbHVtbiA9IHsgbmFtZSA6IHN0cmluZzsgY3NzX3NpemUgOiBzdHJpbmc7IGNvbnRlbnQgOiBFbHdkLnQgRWx3ZC5jb2wgfVxuICB0eXBlIHQgPSBjb2x1bW4gYXJyYXlcblxuICBsZXQgdiBuYW1lIGNzc19zaXplIGNvbnRlbnQgPSB7IG5hbWU7IGNzc19zaXplOyBjb250ZW50IH1cblxuICBsZXQgdG9faGVhZGVyIHQgPVxuICAgIGxldCBjZWxscyA9XG4gICAgICBBcnJheS5mb2xkX3JpZ2h0IHQgfmluaXQ6W10gfmY6KGZ1biB7IGNvbnRlbnQ7IF8gfSBhY2MgLT5cbiAgICAgICAgICBgUiAoRWx3ZC5kaXYgY29udGVudCkgOjogYWNjKVxuICAgIGluXG4gICAgY2VsbHNcblxuICBsZXQgc3R5bGUgdCA9XG4gICAgbGV0IHRlbXBsYXRlID1cbiAgICAgIEFycmF5LnRvX3N0cmluZyB+c2VwOlwiIFwiIChmdW4geyBjc3Nfc2l6ZTsgXyB9IC0+IGNzc19zaXplKSB0XG4gICAgaW5cbiAgICBQcmludGYuc3ByaW50ZiBcIiVzOiAlcztcIiBcImdyaWQtdGVtcGxhdGUtY29sdW1uc1wiIHRlbXBsYXRlXG5lbmRcblxudHlwZSB0ID0geyBjb2x1bW5zIDogQ29sdW1ucy50IH1cbnR5cGUgZml4ZWRfcm93X2hlaWdodCA9IHsgdGFibGUgOiB0OyByb3dfaGVpZ2h0IDogVXRpbHMuVW5pdC50IH1cblxubGV0IHN0eWxlIHQgPVxuICBsZXQgc3R5bGUgPSBDb2x1bW5zLnN0eWxlIHQudGFibGUuY29sdW1ucyBpblxuICBTdHJpbmcuY29uY2F0IH5zZXA6XCIgXCIgWyBzdHlsZSBdXG5cbmxldCBoZWFkZXIgdCA9XG4gIGxldCByb3dfaGVpZ2h0ID0gVXRpbHMuVW5pdC50b19zdHJpbmcgdC5yb3dfaGVpZ2h0IGluXG4gIGxldCBhdCA9XG4gICAgWyBgUCAoQXQuc3R5bGUgKEpzdHIudiBAQCBQcmludGYuc3ByaW50ZiBcImhlaWdodDogJXNcIiByb3dfaGVpZ2h0KSkgXVxuICBpblxuICBFbHdkLmRpdiB+YXQgQEAgQ29sdW1ucy50b19oZWFkZXIgdC50YWJsZS5jb2x1bW5zXG5cbmxldCBfID0gVXRpbHMuVW5pdC50b19weCAoUmVtIDQuKVxuIiwiKCoqIEEgdmlydHVhbCB0YWJsZSB0aGF0IGNhbiBoYW5kbGUgbGFyZ2UgZGF0YXNldC5cblxuICAgIFRPRE86IHRoaXMgaXMgY2xlYXJseSBvdmVyLWVuZ2luZWVyZWQ6IHRoZSBsYXJnZSBsd2QgdGFibGUgdGhhdCByZWR1Y2VzIHRvIFxuICAgIHJvd3MgYW5kIHBsYWNlaG9sZGVycyB3aXRoIGEgbW9ub2lkIGlzIGVsZWdhbnQgYnUgZG9lcyBub3Qgc2NhbGUgd2VsbC4gSXQgXG4gICAgbWlnaHQgYmUgcG9zc2libGUgdG8gb3B0aW1pemUgaXQgKGVzcGVjaWFsbHkgdGhlIFwidW5pcXVldWVcIiBMUlUgdGhpbmd5KSwgXG4gICAgYnV0IGhhdmluZyB0b28gbGFyZ2UgYSBsd2RfdGFibGUgaXMgcHJvYmFibHkgYSBoYXJkIGxpbWl0LiAqKVxuXG5vcGVuIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG5tb2R1bGUgVW5pcXVldWUgKE8gOiBTZXQuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBTZXQgPSBTZXQuTWFrZSAoTylcblxuICB0eXBlIG5vbnJlYyB0ID0geyBtdXRhYmxlIHF1ZXVlIDogTy50IFF1ZXVlLnQ7IG11dGFibGUgdW5pcSA6IFNldC50IH1cblxuICBsZXQgY3JlYXRlICgpID1cbiAgICBsZXQgcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgdW5pcSA9IFNldC5lbXB0eSBpblxuICAgIHsgcXVldWU7IHVuaXEgfVxuXG4gIGxldCBhZGQgdiB0ID1cbiAgICBsZXQgbmV3X2VsdCA9IG5vdCAoU2V0Lm1lbSB2IHQudW5pcSkgaW5cbiAgICBsZXQgKCkgPVxuICAgICAgaWYgbmV3X2VsdCB0aGVuXG4gICAgICAgIGxldCAoKSA9IFF1ZXVlLmFkZCB2IHQucXVldWUgaW5cbiAgICAgICAgdC51bmlxIDwtIFNldC5hZGQgdiB0LnVuaXFcbiAgICAgIGVsc2VcbiAgICAgICAgKCogSWYgdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBpbiB0aGUgcXVldWUgd2UgXCJidWJibGVcIiBpdCB1cCAqKVxuICAgICAgICAoKiBUb2RvOiB0aGlzIGlzIG5vdCBtYWRlIGluIGEgdmVyeSBlZmZpY2llbnQgd2F5Li4uICopXG4gICAgICAgIGxldCBuZXdfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICAgICAgUXVldWUuaXRlclxuICAgICAgICAgIChmdW4gdicgLT5cbiAgICAgICAgICAgIGlmIG5vdCBAQCBJbnQuZXF1YWwgKE8uY29tcGFyZSB2IHYnKSAwIHRoZW4gUXVldWUuYWRkIHYnIG5ld19xdWV1ZSlcbiAgICAgICAgICB0LnF1ZXVlO1xuICAgICAgICBRdWV1ZS5hZGQgdiBuZXdfcXVldWU7XG4gICAgICAgIHQucXVldWUgPC0gbmV3X3F1ZXVlXG4gICAgaW5cbiAgICBuZXdfZWx0XG5cbiAgbGV0IHRha2UgdCA9XG4gICAgbGV0IGkgPSBRdWV1ZS50YWtlIHQucXVldWUgaW5cbiAgICB0LnVuaXEgPC0gU2V0LnJlbW92ZSBpIHQudW5pcTtcbiAgICBpXG5cbiAgbGV0IGxlbmd0aCB0ID0gUXVldWUubGVuZ3RoIHQucXVldWVcblxuICBsZXQgY2xlYXIgdCA9XG4gICAgbGV0IG5ld19xdWV1ZSA9IGNyZWF0ZSAoKSBpblxuICAgIHQucXVldWUgPC0gbmV3X3F1ZXVlLnF1ZXVlO1xuICAgIHQudW5pcSA8LSBuZXdfcXVldWUudW5pcVxuZW5kXG5cbm1vZHVsZSBJbnRfdW5pcXVldWUgPSBVbmlxdWV1ZSAoSW50KVxuXG50eXBlICdhIHJvd19kYXRhID0ge1xuICBpbmRleCA6IGludDtcbiAgY29udGVudCA6ICdhIG9wdGlvbjtcbiAgcmVuZGVyIDogaW50IC0+ICdhIC0+IEVsd2QudCBFbHdkLmNvbDtcbn1cblxudHlwZSAoJ2RhdGEsICdlcnJvcikgZGF0YV9zb3VyY2UgPSB7XG4gIHRvdGFsX2l0ZW1zIDogKGludCwgJ2Vycm9yKSBGdXQucmVzdWx0O1xuICBmZXRjaCA6IGludCBhcnJheSAtPiAoJ2RhdGEgb3B0aW9uIGFycmF5LCAnZXJyb3IpIEZ1dC5yZXN1bHQ7XG4gIHJlbmRlciA6IGludCAtPiAnZGF0YSAtPiBFbHdkLnQgRWx3ZC5jb2w7XG59XG5cbigqIFRoZSB2aXJ0dWFsIHRhYmxlIGlzIGEgY29tcGxleCByZWFjdGl2ZSBjb21wb25lbnQuIFByaW1hcmlseSwgaXQgcmVhY3RzIHRvXG4gICBjaGFuZ2VzIG9mIHRoZSBbZGF0YV9zb3VyY2VdIHNvIHRoYXQgY29udGVudCBpbiB0aGUgdGFibGUgaXMgcHJvcGVybHlcbiAgIHJlZnJlc2hlZCB3aGVuIGl0IGRvZXMuIEFkZGl0aW9ubmFseSBpdCBuZWVkcyB0byByZWFjdCB0byBtdWx0aXBsZSBkb21cbiAgIGV2ZW50cywgbm90YWJseSB2ZXJ0aWNhbCByZXNpemUgb2YgdGhlIGNvbnRhaW5lciBhbmQgc2Nyb2xsIGV2ZW50cywgdG8gZW5zdXJlXG4gICB0aGF0IHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIHRhbGJlIGlzIGFsd2F5cyBwb3B1bGF0ZWQgd2l0aCByb3dzLiAqKVxuXG5sZXQgbWFrZSAodHlwZSBkYXRhKSB+KHVpX3RhYmxlIDogU2NoZW1hLmZpeGVkX3Jvd19oZWlnaHQpXG4gICAgPyhwbGFjZWhvbGRlciA6IGludCAtPiBFbHdkLnQgRWx3ZC5jb2wgPSBmdW4gXyAtPiBbXSlcbiAgICA/KHNjcm9sbF90YXJnZXQgOiBpbnQgTHdkLnQgb3B0aW9uKVxuICAgIChkYXRhX3NvdXJjZSA6IChkYXRhLCBfKSBkYXRhX3NvdXJjZSBMd2QudCkgPVxuICBpZ25vcmUgcGxhY2Vob2xkZXI7XG4gIGxldCByb3dfc2l6ZSA9IHVpX3RhYmxlLnJvd19oZWlnaHQgfD4gVXRpbHMuVW5pdC50b19zdHJpbmcgaW5cbiAgbGV0IGhlaWdodF9uIG4gPSBQcmludGYuc3ByaW50ZiBcImhlaWdodDogY2FsYyglcyAqICVpKTtcIiByb3dfc2l6ZSBuIGluXG4gIGxldCBoZWlnaHQgPSBQcmludGYuc3ByaW50ZiBcImhlaWdodDogJXMgIWltcG9ydGFudDtcIiByb3dfc2l6ZSBpblxuICBsZXQgdGFibGUgOiBkYXRhIHJvd19kYXRhIEx3ZF90YWJsZS50ID0gTHdkX3RhYmxlLm1ha2UgKCkgaW5cbiAgKCogVGhlIFtyb3dzXSB0YWJsZSBpcyB1c2VkIHRvIHJlbGF0ZSBkaXZzIHRvIHRoZSB0YWJsZSdzIHJvd3MgaW4gdGhlXG4gICAgIG9ic2VydmVyJ3MgY2FsbGJhY2sgKilcbiAgbGV0IHJvd19pbmRleCA6IChpbnQsIGRhdGEgcm93X2RhdGEgTHdkX3RhYmxlLnJvdykgSGFzaHRibC50ID1cbiAgICBIYXNodGJsLmNyZWF0ZSAyMDQ4XG4gIGluXG4gIGxldCB1bmxvYWRfcXVldWUgPSBJbnRfdW5pcXVldWUuY3JlYXRlICgpIGluXG5cbiAgbGV0IGFkZCB+ZmV0Y2ggPyhtYXhfaXRlbXMgPSAyMDApIGluZGV4ZXMgPVxuICAgIGxldCB1bmxvYWQgaSA9XG4gICAgICBsZXQgb3BlbiBPcHRpb24uSW5maXggaW5cbiAgICAgIChsZXQqIHJvdyA9IEhhc2h0YmwuZ2V0IHJvd19pbmRleCBpIGluXG4gICAgICAgbGV0KyByb3dfZGF0YSA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgTHdkX3RhYmxlLnNldCByb3cgeyByb3dfZGF0YSB3aXRoIGNvbnRlbnQgPSBOb25lIH0pXG4gICAgICB8PiBpZ25vcmVcbiAgICBpblxuICAgIGxldCBsb2FkIGluZGV4ZXMgPVxuICAgICAgKGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgbGV0KyAoZGF0YSA6IGRhdGEgb3B0aW9uIGFycmF5KSA9IGZldGNoIGluZGV4ZXMgaW5cbiAgICAgICBBcnJheS5pdGVyMiBpbmRleGVzIGRhdGEgfmY6KGZ1biBpIGRhdGEgLT5cbiAgICAgICAgICAgKGxldCBvcGVuIE9wdGlvbi5JbmZpeCBpblxuICAgICAgICAgICAgbGV0KiByb3cgPSBIYXNodGJsLmdldCByb3dfaW5kZXggaSBpblxuICAgICAgICAgICAgbGV0KyByb3dfZGF0YSA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgICAgICBsZXQgZGF0YSA9XG4gICAgICAgICAgICAgIG1hdGNoIGRhdGEgd2l0aCBTb21lIGRhdGEgLT4gZGF0YSB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgTHdkX3RhYmxlLnNldCByb3cgeyByb3dfZGF0YSB3aXRoIGNvbnRlbnQgPSBTb21lIGRhdGEgfSlcbiAgICAgICAgICAgfD4gaWdub3JlKSlcbiAgICAgIHw+IGlnbm9yZVxuICAgIGluXG4gICAgbGV0IGNsZWFudXAgKCkgPVxuICAgICAgbGV0IHFfbGVuZ3RoID0gSW50X3VuaXF1ZXVlLmxlbmd0aCB1bmxvYWRfcXVldWUgaW5cbiAgICAgIGlmIHFfbGVuZ3RoID4gbWF4X2l0ZW1zIHRoZW5cbiAgICAgICAgZm9yIF8gPSBtYXhfaXRlbXMgdG8gcV9sZW5ndGggZG9cbiAgICAgICAgICB0cnkgdW5sb2FkIChJbnRfdW5pcXVldWUudGFrZSB1bmxvYWRfcXVldWUpIHdpdGggUXVldWUuRW1wdHkgLT4gKClcbiAgICAgICAgZG9uZVxuICAgIGluXG4gICAgbGV0IHRvX2xvYWQgPVxuICAgICAgTGlzdC5maWx0ZXIgaW5kZXhlcyB+ZjooZnVuIGkgLT4gSW50X3VuaXF1ZXVlLmFkZCBpIHVubG9hZF9xdWV1ZSlcbiAgICBpblxuICAgIGxvYWQgKEFycmF5Lm9mX2xpc3QgdG9fbG9hZCk7XG4gICAgY2xlYW51cCAoKVxuICBpblxuICBsZXQgdGFibGVfaGVpZ2h0ID0gTHdkLnZhciBOb25lIGluXG4gIGxldCBjb21wdXRlX3Zpc2libGVfcm93cyB+bGFzdF9zY3JvbGxfeSBkaXYgPVxuICAgIGxldCBoZWlnaHQgZWx0ID1cbiAgICAgIGxldCBqdiA9IEVsLnRvX2p2IGVsdCBpblxuICAgICAgSnYuZ2V0IGp2IFwib2Zmc2V0SGVpZ2h0XCIgfD4gSnYudG9faW50XG4gICAgaW5cbiAgICBsZXQgc2Nyb2xsX3kgPSBFbC5zY3JvbGxfeSBkaXYgaW5cbiAgICBsZXQgZGlyZWN0aW9uID0gaWYgc2Nyb2xsX3kgPi4gIWxhc3Rfc2Nyb2xsX3kgdGhlbiBgRG93biBlbHNlIGBVcCBpblxuICAgIGxldCAoKSA9IGxhc3Rfc2Nyb2xsX3kgOj0gc2Nyb2xsX3kgaW5cbiAgICBsZXQgdmlzaWJsZV9oZWlnaHQgPSBoZWlnaHQgZGl2IHw+IGZsb2F0X29mX2ludCBpblxuICAgIGxldCByb3dfaGVpZ2h0ID0gVXRpbHMuVW5pdC50b19weCB+cGFyZW50OmRpdiB1aV90YWJsZS5yb3dfaGVpZ2h0IGluXG4gICAgbGV0IGhlYWRlcl9oZWlnaHQgPSByb3dfaGVpZ2h0IGluXG4gICAgbGV0IG51bWJlcl9vZl92aXNpYmxlX3Jvd3MgPSB2aXNpYmxlX2hlaWdodCAvLiByb3dfaGVpZ2h0IHw+IGludF9vZl9mbG9hdCBpblxuICAgIGxldCBibGVlZGluZyA9IG51bWJlcl9vZl92aXNpYmxlX3Jvd3MgaW5cbiAgICBsZXQgc2Nyb2xsX3kgPSBzY3JvbGxfeSAtLiBoZWFkZXJfaGVpZ2h0IGluXG4gICAgbGV0IGZpcnN0X3Zpc2libGVfcm93ID0gaW50X29mX2Zsb2F0IChzY3JvbGxfeSAvLiByb3dfaGVpZ2h0KSArIDEgaW5cbiAgICBsZXQgbGFzdF92aXNpYmxlX3JvdyA9IGZpcnN0X3Zpc2libGVfcm93ICsgbnVtYmVyX29mX3Zpc2libGVfcm93cyBpblxuICAgIGxldCBmaXJzdCA9XG4gICAgICBsZXQgYmxlZWRpbmcgPVxuICAgICAgICBtYXRjaCBkaXJlY3Rpb24gd2l0aCBgVXAgLT4gYmxlZWRpbmcgfCBfIC0+IGJsZWVkaW5nIC8gMlxuICAgICAgaW5cbiAgICAgIGZpcnN0X3Zpc2libGVfcm93IC0gYmxlZWRpbmcgfD4gbWF4IDBcbiAgICBpblxuICAgIGxldCBsYXN0ID1cbiAgICAgIGxldCBibGVlZGluZyA9XG4gICAgICAgIG1hdGNoIGRpcmVjdGlvbiB3aXRoIGBEb3duIC0+IGJsZWVkaW5nIHwgXyAtPiBibGVlZGluZyAvIDJcbiAgICAgIGluXG4gICAgICBsYXN0X3Zpc2libGVfcm93ICsgYmxlZWRpbmdcbiAgICBpblxuICAgIExpc3QuaW5pdCAobGFzdCAtIGZpcnN0KSB+ZjooZnVuIGkgLT4gZmlyc3QgKyBpKVxuICBpblxuICBsZXQgcHJlcGFyZSB+dG90YWxfaXRlbXM6dG90YWwgfnJlbmRlciA9XG4gICAgbGV0ICgpID1cbiAgICAgICgqIENsZWFudXAgKilcbiAgICAgIEx3ZF90YWJsZS5jbGVhciB0YWJsZTtcbiAgICAgIEhhc2h0YmwuY2xlYXIgcm93X2luZGV4O1xuICAgICAgSW50X3VuaXF1ZXVlLmNsZWFyIHVubG9hZF9xdWV1ZVxuICAgIGluXG4gICAgZm9yIGkgPSAwIHRvIHRvdGFsIC0gMSBkb1xuICAgICAgbGV0IHNldCA9IHsgaW5kZXggPSBpOyBjb250ZW50ID0gTm9uZTsgcmVuZGVyIH0gaW5cbiAgICAgIEhhc2h0YmwuYWRkIHJvd19pbmRleCBpIEBAIEx3ZF90YWJsZS5hcHBlbmQgfnNldCB0YWJsZVxuICAgIGRvbmVcbiAgaW5cbiAgbGV0IHBvcHVsYXRlX29uX3Njcm9sbCA9XG4gICAgTHdkLm1hcCBkYXRhX3NvdXJjZSB+ZjooZnVuIHsgdG90YWxfaXRlbXM7IGZldGNoOyByZW5kZXIgfSAtPlxuICAgICAgICBsZXQgYWRkID0gYWRkIH5mZXRjaCBpblxuICAgICAgICBsZXQgbGFzdF9zY3JvbGxfeSA9IHJlZiAwLiBpblxuICAgICAgICBsZXQgdXBkYXRlIGRpdiA9XG4gICAgICAgICAgbGV0IHZpc2libGVfcm93cyA9IGNvbXB1dGVfdmlzaWJsZV9yb3dzIH5sYXN0X3Njcm9sbF95IGRpdiBpblxuICAgICAgICAgICgqIHRvZG86IFdlIGRvIHdheSB0b28gbXVjaCB3b3JrIGFuZCByZWJ1aWxkIHRoZSBxdWV1ZSBlYWNoXG4gICAgICAgICAgICAgdGltZS4uLiBpdCdzIHZlcnkgaW5lZmljaWVudCAqKVxuICAgICAgICAgIGFkZCB+bWF4X2l0ZW1zOig0ICogTGlzdC5sZW5ndGggdmlzaWJsZV9yb3dzKSB2aXNpYmxlX3Jvd3NcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgICBsZXQrIHRvdGFsX2l0ZW1zID0gdG90YWxfaXRlbXMgaW5cbiAgICAgICAgbWF0Y2ggdG90YWxfaXRlbXMgd2l0aFxuICAgICAgICB8IE9rIHRvdGFsX2l0ZW1zIC0+XG4gICAgICAgICAgICBwcmVwYXJlIH50b3RhbF9pdGVtcyB+cmVuZGVyO1xuICAgICAgICAgICAgdXBkYXRlXG4gICAgICAgIHwgXyAtPiBpZ25vcmUpXG4gIGluXG4gIGxldCBzY3JvbGxfaGFuZGxlciA9XG4gICAgTHdkLm1hcCBwb3B1bGF0ZV9vbl9zY3JvbGwgfmY6KGZ1biB1cGRhdGUgLT5cbiAgICAgICAgRWx3ZC5oYW5kbGVyIEV2LnNjcm9sbCAoZnVuIGV2IC0+XG4gICAgICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgICAgICBpZ25vcmVcbiAgICAgICAgICAgIEBAXG4gICAgICAgICAgICBsZXQrIHVwZGF0ZSA9IHVwZGF0ZSBpblxuICAgICAgICAgICAgbGV0IHNjcm9sbF9oYW5kbGVyID1cbiAgICAgICAgICAgICAgbGV0IGxhc3RfdXBkYXRlID0gcmVmIDAuIGluXG4gICAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gcmVmICgtMSkgaW5cbiAgICAgICAgICAgICAgbGV0IHJlc2V0X3RpY2tlciBkaXYgPVxuICAgICAgICAgICAgICAgIGxldCBkZWJvdW5jaW5nX2ludGVydmFsID0gMjUgaW5cbiAgICAgICAgICAgICAgICAoKiBXZSB1c2UgW2xhc3RfdXBkYXRlXSB0byBoYXZlIHJlZ3VsYXIgZGVib3VuY2VkIHVwZGF0ZXMgYW5kIHRoZVxuICAgICAgICAgICAgICAgICAgIFt0aW1lb3V0XSB0byBlbnN1cmUgdGhhdCB0aGUgbGFzdCBzY3JvbGwgZXZlbnQgaXMgYWx3YXlzIHRha2VuIGludG9cbiAgICAgICAgICAgICAgICAgICBhY2NvdW50IGV2ZW4gaXQgaXQgaGFwcGVucyBkdXJpbmcgdGhlIGRlYm91bmNpbmcgaW50ZXJ2YWwuICopXG4gICAgICAgICAgICAgICAgbGV0IG5vdyA9IFBlcmZvcm1hbmNlLm5vd19tcyBHLnBlcmZvcm1hbmNlIGluXG4gICAgICAgICAgICAgICAgaWYgIXRpbWVvdXQgPj0gMCB0aGVuIEcuc3RvcF90aW1lciAhdGltZW91dDtcbiAgICAgICAgICAgICAgICB0aW1lb3V0IDo9XG4gICAgICAgICAgICAgICAgICBHLnNldF90aW1lb3V0IH5tczpkZWJvdW5jaW5nX2ludGVydmFsIChmdW4gKCkgLT4gdXBkYXRlIGRpdik7XG4gICAgICAgICAgICAgICAgaWYgbm93IC0uICFsYXN0X3VwZGF0ZSA+LiBmbG9hdF9vZl9pbnQgZGVib3VuY2luZ19pbnRlcnZhbCB0aGVuIChcbiAgICAgICAgICAgICAgICAgIGxhc3RfdXBkYXRlIDo9IG5vdztcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZSBkaXYpXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIGZ1biBkaXYgLT4gcmVzZXRfdGlja2VyIGRpdlxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIGxldCBkaXYgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IHw+IEVsLm9mX2p2IGluXG4gICAgICAgICAgICBzY3JvbGxfaGFuZGxlciBkaXYpKVxuICBpblxuICBsZXQgKCkgPVxuICAgIGxldCByZXBvcHVsYXRlX2RlcHMgPVxuICAgICAgTHdkLm1hcDIgcG9wdWxhdGVfb25fc2Nyb2xsIChMd2QuZ2V0IHRhYmxlX2hlaWdodCkgfmY6KGZ1biBhIGIgLT4gKGEsIGIpKVxuICAgIGluXG4gICAgbGV0IHJvb3QgPSBMd2Qub2JzZXJ2ZSByZXBvcHVsYXRlX2RlcHMgaW5cbiAgICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgICAgbWF0Y2ggTHdkLnF1aWNrX3NhbXBsZSByb290IHdpdGhcbiAgICAgICAgfCB1cGRhdGUsIFNvbWUgKF9oLCBkaXYpIC0+IEZ1dC5hd2FpdCB1cGRhdGUgKGZ1biB1cGRhdGUgLT4gdXBkYXRlIGRpdilcbiAgICAgICAgfCBfIC0+ICgpKTtcbiAgICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG4gIGluXG4gIGxldCBtYWtlX3NwYWNlciBuID1cbiAgICBsZXQgYXQgPSBbIEF0LmNsYXNzJyAoSnN0ci52IFwicm93X3NwYWNlclwiKSBdIGluXG4gICAgbGV0IHN0eWxlID0gQXQuc3R5bGUgKEpzdHIudiBAQCBoZWlnaHRfbiBuKSBpblxuICAgIEVsLmRpdiB+YXQ6KHN0eWxlIDo6IGF0KSBbXVxuICBpblxuICBsZXQgcmVuZGVyIF8geyBjb250ZW50OyBpbmRleDsgcmVuZGVyIH0gPVxuICAgIGxldCBhdCA9IEF0dHJzLmFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJyb3dcIikgW10gaW5cbiAgICBsZXQgc3R5bGUgPSBgUCAoQXQuc3R5bGUgKEpzdHIudiBoZWlnaHQpKSBpblxuICAgIG1hdGNoIGNvbnRlbnQgd2l0aFxuICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICgwLCBMd2Rfc2VxLmVsZW1lbnQgQEAgRWx3ZC5kaXYgfmF0OihzdHlsZSA6OiBhdCkgKHJlbmRlciBpbmRleCBkYXRhKSwgMClcbiAgICB8IE5vbmUgLT4gKDEsIEx3ZF9zZXEuZW1wdHksIDApXG4gIGluXG4gIGxldCB0YWJsZV9ib2R5ID1cbiAgICBsZXQgcm93cyA9XG4gICAgICBMd2RfdGFibGUubWFwX3JlZHVjZSByZW5kZXJcbiAgICAgICAgKCAoMCwgTHdkX3NlcS5lbXB0eSwgMCksXG4gICAgICAgICAgZnVuIChuLCBzLCBtKSAocCwgcycsIHEpIC0+XG4gICAgICAgICAgICBtYXRjaCAoTHdkX3NlcS52aWV3IHMsIEx3ZF9zZXEudmlldyBzJykgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSwgRW1wdHkgLT5cbiAgICAgICAgICAgICAgICAoKiBTaW5jZSBzIGlzIGVtcHR5IGl0IGRvZXMgbm90IG1hdHRlciBvbiB3aGljaFxuICAgICAgICAgICAgICAgICAgIFwic2lkZVwiIG9mIGl0IHRoZSBzcGFjZXMgYXJlIGFjY3VtdWxhdGVkLiAqKVxuICAgICAgICAgICAgICAgIChuICsgbSArIHAgKyBxLCBzLCAwKVxuICAgICAgICAgICAgfCBFbXB0eSwgXyAtPiAobiArIG0gKyBwLCBzJywgcSlcbiAgICAgICAgICAgIHwgXywgRW1wdHkgLT4gKG4sIHMsIG0gKyBwICsgcSlcbiAgICAgICAgICAgIHwgXywgXyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID1cbiAgICAgICAgICAgICAgICAgIGlmIG0gKyBwID4gMCB0aGVuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGFjZXIgPSBMd2QucHVyZSBAQCBtYWtlX3NwYWNlciAobSArIHApIGluXG4gICAgICAgICAgICAgICAgICAgIEx3ZF9zZXEuKGNvbmNhdCBzIEBAIGNvbmNhdCAoZWxlbWVudCBzcGFjZXIpIHMnKVxuICAgICAgICAgICAgICAgICAgZWxzZSBMd2Rfc2VxLmNvbmNhdCBzIHMnXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAobiwgcywgcSkgKVxuICAgICAgICB0YWJsZVxuICAgIGluXG4gICAgTHdkLm1hcCByb3dzIH5mOihmdW4gKG4sIHMsIG0pIC0+XG4gICAgICAgIGxldCByZXN1bHQgPVxuICAgICAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgICAgIGxldCBmaXJzdF9zcGFjZXIgPSBMd2QucHVyZSBAQCBtYWtlX3NwYWNlciBuIGluXG4gICAgICAgICAgICBMd2Rfc2VxLihjb25jYXQgKGVsZW1lbnQgZmlyc3Rfc3BhY2VyKSBzKVxuICAgICAgICAgIGVsc2Ugc1xuICAgICAgICBpblxuICAgICAgICBpZiBtID4gMCB0aGVuXG4gICAgICAgICAgbGV0IGxhc3Rfc3BhY2VyID0gTHdkLnB1cmUgQEAgbWFrZV9zcGFjZXIgbSBpblxuICAgICAgICAgIEx3ZF9zZXEuKGNvbmNhdCByZXN1bHQgKGVsZW1lbnQgbGFzdF9zcGFjZXIpKVxuICAgICAgICBlbHNlIHJlc3VsdClcbiAgaW5cbiAgbGV0IHRhYmxlX2hlYWRlciA9IFNjaGVtYS5oZWFkZXIgdWlfdGFibGUgaW5cbiAgbGV0IG9ic2VydmVyID1cbiAgICAoKiBXZSBvYnNlcnZlIHRoZSBzaXplIG9mIHRoZSB0YWJsZSB0byByZS1wb3B1bGF0ZSBpZiBuZWNlc3NhcnkgKilcbiAgICBSZXNpemVfb2JzZXJ2ZXIuY3JlYXRlIH5jYWxsYmFjazooZnVuIGVudHJpZXMgXyAtPlxuICAgICAgICBsZXQgZW50cnkgPSBMaXN0LmhkIGVudHJpZXMgaW5cbiAgICAgICAgbGV0IGRpdiA9IFJlc2l6ZV9vYnNlcnZlci5FbnRyeS50YXJnZXQgZW50cnkgaW5cbiAgICAgICAgbGV0IHJlY3QgPSBSZXNpemVfb2JzZXJ2ZXIuRW50cnkuY29udGVudF9yZWN0IGVudHJ5IGluXG4gICAgICAgIGxldCBoZWlnaHQgPSBEb21fcmVjdF9yZWFkX29ubHkuaGVpZ2h0IHJlY3QgaW5cbiAgICAgICAgbWF0Y2ggTHdkLnBlZWsgdGFibGVfaGVpZ2h0IHdpdGhcbiAgICAgICAgfCBTb21lIChoLCBfKSB3aGVuIGggPD4gaGVpZ2h0IC0+XG4gICAgICAgICAgICBMd2Quc2V0IHRhYmxlX2hlaWdodCAoU29tZSAoaGVpZ2h0LCBkaXYpKVxuICAgICAgICB8IE5vbmUgLT4gTHdkLnNldCB0YWJsZV9oZWlnaHQgKFNvbWUgKGhlaWdodCwgZGl2KSlcbiAgICAgICAgfCBfIC0+ICgpKVxuICBpblxuICBsZXQgYXQgPSBBdHRycy50b19hdCBAQCBBdHRycy5jbGFzc2VzIFsgXCJsd2R1aS1sYXp5LXRhYmxlXCIgXSBpblxuICBsZXQgZ3JpZF9zdHlsZSA9IFNjaGVtYS5zdHlsZSB1aV90YWJsZSBpblxuICBsZXQgcyA9IEF0LnN0eWxlIChKc3RyLnYgQEAgZ3JpZF9zdHlsZSkgaW5cbiAgbGV0IGF0ID0gYFAgcyA6OiBhdCBpblxuICBsZXQgdGFibGUgPVxuICAgIEVsd2QuZGl2XG4gICAgICB+ZXY6WyBgUiBzY3JvbGxfaGFuZGxlciBdXG4gICAgICB+YXRcbiAgICAgIFsgYFIgdGFibGVfaGVhZGVyOyBgUyAoTHdkX3NlcS5saWZ0IHRhYmxlX2JvZHkpIF1cbiAgICB8PiBMd2QubWFwIH5mOih0ZWUgKFJlc2l6ZV9vYnNlcnZlci5vYnNlcnZlIG9ic2VydmVyKSlcbiAgaW5cbiAgbGV0IGF0ID0gQXR0cnMuTy4odiAoYFAgKEMgXCJsd2R1aS1sYXp5LXRhYmxlLXdyYXBwZXJcIikpKSBpblxuICBtYXRjaCBzY3JvbGxfdGFyZ2V0IHdpdGhcbiAgfCBTb21lIHNjcm9sbF90YXJnZXQgLT5cbiAgICAgIGxldCBzY3JvbGxfdGFyZ2V0ID1cbiAgICAgICAgTHdkLm1hcDIgdGFibGUgc2Nyb2xsX3RhcmdldCB+ZjooZnVuIHBhcmVudCBpIC0+XG4gICAgICAgICAgICBsZXQgcm93X2hlaWdodCA9XG4gICAgICAgICAgICAgIEludC5vZl9mbG9hdCAoVXRpbHMuVW5pdC50b19weCB+cGFyZW50IHVpX3RhYmxlLnJvd19oZWlnaHQpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgU29tZSAoQ29udHJvbGxlZF9zY3JvbGwuUG9zIChpICogcm93X2hlaWdodCkpKVxuICAgICAgaW5cbiAgICAgIENvbnRyb2xsZWRfc2Nyb2xsLm1ha2UgfmF0IH5zY3JvbGxfdGFyZ2V0IHRhYmxlXG4gIHwgTm9uZSAtPiBFbHdkLmRpdiB+YXQgWyBgUiB0YWJsZSBdXG5cbigqKiAjIyMjIyMjKiojKioqKioqIyUlIz09PSsrKyojIyMlIyMjIyMjIyMjIyMqKyMjPSMjIysrKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyojIyMjKioqKiUlIyM9PT09PT09PT09PSsjPT09LT09PT09PT0qIz0jIyMrKysrKysrKysrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMqIyMjIyMqKiojJSMjPT09PT09LS0tPT0rIz09LS0tPT09PT09KiM9IyMjKysrKysrKysrKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIz09PT0tLS0tPT0tPSM9LS09PT09PT09PSojPSojIyUjKysrKyslJSUrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjJSM9PT09LT09PT0tLT0jPT09PT09PT09PT0qIz0qIyMlIysrPSsjKiolJSsrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMqPS0tLS0tLS0tLS09Iz09PT09PT09PT09KyM9KyMjKyUjJSorJSslJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMrPS0tLS0tLS0tPT0tLS0tLSM9PT09LT09LS0tLSsjPSsjIyorJSMlJSsjIyUlKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIys9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09LT0rIz0rIyMjKysrIyolKyMrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIz0tLS0tLS0tLS09IyMjIz0jPS0tIz0rKz09PT0tLT09PSM9KyMjIyorKyslJSsrJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjKj09PT09PS0tPT0qKiMjIyMjIys9PT09PSs9KysrKysrKiMjPSsjIyMqKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz0tLS0tLT09KyorIyMjKiMjIyMjIz0jPT0tLS0tPT09PT0rIz0rIyMjKioqKisrKysrKysrSVMrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyM9PS09LT0qIys9IyslKyM9PT0jPT09Iz09LS09PT09PT09PSM9KyMjIyoqKisrKysrKysrKysrK1RISVMrKysrKytcbiMjIyMjIyMjIyMjIyMjPS0jKiMrKiMjPSMjIyMqKyM9Kys9PSM9PT09PT09PT09PSsjPSsjIyMqKioqKioqKysrQSsrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz09IyMjPSMjIyMjIyMjIyMjIysjKisjPT09PT09PT09PT09IysrIyMjKioqKioqKioqKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjPSorIyojIyMjIyMjIyMjIyMjIyM9Iz09PT09PT09PT09PSMrKyMjIyoqKioqKioqKioqKk1PTk9JRCs/KysrKytcbiMjIyMjIyMjIyMjIyMjIyM9PSMjIyMjIyMjIyM9PT09IyMqPSM9PT09PT09IyoqPT0jKysjIyMqKioqKioqKioqKioqKioqKisrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIz09KyMjIyMjIyMjIyMjIyMjPT0jPT09PT0jIyM9PT09IysrIyMjKioqKioqKioqKioqKioqKioqKioqKisrK1xuIyMjIyMjIyMjIyMjIyMjIyMjPT0jIyMrIyMjIyMjIyMjKyMjIyorPT0jIyM9PT09PSMrKyMjKysrKioqKioqKioqKioqKioqKioqKioqKitcbiMjIyMjIyMjIyMjIyMjKyUlJSUjIyMjIyMjIysjIyMjKj09KyM9PSsjIyMjIyMjIyMjIyMjIyorKyoqKioqKioqKioqKioqKioqKioqKioqXG4jIyMjIyMjIyMjIyMjIysrKysrPSslIyUjKiMjIyojJSUlJSsjPSsjIyMjIyMjIyMjKiMjIysjPSMjKiMqKioqKioqKioqKioqKioqKioqKlxuIyMjIyMjIyMjIyMjIyMqIz09Kz09PT0jIz09PSMjIyUlJSUlJSUjIyMjIyMjIyMjIyMjPSMrIyMjIyMjKioqKisrKj09KyoqKioqKioqKipcbiMjIyMjKz0rIyMjIyMjIyMjIyM9Kz09Kz09PT0jIyMqKyMlJSUlIyMjIyMjIyMjIyMqKysjIyMjIyMjIz09Kis9PT09PT0rKyoqKioqKioqXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyo9PT09PT09IyMjIyMrIyUlKiMjIyMjIyMjKj09IysrIyMjIyMjKj09PT09PT09PT09PT09PT0qKioqKlxuIyMjIyMjIyMjIyMjKyMjIyMjKyMjIyM9PT0rPSMjIyMjIyMrIyMjIyMjIyM9PT09PSMrKyMjIys9PT09PT09PT09PT09PT09PT09KyoqKilcbiIsIm1vZHVsZSB0eXBlIENvbmZpZyA9IHNpZ1xuICB0eXBlIGxhbmdcblxuICAoKiB2YWwgZGVmYXVsdCA6IGxhbmcgKilcbiAgdmFsIGFjdGl2ZSA6IGxhbmcgTHdkLnZhclxuICB2YWwgZ2V0IDogbGFuZyAtPiBzdHJpbmcgLT4gc3RyaW5nXG5lbmRcblxubGV0IG1ha2UgKHR5cGUgYSkgKG1vZHVsZSBDIDogQ29uZmlnIHdpdGggdHlwZSBsYW5nID0gYSkgPVxuICBsZXQgZ2V0IHN0cmluZyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBDLmFjdGl2ZSkgfmY6KGZ1biBsYW5nIC0+IEpzdHIudiBAQCBDLmdldCBsYW5nIHN0cmluZylcbiAgaW5cbiAgbGV0IHNldCAobGFuZyA6IGEpID0gTHdkLnNldCBDLmFjdGl2ZSBsYW5nIGluXG4gIChzZXQsIGdldClcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIEI2NCA9IEJhc2U2NFxub3BlbiEgQnJyXG5tb2R1bGUgU3RvcmFnZSA9IEJycl9pby5TdG9yYWdlXG5cbmxldCBrZXlzID0gSGFzaHRibC5jcmVhdGUgNjRcblxubGV0IGNoZWNrX2tleSBrZXkgPVxuICBpZiBIYXNodGJsLm1lbSBrZXlzIGtleSB0aGVuXG4gICAgZmFpbHdpdGggQEAgUHJpbnRmLnNwcmludGYgXCJNdWx0aXBsZSBwZXJzaXRlbnQgdmFyIGFyZSB1c2luZyB0aGUga2V5ICVzXCIga2V5XG4gIGVsc2UgSGFzaHRibC5hZGQga2V5cyBrZXkgKClcblxubGV0IGxvY2FsX3N0b3JhZ2UgPSBTdG9yYWdlLmxvY2FsIEcud2luZG93XG5cbmxldCBzdG9yZSB+a2V5IHZhbHVlID1cbiAgRW5jb2RpbmdzLnRvX2pzdHIgdmFsdWUgfD4gU3RvcmFnZS5zZXRfaXRlbSBsb2NhbF9zdG9yYWdlIGtleVxuXG5sZXQgZmV0Y2ggfmtleSA9XG4gIGxldCBvcGVuIFJlc3VsdC5JbmZpeCBpblxuICBsZXQqIGVuY29kZWRfdmFsdWUgPVxuICAgIG1hdGNoIFN0b3JhZ2UuZ2V0X2l0ZW0gbG9jYWxfc3RvcmFnZSBrZXkgd2l0aFxuICAgIHwgTm9uZSAtPiBFcnJvciBgTm90X2ZvdW5kXG4gICAgfCBTb21lIHYgLT4gT2sgdlxuICBpblxuICBFbmNvZGluZ3Mub2ZfanN0ciBlbmNvZGVkX3ZhbHVlXG5cbmxldCBpbml0aWFsX3ZhbHVlIH5rZXkgZiA9XG4gIG1hdGNoIGZldGNoIH5rZXkgd2l0aFxuICB8IEVycm9yIGBOb3RfZm91bmQgLT4gZiAoKVxuICB8IEVycm9yIChgTXNnIG1zZykgLT5cbiAgICAgIENvbnNvbGUud2FybiBbIG1zZyBdO1xuICAgICAgZiAoKVxuICB8IE9rIHYgLT4gdlxuXG5sZXQgaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmID1cbiAgbWF0Y2ggZmV0Y2ggfmtleSB3aXRoXG4gIHwgRXJyb3IgYE5vdF9mb3VuZCAtPiBmICgpXG4gIHwgRXJyb3IgKGBNc2cgbXNnKSAtPlxuICAgICAgQ29uc29sZS53YXJuIFsgbXNnIF07XG4gICAgICBmICgpXG4gIHwgT2sgdiAtPiBGdXQub2sgQEAgdlxuXG5sZXQgbWFrZV9wZXJzaXN0ZW50X3ZhciB+a2V5IHZhbHVlID1cbiAgaWdub3JlIEBAIHN0b3JlIH5rZXkgdmFsdWU7XG4gIGxldCB2YXIgPSBMd2QudmFyIHZhbHVlIGluXG4gIGxldCByb290ID0gTHdkLm9ic2VydmUgKEx3ZC5nZXQgdmFyKSBpblxuICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgIGxldCBuZXdfdmFsdWUgPSBMd2QucXVpY2tfc2FtcGxlIHJvb3QgaW5cbiAgICAgIGlnbm9yZSBAQCBzdG9yZSB+a2V5IG5ld192YWx1ZSk7XG4gIGxldCBfID0gTHdkLnF1aWNrX3NhbXBsZSByb290IGluXG4gIHZhclxuXG5sZXQgdmFyX2YgfmtleSBmID1cbiAgbGV0ICgpID0gY2hlY2tfa2V5IGtleSBpblxuICBsZXQga2V5ID0gSnN0ci52IGtleSBpblxuICBsZXQgdmFsdWUgPSBpbml0aWFsX3ZhbHVlIH5rZXkgZiBpblxuICBtYWtlX3BlcnNpc3RlbnRfdmFyIH5rZXkgdmFsdWVcblxubGV0IHZhciB+a2V5IGRlZmF1bHQgPSB2YXJfZiB+a2V5IChmdW4gKCkgLT4gZGVmYXVsdClcblxubGV0IHZhcl9mdXQgKHR5cGUgYSBiKSB+a2V5IChmIDogdW5pdCAtPiAoYSwgYikgRnV0LnJlc3VsdCkgOlxuICAgIChhIEx3ZC52YXIsIGIpIEZ1dC5yZXN1bHQgPVxuICBsZXQgKCkgPSBjaGVja19rZXkga2V5IGluXG4gIGxldCBrZXkgPSBKc3RyLnYga2V5IGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgKHZhbHVlIDogYSkgPSAoaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmIDogKGEsIGIpIEZ1dC5yZXN1bHQpIGluXG4gIG1ha2VfcGVyc2lzdGVudF92YXIgfmtleSB2YWx1ZVxuIiwib3BlbiBTdGRcbm9wZW4gQnJyZXIuQnJyXG5vcGVuIEJycl9sd2Rcbm1vZHVsZSBGaWVsZCA9IEZpZWxkXG5cbnR5cGUgKCd0LCAnYSkgZm9ybV9zZXR0ZXIgPSAndCAtPiAnYSBGaWVsZC52YWxpZGF0aW9uIC0+ICd0XG5cbnR5cGUgJ3JlcyBmb3JtX2ZpZWxkID1cbiAgfCBGIDogJ2EgRmllbGQudCAqICgnZm9ybSwgJ2EpIGZvcm1fc2V0dGVyIC0+ICdmb3JtIGZvcm1fZmllbGRcblxubW9kdWxlIHR5cGUgRm9ybSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgZGVmYXVsdCA6IHRcbiAgdmFsIGZpZWxkcyA6IHQgZm9ybV9maWVsZCBMd2QudCBMd2Rfc2VxLnQgTHdkLnRcbmVuZFxuXG5sZXQgZmllbGQgZmllbGQgc2V0dGVyID0gTHdkLm1hcCBmaWVsZCB+ZjooZnVuIGZpZWxkIC0+IEYgKGZpZWxkLCBzZXR0ZXIpKVxuXG5sZXQgY3JlYXRlID9kID9hdCA/ZXYgKHR5cGUgdCkgKG1vZHVsZSBGb3JtIDogRm9ybSB3aXRoIHR5cGUgdCA9IHQpIG9uX3N1Ym1pdCA6XG4gICAgRWx3ZC50IEx3ZC50ID1cbiAgbGV0IGZpZWxkcyA9XG4gICAgTHdkX3NlcS5saWZ0IEZvcm0uZmllbGRzXG4gICAgfD4gTHdkX3NlcS5mb2xkX21vbm9pZFxuICAgICAgICAgKGZ1biAoRiAoZmllbGQsIG1hcHBlcikpIC0+XG4gICAgICAgICAgICggTHdkX3NlcS5lbGVtZW50IGZpZWxkLmVsdCxcbiAgICAgICAgICAgICBsZXQgdmFsdWUgKCkgPVxuICAgICAgICAgICAgICAgbWF0Y2ggTHdkLnBlZWsgZmllbGQudmFsdWUgd2l0aFxuICAgICAgICAgICAgICAgfCBOb25lIC0+IEZpZWxkLkVtcHR5XG4gICAgICAgICAgICAgICB8IFNvbWUgdiAtPiBmaWVsZC52YWxpZGF0ZSB2XG4gICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICBmdW4gdCAtPiBtYXBwZXIgdCBAQCB2YWx1ZSAoKSApKVxuICAgICAgICAgKCAoTHdkX3NlcS5lbXB0eSwgRnVuLmlkKSxcbiAgICAgICAgICAgZnVuIChlbHRzLCBmKSAoZWx0cycsIGYnKSAtPlxuICAgICAgICAgICAgIChMd2Rfc2VxLmNvbmNhdCBlbHRzIGVsdHMnLCBmdW4gdCAtPiBmJyAoZiB0KSkgKVxuICBpblxuICBsZXQgaGFuZGxlciA9XG4gICAgTHdkLm1hcCBmaWVsZHMgfmY6KGZ1biAoXywgdmFsdWUpIC0+XG4gICAgICAgIGxldCBvbl9zdWJtaXQgZSA9XG4gICAgICAgICAgb25fc3VibWl0IEBAIHZhbHVlIEZvcm0uZGVmYXVsdDtcbiAgICAgICAgICBFdi5wcmV2ZW50X2RlZmF1bHQgZVxuICAgICAgICBpblxuICAgICAgICBFbHdkLmhhbmRsZXIgRXYuc3VibWl0IG9uX3N1Ym1pdClcbiAgaW5cbiAgbGV0IG9uX3N1Ym1pdCA9IGBSIGhhbmRsZXIgaW5cbiAgbGV0IGVsdHMgPSBMd2QubWFwIGZpZWxkcyB+ZjooZnVuIChlbHRzLCBfKSAtPiBlbHRzKSBpblxuICBsZXQgZXYgPSBPcHRpb24ubWFwX29yIH5kZWZhdWx0Olsgb25fc3VibWl0IF0gKExpc3QuY29ucyBvbl9zdWJtaXQpIGV2IGluXG4gIEVsd2QuZm9ybSA/ZCA/YXQgfmV2IFsgYFMgKEx3ZF9zZXEubGlmdCBlbHRzKSBdXG4iLCJvcGVuISBTdGRcbm9wZW4hIEJycmVyXG5vcGVuISBCcnJcbm9wZW4hIEJycl9sd2RcblxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHtcbiAgZmllbGQgOiBFbHdkLnQgTHdkLnQ7XG4gIGxhYmVsIDogRWx3ZC50IEx3ZC50O1xuICB2YWx1ZSA6ICdhIEx3ZC50O1xufVxuXG5sZXQgbmFtZSB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLS1pZFwiIGJhc2VfbmFtZVxuICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJXNcIiBiYXNlX25hbWVcblxubGV0IG1ha2UgPyhhdCA9IFtdKSA/KGV2ID0gW10pIChkZXNjIDogc3RyaW5nIG9wdGlvbiBGaWVsZC5kZXNjKSA9XG4gIGxldCBpZCA9IG5hbWUgfmlkOnRydWUgZGVzYy5uYW1lIGluXG4gIGxldCBuYW1lID0gbmFtZSB+aWQ6ZmFsc2UgZGVzYy5uYW1lIGluXG4gIGxldCB2YXIgPSBQZXJzaXN0ZW50LnZhciB+a2V5OmlkIGRlc2MuZGVmYXVsdCBpblxuICBsZXQgbGFiZWwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGRlc2MubGFiZWwgaW5cbiAgbGV0IGZpZWxkID1cbiAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgYXRcbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJ0ZXh0XCIpXG4gICAgaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbWF0Y2ggTHdkLnBlZWsgdmFyIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IGBQIChBdC52YWx1ZSBAQCBKc3RyLnYgdikgOjogYXRcbiAgICAgIHwgTm9uZSAtPiBhdFxuICAgIGluXG4gICAgbGV0IG9uX2NoYW5nZSA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYua2V5dXAgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCB2YWx1ZSA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChTb21lIChKdi50b19zdHJpbmcgdmFsdWUpKSlcbiAgICBpblxuICAgIGxldCBldiA9IGBQIG9uX2NoYW5nZSA6OiBldiBpblxuICAgIEVsd2QuaW5wdXQgfmF0IH5ldiAoKVxuICBpblxuICB7IGZpZWxkOyBsYWJlbDsgdmFsdWUgPSBMd2QuZ2V0IHZhciB9XG4iLCJvcGVuISBTdGRcbm9wZW4hIEJycmVyXG5vcGVuISBCcnJcbm9wZW4hIEJycl9sd2RcblxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHtcbiAgZmllbGQgOiBFbHdkLnQgTHdkLnQ7XG4gIGxhYmVsIDogRWx3ZC50IEx3ZC50O1xuICB2YWx1ZSA6ICdhIEx3ZC50O1xufVxuXG5sZXQgbmFtZSB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLS1pZFwiIGJhc2VfbmFtZSBlbHNlIGJhc2VfbmFtZVxuXG5sZXQgbWFrZSA/KGF0ID0gW10pID8oZXYgPSBbXSkgKGRlc2MgOiBzdHJpbmcgRmllbGQuZGVzYykgb3B0aW9ucyA9XG4gIGxldCBpZCA9IG5hbWUgfmlkOnRydWUgZGVzYy5uYW1lIGluXG4gIGxldCBuYW1lID0gbmFtZSB+aWQ6ZmFsc2UgZGVzYy5uYW1lIGluXG4gIGxldCB2YXIgPSBQZXJzaXN0ZW50LnZhciB+a2V5OmlkIGRlc2MuZGVmYXVsdCBpblxuICBsZXQgbGFiZWwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGRlc2MubGFiZWwgaW5cbiAgbGV0IGZpZWxkID1cbiAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgYXRcbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJ0ZXh0XCIpXG4gICAgaW5cbiAgICBsZXQgb25fY2hhbmdlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5jaGFuZ2UgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCB2YWx1ZSA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChKdi50b19zdHJpbmcgdmFsdWUpKVxuICAgIGluXG4gICAgbGV0IGV2ID0gYFAgb25fY2hhbmdlIDo6IGV2IGluXG4gICAgbGV0IG9wdGlvbnMgPVxuICAgICAgTHdkX3NlcS5tYXBcbiAgICAgICAgKGZ1biAodmFsdWUsIG5hbWUpIC0+XG4gICAgICAgICAgbGV0IG9wZW4gQXR0cnMuTyBpblxuICAgICAgICAgIGxldCBhdCA9IHYgKGBQIChBIChBdC52YWx1ZSBAQCBKc3RyLnYgdmFsdWUpKSkgaW5cbiAgICAgICAgICBsZXQgc2VsZWN0ZWQgPVxuICAgICAgICAgICAgTHdkLm1hcCAoTHdkLmdldCB2YXIpIH5mOihmdW4gc2VsZWN0ZWQgLT5cbiAgICAgICAgICAgICAgICBBIChBdC5pZicgKEVxdWFsLnBvbHkgc2VsZWN0ZWQgdmFsdWUpIEF0LnNlbGVjdGVkKSlcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBhdCA9IGBSIHNlbGVjdGVkICQ6OiBhdCBpblxuICAgICAgICAgIEVsd2Qub3B0aW9uIH5hdCBbIGBQIChFbC50eHQnIG5hbWUpIF0pXG4gICAgICAgIG9wdGlvbnNcbiAgICBpblxuICAgIEVsd2Quc2VsZWN0IH5hdCB+ZXYgWyBgUyAoTHdkX3NlcS5saWZ0IG9wdGlvbnMpIF1cbiAgaW5cbiAgeyBmaWVsZDsgbGFiZWw7IHZhbHVlID0gTHdkLmdldCB2YXIgfVxuIiwib3BlbiEgU3RkXG5vcGVuISBCcnJlclxub3BlbiEgQnJyXG5vcGVuISBCcnJfbHdkXG5cbnR5cGUgY2hlY2tlZCA9IGJvb2xcbnR5cGUgbGFiZWwgPSBFbHdkLnQgRWx3ZC5jb2xcbnR5cGUgJ3ZhbHVlIGRlc2MgPSBDaGVjayBvZiAndmFsdWUgKiBsYWJlbCAqIGNoZWNrZWRcbigqIFRPRE8gfCBHcm91cCBvZiBsYWJlbCAqICd2YWx1ZSBkZXNjIGxpc3QgKilcblxudHlwZSAndmFsdWUgdCA9IHsgbmFtZSA6IHN0cmluZzsgZGVzYyA6ICd2YWx1ZSBkZXNjIEx3ZF9zZXEudCBMd2QudCB9XG50eXBlICdhIHJlYWN0aXZlX2ZpZWxkID0geyBmaWVsZCA6IEVsd2QudCBMd2QudDsgdmFsdWUgOiAnYSBMd2QudCB9XG5cbmxldCBuYW1lIH5nIH5uIH5pZCBiYXNlX25hbWUgPVxuICBpZiBpZCB0aGVuIFByaW50Zi5zcHJpbnRmIFwiJXMtJWktJWktaWRcIiBiYXNlX25hbWUgZyBuXG4gIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlcy0laS0laVwiIGJhc2VfbmFtZSBnIG5cblxubGV0IG1ha2UgdCA9XG4gIGxldCBtYWtlX2NoZWNrIH5nIH5uIHZhbHVlIGxhYmVsIGNoZWNrZWQgPVxuICAgIGxldCBpZCA9IG5hbWUgfmcgfm4gfmlkOnRydWUgdC5uYW1lIGluXG4gICAgbGV0IG5hbWUgPSBuYW1lIH5nIH5uIH5pZDpmYWxzZSB0Lm5hbWUgaW5cbiAgICBsZXQgcmVzdWx0IGNoZWNrZWQgPSBpZiBjaGVja2VkIHRoZW4gU29tZSB2YWx1ZSBlbHNlIE5vbmUgaW5cbiAgICBsZXQgdmFyID0gUGVyc2lzdGVudC52YXIgfmtleTppZCAocmVzdWx0IGNoZWNrZWQpIGluXG4gICAgbGV0IGxibCA9IEVsd2QubGFiZWwgfmF0OlsgYFAgKEF0LmZvcicgKEpzdHIudiBpZCkpIF0gbGFiZWwgaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgW11cbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJjaGVja2JveFwiKVxuICAgIGluXG4gICAgbGV0IGNoZWNrZWQgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCB2YXIpIH5mOihmdW5jdGlvblxuICAgICAgICB8IFNvbWUgXyAtPiBBdC5jaGVja2VkXG4gICAgICAgIHwgTm9uZSAtPiBBdC52b2lkKVxuICAgIGluXG4gICAgbGV0IGF0ID0gYFIgY2hlY2tlZCA6OiBhdCBpblxuICAgIGxldCBvbl9jaGFuZ2UgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmNoYW5nZSAoZnVuIGV2IC0+XG4gICAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgICAgbGV0IGNoZWNrZWQgPSBKdi5nZXQgdCBcImNoZWNrZWRcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChyZXN1bHQgKEp2LnRvX2Jvb2wgY2hlY2tlZCkpKVxuICAgIGluXG4gICAgbGV0IGV2ID0gWyBgUCBvbl9jaGFuZ2UgXSBpblxuICAgIChFbHdkLihkaXYgWyBgUiAoaW5wdXQgfmF0IH5ldiAoKSk7IGBSIGxibCBdKSwgTHdkLmdldCB2YXIpXG4gIGluXG4gICgqIDxmaWVsZHNldD48bGVnZW5kPiAqKVxuICAoKiA8ZmllbGRzZXQ+PGxlZ2VuZD4gKilcbiAgbGV0IG1ha2VfYWxsIH5nIGRlc2MgPVxuICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICBMd2Rfc2VxLm1hcFxuICAgICAgKGZ1bmN0aW9uXG4gICAgICAgIHwgQ2hlY2sgKHYsIGwsIGMpIC0+XG4gICAgICAgICAgICBsZXQgZWx0LCB2YWx1ZSA9IG1ha2VfY2hlY2sgfmcgfm46IW4gdiBsIGMgaW5cbiAgICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICAgIChlbHQsIHZhbHVlKSlcbiAgICAgIGRlc2NcbiAgaW5cbiAgbGV0IGFsbCA9IG1ha2VfYWxsIH5nOjAgdC5kZXNjIGluXG4gIGxldCBlbHRzID0gTHdkX3NlcS5tYXAgKGZ1biAoZWx0LCBfKSAtPiBlbHQpIGFsbCBpblxuICBsZXQgdmFsdWUgPVxuICAgIEx3ZF9zZXEuZm9sZF9tb25vaWQgKGZ1biAoXywgdikgLT4gTHdkX3NlcS5lbGVtZW50IHYpIEx3ZF9zZXEubW9ub2lkIGFsbFxuICAgIHw+IEx3ZF9zZXEubGlmdCB8PiBMd2Rfc2VxLmZpbHRlcl9tYXAgRnVuLmlkIHw+IEx3ZC5tYXAgfmY6THdkX3NlcS50b19saXN0XG4gIGluXG4gIHsgZmllbGQgPSBFbHdkLmRpdiBbIGBTIChMd2Rfc2VxLmxpZnQgZWx0cykgXTsgdmFsdWUgfVxuXG4oKiBsZXQgcmVjIG1ha2VfYWxsIH5nIH5uIChhY2NfZWx0LCBhY2NfdmFsdWUpIGRlc2MgPVxuICAgICBtYXRjaCBkZXNjIHdpdGhcbiAgICAgfCBDaGVjayAodiwgbCwgYykgOjogdGwgLT5cbiAgICAgICAgIGxldCBlbHQsIHZhbHVlID0gbWFrZV9jaGVjayB+ZyB+biB2IGwgYyBpblxuICAgICAgICAgbGV0IGFjY19lbHQgPSBMd2Rfc2VxLmNvbmNhdCBhY2NfZWx0IEBAIEx3ZF9zZXEuZWxlbWVudCBlbHQgaW5cbiAgICAgICAgIGxldCBhY2NfdmFsdWUgPVxuICAgICAgICAgICBMd2QubWFwMiBhY2NfdmFsdWUgdmFsdWUgfmY6KGZ1biBhY2MgLT4gZnVuY3Rpb25cbiAgICAgICAgICAgICB8IE5vbmUgLT4gYWNjIHwgU29tZSB2IC0+IHYgOjogYWNjKVxuICAgICAgICAgaW5cbiAgICAgICAgIG1ha2VfYWxsIH5nIH5uOihuICsgMSkgKGFjY19lbHQsIGFjY192YWx1ZSkgdGxcbiAgICAgfCBfIC0+IChMd2QucHVyZSBhY2NfZWx0LCBhY2NfdmFsdWUpXG4gICBpblxuICAgbGV0IGVsdHMsIHZhbHVlID0gbWFrZV9hbGwgfmc6MCB+bjowIChMd2Rfc2VxLmVtcHR5LCBMd2QucHVyZSBbXSkgdC5kZXNjIGluXG4gICB7IGZpZWxkID0gRWx3ZC5kaXYgWyBgUyAoTHdkX3NlcS5saWZ0IGVsdHMpIF07IHZhbHVlIH0gKilcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG5sZXQgdiA/ZCA/KGF0ID0gW10pID9ldiB2YWx1ZSA9XG4gIGxldCBhdCA9XG4gICAgQXR0cnMuYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwiYnV0dG9uXCIpIGF0IHw+IEF0dHJzLmFkZCBBdC5OYW1lLnZhbHVlIHZhbHVlXG4gIGluXG4gIEVsd2QuaW5wdXQgP2QgfmF0ID9ldiAoKVxuXG50eXBlICdhIHVwZGF0ZSA9IE5vbmUgfCBOZXh0IHwgU2V0IG9mICdhXG5cbnR5cGUgJ3N0YXRlIGhhbmRsZXJfd2l0aF9zdGF0ZSA9XG4gIHwgSGFuZGxlcl93aXRoX3N0YXRlIDoge1xuICAgICAgb3B0cyA6IEV2Lmxpc3Rlbl9vcHRzIG9wdGlvbjtcbiAgICAgIHR5cGUnIDogJ2EgRXYudHlwZSc7XG4gICAgICBmdW5jIDogJ3N0YXRlIC0+ICdhIEV2LnQgLT4gJ3N0YXRlIHVwZGF0ZTtcbiAgICB9XG4gICAgICAtPiAnc3RhdGUgaGFuZGxlcl93aXRoX3N0YXRlXG5cbmxldCBoYW5kbGVyID9vcHRzIHR5cGUnIGZ1bmMgPSBIYW5kbGVyX3dpdGhfc3RhdGUgeyBvcHRzOyB0eXBlJzsgZnVuYyB9XG5cbm1vZHVsZSB0eXBlIFN0YXRlID0gc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCBkZWZhdWx0IDogdFxuICB2YWwgbmV4dCA6IHQgLT4gdFxuZW5kXG5cbmxldCBhcHBseV9zdGF0ZSBzdGF0ZSBmID0gZiBzdGF0ZVxuXG5sZXQgd2l0aF9zdGF0ZSA/KGJhc2UgPSBBdHRycy5lbXB0eSkgKHR5cGUgdCkgKG1vZHVsZSBTIDogU3RhdGUgd2l0aCB0eXBlIHQgPSB0KVxuICAgID8oc3RhdGUgPSBTLmRlZmF1bHQpID9kID8oYXQgOiAoUy50IC0+IEF0dHJzLnQpIG9wdGlvbilcbiAgICA/KGV2IDogdCBoYW5kbGVyX3dpdGhfc3RhdGUgRWx3ZC5jb2wgb3B0aW9uKVxuICAgIChjb250ZW50IDogUy50IC0+IEVsLnQgRWx3ZC5jb2wpID1cbiAgbGV0IHZfc3RhdGUgPSBMd2QudmFyIHN0YXRlIGluXG4gIGxldCBnZXRfc3RhdGUgKCkgPSBMd2QuZ2V0IHZfc3RhdGUgaW5cbiAgbGV0IHNldF9zdGF0ZSB0ID0gTHdkLnNldCB2X3N0YXRlIHQgaW5cbiAgbGV0IGVsdCA9XG4gICAgbGV0IG9wZW4gTHdkX2luZml4IGluXG4gICAgbGV0JCogc3RhdGUgPSBnZXRfc3RhdGUgKCkgaW5cbiAgICBsZXQgd2l0aF9zdGF0ZSAoSGFuZGxlcl93aXRoX3N0YXRlIHsgb3B0czsgdHlwZSc7IGZ1bmMgfSkgPVxuICAgICAgbGV0IGZ1bmMgZXYgPVxuICAgICAgICBtYXRjaCBmdW5jIHN0YXRlIGV2IHdpdGhcbiAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgIHwgU2V0IHMgLT4gc2V0X3N0YXRlIHNcbiAgICAgICAgfCBOZXh0IC0+IHNldF9zdGF0ZSBAQCBTLm5leHQgc3RhdGVcbiAgICAgIGluXG4gICAgICBFbHdkLmhhbmRsZXIgP29wdHMgdHlwZScgZnVuY1xuICAgIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6YmFzZVxuICAgICAgICAoZnVuIGF0IC0+IEF0dHJzLnVuaW9uIGJhc2UgQEAgYXBwbHlfc3RhdGUgc3RhdGUgYXQpXG4gICAgICAgIGF0XG4gICAgaW5cbiAgICBsZXQgYXQgPSBBdHRycy50b19hdCBhdCBpblxuICAgIGxldCBldiA9XG4gICAgICBPcHRpb24ubWFwXG4gICAgICAgIChMaXN0Lm1hcCB+ZjooZnVuY3Rpb25cbiAgICAgICAgICB8IGBQIGggLT4gYFAgKHdpdGhfc3RhdGUgaClcbiAgICAgICAgICB8IGBSIGggLT4gYFIgKEx3ZC5tYXAgaCB+Zjp3aXRoX3N0YXRlKVxuICAgICAgICAgIHwgYFMgaCAtPiBgUyAoTHdkX3NlcS5tYXAgd2l0aF9zdGF0ZSBoKSkpXG4gICAgICAgIGV2XG4gICAgaW5cbiAgICBFbHdkLmJ1dHRvbiA/ZCB+YXQgP2V2IChjb250ZW50IHN0YXRlKVxuICBpblxuICAoZWx0LCBnZXRfc3RhdGUsIHNldF9zdGF0ZSlcblxudHlwZSB0d29fc3RhdGUgPSBPbiB8IE9mZlxuXG5tb2R1bGUgVHdvX3N0YXRlID0gc3RydWN0XG4gIHR5cGUgdCA9IHR3b19zdGF0ZVxuXG4gIGxldCBkZWZhdWx0ID0gT25cbiAgbGV0IG5leHQgPSBmdW5jdGlvbiBPbiAtPiBPZmYgfCBPZmYgLT4gT25cbmVuZFxuXG5sZXQgdHdvX3N0YXRlID9iYXNlID0gd2l0aF9zdGF0ZSA/YmFzZSAobW9kdWxlIFR3b19zdGF0ZSlcbiIsIm9wZW4gU3RkTGFiZWxzXG5vcGVuIE1vcmVMYWJlbHNcbm9wZW4hIFlvanNvblxuXG50eXBlIHQgPSBZb2pzb24uU2FmZS50XG5cbmxldCB5b2pzb25fb2ZfdW5pdCAoKSA6IHQgPSBgTnVsbFxubGV0IHlvanNvbl9vZl9ib29sIGIgOiB0ID0gYEJvb2wgYlxubGV0IHlvanNvbl9vZl9zdHJpbmcgc3RyIDogdCA9IGBTdHJpbmcgc3RyXG5sZXQgeW9qc29uX29mX2J5dGVzIGJ5dGVzIDogdCA9IGBTdHJpbmcgKEJ5dGVzLnRvX3N0cmluZyBieXRlcylcbmxldCB5b2pzb25fb2ZfY2hhciBjIDogdCA9IGBTdHJpbmcgKFN0cmluZy5tYWtlIDEgYylcbmxldCB5b2pzb25fb2ZfaW50IG4gOiB0ID0gYEludCBuXG5sZXQgeW9qc29uX29mX2Zsb2F0IG4gOiB0ID0gYEZsb2F0IG5cbmxldCB5b2pzb25fb2ZfaW50MzIgKG4gOiBJbnQzMi50KSA6IHQgPSBgSW50bGl0IChJbnQzMi50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfaW50NjQgKG4gOiBJbnQ2NC50KSA6IHQgPSBgSW50bGl0IChJbnQ2NC50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfbmF0aXZlaW50IG4gOiB0ID0gYEludGxpdCAoTmF0aXZlaW50LnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9yZWYgeW9qc29uX29mX19hIHJmID0geW9qc29uX29mX19hICFyZlxubGV0IHlvanNvbl9vZl9sYXp5X3QgeW9qc29uX29mX19hIGx2ID0geW9qc29uX29mX19hIChMYXp5LmZvcmNlIGx2KVxuXG5sZXQgeW9qc29uX29mX29wdGlvbiB5b2pzb25fb2ZfX2EgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB5b2pzb25fb2ZfX2EgeFxuICB8IE5vbmUgLT4gYE51bGxcbjs7XG5cbmxldCB5b2pzb25fb2ZfcGFpciB5b2pzb25fb2ZfX2EgeW9qc29uX29mX19iIChhLCBiKSA9XG4gIGBMaXN0IFsgeW9qc29uX29mX19hIGE7IHlvanNvbl9vZl9fYiBiIF1cbjs7XG5cbmxldCB5b2pzb25fb2ZfdHJpcGxlIHlvanNvbl9vZl9fYSB5b2pzb25fb2ZfX2IgeW9qc29uX29mX19jIChhLCBiLCBjKSA9XG4gIGBMaXN0IFsgeW9qc29uX29mX19hIGE7IHlvanNvbl9vZl9fYiBiOyB5b2pzb25fb2ZfX2MgYyBdXG47O1xuXG4oKiBMaXN0LnJldiAoTGlzdC5yZXZfbWFwIC4uLikgaXMgdGFpbCByZWN1cnNpdmUsIHRoZSBPQ2FtbCBzdGFuZGFyZFxuICAgbGlicmFyeSBMaXN0Lm1hcCBpcyBOT1QuICopXG5sZXQgeW9qc29uX29mX2xpc3QgeW9qc29uX29mX19hIGxzdCA9IGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIH5mOnlvanNvbl9vZl9fYSBsc3QpKVxuXG5sZXQgeW9qc29uX29mX2FycmF5IHlvanNvbl9vZl9fYSBhciA9XG4gIGxldCBsc3RfcmVmID0gcmVmIFtdIGluXG4gIGZvciBpID0gQXJyYXkubGVuZ3RoIGFyIC0gMSBkb3dudG8gMCBkb1xuICAgIGxzdF9yZWYgOj0geW9qc29uX29mX19hIGFyLihpKSA6OiAhbHN0X3JlZlxuICBkb25lO1xuICBgTGlzdCAhbHN0X3JlZlxuOztcblxubGV0IHlvanNvbl9vZl9oYXNodGJsIHlvanNvbl9vZl9rZXkgeW9qc29uX29mX3ZhbCBodGJsID1cbiAgbGV0IGNvbGwgfmtleTprIH5kYXRhOnYgYWNjID0gYExpc3QgWyB5b2pzb25fb2Zfa2V5IGs7IHlvanNvbl9vZl92YWwgdiBdIDo6IGFjYyBpblxuICBgTGlzdCAoSGFzaHRibC5mb2xkIGh0YmwgfmluaXQ6W10gfmY6Y29sbClcbjs7XG5cbmxldCB5b2pzb25fb2Zfb3BhcXVlIF8gPSBgU3RyaW5nIFwiPG9wYXF1ZT5cIlxubGV0IHlvanNvbl9vZl9mdW4gXyA9IGBTdHJpbmcgXCI8ZnVuPlwiXG5cbmV4Y2VwdGlvbiBPZl95b2pzb25fZXJyb3Igb2YgZXhuICogdFxuXG5sZXQgcmVjb3JkX2NoZWNrX2V4dHJhX2ZpZWxkcyA9IHJlZiB0cnVlXG5sZXQgb2ZfeW9qc29uX2Vycm9yX2V4biBleGMgeW9qc29uID0gcmFpc2UgKE9mX3lvanNvbl9lcnJvciAoZXhjLCB5b2pzb24pKVxubGV0IG9mX3lvanNvbl9lcnJvciB3aGF0IHlvanNvbiA9IHJhaXNlIChPZl95b2pzb25fZXJyb3IgKEZhaWx1cmUgd2hhdCwgeW9qc29uKSlcblxubGV0IHVuaXRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYE51bGwgLT4gKClcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInVuaXRfb2ZfeW9qc29uOiBgTnVsbCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBib29sX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBCb29sIHYgLT4gdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYm9vbF9vZl95b2pzb246IHRydWUvZmFsc2UgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgc3RyaW5nX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+IHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwic3RyaW5nX29mX3lvanNvbjogc3RyaW5nIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGJ5dGVzX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+IEJ5dGVzLm9mX3N0cmluZyBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImJ5dGVzX29mX3lvanNvbjogc3RyaW5nIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGNoYXJfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT5cbiAgICBpZiBTdHJpbmcubGVuZ3RoIHN0ciA8PiAxXG4gICAgdGhlbiBvZl95b2pzb25fZXJyb3IgXCJjaGFyX29mX3lvanNvbjogc3RyaW5nIG11c3QgY29udGFpbiBvbmUgY2hhcmFjdGVyIG9ubHlcIiB5b2pzb247XG4gICAgc3RyLlswXVxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiY2hhcl9vZl95b2pzb246IHN0cmluZyBvZiBzaXplIG9uZSBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludCB2IC0+IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgZmxvYXRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEZsb2F0IHYgLT4gdlxuICB8IGBJbnQgaSAtPiBmbG9hdF9vZl9pbnQgaVxuICB8IGBJbnRsaXQgc3RyIC0+IGZsb2F0X29mX3N0cmluZyBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImZsb2F0X29mX3lvanNvbjogZmxvYXQgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50MzJfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gSW50MzIub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBJbnQzMi5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50MzJfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludDY0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IEludDY0Lm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gSW50NjQub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludDY0X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBuYXRpdmVpbnRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gTmF0aXZlaW50Lm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gTmF0aXZlaW50Lm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJuYXRpdmVpbnRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IHJlZl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9IHJlZiAoYV9fb2ZfeW9qc29uIHlvanNvbilcbmxldCBsYXp5X3Rfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPSBMYXp5LmZyb21fdmFsIChhX19vZl95b2pzb24geW9qc29uKVxuXG5sZXQgb3B0aW9uX29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTnVsbCAtPiBOb25lXG4gIHwgZWwgLT4gU29tZSAoYV9fb2ZfeW9qc29uIGVsKVxuOztcblxubGV0IHBhaXJfb2ZfeW9qc29uIGFfX29mX3lvanNvbiBiX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbIGFfeW9qc29uOyBiX3lvanNvbiBdIC0+XG4gICAgbGV0IGEgPSBhX19vZl95b2pzb24gYV95b2pzb24gaW5cbiAgICBsZXQgYiA9IGJfX29mX3lvanNvbiBiX3lvanNvbiBpblxuICAgIGEsIGJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInBhaXJfb2ZfeW9qc29uOiBpbnZhbGlkIGZvcm1hdFwiIHlvanNvblxuOztcblxubGV0IHRyaXBsZV9vZl95b2pzb24gYV9fb2ZfeW9qc29uIGJfX29mX3lvanNvbiBjX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbIGFfeW9qc29uOyBiX3lvanNvbjsgY195b2pzb24gXSAtPlxuICAgIGxldCBhID0gYV9fb2ZfeW9qc29uIGFfeW9qc29uIGluXG4gICAgbGV0IGIgPSBiX19vZl95b2pzb24gYl95b2pzb24gaW5cbiAgICBsZXQgYyA9IGNfX29mX3lvanNvbiBjX3lvanNvbiBpblxuICAgIGEsIGIsIGNcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInRyaXBsZV9vZl95b2pzb246IGludmFsaWQgZm9ybWF0XCIgeW9qc29uXG47O1xuXG5sZXQgbGlzdF9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgbHN0IC0+XG4gICAgbGV0IHJldl9sc3QgPSBMaXN0LnJldl9tYXAgbHN0IH5mOmFfX29mX3lvanNvbiBpblxuICAgIExpc3QucmV2IHJldl9sc3RcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImxpc3Rfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGFycmF5X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbXSAtPiBbfHxdXG4gIHwgYExpc3QgKGggOjogdCkgLT5cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggdCArIDEgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBsZW4gKGFfX29mX3lvanNvbiBoKSBpblxuICAgIGxldCByZWMgbG9vcCBpID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gcmVzXG4gICAgICB8IGggOjogdCAtPlxuICAgICAgICByZXMuKGkpIDwtIGFfX29mX3lvanNvbiBoO1xuICAgICAgICBsb29wIChpICsgMSkgdFxuICAgIGluXG4gICAgbG9vcCAxIHRcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImFycmF5X29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBoYXNodGJsX29mX3lvanNvbiBrZXlfb2ZfeW9qc29uIHZhbF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBsc3QgLT5cbiAgICBsZXQgaHRibCA9IEhhc2h0YmwuY3JlYXRlIDAgaW5cbiAgICBsZXQgYWN0ID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgWyBrX3lvanNvbjsgdl95b2pzb24gXSAtPlxuICAgICAgICBIYXNodGJsLmFkZCBodGJsIH5rZXk6KGtleV9vZl95b2pzb24ga195b2pzb24pIH5kYXRhOih2YWxfb2ZfeW9qc29uIHZfeW9qc29uKVxuICAgICAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImhhc2h0Ymxfb2ZfeW9qc29uOiB0dXBsZSBsaXN0IG5lZWRlZFwiIHlvanNvblxuICAgIGluXG4gICAgTGlzdC5pdGVyIGxzdCB+ZjphY3Q7XG4gICAgaHRibFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaGFzaHRibF9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgb3BhcXVlX29mX3lvanNvbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgXCJvcGFxdWVfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCBvcGFxdWUgdmFsdWVzXCIgeW9qc29uXG47O1xuXG5sZXQgZnVuX29mX3lvanNvbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgXCJmdW5fb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCBmdW5jdGlvbiB2YWx1ZXNcIiB5b2pzb25cbjs7XG5cbm1vZHVsZSBQcmltaXRpdmVzID0gc3RydWN0XG4gIGxldCB5b2pzb25fb2ZfYXJyYXkgPSB5b2pzb25fb2ZfYXJyYXlcbiAgbGV0IGFycmF5X29mX3lvanNvbiA9IGFycmF5X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2Jvb2wgPSB5b2pzb25fb2ZfYm9vbFxuICBsZXQgYm9vbF9vZl95b2pzb24gPSBib29sX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2NoYXIgPSB5b2pzb25fb2ZfY2hhclxuICBsZXQgY2hhcl9vZl95b2pzb24gPSBjaGFyX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2Zsb2F0ID0geW9qc29uX29mX2Zsb2F0XG4gIGxldCBmbG9hdF9vZl95b2pzb24gPSBmbG9hdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQgPSB5b2pzb25fb2ZfaW50XG4gIGxldCBpbnRfb2ZfeW9qc29uID0gaW50X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludDMyID0geW9qc29uX29mX2ludDMyXG4gIGxldCBpbnQzMl9vZl95b2pzb24gPSBpbnQzMl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQ2NCA9IHlvanNvbl9vZl9pbnQ2NFxuICBsZXQgaW50NjRfb2ZfeW9qc29uID0gaW50NjRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbGlzdCA9IHlvanNvbl9vZl9saXN0XG4gIGxldCBsaXN0X29mX3lvanNvbiA9IGxpc3Rfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbmF0aXZlaW50ID0geW9qc29uX29mX25hdGl2ZWludFxuICBsZXQgbmF0aXZlaW50X29mX3lvanNvbiA9IG5hdGl2ZWludF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9vcHRpb24gPSB5b2pzb25fb2Zfb3B0aW9uXG4gIGxldCBvcHRpb25fb2ZfeW9qc29uID0gb3B0aW9uX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3JlZiA9IHlvanNvbl9vZl9yZWZcbiAgbGV0IHJlZl9vZl95b2pzb24gPSByZWZfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2Zfc3RyaW5nID0geW9qc29uX29mX3N0cmluZ1xuICBsZXQgc3RyaW5nX29mX3lvanNvbiA9IHN0cmluZ19vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9ieXRlcyA9IHlvanNvbl9vZl9ieXRlc1xuICBsZXQgYnl0ZXNfb2ZfeW9qc29uID0gYnl0ZXNfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfdW5pdCA9IHlvanNvbl9vZl91bml0XG4gIGxldCB1bml0X29mX3lvanNvbiA9IHVuaXRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbGF6eV90ID0geW9qc29uX29mX2xhenlfdFxuICBsZXQgbGF6eV90X29mX3lvanNvbiA9IGxhenlfdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9oYXNodGJsID0geW9qc29uX29mX2hhc2h0YmxcbiAgbGV0IGhhc2h0Ymxfb2ZfeW9qc29uID0gaGFzaHRibF9vZl95b2pzb25cbmVuZFxuIiwibW9kdWxlIFlvanNvbl9jb252X2Vycm9yID0gWW9qc29uX2NvbnZfZXJyb3Jcbm1vZHVsZSBZb2pzb25fY29udiA9IFlvanNvbl9jb252XG5tb2R1bGUgWW9qc29uYWJsZSA9IFlvanNvbmFibGVfaW50ZlxubW9kdWxlIFlvanNvbiA9IFlvanNvblxuXG5tb2R1bGUgT3B0aW9uID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9XG4gICAgfCBOb25lXG4gICAgfCBTb21lIG9mICdhXG5lbmRcblxuZXh0ZXJuYWwgaWdub3JlIDogXyAtPiB1bml0ID0gXCIlaWdub3JlXCJcbmV4dGVybmFsIHBvbHlfZXF1YWwgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuXG5sZXQgKCAhICkgOiAnYSByZWYgLT4gJ2EgPSBmdW4geCAtPiAheFxuIiwibW9kdWxlIEFwaSA9IEplbGx5ZmluX2FwaVxuXG50eXBlIGNyZWRlbnRpYWxzID0geyBiYXNlX3VybCA6IHN0cmluZzsgdXNlcm5hbWUgOiBzdHJpbmc7IHBhc3N3b3JkIDogc3RyaW5nIH1cblxudHlwZSBjb25uZXhpb24gPSB7XG4gIGJhc2VfdXJsIDogc3RyaW5nO1xuICBhdXRoX3Jlc3BvbnNlIDogQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLnJlc3BvbnNlO1xufVxuXG5sZXQgZ2V0X3Rva2VuIHQgPSB0LmF1dGhfcmVzcG9uc2UuQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLmFjY2Vzc190b2tlblxuXG5sZXQgY29ubmVjdCBjcmVkZW50aWFscyA9XG4gIGxldCBtb2R1bGUgQXV0aCA9IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZSBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgeyBiYXNlX3VybDsgdXNlcm5hbWU7IHBhc3N3b3JkIH0gPSBjcmVkZW50aWFscyBpblxuICBsZXQgYXV0aCA9IHsgQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLnVzZXJuYW1lOyBwdyA9IHBhc3N3b3JkIH0gaW5cbiAgbGV0KyBhdXRoX3Jlc3BvbnNlID0gQXBpLnJlcXVlc3QgfmJhc2VfdXJsIChtb2R1bGUgQXV0aCkgYXV0aCAoKSBpblxuICB7IGJhc2VfdXJsOyBhdXRoX3Jlc3BvbnNlIH1cblxubGV0IHF1ZXJ5IHQgPVxuICBsZXQgdG9rZW4gPSBnZXRfdG9rZW4gdCBpblxuICBsZXQgYmFzZV91cmwgPSB0LmJhc2VfdXJsIGluXG4gIEplbGx5ZmluX2FwaS5yZXF1ZXN0IH5iYXNlX3VybCB+dG9rZW5cbiIsIm9wZW4gU3RkXG5vcGVuIEJyclxuXG50eXBlIHRhZyA9IEJsb2NrIG9mIGludCB8IEludCBvZiBpbnRcblxubGV0IHRhZ19vZiB2ID1cbiAgKCogd293IHdvdyB3b3cuIGlzIHRoYXQgb2theXlpc2ggPyopXG4gIGxldCBvYmogPSBPYmoucmVwciB2IGluXG4gIGlmIE9iai5pc19ibG9jayBvYmogdGhlbiBCbG9jayAoT2JqLnRhZyBvYmopIGVsc2UgSW50IChPYmoubWFnaWMgb2JqKVxuXG5tb2R1bGUgdHlwZSBRdWVyaWVzID0gc2lnXG4gIHR5cGUgJ2EgcXVlcnlcbiAgdHlwZSAnYSBldmVudFxuZW5kXG5cbm1vZHVsZSBNYWtlIChRIDogUXVlcmllcykgPSBzdHJ1Y3RcbiAgdHlwZSBlcnJvciA9IFsgYEp2IG9mIEp2LkVycm9yLnQgfCBgTXNnIG9mIHN0cmluZyBdXG4gIHR5cGUgJ2EgcXVlcnkgPSAnYSBRLnF1ZXJ5XG4gIHR5cGUgJ2EgZXZlbnQgPSAnYSBRLmV2ZW50XG4gIHR5cGUgJ2Egd2l0aF91dWlkID0geyB1dWlkIDogc3RyaW5nOyBkYXRhIDogJ2EgfVxuICB0eXBlICdhIG1lc3NhZ2UgPSBBbnN3ZXIgb2YgJ2Egd2l0aF91dWlkIHwgRXZlbnQgb2YgKCdhIGV2ZW50ICogJ2EpXG4gIHR5cGUgbGlzdGVuZXIgPSBzdHJpbmdcblxuICAoKiB0b2RvOmNoZWNrIHRoYXQgdGhlIHdvcmtlciBhbmQgdGhlIGNsaWVudCBzaGFyZSB0aGUgc2FtZSBhcGk/ICopXG5cbiAgbW9kdWxlIFN0YXJ0X2NsaWVudCAoUCA6IHNpZ1xuICAgIHZhbCB1cmwgOiBzdHJpbmdcbiAgZW5kKSA9XG4gIHN0cnVjdFxuICAgIGxldCBmdXR1cmVzIDogKHN0cmluZywgSnYudCAtPiB1bml0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGxldCBsaXN0ZW5lcnMgOiAodGFnLCBKdi50IC0+IHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG4gICAgbGV0IHdvcmtlciA9IEJycl93ZWJ3b3JrZXJzLldvcmtlci5jcmVhdGUgQEAgSnN0ci5vZl9zdHJpbmcgUC51cmxcblxuICAgIGxldCBxdWVyeSAodHlwZSBhKSAocXVlcnkgOiBhIHF1ZXJ5KSA6IChhLCBlcnJvcikgRnV0LnJlc3VsdCA9XG4gICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZyBpblxuICAgICAgbGV0IGZ1dCwgc2V0ID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgICAgbGV0IHNldCBqdiA9IHNldCBAQCBFbmNvZGluZ3Mub2ZfanYganYgaW5cbiAgICAgIGxldCBxdWVyeSA9IHsgdXVpZDsgZGF0YSA9IHF1ZXJ5IH0gfD4gRW5jb2RpbmdzLnRvX2pzdHIgaW5cbiAgICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5wb3N0IHdvcmtlciAoSnYub2ZfanN0ciBxdWVyeSk7XG4gICAgICBIYXNodGJsLmFkZCBmdXR1cmVzIHV1aWQgc2V0O1xuICAgICAgZnV0XG5cbiAgICBsZXQgbGlzdGVuICh0eXBlIGEpIChldmVudCA6IGEgZXZlbnQpIH4oZiA6IGEgLT4gdW5pdCkgOiBsaXN0ZW5lciA9XG4gICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZyBpblxuICAgICAgbGV0IHNldCBqdiA9IGYgKE9iai5tYWdpYyBqdikgaW5cbiAgICAgIEhhc2h0YmwuYWRkIGxpc3RlbmVycyAodGFnX29mIGV2ZW50KSBzZXQ7XG4gICAgICB1dWlkXG5cbiAgICBsZXQgb25fbWVzc2FnZSBldiA9XG4gICAgICBsZXQgbWVzc2FnZSA9IEV2LmFzX3R5cGUgZXYgaW5cbiAgICAgIGxldCBvcGVuIFJlc3VsdCBpblxuICAgICAgaWdub3JlICgqIFRPRE86IGhhbmRsZXIgZXJyb3JzICopXG4gICAgICBAQFxuICAgICAgbGV0KyBtZXNzYWdlID1cbiAgICAgICAgQnJyX2lvLk1lc3NhZ2UuRXYuZGF0YSBtZXNzYWdlIHw+IEp2LnRvX2pzdHIgfD4gRW5jb2RpbmdzLm9mX2pzdHJcbiAgICAgIGluXG4gICAgICBtYXRjaCBtZXNzYWdlIHdpdGhcbiAgICAgIHwgRXZlbnQgKGUsIHYpIC0+XG4gICAgICAgICAgSGFzaHRibC5maW5kX2FsbCBsaXN0ZW5lcnMgKHRhZ19vZiBlKSB8PiBMaXN0Lml0ZXIgfmY6KGZ1biBmIC0+IGYgdilcbiAgICAgIHwgQW5zd2VyIHsgdXVpZDsgZGF0YSB9IC0+XG4gICAgICAgICAgbGV0IGYgPSBIYXNodGJsLmZpbmQgZnV0dXJlcyB1dWlkIGluXG4gICAgICAgICAgSGFzaHRibC5yZW1vdmUgZnV0dXJlcyB1dWlkO1xuICAgICAgICAgIGYgZGF0YVxuXG4gICAgbGV0IF8gPVxuICAgICAgRXYubGlzdGVuIEJycl9pby5NZXNzYWdlLkV2Lm1lc3NhZ2Ugb25fbWVzc2FnZVxuICAgICAgQEAgQnJyX3dlYndvcmtlcnMuV29ya2VyLmFzX3RhcmdldCB3b3JrZXJcbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgV29ya2VyX2ltcGwgPSBmdW5jdG9yICgpIC0+IHNpZ1xuICAgIHZhbCBvbl9xdWVyeSA6ICdhIHF1ZXJ5IC0+ICgnYSwgZXJyb3IpIEZ1dC5yZXN1bHRcbiAgZW5kXG5cbiAgbGV0IGRpc3BhdGNoX2V2ZW50ICh0eXBlIGEpIChlIDogYSBldmVudCkgKHYgOiBhKSA9XG4gICAgKCogbGV0IGRhdGEgPSBFbmNvZGluZ3MubWFyc2hhbF90b19qc3RyIHw+IEp2Lm9mX2pzdHIgaW4gKilcbiAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuRy5wb3N0IChFbmNvZGluZ3MudG9fanN0ciAoRXZlbnQgKGUsIHYpKSB8PiBKdi5vZl9qc3RyKVxuXG4gICgqKiBFeGVjdXRlIFcncyBib2R5IGFuZCBjb25maWd1cmUgbWVzc2FnaW5nICopXG4gIG1vZHVsZSBNYWtlX3dvcmtlciAoVyA6IFdvcmtlcl9pbXBsKSA9IHN0cnVjdFxuICAgIG9wZW4gQnJyXG4gICAgbW9kdWxlIFcgPSBXICgpXG5cbiAgICBsZXQgb25fbWVzc2FnZSBldiA9XG4gICAgICBsZXQgbWVzc2FnZSA9IEV2LmFzX3R5cGUgZXYgaW5cbiAgICAgIGxldCBvcGVuIFJlc3VsdCBpblxuICAgICAgaWdub3JlICgqIFRPRE86IGhhbmRsZXIgZXJyb3JzICopXG4gICAgICBAQFxuICAgICAgbGV0KyAoeyB1dWlkOyBkYXRhIH0gOiAnYSBxdWVyeSB3aXRoX3V1aWQpID1cbiAgICAgICAgQnJyX2lvLk1lc3NhZ2UuRXYuZGF0YSBtZXNzYWdlIHw+IEp2LnRvX2pzdHIgfD4gRW5jb2RpbmdzLm9mX2pzdHJcbiAgICAgIGluXG4gICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgbGV0KyByZXN1bHQgPSBXLm9uX3F1ZXJ5IGRhdGEgaW5cbiAgICAgIGxldCBkYXRhID0gRW5jb2RpbmdzLnRvX2pzdHIgcmVzdWx0IHw+IEp2Lm9mX2pzdHIgaW5cbiAgICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5HLnBvc3RcbiAgICAgICAgKEVuY29kaW5ncy50b19qc3RyIChBbnN3ZXIgeyB1dWlkOyBkYXRhIH0pIHw+IEp2Lm9mX2pzdHIpXG5cbiAgICBsZXQgXyA9IEV2Lmxpc3RlbiBCcnJfaW8uTWVzc2FnZS5Fdi5tZXNzYWdlIG9uX21lc3NhZ2UgRy50YXJnZXRcbiAgZW5kXG5lbmRcbiIsIm9wZW4gU3RkXG5cbm1vZHVsZSBTb3J0ID0gc3RydWN0XG4gIHR5cGUgY3JpdGVyaWEgPSBEYXRlX2FkZGVkIHwgTmFtZVxuICB0eXBlIGRpcmVjdGlvbiA9IEFzYyB8IERlc2NcbiAgdHlwZSB0ID0gU29tZSBvZiBjcml0ZXJpYSAqIGRpcmVjdGlvbiB8IFJhbmRvbVxuXG4gIGxldCBvZl9zdHJpbmcgPyhkaXJlY3Rpb24gPSBBc2MpID0gZnVuY3Rpb25cbiAgICB8IFwiZGF0ZV9hZGRlZFwiIC0+IFNvbWUgKERhdGVfYWRkZWQsIGRpcmVjdGlvbilcbiAgICB8IFwibmFtZVwiIC0+IFNvbWUgKE5hbWUsIGRpcmVjdGlvbilcbiAgICB8IFwicmFuZG9tXCIgLT4gUmFuZG9tXG4gICAgfCBfIC0+IGZhaWx3aXRoIFwid3Jvbmcgc29ydCBvZiBzb3J0XCJcbmVuZFxuXG4oKiogU29tZSBzb3J0cyByZXF1aXJlIGEgY3VzdG9tIG9yZGVyaW5nIHdoaWNoIGlzIGRvbmUgdXNpbmcgYSB0YWJsZSBvZiBpbmRleGVzLiBGb3IgZXhhbXBsZSwgdG8gZ2V0IGEgcmFuZG9tIHNvcnQgd2Ugc2ltcGxlIHNodWZmbGUgYW4gYXJyYXkgd2hpY2ggc2l6ZSBpcyB0aGUgb25lIG9mIHRoZSByZXN1bHQuICopXG5tb2R1bGUgT3JkZXIgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSW5pdGlhbCB8IEN1c3RvbSBvZiBpbnQgYXJyYXlcblxuICBsZXQgb2Zfc29ydCB+c2l6ZSA9IGZ1bmN0aW9uXG4gICAgfCBTb3J0LlJhbmRvbSAtPlxuICAgICAgICBsZXQgdGJsID0gQXJyYXkuaW5pdCBzaXplIH5mOkZ1bi5pZCBpblxuICAgICAgICBsZXQgKCkgPSBBcnJheS5zaHVmZmxlIHRibCBpblxuICAgICAgICBDdXN0b20gdGJsXG4gICAgfCBfIC0+IEluaXRpYWxcblxuICBsZXQgYXBwbHkgdCBpID1cbiAgICBtYXRjaCB0IHdpdGggSW5pdGlhbCAtPiBpIHwgQ3VzdG9tIGEgLT4gKCogdG9kbyBjaGVjayBib3VuZHMgKikgYS4oaSlcbmVuZFxuXG50eXBlICdhIHNlbGVjdGlvbiA9IEFsbCB8IE9ubHkgb2YgJ2EgbGlzdFxudHlwZSBraW5kID0gQXVkaW9cbnR5cGUgZmlsdGVyID0gU2VhcmNoIG9mIHN0cmluZ1xuXG50eXBlIHJlcSA9IHtcbiAga2luZCA6IGtpbmQ7XG4gIHNyY192aWV3cyA6IHN0cmluZyBzZWxlY3Rpb247XG4gIHNvcnQgOiBTb3J0LnQ7XG4gIGZpbHRlcnMgOiBmaWx0ZXIgbGlzdDtcbn1cblxudHlwZSB0ID0ge1xuICB1dWlkIDogVXVpZG0udDtcbiAgcmVxdWVzdCA6IHJlcTtcbiAgb3JkZXIgOiBPcmRlci50O1xuICBzdGFydF9vZmZzZXQgOiBpbnQ7XG4gIGl0ZW1fY291bnQgOiBpbnQ7XG59XG5cbmxldCBpdGVtX2NvdW50IHQgPSB0Lml0ZW1fY291bnQgLSB0LnN0YXJ0X29mZnNldFxuXG5sZXQgcmVxIGtpbmQgPyhzcmNfdmlld3MgPSBBbGwpID8oc29ydCA9IFNvcnQuKFNvbWUgKERhdGVfYWRkZWQsIERlc2MpKSlcbiAgICA/KGZpbHRlcnMgPSBbXSkgKCkgPVxuICB7IGtpbmQ7IHNyY192aWV3czsgc29ydDsgZmlsdGVycyB9XG5cbmxldCBoYXNoIHJlcSA9IEhhc2h0YmwuaGFzaCAocmVxLnNyY192aWV3cywgcmVxLmZpbHRlcnMpXG4iLCJvcGVuISBTdGRcbm1vZHVsZSBEUyA9IERhdGFfc291cmNlLkplbGx5ZmluXG5tb2R1bGUgQXBpID0gRFMuQXBpXG5cbnR5cGUgc2VydmVyID0gc3RyaW5nICogRFMuY29ubmV4aW9uXG5cbm1vZHVsZSBRdWVyaWVzID0gc3RydWN0XG4gIHR5cGUgJ2EgcXVlcnkgPVxuICAgIHwgU2V0X3Nlc3Npb25fdXVpZCA6IHN0cmluZyAtPiB1bml0IHF1ZXJ5XG4gICAgfCBBZGRfc2VydmVycyA6IHNlcnZlciBsaXN0IC0+IHVuaXQgcXVlcnlcbiAgICB8IEdldF9hbGwgOiB1bml0IC0+IEFwaS5JdGVtLnQgbGlzdCBxdWVyeVxuICAgIHwgR2V0X2xpYnJhcmllcyA6IHVuaXQgLT4gU3RvcmVzLkl0ZW1zLnQgbGlzdCBxdWVyeVxuICAgIHwgR2V0X3NlcnZlcl9saWJyYXJpZXMgOiBzdHJpbmcgLT4gU3RvcmVzLkl0ZW1zLnQgbGlzdCBxdWVyeVxuICAgIHwgQ3JlYXRlX3ZpZXcgOiBWaWV3LnJlcSAtPiBWaWV3LnQgcXVlcnlcbiAgICB8IEdldCA6IFZpZXcudCAqIGludCBhcnJheSAtPiBTdG9yZXMuSXRlbXMudCBvcHRpb24gYXJyYXkgcXVlcnlcblxuICB0eXBlICdhIGV2ZW50ID0gU2VydmVyc19zdGF0dXNfdXBkYXRlIDogKHN0cmluZyAqIFN5bmMucmVwb3J0KSBldmVudFxuZW5kXG5cbmluY2x1ZGUgV29ya2VyX2FwaS5NYWtlIChRdWVyaWVzKVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIE11bHRpbWFwfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG5tb2R1bGUgdHlwZSBTID0gc2lnXG4gIHR5cGUga2V5XG4gIHR5cGUgdmFsdWVcbiAgdHlwZSB0XG5cbiAgdmFsIGVtcHR5IDogdFxuICAoKiogRW1wdHkgbXVsdGltYXAgKilcblxuICB2YWwgaXNfZW1wdHkgOiB0IC0+IGJvb2xcbiAgKCoqIEVtcHR5IG11bHRpbWFwPyAqKVxuXG4gIHZhbCBhZGQgOiB0IC0+IGtleSAtPiB2YWx1ZSAtPiB0XG4gICgqKiBBZGQgYSBrZXkvdmFsdWUgYmluZGluZyAqKVxuXG4gIHZhbCByZW1vdmUgOiB0IC0+IGtleSAtPiB2YWx1ZSAtPiB0XG4gICgqKiBSZW1vdmUgdGhlIGJpbmRpbmcgKilcblxuICB2YWwgcmVtb3ZlX2FsbCA6IHQgLT4ga2V5IC0+IHRcbiAgKCoqIFJlbW92ZSB0aGUga2V5IGZyb20gdGhlIG1hcCAqKVxuXG4gIHZhbCBtZW0gOiB0IC0+IGtleSAtPiBib29sXG4gICgqKiBJcyB0aGVyZSBhIGJpbmRpbmcgZm9yIHRoaXMga2V5PyAqKVxuXG4gIHZhbCBmaW5kIDogdCAtPiBrZXkgLT4gdmFsdWUgbGlzdFxuICAoKiogTGlzdCBvZiB2YWx1ZXMgZm9yIHRoaXMga2V5ICopXG5cbiAgdmFsIGZpbmRfaXRlciA6IHQgLT4ga2V5IC0+IHZhbHVlIGl0ZXJcbiAgKCoqIEl0ZXJhdGUgb24gYmluZGluZ3MgZm9yIHRoaXMga2V5ICopXG5cbiAgdmFsIGNvdW50IDogdCAtPiBrZXkgLT4gaW50XG4gICgqKiBOdW1iZXIgb2YgYmluZGluZ3MgZm9yIHRoaXMga2V5ICopXG5cbiAgdmFsIGl0ZXIgOiB0IC0+IChrZXkgLT4gdmFsdWUgLT4gdW5pdCkgLT4gdW5pdFxuICAoKiogSXRlcmF0ZSBvbiBhbGwga2V5L3ZhbHVlICopXG5cbiAgdmFsIGZvbGQgOiB0IC0+ICdhIC0+ICgnYSAtPiBrZXkgLT4gdmFsdWUgLT4gJ2EpIC0+ICdhXG4gICgqKiBGb2xkIG9uIGFsbCBrZXkvdmFsdWUgKilcblxuICB2YWwgc2l6ZSA6IHQgLT4gaW50XG4gICgqKiBOdW1iZXIgb2Yga2V5cyAqKVxuXG4gIHZhbCB1bmlvbiA6IHQgLT4gdCAtPiB0XG4gICgqKiBVbmlvbiBvZiBtdWx0aW1hcHMgKilcblxuICB2YWwgaW50ZXIgOiB0IC0+IHQgLT4gdFxuICAoKiogSW50ZXJzZWN0aW9uIG9mIG11bHRpbWFwcyAqKVxuXG4gIHZhbCBkaWZmIDogdCAtPiB0IC0+IHRcbiAgKCoqIERpZmZlcmVuY2Ugb2YgbWFwcywgaWUgYmluZGluZ3Mgb2YgdGhlIGZpcnN0IHRoYXQgYXJlIG5vdFxuICAgICAgaW4gdGhlIHNlY29uZCAqKVxuXG4gIHZhbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sXG4gICgqKiBTYW1lIG11bHRpbWFwICopXG5cbiAgdmFsIGNvbXBhcmUgOiB0IC0+IHQgLT4gaW50XG4gICgqKiBUb3RhbCBvcmRlciBvbiBtdWx0aW1hcHMgKilcblxuICB2YWwgc3VibWFwIDogdCAtPiB0IC0+IGJvb2xcbiAgKCoqIFtzdWJtYXAgbTEgbTJdIGlzIHRydWUgaWZmIGFsbCBiaW5kaW5ncyBvZiBbbTFdIGFyZSBhbHNvIGluIFttMl0gKilcblxuICB2YWwgdG9faXRlciA6IHQgLT4gKGtleSAqIHZhbHVlKSBpdGVyXG4gIHZhbCBvZl9pdGVyIDogP2luaXQ6dCAtPiAoa2V5ICogdmFsdWUpIGl0ZXIgLT4gdFxuICB2YWwga2V5cyA6IHQgLT4ga2V5IGl0ZXJcblxuICB2YWwgdmFsdWVzIDogdCAtPiB2YWx1ZSBpdGVyXG4gICgqKiBTb21lIHZhbHVlcyBtYXkgb2NjdXIgc2V2ZXJhbCB0aW1lcyAqKVxuZW5kXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID0gc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCBjb21wYXJlIDogdCAtPiB0IC0+IGludFxuZW5kXG5cbm1vZHVsZSBNYWtlIChLIDogT3JkZXJlZFR5cGUpIChWIDogT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIHR5cGUga2V5ID0gSy50XG4gIHR5cGUgdmFsdWUgPSBWLnRcblxuICBtb2R1bGUgTSA9IE1hcC5NYWtlIChLKVxuICBtb2R1bGUgUyA9IFNldC5NYWtlIChWKVxuXG4gIHR5cGUgdCA9IFMudCBNLnRcbiAgKCoqIE1hcCBvZiBzZXRzICopXG5cbiAgbGV0IGVtcHR5ID0gTS5lbXB0eVxuICBsZXQgaXNfZW1wdHkgPSBNLmlzX2VtcHR5XG5cbiAgbGV0IGFkZCBtIGsgdiA9XG4gICAgbGV0IHNldCA9IHRyeSBNLmZpbmQgayBtIHdpdGggTm90X2ZvdW5kIC0+IFMuZW1wdHkgaW5cbiAgICBNLmFkZCBrIChTLmFkZCB2IHNldCkgbVxuXG4gIGxldCByZW1vdmUgbSBrIHYgPVxuICAgIHRyeVxuICAgICAgbGV0IHNldCA9IE0uZmluZCBrIG0gaW5cbiAgICAgIGxldCBzZXQnID0gUy5yZW1vdmUgdiBzZXQgaW5cbiAgICAgIGlmIFMuaXNfZW1wdHkgc2V0JyB0aGVuXG4gICAgICAgIE0ucmVtb3ZlIGsgbVxuICAgICAgZWxzZVxuICAgICAgICBNLmFkZCBrIHNldCcgbVxuICAgIHdpdGggTm90X2ZvdW5kIC0+IG1cblxuICBsZXQgcmVtb3ZlX2FsbCBtIGsgPSBNLnJlbW92ZSBrIG1cbiAgbGV0IG1lbSBtIGsgPSBNLm1lbSBrIG1cblxuICBsZXQgZmluZCBtIGsgPVxuICAgIHRyeVxuICAgICAgbGV0IHNldCA9IE0uZmluZCBrIG0gaW5cbiAgICAgIFMuZWxlbWVudHMgc2V0XG4gICAgd2l0aCBOb3RfZm91bmQgLT4gW11cblxuICBsZXQgZmluZF9pdGVyIG0gayBmID1cbiAgICB0cnlcbiAgICAgIGxldCBzZXQgPSBNLmZpbmQgayBtIGluXG4gICAgICBTLml0ZXIgZiBzZXRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKVxuXG4gIGxldCBjb3VudCBtIGsgPVxuICAgIHRyeVxuICAgICAgbGV0IHNldCA9IE0uZmluZCBrIG0gaW5cbiAgICAgIFMuY2FyZGluYWwgc2V0XG4gICAgd2l0aCBOb3RfZm91bmQgLT4gMFxuXG4gIGxldCBpdGVyIG0gZiA9IE0uaXRlciAoZnVuIGsgc2V0IC0+IFMuaXRlciAoZnVuIHYgLT4gZiBrIHYpIHNldCkgbVxuXG4gIGxldCBmb2xkIG0gYWNjIGYgPVxuICAgIE0uZm9sZCAoZnVuIGsgc2V0IGFjYyAtPiBTLmZvbGQgKGZ1biB2IGFjYyAtPiBmIGFjYyBrIHYpIHNldCBhY2MpIG0gYWNjXG5cbiAgbGV0IHNpemUgbSA9IE0uY2FyZGluYWwgbVxuXG4gIGxldCB1bmlvbiBtMSBtMiA9XG4gICAgTS5tZXJnZVxuICAgICAgKGZ1biBfayB2MSB2MiAtPlxuICAgICAgICBtYXRjaCB2MSwgdjIgd2l0aFxuICAgICAgICB8IE5vbmUsIE5vbmUgLT4gTm9uZVxuICAgICAgICB8IFNvbWUgc2V0MSwgU29tZSBzZXQyIC0+IFNvbWUgKFMudW5pb24gc2V0MSBzZXQyKVxuICAgICAgICB8IFNvbWUgc2V0LCBOb25lIHwgTm9uZSwgU29tZSBzZXQgLT4gU29tZSBzZXQpXG4gICAgICBtMSBtMlxuXG4gIGxldCBpbnRlciBtMSBtMiA9XG4gICAgTS5tZXJnZVxuICAgICAgKGZ1biBfayB2MSB2MiAtPlxuICAgICAgICBtYXRjaCB2MSwgdjIgd2l0aFxuICAgICAgICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgICAgICAgfCBTb21lIHNldDEsIFNvbWUgc2V0MiAtPlxuICAgICAgICAgIGxldCBzZXQgPSBTLmludGVyIHNldDEgc2V0MiBpblxuICAgICAgICAgIGlmIFMuaXNfZW1wdHkgc2V0IHRoZW5cbiAgICAgICAgICAgIE5vbmVcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBTb21lIHNldClcbiAgICAgIG0xIG0yXG5cbiAgbGV0IGRpZmYgbTEgbTIgPVxuICAgIE0ubWVyZ2VcbiAgICAgIChmdW4gX2sgdjEgdjIgLT5cbiAgICAgICAgbWF0Y2ggdjEsIHYyIHdpdGhcbiAgICAgICAgfCBOb25lLCBfIC0+IE5vbmVcbiAgICAgICAgfCBTb21lIHNldCwgTm9uZSAtPiBTb21lIHNldFxuICAgICAgICB8IFNvbWUgc2V0MSwgU29tZSBzZXQyIC0+XG4gICAgICAgICAgbGV0IHNldCcgPSBTLmRpZmYgc2V0MSBzZXQyIGluXG4gICAgICAgICAgaWYgUy5pc19lbXB0eSBzZXQnIHRoZW5cbiAgICAgICAgICAgIE5vbmVcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBTb21lIHNldCcpXG4gICAgICBtMSBtMlxuXG4gIGxldCBlcXVhbCBtMSBtMiA9IE0uZXF1YWwgUy5lcXVhbCBtMSBtMlxuICBsZXQgY29tcGFyZSBtMSBtMiA9IE0uY29tcGFyZSBTLmNvbXBhcmUgbTEgbTJcblxuICBsZXQgc3VibWFwIG0xIG0yID1cbiAgICBNLmZvcl9hbGxcbiAgICAgIChmdW4gayBzZXQxIC0+XG4gICAgICAgIHRyeVxuICAgICAgICAgIGxldCBzZXQyID0gTS5maW5kIGsgbTIgaW5cbiAgICAgICAgICBTLnN1YnNldCBzZXQxIHNldDJcbiAgICAgICAgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2UpXG4gICAgICBtMVxuXG4gIGxldCB0b19pdGVyIG0gayA9IGl0ZXIgbSAoZnVuIHggeSAtPiBrICh4LCB5KSlcblxuICBsZXQgb2ZfaXRlciA/KGluaXQgPSBlbXB0eSkgc2VxID1cbiAgICBsZXQgbSA9IHJlZiBpbml0IGluXG4gICAgc2VxIChmdW4gKGssIHYpIC0+IG0gOj0gYWRkICFtIGsgdik7XG4gICAgIW1cblxuICBsZXQga2V5cyBtIGsgPSBNLml0ZXIgKGZ1biB4IF8gLT4gayB4KSBtXG4gIGxldCB2YWx1ZXMgbSBrID0gaXRlciBtIChmdW4gXyB2IC0+IGsgdilcbmVuZFxuXG5tb2R1bGUgdHlwZSBCSURJUiA9IHNpZ1xuICB0eXBlIHRcbiAgdHlwZSBsZWZ0XG4gIHR5cGUgcmlnaHRcblxuICB2YWwgZW1wdHkgOiB0XG4gIHZhbCBpc19lbXB0eSA6IHQgLT4gYm9vbFxuXG4gIHZhbCBhZGQgOiB0IC0+IGxlZnQgLT4gcmlnaHQgLT4gdFxuICAoKiogQWRkIGEgYmluZGluZyAobGVmdCxyaWdodCkgKilcblxuICB2YWwgcmVtb3ZlIDogdCAtPiBsZWZ0IC0+IHJpZ2h0IC0+IHRcbiAgKCoqIFJlbW92ZSBhIHNwZWNpZmljIGJpbmRpbmcgKilcblxuICB2YWwgY2FyZGluYWxfbGVmdCA6IHQgLT4gaW50XG4gICgqKiBudW1iZXIgb2YgZGlzdGluY3QgbGVmdCBrZXlzICopXG5cbiAgdmFsIGNhcmRpbmFsX3JpZ2h0IDogdCAtPiBpbnRcbiAgKCoqIG51bWJlciBvZiBkaXN0aW5jdCByaWdodCBrZXlzICopXG5cbiAgdmFsIHJlbW92ZV9sZWZ0IDogdCAtPiBsZWZ0IC0+IHRcbiAgKCoqIFJlbW92ZSBhbGwgYmluZGluZ3MgZm9yIHRoZSBsZWZ0IGtleSAqKVxuXG4gIHZhbCByZW1vdmVfcmlnaHQgOiB0IC0+IHJpZ2h0IC0+IHRcbiAgKCoqIFJlbW92ZSBhbGwgYmluZGluZ3MgZm9yIHRoZSByaWdodCBrZXkgKilcblxuICB2YWwgbWVtX2xlZnQgOiB0IC0+IGxlZnQgLT4gYm9vbFxuICAoKiogSXMgdGhlIGxlZnQga2V5IHByZXNlbnQgaW4gYXQgbGVhc3Qgb25lIHBhaXI/ICopXG5cbiAgdmFsIG1lbV9yaWdodCA6IHQgLT4gcmlnaHQgLT4gYm9vbFxuICAoKiogSXMgdGhlIHJpZ2h0IGtleSBwcmVzZW50IGluIGF0IGxlYXN0IG9uZSBwYWlyPyAqKVxuXG4gIHZhbCBmaW5kX2xlZnQgOiB0IC0+IGxlZnQgLT4gcmlnaHQgbGlzdFxuICAoKiogTGlzdCBvZiB2YWx1ZXMgZm9yIHRoaXMgZ2l2ZW4gbGVmdC1rZXkuXG4gICAgICBUaGlzIHVzZWQgdG8gcmV0dXJuIGFuIGl0ZXIsIGJ1dCByZXR1cm5zIGEgbGlzdCBzaW5jZSAzLjEzLiAqKVxuXG4gIHZhbCBmaW5kX2xlZnRfaXRlciA6IHQgLT4gbGVmdCAtPiByaWdodCBpdGVyXG4gICgqKiBJdGVyYXRlIG9uIGJpbmRpbmdzIGZvciB0aGlzIGdpdmVuIGxlZnQta2V5XG4gICAgICBAc2luY2UgMy4xMyAqKVxuXG4gIHZhbCBmaW5kX3JpZ2h0IDogdCAtPiByaWdodCAtPiBsZWZ0IGxpc3RcbiAgKCoqIExpc3Qgb2YgdmFsdWVzIGZvciB0aGlzIGdpdmVuIHJpZ2h0LWtleS5cbiAgICAgIFRoaXMgdXNlZCB0byByZXR1cm4gYW4gaXRlciwgYnV0IHJldHVybnMgYSBsaXN0IHNpbmNlIDMuMTMuICopXG5cbiAgdmFsIGZpbmRfcmlnaHRfaXRlciA6IHQgLT4gcmlnaHQgLT4gbGVmdCBpdGVyXG4gICgqKiBJdGVyYXRlIG9uIGJpbmRpbmdzIGZvciB0aGlzIGdpdmVuIGxlZnQta2V5XG4gICAgICBAc2luY2UgMy4xMyAqKVxuXG4gIHZhbCBmaW5kMV9sZWZ0IDogdCAtPiBsZWZ0IC0+IHJpZ2h0IG9wdGlvblxuICAoKiogbGlrZSB7IWZpbmRfbGVmdH0gYnV0IHJldHVybnMgYXQgbW9zdCBvbmUgdmFsdWUgKilcblxuICB2YWwgZmluZDFfcmlnaHQgOiB0IC0+IHJpZ2h0IC0+IGxlZnQgb3B0aW9uXG4gICgqKiBsaWtlIHshZmluZF9yaWdodH0gYnV0IHJldHVybnMgYXQgbW9zdCBvbmUgdmFsdWUgKilcblxuICB2YWwgZm9sZCA6ICgnYSAtPiBsZWZ0IC0+IHJpZ2h0IC0+ICdhKSAtPiAnYSAtPiB0IC0+ICdhXG4gICgqKiBGb2xkIG9uIHBhaXJzICopXG5cbiAgdmFsIHBhaXJzIDogdCAtPiAobGVmdCAqIHJpZ2h0KSBpdGVyXG4gICgqKiBJdGVyYXRlIG9uIHBhaXJzICopXG5cbiAgdmFsIGFkZF9wYWlycyA6IHQgLT4gKGxlZnQgKiByaWdodCkgaXRlciAtPiB0XG4gICgqKiBBZGQgcGFpcnMgKilcblxuICB2YWwgaXRlcl9sZWZ0IDogdCAtPiBsZWZ0IGl0ZXJcbiAgdmFsIGl0ZXJfcmlnaHQgOiB0IC0+IHJpZ2h0IGl0ZXJcbmVuZFxuXG5sZXQgX2ZvbGRfaXRlciBmIGFjYyBzZXEgPVxuICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICBzZXEgKGZ1biB4IC0+IGFjYyA6PSBmICFhY2MgeCk7XG4gICFhY2NcblxubGV0IF9oZWFkX2l0ZXIgc2VxID1cbiAgbGV0IHIgPSByZWYgTm9uZSBpblxuICAodHJ5XG4gICAgIHNlcSAoZnVuIHggLT5cbiAgICAgICAgIHIgOj0gU29tZSB4O1xuICAgICAgICAgcmFpc2UgRXhpdClcbiAgIHdpdGggRXhpdCAtPiAoKSk7XG4gICFyXG5cbm1vZHVsZSBNYWtlQmlkaXIgKEwgOiBPcmRlcmVkVHlwZSkgKFIgOiBPcmRlcmVkVHlwZSkgPSBzdHJ1Y3RcbiAgdHlwZSBsZWZ0ID0gTC50XG4gIHR5cGUgcmlnaHQgPSBSLnRcblxuICBtb2R1bGUgTWFwTCA9IE1ha2UgKEwpIChSKVxuICBtb2R1bGUgTWFwUiA9IE1ha2UgKFIpIChMKVxuXG4gIHR5cGUgdCA9IHsgbGVmdDogTWFwTC50OyByaWdodDogTWFwUi50IH1cblxuICBsZXQgZW1wdHkgPSB7IGxlZnQgPSBNYXBMLmVtcHR5OyByaWdodCA9IE1hcFIuZW1wdHkgfVxuICBsZXQgaXNfZW1wdHkgbSA9IE1hcEwuaXNfZW1wdHkgbS5sZWZ0XG4gIGxldCBhZGQgbSBhIGIgPSB7IGxlZnQgPSBNYXBMLmFkZCBtLmxlZnQgYSBiOyByaWdodCA9IE1hcFIuYWRkIG0ucmlnaHQgYiBhIH1cblxuICBsZXQgcmVtb3ZlIG0gYSBiID1cbiAgICB7IGxlZnQgPSBNYXBMLnJlbW92ZSBtLmxlZnQgYSBiOyByaWdodCA9IE1hcFIucmVtb3ZlIG0ucmlnaHQgYiBhIH1cblxuICBsZXQgY2FyZGluYWxfbGVmdCBtID0gTWFwTC5zaXplIG0ubGVmdFxuICBsZXQgY2FyZGluYWxfcmlnaHQgbSA9IE1hcFIuc2l6ZSBtLnJpZ2h0XG4gIGxldCBmaW5kX2xlZnQgbSBhID0gTWFwTC5maW5kIG0ubGVmdCBhXG4gIGxldCBmaW5kX2xlZnRfaXRlciBtIGEgPSBNYXBMLmZpbmRfaXRlciBtLmxlZnQgYVxuICBsZXQgZmluZF9yaWdodCBtIGIgPSBNYXBSLmZpbmQgbS5yaWdodCBiXG4gIGxldCBmaW5kX3JpZ2h0X2l0ZXIgbSBiID0gTWFwUi5maW5kX2l0ZXIgbS5yaWdodCBiXG5cbiAgbGV0IHJlbW92ZV9sZWZ0IG0gYSA9XG4gICAgX2ZvbGRfaXRlciAoZnVuIG0gYiAtPiByZW1vdmUgbSBhIGIpIG0gKGZpbmRfbGVmdF9pdGVyIG0gYSlcblxuICBsZXQgcmVtb3ZlX3JpZ2h0IG0gYiA9XG4gICAgX2ZvbGRfaXRlciAoZnVuIG0gYSAtPiByZW1vdmUgbSBhIGIpIG0gKGZpbmRfcmlnaHRfaXRlciBtIGIpXG5cbiAgbGV0IG1lbV9sZWZ0IG0gYSA9IE1hcEwubWVtIG0ubGVmdCBhXG4gIGxldCBtZW1fcmlnaHQgbSBiID0gTWFwUi5tZW0gbS5yaWdodCBiXG4gIGxldCBmaW5kMV9sZWZ0IG0gYSA9IF9oZWFkX2l0ZXIgKGZpbmRfbGVmdF9pdGVyIG0gYSlcbiAgbGV0IGZpbmQxX3JpZ2h0IG0gYiA9IF9oZWFkX2l0ZXIgKGZpbmRfcmlnaHRfaXRlciBtIGIpXG4gIGxldCBmb2xkIGYgYWNjIG0gPSBNYXBMLmZvbGQgbS5sZWZ0IGFjYyBmXG4gIGxldCBwYWlycyBtID0gTWFwTC50b19pdGVyIG0ubGVmdFxuICBsZXQgYWRkX3BhaXJzIG0gc2VxID0gX2ZvbGRfaXRlciAoZnVuIG0gKGEsIGIpIC0+IGFkZCBtIGEgYikgbSBzZXFcbiAgbGV0IGl0ZXJfbGVmdCBtID0gTWFwTC5rZXlzIG0ubGVmdFxuICBsZXQgaXRlcl9yaWdodCBtID0gTWFwUi5rZXlzIG0ucmlnaHRcbmVuZFxuIiwiaW5jbHVkZSBTdGRcbm1vZHVsZSBEUyA9IERhdGFfc291cmNlLkplbGx5ZmluXG5tb2R1bGUgRWx3ZCA9IEJycl9sd2QuRWx3ZFxubW9kdWxlIFVpX3V0aWxzID0gQnJyX2x3ZF91aS5VdGlsc1xuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG4gIG1vZHVsZSBNTWFwID0gQ0NNdWx0aU1hcC5NYWtlIChTdHJpbmcpXG4gIG1vZHVsZSBJdGVtc19NdWx0aU1hcCA9IE1NYXAgKERiLlN0b3Jlcy5JdGVtcylcbmVuZFxuXG5tb2R1bGUgVXRpbHMgPSBzdHJ1Y3RcbiAgbGV0IHdpdGhfdGltaW5nID8obmFtZSA9IFwiXCIpIGYgPVxuICAgIGxldCB0ID0gQnJyLlBlcmZvcm1hbmNlLm5vd19tcyBCcnIuRy5wZXJmb3JtYW5jZSBpblxuICAgIGxldCByZXMgPSBmICgpIGluXG4gICAgQnJyLkNvbnNvbGUubG9nXG4gICAgICBbIG5hbWU7IFwidG9va1wiOyBCcnIuUGVyZm9ybWFuY2Uubm93X21zIEJyci5HLnBlcmZvcm1hbmNlIC0uIHQgXTtcbiAgICByZXNcbmVuZFxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyX2x3ZF91aVxuXG5tb2R1bGUgVHdvX3N0YXRlX2J1dHRvbiA9IHN0cnVjdFxuICBsZXQgYmFzZSA9IEF0dHJzLmNsYXNzZXMgWyBcImJ1dHRvblwiIF1cblxuICBsZXQgYXQgPSBmdW5jdGlvblxuICAgIHwgQnV0dG9uLk9uIC0+IEF0dHJzLmNsYXNzZXMgWyBcIm9uXCIgXVxuICAgIHwgT2ZmIC0+IEF0dHJzLmNsYXNzZXMgWyBcIm9mZlwiIF1cblxuICBsZXQgbWFrZSB+b25fY2xpY2sgPVxuICAgIGxldCBvbl9jbGljayA9IEJ1dHRvbi5oYW5kbGVyIEJyci5Fdi5jbGljayBvbl9jbGljayBpblxuICAgIEJ1dHRvbi50d29fc3RhdGUgfmJhc2UgfmF0IH5ldjpbIGBQIG9uX2NsaWNrIF1cbmVuZFxuXG5vcGVuIEJycmVyLkJyclxub3BlbiEgQnJyX2x3ZFxuXG5tb2R1bGUgRHJhZ2dhYmxlX3RhYmxlID0gc3RydWN0XG4gIG1vZHVsZSB0eXBlIFJvdyA9IHNpZ1xuICAgIHR5cGUgdFxuXG4gICAgdmFsIHJlbmRlciA6IHQgLT4gRWwudCBsaXN0XG4gIGVuZFxuXG4gICgqKiBDb2x1bW5zIGRlY2xhcmF0aW9uICopXG4gIG1vZHVsZSBDb2x1bW5zID0gc3RydWN0XG4gICAgdHlwZSBjb2x1bW4gPSB7IG5hbWUgOiBzdHJpbmc7IGNzc19zaXplIDogc3RyaW5nIH1cbiAgICB0eXBlIHQgPSBjb2x1bW4gYXJyYXlcblxuICAgIGxldCBjb2x1bW4gbmFtZSBjc3Nfc2l6ZSA9IHsgbmFtZTsgY3NzX3NpemUgfVxuXG4gICAgbGV0IHRvX3N0eWxlIHQgPVxuICAgICAgQXJyYXkudG9fc3RyaW5nIH5zZXA6XCIgXCIgKGZ1biB7IGNzc19zaXplOyBfIH0gLT4gY3NzX3NpemUpIHRcblxuICAgIGxldCB0b19oZWFkZXIgdCA9XG4gICAgICBsZXQgY2VsbHMgPVxuICAgICAgICBBcnJheS5mb2xkX3JpZ2h0IHQgfmluaXQ6W10gfmY6KGZ1biB7IG5hbWU7IF8gfSBhY2MgLT5cbiAgICAgICAgICAgIEVsLmRpdiBbIEVsLnR4dCcgbmFtZSBdIDo6IGFjYylcbiAgICAgIGluXG4gICAgICBFbC5kaXYgY2VsbHNcblxuICAgIGxldCBzZXQgZWx0IHQgPVxuICAgICAgbGV0IHZhbHVlID0gSnN0ci52IEBAIHRvX3N0eWxlIHQgaW5cbiAgICAgIEVsLnNldF9pbmxpbmVfc3R5bGUgRWwuU3R5bGUuZ3JpZF90ZW1wbGF0ZV9jb2x1bW5zIHZhbHVlIGVsdFxuICBlbmRcblxuICBsZXQgZ3JpZCA9IEF0dHJzLmNsYXNzZXMgWyBcImRyYWdnYWJsZS10YWJsZVwiIF1cblxuICBsZXQgcmVuZGVyX3JvdyAodHlwZSB0KSAobW9kdWxlIFJvdyA6IFJvdyB3aXRoIHR5cGUgdCA9IHQpIH5zaGFyZWRfZHJhZ19kYXRhXG4gICAgICB+biAodF9yb3cgOiB0IEx3ZF90YWJsZS5yb3cpIHJvdyA9XG4gICAgbGV0IGFkZF9oaW50IH50b3AgZWwgPVxuICAgICAgbGV0IGMgPSBpZiB0b3AgdGhlbiBcImhvdmVyLXRvcFwiIGVsc2UgXCJob3Zlci1ib3R0b21cIiBpblxuICAgICAgRWwuc2V0X2NsYXNzIChKc3RyLnYgYykgdHJ1ZSBlbFxuICAgIGluXG4gICAgbGV0IHJlbW92ZV9oaW50cyBlbCA9XG4gICAgICBMaXN0Lml0ZXIgWyBcImhvdmVyLXRvcFwiOyBcImhvdmVyLWJvdHRvbVwiIF0gfmY6KGZ1biBjIC0+XG4gICAgICAgICAgRWwuc2V0X2NsYXNzIChKc3RyLnYgYykgZmFsc2UgZWwpXG4gICAgaW5cbiAgICBsZXQgaXNfb25fdG9wIGUgPVxuICAgICAgbGV0IG1vdXNlX2V2ID0gRXYuRHJhZy5hc19tb3VzZSBAQCBFdi5hc190eXBlIGUgaW5cbiAgICAgIGxldCBvZmZzZXRfeSA9IEV2Lk1vdXNlLm9mZnNldF95IG1vdXNlX2V2IGluXG4gICAgICBsZXQgdGFyZ2V0ID0gRXYuY3VycmVudF90YXJnZXQgZSB8PiBFdi50YXJnZXRfdG9fanYgfD4gRWwub2ZfanYgaW5cbiAgICAgIGxldCBzaXplX2ggPSBFbC5pbm5lcl9oIHRhcmdldCBpblxuICAgICAgb2Zmc2V0X3kgPC4gc2l6ZV9oIC8uIDIuXG4gICAgaW5cbiAgICBsZXQgZ2V0X2V2X3RhcmdldCBlID0gRXYuY3VycmVudF90YXJnZXQgZSB8PiBFdi50YXJnZXRfdG9fanYgfD4gRWwub2ZfanYgaW5cbiAgICBMd2Rfc2VxLmVsZW1lbnRcbiAgICBAQFxuICAgIGxldCBjZWxscyA9IFJvdy5yZW5kZXIgcm93IGluXG4gICAgYXNzZXJ0IChMaXN0Lmxlbmd0aCBjZWxscyA9IG4pO1xuICAgIGxldCBvbl9kcmFnX3N0YXJ0ID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnc3RhcnQgKGZ1biBfIC0+XG4gICAgICAgICAgRG9jdW1lbnQuYm9keSBHLmRvY3VtZW50IHw+IEVsLnNldF9jbGFzcyAoSnN0ci52IFwiZHJhZ2dpbmdcIikgdHJ1ZTtcbiAgICAgICAgICBMd2Quc2V0IHNoYXJlZF9kcmFnX2RhdGEgQEAgU29tZSB0X3JvdylcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX292ZXIgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdvdmVyIChmdW4gZSAtPlxuICAgICAgICAgIGxldCB0YXJnZXQgPSBnZXRfZXZfdGFyZ2V0IGUgaW5cbiAgICAgICAgICByZW1vdmVfaGludHMgdGFyZ2V0O1xuICAgICAgICAgIGxldCB0b3AgPSBpc19vbl90b3AgZSBpblxuICAgICAgICAgIGxldCBub29wID1cbiAgICAgICAgICAgIGxldCBvcGVuIE9wdGlvbiBpblxuICAgICAgICAgICAgbGV0KyByb3cgPSBMd2QucGVlayBzaGFyZWRfZHJhZ19kYXRhIGluXG4gICAgICAgICAgICBsZXQgZXF1YWxfcHJldiByb3cgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmZhbHNlIChFcXVhbC5waHlzaWNhbCByb3cpXG4gICAgICAgICAgICAgICAgKEx3ZF90YWJsZS5wcmV2IHRfcm93KVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIGxldCBlcXVhbF9uZXh0IHJvdyA9XG4gICAgICAgICAgICAgIE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6ZmFsc2UgKEVxdWFsLnBoeXNpY2FsIHJvdylcbiAgICAgICAgICAgICAgICAoTHdkX3RhYmxlLm5leHQgdF9yb3cpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgRXF1YWwucGh5c2ljYWwgdF9yb3cgcm93XG4gICAgICAgICAgICB8fCAodG9wICYmIGVxdWFsX3ByZXYgcm93KVxuICAgICAgICAgICAgfHwgKChub3QgdG9wKSAmJiBlcXVhbF9uZXh0IHJvdylcbiAgICAgICAgICBpblxuICAgICAgICAgIGlmIG5vdCAoT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmZhbHNlIG5vb3ApIHRoZW4gKFxuICAgICAgICAgICAgYWRkX2hpbnQgfnRvcCB0YXJnZXQ7XG4gICAgICAgICAgICAoKiA+IElmIHRoZSBtb3VzZSBpcyByZWxlYXNlZCBvdmVyIGFuIGVsZW1lbnQgdGhhdCBpcyBhIHZhbGlkIGRyb3AgdGFyZ2V0LFxuICAgICAgICAgICAgICAgPiB0aGF0IGlzLCBvbmUgdGhhdCBjYW5jZWxsZWQgdGhlIGxhc3QgZHJhZ2VudGVyIG9yIGRyYWdvdmVyIGV2ZW50LFxuICAgICAgICAgICAgICAgPiB0aGVuIHRoZSBkcm9wIHdpbGwgYmUgc3VjY2Vzc2Z1bC5cbiAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MX0RyYWdfYW5kX0Ryb3BfQVBJL0RyYWdfb3BlcmF0aW9ucyNzcGVjaWZ5aW5nX2Ryb3BfdGFyZ2V0cyAqKVxuICAgICAgICAgICAgRXYucHJldmVudF9kZWZhdWx0IGUpKVxuICAgIGluXG4gICAgbGV0IG9uX2RyYWdfbGVhdmUgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdsZWF2ZSAoZnVuIGUgLT4gcmVtb3ZlX2hpbnRzIEBAIGdldF9ldl90YXJnZXQgZSlcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX2VuZCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJhZ2VuZCAoZnVuIF8gLT5cbiAgICAgICAgICBEb2N1bWVudC5ib2R5IEcuZG9jdW1lbnQgfD4gRWwuc2V0X2NsYXNzIChKc3RyLnYgXCJkcmFnZ2luZ1wiKSBmYWxzZSlcbiAgICBpblxuICAgIGxldCBvbl9kcm9wID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcm9wIChmdW4gZSAtPlxuICAgICAgICAgIHJlbW92ZV9oaW50cyBAQCBnZXRfZXZfdGFyZ2V0IGU7XG4gICAgICAgICAgbGV0IF8gPVxuICAgICAgICAgICAgbGV0IG9wZW4gT3B0aW9uIGluXG4gICAgICAgICAgICBsZXQqIHJvdyA9IEx3ZC5wZWVrIHNoYXJlZF9kcmFnX2RhdGEgaW5cbiAgICAgICAgICAgIGxldCsgc2V0ID0gTHdkX3RhYmxlLmdldCByb3cgaW5cbiAgICAgICAgICAgIGlmIGlzX29uX3RvcCBlIHRoZW4gaWdub3JlIEBAIEx3ZF90YWJsZS5iZWZvcmUgfnNldCB0X3Jvd1xuICAgICAgICAgICAgZWxzZSBpZ25vcmUgQEAgTHdkX3RhYmxlLmFmdGVyIH5zZXQgdF9yb3c7XG4gICAgICAgICAgICBMd2RfdGFibGUucmVtb3ZlIHJvd1xuICAgICAgICAgIGluXG4gICAgICAgICAgTHdkLnNldCBzaGFyZWRfZHJhZ19kYXRhIE5vbmUpXG4gICAgaW5cbiAgICBFbHdkLmRpdlxuICAgICAgfmF0OlsgYFAgKEF0LmRyYWdnYWJsZSBAQCBKc3RyLnYgXCJ0cnVlXCIpIF1cbiAgICAgIH5ldjpcbiAgICAgICAgW1xuICAgICAgICAgIGBQIG9uX2RyYWdfc3RhcnQ7XG4gICAgICAgICAgYFAgb25fZHJhZ19vdmVyO1xuICAgICAgICAgIGBQIG9uX2RyYWdfbGVhdmU7XG4gICAgICAgICAgYFAgb25fZHJhZ19lbmQ7XG4gICAgICAgICAgYFAgb25fZHJvcDtcbiAgICAgICAgXVxuICAgICAgKExpc3QubWFwIGNlbGxzIH5mOihmdW4gYyAtPiBgUCBjKSlcblxuICBsZXQgbWFrZSAodHlwZSB0KSAobW9kdWxlIFJvdyA6IFJvdyB3aXRoIHR5cGUgdCA9IHQpIH5jb2x1bW5zXG4gICAgICA/KHRhYmxlIDogdCBMd2RfdGFibGUudCA9IEx3ZF90YWJsZS5tYWtlICgpKVxuICAgICAgPyhzaGFyZWRfZHJhZ19kYXRhIDogdCBMd2RfdGFibGUucm93IG9wdGlvbiBMd2QudmFyID0gTHdkLnZhciBOb25lKSAoKSA9XG4gICAgbGV0IGF0ID0gQXR0cnMudG9fYXQgZ3JpZCBpblxuICAgIGxldCB0YWJsZV9oZWFkZXIgPSBDb2x1bW5zLnRvX2hlYWRlciBjb2x1bW5zIGluXG4gICAgbGV0IHRhYmxlX2JvZHkgPVxuICAgICAgTHdkX3RhYmxlLm1hcF9yZWR1Y2VcbiAgICAgICAgKHJlbmRlcl9yb3cgKG1vZHVsZSBSb3cpIH5zaGFyZWRfZHJhZ19kYXRhIH5uOihBcnJheS5sZW5ndGggY29sdW1ucykpXG4gICAgICAgIEx3ZF9zZXEubW9ub2lkIHRhYmxlXG4gICAgaW5cbiAgICBsZXQgZWx0ID1cbiAgICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgICAgbGV0JCBlbHQgPVxuICAgICAgICBFbHdkLmRpdiB+YXQgWyBgUCB0YWJsZV9oZWFkZXI7IGBTIChMd2Rfc2VxLmxpZnQgdGFibGVfYm9keSkgXVxuICAgICAgaW5cbiAgICAgIGxldCAoKSA9IENvbHVtbnMuc2V0IGVsdCBjb2x1bW5zIGluXG4gICAgICBlbHRcbiAgICBpblxuICAgIChlbHQsIHRhYmxlKVxuZW5kXG5cbmxldCBwbGF5bGlzdF9jb2x1bW5zID1cbiAgRHJhZ2dhYmxlX3RhYmxlLkNvbHVtbnMuXG4gICAgW3wgY29sdW1uIFwiRmlyc3RDT2xcIiBcIjI1NnB4XCI7IGNvbHVtbiBcIlNlY29uZFwiIFwiMjU2cHhcIiB8XVxuXG5tb2R1bGUgUGxheWxpc3Rfcm93ID0gc3RydWN0XG4gIHR5cGUgdCA9IHN0cmluZyAqIHN0cmluZ1xuXG4gIGxldCByZW5kZXIgKGwsIHIpID0gWyBFbC5kaXYgWyBFbC50eHQnIGwgXTsgRWwuZGl2IFsgRWwudHh0JyByIF0gXVxuZW5kXG5cbmxldCBtYWtlX3RhYmxlIHJvd3MgPVxuICBsZXQgdGFibGUgPSBMd2RfdGFibGUubWFrZSAoKSBpblxuICBMaXN0Lml0ZXIgcm93cyB+ZjooZnVuIHNldCAtPiBpZ25vcmUgQEAgTHdkX3RhYmxlLmFwcGVuZCB+c2V0IHRhYmxlKTtcbiAgdGFibGVcblxubGV0IGRyYWdnYWJsZV90YWJsZSA/c2hhcmVkX2RyYWdfZGF0YSAoKSA9XG4gIERyYWdnYWJsZV90YWJsZS5tYWtlXG4gICAgKG1vZHVsZSBQbGF5bGlzdF9yb3cpXG4gICAgfmNvbHVtbnM6cGxheWxpc3RfY29sdW1ucyA/c2hhcmVkX2RyYWdfZGF0YVxuICAgIH50YWJsZTpcbiAgICAgIChtYWtlX3RhYmxlXG4gICAgICAgICBbXG4gICAgICAgICAgIChcInRvdG9cIiwgXCJyMVwiKTtcbiAgICAgICAgICAgKFwidGF0YVwiLCBcInIyXCIpO1xuICAgICAgICAgICAoXCJ0aXRpXCIsIFwicjNcIik7XG4gICAgICAgICAgIChcInRhXCIsIFwicjRcIik7XG4gICAgICAgICAgIChcInR1XCIsIFwicjVcIik7XG4gICAgICAgICBdKVxuICAgICgpXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJlclxub3BlbiBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2RfdWlcbm9wZW4hIEJycl9sd2Rcbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxuKCoqIEFwcGxpY2F0aW9uIHBhcnQgKilcblxuKCoqIENvbHVtbnMgZGVjbGFyYXRpb24gKilcbmxldCBjb2x1bW5zICgpID1cbiAgVGFibGUuQ29sdW1ucy5cbiAgICBbfFxuICAgICAgdiBcIk9yZGVyXCIgXCI1cmVtXCIgQEAgWyBgUCAoRWwudHh0JyBcIiNcIikgXTtcbiAgICAgIHYgXCJDb3ZlclwiIFwiNXJlbVwiIEBAIFsgYFAgKEVsLnR4dCcgXCJDb3ZlclwiKSBdO1xuICAgICAgdiBcIlRpdGxlXCIgXCIxZnJcIiBAQCBbIGBQIChFbC50eHQnIFwiVGl0bGVcIikgXTtcbiAgICB8XVxuXG5sZXQgbWFrZSB+cmVzZXRfcGxheWxpc3QgfmZldGNoID9zY3JvbGxfdGFyZ2V0XG4gICAgKHZpZXcgOiAoRGIuVmlldy50LCAnYSkgRnV0LnJlc3VsdCBMd2QudCkgPVxuICBsZXQgaW1nX3VybCBzZXJ2ZXJfaWQgaXRlbV9pZCA9XG4gICAgbGV0IHNlcnZlcnMgPVxuICAgICAgKCogc2hvdWxkIHRoaXMgYmUgcmVhY3RpdmUgPyAqKVxuICAgICAgTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zIHw+IEx3ZF9zZXEudG9fbGlzdFxuICAgIGluXG4gICAgbGV0IHVybCA9XG4gICAgICB0cnlcbiAgICAgICAgbGV0IGNvbm5leGlvbiA6IERTLmNvbm5leGlvbiA9IExpc3QuYXNzcSBzZXJ2ZXJfaWQgc2VydmVycyBpblxuICAgICAgICBQcmludGYuc3ByaW50ZiBcIiVzL0l0ZW1zLyVzL0ltYWdlcy9QcmltYXJ5P3dpZHRoPTUwXCIgY29ubmV4aW9uLmJhc2VfdXJsXG4gICAgICAgICAgaXRlbV9pZFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gXCJzZXJ2ZXItZXJyb3IucG5nXCJcbiAgICBpblxuICAgIEF0LnNyYyAoSnN0ci52IHVybClcbiAgaW5cbiAgbGV0IHJlbmRlciB2aWV3IHN0YXJ0X2luZGV4XG4gICAgICB7XG4gICAgICAgIERiLlN0b3Jlcy5JdGVtcy5pdGVtID1cbiAgICAgICAgICB7IEFwaS5JdGVtLmlkOyBuYW1lOyBhbGJ1bV9pZDsgc2VydmVyX2lkOyBpbWFnZV9ibHVyX2hhc2hlczsgXyB9O1xuICAgICAgICBfO1xuICAgICAgfSA9XG4gICAgbGV0IHBsYXlfZnJvbSBfID1cbiAgICAgIGlnbm9yZVxuICAgICAgICAobGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgIGxldCsgKHZpZXcgOiBEYi5WaWV3LnQpID0gdmlldyBpblxuICAgICAgICAgcmVzZXRfcGxheWxpc3RcbiAgICAgICAgICAgeyB2aWV3IHdpdGggc3RhcnRfb2Zmc2V0ID0gdmlldy5zdGFydF9vZmZzZXQgKyBzdGFydF9pbmRleCB9KVxuICAgIGluXG4gICAgbGV0IHBsYXlfb25fY2xpY2sgPSBFbHdkLmhhbmRsZXIgRXYuY2xpY2sgcGxheV9mcm9tIGluXG4gICAgbGV0IGltZ191cmwgPVxuICAgICAgbWF0Y2ggKGltYWdlX2JsdXJfaGFzaGVzLCBhbGJ1bV9pZCkgd2l0aFxuICAgICAgfCB7IHByaW1hcnkgPSBOb25lIH0sIF8gfCBfLCBOb25lIC0+XG4gICAgICAgICAgTHdkLnJldHVybiAoQXQuc3JjIChKc3RyLnYgXCJ0cmFjay5wbmdcIikpXG4gICAgICB8IF8sIFNvbWUgaWQgLT4gTHdkLnJldHVybiAoaW1nX3VybCBzZXJ2ZXJfaWQgaWQpXG4gICAgaW5cbiAgICBsZXQgc3RhdHVzID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgUGxheWVyLm5vd19wbGF5aW5nKSB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBTb21lIHsgaXRlbSA9IHsgaWQgPSBpdGVtX2lkOyBfIH07IF8gfSB3aGVuIFN0cmluZy5lcXVhbCBpdGVtX2lkIGlkIC0+XG4gICAgICAgICAgICBFbC5kaXYgfmF0OlsgQXQuY2xhc3MnIChKc3RyLnYgXCJwbGF5aW5nXCIpIF0gWyBFbC50eHQnIFwifD5cIiBdXG4gICAgICAgIHwgU29tZSBfIHwgTm9uZSAtPiBFbC5kaXYgWyBFbC50eHQnIChzdHJpbmdfb2ZfaW50IChzdGFydF9pbmRleCArIDEpKSBdKVxuICAgIGluXG4gICAgW1xuICAgICAgYFIgc3RhdHVzO1xuICAgICAgYFJcbiAgICAgICAgKEVsd2QuZGl2XG4gICAgICAgICAgIH5ldjpbIGBQIHBsYXlfb25fY2xpY2sgXVxuICAgICAgICAgICBbIGBSIChFbHdkLmltZyB+YXQ6WyBgUiBpbWdfdXJsOyBgUCAoQXQud2lkdGggNTApIF0gKCkpIF0pO1xuICAgICAgYFAgKEVsLmRpdiBbIEVsLnNwYW4gWyBFbC50eHQnIG5hbWUgXSBdKTtcbiAgICBdXG4gIGluXG4gIGxldCBwbGFjZWhvbGRlciBfaSA9IFtdIGluXG4gIGxldCB1aV90YWJsZSA9XG4gICAgeyBUYWJsZS50YWJsZSA9IHsgY29sdW1ucyA9IGNvbHVtbnMgKCkgfTsgcm93X2hlaWdodCA9IEVtIDQuIH1cbiAgaW5cbiAgbGV0IGRhdGFfc291cmNlID1cbiAgICBMd2QubWFwIHZpZXcgfmY6KGZ1biB2aWV3IC0+XG4gICAgICAgIGxldCB0b3RhbF9pdGVtcyA9IEZ1dC5tYXAgKFJlc3VsdC5tYXAgRGIuVmlldy5pdGVtX2NvdW50KSB2aWV3IGluXG4gICAgICAgIGxldCBmZXRjaCBpID1cbiAgICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICAgIGxldCogdmlldyA9IHZpZXcgaW5cbiAgICAgICAgICBmZXRjaCB2aWV3IGlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHJlbmRlciA9IHJlbmRlciB2aWV3IGluXG4gICAgICAgIHsgVGFibGUuVmlydHVhbC50b3RhbF9pdGVtczsgZmV0Y2g7IHJlbmRlciB9KVxuICBpblxuICBUYWJsZS5WaXJ0dWFsLm1ha2UgfnVpX3RhYmxlIH5wbGFjZWhvbGRlciA/c2Nyb2xsX3RhcmdldCBkYXRhX3NvdXJjZVxuXG5sZXQgbWFrZV9ub3dfcGxheWluZyB+cmVzZXRfcGxheWxpc3QgfmZldGNoXG4gICAgKHZpZXcgOiAoRGIuVmlldy50LCAnYSkgRnV0LnJlc3VsdCBMd2QudCkgPVxuICBsZXQgc2Nyb2xsX3RhcmdldCA9IEx3ZC5nZXQgUGxheWVyLnBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IGluXG4gIG1ha2UgfnNjcm9sbF90YXJnZXQgfnJlc2V0X3BsYXlsaXN0IH5mZXRjaCB2aWV3XG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcblxuKCogVGhlIHNlc3Npb24gdXVpZCBpcyBzdG9yZWQgdG8gdGhlIGxvY2FsIHN0b3JhZ2UgYW5kIHVzZWQgdG8gaWRlbnRpZnkgYSB1c2VyXG4gICBzZXNzaW9uLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IEplbGx5ZmluIGF1dGhvcml6YXRpb24gc2NoZW1lLiAqKVxubGV0IHNlc3Npb25fdXVpZCA9XG4gICgqIFdlIG5ldmVyIHJlYWN0IHRvIHRoaXMgdmFyIHdlIGNvdWxkIHJlcGxhY2UgaXQgKilcbiAgQnJyX2x3ZF91aS5QZXJzaXN0ZW50LnZhcl9mIH5rZXk6XCJzZXNzaW9uX3V1aWRcIiAoZnVuICgpIC0+XG4gICAgICBTdGQubmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nKVxuXG5sZXQgXyA9XG4gIGxldCB1dWlkID0gTHdkLnBlZWsgc2Vzc2lvbl91dWlkIGluXG4gIERhdGFfc291cmNlLkplbGx5ZmluX2FwaS5zZXRfc2Vzc2lvbl91dWlkIHV1aWQ7XG4gIFdvcmtlcl9jbGllbnQucXVlcnkgKFNldF9zZXNzaW9uX3V1aWQgKEx3ZC5wZWVrIHNlc3Npb25fdXVpZCkpXG5cbmxldCBmZXRjaCB2aWV3IGkgPSBXb3JrZXJfY2xpZW50LihxdWVyeSAoR2V0ICh2aWV3LCBpKSkpXG5cbm1vZHVsZSBQID0gUGxheWVyLlBsYXliYWNrX2NvbnRyb2xsZXIgKHN0cnVjdFxuICBsZXQgZmV0Y2ggPSBmZXRjaFxuZW5kKVxuXG5sZXQgYXBwID1cbiAgbGV0IHBsYXlsaXN0ID0gQnJyX2x3ZF91aS5QZXJzaXN0ZW50LnZhciB+a2V5OlwidG90bzFcIiAwIGluXG4gIGxldCBvbl9jbGljayBfIF8gPVxuICAgIEx3ZC5zZXQgcGxheWxpc3QgKEx3ZC5wZWVrIHBsYXlsaXN0ICsgMSk7XG4gICAgTGFuZy5zZXQgTGFuZy5FbjtcbiAgICBCcnJfbHdkX3VpLkJ1dHRvbi5OZXh0XG4gIGluXG4gIGxldCBfYnRuX21peCwgXywgXyA9XG4gICAgVWkuVHdvX3N0YXRlX2J1dHRvbi5tYWtlIH5vbl9jbGljayAoZnVuIF8gLT5cbiAgICAgICAgW1xuICAgICAgICAgIGBSXG4gICAgICAgICAgICAoTHdkLm1hcCAoTHdkLmdldCBwbGF5bGlzdCkgfmY6KGZ1biBwbCAtPlxuICAgICAgICAgICAgICAgICBFbC50eHQnIChcImNsaWNrXCIgXiBzdHJpbmdfb2ZfaW50IHBsKSkpO1xuICAgICAgICBdKVxuICBpblxuICBsZXQgc3RhdHVzID1cbiAgICBFbHdkLmRpdlxuICAgICAgfmF0OlsgYFAgKEF0LnN0eWxlIChKc3RyLnYgXCJncmlkLWNvbHVtbjoxLy0xXCIpKSBdXG4gICAgICBbIGBQIChFbC5oMSBbIEVsLnR4dCcgXCJXZWxjb21lIHRvIE9DQU1JWFwiIF0pOyBgUiAoU2VydmVycy51aSAoKSkgXVxuICBpblxuICBsZXQgcGxheWVyX3VpID1cbiAgICBsZXQgcGxheWVyID0gUC5tYWtlICgpIGluXG4gICAgRWx3ZC5kaXYgfmF0OlsgYFAgKEF0LnN0eWxlIChKc3RyLnYgXCJncmlkLWNvbHVtbjoxLy0xXCIpKSBdIFsgYFIgcGxheWVyIF1cbiAgaW5cbiAgbGV0IGZfc2VhcmNoID1cbiAgICBsZXQgb3BlbiBCcnJfbHdkX3VpLkZpZWxkX3RleHRpbnB1dCBpblxuICAgIG1ha2UgeyBuYW1lID0gXCJwb3VldFwiOyBkZWZhdWx0ID0gTm9uZTsgbGFiZWwgPSBbXSB9XG4gIGluXG4gIGxldCBmX3NvcnQgPVxuICAgIGxldCBvcGVuIEJycl9sd2RfdWkuRmllbGRfc2VsZWN0IGluXG4gICAgbGV0IG9wdGlvbnMgPVxuICAgICAgTHdkLnB1cmVcbiAgICAgICAgKEx3ZF9zZXEub2ZfbGlzdFxuICAgICAgICAgICBbXG4gICAgICAgICAgICAgKFwiZGF0ZV9hZGRlZFwiLCBcIkRhdGUgYWRkZWRcIik7IChcIm5hbWVcIiwgXCJOYW1lXCIpOyAoXCJyYW5kb21cIiwgXCJSYW5kb21cIik7XG4gICAgICAgICAgIF0pXG4gICAgaW5cbiAgICBtYWtlIHsgbmFtZSA9IFwidmlldy1zb3J0XCI7IGRlZmF1bHQgPSBcImRhdGVfYWRkZWRcIjsgbGFiZWwgPSBbXSB9IG9wdGlvbnNcbiAgaW5cbiAgbGV0IGZpbHRlcnMsIGZfdmFsdWUgPVxuICAgIGxldCBmX2xpYnJhcmllcyA9XG4gICAgICBsZXQgb3BlbiBCcnJfbHdkX3VpLkZpZWxkX2NoZWNrYm94ZXMgaW5cbiAgICAgIGxldCBjaG9pY2VzID1cbiAgICAgICAgTHdkX3NlcS5mb2xkX21vbm9pZFxuICAgICAgICAgIChmdW4gKF8sIGwpIC0+XG4gICAgICAgICAgICBsZXQgbCA6IERiLlN0b3Jlcy5JdGVtcy50IGxpc3QgTHdkLnQgPSBsIGluXG4gICAgICAgICAgICBMd2QubWFwIGwgfmY6KGZ1biBsIC0+XG4gICAgICAgICAgICAgICAgTHdkX3NlcS50cmFuc2Zvcm1fbGlzdCBsIChmdW4gbCAtPlxuICAgICAgICAgICAgICAgICAgICBMd2Rfc2VxLmVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgQEAgQ2hlY2sgKGwuaXRlbS5pZCwgWyBgUCAoRWwudHh0JyBsLml0ZW0ubmFtZSkgXSwgdHJ1ZSkpKSlcbiAgICAgICAgICAoTHdkLnJldHVybiBMd2Rfc2VxLmVtcHR5LCBMd2QubWFwMiB+ZjpMd2Rfc2VxLmNvbmNhdClcbiAgICAgICAgICBTZXJ2ZXJzLnNlcnZlcnNfbGlicmFyaWVzXG4gICAgICBpblxuICAgICAgbWFrZSB7IG5hbWUgPSBcInBvdWV0XCI7IGRlc2MgPSBMd2Quam9pbiBjaG9pY2VzIH1cbiAgICBpblxuICAgIGxldCBmaWx0ZXJzID1cbiAgICAgIEVsd2QuZGl2IFsgYFIgZl9zb3J0LmZpZWxkOyBgUiBmX3NlYXJjaC5maWVsZDsgYFIgZl9saWJyYXJpZXMuZmllbGQgXVxuICAgIGluXG4gICAgKGZpbHRlcnMsIGZfbGlicmFyaWVzLnZhbHVlKVxuICBpblxuICBsZXQgbWFpbl92aWV3ID1cbiAgICBVaV91dGlscy5tYXAzIGZfdmFsdWUgZl9zZWFyY2gudmFsdWUgZl9zb3J0LnZhbHVlIH5mOihmdW4gbCB0IHMgLT5cbiAgICAgICAgbGV0IGZpbHRlcnMgPSBPcHRpb24ubWFwIChmdW4gcyAtPiBbIERiLlZpZXcuU2VhcmNoIHMgXSkgdCBpblxuICAgICAgICBDb25zb2xlLmxvZ1xuICAgICAgICAgIFtcbiAgICAgICAgICAgIFwiVXBkYXRpbmcgbWFpbiB2aWV3OlwiO1xuICAgICAgICAgICAgSnYub2Zfb3B0aW9uIH5ub25lOihKdi5vZl9zdHJpbmcgXCJcXFwiXFxcIlwiKSBKdi5vZl9zdHJpbmcgdDtcbiAgICAgICAgICAgIEp2Lm9mX2xpc3QgSnYub2Zfc3RyaW5nIGw7XG4gICAgICAgICAgICBKdi5vZl9zdHJpbmcgcztcbiAgICAgICAgICBdO1xuICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICBsZXQgc29ydCA9IERiLlZpZXcuU29ydC5vZl9zdHJpbmcgcyBpblxuICAgICAgICBXb3JrZXJfY2xpZW50LnF1ZXJ5XG4gICAgICAgICAgKENyZWF0ZV92aWV3IERiLlZpZXcuKHJlcSBBdWRpbyB+c3JjX3ZpZXdzOihPbmx5IGwpIH5zb3J0ID9maWx0ZXJzICgpKSkpXG4gIGluXG5cbiAgbGV0IG1haW5fbGlzdCA9XG4gICAgVWlfcGxheWxpc3QubWFrZSB+cmVzZXRfcGxheWxpc3Q6UC5yZXNldF9wbGF5bGlzdCB+ZmV0Y2ggbWFpbl92aWV3XG4gIGluXG4gIGxldCBub3dfcGxheWluZyA9XG4gICAgbGV0IHBsYXlsaXN0ID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgUGxheWVyLnBsYXlzdGF0ZS5wbGF5bGlzdCkgfmY6KGZ1bmN0aW9uXG4gICAgICAgIHwgTm9uZSAtPiBFbHdkLnNwYW4gWyBgUCAoRWwudHh0JyBcIk5vdGhpbmcgcGxheWluZ1wiKSBdXG4gICAgICAgIHwgU29tZSBwbGF5bGlzdCAtPlxuICAgICAgICAgICAgVWlfcGxheWxpc3QubWFrZV9ub3dfcGxheWluZyB+cmVzZXRfcGxheWxpc3Q6UC5yZXNldF9wbGF5bGlzdCB+ZmV0Y2hcbiAgICAgICAgICAgICAgKEx3ZC5wdXJlIChGdXQub2sgcGxheWxpc3QpKSlcbiAgICBpblxuICAgICgqdG9kbzogZG8gd2UgbmVlZCB0aGF0IGpvaW4gPyopXG4gICAgTHdkLmpvaW4gcGxheWxpc3RcbiAgaW5cbiAgRWx3ZC5kaXZcbiAgICB+YXQ6QnJyX2x3ZF91aS5BdHRycy4odG9fYXQgfmlkOlwibWFpbi1sYXlvdXRcIiBAQCBjbGFzc2VzIFtdKVxuICAgIFtcbiAgICAgIGBSIHN0YXR1cztcbiAgICAgIGBSXG4gICAgICAgIChFbHdkLmRpdlxuICAgICAgICAgICB+YXQ6WyBgUCAoQXQuY2xhc3MnIChKc3RyLnYgXCJpdGVtLWxpc3RcIikpIF1cbiAgICAgICAgICAgWyBgUiBmaWx0ZXJzOyBgUiBtYWluX2xpc3QgXSk7XG4gICAgICBgUlxuICAgICAgICAoRWx3ZC5kaXYgfmF0OlsgYFAgKEF0LmNsYXNzJyAoSnN0ci52IFwicGxheWxpc3RcIikpIF0gWyBgUiBub3dfcGxheWluZyBdKTtcbiAgICAgIGBSIHBsYXllcl91aTtcbiAgICBdXG5cbmxldCBpc19zdG9yYWdlX3BlcnNpc3RlbnQgPVxuICBCcnJfaW8uU3RvcmFnZS4obWFuYWdlciBHLm5hdmlnYXRvciB8PiBNYW5hZ2VyLnBlcnNpc3QpXG5cbmxldCBfID1cbiAgbGV0IG9uX2xvYWQgXyA9XG4gICAgQ29uc29sZS5sb2cgWyBcIlBlcnNpc3QgP1wiOyBpc19zdG9yYWdlX3BlcnNpc3RlbnQgXTtcbiAgICBsZXQgYXBwID0gTHdkLm9ic2VydmUgQEAgYXBwIGluXG4gICAgbGV0IG9uX2ludmFsaWRhdGUgXyA9XG4gICAgICBpZ25vcmUgQEAgRy5yZXF1ZXN0X2FuaW1hdGlvbl9mcmFtZVxuICAgICAgQEAgZnVuIF8gLT4gaWdub3JlIEBAIEx3ZC5xdWlja19zYW1wbGUgYXBwXG4gICAgaW5cbiAgICBFbC5hcHBlbmRfY2hpbGRyZW4gKERvY3VtZW50LmJvZHkgRy5kb2N1bWVudCkgWyBMd2QucXVpY2tfc2FtcGxlIGFwcCBdO1xuICAgIEx3ZC5zZXRfb25faW52YWxpZGF0ZSBhcHAgb25faW52YWxpZGF0ZVxuICBpblxuICBFdi5saXN0ZW4gRXYuZG9tX2NvbnRlbnRfbG9hZGVkIG9uX2xvYWQgKFdpbmRvdy5hc190YXJnZXQgRy53aW5kb3cpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEVuc3VyZSB0aGF0IFthdF9leGl0XSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHByb2dyYW0gKilcblxubGV0IF8gPSBkb19hdF9leGl0KClcbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtYWluLmJjLmpzIiwic291cmNlUm9vdCI6IiIsIm5hbWVzIjpbImNhbWxfYXJyYXlfYmxpdCIsImExIiwiaTEiLCJhMiIsImkyIiwibGVuIiwiaiIsImNhbWxfYXJyYXlfZmlsbCIsImFycmF5Iiwib2ZzIiwidiIsImkiLCJjYW1sX2FycmF5X3N1YiIsImEiLCJBcnJheSIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImYiLCJTdHJpbmciLCJudWxsIiwicyIsIk1hdGgiLCJjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkiLCJVaW50OEFycmF5IiwiYiIsImwiLCJjYW1sX2JsaXRfYnl0ZXMiLCJzMSIsInMyIiwiYzEiLCJjMiIsImNhbWxfc3RyX3JlcGVhdCIsIm4iLCJyIiwiY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyIsImpzb29faXNfYXNjaWkiLCJjYW1sX3V0ZjE2X29mX3V0ZjgiLCJ0IiwiYyIsIk1sQnl0ZXMiLCJ0YWciLCJjb250ZW50cyIsImxlbmd0aCIsInRoaXMiLCJjb250ZW50IiwiY2FtbF9ieXRlc19vZl9qc2J5dGVzIiwiY2FtbF9qc2J5dGVzX29mX3N0cmluZyIsIngiLCJjYW1sX2J5dGVzX29mX3N0cmluZyIsImNhbWxfYmxpdF9zdHJpbmciLCJkIiwiZSIsImpzb29fc3lzX2dldGVudiIsInByb2Nlc3MiLCJnbG9iYWxUaGlzIiwidW5kZWZpbmVkIiwiY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWciLCJjYW1sX2dsb2JhbF9kYXRhIiwiY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UiLCJleG4iLCJmb3JjZSIsImNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZSIsImNhbWxfcmFpc2Vfd2l0aF9hcmciLCJhcmciLCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzIiwiY2FtbF9yYWlzZV93aXRoX3N0cmluZyIsIm1zZyIsImNhbWxfaW52YWxpZF9hcmd1bWVudCIsImNhbWxfYnl0ZXNfYm91bmRfZXJyb3IiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2J5dGVzX3NldCIsImNhbWxfYnl0ZXNfdW5zYWZlX2dldCIsImNhbWxfY2FsbF9nZW4iLCJhcmdzIiwiYXJnc0xlbiIsImciLCJuYXJncyIsInkiLCJleHRyYV9hcmdzIiwiYXJndW1lbnRzIiwiY2FtbF9hcnJheV9ib3VuZF9lcnJvciIsImNhbWxfY2hlY2tfYm91bmQiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2VxdWFsIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJtIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJwIiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJjYW1sX2N1cnJlbnRfZGlyIiwiY2FtbF9tYWtlX3BhdGgiLCJjb21wMCIsIm5jb21wIiwiY2FtbF91dGY4X29mX3V0ZjE2IiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJ1bml4X2Vycm9yIiwibWFrZV91bml4X2Vycl9hcmdzIiwiY29kZSIsInN5c2NhbGwiLCJlcnJubyIsInZhcmlhbnQiLCJjYW1sX25hbWVkX3ZhbHVlcyIsImNhbWxfbmFtZWRfdmFsdWUiLCJubSIsImNhbWxfcmFpc2Vfd2l0aF9hcmdzIiwiY2FtbF9ieXRlc19vZl9hcnJheSIsImNhbWxfcmFpc2Vfc3lzX2Vycm9yIiwiY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUiLCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZUZkIiwiZmlsZSIsImZsYWdzIiwiTWxGYWtlRGV2aWNlIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsImVudHJ5Iiwib2siLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyIsIk1sTm9kZUZkIiwiZmQiLCJyZXF1aXJlIiwiZXJyIiwiYnVmX29mZnNldCIsInJlYWQiLCJNbE5vZGVEZXZpY2UiLCJjb25zdHMiLCJrZXkiLCJpc0NoYXJhY3RlckRldmljZSIsIm8iLCJqc19zdGF0cyIsInRvX2RpciIsInRhcmdldCIsImxpbmsiLCJmaWxlX2tpbmQiLCJjYW1sX2dldF9yb290IiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9jcmVhdGVfZmlsZSIsImpzb29fY3JlYXRlX2ZpbGUiLCJjYW1sX2ZzX2luaXQiLCJ0bXAiLCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2hfbWl4X2pzYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyIiwiY2FtbF9tbF9ieXRlc19jb250ZW50IiwiY2FtbF9oYXNoX21peF9ieXRlcyIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2hhc2giLCJjb3VudCIsImxpbWl0Iiwic2VlZCIsIm9iaiIsInF1ZXVlIiwicmQiLCJ3ciIsImhoIiwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQiLCJzdHlsZSIsImV4cF9zaWduIiwic2lnbl9zdHIiLCJjc3QiLCJ4X3N0ciIsImlkeCIsImNhbWxfaW50NjRfaXNfemVybyIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSIsImNhbWxfaW50NjRfbmVnIiwiY2FtbF9pbnQ2NF9mb3JtYXQiLCJ3YmFzZSIsImN2dGJsIiwiY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIiwiYmFzZSIsImNhbWxfcGFyc2VfZGlnaXQiLCJjYW1sX2ludF9vZl9zdHJpbmciLCJ0aHJlc2hvbGQiLCJjYW1sX2pzX2Zyb21fYXJyYXkiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfanNfbmV3IiwiRiIsImNhbWxfanNfb2JqZWN0IiwiY2FtbF9qc190b19hcnJheSIsImNhbWxfY2FsbGJhY2siLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IiwiYXJpdHkiLCJjYW1sX2xlc3N0aGFuIiwiY2FtbF9sZXhfYXJyYXkiLCJjYW1sX2xleF9lbmdpbmUiLCJ0YmwiLCJzdGFydF9zdGF0ZSIsImxleGJ1ZiIsImxleF9idWZmZXIiLCJsZXhfYnVmZmVyX2xlbiIsImxleF9zdGFydF9wb3MiLCJsZXhfY3Vycl9wb3MiLCJsZXhfbGFzdF9wb3MiLCJsZXhfbGFzdF9hY3Rpb24iLCJsZXhfZW9mX3JlYWNoZWQiLCJsZXhfYmFzZSIsImxleF9iYWNrdHJrIiwibGV4X2RlZmF1bHQiLCJsZXhfdHJhbnMiLCJsZXhfY2hlY2siLCJzdGF0ZSIsImJhY2t0cmsiLCJjYW1sX2xpc3RfdG9fanNfYXJyYXkiLCJjYW1sX21ha2VfdmVjdCIsImluaXQiLCJjYW1sX01ENUluaXQiLCJBcnJheUJ1ZmZlciIsImIzMiIsIlVpbnQzMkFycmF5IiwiYjgiLCJjYW1sX01ENVRyYW5zZm9ybSIsImFkZCIsInh4IiwiZmYiLCJnZyIsImlpIiwiY2FtbF9NRDVVcGRhdGUiLCJjdHgiLCJpbnB1dCIsImlucHV0X2xlbiIsImluX2J1ZiIsImlucHV0X3BvcyIsIm1pc3NpbmciLCJjYW1sX01ENUZpbmFsIiwiY2FtbF9zdHJpbmdfb2ZfYXJyYXkiLCJjYW1sX21kNV9ieXRlcyIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfc3lzX2ZkcyIsImNhbWxfc3lzX2Nsb3NlIiwiY2FtbF9tbF9jaGFubmVscyIsImNhbWxfbWxfY2hhbm5lbF9nZXQiLCJpZCIsImNhbWxfbWxfZmx1c2giLCJjaGFuaWQiLCJjaGFuIiwiY2FtbF9tbF9jbG9zZV9jaGFubmVsIiwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyIsImNhbWxfcmVmaWxsIiwic3RyIiwic3RyX2EiLCJucmVhZCIsImNhbWxfbWxfaW5wdXRfYmxvY2siLCJhdmFpbCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX3N5c19vcGVuX2Zvcl9ub2RlIiwiZnMiLCJmZDIiLCJNbEZha2VGZF9vdXQiLCJjb25zb2xlIiwic3JjIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImNhbWxfc3lzX29wZW4iLCJfcGVybXMiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsInJlZmlsbCIsImNoYW5uZWwiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQiLCJidWZmZXJlZCIsImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QiLCJjYW1sX21sX291dHB1dF90YSIsImNhbWxfbWxfb3V0cHV0X2J5dGVzIiwiY2FtbF9tbF9vdXRwdXQiLCJjYW1sX21sX291dHB1dF9jaGFyIiwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lIiwiY2FtbF9tb2QiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9vYmpfbWFrZV9mb3J3YXJkIiwiY2FtbF9vYmpfdGFnIiwiRnVuY3Rpb24iLCJjYW1sX2J1aWxkX3N5bWJvbHMiLCJzeW1iIiwiY2FtbF9yZWdpc3Rlcl9nbG9iYWwiLCJuYW1lX29wdCIsIm5pZCIsImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUiLCJjYW1sX3N0cmluZ19ib3VuZF9lcnJvciIsImNhbWxfc3RyaW5nX2dldCIsImNhbWxfc3RyaW5nX29mX2J5dGVzIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfcmFpc2Vfbm90X2ZvdW5kIiwiY2FtbF9zeXNfZ2V0ZW52IiwiY2FtbF9zeXNfcmFuZG9tX3NlZWQiLCJub3ciLCJEYXRlIiwiY2FtbF90cmFtcG9saW5lIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uIiwiY2FtbF9mb3JtYXRfZXhjZXB0aW9uIiwiYnVja2V0Iiwic3RhcnQiLCJjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImhhbmRsZXIiLCJhdF9leGl0IiwiY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsIm9yaWdpbiIsImV2ZW50IiwiemVyb19wb3MiLCJsb2NmbXQiLCJvY2FtbF9sZXhfdGFibGVzIiwidHBfbG9jIiwidHBfbG9jJDAiLCJ0cF9sb2MkMSIsInRwX2xvYyQyIiwidHBfbG9jJDMiLCJ0cF9sb2MkNCIsInRwX2xvYyQ1IiwidHBfbG9jJDYiLCJwYXRoJDAiLCJwYXRoJDEiLCJuYW1lJDYiLCJpbml0aWFsX3JlcG9ydCIsInN0cmluZ3MiLCJ1cmwkMCIsImRlZmF1bHQkMSIsImFsYnVtIiwiYXJ0aXN0IiwiZXJhc2VfcmVsIiwicmVzdCIsInJlc3QkMCIsInJlc3QkMSIsInJlc3QkMiIsInJlc3QkMyIsInJlc3QkNCIsInJlc3QkNSIsInJlc3QkNiIsInJlc3QkNyIsInR5IiwicmVzdCQ4IiwidHkxIiwicmVzdCQ5IiwicmVzdCQxMCIsInJlc3QkMTEiLCJyZXN0JDEyIiwicmVzdCQxMyIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInBhZCQwIiwicGFkJDEiLCJpY29udiIsInByZWMkMCIsInBhZCQyIiwiaWNvbnYkMCIsInByZWMkMSIsInBhZCQzIiwiaWNvbnYkMSIsInByZWMkMiIsInBhZCQ0IiwiaWNvbnYkMiIsInByZWMkMyIsInBhZCQ1IiwiZmNvbnYiLCJwYWQkNiIsImNociIsImZtdHR5IiwicGFkJDciLCJmbXR0eSQwIiwicGFkJDgiLCJyZXN0JDE0IiwicmVzdCQxNSIsInJlc3QkMTYiLCJmbXRpbmdfbGl0IiwicmVzdCQxNyIsImZtdGluZ19nZW4iLCJyZXN0JDE4IiwicmVzdCQxOSIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwicmVzdCQyMCIsImNvdW50ZXIiLCJyZXN0JDIxIiwicmVzdCQyMiIsImlnbiIsInJlc3QkMjMiLCJjdXIiLCJmYWlsd2l0aCIsImludmFsaWRfYXJnIiwiYWJzIiwibG5vdCIsIm1heF9pbnQiLCJjaGFyX29mX2ludCIsInN0cmluZ19vZl9ib29sIiwic3RyaW5nX29mX2ludCIsInZhbGlkX2Zsb2F0X2xleGVtIiwibG9vcCIsImkkMCIsImkkMSIsInN0cmluZ19vZl9mbG9hdCIsInN5bWJvbCIsImwxIiwibDIiLCJ0bCIsImhkIiwic3Rkb3V0Iiwic3RkZXJyIiwib3Blbl9vdXRfZ2VuIiwicGVybSIsIm9wZW5fb3V0IiwiZmx1c2hfYWxsIiwiaXRlciIsIm91dHB1dF9zdHJpbmciLCJvYyIsIm91dHB1dF9zdWJzdHJpbmciLCJjbG9zZV9vdXQiLCJvcGVuX2luX2dlbiIsIm9wZW5faW4iLCJpYyIsInByZXJyX2VuZGxpbmUiLCJleGl0X2Z1bmN0aW9uIiwiZl95ZXRfdG9fcnVuIiwib2xkX2V4aXQiLCJmX3lldF90b19ydW4kMCIsIm9sZF9leGl0JDAiLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19hdF9leGl0IiwiaXNfYmxvY2siLCJyYWlzZV91bmRlZmluZWQiLCJmb3JjZV9sYXp5X2Jsb2NrIiwiYmxrIiwiY2xvc3VyZSIsImUkMCIsInZhbHVlIiwiZGVmYXVsdCQwIiwiZ2V0JDAiLCJtYXAiLCJpc19zb21lIiwiZ2V0X29rIiwibWFwJDAiLCJvZl9pbnRfZXhuIiwicyQwIiwibGVuZ3RoX2F1eCIsImxlbiQwIiwiY29ucyIsInJldl9hcHBlbmQiLCJsMSQwIiwibDIkMCIsImwxJDEiLCJsMiQxIiwicmV2IiwiaW5pdF90YWlscmVjX2F1eCIsImFjYyIsImFjYyQwIiwiYWNjJDEiLCJpbml0X2F1eCIsInJtYXBfZiIsImFjY3UkMCIsImFjY3UiLCJsJDAiLCJsJDEiLCJhY2N1JDEiLCJmaW5kIiwiYXV4IiwicGFydCIsInllcyQwIiwibm8kMCIsImNtcCIsInJldl9tZXJnZSIsInQyIiwiaDIiLCJ0MSIsImgxIiwiYWNjdSQyIiwiYWNjdSQzIiwicmV2X21lcmdlX3JldiIsInNvcnQiLCJ4MiIsIngxIiwidGwkMSIsIngzIiwieDIkMCIsIngxJDAiLCJjJDAiLCJjJDEiLCJjJDIiLCJjJDMiLCJjJDQiLCJjJDUiLCJuMSIsIm4yIiwicmV2X3NvcnQiLCJ0bCQwIiwiY29tcGFyZSIsIm1pbiIsIm1heCQwIiwidG9fc3RyaW5nIiwib2ZzMSIsIm9mczIiLCJlbnN1cmVfZ2UiLCJzdW1fbGVuZ3RocyIsInNlcGxlbiIsInVuc2FmZV9ibGl0cyIsImRzdCIsInBvcyQwIiwiZXNjYXBlX2lmX25lZWRlZCIsImluZGV4X3JlYyIsImxpbSIsInRvbGlzdCIsInJlcyQwIiwicmVzJDEiLCJsaXN0X2xlbmd0aCIsImZpbGwiLCJsZXhfcmVmaWxsIiwicmVhZF9mdW4iLCJhdXhfYnVmZmVyIiwibmV3bGVuIiwibmV3YnVmIiwib3B0Iiwic3RoIiwid2l0aF9wb3NpdGlvbnMiLCJoZWlnaHQiLCJjcmVhdGUiLCJobCIsImgkMCIsImhyIiwiYmFsIiwibHIiLCJsdiIsImxsIiwibHJyIiwibHJ2IiwibHJsIiwicnIiLCJydiIsInJsIiwicmxyIiwicmx2IiwicmxsIiwic2luZ2xldG9uIiwiYWRkX21pbl9lbGVtZW50IiwiYWRkX21heF9lbGVtZW50Iiwiam9pbiIsInJoIiwibGgiLCJtaW5fZWx0IiwicmVtb3ZlX21pbl9lbHQiLCJyJDAiLCJtZXJnZSIsImNvbmNhdCIsInNwbGl0IiwicHJlcyIsInByZXMkMCIsImVtcHR5IiwiaXNfZW1wdHkiLCJtZW0iLCJyZW1vdmUiLCJ1bmlvbiIsInYyIiwidjEiLCJyMiQwIiwicjEkMCIsImludGVyIiwiZGlmZiIsImNvbnNfZW51bSIsImUkMSIsImNvbXBhcmVfYXV4IiwiZTEiLCJlMiIsImUxJDAiLCJlMiQwIiwiZTIkMSIsImUxJDEiLCJlMiQyIiwiZTEkMiIsImVxdWFsIiwic3Vic2V0IiwiczEkMCIsInMyJDAiLCJmb2xkIiwiY2FyZGluYWwiLCJlbGVtZW50c19hdXgiLCJlbGVtZW50cyIsImZpbmRfbGFzdF9vcHRfYXV4IiwidjAkMCIsImZpbmRfbGFzdF9vcHQiLCJvZl9zb3J0ZWRfbGlzdCIsInN1YiIsImwkMyIsIngwIiwibCQ0IiwieDAkMCIsImwkNSIsIngwJDEiLCJubCIsImxlZnQiLCJtaWQiLCJsJDIiLCJyaWdodCIsIm9mX2xpc3QiLCJ4NCIsImNsZWFyIiwicHVzaCIsInBvcF9vcHQiLCJ0b3Bfb3B0IiwiaXRlciQxIiwiY3JlYXRlJDAiLCJjbGVhciQwIiwiY2VsbCIsIm1hdGNoIiwicGVla19vcHQiLCJ0YWtlIiwibmV4dCIsInRha2Vfb3B0IiwibGVuZ3RoJDAiLCJpdGVyJDIiLCJjZWxsJDAiLCJpdGVyJDMiLCJmcm9tIiwiY3JlYXRlJDEiLCJuJDAiLCJuJDEiLCJzdWIkMiIsImxlbmd0aCQxIiwicmVzZXQiLCJyZXNpemUiLCJtb3JlIiwib2xkX3BvcyIsIm9sZF9sZW4iLCJuZXdfbGVuIiwibmV3X2J1ZmZlciIsImFkZF9jaGFyIiwiYWRkX3N1YnN0cmluZyIsIm5ld19wb3NpdGlvbiIsImFkZF9zdHJpbmciLCJkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiIsImJ1ZmZlcl9jcmVhdGUiLCJpbml0X3NpemUiLCJidWZmZXJfY2hlY2tfc2l6ZSIsIm92ZXJoZWFkIiwibWluX2xlbiIsImJ1ZmZlcl9hZGRfY2hhciIsImJ1ZmZlcl9hZGRfc3RyaW5nIiwic3RyX2xlbiIsImJ1ZmZlcl9jb250ZW50cyIsImNoYXJfb2ZfZmNvbnYiLCJjRiIsImJwcmludF9mY29udl9mbGFnIiwic3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IiwiZm9ybWF0dGluZ19saXQiLCJzdHIkMCIsImJwcmludF9mbXR0eSIsImZtdHR5JDEiLCJmbXR0eSQyIiwiZm10dHkkMyIsImZtdHR5JDQiLCJmbXR0eSQ1IiwiZm10dHkkNiIsImZtdHR5JDciLCJmbXR0eSQ4IiwiZm10dHkkOSIsInN1Yl9mbXR0eSIsImZtdHR5JDEwIiwic3ViX2ZtdHR5JDAiLCJmbXR0eSQxMSIsImZtdHR5JDEyIiwiZm10dHkkMTMiLCJmbXR0eSQxNCIsImZtdHR5JDE1Iiwic3ltbSIsImZtdHR5X3JlbF9kZXQiLCJkZSIsImVkIiwiYWYiLCJmYSIsImRlJDAiLCJlZCQwIiwiYWYkMCIsImZhJDAiLCJkZSQxIiwiZWQkMSIsImFmJDEiLCJmYSQxIiwiZGUkMiIsImVkJDIiLCJhZiQyIiwiZmEkMiIsImRlJDMiLCJlZCQzIiwiYWYkMyIsImZhJDMiLCJkZSQ0IiwiZWQkNCIsImFmJDQiLCJmYSQ0IiwiZGUkNSIsImVkJDUiLCJhZiQ1IiwiZmEkNSIsImRlJDYiLCJlZCQ2IiwiYWYkNiIsImZhJDYiLCJkZSQ3IiwiZWQkNyIsImFmJDciLCJmYSQ3IiwiZGUkOCIsImVkJDgiLCJhZiQ4IiwiZmEkOCIsInRyYW5zIiwiamQiLCJkaiIsImdhIiwiYWciLCJkZSQ5IiwiZWQkOSIsImFmJDkiLCJmYSQ5IiwiZGUkMTAiLCJlZCQxMCIsImFmJDEwIiwiZmEkMTAiLCJkZSQxMSIsImVkJDExIiwiYWYkMTEiLCJmYSQxMSIsImRlJDEyIiwiZWQkMTIiLCJhZiQxMiIsImZhJDEyIiwiZGUkMTMiLCJlZCQxMyIsImFmJDEzIiwiZmEkMTMiLCJyZXN0MSIsInJlc3QyIiwicmVzdDEkMCIsInJlc3QyJDAiLCJyZXN0MSQxIiwicmVzdDIkMSIsInJlc3QxJDIiLCJyZXN0MiQyIiwicmVzdDEkMyIsInJlc3QyJDMiLCJyZXN0MSQ0IiwicmVzdDIkNCIsInJlc3QxJDUiLCJyZXN0MiQ1IiwicmVzdDEkNiIsInJlc3QyJDYiLCJyZXN0MSQ3IiwidHkxJDAiLCJyZXN0MiQ3IiwidHkyJDAiLCJyZXN0MSQ4IiwidHkxMiIsInR5MTEiLCJyZXN0MiQ4IiwidHkyMiIsInR5MjEiLCJmNCIsImYyIiwicmVzdDEkOSIsInJlc3QyJDkiLCJyZXN0MSQxMCIsInJlc3QyJDEwIiwicmVzdDEkMTEiLCJyZXN0MiQxMSIsInJlc3QxJDEyIiwicmVzdDIkMTIiLCJyZXN0MSQxMyIsInJlc3QyJDEzIiwidHlwZV9wYWRkaW5nIiwicGFkdHkiLCJwYWR0eSQwIiwidHlwZV9wYWRwcmVjIiwidHlwZV9mb3JtYXQiLCJ0eXBlX2Zvcm1hdF9nZW4iLCJmbXQkMCIsImZtdHR5X3Jlc3QiLCJmbXRfcmVzdCIsImZtdHR5X3Jlc3QkMCIsImZtdF9yZXN0JDAiLCJmbXQkMSIsImZtdF9yZXN0JDEiLCJmbXR0eV9yZXN0JDEiLCJmbXQkMiIsImZtdF9yZXN0JDIiLCJmbXR0eV9yZXN0JDIiLCJmbXQkMyIsImZtdF9yZXN0JDMiLCJmbXR0eV9yZXN0JDMiLCJmbXQkNCIsImZtdF9yZXN0JDQiLCJmbXR0eV9yZXN0JDQiLCJmbXQkNSIsImZtdF9yZXN0JDUiLCJmbXR0eV9yZXN0JDUiLCJwcmVjJDQiLCJmbXQkNiIsImZtdF9yZXN0JDYiLCJwcmVjJDUiLCJwYWQkOSIsInBhZCQxMCIsImZtdHR5X3Jlc3QkNiIsInByZWMkNiIsImZtdCQ3IiwiZm10X3Jlc3QkNyIsInByZWMkNyIsInBhZCQxMSIsInBhZCQxMiIsImZtdHR5X3Jlc3QkNyIsInByZWMkOCIsImZtdCQ4IiwiZm10X3Jlc3QkOCIsInBhZCQxMyIsInBhZCQxNCIsImZtdHR5X3Jlc3QkOCIsImZtdCQ5IiwiZm10X3Jlc3QkOSIsImZtdCQxMCIsImZtdF9yZXN0JDEwIiwiZm10JDExIiwiZm10X3Jlc3QkMTEiLCJmbXQkMTIiLCJmbXR0eV9yZXN0JDkiLCJmbXRfcmVzdCQxMiIsInBhZF9vcHQiLCJmbXQkMTMiLCJmbXR0eV9yZXN0JDEwIiwic3ViX2ZtdHR5MSIsImZtdF9yZXN0JDEzIiwic3ViX2ZtdHR5JDEiLCJwYWRfb3B0JDAiLCJmbXQkMTQiLCJmbXR0eV9yZXN0JDExIiwiZm10X3Jlc3QkMTQiLCJmbXQkMTUiLCJmbXR0eV9yZXN0JDEyIiwiZm10X3Jlc3QkMTUiLCJmbXR0eSQxNiIsImZtdCQxNiIsImZtdF9yZXN0JDE2IiwiZm10dHkkMTciLCJmbXQkMTciLCJmbXRfcmVzdCQxNyIsImZvcm1hdHRpbmdfZ2VuIiwidHlwZV9mb3JtYXR0aW5nX2dlbiIsImZtdHR5X3Jlc3QkMTMiLCJmbXRfcmVzdCQxOCIsImZtdHR5JDE4IiwiZm10JDE4IiwiZm10dHlfcmVzdCQxNCIsImZtdF9yZXN0JDE5IiwiZm10dHkkMTkiLCJmbXQkMTkiLCJmbXR0eV9yZXN0JDE1IiwiZm10X3Jlc3QkMjAiLCJmbXR0eSQyMCIsImZtdCQyMCIsInR5cGVfaWdub3JlZF9wYXJhbSIsImZtdDAiLCJmbXR0eTAiLCJmbXR0eTMiLCJmbXQzIiwiZm10MSQwIiwiZm10dHkyJDAiLCJmbXQyJDAiLCJmbXR0eTMkMCIsImZtdDMkMCIsInR5cGVfaWdub3JlZF9wYXJhbV9vbmUiLCJ0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGkiLCJzdWJfZm10dHlfcmVzdCIsInN1Yl9mbXR0eV9yZXN0JDAiLCJzdWJfZm10dHlfcmVzdCQxIiwic3ViX2ZtdHR5X3Jlc3QkMiIsInN1Yl9mbXR0eV9yZXN0JDMiLCJzdWJfZm10dHlfcmVzdCQ0Iiwic3ViX2ZtdHR5X3Jlc3QkNSIsInN1Yl9mbXR0eV9yZXN0JDYiLCJzdWJfZm10dHlfcmVzdCQ3Iiwic3ViX2ZtdHR5X3Jlc3QkOCIsInN1Yl9mbXR0eV9yZXN0JDkiLCJzdWJfZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eV9yZXN0JDExIiwic3ViX2ZtdHR5X3Jlc3QkMTIiLCJzdWJfZm10dHlfcmVzdCQxMyIsInN1Yl9mbXR0eV9yZXN0JDE0Iiwic3ViMl9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE1Iiwic3ViMl9mbXR0eSQwIiwic3ViX2ZtdHR5X3Jlc3QkMTYiLCJzdWIyX2ZtdHR5JDEiLCJzdWIxX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTciLCJzdWIyX2ZtdHR5JDIiLCJzdWIxX2ZtdHR5JDAiLCJzdWJfZm10dHlfcmVzdCQxOCIsInN1Yl9mbXR0eV9yZXN0JDE5Iiwic3ViX2ZtdHR5X3Jlc3QkMjAiLCJzdWJfZm10dHlfcmVzdCQyMSIsInN1Yl9mbXR0eV9yZXN0JDIyIiwic3ViX2ZtdHR5X3Jlc3QkMjMiLCJzdWJfZm10dHlfcmVzdCQyNCIsInN1Yl9mbXR0eV9yZXN0JDI1Iiwic3ViX2ZtdHR5X3Jlc3QkMjYiLCJyZWNhc3QiLCJmaXhfcGFkZGluZyIsIndpZHRoIiwid2lkdGgkMCIsImZpeF9pbnRfcHJlY2lzaW9uIiwic3RyaW5nX3RvX2NhbWxfc3RyaW5nIiwiZm9ybWF0X29mX2ljb252IiwiZm9ybWF0X29mX2ljb252TCIsImZvcm1hdF9vZl9pY29udmwiLCJmb3JtYXRfb2ZfaWNvbnZuIiwiZm9ybWF0X29mX2Zjb252IiwidHJhbnNmb3JtX2ludF9hbHQiLCJkaWdpdHMiLCJwdXQiLCJjb252ZXJ0X2ludCIsImNvbnZlcnRfaW50MzIiLCJjb252ZXJ0X25hdGl2ZWludCIsImNvbnZlcnRfaW50NjQiLCJjb252ZXJ0X2Zsb2F0IiwiaGV4IiwiYWRkX2RvdF9pZl9uZWVkZWQiLCJpc192YWxpZCIsImNhbWxfc3BlY2lhbF92YWwiLCJmb3JtYXRfY2FtbF9jaGFyIiwic3RyaW5nX29mX2ZtdHR5IiwibWFrZV9wcmludGYkMCIsImskMCIsIm5ld19hY2MiLCJtYWtlX3ByaW50ZiIsIm1ha2VfcGFkZGluZyIsIm1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIiwibWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiIsImFjYyQyIiwiYWNjJDMiLCJhY2MkNCIsImskMSIsImthY2MiLCJrJDIiLCJtYWtlX2lnbm9yZWRfcGFyYW0iLCJtYWtlX2N1c3RvbSQwIiwibWFrZV9pbnZhbGlkX2FyZyIsIm1ha2VfZnJvbV9mbXR0eSQwIiwibWFrZV9mcm9tX2ZtdHR5IiwicCQwIiwicCQxIiwiYXJpdHkkMCIsIm1ha2VfY3VzdG9tIiwib3V0cHV0X2FjYyIsInAkMyIsInAkNCIsInAkNSIsInAkMiIsInN0cnB1dF9hY2MiLCJmYWlsd2l0aF9tZXNzYWdlIiwib3Blbl9ib3hfb2Zfc3RyaW5nIiwiaW52YWxpZF9ib3giLCJwYXJzZV9zcGFjZXMiLCJwYXJzZV9sd29yZCIsImokMCIsImokMSIsInBhcnNlX2ludCIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleHBfZW5kIiwiYm94X3R5cGUiLCJrZnByaW50ZiIsImZwcmludGYiLCJlcHJpbnRmIiwia3NwcmludGYiLCJzcHJpbnRmIiwicHJpbnRlcnMiLCJmaWVsZCIsIm90aGVyX2ZpZWxkcyIsImZpZWxkcyIsInVzZV9wcmludGVycyIsImNvbnYiLCJ0b19zdHJpbmdfZGVmYXVsdCIsImNoYXIkMCIsImxpbmUiLCJjaGFyJDEiLCJsaW5lJDAiLCJmaWxlJDAiLCJjaGFyJDIiLCJsaW5lJDEiLCJmaWxlJDEiLCJjb25zdHJ1Y3RvciIsInRvX3N0cmluZyQwIiwiY29udmVydF9yYXdfYmFja3RyYWNlIiwiYnQiLCJmb3JtYXRfYmFja3RyYWNlX3Nsb3QiLCJzbG90IiwiaW5mbyIsImlzX3JhaXNlIiwicHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSIsIm91dGNoYW4iLCJiYWNrdHJhY2UiLCJwcmludF9yYXdfYmFja3RyYWNlIiwicmF3X2JhY2t0cmFjZSIsInJlZ2lzdGVyX3ByaW50ZXIiLCJmbiIsIm9sZF9wcmludGVycyIsIm5ld19wcmludGVycyIsImVycm9ycyIsImRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbiIsInN0YXR1cyIsImVtcHR5X2JhY2t0cmFjZSIsInRyeV9nZXRfcmF3X2JhY2t0cmFjZSIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24iLCJkZWJ1Z2dlcl9pbl91c2UiLCJleG4kMSIsImV4biQwIiwicmF3X2JhY2t0cmFjZSQwIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiQwIiwibmV3X3N0YXRlIiwiYXNzaWduIiwic3QxIiwic3QyIiwiZnVsbF9pbml0IiwiY29tYmluZSIsImV4dHJhY3QiLCJzZWVkJDAiLCJtYWtlJDIiLCJtYWtlX3NlbGZfaW5pdCIsImNvcHkkMCIsImJpdHMiLCJjdXJ2YWwiLCJuZXd2YWwiLCJuZXd2YWwzMCIsImludGF1eCIsImludCQwIiwiYm91bmQiLCJpbnQkMSIsIm9uZ29pbmdfdHJhdmVyc2FsIiwicGFyYW1zIiwicmFuZG9taXplZF9kZWZhdWx0IiwicHJuZyIsInBvd2VyXzJfYWJvdmUiLCJ4JDAiLCJ4JDEiLCJpbml0aWFsX3NpemUiLCJyYW5kb20iLCJpbnNlcnRfYWxsX2J1Y2tldHMiLCJpbmRleGZ1biIsImlucGxhY2UiLCJvZGF0YSIsIm5kYXRhIiwibnNpemUiLCJuZGF0YV90YWlsIiwiaW5zZXJ0X2J1Y2tldCIsImNlbGwkMSIsIm5pZHgiLCJyZXNpemUkMCIsIm9zaXplIiwia2V5X2luZGV4IiwicmVtb3ZlX2J1Y2tldCIsImZpbmRfcmVjIiwiZDEiLCJuZXh0MSIsImQyIiwibmV4dDIiLCJrMyIsImQzIiwibmV4dDMiLCJmaW5kX2luX2J1Y2tldCIsIm1lbV9pbl9idWNrZXQiLCJ6ZXJvIiwidW5rbm93biIsImlzX2tub3duIiwicHBfZW5xdWV1ZSIsInRva2VuIiwicHBfY2xlYXJfcXVldWUiLCJwcF9pbmZpbml0eSIsInBwX291dHB1dF9zdHJpbmciLCJwcF9vdXRwdXRfbmV3bGluZSIsInBwX291dHB1dF9zcGFjZXMiLCJwcF9vdXRwdXRfaW5kZW50IiwiZm9ybWF0X3BwX3RleHQiLCJ0ZXh0IiwiZm9ybWF0X3N0cmluZyIsImJyZWFrX25ld19saW5lIiwiYWZ0ZXIiLCJiZWZvcmUiLCJyZWFsX2luZGVudCIsImJyZWFrX2xpbmUiLCJicmVha19zYW1lX2xpbmUiLCJwcF9mb3JjZV9icmVha19saW5lIiwicHBfc2tpcF90b2tlbiIsImZvcm1hdF9wcF90b2tlbiIsInRhYnMiLCJhZGRfdGFiIiwibHMiLCJ0YWdfbmFtZSIsIm1hcmtlciIsImJyZWFrcyIsImZpdHMiLCJvZmYiLCJvZmYkMCIsImluc2VydGlvbl9wb2ludCIsInRhYnMkMCIsImZpcnN0IiwidGFpbCIsImhlYWQiLCJ0YWIiLCJvZmYkMSIsImluc2VydGlvbl9wb2ludCQwIiwid2lkdGgkMSIsImJveF90eXBlJDAiLCJ0Ym94IiwidGFnX25hbWUkMCIsIm1hcmtlciQwIiwiYWR2YW5jZV9sZWZ0IiwicGVuZGluZ19jb3VudCIsInNpemUkMCIsImVucXVldWVfYWR2YW5jZSIsInRvayIsImVucXVldWVfc3RyaW5nX2FzIiwiZW5xdWV1ZV9zdHJpbmciLCJpbml0aWFsaXplX3NjYW5fc3RhY2siLCJxdWV1ZV9lbGVtIiwic2V0X3NpemUiLCJsZWZ0X3RvdGFsIiwic2Nhbl9wdXNoIiwiZWxlbSIsInBwX29wZW5fYm94X2dlbiIsImJyX3R5IiwicHBfb3Blbl9zeXNfYm94IiwicHBfY2xvc2VfYm94IiwicHBfb3Blbl9zdGFnIiwicHBfY2xvc2Vfc3RhZyIsInBwX2Nsb3NlX3RhZyIsInBwX3Jpbml0IiwiY2xlYXJfdGFnX3N0YWNrIiwicHBfZmx1c2hfcXVldWUiLCJwcF9wcmludF9hc19zaXplIiwicHBfcHJpbnRfYXMiLCJpc2l6ZSIsInBwX3ByaW50X3N0cmluZyIsInBwX3ByaW50X2Jvb2wiLCJwcF9wcmludF9jaGFyIiwicHBfcHJpbnRfbmV3bGluZSIsInBwX3ByaW50X2ZsdXNoIiwicHBfZm9yY2VfbmV3bGluZSIsInBwX3ByaW50X2N1c3RvbV9icmVhayIsInBwX3ByaW50X2JyZWFrIiwicHBfcHJpbnRfY3V0IiwiZGlzcGxheV9uZXdsaW5lIiwiYmxhbmtfbGluZSIsImRpc3BsYXlfYmxhbmtzIiwiZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnIiwiZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWciLCJkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyIsInBwX21ha2VfZm9ybWF0dGVyIiwicHBfcXVldWUiLCJzeXNfdG9rIiwic2Nhbl9zdGFjayIsInBwX21hcmdpbiIsIm1ha2VfZm9ybWF0dGVyIiwib3V0cHV0IiwiZmx1c2giLCJwcGYiLCJmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwiLCJmb3JtYXR0ZXJfb2ZfYnVmZmVyIiwicHBfYnVmZmVyX3NpemUiLCJwcF9tYWtlX2J1ZmZlciIsInN0ZGJ1ZiIsInN0ZF9mb3JtYXR0ZXIiLCJlcnJfZm9ybWF0dGVyIiwiZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciIsInBwX3ByaW50X2xpc3QiLCJwcF92Iiwib3B0JDAiLCJwcF9zZXAiLCJvcHQkMSIsImNvbXB1dGVfdGFnIiwidGFnX2FjYyIsIm91dHB1dF9mb3JtYXR0aW5nX2xpdCIsIm91dHB1dF9hY2MkMCIsImJ0eSIsImYkMCIsInAkNiIsInAkNyIsImtmcHJpbnRmJDAiLCJmcHJpbnRmJDAiLCJrYXNwcmludGYiLCJhc3ByaW50ZiIsImZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMiLCJyZWdpc3Rlcl9leGNlcHRpb24iLCJ2YWx1ZSQwIiwiY29udGVudF9yZWN0IiwidGFyZ2V0JDAiLCJzdHJpbmdfb2ZfYm94Iiwib2JzZXJ2ZSIsImJveCIsImJveCQwIiwiY3JlYXRlJDciLCJjYWxsYmFjayIsImNhbGxiYWNrJDAiLCJlbnRyaWVzIiwib2JzZXJ2ZXIiLCJlbnRyaWVzJDAiLCJvZl9uYXZpZ2F0b3IiLCJpbWdfdG9fanYiLCJpbWciLCJ0b19qdiIsImFydHdvcmsiLCJzZXRfbWV0YWRhdGEiLCJtZXRhZGF0YSIsIm5leHRfdHJhY2siLCJwcmV2aW91c190cmFjayIsInNldF9hY3Rpb25faGFuZGxlciIsImFjdGlvbiIsInNldF9wb3NpdGlvbl9zdGF0ZSIsImR1cmF0aW9uIiwicGxheWJhY2tfcmF0ZSIsInBvc2l0aW9uIiwibWF5YmVfZmxvYXQiLCJkdXJhdGlvbiQwIiwicGxheWJhY2tfcmF0ZSQwIiwicG9zaXRpb24kMCIsInN0YXRlX2RpY3QiLCJzdWJtaXQiLCJwYXR0ZXJuIiwicGVyc2lzdCIsIm1hbmFnZXIiLCJhbnkiLCJyZXR1cm4kMSIsInB1cmUiLCJpc19wdXJlIiwiZHVtbXkiLCJvcGVyYXRvciIsImRlc2MiLCJmdW5jIiwidngiLCJtYXAyIiwidnkiLCJjaGlsZCIsImJpbmQkMSIsImFkZF9pZHgiLCJwYXJhbSIsInJlbV9pZHhfcmVjIiwic2VsZiIsInJlbV9pZHgiLCJ0cmFjZV9pZHgiLCJ0cmFjZV9pZHgkMCIsImlkeCQwIiwibW92X2lkeF9yZWMiLCJvbGRpZHgiLCJuZXdpZHgiLCJtb3ZfaWR4IiwiZ2V0X2lkeF9yZWMiLCJnZXRfaWR4IiwiaW52YWxpZGF0ZV9ub2RlJDAiLCJzZW5zaXRpdml0eSIsIm5vZGUiLCJzZW5zaXRpdml0eSQwIiwiaW52YWxpZGF0ZV90cmFjZSIsImludmFsaWRhdGVfbm9kZSIsInoiLCJ5JDAiLCJ6JDAiLCJ5JDEiLCJ4JDIiLCJhY3RpdmUiLCJkZWZhdWx0X3Vuc2FmZV9tdXRhdGlvbl9sb2dnZXIiLCJjYWxsc3RhY2siLCJkb19pbnZhbGlkYXRlIiwidW5zYWZlIiwidmFyJDAiLCJnZXQkMyIsInBlZWsiLCJ1cGRhdGUiLCJwcmltIiwiYWNxdWlyZSIsInJlbGVhc2UiLCJnZXRfcHJpbSIsImludmFsaWRhdGUiLCJzdWJfcmVsZWFzZSIsImZhaWx1cmVzJDAiLCJvcmlnaW4kMSIsIm9yaWdpbiQwIiwidHJhY2UiLCJ0cmFjZSQwIiwieCQ0IiwieCQ1IiwieCQ2IiwicmV2aWR4Iiwic2VsZiQwIiwic2VsZiQxIiwic2VsZiQyIiwic2VsZiQzIiwiaW50ZXJtZWRpYXRlIiwiZmFpbHVyZXMkNCIsImNoaWxkJDAiLCJ4JDMiLCJ3cnQiLCJzZWxmJDQiLCJzdWJfYWNxdWlyZSIsInRyYWNlJDEiLCJlbnRyaWVzJDEiLCJkb2MiLCJhY3RpdmF0ZV90cmFjaW5nIiwidG4iLCJzdWJfaXNfZGFtYWdlZCIsInN1Yl9zYW1wbGUiLCJmJDEiLCJyZXN1bHQkMCIsIm9ic2VydmUkMCIsIm9uX2ludmFsaWRhdGUiLCJyYXdfZmx1c2hfcmVsZWFzZV9xdWV1ZSIsInBhcmFtJDAiLCJmYWlsdXJlcyQxIiwiZmx1c2hfcmVsZWFzZV9xdWV1ZSIsInF1ZXVlJDAiLCJzYW1wbGUiLCJzZXRfb25faW52YWxpZGF0ZSIsImZsdXNoX29yX2ZhaWwiLCJtYWluX2V4biIsImZhaWx1cmVzIiwicXVpY2tfc2FtcGxlIiwibWFwX3JlZHVjZSIsImluaiIsIml0ZW1zIiwicGx1cyIsImNvbnNfbW9ub2lkIiwieHMiLCJ4cyQwIiwidiQwIiwieHMkMSIsInYkMSIsInYkMiIsImNvbnNfbW9ub2lkJDAiLCJub3Rfb3JpZ2luIiwibWFrZSQzIiwic2V0X3BhcmVudCIsIm1ha2Vfbm9kZSIsInNldCIsImJpbmRpbmciLCJyYXdfaW52YWxpZGF0ZSIsImFwcGVuZCIsImdldCQ0IiwiaW52YWxpZGF0ZV9iaW5kaW5nIiwic2V0X2JpbmRpbmciLCJjbGVhciQyIiwicm9vdCQwIiwic21hbGxlcl9lbGwiLCJzbWluIiwic21heCIsImRpc2JhbGFuY2VkIiwicmVwYXJlbnQiLCJvbGRjaGlsZCIsIm5ld2NoaWxkIiwicm90X2xlZnQkMCIsInZlcnNpb24iLCJzbiIsInJuIiwicmwkMCIsImJhbGFuY2UiLCJiYWxhbmNlJDAiLCJyb3RfbGVmdCIsInJvdF9yaWdodCQwIiwibG4iLCJsciQwIiwicm90X3JpZ2h0IiwiaW5jX2xlZnQiLCJpbmNfcmlnaHQiLCJzbCIsInNyIiwiY29tcHV0ZV9zdWJfc2l6ZSIsInJlc2V0X3ZlcnNpb24iLCJyZWJhbGFuY2UiLCJ2ZXJzaW9uJDAiLCJleHRyYWN0X2JpbmRpbmdzIiwidHJlZSIsInJub2RlIiwiZnVsbF9yZWJ1aWxkIiwicmVkIiwiYmluZGluZ3MiLCJiaW5kaW5ncyQwIiwicmVkdWN0aW9uIiwiYmluZGluZyQwIiwicmVkdWN0aW9uJDAiLCJhZ2dyZWdhdGUiLCJhZ2dyZWdhdGUkMCIsImV4dHJhY3RfZnJpbmdlIiwiaW5jcmVtZW50YWxfcmVidWlsZCIsImZyaW5nZSIsImZyaW5nZSQwIiwiZnJpbmdlJDEiLCJldmFsJDAiLCJvcGFxdWUiLCJtYXBfcmVkdWNlJDAiLCJtYXBwZXIiLCJtb25vaWQiLCJzb3VyY2UiLCJwcmltJDAiLCJlbXB0eSQwIiwiZWxlbWVudCIsIm1heGkiLCJyYW5rIiwiY29uY2F0JDEiLCJtYXNrX29sZCIsIm1hc2tfbmV3IiwibWFza19ib3RoIiwiaXNfc2hhcmVkIiwiaXNfbm90X3NoYXJlZCIsImlzX2JvdGgiLCJpc19vbGQiLCJpc19uZXciLCJzZXRfYm90aCIsImdldF9pbmRleCIsIndpdGhfaW5kZXhfbmV3IiwidW5tYXJrIiwibWFya2VkIiwic2hhcmVkIiwiYmxvY2tlZCIsIm1rX3N0YXRzIiwibmV3X21hcmtlZCIsInN0YXRzIiwibmV3X3NoYXJlZCIsIm5ld19ibG9ja2VkIiwiYmxvY2siLCJtYXNrIiwibWFyayIsIm1hcmskMCIsImVucXVldWUiLCJkZXF1ZXVlIiwidHJhdmVyc2UxIiwidHJhdmVyc2UiLCJzb2xkIiwic25ldyIsInFvbGQiLCJxbmV3Iiwib2xkX3N0YXRzIiwidHIiLCJuZXdfc3RhdHMiLCJ1bnNhZmVfdHJhdmVyc2UiLCJvbGRfcm9vdCIsIm5ld19yb290Iiwib2xkX3F1ZXVlIiwibmV3X3F1ZXVlIiwicmVzdG9yZSIsIm5leHRfc2hhcmVkX2luZGV4Iiwic3QiLCJ1bmJsb2NrIiwidCQwIiwidW5tYXJrX29sZCIsImluZGV4JDAiLCJkcm9wcGVkX2xlYWYiLCJhJDAiLCJiJDAiLCJpbmRleCQxIiwiaW5kZXgkMiIsImRyb3BwZWRfam9pbiIsInByZXBhcmVfc2hhcmVkIiwidW5tYXJrX25ldyIsIm5vX2Ryb3BwZWQiLCJnZXRfZHJvcHBlZCIsInhvbGQiLCJ0bmV3IiwidHJhdmVyc2FsIiwibmJfZHJvcHBlZCIsIm5iX3NoYXJlZCIsIm5iX2Ryb3BwZWQkMCIsInhsZWFmIiwieGpvaW4iLCJldmFsJDEiLCJvdGhlciIsIm1ha2UkNCIsInJlZHVjZSIsInVwZGF0ZSQwIiwibmV3X3RyZWUiLCJvbGRfdHJlZSIsInVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQiLCJkcm9wcGVkIiwiZm9sZF9kcm9wcGVkIiwiYm91bmQkMCIsInB1cmVfbWFwX3JlZHVjZSIsImZvbGRfbW9ub2lkIiwic2VxIiwicmVkdWNlJDAiLCJyZWR1Y2VyIiwicmVkdWNlciQwIiwidHJhbnNmb3JtX2xpc3QiLCJvZl9saXN0JDEiLCJ0b19saXN0JDEiLCJsd2RfZW1wdHkiLCJsd2RfbW9ub2lkIiwibWFwJDQiLCJmaWx0ZXJfbWFwJDAiLCJzZWxlY3QiLCJiaW5kJDIiLCJsaWZ0Iiwib3B0cyIsInR5cGUiLCJpc19wdXJlX2VsZW1lbnQiLCJleHRyYWN0X3B1cmVfZWxlbWVudCIsImV4dHJhY3RfcHVyZV9lbGVtZW50cyIsInByZXBhcmVfY29sIiwiY29sIiwiaW1wdXJlIiwiY29uc3VtZV9jaGlsZHJlbiIsImNoaWxkX25vZGUiLCJjaGlsZF9qb2luIiwianZfYXBwZW5kIiwianZfYmVmb3JlIiwianZfcmVtb3ZlIiwianZfY29udGFpbnMiLCJjb250YWluc19mb2N1cyIsImVsIiwidXBkYXRlX2NoaWxkcmVuIiwiY2hpbGRyZW4iLCJzY2hlZHVsZV9mb3JfcmVtb3ZhbCIsInByZXNlcnZlX2ZvY3VzIiwic2hpZnRfc2libGluZ3MiLCJzaWJsaW5nIiwicmVtb3ZlX2NoaWxkIiwicHVyZV91bml0IiwiZHVtbXlfa3ZfYXQiLCJhdHRhY2hfYXR0cmlicyIsImF0dHJpYnMiLCJzZXRfa3YiLCJ1bnNldF9rdiIsInNldF9sd2RfYXQiLCJwcmV2IiwiYXQiLCJwYWlyIiwiYXRzIiwic2V0X2F0Iiwia3YiLCJsaXN0ZW4kMCIsImF0dGFjaF9ldmVudHMiLCJldmVudHMiLCJjYWNoZWQiLCJ2JDQiLCJzdGgkMCIsImV2IiwiaW1wdXJlX2F0IiwiYXQkMCIsImltcHVyZV9ldiIsImV2JDAiLCJpbXB1cmVfY2hpbGRyZW4iLCJjaGlsZHJlbiQwIiwiY2hpbGRyZW4kMSIsImNoaWxkcmVuJDIiLCJjb25zJDEiLCJjcyIsInZvaWRfY29ucyIsImJ1dHRvbiQwIiwiZGl2JDEiLCJmb3JtJDAiLCJpbWckMCIsImlucHV0JDEiLCJsYWJlbCQwIiwib3B0aW9uJDAiLCJzZWxlY3QkMCIsInNwYW4kMSIsInNodWZmbGUiLCJyYW5kX2ludCIsIml0ZW1fdG9fc3RyaW5nIiwiaXNfbmFuIiwib2Zfc3RyaW5nX29wdCIsImVxdWFsJDAiLCJjb21wYXJlJDEiLCJvZl9zdHJpbmckMCIsIm9mX2Zsb2F0Iiwia2VlcCIsInN5bWJvbCQ5IiwibWFwX29yIiwiZmxhdF9tYXAiLCJzeW1ib2xfYmluZCQwIiwidmFsdWUkMyIsInRvX2xpc3QkMiIsInN5bWJvbCQxMCIsInN5bWJvbCQxMSIsImdldF9leG4iLCJnZXRfb3IiLCJmbGF0X21hcCQwIiwic3ltYm9sJDEyIiwic3ltYm9sX2JpbmQkMSIsInN1ZiIsImNoZWNrIiwibGV4X2Vycm9yIiwiZXJyb3JfcG9zIiwiY251bSIsImVudW0kMCIsInN0cmluZzJudW0iLCJ1cGRhdGVfcG9zIiwiaW50X29mX2hleGNoYXIiLCJ1dGY4X29mX2NvZGUiLCJ1IiwibWF4X3VzZWRfYml0cyIsInV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIiLCJoaWdoIiwibG93IiwiaGlnaCQwIiwibG93JDAiLCJlc2NhcGluZ19lcnJvciIsIm9mZnMiLCJ1bmVzY2FwZV9zdHJpbmciLCJ1MSIsInUyIiwicmVhZCQwIiwib2NhbWxfbGV4X3JlYWRfcmVjIiwib2NhbWxfbGV4X3N0YXRlIiwib2NhbWxfbGV4X3N0YXRlJDAiLCJvY2FtbF9sZXhfc3RhdGUkMSIsInJlYWRfY29tbWVudCIsInJlYWRfY29tbWVudCQwIiwib2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMiLCJjcmVhdGVfZnJvbV9sZXhidWYiLCJlbXNnIiwiZWNoYXIiLCJzY2hhciIsImVsaW5lIiwibG9nMiIsImJpdHMkMCIsIm1heF9qc29uX2ludCIsInN0cmluZ19vZl9mbG9hdF9qc29uIiwiaXNfaW50IiwiaW50X3ZhbHVlIiwidG9rZW5fZXJyb3IiLCJzJDEiLCJzJDIiLCJqc29uX3ZhbHVlIiwidG9rZW5fdmFsdWUiLCJvYmplY3RfdmFsdWVfc3RhcnQiLCJhcnJheV92YWx1ZV9zdGFydCIsInZhcmlhbnRfdmFsdWVfc3RhcnQiLCJ0dXBsZV92YWx1ZV9zdGFydCIsImFycmF5X3ZhbHVlc19zdGFydCIsInRvayQwIiwiYXJyYXlfdmFsdWVzIiwib2JqZWN0X3ZhbHVlc19zdGFydCIsImNvbG9uX3ZhbHVlIiwib2JqZWN0X3ZhbHVlcyIsImtleV9jb2xvbl92YWx1ZSIsInR1cGxlX3ZhbHVlcyIsInZhcmlhbnRfZW5kIiwiZGVjb2RlIiwiZXJyJDAiLCJuaWJibGVfdG9faGV4IiwiYWRkX2hleF9ieXRlIiwiZXNjYXBlIiwidG9fanNvbl9zdHJpbmciLCJhZGRfY2hhciQwIiwiYWRkX3N0cmluZyQwIiwiYWRkX3F1b3RlX3N0cmluZyIsInBwX2xpc3QiLCJwcHgiLCJvdXQiLCJmb3JtYXQiLCJqc29uIiwiZm9ybWF0X2ZpZWxkIiwianNvbiQwIiwicyQzIiwicHJldHR5X3ByaW50IiwicHJldHR5X3ByaW50X3RvX3N0cmluZyIsInByZXR0eV9wcmludF90b19jaGFubmVsIiwiZXJyb3IkMSIsInRvX2Fzc29jIiwibnVsbCQxIiwidG9rZW5fdG9fc3RyaW5nIiwicmVhZF9qc29uIiwicmVhZF9qc29uX2Vycm9yX2luZm8iLCJlcnJfaW5mbyIsImpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8iLCJqc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyIsImluYyIsImpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIiwiZmlsZW5hbWUiLCJqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXAiLCJzdHJlYW0iLCJyZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8iLCJmaW4iLCJzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyIsInN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyIsInN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyIsInN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIiwianNvbl90b19jaGFubmVsX2ZtdCIsImVvbCIsImluY3IiLCJwc2VwIiwiYWRkX2ludCIsImFkZF9mbG9hdCIsInBzZXAkMCIsImxkciQxIiwianNvbl9saXN0IiwibGRyJDIiLCJsZHIiLCJqc29uX2Fzc29jIiwibGRyJDAiLCJuZXdzZXAiLCJqc29uX3RvX2NoYW5uZWwiLCJqc29uX3RvX2ZpbGVfZXhuIiwianNvbl90b19idWZmZXIiLCJqc29uX3RvX3N0cmluZyIsImpzb25fZXJyb3IiLCJlcnJvcl90b19zdHJpbmciLCJlcnJvcl9pbmZvIiwiZm5hbWUiLCJsbnVtIiwibG51bSQwIiwibG51bSQxIiwiZm5hbWUkMCIsImxvYyIsImFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIiwiZnJvbV9zdHJpbmciLCJ0b19zdGFuZGFyZCIsInRwbCIsImpvcHQiLCJzdGQiLCJsZXhfc3RyaW5nIiwibGV4X251bWJlciIsImxleF9pbnRlZ2VyIiwibGV4X2xhcmdlaW50IiwibGV4X3ZhcmlhbnQiLCJsZXhfdHVwbGUiLCJjb21tZW50X2NoZWNrIiwibnVtYmVyX3RvX3N0cmluZyIsImxhcmdlaW50IiwiaW50ZWdlciIsIm51bGwkMiIsInN0cmluZyQwIiwiYm9vbCIsImFzc29jIiwibGlzdCIsInR1cGxlIiwibnVtYmVyIiwiYXJyYXlfc3RhcnQiLCJhcnJheV9lbmQiLCJvYmplY3Rfc3RhcnQiLCJvYmplY3RfZW5kIiwidHVwbGVfc3RhcnQiLCJ0dXBsZV9lbmQiLCJ2YXJpYW50X3N0YXJ0IiwibmFtZSQwIiwibGV4X3N0cmluZyQwIiwibGV4X251bWJlciQwIiwibGV4X2ludGVnZXIkMCIsImxleF9sYXJnZWludCQwIiwibGV4X3ZhcmlhbnQkMCIsImxleF90dXBsZSQwIiwiY29tbWVudF9jaGVjayQwIiwibnVtYmVyX3RvX3N0cmluZyQwIiwibGFyZ2VpbnQkMCIsImludGVnZXIkMCIsIm51bGwkMyIsInN0cmluZyQxIiwiYm9vbCQwIiwiYXNzb2MkMCIsImxpc3QkMCIsInR1cGxlJDAiLCJ2YXJpYW50JDAiLCJudW1iZXIkMCIsImFycmF5X3N0YXJ0JDAiLCJhcnJheV9lbmQkMCIsIm9iamVjdF9zdGFydCQwIiwib2JqZWN0X2VuZCQwIiwidHVwbGVfc3RhcnQkMCIsInR1cGxlX2VuZCQwIiwidmFyaWFudF9zdGFydCQwIiwidmFyaWFudF9lbmQkMCIsIm5hbWUkMSIsImZyb21fc3RyaW5nJDAiLCJ0b19zdHJpbmckNCIsImxleF9zdHJpbmckMSIsImxleF9udW1iZXIkMSIsImxleF9pbnRlZ2VyJDEiLCJsZXhfbGFyZ2VpbnQkMSIsImxleF92YXJpYW50JDEiLCJsZXhfdHVwbGUkMSIsImNvbW1lbnRfY2hlY2skMSIsIm51bWJlcl90b19zdHJpbmckMSIsImxhcmdlaW50JDEiLCJpbnRlZ2VyJDEiLCJudWxsJDQiLCJzdHJpbmckMiIsImJvb2wkMSIsImFzc29jJDEiLCJsaXN0JDEiLCJ0dXBsZSQxIiwidmFyaWFudCQxIiwibnVtYmVyJDEiLCJhcnJheV9zdGFydCQxIiwiYXJyYXlfZW5kJDEiLCJvYmplY3Rfc3RhcnQkMSIsIm9iamVjdF9lbmQkMSIsInR1cGxlX3N0YXJ0JDEiLCJ0dXBsZV9lbmQkMSIsInZhcmlhbnRfc3RhcnQkMSIsInZhcmlhbnRfZW5kJDEiLCJuYW1lJDIiLCJ0b19qc3RyJDEiLCJvZl9qc3RyJDEiLCJqc3RyIiwib2ZfanYiLCJqdiIsInJhbmRvbV9zdGF0ZSIsIm5ld191dWlkX3Y0IiwidGVlIiwidG9fYXQiLCJlbXB0eSQyIiwidG9fYXQkMCIsImlkJDAiLCJjbGFzc2VzIiwidW5pb24kMCIsImF0dHJzIiwiYWRkJDEiLCJhdF9uYW1lIiwiYWRkX2Jvb2wiLCJhZGRfb3B0IiwibWFwX2NvbCIsIm9mX2F0IiwiY29ucyQyIiwiY2xhc3MkMiIsInYkNSIsInN5bWJvbCQxMyIsIm9mX3N0cmluZyQxIiwidG9fc3RyaW5nJDYiLCJ0b19weCIsImdldF9mb250X3NpemVfaW5fcHgiLCJmb250X3NpemUiLCJmb250X3NpemUkMCIsIm1hcDMiLCJ0cmlwbGUiLCJqc19zY3JvbGwiLCJlbHQiLCJtYWtlJDUiLCJzY3JvbGxfdGFyZ2V0IiwiYXQkMSIsIm9uX2NsaWNrIiwiaGFuZGxlciQwIiwiY29udHJvbHMiLCJvbl93aGVlbCIsImVsdCQwIiwidiQ2IiwiY3NzX3NpemUiLCJ0b19oZWFkZXIiLCJjZWxscyIsInN0eWxlJDEiLCJ0ZW1wbGF0ZSIsInN0eWxlJDIiLCJoZWFkZXIiLCJyb3dfaGVpZ2h0IiwidW5pcSIsImFkZCQwIiwibmV3X2VsdCIsInRha2UkMCIsIm1ha2UkNiIsInVpX3RhYmxlIiwiZGF0YV9zb3VyY2UiLCJyb3dfc2l6ZSIsImhlaWdodF9uIiwiaGVpZ2h0JDAiLCJ0YWJsZSIsInJvd19pbmRleCIsInVubG9hZF9xdWV1ZSIsImZldGNoIiwiaW5kZXhlcyIsIm1heF9pdGVtcyIsInVubG9hZCIsInJvdyIsInJvd19kYXRhIiwibG9hZCIsImRhdGEkMCIsImNsZWFudXAiLCJxX2xlbmd0aCIsImZvciQwIiwidG9fbG9hZCIsInRhYmxlX2hlaWdodCIsImNvbXB1dGVfdmlzaWJsZV9yb3dzIiwibGFzdF9zY3JvbGxfeSIsImRpdiIsInNjcm9sbF95JDAiLCJkaXJlY3Rpb24iLCJ2aXNpYmxlX2hlaWdodCIsImhlYWRlcl9oZWlnaHQiLCJudW1iZXJfb2ZfdmlzaWJsZV9yb3dzIiwic2Nyb2xsX3kkMSIsImZpcnN0X3Zpc2libGVfcm93IiwibGFzdF92aXNpYmxlX3JvdyIsImJsZWVkaW5nIiwiYmxlZWRpbmckMCIsImxhc3QiLCJwcmVwYXJlIiwicmVuZGVyIiwicG9wdWxhdGVfb25fc2Nyb2xsIiwidG90YWxfaXRlbXMiLCJ2aXNpYmxlX3Jvd3MiLCJ0b3RhbF9pdGVtcyQwIiwic2Nyb2xsX2hhbmRsZXIiLCJsYXN0X3VwZGF0ZSIsInRpbWVvdXQiLCJyZXNldF90aWNrZXIiLCJkZWJvdW5jaW5nX2ludGVydmFsIiwicmVwb3B1bGF0ZV9kZXBzIiwibWFrZV9zcGFjZXIiLCJyb3dzIiwic3BhY2VyIiwidGFibGVfYm9keSIsImZpcnN0X3NwYWNlciIsImxhc3Rfc3BhY2VyIiwidGFibGVfaGVhZGVyIiwicmVjdCIsImdyaWRfc3R5bGUiLCJ0YWJsZSQwIiwic2Nyb2xsX3RhcmdldCQwIiwic2Nyb2xsX3RhcmdldCQxIiwibWFrZSQ3IiwiQyIsImxhbmciLCJrZXlzIiwiY2hlY2tfa2V5IiwibG9jYWxfc3RvcmFnZSIsInN0b3JlIiwiZmV0Y2gkMCIsImVuY29kZWRfdmFsdWUiLCJpbml0aWFsX3ZhbHVlIiwibWFrZV9wZXJzaXN0ZW50X3ZhciIsInZhciQxIiwibmV3X3ZhbHVlIiwidmFyX2YiLCJrZXkkMCIsIm1ha2VfaGFuZGxlciIsInZhbHVlX2NoYW5nZV9ldmVudCIsImRlZmF1bHRfdmFsdWUiLCJvbl9jaGFuZ2UiLCJtYWtlX2lucHV0IiwidmFsaWRhdGUiLCJwYXR0ZXJuJDAiLCJyZXF1aXJlZCIsInR5cGUkMSIsInZhbGlkYXRlJDAiLCJ0ZXh0X2lucHV0IiwicGxhY2Vob2xkZXIkMCIsInBhc3N3b3JkX2lucHV0Iiwic3VibWl0JDAiLCJmaWVsZCQwIiwic2V0dGVyIiwiY3JlYXRlJDgiLCJGb3JtIiwib25fc3VibWl0IiwiZWx0cyIsImVsdHMkMCIsIm9uX3N1Ym1pdCQwIiwibmFtZSQzIiwiYmFzZV9uYW1lIiwibWFrZSQ4IiwibmFtZSQ0IiwibWFrZSQ5Iiwib3B0aW9ucyIsIm9wdGlvbnMkMCIsInNlbGVjdGVkIiwibmFtZSQ1IiwibWFrZSQxMCIsIm1ha2VfY2hlY2siLCJsYWJlbCIsImNoZWNrZWQiLCJsYmwiLCJjaGVja2VkJDEiLCJtYWtlX2FsbCIsImFsbCIsInYkNyIsImFwcGx5X3N0YXRlIiwid2l0aF9zdGF0ZSIsIlMiLCJ2X3N0YXRlIiwiZ2V0X3N0YXRlIiwic2V0X3N0YXRlIiwiZnVuYyQwIiwiaCQxIiwidHdvX3N0YXRlIiwieW9qc29uX29mX3N0cmluZyIsInlvanNvbl9vZl9pbnQiLCJ5b2pzb25fb2Zfb3B0aW9uIiwieW9qc29uX29mX2EiLCJ5b2pzb25fb2ZfbGlzdCIsImxzdCIsInJlY29yZF9jaGVja19leHRyYV9maWVsZHMiLCJvZl95b2pzb25fZXJyb3IiLCJ3aGF0IiwieW9qc29uIiwic3RyaW5nX29mX3lvanNvbiIsImludF9vZl95b2pzb24iLCJvcHRpb25fb2ZfeW9qc29uIiwiYV9vZl95b2pzb24iLCJsaXN0X29mX3lvanNvbiIsInJldl9sc3QiLCJzdGFnX25vX2FyZ3MiLCJuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSIsImVtcHR5X2xpc3RfaW52YWxpZF9zdW0iLCJ1bmV4cGVjdGVkX3N0YWciLCJyZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIiwicmV2X2ZsZF9uYW1lcyIsImZsZF9uYW1lc19zdHIiLCJyZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyIsInJlY29yZF9leHRyYV9maWVsZHMiLCJyZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIiwiZmllbGRzJDAiLCJyZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIiwidW5kZWZpbmVkJDAiLCJyZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20iLCJzeW1ib2wkMTQiLCJqc3RyX29mX21ldGhvZCIsInVzZXJfb2ZfeW9qc29uIiwiZmllbGRfeW9qc29ucyIsIm5hbWVfZmllbGQiLCJzZXJ2ZXJfaWRfZmllbGQiLCJzZXJ2ZXJfbmFtZV9maWVsZCIsImlkX2ZpZWxkIiwiZHVwbGljYXRlcyIsImV4dHJhIiwiZmllbGRfeW9qc29uIiwiZmllbGRfbmFtZSIsImZ2YWx1ZSIsImZ2YWx1ZSQwIiwiZnZhbHVlJDEiLCJmdmFsdWUkMiIsInNlcnZlcl9uYW1lX3ZhbHVlIiwiaWRfdmFsdWUiLCJzZXJ2ZXJfaWRfdmFsdWUiLCJuYW1lX3ZhbHVlIiwieW9qc29uX29mX3VzZXIiLCJ2X2lkIiwidl9zZXJ2ZXJfbmFtZSIsInZfc2VydmVyX2lkIiwidl9uYW1lIiwiYm5kcyIsImFyZyQwIiwiYm5kcyQwIiwiYXJnJDEiLCJibmRzJDEiLCJhcmckMiIsImJuZHMkMiIsInBhcmFtc19vZl95b2pzb24iLCJ1c2VybmFtZV9maWVsZCIsInB3X2ZpZWxkIiwicHdfdmFsdWUiLCJ1c2VybmFtZV92YWx1ZSIsInlvanNvbl9vZl9wYXJhbXMiLCJ2X3B3Iiwidl91c2VybmFtZSIsInJlc3BvbnNlX29mX3lvanNvbiIsInVzZXJfZmllbGQiLCJhY2Nlc3NfdG9rZW5fZmllbGQiLCJhY2Nlc3NfdG9rZW5fdmFsdWUiLCJ1c2VyX3ZhbHVlIiwieW9qc29uX29mX3Jlc3BvbnNlIiwidl9hY2Nlc3NfdG9rZW4iLCJ2X3VzZXIiLCJlbmRwb2ludCIsImltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24iLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIiwiaW1hZ2VfYmx1cl9oYXNoZXNfb2ZfeW9qc29uIiwicHJpbWFyeV9maWVsZCIsInByaW1hcnlfdmFsdWUiLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoZXMiLCJ2X3ByaW1hcnkiLCJibmQiLCJ0eXBlX29mX3lvanNvbiIsInlvanNvbl9vZl90eXBlIiwidHlwZV9zdHJfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGVfc3RyIiwidHMiLCJ0X29mX3lvanNvbiIsInNvcnRfbmFtZV9maWVsZCIsInBhdGhfZmllbGQiLCJhbGJ1bV9pZF9maWVsZCIsInBhcmVudF9pZF9maWVsZCIsImltYWdlX2JsdXJfaGFzaGVzX2ZpZWxkIiwidHlwZV9maWVsZCIsImNvbGxlY3Rpb25fdHlwZV9maWVsZCIsImZ2YWx1ZSQzIiwiZnZhbHVlJDQiLCJmdmFsdWUkNSIsImZ2YWx1ZSQ2IiwiZnZhbHVlJDciLCJmdmFsdWUkOCIsInNvcnRfbmFtZV92YWx1ZSIsInBhdGhfdmFsdWUiLCJhbGJ1bV9pZF92YWx1ZSIsInBhcmVudF9pZF92YWx1ZSIsImNvbGxlY3Rpb25fdHlwZV92YWx1ZSIsInR5cGVfdmFsdWUiLCJpbWFnZV9ibHVyX2hhc2hlc192YWx1ZSIsInlvanNvbl9vZl90Iiwidl9jb2xsZWN0aW9uX3R5cGUiLCJ2X3R5cGUiLCJ2X2ltYWdlX2JsdXJfaGFzaGVzIiwidl9wYXJlbnRfaWQiLCJ2X2FsYnVtX2lkIiwidl9wYXRoIiwidl9zb3J0X25hbWUiLCJhcmckOCIsImJuZCQzIiwiYm5kcyQzIiwiYm5kcyQ0IiwiYXJnJDMiLCJibmQkMCIsImJuZHMkNSIsImFyZyQ0IiwiYm5kJDEiLCJibmRzJDYiLCJhcmckNSIsImJuZHMkNyIsImFyZyQ2IiwiYm5kJDIiLCJibmRzJDgiLCJhcmckNyIsImJuZHMkOSIsInNlc3Npb25fdXVpZCIsInNldF9zZXNzaW9uX3V1aWQiLCJhdXRob3JpemF0aW9uIiwidG9rZW4kMCIsInNlc3Npb25fdXVpZCQwIiwicmVxdWVzdCQxIiwiYmFzZV91cmwiLCJoZWFkZXJzIiwiUSIsInBhdGhfcGFyYW1zIiwidXJpIiwiYXV0aG9yaXphdGlvbiQwIiwiaGVhZGVycyQwIiwibWV0aG9kIiwiYm9keSIsInBhcmFtcyQwIiwidXJpX3dpdGhfcGFyYW1zIiwidXJsJDEiLCJpbml0JDAiLCJjb25uZWN0IiwiY3JlZGVudGlhbHMiLCJwYXNzd29yZCIsInVzZXJuYW1lIiwiYXV0aCIsImF1dGhfcmVzcG9uc2UiLCJ0YWdfb2YiLCJmdXR1cmVzIiwibGlzdGVuZXJzIiwid29ya2VyIiwicXVlcnkiLCJ1dWlkIiwiZnV0Iiwic2V0JDAiLCJxdWVyeSQwIiwib25fbWVzc2FnZSIsIm1lc3NhZ2UiLCJvZl9zdHJpbmckMiIsIml0ZW1fY291bnQiLCJyZXEiLCJzcmNfdmlld3MiLCJzdGgkMSIsImZpbHRlcnMiLCJ0X3RvX2p2IiwiZW5jb2RlciIsImp2X3RvX3QiLCJkZWNvZGVyIiwic29ydHNfb2ZfeW9qc29uIiwiZGF0ZV9hZGRlZF9maWVsZCIsInZpZXdzX2ZpZWxkIiwidmlld3NfdmFsdWUiLCJkYXRlX2FkZGVkX3ZhbHVlIiwieW9qc29uX29mX3NvcnRzIiwidl92aWV3cyIsInZfZGF0ZV9hZGRlZCIsInRfb2ZfeW9qc29uJDAiLCJzb3J0c19maWVsZCIsIml0ZW1fZmllbGQiLCJpdGVtX3ZhbHVlIiwic29ydHNfdmFsdWUiLCJ5b2pzb25fb2ZfdCQwIiwidl9pdGVtIiwidl9zb3J0cyIsImNvbXBhcmUkMiIsInRvX2p2JDAiLCJ2aWV3cyIsInNvcnRfbmFtZSIsInNvcnRfbmFtZSQwIiwidmlld3MkMCIsIm9mX2p2JDAiLCJ0b19qdiQxIiwib2ZfanYkMSIsInRvX2p2JDIiLCJvZl9qdiQyIiwidG9fanYkMyIsIm9mX2p2JDMiLCJwYXRoJDIiLCJ0b19qdiQ0Iiwib2ZfanYkNCIsImNvbGxlY3Rpb25fdHlwZSIsInBhdGgkMyIsInRvX2p2JDUiLCJvZl9qdiQ1IiwiZ2V0X2tleSIsImdldCQ2Iiwic3RyaW5nIiwic2V0JDEiLCJjb25uZXhpb25zIiwiY29ubmVjdCQwIiwicmVmcmVzaCIsImNvbm5leGlvbiIsInNlcnZlcl9pZCIsInJlcG9ydCIsInByZXZpb3VzX3N0YXR1cyIsInJlbWFpbmluZyIsInJlbWFpbmluZyQwIiwic2VydmVyc193aXRoX3N0YXR1cyIsInNlcnZlciIsIm5ld19jb25uZXhpb24iLCJzZXJ2ZXJzIiwidXJsX2ZpZWxkIiwicGFzc3dvcmRfZmllbGQiLCJzdWJtaXQkMSIsInVpX2Zvcm0iLCJ1cmwiLCJ1aV9zdGF0dXMiLCJzeW5jX3Byb2dyZXNzIiwiZnV0X3RvX2x3ZCIsInNlcnZlcnNfbGlicmFyaWVzIiwidWkiLCJzdGF0dXNlcyIsInVpX2Zvcm0kMCIsIm5vd19wbGF5aW5nIiwiYXVkaW9fdXJsIiwiaXRlbV9pZCIsInNldF9wbGF5X3VybCIsInBsYXlsaXN0IiwiY3VycmVudF9pbmRleCIsInBsYXlsaXN0JDAiLCJpdGVtIiwiYWxidW1faWQiLCJzZXNzaW9uIiwiaW1hZ2VfaWQiLCJpbWdfc3JjIiwicmVzZXRfcGxheWxpc3QiLCJtYWtlIiwiYXVkaW9fZWx0Iiwic2V0X3NyYyIsIm5leHRfaW5kZXgiLCJzZXRfcG9zaXRpb25fc3RhdGUkMCIsIm9uX2Vycm9yIiwibmV4dCQwIiwiYnRuX25leHQiLCJzdHlsZSQwIiwibnAiLCJ0cmFja19jb3ZlciIsInR4dCQwIiwidGl0bGUiLCJ0cmFja19kZXRhaWxzIiwibm93X3BsYXlpbmckMCIsImF0JDIiLCJtYWtlJDExIiwib25fY2xpY2skMCIsImNvbHVtbnMiLCJtYWtlJDEyIiwiaW1nX3VybCIsInN0YXJ0X2luZGV4IiwiaW1hZ2VfYmx1cl9oYXNoZXMiLCJwbGF5X2Zyb20iLCJwbGF5X29uX2NsaWNrIiwiaW1nX3VybCQwIiwicGxhY2Vob2xkZXIiLCJyZW5kZXIkMCIsIm1ha2Vfbm93X3BsYXlpbmciLCJmZXRjaCQxIiwicmFuZ2VkX3ZpZXciLCJwbCIsInBsYXllciIsInBsYXllcl91aSIsImZfc2VhcmNoIiwiZl9zb3J0IiwiY2hvaWNlcyIsImZfbGlicmFyaWVzIiwiZl92YWx1ZSIsIm1haW5fdmlldyIsIm9yZGVyIiwibWFpbl9saXN0IiwiYXBwIiwiaXNfc3RvcmFnZV9wZXJzaXN0ZW50Iiwib25fbG9hZCIsImFwcCQwIl0sInNvdXJjZXMiOlsiL2J1aWx0aW4vK2FycmF5LmpzIiwiL2J1aWx0aW4vK21sQnl0ZXMuanMiLCIvYnVpbHRpbi8rc3lzLmpzIiwiL2J1aWx0aW4vK2JhY2t0cmFjZS5qcyIsIi9idWlsdGluLytzdGRsaWIuanMiLCIvYnVpbHRpbi8ranNsaWIuanMiLCIvYnVpbHRpbi8rZmFpbC5qcyIsIi9idWlsdGluLytpZWVlXzc1NC5qcyIsIi9idWlsdGluLytvYmouanMiLCIvYnVpbHRpbi8raW50NjQuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8raW50cy5qcyIsIi9idWlsdGluLytoYXNoLmpzIiwiL2J1aWx0aW4vK21hcnNoYWwuanMiLCIvYnVpbHRpbi8rY29tcGFyZS5qcyIsIi9idWlsdGluLytmb3JtYXQuanMiLCIvYnVpbHRpbi8rZnNfbm9kZS5qcyIsIi9idWlsdGluLytmcy5qcyIsIi9idWlsdGluLyt1bml4LmpzIiwiL2J1aWx0aW4vK2ZzX2Zha2UuanMiLCIvYnVpbHRpbi8rbGV4aW5nLmpzIiwiL2J1aWx0aW4vK21kNS5qcyIsIi9idWlsdGluLytpby5qcyIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2xleGluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3ByaW50ZXhjLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2NvbXBsaWFudF9sZXh4ZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RhdGFfc291cmNlL2plbGx5ZmluX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvc3RvcmVzLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9zeW5jLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9sYW5nLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi93b3JrZXJfY2xpZW50Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9zZXJ2ZXJzLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9wbGF5ZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxBdG9taWMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGRsaWIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDSW50Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcmFuZG9tLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbGlzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL29iai5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbExhenkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9vcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9yZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDQ2hhci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NoYXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9pbnQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9ieXRlcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2FycmF5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RhY2subWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9xdWV1ZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0cmVhbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2J1ZmZlci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3ByaW50Zi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIveW9qc29uX2NvbnZfZXJyb3IubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9mdW4ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9kaWdlc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9oYXNodGJsLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FsbGJhY2subWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc19vZl9vY2FtbC1jb21waWxlci9ydW50aW1lL2pzb29fcnVudGltZS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9mb3Jtcy9maWVsZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyZXIvZG9tX3JlY3RfcmVhZF9vbmx5Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJlci9yZXNpemVfb2JzZXJ2ZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2JycmVyL21lZGlhX3Nlc3Npb24ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2JycmVyL2JycmVyLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2x3ZC9sd2QubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZF91dGlscy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvbHdkL2xpYi9sd2QvbHdkX3RhYmxlLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2x3ZC9sd2Rfc2VxLnBwLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2Jyci1sd2QvZWx3ZC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NBcnJheS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NGbG9hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NIYXNodGJsLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0xpc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDT3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NSZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9sZXh4ZXJfdXRpbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvZXJyb3JfaW5mby5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9qc29uX2Zsb2F0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3BhcnNlcl90b29scy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wYXJzZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvdXRpbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcHJldHR5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3Byb2Nlc3MubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvdG9rZW5fdXRpbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcmVhZGVyX3N0cmluZ19maWxlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3dyaXRlcl9maWxlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3dyaXRlcl9zdHJpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQveW9qc29uLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zdGQvc3RkLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2F0dHJzLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL3V0aWxzLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2NvbnRyb2xsZWRfc2Nyb2xsLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL3RhYmxlL3NjaGVtYS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS90YWJsZS92aXJ0dWFsX3RhYmxlLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL3RyYW5zbGF0ZWQubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvcGVyc2lzdGVudC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9mb3Jtcy9mb3JtLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2ZpZWxkX3RleHRpbnB1dC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9mb3Jtcy9maWVsZF9zZWxlY3QubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvZm9ybXMvZmllbGRfY2hlY2tib3hlcy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9idXR0b24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3lvanNvbl9jb252Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi9wcHhfeW9qc29uX2NvbnZfbGliLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYXRhX3NvdXJjZS9qZWxseWZpbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvd29ya2VyX2FwaS93b3JrZXJfYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi92aWV3Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9kYl93b3JrZXJfYXBpLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy1kYXRhL0NDTXVsdGlNYXAubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2ltcG9ydC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vdWkubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3VpX3BsYXlsaXN0Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9tYWluLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RkX2V4aXQubWwiXSwibWFwcGluZ3MiOiI7O0EsQzs7Rzs7O1E7Uzs7O0c7STtJO0k7RztFOzs7O0dBcURBLFNBQVNBLGdCQUFnQkMsSUFBSUMsSUFBSUMsSUFBSUMs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QUM7SUFLQUM7SUFtSEFDO0lDeEpBQztJQUdBQztJQWdDTUM7SUFRQUM7SUFvQ0ZDO0lDWEZDO0lDekdFQzs7OztJQ0pBQztJQ3VEQUM7SUNRY0M7SUFDQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QVNqb0MsS0FBTSxPQVRmZ29DLFVBcDFDQWg4QixJQTYxQ1NoTSxLQUFzQjtZQUkvQmtvQztJQXJ0QkE5QyxlQTBWQTBCO0lBNFhGLE9BdHRCRTFCLGVBMlZBMkI7R0E0WDZCO0d6QmgxQnpCajNCLFF5QjgwQkpvNEI7WUNoMkNBQyxtQkFBbUJ4ckMsTUFDakJwRztJQUFKLElBQ0l1bEMsT0FBVSxhQURWdmxDLGVBQUFBLE1BQUFBO0lBRUosMEJBSHFCb0csTUFFakJtL0I7SUFDSjtHQUE4QjtHQ3dJOUI7R0QzSUVxTTtHQytJcUIsZSxVO0c7d0IscUI7O0k7SSxPO0c7Rzs7STtJLE87RzswQixpQzs4QjtHO0csSSxlO3VCLDRCOzRCLGlDOztJO0k7Rzt5QixzQjs7SSw0QjtHOztJLFk7O0ksTzs7Rzs7SSxZOztJO0k7O0c7d0IsTSxPO3lCLGMsTzs7SSxZOztJOzt3QixZOzJCLFUsTzs7SSxZOztJOzs4Qjt3Qiw4Qjt3QixxQjs7STtJLDZCLE8sdUI7Rzs7Ozs7b0I7O00sVTs7Ozs7O0k7Rzs7STtJLFc7O0k7STtHOztJO0ksTyx5QixVO0c7Rzs7O0ssTzs2QixPLE8sZSxPLE87STtJLG1CO0c7dUIsTyxtQjs7SSxPO0k7Rzt5QixPLE8sc0M7O0ksTzthO2E7Rzs7SSxPO0c7WUNuR25CQyxjO3VCO21CLGdCO3lCLGtCOztJO0ssTTtJO0ksdUIsK0M7STtJLHFDLDhCO0k7b0IsdUQ7STtHOzBCLGdDO3dCLHVCOztJOzs7MkIsaUIsbUI7Rzs7SSw2QixnQixtQjtHO2tCLHdCOztxQixtQixvQjtJLG9CLG1CLHVCO0k7Rzs7SSxxQztHO3lCLG9COztJLHNCOztjLGU7O2MsTzthO0c7O0ksNEIsT3JCM0NGenZCO0c7RztzQixxQjswQyw4QjtHOytCLG9CLFM7O0k7SSxVOztLO0s7STtJO0k7RzsrQixPLHdCO0c7STtJO0k7STtJO0k7STtJO0k7RztHO0c7RztHO3NCLE8sa0I7O0ksSSxROzs7OztLOztJO0c7RztHO0c7RztHOztJLFc7O0k7RztHO3VCLE8sYTtzQixrQjs7STtJO0k7Rzt5QixPLGE7O0ksSTs7Ozs7Szs7STtHO3NCLGlCO0c7d0IsdUI7c0IscUI7d0IsaUM7MEI7RztJO0k7STtJO0k7STtJO0k7STtJO0k7STtJO0k7dUIsdUI7cUIscUI7b0Isb0I7RyxJLCtCO3FCLG1CO3VCLHFCO3NCLG9CO3VCLHVCO3VCLHVCO0c7d0IsMEI7RywrQjt1QixrQixTOzs7Ozs7Tyw2QkptQ0FXO087O007OztLOzs7TTs7Ozs7NEI7OztVOzs7O0k7STtJLFE7STtJLHNCO0k7Rzs7STtJLE87Rzs7STtJO0c7O0ksa0I7MEIsd0I7STtJO0c7MkIsZ0M7O0ksMEM7Rzt1QixvQixPLHVCOztJLFksK0I7Rzs7STtJLEksUSx1QjtJO0c7d0Isc0I7O0k7STtJO0k7RztHO0k7STtJO0k7STtJO0k7STtJO0k7STtvQyw0QjtHLG1DO0csaUM7RyxnQztHLGtDO29CLDhCOztJO0k7Ozs7O0c7O0ksZ0M7RztrQyxrQyxPO0c7O0k7OztvQjs7TTtNOzs7OztJLE87RztxQixnRDt5QixnRDtzQixnRDt5QixTO3NCLE8sUTtHO0c7STtJO0k7Rzs7SSxPLGtCO0c7NEIsMEIsTzs7SSw2QjtJO0c7RztHOzRCOztJLG1DLGU7RztHOztJO0ksUztJOztLO0s7O0ksc0I7STtHOzs7Ozs7Ozs7Ozs7Ozs7STtJLG9EO0k7STtJLHFCR3BDQWQsbUI7STtJO0k7STtJO0k7STtJLG9EO0k7RztHOztJO0k7RztHO0c7O3dCO0ksc0Isa0M7RztHO0c7RztHO0c7b0IsaUI7RztxQix5Qjs7d0I7SSxzQiwrQjtHOztJLEksaUI7OzswQjs7O0c7RztHOztJO0k7Rzs7STtJO0k7RztHOztJO0k7STtHO0c7RztHO1l1QmhCQXFGLE9BQU81b0IsR0FBSSxPQUFKQSxZQUFrQzt1QjtZQ2lCdkNvekMsYUFBYXB6QyxHQUFJLFlBQUpBLGtCQUFzRDtZQUtuRXF6QyxTQUFPcnpDLEdBQUksT0FBSkEsY0FBaUM7WUFLMUNzekM7SUFBZ0I7O09BQ0Q7O09BQ0Q7ZUFDYzs7R0FBMEI7WUFJdERDLFFBQVF2ekMsR0FBR3d6QyxLQUVQcGpDO0lBRE4sR0FEYW9q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T2s1QztjQUFBQTs7VTs7VTs7VTs7VTs7VTs7VTs7VTs7VSxPOztvQnlEcFE1QnhCOzhEekRvUXFCMTNDOztVLE87O29CeURwUXJCMDNDOzhEekRvUXFCMTNDOztVLE87O29CeURwUXJCMDNDOzhEekRvUXFCMTNDOztVLE87O29CeURwUXJCMDNDOzhEekRvUXFCMTNDOztVOztVOztVLE87O1UsTzs7VSxPOztVLE87O1UsVXlEeFByQjgzQyxrQnpEd1BxQjkzQzs7OztjLE87O2MsTzs7VTs7VSxlLDRCQUFBQTtVLE87O1U7O1VBNEh2QixtQkE1SHVCQSxRQUFBQSxtQkFBQUE7VSxXeUQ3S3JCMjRDOztVOztVO1csTyx1QnpEMktJRyxZQUVpQjk0Qzs7VSxPQUZqQjg0QyxrQkFFaUI5NEM7O1V5RHBQckIrM0MsV3pEb1BxQi8zQztVO1csTyx1QkFGakI4NEMsWUFFaUI5NEM7O1UsT0FGakI4NEMsa0JBRWlCOTRDOztVLFk7aUQ7VUEwS3JCbTVDLGFBMUtxQm41QztVO1csTyx1QkFGakI4NEMsWUFFaUI5NEM7O1UsT0FGakI4NEMsa0JBRWlCOTRDOztVLGM7dUQ7VTtXLE8sdUJBRmpCODRDLFlBRWlCOTRDOztVLE9BRmpCODRDLGtCQUVpQjk0Qzs7VSxPeURwUXJCMDNDOzREekRvUXFCMTNDOztNQXVLQSxXQXZLQUEsV0FBQUE7TUFBT2k1QyxvQkFBQUM7O0lBd0ttQjthQUUvQ0Usd0JBQWFwNUM7S0FDZDtLQUFBO01BQUEsT0FBQTtlQUNDcTVDLGdDQUZhcjVDOztLQUNkLE9BQ0NxNUMsc0NBRmFyNUM7SUFDd0I7YUFEckNtNUMsYUFBYW41QztLLHVCQUFibzVDLGtCQUFhcDVDOzthQUVicTVDLG9DQUE2QnI1QyxRQUFPZzVDO0tBQ3RDLElBRHNDQyxvQkFBQUQ7S0FDdEM7TUFBTTtPQURnQ0UsMkJBcFpwQ2x5QyxrQkFvWm9DaXlDLG1CQUFQajVDO2NBQU9rNUM7Y0FBQUE7O1U7O1V5RGhhcENuQixXekRnYTZCLzNDO1U7VyxPLHVCQUY3Qm81QyxvQkFFNkJwNUM7O1UsT0FGN0JvNUMsMEJBRTZCcDVD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QUVBQztPQVRBUjtPQURBRDtPQUVBRTtPQUNBQztPQUNBQztPQXFCRU07T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7OztNQXBERjFCO01BQ0FDO01BQ0FDO01BQ0FDO01BR0FFO01BREFEO01BR0FFO01BRUFDO01BbUJBVTtNQVRBUjtNQURBRDtNQUVBRTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQzs7T0FFQUM7T0FUQVI7T0FEQUQ7T0FFQUU7T0FDQUM7T0FDQUM7T0FxQkVNO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDOzJCLE96RGhZSmh3QixRO0dBVEFGOztJO0ssSztLLEs7SyxLO0ssSztLLEs7SyxJOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCO0k7Rzs7SSxzQjtJLHVCLG9DO0c7O0k7STtJLHVCLDRDO0ksSSxxQixZOzs7TTs7O0ssZ0I7Szs7TTs7O0ssc0I7STs7O0ssVztLOzs7Ozs7O0ssVztLOzs7Ozs7O0ssVztLOzs7Ozs7O0ssVztLOzs7Ozs7b0I7SyxXO0s7Ozs7Rzs7WTBEdERBbXdCLFVBQVFoNUQsR0FBSSxjQUFKQSxHQUFnQztZQUd4Q2k1RCxVQUFRQztJQUNKLG1CQURJQTsyQkFFTDU2RCxjQUFLLFdBQUxBO1FBQ0dvUjtJQUNKLFlBRElBO0lBQ0o7R0FDdUM7WUFFekN5cEQsTUFBTUMsSUFBSyxPQVBYSCxVQU9NRyxJQUE2QjtHQUd0QixJQUFmQztZQUNBQyxtQkFBaUIsY0FEakJELGlCQUM2QztZQUc3Q0UsSUFBSTM2RCxHQUFFOEIsR0FDQyxXQURIOUIsR0FBRThCLElBRVIsT0FGUUEsRUFFUDs7Ozs7O1lDTEs4NEQsTUFBTXg1RDtJQUNSO3NCQUE2QkMsR0FB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REY1cEQsVUFBQXFwRDs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7OzJCOEIvREVPLGE5QitERjVwRCxVQUFBcXBEOzsyQjhCL0RFTyxhOUIrREY1cEQsVUFBQXFwRDs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7OzJCOEIvREVPLGE5QitERjVwRCxVQUFBcXBEOzsyQjhCL0RFTyxhOUIrREY1cEQsVUFBQXFwRDs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7Ozs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7OzJCOEIvREVPLGE5QitERjVwRCxVQUFBcXBEOzsyQjhCL0RFTyxhOUIrREY1cEQsVUFBQXFwRDs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7OzJCOEIvREVPLGE5QitERjVwRCxVQUFBcXBEOzsyQjhCL0RFTyxhOUIrREY1cEQsVUFBQXFwRDs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7OzJCOEIvREVPLGE5QitERjVwRCxVQUFBcXBEOzsyQjhCL0RFTyxhOUIrREY1cEQsVUFBQXFwRDs7Ozs7OzsyQjhCL0RFTyxhOUIrREY1cEQsVUFBQXFwRDs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7OzJCOEIvREVPLGE5QitERjVwRCxVQUFBcXBEOzsyQjhCL0RFTyxhOUIrREY1cEQsVUFBQXFwRDs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7OzJCOEIvREVPLGE5QitERjVwRCxVQUFBcXBEOzsyQjhCL0RFTyxhOUIrREY1cEQsVUFBQXFwRDs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7OzJCOEIvREVPLGE5QitERjVwRCxVQUFBcXBEOzs7OzJCOEIvREVPLGE5QitERjVwRCxVQUFBcXBEOzsyQjhCL0RFTyxhOUIrREY1cEQsVUFBQXFwRDs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7OzJCOEIvREVPLGE5QitERjVwRCxVQUFBcXBEOzsyQjhCL0RFTyxhOUIrREY1cEQsVUFBQXFwRDs7MkI4Qi9ERU8sYTlCK0RGNXBELFVBQUFxcEQ7OzJCOEIvREVP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b0I7S0FEaEM7SUFDZ0M7SUFFRSxlbERtaUI5Q2o4Qixha0R4aUJJaThCO0lBS0o7SUFBQSxPbER5aEJBcjhCLGtCa0Q5aEJJcThCLE9BQ0E1OEI7R0FLbUM7R0FFekMsOEJBVkkyOEI7R25GMGFGejBEOztFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YiAoYSwgaSwgbGVuKSB7XG4gIHZhciBhMiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGEyWzBdPTA7XG4gIGZvcih2YXIgaTIgPSAxLCBpMT0gaSsxOyBpMiA8PSBsZW47IGkyKyssaTErKyApe1xuICAgIGEyW2kyXT1hW2kxXTtcbiAgfVxuICByZXR1cm4gYTI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYXBwZW5kIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICB2YXIgbDEgPSBhMS5sZW5ndGgsIGwyID0gYTIubGVuZ3RoO1xuICB2YXIgbCA9IGwxK2wyLTFcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsaiA9IDE7XG4gIGZvcig7aTxsMTtpKyspIGFbaV09YTFbaV07XG4gIGZvcig7aTxsO2krKyxqKyspIGFbaV09YTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NvbmNhdCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2NvbmNhdChsKSB7XG4gIHZhciBhID0gWzBdO1xuICB3aGlsZSAobCAhPT0gMCkge1xuICAgIHZhciBiID0gbFsxXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGIubGVuZ3RoOyBpKyspIGEucHVzaChiW2ldKTtcbiAgICBsID0gbFsyXTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+PSAxOyBqLS0pIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vLy8vLy8vLy8vLy8gUGVydmFzaXZlXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3NldCAobXV0YWJsZSwgY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2FycmF5X3NldCAoYXJyYXksIGluZGV4LCBuZXd2YWwpIHtcbiAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS5sZW5ndGggLSAxKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBhcnJheVtpbmRleCsxXT1uZXd2YWw7IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2dldCBtdXRhYmxlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfZ2V0IChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS5sZW5ndGggLSAxKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXlbaW5kZXgrMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfZmlsbFxuZnVuY3Rpb24gY2FtbF9hcnJheV9maWxsKGFycmF5LCBvZnMsIGxlbiwgdil7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgYXJyYXlbb2ZzK2krMV0gPSB2O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoZWNrX2JvdW5kIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfY2hlY2tfYm91bmQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoaW5kZXggPj4+IDAgPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV92ZWN0IChsZW4sIGluaXQpIHtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSBpbml0O1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX2Zsb2F0X3ZlY3QgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX2Zsb2F0X3ZlY3QobGVuKXtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9jcmVhdGUobGVuKXtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiXG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLyBBbiBPQ2FtbCBzdHJpbmcgaXMgYW4gb2JqZWN0IHdpdGggdGhyZWUgZmllbGRzOlxuLy8gLSB0YWcgJ3QnXG4vLyAtIGxlbmd0aCAnbCdcbi8vIC0gY29udGVudHMgJ2MnXG4vL1xuLy8gVGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcgY2FuIGJlIGVpdGhlciBhIEphdmFTY3JpcHQgYXJyYXkgb3Jcbi8vIGEgSmF2YVNjcmlwdCBzdHJpbmcuIFRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmcgY2FuIGJlIGxlc3MgdGhhbiB0aGVcbi8vIGxlbmd0aCBvZiB0aGUgT0NhbWwgc3RyaW5nLiBJbiB0aGlzIGNhc2UsIHJlbWFpbmluZyBieXRlcyBhcmVcbi8vIGFzc3VtZWQgdG8gYmUgemVyb2VzLiBBcnJheXMgYXJlIG11dGFibGUgYnV0IGNvbnN1bWVzIG1vcmUgbWVtb3J5XG4vLyB0aGFuIHN0cmluZ3MuIEEgY29tbW9uIHBhdHRlcm4gaXMgdG8gc3RhcnQgZnJvbSBhbiBlbXB0eSBzdHJpbmcgYW5kXG4vLyBwcm9ncmVzc2l2ZWx5IGZpbGwgaXQgZnJvbSB0aGUgc3RhcnQuIFBhcnRpYWwgc3RyaW5ncyBtYWtlcyBpdFxuLy8gcG9zc2libGUgdG8gaW1wbGVtZW50IHRoaXMgZWZmaWNpZW50bHkuXG4vL1xuLy8gV2hlbiBjb252ZXJ0aW5nIHRvIGFuZCBmcm9tIFVURi0xNiwgd2Uga2VlcCB0cmFjayBvZiB3aGV0aGVyIHRoZVxuLy8gc3RyaW5nIGlzIGNvbXBvc2VkIG9ubHkgb2YgQVNDSUkgY2hhcmFjdGVycyAoaW4gd2hpY2ggY2FzZSwgbm9cbi8vIGNvbnZlcnNpb24gbmVlZHMgdG8gYmUgcGVyZm9ybWVkKSBvciBub3QuXG4vL1xuLy8gVGhlIHN0cmluZyB0YWcgY2FuIHRodXMgdGFrZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcbi8vICAgZnVsbCBzdHJpbmcgICAgIEJZVEUgfCBVTktOT1dOOiAgICAgIDBcbi8vICAgICAgICAgICAgICAgICAgIEJZVEUgfCBBU0NJSTogICAgICAgIDlcbi8vICAgICAgICAgICAgICAgICAgIEJZVEUgfCBOT1RfQVNDSUk6ICAgIDhcbi8vICAgc3RyaW5nIHByZWZpeCAgIFBBUlRJQUw6ICAgICAgICAgICAgIDJcbi8vICAgYXJyYXkgICAgICAgICAgIEFSUkFZOiAgICAgICAgICAgICAgIDRcbi8vXG4vLyBPbmUgY2FuIHVzZSBiaXQgbWFza2luZyB0byBkaXNjcmltaW5hdGUgdGhlc2UgZGlmZmVyZW50IGNhc2VzOlxuLy8gICBrbm93bl9lbmNvZGluZyh4KSA9IHgmOFxuLy8gICBpc19hc2NpaSh4KSA9ICAgICAgIHgmMVxuLy8gICBraW5kKHgpID0gICAgICAgICAgIHgmNlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfc3RyX3JlcGVhdChuLCBzKSB7XG4gIGlmKG4gPT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChzLnJlcGVhdCkge3JldHVybiBzLnJlcGVhdChuKTt9IC8vIEVDTUFzY3JpcHQgNiBhbmQgRmlyZWZveCAyNCtcbiAgdmFyIHIgPSBcIlwiLCBsID0gMDtcbiAgZm9yKDs7KSB7XG4gICAgaWYgKG4gJiAxKSByICs9IHM7XG4gICAgbiA+Pj0gMTtcbiAgICBpZiAobiA9PSAwKSByZXR1cm4gcjtcbiAgICBzICs9IHM7XG4gICAgbCsrO1xuICAgIGlmIChsID09IDkpIHtcbiAgICAgIHMuc2xpY2UoMCwxKTsgLy8gZmxhdHRlbiB0aGUgc3RyaW5nXG4gICAgICAvLyB0aGVuLCB0aGUgZmxhdHRlbmluZyBvZiB0aGUgd2hvbGUgc3RyaW5nIHdpbGwgYmUgZmFzdGVyLFxuICAgICAgLy8gYXMgaXQgd2lsbCBiZSBjb21wb3NlZCBvZiBsYXJnZXIgcGllY2VzXG4gICAgfVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuLy9XZWFrZGVmXG4vLyBQcmUgRUNNQVNjcmlwdCA1LCBbYXBwbHldIHdvdWxkIG5vdCBzdXBwb3J0IGFycmF5LWxpa2Ugb2JqZWN0LlxuLy8gSW4gc3VjaCBzZXR1cCwgVHlwZWRfYXJyYXkgd291bGQgYmUgaW1wbGVtZW50ZWQgYXMgcG9seWZpbGwsIGFuZCBbZi5hcHBseV0gd291bGRcbi8vIGZhaWwgaGVyZS4gTWFyayB0aGUgcHJpbWl0aXZlIGFzIFdlYWtkZWYsIHNvIHRoYXQgcGVvcGxlIGNhbiBvdmVycmlkZSBpdCBlYXNpbHkuXG5mdW5jdGlvbiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKGEsIGksIGxlbikge1xuICB2YXIgZiA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gIGlmIChpID09IDAgJiYgbGVuIDw9IDQwOTYgJiYgbGVuID09IGEubGVuZ3RoKSByZXR1cm4gZi5hcHBseSAobnVsbCwgYSk7XG4gIHZhciBzID0gXCJcIjtcbiAgZm9yICg7IDAgPCBsZW47IGkgKz0gMTAyNCxsZW4tPTEwMjQpXG4gICAgcyArPSBmLmFwcGx5IChudWxsLCBhLnNsaWNlKGksaSArIE1hdGgubWluKGxlbiwgMTAyNCkpKTtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmOF9vZl91dGYxNlxuZnVuY3Rpb24gY2FtbF91dGY4X29mX3V0ZjE2KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBiLCBjLCBkLCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYyA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgKGogPCBsKSAmJiAoYyA9IHMuY2hhckNvZGVBdChqKSkgPCAweDgwOyBqKyspO1xuICAgICAgaWYgKGogLSBpID4gNTEyKSB7IHQuc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiOyBiICs9IHMuc2xpY2UoaSwgaikgfVxuICAgICAgZWxzZSB0ICs9IHMuc2xpY2UoaSwgaik7XG4gICAgICBpZiAoaiA9PSBsKSBicmVhaztcbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhjMCB8IChjID4+IDYpKTtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfSBlbHNlIGlmIChjIDwgMHhkODAwIHx8IGMgPj0gMHhkZmZmKSB7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhlMCB8IChjID4+IDEyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA+PSAweGRiZmYgfHwgaSArIDEgPT0gbCB8fFxuICAgICAgICAgICAgICAgKGQgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBkID4gMHhkZmZmKSB7XG4gICAgICAvLyBVbm1hdGNoZWQgc3Vycm9nYXRlIHBhaXIsIHJlcGxhY2VkIGJ5IFxcdWZmZmQgKHJlcGxhY2VtZW50IGNoYXJhY3RlcilcbiAgICAgIHQgKz0gXCJcXHhlZlxceGJmXFx4YmRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgYyA9IChjIDw8IDEwKSArIGQgLSAweDM1ZmRjMDA7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhmMCB8IChjID4+IDE4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDEyKSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfVxuICAgIGlmICh0Lmxlbmd0aCA+IDEwMjQpIHt0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjt9XG4gIH1cbiAgcmV0dXJuIGIrdDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91dGYxNl9vZl91dGY4XG5mdW5jdGlvbiBjYW1sX3V0ZjE2X29mX3V0Zjgocykge1xuICBmb3IgKHZhciBiID0gXCJcIiwgdCA9IFwiXCIsIGMsIGMxLCBjMiwgdiwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMxID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjMSA8IDB4ODApIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgKGogPCBsKSAmJiAoYzEgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgdiA9IDE7XG4gICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkpIHtcbiAgICAgIGMgPSBjMiArIChjMSA8PCA2KTtcbiAgICAgIGlmIChjMSA8IDB4ZTApIHtcbiAgICAgICAgdiA9IGMgLSAweDMwODA7XG4gICAgICAgIGlmICh2IDwgMHg4MCkgdiA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2ID0gMjtcbiAgICAgICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkpIHtcbiAgICAgICAgICBjID0gYzIgKyAoYyA8PCA2KTtcbiAgICAgICAgICBpZiAoYzEgPCAweGYwKSB7XG4gICAgICAgICAgICB2ID0gYyAtIDB4ZTIwODA7XG4gICAgICAgICAgICBpZiAoKHYgPCAweDgwMCkgfHwgKCh2ID49IDB4ZDdmZikgJiYgKHYgPCAweGUwMDApKSkgdiA9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHYgPSAzO1xuICAgICAgICAgICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkgJiZcbiAgICAgICAgICAgICAgICAoYzEgPCAweGY1KSkge1xuICAgICAgICAgICAgICB2ID0gYzIgLSAweDNjODIwODAgKyAoYyA8PCA2KTtcbiAgICAgICAgICAgICAgaWYgKHYgPCAweDEwMDAwIHx8IHYgPiAweDEwZmZmZikgdiA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2IDwgNCkgeyAvLyBJbnZhbGlkIHNlcXVlbmNlXG4gICAgICBpIC09IHY7XG4gICAgICB0ICs9IFwiXFx1ZmZmZFwiO1xuICAgIH0gZWxzZSBpZiAodiA+IDB4ZmZmZilcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGQ3YzAgKyAodiA+PiAxMCksIDB4ZGMwMCArICh2ICYgMHgzRkYpKVxuICAgIGVsc2VcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2KTtcbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29faXNfYXNjaWlcbmZ1bmN0aW9uIGpzb29faXNfYXNjaWkgKHMpIHtcbiAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBnZXRzIGJldHRlciBhdCBhcm91bmQgdGhpcyBwb2ludCBmb3IgYWxsIGJyb3dzZXJzXG4gIGlmIChzLmxlbmd0aCA8IDI0KSB7XG4gICAgLy8gU3BpZGVybW9ua2V5IGdldHMgbXVjaCBzbG93ZXIgd2hlbiBzLmxlbmd0aCA+PSAyNCAob24gNjQgYml0IGFyY2hzKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgaWYgKHMuY2hhckNvZGVBdChpKSA+IDEyNykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2VcbiAgICByZXR1cm4gIS9bXlxceDAwLVxceDdmXS8udGVzdChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSkge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGlmIChpID49IHMuYy5sZW5ndGgpIHJldHVybiAwO1xuICBjYXNlIDA6IC8qIEJZVEVTICovXG4gICAgcmV0dXJuIHMuYy5jaGFyQ29kZUF0KGkpO1xuICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgcmV0dXJuIHMuY1tpXVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgLy8gVGhlIE9DYW1sIGNvbXBpbGVyIHVzZXMgQ2hhci51bnNhZmVfY2hyIG9uIGludGVnZXJzIGxhcmdlciB0aGFuIDI1NSFcbiAgYyAmPSAweGZmO1xuICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIHtcbiAgICBpZiAoaSA9PSBzLmMubGVuZ3RoKSB7XG4gICAgICBzLmMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoYyk7XG4gICAgICBpZiAoaSArIDEgPT0gcy5sKSBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LT1dOKi9cbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkgKHMpO1xuICB9XG4gIHMuY1tpXSA9IGM7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvciwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQgKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQxNihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDMyKHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSAzKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDEpLFxuICAgICAgYjMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCB8IGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDMyKHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpLFxuICAgICAgYjMgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAyKSxcbiAgICAgIGI0ID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQ2NChzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gNykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspe1xuICAgIGFbNyAtIGpdID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspe1xuICAgIGFbNyAtIGpdID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldCAocywgaSwgYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMSkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjIgPSAweEZGICYgaTE2ID4+IDgsXG4gICAgICBiMSA9IDB4RkYgJiBpMTY7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMSwgYjIpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQxNihzLGksaTE2KXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDE2XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQxNlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDE2KHMsaSxpMTYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MzIocyxpLGkzMil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGI0ID0gMHhGRiAmIGkzMiA+PiAyNCxcbiAgICAgIGIzID0gMHhGRiAmIGkzMiA+PiAxNixcbiAgICAgIGIyID0gMHhGRiAmIGkzMiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTMyO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMiwgYjMpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAzLCBiNCk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDMyKHMsaSxpMzIpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0MzJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0MzIocyxpLGkzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoaTY0KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKykge1xuICAgIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDcgLSBqLCBhW2pdKTtcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQ2NChzLGksaTY0KXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDY0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQ2NFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDY0KHMsaSxpNjQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldCAocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSwgYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmOF9vZl91dGYxNiwgTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyAocykge1xuICB2YXIgdGFnID0gOSAvKiBCWVRFUyB8IEFTQ0lJICovO1xuICBpZiAoIWpzb29faXNfYXNjaWkocykpXG4gICAgdGFnID0gOCAvKiBCWVRFUyB8IE5PVF9BU0NJSSAqLywgcyA9IGNhbWxfdXRmOF9vZl91dGYxNihzKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRhZywgcywgcy5sZW5ndGgpO1xufVxuXG5cbi8vUHJvdmlkZXM6IE1sQnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIGpzb29faXNfYXNjaWksIGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gTWxCeXRlcyAodGFnLCBjb250ZW50cywgbGVuZ3RoKSB7XG4gIHRoaXMudD10YWc7IHRoaXMuYz1jb250ZW50czsgdGhpcy5sPWxlbmd0aDtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKXtcbiAgc3dpdGNoICh0aGlzLnQpIHtcbiAgY2FzZSA5OiAvKkJZVEVTIHwgQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyh0aGlzKTtcbiAgY2FzZSAwOiAvKkJZVEVTIHwgVU5LT1dOKi9cbiAgICBpZiAoanNvb19pc19hc2NpaSh0aGlzLmMpKSB7XG4gICAgICB0aGlzLnQgPSA5OyAvKkJZVEVTIHwgQVNDSUkqL1xuICAgICAgcmV0dXJuIHRoaXMuYztcbiAgICB9XG4gICAgdGhpcy50ID0gODsgLypCWVRFUyB8IE5PVF9BU0NJSSovXG4gIGNhc2UgODogLypCWVRFUyB8IE5PVF9BU0NJSSovXG4gICAgcmV0dXJuIHRoaXMuYztcbiAgfVxufTtcbk1sQnl0ZXMucHJvdG90eXBlLnRvVXRmMTYgPSBmdW5jdGlvbiAoKXtcbiAgdmFyIHIgPSB0aGlzLnRvU3RyaW5nKCk7XG4gIGlmKHRoaXMudCA9PSA5KSByZXR1cm4gclxuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHIpO1xufVxuTWxCeXRlcy5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoKXtcbiAgdmFyIGNvbnRlbnQgPSB0aGlzLnQgPT0gNCA/IHRoaXMuYy5zbGljZSgpIDogdGhpcy5jO1xuICByZXR1cm4gbmV3IE1sQnl0ZXModGhpcy50LGNvbnRlbnQsdGhpcy5sKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMgKHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQllURVMgKi9cbiAgaWYgKHMudCA9PSAyIC8qIFBBUlRJQUwgKi8pXG4gICAgcy5jICs9IGNhbWxfc3RyX3JlcGVhdChzLmwgLSBzLmMubGVuZ3RoLCAnXFwwJylcbiAgZWxzZVxuICAgIHMuYyA9IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyAocy5jLCAwLCBzLmMubGVuZ3RoKTtcbiAgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEFSUkFZICovXG4gIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkocy5sKTtcbiAgdmFyIGIgPSBzLmMsIGwgPSBiLmxlbmd0aCwgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gYi5jaGFyQ29kZUF0KGkpO1xuICBmb3IgKGwgPSBzLmw7IGkgPCBsOyBpKyspIGFbaV0gPSAwO1xuICBzLmMgPSBhO1xuICBzLnQgPSA0OyAvKiBBUlJBWSAqL1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMgKHMpIHtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gIHJldHVybiBzLmM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyAocykge1xuICB2YXIgbCA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShsKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocyxpKTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGlmKGxlbiA8IDApIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcyxjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2J5dGVzKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQnl0ZXMuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuPzI6OSxcIlwiLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2FycmF5IChhKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhhLDAsYS5sZW5ndGgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9hcnJheSAoYSkge1xuICBpZighIChhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICBhID0gbmV3IFVpbnQ4QXJyYXkoYSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKDQsYSxhLmxlbmd0aCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfY29tcGFyZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2NvbXBhcmUoczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8IHMyLmMpPy0xOihzMS5jID4gczIuYyk/MTowO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jID09IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX25vdGVxdWFsKHMxLCBzMikgeyByZXR1cm4gMS1jYW1sX3N0cmluZ19lcXVhbChzMSwgczIpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9ieXRlc19lcXVhbChzMSwgczIpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPD0gczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMixzMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczIsczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9BbGlhczogY2FtbF9maWxsX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT0gMCAmJiAobCA+PSBzLmwgfHwgKHMudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbCA+PSBzLmMubGVuZ3RoKSkpIHtcbiAgICAgIGlmIChjID09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0IChsLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICAgICAgcy50ID0gKGwgPT0gcy5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JsaXRfYnl0ZXMoczEsIGkxLCBzMiwgaTIsIGxlbikge1xuICBpZiAobGVuID09IDApIHJldHVybiAwO1xuICBpZiAoKGkyID09IDApICYmXG4gICAgICAobGVuID49IHMyLmwgfHwgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpKSB7XG4gICAgczIuYyA9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2UgaWYgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09IHMyLmMubGVuZ3RoKSB7XG4gICAgczIuYyArPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIHtcbiAgICBpZiAoczIudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsIGMyID0gczIuYztcbiAgICBpZiAoczEudCA9PSA0IC8qIEFSUkFZICovKSB7XG4gICAgICBpZiAoaTIgPD0gaTEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGwgPSBNYXRoLm1pbiAobGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzIgW2kyICsgaV0gPSBjMS5jaGFyQ29kZUF0KGkxICsgaSk7XG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2JsaXRfc3RyaW5nKGEsYixjLGQsZSkge1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9zdHJpbmcoYSksYixjLGQsZSk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKSB7IHJldHVybiBzLmwgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXRcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29uY2F0KGEsYikgeyByZXR1cm4gYSArIGIgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXRcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIE1sQnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbmNhdChzMSxzMil7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhzMS50LHMxLmMrczIuYyxzMS5sK3MyLmwpXG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHJldHVybiBzLmNoYXJDb2RlQXQoaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfdW5zYWZlX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBzLmxlbmd0aFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb21wYXJlIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbXBhcmUoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/LTE6KHMxID4gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDw9IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDwgczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocy5jKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh4KSB7IHJldHVybiB4IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGYxNl9vZl91dGY4XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgaWYoanNvb19pc19hc2NpaShzKSlcbiAgICByZXR1cm4gcztcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGY4X29mX3V0ZjE2LCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzKSB7XG4gIGlmIChqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpXG4gIGVsc2UgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF91dGY4X29mX3V0ZjE2KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMocykgeyByZXR1cm4gbmV3IE1sQnl0ZXMoMCxzLHMubGVuZ3RoKTsgfVxuXG5cbi8vIFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBiZSB1c2VkIHdoZW4gdXNlLWpzLXN0cmluZz1mYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLGksYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb21wYXJlXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbXBhcmUoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2NvbXBhcmUoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzdGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocykgeyByZXR1cm4gcyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIHsgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgKHMudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIHJldHVybiBzLmMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpe1xuICByZXR1cm4gcy50b1V0ZjE2KClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2lzX21sX2J5dGVzKHMpIHtcbiAgcmV0dXJuIChzIGluc3RhbmNlb2YgTWxCeXRlcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19jb250ZW50KHMpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICBjYXNlIDA6IC8qIEJZVEVTICovXG4gICAgcmV0dXJuIHMuYztcbiAgY2FzZSA0OlxuICAgIHJldHVybiBzLmNcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19pc19hc2NpaVxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiAodHlwZW9mIHMgPT09IFwic3RyaW5nXCIgJiYgIS9bXlxceDAwLVxceGZmXS8udGVzdChzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2lzX21sX2J5dGVzKHMpO1xufVxuXG4vLyBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZXByZWNhdGVkXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcocykgeyByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9uZXdfc3RyaW5nIChzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdG9fanNfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdG9fanNfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc190b19zdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHMpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9zdHJpbmcoeCkgeyByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoeCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX2J5dGVzKHgpIHsgcmV0dXJuIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoeCkgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBTeXNcblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuU3lzX2Vycm9yLCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19leGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4aXQgKGNvZGUpIHtcbiAgaWYoZ2xvYmFsVGhpcy5xdWl0KSBnbG9iYWxUaGlzLnF1aXQoY29kZSk7XG4gIC8vbm9kZWpzXG4gIGlmKGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuZXhpdClcbiAgICBnbG9iYWxUaGlzLnByb2Nlc3MuZXhpdChjb2RlKTtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiRnVuY3Rpb24gJ2V4aXQnIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbihleG4pe1xuICBzd2l0Y2goZXhuWzJdKSB7XG4gIGNhc2UgLTg6IC8vIE1hdGNoX2ZhaWx1cmVcbiAgY2FzZSAtMTE6IC8vIEFzc2VydF9mYWlsdXJlXG4gIGNhc2UgLTEyOiAvLyBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuICAgIHJldHVybiAxO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGV4bil7XG4gIHZhciByID0gXCJcIjtcbiAgaWYoZXhuWzBdID09IDApIHtcbiAgICByICs9IGV4blsxXVsxXTtcbiAgICBpZihleG4ubGVuZ3RoID09IDMgJiYgZXhuWzJdWzBdID09IDAgJiYgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbihleG5bMV0pKSB7XG5cbiAgICAgIHZhciBidWNrZXQgPSBleG5bMl07XG4gICAgICB2YXIgc3RhcnQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhcnQgPSAyXG4gICAgICB2YXIgYnVja2V0ID0gZXhuO1xuICAgIH1cbiAgICByICs9IFwiKFwiO1xuICAgIGZvcih2YXIgaSA9IHN0YXJ0OyBpIDwgYnVja2V0Lmxlbmd0aDsgaSArKyl7XG4gICAgICBpZihpID4gc3RhcnQpIHIrPVwiLCBcIjtcbiAgICAgIHZhciB2ID0gYnVja2V0W2ldXG4gICAgICBpZih0eXBlb2YgdiA9PSBcIm51bWJlclwiKVxuICAgICAgICByKz0gdi50b1N0cmluZygpO1xuICAgICAgZWxzZSBpZih2IGluc3RhbmNlb2YgTWxCeXRlcyl7XG4gICAgICAgIHIrPSAnXCInICsgdi50b1N0cmluZygpICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYodHlwZW9mIHYgPT0gXCJzdHJpbmdcIil7XG4gICAgICAgIHIrPSAnXCInICsgdi50b1N0cmluZygpICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGVsc2UgciArPSBcIl9cIjtcbiAgICB9XG4gICAgciArPSBcIilcIlxuICB9IGVsc2UgaWYgKGV4blswXSA9PSAyNDgpe1xuICAgIHIgKz0gZXhuWzFdXG4gIH1cbiAgcmV0dXJuIHJcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbiwgY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKXtcbiAgaWYoZXJyIGluc3RhbmNlb2YgQXJyYXkgJiYgKGVyclswXSA9PSAwIHx8IGVyclswXSA9PSAyNDgpKSB7XG4gICAgdmFyIGhhbmRsZXIgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiKTtcbiAgICBpZihoYW5kbGVyKSBjYW1sX2NhbGxiYWNrKGhhbmRsZXIsIFtlcnIsZmFsc2VdKTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBtc2cgPSBjYW1sX2Zvcm1hdF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHZhciBhdF9leGl0ID0gY2FtbF9uYW1lZF92YWx1ZShcIlBlcnZhc2l2ZXMuZG9fYXRfZXhpdFwiKTtcbiAgICAgIGlmKGF0X2V4aXQpIGNhbWxfY2FsbGJhY2soYXRfZXhpdCwgWzBdKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uIFwiICsgbXNnKTtcbiAgICAgIGlmKGVyci5qc19lcnJvcikgdGhyb3cgZXJyLmpzX2Vycm9yO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9zdGF0aWNfZW52XG5mdW5jdGlvbiBjYW1sX3NldF9zdGF0aWNfZW52KGssdil7XG4gIGlmKCFnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudilcbiAgICBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudiA9IHt9XG4gIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W2tdID0gdjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fc3lzX2dldGVudiAoY29uc3QpXG5mdW5jdGlvbiBqc29vX3N5c19nZXRlbnYobikge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgLy9ub2RlanMgZW52XG4gIGlmKHByb2Nlc3NcbiAgICAgJiYgcHJvY2Vzcy5lbnZcbiAgICAgJiYgcHJvY2Vzcy5lbnZbbl0gIT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBwcm9jZXNzLmVudltuXTtcbiAgaWYoZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZcbiAgICAgJiYgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl0pXG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W25dXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGVudiAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGVudiAobmFtZSkge1xuICB2YXIgciA9IGpzb29fc3lzX2dldGVudihjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKSk7XG4gIGlmKHIgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnZcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2dldGVudlxuZnVuY3Rpb24gY2FtbF9zeXNfdW5zYWZlX2dldGVudihuYW1lKXtcbiAgcmV0dXJuIGNhbWxfc3lzX2dldGVudiAobmFtZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJndlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbnZhciBjYW1sX2FyZ3YgPSAoKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdXG5cbiAgaWYocHJvY2Vzc1xuICAgICAmJiBwcm9jZXNzLmFyZ3ZcbiAgICAgJiYgcHJvY2Vzcy5hcmd2Lmxlbmd0aCA+IDEpIHtcbiAgICB2YXIgYXJndiA9IHByb2Nlc3MuYXJndlxuICAgIC8vbm9kZWpzXG4gICAgbWFpbiA9IGFyZ3ZbMV07XG4gICAgYXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gIH1cblxuICB2YXIgcCA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG1haW4pO1xuICB2YXIgYXJnczIgPSBbMCwgcF07XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKVxuICAgIGFyZ3MyLnB1c2goY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoYXJnc1tpXSkpO1xuICByZXR1cm4gYXJnczI7XG59KSgpKVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG52YXIgY2FtbF9leGVjdXRhYmxlX25hbWUgPSBjYW1sX2FyZ3ZbMV1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2FyZ3YgKGEpIHtcbiAgcmV0dXJuIFswLCBjYW1sX2FyZ3ZbMV0sIGNhbWxfYXJndl07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfYXJndiAoYSkge1xuICByZXR1cm4gY2FtbF9hcmd2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19tb2RpZnlfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19tb2RpZnlfYXJndihhcmcpe1xuICBjYW1sX2FyZ3YgPSBhcmc7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19leGVjdXRhYmxlX25hbWUgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG5mdW5jdGlvbiBjYW1sX3N5c19leGVjdXRhYmxlX25hbWUoYSl7XG4gIHJldHVybiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKGNtZCl7XG4gIHZhciBjbWQgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhjbWQpO1xuICBpZiAodHlwZW9mIHJlcXVpcmUgIT0gXCJ1bmRlZmluZWRcIil7XG4gICAgdmFyIGNoaWxkX3Byb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG4gICAgaWYoY2hpbGRfcHJvY2VzcyAmJiBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjbWQse3N0ZGlvOiAnaW5oZXJpdCd9KTtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgfVxuICBlbHNlIHJldHVybiAxMjc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpICogMC4wMDE7XG5mdW5jdGlvbiBjYW1sX3N5c190aW1lICgpIHtcbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHJldHVybiBub3cgKiAwLjAwMSAtIGNhbWxfaW5pdGlhbF90aW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW5cbi8vUmVxdWlyZXM6IGNhbWxfc3lzX3RpbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlbihiKSB7XG4gIHJldHVybiBjYW1sX3N5c190aW1lKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JhbmRvbV9zZWVkIG11dGFibGVcbi8vVGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhbiBhcnJheSBzaW5jZSBPQ2FtbCA0LjAuLi5cbmZ1bmN0aW9uIGNhbWxfc3lzX3JhbmRvbV9zZWVkICgpIHtcbiAgaWYgKGdsb2JhbFRoaXMuY3J5cHRvKSB7XG4gICAgIGlmIChnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgICB2YXIgYSA9IGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgSW50MzJBcnJheSg0KSk7XG4gICAgICAgcmV0dXJuIFswLCBhWzBdLCBhWzFdLCBhWzJdLCBhWzNdXTtcbiAgICAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcykge1xuICAgICAgIHZhciBhID0gbmV3IEludDMyQXJyYXkoZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLmJ1ZmZlcik7XG4gICAgICAgcmV0dXJuIFswLCBhWzBdLCBhWzFdLCBhWzJdLCBhWzNdXTtcbiAgICAgfVxuICB9XG4gIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICB2YXIgeCA9IG5vd14weGZmZmZmZmZmKk1hdGgucmFuZG9tKCk7XG4gIHJldHVybiBbMCx4XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfYmlnX2VuZGlhbiBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmlnX2VuZGlhbiAoKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X3dvcmRfc2l6ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplICgpIHsgcmV0dXJuIDMyOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2ludF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9pbnRfc2l6ZSAoKSB7IHJldHVybiAzMjsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9tYXhfd29zaXplIGNvbnN0XG4vLyBtYXhfaW50IC8gNCBzbyB0aGF0IHRoZSBmb2xsb3dpbmcgZG9lcyBub3Qgb3ZlcmZsb3dcbi8vbGV0IG1heF9zdHJpbmdfbGVuZ3RoID0gd29yZF9zaXplIC8gOCAqIG1heF9hcnJheV9sZW5ndGggLSAxOztcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgKCkgeyByZXR1cm4gKDB4N0ZGRkZGRkYvNCkgfCAwO31cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXggY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV91bml4ICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJVbml4XCIgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIldpbjMyXCIgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiAoKSB7IHJldHVybiBvc190eXBlID09IFwiQ3lnd2luXCIgPyAxIDogMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSAoKSB7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImpzX29mX29jYW1sXCIpXTtcbn1cblxuLy9Qcm92aWRlczogb3NfdHlwZVxudmFyIG9zX3R5cGUgPSAoZ2xvYmFsVGhpcy5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gJiZcbiAgICAgICAgICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSA9PSBcIndpbjMyXCIpID8gXCJDeWd3aW5cIiA6IFwiVW5peFwiO1xuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9jb25maWcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9jb25maWcgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMob3NfdHlwZSksIDMyLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3N5c19pc2F0dHkoX2NoYW4pIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV92YXJpYW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfdmFyaWFudChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVycyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIoKXtyZXR1cm4gMH1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG52YXIgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5nc1xuLy9SZXF1aXJlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG5mdW5jdGlvbiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzIChib29sKSB7XG4gIGNhbWxfcnVudGltZV93YXJuaW5ncyA9IGJvb2w7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZFxuLy9SZXF1aXJlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG5mdW5jdGlvbiBjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZCAoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfcnVudGltZV93YXJuaW5ncztcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NwYWNldGltZV9lbmFibGVkIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUoX2NoYW5uZWwpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3NwYWNldGltZV9vbmx5X3dvcmtzX2Zvcl9uYXRpdmVfY29kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcIlNwYWNldGltZSBwcm9maWxpbmcgb25seSB3b3JrcyBmb3IgbmF0aXZlIGNvZGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfeGRnX2RlZmF1bHRzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF94ZGdfZGVmYXVsdHMoX3VuaXQpIHtcbiAgcmV0dXJuIDA7IC8vIGVtcHR5IGxpc3Rcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmlzRmlsZShyb290LnJlc3QpO1xufVxuLy9BbHdheXNcbi8vUmVxdWlyZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgaWYocHJvY2VzcyAmJiBwcm9jZXNzLm9uKSB7XG4gICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBmdW5jdGlvbiAoZXJyLCBvcmlnaW4pIHtcbiAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycik7XG4gICAgICBwcm9jZXNzLmV4aXQgKDIpO1xuICAgIH0pXG4gIH1cbiAgZWxzZSBpZihnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIpe1xuICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbihldmVudCl7XG4gICAgICBpZihldmVudC5lcnJvcil7XG4gICAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGV2ZW50LmVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlcigpO1xuXG5cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cblxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbi8vUmVxdWlyZXM6IGpzb29fc3lzX2dldGVudlxudmFyIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gRkxBRyhcIndpdGgtanMtZXJyb3JcIik7XG5cbihmdW5jdGlvbiAoKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KFwiT0NBTUxSVU5QQVJBTVwiKVxuICBpZihyICE9PSB1bmRlZmluZWQpe1xuICAgIHZhciBsID0gci5zcGxpdChcIixcIik7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGwubGVuZ3RoOyBpKyspe1xuICAgICAgaWYobFtpXSA9PSBcImJcIikgeyBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IDE7IGJyZWFrIH1cbiAgICAgIGVsc2UgaWYgKGxbaV0uc3RhcnRzV2l0aChcImI9XCIpKSB7XG4gICAgICAgIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gKyhsW2ldLnNsaWNlKDIpKX1cbiAgICAgIGVsc2UgY29udGludWU7XG4gICAgfVxuICB9XG59KSAoKVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9iYWNrdHJhY2Vfc3RhdHVzIChfdW5pdCkgeyByZXR1cm4gY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UgKCkgeyByZXR1cm4gWzBdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX3JlY29yZF9iYWNrdHJhY2UgKGIpIHsgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSBiOyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlICgpIHsgcmV0dXJuIFswXTsgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QoKSB7IHJldHVybiAwIH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9zbG90ICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2Vfc2xvdDogaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZShleG4sIGJ0KSB7IHJldHVybiAwIH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayAoKSB7IHJldHVybiBbMF07IH1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdCgpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuIChjb25zdCwgc2hhbGxvdylcbi8vSWY6ICFlZmZlY3RzXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfY2FsbF9nZW4oZiwgYXJncykge1xuICB2YXIgbiA9IChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09IDApXG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIGVsc2UgaWYgKGQgPCAwKSB7XG4gICAgdmFyIGcgPSBmLmFwcGx5KG51bGwsYXJncy5zbGljZSgwLG4pKTtcbiAgICBpZih0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZztcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihnLGFyZ3Muc2xpY2UobikpO1xuICB9XG4gIGVsc2Uge1xuICAgIHN3aXRjaCAoZCkge1xuICAgIGNhc2UgMToge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMSk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgMjoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKCl7XG4gICAgICAgIHZhciBleHRyYV9hcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPT0gMCk/MTphcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJncy5sZW5ndGgrZXh0cmFfYXJncyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkgbmFyZ3NbYXJncy5sZW5ndGgraV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIG5hcmdzKVxuICAgICAgfTtcbiAgICB9fVxuICAgIGcubCA9IGQ7XG4gICAgcmV0dXJuIGc7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiBlZmZlY3RzXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfY2FsbF9nZW4oZiwgYXJncykge1xuICB2YXIgbiA9IChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09IDApIHtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgfSBlbHNlIGlmIChkIDwgMCkge1xuICAgIHZhciByZXN0ID0gYXJncy5zbGljZShuIC0gMSk7XG4gICAgdmFyIGsgPSBhcmdzIFthcmdzTGVuIC0gMV07XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoMCwgbik7XG4gICAgYXJnc1tuIC0gMV0gPSBmdW5jdGlvbiAoZykge1xuICAgICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBrKGcpO1xuICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBrO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZywgYXJncyk7IH07XG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc0xlbi0tO1xuICAgIHZhciBrID0gYXJncyBbYXJnc0xlbl07XG4gICAgc3dpdGNoIChkKSB7XG4gICAgY2FzZSAxOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAyKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5LCB6KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMl0gPSB6O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgdmFyIGV4dHJhX2FyZ3MgPSAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKT8xOmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgZXh0cmFfYXJncyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKVxuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyBpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgbmFyZ3MpXG4gICAgICB9O1xuICAgIH19XG4gICAgZy5sID0gZCArIDE7XG4gICAgcmV0dXJuIGsoZyk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZXNcbnZhciBjYW1sX25hbWVkX3ZhbHVlcyA9IHt9O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIChjb25zdCxtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUobm0sdikge1xuICBjYW1sX25hbWVkX3ZhbHVlc1tjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5tKV0gPSB2O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZXNcbmZ1bmN0aW9uIGNhbWxfbmFtZWRfdmFsdWUobm0pIHtcbiAgcmV0dXJuIGNhbWxfbmFtZWRfdmFsdWVzW25tXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dsb2JhbF9kYXRhXG52YXIgY2FtbF9nbG9iYWxfZGF0YSA9IFswXTtcblxuLy9Qcm92aWRlczogY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9idWlsZF9zeW1ib2xzKHN5bWIpIHtcbiAgdmFyIHIgPSB7fTtcbiAgaWYoc3ltYikge1xuICAgIGZvcih2YXIgaSA9IDE7IGkgPCBzeW1iLmxlbmd0aDsgaSsrKXtcbiAgICAgIHJbY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoc3ltYltpXVsxXSldID0gc3ltYltpXVsyXVxuICAgIH1cbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKGNvbnN0LCBzaGFsbG93LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfY2FsbGJhY2ssIGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKG4sIHYsIG5hbWVfb3B0KSB7XG4gIGlmIChuYW1lX29wdCkge1xuICAgIHZhciBuYW1lID0gbmFtZV9vcHQ7XG4gICAgaWYoZ2xvYmFsVGhpcy50b3BsZXZlbFJlbG9jKSB7XG4gICAgICBuID0gY2FtbF9jYWxsYmFjayhnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MsIFtuYW1lXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scykge1xuICAgICAgaWYoIWNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4KSB7XG4gICAgICAgIGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4ID0gY2FtbF9idWlsZF9zeW1ib2xzKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scylcbiAgICAgIH1cbiAgICAgIHZhciBuaWQgPSBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeFtuYW1lXVxuICAgICAgaWYobmlkID49IDApXG4gICAgICAgIG4gPSBuaWRcbiAgICAgIGVsc2Uge1xuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9yZWdpc3Rlcl9nbG9iYWw6IGNhbm5vdCBsb2NhdGUgXCIgKyBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2FtbF9nbG9iYWxfZGF0YVtuICsgMV0gPSB2O1xuICBpZihuYW1lX29wdCkgY2FtbF9nbG9iYWxfZGF0YVtuYW1lX29wdF0gPSB2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9nbG9iYWxfZGF0YSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2dldF9nbG9iYWxfZGF0YSAoKSB7IHJldHVybiBjYW1sX2dsb2JhbF9kYXRhOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfcHJpbnRhYmxlIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfaXNfcHJpbnRhYmxlKGMpIHsgcmV0dXJuICsoYyA+IDMxICYmIGMgPCAxMjcpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfcHJpbnRfc3RhdHNcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfcHJpbnRfc3RhdHModW5pdCkgeyByZXR1cm4gMCB9XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWJcblxuLy9Qcm92aWRlczogY2FtbF9qc19wdXJlX2V4cHIgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfcHVyZV9leHByIChmKSB7IHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFswXSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobyxmLHYpIHsgb1tmXT12O3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9qc19nZXQgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19nZXQobyxmKSB7IHJldHVybiBvW2ZdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2RlbGV0ZSAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2RlbGV0ZShvLGYpIHsgZGVsZXRlIG9bZl07IHJldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2luc3RhbmNlb2YgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfaW5zdGFuY2VvZihvLGMpIHsgcmV0dXJuIChvIGluc3RhbmNlb2YgYykgPyAxIDogMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3R5cGVvZiAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3R5cGVvZihvKSB7IHJldHVybiB0eXBlb2YgbzsgfVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlKHJlcyAmJiByZXMuam9vX3RyYW1wKXtcbiAgICByZXMgPSByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncyk7XG4gICAgYysrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lX3JldHVyblxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lX3JldHVybihmLGFyZ3MpIHtcbiAgcmV0dXJuIHtqb29fdHJhbXA6Zixqb29fYXJnczphcmdzfTtcbn1cblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG52YXIgY2FtbF9zdGFja19kZXB0aCA9IDA7XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19jaGVja19kZXB0aFxuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoXG5mdW5jdGlvbiBjYW1sX3N0YWNrX2NoZWNrX2RlcHRoKCkge1xuICAgIHJldHVybiAtLWNhbWxfc3RhY2tfZGVwdGggPiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiAhZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX2NhbGxfZ2VuXG52YXIgY2FtbF9jYWxsYmFjayA9IGNhbWxfY2FsbF9nZW47XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6IGVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9zdGFja19kZXB0aCwgY2FtbF9jYWxsX2dlbiwgY2FtbF9leG5fc3RhY2ssIGNhbWxfZmliZXJfc3RhY2ssIGNhbWxfd3JhcF9leGNlcHRpb24sIGNhbWxfcmVzdW1lX3N0YWNrLCBjYW1sX2ZyZXNoX29vX2lkLCBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3JhaXNlX3dpdGhfYXJnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50XG5mdW5jdGlvbiBjYW1sX2NhbGxiYWNrKGYsYXJncykge1xuICBmdW5jdGlvbiB1bmNhdWdodF9lZmZlY3RfaGFuZGxlcihlZmYsayxtcykge1xuICAgIC8vIFJlc3VtZXMgdGhlIGNvbnRpbnVhdGlvbiBrIGJ5IHJhaXNpbmcgZXhjZXB0aW9uIFVuaGFuZGxlZC5cbiAgICBjYW1sX3Jlc3VtZV9zdGFjayhrWzFdLG1zKTtcbiAgICB2YXIgZXhuID0gY2FtbF9uYW1lZF92YWx1ZShcIkVmZmVjdC5VbmhhbmRsZWRcIik7XG4gICAgaWYoZXhuKSBjYW1sX3JhaXNlX3dpdGhfYXJnKGV4biwgZWZmKTtcbiAgICBlbHNlIHtcbiAgICAgIGV4biA9IFsyNDgsY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkVmZmVjdC5VbmhhbmRsZWRcIiksIGNhbWxfZnJlc2hfb29faWQoMCldO1xuICAgICAgY2FtbF9yYWlzZV9jb25zdGFudChleG4pO1xuICAgIH1cbiAgfVxuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfZXhuX3N0YWNrID0gY2FtbF9leG5fc3RhY2s7XG4gIHZhciBzYXZlZF9maWJlcl9zdGFjayA9IGNhbWxfZmliZXJfc3RhY2s7XG4gIHRyeSB7XG4gICAgY2FtbF9leG5fc3RhY2sgPSAwO1xuICAgIGNhbWxfZmliZXJfc3RhY2sgPVxuICAgICAge2g6WzAsIDAsIDAsIHVuY2F1Z2h0X2VmZmVjdF9oYW5kbGVyXSwgcjp7azowLCB4OjAsIGU6MH19O1xuICAgIHZhciByZXMgPSB7am9vX3RyYW1wOiBmLFxuICAgICAgICAgICAgICAgam9vX2FyZ3M6IGFyZ3MuY29uY2F0KGZ1bmN0aW9uICh4KXtyZXR1cm4geDt9KX07XG4gICAgZG8ge1xuICAgICAgY2FtbF9zdGFja19kZXB0aCA9IDQwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzID0gY2FtbF9jYWxsX2dlbihyZXMuam9vX3RyYW1wLCByZXMuam9vX2FyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBIYW5kbGUgZXhjZXB0aW9uIGNvbWluZyBmcm9tIEphdmFTY3JpcHQgb3IgZnJvbSB0aGUgcnVudGltZS4gKi9cbiAgICAgICAgaWYgKCFjYW1sX2V4bl9zdGFjaykgdGhyb3cgZTtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBjYW1sX2V4bl9zdGFja1sxXTtcbiAgICAgICAgY2FtbF9leG5fc3RhY2sgPSBjYW1sX2V4bl9zdGFja1syXTtcbiAgICAgICAgcmVzID0ge2pvb190cmFtcDogaGFuZGxlcixcbiAgICAgICAgICAgICAgIGpvb19hcmdzOiBbY2FtbF93cmFwX2V4Y2VwdGlvbihlKV19O1xuICAgICAgfVxuICAgIH0gd2hpbGUocmVzICYmIHJlcy5qb29fYXJncylcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9leG5fc3RhY2sgPSBzYXZlZF9leG5fc3RhY2s7XG4gICAgY2FtbF9maWJlcl9zdGFjayA9IHNhdmVkX2ZpYmVyX3N0YWNrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfanNcbmZ1bmN0aW9uIGNhbWxfaXNfanMoKSB7XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmcodW5pdCl7XG4gIHJldHVybiBGTEFHKFwidXNlLWpzLXN0cmluZ1wiKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHModW5pdCl7XG4gIHJldHVybiBGTEFHKFwiZWZmZWN0c1wiKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dyYXBfZXhjZXB0aW9uIGNvbnN0IChtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyxjYW1sX25hbWVkX3ZhbHVlXG5mdW5jdGlvbiBjYW1sX3dyYXBfZXhjZXB0aW9uKGUpIHtcbiAgaWYgKEZMQUcoXCJleGN3cmFwXCIpKSB7XG4gICAgaWYoZSBpbnN0YW5jZW9mIEFycmF5KSByZXR1cm4gZTtcbiAgICB2YXIgZXhuO1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGNocm9tZSwgc2FmYXJpXG4gICAgaWYoZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICAgJiYgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuUmFuZ2VFcnJvclxuICAgICAgICYmIGUubWVzc2FnZVxuICAgICAgICYmIGUubWVzc2FnZS5tYXRjaCgvbWF4aW11bSBjYWxsIHN0YWNrL2kpKVxuICAgICAgZXhuID0gY2FtbF9nbG9iYWxfZGF0YS5TdGFja19vdmVyZmxvdztcbiAgICAvL1N0YWNrX292ZXJmbG93OiBmaXJlZm94XG4gICAgZWxzZSBpZihnbG9iYWxUaGlzLkludGVybmFsRXJyb3JcbiAgICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5JbnRlcm5hbEVycm9yXG4gICAgICAgJiYgZS5tZXNzYWdlXG4gICAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC90b28gbXVjaCByZWN1cnNpb24vaSkpXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vV3JhcCBFcnJvciBpbiBKcy5FcnJvciBleGNlcHRpb25cbiAgICBlbHNlIGlmKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgICAgZXhuID0gWzAsY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIiksZV07XG4gICAgZWxzZVxuICAgICAgLy9mYWxsYmFjazogd3JhcHBlZCBpbiBGYWlsdXJlXG4gICAgICBleG4gPSBbMCxjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKFN0cmluZyhlKSldO1xuICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBlcnJvciBhdCBoYW5kLCBsZXQncyB1c2UgaXQuXG4gICAgaWYgKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yKVxuICAgICAgZXhuLmpzX2Vycm9yID0gZTtcbiAgICByZXR1cm4gZXhuO1xuICB9IGVsc2VcbiAgICByZXR1cm4gZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShleG4sIGZvcmNlKSB7XG4gIGlmKGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnKVxuICAgIHJldHVybiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZShleG4sIGZvcmNlKTtcbiAgZWxzZSByZXR1cm4gZXhuXG59XG5cbi8vIEV4cGVyaW1lbnRhbFxuLy9Qcm92aWRlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgLy9uZXZlciByZXJhaXNlIGZvciBjb25zdGFudCBleG5cbiAgaWYoIWV4bi5qc19lcnJvciB8fCBmb3JjZSB8fCBleG5bMF0gPT0gMjQ4KSBleG4uanNfZXJyb3IgPSBuZXcgZ2xvYmFsVGhpcy5FcnJvcihcIkpzIGV4Y2VwdGlvbiBjb250YWluaW5nIGJhY2t0cmFjZVwiKTtcbiAgcmV0dXJuIGV4bjtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvbihleG4pIHtcbiAgaWYoZXhuLmpzX2Vycm9yKSB7IHJldHVybiBbMCwgZXhuLmpzX2Vycm9yXTsgfVxuICByZXR1cm4gMDtcbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9ib29sIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9ib29sKHgpIHsgcmV0dXJuICEheDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19ib29sIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYm9vbCh4KSB7IHJldHVybiAreDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Zsb2F0IGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9pbnQzMlxuLy9BbGlhczogY2FtbF9qc19mcm9tX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fZmxvYXQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19mbG9hdCh4KSB7IHJldHVybiB4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2ludDMyIGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfdG9fbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2pzX3RvX2ludDMyKHgpIHsgcmV0dXJuIHh8MDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYXJyYXkgbXV0YWJsZSAoc2hhbGxvdylcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9hcnJheShhKSB7XG4gIHJldHVybiBhLnNsaWNlKDEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc190b19hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc190b19hcnJheShhKSB7XG4gIHZhciBsZW4gPSBhLmxlbmd0aDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKzEpO1xuICBiWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxsZW47aSsrKSBiW2krMV0gPSBhW2ldO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X29mX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X29mX2pzX2FycmF5KGEpe1xuICB2YXIgbCA9IDA7XG4gIGZvcih2YXIgaT1hLmxlbmd0aCAtIDE7IGk+PTA7IGktLSl7XG4gICAgdmFyIGUgPSBhW2ldO1xuICAgIGwgPSBbMCxlLGxdO1xuICB9XG4gIHJldHVybiBsXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF90b19qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF90b19qc19hcnJheShsKXtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yKDsgbCAhPT0gMDsgbCA9IGxbMl0pIHtcbiAgICBhLnB1c2gobFsxXSk7XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdmFyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3Zhcih4KSB7XG4gIHZhciB4ID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoeCk7XG4gIC8vQ2hlY2tzIHRoYXQgeCBoYXMgdGhlIGZvcm0gaWRlbnRbLmlkZW50XSpcbiAgaWYoIXgubWF0Y2goL15bYS16QS1aXyRdW2EtekEtWl8kMC05XSooXFwuW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qKSokLykpe1xuICAgIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX3ZhcjogXFxcIlwiICsgeCArIFwiXFxcIiBpcyBub3QgYSB2YWxpZCBKYXZhU2NyaXB0IHZhcmlhYmxlLiBjb250aW51aW5nIC4uXCIpO1xuICAgIC8vY29uc29sZS5lcnJvcihcIkpzLlVuc2FmZS5ldmFsX3N0cmluZ1wiKVxuICB9XG4gIHJldHVybiBldmFsKHgpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19jYWxsIChjb25zdCwgbXV0YWJsZSwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19jYWxsKGYsIG8sIGFyZ3MpIHsgcmV0dXJuIGYuYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5fY2FsbCAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfZnVuX2NhbGwoZiwgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIGYoKTtcbiAgY2FzZSAyOiByZXR1cm4gZiAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIGYgKGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgY2FzZSA4OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgcmV0dXJuIGYuYXBwbHkobnVsbCwgY2FtbF9qc19mcm9tX2FycmF5KGEpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbWV0aF9jYWxsIChtdXRhYmxlLCBjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfbWV0aF9jYWxsKG8sIGYsIGFyZ3MpIHtcbiAgcmV0dXJuIG9bY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoZildLmFwcGx5KG8sIGNhbWxfanNfZnJvbV9hcnJheShhcmdzKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX25ldyAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfbmV3KGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDE6IHJldHVybiBuZXcgYztcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgY2FzZSA4OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdLGFbN10pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7IHJldHVybiBjLmFwcGx5KHRoaXMsIGNhbWxfanNfZnJvbV9hcnJheShhKSk7IH1cbiAgRi5wcm90b3R5cGUgPSBjLnByb3RvdHlwZTtcbiAgcmV0dXJuIG5ldyBGO1xufVxuLy9Qcm92aWRlczogY2FtbF9vanNfbmV3X2FyciAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb2pzX25ld19hcnIoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMDogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDE6IHJldHVybiBuZXcgYyAoYVswXSk7XG4gIGNhc2UgMjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgYSk7IH1cbiAgRi5wcm90b3R5cGUgPSBjLnByb3RvdHlwZTtcbiAgcmV0dXJuIG5ldyBGO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYobGVuID4gMCl7XG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncyA9IFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgICByZXR1cm4gKHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKT9jYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKTpyZXM7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgW2FyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcml0eSk7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGgsIGFyaXR5KVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTsgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc193cmFwX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHZhciByZXMgPSBjYW1sX2NhbGxiYWNrKGYsYXJncyk7XG4gICAgcmV0dXJuIChyZXMgaW5zdGFuY2VvZiBGdW5jdGlvbik/Y2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcyk6cmVzO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZixbdGhpcyxhcmdzXSk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJpdHkgKyAxKTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikgLSAxO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTsgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiAhZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSB7XG4gIHJldHVybiAoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbi8vSWY6IGVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICAvLyBGdW5jdGlvbnMgaGF2ZSBhbiBhZGRpdGlvbmFsIGNvbnRpbnVhdGlvbiBwYXJhbWV0ZXIuIFRoaXMgc2hvdWxkXG4gIC8vIG5vdCBiZSB2aXNpYmxlIHdoZW4gY2FsbGluZyB0aGVtIGZyb20gSmF2YVNjcmlwdFxuICByZXR1cm4gKChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCkpIC0gMVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2VxdWFscyBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2VxdWFscyAoeCwgeSkgeyByZXR1cm4gKyh4ID09IHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfc3RyaWN0X2VxdWFscyBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgKHgsIHkpIHsgcmV0dXJuICsoeCA9PT0geSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19ldmFsX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19ldmFsX3N0cmluZyAocykge3JldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXhwciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19leHByKHMpIHtcbiAgY29uc29sZS5lcnJvcihcImNhbWxfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9wdXJlX2pzX2V4cHIgKHMpe1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9wdXJlX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgcmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19vYmplY3QgKG9iamVjdF9saXRlcmFsKVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfb2JqZWN0IChhKSB7XG4gIHZhciBvID0ge307XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwID0gYVtpXTtcbiAgICBvW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHBbMV0pXSA9IHBbMl07XG4gIH1cbiAgcmV0dXJuIG87XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1JhaXNlIGV4Y2VwdGlvblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2NvbnN0YW50IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfY29uc3RhbnQgKHRhZykgeyB0aHJvdyB0YWc7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZyAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9hcmcgKHRhZywgYXJnKSB7IHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnLCBhcmddKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncyAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9hcmdzICh0YWcsIGFyZ3MpIHsgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWddLmNvbmNhdChhcmdzKSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZyAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX2FyZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX3N0cmluZyAodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG1zZykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhaWx3aXRoIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmFpbHdpdGggKG1zZykge1xuICBpZighY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlKVxuICAgIGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZT1bMjQ4LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJGYWlsdXJlXCIpLC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfaW52YWxpZF9hcmd1bWVudCAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkVuZF9vZl9maWxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5EaXZpc2lvbl9ieV96ZXJvKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGpzb29fZmxvb3JfbG9nMlxudmFyIGxvZzJfb2sgPSBNYXRoLmxvZzIgJiYgTWF0aC5sb2cyKDEuMTIzNTU4MjA5Mjg4OTQ3NEUrMzA3KSA9PSAxMDIwXG5mdW5jdGlvbiBqc29vX2Zsb29yX2xvZzIoeCkge1xuICBpZihsb2cyX29rKSByZXR1cm4gTWF0aC5mbG9vcihNYXRoLmxvZzIoeCkpXG4gIHZhciBpID0gMDtcbiAgaWYgKHggPT0gMCkgcmV0dXJuIC1JbmZpbml0eTtcbiAgaWYoeD49MSkge3doaWxlICh4Pj0yKSB7eC89MjsgaSsrfSB9XG4gIGVsc2Uge3doaWxlICh4IDwgMSkge3gqPTI7IGktLX0gfTtcbiAgcmV0dXJuIGk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyLCBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0ICh4KSB7XG4gIGlmICghaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoaXNOYU4oeCkpXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMSwgMCwgMHg3ZmYwKTtcbiAgICBpZiAoeCA+IDApXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHg3ZmYwKVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgwLCAwLCAweGZmZjApXG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8weDgwMDA6KHg+PTApPzA6MHg4MDAwO1xuICBpZiAoc2lnbikgeCA9IC14O1xuICAvLyBJbnQ2NC5iaXRzX29mX2Zsb2F0IDEuMTIzNTU4MjA5Mjg4OTQ3NEUrMzA3ID0gMHg3ZmIwMDAwMDAwMDAwMDAwTFxuICAvLyB1c2luZyBNYXRoLkxPRzJFKk1hdGgubG9nKHgpIGluIHBsYWNlIG9mIE1hdGgubG9nMiByZXN1bHQgaW4gcHJlY2lzaW9uIGxvc3RcbiAgdmFyIGV4cCA9IGpzb29fZmxvb3JfbG9nMih4KSArIDEwMjM7XG4gIGlmIChleHAgPD0gMCkge1xuICAgIGV4cCA9IDA7XG4gICAgeCAvPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgfSBlbHNlIHtcbiAgICB4IC89IE1hdGgucG93KDIsZXhwLTEwMjcpO1xuICAgIGlmICh4IDwgMTYpIHtcbiAgICAgIHggKj0gMjsgZXhwIC09MTsgfVxuICAgIGlmIChleHAgPT0gMCkge1xuICAgICAgeCAvPSAyOyB9XG4gIH1cbiAgdmFyIGsgPSBNYXRoLnBvdygyLDI0KTtcbiAgdmFyIHIzID0geHwwO1xuICB4ID0gKHggLSByMykgKiBrO1xuICB2YXIgcjIgPSB4fDA7XG4gIHggPSAoeCAtIHIyKSAqIGs7XG4gIHZhciByMSA9IHh8MDtcbiAgcjMgPSAocjMgJjB4ZikgfCBzaWduIHwgZXhwIDw8IDQ7XG4gIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShyMSwgcjIsIHIzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzJcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCAoeCkge1xuICB2YXIgZmxvYXQzMmEgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuICBmbG9hdDMyYVswXSA9IHg7XG4gIHZhciBpbnQzMmEgPSBuZXcgSW50MzJBcnJheShmbG9hdDMyYS5idWZmZXIpO1xuICByZXR1cm4gaW50MzJhWzBdIHwgMDtcbn1cblxuLy9GUCBsaXRlcmFscyBjYW4gYmUgd3JpdHRlbiB1c2luZyB0aGUgaGV4YWRlY2ltYWxcbi8vbm90YXRpb24gMHg8bWFudGlzc2EgaW4gaGV4PnA8ZXhwb25lbnQ+IGZyb20gSVNPIEM5OS5cbi8vaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWhleGZsb2F0L2Jsb2IvbWFzdGVyL2hleGZsb2F0LmpzXG4vL1Byb3ZpZGVzOiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQgKHgsIHByZWMsIHN0eWxlKSB7XG4gIGlmICghaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoaXNOYU4oeCkpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIm5hblwiKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKCh4ID4gMCk/XCJpbmZpbml0eVwiOlwiLWluZmluaXR5XCIpO1xuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MTooeD49MCk/MDoxO1xuICBpZihzaWduKSB4ID0gLXg7XG4gIHZhciBleHAgPSAwO1xuICBpZiAoeCA9PSAwKSB7IH1cbiAgZWxzZSBpZiAoeCA8IDEpIHtcbiAgICB3aGlsZSAoeCA8IDEgJiYgZXhwID4gLTEwMjIpICB7IHggKj0gMjsgZXhwLS0gfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlICh4ID49IDIpIHsgeCAvPSAyOyBleHArKyB9XG4gIH1cbiAgdmFyIGV4cF9zaWduID0gZXhwIDwgMCA/ICcnIDogJysnO1xuICB2YXIgc2lnbl9zdHIgPSAnJztcbiAgaWYgKHNpZ24pIHNpZ25fc3RyID0gJy0nXG4gIGVsc2Uge1xuICAgIHN3aXRjaChzdHlsZSl7XG4gICAgY2FzZSA0MyAvKiAnKycgKi86IHNpZ25fc3RyID0gJysnOyBicmVhaztcbiAgICBjYXNlIDMyIC8qICcgJyAqLzogc2lnbl9zdHIgPSAnICc7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAocHJlYyA+PSAwICYmIHByZWMgPCAxMykge1xuICAgIC8qIElmIGEgcHJlY2lzaW9uIGlzIGdpdmVuLCBhbmQgaXMgc21hbGwsIHJvdW5kIG1hbnRpc3NhIGFjY29yZGluZ2x5ICovXG4gICAgdmFyIGNzdCA9IE1hdGgucG93KDIscHJlYyAqIDQpO1xuICAgIHggPSBNYXRoLnJvdW5kKHggKiBjc3QpIC8gY3N0O1xuICB9XG4gIHZhciB4X3N0ciA9IHgudG9TdHJpbmcoMTYpO1xuICBpZihwcmVjID49IDApe1xuICAgIHZhciBpZHggPSB4X3N0ci5pbmRleE9mKCcuJyk7XG4gICAgaWYoaWR4PDApIHtcbiAgICAgIHhfc3RyICs9ICcuJyArIGNhbWxfc3RyX3JlcGVhdChwcmVjLCAnMCcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBzaXplID0gaWR4KzErcHJlYztcbiAgICAgIGlmKHhfc3RyLmxlbmd0aCA8IHNpemUpXG4gICAgICAgIHhfc3RyICs9IGNhbWxfc3RyX3JlcGVhdChzaXplIC0geF9zdHIubGVuZ3RoLCAnMCcpO1xuICAgICAgZWxzZVxuICAgICAgICB4X3N0ciA9IHhfc3RyLnN1YnN0cigwLHNpemUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHNpZ25fc3RyICsgJzB4JyArIHhfc3RyICsgJ3AnICsgZXhwX3NpZ24gKyBleHAudG9TdHJpbmcoMTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKHgpIHtcbiAgdmFyIGxvID0geC5sbztcbiAgdmFyIG1pID0geC5taTtcbiAgdmFyIGhpID0geC5oaTtcbiAgdmFyIGV4cCA9IChoaSAmIDB4N2ZmZikgPj4gNDtcbiAgaWYgKGV4cCA9PSAyMDQ3KSB7XG4gICAgaWYgKChsb3xtaXwoaGkmMHhmKSkgPT0gMClcbiAgICAgIHJldHVybiAoaGkgJiAweDgwMDApPygtSW5maW5pdHkpOkluZmluaXR5O1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIGsgPSBNYXRoLnBvdygyLC0yNCk7XG4gIHZhciByZXMgPSAobG8qayttaSkqaysoaGkmMHhmKTtcbiAgaWYgKGV4cCA+IDApIHtcbiAgICByZXMgKz0gMTY7XG4gICAgcmVzICo9IE1hdGgucG93KDIsZXhwLTEwMjcpO1xuICB9IGVsc2VcbiAgICByZXMgKj0gTWF0aC5wb3coMiwtMTAyNik7XG4gIGlmIChoaSAmIDB4ODAwMCkgcmVzID0gLSByZXM7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV4dGFmdGVyX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfc3ViLGNhbWxfaW50NjRfb2ZfaW50MzJcbmZ1bmN0aW9uIGNhbWxfbmV4dGFmdGVyX2Zsb2F0ICh4LHkpIHtcbiAgaWYoaXNOYU4oeCkgfHwgaXNOYU4oeSkpIHJldHVybiBOYU47XG4gIGlmKHg9PXkpIHJldHVybiB5O1xuICBpZih4PT0wKXtcbiAgICBpZih5IDwgMClcbiAgICAgIHJldHVybiAtTWF0aC5wb3coMiwgLTEwNzQpXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE1hdGgucG93KDIsIC0xMDc0KVxuICB9XG4gIHZhciBiaXRzID0gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpO1xuICB2YXIgb25lID0gY2FtbF9pbnQ2NF9vZl9pbnQzMigxKTtcbiAgaWYgKCh4PHkpID09ICh4PjApKVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X2FkZChiaXRzLCBvbmUpXG4gIGVsc2VcbiAgICBiaXRzID0gY2FtbF9pbnQ2NF9zdWIoYml0cywgb25lKVxuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGJpdHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RydW5jX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX3RydW5jX2Zsb2F0KHgpe1xuICByZXR1cm4gTWF0aC50cnVuYyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgKHgpIHtcbiAgdmFyIGludDMyYSA9IG5ldyBJbnQzMkFycmF5KDEpO1xuICBpbnQzMmFbMF0gPSB4O1xuICB2YXIgZmxvYXQzMmEgPSBuZXcgRmxvYXQzMkFycmF5KGludDMyYS5idWZmZXIpO1xuICByZXR1cm4gZmxvYXQzMmFbMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2xhc3NpZnlfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2xhc3NpZnlfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIGlmIChNYXRoLmFicyh4KSA+PSAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgcmV0dXJuIDA7XG4gICAgaWYgKHggIT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDI7XG4gIH1cbiAgcmV0dXJuIGlzTmFOKHgpPzQ6Mztcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbW9kZl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tb2RmX2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICB2YXIgbmVnID0gKDEveCkgPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IgKHgpO1xuICAgIHZhciBmID0geCAtIGk7XG4gICAgaWYgKG5lZykgeyBpID0gLWk7IGYgPSAtZjsgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKGlzTmFOICh4KSkgcmV0dXJuIFswLCBOYU4sIE5hTl07XG4gIHJldHVybiBbMCwgMS94LCB4XTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbGRleHBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbGRleHBfZmxvYXQgKHgsZXhwKSB7XG4gIGV4cCB8PSAwO1xuICBpZiAoZXhwID4gMTAyMykge1xuICAgIGV4cCAtPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgaWYgKGV4cCA+IDEwMjMpIHsgIC8vIGluIGNhc2UgeCBpcyBzdWJub3JtYWxcbiAgICAgIGV4cCAtPSAxMDIzO1xuICAgICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4cCA8IC0xMDIzKSB7XG4gICAgZXhwICs9IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAtMTAyMyk7XG4gIH1cbiAgeCAqPSBNYXRoLnBvdygyLCBleHApO1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZnJleHBfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9mcmV4cF9mbG9hdCAoeCkge1xuICBpZiAoKHggPT0gMCkgfHwgIWlzRmluaXRlKHgpKSByZXR1cm4gWzAsIHgsIDBdO1xuICB2YXIgbmVnID0geCA8IDA7XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywganNvb19mbG9vcl9sb2cyKHgpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwtZXhwKTtcbiAgd2hpbGUgKHggPCAwLjUpIHtcbiAgICB4ICo9IDI7XG4gICAgZXhwLS07XG4gIH1cbiAgd2hpbGUgKHggPj0gMSkge1xuICAgIHggKj0gMC41O1xuICAgIGV4cCsrO1xuICB9XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUgKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHJldHVybiAwO1xuICBpZiAoeCA8IHkpIHJldHVybiAtMTtcbiAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgaWYgKHggPT09IHgpIHJldHVybiAxO1xuICBpZiAoeSA9PT0geSkgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb3B5c2lnbl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3B5c2lnbl9mbG9hdCAoeCwgeSkge1xuICBpZiAoeSA9PSAwKSB5ID0gMSAvIHk7XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgcmV0dXJuICh5IDwgMCk/KC14KTp4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NpZ25iaXRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2lnbmJpdF9mbG9hdCh4KSB7XG4gIGlmICh4ID09IDApIHggPSAxIC8geDtcbiAgcmV0dXJuICh4IDwgMCk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4cG0xX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cG0xX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmV4cG0xKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2V4cDJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLnBvdygyLCB4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxcF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxcF9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzFwKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzIoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaHlwb3RfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaHlwb3RfZmxvYXQgKHgsIHkpIHsgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMTBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMTBfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgubG9nMTAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3NoX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYWNvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYWNvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYWNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXNpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXNpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF90YW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXRhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXRhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcm91bmRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfcm91bmRfZmxvYXQgKHgpIHtcbiAgaWYgKHggPj0gMCkge1xuICAgIHZhciB5ID0gTWF0aC5mbG9vcih4KTtcbiAgICByZXR1cm4gKHggLSB5ID49IDAuNSk/KHkgKyAxKTp5XG4gIH0gZWxzZSB7XG4gICAgdmFyIHkgPSBNYXRoLmNlaWwoeCk7XG4gICAgcmV0dXJuICh5IC0geCA+PSAwLjUpPyh5IC0gMSk6eVxuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2NicnRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2JydF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5jYnJ0KHgpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2VyZl9mbG9hdCh4KSB7XG4gIHZhciBhMSA9IDAuMjU0ODI5NTkyO1xuICB2YXIgYTIgPSAtMC4yODQ0OTY3MzY7XG4gIHZhciBhMyA9IDEuNDIxNDEzNzQxO1xuICB2YXIgYTQgPSAtMS40NTMxNTIwMjc7XG4gIHZhciBhNSA9IDEuMDYxNDA1NDI5O1xuICB2YXIgcCA9IDAuMzI3NTkxMTtcblxuICB2YXIgc2lnbiA9IDE7XG4gIGlmICh4IDwgMCkge1xuICAgIHNpZ24gPSAtMTtcbiAgfVxuICB4ID0gTWF0aC5hYnMoeCk7XG4gIHZhciB0ID0gMS4wIC8gKDEuMCArIHAgKiB4KTtcbiAgdmFyIHkgPSAxLjAgLSAoKCgoYTUgKiB0ICsgYTQpICogdCArIGEzKSAqIHQgKyBhMikgKiB0ICsgYTEpICogdCAqIE1hdGguZXhwKC14ICogeCk7XG5cbiAgcmV0dXJuIHNpZ24gKiB5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VyZmNfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfZXJmX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2VyZmNfZmxvYXQoeCkge1xuICByZXR1cm4gMSAtIGNhbWxfZXJmX2Zsb2F0KHgpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm1hX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZtYV9mbG9hdCh4LCB5LCB6KSB7XG4gIHZhciBTUExJVCA9IE1hdGgucG93KDIsIDI3KSArIDE7XG4gIHZhciBNSU5fVkFMVUUgPSBNYXRoLnBvdygyLCAtMTAyMik7XG4gIHZhciBFUFNJTE9OID0gTWF0aC5wb3coMiwgLTUyKTtcbiAgdmFyIEMgPSA0MTY7XG4gIHZhciBBID0gTWF0aC5wb3coMiwgK0MpO1xuICB2YXIgQiA9IE1hdGgucG93KDIsIC1DKTtcblxuICBmdW5jdGlvbiBtdWx0aXBseSAoYSwgYikge1xuICAgIHZhciBhdCA9IFNQTElUICogYTtcbiAgICB2YXIgYWhpID0gYXQgLSAoYXQgLSBhKTtcbiAgICB2YXIgYWxvID0gYSAtIGFoaTtcbiAgICB2YXIgYnQgPSBTUExJVCAqIGI7XG4gICAgdmFyIGJoaSA9IGJ0IC0gKGJ0IC0gYik7XG4gICAgdmFyIGJsbyA9IGIgLSBiaGk7XG4gICAgdmFyIHAgPSBhICogYjtcbiAgICB2YXIgZSA9ICgoYWhpICogYmhpIC0gcCkgKyBhaGkgKiBibG8gKyBhbG8gKiBiaGkpICsgYWxvICogYmxvO1xuICAgIHJldHVybiB7XG4gICAgICBwOiBwLFxuICAgICAgZTogZVxuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gYWRkIChhLCBiKSB7XG4gICAgdmFyIHMgPSBhICsgYjtcbiAgICB2YXIgdiA9IHMgLSBhO1xuICAgIHZhciBlID0gKGEgLSAocyAtIHYpKSArIChiIC0gdik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHM6IHMsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGp1c3QgKHgsIHkpIHtcbiAgICByZXR1cm4geCAhPT0gMCAmJiB5ICE9PSAwICYmIFNQTElUICogeCAtIChTUExJVCAqIHggLSB4KSA9PT0geCA/IHggKiAoMSArICh4IDwgMCA/IC0xIDogKzEpICogKHkgPCAwID8gLTEgOiArMSkgKiBFUFNJTE9OKSA6IHg7XG4gIH07XG5cbiAgaWYgKHggPT09IDAgfHwgeCAhPT0geCB8fCB4ID09PSArMSAvIDAgfHwgeCA9PT0gLTEgLyAwIHx8XG4gICAgICB5ID09PSAwIHx8IHkgIT09IHkgfHwgeSA9PT0gKzEgLyAwIHx8IHkgPT09IC0xIC8gMCkge1xuICAgIHJldHVybiB4ICogeSArIHo7XG4gIH1cbiAgaWYgKHogPT09IDApIHtcbiAgICByZXR1cm4geCAqIHk7XG4gIH1cbiAgaWYgKHogIT09IHogfHwgeiA9PT0gKzEgLyAwIHx8IHogPT09IC0xIC8gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHNjYWxlID0gMTtcbiAgd2hpbGUgKE1hdGguYWJzKHgpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeCAqPSBCO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh5KSA+IEEpIHtcbiAgICBzY2FsZSAqPSBBO1xuICAgIHkgKj0gQjtcbiAgfVxuICBpZiAoc2NhbGUgPT09IDEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICogc2NhbGU7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHgpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeCAqPSBBO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh5KSA8IEIpIHtcbiAgICBzY2FsZSAqPSBCO1xuICAgIHkgKj0gQTtcbiAgfVxuICBpZiAoc2NhbGUgPT09IDApIHtcbiAgICByZXR1cm4gejtcbiAgfVxuXG4gIHZhciB4cyA9IHg7XG4gIHZhciB5cyA9IHk7XG4gIHZhciB6cyA9IHogLyBzY2FsZTtcblxuICBpZiAoTWF0aC5hYnMoenMpID4gTWF0aC5hYnMoeHMgKiB5cykgKiA0IC8gRVBTSUxPTikge1xuICAgIHJldHVybiB6O1xuICB9XG4gIGlmIChNYXRoLmFicyh6cykgPCBNYXRoLmFicyh4cyAqIHlzKSAqIEVQU0lMT04gLyA0ICogRVBTSUxPTiAvIDQpIHtcbiAgICB6cyA9ICh6IDwgMCA/IC0xIDogKzEpICogTUlOX1ZBTFVFO1xuICB9XG5cbiAgdmFyIHh5ID0gbXVsdGlwbHkoeHMsIHlzKTtcbiAgdmFyIHMgPSBhZGQoeHkucCwgenMpO1xuICB2YXIgdSA9IGFkZCh4eS5lLCBzLmUpO1xuICB2YXIgaSA9IGFkZChzLnMsIHUucyk7XG5cbiAgdmFyIGYgPSBpLnMgKyBhZGp1c3QoaS5lLCB1LmUpO1xuICBpZiAoZiA9PT0gMCkge1xuICAgIHJldHVybiBmO1xuICB9XG5cbiAgdmFyIGZzID0gZiAqIHNjYWxlO1xuICBpZiAoTWF0aC5hYnMoZnMpID4gTUlOX1ZBTFVFKSB7XG4gICAgcmV0dXJuIGZzO1xuICB9XG5cbiAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSB3YXMgZXh0cmEgcm91bmRpbmcgZm9yIGEgZGVub3JtYWxpemVkIHZhbHVlLlxuICByZXR1cm4gZnMgKyBhZGp1c3QoZiAtIGZzIC8gc2NhbGUsIGkuZSkgKiBzY2FsZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9mbG9hdCAoZm10LCB4KSB7XG4gIGZ1bmN0aW9uIHRvRml4ZWQoeCxkcCkge1xuICAgIGlmIChNYXRoLmFicyh4KSA8IDEuMCkge1xuICAgICAgcmV0dXJuIHgudG9GaXhlZChkcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gcGFyc2VJbnQoeC50b1N0cmluZygpLnNwbGl0KCcrJylbMV0pO1xuICAgICAgaWYgKGUgPiAyMCkge1xuICAgICAgICBlIC09IDIwO1xuICAgICAgICB4IC89IE1hdGgucG93KDEwLGUpO1xuICAgICAgICB4ICs9IChuZXcgQXJyYXkoZSsxKSkuam9pbignMCcpO1xuICAgICAgICBpZihkcCA+IDApIHtcbiAgICAgICAgICB4ID0geCArICcuJyArIChuZXcgQXJyYXkoZHArMSkpLmpvaW4oJzAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuIHgudG9GaXhlZChkcClcbiAgICB9XG4gIH1cbiAgdmFyIHMsIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICB2YXIgcHJlYyA9IChmLnByZWMgPCAwKT82OmYucHJlYztcbiAgaWYgKHggPCAwIHx8ICh4ID09IDAgJiYgMS94ID09IC1JbmZpbml0eSkpIHsgZi5zaWduID0gLTE7IHggPSAteDsgfVxuICBpZiAoaXNOYU4oeCkpIHsgcyA9IFwibmFuXCI7IGYuZmlsbGVyID0gJyAnOyB9XG4gIGVsc2UgaWYgKCFpc0Zpbml0ZSh4KSkgeyBzID0gXCJpbmZcIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZVxuICAgIHN3aXRjaCAoZi5jb252KSB7XG4gICAgY2FzZSAnZSc6XG4gICAgICB2YXIgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjKTtcbiAgICAgIC8vIGV4cG9uZW50IHNob3VsZCBiZSBhdCBsZWFzdCB0d28gZGlnaXRzXG4gICAgICB2YXIgaSA9IHMubGVuZ3RoO1xuICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PSAnZScpXG4gICAgICAgIHMgPSBzLnNsaWNlICgwLCBpIC0gMSkgKyAnMCcgKyBzLnNsaWNlIChpIC0gMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmJzpcbiAgICAgIHMgPSB0b0ZpeGVkKHgsIHByZWMpOyBicmVhaztcbiAgICBjYXNlICdnJzpcbiAgICAgIHByZWMgPSBwcmVjP3ByZWM6MTtcbiAgICAgIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyAtIDEpO1xuICAgICAgdmFyIGogPSBzLmluZGV4T2YoJ2UnKTtcbiAgICAgIHZhciBleHAgPSArcy5zbGljZShqICsgMSk7XG4gICAgICBpZiAoZXhwIDwgLTQgfHwgeCA+PSAxZTIxIHx8IHgudG9GaXhlZCgwKS5sZW5ndGggPiBwcmVjKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgdmFyIGkgPSBqIC0gMTsgd2hpbGUgKHMuY2hhckF0KGkpID09ICcwJykgaS0tO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgKyAxKSArIHMuc2xpY2Uoaik7XG4gICAgICAgIGkgPSBzLmxlbmd0aDtcbiAgICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PSAnZScpXG4gICAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcCA9IHByZWM7XG4gICAgICAgIGlmIChleHAgPCAwKSB7IHAgLT0gZXhwICsgMTsgcyA9IHgudG9GaXhlZChwKTsgfVxuICAgICAgICBlbHNlIHdoaWxlIChzID0geC50b0ZpeGVkKHApLCBzLmxlbmd0aCA+IHByZWMgKyAxKSBwLS07XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICAgIHZhciBpID0gcy5sZW5ndGggLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09ICcuJykgaS0tO1xuICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9zdHJpbmcocykge1xuICB2YXIgcmVzO1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKVxuICByZXMgPSArcztcbiAgaWYgKChzLmxlbmd0aCA+IDApICYmIChyZXMgPT09IHJlcykpIHJldHVybiByZXM7XG4gIHMgPSBzLnJlcGxhY2UoL18vZyxcIlwiKTtcbiAgcmVzID0gK3M7XG4gIGlmICgoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgfHwgL15bKy1dP25hbiQvaS50ZXN0KHMpKSByZXR1cm4gcmVzO1xuICB2YXIgbSA9IC9eICooWystXT8pMHgoWzAtOWEtZl0rKVxcLj8oWzAtOWEtZl0qKShwKFsrLV0/WzAtOV0rKSk/L2kuZXhlYyhzKTtcbiAgLy8gICAgICAgICAgMSAgICAgICAgMiAgICAgICAgICAgICAzICAgICAgICAgICA1XG4gIGlmKG0pe1xuICAgIHZhciBtMyA9IG1bM10ucmVwbGFjZSgvMCskLywnJyk7XG4gICAgdmFyIG1hbnRpc3NhID0gcGFyc2VJbnQobVsxXSArIG1bMl0gKyBtMywgMTYpO1xuICAgIHZhciBleHBvbmVudCA9IChtWzVdfDApIC0gNCptMy5sZW5ndGg7XG4gICAgcmVzID0gbWFudGlzc2EgKiBNYXRoLnBvdygyLCBleHBvbmVudCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZigvXlxcKz9pbmYoaW5pdHkpPyQvaS50ZXN0KHMpKSByZXR1cm4gSW5maW5pdHk7XG4gIGlmKC9eLWluZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiAtSW5maW5pdHk7XG4gIGNhbWxfZmFpbHdpdGgoXCJmbG9hdF9vZl9zdHJpbmdcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkgKHgsIHkpIHtcbiAgaWYoIHkuZnVuICkgeyB4LmZ1biA9IHkuZnVuOyByZXR1cm4gMDsgfVxuICBpZiggdHlwZW9mIHk9PT1cImZ1bmN0aW9uXCIgKSB7IHguZnVuID0geTsgcmV0dXJuIDA7IH1cbiAgdmFyIGkgPSB5Lmxlbmd0aDsgd2hpbGUgKGktLSkgeFtpXSA9IHlbaV07IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FsbG9jX2R1bW15X2luZml4XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuXG5mdW5jdGlvbiBjYW1sX2FsbG9jX2R1bW15X2luZml4ICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYgKHgpIHsgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZi5mdW4sIFt4XSkgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9pc19ibG9jayBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9pc19ibG9jayAoeCkgeyByZXR1cm4gKyh4IGluc3RhbmNlb2YgQXJyYXkpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdGFnICh4KSB7XG4gIGlmICgoeCBpbnN0YW5jZW9mIEFycmF5KSAmJiB4WzBdID09ICh4WzBdID4+PiAwKSlcbiAgICByZXR1cm4geFswXVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmICgoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fCB0eXBlb2YgeCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuIDI0N1xuICBlbHNlIGlmICh4ICYmIHguY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDI1NVxuICBlbHNlXG4gICAgcmV0dXJuIDEwMDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3RhZyAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9zZXRfdGFnICh4LCB0YWcpIHsgeFswXSA9IHRhZzsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2Jsb2NrIGNvbnN0IChjb25zdCxjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2Jsb2NrICh0YWcsIHNpemUpIHtcbiAgdmFyIG8gPSBuZXcgQXJyYXkoc2l6ZSsxKTtcbiAgb1swXT10YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSB0YWc7XG4gIGZvcih2YXIgaSA9IDE7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2R1cCBtdXRhYmxlIChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9vYmpfZHVwICh4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbDsgaSsrICkgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial90cnVuY2F0ZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfb2JqX3RydW5jYXRlICh4LCBzKSB7XG4gIGlmIChzPD0wIHx8IHMgKyAxID4geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIk9iai50cnVuY2F0ZVwiKTtcbiAgaWYgKHgubGVuZ3RoICE9IHMgKyAxKSB4Lmxlbmd0aCA9IHMgKyAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfbWFrZV9mb3J3YXJkXG5mdW5jdGlvbiBjYW1sX29ial9tYWtlX2ZvcndhcmQgKGIsdikge1xuICBiWzBdPTI1MDtcbiAgYlsxXT12O1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwXG5mdW5jdGlvbiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwKHgsaSxvbGQsbil7XG4gIGlmKHhbaSsxXSA9PSBvbGQpIHtcbiAgICB4W2krMV0gPSBuO1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX3NoYXJlZFxuZnVuY3Rpb24gY2FtbF9vYmpfaXNfc2hhcmVkKHgpe1xuICByZXR1cm4gMVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkIGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9sYXp5X21ha2VfZm9yd2FyZCAodikgeyByZXR1cm4gWzI1MCwgdl07IH1cblxuLy8vLy8vLy8vLy8vLyBDYW1saW50ZXJuYWxPT1xuLy9Qcm92aWRlczogY2FtbF9nZXRfcHVibGljX21ldGhvZCBjb25zdFxudmFyIGNhbWxfbWV0aG9kX2NhY2hlID0gW107XG5mdW5jdGlvbiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIChvYmosIHRhZywgY2FjaGVpZCkge1xuICB2YXIgbWV0aHMgPSBvYmpbMV07XG4gIHZhciBvZnMgPSBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXTtcbiAgaWYgKG9mcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJheSBpcyBub3Qgc3BhcnNlXG4gICAgZm9yICh2YXIgaSA9IGNhbWxfbWV0aG9kX2NhY2hlLmxlbmd0aDsgaSA8IGNhY2hlaWQ7IGkrKylcbiAgICAgIGNhbWxfbWV0aG9kX2NhY2hlW2ldID0gMDtcbiAgfSBlbHNlIGlmIChtZXRoc1tvZnNdID09PSB0YWcpIHtcbiAgICByZXR1cm4gbWV0aHNbb2ZzIC0gMV07XG4gIH1cbiAgdmFyIGxpID0gMywgaGkgPSBtZXRoc1sxXSAqIDIgKyAxLCBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkraGkpID4+IDEpIHwgMTtcbiAgICBpZiAodGFnIDwgbWV0aHNbbWkrMV0pIGhpID0gbWktMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSArIDE7XG4gIC8qIHJldHVybiAwIGlmIHRhZyBpcyBub3QgdGhlcmUgKi9cbiAgcmV0dXJuICh0YWcgPT0gbWV0aHNbbGkrMV0gPyBtZXRoc1tsaV0gOiAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQgKGIpIHtcbiAgYlsyXT1jYW1sX29vX2xhc3RfaWQrKztcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnJlc2hfb29faWQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9mcmVzaF9vb19pZCgpIHtcbiAgcmV0dXJuIGNhbWxfb29fbGFzdF9pZCsrO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3Jhd19maWVsZChvLGkpIHsgcmV0dXJuIG9baSsxXSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF9yYXdfZmllbGQobyxpLHYpIHsgcmV0dXJuIG9baSsxXSA9IHYgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9yZWFjaGFibGVfd29yZHNcbmZ1bmN0aW9uIGNhbWxfb2JqX3JlYWNoYWJsZV93b3JkcyhvKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2FkZF9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfb2JqX2FkZF9vZmZzZXQodixvZmZzZXQpIHtcbiAgY2FtbF9mYWlsd2l0aChcIk9iai5hZGRfb2Zmc2V0IGlzIG5vdCBzdXBwb3J0ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfb2JqX3VwZGF0ZV90YWcoYixvLG4pIHtcbiAgICBpZihiWzBdPT1vKSB7IGJbMF0gPSBuOyByZXR1cm4gMSB9XG4gICAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3VwZGF0ZV90b19mb3JjaW5nXG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmcobykge1xuICBpZiAoKG8gaW5zdGFuY2VvZiBBcnJheSkgJiYgb1swXSA9PSAob1swXSA+Pj4gMCkgJiZcbiAgICAgIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ2LCAyNDQpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkXG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG4gIGZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZChvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywyNDQsMjUwKTtcbiAgcmV0dXJuIDA7IC8vIHVuaXRcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3Jlc2V0X3RvX2xhenkobykge1xuICBjYW1sX29ial91cGRhdGVfdGFnKG8sMjQ0LDI0Nik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVhZF9yZXN1bHRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3JlYWRfcmVzdWx0KG8pIHtcbiAgcmV0dXJuIChjYW1sX29ial90YWcobykgPT0gMjUwKT9vWzFdOm87XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG4vL1ZlcnNpb246IDwgNVxuZnVuY3Rpb24gY2FtbF9pc19jb250aW51YXRpb25fdGFnKHQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gKHQgPT0gMjQ1KSA/IDEgOiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gTWxJbnQ2NCAobG8sbWksaGkpIHtcbiAgdGhpcy5sbyA9IGxvICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSBtaSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG59XG5NbEludDY0LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IFwiX2pcIlxuTWxJbnQ2NC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8sdGhpcy5taSx0aGlzLmhpKTtcbn1cblxuTWxJbnQ2NC5wcm90b3R5cGUudWNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICBpZiAodGhpcy5oaSA+IHguaGkpIHJldHVybiAxO1xuICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICB2YXIgeGhpID0geC5oaSA8PCAxNjtcbiAgaWYgKGhpID4geGhpKSByZXR1cm4gMTtcbiAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLm1pID4geC5taSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICBpZiAodGhpcy5sbyA8IHgubG8pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsbyA9IC0gdGhpcy5sbztcbiAgdmFyIG1pID0gLSB0aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gLSB0aGlzLmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyArIHgubG87XG4gIHZhciBtaSA9IHRoaXMubWkgKyB4Lm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvIC0geC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpIC0geC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICB2YXIgbWkgPSAoKGxvICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLm1pICogeC5sbyArIHRoaXMubG8gKiB4Lm1pO1xuICB2YXIgaGkgPSAoKG1pICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLmhpICogeC5sbyArIHRoaXMubWkgKiB4Lm1pICsgdGhpcy5sbyAqIHguaGk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICh0aGlzLmxvfHRoaXMubWl8dGhpcy5oaSkgPT0gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzTmVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMuaGkgPDwgMTYpIDwgMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvICYgeC5sbywgdGhpcy5taSAmIHgubWksIHRoaXMuaGkgJiB4LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG98eC5sbywgdGhpcy5taXx4Lm1pLCB0aGlzLmhpfHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG9eeC5sbywgdGhpcy5taV54Lm1pLCB0aGlzLmhpXnguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfbGVmdCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICBpZiAocyA8IDI0KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICh0aGlzLmxvIDw8IHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCBzKSB8ICh0aGlzLmxvID4+ICgyNCAtIHMpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpKTtcbiAgfVxuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG8gPDwgKHMgLSAyNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCAocyAtIDI0KSkgfCAodGhpcy5sbyA+PiAoNDggLSBzKSkpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSlcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X3JpZ2h0X3Vuc2lnbmVkID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAodGhpcy5oaSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5oaSA+PiBzKSk7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IChzIC0gMjQpKSxcbiAgICAgIDApO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgdmFyIGggPSAodGhpcy5oaSA8PCAxNikgPj4gMTY7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAoaCA8PCAoMjQgLSBzKSksXG4gICAgICAoKHRoaXMuaGkgPDwgMTYpID4+IHMpID4+PiAxNik7XG4gIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5taSA+PiAocyAtIDI0KSkgfCAodGhpcy5oaSA8PCAoNDggLSBzKSksXG4gICAgICAodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAyNCkgPj4gMTYsXG4gICAgICBzaWduICYgMHhmZmZmKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0ICgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNsMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oaSA9ICh0aGlzLmhpIDw8IDEpIHwgKHRoaXMubWkgPj4gMjMpO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pIDw8IDEpIHwgKHRoaXMubG8gPj4gMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxzcjEgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubG8gPSAoKHRoaXMubG8gPj4+IDEpIHwgKHRoaXMubWkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pID4+PiAxKSB8ICh0aGlzLmhpIDw8IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG59XG5NbEludDY0LnByb3RvdHlwZS51ZGl2bW9kID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG9mZnNldCA9IDA7XG4gIHZhciBtb2R1bHVzID0gdGhpcy5jb3B5KCk7XG4gIHZhciBkaXZpc29yID0geC5jb3B5KCk7XG4gIHZhciBxdW90aWVudCA9IG5ldyBNbEludDY0KDAsMCwwKTtcbiAgd2hpbGUgKG1vZHVsdXMudWNvbXBhcmUoZGl2aXNvcikgPiAwKSB7XG4gICAgb2Zmc2V0Kys7XG4gICAgZGl2aXNvci5sc2wxKCk7XG4gIH1cbiAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgb2Zmc2V0IC0tO1xuICAgIHF1b3RpZW50LmxzbDEoKTtcbiAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICBxdW90aWVudC5sbyArKztcbiAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICB9XG4gICAgZGl2aXNvci5sc3IxKCk7XG4gIH1cbiAgcmV0dXJuIHsgcXVvdGllbnQgOiBxdW90aWVudCwgbW9kdWx1cyA6IG1vZHVsdXMgfTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmRpdiA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGkgXiB5LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHEgPSB4LnVkaXZtb2QoeSkucXVvdGllbnQ7XG4gIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgcmV0dXJuIHE7XG59XG5NbEludDY0LnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiAoeSlcbntcbiAgdmFyIHggPSB0aGlzO1xuICBpZiAoeS5pc1plcm8oKSkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgdmFyIHNpZ24gPSB4LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgaWYgKHNpZ24gJiAweDgwMDApIHIgPSByLm5lZygpO1xuICByZXR1cm4gcjtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvSW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvRmxvYXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMuaGkgPDwgMTYpICogTWF0aC5wb3coMiwgMzIpICsgdGhpcy5taSAqIE1hdGgucG93KDIsIDI0KSkgKyB0aGlzLmxvO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFt0aGlzLmhpID4+IDgsXG4gICAgICAgICAgdGhpcy5oaSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICAgICAodGhpcy5taSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICAgICAodGhpcy5sbyA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyAmIDB4ZmZdO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubG8zMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubG8gfCAoKHRoaXMubWkgJiAweGZmKSA8PCAyNCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5oaTMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdWx0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3VsdCh4LHkpIHsgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY29tcGFyZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jb21wYXJlKHgseSwgdG90YWwpIHsgcmV0dXJuIHguY29tcGFyZSh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbmVnIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X25lZyAoeCkgeyByZXR1cm4geC5uZWcoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCAoeCwgeSkgeyByZXR1cm4geC5hZGQoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3N1YiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zdWIgKHgsIHkpIHsgcmV0dXJuIHguc3ViKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tdWwgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2ludDY0X211bCh4LHkpIHsgcmV0dXJuIHgubXVsKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc196ZXJvIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX3plcm8oeCkgeyByZXR1cm4gK3guaXNaZXJvKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7IHJldHVybiAreC5pc05lZygpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYW5kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FuZCAoeCwgeSkgeyByZXR1cm4geC5hbmQoeSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vciAoeCwgeSkgeyByZXR1cm4geC5vcih5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3hvciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF94b3IgKHgsIHkpIHsgcmV0dXJuIHgueG9yKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfbGVmdChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHRfdW5zaWduZWQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0ICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9kaXYgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZGl2ICh4LCB5KSB7IHJldHVybiB4LmRpdih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCAoeCwgeSkgeyByZXR1cm4geC5tb2QoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2ludDMyIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh4ICYgMHhmZmZmZmYsICh4ID4+IDI0KSAmIDB4ZmZmZmZmLCAoeCA+PiAzMSkgJiAweGZmZmYpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9faW50MzIgKHgpIHsgcmV0dXJuIHgudG9JbnQoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQgKHgpIHsgcmV0dXJuIHgudG9GbG9hdCAoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0ICh4KSB7XG4gIGlmICh4IDwgMCkgeCA9IE1hdGguY2VpbCh4KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIHggJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCkgJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZm9ybWF0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdG9faW50MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfemVybywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zvcm1hdCAoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7IHggPSBjYW1sX2ludDY0X25lZyh4KTtcbiAgfVxuICB2YXIgYnVmZmVyID0gXCJcIjtcbiAgdmFyIHdiYXNlID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihmLmJhc2UpO1xuICB2YXIgY3Z0YmwgPSBcIjAxMjM0NTY3ODlhYmNkZWZcIjtcbiAgZG8ge1xuICAgIHZhciBwID0geC51ZGl2bW9kKHdiYXNlKTtcbiAgICB4ID0gcC5xdW90aWVudDtcbiAgICBidWZmZXIgPSBjdnRibC5jaGFyQXQoY2FtbF9pbnQ2NF90b19pbnQzMihwLm1vZHVsdXMpKSArIGJ1ZmZlcjtcbiAgfSB3aGlsZSAoISBjYW1sX2ludDY0X2lzX3plcm8oeCkpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9ICcgJztcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBidWZmZXI7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgYnVmZmVyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSwgY2FtbF9mYWlsd2l0aCwgY2FtbF9wYXJzZV9kaWdpdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF91bHRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X211bCwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCxjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKTtcbiAgdmFyIGkgPSByWzBdLCBzaWduID0gclsxXSwgYmFzZSA9IHJbMl07XG4gIHZhciBiYXNlNjQgPSBjYW1sX2ludDY0X29mX2ludDMyKGJhc2UpO1xuICB2YXIgdGhyZXNob2xkID1cbiAgICAgIG5ldyBNbEludDY0KDB4ZmZmZmZmLCAweGZmZmZmZmYsIDB4ZmZmZikudWRpdm1vZChiYXNlNjQpLnF1b3RpZW50O1xuICB2YXIgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gbXVsdGlwbGljYXRpb24gYmFzZSAqIHJlcyAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdCh0aHJlc2hvbGQsIHJlcykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKGJhc2UgPT0gMTAgJiYgY2FtbF9pbnQ2NF91bHQobmV3IE1sSW50NjQoMCwgMCwgMHg4MDAwKSwgcmVzKSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKHNpZ24gPCAwKSByZXMgPSBjYW1sX2ludDY0X25lZyhyZXMpO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkobG8sIG1pLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKVxufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpKGxvLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgbG8gJiAweGZmZmZmZixcbiAgICAoKGxvID4+PiAyNCkgJiAweGZmKSB8ICgoaGkgJiAweGZmZmYpIDw8IDgpLFxuICAgIChoaSA+Pj4gMTYpICYgMHhmZmZmKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpeyByZXR1cm4gdi5sbzMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KXsgcmV0dXJuIHYuaGkzMigpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChhWzddIDw8IDAgfCAoYVs2XSA8PCA4KSB8IChhWzVdIDw8IDE2KSxcbiAgICAgICAgICAgICAgICAgICAgIGFbNF0gPDwgMCB8IChhWzNdIDw8IDgpIHwgKGFbMl0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVsxXSA8PCAwIHwgKGFbMF0gPDwgOCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19ieXRlcyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19ieXRlcyh4KSB7IHJldHVybiB4LnRvQXJyYXkoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpe1xuICByZXR1cm4gKHYubG8zMigpKSBeICh2LmhpMzIoKSlcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkLCBBbmR5IFJheVxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuLy9cbi8vIEJpZ2FycmF5LlxuLy9cbi8vIC0gYWxsIGJpZ2FycmF5IHR5cGVzIGluY2x1ZGluZyBJbnQ2NCBhbmQgQ29tcGxleC5cbi8vIC0gZm9ydHJhbiArIGMgbGF5b3V0c1xuLy8gLSBzdWIvc2xpY2UvcmVzaGFwZVxuLy8gLSByZXRhaW4gZmFzdCBwYXRoIGZvciAxZCBhcnJheSBhY2Nlc3NcblxuLy9Qcm92aWRlczogY2FtbF9iYV9pbml0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2JhX2luaXQoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X3NpemUoZGltcykge1xuICB2YXIgbl9kaW1zID0gZGltcy5sZW5ndGg7XG4gIHZhciBzaXplID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuX2RpbXM7IGkrKykge1xuICAgIGlmIChkaW1zW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmNyZWF0ZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIHNpemUgPSBzaXplICogZGltc1tpXTtcbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKXtcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDc6IGNhc2UgMTA6IGNhc2UgMTE6IHJldHVybiAyO1xuICBkZWZhdWx0OiByZXR1cm4gMTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpe1xuICB2YXIgdmlldztcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDA6ICB2aWV3ID0gRmxvYXQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxOiAgdmlldyA9IEZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMjogIHZpZXcgPSBJbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDM6ICB2aWV3ID0gVWludDhBcnJheTsgYnJlYWs7XG4gIGNhc2UgNDogIHZpZXcgPSBJbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA1OiAgdmlldyA9IFVpbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA2OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDc6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgODogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA5OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDEwOiB2aWV3ID0gRmxvYXQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxMTogdmlldyA9IEZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTI6IHZpZXcgPSBVaW50OEFycmF5OyBicmVhaztcbiAgfVxuICBpZiAoIXZpZXcpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmNyZWF0ZTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgdmFyIGRhdGEgPSBuZXcgdmlldyhzaXplICogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSk7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1ZlcnNpb246IDwgNC4xMVxudmFyIGNhbWxfYmFfY3VzdG9tX25hbWUgPSBcIl9iaWdhcnJheVwiXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPj0gNC4xMVxudmFyIGNhbWxfYmFfY3VzdG9tX25hbWUgPSBcIl9iaWdhcnIwMlwiXG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpLCBjYW1sX2ludDY0X2hpMzIsIGNhbWxfaW50NjRfbG8zMlxuZnVuY3Rpb24gTWxfQmlnYXJyYXkgKGtpbmQsIGxheW91dCwgZGltcywgYnVmZmVyKSB7XG5cbiAgdGhpcy5raW5kICAgPSBraW5kIDtcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMuZGltcyAgID0gZGltcztcbiAgdGhpcy5kYXRhID0gYnVmZmVyO1xufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY2FtbF9jdXN0b20gPSBjYW1sX2JhX2N1c3RvbV9uYW1lO1xuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKGFyZykge1xuICB2YXIgb2ZzID0gMDtcbiAgaWYodHlwZW9mIGFyZyA9PT0gXCJudW1iZXJcIikgYXJnID0gW2FyZ107XG4gIGlmICghIChhcmcgaW5zdGFuY2VvZiBBcnJheSkpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImJpZ2FycmF5LmpzOiBpbnZhbGlkIG9mZnNldFwiKTtcbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYXJnLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5nZXQvc2V0OiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIGlmKHRoaXMubGF5b3V0ID09IDAgLyogY19sYXlvdXQgKi8pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFyZ1tpXSA8IDAgfHwgYXJnW2ldID49IHRoaXMuZGltc1tpXSlcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyBhcmdbaV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmRpbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChhcmdbaV0gPCAxIHx8IGFyZ1tpXSA+IHRoaXMuZGltc1tpXSl7XG4gICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIG9mcyA9IChvZnMgKiB0aGlzLmRpbXNbaV0pICsgKGFyZ1tpXSAtIDEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2ZzO1xufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGwgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBoID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobCxoKTtcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciByID0gdGhpcy5kYXRhW29mcyAqIDIgKyAwXTtcbiAgICB2YXIgaSA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgcmV0dXJuIFsyNTQsIHIsIGldO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiB0aGlzLmRhdGFbb2ZzXVxuICB9XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IGNhbWxfaW50NjRfaGkzMih2KTtcbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSB2WzFdO1xuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSB2WzJdO1xuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIHRoaXMuZGF0YVtvZnNdID0gdjtcbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMFxufVxuXG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHYpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHZhciBhID0gY2FtbF9pbnQ2NF9sbzMyKHYpO1xuICAgIHZhciBiID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGlmKGEgPT0gYil7XG4gICAgICB0aGlzLmRhdGEuZmlsbChhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZGF0YVtpXSA9IChpJTIgPT0gMCkgPyBhIDogYjtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB2YXIgaW0gPSB2WzFdO1xuICAgIHZhciByZSA9IHZbMl07XG4gICAgaWYoaW0gPT0gcmUpe1xuICAgICAgdGhpcy5kYXRhLmZpbGwoaW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGltIDogcmU7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIHRoaXMuZGF0YS5maWxsKHYpO1xuICAgIGJyZWFrO1xuICB9XG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoYiwgdG90YWwpIHtcbiAgaWYgKHRoaXMubGF5b3V0ICE9IGIubGF5b3V0IHx8IHRoaXMua2luZCAhPSBiLmtpbmQpIHtcbiAgICB2YXIgazEgPSB0aGlzLmtpbmQgfCAodGhpcy5sYXlvdXQgPDwgOCk7XG4gICAgdmFyIGsyID0gICAgYi5raW5kIHwgKGIubGF5b3V0IDw8IDgpO1xuICAgIHJldHVybiBrMiAtIGsxO1xuICB9XG4gIGlmICh0aGlzLmRpbXMubGVuZ3RoICE9IGIuZGltcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYi5kaW1zLmxlbmd0aCAtIHRoaXMuZGltcy5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKHRoaXMuZGltc1tpXSAhPSBiLmRpbXNbaV0pXG4gICAgICByZXR1cm4gKHRoaXMuZGltc1tpXSA8IGIuZGltc1tpXSkgPyAtMSA6IDE7XG4gIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICBjYXNlIDEwOlxuICBjYXNlIDExOlxuICAgIC8vIEZsb2F0c1xuICAgIHZhciB4LCB5O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB4ID0gdGhpcy5kYXRhW2ldO1xuICAgICAgeSA9IGIuZGF0YVtpXTtcbiAgICAgIGlmICh4IDwgeSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHggPiB5KVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmICh4ICE9IHkpIHtcbiAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgaWYgKHggPT0geCkgcmV0dXJuIDE7XG4gICAgICAgIGlmICh5ID09IHkpIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSs9Mikge1xuICAgICAgLy8gQ2hlY2sgaGlnaGVzdCBiaXRzIGZpcnN0XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPCBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHRoaXMuZGF0YVtpKzFdID4gYi5kYXRhW2krMV0pXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApIDwgKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICgodGhpcy5kYXRhW2ldID4+PiAwKSA+IChiLmRhdGFbaV0gPj4+IDApKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMjpcbiAgY2FzZSAzOlxuICBjYXNlIDQ6XG4gIGNhc2UgNTpcbiAgY2FzZSA2OlxuICBjYXNlIDg6XG4gIGNhc2UgOTpcbiAgY2FzZSAxMjpcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZGF0YVtpXSA8IGIuZGF0YVtpXSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHRoaXMuZGF0YVtpXSA+IGIuZGF0YVtpXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBNbF9CaWdhcnJheV9jXzFfMVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gTWxfQmlnYXJyYXlfY18xXzEoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcbiAgdGhpcy5raW5kICAgPSBraW5kIDtcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMuZGltcyAgID0gZGltcztcbiAgdGhpcy5kYXRhICAgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZSA9IG5ldyBNbF9CaWdhcnJheSgpXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKGFyZykge1xuICBpZih0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKXtcbiAgICBpZigoYXJnIGluc3RhbmNlb2YgQXJyYXkpICYmIGFyZy5sZW5ndGggPT0gMSlcbiAgICAgIGFyZyA9IGFyZ1swXTtcbiAgICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIk1sX0JpZ2FycmF5X2NfMV8xLm9mZnNldFwiKTtcbiAgfVxuICBpZiAoYXJnIDwgMCB8fCBhcmcgPj0gdGhpcy5kaW1zWzBdKVxuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFyZztcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvZnMpIHtcbiAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG9mcyx2KSB7XG4gIHRoaXMuZGF0YVtvZnNdID0gdjtcbiAgcmV0dXJuIDBcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jb21wYXJlXG5mdW5jdGlvbiBjYW1sX2JhX2NvbXBhcmUoYSxiLHRvdGFsKXtcbiAgcmV0dXJuIGEuY29tcGFyZShiLHRvdGFsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBNbF9CaWdhcnJheV9jXzFfMSwgY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKXtcbiAgdmFyIHNpemVfcGVyX2VsZW1lbnQgPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpO1xuICBpZihjYW1sX2JhX2dldF9zaXplKGRpbXMpICogc2l6ZV9wZXJfZWxlbWVudCAhPSBkYXRhLmxlbmd0aCkge1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImxlbmd0aCBkb2Vzbid0IG1hdGNoIGRpbXNcIik7XG4gIH1cbiAgaWYobGF5b3V0ID09IDAgJiYgLy8gY19sYXlvdXRcbiAgICAgZGltcy5sZW5ndGggPT0gMSAmJiAvLyBBcnJheTFcbiAgICAgc2l6ZV9wZXJfZWxlbWVudCA9PSAxKSAvLyAxLXRvLTEgbWFwcGluZ1xuICAgIHJldHVybiBuZXcgTWxfQmlnYXJyYXlfY18xXzEoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuXG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlKGtpbmQsIGxheW91dCwgZGltc19tbCkge1xuICB2YXIgZGltcyA9IGNhbWxfanNfZnJvbV9hcnJheShkaW1zX21sKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfY2hhbmdlX2xheW91dChiYSwgbGF5b3V0KSB7XG4gIGlmKGJhLmxheW91dCA9PSBsYXlvdXQpIHJldHVybiBiYTtcbiAgdmFyIG5ld19kaW1zID0gW11cbiAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIG5ld19kaW1zW2ldID0gYmEuZGltc1tiYS5kaW1zLmxlbmd0aCAtIGkgLSAxXTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBsYXlvdXQsIG5ld19kaW1zLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kXG5mdW5jdGlvbiBjYW1sX2JhX2tpbmQoYmEpIHtcbiAgcmV0dXJuIGJhLmtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbGF5b3V0XG5mdW5jdGlvbiBjYW1sX2JhX2xheW91dChiYSkge1xuICByZXR1cm4gYmEubGF5b3V0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX251bV9kaW1zXG5mdW5jdGlvbiBjYW1sX2JhX251bV9kaW1zKGJhKSB7XG4gIHJldHVybiBiYS5kaW1zLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1cbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9kaW0oYmEsIGkpIHtcbiAgaWYgKGkgPCAwIHx8IGkgPj0gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuZGltXCIpO1xuICByZXR1cm4gYmEuZGltc1tpXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fMVxuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzEoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fMlxuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzIoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fM1xuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzMoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9nZW5lcmljKGJhLCBpKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKTtcbiAgcmV0dXJuIGJhLmdldChvZnMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDE2KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMSA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcyArIDEpO1xuICByZXR1cm4gKGIxIHwgKGIyIDw8IDgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQzMihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDMgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyswKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcysxKTtcbiAgdmFyIGIzID0gYmEuZ2V0KG9mcysyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyszKTtcbiAgcmV0dXJuICggKGIxIDw8IDApICB8XG4gICAgICAgICAgIChiMiA8PCA4KSAgfFxuICAgICAgICAgICAoYjMgPDwgMTYpIHxcbiAgICAgICAgICAgKGI0IDw8IDI0KSApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDY0KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgNyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICB2YXIgYjUgPSBiYS5nZXQob2ZzKzQpO1xuICB2YXIgYjYgPSBiYS5nZXQob2ZzKzUpO1xuICB2YXIgYjcgPSBiYS5nZXQob2ZzKzYpO1xuICB2YXIgYjggPSBiYS5nZXQob2ZzKzcpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbYjgsYjcsYjYsYjUsYjQsYjMsYjIsYjFdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMShiYSwgaTApIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoaTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMihiYSwgaTAsIGkxKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMV0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfM1xuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMyhiYSwgaTAsIGkxLCBpMikge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfZ2VuZXJpYyhiYSwgaSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSksIHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDE2KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMSA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzEsICh2ID4+PiA4KSAmIDB4ZmYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQzMihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDMgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYmEuc2V0KG9mcyswLCAgdiAgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzIsICh2ID4+PiAxNikgJiAweGZmKTtcbiAgYmEuc2V0KG9mcyszLCAodiA+Pj4gMjQpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDY0KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgNyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgdiA9IGNhbWxfaW50NjRfdG9fYnl0ZXModik7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCA4OyBpKyspIGJhLnNldChvZnMraSwgdls3LWldKVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMShiYSwgaTAsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChpMCksIHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8yXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8yKGJhLCBpMCwgaTEsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTFdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8zXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8zKGJhLCBpMCwgaTEsIGkyLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLGkxLGkyXSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9maWxsXG5mdW5jdGlvbiBjYW1sX2JhX2ZpbGwoYmEsIHYpIHtcbiAgYmEuZmlsbCh2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2JsaXQoc3JjLCBkc3QpIHtcbiAgaWYgKGRzdC5kaW1zLmxlbmd0aCAhPSBzcmMuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRzdC5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkc3QuZGltc1tpXSAhPSBzcmMuZGltc1tpXSlcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmJsaXQ6IGRpbWVuc2lvbiBtaXNtYXRjaFwiKTtcbiAgZHN0LmRhdGEuc2V0KHNyYy5kYXRhKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc3ViXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zdWIoYmEsIG9mcywgbGVuKSB7XG4gIHZhciBjaGFuZ2VkX2RpbTtcbiAgdmFyIG11bCA9IDE7XG4gIGlmIChiYS5sYXlvdXQgPT0gMCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIG11bCA9IG11bCAqIGJhLmRpbXNbaV07XG4gICAgY2hhbmdlZF9kaW0gPSAwO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGJhLmRpbXMubGVuZ3RoIC0gMSk7IGkrKylcbiAgICAgIG11bCA9IG11bCAqIGJhLmRpbXNbaV07XG4gICAgY2hhbmdlZF9kaW0gPSBiYS5kaW1zLmxlbmd0aCAtIDE7XG4gICAgb2ZzID0gb2ZzIC0gMTtcbiAgfVxuICBpZiAob2ZzIDwgMCB8fCBsZW4gPCAwIHx8IChvZnMgKyBsZW4pID4gYmEuZGltc1tjaGFuZ2VkX2RpbV0pe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnN1YjogYmFkIHN1Yi1hcnJheVwiKTtcbiAgfVxuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIG5ld19kaW1zW2ldID0gYmEuZGltc1tpXTtcbiAgbmV3X2RpbXNbY2hhbmdlZF9kaW1dID0gbGVuO1xuICBtdWwgKj0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBtdWwsIChvZnMgKyBsZW4pICogbXVsKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIG5ld19kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2xpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc2xpY2UoYmEsIHZpbmQpIHtcbiAgdmluZCA9IGNhbWxfanNfZnJvbV9hcnJheSh2aW5kKTtcbiAgdmFyIG51bV9pbmRzID0gdmluZC5sZW5ndGg7XG4gIHZhciBpbmRleCA9IFtdO1xuICB2YXIgc3ViX2RpbXMgPSBbXTtcbiAgdmFyIG9mcztcblxuICBpZiAobnVtX2luZHMgPiBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5zbGljZTogdG9vIG1hbnkgaW5kaWNlc1wiKTtcblxuICAvLyBDb21wdXRlIG9mZnNldCBhbmQgY2hlY2sgYm91bmRzXG4gIGlmIChiYS5sYXlvdXQgPT0gMCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2ldID0gdmluZFtpXTtcbiAgICBmb3IgKDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDA7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKG51bV9pbmRzKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzICsgaV0gPSB2aW5kW2ldO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSAxO1xuICAgIHN1Yl9kaW1zID0gYmEuZGltcy5zbGljZSgwLCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzKTtcbiAgfVxuICBvZnMgPSBiYS5vZmZzZXQoaW5kZXgpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoc3ViX2RpbXMpO1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogc2l6ZV9wZXJfZWxlbWVudCwgKG9mcyArIHNpemUpICogc2l6ZV9wZXJfZWxlbWVudCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBzdWJfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3Jlc2hhcGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbmZ1bmN0aW9uIGNhbWxfYmFfcmVzaGFwZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbmV3X2RpbSA9IFtdO1xuICB2YXIgbnVtX2RpbXMgPSB2aW5kLmxlbmd0aDtcblxuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgfVxuICB2YXIgbnVtX2VsdHMgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIHtcbiAgICBuZXdfZGltW2ldID0gdmluZFtpXTtcbiAgICBpZiAobmV3X2RpbVtpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgbnVtX2VsdHMgPSBudW1fZWx0cyAqIG5ld19kaW1baV07XG4gIH1cblxuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIC8vIENoZWNrIHRoYXQgc2l6ZXMgYWdyZWVcbiAgaWYgKG51bV9lbHRzICE9IHNpemUpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogc2l6ZSBtaXNtYXRjaFwiKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIG5ld19kaW0sIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NlcmlhbGl6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfYmFfc2VyaWFsaXplKHdyaXRlciwgYmEsIHN6KSB7XG4gIHdyaXRlci53cml0ZSgzMiwgYmEuZGltcy5sZW5ndGgpO1xuICB3cml0ZXIud3JpdGUoMzIsIChiYS5raW5kIHwgKGJhLmxheW91dCA8PCA4KSkpO1xuICBpZihiYS5jYW1sX2N1c3RvbSA9PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZihiYS5kaW1zW2ldIDwgMHhmZmZmKVxuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRpbXNbaV0pO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgMHhmZmZmKTtcbiAgICAgICAgd3JpdGVyLndyaXRlKDMyLCAwKTtcbiAgICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgd3JpdGVyLndyaXRlKDMyLGJhLmRpbXNbaV0pXG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSg4LCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHdyaXRlci53cml0ZSg4LDApO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6ICAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGJhLmdldChpKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGJhLmdldChpKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGIpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBqID0gYmEuZ2V0KGkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoalsxXSkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoalsyXSkpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBjb21wbGV4ID0gYmEuZ2V0KGkpO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzFdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsyXSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHN6WzBdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA0O1xuICBzelsxXSA9ICg0ICsgYmEuZGltcy5sZW5ndGgpICogODtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kZXNlcmlhbGl6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzLCBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG5mdW5jdGlvbiBjYW1sX2JhX2Rlc2VyaWFsaXplKHJlYWRlciwgc3osIG5hbWUpe1xuICB2YXIgbnVtX2RpbXMgPSByZWFkZXIucmVhZDMycygpO1xuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB3cm9uZyBudW1iZXIgb2YgYmlnYXJyYXkgZGltZW5zaW9uc1wiKTtcbiAgdmFyIHRhZyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIHZhciBraW5kID0gdGFnICYgMHhmZlxuICB2YXIgbGF5b3V0ID0gKHRhZyA+PiA4KSAmIDE7XG4gIHZhciBkaW1zID0gW11cbiAgaWYobmFtZSA9PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgICAgdmFyIHNpemVfZGltID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICAgIGlmKHNpemVfZGltID09IDB4ZmZmZil7XG4gICAgICAgIHZhciBzaXplX2RpbV9oaSA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIHZhciBzaXplX2RpbV9sbyA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIGlmKHNpemVfZGltX2hpICE9IDApXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBiaWdhcnJheSBkaW1lbnNpb24gb3ZlcmZsb3cgaW4gMzJiaXRcIik7XG4gICAgICAgIHNpemVfZGltID0gc2l6ZV9kaW1fbG87XG4gICAgICB9XG4gICAgICBkaW1zLnB1c2goc2l6ZV9kaW0pO1xuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykgZGltcy5wdXNoKHJlYWRlci5yZWFkMzJ1KCkpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoZGltcyk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpO1xuICB2YXIgYmEgPSBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICB2YXIgc2l4dHkgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgaWYoc2l4dHkpIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY2Fubm90IHJlYWQgYmlnYXJyYXkgd2l0aCA2NC1iaXQgT0NhbWwgaW50c1wiKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OiAvLyAoaW50NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGludDY0ID0gY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KTtcbiAgICAgIGJhLnNldChpLGludDY0KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBmID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksZik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIHZhciBmID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksZik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIHZhciByZSA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIHZhciBpbSA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIGJhLnNldChpLFsyNTQscmUsaW1dKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciByZSA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBpbSA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGJhLnNldChpLFsyNTQscmUsaW1dKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgfVxuICBzelswXSA9ICg0ICsgbnVtX2RpbXMpICogNDtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL0RlcHJlY2F0ZWRcbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2Zyb21cbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9mcm9tKGRhdGExLCBkYXRhMiwganN0eXAsIGtpbmQsIGxheW91dCwgZGltcyl7XG4gIGlmKGRhdGEyIHx8IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCkgPT0gMil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9jcmVhdGVfZnJvbTogdXNlIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcIik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGExKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9oYXNoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9oYXNoKGJhKXtcbiAgdmFyIG51bV9lbHRzID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgdmFyIGggPSAwO1xuICBzd2l0Y2goYmEua2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDI1NikgbnVtX2VsdHMgPSAyNTY7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDQgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTQpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgOCkgfCAoYmEuZGF0YVtpKzJdIDw8IDE2KSB8IChiYS5kYXRhW2krM10gPDwgMjQpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIHcgPSAwO1xuICAgIHN3aXRjaCAobnVtX2VsdHMgJiAzKSB7XG4gICAgY2FzZSAzOiB3ICA9IGJhLmRhdGFbaSsyXSA8PCAxNjsgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlIDI6IHcgfD0gYmEuZGF0YVtpKzFdIDw8IDg7ICAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMTogdyB8PSBiYS5kYXRhW2krMF07XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgaWYobnVtX2VsdHMgPiAxMjgpIG51bV9lbHRzID0gMTI4O1xuICAgIHZhciB3ID0gMCwgaSA9MDtcbiAgICBmb3IoaSA9IDA7IGkgKyAyIDw9IGJhLmRhdGEubGVuZ3RoOyBpKz0yKXtcbiAgICAgIHcgPSBiYS5kYXRhW2krMF0gfCAoYmEuZGF0YVtpKzFdIDw8IDE2KTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLHcpO1xuICAgIH1cbiAgICBpZiAoKG51bV9lbHRzICYgMSkgIT0gMClcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDc6ICAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBudW1fZWx0cyAqPSAyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBudW1fZWx0cyAqPTI7IC8qIGZhbGx0aHJvdWdoICovXG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV90b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJhKXtcbiAgcmV0dXJuIGJhLmRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSl7XG4gIHZhciBraW5kO1xuICBpZiAgICAgICh0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkga2luZCA9IDA7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpIGtpbmQgPSAyO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSBraW5kID0gNDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkga2luZCA9IDU7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgcmV0dXJuIGtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGtpbmQgPSBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpO1xuICB2YXIgdGEgPVxuICAgICAgLyogTmVlZGVkIHRvIGF2b2lkIHVuc2lnbmVkIHNldHRlcnMgb3ZlcmZsb3dpbmdcbiAgICAgICAgIHRoZSByYW5nZSBvZiBPQ2FtbCBbaW50MzJdIHZhbHVlcy4gKi9cbiAgICAgIHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkgP1xuICAgICAgbmV3IEludDMyQXJyYXkodGEuYnVmZmVyICx0YS5ieXRlT2Zmc2V0LCB0YS5sZW5ndGgpIDogdGE7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2ludCBjb25zdCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcsIGNhbWxfc3RyX3JlcGVhdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mb3JtYXRfaW50KGZtdCwgaSkge1xuICBpZiAoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpID09IFwiJWRcIikgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIitpKTtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoaSA8IDApIHsgaWYgKGYuc2lnbmVkY29udikgeyBmLnNpZ24gPSAtMTsgaSA9IC1pOyB9IGVsc2UgaSA+Pj49IDA7IH1cbiAgdmFyIHMgPSBpLnRvU3RyaW5nKGYuYmFzZSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0IChuLCAnMCcpICsgcztcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocykge1xuICB2YXIgaSA9IDAsIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSwgYmFzZSA9IDEwLCBzaWduID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocyxpKSkge1xuICAgIGNhc2UgNDU6IGkrKzsgc2lnbiA9IC0xOyBicmVhaztcbiAgICBjYXNlIDQzOiBpKys7IHNpZ24gPSAxOyBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGkgKyAxIDwgbGVuICYmIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkgPT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgIGNhc2UgMTIwOiBjYXNlIDg4OiBiYXNlID0gMTY7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTE6IGNhc2UgNzk6IGJhc2UgPSAgODsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlICA5ODogY2FzZSA2NjogYmFzZSA9ICAyOyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgMTE3OiBjYXNlIDg1OiBpICs9IDI7IGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIFtpLCBzaWduLCBiYXNlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9kaWdpdFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9kaWdpdChjKSB7XG4gIGlmIChjID49IDQ4ICYmIGMgPD0gNTcpICByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSAgcmV0dXJuIGMgLSA1NTtcbiAgaWYgKGMgPj0gOTcgJiYgYyA8PSAxMjIpIHJldHVybiBjIC0gODc7XG4gIHJldHVybiAtMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnRfb2Zfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX3BhcnNlX2RpZ2l0LCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2ludF9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIHRocmVzaG9sZCA9IC0xID4+PiAwO1xuICB2YXIgYyA9IChpIDwgbGVuKT9jYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpOjA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKztpPGxlbjtpKyspIHtcbiAgICBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgICBpZiAoYyA9PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgcmVzID0gYmFzZSAqIHJlcyArIGQ7XG4gICAgaWYgKHJlcyA+IHRocmVzaG9sZCkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmICgoYmFzZSA9PSAxMCkgJiYgKChyZXMgfCAwKSAhPSByZXMpKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbXVsKGEsYil7XG4gIHJldHVybiBNYXRoLmltdWwoYSxiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kaXZcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfZGl2KHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4gKHgveSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tb2Rcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfbW9kKHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4geCV5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Jzd2FwMTZcbmZ1bmN0aW9uIGNhbWxfYnN3YXAxNih4KSB7XG4gIHJldHVybiAoKCgoeCAmIDB4MDBGRikgPDwgOCkgfFxuICAgICAgICAgICAoKHggJiAweEZGMDApID4+IDgpKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwXG5mdW5jdGlvbiBjYW1sX2ludDMyX2Jzd2FwKHgpIHtcbiAgcmV0dXJuICgoKHggJiAweDAwMDAwMEZGKSA8PCAyNCkgfFxuICAgICAgICAgICgoeCAmIDB4MDAwMEZGMDApIDw8IDgpIHxcbiAgICAgICAgICAoKHggJiAweDAwRkYwMDAwKSA+Pj4gOCkgfFxuICAgICAgICAgICgoeCAmIDB4RkYwMDAwMDApID4+PiAyNCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9ic3dhcFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9ic3dhcCh4KSB7XG4gIHZhciB5ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh4KTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoW3lbN10sIHlbNl0sIHlbNV0sIHlbNF0sIHlbM10sIHlbMl0sIHlbMV0sIHlbMF1dKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSGFzaHRibFxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF91bml2X3BhcmFtIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9WZXJzaW9uOiA8IDQuMTJcbmZ1bmN0aW9uIGNhbWxfaGFzaF91bml2X3BhcmFtIChjb3VudCwgbGltaXQsIG9iaikge1xuICB2YXIgaGFzaF9hY2N1ID0gMDtcbiAgZnVuY3Rpb24gaGFzaF9hdXggKG9iaikge1xuICAgIGxpbWl0IC0tO1xuICAgIGlmIChjb3VudCA8IDAgfHwgbGltaXQgPCAwKSByZXR1cm47XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5ICYmIG9ialswXSA9PT0gKG9ialswXXwwKSkge1xuICAgICAgc3dpdGNoIChvYmpbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9ialsyXSkgfCAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIGxpbWl0Kys7IGhhc2hfYXV4KG9iaik7IGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIG9ialswXSkgfCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gb2JqLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIGhhc2hfYXV4IChvYmpbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhvYmopKSB7XG4gICAgICBjb3VudCAtLTtcbiAgICAgIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KG9iaik7XG4gICAgICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBmb3IgKHZhciBiID0gY29udGVudCwgbCA9IGIubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICAgIH0gZWxzZSB7IC8qIEFSUkFZICovXG4gICAgICAgIGZvciAodmFyIGEgPSBjb250ZW50LCBsID0gYS5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGFbaV0pIHwgMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKG9iaikpIHtcbiAgICAgIHZhciBqc2J5dGVzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhvYmopO1xuICAgICAgZm9yICh2YXIgYiA9IGpzYnl0ZXMsIGwgPSBqc2J5dGVzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZm9yICh2YXIgYiA9IG9iaiwgbCA9IG9iai5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gKG9ianwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgY291bnQgLS07XG4gICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBvYmopIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gK29iaikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGNvdW50LS07XG4gICAgICB2YXIgcCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAob2JqKSk7XG4gICAgICBmb3IgKHZhciBpID0gNzsgaSA+PSAwOyBpLS0pIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIHBbaV0pIHwgMDtcbiAgICB9IGVsc2UgaWYob2JqICYmIG9iai5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaCA9IGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gob2JqKSB8IDA7XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIGgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaGFzaF9hdXggKG9iaik7XG4gIHJldHVybiBoYXNoX2FjY3UgJiAweDNGRkZGRkZGO1xufVxuXG4vL2Z1bmN0aW9uIFJPVEwzMih4LG4pIHsgcmV0dXJuICgoeCA8PCBuKSB8ICh4ID4+PiAoMzItbikpKTsgfVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludChoLGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTF8MCk7XG4gIGQgPSAoKGQgPDwgMTUpIHwgKGQgPj4+ICgzMi0xNSkpKTsgLy8gUk9UTDMyKGQsIDE1KTtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4MWI4NzM1OTMpO1xuICBoIF49IGQ7XG4gIGggPSAoKGggPDwgMTMpIHwgKGggPj4+ICgzMi0xMykpKTsgICAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpfDApICsgKDB4ZTY1NDZiNjR8MCkpfDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsIChoLCAweDg1ZWJjYTZifDApO1xuICBoIF49IGggPj4+IDEzO1xuICBoID0gY2FtbF9tdWwgKGgsIDB4YzJiMmFlMzV8MCk7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaGFzaF9taXhfaW50NjRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQgKGgsIHYwKSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2ludDY0KGgsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAodjApKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NCAoaCwgdikge1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9sbzMyKHYpKTtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfaGkzMih2KSk7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHMuY2hhckNvZGVBdChpKVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgOClcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzIpIDw8IDE2KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMykgPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHMuY2hhckNvZGVBdChpKzEpIDw8IDg7XG4gIGNhc2UgMTpcbiAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldXG4gICAgICB8IChzW2krMV0gPDwgOClcbiAgICAgIHwgKHNbaSsyXSA8PCAxNilcbiAgICAgIHwgKHNbaSszXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHNbaSsyXSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHNbaSsxXSA8PCA4O1xuICBjYXNlIDE6IHcgfD0gc1tpXTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjb250ZW50KVxuICBlbHNlIC8qIEFSUkFZICovXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGNvbnRlbnQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLCB2KSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZyh2KSk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9mbG9hdCwgY2FtbF9oYXNoX21peF9zdHJpbmcsIGNhbWxfaGFzaF9taXhfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfaGFzaCAoY291bnQsIGxpbWl0LCBzZWVkLCBvYmopIHtcbiAgdmFyIHF1ZXVlLCByZCwgd3IsIHN6LCBudW0sIGgsIHYsIGksIGxlbjtcbiAgc3ogPSBsaW1pdDtcbiAgaWYgKHN6IDwgMCB8fCBzeiA+IDI1Nikgc3ogPSAyNTY7XG4gIG51bSA9IGNvdW50O1xuICBoID0gc2VlZDtcbiAgcXVldWUgPSBbb2JqXTsgcmQgPSAwOyB3ciA9IDE7XG4gIHdoaWxlIChyZCA8IHdyICYmIG51bSA+IDApIHtcbiAgICB2ID0gcXVldWVbcmQrK107XG4gICAgaWYgKHYgJiYgdi5jYW1sX2N1c3RvbSl7XG4gICAgICBpZihjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2gpIHtcbiAgICAgICAgdmFyIGhoID0gY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2godik7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludCAoaCwgaGgpO1xuICAgICAgICBudW0gLS07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2WzBdID09PSAodlswXXwwKSkge1xuICAgICAgc3dpdGNoICh2WzBdKSB7XG4gICAgICBjYXNlIDI0ODpcbiAgICAgICAgLy8gT2JqZWN0XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB2WzJdKTtcbiAgICAgICAgbnVtLS07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTA6XG4gICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgcXVldWVbLS1yZF0gPSB2WzFdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSkge1xuICAgICAgICAgIC8qIEFsbCBjb250aW51YXRpb25zIGhhc2ggdG8gdGhlIHNhbWUgdmFsdWUsXG4gICAgICAgICAgICAgc2luY2Ugd2UgaGF2ZSBubyBpZGVhIGhvdyB0byBkaXN0aW5ndWlzaCB0aGVtLiAqL1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0YWcgPSAoKHYubGVuZ3RoIC0gMSkgPDwgMTApIHwgdlswXTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHRhZyk7XG4gICAgICAgIGZvciAoaSA9IDEsIGxlbiA9IHYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZiAod3IgPj0gc3opIGJyZWFrO1xuICAgICAgICAgIHF1ZXVlW3dyKytdID0gdltpXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2J5dGVzKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcodikpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodiA9PT0gKHZ8MCkpIHtcbiAgICAgIC8vIEludGVnZXJcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB2K3YrMSk7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAvLyBGbG9hdFxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCx2KTtcbiAgICAgIG51bS0tO1xuICAgIH1cbiAgfVxuICBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNGRkZGRkZGO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsLCBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfaGFzaChoLCB2KXtcbiAgdmFyIGggPSBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLHYpO1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzRkZGRkZGRjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfY29uc3RhbnRzXG52YXIgY2FtbF9tYXJzaGFsX2NvbnN0YW50cyA9IHtcbiAgUFJFRklYX1NNQUxMX0JMT0NLOiAgICAgICAgIDB4ODAsXG4gIFBSRUZJWF9TTUFMTF9JTlQ6ICAgICAgICAgICAweDQwLFxuICBQUkVGSVhfU01BTExfU1RSSU5HOiAgICAgICAgMHgyMCxcbiAgQ09ERV9JTlQ4OiAgICAgICAgICAgICAgICAgIDB4MDAsXG4gIENPREVfSU5UMTY6ICAgICAgICAgICAgICAgICAweDAxLFxuICBDT0RFX0lOVDMyOiAgICAgICAgICAgICAgICAgMHgwMixcbiAgQ09ERV9JTlQ2NDogICAgICAgICAgICAgICAgIDB4MDMsXG4gIENPREVfU0hBUkVEODogICAgICAgICAgICAgICAweDA0LFxuICBDT0RFX1NIQVJFRDE2OiAgICAgICAgICAgICAgMHgwNSxcbiAgQ09ERV9TSEFSRUQzMjogICAgICAgICAgICAgIDB4MDYsXG4gIENPREVfQkxPQ0szMjogICAgICAgICAgICAgICAweDA4LFxuICBDT0RFX0JMT0NLNjQ6ICAgICAgICAgICAgICAgMHgxMyxcbiAgQ09ERV9TVFJJTkc4OiAgICAgICAgICAgICAgIDB4MDksXG4gIENPREVfU1RSSU5HMzI6ICAgICAgICAgICAgICAweDBBLFxuICBDT0RFX0RPVUJMRV9CSUc6ICAgICAgICAgICAgMHgwQixcbiAgQ09ERV9ET1VCTEVfTElUVExFOiAgICAgICAgIDB4MEMsXG4gIENPREVfRE9VQkxFX0FSUkFZOF9CSUc6ICAgICAweDBELFxuICBDT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOiAgMHgwRSxcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9CSUc6ICAgIDB4MEYsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfTElUVExFOiAweDA3LFxuICBDT0RFX0NPREVQT0lOVEVSOiAgICAgICAgICAgMHgxMCxcbiAgQ09ERV9JTkZJWFBPSU5URVI6ICAgICAgICAgIDB4MTEsXG4gIENPREVfQ1VTVE9NOiAgICAgICAgICAgICAgICAweDEyLFxuICBDT0RFX0NVU1RPTV9MRU46ICAgICAgICAgICAgMHgxOCxcbiAgQ09ERV9DVVNUT01fRklYRUQ6ICAgICAgICAgIDB4MTlcbn1cblxuXG4vL1Byb3ZpZGVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheSwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gVUludDhBcnJheVJlYWRlciAocywgaSkgeyB0aGlzLnMgPSBzOyB0aGlzLmkgPSBpOyB9XG5VSW50OEFycmF5UmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuc1t0aGlzLmkrK107IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnNbdGhpcy5pKytdIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHNbaV0gPDwgOCkgfCBzW2kgKyAxXVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHNbaV0gPDwgMjQgPj4gMTYpIHwgc1tpICsgMV07XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHNbaV0gPDwgMjQpIHwgKHNbaSsxXSA8PCAxNikgfFxuICAgICAgICAgICAgKHNbaSsyXSA8PCA4KSB8IHNbaSszXSkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCkgfCAoc1tpKzFdIDw8IDE2KSB8XG4gICAgICAoc1tpKzJdIDw8IDgpIHwgc1tpKzNdO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheSh0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbikpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gdGhpcy5zLnN1YmFycmF5KGksIGkgKyBsZW4pO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogTWxTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIE1sU3RyaW5nUmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7IHRoaXMuaSA9IGk7IH1cbk1sU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDI0ID4+IDE2KSB8IHMuY2hhckNvZGVBdChpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQpIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDE2KSB8XG4gICAgICAocy5jaGFyQ29kZUF0KGkrMikgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnMuc3Vic3RyaW5nKGksIGkgKyBsZW4pKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICB2YXIgcyA9IHRoaXMucztcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGJbal0gPSBzLmNoYXJDb2RlQXQoaSArIGopO1xuICAgIH1cbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBiO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IEJpZ1N0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXksIGNhbWxfYmFfZ2V0XzFcbmZ1bmN0aW9uIEJpZ1N0cmluZ1JlYWRlciAoYnMsIGkpIHsgdGhpcy5zID0gYnM7IHRoaXMuaSA9IGk7IH1cbkJpZ1N0cmluZ1JlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiBjYW1sX2JhX2dldF8xKHRoaXMucyx0aGlzLmkrKyk7IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiBjYW1sX2JhX2dldF8xKHRoaXMucyx0aGlzLmkrKykgPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpIDw8IDgpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCAyNCA+PiAxNikgfCBjYW1sX2JhX2dldF8xKHMsaSArIDEpO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChjYW1sX2JhX2dldF8xKHMsaSkgICA8PCAyNCkgfCAoY2FtbF9iYV9nZXRfMShzLGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChjYW1sX2JhX2dldF8xKHMsaSsyKSA8PCA4KSAgfCBjYW1sX2JhX2dldF8xKHMsaSszKSAgICAgICAgICkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMyk7XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHZhciBhcnIgPSBuZXcgQXJyYXkobGVuKVxuICAgIGZvcih2YXIgaiA9IDA7IGogPCBsZW47IGorKyl7XG4gICAgICBhcnJbal0gPSBjYW1sX2JhX2dldF8xKHRoaXMucywgaStqKTtcbiAgICB9XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldChpKTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbik7XG4gIH1cbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9ieXRlcyAoYSkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIChjYW1sX2ludDY0X29mX2J5dGVzIChhKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogTWxTdHJpbmdSZWFkZXIsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXJcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcocyxvZnMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBNbFN0cmluZ1JlYWRlciAocywgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciwgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSwgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzICh0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X21hcnNoYWwod3JpdGVyLCB2LCBzaXplcykge1xuICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgd3JpdGVyLndyaXRlICg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4OyBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzaXplWzBdID0gNDtcbiAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzd2l0Y2ggKHJlYWRlci5yZWFkOHUgKCkpIHtcbiAgY2FzZSAxOlxuICAgIHNpemVbMF0gPSA0O1xuICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgY2FzZSAyOlxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICBkZWZhdWx0OiBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbmF0aXZlIGludGVnZXJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3VubWFyc2hhbCwgY2FtbF9pbnQ2NF9tYXJzaGFsLCBjYW1sX2ludDY0X2NvbXBhcmUsIGNhbWxfaW50NjRfaGFzaFxuLy9SZXF1aXJlczogY2FtbF9pbnQzMl91bm1hcnNoYWwsIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9iYV9zZXJpYWxpemUsIGNhbWxfYmFfZGVzZXJpYWxpemUsIGNhbWxfYmFfY29tcGFyZSwgY2FtbF9iYV9oYXNoXG52YXIgY2FtbF9jdXN0b21fb3BzID1cbiAgICB7XCJfalwiOiB7XG4gICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgICAgc2VyaWFsaXplICA6IGNhbWxfaW50NjRfbWFyc2hhbCxcbiAgICAgIGZpeGVkX2xlbmd0aCA6IDgsXG4gICAgICBjb21wYXJlIDogY2FtbF9pbnQ2NF9jb21wYXJlLFxuICAgICAgaGFzaCA6IGNhbWxfaW50NjRfaGFzaFxuICAgIH0sXG4gICAgIFwiX2lcIjoge1xuICAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQzMl91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfblwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyYXlcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycmF5XCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH0sXG4gICAgIFwiX2JpZ2FycjAyXCI6e1xuICAgICAgIGRlc2VyaWFsaXplIDogKGZ1bmN0aW9uIChyZWFkZXIsIHN6KSB7cmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUgKHJlYWRlcixzeixcIl9iaWdhcnIwMlwiKX0pLFxuICAgICAgIHNlcmlhbGl6ZSA6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgICAgIGNvbXBhcmUgOiBjYW1sX2JhX2NvbXBhcmUsXG4gICAgICAgaGFzaDogY2FtbF9iYV9oYXNoLFxuICAgICB9XG4gICAgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKSB7XG4gIGZ1bmN0aW9uIHJlYWR2bHEob3ZlcmZsb3cpIHtcbiAgICB2YXIgYyA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB2YXIgbiA9IGMgJiAweDdGO1xuICAgIHdoaWxlICgoYyAmIDB4ODApICE9IDApIHtcbiAgICAgIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPSBuNyA+PiA3KSBvdmVyZmxvd1swXSA9IHRydWU7XG4gICAgICBuID0gbjcgfCAoYyAmIDB4N0YpO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfVxuICB2YXIgbWFnaWMgPSByZWFkZXIucmVhZDMydSAoKVxuICBzd2l0Y2gobWFnaWMpe1xuICBjYXNlIDB4ODQ5NUE2QkU6IC8qIEludGV4dF9tYWdpY19udW1iZXJfc21hbGwgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IDIwO1xuICAgIHZhciBjb21wcmVzc2VkID0gMDtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gZGF0YV9sZW47XG4gICAgdmFyIG51bV9vYmplY3RzID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIF9zaXplXzY0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJEOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2NvbXByZXNzZWQgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IHJlYWRlci5yZWFkOHUoKSAmIDB4M0Y7XG4gICAgdmFyIGNvbXByZXNzZWQgPSAxO1xuICAgIHZhciBvdmVyZmxvdyA9IFtmYWxzZV07XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciBudW1fb2JqZWN0cyA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciBfc2l6ZV8zMiA9IHJlYWR2bHEgKG92ZXJmbG93KTtcbiAgICB2YXIgX3NpemVfNjQgPSByZWFkdmxxIChvdmVyZmxvdyk7XG4gICAgaWYob3ZlcmZsb3dbMF0pe1xuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcjogb2JqZWN0IHRvbyBsYXJnZSB0byBiZSByZWFkIGJhY2sgb24gdGhpcyBwbGF0Zm9ybVwiKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJGOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2JpZyAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiBhIDMyLWJpdCBwbGF0Zm9ybVwiKTtcbiAgICBicmVha1xuICBkZWZhdWx0OlxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBiYWQgb2JqZWN0XCIpO1xuICAgIGJyZWFrO1xuICB9XG4gIHZhciBzdGFjayA9IFtdO1xuICB2YXIgaW50ZXJuX29ial90YWJsZSA9IChudW1fb2JqZWN0cyA+IDApP1tdOm51bGw7XG4gIHZhciBvYmpfY291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIGludGVybl9yZWMgKHJlYWRlcikge1xuICAgIHZhciBjb2RlID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICBpZiAoY29kZSA+PSAweDQwIC8qY3N0LlBSRUZJWF9TTUFMTF9JTlQqLykge1xuICAgICAgaWYgKGNvZGUgPj0gMHg4MCAvKmNzdC5QUkVGSVhfU01BTExfQkxPQ0sqLykge1xuICAgICAgICB2YXIgdGFnID0gY29kZSAmIDB4RjtcbiAgICAgICAgdmFyIHNpemUgPSAoY29kZSA+PiA0KSAmIDB4NztcbiAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIHY7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2VcbiAgICAgICAgcmV0dXJuIChjb2RlICYgMHgzRik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb2RlID49IDB4MjAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HICovKSB7XG4gICAgICAgIHZhciBsZW4gPSBjb2RlICYgMHgxRjtcbiAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaChjb2RlKSB7XG4gICAgICAgIGNhc2UgMHgwMDogLy9jc3QuQ09ERV9JTlQ4OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDhzICgpO1xuICAgICAgICBjYXNlIDB4MDE6IC8vY3N0LkNPREVfSU5UMTY6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMTZzICgpO1xuICAgICAgICBjYXNlIDB4MDI6IC8vY3N0LkNPREVfSU5UMzI6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICAgICAgICBjYXNlIDB4MDM6IC8vY3N0LkNPREVfSU5UNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbnRlZ2VyIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDA0OiAvL2NzdC5DT0RFX1NIQVJFRDg6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDU6IC8vY3N0LkNPREVfU0hBUkVEMTY6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMTZ1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA2OiAvL2NzdC5DT0RFX1NIQVJFRDMyOlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwODogLy9jc3QuQ09ERV9CTE9DSzMyOlxuICAgICAgICAgIHZhciBoZWFkZXIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICB2YXIgdGFnID0gaGVhZGVyICYgMHhGRjtcbiAgICAgICAgICB2YXIgc2l6ZSA9IGhlYWRlciA+PiAxMDtcbiAgICAgICAgICB2YXIgdiA9IFt0YWddO1xuICAgICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTM6IC8vY3N0LkNPREVfQkxPQ0s2NDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBkYXRhIGJsb2NrIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDA5OiAvL2NzdC5DT0RFX1NUUklORzg6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBBOiAvL2NzdC5DT0RFX1NUUklORzMyOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEM6IC8vY3N0LkNPREVfRE9VQkxFX0xJVFRMRTpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0WzcgLSBpXSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgdmFyIHYgPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQjogLy9jc3QuQ09ERV9ET1VCTEVfQklHOlxuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgODtpKyspIHRbaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEU6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0WzcgLSBqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRDogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVk4X0JJRzpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2IFtpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDA3OiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0WzcgLSBqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRjogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgxMDogLy9jc3QuQ09ERV9DT0RFUE9JTlRFUjpcbiAgICAgICAgY2FzZSAweDExOiAvL2NzdC5DT0RFX0lORklYUE9JTlRFUjpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBjb2RlIHBvaW50ZXJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgxMjogLy9jc3QuQ09ERV9DVVNUT006XG4gICAgICAgIGNhc2UgMHgxODogLy9jc3QuQ09ERV9DVVNUT01fTEVOOlxuICAgICAgICBjYXNlIDB4MTk6IC8vY3N0LkNPREVfQ1VTVE9NX0ZJWEVEOlxuICAgICAgICAgIHZhciBjLCBzID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoKGMgPSByZWFkZXIucmVhZDh1ICgpKSAhPSAwKSBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbc107XG4gICAgICAgICAgdmFyIGV4cGVjdGVkX3NpemU7XG4gICAgICAgICAgaWYoIW9wcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdW5rbm93biBjdXN0b20gYmxvY2sgaWRlbnRpZmllclwiKTtcbiAgICAgICAgICBzd2l0Y2goY29kZSl7XG4gICAgICAgICAgY2FzZSAweDEyOiAvLyBjc3QuQ09ERV9DVVNUT00gKGRlcHJlY2F0ZWQpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MTk6IC8vIGNzdC5DT0RFX0NVU1RPTV9GSVhFRFxuICAgICAgICAgICAgaWYoIW9wcy5maXhlZF9sZW5ndGgpXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogZXhwZWN0ZWQgYSBmaXhlZC1zaXplIGN1c3RvbSBibG9ja1wiKTtcbiAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSBvcHMuZml4ZWRfbGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE4OiAvLyBjc3QuQ09ERV9DVVNUT01fTEVOXG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgICAvLyBTa2lwIHNpemU2NFxuICAgICAgICAgICAgcmVhZGVyLnJlYWQzMnMoKTsgcmVhZGVyLnJlYWQzMnMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgb2xkX3BvcyA9IHJlYWRlci5pO1xuICAgICAgICAgIHZhciBzaXplID0gWzBdO1xuICAgICAgICAgIHZhciB2ID0gb3BzLmRlc2VyaWFsaXplKHJlYWRlciwgc2l6ZSk7XG4gICAgICAgICAgaWYoZXhwZWN0ZWRfc2l6ZSAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgaWYoZXhwZWN0ZWRfc2l6ZSAhPSBzaXplWzBdKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGluY29ycmVjdCBsZW5ndGggb2Ygc2VyaWFsaXplZCBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBpbGwtZm9ybWVkIG1lc3NhZ2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYoY29tcHJlc3NlZCkge1xuICAgIGlmKGNhbWxfZGVjb21wcmVzc19pbnB1dCkge1xuICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVhZHVpbnQ4YXJyYXkoZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KHVuY29tcHJlc3NlZF9kYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gY2FtbF9kZWNvbXByZXNzX2lucHV0KGRhdGEsIHJlcyk7XG4gICAgICB2YXIgcmVhZGVyID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIocmVzLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjb21wcmVzc2VkIG9iamVjdCwgY2Fubm90IGRlY29tcHJlc3NcIik7XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjIChyZWFkZXIpO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIHZhciBzaXplID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgZCA9IHYubGVuZ3RoO1xuICAgIGlmIChkIDwgc2l6ZSkgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICB2W2RdID0gaW50ZXJuX3JlYyAocmVhZGVyKTtcbiAgfVxuICBpZiAodHlwZW9mIG9mcyE9XCJudW1iZXJcIikgb2ZzWzBdID0gcmVhZGVyLmk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuLy9WZXJzaW9uOiA8IDUuMS4wXG52YXIgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplID0gMjBcblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG4vL1ZlcnNpb246ID49IDUuMS4wXG52YXIgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplID0gMTZcblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbmZ1bmN0aW9uIGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgKHMsIG9mcykge1xuICB2YXIgciA9IG5ldyBVSW50OEFycmF5UmVhZGVyKGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocyksIG9mcyk7XG4gIGZ1bmN0aW9uIHJlYWR2bHEob3ZlcmZsb3cpIHtcbiAgICB2YXIgYyA9IHIucmVhZDh1KCk7XG4gICAgdmFyIG4gPSBjICYgMHg3RjtcbiAgICB3aGlsZSAoKGMgJiAweDgwKSAhPSAwKSB7XG4gICAgICBjID0gci5yZWFkOHUoKTtcbiAgICAgIHZhciBuNyA9IG4gPDwgNztcbiAgICAgIGlmIChuICE9IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Rik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG5cbiAgc3dpdGNoKHIucmVhZDMydSgpKXtcbiAgY2FzZSAweDg0OTVBNkJFOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICB2YXIgZGF0YV9sZW4gPSByLnJlYWQzMnUoKTtcbiAgICBicmVhaztcbiAgY2FzZSAweDg0OTVBNkJEOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2NvbXByZXNzZWQgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IHIucmVhZDh1KCkgJiAweDNGO1xuICAgIHZhciBvdmVyZmxvdyA9IFtmYWxzZV07XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgaWYob3ZlcmZsb3dbMF0pe1xuICAgICAgY2FtbF9mYWlsd2l0aChcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIpO1xuICAgIH1cbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkY6IC8qIEludGV4dF9tYWdpY19udW1iZXJfYmlnICovXG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9mYWlsd2l0aChcIk1hcnNoYWwuZGF0YV9zaXplOiBiYWQgb2JqZWN0XCIpO1xuICAgIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGhlYWRlcl9sZW4gLSBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgKyBkYXRhX2xlbjtcbn1cblxuLy9Qcm92aWRlczogTWxPYmplY3RUYWJsZVxudmFyIE1sT2JqZWN0VGFibGU7XG5pZiAodHlwZW9mIGdsb2JhbFRoaXMuTWFwID09PSAndW5kZWZpbmVkJykge1xuICBNbE9iamVjdFRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgLyogcG9seWZpbGwgKHVzaW5nIGxpbmVhciBzZWFyY2gpICovXG4gICAgZnVuY3Rpb24gTmFpdmVMb29rdXAob2JqcykgeyB0aGlzLm9ianMgPSBvYmpzOyB9XG4gICAgTmFpdmVMb29rdXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLm9ianNbaV0gPT09IHYpIHJldHVybiBpO1xuICAgICAgfVxuICAgIH07XG4gICAgTmFpdmVMb29rdXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgLy8gRG8gbm90aGluZyBoZXJlLiBbTWxPYmplY3RUYWJsZS5zdG9yZV0gd2lsbCBwdXNoIHRvIFt0aGlzLm9ianNdIGRpcmVjdGx5LlxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gTWxPYmplY3RUYWJsZSgpIHtcbiAgICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBOYWl2ZUxvb2t1cCh0aGlzLm9ianMpO1xuICAgIH07XG4gIH0oKTtcbn1cbmVsc2Uge1xuICBNbE9iamVjdFRhYmxlID0gZnVuY3Rpb24gTWxPYmplY3RUYWJsZSgpIHtcbiAgICB0aGlzLm9ianMgPSBbXTsgdGhpcy5sb29rdXAgPSBuZXcgZ2xvYmFsVGhpcy5NYXAoKTtcbiAgfTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUuc3RvcmUgPSBmdW5jdGlvbih2KSB7XG4gIHRoaXMubG9va3VwLnNldCh2LCB0aGlzLm9ianMubGVuZ3RoKTtcbiAgdGhpcy5vYmpzLnB1c2godik7XG59XG5cbk1sT2JqZWN0VGFibGUucHJvdG90eXBlLnJlY2FsbCA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGkgPSB0aGlzLmxvb2t1cC5nZXQodik7XG4gIHJldHVybiAoaSA9PT0gdW5kZWZpbmVkKVxuICAgID8gdW5kZWZpbmVkIDogdGhpcy5vYmpzLmxlbmd0aCAtIGk7ICAgLyogaW5kZXggaXMgcmVsYXRpdmUgKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IE1sT2JqZWN0VGFibGUsIGNhbWxfbGlzdF90b19qc19hcnJheSwgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9pc19jb250aW51YXRpb25fdGFnXG52YXIgY2FtbF9vdXRwdXRfdmFsID0gZnVuY3Rpb24gKCl7XG4gIGZ1bmN0aW9uIFdyaXRlciAoKSB7IHRoaXMuY2h1bmsgPSBbXTsgfVxuICBXcml0ZXIucHJvdG90eXBlID0ge1xuICAgIGNodW5rX2lkeDoyMCwgYmxvY2tfbGVuOjAsIG9ial9jb3VudGVyOjAsIHNpemVfMzI6MCwgc2l6ZV82NDowLFxuICAgIHdyaXRlOmZ1bmN0aW9uIChzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfYXQ6ZnVuY3Rpb24gKHBvcywgc2l6ZSwgdmFsdWUpIHtcbiAgICAgIHZhciBwb3MgPSBwb3M7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1twb3MrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfY29kZTpmdW5jdGlvbiAoc2l6ZSwgY29kZSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSBjb2RlO1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfc2hhcmVkOmZ1bmN0aW9uIChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAoMSA8PCA4KSkgdGhpcy53cml0ZV9jb2RlKDgsIDB4MDQgLypjc3QuQ09ERV9TSEFSRUQ4Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIGlmIChvZmZzZXQgPCAoMSA8PCAxNikpIHRoaXMud3JpdGVfY29kZSgxNiwgMHgwNSAvKmNzdC5DT0RFX1NIQVJFRDE2Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIHRoaXMud3JpdGVfY29kZSgzMiwgMHgwNiAvKmNzdC5DT0RFX1NIQVJFRDMyKi8sIG9mZnNldCk7XG4gICAgfSxcbiAgICBwb3M6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaHVua19pZHggfSxcbiAgICBmaW5hbGl6ZTpmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlICgzMiwgMHg4NDk1QTZCRSk7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5ibG9ja19sZW4pO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuc2l6ZV8zMik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzY0KTtcbiAgICAgIHJldHVybiB0aGlzLmNodW5rO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKHYsIGZsYWdzKSB7XG4gICAgZmxhZ3MgPSBjYW1sX2xpc3RfdG9fanNfYXJyYXkoZmxhZ3MpO1xuXG4gICAgdmFyIG5vX3NoYXJpbmcgPSAoZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSksXG4gICAgICAgIGNsb3N1cmVzID0gIChmbGFncy5pbmRleE9mKDEgLypNYXJzaGFsLkNsb3N1cmVzKi8pICE9PSAtMSk7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBjb25zb2xlLndhcm4oXCJpbiBjYW1sX291dHB1dF92YWw6IGZsYWcgTWFyc2hhbC5DbG9zdXJlcyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcblxuICAgIHZhciB3cml0ZXIgPSBuZXcgV3JpdGVyICgpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gbm9fc2hhcmluZyA/IG51bGwgOiBuZXcgTWxPYmplY3RUYWJsZSgpO1xuXG4gICAgZnVuY3Rpb24gbWVtbyh2KSB7XG4gICAgICBpZiAobm9fc2hhcmluZykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGV4aXN0aW5nX29mZnNldCA9IGludGVybl9vYmpfdGFibGUucmVjYWxsKHYpO1xuICAgICAgaWYgKGV4aXN0aW5nX29mZnNldCkgeyB3cml0ZXIud3JpdGVfc2hhcmVkKGV4aXN0aW5nX29mZnNldCk7IHJldHVybiB0cnVlOyB9XG4gICAgICBlbHNlIHsgaW50ZXJuX29ial90YWJsZS5zdG9yZSh2KTsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZXJuX3JlYyAodikge1xuICAgICAgaWYgKHYuY2FtbF9jdXN0b20pIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIG5hbWUgPSB2LmNhbWxfY3VzdG9tO1xuICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW25hbWVdO1xuICAgICAgICB2YXIgc3pfMzJfNjQgPSBbMCwwXTtcbiAgICAgICAgaWYoIW9wcy5zZXJpYWxpemUpXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoQ3VzdG9tKVwiKTtcbiAgICAgICAgaWYob3BzLmZpeGVkX2xlbmd0aCA9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOCAvKmNzdC5DT0RFX0NVU1RPTV9MRU4qLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgaGVhZGVyX3BvcyA9IHdyaXRlci5wb3MgKCk7XG4gICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcywgMzIsIHN6XzMyXzY0WzBdKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDQsIDMyLCAwKTsgLy8gemVyb1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgOCwgMzIsIHN6XzMyXzY0WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MTkgLypjc3QuQ09ERV9DVVNUT01fRklYRUQqLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgb2xkX3BvcyA9IHdyaXRlci5wb3MoKTtcbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIGlmIChvcHMuZml4ZWRfbGVuZ3RoICE9IHdyaXRlci5wb3MoKSAtIG9sZF9wb3MpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBpbmNvcnJlY3QgZml4ZWQgc2l6ZXMgc3BlY2lmaWVkIGJ5IFwiICsgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMiArICgoc3pfMzJfNjRbMF0gKyAzKSA+PiAyKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMiArICgoc3pfMzJfNjRbMV0gKyA3KSA+PiAzKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2WzBdID09PSAodlswXXwwKSkge1xuICAgICAgICBpZiAodlswXSA9PSAyNTEpIHtcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoQWJzdHJhY3QpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodlswXSkpXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwib3V0cHV0X3ZhbHVlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEgJiYgbWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICBpZiAodlswXSA8IDE2ICYmIHYubGVuZ3RoIC0gMSA8IDgpXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovICsgdlswXSArICgodi5sZW5ndGggLSAxKTw8NCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDggLypjc3QuQ09ERV9CTE9DSzMyKi8sICgodi5sZW5ndGgtMSkgPDwgMTApIHwgdlswXSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IHYubGVuZ3RoO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSB2Lmxlbmd0aDtcbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSkgc3RhY2sucHVzaCAodiwgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgICAgaWYoIShjYW1sX2lzX21sX2J5dGVzKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIikpKSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IFtCeXRlcy50XSBjYW5ub3Qgc2FmZWx5IGJlIG1hcnNoYWxlZCB3aXRoIFstLWVuYWJsZSB1c2UtanMtc3RyaW5nXVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9ieXRlc19sZW5ndGgodik7XG4gICAgICAgIGlmIChsZW4gPCAweDIwKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgyMCAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HKi8gKyBsZW4pO1xuICAgICAgICBlbHNlIGlmIChsZW4gPCAweDEwMClcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoOCwgMHgwOS8qY3N0LkNPREVfU1RSSU5HOCovLCBsZW4pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDMyLCAweDBBIC8qY3N0LkNPREVfU1RSSU5HMzIqLywgbGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IGxlbjtpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQodixpKSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDEgKyAoKChsZW4gKyA0KSAvIDQpfDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KXwwKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcodikpIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQodixpKSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDEgKyAoKChsZW4gKyA0KSAvIDQpfDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KXwwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2ICE9ICh2fDApKXtcbiAgICAgICAgICB2YXIgdHlwZV9vZl92ID0gdHlwZW9mIHY7XG4gICAgICAgICAgaWYodHlwZV9vZl92ICE9IFwibnVtYmVyXCIpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoXCIrdHlwZV9vZl92K1wiKVwiKTtcbiAgICAgICAgICAvLyBJZiBhIGZsb2F0IGhhcHBlbnMgdG8gYmUgYW4gaW50ZWdlciBpdCBpcyBzZXJpYWxpemVkIGFzIGFuIGludGVnZXJcbiAgICAgICAgICAvLyAoSnNfb2Zfb2NhbWwgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHlwZSBvZiBhbiBpbnRlZ2VyIG51bWJlciBpc1xuICAgICAgICAgIC8vIGZsb2F0IG9yIGludGVnZXIuKSBUaGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFzaGVzIHdoZW5cbiAgICAgICAgICAvLyB1bm1hcnNoYWxsaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBydW50aW1lLlxuICAgICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgICAgdmFyIHQgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh2KSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDBDIC8qY3N0LkNPREVfRE9VQkxFX0xJVFRMRSovKTtcbiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpPDg7IGkrKyl7d3JpdGVyLndyaXRlKDgsdFs3IC0gaV0pfVxuICAgICAgICAgIHdyaXRlci5zaXplXzMyICs9IDNcbiAgICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAyXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodiA+PSAwICYmIHYgPCAweDQwKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAwWDQwIC8qY3N0LlBSRUZJWF9TTUFMTF9JTlQqLyArIHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2ID49IC0oMSA8PCA3KSAmJiB2IDwgKDEgPDwgNykpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSg4LCAweDAwIC8qY3N0LkNPREVfSU5UOCovLCB2KTtcbiAgICAgICAgICBlbHNlIGlmICh2ID49IC0oMSA8PCAxNSkgJiYgdiA8ICgxIDw8IDE1KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDE2LCAweDAxIC8qY3N0LkNPREVfSU5UMTYqLywgdik7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDIgLypjc3QuQ09ERV9JTlQzMiovLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBleHRlcm5fcmVjICh2KTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGkgPSBzdGFjay5wb3AgKCk7XG4gICAgICB2YXIgdiA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIGlmIChpICsgMSA8IHYubGVuZ3RoKSBzdGFjay5wdXNoICh2LCBpICsgMSk7XG4gICAgICBleHRlcm5fcmVjICh2W2ldKTtcbiAgICB9XG4gICAgaWYgKGludGVybl9vYmpfdGFibGUpIHdyaXRlci5vYmpfY291bnRlciA9IGludGVybl9vYmpfdGFibGUub2Jqcy5sZW5ndGg7XG4gICAgd3JpdGVyLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHdyaXRlci5jaHVuaztcbiAgfVxufSAoKTtcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5IChjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9ieXRlc19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgKHYsIGZsYWdzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX2FycmF5IChjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2JsaXRfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlciAocywgb2ZzLCBsZW4sIHYsIGZsYWdzKSB7XG4gIHZhciB0ID0gY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncyk7XG4gIGlmICh0Lmxlbmd0aCA+IGxlbikgY2FtbF9mYWlsd2l0aCAoXCJNYXJzaGFsLnRvX2J1ZmZlcjogYnVmZmVyIG92ZXJmbG93XCIpO1xuICBjYW1sX2JsaXRfYnl0ZXModCwgMCwgcywgb2ZzLCB0Lmxlbmd0aCk7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF90YWdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKXtcbiAgaWYgKHR5cGVvZiBhID09PSBcIm51bWJlclwiKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhhKSkgcmV0dXJuIDI1MjsgLy8gc3RyaW5nX3RhZ1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhhKSkgcmV0dXJuIDEyNTI7IC8vIG9jYW1sIHN0cmluZyAoaWYgZGlmZmVyZW50IGZyb20gYnl0ZXMpXG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBBcnJheSAmJiBhWzBdID09PSAoYVswXT4+PjApICYmIGFbMF0gPD0gMjU1KSB7XG4gICAgLy8gTG9vayBsaWtlIGFuIG9jYW1sIGJsb2NrXG4gICAgdmFyIHRhZyA9IGFbMF0gfCAwO1xuICAgIC8vIGlnbm9yZSBkb3VibGVfYXJyYXlfdGFnIGJlY2F1c2Ugd2UgY2Fubm90IGFjY3VyYXRlbHkgc2V0XG4gICAgLy8gdGhpcyB0YWcgd2hlbiB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgZmxvYXQuXG4gICAgcmV0dXJuICh0YWcgPT0gMjU0KT8wOnRhZ1xuICB9XG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBTdHJpbmcpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcInN0cmluZ1wiKSByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE51bWJlcikgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGEgJiYgYS5jYW1sX2N1c3RvbSkgcmV0dXJuIDEyNTU7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmIChhICYmIGEuY29tcGFyZSkgcmV0dXJuIDEyNTY7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiAxMjQ3OyAvLyBsaWtlIGNsb3N1cmVfdGFnICgyNDcpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3ltYm9sXCIpIHJldHVybiAxMjUxO1xuICByZXR1cm4gMTAwMTsgLy9vdXRfb2ZfaGVhcF90YWdcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2N1c3RvbV9vcHNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKXtcbiAgcmV0dXJuIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0uY29tcGFyZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShudW0sIGN1c3RvbSwgc3dhcCwgdG90YWwpIHtcbiAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oY3VzdG9tKTtcbiAgaWYoY29tcCkge1xuICAgIHZhciB4ID0gKHN3YXAgPiAwKT9jb21wKGN1c3RvbSxudW0sdG90YWwpOmNvbXAobnVtLGN1c3RvbSx0b3RhbCk7XG4gICAgaWYodG90YWwgJiYgeCAhPSB4KSByZXR1cm4gc3dhcDsgLy8gdG90YWwgJiYgbmFuXG4gICAgaWYoK3ggIT0gK3gpIHJldHVybiAreDsgLy8gbmFuXG4gICAgaWYoKHggfCAwKSAhPSAwKSByZXR1cm4gKHggfCAwKTsgLy8gIW5hblxuICB9XG4gIHJldHVybiBzd2FwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWwgKGNvbnN0LCBjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludF9jb21wYXJlLCBjYW1sX3N0cmluZ19jb21wYXJlLCBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tLCBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRvdGFsKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuICBmb3IoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYSA9PSAyNTApIHsgYSA9IGFbMV07IGNvbnRpbnVlIH1cblxuICAgICAgdmFyIHRhZ19iID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYik7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYiA9PSAyNTApIHsgYiA9IGJbMV07IGNvbnRpbnVlIH1cblxuICAgICAgLy8gdGFncyBhcmUgZGlmZmVyZW50XG4gICAgICBpZih0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYodGFnX2EgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19iID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYSwgYiwgLTEsIHRvdGFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYodGFnX2IgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19hID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYiwgYSwgMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodGFnX2EgPCB0YWdfYik/LTE6MTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCh0YWdfYSl7XG4gICAgICAgIC8vIDI0NjogTGF6eV90YWcgaGFuZGxlZCBiZWxsb3dcbiAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgIHZhciB4ID0gY2FtbF9pbnRfY29tcGFyZShhWzJdLCBiWzJdKTtcbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDk6IC8vIEluZml4XG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkIHRhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRm9yd2FyZF90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICB2YXIgeCA9IGNhbWxfYnl0ZXNfY29tcGFyZShhLCBiKTtcbiAgICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MzogLy8gRG91YmxlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlbiwgaGFuZGxlZCBhYm92ZVxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBDdXN0b21fdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSk7XG4gICAgICAgIGlmKGNvbXAgIT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKXtcbiAgICAgICAgICByZXR1cm4gKGEuY2FtbF9jdXN0b208Yi5jYW1sX2N1c3RvbSk/LTE6MTtcbiAgICAgICAgfVxuICAgICAgICBpZighY29tcClcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgdmFyIHggPSBjb21wKGEsYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIFVOT1JERVJFRFxuICAgICAgICAgIHJldHVybiB0b3RhbD8tMTp4O1xuICAgICAgICB9XG4gICAgICAgIGlmKHggIT09ICh4fDApKXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU2OiAvLyBjb21wYXJlIGZ1bmN0aW9uXG4gICAgICAgIHZhciB4ID0gYS5jb21wYXJlKGIsdG90YWwpO1xuICAgICAgICBpZih4ICE9IHgpIHsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwMDA6IC8vIE51bWJlclxuICAgICAgICBhID0gK2E7XG4gICAgICAgIGIgPSArYjtcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgLy8gSGVyZSB3ZSBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgICAgICAgLy8gMS4gSmF2YVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMy4gSmF2YVNjcmlwdCBvYmplY3QgdGhhbiBjYW5ub3QgYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAvLyAoMikgd2lsbCBjb2VyY2UgdG8gcHJpbWl0aXZlIHR5cGVzIHVzaW5nIFt2YWx1ZU9mXSBvciBbdG9TdHJpbmddXG4gICAgICAgIC8vICgyKSBhbmQgKDMpLCBhZnRlciBldmVudHVhbCBjb2VyY2lvblxuICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAvLyAtIGlmIGEgb3IgYiBhcmUgbm90IHN0cmluZ3MsIGNvbnZlcnQgYSBhbmQgYiB0byBudW1iZXJcbiAgICAgICAgLy8gICBhbmQgYXBwbHkgc3RhbmRhcmQgY29tcGFyaXNvblxuICAgICAgICAvL1xuICAgICAgICAvLyBFeGNlcHRpb246IGAhPWAgd2lsbCBub3QgY29lcmNlL2NvbnZlcnQgaWYgYm90aCBhIGFuZCBiIGFyZSBvYmplY3RzXG4gICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSAhPSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICBpZiAoYSA9PSBhKSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoYiA9PSBiKSByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTE6IC8vIEphdmFTY3JpcHQgU3ltYm9sLCBubyBvcmRlcmluZy5cbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTI6IC8vIG9jYW1sIHN0cmluZ3NcbiAgICAgICAgdmFyIGEgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGEpO1xuICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGEudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIGIgPSBiLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjQ2OiAvLyBMYXp5X3RhZ1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheVxuICAgICAgZGVmYXVsdDogLy8gQmxvY2sgd2l0aCBvdGhlciB0YWdcbiAgICAgICAgaWYoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHRhZ19hKSkge1xuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGNvbnRpbnVhdGlvbiB2YWx1ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiAoYS5sZW5ndGggPCBiLmxlbmd0aCk/LTE6MTtcbiAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmUgKGEsIGIpIHsgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRydWUpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9jb21wYXJlIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfaW50X2NvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGEgPCBiKSByZXR1cm4gKC0xKTsgaWYgKGEgPT0gYikgcmV0dXJuIDA7IHJldHVybiAxO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA9PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX25vdGVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSAhPSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVyZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID49IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcnRoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID4gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzdGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8IDApOyB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEZvcm1hdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2Zvcm1hdFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2Zvcm1hdCAoZm10KSB7XG4gIGZtdCA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoZm10KTtcbiAgdmFyIGxlbiA9IGZtdC5sZW5ndGg7XG4gIGlmIChsZW4gPiAzMSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZm9ybWF0X2ludDogZm9ybWF0IHRvbyBsb25nXCIpO1xuICB2YXIgZiA9XG4gICAgICB7IGp1c3RpZnk6JysnLCBzaWduc3R5bGU6Jy0nLCBmaWxsZXI6JyAnLCBhbHRlcm5hdGU6ZmFsc2UsXG4gICAgICAgIGJhc2U6MCwgc2lnbmVkY29udjpmYWxzZSwgd2lkdGg6MCwgdXBwZXJjYXNlOmZhbHNlLFxuICAgICAgICBzaWduOjEsIHByZWM6LTEsIGNvbnY6J2YnIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgYyA9IGZtdC5jaGFyQXQoaSk7XG4gICAgc3dpdGNoIChjKSB7XG4gICAgY2FzZSAnLSc6XG4gICAgICBmLmp1c3RpZnkgPSAnLSc7IGJyZWFrO1xuICAgIGNhc2UgJysnOiBjYXNlICcgJzpcbiAgICAgIGYuc2lnbnN0eWxlID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnMCc6XG4gICAgICBmLmZpbGxlciA9ICcwJzsgYnJlYWs7XG4gICAgY2FzZSAnIyc6XG4gICAgICBmLmFsdGVybmF0ZSA9IHRydWU7IGJyZWFrO1xuICAgIGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzpcbiAgICBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzpcbiAgICAgIGYud2lkdGggPSAwO1xuICAgICAgd2hpbGUgKGM9Zm10LmNoYXJDb2RlQXQoaSkgLSA0OCwgYyA+PSAwICYmIGMgPD0gOSkge1xuICAgICAgICBmLndpZHRoID0gZi53aWR0aCAqIDEwICsgYzsgaSsrXG4gICAgICB9XG4gICAgICBpLS07XG4gICAgICBicmVhaztcbiAgICBjYXNlICcuJzpcbiAgICAgIGYucHJlYyA9IDA7XG4gICAgICBpKys7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYucHJlYyA9IGYucHJlYyAqIDEwICsgYzsgaSsrXG4gICAgICB9XG4gICAgICBpLS07XG4gICAgY2FzZSAnZCc6IGNhc2UgJ2knOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlICd1JzpcbiAgICAgIGYuYmFzZSA9IDEwOyBicmVhaztcbiAgICBjYXNlICd4JzpcbiAgICAgIGYuYmFzZSA9IDE2OyBicmVhaztcbiAgICBjYXNlICdYJzpcbiAgICAgIGYuYmFzZSA9IDE2OyBmLnVwcGVyY2FzZSA9IHRydWU7IGJyZWFrO1xuICAgIGNhc2UgJ28nOlxuICAgICAgZi5iYXNlID0gODsgYnJlYWs7XG4gICAgY2FzZSAnZSc6IGNhc2UgJ2YnOiBjYXNlICdnJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYuY29udiA9IGM7IGJyZWFrO1xuICAgIGNhc2UgJ0UnOiBjYXNlICdGJzogY2FzZSAnRyc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyBmLnVwcGVyY2FzZSA9IHRydWU7XG4gICAgICBmLmNvbnYgPSBjLnRvTG93ZXJDYXNlICgpOyBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcmF3YnVmZmVyKSB7XG4gIGlmIChmLnVwcGVyY2FzZSkgcmF3YnVmZmVyID0gcmF3YnVmZmVyLnRvVXBwZXJDYXNlKCk7XG4gIHZhciBsZW4gPSByYXdidWZmZXIubGVuZ3RoO1xuICAvKiBBZGp1c3QgbGVuIHRvIHJlZmxlY3QgYWRkaXRpb25hbCBjaGFycyAoc2lnbiwgZXRjKSAqL1xuICBpZiAoZi5zaWduZWRjb252ICYmIChmLnNpZ24gPCAwIHx8IGYuc2lnbnN0eWxlICE9ICctJykpIGxlbisrO1xuICBpZiAoZi5hbHRlcm5hdGUpIHtcbiAgICBpZiAoZi5iYXNlID09IDgpIGxlbiArPSAxO1xuICAgIGlmIChmLmJhc2UgPT0gMTYpIGxlbiArPSAyO1xuICB9XG4gIC8qIERvIHRoZSBmb3JtYXR0aW5nICovXG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICBpZiAoZi5qdXN0aWZ5ID09ICcrJyAmJiBmLmZpbGxlciA9PSAnICcpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcgJztcbiAgaWYgKGYuc2lnbmVkY29udikge1xuICAgIGlmIChmLnNpZ24gPCAwKSBidWZmZXIgKz0gJy0nO1xuICAgIGVsc2UgaWYgKGYuc2lnbnN0eWxlICE9ICctJykgYnVmZmVyICs9IGYuc2lnbnN0eWxlO1xuICB9XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT0gOCkgYnVmZmVyICs9ICcwJztcbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSAxNikgYnVmZmVyICs9IGYudXBwZXJjYXNlP1wiMFhcIjpcIjB4XCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcwJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJzAnO1xuICBidWZmZXIgKz0gcmF3YnVmZmVyO1xuICBpZiAoZi5qdXN0aWZ5ID09ICctJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhidWZmZXIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIGZzX25vZGVfc3VwcG9ydGVkICgpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbnMubm9kZSAhPT0gJ3VuZGVmaW5lZCcpXG59XG4vL1Byb3ZpZGVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gZnNfbm9kZV9zdXBwb3J0ZWQgKCkge1xuICByZXR1cm4gZmFsc2Vcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sTm9kZUZkLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV93aXRoX2FyZ3Ncbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIE1sTm9kZURldmljZShyb290KSB7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLnJvb3QgPSByb290O1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc0ZpbGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNGaWxlKCk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihuYW1lLCBtb2RlLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5ta2RpclN5bmModGhpcy5ubShuYW1lKSx7bW9kZTptb2RlfSk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ybWRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJtZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlYWRkaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMucmVhZGRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuaXNfZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRGlyZWN0b3J5KCk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBiID0gdGhpcy5mcy5leGlzdHNTeW5jKHRoaXMubm0obmFtZSkpPzE6MDtcbiAgICB0aGlzLmZzLnVubGlua1N5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIGI7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIGNvbnN0cyA9IHJlcXVpcmUoJ2NvbnN0YW50cycpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yKHZhciBrZXkgaW4gZil7XG4gICAgc3dpdGNoKGtleSl7XG4gICAgY2FzZSBcInJkb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19SRE9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJ3cm9ubHlcIiAgOiByZXMgfD0gY29uc3RzLk9fV1JPTkxZOyBicmVhaztcbiAgICBjYXNlIFwiYXBwZW5kXCIgIDpcbiAgICAgIHJlcyB8PSBjb25zdHMuT19XUk9OTFkgfCBjb25zdHMuT19BUFBFTkQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3JlYXRlXCIgICA6IHJlcyB8PSBjb25zdHMuT19DUkVBVDsgICAgYnJlYWs7XG4gICAgY2FzZSBcInRydW5jYXRlXCIgOiByZXMgfD0gY29uc3RzLk9fVFJVTkM7ICAgIGJyZWFrO1xuICAgIGNhc2UgXCJleGNsXCIgICAgIDogcmVzIHw9IGNvbnN0cy5PX0VYQ0w7ICAgICBicmVhaztcbiAgICBjYXNlIFwiYmluYXJ5XCIgICA6IHJlcyB8PSBjb25zdHMuT19CSU5BUlk7ICAgYnJlYWs7XG4gICAgY2FzZSBcInRleHRcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fVEVYVDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJub25ibG9ja1wiIDogcmVzIHw9IGNvbnN0cy5PX05PTkJMT0NLOyBicmVhaztcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgZmQgPSB0aGlzLmZzLm9wZW5TeW5jKHRoaXMubm0obmFtZSksIHJlcyk7XG4gICAgdmFyIGlzQ2hhcmFjdGVyRGV2aWNlID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNDaGFyYWN0ZXJEZXZpY2UoKTtcbiAgICBmLmlzQ2hhcmFjdGVyRGV2aWNlID0gaXNDaGFyYWN0ZXJEZXZpY2U7XG4gICAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZCwgZik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cblxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZW5hbWUgPSBmdW5jdGlvbihvLCBuLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5yZW5hbWVTeW5jKHRoaXMubm0obyksIHRoaXMubm0obikpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN0YXQgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5zdGF0c19mcm9tX2pzKGpzX3N0YXRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5sc3RhdCA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLmxzdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5zdGF0c19mcm9tX2pzKGpzX3N0YXRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zeW1saW5rID0gZnVuY3Rpb24odG9fZGlyLCB0YXJnZXQsIHBhdGgsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnN5bWxpbmtTeW5jKHRoaXMubm0odGFyZ2V0KSwgdGhpcy5ubShwYXRoKSwgdG9fZGlyID8gJ2RpcicgOiAnZmlsZScpO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlYWRsaW5rID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBsaW5rID0gdGhpcy5mcy5yZWFkbGlua1N5bmModGhpcy5ubShuYW1lKSwgJ3V0ZjgnKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobGluayk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUub3BlbmRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5vcGVuZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yYWlzZV9ub2RlanNfZXJyb3IgPSBmdW5jdGlvbihlcnIsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKFwiVW5peC5Vbml4X2Vycm9yXCIpO1xuICBpZiAocmFpc2VfdW5peCAmJiB1bml4X2Vycm9yKSB7XG4gICAgdmFyIGFyZ3MgPSBtYWtlX3VuaXhfZXJyX2FyZ3MoZXJyLmNvZGUsIGVyci5zeXNjYWxsLCBlcnIucGF0aCwgZXJyLmVycm5vKTtcbiAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3RhdHNfZnJvbV9qcyA9IGZ1bmN0aW9uKGpzX3N0YXRzKSB7XG4gIC8qID09PVVuaXguZmlsZV9raW5kPT09XG4gICAqIHR5cGUgZmlsZV9raW5kID1cbiAgICogICAgIFNfUkVHICAgICAgICAgICAgICAgICAgICAgICAoKiogUmVndWxhciBmaWxlICopXG4gICAqICAgfCBTX0RJUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIERpcmVjdG9yeSAqKVxuICAgKiAgIHwgU19DSFIgICAgICAgICAgICAgICAgICAgICAgICgqKiBDaGFyYWN0ZXIgZGV2aWNlICopXG4gICAqICAgfCBTX0JMSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIEJsb2NrIGRldmljZSAqKVxuICAgKiAgIHwgU19MTksgICAgICAgICAgICAgICAgICAgICAgICgqKiBTeW1ib2xpYyBsaW5rICopXG4gICAqICAgfCBTX0ZJRk8gICAgICAgICAgICAgICAgICAgICAgKCoqIE5hbWVkIHBpcGUgKilcbiAgICogICB8IFNfU09DSyAgICAgICAgICAgICAgICAgICAgICAoKiogU29ja2V0ICopXG4gICAqL1xuICB2YXIgZmlsZV9raW5kO1xuICBpZiAoanNfc3RhdHMuaXNGaWxlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAwO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBmaWxlX2tpbmQgPSAxO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAyO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzQmxvY2tEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDM7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIGZpbGVfa2luZCA9IDQ7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNGSUZPKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA1O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU29ja2V0KCkpIHtcbiAgICBmaWxlX2tpbmQgPSA2O1xuICB9XG4gIC8qID09PVVuaXguc3RhdHM9PT1cbiAgICogdHlwZSBzdGF0cyA9XG4gICAqICB7IHN0X2RldiA6IGludDsgICAgICAgICAgICAgICAoKiogRGV2aWNlIG51bWJlciAqKVxuICAgKiAgICBzdF9pbm8gOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIElub2RlIG51bWJlciAqKVxuICAgKiAgICBzdF9raW5kIDogZmlsZV9raW5kOyAgICAgICAgKCoqIEtpbmQgb2YgdGhlIGZpbGUgKilcbiAgICogICAgc3RfcGVybSA6IGZpbGVfcGVybTsgICAgICAgICgqKiBBY2Nlc3MgcmlnaHRzICopXG4gICAqICAgIHN0X25saW5rIDogaW50OyAgICAgICAgICAgICAoKiogTnVtYmVyIG9mIGxpbmtzICopXG4gICAqICAgIHN0X3VpZCA6IGludDsgICAgICAgICAgICAgICAoKiogVXNlciBpZCBvZiB0aGUgb3duZXIgKilcbiAgICogICAgc3RfZ2lkIDogaW50OyAgICAgICAgICAgICAgICgqKiBHcm91cCBJRCBvZiB0aGUgZmlsZSdzIGdyb3VwICopXG4gICAqICAgIHN0X3JkZXYgOiBpbnQ7ICAgICAgICAgICAgICAoKiogRGV2aWNlIElEIChpZiBzcGVjaWFsIGZpbGUpICopXG4gICAqICAgIHN0X3NpemUgOiBpbnQ7ICAgICAgICAgICAgICAoKiogU2l6ZSBpbiBieXRlcyAqKVxuICAgKiAgICBzdF9hdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgYWNjZXNzIHRpbWUgKilcbiAgICogICAgc3RfbXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lICopXG4gICAqICAgIHN0X2N0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBzdGF0dXMgY2hhbmdlIHRpbWUgKilcbiAgICogIH1cbiAgICovXG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGpzX3N0YXRzLmRldixcbiAgICBqc19zdGF0cy5pbm8sXG4gICAgZmlsZV9raW5kLFxuICAgIGpzX3N0YXRzLm1vZGUsXG4gICAganNfc3RhdHMubmxpbmssXG4gICAganNfc3RhdHMudWlkLFxuICAgIGpzX3N0YXRzLmdpZCxcbiAgICBqc19zdGF0cy5yZGV2LFxuICAgIGpzX3N0YXRzLnNpemUsXG4gICAganNfc3RhdHMuYXRpbWVNcyxcbiAgICBqc19zdGF0cy5tdGltZU1zLFxuICAgIGpzX3N0YXRzLmN0aW1lTXNcbiAgKTtcbn1cblxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sTm9kZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIE1sTm9kZURldmljZSgpIHtcbn1cblxuLy9Qcm92aWRlczogTWxOb2RlRmRcbi8vUmVxdWlyZXM6IE1sRmlsZSwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfYnl0ZXNfc2V0LCBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxOb2RlRmQoZmQsIGZsYWdzKXtcbiAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHRoaXMuZmQgPSBmZDtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuTWxOb2RlRmQucHJvdG90eXBlID0gbmV3IE1sRmlsZSAoKTtcbk1sTm9kZUZkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sTm9kZUZkO1xuXG5NbE5vZGVGZC5wcm90b3R5cGUudHJ1bmNhdGUgPSBmdW5jdGlvbihsZW4pe1xuICB0cnkge1xuICAgIHRoaXMuZnMuZnRydW5jYXRlU3luYyh0aGlzLmZkLGxlbnwwKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGZC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKS5zaXplO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKG9mZnNldCxidWYsYnVmX29mZnNldCxsZW4pe1xuICB0cnkge1xuICAgIGlmKHRoaXMuZmxhZ3MuaXNDaGFyYWN0ZXJEZXZpY2UpXG4gICAgICB0aGlzLmZzLndyaXRlU3luYyh0aGlzLmZkLCBidWYsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgZWxzZVxuICAgICAgdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4sIG9mZnNldCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ob2Zmc2V0LGEsYnVmX29mZnNldCxsZW4pe1xuICB0cnkge1xuICAgIGlmKHRoaXMuZmxhZ3MuaXNDaGFyYWN0ZXJEZXZpY2UpXG4gICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuKTtcbiAgICBlbHNlXG4gICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICAgIHJldHVybiByZWFkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCl7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5jbG9zZVN5bmModGhpcy5mZCk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogTWxOb2RlRmRcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIE1sTm9kZUZkKCl7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9SZXF1aXJlczogTWxOb2RlRmRcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKXtcbiAgaWYoZmxhZ3MubmFtZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZnMgPSByZXF1aXJlKFwiZnNcIik7XG4gICAgICB2YXIgZmQyID0gZnMub3BlblN5bmMoZmxhZ3MubmFtZSwgXCJyc1wiKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQyLCBmbGFncyk7XG4gICAgfSBjYXRjaChlKSB7ICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZCwgZmxhZ3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlKGZkLCBmbGFncyl7XG4gIHJldHVybiBudWxsO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBEdW1teSBmaWxlc3lzdGVtXG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSl7XG4gIHJldHVybiAobmFtZS5zbGljZSgtMSkgIT09IFwiL1wiKSA/IChuYW1lICsgXCIvXCIpIDogbmFtZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9IGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csJy8nKTtcbmVsc2VcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSAgXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKXtcbiAgdmFyIHggPSBwYXRoX2lzX2Fic29sdXRlKHBhdGgpO1xuICBpZiAoIXgpIHJldHVybjtcbiAgcmV0dXJuIHhbMF0gKyBcIi9cIn1cblxuLy9Qcm92aWRlczogY2FtbF9yb290XG4vL1JlcXVpcmVzOiBjYW1sX2dldF9yb290LCBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX2ZhaWx3aXRoXG52YXIgY2FtbF9yb290ID0gY2FtbF9nZXRfcm9vdChjYW1sX2N1cnJlbnRfZGlyKSB8fCBjYW1sX2ZhaWx3aXRoKFwidW5hYmxlIHRvIGNvbXB1dGUgY2FtbF9yb290XCIpO1xuXG5cbi8vUHJvdmlkZXM6IE1sRmlsZVxuZnVuY3Rpb24gTWxGaWxlKCl7ICB9XG5cbi8vUHJvdmlkZXM6IHBhdGhfaXNfYWJzb2x1dGVcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKSB7XG4gIGZ1bmN0aW9uIHBvc2l4KHBhdGgpIHtcbiAgICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcvJykgcmV0dXJuIFtcIlwiLCBwYXRoLnN1YnN0cmluZygxKV07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gd2luMzIocGF0aCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2IzZmNjMjQ1ZmIyNTUzOTkwOWVmMWQ1ZWFhMDFkYmY5MmUxNjg2MzMvbGliL3BhdGguanMjTDU2XG4gICAgdmFyIHNwbGl0RGV2aWNlUmUgPSAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8ICcnO1xuICAgIHZhciBpc1VuYyA9IEJvb2xlYW4oZGV2aWNlICYmIGRldmljZS5jaGFyQXQoMSkgIT09ICc6Jyk7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChCb29sZWFuKHJlc3VsdFsyXSB8fCBpc1VuYykpIHtcbiAgICAgIHZhciByb290ID0gKHJlc3VsdFsxXSB8fCAnJyk7XG4gICAgICB2YXIgc2VwID0gKHJlc3VsdFsyXSB8fCAnJyk7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc3Vic3RyaW5nKHJvb3QubGVuZ3RoICsgc2VwLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZihmc19ub2RlX3N1cHBvcnRlZCAoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHdpbjMyIDogcG9zaXg7XG4gIH1cbiAgZWxzZSByZXR1cm4gcG9zaXhcbn1cbnZhciBwYXRoX2lzX2Fic29sdXRlID0gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9wYXRoXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZywgcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3BhdGggKG5hbWUpIHtcbiAgbmFtZT1jYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgaWYoICFwYXRoX2lzX2Fic29sdXRlKG5hbWUpIClcbiAgICBuYW1lID0gY2FtbF9jdXJyZW50X2RpciArIG5hbWU7XG4gIHZhciBjb21wMCA9IHBhdGhfaXNfYWJzb2x1dGUobmFtZSk7XG4gIHZhciBjb21wID0gY29tcDBbMV0uc3BsaXQoXCIvXCIpO1xuICB2YXIgbmNvbXAgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpPGNvbXAubGVuZ3RoOyBpKyspe1xuICAgIHN3aXRjaChjb21wW2ldKXtcbiAgICBjYXNlIFwiLi5cIjogaWYobmNvbXAubGVuZ3RoPjEpIG5jb21wLnBvcCgpOyBicmVhaztcbiAgICBjYXNlIFwiLlwiOiBicmVhaztcbiAgICBjYXNlIFwiXCI6IGJyZWFrO1xuICAgIGRlZmF1bHQ6IG5jb21wLnB1c2goY29tcFtpXSk7YnJlYWtcbiAgICB9XG4gIH1cbiAgbmNvbXAudW5zaGlmdChjb21wMFswXSk7XG4gIG5jb21wLm9yaWcgPSBuYW1lO1xuICByZXR1cm4gbmNvbXA7XG59XG5cbi8vUHJvdmlkZXM6anNvb19tb3VudF9wb2ludFxuLy9SZXF1aXJlczogTWxGYWtlRGV2aWNlLCBNbE5vZGVEZXZpY2UsIGNhbWxfcm9vdCwgZnNfbm9kZV9zdXBwb3J0ZWRcbnZhciBqc29vX21vdW50X3BvaW50ID0gW11cbmlmIChmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbE5vZGVEZXZpY2UoY2FtbF9yb290KX0pO1xufSBlbHNlIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOmNhbWxfcm9vdCxkZXZpY2U6bmV3IE1sRmFrZURldmljZShjYW1sX3Jvb3QpfSk7XG59XG5qc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6XCIvc3RhdGljL1wiLCBkZXZpY2U6bmV3IE1sRmFrZURldmljZShcIi9zdGF0aWMvXCIpfSk7XG5cbi8vUHJvdmlkZXM6Y2FtbF9saXN0X21vdW50X3BvaW50XG4vL1JlcXVpcmVzOiBqc29vX21vdW50X3BvaW50LCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xpc3RfbW91bnRfcG9pbnQoKXtcbiAgdmFyIHByZXYgPSAwXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKXtcbiAgICB2YXIgb2xkID0gcHJldjtcbiAgICBwcmV2ID0gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoanNvb19tb3VudF9wb2ludFtpXS5wYXRoKSwgb2xkXVxuICB9XG4gIHJldHVybiBwcmV2O1xufVxuXG4vL1Byb3ZpZGVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX2dldF9yb290LCBNbE5vZGVEZXZpY2UsIGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiByZXNvbHZlX2ZzX2RldmljZShuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSk7XG4gIHZhciByZXM7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG0gPSBqc29vX21vdW50X3BvaW50W2ldO1xuICAgIGlmKG5hbWVfc2xhc2guc2VhcmNoKG0ucGF0aCkgPT0gMFxuICAgICAgICYmICghcmVzIHx8IHJlcy5wYXRoLmxlbmd0aCA8IG0ucGF0aC5sZW5ndGgpKVxuICAgICAgcmVzID0ge3BhdGg6bS5wYXRoLGRldmljZTptLmRldmljZSxyZXN0Om5hbWUuc3Vic3RyaW5nKG0ucGF0aC5sZW5ndGgsbmFtZS5sZW5ndGgpfTtcbiAgfVxuICBpZiggIXJlcyAmJiBmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHJvb3QgPSBjYW1sX2dldF9yb290KG5hbWUpO1xuICAgIGlmIChyb290ICYmIHJvb3QubWF0Y2goL15bYS16QS1aXTpcXC8kLykpe1xuICAgICAgdmFyIG0gPSB7cGF0aDpyb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKHJvb3QpfTtcbiAgICAgIGpzb29fbW91bnRfcG9pbnQucHVzaChtKTtcbiAgICAgIHJlcyA9IHtwYXRoOm0ucGF0aCxkZXZpY2U6bS5kZXZpY2UscmVzdDpuYW1lLnN1YnN0cmluZyhtLnBhdGgubGVuZ3RoLG5hbWUubGVuZ3RoKX07XG4gICAgfVxuICB9XG4gIGlmKCByZXMgKSByZXR1cm4gcmVzO1xuICBjYW1sX3JhaXNlX3N5c19lcnJvcihcIm5vIGRldmljZSBmb3VuZCBmb3IgXCIgKyBuYW1lX3NsYXNoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tb3VudF9hdXRvbG9hZFxuLy9SZXF1aXJlczogTWxGYWtlRGV2aWNlLCBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF9tb3VudF9hdXRvbG9hZChuYW1lLGYpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpuYW1lLGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKG5hbWUsZil9KVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bm1vdW50XG4vL1JlcXVpcmVzOiBqc29vX21vdW50X3BvaW50LCBjYW1sX21ha2VfcGF0aCwgY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF91bm1vdW50KG5hbWUpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIHZhciBpZHggPSAtMTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspXG4gICAgaWYoanNvb19tb3VudF9wb2ludFtpXS5wYXRoID09IG5hbWUpIGlkeCA9IGk7XG4gIGlmKGlkeCA+IC0xKSBqc29vX21vdW50X3BvaW50LnNwbGljZShpZHgsMSk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGN3ZFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0Y3dkKCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX2N1cnJlbnRfZGlyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2hkaXJcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfY2hkaXIoZGlyKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZGlyKTtcbiAgaWYocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICBpZihyb290LnJlc3QpIGNhbWxfY3VycmVudF9kaXIgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHJvb3QucGF0aCArIHJvb3QucmVzdCk7XG4gICAgZWxzZSBjYW1sX2N1cnJlbnRfZGlyID0gcm9vdC5wYXRoO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcoZGlyKSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lKXtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfYV9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9hX2RpcihuYW1lKXtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzIChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJldHVybiByb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVhZF9kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVhZF9kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspXG4gICAgbFtpKzFdID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhhW2ldKTtcbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbW92ZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19yZW1vdmUobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBvayA9IHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xuICBpZihvayA9PSAwKSBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5pc19kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIGE/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobyxuKXtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmKG9fcm9vdC5kZXZpY2UgIT0gbl9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBjYW5ub3QgbW92ZSBmaWxlIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1cIik7XG4gIGlmKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBubyBpbXBsZW1lbnRlZFwiKTtcbiAgb19yb290LmRldmljZS5yZW5hbWUob19yb290LnJlc3QsIG5fcm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbWtkaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9zeXNfbWtkaXIobmFtZSwgcGVybSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCxwZXJtKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfbm90X2FfZGlyXG5mdW5jdGlvbiBjYW1sX3N5c19ybWRpcihuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGUodmZkLCBraW5kLCBsYXlvdXQsIHNoYXJlZCwgZGltcywgcG9zKSB7XG4gIC8vIHZhciBkYXRhID0gY2FtbF9zeXNfZmRzW3ZmZF07XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2JhX21hcF9maWxlIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZVxuLy9SZXF1aXJlczogY2FtbF9iYV9tYXBfZmlsZVxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZShhcmd2LGFyZ24pe1xuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLGFyZ3ZbMV0sYXJndlsyXSxhcmd2WzNdLGFyZ3ZbNF0sYXJndls1XSk7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlX2V4dGVybihuYW1lLGNvbnRlbnQpe1xuICBpZihnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUpXG4gICAgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCk7XG4gIGVsc2Uge1xuICAgIGlmKCFnbG9iYWxUaGlzLmNhbWxfZnNfdG1wKSBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gICAgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcC5wdXNoKHtuYW1lOm5hbWUsY29udGVudDpjb250ZW50fSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnNfaW5pdFxuLy9SZXF1aXJlczoganNvb19jcmVhdGVfZmlsZVxuZnVuY3Rpb24gY2FtbF9mc19pbml0ICgpe1xuICB2YXIgdG1wPWdsb2JhbFRoaXMuY2FtbF9mc190bXBcbiAgaWYodG1wKXtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgaSsrKXtcbiAgICAgIGpzb29fY3JlYXRlX2ZpbGUodG1wW2ldLm5hbWUsdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYoISByb290LmRldmljZS5yZWdpc3RlcikgY2FtbF9mYWlsd2l0aChcImNhbm5vdCByZWdpc3RlciBmaWxlXCIpO1xuICByb290LmRldmljZS5yZWdpc3Rlcihyb290LnJlc3QsY29udGVudCk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KSB7XG4gIHZhciBuYW1lID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlYWRfZmlsZV9jb250ZW50XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50IChuYW1lKSB7XG4gIHZhciBuYW1lID0gKHR5cGVvZiBuYW1lID09IFwic3RyaW5nXCIpP2NhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSk6bmFtZTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LHtyZG9ubHk6MX0pO1xuICAgIHZhciBsZW4gID0gZmlsZS5sZW5ndGgoKTtcbiAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICBmaWxlLnJlYWQoMCxidWYsMCxsZW4pO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShidWYpXG4gIH1cbiAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSk7XG59XG4iLCIvL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5XG4vL0FsaWFzOiB1bml4X2dldHRpbWVvZmRheVxuZnVuY3Rpb24gY2FtbF91bml4X2dldHRpbWVvZmRheSAoKSB7XG4gIHJldHVybiAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X3RpbWUgKCkge1xuICByZXR1cm4gTWF0aC5mbG9vcihjYW1sX3VuaXhfZ2V0dGltZW9mZGF5ICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dtdGltZVxuLy9BbGlhczogdW5peF9nbXRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9nbXRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRVVENTZWNvbmRzKCksIGQuZ2V0VVRDTWludXRlcygpLCBkLmdldFVUQ0hvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RhdGUoKSwgZC5nZXRVVENNb250aCgpLCBkLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXRVVENEYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgZmFsc2UgfCAwIC8qIGZvciBVVEMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGlzIGZhbHNlICovKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbG9jYWx0aW1lXG4vL0FsaWFzOiB1bml4X2xvY2FsdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X2xvY2FsdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgMCwgMSkpLmdldFRpbWUoKTtcbiAgdmFyIGRveSA9IE1hdGguZmxvb3IoKGRfbnVtIC0gamFudWFyeWZpcnN0KSAvIDg2NDAwMDAwKTtcbiAgdmFyIGphbiA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgMCwgMSk7XG4gIHZhciBqdWwgPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDYsIDEpO1xuICB2YXIgc3RkVGltZXpvbmVPZmZzZXQgPSBNYXRoLm1heChqYW4uZ2V0VGltZXpvbmVPZmZzZXQoKSwganVsLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRTZWNvbmRzKCksIGQuZ2V0TWludXRlcygpLCBkLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldERhdGUoKSwgZC5nZXRNb250aCgpLCBkLmdldEZ1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXREYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgKGQuZ2V0VGltZXpvbmVPZmZzZXQoKSA8IHN0ZFRpbWV6b25lT2Zmc2V0KSB8IDAgLyogZGF5bGlnaHQgc2F2aW5ncyB0aW1lICBmaWVsZC4gKi8pXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbWt0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWt0aW1lKHRtKXtcbiAgdmFyIGQgPSAobmV3IERhdGUodG1bNl0rMTkwMCx0bVs1XSx0bVs0XSx0bVszXSx0bVsyXSx0bVsxXSkpLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IGNhbWxfdW5peF9sb2NhbHRpbWUodCk7XG4gIHJldHVybiBCTE9DSygwLHQsdG0yKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGFydHVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fc3RhcnR1cFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXJ0dXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xlYW51cCBjb25zdFxuLy9BbGlhczogd2luX2NsZWFudXBcbmZ1bmN0aW9uIGNhbWxfdW5peF9jbGVhbnVwKCkge31cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbGVkZXNjcl9vZl9mZCBjb25zdFxuLy9BbGlhczogd2luX2hhbmRsZV9mZFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbGVkZXNjcl9vZl9mZCh4KSB7cmV0dXJuIHg7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaXNhdHR5XG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9BbGlhczogdW5peF9pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmlsZURlc2NyaXB0b3IpIHtcbiAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciB0dHkgPSByZXF1aXJlKCd0dHknKTtcbiAgICByZXR1cm4gdHR5LmlzYXR0eShmaWxlRGVzY3JpcHRvcik/MTowO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2lzYXR0eVxuLy9BbGlhczogdW5peF9pc2F0dHlcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmlsZURlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IG1ha2VfdW5peF9lcnJfYXJnc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbnZhciB1bml4X2Vycm9yID0gW1xuICAvKiA9PT1Vbml4LmVycm9yPT09XG4gICAqXG4gICAqIFRoaXMgYXJyYXkgaXMgaW4gb3JkZXIgb2YgdGhlIHZhcmlhbnQgaW4gT0NhbWxcbiAgICovXG4gIFwiRTJCSUdcIiwgXCJFQUNDRVNcIiwgXCJFQUdBSU5cIiwgXCJFQkFERlwiLCBcIkVCVVNZXCIsIFwiRUNISUxEXCIsIFwiRURFQURMS1wiLCBcIkVET01cIixcbiAgXCJFRVhJU1RcIiwgXCJFRkFVTFRcIiwgXCJFRkJJR1wiLCBcIkVJTlRSXCIsIFwiRUlOVkFMXCIsIFwiRUlPXCIsIFwiRUlTRElSXCIsIFwiRU1GSUxFXCIsXG4gIFwiRU1MSU5LXCIsIFwiRU5BTUVUT09MT05HXCIsIFwiRU5GSUxFXCIsIFwiRU5PREVWXCIsIFwiRU5PRU5UXCIsIFwiRU5PRVhFQ1wiLCBcIkVOT0xDS1wiLFxuICBcIkVOT01FTVwiLCBcIkVOT1NQQ1wiLCBcIkVOT1NZU1wiLCBcIkVOT1RESVJcIiwgXCJFTk9URU1QVFlcIiwgXCJFTk9UVFlcIiwgXCJFTlhJT1wiLFxuICBcIkVQRVJNXCIsIFwiRVBJUEVcIiwgXCJFUkFOR0VcIiwgXCJFUk9GU1wiLCBcIkVTUElQRVwiLCBcIkVTUkNIXCIsIFwiRVhERVZcIiwgXCJFV09VTERCTE9DS1wiLFxuICBcIkVJTlBST0dSRVNTXCIsIFwiRUFMUkVBRFlcIiwgXCJFTk9UU09DS1wiLCBcIkVERVNUQUREUlJFUVwiLCBcIkVNU0dTSVpFXCIsXG4gIFwiRVBST1RPVFlQRVwiLCBcIkVOT1BST1RPT1BUXCIsIFwiRVBST1RPTk9TVVBQT1JUXCIsIFwiRVNPQ0tUTk9TVVBQT1JUXCIsXG4gIFwiRU9QTk9UU1VQUFwiLCBcIkVQRk5PU1VQUE9SVFwiLCBcIkVBRk5PU1VQUE9SVFwiLCBcIkVBRERSSU5VU0VcIiwgXCJFQUREUk5PVEFWQUlMXCIsXG4gIFwiRU5FVERPV05cIiwgXCJFTkVUVU5SRUFDSFwiLCBcIkVORVRSRVNFVFwiLCBcIkVDT05OQUJPUlRFRFwiLCBcIkVDT05OUkVTRVRcIiwgXCJFTk9CVUZTXCIsXG4gIFwiRUlTQ09OTlwiLCBcIkVOT1RDT05OXCIsIFwiRVNIVVRET1dOXCIsIFwiRVRPT01BTllSRUZTXCIsIFwiRVRJTUVET1VUXCIsIFwiRUNPTk5SRUZVU0VEXCIsXG4gIFwiRUhPU1RET1dOXCIsIFwiRUhPU1RVTlJFQUNIXCIsIFwiRUxPT1BcIiwgXCJFT1ZFUkZMT1dcIlxuXTtcbmZ1bmN0aW9uIG1ha2VfdW5peF9lcnJfYXJncyhjb2RlLCBzeXNjYWxsLCBwYXRoLCBlcnJubykge1xuICB2YXIgdmFyaWFudCA9IHVuaXhfZXJyb3IuaW5kZXhPZihjb2RlKTtcbiAgaWYgKHZhcmlhbnQgPCAwKSB7XG4gICAgLy8gRGVmYXVsdCBpZiB1bmRlZmluZWRcbiAgICBpZiAoZXJybm8gPT0gbnVsbCkge1xuICAgICAgZXJybm8gPSAtOTk5OVxuICAgIH1cbiAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB2YXJpYW50cywgZmFsbGJhY2sgdG8gRVVOS05PV05FUlIoaW50KVxuICAgIHZhcmlhbnQgPSBCTE9DSygwLCBlcnJubyk7XG4gIH1cbiAgdmFyIGFyZ3MgPSBbXG4gICAgdmFyaWFudCxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzeXNjYWxsIHx8IFwiXCIpLFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGggfHwgXCJcIilcbiAgXTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGF0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9zdGF0XG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2Uuc3RhdCkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3RhdDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5zdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9zdGF0LCBjYW1sX2ludDY0X29mX2ludDMyXG4vL0FsaWFzOiB1bml4X3N0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGF0XzY0KG5hbWUpIHtcbiAgdmFyIHIgPSBjYW1sX3VuaXhfc3RhdChuYW1lKTtcbiAgcls5XSA9IGNhbWxfaW50NjRfb2ZfaW50MzIocls5XSk7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHN0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X2xzdGF0XG5mdW5jdGlvbiBjYW1sX3VuaXhfbHN0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLmxzdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9sc3RhdDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5sc3RhdChyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xzdGF0LCBjYW1sX2ludDY0X29mX2ludDMyXG4vL0FsaWFzOiB1bml4X2xzdGF0XzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfbHN0YXRfNjQobmFtZSkge1xuICB2YXIgciA9IGNhbWxfdW5peF9sc3RhdChuYW1lKTtcbiAgcls5XSA9IGNhbWxfaW50NjRfb2ZfaW50MzIocls5XSk7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbWtkaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X21rZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWtkaXIobmFtZSwgcGVybSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLm1rZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9ta2Rpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ybWRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcm1kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ybWRpcihuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2Uucm1kaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JtZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N5bWxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3N5bWxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9zeW1saW5rKHRvX2Rpciwgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYoc3JjX3Jvb3QuZGV2aWNlICE9IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IGNhbm5vdCBzeW1saW5rIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1zXCIpO1xuICBpZiAoIXNyY19yb290LmRldmljZS5zeW1saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zeW1saW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNyY19yb290LmRldmljZS5zeW1saW5rKHRvX2Rpciwgc3JjX3Jvb3QucmVzdCwgZHN0X3Jvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRsaW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9yZWFkbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRsaW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5yZWFkbGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcmVhZGxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UucmVhZGxpbmsocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdW5saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF91bmxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF91bmxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnVubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfdW5saW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR1aWRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL0FsaWFzOiB1bml4X2dldHVpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldHVpZCh1bml0KSB7XG4gIGlmKGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKXtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLmdldHVpZCgpO1xuICB9XG4gIGNhbWxfcmFpc2Vfbm90X2ZvdW5kKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXRwd3VpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0cHd1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXRwd3VpZCh1bml0KSB7XG4gIGNhbWxfcmFpc2Vfbm90X2ZvdW5kKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9oYXNfc3ltbGlua1xuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vQWxpYXM6IHVuaXhfaGFzX3N5bWxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9oYXNfc3ltbGluayh1bml0KSB7XG4gIHJldHVybiBmc19ub2RlX3N1cHBvcnRlZCgpPzE6MFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfb3BlbmRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfb3BlbmRpclxuZnVuY3Rpb24gY2FtbF91bml4X29wZW5kaXIocGF0aCkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKHBhdGgpO1xuICBpZiAoIXJvb3QuZGV2aWNlLm9wZW5kaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X29wZW5kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICB2YXIgZGlyX2hhbmRsZSA9IHJvb3QuZGV2aWNlLm9wZW5kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xuICByZXR1cm4geyBwb2ludGVyIDogZGlyX2hhbmRsZSwgcGF0aDogcGF0aCB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZVxuLy9BbGlhczogdW5peF9yZWFkZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKSB7XG4gIHZhciBlbnRyeTtcbiAgdHJ5IHtcbiAgICAgIGVudHJ5ID0gZGlyX2hhbmRsZS5wb2ludGVyLnJlYWRTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcInJlYWRkaXJcIiwgZGlyX2hhbmRsZS5wYXRoKSk7XG4gIH1cbiAgaWYgKGVudHJ5ID09PSBudWxsKSB7XG4gICAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZW50cnkubmFtZSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL0FsaWFzOiB1bml4X2Nsb3NlZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSkge1xuICB0cnkge1xuICAgICAgZGlyX2hhbmRsZS5wb2ludGVyLmNsb3NlU3luYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJjbG9zZWRpclwiLCBkaXJfaGFuZGxlLnBhdGgpKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmV3aW5kZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXIsIGNhbWxfdW5peF9vcGVuZGlyXG4vL0FsaWFzOiB1bml4X3Jld2luZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3Jld2luZGRpcihkaXJfaGFuZGxlKSB7XG4gIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbiAgdmFyIG5ld19kaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIoZGlyX2hhbmRsZS5wYXRoKTtcbiAgZGlyX2hhbmRsZS5wb2ludGVyID0gbmV3X2Rpcl9oYW5kbGUucG9pbnRlcjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kZmlyc3Rcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91bml4X29wZW5kaXIsIGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZGZpcnN0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGZpcnN0KHBhdGgpIHtcbiAgLy8gVGhlIFdpbmRvd3MgY29kZSBhZGRzIHRoaXMgZ2xvYiB0byB0aGUgcGF0aCwgc28gd2UgbmVlZCB0byByZW1vdmUgaXRcbiAgdmFyIHBhdGhfanMgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwYXRoKTtcbiAgcGF0aF9qcyA9IHBhdGhfanMucmVwbGFjZSgvKF58W1xcXFxcXC9dKVxcKlxcLlxcKiQvLCBcIlwiKTtcbiAgcGF0aCA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGhfanMpO1xuICAvLyAqLiogaXMgbm93IHN0cmlwcGVkXG4gIHZhciBkaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIocGF0aCk7XG4gIHZhciBmaXJzdF9lbnRyeSA9IGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpO1xuICAvLyBUaGUgV2luZG93cyBiaW5kaW5ncyB0eXBlIGRpcl9oYW5kbGUgYXMgYW4gYGludGAgYnV0IGl0J3Mgbm90IGluIEpTXG4gIHJldHVybiBbMCwgZmlyc3RfZW50cnksIGRpcl9oYW5kbGVdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZG5leHRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZG5leHRcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kbmV4dChkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRjbG9zZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL0FsaWFzOiB3aW5fZmluZGNsb3NlXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGNsb3NlKGRpcl9oYW5kbGUpIHtcbiAgcmV0dXJuIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaW5ldF9hZGRyX29mX3N0cmluZyBjb25zdFxuLy9BbGlhczogdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3VuaXhfaW5ldF9hZGRyX29mX3N0cmluZyAoKSB7cmV0dXJuIDA7fVxuXG5cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZURldmljZVxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgTWxGYWtlRmQsIGNhbWxfY3JlYXRlX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2FycmF5LCBjYW1sX2J5dGVzX29mX3N0cmluZywgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVzXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3NcbmZ1bmN0aW9uIE1sRmFrZURldmljZSAocm9vdCwgZikge1xuICB0aGlzLmNvbnRlbnQ9e307XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG4gIHRoaXMubG9va3VwRnVuID0gZjtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubm0gPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAodGhpcy5yb290ICsgbmFtZSk7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNyZWF0ZV9kaXJfaWZfbmVlZGVkID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY29tcCA9IG5hbWUuc3BsaXQoXCIvXCIpO1xuICB2YXIgcmVzID0gXCJcIjtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGNvbXAubGVuZ3RoIC0gMTsgaSsrKXtcbiAgICByZXMgKz0gY29tcFtpXSArIFwiL1wiO1xuICAgIGlmKHRoaXMuY29udGVudFtyZXNdKSBjb250aW51ZTtcbiAgICB0aGlzLmNvbnRlbnRbcmVzXSA9IFN5bWJvbChcImRpcmVjdG9yeVwiKTtcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5zbGFzaCA9IGZ1bmN0aW9uKG5hbWUpe1xuICByZXR1cm4gL1xcLyQvLnRlc3QobmFtZSk/bmFtZToobmFtZSArIFwiL1wiKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24obmFtZSkge1xuICBpZighdGhpcy5jb250ZW50W25hbWVdICYmIHRoaXMubG9va3VwRnVuKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMubG9va3VwRnVuKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXModGhpcy5yb290KSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKSk7XG4gICAgaWYocmVzICE9PSAwKSB7XG4gICAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgICAgdGhpcy5jb250ZW50W25hbWVdPW5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHJlc1sxXSkpO1xuICAgIH1cbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIC8vIFRoZSByb290IG9mIHRoZSBkZXZpY2UgZXhpc3RzXG4gIGlmKG5hbWUgPT0gXCJcIikgcmV0dXJuIDE7XG4gIC8vIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gIGlmKHRoaXMuY29udGVudFtuYW1lX3NsYXNoXSkgcmV0dXJuIDE7XG4gIC8vIENoZWNrIGlmIGEgZmlsZSBleGlzdHNcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV0/MTowO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5pc0ZpbGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKHRoaXMuZXhpc3RzKG5hbWUpICYmICF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIHJldHVybiAxXG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsbW9kZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gIGlmKHRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVFWElTVFwiLCBcIm1rZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IEZpbGUgZXhpc3RzXCIpO1xuICAgIH1cbiAgfVxuICB2YXIgcGFyZW50ID0gL14oLiopXFwvW14vXSsvLmV4ZWMobmFtZSk7XG4gIHBhcmVudCA9IChwYXJlbnQgJiYgcGFyZW50WzFdKSB8fCAnJztcbiAgaWYoIXRoaXMuZXhpc3RzKHBhcmVudCkpe1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9FTlRcIiwgXCJta2RpclwiLCB0aGlzLm5tKHBhcmVudCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihwYXJlbnQgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKHBhcmVudCkpe1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URElSXCIsIFwibWtkaXJcIiwgdGhpcy5ubShwYXJlbnQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IocGFyZW50ICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZCh0aGlzLnNsYXNoKG5hbWUpKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucm1kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOih0aGlzLnNsYXNoKG5hbWUpKTtcbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCArIFwiKFteL10rKVwiKTtcbiAgaWYoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT0VOVFwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URElSXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgaWYobi5tYXRjaChyKSkge1xuICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVEVNUFRZXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiOiBEaXJlY3Rvcnkgbm90IGVtcHR5XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVfc2xhc2hdO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWFkZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgbmFtZV9zbGFzaCA9IChuYW1lID09IFwiXCIpP1wiXCI6KHRoaXMuc2xhc2gobmFtZSkpO1xuICBpZighdGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gIH1cbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCArIFwiKFteL10rKVwiKTtcbiAgdmFyIHNlZW4gPSB7fVxuICB2YXIgYSA9IFtdO1xuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgdmFyIG0gPSBuLm1hdGNoKHIpO1xuICAgIGlmKG0gJiYgIXNlZW5bbVsxXV0pIHtzZWVuW21bMV1dID0gdHJ1ZTsgYS5wdXNoKG1bMV0pfVxuICB9XG4gIHJldHVybiBhO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG5cbiAgdmFyIGEgPSB0aGlzLnJlYWRkaXIobmFtZSk7XG4gIHZhciBjID0gZmFsc2U7XG4gIHZhciBpID0gMDtcbiAgcmV0dXJuIHsgcmVhZFN5bmMgOiAoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjKSB7XG4gICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IGNsb3NlZGlyIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoaSA9PSBhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGVudHJ5ID0gYVtpXTtcbiAgICBpKys7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkgfVxuICB9KVxuICAgICwgY2xvc2VTeW5jOiAoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGMpIHtcbiAgICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IGNsb3NlZGlyIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYyA9IHRydWU7XG4gICAgICBhID0gW107XG4gICAgfSlcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKG5hbWUgPT0gXCJcIikgIHJldHVybiB0cnVlO1xuICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF0/MTowO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBvayA9IHRoaXMuY29udGVudFtuYW1lXT90cnVlOmZhbHNlO1xuICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVdO1xuICByZXR1cm4gb2s7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG4gIHZhciBmaWxlO1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gICAgaWYoZi50cnVuY2F0ZSkgZmlsZS50cnVuY2F0ZSgpO1xuICB9IGVsc2UgaWYgKGYuY3JlYXRlKSB7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSAodGhpcy5ubShuYW1lKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZikge1xuICB2YXIgZmlsZTtcbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgaWYgKHRoaXMuY29udGVudFtuYW1lXSkge1xuICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogaXMgYSBkaXJlY3RvcnlcIik7XG4gICAgaWYgKGYuY3JlYXRlICYmIGYuZXhjbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0c1wiKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIGlmKGYudHJ1bmNhdGUpIGZpbGUudHJ1bmNhdGUoKTtcbiAgfSBlbHNlIGlmIChmLmNyZWF0ZSkge1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUgKHRoaXMubm0obmFtZSkpO1xuICB9XG4gIHJldHVybiBuZXcgTWxGYWtlRmQodGhpcy5ubShuYW1lKSwgZmlsZSwgZik7XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVnaXN0ZXI9IGZ1bmN0aW9uIChuYW1lLGNvbnRlbnQpe1xuICB2YXIgZmlsZTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVdKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICBpZihjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjb250ZW50KTtcbiAgaWYoY2FtbF9pc19tbF9zdHJpbmcoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgZWxzZSBpZihjb250ZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICBlbHNlIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQudG9TdHJpbmcpIHtcbiAgICB2YXIgYnl0ZXMgPSBjYW1sX2J5dGVzX29mX3N0cmluZyhjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjb250ZW50LnRvU3RyaW5nKCkpKTtcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoYnl0ZXMpO1xuICB9XG4gIGlmKGZpbGUpe1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gZmlsZTtcbiAgfVxuICBlbHNlIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBNbEZha2VGaWxlKGNvbnRlbnQpe1xuICB0aGlzLmRhdGEgPSBjb250ZW50O1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuTWxGYWtlRmlsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbEZha2VGaWxlXG5NbEZha2VGaWxlLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHZhciBvbGQgPSB0aGlzLmRhdGE7XG4gIHRoaXMuZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbnwwKTtcbiAgY2FtbF9ibGl0X2J5dGVzKG9sZCwgMCwgdGhpcy5kYXRhLCAwLCBsZW4pO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgodGhpcy5kYXRhKTtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1Zixwb3MsbGVuKXtcbiAgdmFyIGNsZW4gPSB0aGlzLmxlbmd0aCgpO1xuICBpZihvZmZzZXQgKyBsZW4gPj0gY2xlbikge1xuICAgIHZhciBuZXdfc3RyID0gY2FtbF9jcmVhdGVfYnl0ZXMob2Zmc2V0ICsgbGVuKTtcbiAgICB2YXIgb2xkX2RhdGEgPSB0aGlzLmRhdGE7XG4gICAgdGhpcy5kYXRhID0gbmV3X3N0cjtcbiAgICBjYW1sX2JsaXRfYnl0ZXMob2xkX2RhdGEsIDAsIHRoaXMuZGF0YSwgMCwgY2xlbik7XG4gIH1cbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoYnVmKSwgcG9zLCB0aGlzLmRhdGEsIG9mZnNldCwgbGVuKTtcbiAgcmV0dXJuIDBcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgbGVuID0gY2xlbiAtIG9mZnNldDtcbiAgfVxuICBpZihsZW4pIHtcbiAgICB2YXIgZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbnwwKTtcbiAgICBjYW1sX2JsaXRfYnl0ZXModGhpcy5kYXRhLCBvZmZzZXQsIGRhdGEsIDAsIGxlbik7XG4gICAgYnVmLnNldChjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGRhdGEpLCBwb3MpO1xuICB9XG4gIHJldHVybiBsZW5cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGZF9vdXRcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGUsIGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbEZha2VGZF9vdXQoZmQsZmxhZ3MpIHtcbiAgTWxGYWtlRmlsZS5jYWxsKHRoaXMsIGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgdGhpcy5sb2cgPSAoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIDAgfSk7XG4gIGlmKGZkID09IDEgJiYgdHlwZW9mIGNvbnNvbGUubG9nID09IFwiZnVuY3Rpb25cIilcbiAgICB0aGlzLmxvZyA9IGNvbnNvbGUubG9nO1xuICBlbHNlIGlmKGZkID09IDIgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5lcnJvcjtcbiAgZWxzZSBpZih0eXBlb2YgY29uc29sZS5sb2cgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5sb2dcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIDAgfVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsYnVmLHBvcyxsZW4pIHtcbiAgaWYodGhpcy5sb2cpIHtcbiAgICBpZihsZW4gPiAwXG4gICAgICAgJiYgcG9zID49IDBcbiAgICAgICAmJiBwb3MrbGVuIDw9IGJ1Zi5sZW5ndGhcbiAgICAgICAmJiBidWZbcG9zK2xlbi0xXSA9PSAxMClcbiAgICAgIGxlbiAtLTtcbiAgICAvLyBEbyBub3Qgb3V0cHV0IHRoZSBsYXN0IFxcbiBpZiBwcmVzZW50XG4gICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICB2YXIgc3JjID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKTtcbiAgICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBwb3MsIHNyYywgMCwgbGVuKTtcbiAgICB0aGlzLmxvZyhzcmMudG9VdGYxNigpKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLmZkICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgYWxyZWFkeSBjbG9zZWRcIik7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAob2Zmc2V0LCBidWYsIHBvcywgbGVuKSB7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMuZmQgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBpcyB3cml0ZSBvbmx5XCIpO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sb2cgPSB1bmRlZmluZWQ7XG59XG5cblxuLy9Qcm92aWRlczogTWxGYWtlRmRcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbEZha2VGZChuYW1lLCBmaWxlLGZsYWdzKSB7XG4gIHRoaXMuZmlsZSA9IGZpbGU7XG4gIHRoaXMubmFtZSA9IG5hbWU7XG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbn1cblxuTWxGYWtlRmQucHJvdG90eXBlLmVycl9jbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubmFtZSAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGFscmVhZHkgY2xvc2VkXCIpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUubGVuZ3RoICgpXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKG9mZnNldCxidWYscG9zLGxlbikge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUud3JpdGUob2Zmc2V0LGJ1Zixwb3MsbGVuKVxuICB0aGlzLmVycl9jbG9zZWQoKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG9mZnNldCwgYnVmLCBwb3MsIGxlbikge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUucmVhZChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZpbGUgPSB1bmRlZmluZWQ7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogbGV4aW5nLmMgNjA0NSAyMDA0LTAxLTAxIDE2OjQyOjQzWiBkb2xpZ2V6ICQgKi9cblxuLyogVGhlIHRhYmxlLWRyaXZlbiBhdXRvbWF0b24gZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleC4gKi9cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGV4X2FycmF5KHMpIHtcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHZhciBsID0gcy5sZW5ndGggLyAyO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgYVtpXSA9IChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNiA+PiAxNjtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXksIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya10pO1xuICAgIHRibC5sZXhfY2hlY2sgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrXSk7XG4gICAgdGJsLmxleF90cmFucyA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNdKTtcbiAgICB0YmwubGV4X2RlZmF1bHQgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYywgc3RhdGUgPSBzdGFydF9zdGF0ZTtcblxuICB2YXIgYnVmZmVyID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhsZXhidWZbbGV4X2J1ZmZlcl0pO1xuXG4gIGlmIChzdGF0ZSA+PSAwKSB7XG4gICAgLyogRmlyc3QgZW50cnkgKi9cbiAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfc3RhcnRfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgLyogUmVlbnRyeSBhZnRlciByZWZpbGwgKi9cbiAgICBzdGF0ZSA9IC1zdGF0ZSAtIDE7XG4gIH1cbiAgZm9yKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlLTE7XG4gICAgLyogU2VlIGlmIGl0J3MgYSBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICB2YXIgYmFja3RyayA9IHRibC5sZXhfYmFja3Rya1tzdGF0ZV07XG4gICAgaWYgKGJhY2t0cmsgPj0gMCkge1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiBOZXcgbGV4ZXIgZW5naW5lLCB3aXRoIG1lbW9yeSBvZiBwb3NpdGlvbnMgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKHNyYyA9PSAweGZmKVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IGN1cnJfcG9zO1xuICAgIGVsc2VcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBtZW0gW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl90YWcocywgaSwgbWVtKSB7XG4gIGZvciAoOzspIHtcbiAgICB2YXIgZHN0ID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKGRzdCA9PSAweGZmKSByZXR1cm4gO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gLTE7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9uZXdfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X21lbSA9IDEwO1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG4gIHZhciBsZXhfYmFzZV9jb2RlID0gNjtcbiAgdmFyIGxleF9iYWNrdHJrX2NvZGUgPSA3O1xuICB2YXIgbGV4X2RlZmF1bHRfY29kZSA9IDg7XG4gIHZhciBsZXhfdHJhbnNfY29kZSA9IDk7XG4gIHZhciBsZXhfY2hlY2tfY29kZSA9IDEwO1xuICB2YXIgbGV4X2NvZGUgPSAxMTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuICBpZiAoIXRibC5sZXhfZGVmYXVsdF9jb2RlKSB7XG4gICAgdGJsLmxleF9iYXNlX2NvZGUgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtfY29kZV0pO1xuICAgIHRibC5sZXhfY2hlY2tfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tfY29kZV0pO1xuICAgIHRibC5sZXhfdHJhbnNfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNfY29kZV0pO1xuICAgIHRibC5sZXhfZGVmYXVsdF9jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF9jb2RlXSk7XG4gIH1cbiAgaWYgKHRibC5sZXhfY29kZSA9PSBudWxsKSB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZS0xO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYWNrdHJrX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IGJhY2t0cms7XG4gICAgfVxuICAgIC8qIFNlZSBpZiB3ZSBuZWVkIGEgcmVmaWxsICovXG4gICAgaWYgKGxleGJ1ZltsZXhfY3Vycl9wb3NdID49IGxleGJ1ZltsZXhfYnVmZmVyX2xlbl0pe1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09IDApXG4gICAgICAgIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZVxuICAgICAgICBjID0gMjU2O1xuICAgIH1lbHNle1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBidWZmZXJbbGV4YnVmW2xleF9jdXJyX3Bvc11dO1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgdmFyIHBzdGF0ZSA9IHN0YXRlIDtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIElmIHNvbWUgdHJhbnNpdGlvbiwgZ2V0IGFuZCBwZXJmb3JtIG1lbW9yeSBtb3ZlcyAqL1xuICAgICAgdmFyIGJhc2VfY29kZSA9IHRibC5sZXhfYmFzZV9jb2RlW3BzdGF0ZV0sIHBjX29mZjtcbiAgICAgIGlmICh0YmwubGV4X2NoZWNrX2NvZGVbYmFzZV9jb2RlICsgY10gPT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbVxuICAgICAgKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0sIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X2NoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9jaGFuKGNoYW5pZCx0b3JlYWQpe1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0MDk2KTtcbiAgaWYodG9yZWFkIDwgMCl7XG4gICAgd2hpbGUodHJ1ZSl7XG4gICAgICB2YXIgcmVhZCA9IGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLGJ1ZmZlciwwLGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgaWYocmVhZCA9PSAwKSBicmVhaztcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCxidWZmZXIuc3ViYXJyYXkoMCwgcmVhZCksIHJlYWQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSh0b3JlYWQgPiAwKSB7XG4gICAgICB2YXIgcmVhZCA9IGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLGJ1ZmZlciwwLCAodG9yZWFkID4gYnVmZmVyLmxlbmd0aCA/IGJ1ZmZlci5sZW5ndGggOiB0b3JlYWQpKTtcbiAgICAgIGlmKHJlYWQgPT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICAgICAgY2FtbF9NRDVVcGRhdGUoY3R4LGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgICB0b3JlYWQgLT0gcmVhZFxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoY2FtbF9NRDVGaW5hbChjdHgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX3N0cmluZywgY2FtbF9tZDVfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWQ1X3N0cmluZyhzLCBvZnMsIGxlbikge1xuICByZXR1cm4gY2FtbF9tZDVfYnl0ZXMoY2FtbF9ieXRlc19vZl9zdHJpbmcocyksb2ZzLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG52YXIgY2FtbF9NRDVUcmFuc2Zvcm0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQgKHgsIHkpIHsgcmV0dXJuICh4ICsgeSkgfCAwOyB9XG4gIGZ1bmN0aW9uIHh4KHEsYSxiLHgscyx0KSB7XG4gICAgYSA9IGFkZChhZGQoYSwgcSksIGFkZCh4LCB0KSk7XG4gICAgcmV0dXJuIGFkZCgoYSA8PCBzKSB8IChhID4+PiAoMzIgLSBzKSksIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGZmKGEsYixjLGQseCxzLHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBjKSB8ICgofmIpICYgZCksIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGdnKGEsYixjLGQseCxzLHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGhoKGEsYixjLGQseCxzLHQpIHsgcmV0dXJuIHh4KGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7IH1cbiAgZnVuY3Rpb24gaWkoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpOyB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICh3LCBidWZmZXIpIHtcbiAgICB2YXIgYSA9IHdbMF0sIGIgPSB3WzFdLCBjID0gd1syXSwgZCA9IHdbM107XG5cbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyAwXSwgNywgMHhENzZBQTQ3OCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMV0sIDEyLCAweEU4QzdCNzU2KTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWyAyXSwgMTcsIDB4MjQyMDcwREIpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbIDNdLCAyMiwgMHhDMUJEQ0VFRSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNF0sIDcsIDB4RjU3QzBGQUYpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDVdLCAxMiwgMHg0Nzg3QzYyQSk7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsgNl0sIDE3LCAweEE4MzA0NjEzKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWyA3XSwgMjIsIDB4RkQ0Njk1MDEpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDhdLCA3LCAweDY5ODA5OEQ4KTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyA5XSwgMTIsIDB4OEI0NEY3QUYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNywgMHhGRkZGNUJCMSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMV0sIDIyLCAweDg5NUNEN0JFKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNywgMHg2QjkwMTEyMik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxM10sIDEyLCAweEZEOTg3MTkzKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTcsIDB4QTY3OTQzOEUpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTVdLCAyMiwgMHg0OUI0MDgyMSk7XG5cbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyAxXSwgNSwgMHhGNjFFMjU2Mik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNl0sIDksIDB4QzA0MEIzNDApO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNCwgMHgyNjVFNUE1MSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMF0sIDIwLCAweEU5QjZDN0FBKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyA1XSwgNSwgMHhENjJGMTA1RCk7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxMF0sIDksIDB4MDI0NDE0NTMpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbMTVdLCAxNCwgMHhEOEExRTY4MSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNF0sIDIwLCAweEU3RDNGQkM4KTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyA5XSwgNSwgMHgyMUUxQ0RFNik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNF0sIDksIDB4QzMzNzA3RDYpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbIDNdLCAxNCwgMHhGNEQ1MEQ4Nyk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgOF0sIDIwLCAweDQ1NUExNEVEKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzEzXSwgNSwgMHhBOUUzRTkwNSk7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMl0sIDksIDB4RkNFRkEzRjgpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbIDddLCAxNCwgMHg2NzZGMDJEOSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMl0sIDIwLCAweDhEMkE0QzhBKTtcblxuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDVdLCA0LCAweEZGRkEzOTQyKTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyA4XSwgMTEsIDB4ODc3MUY2ODEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNiwgMHg2RDlENjEyMik7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNF0sIDIzLCAweEZERTUzODBDKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWyAxXSwgNCwgMHhBNEJFRUE0NCk7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNF0sIDExLCAweDRCREVDRkE5KTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWyA3XSwgMTYsIDB4RjZCQjRCNjApO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTBdLCAyMywgMHhCRUJGQkM3MCk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDQsIDB4Mjg5QjdFQzYpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDBdLCAxMSwgMHhFQUExMjdGQSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsgM10sIDE2LCAweEQ0RUYzMDg1KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWyA2XSwgMjMsIDB4MDQ4ODFEMDUpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDldLCA0LCAweEQ5RDREMDM5KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWzEyXSwgMTEsIDB4RTZEQjk5RTUpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTVdLCAxNiwgMHgxRkEyN0NGOCk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMl0sIDIzLCAweEM0QUM1NjY1KTtcblxuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDBdLCA2LCAweEY0MjkyMjQ0KTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWyA3XSwgMTAsIDB4NDMyQUZGOTcpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbMTRdLCAxNSwgMHhBQjk0MjNBNyk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNV0sIDIxLCAweEZDOTNBMDM5KTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNiwgMHg2NTVCNTlDMyk7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsgM10sIDEwLCAweDhGMENDQzkyKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTUsIDB4RkZFRkY0N0QpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbIDFdLCAyMSwgMHg4NTg0NUREMSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOF0sIDYsIDB4NkZBODdFNEYpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTVdLCAxMCwgMHhGRTJDRTZFMCk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsgNl0sIDE1LCAweEEzMDE0MzE0KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzEzXSwgMjEsIDB4NEUwODExQTEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDRdLCA2LCAweEY3NTM3RTgyKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzExXSwgMTAsIDB4QkQzQUYyMzUpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbIDJdLCAxNSwgMHgyQUQ3RDJCQik7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgOV0sIDIxLCAweEVCODZEMzkxKTtcblxuICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgd1sxXSA9IGFkZChiLCB3WzFdKTtcbiAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gIH19KSgpXG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1SW5pdFxuZnVuY3Rpb24gY2FtbF9NRDVJbml0KCkge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDY0KTtcbiAgdmFyIGIzMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICB2YXIgYjggPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICByZXR1cm4ge2xlbjowLFxuICAgICAgICAgIHc6bmV3IFVpbnQzMkFycmF5KFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2XSksXG4gICAgICAgICAgYjMyOmIzMixcbiAgICAgICAgICBiODpiOH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVVcGRhdGVcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG5mdW5jdGlvbiBjYW1sX01ENVVwZGF0ZShjdHgsIGlucHV0LCBpbnB1dF9sZW4pe1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIHZhciBpbnB1dF9wb3MgPSAwO1xuICBjdHgubGVuICs9IGlucHV0X2xlbjtcbiAgaWYoaW5fYnVmKXtcbiAgICB2YXIgbWlzc2luZyA9IDY0IC0gaW5fYnVmO1xuICAgIGlmKGlucHV0X2xlbiA8IG1pc3NpbmcpIHtcbiAgICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCxpbnB1dF9sZW4pLGluX2J1Zik7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLG1pc3NpbmcpLGluX2J1Zik7XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGlucHV0X2xlbiAtPSBtaXNzaW5nO1xuICAgIGlucHV0X3BvcyArPSBtaXNzaW5nO1xuICB9XG4gIHdoaWxlKGlucHV0X2xlbiA+PSA2NCl7XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsaW5wdXRfcG9zICsgNjQpLCAwKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IDY0O1xuICAgIGlucHV0X3BvcyArPSA2NDtcbiAgfVxuICBpZihpbnB1dF9sZW4pXG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsaW5wdXRfcG9zICsgaW5wdXRfbGVuKSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1RmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG5mdW5jdGlvbiBjYW1sX01ENUZpbmFsKGN0eCl7XG4gIHZhciBpbl9idWYgPSBjdHgubGVuICYgMHgzZjtcbiAgY3R4LmI4W2luX2J1Zl0gPSAweDgwO1xuICBpbl9idWYgKys7XG4gIGlmKGluX2J1ZiA+IDU2KSB7XG4gICAgZm9yKHZhciBqID0gaW5fYnVmOyBqIDwgNjQ7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgZm9yKHZhciBqID0gMDsgaiA8IDU2OyBqKyspe1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yKHZhciBqID0gaW5fYnVmOyBqIDwgNTY7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgfVxuICBjdHguYjMyWzE0XSA9IGN0eC5sZW4gPDwgMztcbiAgY3R4LmIzMlsxNV0gPSAoY3R4LmxlbiA+PiAyOSkgJiAweDFGRkZGRkZGO1xuICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKylcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKylcbiAgICAgIHRbaSAqIDQgKyBqXSA9IChjdHgud1tpXSA+PiAoOCAqIGopKSAmIDB4RkY7XG4gIHJldHVybiB0O1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfYnl0ZXMocywgb2ZzLCBsZW4pIHtcbiAgdmFyIGN0eCA9IGNhbWxfTUQ1SW5pdCgpO1xuICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocyk7XG4gIGNhbWxfTUQ1VXBkYXRlKGN0eCxhLnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKSwgbGVuKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIElvXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Zkc1xudmFyIGNhbWxfc3lzX2ZkcyA9IG5ldyBBcnJheSgzKTtcblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuZnVuY3Rpb24gY2FtbF9zeXNfY2xvc2UoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlKSBmaWxlLmNsb3NlKCk7XG4gIGRlbGV0ZSBjYW1sX3N5c19mZHNbZmRdO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlLGlkeCkge1xuICBpZihpZHggPT0gdW5kZWZpbmVkKXtcbiAgICBpZHggPSBjYW1sX3N5c19mZHMubGVuZ3RoO1xuICB9XG4gIGNhbWxfc3lzX2Zkc1tpZHhdID0gZmlsZTtcbiAgcmV0dXJuIGlkeCB8IDA7XG59XG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuIChuYW1lLCBmbGFncywgX3Blcm1zKSB7XG4gIHZhciBmID0ge307XG4gIHdoaWxlKGZsYWdzKXtcbiAgICBzd2l0Y2goZmxhZ3NbMV0pe1xuICAgIGNhc2UgMDogZi5yZG9ubHkgPSAxO2JyZWFrO1xuICAgIGNhc2UgMTogZi53cm9ubHkgPSAxO2JyZWFrO1xuICAgIGNhc2UgMjogZi5hcHBlbmQgPSAxO2JyZWFrO1xuICAgIGNhc2UgMzogZi5jcmVhdGUgPSAxO2JyZWFrO1xuICAgIGNhc2UgNDogZi50cnVuY2F0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA1OiBmLmV4Y2wgPSAxOyBicmVhaztcbiAgICBjYXNlIDY6IGYuYmluYXJ5ID0gMTticmVhaztcbiAgICBjYXNlIDc6IGYudGV4dCA9IDE7YnJlYWs7XG4gICAgY2FzZSA4OiBmLm5vbmJsb2NrID0gMTticmVhaztcbiAgICB9XG4gICAgZmxhZ3M9ZmxhZ3NbMl07XG4gIH1cbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LGYpO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCAoZmlsZSwgdW5kZWZpbmVkKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGZpbGUoZmQsIGZsYWdzKSB7XG4gICAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIG5ldyBNbEZha2VGZF9vdXQoZmQsIGZsYWdzKVxuICB9XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgwLHtyZG9ubHk6MSxhbHRuYW1lOlwiL2Rldi9zdGRpblwiLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMCk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgxLHtidWZmZXJlZDoyLHdyb25seToxLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMSk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgyLHtidWZmZXJlZDoyLHdyb25seToxLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMik7XG59KSgpXG5cblxuLy8gb2NhbWwgQ2hhbm5lbHNcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX25hbWUoY2hhbmlkLCBuYW1lKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xudmFyIGNhbWxfbWxfY2hhbm5lbHMgPSBuZXcgQXJyYXkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3QgKGNhcHR1cmVkLCBpbnRvKXtcbiAgdmFyIHRvX3Jlc3RvcmUgPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNhcHR1cmVkKTtcbiAgdmFyIG5ld18gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGludG8pO1xuICBjYW1sX21sX2NoYW5uZWxzW2NhcHR1cmVkXSA9IG5ld187IC8vIFhYWFxuICByZXR1cm4gdG9fcmVzdG9yZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9yZXN0b3JlIChjYXB0dXJlZCwgdG9fcmVzdG9yZSl7XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2FwdHVyZWRdID0gdG9fcmVzdG9yZTsgLy8gWFhYXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfZ2V0KGlkKSB7XG4gIHJldHVybiBjYW1sX21sX2NoYW5uZWxzW2lkXTsgLy8gWFhYXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QgKCkge1xuICB2YXIgbCA9IDA7XG4gIGZvcih2YXIgYyA9IDA7IGMgPCBjYW1sX21sX2NoYW5uZWxzLmxlbmd0aDsgYysrKXtcbiAgICBpZihjYW1sX21sX2NoYW5uZWxzW2NdICYmIGNhbWxfbWxfY2hhbm5lbHNbY10ub3BlbmVkICYmIGNhbWxfbWxfY2hhbm5lbHNbY10ub3V0KVxuICAgICAgbD1bMCxjYW1sX21sX2NoYW5uZWxzW2NdLmZkLGxdO1xuICB9XG4gIHJldHVybiBsO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IChmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUuZmxhZ3MucmRvbmx5KSBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiKyBmZCArIFwiIGlzIHJlYWRvbmx5XCIpO1xuICB2YXIgYnVmZmVyZWQgPSAoZmlsZS5mbGFncy5idWZmZXJlZCAhPT0gdW5kZWZpbmVkKSA/IGZpbGUuZmxhZ3MuYnVmZmVyZWQgOiAxO1xuICB2YXIgY2hhbm5lbCA9IHtcbiAgICBmaWxlOmZpbGUsXG4gICAgb2Zmc2V0OmZpbGUuZmxhZ3MuYXBwZW5kP2ZpbGUubGVuZ3RoKCk6MCxcbiAgICBmZDpmZCxcbiAgICBvcGVuZWQ6dHJ1ZSxcbiAgICBvdXQ6dHJ1ZSxcbiAgICBidWZmZXJfY3VycjowLFxuICAgIGJ1ZmZlcjpuZXcgVWludDhBcnJheSg2NTUzNiksXG4gICAgYnVmZmVyZWQ6YnVmZmVyZWRcbiAgfTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFubmVsLmZkXT1jaGFubmVsO1xuICByZXR1cm4gY2hhbm5lbC5mZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX29wZW5cbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luIChmZCkgIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlLmZsYWdzLndyb25seSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIisgZmQgKyBcIiBpcyB3cml0ZW9ubHlcIik7XG4gIHZhciByZWZpbGwgPSBudWxsO1xuICB2YXIgY2hhbm5lbCA9IHtcbiAgICBmaWxlOmZpbGUsXG4gICAgb2Zmc2V0OmZpbGUuZmxhZ3MuYXBwZW5kP2ZpbGUubGVuZ3RoKCk6MCxcbiAgICBmZDpmZCxcbiAgICBvcGVuZWQ6dHJ1ZSxcbiAgICBvdXQ6IGZhbHNlLFxuICAgIGJ1ZmZlcl9jdXJyOjAsXG4gICAgYnVmZmVyX21heDowLFxuICAgIGJ1ZmZlcjpuZXcgVWludDhBcnJheSg2NTUzNiksXG4gICAgcmVmaWxsOnJlZmlsbFxuICB9O1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5uZWwuZmRdPWNoYW5uZWw7XG4gIHJldHVybiBjaGFubmVsLmZkO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFncyhmZCwgZmxhZ3Mpe1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4oZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFnc1xuLy9SZXF1aXJlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0X3dpdGhfZmxhZ3MoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dChmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL0FsaWFzOiB3aW5fZmlsZWRlc2NyX29mX2NoYW5uZWxcbmZ1bmN0aW9uIGNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yKGNoYW5pZCl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5mZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlKGNoYW5pZCxtb2RlKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4uZmlsZS5mbGFncy50ZXh0ID0gIW1vZGVcbiAgY2hhbi5maWxlLmZsYWdzLmJpbmFyeSA9IG1vZGVcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaXNfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5mbGFncy5iaW5hcnlcbn1cblxuLy9JbnB1dCBmcm9tIGluX2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9jbG9zZV9jaGFubmVsXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19jbG9zZVxuZnVuY3Rpb24gY2FtbF9tbF9jbG9zZV9jaGFubmVsIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmKGNoYW4ub3BlbmVkKSB7XG4gICAgY2hhbi5vcGVuZWQgPSBmYWxzZTtcbiAgICBjYW1sX3N5c19jbG9zZShjaGFuLmZkKTtcbiAgICBjaGFuLmZkID0gLTE7XG4gICAgY2hhbi5idWZmZXIgPSBuZXcgVWludDhBcnJheSgwKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5maWxlLmxlbmd0aCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCxjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNoYW4uZmlsZS5sZW5ndGggKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXQoY2hhbmlkLGYpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ub3V0cHV0ID0gKGZ1bmN0aW9uIChzKSB7ZihzKX0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsKGNoYW5pZCxmKSB7XG4gIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5yZWZpbGwgPSBmO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVmaWxsIChjaGFuKSB7XG4gIGlmKGNoYW4ucmVmaWxsICE9IG51bGwpe1xuICAgIHZhciBzdHIgPSBjaGFuLnJlZmlsbCgpO1xuICAgIHZhciBzdHJfYSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKHN0cik7XG4gICAgaWYgKHN0cl9hLmxlbmd0aCA9PSAwKSB7XG4gICAgICBjaGFuLnJlZmlsbCA9IG51bGxcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZihjaGFuLmJ1ZmZlci5sZW5ndGggPCBjaGFuLmJ1ZmZlcl9tYXggKyBzdHJfYS5sZW5ndGgpe1xuICAgICAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX21heCArIHN0cl9hLmxlbmd0aCk7XG4gICAgICAgIGIuc2V0KGNoYW4uYnVmZmVyKTtcbiAgICAgICAgY2hhbi5idWZmZXIgPSBiO1xuICAgICAgfVxuICAgICAgY2hhbi5idWZmZXIuc2V0KHN0cl9hLGNoYW4uYnVmZmVyX21heCk7XG4gICAgICBjaGFuLm9mZnNldCArPSBzdHJfYS5sZW5ndGg7XG4gICAgICBjaGFuLmJ1ZmZlcl9tYXggKz0gc3RyX2EubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgbnJlYWQgPSBjaGFuLmZpbGUucmVhZChjaGFuLm9mZnNldCwgY2hhbi5idWZmZXIsIGNoYW4uYnVmZmVyX21heCwgY2hhbi5idWZmZXIubGVuZ3RoIC0gY2hhbi5idWZmZXJfbWF4KTtcbiAgICBjaGFuLm9mZnNldCArPSBucmVhZDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggKz0gbnJlYWQ7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dCAoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfYmlnYXJyYXkgKGNoYW5pZCwgYiwgaSwgbCkge1xuICB2YXIgYmEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGIpO1xuICByZXR1cm4gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsIGJhLCBpLCBsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX3JlZmlsbCwgY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9ibG9jayAoY2hhbmlkLCBiYSwgaSwgbCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgdmFyIG4gPSBsO1xuICB2YXIgYXZhaWwgPSBjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBpZihsIDw9IGF2YWlsKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsY2hhbi5idWZmZXJfY3VyciArIGwpLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGw7XG4gIH1cbiAgZWxzZSBpZihhdmFpbCA+IDApIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgYXZhaWwpLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGF2YWlsO1xuICAgIG4gPSBhdmFpbDtcbiAgfSBlbHNlIHtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgIHZhciBhdmFpbCA9IGNoYW4uYnVmZmVyX21heCAtIGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgaWYobiA+IGF2YWlsKSBuID0gYXZhaWw7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsY2hhbi5idWZmZXJfY3VyciArIG4pLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IG47XG4gIH1cbiAgcmV0dXJuIG4gfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfZGF0YV9zaXplLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMsIGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3JlZmlsbCwgY2FtbF9mYWlsd2l0aCwgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBoZWFkZXIgPSBuZXcgVWludDhBcnJheShjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBmdW5jdGlvbiBibG9jayhidWZmZXIsIG9mZnNldCwgbikge1xuICAgIHZhciByID0gMDtcbiAgICB3aGlsZShyIDwgbil7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCl7XG4gICAgICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICAgICAgICBjYW1sX3JlZmlsbChjaGFuKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heClcbiAgICAgICAgYnJlYWs7XG4gICAgICBidWZmZXJbb2Zmc2V0K3JdID0gY2hhbi5idWZmZXJbY2hhbi5idWZmZXJfY3Vycl07XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHZhciByID0gYmxvY2soaGVhZGVyLCAwLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBpZihyID09IDApXG4gICAgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICBlbHNlIGlmIChyIDwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdFwiKTtcbiAgdmFyIGxlbiA9IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoaGVhZGVyKSwgMCk7XG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW4gKyBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBidWYuc2V0KGhlYWRlciwwKTtcbiAgdmFyIHIgPSBibG9jayhidWYsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSwgbGVuKVxuICBpZihyIDwgbGVuKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdCBcIiArIHIgKyBcIiAgXCIgKyBsZW4pO1xuICB2YXIgb2Zmc2V0ID0gWzBdO1xuICB2YXIgcmVzID0gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoYnVmKSwgb2Zmc2V0KTtcbiAgY2hhbi5vZmZzZXQgPSBjaGFuLm9mZnNldCArIG9mZnNldFswXTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV90b19vdXRzaWRlX2hlYXBcbi8vUmVxdWlyZXM6IGNhbWxfaW5wdXRfdmFsdWVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwKGMpIHtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWUoYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9yZWZpbGxcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfY2hhciAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCl7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICBjYW1sX3JlZmlsbChjaGFuKTtcbiAgfVxuICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpXG4gICAgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICB2YXIgcmVzID0gY2hhbi5idWZmZXJbY2hhbi5idWZmZXJfY3Vycl07XG4gIGNoYW4uYnVmZmVyX2N1cnIrKztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfY2hhciwgY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9pbnQgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCA0OyBpKyspe1xuICAgIHJlcyA9IChyZXMgPDwgOCkgKyBjYW1sX21sX2lucHV0X2NoYXIoY2hhbmlkKSB8IDA7XG4gIH1cbiAgcmV0dXJuIHJlcyB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19pblxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfc2Vla19pbihjaGFuaWQsIHBvcykge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYgKGNoYW4ucmVmaWxsICE9IG51bGwpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiSWxsZWdhbCBzZWVrXCIpO1xuICBpZihwb3MgPj0gY2hhbi5vZmZzZXQgLSBjaGFuLmJ1ZmZlcl9tYXhcbiAgICAgJiYgcG9zIDw9IGNoYW4ub2Zmc2V0XG4gICAgICYmIGNoYW4uZmlsZS5mbGFncy5iaW5hcnkpIHtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gY2hhbi5idWZmZXJfbWF4IC0gKGNoYW4ub2Zmc2V0IC0gcG9zKTtcbiAgfSBlbHNlIHtcbiAgICBjaGFuLm9mZnNldCA9IHBvcztcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luKGNoYW5pZCxwb3Mpe1xuICByZXR1cm4gY2FtbF9zZWVrX2luKGNoYW5pZCxwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luXzY0KGNoYW5pZCxwb3Mpe1xuICB2YXIgcG9zID0gY2FtbF9pbnQ2NF90b19mbG9hdChwb3MpO1xuICByZXR1cm4gY2FtbF9zZWVrX2luKGNoYW5pZCwgcG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3NfaW5cbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfcG9zX2luKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4ub2Zmc2V0IC0gKGNoYW4uYnVmZmVyX21heCAtIGNoYW4uYnVmZmVyX2N1cnIpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbihjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfcG9zX2luKGNoYW5pZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LCBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW5fNjQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNhbWxfcG9zX2luKGNoYW5pZCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X3NjYW5fbGluZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9yZWZpbGxcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lKGNoYW5pZCl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgcCA9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGRvIHtcbiAgICBpZihwID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgaWYoY2hhbi5idWZmZXJfY3VyciA+IDApIHtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIpLDApO1xuICAgICAgICBwIC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgIH1cbiAgICAgIGlmKGNoYW4uYnVmZmVyX21heCA+PSBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0oY2hhbi5idWZmZXJfbWF4KSB8IDA7XG4gICAgICB9XG4gICAgICB2YXIgcHJldl9tYXggPSBjaGFuLmJ1ZmZlcl9tYXg7XG4gICAgICBjYW1sX3JlZmlsbCAoY2hhbik7XG4gICAgICBpZihwcmV2X21heCA9PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgICAgcmV0dXJuIC0oY2hhbi5idWZmZXJfbWF4KSB8IDA7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChjaGFuLmJ1ZmZlcltwKytdICE9IDEwKTtcbiAgcmV0dXJuIChwIC0gY2hhbi5idWZmZXJfY3VycikgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2ZsdXNoXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2ZsdXNoIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmKCEgY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IGZsdXNoIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIGlmKCFjaGFuLmJ1ZmZlciB8fCBjaGFuLmJ1ZmZlcl9jdXJyID09IDApIHJldHVybiAwO1xuICBpZihjaGFuLm91dHB1dCkge1xuICAgIGNoYW4ub3V0cHV0KGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhjaGFuLmJ1ZmZlciwgMCwgY2hhbi5idWZmZXJfY3VycikpO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uZmlsZS53cml0ZShjaGFuLm9mZnNldCwgY2hhbi5idWZmZXIsIDAsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICB9XG4gIGNoYW4ub2Zmc2V0ICs9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9vdXRwdXQgdG8gb3V0X2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfdGFcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmKCEgY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IG91dHB1dCB0byBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pO1xuICBpZihjaGFuLmJ1ZmZlcl9jdXJyICsgYnVmZmVyLmxlbmd0aCA+IGNoYW4uYnVmZmVyLmxlbmd0aCkge1xuICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGgpO1xuICAgIGIuc2V0KGNoYW4uYnVmZmVyKTtcbiAgICBjaGFuLmJ1ZmZlciA9IGJcbiAgfVxuICBzd2l0Y2goY2hhbi5idWZmZXJlZCl7XG4gIGNhc2UgMDogLy8gVW5idWZmZXJlZFxuICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIGJyZWFrXG4gIGNhc2UgMTogLy8gQnVmZmVyZWQgKHRoZSBkZWZhdWx0KVxuICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aClcbiAgICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgYnJlYWs7XG4gIGNhc2UgMjogLy8gQnVmZmVyZWQgKG9ubHkgZm9yIHN0ZG91dCBhbmQgc3RkZXJyKVxuICAgIHZhciBpZCA9IGJ1ZmZlci5sYXN0SW5kZXhPZigxMClcbiAgICBpZihpZCA8IDApIHtcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlci5sZW5ndGgpXG4gICAgICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheSgwLCBpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gaWQgKyAxO1xuICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIuc3ViYXJyYXkoaWQgKyAxKSwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGggLSBpZCAtIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9tbF9vdXRwdXRfdGFcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgYnVmZmVyID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhidWZmZXIpO1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfdGEoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF9tbF9vdXRwdXRfdGFcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2JpZ2FycmF5KGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgYnVmZmVyID0gY2FtbF9iYV90b190eXBlZF9hcnJheShidWZmZXIpO1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfdGEoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKTtcbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbil7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF9ieXRlcyhjaGFuaWQsY2FtbF9ieXRlc19vZl9zdHJpbmcoYnVmZmVyKSxvZmZzZXQsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2NoYXIgKGNoYW5pZCxjKSB7XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCwxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcsIGNhbWxfbWxfb3V0cHV0LGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWUgKGNoYW5pZCx2LGZsYWdzKSB7XG4gIHZhciBzID0gY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nKHYsIGZsYWdzKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCxjYW1sX21sX3N0cmluZ19sZW5ndGgocykpO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKXtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfb3V0KGNoYW5pZCxwb3Mpe1xuICByZXR1cm4gY2FtbF9zZWVrX291dChjaGFuaWQsIHBvcyk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfb3V0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0LCBjYW1sX3NlZWtfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfb3V0XzY0KGNoYW5pZCxwb3Mpe1xuICB2YXIgcG9zID0gY2FtbF9pbnQ2NF90b19mbG9hdChwb3MpO1xuICByZXR1cm4gY2FtbF9zZWVrX291dChjaGFuaWQsIHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9wb3Nfb3V0KGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4ub2Zmc2V0ICsgY2hhbi5idWZmZXJfY3VyclxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfcG9zX291dFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9wb3Nfb3V0KGNoYW5pZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXRfNjQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0IChjYW1sX3Bvc19vdXQoY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9pbnQgKGNoYW5pZCxpKSB7XG4gIHZhciBhcnIgPSBbKGk+PjI0KSAmIDB4RkYsKGk+PjE2KSAmIDB4RkYsKGk+PjgpICYgMHhGRixpICYgMHhGRiBdO1xuICB2YXIgcyA9IGNhbWxfc3RyaW5nX29mX2FycmF5KGFycik7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsNCk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaXNfYnVmZmVyZWRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfaXNfYnVmZmVyZWQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkuYnVmZmVyZWQgPyAxIDogMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYnVmZmVyZWQoY2hhbmlkLHYpIHtcbiAgY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpLmJ1ZmZlcmVkID0gdjtcbiAgaWYoIXYpIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgcmV0dXJuIDBcbn1cbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogVGhlIHJ1bi10aW1lIGxpYnJhcnkgZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleCAqKVxuXG50eXBlIHBvc2l0aW9uID0ge1xuICBwb3NfZm5hbWUgOiBzdHJpbmc7XG4gIHBvc19sbnVtIDogaW50O1xuICBwb3NfYm9sIDogaW50O1xuICBwb3NfY251bSA6IGludDtcbn1cblxubGV0IGR1bW15X3BvcyA9IHtcbiAgcG9zX2ZuYW1lID0gXCJcIjtcbiAgcG9zX2xudW0gPSAwO1xuICBwb3NfYm9sID0gMDtcbiAgcG9zX2NudW0gPSAtMTtcbn1cblxudHlwZSBsZXhidWYgPVxuICB7IHJlZmlsbF9idWZmIDogbGV4YnVmIC0+IHVuaXQ7XG4gICAgbXV0YWJsZSBsZXhfYnVmZmVyIDogYnl0ZXM7XG4gICAgbXV0YWJsZSBsZXhfYnVmZmVyX2xlbiA6IGludDtcbiAgICBtdXRhYmxlIGxleF9hYnNfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X3N0YXJ0X3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9jdXJyX3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9sYXN0X3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9sYXN0X2FjdGlvbiA6IGludDtcbiAgICBtdXRhYmxlIGxleF9lb2ZfcmVhY2hlZCA6IGJvb2w7XG4gICAgbXV0YWJsZSBsZXhfbWVtIDogaW50IGFycmF5O1xuICAgIG11dGFibGUgbGV4X3N0YXJ0X3AgOiBwb3NpdGlvbjtcbiAgICBtdXRhYmxlIGxleF9jdXJyX3AgOiBwb3NpdGlvbjtcbiAgfVxuXG50eXBlIGxleF90YWJsZXMgPVxuICB7IGxleF9iYXNlOiBzdHJpbmc7XG4gICAgbGV4X2JhY2t0cms6IHN0cmluZztcbiAgICBsZXhfZGVmYXVsdDogc3RyaW5nO1xuICAgIGxleF90cmFuczogc3RyaW5nO1xuICAgIGxleF9jaGVjazogc3RyaW5nO1xuICAgIGxleF9iYXNlX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2JhY2t0cmtfY29kZSA6IHN0cmluZztcbiAgICBsZXhfZGVmYXVsdF9jb2RlIDogc3RyaW5nO1xuICAgIGxleF90cmFuc19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9jaGVja19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9jb2RlOiBzdHJpbmc7fVxuXG5leHRlcm5hbCBjX2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnQgPSBcImNhbWxfbGV4X2VuZ2luZVwiXG5leHRlcm5hbCBjX25ld19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbmV3X2xleF9lbmdpbmVcIlxuXG5sZXQgZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICBsZXQgcmVzdWx0ID0gY19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5cbmxldCBuZXdfZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICBsZXQgcmVzdWx0ID0gY19uZXdfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgaWYgcmVzdWx0ID49IDAgJiYgYnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zIHRoZW4gYmVnaW5cbiAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgZW5kO1xuICByZXN1bHRcblxubGV0IGxleF9yZWZpbGwgcmVhZF9mdW4gYXV4X2J1ZmZlciBsZXhidWYgPVxuICBsZXQgcmVhZCA9XG4gICAgcmVhZF9mdW4gYXV4X2J1ZmZlciAoQnl0ZXMubGVuZ3RoIGF1eF9idWZmZXIpIGluXG4gIGxldCBuID1cbiAgICBpZiByZWFkID4gMFxuICAgIHRoZW4gcmVhZFxuICAgIGVsc2UgKGxleGJ1Zi5sZXhfZW9mX3JlYWNoZWQgPC0gdHJ1ZTsgMCkgaW5cbiAgKCogQ3VycmVudCBzdGF0ZSBvZiB0aGUgYnVmZmVyOlxuICAgICAgICA8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0+XG4gICAgICAgIHwgIGp1bmsgfCAgICAgIHZhbGlkIGRhdGEgICAgIHwgICBqdW5rICAgIHxcbiAgICAgICAgXiAgICAgICBeICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXlxuICAgICAgICAwICAgIHN0YXJ0X3BvcyAgICAgICAgICAgICBidWZmZXJfZW5kICAgIEJ5dGVzLmxlbmd0aCBidWZmZXJcbiAgKilcbiAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuICsgbiA+IEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlciB0aGVuIGJlZ2luXG4gICAgKCogVGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKilcbiAgICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcyArIG5cbiAgICAgICA8PSBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXJcbiAgICB0aGVuIGJlZ2luXG4gICAgICAoKiBCdXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGlmIHdlIHJlY2xhaW0gdGhlIGp1bmsgYXQgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgb2YgdGhlIGJ1ZmZlciAqKVxuICAgICAgQnl0ZXMuYmxpdCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3Bvc1xuICAgICAgICAgICAgICAgICAgbGV4YnVmLmxleF9idWZmZXIgMFxuICAgICAgICAgICAgICAgICAgKGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zKVxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAoKiBXZSBtdXN0IGdyb3cgdGhlIGJ1ZmZlci4gIERvdWJsaW5nIGl0cyBzaXplIHdpbGwgcHJvdmlkZSBlbm91Z2hcbiAgICAgICAgIHNwYWNlIHNpbmNlIG4gPD0gU3RyaW5nLmxlbmd0aCBhdXhfYnVmZmVyIDw9IFN0cmluZy5sZW5ndGggYnVmZmVyLlxuICAgICAgICAgV2F0Y2ggb3V0IGZvciBzdHJpbmcgbGVuZ3RoIG92ZXJmbG93LCB0aG91Z2guICopXG4gICAgICBsZXQgbmV3bGVuID1cbiAgICAgICAgSW50Lm1pbiAoMiAqIEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlcikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcyArIG4gPiBuZXdsZW5cbiAgICAgIHRoZW4gZmFpbHdpdGggXCJMZXhpbmcubGV4X3JlZmlsbDogY2Fubm90IGdyb3cgYnVmZmVyXCI7XG4gICAgICBsZXQgbmV3YnVmID0gQnl0ZXMuY3JlYXRlIG5ld2xlbiBpblxuICAgICAgKCogQ29weSB0aGUgdmFsaWQgZGF0YSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBuZXdidWYgMFxuICAgICAgICAgICAgICAgICAgKGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zKTtcbiAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDwtIG5ld2J1ZlxuICAgIGVuZDtcbiAgICAoKiBSZWFsbG9jYXRpb24gb3Igbm90LCB3ZSBoYXZlIHNoaWZ0ZWQgdGhlIGRhdGEgbGVmdCBieVxuICAgICAgIHN0YXJ0X3BvcyBjaGFyYWN0ZXJzOyB1cGRhdGUgdGhlIHBvc2l0aW9ucyAqKVxuICAgIGxldCBzID0gbGV4YnVmLmxleF9zdGFydF9wb3MgaW5cbiAgICBsZXhidWYubGV4X2Fic19wb3MgPC0gbGV4YnVmLmxleF9hYnNfcG9zICsgcztcbiAgICBsZXhidWYubGV4X2N1cnJfcG9zIDwtIGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIDwtIDA7XG4gICAgbGV4YnVmLmxleF9sYXN0X3BvcyA8LSBsZXhidWYubGV4X2xhc3RfcG9zIC0gcztcbiAgICBsZXhidWYubGV4X2J1ZmZlcl9sZW4gPC0gbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gcyA7XG4gICAgbGV0IHQgPSBsZXhidWYubGV4X21lbSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggdC0xIGRvXG4gICAgICBsZXQgdiA9IHQuKGkpIGluXG4gICAgICBpZiB2ID49IDAgdGhlblxuICAgICAgICB0LihpKSA8LSB2LXNcbiAgICBkb25lXG4gIGVuZDtcbiAgKCogVGhlcmUgaXMgbm93IGVub3VnaCBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKilcbiAgQnl0ZXMuYmxpdCBhdXhfYnVmZmVyIDAgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9idWZmZXJfbGVuIG47XG4gIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuXG5cbmxldCB6ZXJvX3BvcyA9IHtcbiAgcG9zX2ZuYW1lID0gXCJcIjtcbiAgcG9zX2xudW0gPSAxO1xuICBwb3NfYm9sID0gMDtcbiAgcG9zX2NudW0gPSAwO1xufVxuXG5sZXQgZnJvbV9mdW5jdGlvbiA/KHdpdGhfcG9zaXRpb25zID0gdHJ1ZSkgZiA9XG4gIHsgcmVmaWxsX2J1ZmYgPSBsZXhfcmVmaWxsIGYgKEJ5dGVzLmNyZWF0ZSA1MTIpO1xuICAgIGxleF9idWZmZXIgPSBCeXRlcy5jcmVhdGUgMTAyNDtcbiAgICBsZXhfYnVmZmVyX2xlbiA9IDA7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IGZhbHNlO1xuICAgIGxleF9zdGFydF9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgICBsZXhfY3Vycl9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgfVxuXG5sZXQgZnJvbV9jaGFubmVsID93aXRoX3Bvc2l0aW9ucyBpYyA9XG4gIGZyb21fZnVuY3Rpb24gP3dpdGhfcG9zaXRpb25zIChmdW4gYnVmIG4gLT4gaW5wdXQgaWMgYnVmIDAgbilcblxubGV0IGZyb21fc3RyaW5nID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBzID1cbiAgeyByZWZpbGxfYnVmZiA9IChmdW4gbGV4YnVmIC0+IGxleGJ1Zi5sZXhfZW9mX3JlYWNoZWQgPC0gdHJ1ZSk7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLm9mX3N0cmluZyBzOyAoKiBoYXZlIHRvIG1ha2UgYSBjb3B5IGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHVuc2FmZS1zdHJpbmcgbW9kZSAqKVxuICAgIGxleF9idWZmZXJfbGVuID0gU3RyaW5nLmxlbmd0aCBzO1xuICAgIGxleF9hYnNfcG9zID0gMDtcbiAgICBsZXhfc3RhcnRfcG9zID0gMDtcbiAgICBsZXhfY3Vycl9wb3MgPSAwO1xuICAgIGxleF9sYXN0X3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfYWN0aW9uID0gMDtcbiAgICBsZXhfbWVtID0gW3x8XTtcbiAgICBsZXhfZW9mX3JlYWNoZWQgPSB0cnVlO1xuICAgIGxleF9zdGFydF9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgICBsZXhfY3Vycl9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgfVxuXG5sZXQgc2V0X3Bvc2l0aW9uIGxleGJ1ZiBwb3NpdGlvbiA9XG4gIGxleGJ1Zi5sZXhfY3Vycl9wICA8LSB7cG9zaXRpb24gd2l0aCBwb3NfZm5hbWUgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfZm5hbWV9O1xuICBsZXhidWYubGV4X2Fic19wb3MgPC0gcG9zaXRpb24ucG9zX2NudW1cblxubGV0IHNldF9maWxlbmFtZSBsZXhidWYgZm5hbWUgPVxuICBsZXhidWYubGV4X2N1cnJfcCA8LSB7bGV4YnVmLmxleF9jdXJyX3Agd2l0aCBwb3NfZm5hbWUgPSBmbmFtZX1cblxubGV0IHdpdGhfcG9zaXRpb25zIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3Bvc1xuXG5sZXQgbGV4ZW1lIGxleGJ1ZiA9XG4gIGxldCBsZW4gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3BvcyBsZW5cblxubGV0IHN1Yl9sZXhlbWUgbGV4YnVmIGkxIGkyID1cbiAgbGV0IGxlbiA9IGkyLWkxIGluXG4gIEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuXG5cbmxldCBzdWJfbGV4ZW1lX29wdCBsZXhidWYgaTEgaTIgPVxuICBpZiBpMSA+PSAwIHRoZW4gYmVnaW5cbiAgICBsZXQgbGVuID0gaTItaTEgaW5cbiAgICBTb21lIChCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGkxIGxlbilcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICBOb25lXG4gIGVuZFxuXG5sZXQgc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiBpID0gQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGlcblxubGV0IHN1Yl9sZXhlbWVfY2hhcl9vcHQgbGV4YnVmIGkgPVxuICBpZiBpID49IDAgdGhlblxuICAgIFNvbWUgKEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciBpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5cbmxldCBsZXhlbWVfY2hhciBsZXhidWYgaSA9XG4gIEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciAobGV4YnVmLmxleF9zdGFydF9wb3MgKyBpKVxuXG5sZXQgbGV4ZW1lX3N0YXJ0IGxleGJ1ZiA9IGxleGJ1Zi5sZXhfc3RhcnRfcC5wb3NfY251bVxubGV0IGxleGVtZV9lbmQgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AucG9zX2NudW1cblxubGV0IGxleGVtZV9zdGFydF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfc3RhcnRfcFxubGV0IGxleGVtZV9lbmRfcCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcFxuXG5sZXQgbmV3X2xpbmUgbGV4YnVmID1cbiAgbGV0IGxjcCA9IGxleGJ1Zi5sZXhfY3Vycl9wIGluXG4gIGlmIGxjcCAhPSBkdW1teV9wb3MgdGhlblxuICAgIGxleGJ1Zi5sZXhfY3Vycl9wIDwtXG4gICAgICB7IGxjcCB3aXRoXG4gICAgICAgIHBvc19sbnVtID0gbGNwLnBvc19sbnVtICsgMTtcbiAgICAgICAgcG9zX2JvbCA9IGxjcC5wb3NfY251bTtcbiAgICAgIH1cblxuXG5cbigqIERpc2NhcmQgZGF0YSBsZWZ0IGluIGxleGVyIGJ1ZmZlci4gKilcblxubGV0IGZsdXNoX2lucHV0IGxiID1cbiAgbGIubGV4X2N1cnJfcG9zIDwtIDA7XG4gIGxiLmxleF9hYnNfcG9zIDwtIDA7XG4gIGxldCBsY3AgPSBsYi5sZXhfY3Vycl9wIGluXG4gIGlmIGxjcCAhPSBkdW1teV9wb3MgdGhlblxuICAgIGxiLmxleF9jdXJyX3AgPC0ge3plcm9fcG9zIHdpdGggcG9zX2ZuYW1lID0gbGNwLnBvc19mbmFtZX07XG4gIGxiLmxleF9idWZmZXJfbGVuIDwtIDA7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gUHJpbnRmXG5cbnR5cGUgdCA9IGV4biA9IC4uXG5cbmxldCBwcmludGVycyA9IEF0b21pYy5tYWtlIFtdXG5cbmxldCBsb2NmbXQgPSBmb3JtYXRfb2Zfc3RyaW5nIFwiRmlsZSBcXFwiJXNcXFwiLCBsaW5lICVkLCBjaGFyYWN0ZXJzICVkLSVkOiAlc1wiXG5cbmxldCBmaWVsZCB4IGkgPVxuICBsZXQgZiA9IE9iai5maWVsZCB4IGkgaW5cbiAgaWYgbm90IChPYmouaXNfYmxvY2sgZikgdGhlblxuICAgIHNwcmludGYgXCIlZFwiIChPYmoubWFnaWMgZiA6IGludCkgICAgICAgICAgICgqIGNhbiBhbHNvIGJlIGEgY2hhciAqKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5zdHJpbmdfdGFnIHRoZW5cbiAgICBzcHJpbnRmIFwiJVNcIiAoT2JqLm1hZ2ljIGYgOiBzdHJpbmcpXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLmRvdWJsZV90YWcgdGhlblxuICAgIHN0cmluZ19vZl9mbG9hdCAoT2JqLm1hZ2ljIGYgOiBmbG9hdClcbiAgZWxzZVxuICAgIFwiX1wiXG5cbmxldCByZWMgb3RoZXJfZmllbGRzIHggaSA9XG4gIGlmIGkgPj0gT2JqLnNpemUgeCB0aGVuIFwiXCJcbiAgZWxzZSBzcHJpbnRmIFwiLCAlcyVzXCIgKGZpZWxkIHggaSkgKG90aGVyX2ZpZWxkcyB4IChpKzEpKVxuXG5sZXQgZmllbGRzIHggPVxuICBtYXRjaCBPYmouc2l6ZSB4IHdpdGhcbiAgfCAwIC0+IFwiXCJcbiAgfCAxIC0+IFwiXCJcbiAgfCAyIC0+IHNwcmludGYgXCIoJXMpXCIgKGZpZWxkIHggMSlcbiAgfCBfIC0+IHNwcmludGYgXCIoJXMlcylcIiAoZmllbGQgeCAxKSAob3RoZXJfZmllbGRzIHggMilcblxubGV0IHVzZV9wcmludGVycyB4ID1cbiAgbGV0IHJlYyBjb252ID0gZnVuY3Rpb25cbiAgICB8IGhkIDo6IHRsIC0+XG4gICAgICAgIChtYXRjaCBoZCB4IHdpdGhcbiAgICAgICAgIHwgTm9uZSB8IGV4Y2VwdGlvbiBfIC0+IGNvbnYgdGxcbiAgICAgICAgIHwgU29tZSBzIC0+IFNvbWUgcylcbiAgICB8IFtdIC0+IE5vbmUgaW5cbiAgY29udiAoQXRvbWljLmdldCBwcmludGVycylcblxubGV0IHRvX3N0cmluZ19kZWZhdWx0ID0gZnVuY3Rpb25cbiAgfCBPdXRfb2ZfbWVtb3J5IC0+IFwiT3V0IG9mIG1lbW9yeVwiXG4gIHwgU3RhY2tfb3ZlcmZsb3cgLT4gXCJTdGFjayBvdmVyZmxvd1wiXG4gIHwgTWF0Y2hfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNSkgXCJQYXR0ZXJuIG1hdGNoaW5nIGZhaWxlZFwiXG4gIHwgQXNzZXJ0X2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzYpIFwiQXNzZXJ0aW9uIGZhaWxlZFwiXG4gIHwgVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzYpIFwiVW5kZWZpbmVkIHJlY3Vyc2l2ZSBtb2R1bGVcIlxuICB8IHggLT5cbiAgICAgIGxldCB4ID0gT2JqLnJlcHIgeCBpblxuICAgICAgaWYgT2JqLnRhZyB4IDw+IDAgdGhlblxuICAgICAgICAoT2JqLm1hZ2ljIChPYmouZmllbGQgeCAwKSA6IHN0cmluZylcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IGNvbnN0cnVjdG9yID1cbiAgICAgICAgICAoT2JqLm1hZ2ljIChPYmouZmllbGQgKE9iai5maWVsZCB4IDApIDApIDogc3RyaW5nKSBpblxuICAgICAgICBjb25zdHJ1Y3RvciBeIChmaWVsZHMgeClcblxubGV0IHRvX3N0cmluZyBlID1cbiAgbWF0Y2ggdXNlX3ByaW50ZXJzIGUgd2l0aFxuICB8IFNvbWUgcyAtPiBzXG4gIHwgTm9uZSAtPiB0b19zdHJpbmdfZGVmYXVsdCBlXG5cbmxldCBwcmludCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBlcHJpbnRmIFwiVW5jYXVnaHQgZXhjZXB0aW9uOiAlc1xcblwiICh0b19zdHJpbmcgeCk7XG4gICAgZmx1c2ggc3RkZXJyO1xuICAgIHJhaXNlIHhcblxubGV0IGNhdGNoIGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGZsdXNoIHN0ZG91dDtcbiAgICBlcHJpbnRmIFwiVW5jYXVnaHQgZXhjZXB0aW9uOiAlc1xcblwiICh0b19zdHJpbmcgeCk7XG4gICAgZXhpdCAyXG5cbnR5cGUgcmF3X2JhY2t0cmFjZV9zbG90XG50eXBlIHJhd19iYWNrdHJhY2VfZW50cnkgPSBwcml2YXRlIGludFxudHlwZSByYXdfYmFja3RyYWNlID0gcmF3X2JhY2t0cmFjZV9lbnRyeSBhcnJheVxuXG5sZXQgcmF3X2JhY2t0cmFjZV9lbnRyaWVzIGJ0ID0gYnRcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2U6XG4gIHVuaXQgLT4gcmF3X2JhY2t0cmFjZSA9IFwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2VcIlxuXG5leHRlcm5hbCByYWlzZV93aXRoX2JhY2t0cmFjZTogZXhuIC0+IHJhd19iYWNrdHJhY2UgLT4gJ2FcbiAgPSBcIiVyYWlzZV93aXRoX2JhY2t0cmFjZVwiXG5cbnR5cGUgYmFja3RyYWNlX3Nsb3QgPVxuICB8IEtub3duX2xvY2F0aW9uIG9mIHtcbiAgICAgIGlzX3JhaXNlICAgIDogYm9vbDtcbiAgICAgIGZpbGVuYW1lICAgIDogc3RyaW5nO1xuICAgICAgbGluZV9udW1iZXIgOiBpbnQ7XG4gICAgICBzdGFydF9jaGFyICA6IGludDtcbiAgICAgIGVuZF9jaGFyICAgIDogaW50O1xuICAgICAgaXNfaW5saW5lICAgOiBib29sO1xuICAgICAgZGVmbmFtZSAgICAgOiBzdHJpbmc7XG4gICAgfVxuICB8IFVua25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgOiBib29sXG4gICAgfVxuXG4oKiB0byBhdm9pZCB3YXJuaW5nICopXG5sZXQgXyA9IFtLbm93bl9sb2NhdGlvbiB7IGlzX3JhaXNlID0gZmFsc2U7IGZpbGVuYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIgPSAwOyBzdGFydF9jaGFyID0gMDsgZW5kX2NoYXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc19pbmxpbmUgPSBmYWxzZTsgZGVmbmFtZSA9IFwiXCIgfTtcbiAgICAgICAgIFVua25vd25fbG9jYXRpb24geyBpc19yYWlzZSA9IGZhbHNlIH1dXG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90OlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2U6XG4gIHJhd19iYWNrdHJhY2UgLT4gYmFja3RyYWNlX3Nsb3QgYXJyYXkgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlXCJcblxubGV0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidCA9XG4gIHRyeSBTb21lIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBwb3Mgc2xvdCA9XG4gIGxldCBpbmZvIGlzX3JhaXNlID1cbiAgICBpZiBpc19yYWlzZSB0aGVuXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYXRcIiBlbHNlIFwiUmUtcmFpc2VkIGF0XCJcbiAgICBlbHNlXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYnkgcHJpbWl0aXZlIG9wZXJhdGlvbiBhdFwiIGVsc2UgXCJDYWxsZWQgZnJvbVwiXG4gIGluXG4gIG1hdGNoIHNsb3Qgd2l0aFxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgaWYgbC5pc19yYWlzZSB0aGVuXG4gICAgICAgICgqIGNvbXBpbGVyLWluc2VydGVkIHJlLXJhaXNlLCBza2lwcGVkICopIE5vbmVcbiAgICAgIGVsc2VcbiAgICAgICAgU29tZSAoc3ByaW50ZiBcIiVzIHVua25vd24gbG9jYXRpb25cIiAoaW5mbyBmYWxzZSkpXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgU29tZSAoc3ByaW50ZiBcIiVzICVzIGluIGZpbGUgXFxcIiVzXFxcIiVzLCBsaW5lICVkLCBjaGFyYWN0ZXJzICVkLSVkXCJcbiAgICAgICAgICAgICAgKGluZm8gbC5pc19yYWlzZSkgbC5kZWZuYW1lIGwuZmlsZW5hbWVcbiAgICAgICAgICAgICAgKGlmIGwuaXNfaW5saW5lIHRoZW4gXCIgKGlubGluZWQpXCIgZWxzZSBcIlwiKVxuICAgICAgICAgICAgICBsLmxpbmVfbnVtYmVyIGwuc3RhcnRfY2hhciBsLmVuZF9jaGFyKVxuXG5sZXQgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICAgZnByaW50ZiBvdXRjaGFuXG4gICAgICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGZwcmludGYgb3V0Y2hhbiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lXG5cbmxldCBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gcmF3X2JhY2t0cmFjZSA9XG4gIHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOiBwcmludHMgdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IHByaW50X2JhY2t0cmFjZSBvdXRjaGFuID1cbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxubGV0IGJhY2t0cmFjZV90b19zdHJpbmcgYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMTAyNCBpblxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBicHJpbnRmIGIgXCIlc1xcblwiIHN0clxuICAgICAgZG9uZTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCByYXdfYmFja3RyYWNlX3RvX3N0cmluZyByYXdfYmFja3RyYWNlID1cbiAgYmFja3RyYWNlX3RvX3N0cmluZyAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX2lubGluZVxuICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuXG50eXBlIGxvY2F0aW9uID0ge1xuICBmaWxlbmFtZSA6IHN0cmluZztcbiAgbGluZV9udW1iZXIgOiBpbnQ7XG4gIHN0YXJ0X2NoYXIgOiBpbnQ7XG4gIGVuZF9jaGFyIDogaW50O1xufVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfbG9jYXRpb24gPSBmdW5jdGlvblxuICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBOb25lXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPlxuICAgIFNvbWUge1xuICAgICAgZmlsZW5hbWUgICAgPSBsLmZpbGVuYW1lO1xuICAgICAgbGluZV9udW1iZXIgPSBsLmxpbmVfbnVtYmVyO1xuICAgICAgc3RhcnRfY2hhciAgPSBsLnN0YXJ0X2NoYXI7XG4gICAgICBlbmRfY2hhciAgICA9IGwuZW5kX2NoYXI7XG4gICAgfVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfZGVmbmFtZSA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfXG4gIHwgS25vd25fbG9jYXRpb24geyBkZWZuYW1lID0gXCJcIiB9IC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IFNvbWUgbC5kZWZuYW1lXG5cbmxldCBiYWNrdHJhY2Vfc2xvdHMgcmF3X2JhY2t0cmFjZSA9XG4gICgqIFRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IFNvbWUgaXNcbiAgICAgcmV0dXJuZWQgb25seSBpZiBhIHBhcnQgb2YgdGhlIHRyYWNlIGlzIHVzYWJsZS4gVGhpcyBnaXZlcyB1c1xuICAgICBhIGJpdCBtb3JlIHdvcmsgdGhhbiBqdXN0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSwgYnV0IGl0IG1ha2VzIHRoZVxuICAgICBBUEkgbW9yZSB1c2VyLWZyaWVuZGx5IC0tIG90aGVyd2lzZSBtb3N0IHVzZXJzIHdvdWxkIGhhdmUgdG9cbiAgICAgcmVpbXBsZW1lbnQgdGhlIFwiUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIHNvcnJ5XCIgbG9naWNcbiAgICAgdGhlbXNlbHZlcy4gKilcbiAgbWF0Y2ggY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2Ugd2l0aFxuICAgIHwgTm9uZSAtPiBOb25lXG4gICAgfCBTb21lIGJhY2t0cmFjZSAtPlxuICAgICAgbGV0IHVzYWJsZV9zbG90ID0gZnVuY3Rpb25cbiAgICAgICAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcbiAgICAgICAgfCBLbm93bl9sb2NhdGlvbiBfIC0+IHRydWUgaW5cbiAgICAgIGxldCByZWMgZXhpc3RzX3VzYWJsZSA9IGZ1bmN0aW9uXG4gICAgICAgIHwgKC0xKSAtPiBmYWxzZVxuICAgICAgICB8IGkgLT4gdXNhYmxlX3Nsb3QgYmFja3RyYWNlLihpKSB8fCBleGlzdHNfdXNhYmxlIChpIC0gMSkgaW5cbiAgICAgIGlmIGV4aXN0c191c2FibGUgKEFycmF5Lmxlbmd0aCBiYWNrdHJhY2UgLSAxKVxuICAgICAgdGhlbiBTb21lIGJhY2t0cmFjZVxuICAgICAgZWxzZSBOb25lXG5cbmxldCBiYWNrdHJhY2Vfc2xvdHNfb2ZfcmF3X2VudHJ5IGVudHJ5ID1cbiAgYmFja3RyYWNlX3Nsb3RzIFt8IGVudHJ5IHxdXG5cbm1vZHVsZSBTbG90ID0gc3RydWN0XG4gIHR5cGUgdCA9IGJhY2t0cmFjZV9zbG90XG4gIGxldCBmb3JtYXQgPSBmb3JtYXRfYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGlzX3JhaXNlID0gYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2VcbiAgbGV0IGlzX2lubGluZSA9IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZVxuICBsZXQgbG9jYXRpb24gPSBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvblxuICBsZXQgbmFtZSA9IGJhY2t0cmFjZV9zbG90X2RlZm5hbWVcbmVuZFxuXG5sZXQgcmF3X2JhY2t0cmFjZV9sZW5ndGggYnQgPSBBcnJheS5sZW5ndGggYnRcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2Vfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2UgLT4gaW50IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QgOlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gcmF3X2JhY2t0cmFjZV9zbG90IG9wdGlvblxuICA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdFwiXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOlxuICAgcmV0dXJucyB0aGUgKnN0cmluZyogY29ycmVzcG9uZGluZyB0byB0aGUgZ2xvYmFsIGN1cnJlbnQgYmFja3RyYWNlICopXG5sZXQgZ2V0X2JhY2t0cmFjZSAoKSA9IHJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxuZXh0ZXJuYWwgcmVjb3JkX2JhY2t0cmFjZTogYm9vbCAtPiB1bml0ID0gXCJjYW1sX3JlY29yZF9iYWNrdHJhY2VcIlxuZXh0ZXJuYWwgYmFja3RyYWNlX3N0YXR1czogdW5pdCAtPiBib29sID0gXCJjYW1sX2JhY2t0cmFjZV9zdGF0dXNcIlxuXG5sZXQgcmVjIHJlZ2lzdGVyX3ByaW50ZXIgZm4gPVxuICBsZXQgb2xkX3ByaW50ZXJzID0gQXRvbWljLmdldCBwcmludGVycyBpblxuICBsZXQgbmV3X3ByaW50ZXJzID0gZm4gOjogb2xkX3ByaW50ZXJzIGluXG4gIGxldCBzdWNjZXNzID0gQXRvbWljLmNvbXBhcmVfYW5kX3NldCBwcmludGVycyBvbGRfcHJpbnRlcnMgbmV3X3ByaW50ZXJzIGluXG4gIGlmIG5vdCBzdWNjZXNzIHRoZW4gcmVnaXN0ZXJfcHJpbnRlciBmblxuXG5leHRlcm5hbCBnZXRfY2FsbHN0YWNrOiBpbnQgLT4gcmF3X2JhY2t0cmFjZSA9IFwiY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2tcIlxuXG5sZXQgZXhuX3Nsb3QgeCA9XG4gIGxldCB4ID0gT2JqLnJlcHIgeCBpblxuICBpZiBPYmoudGFnIHggPSAwIHRoZW4gT2JqLmZpZWxkIHggMCBlbHNlIHhcblxubGV0IGV4bl9zbG90X2lkIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDEpIDogaW50KVxuXG5sZXQgZXhuX3Nsb3RfbmFtZSB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAwKSA6IHN0cmluZylcblxuZXh0ZXJuYWwgZ2V0X2RlYnVnX2luZm9fc3RhdHVzIDogdW5pdCAtPiBpbnQgPSBcImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXNcIlxuXG4oKiBEZXNjcmlwdGlvbnMgZm9yIGVycm9ycyBpbiBzdGFydHVwLmguIFNlZSBhbHNvIGJhY2t0cmFjZS5jICopXG5sZXQgZXJyb3JzID0gW3wgXCJcIjtcbiAgKCogRklMRV9OT1RfRk9VTkQgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIG5vdCBmb3VuZClcIjtcbiAgKCogQkFEX0JZVEVDT0RFICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQpXCI7XG4gICgqIFdST05HX01BR0lDICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBoYXMgd3JvbmcgbWFnaWMgbnVtYmVyKVwiO1xuICAoKiBOT19GRFMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQ7XFxuIFxcXG4gICAgICAtLSB0b28gbWFueSBvcGVuIGZpbGVzLiBUcnkgcnVubmluZyB3aXRoIE9DQU1MUlVOUEFSQU09Yj0yKVwiXG58XVxuXG5sZXQgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZSA9XG4gIGVwcmludGYgXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uICVzXFxuXCIgKHRvX3N0cmluZyBleG4pO1xuICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICBsZXQgc3RhdHVzID0gZ2V0X2RlYnVnX2luZm9fc3RhdHVzICgpIGluXG4gIGlmIHN0YXR1cyA8IDAgdGhlblxuICAgIHByZXJyX2VuZGxpbmUgZXJyb3JzLihhYnMgc3RhdHVzKTtcbiAgZmx1c2ggc3RkZXJyXG5cbmxldCB1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciA9IHJlZiBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyXG5cbmxldCBzZXRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZm4gPSB1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciA6PSBmblxuXG5sZXQgZW1wdHlfYmFja3RyYWNlIDogcmF3X2JhY2t0cmFjZSA9IFt8IHxdXG5cbmxldCB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKCkgPVxuICB0cnlcbiAgICBnZXRfcmF3X2JhY2t0cmFjZSAoKVxuICB3aXRoIF8gKCogT3V0X29mX21lbW9yeT8gKikgLT5cbiAgICBlbXB0eV9iYWNrdHJhY2VcblxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICAoKiBHZXQgdGhlIGJhY2t0cmFjZSBub3csIGluIGNhc2Ugb25lIG9mIHRoZSBbYXRfZXhpdF0gZnVuY3Rpb25cbiAgICAgICBkZXN0cm95cyBpdC4gKilcbiAgICBsZXQgcmF3X2JhY2t0cmFjZSA9XG4gICAgICBpZiBkZWJ1Z2dlcl9pbl91c2UgKCogU2FtZSB0ZXN0IGFzIGluIFtydW50aW1lL3ByaW50ZXhjLmNdICopIHRoZW5cbiAgICAgICAgZW1wdHlfYmFja3RyYWNlXG4gICAgICBlbHNlXG4gICAgICAgIHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKVxuICAgIGluXG4gICAgKHRyeSBTdGRsaWIuZG9fYXRfZXhpdCAoKSB3aXRoIF8gLT4gKCkpO1xuICAgIHRyeVxuICAgICAgIXVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlXG4gICAgd2l0aCBleG4nIC0+XG4gICAgICBsZXQgcmF3X2JhY2t0cmFjZScgPSB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIGVwcmludGYgXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uICVzXFxuXCIgKHRvX3N0cmluZyBleG4pO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgICAgIGVwcmludGYgXCJGYXRhbCBlcnJvciBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlcjogZXhjZXB0aW9uICVzXFxuXCJcbiAgICAgICAgKHRvX3N0cmluZyBleG4nKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2UnO1xuICAgICAgZmx1c2ggc3RkZXJyXG4gIHdpdGhcbiAgICB8IE91dF9vZl9tZW1vcnkgLT5cbiAgICAgICAgcHJlcnJfZW5kbGluZVxuICAgICAgICAgIFwiRmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXJcIlxuXG4oKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBbY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25dIGluXG4gICBbcnVudGltZS9wcmludGV4Yy5jXSB3aGljaCBleHBlY3RzIG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQuICopXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZVxuICB3aXRoIF8gLT5cbiAgICAoKiBUaGVyZSBpcyBub3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCAqKVxuICAgICgpXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgKCkgPVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIlxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cbiIsIiMgMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gXG4gIG1vZHVsZSBMZXhpbmcgPSBzdHJ1Y3RcbiAgICAoKiBPdmVycmlkZSB0aGUgTGV4aW5nLmVuZ2luZSB0byBhdm9pZCBjcmVhdGluZyBhIG5ldyBwb3NpdGlvbiByZWNvcmRcbiAgICAgICBlYWNoIHRpbWUgYSBydWxlIGlzIG1hdGNoZWQuIFJlZHVjZXMgdG90YWwgcGFyc2UgdGltZSBieSBhcm91bmQgMzAlLlxuICAgICAgIElkZWEgc3RvbGVuIGZyb20geW9qc29uICopXG5cbiAgICBpbmNsdWRlIExleGluZ1xuXG4gICAgZXh0ZXJuYWwgY19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50ID0gXCJjYW1sX2xleF9lbmdpbmVcIlxuXG4gICAgbGV0IGVuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgICAgIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gICAgICAoKlxuICAgICAgaWYgcmVzdWx0ID49IDAgdGhlbiBiZWdpblxuICAgICAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICAgICAgZW5kO1xuICAgICAgKilcbiAgICAgIHJlc3VsdFxuICBlbmRcbiAgb3BlbiBUb2tlbnNcblxuXG4gIG1vZHVsZSB0eXBlIExleCA9IHNpZ1xuICAgIHZhbCByZWFkIDogTGV4aW5nLmxleGJ1ZiAtPiBUb2tlbnMudG9rZW5cbiAgZW5kXG5cbiAgbW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogTGV4ID0gc3RydWN0XG5cbiMgMzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5sZXQgX19vY2FtbF9sZXhfdGFibGVzID0ge1xuICBMZXhpbmcubGV4X2Jhc2UgPVxuICAgXCJcXDAwMFxcMDAwXFwyMjlcXDI1NVxcMDE3XFwwMDBcXDIzMlxcMjU1XFwwMDNcXDAwMFxcMjM0XFwyNTVcXDEyNlxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwxMTNcXDAwMFxcMDAwXFwwMDBcXDAwMVxcMDAwXFwwMDFcXDAwMFxcMDAyXFwwMDBcXDEyM1xcMDAwXFwyNDNcXDI1NVxcMjQ0XFwyNTVcXFxuICAgIFxcMjQ1XFwyNTVcXDI0NlxcMjU1XFwyNDdcXDI1NVxcMjQ4XFwyNTVcXDI0OVxcMjU1XFwyNTBcXDI1NVxcMjUxXFwyNTVcXDI1MlxcMjU1XFxcbiAgICBcXDAwMVxcMDAwXFwwMDJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDJcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDNcXDAwMFxcMjU0XFwyNTVcXDAwM1xcMDAwXFwwMDFcXDAwMFxcMDExXFwwMDBcXDI1M1xcMjU1XFwyMzlcXDI1NVxcMDAzXFwwMDBcXFxuICAgIFxcMDEwXFwwMDBcXDAxMVxcMDAwXFwwMDVcXDAwMFxcMjQyXFwyNTVcXDAyMFxcMDAwXFwwMTlcXDAwMFxcMDQ4XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA2N1xcMDAwXFwwNjNcXDAwMFxcMDc1XFwwMDBcXDA4NFxcMDAwXFwyNDFcXDI1NVxcMDg1XFwwMDBcXDA4M1xcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDc1XFwwMDBcXDA3MVxcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA5M1xcMDAwXFwyNDBcXDI1NVxcMDk1XFwwMDBcXFxuICAgIFxcMDkzXFwwMDBcXDA4OVxcMDAwXFwwOTVcXDAwMFxcMDg1XFwwMDBcXDA4MVxcMDAwXFwwMDFcXDAwMFxcMDMyXFwwMDBcXDE1NVxcMDAwXFxcbiAgICBcXDE4NlxcMDAwXFwyMDlcXDAwMFxcMjE5XFwwMDBcXDIyOVxcMDAwXFwyNDBcXDAwMFxcMjUwXFwwMDBcXDAxOFxcMDAxXFwwNjZcXDAwMVxcXG4gICAgXFwyMzZcXDI1NVxcMjM1XFwyNTVcXDA5NFxcMDAxXFwxMTdcXDAwMVxcMTU1XFwwMDFcXDE3OFxcMDAxXFwwNTNcXDAwMFxcMjMxXFwyNTVcXFxuICAgIFxcMDg4XFwwMDFcXDI1MlxcMjU1XFwyNTNcXDI1NVxcMjU0XFwyNTVcXDAxNFxcMDAwXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2JhY2t0cmsgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDI2XFwwMDBcXDI1NVxcMjU1XFwwMjJcXDAwMFxcMjU1XFwyNTVcXDAyNlxcMDAwXFwwMTdcXDAwMFxcXG4gICAgXFwwMTdcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMDE4XFwwMDBcXDI1NVxcMjU1XFwwMThcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMjVcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwM1xcMDAwXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHQgPVxuICAgXCJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODZcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDg5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X3RyYW5zID1cbiAgIFwiXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwNFxcMDAwXFwwMDNcXDAwMFxcMDAwXFwwMDBcXDAwNFxcMDAwXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDZcXDAwMFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAxOVxcMDAwXFwwMThcXDAwMFxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwMTVcXDAwMFxcMDEzXFwwMDBcXDA3MVxcMDAwXFwwMDJcXDAwMFxcXG4gICAgXFwwMDdcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMTRcXDAwMFxcMDg3XFwwMDBcXDAxN1xcMDAwXFwwOTNcXDAwMFxcMDE2XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDA4NlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDcwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDExXFwwMDBcXDA1OVxcMDAwXFwwNzdcXDAwMFxcMDAwXFwwMDBcXDA3N1xcMDAwXFwwMDlcXDAwMFxcMDM4XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDAwXFwwMDBcXDAyMVxcMDAwXFwwMDBcXDAwMFxcMDIwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDY5XFwwMDBcXDAzNFxcMDAwXFwwMzBcXDAwMFxcMDUwXFwwMDBcXDA3MFxcMDAwXFwwMjVcXDAwMFxcMDI5XFwwMDBcXFxuICAgIFxcMDMzXFwwMDBcXDAxMlxcMDAwXFwwNjBcXDAwMFxcMDQzXFwwMDBcXDAzMVxcMDAwXFwwMzZcXDAwMFxcMDI0XFwwMDBcXDA1M1xcMDAwXFxcbiAgICBcXDA1MVxcMDAwXFwwMzhcXDAwMFxcMDI3XFwwMDBcXDAzMlxcMDAwXFwwMjZcXDAwMFxcMDI4XFwwMDBcXDAzNVxcMDAwXFwwMzdcXDAwMFxcXG4gICAgXFwwNDRcXDAwMFxcMDQyXFwwMDBcXDA0NVxcMDAwXFwwMjNcXDAwMFxcMDQ2XFwwMDBcXDAyMlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDQ3XFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA4MFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDdcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwNDhcXDAwMFxcMDcwXFwwMDBcXDA0OVxcMDAwXFxcbiAgICBcXDA0M1xcMDAwXFwwMzhcXDAwMFxcMDUyXFwwMDBcXDA1NFxcMDAwXFwwNTVcXDAwMFxcMDU2XFwwMDBcXDA1N1xcMDAwXFwwNThcXDAwMFxcXG4gICAgXFwwNTJcXDAwMFxcMDYzXFwwMDBcXDA2MVxcMDAwXFwwNjJcXDAwMFxcMDQwXFwwMDBcXDA2NFxcMDAwXFwwNjVcXDAwMFxcMDY2XFwwMDBcXFxuICAgIFxcMDY3XFwwMDBcXDA2OFxcMDAwXFwwNjJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDAwXFwwMDBcXDA3MFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA0MVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMzlcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3NVxcMDAwXFwwMDBcXDAwMFxcMDc1XFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDAwNVxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDkxXFwwMDBcXDAwMFxcMDAwXFwwODFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDA5MlxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzhcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwMDBcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwOTBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcIjtcbiAgTGV4aW5nLmxleF9jaGVjayA9XG4gICBcIlxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDRcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwNFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDdcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMlxcMDAwXFwwMDBcXDAwMFxcMDkyXFwwMDBcXDAwMFxcMDAwXFwwODZcXDAwMFxcXG4gICAgXFwwMDJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwN1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDcwXFwwMDBcXDI1NVxcMjU1XFwwNzBcXDAwMFxcMDAwXFwwMDBcXDA2OVxcMDAwXFxcbiAgICBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcXG4gICAgXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwOVxcMDAwXFwwMjRcXDAwMFxcMDI1XFwwMDBcXDAzOVxcMDAwXFwwMDdcXDAwMFxcMDAwXFwwMDBcXDAyOFxcMDAwXFxcbiAgICBcXDAzMlxcMDAwXFwwMDBcXDAwMFxcMDEwXFwwMDBcXDA0MlxcMDAwXFwwMzBcXDAwMFxcMDM1XFwwMDBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcXG4gICAgXFwwMTJcXDAwMFxcMDM0XFwwMDBcXDAyNlxcMDAwXFwwMzFcXDAwMFxcMDAwXFwwMDBcXDAyN1xcMDAwXFwwMjRcXDAwMFxcMDM2XFwwMDBcXFxuICAgIFxcMDQwXFwwMDBcXDA0MVxcMDAwXFwwNDRcXDAwMFxcMDAwXFwwMDBcXDA0NVxcMDAwXFwwMDBcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDA0NlxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFxcbiAgICBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDQ3XFwwMDBcXDAwOFxcMDAwXFwwNDhcXDAwMFxcXG4gICAgXFwwNDlcXDAwMFxcMDUwXFwwMDBcXDA1MVxcMDAwXFwwNTNcXDAwMFxcMDU0XFwwMDBcXDA1NVxcMDAwXFwwNTZcXDAwMFxcMDU3XFwwMDBcXFxuICAgIFxcMDU4XFwwMDBcXDA1OVxcMDAwXFwwNjBcXDAwMFxcMDYxXFwwMDBcXDAxM1xcMDAwXFwwNjNcXDAwMFxcMDY0XFwwMDBcXDA2NVxcMDAwXFxcbiAgICBcXDA2NlxcMDAwXFwwNjdcXDAwMFxcMDY4XFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcXG4gICAgXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDI1NVxcMjU1XFwwMDhcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMTNcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDEzXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzNcXDAwMFxcMjU1XFwyNTVcXDA3M1xcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcXG4gICAgXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcXG4gICAgXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc4XFwwMDBcXDA4NlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwNzhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDZcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDc4XFwwMDBcXDI1NVxcMjU1XFwwODhcXDAwMFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDA3OFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4MlxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMjU1XFwyNTVcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDg4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfYmFzZV9jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfYmFja3Rya19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfZGVmYXVsdF9jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfdHJhbnNfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NoZWNrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9jb2RlID1cbiAgIFwiXCI7XG59XG5cbmxldCByZWMgcmVhZCBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIDBcbmFuZCBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEJPT0wgdHJ1ZSApXG4jIDI3MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEgLT5cbiMgNTkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQk9PTCBmYWxzZSApXG4jIDI3NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIgLT5cbiMgNjEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTlVMTCApXG4jIDI4MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDMgLT5cbiMgNjMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggT1MgKVxuIyAyODYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA0IC0+XG4jIDY1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE9FIClcbiMgMjkxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNSAtPlxuIyA2NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBBUyApXG4jIDI5NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDYgLT5cbiMgNjkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQUUgKVxuIyAzMDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA3IC0+XG4jIDcxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF90dXBsZSBUUyB0aGVuIFRTXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzA5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgOCAtPlxuIyA3NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdHVwbGUgVEUgdGhlbiBURVxuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMxNyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDkgLT5cbiMgODEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3ZhcmlhbnQgVlMgdGhlbiBWU1xuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMyNSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEwIC0+XG4jIDg2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF92YXJpYW50IFZFIHRoZW4gVkVcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMSAtPlxuIyA5MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDT01NQSApXG4jIDMzOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEyIC0+XG4jIDkzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENPTE9OIClcbiMgMzQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTMgLT5cbiMgOTUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIE5FR0lORklOSVRZIClcbiMgMzQ4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTQgLT5cbiMgOTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIElORklOSVRZIClcbiMgMzUzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTUgLT5cbiMgOTkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIElORklOSVRZIClcbiMgMzU4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTYgLT5cbiMgMTAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBOQU4gKVxuIyAzNjMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNyAtPlxuIyAxMDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIExleHhlcl91dGlscy5zdHJpbmcybnVtIChMZXhpbmcubGV4ZW1lIGxleGJ1Zikgd2l0aFxuICAgICAgfCBJTlQgXyBhcyB0b2sgLT4gQ29tcGxpYW5jZS5sZXhfaW50ZWdlciB0b2tcbiAgICAgIHwgTEFSR0VJTlQgXyBhcyB0b2sgLT4gQ29tcGxpYW5jZS5sZXhfbGFyZ2VpbnQgdG9rXG4gICAgICB8IHRvayAtPiB0b2tcbiAgICApXG4jIDM3MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE4IC0+XG4jIDExMCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgKEZMT0FUIChmbG9hdF9vZl9zdHJpbmcgKExleGluZy5sZXhlbWUgbGV4YnVmKSkpIClcbiMgMzc4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTkgLT5cbiMgMTEyIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIFNUUklORyBcIlwiIClcbiMgMzgzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjAgLT5cbmxldFxuIyAxMTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzXG4jIDM4OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbj0gTGV4aW5nLnN1Yl9sZXhlbWUgbGV4YnVmIChsZXhidWYuTGV4aW5nLmxleF9zdGFydF9wb3MgKyAxKSAobGV4YnVmLkxleGluZy5sZXhfY3Vycl9wb3MgKyAtMSkgaW5cbiMgMTE0IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIFNUUklORyAoTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzKSApXG4jIDM5MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIxIC0+XG4jIDExNiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBFT0YgKVxuIyAzOTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMiAtPlxuIyAxMTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggcmVhZCBsZXhidWYgKVxuIyA0MDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMyAtPlxuIyAxMjAgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLnVwZGF0ZV9wb3MgbGV4YnVmOyByZWFkIGxleGJ1ZjsgKVxuIyA0MDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNCAtPlxuIyAxMjIgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIENvbXBsaWFuY2UuY29tbWVudF9jaGVjayAoKSB3aXRoXG4gICAgICB8IE9rICgpIC0+IHJlYWRfY29tbWVudCBsZXhidWY7IHJlYWQgbGV4YnVmXG4gICAgICB8IEVycm9yIGVyciAtPiAgQ09NUExJQU5DRV9FUlJPUiBlcnJcbiAgICApXG4jIDQxNyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI1IC0+XG4jIDEyOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggQ29tcGxpYW5jZS5jb21tZW50X2NoZWNrICgpIHdpdGhcbiAgICAgIHwgT2sgKCkgLT4gcmVhZCBsZXhidWZcbiAgICAgIHwgRXJyb3IgZXJyIC0+ICBDT01QTElBTkNFX0VSUk9SIGVyclxuICAgIClcbiMgNDI2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjYgLT5cbiMgMTM0IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKSApXG4jIDQzMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2NvbW1lbnQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIDg4XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDEzOSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCAoKSApXG4jIDQ0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEgLT5cbiMgMTQxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy51cGRhdGVfcG9zIGxleGJ1ZjsgcmVhZF9jb21tZW50IGxleGJ1ZiApXG4jIDQ0OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIgLT5cbiMgMTQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy5sZXhfZXJyb3IgXCJ1bmV4cGVjdGVkIEVPRiBpbiBjb21tZW50XCIgKVxuIyA0NTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAzIC0+XG4jIDE0NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCByZWFkX2NvbW1lbnQgbGV4YnVmIClcbiMgNDU4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG47O1xuXG4jIDE0NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gXG4gIGVuZFxuXG4jIDQ2OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbiIsIm1vZHVsZSBZb2pzb24gPSBTdGQuWW9qc29uXG5vcGVuIEJyclxuXG50eXBlIG1ldGhvZCcgPSBHZXQgfCBQb3N0XG5cbmxldCBqc3RyX29mX21ldGhvZCA9IGZ1bmN0aW9uIEdldCAtPiBKc3RyLnYgXCJHRVRcIiB8IFBvc3QgLT4gSnN0ci52IFwiUE9TVFwiXG5cbm1vZHVsZSBUeXBlcyA9IHN0cnVjdFxuICB0eXBlIG9yZGVyID0gQXNjZW5kaW5nIHwgRGVzY2VuZGluZyBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBzb3J0ID1cbiAgICB8IEFsYnVtXG4gICAgfCBBbGJ1bUFydGlzdFxuICAgIHwgQXJ0aXN0XG4gICAgfCBCdWRnZXRcbiAgICB8IENvbW11bml0eVJhdGluZ1xuICAgIHwgQ3JpdGljUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZVBsYXllZFxuICAgIHwgUGxheUNvdW50XG4gICAgfCBQcmVtaWVyZURhdGVcbiAgICB8IFByb2R1Y3Rpb25ZZWFyXG4gICAgfCBTb3J0TmFtZVxuICAgIHwgUmFuZG9tXG4gICAgfCBSZXZlbnVlXG4gICAgfCBSdW50aW1lXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cbmVuZFxuXG50eXBlIHVzZXIgPSB7XG4gIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgc2VydmVyX25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJTZXJ2ZXJOYW1lXCJdXG4gIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG59XG5bQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbm1vZHVsZSB0eXBlIFF1ZXJ5ID0gc2lnXG4gIHR5cGUgcGF0aF9wYXJhbXNcbiAgdHlwZSBwYXJhbXMgW0BAZGVyaXZpbmcgeW9qc29uXVxuICB0eXBlIHJlc3BvbnNlIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB2YWwgbWV0aG9kJyA6IG1ldGhvZCdcbiAgdmFsIGVuZHBvaW50IDogcGF0aF9wYXJhbXMgLT4gc3RyaW5nXG5lbmRcblxubW9kdWxlIEF1dGhlbnRpY2F0ZV9ieV9uYW1lID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG5cbiAgdHlwZSBwYXJhbXMgPSB7IHVzZXJuYW1lIDogc3RyaW5nOyBbQGtleSBcIlVzZXJuYW1lXCJdIHB3IDogc3RyaW5nIFtAa2V5IFwiUHdcIl0gfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICB1c2VyIDogdXNlcjsgW0BrZXkgXCJVc2VyXCJdXG4gICAgYWNjZXNzX3Rva2VuIDogc3RyaW5nOyBbQGtleSBcIkFjY2Vzc1Rva2VuXCJdXG4gICAgc2VydmVyX2lkIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlcklkXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gUG9zdFxuICBsZXQgZW5kcG9pbnQgXyA9IFwiL1VzZXJzL0F1dGhlbnRpY2F0ZUJ5TmFtZVwiXG5lbmRcblxubW9kdWxlIEl0ZW0gPSBzdHJ1Y3RcbiAgdHlwZSBpbWFnZV9ibHVyX2hhc2ggPSAoc3RyaW5nICogc3RyaW5nKSBsaXN0XG5cbiAgbGV0IGltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24geSA9XG4gICAgbGV0IGFzc29jID0gWW9qc29uLlNhZmUuVXRpbC50b19hc3NvYyB5IGluXG4gICAgTGlzdC5tYXAgKGZ1biAoa2V5LCB2KSAtPiAoa2V5LCBZb2pzb24uU2FmZS5VdGlsLnRvX3N0cmluZyB2KSkgYXNzb2NcblxuICBsZXQgeW9qc29uX29mX2ltYWdlX2JsdXJfaGFzaCBpIDogWW9qc29uLlNhZmUudCA9XG4gICAgbGV0IGFzc29jID0gTGlzdC5tYXAgKGZ1biAoa2V5LCB2KSAtPiAoa2V5LCBgU3RyaW5nIHYpKSBpIGluXG4gICAgYEFzc29jIGFzc29jXG5cbiAgdHlwZSBpbWFnZV9ibHVyX2hhc2hlcyA9IHtcbiAgICBwcmltYXJ5IDogaW1hZ2VfYmx1cl9oYXNoIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlByaW1hcnlcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgdHlwZSB0eXBlXyA9XG4gICAgfCBBZ2dyZWdhdGVGb2xkZXJcbiAgICB8IEF1ZGlvXG4gICAgfCBBdWRpb0Jvb2tcbiAgICB8IEJhc2VQbHVnaW5Gb2xkZXJcbiAgICB8IEJvb2tcbiAgICB8IEJveFNldFxuICAgIHwgQ2hhbm5lbFxuICAgIHwgQ2hhbm5lbEZvbGRlckl0ZW1cbiAgICB8IENvbGxlY3Rpb25Gb2xkZXJcbiAgICB8IEVwaXNvZGVcbiAgICB8IEZvbGRlclxuICAgIHwgR2VucmVcbiAgICB8IExpdmVUdkNoYW5uZWxcbiAgICB8IExpdmVUdlByb2dyYW1cbiAgICB8IE1hbnVhbFBsYXlsaXN0c0ZvbGRlclxuICAgIHwgTW92aWVcbiAgICB8IE11c2ljQWxidW1cbiAgICB8IE11c2ljQXJ0aXN0XG4gICAgfCBNdXNpY0dlbnJlXG4gICAgfCBNdXNpY1ZpZGVvXG4gICAgfCBQZXJzb25cbiAgICB8IFBob3RvXG4gICAgfCBQaG90b0FsYnVtXG4gICAgfCBQbGF5bGlzdFxuICAgIHwgUGxheWxpc3RzRm9sZGVyXG4gICAgfCBQcm9ncmFtXG4gICAgfCBSZWNvcmRpbmdcbiAgICB8IFNlYXNvblxuICAgIHwgU2VyaWVzXG4gICAgfCBTdHVkaW9cbiAgICB8IFRyYWlsZXJcbiAgICB8IFR2Q2hhbm5lbFxuICAgIHwgVHZQcm9ncmFtXG4gICAgfCBVc2VyUm9vdEZvbGRlclxuICAgIHwgVXNlclZpZXdcbiAgICB8IFZpZGVvXG4gICAgfCBZZWFyXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIGZpZWxkID1cbiAgICB8IEFpclRpbWVcbiAgICB8IEJhc2ljU3luY0luZm9cbiAgICB8IENhbkRlbGV0ZVxuICAgIHwgQ2FuRG93bmxvYWRcbiAgICB8IENoYW5uZWxJbWFnZVxuICAgIHwgQ2hhbm5lbEluZm9cbiAgICB8IENoYXB0ZXJzXG4gICAgfCBDaGlsZENvdW50XG4gICAgfCBDdW11bGF0aXZlUnVuVGltZVRpY2tzXG4gICAgfCBDdXN0b21SYXRpbmdcbiAgICB8IERhdGVDcmVhdGVkXG4gICAgfCBEYXRlTGFzdE1lZGlhQWRkZWRcbiAgICB8IERhdGVMYXN0UmVmcmVzaGVkXG4gICAgfCBEYXRlTGFzdFNhdmVkXG4gICAgfCBEaXNwbGF5UHJlZmVyZW5jZXNJZFxuICAgIHwgRW5hYmxlTWVkaWFTb3VyY2VEaXNwbGF5XG4gICAgfCBFdGFnXG4gICAgfCBFeHRlcm5hbEV0YWdcbiAgICB8IEV4dGVybmFsU2VyaWVzSWRcbiAgICB8IEV4dGVybmFsVXJsc1xuICAgIHwgRXh0cmFJZHNcbiAgICB8IEdlbnJlc1xuICAgIHwgSGVpZ2h0XG4gICAgfCBIb21lUGFnZVVybFxuICAgIHwgSW5oZXJpdGVkUGFyZW50YWxSYXRpbmdWYWx1ZVxuICAgIHwgSXNIRFxuICAgIHwgSXRlbUNvdW50c1xuICAgIHwgTG9jYWxUcmFpbGVyQ291bnRcbiAgICB8IE1lZGlhU291cmNlQ291bnRcbiAgICB8IE1lZGlhU291cmNlc1xuICAgIHwgTWVkaWFTdHJlYW1zXG4gICAgfCBPcmlnaW5hbFRpdGxlXG4gICAgfCBPdmVydmlld1xuICAgIHwgUGFyZW50SWRcbiAgICB8IFBhdGhcbiAgICB8IFBlb3BsZVxuICAgIHwgUGxheUFjY2Vzc1xuICAgIHwgUHJlc2VudGF0aW9uVW5pcXVlS2V5XG4gICAgfCBQcmltYXJ5SW1hZ2VBc3BlY3RSYXRpb1xuICAgIHwgUHJvZHVjdGlvbkxvY2F0aW9uc1xuICAgIHwgUHJvdmlkZXJJZHNcbiAgICB8IFJlY3Vyc2l2ZUl0ZW1Db3VudFxuICAgIHwgUmVmcmVzaFN0YXRlXG4gICAgfCBSZW1vdGVUcmFpbGVyc1xuICAgIHwgU2NyZWVuc2hvdEltYWdlVGFnc1xuICAgIHwgU2Vhc29uVXNlckRhdGFcbiAgICB8IFNlcmllc1ByZXNlbnRhdGlvblVuaXF1ZUtleVxuICAgIHwgU2VyaWVzUHJpbWFyeUltYWdlXG4gICAgfCBTZXJpZXNTdHVkaW9cbiAgICB8IFNlcnZpY2VOYW1lXG4gICAgfCBTZXR0aW5nc1xuICAgIHwgU29ydE5hbWVcbiAgICB8IFNwZWNpYWxFcGlzb2RlTnVtYmVyc1xuICAgIHwgU3BlY2lhbEZlYXR1cmVDb3VudFxuICAgIHwgU3R1ZGlvc1xuICAgIHwgU3luY0luZm9cbiAgICB8IFRhZ2xpbmVzXG4gICAgfCBUYWdzXG4gICAgfCBUaGVtZVNvbmdJZHNcbiAgICB8IFRoZW1lVmlkZW9JZHNcbiAgICB8IFdpZHRoXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICAoKiBUaGUgW1R5cGVdIGZpZWxkIGlzIGFjdHVhbGx5IGEganNvbiBzdHJpbmcgYnV0IHdlIHdhbnQgdG8gc2VlIGl0IGFzIGFcbiAgICAgdmFyaWFudCAod2hpY2ggaXMgYSBsaXN0IG9mIG9uZSBzdHJpbmcpICopXG4gIHR5cGUgdHlwZV9zdHIgPSB0eXBlX1xuXG4gIGxldCB0eXBlX3N0cl9vZl95b2pzb24gaiA9XG4gICAgbGV0IHMgPSBZb2pzb24uU2FmZS5VdGlsLnRvX3N0cmluZyBqIGluXG4gICAgdHlwZV9fb2ZfeW9qc29uIChgTGlzdCBbIGBTdHJpbmcgcyBdKVxuXG4gIGxldCB5b2pzb25fb2ZfdHlwZV9zdHIgdHMgPVxuICAgIG1hdGNoIHlvanNvbl9vZl90eXBlXyB0cyB3aXRoIGBMaXN0IFsganNvbiBdIC0+IGpzb24gfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHR5cGUgdCA9IHtcbiAgICBuYW1lIDogc3RyaW5nOyBbQGtleSBcIk5hbWVcIl1cbiAgICBzb3J0X25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiU29ydE5hbWVcIl1cbiAgICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxuICAgIHBhdGggOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiUGF0aFwiXVxuICAgIGFsYnVtX2lkIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIkFsYnVtSWRcIl1cbiAgICBwYXJlbnRfaWQgOiBzdHJpbmcgb3B0aW9uIG9wdGlvbjtcbiAgICAgICAgKCogW1BhcmVudElkXSBtaWdodCBhYnNlbnQsIFtudWxsXSwgb3IgYSBzdHJpbmcgKilcbiAgICAgICAgW0B5b2pzb24ub3B0aW9uXVxuICAgICAgICBbQGtleSBcIlBhcmVudElkXCJdXG4gICAgc2VydmVyX2lkIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlcklkXCJdXG4gICAgaW1hZ2VfYmx1cl9oYXNoZXMgOiBpbWFnZV9ibHVyX2hhc2hlczsgW0BrZXkgXCJJbWFnZUJsdXJIYXNoZXNcIl1cbiAgICB0eXBlXyA6IHR5cGVfc3RyOyBbQGtleSBcIlR5cGVcIl1cbiAgICBjb2xsZWN0aW9uX3R5cGUgOiBzdHJpbmcgb3B0aW9uO1xuICAgICAgICBbQGRlZmF1bHQgTm9uZV0gW0B5b2pzb25fZHJvcF9kZWZhdWx0ICggPSApXSBbQGtleSBcIkNvbGxlY3Rpb25UeXBlXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuZW5kXG5cbm1vZHVsZSBJdGVtcyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuXG4gIHR5cGUgcGFyYW1zID0ge1xuICAgIGlkcyA6IHN0cmluZyBsaXN0OyBbQGRlZmF1bHQgW11dIFtAeW9qc29uX2Ryb3BfZGVmYXVsdCAoID0gKV0gW0BrZXkgXCJpZHNcIl1cbiAgICBwYXJlbnRfaWQgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwicGFyZW50SWRcIl1cbiAgICB1c2VyX2lkIDogc3RyaW5nOyBbQGtleSBcInVzZXJJZFwiXVxuICAgIGZpZWxkcyA6IEl0ZW0uZmllbGQgbGlzdDtcbiAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgOiBJdGVtLnR5cGVfIGxpc3Q7IFtAa2V5IFwiaW5jbHVkZUl0ZW1UeXBlc1wiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50IG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInN0YXJ0SW5kZXhcIl1cbiAgICBsaW1pdCA6IGludCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl1cbiAgICBzb3J0X29yZGVyIDogVHlwZXMub3JkZXIgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwic29ydE9yZGVyXCJdXG4gICAgc29ydF9ieSA6IFR5cGVzLnNvcnQgbGlzdDsgW0BrZXkgXCJzb3J0QnlcIl1cbiAgICByZWN1cnNpdmUgOiBib29sO1xuICAgIGVuYWJsZV91c2VyX2RhdGEgOiBib29sOyBbQGtleSBcImVuYWJsZVVzZXJEYXRhXCJdXG4gICAgZW5hYmxlX2ltYWdlcyA6IGJvb2w7IFtAa2V5IFwiZW5hYmxlSW1hZ2VzXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgaXRlbXMgOiBJdGVtLnQgbGlzdDsgW0BrZXkgXCJJdGVtc1wiXVxuICAgIHRvdGFsX3JlY29yZF9jb3VudCA6IGludDsgW0BrZXkgXCJUb3RhbFJlY29yZENvdW50XCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQ7IFtAa2V5IFwiU3RhcnRJbmRleFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgXyA9IFwiL0l0ZW1zXCJcbmVuZFxuXG5tb2R1bGUgVmlld3MgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHsgdXNlcl9pZCA6IHN0cmluZyB9XG5cbiAgdHlwZSBwYXJhbXMgPSB7XG4gICAgaW5jbHVkZV9leHRlcm5hbF9jb250ZW50IDogYm9vbDsgW0BrZXkgXCJpbmNsdWRlRXh0ZXJuYWxDb250ZW50XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgaXRlbXMgOiBJdGVtLnQgbGlzdDsgW0BrZXkgXCJJdGVtc1wiXVxuICAgIHRvdGFsX3JlY29yZF9jb3VudCA6IGludDsgW0BrZXkgXCJUb3RhbFJlY29yZENvdW50XCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQ7IFtAa2V5IFwiU3RhcnRJbmRleFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgcHAgPSBQcmludGYuc3ByaW50ZiBcIi9Vc2Vycy8lcy9WaWV3c1wiIHBwLnVzZXJfaWRcbmVuZFxuXG5tb2R1bGUgVmlydHVhbF9mb2xkZXJzID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG4gIHR5cGUgcGFyYW1zID0gdW5pdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSB2aXJ0dWFsX2ZvbGRlciA9IHtcbiAgICBuYW1lIDogc3RyaW5nOyBbQGtleSBcIk5hbWVcIl1cbiAgICBsb2NhdGlvbnMgOiBzdHJpbmcgbGlzdDsgW0BrZXkgXCJMb2NhdGlvbnNcIl1cbiAgICBpdGVtX2lkIDogc3RyaW5nOyBbQGtleSBcIkl0ZW1JZFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICB0eXBlIHJlc3BvbnNlID0gdmlydHVhbF9mb2xkZXIgbGlzdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IF8gPSBQcmludGYuc3ByaW50ZiBcIi9MaWJyYXJ5L1ZpcnR1YWxGb2xkZXJzXCJcbmVuZFxuXG5tb2R1bGUgU3lzdGVtID0gc3RydWN0XG4gIG1vZHVsZSBJbmZvID0gc3RydWN0XG4gICAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcbiAgICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gICAgdHlwZSByZXNwb25zZSA9IHtcbiAgICAgIGxvY2FsX2FkZHJlc3MgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJMb2NhbEFkcmVzc1wiXVxuICAgICAgc2VydmVyX25hbWUgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVyTmFtZVwiXVxuICAgICAgcHJvZHVjdF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiUHJvZHVjdE5hbWVcIl1cbiAgICAgIG9wZXJhdGluZ19zeXN0ZW0gOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJPcGVyYXRpbmdTeXN0ZW1cIl1cbiAgICAgIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG4gICAgfVxuICAgIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICAgIGxldCBtZXRob2QnID0gR2V0XG4gICAgbGV0IGVuZHBvaW50IF8gPSBcIi9TeXN0ZW0vSW5mb1wiXG4gIGVuZFxuZW5kXG5cbigqIEZvcndhcmQgZGVjbGFyYXRpb24gdG8gYmUgZmlsbGVkIGJ5IHRoZSBhcHAgKilcbmxldCBzZXNzaW9uX3V1aWQgPSByZWYgTm9uZVxubGV0IHNldF9zZXNzaW9uX3V1aWQgcyA9IHNlc3Npb25fdXVpZCA6PSBTb21lIHNcblxubGV0IGF1dGhvcml6YXRpb24gP3Rva2VuICgpID1cbiAgbGV0IHRva2VuID1cbiAgICBtYXRjaCB0b2tlbiB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgdCAtPiBQcmludGYuc3ByaW50ZiBcIiwgVG9rZW49JVNcIiB0XG4gIGluXG4gIGxldCBzZXNzaW9uX3V1aWQgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6XCJcIiAhc2Vzc2lvbl91dWlkIGluXG4gIFByaW50Zi5zcHJpbnRmXG4gICAgXCJNZWRpYUJyb3dzZXIgQ2xpZW50PVxcXCJPY2FtaXhcXFwiLCBEZXZpY2U9XFxcIkZpcmVmb3hcXFwiLCBEZXZpY2VJZD1cXFwiJXNcXFwiLCBcXFxuICAgICBWZXJzaW9uPVxcXCIwLjFcXFwiJXNcIlxuICAgIHNlc3Npb25fdXVpZCB0b2tlblxuXG5sZXQgcmVxdWVzdCAodHlwZSBwcCBwIHIpID9iYXNlX3VybCA/dG9rZW4gP2hlYWRlcnNcbiAgICAobW9kdWxlIFEgOiBRdWVyeVxuICAgICAgd2l0aCB0eXBlIHBhdGhfcGFyYW1zID0gcHBcbiAgICAgICBhbmQgdHlwZSBwYXJhbXMgPSBwXG4gICAgICAgYW5kIHR5cGUgcmVzcG9uc2UgPSByKSAocGFyYW1zIDogcCkgKHBhdGhfcGFyYW1zIDogcHApIDogciBGdXQub3JfZXJyb3IgPVxuICBsZXQgb3BlbiBCcnJfaW8uRmV0Y2ggaW5cbiAgbGV0IHVyaSA9XG4gICAgSnN0ci4oXG4gICAgICBVcmkub2ZfanN0ciA/YmFzZTooT3B0aW9uLm1hcCB2IGJhc2VfdXJsKSAodiAoUS5lbmRwb2ludCBwYXRoX3BhcmFtcykpKVxuICAgIHw+IFJlc3VsdC5nZXRfb2tcbiAgaW5cbiAgbGV0IGF1dGhvcml6YXRpb24gPSBhdXRob3JpemF0aW9uID90b2tlbiAoKSBpblxuICBDb25zb2xlLmxvZyBbIGF1dGhvcml6YXRpb24gXTtcbiAgbGV0IGhlYWRlcnMgPVxuICAgIEhlYWRlcnMub2ZfYXNzb2MgP2luaXQ6aGVhZGVyc1xuICAgICAgSnN0ci5cbiAgICAgICAgW1xuICAgICAgICAgICh2IFwiY29udGVudC10eXBlXCIsIHYgXCJ0ZXh0L2pzb25cIik7XG4gICAgICAgICAgKHYgXCJYLUVtYnktQXV0aG9yaXphdGlvblwiLCB2IGF1dGhvcml6YXRpb24pO1xuICAgICAgICBdXG4gIGluXG4gIGxldCBtZXRob2QnID0ganN0cl9vZl9tZXRob2QgUS5tZXRob2QnIGluXG4gIGxldCBpbml0LCB1cmwgPVxuICAgIG1hdGNoIFEubWV0aG9kJyB3aXRoXG4gICAgfCBHZXQgLT5cbiAgICAgICAgbGV0IHBhcmFtcyA9XG4gICAgICAgICAgcGFyYW1zIHw+IFEueW9qc29uX29mX3BhcmFtcyB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci52XG4gICAgICAgICAgfD4gSnNvbi5kZWNvZGUgfD4gUmVzdWx0LmdldF9vayB8PiBVcmkuUGFyYW1zLm9mX29ialxuICAgICAgICBpblxuICAgICAgICBsZXQgdXJpX3dpdGhfcGFyYW1zID0gVXJpLndpdGhfcXVlcnlfcGFyYW1zIHVyaSBwYXJhbXMgaW5cbiAgICAgICAgKFJlcXVlc3QuaW5pdCB+aGVhZGVycyB+bWV0aG9kJyAoKSwgVXJpLnRvX2pzdHIgdXJpX3dpdGhfcGFyYW1zKVxuICAgIHwgUG9zdCAtPlxuICAgICAgICBsZXQgYm9keSA9XG4gICAgICAgICAgcGFyYW1zIHw+IFEueW9qc29uX29mX3BhcmFtcyB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci52XG4gICAgICAgICAgfD4gQm9keS5vZl9qc3RyXG4gICAgICAgIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgfmJvZHkgKCksIFVyaS50b19qc3RyIHVyaSlcbiAgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KiByZXMgPSByZXF1ZXN0IEBAIFJlcXVlc3QudiB+aW5pdCB1cmwgaW5cbiAgbGV0KyBqc29uID0gUmVzcG9uc2UuYXNfYm9keSByZXMgfD4gQm9keS50ZXh0IGluXG4gIGxldCB5b2pzb24gPSBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyAoSnN0ci50b19zdHJpbmcganNvbikgaW5cbiAgdHJ5IFEucmVzcG9uc2Vfb2ZfeW9qc29uIHlvanNvblxuICB3aXRoIGUgLT5cbiAgICBDb25zb2xlLmxvZyBbIFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBkZWNvZGluZyByZXNwb25zZTogXCI7IGpzb24gXTtcbiAgICBDb25zb2xlLmxvZyBbIGUgXTtcbiAgICByYWlzZSBlXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyX2lvXG5tb2R1bGUgQXBpID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5fYXBpXG5cbigqIFByb3Bvc2l0aW9uOlxuICAgLSBVc2UgcHJpbWFyeSBrZXkgdG8gcHJvdmlkZSBmaWx0ZXJpbmdcbiAgIC0gVXNlIGluZGV4IGtleXMgdG8gcHJvdmlkZSBzb3J0c1xuXG4gICBCaWcgcHJpbWFyeSBrZXlzIGRyaXZlIHRoZSBjb3N0IG9mIFtnZXRfYWxsX2tleXNdIHVwLlxuICAgV2UgY291bGQgZGVsZWdhdGUgc29tZSBmaWx0ZXJpbmcgdG8gdGhlIGluZGV4IGtleXMgaWYgbmVjZXNzYXJ5LlxuXG4gICAgV2UgY291bGQgYWxzbyB0cmllZCB0byBwcmUtcHJvY2VzcyBvciBjb21wcmVzcyB0aGUga2V5cyAqKVxuXG5sZXQgdF90b19qdiBlbmNvZGVyIHQgPVxuICBlbmNvZGVyIHQgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIub2Zfc3RyaW5nIHw+IEJyci5Kc29uLmRlY29kZVxuICB8PiBSZXN1bHQuZ2V0X2V4blxuXG5sZXQganZfdG9fdCBkZWNvZGVyIGogPVxuICBsZXQganNvbiA9IEJyci5Kc29uLmVuY29kZSBqIGluXG4gIE9rIChKc3RyLnRvX3N0cmluZyBqc29uIHw+IFlvanNvbi5TYWZlLmZyb21fc3RyaW5nIHw+IGRlY29kZXIpXG5cbm1vZHVsZSBPcmRlcnJlZF9pdGVtcyA9IHN0cnVjdFxuICB0eXBlIHQgPSB7IGlkIDogaW50OyBpdGVtIDogc3RyaW5nIG9wdGlvbiB9IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0gaW50XG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX2ludCBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19pbnQgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcImlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2RhdGVfYWRkZWRcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gdC5pZFxuZW5kXG5cbm1vZHVsZSBJdGVtcyA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluLkFwaVxuXG4gIHR5cGUgc29ydHMgPSB7IGRhdGVfYWRkZWQgOiBpbnQ7IHZpZXdzIDogc3RyaW5nIGxpc3Q7IHNvcnRfbmFtZSA6IHN0cmluZyB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHQgPSB7IHNvcnRzIDogc29ydHM7IGl0ZW0gOiBJdGVtLnQgfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbGV0IGNvbXBhcmUgdCB0JyA9IFN0cmluZy5jb21wYXJlIHQuc29ydHMuc29ydF9uYW1lIHQnLnNvcnRzLnNvcnRfbmFtZVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSB7IGlkIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmc7IHZpZXdzIDogc3RyaW5nIGxpc3QgfVxuXG4gICAgbGV0IHRvX2p2IHsgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfSA9XG4gICAgICBsZXQgaWQgPSBKdi5vZl9zdHJpbmcgaWQgaW5cbiAgICAgIGxldCBzb3J0X25hbWUgPSBKdi5vZl9zdHJpbmcgc29ydF9uYW1lIGluXG4gICAgICBsZXQgdmlld3MgPSBKdi5vZl9saXN0IEp2Lm9mX3N0cmluZyB2aWV3cyBpblxuICAgICAgSnYub2ZfanZfYXJyYXkgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF1cblxuICAgIGxldCBvZl9qdiBqID1cbiAgICAgIG1hdGNoIEp2LnRvX2p2X2FycmF5IGogd2l0aFxuICAgICAgfCBbfCBpZDsgc29ydF9uYW1lOyB2aWV3cyB8XSAtPlxuICAgICAgICAgIGxldCBpZCA9IEp2LnRvX3N0cmluZyBpZCBpblxuICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lIGluXG4gICAgICAgICAgbGV0IHZpZXdzID0gSnYudG9fbGlzdCBKdi50b19zdHJpbmcgdmlld3MgaW5cbiAgICAgICAgICB7IGlkOyBzb3J0X25hbWU7IHZpZXdzIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguKFxuICAgICAgICBTIFt8IElkIFwiaXRlbS5JZFwiOyBJZCBcIml0ZW0uTmFtZVwiOyBJZCBcInNvcnRzLnZpZXdzXCIgfF0pXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfZGF0ZV9hZGRlZCA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9pbnQga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9faW50IGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJzb3J0cy5kYXRlX2FkZGVkXCJcbiAgZW5kXG5cbiAgbW9kdWxlIEtleV9pZCA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHN0cmluZ1xuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9zdHJpbmcga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9fc3RyaW5nIGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJpdGVtLklkXCJcbiAgZW5kXG5cbiAgbW9kdWxlIEtleV92aWV3X2tpbmQgPSBzdHJ1Y3RcbiAgICAoKiB0b2RvOiB1c2UgYSBlbnVtIGZvciBraW5kcyAqKVxuICAgIHR5cGUgdCA9IHsgdHlwZScgOiBzdHJpbmc7IHZpZXdzIDogc3RyaW5nIGxpc3QgfVxuXG4gICAgbGV0IHRvX2p2IF9rID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCB0eXBlJzsgdmlld3MgfF0gLT5cbiAgICAgICAgICB7IHR5cGUnID0gSnYudG9fc3RyaW5nIHR5cGUnOyB2aWV3cyA9IEp2Lih0b19saXN0IHRvX3N0cmluZyB2aWV3cykgfVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLlMgW3wgSWQgXCJpdGVtLlR5cGVcIjsgSWQgXCJzb3J0cy52aWV3c1wiIHxdXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdHlwZV9uYW1lID0gc3RydWN0XG4gICAgdHlwZSB0ID0geyBjb2xsZWN0aW9uX3R5cGUgOiBzdHJpbmc7IHNvcnRfbmFtZSA6IHN0cmluZyB9XG5cbiAgICBsZXQgdG9fanYgX3QgPSBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBvZl9qdiBqID1cbiAgICAgIG1hdGNoIEp2Lih0b19qdl9hcnJheSBqKSB3aXRoXG4gICAgICB8IFt8IGNvbGxlY3Rpb25fdHlwZTsgc29ydF9uYW1lIHxdIC0+XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sbGVjdGlvbl90eXBlID0gSnYudG9fc3RyaW5nIGNvbGxlY3Rpb25fdHlwZTtcbiAgICAgICAgICAgIHNvcnRfbmFtZSA9IEp2LnRvX3N0cmluZyBzb3J0X25hbWU7XG4gICAgICAgICAgfVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPVxuICAgICAgSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5Db2xsZWN0aW9uVHlwZVwiOyBJZCBcInNvcnRzLnNvcnRfbmFtZVwiIHxdXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJpdGVtc1wiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG5cbiAgbGV0IGdldF9rZXkgdCA9XG4gICAge1xuICAgICAgS2V5LnNvcnRfbmFtZSA9IHQuc29ydHMuc29ydF9uYW1lO1xuICAgICAgaWQgPSB0Lml0ZW0uSXRlbS5pZDtcbiAgICAgIHZpZXdzID0gdC5zb3J0cy52aWV3cztcbiAgICB9XG5lbmRcblxubW9kdWxlIFZpcnR1YWxfZm9sZGVyID0gc3RydWN0XG4gIG9wZW4gRGF0YV9zb3VyY2UuSmVsbHlmaW5fYXBpXG5cbiAgKCogdG9kbzogbXVsdGlzZXJ2ZXI6IHdlIHNob3VsZCBhZGQgYSBzZXJ2ZXJfaWQga2V5ICopXG4gIHR5cGUgdCA9IFZpcnR1YWxfZm9sZGVycy52aXJ0dWFsX2ZvbGRlciBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHN0cmluZ1xuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9zdHJpbmcga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9fc3RyaW5nIGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJJdGVtSWRcIlxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwidmlydHVhbF9mb2xkZXJzXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cbiAgbGV0IGdldF9rZXkgdCA9IHQuVmlydHVhbF9mb2xkZXJzLml0ZW1faWRcbmVuZFxuXG5tb2R1bGUgT3JkZXJyZWRfaXRlbXNfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChPcmRlcnJlZF9pdGVtcylcbm1vZHVsZSBJdGVtc19zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKEl0ZW1zKVxubW9kdWxlIFZpcnR1YWxfZm9sZGVyX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoVmlydHVhbF9mb2xkZXIpXG5cbm1vZHVsZSBJdGVtc0J5RGF0ZUFkZGVkID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2RhdGVfYWRkZWRcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV9kYXRlX2FkZGVkKVxuXG5tb2R1bGUgSXRlbXNCeVZpZXdBbmRLaW5kID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X3ZpZXdfYW5kX2tpbmRcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV92aWV3X2tpbmQpXG5cbm1vZHVsZSBJdGVtc0J5SWQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfaWRcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV9pZClcblxubW9kdWxlIEl0ZW1zQnlUeXBlQW5kTmFtZSA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV90eXBlX2FuZF9uYW1lXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfdHlwZV9uYW1lKVxuIiwib3BlbiEgU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJyclxub3BlbiBCcnJfaW8uSW5kZXhlZF9kYlxubW9kdWxlIFNvdXJjZSA9IERhdGFfc291cmNlLkplbGx5ZmluXG5tb2R1bGUgT0kgPSBTdG9yZXMuT3JkZXJyZWRfaXRlbXNfc3RvcmVcbm1vZHVsZSBJID0gU3RvcmVzLkl0ZW1zX3N0b3JlXG5tb2R1bGUgVkYgPSBTdG9yZXMuVmlydHVhbF9mb2xkZXJfc3RvcmVcbm9wZW4gU291cmNlLkFwaVxuXG4oKiBJdGVtcyBIaWVyYXJjaHlcblxuICAgVXNlclJvb3RGb2xkZXIgKFwiTWVkaWEgRm9sZGVyc1wiIFwiZTlkNTA3NWE1NTVjMWNiYzM5NGVlYzRjZWYyOTUyNzRcIilcbiAgICAgICAgICAgICAgICAgIChHZXRzIHRoZSByb290IGZvbGRlciBmcm9tIGEgdXNlcidzIGxpYnJhcnkuIClcbiAgIF4gQ29sbGVjdGlvbkZvbGRlciAoXCJNdXNpY0xpYlwiIFwiMTUwODQ4Y2Q0ZjQ0YjlhZTMyZWM1YTc5MzRkZTM5Y2VcIilcblxuICAgQWdncmVnYXRlRm9sZGVyIChcInJvb3RcIiBcImYyN2NhYTM3ZTUxNDIyMjVjY2VkZWQ0OGY2NTUzNTAyXCIpXG4gICBeIEZvbGRlciAoXCJtZWRpYVwiIFwiOTJmZGU3MWQwZWM1NzdiNTMxZTdiMzQyN2IyMjNiZWRcIilcbiAgIF4gRm9sZGVyKyA8LSBNdXNpY0FydGlzdCA8LSBNdXNpY0FsYnVtIDwtIEF1ZGlvXG5cbiAgIEplbGx5ZmluIGNvbnNpZGVycyB0aGF0IEZvbGRlciAoXCJtZWRpYVwiIFwiOTJmZGU3MWQwZWM1NzdiNTMxZTdiMzQyN2IyMjNiZWRcIikgPT0gQ29sbGVjdGlvbkZvbGRlciAoXCJNdXNpY0xpYlwiIFwiMTUwODQ4Y2Q0ZjQ0YjlhZTMyZWM1YTc5MzRkZTM5Y2VcIilcblxuICAgVGhpcyBlcXVhbGl0eSBjYW4gYmUgcmV0cml2ZWQgYnkgcXVlcnlpbmcgdGhlIFwiVmlydHVhbEZvbGRlcnNcIiBhbmQgbG9vayBhdFxuICAgdGhlIGxvY2F0aW9ucycgcGF0aHMuIFVuZm9ydHVuYXRlbHkgdGhpcyBpcyBub3QgYWNjZXNzaWJsZSB0byB1bnByaXZpbGVkZ2VkIHVzZXJzLi4uXG5cbiAgIFRvIGFjdHVhbGx5IGtub3cgd2hpY2ggZm9sZGVycyBhcmUgcGFydCBvZiBhIHVzZXIgdmlldyB3ZSBuZWVkIHRvIHF1ZXJ5IHRoZVxuICAgaXRlbXMgdGhhdCBoYXZlIHRoaXMgdmlldydzIGlkIGFzIGEgW3BhcmVudElkXS4gVGhlIGFjdHVhbCBbcGFyZW50SWRdIG9mXG4gICB0aGVzZSBpdGVtcyB3aWxsIGJlIGRpZmZlcmVudCBhbmQgYXJlIHRoZSBpZHMgYWN0dWFsIGZvbGRlcnMgdGhhdFxuICAgY29uc3RpdHV0ZSB0aGlzIHZpZXcuXG5cbiAgIEZvciBzaW1wbGljaXR5ICg/KSB3ZSBjb25zaWRlciB0aGF0IGFuIGl0ZW0gaXMgcGFydCBvZiBhIHZpZXcgaWYgaXRzIHBhdGggaXNcbiAgIHByZWZpeGVkIGJ5IG9uZSBvZiB0aGUgdmlldydzIHZpcnR1YWwgZm9sZGVyIGxvY2F0aW9ucy5cbiopXG5cbmxldCBjaHVua19zaXplID0gNTAwXG5sZXQgaW5jbHVkZV9pdGVtX3R5cGVzID0gWyBTb3VyY2UuQXBpLkl0ZW0uTXVzaWNBcnRpc3Q7IE11c2ljQWxidW07IEF1ZGlvIF1cblxubGV0IGZldGNoX3RvdGFsX2l0ZW1fY291bnQgc291cmNlID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyByZXMgPVxuICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgIHtcbiAgICAgICAgICAoKiB0b2RvIG1ha2Ugc29ydCBleHBsaWNpdCAoYnkgZGF0ZSBhZGRlZCBkYXRlKSopXG4gICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICBmaWVsZHMgPSBbXTtcbiAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXM7XG4gICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgIGxpbWl0ID0gU29tZSAwO1xuICAgICAgICAgIHNvcnRfb3JkZXIgPSBTb21lIEFzY2VuZGluZztcbiAgICAgICAgICBzb3J0X2J5ID0gWyBEYXRlQ3JlYXRlZCBdO1xuICAgICAgICAgIHJlY3Vyc2l2ZSA9IHRydWU7XG4gICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgKClcbiAgaW5cbiAgcmVzLnRvdGFsX3JlY29yZF9jb3VudFxuXG50eXBlIGRiX2luZm9zID0ge1xuICBsYXN0X2tleSA6IGludCBvcHRpb247XG4gIGxhc3RfdmFsdWUgOiBTdG9yZXMuT3JkZXJyZWRfaXRlbXMudCBvcHRpb247XG59XG5cbmxldCBnZXRfZGJfaW5mb3MgaWRiID1cbiAgbGV0IGluZm9zLCBzZXRfaW5mb3MgPSBGdXQuY3JlYXRlICgpIGluXG4gIGxldCB0cmFuc2FjdGlvbiA9IERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSkgXSB+bW9kZTpSZWFkb25seSBpZGIgaW5cbiAgbGV0IHN0b3JlID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gIGxldCByZXEgPSBPSS5vcGVuX2N1cnNvciB+ZGlyZWN0aW9uOlByZXYgc3RvcmUgaW5cbiAgbGV0IGxhc3Rfa2V5ID0gcmVmIE5vbmUgaW5cbiAgbGV0IF8gPVxuICAgIFJlcXVlc3Qub25fc3VjY2VzcyByZXEgfmY6KGZ1biBfIHEgLT5cbiAgICAgICAgbWF0Y2ggUmVxdWVzdC5yZXN1bHQgcSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBzZXRfaW5mb3MgeyBsYXN0X2tleSA9ICFsYXN0X2tleTsgbGFzdF92YWx1ZSA9IE5vbmUgfVxuICAgICAgICB8IFNvbWUgY3Vyc29yIC0+IChcbiAgICAgICAgICAgIGlmIE9wdGlvbi5pc19ub25lICFsYXN0X2tleSB0aGVuXG4gICAgICAgICAgICAgIGxhc3Rfa2V5IDo9IE9JLkN1cnNvcl93aXRoX3ZhbHVlLmtleSBjdXJzb3I7XG4gICAgICAgICAgICBtYXRjaCBPSS5DdXJzb3Jfd2l0aF92YWx1ZS52YWx1ZSBjdXJzb3Igd2l0aFxuICAgICAgICAgICAgfCBTb21lICh7IGl0ZW0gPSBTb21lIF87IF8gfSBhcyBpdGVtKSAtPlxuICAgICAgICAgICAgICAgIHNldF9pbmZvcyB7IGxhc3Rfa2V5ID0gIWxhc3Rfa2V5OyBsYXN0X3ZhbHVlID0gU29tZSBpdGVtIH1cbiAgICAgICAgICAgIHwgXyAtPiBPSS5DdXJzb3Jfd2l0aF92YWx1ZS5jb250aW51ZSBjdXJzb3IpKVxuICBpblxuICBpbmZvc1xuXG5sZXQgaXNfZGJfY29uc2lzdGVudCB+c291cmNlOl8gfmxhc3Rfc291cmNlX2l0ZW1fa2V5IGRiX3N5bmNfaW5mb3MgPVxuICBsZXQgbGFzdF9rZXkgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6KC0xKSBkYl9zeW5jX2luZm9zLmxhc3Rfa2V5IGluXG4gIGlmIGxhc3Rfa2V5ID4gbGFzdF9zb3VyY2VfaXRlbV9rZXkgdGhlblxuICAgICgqIFRoZXJlIGFyZSBmZXdlciBpdGVtcyBpbiB0aGUgc291cmNlIHRoYW4gZXhwZWN0ZWQgKilcbiAgICBmYWxzZVxuICBlbHNlXG4gICAgKCogVG9kbzogY2hlY2sgdGhhdCB0aGUgbGFzdCBrbm93biBpdGVtIGlzIHRoZSBzYW1lIHRoYW4gaW4gdGhlIHNvdXJjZSAqKVxuICAgIHRydWVcblxudHlwZSBzdGF0dXMgPVxuICB8IFVua25vd25cbiAgfCBJbl9zeW5jXG4gIHwgSW5jb25zaXN0ZW50XG4gIHwgTmV3X2l0ZW1zIG9mIHtcbiAgICAgIGZpcnN0X21pc3Npbmdfa2V5IDogaW50O1xuICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleSA6IGludDtcbiAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IDogaW50O1xuICAgIH1cbiAgfCBQYXJ0aWFsX2ZldGNoIG9mIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA6IGludDsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgOiBpbnQgfVxuXG50eXBlIHByb2dyZXNzID0geyB0b3RhbCA6IGludDsgcmVtYWluaW5nIDogaW50IH1cbnR5cGUgcmVwb3J0ID0geyBzdGF0dXMgOiBzdGF0dXM7IHN5bmNfcHJvZ3Jlc3MgOiBwcm9ncmVzcyBvcHRpb24gfVxuXG5sZXQgaW5pdGlhbF9yZXBvcnQgPSB7IHN0YXR1cyA9IFVua25vd247IHN5bmNfcHJvZ3Jlc3MgPSBOb25lIH1cblxubGV0IGxvZ19zdGF0dXMgPSBmdW5jdGlvblxuICB8IFVua25vd24gLT4gQ29uc29sZS5pbmZvIFsgXCJEYXRhYmFzZSBzdGF0dXMgaXMgdW5rbm93blwiIF1cbiAgfCBJbl9zeW5jIC0+IENvbnNvbGUuaW5mbyBbIFwiRGF0YWJhc2UgaXMgc3luY2hyb25pemVkXCIgXVxuICB8IEluY29uc2lzdGVudCAtPiBDb25zb2xlLndhcm4gWyBcIkRhdGFiYXNlIGlzIG91dC1vZi1zeW5jXCIgXVxuICB8IE5ld19pdGVtcyB7IGZpcnN0X21pc3Npbmdfa2V5OyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgLT5cbiAgICAgIENvbnNvbGUuaW5mb1xuICAgICAgICBbXG4gICAgICAgICAgXCJOZXcgaXRlbXMgd2VyZSBhZGRlZCB0byB0aGUgc291cmNlLlwiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfbWlzc2luZ19rZXkgKyAxO1xuICAgICAgICAgIFwibmV3IGl0ZW1zXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF91bmZldGNoZWRfa2V5ICsgMTtcbiAgICAgICAgICBcInVuZmV0Y2hlZCBpdGVtc1wiO1xuICAgICAgICBdXG4gIHwgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0gLT5cbiAgICAgIENvbnNvbGUuaW5mb1xuICAgICAgICBbXG4gICAgICAgICAgXCJTb21lIGl0ZW1zIGhhdmUgbm90IGJlZW4gZmV0Y2hlZCB5ZXQuXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF91bmZldGNoZWRfa2V5ICsgMTtcbiAgICAgICAgICBcInVuZmV0Y2hlZCBpdGVtc1wiO1xuICAgICAgICBdXG5cbmxldCBjaGVja19zdGF0dXMgfnNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gIGxldCogZGJfaW5mb3MgPSBnZXRfZGJfaW5mb3MgaWRiIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgdG90YWxfaXRlbV9jb3VudCA9IGZldGNoX3RvdGFsX2l0ZW1fY291bnQgc291cmNlIGluXG4gICgqIEtleXMgc3RhcnQgYXQgMCwgaXQncyBuYXR1cmFsIHRvIGNvdW50IGl0ZW0gYnkgc3RhcnRpbmcgd2l0aCAwICopXG4gIGxldCBsYXN0X3NvdXJjZV9pdGVtX2tleSA9IHRvdGFsX2l0ZW1fY291bnQgLSAxIGluXG4gIGlmIG5vdCAoaXNfZGJfY29uc2lzdGVudCB+c291cmNlIH5sYXN0X3NvdXJjZV9pdGVtX2tleSBkYl9pbmZvcykgdGhlblxuICAgIEluY29uc2lzdGVudFxuICBlbHNlXG4gICAgbWF0Y2ggZGJfaW5mb3Mgd2l0aFxuICAgIHwgeyBsYXN0X2tleSA9IE5vbmU7IGxhc3RfdmFsdWUgPSBOb25lIH0gLT5cbiAgICAgICAgKCogVGhlIGRiIGhhcyBub3QgeWV0IGJlZW4gcG9wdWxhdGVkIHdpdGggcGxhY2Vob2xkZXJzICopXG4gICAgICAgIE5ld19pdGVtc1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpcnN0X21pc3Npbmdfa2V5ID0gMDtcbiAgICAgICAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSAwO1xuICAgICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICAgICAgfVxuICAgIHwgeyBsYXN0X2tleSA9IFNvbWUga2V5OyBsYXN0X3ZhbHVlID0gaXRlbSB9IHdoZW4ga2V5IDwgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgICAgIC0+XG4gICAgICAgICgqIE5ldyBpdGVtcyB3ZXJlIGFkZGVkIHRvIHRoZSBzb3VyY2Ugc2luY2UgdGhlIGxhc3Qgc3luYyAqKVxuICAgICAgICBsZXQgZmlyc3RfdW5mZXRjaGVkX2tleSA9XG4gICAgICAgICAgbWF0Y2ggaXRlbSB3aXRoIE5vbmUgLT4gMCB8IFNvbWUgeyBpZDsgXyB9IC0+IGlkICsgMVxuICAgICAgICBpblxuICAgICAgICBOZXdfaXRlbXNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaXJzdF9taXNzaW5nX2tleSA9IGtleSArIDE7XG4gICAgICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5O1xuICAgICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICAgICAgfVxuICAgIHwgeyBsYXN0X2tleSA9IFNvbWUga2V5OyBsYXN0X3ZhbHVlID0gaXRlbSB9IHdoZW4ga2V5ID0gbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgICAgIC0+IChcbiAgICAgICAgbWF0Y2ggaXRlbSB3aXRoXG4gICAgICAgIHwgU29tZSB7IGlkOyBfIH0gd2hlbiBpZCA9IGtleSAtPiBJbl9zeW5jXG4gICAgICAgIHwgU29tZSB7IGlkOyBfIH0gLT5cbiAgICAgICAgICAgIFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5ID0gaWQgKyAxOyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSAwOyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9KVxuICAgIHwgXyAtPiBJbmNvbnNpc3RlbnRcblxubGV0IHVwZGF0ZV92aWV3cyBzb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyB2aWV3cyA9XG4gICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLlZpZXdzKVxuICAgICAgeyBpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQgPSBmYWxzZSB9XG4gICAgICB7IHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkIH1cbiAgaW5cbiAgTGlzdC5pdGVyIHZpZXdzLml0ZW1zIH5mOihmdW4gKGl0ZW0gOiBJdGVtLnQpIC0+XG4gICAgICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICAgICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKTsgKG1vZHVsZSBJKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICAgIGluXG4gICAgICBsZXQgc19pdGVtcyA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIEkpIHRyYW5zYWN0aW9uIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gT3B0aW9uLnZhbHVlIGl0ZW0uc29ydF9uYW1lIH5kZWZhdWx0Oml0ZW0ubmFtZSBpblxuICAgICAgSS5wdXQgeyBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA9IC0xOyB2aWV3cyA9IFtdOyBzb3J0X25hbWUgfTsgaXRlbSB9IHNfaXRlbXNcbiAgICAgIHw+IGlnbm9yZSk7XG4gIHZpZXdzXG5cbmxldCBkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmlld3Mgc291cmNlICh2aWV3cyA6IFZpZXdzLnJlc3BvbnNlKSA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCBwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4geyBJdGVtLmlkOyBfIH0gPVxuICAgIGxldCsgcmVzID1cbiAgICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgICAgcGFyZW50X2lkID0gU29tZSBpZDtcbiAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgZmllbGRzID0gWyBQYXJlbnRJZCBdO1xuICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzID0gW107XG4gICAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgICBsaW1pdCA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X29yZGVyID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfYnkgPSBbXTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKClcbiAgICBpblxuICAgIExpc3QuZm9sZF9sZWZ0IH5pbml0OlN0cmluZy5TZXQuZW1wdHkgcmVzLml0ZW1zXG4gICAgICB+ZjooZnVuIHNldCB7IEl0ZW0ucGFyZW50X2lkOyBfIH0gLT5cbiAgICAgICAgbWF0Y2ggcGFyZW50X2lkIHdpdGhcbiAgICAgICAgfCBOb25lIHwgU29tZSBOb25lIC0+IHNldFxuICAgICAgICB8IFNvbWUgKFNvbWUgcGlkKSAtPiBTdHJpbmcuU2V0LmFkZCBwaWQgc2V0KVxuICBpblxuICBsZXQgcGF0aHNfb2ZfcGFyZW50cyBwYXJlbnRzID1cbiAgICBsZXQrIHJlcyA9XG4gICAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZHMgPSBTdHJpbmcuU2V0LnRvX2xpc3QgcGFyZW50cztcbiAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgIGZpZWxkcyA9IFsgUGF0aCBdO1xuICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzID0gW107XG4gICAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgICBsaW1pdCA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X29yZGVyID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfYnkgPSBbXTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKClcbiAgICBpblxuICAgIExpc3QuZmlsdGVyX21hcCByZXMuaXRlbXMgfmY6KGZ1biB7IEl0ZW0uaWQ7IHBhdGg7IF8gfSAtPlxuICAgICAgICBPcHRpb24ubWFwIChmdW4gcGF0aCAtPiAoaWQsIHBhdGgpKSBwYXRoKVxuICBpblxuICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gIGxldCsgcmVzdWx0ID1cbiAgICBMaXN0Lm1hcCB2aWV3cy5pdGVtcyB+ZjooZnVuICh7IEl0ZW0uaWQ7IF8gfSBhcyB2aWV3KSAtPlxuICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICBsZXQqIHBhcmVudHMgPSBwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4gdmlldyBpblxuICAgICAgICBsZXQrIHBhdGhzID0gcGF0aHNfb2ZfcGFyZW50cyBwYXJlbnRzIGluXG4gICAgICAgIChpZCwgcGF0aHMpKVxuICAgIHw+IEZ1dC5vZl9saXN0XG4gIGluXG4gIFJlc3VsdC5mbGF0dGVuX2wgcmVzdWx0XG5cbmxldCB2aWV3c19vZl9wYXRoICh2Zm9sZGVycyA6IChzdHJpbmcgKiAoc3RyaW5nICogc3RyaW5nKSBsaXN0KSBsaXN0KSBwYXRoID1cbiAgKCogV2UgbG9vayBhdCB0aGUgcHJlZml4IG9mIGEgcGF0aCB0byBkZXRlcm1pbmUgd2hpY2ggdmlydHVhbF9mb2xkZXIgKGFuZCB0aHVzXG4gICAgIHZpZXcpIGl0J3MgYSBwYXJ0IG9mLiAqKVxuICBMaXN0LmZpbHRlcl9tYXAgdmZvbGRlcnMgfmY6KGZ1biAodmlld19pZCwgbG9jYXRpb25zKSAtPlxuICAgICAgaWYgTGlzdC5leGlzdHMgbG9jYXRpb25zIH5mOihmdW4gKF8sIHByZSkgLT4gU3RyaW5nLnByZWZpeCB+cHJlIHBhdGgpIHRoZW5cbiAgICAgICAgU29tZSB2aWV3X2lkXG4gICAgICBlbHNlIE5vbmUpXG5cbmxldCBzeW5jID8ocmVwb3J0ID0gZnVuIF8gLT4gKCkpIH4oc291cmNlIDogU291cmNlLmNvbm5leGlvbikgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IG1ha2VfcGxhY2Vob2xkZXJzIGZpcnN0IGxhc3QgPVxuICAgICgqIHRvZG86IGVycm9yIGhhbmRsaW5nICopXG4gICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgaW5cbiAgICBsZXQgc3RvcmUgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgICBmb3IgaSA9IGZpcnN0IHRvIGxhc3QgZG9cbiAgICAgIGlnbm9yZSBAQCBPSS5wdXQgeyBpZCA9IGk7IGl0ZW0gPSBOb25lIH0gc3RvcmVcbiAgICBkb25lXG4gIGluXG4gIGxldCBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0IGxhc3QgPVxuICAgIGxldCBvcGVuIFNvdXJjZSBpblxuICAgIGxldCogdmlld3MgPSB1cGRhdGVfdmlld3Mgc291cmNlIGlkYiBpblxuICAgIGxldCogdmZvbGRlcnMgPSBkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmlld3Mgc291cmNlIHZpZXdzIGluXG4gICAgbGV0ICgpID0gQ29uc29sZS5pbmZvIFsgXCJGZXRjaGluZyBpdGVtc1wiOyBmaXJzdDsgXCJ0b1wiOyBsYXN0OyBcIjpcIiBdIGluXG4gICAgbGV0IGZldGNoX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgbGV0IHRvdGFsID0gbGFzdCAtIGZpcnN0ICsgMSBpblxuICAgIGxldCByZWMgZW5xdWV1ZSB+c3RhcnRfaW5kZXggdG9kbyA9XG4gICAgICBpZiB0b2RvID4gMCB0aGVuIChcbiAgICAgICAgbGV0IGxpbWl0ID0gbWluIHRvZG8gY2h1bmtfc2l6ZSBpblxuICAgICAgICBsZXQgcmVxID1cbiAgICAgICAgICBBcGkuSXRlbXMuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICgqIHRvZG8gbWFrZSBzb3J0IGV4cGxpY2l0IChieSBkYXRlIGFkZGVkIGRhdGUpICopXG4gICAgICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgICAgZmllbGRzID0gWyBQYXJlbnRJZDsgUGF0aCBdO1xuICAgICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXM7XG4gICAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gU29tZSBzdGFydF9pbmRleDtcbiAgICAgICAgICAgICAgbGltaXQgPSBTb21lIGxpbWl0O1xuICAgICAgICAgICAgICBzb3J0X29yZGVyID0gU29tZSBBc2NlbmRpbmc7XG4gICAgICAgICAgICAgIHNvcnRfYnkgPSBbIERhdGVDcmVhdGVkIF07XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIGluXG4gICAgICAgIFF1ZXVlLmFkZCByZXEgZmV0Y2hfcXVldWU7XG4gICAgICAgIGVucXVldWUgfnN0YXJ0X2luZGV4OihzdGFydF9pbmRleCArIGxpbWl0KSAodG9kbyAtIGxpbWl0KSlcbiAgICBpblxuICAgIGVucXVldWUgfnN0YXJ0X2luZGV4OmZpcnN0IHRvdGFsO1xuICAgIGxldCB0b3RhbF9xdWVyaWVzID0gUXVldWUubGVuZ3RoIGZldGNoX3F1ZXVlIGluXG4gICAgbGV0IHJlYyBydW5fcXVldWUgPyh0aHJlYWRzID0gMSkgcSA9XG4gICAgICBhc3NlcnQgKHRocmVhZHMgPiAwKTtcbiAgICAgIGxldCByZWMgdGFrZV9uIGFjYyBuID1cbiAgICAgICAgaWYgbiA9IDAgdGhlbiBMaXN0LnJldiBhY2NcbiAgICAgICAgZWxzZVxuICAgICAgICAgIG1hdGNoIFF1ZXVlLnRha2Vfb3B0IHEgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICAgICAgICB8IFNvbWUgZWx0IC0+IHRha2VfbiAoZWx0IDo6IGFjYykgKG4gLSAxKVxuICAgICAgaW5cbiAgICAgIGxldCBmIHJlcSA9XG4gICAgICAgIGxldCsgeyBBcGkuSXRlbXMuc3RhcnRfaW5kZXg7IGl0ZW1zOyBfIH0gPVxuICAgICAgICAgIHF1ZXJ5IHNvdXJjZSAobW9kdWxlIEFwaS5JdGVtcykgcmVxICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCAoKSA9XG4gICAgICAgICAgcmVwb3J0XG4gICAgICAgICAgQEAgU29tZVxuICAgICAgICAgICAgICAgeyB0b3RhbCA9IHRvdGFsX3F1ZXJpZXM7IHJlbWFpbmluZyA9IFF1ZXVlLmxlbmd0aCBmZXRjaF9xdWV1ZSB9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBpZGJfcHV0IH5zdGFydF9pbmRleCBpdGVtcyA9XG4gICAgICAgICAgbGV0IG9wZW4gQnJyX2lvLkluZGV4ZWRfZGIgaW5cbiAgICAgICAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKTsgKG1vZHVsZSBJKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBzX2xpc3QgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgICAgICBsZXQgc19pdGVtcyA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIEkpIHRyYW5zYWN0aW9uIGluXG4gICAgICAgICAgTGlzdC5pdGVyaSBpdGVtcyB+ZjooZnVuIGluZGV4ICh7IEFwaS5JdGVtLmlkOyBwYXRoOyBfIH0gYXMgaXRlbSkgLT5cbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gc3RhcnRfaW5kZXggKyBpbmRleCBpblxuICAgICAgICAgICAgICBsZXQgcGF0aCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpcIlwiIHBhdGggaW5cbiAgICAgICAgICAgICAgbGV0IHZpZXdzID0gdmlld3Nfb2ZfcGF0aCB2Zm9sZGVycyBwYXRoIGluXG4gICAgICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBPcHRpb24udmFsdWUgaXRlbS5zb3J0X25hbWUgfmRlZmF1bHQ6aXRlbS5uYW1lIGluXG4gICAgICAgICAgICAgIGlnbm9yZSAoT0kucHV0IHsgaWQgPSBpbmRleDsgaXRlbSA9IFNvbWUgaWQgfSBzX2xpc3QpO1xuICAgICAgICAgICAgICBpZ25vcmVcbiAgICAgICAgICAgICAgICAoSS5wdXRcbiAgICAgICAgICAgICAgICAgICB7IHNvcnRzID0geyBkYXRlX2FkZGVkID0gaW5kZXg7IHZpZXdzOyBzb3J0X25hbWUgfTsgaXRlbSB9XG4gICAgICAgICAgICAgICAgICAgc19pdGVtcykpXG4gICAgICAgIGluXG4gICAgICAgIGlkYl9wdXQgfnN0YXJ0X2luZGV4IGl0ZW1zXG4gICAgICBpblxuICAgICAgbGV0IHJlcXMgPSB0YWtlX24gW10gdGhyZWFkcyBpblxuICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgbGV0KiByZXFzID0gRnV0Lm9mX2xpc3QgKExpc3QubWFwIH5mIHJlcXMpIGluXG4gICAgICBpZiBMaXN0LmlzX2VtcHR5IHJlcXMgdGhlbiBGdXQub2sgKCkgZWxzZSBydW5fcXVldWUgcVxuICAgIGluXG4gICAgcnVuX3F1ZXVlIGZldGNoX3F1ZXVlXG4gIGluXG4gIGZ1bmN0aW9uXG4gIHwgTmV3X2l0ZW1zIHsgZmlyc3RfbWlzc2luZ19rZXk7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAtPlxuICAgICAgbWFrZV9wbGFjZWhvbGRlcnMgZmlyc3RfbWlzc2luZ19rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0X3VuZmV0Y2hlZF9rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdF91bmZldGNoZWRfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gIHwgSW5jb25zaXN0ZW50IC0+IEZ1dC5vayAoKVxuICB8IF8gLT4gRnV0Lm9rICgpXG5cbmxldCBjaGVja19hbmRfc3luYyA/cmVwb3J0IH5zb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KiBzdGF0dXMgPSBjaGVja19zdGF0dXMgfnNvdXJjZSBpZGIgaW5cbiAgbGV0IGluaXRpYWwgPSB7IGluaXRpYWxfcmVwb3J0IHdpdGggc3RhdHVzIH0gaW5cbiAgbGV0IHJlcG9ydCcgPVxuICAgIE9wdGlvbi5tYXBcbiAgICAgIChmdW4gcmVwb3J0IC0+XG4gICAgICAgIGxldCAoKSA9ICgqIFNlbmQgYSBmaXJzdCByZXBvcnQgKikgcmVwb3J0IGluaXRpYWwgaW5cbiAgICAgICAgZnVuIHN5bmNfcHJvZ3Jlc3MgLT4gcmVwb3J0IHsgaW5pdGlhbCB3aXRoIHN5bmNfcHJvZ3Jlc3MgfSlcbiAgICAgIHJlcG9ydFxuICBpblxuICBsZXQrICgpID0gc3luYyA/cmVwb3J0OnJlcG9ydCcgfnNvdXJjZSBpZGIgc3RhdHVzIGluXG4gIE9wdGlvbi5pdGVyXG4gICAgKGZ1biByZXBvcnQgLT4gcmVwb3J0IHsgc3RhdHVzID0gSW5fc3luYzsgc3luY19wcm9ncmVzcyA9IE5vbmUgfSlcbiAgICByZXBvcnRcbiIsInR5cGUgbGFuZycgPSBGciB8IEVuXG5cbm1vZHVsZSBDb25maWcgOiBCcnJfbHdkX3VpLlRyYW5zbGF0ZWQuQ29uZmlnIHdpdGggdHlwZSBsYW5nID0gbGFuZycgPSBzdHJ1Y3RcbiAgdHlwZSBsYW5nID0gbGFuZydcblxuICBsZXQgc3RyaW5ncyA9XG4gICAgW1xuICAgICAgKChGciwgXCJjbGlja1wiKSwgXCJDbGlxdWV6IHN1ciBsZSBib3V0b24gIVwiKTtcbiAgICAgICgoRW4sIFwiY2xpY2tcIiksIFwiQ2xpY2sgb24gdGhlIEJ1dHRvbiAhXCIpO1xuICAgIF1cblxuICBsZXQgYWN0aXZlID0gTHdkLnZhciBGclxuXG4gIGxldCBnZXQgbGFuZyBzdHJpbmcgPVxuICAgIExpc3QuYXNzb2Nfb3B0IChsYW5nLCBzdHJpbmcpIHN0cmluZ3MgfD4gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OnN0cmluZ1xuZW5kXG5cbmxldCBzZXQsIF9zID0gQnJyX2x3ZF91aS5UcmFuc2xhdGVkLm1ha2UgKG1vZHVsZSBDb25maWcpXG5sZXQgX3MgcyBmID0gTHdkLm1hcCAoX3MgcykgfmZcbiIsImluY2x1ZGUgRGIuV29ya2VyX2FwaS5TdGFydF9jbGllbnQgKHN0cnVjdFxuICBsZXQgdXJsID0gXCIuL2RiX3dvcmtlci5iYy5qc1wiXG5lbmQpXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcblxudHlwZSBzZXJ2ZXIgPSB7XG4gIGNvbm5leGlvbiA6IERTLmNvbm5leGlvbjtcbiAgc3RhdHVzIDogRGIuU3luYy5yZXBvcnQgTHdkLnZhcjtcbiAgcmVmcmVzaCA6IHVuaXQgTHdkLnZhcjtcbn1cblxubGV0IGNvbm5leGlvbnMgOiAoc3RyaW5nICogRFMuY29ubmV4aW9uKSBMd2Rfc2VxLnQgTHdkLnZhciA9XG4gIEJycl9sd2RfdWkuUGVyc2lzdGVudC52YXIgfmtleTpcInVpX3NlcnZlcnNcIiBMd2Rfc2VxLmVtcHR5XG5cbmxldCBjb25uZWN0IChzZXJ2ZXJfaWQsIHsgY29ubmV4aW9uOyBzdGF0dXM7IHJlZnJlc2ggfSkgPVxuICBsZXQgXyA9XG4gICAgV29ya2VyX2NsaWVudC5saXN0ZW4gU2VydmVyc19zdGF0dXNfdXBkYXRlIH5mOihmdW4gKGlkLCByZXBvcnQpIC0+XG4gICAgICAgICgqIFRPRE86IHN1YnNjcmliZSB0byBhIHNwZWNpZmljIHNlcnZlcidzIHVwZGF0ZXMgKilcbiAgICAgICAgbGV0IHByZXZpb3VzX3N0YXR1cyA9IEx3ZC5wZWVrIHN0YXR1cyBpblxuICAgICAgICBpZiBTdHJpbmcuZXF1YWwgc2VydmVyX2lkIGlkIHRoZW4gKFxuICAgICAgICAgIEx3ZC5zZXQgc3RhdHVzIHJlcG9ydDtcbiAgICAgICAgICBtYXRjaCAocHJldmlvdXNfc3RhdHVzLnN5bmNfcHJvZ3Jlc3MsIHJlcG9ydC5zeW5jX3Byb2dyZXNzKSB3aXRoXG4gICAgICAgICAgfCBTb21lIHsgcmVtYWluaW5nOyBfIH0sIFNvbWUgeyByZW1haW5pbmcgPSByZW1haW5pbmcnOyBfIH1cbiAgICAgICAgICAgIHdoZW4gcmVtYWluaW5nIDw+IHJlbWFpbmluZycgLT5cbiAgICAgICAgICAgICAgTHdkLnNldCByZWZyZXNoICgpXG4gICAgICAgICAgfCBTb21lIHsgcmVtYWluaW5nOyBfIH0sIE5vbmUgLT4gTHdkLnNldCByZWZyZXNoICgpXG4gICAgICAgICAgfCBfIC0+ICgpKSlcbiAgaW5cbiAgaWdub3JlIChXb3JrZXJfY2xpZW50LnF1ZXJ5IEBAIEFkZF9zZXJ2ZXJzIFsgKHNlcnZlcl9pZCwgY29ubmV4aW9uKSBdKVxuXG5sZXQgc2VydmVyc193aXRoX3N0YXR1cyA9XG4gIEx3ZF9zZXEubWFwXG4gICAgKGZ1biAoaWQsIGNvbm5leGlvbikgLT5cbiAgICAgIGxldCBzdGF0dXMgPSBMd2QudmFyIERiLlN5bmMuaW5pdGlhbF9yZXBvcnQgaW5cbiAgICAgIGxldCByZWZyZXNoID0gTHdkLnZhciAoKSBpblxuICAgICAgbGV0IHNlcnZlciA9IChpZCwgeyBjb25uZXhpb247IHN0YXR1czsgcmVmcmVzaCB9KSBpblxuICAgICAgY29ubmVjdCBzZXJ2ZXI7XG4gICAgICBzZXJ2ZXIpXG4gICAgKEx3ZC5nZXQgY29ubmV4aW9ucylcblxubGV0IG5ld19jb25uZXhpb24gfmJhc2VfdXJsIH51c2VybmFtZSB+cGFzc3dvcmQgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIGNvbm5leGlvbiA9IERTLmNvbm5lY3QgeyBiYXNlX3VybDsgdXNlcm5hbWU7IHBhc3N3b3JkIH0gaW5cbiAgbGV0IHNlcnZlcl9pZCA9IGNvbm5leGlvbi5hdXRoX3Jlc3BvbnNlLnNlcnZlcl9pZCBpblxuICAoKiBUT0RPIENIRUNLIFNFUlZFUiBJRCAqKVxuICBMd2QudXBkYXRlXG4gICAgKGZ1biBzZXJ2ZXJzIC0+IEx3ZF9zZXEuKGNvbmNhdCBzZXJ2ZXJzIChlbGVtZW50IChzZXJ2ZXJfaWQsIGNvbm5leGlvbikpKSlcbiAgICBjb25uZXhpb25zXG5cbm1vZHVsZSBDb25uZWN0X2Zvcm0gPSBzdHJ1Y3RcbiAgb3BlbiBCcnJfbHdkX3VpLkZvcm1cblxuICB0eXBlIHQgPSB7XG4gICAgdXJsIDogc3RyaW5nIEZpZWxkLnZhbGlkYXRpb247XG4gICAgdXNlcm5hbWUgOiBzdHJpbmcgRmllbGQudmFsaWRhdGlvbjtcbiAgICBwYXNzd29yZCA6IHN0cmluZyBGaWVsZC52YWxpZGF0aW9uO1xuICB9XG5cbiAgbGV0IGRlZmF1bHQgPSB7IHVybCA9IEVtcHR5OyB1c2VybmFtZSA9IEVtcHR5OyBwYXNzd29yZCA9IEVtcHR5IH1cblxuICBsZXQgZmllbGRzID1cbiAgICBsZXQgdXJsX2ZpZWxkID1cbiAgICAgIGZpZWxkXG4gICAgICAgIChMd2QucHVyZVxuICAgICAgICBAQCBGaWVsZC50ZXh0X2lucHV0IH5yZXF1aXJlZDp0cnVlIChTb21lIFwiaHR0cDovL2xvY2FsaG9zdDo4MDk2XCIpKVxuICAgICAgICAoZnVuIHQgdiAtPiB7IHQgd2l0aCB1cmwgPSB2IH0pXG4gICAgaW5cbiAgICBsZXQgdXNlcm5hbWVfZmllbGQgPVxuICAgICAgZmllbGRcbiAgICAgICAgKEx3ZC5wdXJlIEBAIEZpZWxkLnRleHRfaW5wdXQgfnJlcXVpcmVkOnRydWUgTm9uZSlcbiAgICAgICAgKGZ1biB0IHYgLT4geyB0IHdpdGggdXNlcm5hbWUgPSB2IH0pXG4gICAgaW5cbiAgICBsZXQgcGFzc3dvcmRfZmllbGQgPVxuICAgICAgZmllbGRcbiAgICAgICAgKEx3ZC5wdXJlIEBAIEZpZWxkLnBhc3N3b3JkX2lucHV0IH5yZXF1aXJlZDp0cnVlIE5vbmUpXG4gICAgICAgIChmdW4gdCB2IC0+IHsgdCB3aXRoIHBhc3N3b3JkID0gdiB9KVxuICAgIGluXG4gICAgbGV0IHN1Ym1pdCA9XG4gICAgICBmaWVsZCAoTHdkLnB1cmUgQEAgRmllbGQuc3VibWl0IChgUCBcIkNvbm5lY3RcIikpIChmdW4gdCBfdiAtPiB0KVxuICAgIGluXG4gICAgTHdkLnJldHVyblxuICAgICAgKEx3ZF9zZXEub2ZfbGlzdCBbIHVybF9maWVsZDsgdXNlcm5hbWVfZmllbGQ7IHBhc3N3b3JkX2ZpZWxkOyBzdWJtaXQgXSlcbmVuZFxuXG5sZXQgdWlfZm9ybSAoKSA9XG4gIGxldCBvcGVuIEJycl9sd2RfdWkuRm9ybSBpblxuICBjcmVhdGVcbiAgICAobW9kdWxlIENvbm5lY3RfZm9ybSlcbiAgICAoZnVuIHQgLT5cbiAgICAgIENvbnNvbGUubG9nIFsgXCJGb3JtIHN1Ym1pdHRlZDpcIjsgdCBdO1xuICAgICAgbWF0Y2ggdCB3aXRoXG4gICAgICAoKiBGSVhNRTogdmFsaWRhdGlvbiBhbHJlYWR5IGhhcHBlbmVkLCBpdCdzIHJlZHVuZGFudCB0byBoYXZlIHRvIG1hdGNoICopXG4gICAgICB8IHsgdXJsID0gT2sgdXJsOyB1c2VybmFtZSA9IE9rIHVzZXJuYW1lOyBwYXNzd29yZCA9IE9rIHBhc3N3b3JkIH0gLT5cbiAgICAgICAgICBDb25zb2xlLmxvZyBbIFwiRm9ybSBzdWJtaXR0ZWQ6XCI7IHVybDsgdXNlcm5hbWUgXTtcbiAgICAgICAgICBpZ25vcmUgQEAgbmV3X2Nvbm5leGlvbiB+YmFzZV91cmw6dXJsIH51c2VybmFtZSB+cGFzc3dvcmRcbiAgICAgIHwgXyAtPiAoKSlcblxubGV0IHVpX3N0YXR1cyBzZXJ2ZXIgPVxuICBsZXQgc3RhdHVzID1cbiAgICBMd2QubWFwIChMd2QuZ2V0IHNlcnZlci5zdGF0dXMpIH5mOihmdW4geyBzdGF0dXM7IHN5bmNfcHJvZ3Jlc3MgfSAtPlxuICAgICAgICBtYXRjaCAoc3RhdHVzLCBzeW5jX3Byb2dyZXNzKSB3aXRoXG4gICAgICAgIHwgSW5fc3luYywgTm9uZSAtPiBFbC50eHQnIFwiU3luY2hyb25pemVkXCJcbiAgICAgICAgfCBfLCBTb21lIHsgRGIuU3luYy50b3RhbDsgcmVtYWluaW5nIH0gLT5cbiAgICAgICAgICAgIEVsLnR4dCdcbiAgICAgICAgICAgIEBAIFByaW50Zi5zcHJpbnRmIFwiU3luYyBpbiBwcm9ncmVzczogJWkvJWlcIiAodG90YWwgLSByZW1haW5pbmcpXG4gICAgICAgICAgICAgICAgIHRvdGFsXG4gICAgICAgIHwgXyAtPiBFbC50eHQnIFwiRGVzeW5jaHJvbml6ZWRcIilcbiAgaW5cbiAgc3RhdHVzXG5cbmxldCBmdXRfdG9fbHdkIH5pbml0IGYgPVxuICBsZXQgdiA9IEx3ZC52YXIgaW5pdCBpblxuICBsZXQgKCkgPSBGdXQuYXdhaXQgZiAoTHdkLnNldCB2KSBpblxuICBMd2QuZ2V0IHZcblxubGV0IHNlcnZlcnNfbGlicmFyaWVzID1cbiAgTHdkX3NlcS5tYXBcbiAgICAoZnVuIChzZXJ2ZXJfaWQsIHsgcmVmcmVzaDsgXyB9KSAtPlxuICAgICAgbGV0IHZpZXdzID1cbiAgICAgICAgTHdkLmJpbmQgKEx3ZC5nZXQgcmVmcmVzaCkgfmY6KGZ1biAoKSAtPlxuICAgICAgICAgICAgV29ya2VyX2NsaWVudC5xdWVyeSAoR2V0X3NlcnZlcl9saWJyYXJpZXMgc2VydmVyX2lkKVxuICAgICAgICAgICAgfD4gRnV0Lm1hcCAoUmVzdWx0LmdldF9vciB+ZGVmYXVsdDpbXSlcbiAgICAgICAgICAgIHw+IGZ1dF90b19sd2QgfmluaXQ6W10pXG4gICAgICBpblxuICAgICAgKHNlcnZlcl9pZCwgdmlld3MpKVxuICAgIHNlcnZlcnNfd2l0aF9zdGF0dXNcblxubGV0IHVpICgpID1cbiAgbGV0IHN0YXR1c2VzID1cbiAgICBMd2Rfc2VxLm1hcCAoZnVuIChfLCBzZXJ2ZXIpIC0+IHVpX3N0YXR1cyBzZXJ2ZXIpIHNlcnZlcnNfd2l0aF9zdGF0dXNcbiAgaW5cbiAgbGV0IHVpX2Zvcm0gPVxuICAgIEx3ZC5tYXAgc2VydmVyc193aXRoX3N0YXR1cyB+ZjooZnVuIHMgLT5cbiAgICAgICAgbWF0Y2ggTHdkX3NlcS52aWV3IHMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IEx3ZF9zZXEuZWxlbWVudCBAQCBFbHdkLmRpdiBbIGBSICh1aV9mb3JtICgpKSBdXG4gICAgICAgIHwgXyAtPiBMd2Rfc2VxLmVtcHR5KVxuICBpblxuICBFbHdkLmRpdiBbIGBTIChMd2Rfc2VxLmxpZnQgdWlfZm9ybSk7IGBTIChMd2Rfc2VxLmxpZnQgc3RhdHVzZXMpIF1cbiIsIm9wZW4hIEltcG9ydFxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG50eXBlIHBsYXlzdGF0ZSA9IHtcbiAgcGxheWxpc3QgOiBEYi5WaWV3LnJhbmdlZCBvcHRpb24gTHdkLnZhcjtcbiAgY3VycmVudF9pbmRleCA6IGludCBMd2QudmFyO1xufVxuXG50eXBlIHQgPSBFbHdkLnQgTHdkLnRcblxubGV0IHBsYXlzdGF0ZSA9IHsgcGxheWxpc3QgPSBMd2QudmFyIE5vbmU7IGN1cnJlbnRfaW5kZXggPSBMd2QudmFyIDAgfVxuXG50eXBlIG5vd19wbGF5aW5nID0geyBpdGVtIDogRFMuQXBpLkl0ZW0udDsgdXJsIDogc3RyaW5nIH1cblxubGV0IG5vd19wbGF5aW5nID0gTHdkLnZhciBOb25lXG5cbigqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vamVsbHlmaW4vamVsbHlmaW4vYmxvYi80Nzg2OTAxYmI3OTZjM2U5MTJmMTNiNjg2NTcxZmRlOGQxNmY0OWM1L3Rlc3RzL0plbGx5ZmluLk1vZGVsLlRlc3RzL1Rlc3QlMjBEYXRhL0RldmljZVByb2ZpbGUtRmlyZWZveC5qc29uICopXG5cbigqKiBQbGF5YmFjayBpc3N1ZSB3aXRoIGFsYWMgZmlsZXMgKGFuZCBwcm9iYWJseSBhbGwgY29kZWNzIG5vbi1uYXRpdmVseVxuICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyKVxuICAgIC0gU29tZSBjbGllbnRzIChzb25peGQpIGdpdmUgdXAsIG1wdiBiYXNlZCBwbGF5ZXJzIHdvcmsuXG4gICAgLSBUaGUgb2ZmaWNpYWwgY2xpZW50IG1hbmFnZSB0byBwbGF5IHRoZSBmaWxlIGJ1dCBnaXZlcyBhIGJsb2IgdG8gdGhlIGF1ZGlvXG4gICAgICBwbGF5ZXIgaW5zdGVhZCBvZiBhIGhscyB1cmwgYXMgaXQgZG9lcyBmb3Igb3RoZXIgZmlsZXMuXG4gICAgLSBKZWxseWZpbiBzaG91bGQgdXNlIHRoZSBkZXZpY2UgaWQgYW5kIGFzc29jaWF0ZWQgY2FwYWJpbGl0aWVzIHRvXG4gICAgICBhdXRvbWF0aWNhbGx5IHRyYW5zY29kZSwgc2hvdWxkbid0IGl0ID9cblxuKilcbmxldCBhdWRpb191cmwgKHNlcnZlciA6IERTLmNvbm5leGlvbikgaXRlbV9pZCA9XG4gIFByaW50Zi5zcHJpbnRmXG4gICAgXCIlcy9BdWRpby8lcy91bml2ZXJzYWw/YXBpX2tleT0lcyZhdWRpb0NvZGVjPWFhYyZjb250YWluZXI9b3B1cyxtcDMsYWFjLG00YSxtNGIsZmxhYyx3YXYsb2dnJnRyYW5zY29kaW5nQ29udGFpbmVyPXRzJnRyYW5zY29kaW5nUHJvdG9jb2w9aGxzXCJcbiAgICBzZXJ2ZXIuYmFzZV91cmwgaXRlbV9pZCBzZXJ2ZXIuYXV0aF9yZXNwb25zZS5hY2Nlc3NfdG9rZW5cblxubW9kdWxlIFBsYXliYWNrX2NvbnRyb2xsZXIgKFAgOiBzaWdcbiAgdmFsIGZldGNoIDpcbiAgICBEYi5WaWV3LnJhbmdlZCAtPlxuICAgIGludCBhcnJheSAtPlxuICAgIChEYi5TdG9yZXMuSXRlbXMudCBvcHRpb24gYXJyYXksIERiLldvcmtlcl9hcGkuZXJyb3IpIEZ1dC5yZXN1bHRcbmVuZCkgPVxuc3RydWN0XG4gIGxldCBzZXRfcGxheV91cmwgcGxheWxpc3QgY3VycmVudF9pbmRleCA9XG4gICAgbWF0Y2ggcGxheWxpc3Qgd2l0aFxuICAgIHwgTm9uZSAtPiBGdXQub2sgKClcbiAgICB8IFNvbWUgcGxheWxpc3QgLT5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgbGV0KyBpdGVtID1cbiAgICAgICAgICBsZXQrIHJlc3VsdCA9IFAuZmV0Y2ggcGxheWxpc3QgW3wgY3VycmVudF9pbmRleCB8XSBpblxuICAgICAgICAgIG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgICAgICAgfCBbfCBTb21lIHsgRGIuU3RvcmVzLkl0ZW1zLml0ZW07IF8gfSB8XSAtPlxuICAgICAgICAgICAgICBsZXQgeyBEUy5BcGkuSXRlbS5zZXJ2ZXJfaWQ7IGlkOyBhbGJ1bV9pZDsgbmFtZTsgXyB9ID0gaXRlbSBpblxuICAgICAgICAgICAgICBsZXQgc2VydmVycyA9IEx3ZF9zZXEudG9fbGlzdCAoTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zKSBpblxuICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID0gTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzIGluXG4gICAgICAgICAgICAgIGxldCB1cmwgPSBhdWRpb191cmwgY29ubmV4aW9uIGlkIGluXG4gICAgICAgICAgICAgIGxldCAoKSA9IENvbnNvbGUubG9nIFsgXCJOb3cgcGxheWluZzpcIjsgbmFtZTsgSnYub2Zfc3RyaW5nIHVybCBdIGluXG4gICAgICAgICAgICAgIGxldCAoKSA9XG4gICAgICAgICAgICAgICAgbGV0IG9wZW4gQnJyX2lvLk1lZGlhLlNlc3Npb24gaW5cbiAgICAgICAgICAgICAgICBsZXQgc2Vzc2lvbiA9IG9mX25hdmlnYXRvciBHLm5hdmlnYXRvciBpblxuICAgICAgICAgICAgICAgIGxldCBpbWFnZV9pZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDppZCBhbGJ1bV9pZCBpblxuICAgICAgICAgICAgICAgIGxldCBpbWdfc3JjID1cbiAgICAgICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICAgICAgICAgIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9NTAwJmZvcm1hdD1KcGdcIlxuICAgICAgICAgICAgICAgICAgICBjb25uZXhpb24uYmFzZV91cmwgaW1hZ2VfaWRcbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IG5hbWUgaW5cbiAgICAgICAgICAgICAgICBsZXQgYWxidW0gPSBcIlwiIGluXG4gICAgICAgICAgICAgICAgbGV0IGFydGlzdCA9IFwiXCIgaW5cbiAgICAgICAgICAgICAgICBsZXQgYXJ0d29yayA9XG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBNZWRpYV9tZXRhZGF0YS5zcmMgPSBpbWdfc3JjO1xuICAgICAgICAgICAgICAgICAgICAgIHNpemVzID0gXCI1MDB4NTAwXCI7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZScgPSBcImltYWdlL2pwZWdcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIENvbnNvbGUubG9nIFsgYXJ0d29yayBdO1xuICAgICAgICAgICAgICAgIHNldF9tZXRhZGF0YSBzZXNzaW9uIHsgdGl0bGU7IGFydGlzdDsgYWxidW07IGFydHdvcmsgfVxuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICB7IGl0ZW07IHVybCB9XG4gICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICBpblxuICAgICAgICBMd2Quc2V0IG5vd19wbGF5aW5nIChTb21lIGl0ZW0pXG5cbiAgbGV0IHJlc2V0X3BsYXlsaXN0IHBsYXlsaXN0ID1cbiAgICBpZ25vcmUgQEAgc2V0X3BsYXlfdXJsIChTb21lIHBsYXlsaXN0KSAwO1xuICAgIEx3ZC5zZXQgcGxheXN0YXRlLnBsYXlsaXN0IChTb21lIHBsYXlsaXN0KTtcbiAgICBMd2Quc2V0IHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IDBcblxuICBsZXQgbWFrZSAoKSA9XG4gICAgbGV0IGF1ZGlvX2VsdCA9XG4gICAgICBFbC5hdWRpb1xuICAgICAgICB+YXQ6XG4gICAgICAgICAgW1xuICAgICAgICAgICAgQXQudiAoSnN0ci52IFwiY29udHJvbHNcIikgKEpzdHIudiBcInRydWVcIik7XG4gICAgICAgICAgICBBdC52IChKc3RyLnYgXCJhdXRvcGxheVwiKSAoSnN0ci52IFwidHJ1ZVwiKTtcbiAgICAgICAgICAgIEF0LnYgKEpzdHIudiBcInByZWxvYWRcIikgKEpzdHIudiBcImF1dG9cIik7XG4gICAgICAgICAgXVxuICAgICAgICBbXVxuICAgIGluXG4gICAgbGV0IHNldF9zcmMgdXJsID0gRWwuc2V0X2F0IChKc3RyLnYgXCJzcmNcIikgKFNvbWUgKEpzdHIudiB1cmwpKSBhdWRpb19lbHQgaW5cbiAgICBsZXQgX2F1dG9fcGxheSA9XG4gICAgICAoKiBXZSBjYW5ub3QgcmVseSBvbiB0aGUgbWFpbiBbTHdkXSBvYnNlcnZlciBmb3IgcGxheWJhY2sgY29udHJvbCBiZWNhdXNlXG4gICAgICAgICBpdCBpcyB0aWVkIHRvIHRoZSBbcmVxdWVzdEFuaW1hdGlvbkZyYW1lc10gY2FsbGJhY2suIFRoaXMgcHJldmVudCB0aGVcbiAgICAgICAgIHBsYXllciB0byBzdGFydCBwbGF5aW5nIHRoZSBuZXh0IHNvbmcgaWYgdGhlIHRhYiBpcyBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICAgICopXG4gICAgICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIChMd2QuZ2V0IG5vd19wbGF5aW5nKSBpblxuICAgICAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+XG4gICAgICAgICAgbWF0Y2ggTHdkLnF1aWNrX3NhbXBsZSByb290IHdpdGhcbiAgICAgICAgICB8IFNvbWUgeyB1cmw7IF8gfSAtPiBzZXRfc3JjIHVybFxuICAgICAgICAgIHwgTm9uZSAtPiAoKSk7XG4gICAgICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG4gICAgaW5cbiAgICBsZXQgbmV4dCAoKSA9XG4gICAgICBsZXQgcGxheWxpc3QgPSBMd2QucGVlayBwbGF5c3RhdGUucGxheWxpc3QgaW5cbiAgICAgIGxldCBjdXJyZW50X2luZGV4ID0gTHdkLnBlZWsgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggaW5cbiAgICAgIGxldCBuZXh0X2luZGV4ID0gY3VycmVudF9pbmRleCArIDEgaW5cbiAgICAgIGlnbm9yZSBAQCBzZXRfcGxheV91cmwgcGxheWxpc3QgbmV4dF9pbmRleDtcbiAgICAgIEx3ZC5zZXQgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggbmV4dF9pbmRleFxuICAgIGluXG4gICAgbGV0IHByZXYgKCkgPVxuICAgICAgbGV0IHBsYXlsaXN0ID0gTHdkLnBlZWsgcGxheXN0YXRlLnBsYXlsaXN0IGluXG4gICAgICBsZXQgY3VycmVudF9pbmRleCA9IEx3ZC5wZWVrIHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IGluXG4gICAgICBsZXQgbmV4dF9pbmRleCA9IG1heCAwIChjdXJyZW50X2luZGV4IC0gMSkgaW5cbiAgICAgIGlnbm9yZSBAQCBzZXRfcGxheV91cmwgcGxheWxpc3QgbmV4dF9pbmRleDtcbiAgICAgIEx3ZC5zZXQgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggbmV4dF9pbmRleFxuICAgIGluXG4gICAgbGV0IHNldF9wb3NpdGlvbl9zdGF0ZSA9XG4gICAgICAoKiBFbmFibGUgY29udHJvbCBmcm9tIE9TICopXG4gICAgICBsZXQgb3BlbiBCcnJfaW8uTWVkaWEuU2Vzc2lvbiBpblxuICAgICAgbGV0IHNlc3Npb24gPSBvZl9uYXZpZ2F0b3IgRy5uYXZpZ2F0b3IgaW5cbiAgICAgIGxldCBzZXRfcG9zaXRpb25fc3RhdGUgKCkgPVxuICAgICAgICBsZXQgZHVyYXRpb24gPSBFbC5wcm9wIChFbC5Qcm9wLmZsb2F0IChKc3RyLnYgXCJkdXJhdGlvblwiKSkgYXVkaW9fZWx0IGluXG4gICAgICAgIGlmIG5vdCAoRmxvYXQuaXNfbmFuIGR1cmF0aW9uKSB0aGVuXG4gICAgICAgICAgbGV0IHBsYXliYWNrX3JhdGUgPVxuICAgICAgICAgICAgRWwucHJvcCAoRWwuUHJvcC5mbG9hdCAoSnN0ci52IFwicGxheWJhY2tSYXRlXCIpKSBhdWRpb19lbHRcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBwb3NpdGlvbiA9XG4gICAgICAgICAgICBFbC5wcm9wIChFbC5Qcm9wLmZsb2F0IChKc3RyLnYgXCJjdXJyZW50VGltZVwiKSkgYXVkaW9fZWx0XG4gICAgICAgICAgaW5cbiAgICAgICAgICBzZXRfcG9zaXRpb25fc3RhdGUgfmR1cmF0aW9uIH5wbGF5YmFja19yYXRlIH5wb3NpdGlvbiBzZXNzaW9uXG4gICAgICBpblxuICAgICAgc2V0X2FjdGlvbl9oYW5kbGVyIHNlc3Npb24gQWN0aW9uLm5leHRfdHJhY2sgbmV4dDtcbiAgICAgIHNldF9hY3Rpb25faGFuZGxlciBzZXNzaW9uIEFjdGlvbi5wcmV2aW91c190cmFjayBwcmV2O1xuICAgICAgc2V0X3Bvc2l0aW9uX3N0YXRlXG4gICAgaW5cbiAgICBsZXQgb25fZXJyb3IgZXYgPVxuICAgICAgRXYuc3RvcF9pbW1lZGlhdGVfcHJvcGFnYXRpb24gZXY7XG4gICAgICBFdi5wcmV2ZW50X2RlZmF1bHQgZXY7XG4gICAgICBDb25zb2xlLmxvZ1xuICAgICAgICBbXG4gICAgICAgICAgXCJBIHBsYXliYWNrIGVycm9yIGhhcHBlbmVkLiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGNvZGVjIFxcXG4gICAgICAgICAgIHVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLlwiO1xuICAgICAgICAgIGV2O1xuICAgICAgICBdO1xuICAgICAgbmV4dCAoKVxuICAgIGluXG4gICAgbGV0IG5leHQgXyA9IG5leHQgKCkgaW5cbiAgICBsZXQgKCkgPVxuICAgICAgbGV0IHRhcmdldCA9IEVsLmFzX3RhcmdldCBhdWRpb19lbHQgaW5cbiAgICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXYuZW5kZWQgbmV4dCB0YXJnZXQ7XG4gICAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2LmVycm9yIG9uX2Vycm9yIHRhcmdldDtcbiAgICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXYucGxheSAoZnVuIF8gLT4gc2V0X3Bvc2l0aW9uX3N0YXRlICgpKSB0YXJnZXRcbiAgICBpblxuICAgIGxldCBidG5fbmV4dCA9XG4gICAgICBCcnJfbHdkX3VpLkJ1dHRvbi52IH5ldjpbIGBQIChFbHdkLmhhbmRsZXIgRXYuY2xpY2sgbmV4dCkgXSAoYFAgXCJORVhUXCIpXG4gICAgaW5cbiAgICBsZXQgb3BlbiBCcnJfbHdkX3VpIGluXG4gICAgbGV0IG5vd19wbGF5aW5nID1cbiAgICAgIGxldCB0cmFja19jb3ZlciA9XG4gICAgICAgIGxldCBzdHlsZSA9XG4gICAgICAgICAgTHdkLm1hcCAoTHdkLmdldCBub3dfcGxheWluZykgfmY6KGZ1biBucCAtPlxuICAgICAgICAgICAgICBsZXQgc3JjID1cbiAgICAgICAgICAgICAgICBtYXRjaCBucCB3aXRoXG4gICAgICAgICAgICAgICAgfCBOb25lIC0+IFwidHJhY2sucG5nXCJcbiAgICAgICAgICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZDsgYWxidW1faWQ7IHNlcnZlcl9pZDsgXyB9OyBfIH0gLT5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlX2lkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmlkIGFsYnVtX2lkIGluXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXJ2ZXJzID1cbiAgICAgICAgICAgICAgICAgICAgICBMd2Rfc2VxLnRvX2xpc3QgKEx3ZC5wZWVrIFNlcnZlcnMuY29ubmV4aW9ucylcbiAgICAgICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5leGlvbiA6IERTLmNvbm5leGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzXG4gICAgICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgICAgICgqIHRvZG86IHRoaXMgaXMgZG9uZSBpbiBtdWx0aXBsZSBwbGFjZXMsIHdlIHNob3VsZCBmYWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdXQuICopXG4gICAgICAgICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICAgICAgICAgICAgXCIlcy9JdGVtcy8lcy9JbWFnZXMvUHJpbWFyeT93aWR0aD01MDAmZm9ybWF0PUpwZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uLmJhc2VfdXJsIGltYWdlX2lkXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCVTKVwiIHNyYylcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGF0ID1cbiAgICAgICAgICBBdHRycy4oXG4gICAgICAgICAgICBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwibm93LXBsYXlpbmctY292ZXJcIikgW11cbiAgICAgICAgICAgIHw+IGFkZCBBdC5OYW1lLnN0eWxlIChgUiBzdHlsZSkpXG4gICAgICAgIGluXG4gICAgICAgIEVsd2QuZGl2IH5hdCBbXVxuICAgICAgaW5cbiAgICAgIGxldCB0cmFja19kZXRhaWxzID1cbiAgICAgICAgbGV0IGF0ID0gQXR0cnMuYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcIm5vdy1wbGF5aW5nLWRldGFpbHNcIikgW10gaW5cbiAgICAgICAgbGV0IHRpdGxlID1cbiAgICAgICAgICBsZXQgdHh0ID1cbiAgICAgICAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgbm93X3BsYXlpbmcpIH5mOihmdW5jdGlvblxuICAgICAgICAgICAgICB8IE5vbmUgLT4gRWwudHh0JyBcIk5vdGhpbmcgcGxheWluZ1wiXG4gICAgICAgICAgICAgIHwgU29tZSB7IGl0ZW0gPSB7IG5hbWU7IF8gfTsgXyB9IC0+IEVsLnR4dCcgbmFtZSlcbiAgICAgICAgICBpblxuICAgICAgICAgIEVsd2Quc3BhbiBbIGBSIHR4dCBdXG4gICAgICAgIGluXG4gICAgICAgIEVsd2QuZGl2IH5hdCBbIGBSIHRpdGxlIF1cbiAgICAgIGluXG4gICAgICBsZXQgYXQgPVxuICAgICAgICBBdHRycy4oXG4gICAgICAgICAgYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcImJveFwiKSBbXVxuICAgICAgICAgIHw+IGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJub3ctcGxheWluZy1kaXNwbGF5XCIpKVxuICAgICAgaW5cbiAgICAgIEVsd2QuZGl2IH5hdCBbIGBSIHRyYWNrX2NvdmVyOyBgUiB0cmFja19kZXRhaWxzIF1cbiAgICBpblxuICAgIGxldCBhdCA9XG4gICAgICBBdHRycy4oXG4gICAgICAgIGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJwbGF5ZXItd3JhcHBlclwiKSBbXVxuICAgICAgICB8PiBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwiYm94XCIpKVxuICAgIGluXG4gICAgRWx3ZC5kaXYgfmF0IFsgYFIgbm93X3BsYXlpbmc7IGBQIGF1ZGlvX2VsdDsgYFIgYnRuX25leHQgXVxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBhZGRpbmcgcG9zaXRpb24uICopXG50eXBlIHBhZHR5ID1cbiAgfCBMZWZ0ICAgKCogVGV4dCBpcyBsZWZ0IGp1c3RpZmllZCAoJy0nIG9wdGlvbikuICAgICAgICAgICAgICAgKilcbiAgfCBSaWdodCAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgKG5vICctJyBvcHRpb24pLiAgICAgICAgICAgKilcbiAgfCBaZXJvcyAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgYnkgemVyb3MgKHNlZSAnMCcgb3B0aW9uKS4gKilcblxuKCoqKilcblxuKCogSW50ZWdlciBjb252ZXJzaW9uLiAqKVxudHlwZSBpbnRfY29udiA9XG4gIHwgSW50X2QgfCBJbnRfcGQgfCBJbnRfc2QgICAgICAgICgqICAlZCB8ICUrZCB8ICUgZCAgKilcbiAgfCBJbnRfaSB8IEludF9waSB8IEludF9zaSAgICAgICAgKCogICVpIHwgJStpIHwgJSBpICAqKVxuICB8IEludF94IHwgSW50X0N4ICAgICAgICAgICAgICAgICAoKiAgJXggfCAlI3ggICAgICAgICopXG4gIHwgSW50X1ggfCBJbnRfQ1ggICAgICAgICAgICAgICAgICgqICAlWCB8ICUjWCAgICAgICAgKilcbiAgfCBJbnRfbyB8IEludF9DbyAgICAgICAgICAgICAgICAgKCogICVvIHwgJSNvICAgICAgICAqKVxuICB8IEludF91ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJXUgICAgICAgICAgICAgICopXG4gIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1ICAgICAgICgqICAlI2QgfCAlI2kgfCAlI3UgKilcblxuKCogRmxvYXQgY29udmVyc2lvbi4gKilcbnR5cGUgZmxvYXRfZmxhZ19jb252ID1cbiAgfCBGbG9hdF9mbGFnXyAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3AgICAgICAgICAgICAgICAgICAgKCogJStbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19zICAgICAgICAgICAgICAgICAgICgqICUgW2ZlRWdHRmhIXSAqKVxudHlwZSBmbG9hdF9raW5kX2NvbnYgPVxuICB8IEZsb2F0X2YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWYgfCAlK2YgfCAlIGYgICopXG4gIHwgRmxvYXRfZSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZSB8ICUrZSB8ICUgZSAgKilcbiAgfCBGbG9hdF9FICAgICAgICAgICAgICAgICAgICAgICAgKCogICVFIHwgJStFIHwgJSBFICAqKVxuICB8IEZsb2F0X2cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWcgfCAlK2cgfCAlIGcgICopXG4gIHwgRmxvYXRfRyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRyB8ICUrRyB8ICUgRyAgKilcbiAgfCBGbG9hdF9GICAgICAgICAgICAgICAgICAgICAgICAgKCogICVGIHwgJStGIHwgJSBGICAqKVxuICB8IEZsb2F0X2ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWggfCAlK2ggfCAlIGggICopXG4gIHwgRmxvYXRfSCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlSCB8ICUrSCB8ICUgSCAgKilcbiAgfCBGbG9hdF9DRiAgICAgICAgICAgICAgICAgICAgICAgKCogICUjRnwgJSsjRnwgJSAjRiAqKVxudHlwZSBmbG9hdF9jb252ID0gZmxvYXRfZmxhZ19jb252ICogZmxvYXRfa2luZF9jb252XG5cbigqKiopXG5cbigqIENoYXIgc2V0cyAoc2VlICVbLi4uXSkgYXJlIGJpdG1hcHMgaW1wbGVtZW50ZWQgYXMgMzItY2hhciBzdHJpbmdzLiAqKVxudHlwZSBjaGFyX3NldCA9IHN0cmluZ1xuXG4oKioqKVxuXG4oKiBDb3VudGVyIHVzZWQgaW4gU2NhbmYuICopXG50eXBlIGNvdW50ZXIgPVxuICB8IExpbmVfY291bnRlciAgICAgKCogICVsICAgICAgKilcbiAgfCBDaGFyX2NvdW50ZXIgICAgICgqICAlbiAgICAgICopXG4gIHwgVG9rZW5fY291bnRlciAgICAoKiAgJU4sICVMICAqKVxuXG4oKioqKVxuXG4oKiBQYWRkaW5nIG9mIHN0cmluZ3MgYW5kIG51bWJlcnMuICopXG50eXBlICgnYSwgJ2IpIHBhZGRpbmcgPVxuICAoKiBObyBwYWRkaW5nIChleDogXCIlZFwiKSAqKVxuICB8IE5vX3BhZGRpbmcgIDogKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBMaXRlcmFsIHBhZGRpbmcgKGV4OiBcIiU4ZFwiKSAqKVxuICB8IExpdF9wYWRkaW5nIDogcGFkdHkgKiBpbnQgLT4gKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBQYWRkaW5nIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKmRcIikgKilcbiAgfCBBcmdfcGFkZGluZyA6IHBhZHR5IC0+IChpbnQgLT4gJ2EsICdhKSBwYWRkaW5nXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2QsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcGFkZGluZyBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwYWRfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBQcmVjaXNpb24gb2YgZmxvYXRzIGFuZCAnMCctcGFkZGluZyBvZiBpbnRlZ2Vycy4gKilcbnR5cGUgKCdhLCAnYikgcHJlY2lzaW9uID1cbiAgKCogTm8gcHJlY2lzaW9uIChleDogXCIlZlwiKSAqKVxuICB8IE5vX3ByZWNpc2lvbiA6ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBMaXRlcmFsIHByZWNpc2lvbiAoZXg6IFwiJS4zZlwiKSAqKVxuICB8IExpdF9wcmVjaXNpb24gOiBpbnQgLT4gKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIFByZWNpc2lvbiBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKSAqKVxuICB8IEFyZ19wcmVjaXNpb24gOiAoaW50IC0+ICdhLCAnYSkgcHJlY2lzaW9uXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2YsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcHJlY2lzaW9uIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHByZWNfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBzZWUgdGhlIEN1c3RvbSBmb3JtYXQgY29tYmluYXRvciAqKVxudHlwZSAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5ID1cbiAgfCBDdXN0b21femVybyA6ICgnYSwgc3RyaW5nLCAnYSkgY3VzdG9tX2FyaXR5XG4gIHwgQ3VzdG9tX3N1Y2MgOiAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5IC0+XG4gICAgKCdhLCAneCAtPiAnYiwgJ3ggLT4gJ2MpIGN1c3RvbV9hcml0eVxuXG4oKioqKVxuXG4oKiAgICAgICAgUmVsYXRpb25hbCBmb3JtYXQgdHlwZXNcblxuSW4gdGhlIGZpcnN0IGZvcm1hdCtnYWR0cyBpbXBsZW1lbnRhdGlvbiwgdGhlIHR5cGUgZm9yICUoLi4lKSBpbiB0aGVcbmZtdCBHQURUIHdhcyBhcyBmb2xsb3dzOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICogKCdkMSwgJ3ExLCAnZDIsICdxMikgcmVhZGVyX25iX3VuaWZpZXIgKlxuICAgICgneCwgJ2IsICdjLCAnZDEsICdxMSwgJ3UpIGZtdHR5ICpcbiAgICAoJ3UsICdiLCAnYywgJ3ExLCAnZTEsICdmKSBmbXQgLT5cbiAgICAgICgoJ3gsICdiLCAnYywgJ2QyLCAncTIsICd1KSBmb3JtYXQ2IC0+ICd4LCAnYiwgJ2MsICdkMSwgJ2UxLCAnZikgZm10XG5cbk5vdGljZSB0aGF0IHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2YgcG9zaXRpb24gaW4gdGhlIGZvcm1hdCBhcmd1bWVudFxuKCgneCwgLi4sICd1KSBmb3JtYXQ2IC0+IC4uKSBpcyBlcXVhbCB0byB0aGUgJ3UgcGFyYW1ldGVyIGluICdhXG5wb3NpdGlvbiBpbiB0aGUgZm9ybWF0IHRhaWwgKCgndSwgLi4sICdmKSBmbXQpLiBUaGlzIG1lYW5zIHRoYXQgdGhlXG50eXBlIG9mIHRoZSBleHBlY3RlZCBmb3JtYXQgcGFyYW1ldGVyIGRlcGVuZHMgb2Ygd2hlcmUgdGhlICUoLi4uJSlcbmFyZSBpbiB0aGUgZm9ybWF0IHN0cmluZzpcblxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpXCJcbiAgLSA6ICh1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiB1bml0XG4gID0gPGZ1bj5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKSVkXCJcbiAgLSA6IChpbnQgLT4gdW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCBpbnQgLT4gdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IGludCAtPiB1bml0XG4gID0gPGZ1bj5cblxuT24gdGhlIGNvbnRyYXJ5LCB0aGUgbGVnYWN5IHR5cGVyIGdpdmVzIGEgY2xldmVyIHR5cGUgdGhhdCBkb2VzIG5vdFxuZGVwZW5kIG9uIHRoZSBwb3NpdGlvbiBvZiAlKC4uJSkgaW4gdGhlIGZvcm1hdCBzdHJpbmcuIEZvciBleGFtcGxlLFxuJSglKSB3aWxsIGhhdmUgdGhlIHBvbHltb3JwaGljIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpOiBpdCBjYW5cbmJlIGNvbmNhdGVuYXRlZCB0byBhbnkgZm9ybWF0IHR5cGUsIGFuZCBvbmx5IGVuZm9yY2VzIHRoZSBjb25zdHJhaW50XG50aGF0IGl0cyAnYSBhbmQgJ2YgcGFyYW1ldGVycyBhcmUgZXF1YWwgKG5vIGZvcm1hdCBhcmd1bWVudHMpIGFuZCAnZFxuYW5kICdlIGFyZSBlcXVhbCAobm8gcmVhZGVyIGFyZ3VtZW50KS5cblxuVGhlIHdlYWtlbmluZyBvZiB0aGlzIHBhcmFtZXRlciB0eXBlIGluIHRoZSBHQURUIHZlcnNpb24gYnJva2UgdXNlclxuY29kZSAoaW4gZmFjdCBpdCBlc3NlbnRpYWxseSBtYWRlICUoLi4uJSkgdW51c2FibGUgZXhjZXB0IGF0IHRoZSBsYXN0XG5wb3NpdGlvbiBvZiBhIGZvcm1hdCkuIEluIHBhcnRpY3VsYXIsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IHdvcmtcbmFueW1vcmU6XG5cbiAgZnVuIHNlcCAtPlxuICAgIEZvcm1hdC5wcmludGYgXCJmb28lKCUpYmFyJSglKWJhelwiIHNlcCBzZXBcblxuQXMgdGhlIHR5cGUtY2hlY2tlciB3b3VsZCByZXF1aXJlIHR3byAqaW5jb21wYXRpYmxlKiB0eXBlcyBmb3IgdGhlICUoJSlcbmluIGRpZmZlcmVudCBwb3NpdGlvbnMuXG5cblRoZSBzb2x1dGlvbiB0byByZWdhaW4gYSBnZW5lcmFsIHR5cGUgZm9yICUoLi4lKSBpcyB0byBnZW5lcmFsaXplIHRoaXNcbnRlY2huaXF1ZSwgbm90IG9ubHkgb24gdGhlICdkLCAnZSBwYXJhbWV0ZXJzLCBidXQgb24gYWxsIHNpeFxucGFyYW1ldGVycyBvZiBhIGZvcm1hdDogd2UgaW50cm9kdWNlIGEgXCJyZWxhdGlvbmFsXCIgdHlwZVxuICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxud2hvc2UgdmFsdWVzIGFyZSBwcm9vZnMgdGhhdCAoJ2ExLCAuLiwgJ2YxKSBhbmQgKCdhMiwgLi4sICdmMikgbW9yYWxseVxuY29ycmVzcG9uZCB0byB0aGUgc2FtZSBmb3JtYXQgdHlwZTogJ2ExIGlzIG9idGFpbmVkIGZyb20gJ2YxLCdiMSwnYzFcbmluIHRoZSBleGFjdCBzYW1lIHdheSB0aGF0ICdhMiBpcyBvYnRhaW5lZCBmcm9tICdmMiwnYjIsJ2MyLCBldGMuXG5cbkZvciBleGFtcGxlLCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0d28gZm9ybWF0IHR5cGVzIGJlZ2lubmluZyB3aXRoIGEgQ2hhclxucGFyYW1ldGVyIGlzIGFzIGZvbGxvd3M6XG5cbnwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5JbiB0aGUgZ2VuZXJhbCBjYXNlLCB0aGUgdGVybSBzdHJ1Y3R1cmUgb2YgZm10dHlfcmVsIGlzIChhbG1vc3RbMV0pXG5pc29tb3JwaGljIHRvIHRoZSBmbXR0eSBvZiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb246IGV2ZXJ5XG5jb25zdHJ1Y3RvciBpcyByZS1yZWFkIHdpdGggYSBiaW5hcnksIHJlbGF0aW9uYWwgdHlwZSwgaW5zdGVhZCBvZiB0aGVcbnByZXZpb3VzIHVuYXJ5IHR5cGluZy4gZm10dHkgY2FuIHRoZW4gYmUgcmUtZGVmaW5lZCBhcyB0aGUgZGlhZ29uYWwgb2ZcbmZtdHR5X3JlbDpcblxuICB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuXG5PbmNlIHdlIGhhdmUgdGhpcyBmbXR0eV9yZWwgdHlwZSBpbiBwbGFjZSwgd2UgY2FuIGdpdmUgdGhlIG1vcmVcbmdlbmVyYWwgdHlwZSB0byAlKC4uLiUpOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuV2UgYWNjZXB0IGFueSBmb3JtYXQgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2KSAodGhpcyBpc1xuY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZm9ybWF0KSwgYnV0IGFsc29cbnJlcXVpcmUgYSBwcm9vZiB0aGF0IHRoaXMgZm9ybWF0IGlzIGluIHJlbGF0aW9uIHRvIGFub3RoZXIgZm9ybWF0IHRoYXRcbmlzIGNvbmNhdGVuYWJsZSB0byB0aGUgZm9ybWF0IHRhaWwuIFdoZW4gZXhlY3V0aW5nIGEgJSguLi4lKSBmb3JtYXRcbihpbiBjYW1saW50ZXJuYWxGb3JtYXQubWw6bWFrZV9wcmludGYgb3Igc2NhbmYubWw6bWFrZV9zY2FuZiksIHdlXG50cmFuc3R5cGUgdGhlIGZvcm1hdCBhbG9uZyB0aGlzIHJlbGF0aW9uIHVzaW5nIHRoZSAncmVjYXN0JyBmdW5jdGlvblxudG8gdHJhbnNwb3NlIGJldHdlZW4gcmVsYXRlZCBmb3JtYXQgdHlwZXMuXG5cbiAgdmFsIHJlY2FzdCA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxKSBmbXRcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdFxuXG5OT1RFIFsxXTogdGhlIHR5cGluZyBvZiBGb3JtYXRfc3Vic3RfdHkgcmVxdWlyZXMgbm90IG9uZSBmb3JtYXQgdHlwZSwgYnV0XG50d28sIG9uZSB0byBlc3RhYmxpc2ggdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0IGFyZ3VtZW50IGFuZCB0aGVcbmZpcnN0IHNpeCBwYXJhbWV0ZXJzLCBhbmQgdGhlIG90aGVyIGZvciB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXRcbmFyZ3VtZW50IGFuZCB0aGUgbGFzdCBzaXggcGFyYW1ldGVycy5cblxufCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbldoZW4gd2UgZ2VuZXJhdGUgYSBmb3JtYXQgQVNULCB3ZSBnZW5lcmF0ZSBleGFjdGx5IHRoZSBzYW1lIHdpdG5lc3NcbmZvciBib3RoIHJlbGF0aW9ucywgYW5kIHRoZSB3aXRuZXNzLWNvbnZlcnNpb24gZnVuY3Rpb25zIGluXG5jYW1saW50ZXJuYWxGb3JtYXQgZG8gcmVseSBvbiB0aGlzIGludmFyaWFudC4gRm9yIGV4YW1wbGUsIHRoZVxuZnVuY3Rpb24gdGhhdCBwcm92ZXMgdGhhdCB0aGUgcmVsYXRpb24gaXMgdHJhbnNpdGl2ZVxuXG4gIHZhbCB0cmFucyA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG5cbmRvZXMgYXNzdW1lIHRoYXQgdGhlIHR3byBpbnB1dHMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIHRlcm0gc3RydWN0dXJlXG4oYW5kIGlzIG9ubHkgZXZlcnkgdXNlZCBmb3IgYXJndW1lbnQgd2l0bmVzc2VzIG9mIHRoZVxuRm9ybWF0X3N1YnN0X3R5IGNvbnN0cnVjdG9yKS5cbiopXG5cbigqIFR5cGUgb2YgYSBibG9jayB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggICAoKiBIb3Jpem9udGFsIGJsb2NrIG5vIGxpbmUgYnJlYWtpbmcgKilcbiAgfCBQcF92Ym94ICAgKCogVmVydGljYWwgYmxvY2sgZWFjaCBicmVhayBsZWFkcyB0byBhIG5ldyBsaW5lICopXG4gIHwgUHBfaHZib3ggICgqIEhvcml6b250YWwtdmVydGljYWwgYmxvY2s6IHNhbWUgYXMgdmJveCwgZXhjZXB0IGlmIHRoaXMgYmxvY2tcbiAgICAgICAgICAgICAgICAgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBvbiBhIHNpbmdsZSBsaW5lICopXG4gIHwgUHBfaG92Ym94ICgqIEhvcml6b250YWwgb3IgVmVydGljYWwgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrICopXG4gIHwgUHBfYm94ICAgICgqIEhvcml6b250YWwgb3IgSW5kZW50IGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jaywgb3JcbiAgICAgICAgICAgICAgICAgd2hlbiBpdCBsZWFkcyB0byBhIG5ldyBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBsaW5lICopXG4gIHwgUHBfZml0cyAgICgqIEludGVybmFsIHVzYWdlOiB3aGVuIGEgYmxvY2sgZml0cyBvbiBhIHNpbmdsZSBsaW5lICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGZvcm1hdHRpbmdfbGl0ID1cbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF0gICAqKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAfSAgICopXG4gIHwgQnJlYWsgb2Ygc3RyaW5nICogaW50ICogaW50ICAgICAgICAgICgqIEAsIHwgQCAgfCBAOyB8IEA7PD4gKilcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQD8gICAqKVxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXFxuICAqKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBALiAgICopXG4gIHwgTWFnaWNfc2l6ZSBvZiBzdHJpbmcgKiBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA8bj4gKilcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQEAgICAqKVxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAJSUgICopXG4gIHwgU2Nhbl9pbmRpYyBvZiBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBYICAgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuID1cbiAgfCBPcGVuX3RhZyA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQHsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuICB8IE9wZW5fYm94IDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAWyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IHR5cGUgZWxlbWVudHMuICopXG4oKiBJbiBwYXJ0aWN1bGFyIHVzZWQgdG8gcmVwcmVzZW50ICUoLi4uJSkgYW5kICV7Li4uJX0gY29udGVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcbmFuZCAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsID1cbiAgfCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBTdHJpbmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChzdHJpbmcgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBzdHJpbmcgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVkICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDMyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDMyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50MzIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgTmF0aXZlaW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAobmF0aXZlaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgbmF0aXZlaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDY0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDY0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50NjQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgRmxvYXRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVmICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoZmxvYXQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBmbG9hdCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBCb29sX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChib29sIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgYm9vbCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEZvcm1hdF9hcmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcbiAgfCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9ycy4gKilcbiAgfCBBbHBoYV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICd4IC0+ICdjMSkgLT4gJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICd4IC0+ICdjMikgLT4gJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgVGhldGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAnYzEpIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAnYzIpIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEFueV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVXNlZCBmb3IgY3VzdG9tIGZvcm1hdHMgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgUmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEVuZF9vZl9mbXR0eSA6XG4gICAgICAoJ2YxLCAnYjEsICdjMSwgJ2QxLCAnZDEsICdmMSxcbiAgICAgICAnZjIsICdiMiwgJ2MyLCAnZDIsICdkMiwgJ2YyKSBmbXR0eV9yZWxcblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgZWxlbWVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCA9XG4gIHwgQ2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50MzIgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBOYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbltkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIG5hdGl2ZWludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50NjQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICAgICAgZmxvYXRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGZsb2F0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtiQl0gKilcbiAgICAgICgneCwgYm9vbCAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsdXNoIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IFN0cmluZ19saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIGFiYyAqKVxuICAgICAgc3RyaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2hhcl9saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogeCAqKVxuICAgICAgY2hhciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgRm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IEFscGhhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ3ggLT4gJ2MpIC0+ICd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFRoZXRhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ2MpIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcjogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgZm9ybWF0dGluZ19saXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXR0aW5nX2dlbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgICgnYTEsICdiLCAnYywgJ2QxLCAnZTEsICdmMSkgZm9ybWF0dGluZ19nZW4gKlxuICAgICAgKCdmMSwgJ2IsICdjLCAnZTEsICdlMiwgJ2YyKSBmbXQgLT4gKCdhMSwgJ2IsICdjLCAnZDEsICdlMiwgJ2YyKSBmbXRcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4IC0+ICdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVsuLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChzdHJpbmcgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtubE5MXSAqKVxuICAgICAgY291bnRlciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGludCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IElnbm9yZWRfcGFyYW0gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgaWdub3JlZCAqICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEN1c3RvbSBwcmludGluZyBmb3JtYXQgKFBSIzY0NTIsIEdQUiMxNDApXG5cbiAgICAgV2UgaW5jbHVkZSBhIHR5cGUgQ3VzdG9tIG9mIFwiY3VzdG9tIGNvbnZlcnRlcnNcIiwgd2hlcmUgYW5cbiAgICAgYXJiaXRyYXJ5IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgb25lIG9yIG1vcmVcbiAgICAgYXJndW1lbnRzLiBUaGVyZSBpcyBubyBzeW50YXggZm9yIGN1c3RvbSBjb252ZXJ0ZXJzLCBpdCBpcyBvbmx5XG4gICAgIGludGVuZGVkIGZvciBjdXN0b20gcHJvY2Vzc29ycyB0aGF0IHdpc2ggdG8gcmVseSBvbiB0aGVcbiAgICAgc3RkbGliLWRlZmluZWQgZm9ybWF0IEdBRFRzLlxuXG4gICAgIEZvciBpbnN0YW5jZSBhIHByZS1wcm9jZXNzb3IgY291bGQgY2hvb3NlIHRvIGludGVycHJldCBzdHJpbmdzXG4gICAgIHByZWZpeGVkIHdpdGggW1wiIVwiXSBhcyBmb3JtYXQgc3RyaW5ncyB3aGVyZSBbJXt7IC4uLiB9fV0gaXNcbiAgICAgYSBzcGVjaWFsIGZvcm0gdG8gcGFzcyBhIHRvX3N0cmluZyBmdW5jdGlvbiwgc28gdGhhdCBvbmUgY291bGRcbiAgICAgd3JpdGU6XG5cbiAgICAge1tcbiAgICAgICB0eXBlIHQgPSB7IHggOiBpbnQ7IHkgOiBpbnQgfVxuXG4gICAgICAgbGV0IHN0cmluZ19vZl90IHQgPSBQcmludGYuc3ByaW50ZiBcInsgeCA9ICVkOyB5ID0gJWQgfVwiIHQueCB0LnlcblxuICAgICAgIFByaW50Zi5wcmludGYgIVwidCA9ICV7e3N0cmluZ19vZl90fX1cIiB7IHggPSA0MjsgeSA9IDQyIH1cbiAgICAgXX1cbiAgKilcbiAgfCBDdXN0b20gOlxuICAgICAgKCdhLCAneCwgJ3kpIGN1c3RvbV9hcml0eSAqICh1bml0IC0+ICd4KSAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBlbmQgb2YgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiAqKVxuICB8IEVuZF9vZl9mb3JtYXQgOlxuICAgICAgICAoJ2YsICdiLCAnYywgJ2UsICdlLCAnZikgZm10XG5cbigqKiopXG5cbigqIFR5cGUgZm9yIGlnbm9yZWQgcGFyYW1ldGVycyAoc2VlIFwiJV9cIikuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWQgPVxuICB8IElnbm9yZWRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9zICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9TICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX25kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2YgKilcbiAgICAgIHBhZF9vcHRpb24gKiBwcmVjX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfYm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQiAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfey4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8oLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3JlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgKilcbiAgICAgICgnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1suLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1tubE5MXSAqKVxuICAgICAgY291bnRlciAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG5cbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9XG4gIEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ICogc3RyaW5nXG5cbmxldCByZWMgZXJhc2VfcmVsIDogdHlwZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCAuXG4gIChhLCBiLCBjLCBkLCBlLCBmLFxuICAgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eVxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgX3R5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkxLCBlcmFzZV9yZWwgcmVzdClcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwZSBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXQgdHlwZXMuICopXG4oKiBVc2VkIGJ5OlxuICAgKiByZWFkZXJfbmJfdW5pZmllcl9vZl9mbXR0eSB0byBjb3VudCByZWFkZXJzIGluIGFuIGZtdHR5LFxuICAgKiBTY2FuZi50YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIHRvIGV4dHJhY3QgcmVhZGVycyBpbnNpZGUgJSguLi4lKSxcbiAgICogQ2FtbGludGVybmFsRm9ybWF0LmZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IHRvIGV4dHJhY3QgZm9ybWF0IHR5cGUuICopXG5cbigqXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10dHkgPVxuKilcbmxldCByZWMgY29uY2F0X2ZtdHR5IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gICAgICAgZzEgajEgZzIgajJcbiAgLlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZDEsIGExLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZDIsIGEyKSBmbXR0eV9yZWwgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKGcxLCBiMSwgYzEsIGoxLCBlMSwgZjEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBlMiwgZjIpIGZtdHR5X3JlbCA9XG5mdW4gZm10dHkxIGZtdHR5MiAtPiBtYXRjaCBmbXR0eTEgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IGZtdHR5MlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdHMuICopXG5sZXQgcmVjIGNvbmNhdF9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10ID1cbmZ1biBmbXQxIGZtdDIgLT4gbWF0Y2ggZm10MSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgU3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgQ2FtbF9zdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IENoYXIgKHJlc3QpIC0+XG4gICAgQ2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBDYW1sX2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBCb29sIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEFscGhhIHJlc3QgLT5cbiAgICBBbHBoYSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIFRoZXRhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIEN1c3RvbSAoYXJpdHksIGYsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFJlYWRlciByZXN0IC0+XG4gICAgUmVhZGVyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgRmx1c2ggKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBDaGFyX2xpdGVyYWwgICAoY2hyLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdF9hcmcgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZyAgIChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX25leHRfY2hhciAocmVzdCkgLT5cbiAgICBTY2FuX25leHRfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIElnbm9yZWRfcGFyYW0gKGlnbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGZtdDJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIEdhYnJpZWwgU2NoZXJlciwgcHJvamV0IFBhcnRvdXQsIElOUklBIFBhcmlzLVNhY2xheSAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMjAgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2FtbGludGVybmFsQXRvbWljIGlzIGEgZGVwZW5kZW5jeSBvZiBTdGRsaWIsIHNvIGl0IGlzIGNvbXBpbGVkIHdpdGhcbiAgIC1ub3BlcnZhc2l2ZXMuICopXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogV2UgYXJlIG5vdCByZXVzaW5nICgnYSByZWYpIGRpcmVjdGx5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlYXNvblxuICAgYWJvdXQgYXRvbWljaXR5IGlmIHdlIHdpc2ggdG86IGV2ZW4gaW4gYSBzZXF1ZW50aWFsIGltcGxlbWVudGF0aW9uLFxuICAgc2lnbmFscyBhbmQgb3RoZXIgYXN5bmNocm9ub3VzIGNhbGxiYWNrcyBtaWdodCBicmVhayBhdG9taWNpdHkuICopXG50eXBlICdhIHQgPSB7bXV0YWJsZSB2OiAnYX1cblxubGV0IG1ha2UgdiA9IHt2fVxubGV0IGdldCByID0gci52XG5sZXQgc2V0IHIgdiA9IHIudiA8LSB2XG5cbigqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBzZXQgdG8gbmV2ZXIgYmUgaW5saW5lZDogRmxhbWJkYSBpc1xuICAgYWxsb3dlZCB0byBtb3ZlIHN1cnJvdW5kaW5nIGNvZGUgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLFxuICAgaW5jbHVkaW5nIGFsbG9jYXRpb25zLiAqKVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZXhjaGFuZ2UgciB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIHY7XG4gICgqIEVORCBBVE9NSUMgKilcbiAgY3VyXG5cbmxldFtAaW5saW5lIG5ldmVyXSBjb21wYXJlX2FuZF9zZXQgciBzZWVuIHYgPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICBpZiBjdXIgPT0gc2VlbiB0aGVuIChcbiAgICByLnYgPC0gdjtcbiAgICAoKiBFTkQgQVRPTUlDICopXG4gICAgdHJ1ZVxuICApIGVsc2VcbiAgICBmYWxzZVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZmV0Y2hfYW5kX2FkZCByIG4gPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICByLnYgPC0gKGN1ciArIG4pO1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXQgaW5jciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgMSlcbmxldCBkZWNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAoLTEpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCBvciApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+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+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldCByZWMgKCBAICkgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBoZCA6OiB0bCAtPiBoZCA6OiAodGwgQCBsMilcblxuKCogSS9PIG9wZXJhdGlvbnMgKilcblxudHlwZSBpbl9jaGFubmVsXG50eXBlIG91dF9jaGFubmVsXG5cbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9vdXQgOiBpbnQgLT4gb3V0X2NoYW5uZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFwiXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3JfaW4gOiBpbnQgLT4gaW5fY2hhbm5lbCA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cIlxuXG5sZXQgc3RkaW4gPSBvcGVuX2Rlc2NyaXB0b3JfaW4gMFxubGV0IHN0ZG91dCA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMVxubGV0IHN0ZGVyciA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMlxuXG4oKiBHZW5lcmFsIG91dHB1dCBmdW5jdGlvbnMgKilcblxudHlwZSBvcGVuX2ZsYWcgPVxuICAgIE9wZW5fcmRvbmx5IHwgT3Blbl93cm9ubHkgfCBPcGVuX2FwcGVuZFxuICB8IE9wZW5fY3JlYXQgfCBPcGVuX3RydW5jIHwgT3Blbl9leGNsXG4gIHwgT3Blbl9iaW5hcnkgfCBPcGVuX3RleHQgfCBPcGVuX25vbmJsb2NrXG5cbmV4dGVybmFsIG9wZW5fZGVzYyA6IHN0cmluZyAtPiBvcGVuX2ZsYWcgbGlzdCAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX3N5c19vcGVuXCJcblxuZXh0ZXJuYWwgc2V0X291dF9jaGFubmVsX25hbWU6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9vdXRfZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0KG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X291dF9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX291dCBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl90ZXh0XSAwbzY2NiBuYW1lXG5cbmxldCBvcGVuX291dF9iaW4gbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fYmluYXJ5XSAwbzY2NiBuYW1lXG5cbmV4dGVybmFsIGZsdXNoIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9mbHVzaFwiXG5cbmV4dGVybmFsIG91dF9jaGFubmVsc19saXN0IDogdW5pdCAtPiBvdXRfY2hhbm5lbCBsaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFwiXG5cbmxldCBmbHVzaF9hbGwgKCkgPVxuICBsZXQgcmVjIGl0ZXIgPSBmdW5jdGlvblxuICAgICAgW10gLT4gKClcbiAgICB8IGE6OmwgLT5cbiAgICAgICAgYmVnaW4gdHJ5XG4gICAgICAgICAgICBmbHVzaCBhXG4gICAgICAgIHdpdGggU3lzX2Vycm9yIF8gLT5cbiAgICAgICAgICAoKSAoKiBpZ25vcmUgY2hhbm5lbHMgY2xvc2VkIGR1cmluZyBhIHByZWNlZGluZyBmbHVzaC4gKilcbiAgICAgICAgZW5kO1xuICAgICAgICBpdGVyIGxcbiAgaW4gaXRlciAob3V0X2NoYW5uZWxzX2xpc3QgKCkpXG5cbmV4dGVybmFsIHVuc2FmZV9vdXRwdXQgOiBvdXRfY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0X2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9vdXRwdXRfc3RyaW5nIDogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0XCJcblxuZXh0ZXJuYWwgb3V0cHV0X2NoYXIgOiBvdXRfY2hhbm5lbCAtPiBjaGFyIC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuXG5sZXQgb3V0cHV0X2J5dGVzIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0IG9jIHMgMCAoYnl0ZXNfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXRfc3RyaW5nIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIDAgKHN0cmluZ19sZW5ndGggcylcblxubGV0IG91dHB1dCBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dFwiXG4gIGVsc2UgdW5zYWZlX291dHB1dCBvYyBzIG9mcyBsZW5cblxubGV0IG91dHB1dF9zdWJzdHJpbmcgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IHN0cmluZ19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0X3N1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyBvZnMgbGVuXG5cbmV4dGVybmFsIG91dHB1dF9ieXRlIDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuZXh0ZXJuYWwgb3V0cHV0X2JpbmFyeV9pbnQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfaW50XCJcblxuZXh0ZXJuYWwgbWFyc2hhbF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgLT4gdW5pdCBsaXN0IC0+IHVuaXRcbiAgICAgPSBcImNhbWxfb3V0cHV0X3ZhbHVlXCJcbmxldCBvdXRwdXRfdmFsdWUgY2hhbiB2ID0gbWFyc2hhbF90b19jaGFubmVsIGNoYW4gdiBbXVxuXG5leHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XCJcbmV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX291dFwiXG5leHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX291dF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9vdXQgb2MgPSBmbHVzaCBvYzsgY2xvc2Vfb3V0X2NoYW5uZWwgb2NcbmxldCBjbG9zZV9vdXRfbm9lcnIgb2MgPVxuICAodHJ5IGZsdXNoIG9jIHdpdGggXyAtPiAoKSk7XG4gICh0cnkgY2xvc2Vfb3V0X2NoYW5uZWwgb2Mgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX291dCA6IG91dF9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBHZW5lcmFsIGlucHV0IGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBzZXRfaW5fY2hhbm5lbF9uYW1lOiBpbl9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9pbl9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9pbihvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9pbl9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX2luIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fdGV4dF0gMCBuYW1lXG5cbmxldCBvcGVuX2luX2JpbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX2JpbmFyeV0gMCBuYW1lXG5cbmV4dGVybmFsIGlucHV0X2NoYXIgOiBpbl9jaGFubmVsIC0+IGNoYXIgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5cbmV4dGVybmFsIHVuc2FmZV9pbnB1dCA6IGluX2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9pbnB1dFwiXG5cbmxldCBpbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcImlucHV0XCJcbiAgZWxzZSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWMgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBsZW4gPD0gMCB0aGVuICgpIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW4gaW5cbiAgICBpZiByID0gMFxuICAgIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyAob2ZzICsgcikgKGxlbiAtIHIpXG4gIGVuZFxuXG5sZXQgcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwicmVhbGx5X2lucHV0XCJcbiAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVhbGx5X2lucHV0X3N0cmluZyBpYyBsZW4gPVxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSBsZW4gaW5cbiAgcmVhbGx5X2lucHV0IGljIHMgMCBsZW47XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG5leHRlcm5hbCBpbnB1dF9zY2FuX2xpbmUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcIlxuXG5sZXQgaW5wdXRfbGluZSBjaGFuID1cbiAgbGV0IHJlYyBidWlsZF9yZXN1bHQgYnVmIHBvcyA9IGZ1bmN0aW9uXG4gICAgW10gLT4gYnVmXG4gIHwgaGQgOjogdGwgLT5cbiAgICAgIGxldCBsZW4gPSBieXRlc19sZW5ndGggaGQgaW5cbiAgICAgIGJ5dGVzX2JsaXQgaGQgMCBidWYgKHBvcyAtIGxlbikgbGVuO1xuICAgICAgYnVpbGRfcmVzdWx0IGJ1ZiAocG9zIC0gbGVuKSB0bCBpblxuICBsZXQgcmVjIHNjYW4gYWNjdSBsZW4gPVxuICAgIGxldCBuID0gaW5wdXRfc2Nhbl9saW5lIGNoYW4gaW5cbiAgICBpZiBuID0gMCB0aGVuIGJlZ2luICAgICAgICAgICAgICAgICAgICgqIG4gPSAwOiB3ZSBhcmUgYXQgRU9GICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICAgIHwgXyAgLT4gYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gYWNjdVxuICAgIGVuZCBlbHNlIGlmIG4gPiAwIHRoZW4gYmVnaW4gICAgICAgICAgKCogbiA+IDA6IG5ld2xpbmUgZm91bmQgaW4gYnVmZmVyICopXG4gICAgICBsZXQgcmVzID0gYnl0ZXNfY3JlYXRlIChuIC0gMSkgaW5cbiAgICAgIGlnbm9yZSAodW5zYWZlX2lucHV0IGNoYW4gcmVzIDAgKG4gLSAxKSk7XG4gICAgICBpZ25vcmUgKGlucHV0X2NoYXIgY2hhbik7ICAgICAgICAgICAoKiBza2lwIHRoZSBuZXdsaW5lICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmVzXG4gICAgICB8ICBfIC0+IGxldCBsZW4gPSBsZW4gKyBuIC0gMSBpblxuICAgICAgICAgICAgICBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiAocmVzIDo6IGFjY3UpXG4gICAgZW5kIGVsc2UgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAoKiBuIDwgMDogbmV3bGluZSBub3QgZm91bmQgKilcbiAgICAgIGxldCBiZWcgPSBieXRlc19jcmVhdGUgKC1uKSBpblxuICAgICAgaWdub3JlKHVuc2FmZV9pbnB1dCBjaGFuIGJlZyAwICgtbikpO1xuICAgICAgc2NhbiAoYmVnIDo6IGFjY3UpIChsZW4gLSBuKVxuICAgIGVuZFxuICBpbiBieXRlc191bnNhZmVfdG9fc3RyaW5nIChzY2FuIFtdIDApXG5cbmV4dGVybmFsIGlucHV0X2J5dGUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcbmV4dGVybmFsIGlucHV0X2JpbmFyeV9pbnQgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9pbnRcIlxuZXh0ZXJuYWwgaW5wdXRfdmFsdWUgOiBpbl9jaGFubmVsIC0+ICdhID0gXCJjYW1sX2lucHV0X3ZhbHVlXCJcbmV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5cIlxuZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX2luXCJcbmV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX2luIDogaW5fY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX2luX25vZXJyIGljID0gKHRyeSBjbG9zZV9pbiBpYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfaW4gOiBpbl9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgb3V0cHV0ICopXG5cbmxldCBwcmludF9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRvdXQgY1xubGV0IHByaW50X3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgc1xubGV0IHByaW50X2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3Rkb3V0IHNcbmxldCBwcmludF9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJpbnRfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmludF9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzOyBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxubGV0IHByaW50X25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGVycm9yICopXG5cbmxldCBwcmVycl9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRlcnIgY1xubGV0IHByZXJyX3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgc1xubGV0IHByZXJyX2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3RkZXJyIHNcbmxldCBwcmVycl9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJlcnJfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmVycl9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzOyBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxubGV0IHByZXJyX25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxuXG4oKiBJbnB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgaW5wdXQgKilcblxubGV0IHJlYWRfbGluZSAoKSA9IGZsdXNoIHN0ZG91dDsgaW5wdXRfbGluZSBzdGRpblxubGV0IHJlYWRfaW50ICgpID0gaW50X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2ludF9vcHQgKCkgPSBpbnRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0ICgpID0gZmxvYXRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXRfb3B0ICgpID0gZmxvYXRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcblxuKCogT3BlcmF0aW9ucyBvbiBsYXJnZSBmaWxlcyAqKVxuXG5tb2R1bGUgTGFyZ2VGaWxlID1cbiAgc3RydWN0XG4gICAgZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX291dF82NFwiXG4gICAgZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50NjRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgICBleHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5fNjRcIlxuICAgIGV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX2luXzY0XCJcbiAgICBleHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgZW5kXG5cbigqIEZvcm1hdHMgKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NlxuICAgPSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDZcbiAgID0gRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm10XG4gICAgICAgICAgICAgICAqIHN0cmluZ1xuXG50eXBlICgnYSwgJ2IsICdjLCAnZCkgZm9ybWF0NCA9ICgnYSwgJ2IsICdjLCAnYywgJ2MsICdkKSBmb3JtYXQ2XG5cbnR5cGUgKCdhLCAnYiwgJ2MpIGZvcm1hdCA9ICgnYSwgJ2IsICdjLCAnYykgZm9ybWF0NFxuXG5sZXQgc3RyaW5nX29mX2Zvcm1hdCAoRm9ybWF0IChfZm10LCBzdHIpKSA9IHN0clxuXG5leHRlcm5hbCBmb3JtYXRfb2Zfc3RyaW5nIDpcbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgKCBeXiApIChGb3JtYXQgKGZtdDEsIHN0cjEpKSAoRm9ybWF0IChmbXQyLCBzdHIyKSkgPVxuICBGb3JtYXQgKENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5jb25jYXRfZm10IGZtdDEgZm10MixcbiAgICAgICAgICBzdHIxIF4gXCIlLFwiIF4gc3RyMilcblxuKCogTWlzY2VsbGFuZW91cyAqKVxuXG5leHRlcm5hbCBzeXNfZXhpdCA6IGludCAtPiAnYSA9IFwiY2FtbF9zeXNfZXhpdFwiXG5cbmxldCBleGl0X2Z1bmN0aW9uID0gQ2FtbGludGVybmFsQXRvbWljLm1ha2UgZmx1c2hfYWxsXG5cbmxldCByZWMgYXRfZXhpdCBmID1cbiAgbGV0IG1vZHVsZSBBdG9taWMgPSBDYW1saW50ZXJuYWxBdG9taWMgaW5cbiAgKCogTVBSIzcyNTMsIE1QUiM3Nzk2OiBtYWtlIHN1cmUgXCJmXCIgaXMgZXhlY3V0ZWQgb25seSBvbmNlICopXG4gIGxldCBmX3lldF90b19ydW4gPSBBdG9taWMubWFrZSB0cnVlIGluXG4gIGxldCBvbGRfZXhpdCA9IEF0b21pYy5nZXQgZXhpdF9mdW5jdGlvbiBpblxuICBsZXQgbmV3X2V4aXQgKCkgPVxuICAgIGlmIEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZl95ZXRfdG9fcnVuIHRydWUgZmFsc2UgdGhlbiBmICgpIDtcbiAgICBvbGRfZXhpdCAoKVxuICBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZXhpdF9mdW5jdGlvbiBvbGRfZXhpdCBuZXdfZXhpdCBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIGF0X2V4aXQgZlxuXG5sZXQgZG9fYXRfZXhpdCAoKSA9IChDYW1saW50ZXJuYWxBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbmV4dGVybmFsIG1ham9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX21ham9yXCJcbmV4dGVybmFsIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgOiB1bml0IC0+IGJvb2xcbiAgPSBcImNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWRcIlxubGV0ICgpID0gaWYgbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCAoKSB0aGVuIGF0X2V4aXQgbWFqb3JcblxuKCpNT0RVTEVfQUxJQVNFUyopXG5tb2R1bGUgQXJnICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgID0gQXJyYXlcbm1vZHVsZSBBcnJheUxhYmVscyAgPSBBcnJheUxhYmVsc1xubW9kdWxlIEF0b21pYyAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICA9IEJpZ2FycmF5XG5tb2R1bGUgQm9vbCAgICAgICAgID0gQm9vbFxubW9kdWxlIEJ1ZmZlciAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICA9IEJ5dGVzXG5tb2R1bGUgQnl0ZXNMYWJlbHMgID0gQnl0ZXNMYWJlbHNcbm1vZHVsZSBDYWxsYmFjayAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICA9IENoYXJcbm1vZHVsZSBDb21wbGV4ICAgICAgPSBDb21wbGV4XG5tb2R1bGUgRGlnZXN0ICAgICAgID0gRGlnZXN0XG5tb2R1bGUgRWl0aGVyICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgID0gRXBoZW1lcm9uXG5tb2R1bGUgRmlsZW5hbWUgICAgID0gRmlsZW5hbWVcbm1vZHVsZSBGbG9hdCAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICA9IEZvcm1hdFxubW9kdWxlIEZ1biAgICAgICAgICA9IEZ1blxubW9kdWxlIEdjICAgICAgICAgICA9IEdjXG5tb2R1bGUgR2VubGV4ICAgICAgID0gR2VubGV4XG5tb2R1bGUgSGFzaHRibCAgICAgID0gSGFzaHRibFxubW9kdWxlIEluX2NoYW5uZWwgICA9IEluX2NoYW5uZWxcbm1vZHVsZSBJbnQgICAgICAgICAgPSBJbnRcbm1vZHVsZSBJbnQzMiAgICAgICAgPSBJbnQzMlxubW9kdWxlIEludDY0ICAgICAgICA9IEludDY0XG5tb2R1bGUgTGF6eSAgICAgICAgID0gTGF6eVxubW9kdWxlIExleGluZyAgICAgICA9IExleGluZ1xubW9kdWxlIExpc3QgICAgICAgICA9IExpc3Rcbm1vZHVsZSBMaXN0TGFiZWxzICAgPSBMaXN0TGFiZWxzXG5tb2R1bGUgTWFwICAgICAgICAgID0gTWFwXG5tb2R1bGUgTWFyc2hhbCAgICAgID0gTWFyc2hhbFxubW9kdWxlIE1vcmVMYWJlbHMgICA9IE1vcmVMYWJlbHNcbm1vZHVsZSBOYXRpdmVpbnQgICAgPSBOYXRpdmVpbnRcbm1vZHVsZSBPYmogICAgICAgICAgPSBPYmpcbm1vZHVsZSBPbyAgICAgICAgICAgPSBPb1xubW9kdWxlIE9wdGlvbiAgICAgICA9IE9wdGlvblxubW9kdWxlIE91dF9jaGFubmVsICA9IE91dF9jaGFubmVsXG5tb2R1bGUgUGFyc2luZyAgICAgID0gUGFyc2luZ1xubW9kdWxlIFBlcnZhc2l2ZXMgICA9IFBlcnZhc2l2ZXNcbm1vZHVsZSBQcmludGV4YyAgICAgPSBQcmludGV4Y1xubW9kdWxlIFByaW50ZiAgICAgICA9IFByaW50ZlxubW9kdWxlIFF1ZXVlICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgID0gUmFuZG9tXG5tb2R1bGUgUmVzdWx0ICAgICAgID0gUmVzdWx0XG5tb2R1bGUgU2NhbmYgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZXEgICAgICAgICAgPSBTZXFcbm1vZHVsZSBTZXQgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgPSBTdGFja1xubW9kdWxlIFN0ZExhYmVscyAgICA9IFN0ZExhYmVsc1xubW9kdWxlIFN0cmVhbSAgICAgICA9IFN0cmVhbVxubW9kdWxlIFN0cmluZyAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyA9IFN0cmluZ0xhYmVsc1xubW9kdWxlIFN5cyAgICAgICAgICA9IFN5c1xubW9kdWxlIFVjaGFyICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgID0gVW5pdFxubW9kdWxlIFdlYWsgICAgICAgICA9IFdlYWtcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbmluY2x1ZGUgSW50XG5cbnR5cGUgdCA9IGludFxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5sZXQgYWRkID0gKCArIClcbmxldCBzdWIgPSAoIC0gKVxubGV0IG11bCA9ICggKiApXG5sZXQgZGl2ID0gKCAvIClcbmxldCBzdWNjID0gc3VjY1xubGV0IHByZWQgPSBwcmVkXG5sZXQgYWJzID0gYWJzXG5sZXQgbWF4X2ludCA9IG1heF9pbnRcbmxldCBtaW5faW50ID0gbWluX2ludFxubGV0IGVxdWFsIChhIDogaW50KSBiID0gU3RkbGliLiggPSApIGEgYlxubGV0IGNvbXBhcmUgKGEgOiBpbnQpIGIgPSBjb21wYXJlIGEgYlxuXG4oKiB1c2UgRk5WOlxuICAgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRm93bGVyJUUyJTgwJTkzTm9sbCVFMiU4MCU5M1ZvX2hhc2hfZnVuY3Rpb24gKilcbmxldCBoYXNoIChuIDogaW50KSA6IGludCA9XG4gIGxldCBvZmZzZXRfYmFzaXMgPSAweGNiZjI5Y2U0ODQyMjIzMjVMIGluXG4gIGxldCBwcmltZSA9IDB4MTAwMDAwMDAxYjNMIGluXG5cbiAgbGV0IGggPSByZWYgb2Zmc2V0X2Jhc2lzIGluXG4gIGZvciBrID0gMCB0byA3IGRvXG4gICAgKGggOj0gSW50NjQuKG11bCAhaCBwcmltZSkpO1xuICAgICgqIGggOj0gaCB4b3IgKGstdGggYnl0ZSBvZiBuKSAqKVxuICAgIGggOj0gSW50NjQuKGxvZ3hvciAhaCAob2ZfaW50ICgobiBsc3IgKGsgKiA4KSkgbGFuZCAweGZmKSkpXG4gIGRvbmU7XG4gICgqIHRydW5jYXRlIGJhY2sgdG8gaW50IGFuZCByZW1vdmUgc2lnbiAqKVxuICBJbnQ2NC50b19pbnQgIWggbGFuZCBtYXhfaW50XG5cbmxldCByYW5nZSBpIGogeWllbGQgPVxuICBsZXQgcmVjIHVwIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIHVwIChpICsgMSkgaiB5aWVsZFxuICAgIClcbiAgYW5kIGRvd24gaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgZG93biAoaSAtIDEpIGogeWllbGRcbiAgICApXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIHlpZWxkXG4gIGVsc2VcbiAgICBkb3duIGkgaiB5aWVsZFxuXG5sZXQgcmFuZ2UnIGkgaiB5aWVsZCA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSkgeWllbGRcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgKClcbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKSB5aWVsZFxuXG5sZXQgc2lnbiBpID0gY29tcGFyZSBpIDBcbmxldCBuZWcgaSA9IC1pXG5cbmxldCBwb3cgYSBiID1cbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgICB8IDEgLT4gYWNjXG4gICAgfCBuIC0+XG4gICAgICBpZiBuIG1vZCAyID0gMCB0aGVuXG4gICAgICAgIGF1eCAoYWNjICogYWNjKSAobiAvIDIpXG4gICAgICBlbHNlXG4gICAgICAgIGFjYyAqIGF1eCAoYWNjICogYWNjKSAobiAvIDIpXG4gIGluXG4gIG1hdGNoIGIgd2l0aFxuICB8IDAgLT5cbiAgICBpZiBhID0gMCB0aGVuXG4gICAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcInBvdzogdW5kZWZpbmVkIHZhbHVlIDBeMFwiKVxuICAgIGVsc2VcbiAgICAgIDFcbiAgfCBiIHdoZW4gYiA8IDAgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcInBvdzogY2FuJ3QgcmFpc2UgaW50IHRvIG5lZ2F0aXZlIHBvd2VyXCIpXG4gIHwgYiAtPiBhdXggYSBiXG5cbm1vZHVsZSBJbmZpeCA6IHNpZ1xuICB2YWwgKCA9ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8PiApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPCApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPiApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPD0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCAtLSApIDogdCAtPiB0IC0+IHQgaXRlclxuICB2YWwgKCAtLV4gKSA6IHQgLT4gdCAtPiB0IGl0ZXJcbiAgdmFsICggKyApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggLSApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggfi0gKSA6IHQgLT4gdFxuICB2YWwgKCAqICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAvICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAqKiApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbW9kICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBsYW5kICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBsb3IgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGx4b3IgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCBsbm90IDogdCAtPiB0XG4gIHZhbCAoIGxzbCApIDogdCAtPiBpbnQgLT4gdFxuICB2YWwgKCBsc3IgKSA6IHQgLT4gaW50IC0+IHRcbiAgdmFsICggYXNyICkgOiB0IC0+IGludCAtPiB0XG5lbmQgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdGRsaWJcblxuICBsZXQgKCAtLSApID0gcmFuZ2VcbiAgbGV0ICggLS1eICkgPSByYW5nZSdcbiAgbGV0ICggKiogKSA9IHBvd1xuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxubGV0IG1pbiA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLm1pblxubGV0IG1heCA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLm1heFxuXG5sZXQgZmxvb3JfZGl2IGEgbiA9XG4gIGlmIGEgPCAwICYmIG4gPj0gMCB0aGVuXG4gICAgKChhICsgMSkgLyBuKSAtIDFcbiAgZWxzZSBpZiBhID4gMCAmJiBuIDwgMCB0aGVuXG4gICAgKChhIC0gMSkgLyBuKSAtIDFcbiAgZWxzZVxuICAgIGEgLyBuXG5cbmxldCBib29sX25lcSAoYSA6IGJvb2wpIGIgPSBTdGRsaWIuKCA8PiApIGEgYlxuXG5sZXQgcmVtIGEgbiA9XG4gIGxldCB5ID0gYSBtb2QgbiBpblxuICBpZiBib29sX25lcSAoeSA8IDApIChuIDwgMCkgJiYgeSA8PiAwIHRoZW5cbiAgICB5ICsgblxuICBlbHNlXG4gICAgeVxuXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gbiBzdCA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgblxubGV0IHJhbmRvbV9zbWFsbCA9IHJhbmRvbSAxMDBcbmxldCByYW5kb21fcmFuZ2UgaSBqIHN0ID0gaSArIHJhbmRvbSAoaiAtIGkpIHN0XG5sZXQgcHAgZm10ID0gRm9ybWF0LnBwX3ByaW50X2ludCBmbXRcbmxldCBtb3N0X3NpZ25pZmljYW50X2JpdCA9IC0xIGx4b3IgKC0xIGxzciAxKVxubGV0IHRvX3N0cmluZyA9IHN0cmluZ19vZl9pbnRcbmxldCBvZl9zdHJpbmcgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcbmxldCBvZl9zdHJpbmdfZXhuID0gU3RkbGliLmludF9vZl9zdHJpbmdcbmxldCB0b19mbG9hdCA9IGZsb2F0X29mX2ludFxubGV0IG9mX2Zsb2F0ID0gaW50X29mX2Zsb2F0XG5cbnR5cGUgb3V0cHV0ID0gY2hhciAtPiB1bml0XG5cbigqIGFic3RyYWN0IHByaW50ZXIgKilcbmxldCB0b19iaW5hcnlfZ2VuIChvdXQgOiBvdXRwdXQpIG4gPVxuICBsZXQgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiAoXG4gICAgICBvdXQgJy0nO1xuICAgICAgLW5cbiAgICApIGVsc2VcbiAgICAgIG5cbiAgaW5cbiAgb3V0ICcwJztcbiAgb3V0ICdiJztcbiAgbGV0IHJlYyBsb29wIHN0YXJ0ZWQgYml0IG4gPVxuICAgIGlmIGJpdCA9IDAgdGhlbiAoXG4gICAgICBpZiBub3Qgc3RhcnRlZCB0aGVuIG91dCAnMCdcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGIgPSBuIGxhbmQgYml0IGluXG4gICAgICBpZiBiID0gMCB0aGVuIChcbiAgICAgICAgaWYgc3RhcnRlZCB0aGVuIG91dCAnMCc7XG4gICAgICAgIGxvb3Agc3RhcnRlZCAoYml0IGxzciAxKSBuXG4gICAgICApIGVsc2UgKFxuICAgICAgICBvdXQgJzEnO1xuICAgICAgICBsb29wIHRydWUgKGJpdCBsc3IgMSkgblxuICAgICAgKVxuICAgIClcbiAgaW5cbiAgbG9vcCBmYWxzZSBtb3N0X3NpZ25pZmljYW50X2JpdCBuXG5cbmxldCBwcF9iaW5hcnkgb3V0IG4gPSB0b19iaW5hcnlfZ2VuIChGb3JtYXQucHBfcHJpbnRfY2hhciBvdXQpIG5cblxubGV0IHRvX3N0cmluZ19iaW5hcnkgbiA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDE2IGluXG4gIHRvX2JpbmFyeV9nZW4gKEJ1ZmZlci5hZGRfY2hhciBidWYpIG47XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiB5aWVsZCA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgcmFuZ2UgKGkgKyBzdGVwKSBqIHlpZWxkXG4gICAgKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0ludC5yYW5nZV9ieVwiKVxuICBlbHNlIGlmXG4gICAgaWYgc3RlcCA+IDAgdGhlblxuICAgICAgaSA+IGpcbiAgICBlbHNlXG4gICAgICBpIDwgalxuICB0aGVuXG4gICAgKClcbiAgZWxzZVxuICAgIHJhbmdlIGkgKCgoaiAtIGkpIC8gc3RlcCAqIHN0ZXApICsgaSkgeWllbGRcblxuKCpcbiAgZnJvbSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYW1taW5nX3dlaWdodFxuXG4gIC8vVGhpcyB1c2VzIGZld2VyIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0aGFuIGFueSBvdGhlciBrbm93blxuICAvL2ltcGxlbWVudGF0aW9uIG9uIG1hY2hpbmVzIHdpdGggc2xvdyBtdWx0aXBsaWNhdGlvbi5cbiAgLy9JdCB1c2VzIDE3IGFyaXRobWV0aWMgb3BlcmF0aW9ucy5cbiAgaW50IHBvcGNvdW50XzIodWludDY0X3QgeCkge1xuICAgIHggLT0gKHggPj4gMSkgJiBtMTsgICAgICAgICAgICAgLy9wdXQgY291bnQgb2YgZWFjaCAyIGJpdHMgaW50byB0aG9zZSAyIGJpdHNcbiAgICB4ID0gKHggJiBtMikgKyAoKHggPj4gMikgJiBtMik7IC8vcHV0IGNvdW50IG9mIGVhY2ggNCBiaXRzIGludG8gdGhvc2UgNCBiaXRzXG4gICAgeCA9ICh4ICsgKHggPj4gNCkpICYgbTQ7ICAgICAgICAvL3B1dCBjb3VudCBvZiBlYWNoIDggYml0cyBpbnRvIHRob3NlIDggYml0c1xuICAgIHggKz0geCA+PiAgODsgIC8vcHV0IGNvdW50IG9mIGVhY2ggMTYgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICB4ICs9IHggPj4gMTY7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDMyIGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgeCArPSB4ID4+IDMyOyAgLy9wdXQgY291bnQgb2YgZWFjaCA2NCBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHJldHVybiB4ICYgMHg3ZjtcbiAgfVxuXG4gICBtMSA9IDB4NTU1NTU1NTU1NTU1NTU1NVxuICAgbTIgPSAweDMzMzMzMzMzMzMzMzMzMzNcbiAgIG00ID0gMHgwZjBmMGYwZjBmMGYwZjBmXG4qKVxubGV0IHBvcGNvdW50IChiIDogaW50KSA6IGludCA9XG4gIGxldCBtMSA9IDB4NTU1NTU1NTU1NTU1NTU1NUwgaW5cbiAgbGV0IG0yID0gMHgzMzMzMzMzMzMzMzMzMzMzTCBpblxuICBsZXQgbTQgPSAweDBmMGYwZjBmMGYwZjBmMGZMIGluXG4gIGxldCBvcGVuIEludDY0IGluXG4gIGxldCBiID0gb2ZfaW50IGIgaW5cbiAgKCogaW50LT5pbnQ2NCAqKVxuICBsZXQgYiA9IGxvZ2FuZCBiIDB4N2ZmZmZmZmZmZmZmZmZmZkwgaW5cblxuICAoKiByZW1vdmUgc2lnbiBiaXQsIHdlIGRlYWwgd2l0aCB1aW50NjQgaGVyZSAqKVxuICBsZXQgYiA9IHN1YiBiIChsb2dhbmQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxKSBtMSkgaW5cbiAgbGV0IGIgPSBhZGQgKGxvZ2FuZCBiIG0yKSAobG9nYW5kIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMikgbTIpIGluXG4gIGxldCBiID0gbG9nYW5kIChhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDQpKSBtNCBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgOCkgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDE2KSBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMzIpIGluXG4gIGxldCBiID0gbG9nYW5kIGIgMHg3ZkwgaW5cbiAgdG9faW50IGJcblxubGV0IGxvZ2FuZCA9ICggbGFuZCApXG5sZXQgbG9nb3IgPSAoIGxvciApXG5sZXQgbG9neG9yID0gKCBseG9yIClcbmxldCBsb2dub3QgPSBsbm90XG5sZXQgc2hpZnRfbGVmdCA9ICggbHNsIClcbmxldCBzaGlmdF9yaWdodCA9ICggYXNyIClcbmxldCBzaGlmdF9yaWdodF9sb2dpY2FsID0gKCBsc3IgKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgIFRoaXMgaXMgYSBsYWdnZWQtRmlib25hY2NpIEYoNTUsIDI0LCArKSB3aXRoIGEgbW9kaWZpZWQgYWRkaXRpb25cbiAgIGZ1bmN0aW9uIHRvIGVuaGFuY2UgdGhlIG1peGluZyBvZiBiaXRzLlxuICAgSWYgd2UgdXNlIG5vcm1hbCBhZGRpdGlvbiwgdGhlIGxvdy1vcmRlciBiaXQgZmFpbHMgdGVzdHMgMSBhbmQgN1xuICAgb2YgdGhlIERpZWhhcmQgdGVzdCBzdWl0ZSwgYW5kIGJpdHMgMSBhbmQgMiBhbHNvIGZhaWwgdGVzdCA3LlxuICAgSWYgd2UgdXNlIG11bHRpcGxpY2F0aW9uIGFzIHN1Z2dlc3RlZCBieSBNYXJzYWdsaWEsIGl0IGRvZXNuJ3QgZmFyZVxuICAgbXVjaCBiZXR0ZXIuXG4gICBCeSBtaXhpbmcgdGhlIGJpdHMgb2Ygb25lIG9mIHRoZSBudW1iZXJzIGJlZm9yZSBhZGRpdGlvbiAoWE9SIHRoZVxuICAgNSBoaWdoLW9yZGVyIGJpdHMgaW50byB0aGUgbG93LW9yZGVyIGJpdHMpLCB3ZSBnZXQgYSBnZW5lcmF0b3IgdGhhdFxuICAgcGFzc2VzIGFsbCB0aGUgRGllaGFyZCB0ZXN0cy5cbiopXG5cbmV4dGVybmFsIHJhbmRvbV9zZWVkOiB1bml0IC0+IGludCBhcnJheSA9IFwiY2FtbF9zeXNfcmFuZG9tX3NlZWRcIlxuXG5tb2R1bGUgU3RhdGUgPSBzdHJ1Y3RcblxuICB0eXBlIHQgPSB7IHN0IDogaW50IGFycmF5OyBtdXRhYmxlIGlkeCA6IGludCB9XG5cbiAgbGV0IG5ld19zdGF0ZSAoKSA9IHsgc3QgPSBBcnJheS5tYWtlIDU1IDA7IGlkeCA9IDAgfVxuICBsZXQgYXNzaWduIHN0MSBzdDIgPVxuICAgIEFycmF5LmJsaXQgc3QyLnN0IDAgc3QxLnN0IDAgNTU7XG4gICAgc3QxLmlkeCA8LSBzdDIuaWR4XG5cblxuICBsZXQgZnVsbF9pbml0IHMgc2VlZCA9XG4gICAgbGV0IGNvbWJpbmUgYWNjdSB4ID0gRGlnZXN0LnN0cmluZyAoYWNjdSBeIEludC50b19zdHJpbmcgeCkgaW5cbiAgICBsZXQgZXh0cmFjdCBkID1cbiAgICAgIENoYXIuY29kZSBkLlswXSArIChDaGFyLmNvZGUgZC5bMV0gbHNsIDgpICsgKENoYXIuY29kZSBkLlsyXSBsc2wgMTYpXG4gICAgICArIChDaGFyLmNvZGUgZC5bM10gbHNsIDI0KVxuICAgIGluXG4gICAgbGV0IHNlZWQgPSBpZiBBcnJheS5sZW5ndGggc2VlZCA9IDAgdGhlbiBbfCAwIHxdIGVsc2Ugc2VlZCBpblxuICAgIGxldCBsID0gQXJyYXkubGVuZ3RoIHNlZWQgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgZG9cbiAgICAgIHMuc3QuKGkpIDwtIGk7XG4gICAgZG9uZTtcbiAgICBsZXQgYWNjdSA9IHJlZiBcInhcIiBpblxuICAgIGZvciBpID0gMCB0byA1NCArIEludC5tYXggNTUgbCBkb1xuICAgICAgbGV0IGogPSBpIG1vZCA1NSBpblxuICAgICAgbGV0IGsgPSBpIG1vZCBsIGluXG4gICAgICBhY2N1IDo9IGNvbWJpbmUgIWFjY3Ugc2VlZC4oayk7XG4gICAgICBzLnN0LihqKSA8LSAocy5zdC4oaikgbHhvciBleHRyYWN0ICFhY2N1KSBsYW5kIDB4M0ZGRkZGRkY7ICAoKiBQUiM1NTc1ICopXG4gICAgZG9uZTtcbiAgICBzLmlkeCA8LSAwXG5cblxuICBsZXQgbWFrZSBzZWVkID1cbiAgICBsZXQgcmVzdWx0ID0gbmV3X3N0YXRlICgpIGluXG4gICAgZnVsbF9pbml0IHJlc3VsdCBzZWVkO1xuICAgIHJlc3VsdFxuXG5cbiAgbGV0IG1ha2Vfc2VsZl9pbml0ICgpID0gbWFrZSAocmFuZG9tX3NlZWQgKCkpXG5cbiAgbGV0IGNvcHkgcyA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGFzc2lnbiByZXN1bHQgcztcbiAgICByZXN1bHRcblxuXG4gICgqIFJldHVybnMgMzAgcmFuZG9tIGJpdHMgYXMgYW4gaW50ZWdlciAwIDw9IHggPCAxMDczNzQxODI0ICopXG4gIGxldCBiaXRzIHMgPVxuICAgIHMuaWR4IDwtIChzLmlkeCArIDEpIG1vZCA1NTtcbiAgICBsZXQgY3VydmFsID0gcy5zdC4ocy5pZHgpIGluXG4gICAgbGV0IG5ld3ZhbCA9IHMuc3QuKChzLmlkeCArIDI0KSBtb2QgNTUpXG4gICAgICAgICAgICAgICAgICsgKGN1cnZhbCBseG9yICgoY3VydmFsIGxzciAyNSkgbGFuZCAweDFGKSkgaW5cbiAgICBsZXQgbmV3dmFsMzAgPSBuZXd2YWwgbGFuZCAweDNGRkZGRkZGIGluICAoKiBQUiM1NTc1ICopXG4gICAgcy5zdC4ocy5pZHgpIDwtIG5ld3ZhbDMwO1xuICAgIG5ld3ZhbDMwXG5cblxuICBsZXQgcmVjIGludGF1eCBzIG4gPVxuICAgIGxldCByID0gYml0cyBzIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiAweDNGRkZGRkZGIC0gbiArIDEgdGhlbiBpbnRhdXggcyBuIGVsc2UgdlxuXG4gIGxldCBpbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPiAweDNGRkZGRkZGIHx8IGJvdW5kIDw9IDBcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludFwiXG4gICAgZWxzZSBpbnRhdXggcyBib3VuZFxuXG4gIGxldCByZWMgaW50NjNhdXggcyBuID1cbiAgICBsZXQgbWF4X2ludF8zMiA9ICgxIGxzbCAzMCkgKyAweDNGRkZGRkZGIGluICgqIDB4N0ZGRkZGRkYgKilcbiAgICBsZXQgYjEgPSBiaXRzIHMgaW5cbiAgICBsZXQgYjIgPSBiaXRzIHMgaW5cbiAgICBsZXQgKHIsIG1heF9pbnQpID1cbiAgICAgIGlmIG4gPD0gbWF4X2ludF8zMiB0aGVuXG4gICAgICAgICgqIDMxIHJhbmRvbSBiaXRzIG9uIGJvdGggNjQtYml0IE9DYW1sIGFuZCBKYXZhU2NyaXB0LlxuICAgICAgICAgICBVc2UgdXBwZXIgMTUgYml0cyBvZiBiMSBhbmQgMTYgYml0cyBvZiBiMi4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKGIyIGxhbmQgMHgzRkZGQzAwMCkgbHNsIDEpIGxvciAoYjEgbHNyIDE1KSlcbiAgICAgICAgaW5cbiAgICAgICAgICAoYnBvcywgbWF4X2ludF8zMilcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IGIzID0gYml0cyBzIGluXG4gICAgICAgICgqIDYyIHJhbmRvbSBiaXRzIG9uIDY0LWJpdCBPQ2FtbDsgdW5yZWFjaGFibGUgb24gSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDIwIGJpdHMgb2YgYjEgYW5kIDIxIGJpdHMgb2YgYjIgYW5kIGIzLiAqKVxuICAgICAgICBsZXQgYnBvcyA9XG4gICAgICAgICAgKCgoKGIzIGxhbmQgMHgzRkZGRkUwMCkgbHNsIDEyKSBsb3IgKGIyIGxzciA5KSkgbHNsIDIwKVxuICAgICAgICAgICAgbG9yIChiMSBsc3IgMTApXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnQpXG4gICAgaW5cbiAgICBsZXQgdiA9IHIgbW9kIG4gaW5cbiAgICBpZiByIC0gdiA+IG1heF9pbnQgLSBuICsgMSB0aGVuIGludDYzYXV4IHMgbiBlbHNlIHZcblxuICBsZXQgZnVsbF9pbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5mdWxsX2ludFwiXG4gICAgZWxzZSBpZiBib3VuZCA+IDB4M0ZGRkZGRkYgdGhlblxuICAgICAgaW50NjNhdXggcyBib3VuZFxuICAgIGVsc2VcbiAgICAgIGludGF1eCBzIGJvdW5kXG5cblxuICBsZXQgcmVjIGludDMyYXV4IHMgbiA9XG4gICAgbGV0IGIxID0gSW50MzIub2ZfaW50IChiaXRzIHMpIGluXG4gICAgbGV0IGIyID0gSW50MzIuc2hpZnRfbGVmdCAoSW50MzIub2ZfaW50IChiaXRzIHMgbGFuZCAxKSkgMzAgaW5cbiAgICBsZXQgciA9IEludDMyLmxvZ29yIGIxIGIyIGluXG4gICAgbGV0IHYgPSBJbnQzMi5yZW0gciBuIGluXG4gICAgaWYgSW50MzIuc3ViIHIgdiA+IEludDMyLmFkZCAoSW50MzIuc3ViIEludDMyLm1heF9pbnQgbikgMWxcbiAgICB0aGVuIGludDMyYXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQzMiBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50MzJcIlxuICAgIGVsc2UgaW50MzJhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQ2NGF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDY0Lm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDY0LnNoaWZ0X2xlZnQgKEludDY0Lm9mX2ludCAoYml0cyBzKSkgMzAgaW5cbiAgICBsZXQgYjMgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcyBsYW5kIDcpKSA2MCBpblxuICAgIGxldCByID0gSW50NjQubG9nb3IgYjEgKEludDY0LmxvZ29yIGIyIGIzKSBpblxuICAgIGxldCB2ID0gSW50NjQucmVtIHIgbiBpblxuICAgIGlmIEludDY0LnN1YiByIHYgPiBJbnQ2NC5hZGQgKEludDY0LnN1YiBJbnQ2NC5tYXhfaW50IG4pIDFMXG4gICAgdGhlbiBpbnQ2NGF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50NjQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMExcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDY0XCJcbiAgICBlbHNlIGludDY0YXV4IHMgYm91bmRcblxuXG4gIGxldCBuYXRpdmVpbnQgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIGJvdW5kIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoaW50MzIgcyAoTmF0aXZlaW50LnRvX2ludDMyIGJvdW5kKSlcbiAgICBlbHNlIGZ1biBzIGJvdW5kIC0+IEludDY0LnRvX25hdGl2ZWludCAoaW50NjQgcyAoSW50NjQub2ZfbmF0aXZlaW50IGJvdW5kKSlcblxuXG4gICgqIFJldHVybnMgYSBmbG9hdCAwIDw9IHggPD0gMSB3aXRoIGF0IG1vc3QgNjAgYml0cyBvZiBwcmVjaXNpb24uICopXG4gIGxldCByYXdmbG9hdCBzID1cbiAgICBsZXQgc2NhbGUgPSAxMDczNzQxODI0LjAgICgqIDJeMzAgKilcbiAgICBhbmQgcjEgPSBTdGRsaWIuZmxvYXQgKGJpdHMgcylcbiAgICBhbmQgcjIgPSBTdGRsaWIuZmxvYXQgKGJpdHMgcylcbiAgICBpbiAocjEgLy4gc2NhbGUgKy4gcjIpIC8uIHNjYWxlXG5cblxuICBsZXQgZmxvYXQgcyBib3VuZCA9IHJhd2Zsb2F0IHMgKi4gYm91bmRcblxuICBsZXQgYm9vbCBzID0gKGJpdHMgcyBsYW5kIDEgPSAwKVxuXG4gIGxldCBiaXRzMzIgcyA9XG4gICAgbGV0IGIxID0gSW50MzIuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgMTQpIGluICAoKiAxNiBiaXRzICopXG4gICAgbGV0IGIyID0gSW50MzIuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgMTQpIGluICAoKiAxNiBiaXRzICopXG4gICAgSW50MzIuKGxvZ29yIGIxIChzaGlmdF9sZWZ0IGIyIDE2KSlcblxuICBsZXQgYml0czY0IHMgPVxuICAgIGxldCBiMSA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDkpIGluICAoKiAyMSBiaXRzICopXG4gICAgbGV0IGIyID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOSkgaW4gICgqIDIxIGJpdHMgKilcbiAgICBsZXQgYjMgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA4KSBpbiAgKCogMjIgYml0cyAqKVxuICAgIEludDY0Lihsb2dvciBiMSAobG9nb3IgKHNoaWZ0X2xlZnQgYjIgMjEpIChzaGlmdF9sZWZ0IGIzIDQyKSkpXG5cbiAgbGV0IG5hdGl2ZWJpdHMgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoYml0czMyIHMpXG4gICAgZWxzZSBmdW4gcyAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGJpdHM2NCBzKVxuXG5lbmRcblxuKCogVGhpcyBpcyB0aGUgc3RhdGUgeW91IGdldCB3aXRoIFtpbml0IDI3MTgyODE4XSBhbmQgdGhlbiBhcHBseWluZ1xuICAgdGhlIFwibGFuZCAweDNGRkZGRkZGXCIgZmlsdGVyIHRvIHRoZW0uICBTZWUgIzU1NzUsICM1NzkzLCAjNTk3Ny4gKilcbmxldCBkZWZhdWx0ID0ge1xuICBTdGF0ZS5zdCA9IFt8XG4gICAgICAweDNhZTI1MjJiOyAweDFkOGQ0NjM0OyAweDE1YjRmYWQwOyAweDE4YjE0YWNlOyAweDEyZjhhM2M0OyAweDNiMDg2YzQ3O1xuICAgICAgMHgxNmQ0NjdkNjsgMHgxMDFkOTFjNzsgMHgzMjFkZjE3NzsgMHgwMTc2YzE5MzsgMHgxZmY3MmJmMTsgMHgxZTg4OTEwOTtcbiAgICAgIDB4MGI0NjRiMTg7IDB4MmI4NmI5N2M7IDB4MDg5MWRhNDg7IDB4MDMxMzc0NjM7IDB4MDg1YWM1YTE7IDB4MTVkNjFmMmY7XG4gICAgICAweDNiY2VkMzU5OyAweDI5YzFjMTMyOyAweDNhODY3NjZlOyAweDM2NmQ4Yzg2OyAweDFmNWI2MjIyOyAweDNjZTFiNTlmO1xuICAgICAgMHgyZWJmNzhlMTsgMHgyN2NkMWI4NjsgMHgyNThmM2RjMzsgMHgzODlhODE5NDsgMHgwMmU0YzQ0YzsgMHgxOGM0M2Y3ZDtcbiAgICAgIDB4MGY2ZTUzNGY7IDB4MWU3ZGYzNTk7IDB4MDU1ZDBiN2U7IDB4MTBlODRlN2U7IDB4MTI2MTk4ZTQ7IDB4MGU3NzIyY2I7XG4gICAgICAweDFjYmVkZTI4OyAweDMzOTFiOTY0OyAweDNkNDBlOTJhOyAweDBjNTk5MzNkOyAweDBiOGNkMGI3OyAweDI0ZWZmZjFjO1xuICAgICAgMHgyODAzZmRhYTsgMHgwOGViYzcyZTsgMHgwZjUyMmUzMjsgMHgwNTM5OGVkYzsgMHgyMTQ0YTA0YzsgMHgwYWVmM2NiZDtcbiAgICAgIDB4MDFhZDQ3MTk7IDB4MzViOTNjZDY7IDB4MmE1NTlkNGY7IDB4MWU2ZmQ3Njg7IDB4MjZlMjdmMzY7IDB4MTg2ZjE4YzM7XG4gICAgICAweDJmYmY5NjdhO1xuICAgIHxdO1xuICBTdGF0ZS5pZHggPSAwO1xufVxuXG5sZXQgYml0cyAoKSA9IFN0YXRlLmJpdHMgZGVmYXVsdFxubGV0IGludCBib3VuZCA9IFN0YXRlLmludCBkZWZhdWx0IGJvdW5kXG5sZXQgZnVsbF9pbnQgYm91bmQgPSBTdGF0ZS5mdWxsX2ludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50MzIgYm91bmQgPSBTdGF0ZS5pbnQzMiBkZWZhdWx0IGJvdW5kXG5sZXQgbmF0aXZlaW50IGJvdW5kID0gU3RhdGUubmF0aXZlaW50IGRlZmF1bHQgYm91bmRcbmxldCBpbnQ2NCBib3VuZCA9IFN0YXRlLmludDY0IGRlZmF1bHQgYm91bmRcbmxldCBmbG9hdCBzY2FsZSA9IFN0YXRlLmZsb2F0IGRlZmF1bHQgc2NhbGVcbmxldCBib29sICgpID0gU3RhdGUuYm9vbCBkZWZhdWx0XG5sZXQgYml0czMyICgpID0gU3RhdGUuYml0czMyIGRlZmF1bHRcbmxldCBiaXRzNjQgKCkgPSBTdGF0ZS5iaXRzNjQgZGVmYXVsdFxubGV0IG5hdGl2ZWJpdHMgKCkgPSBTdGF0ZS5uYXRpdmViaXRzIGRlZmF1bHRcblxubGV0IGZ1bGxfaW5pdCBzZWVkID0gU3RhdGUuZnVsbF9pbml0IGRlZmF1bHQgc2VlZFxubGV0IGluaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IFt8IHNlZWQgfF1cbmxldCBzZWxmX2luaXQgKCkgPSBmdWxsX2luaXQgKHJhbmRvbV9zZWVkKCkpXG5cbigqIE1hbmlwdWxhdGluZyB0aGUgY3VycmVudCBzdGF0ZS4gKilcblxubGV0IGdldF9zdGF0ZSAoKSA9IFN0YXRlLmNvcHkgZGVmYXVsdFxubGV0IHNldF9zdGF0ZSBzID0gU3RhdGUuYXNzaWduIGRlZmF1bHQgc1xuXG4oKioqKioqKioqKioqKioqKioqKipcblxuKCogVGVzdCBmdW5jdGlvbnMuICBOb3QgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkuXG4gICBUaGUgW2NoaXNxdWFyZV0gZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG4gPiAxMHIuXG4gICBJdCByZXR1cm5zIGEgdHJpcGxlIChsb3csIGFjdHVhbCwgaGlnaCkuXG4gICBJZiBsb3cgPD0gYWN0dWFsIDw9IGhpZ2gsIHRoZSBbZ10gZnVuY3Rpb24gcGFzc2VkIHRoZSB0ZXN0LFxuICAgb3RoZXJ3aXNlIGl0IGZhaWxlZC5cblxuICBTb21lIHJlc3VsdHM6XG5cbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgNTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAwIDEwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMjk5NzkyNjQzOyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDE0MTQyMTM2OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAyNDsgY2hpc3F1YXJlIGRpZmYgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZiAxMDA7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZjIgMTAyNDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMTQxNDIxMzY7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuaW5pdCAyOTk3OTI2NDM7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5MzYuNzU0NDQ2Nzk2NjMyNDY1LCA5OTcuNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg5Ljc0MDAwMDAwMDAwNTIzODcsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoNDg1OC41Nzg2NDM3NjI2OSwgNTA0NS41LCA1MTQxLjQyMTM1NjIzNzMxKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID1cbig5MzYuNzU0NDQ2Nzk2NjMyNDY1LCA5NDQuODA1OTk5OTk5OTgyMzA1LCAxMDYzLjI0NTU1MzIwMzM2NzU0KVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwMTkuMTk3NDQwMDAwMDAzNTUsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwNTkuMzE3NzYwMDAwMDA1MzYsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwMzkuOTg0NjM5OTk5OTk1MTIsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwNTQuMzgyMDc5OTk5OTk1NzcsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgOTAuMDk2MDAwMDAwMDA1LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwNzYuNzg3MjAwMDAwMDA2MTIsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODUuMTc2MDAwMDAwMDA2NzUyMSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjIxNjAwMDAwMDAwMDM0OTIsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4MC42MjIwMDAwMDAwMDMwMjY4LCAxMjAuKVxuXG4qKVxuXG4oKiBSZXR1cm4gdGhlIHN1bSBvZiB0aGUgc3F1YXJlcyBvZiB2W2kwLGkxWyAqKVxubGV0IHJlYyBzdW1zcSB2IGkwIGkxID1cbiAgaWYgaTAgPj0gaTEgdGhlbiAwLjBcbiAgZWxzZSBpZiBpMSA9IGkwICsgMSB0aGVuIFN0ZGxpYi5mbG9hdCB2LihpMCkgKi4gU3RkbGliLmZsb2F0IHYuKGkwKVxuICBlbHNlIHN1bXNxIHYgaTAgKChpMCtpMSkvMikgKy4gc3Vtc3EgdiAoKGkwK2kxKS8yKSBpMVxuXG5cbmxldCBjaGlzcXVhcmUgZyBuIHIgPVxuICBpZiBuIDw9IDEwICogciB0aGVuIGludmFsaWRfYXJnIFwiY2hpc3F1YXJlXCI7XG4gIGxldCBmID0gQXJyYXkubWFrZSByIDAgaW5cbiAgZm9yIGkgPSAxIHRvIG4gZG9cbiAgICBsZXQgdCA9IGcgciBpblxuICAgIGYuKHQpIDwtIGYuKHQpICsgMVxuICBkb25lO1xuICBsZXQgdCA9IHN1bXNxIGYgMCByXG4gIGFuZCByID0gU3RkbGliLmZsb2F0IHJcbiAgYW5kIG4gPSBTdGRsaWIuZmxvYXQgbiBpblxuICBsZXQgc3IgPSAyLjAgKi4gc3FydCByIGluXG4gIChyIC0uIHNyLCAgIChyICouIHQgLy4gbikgLS4gbiwgICByICsuIHNyKVxuXG5cbigqIFRoaXMgaXMgdG8gdGVzdCBmb3IgbGluZWFyIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcmFuZG9tIG51bWJlcnMuXG4qKVxubGV0IHN0ID0gcmVmIDBcbmxldCBpbml0X2RpZmYgciA9IHN0IDo9IGludCByXG5sZXQgZGlmZiByID1cbiAgbGV0IHgxID0gIXN0XG4gIGFuZCB4MiA9IGludCByXG4gIGluXG4gIHN0IDo9IHgyO1xuICBpZiB4MSA+PSB4MiB0aGVuXG4gICAgeDEgLSB4MlxuICBlbHNlXG4gICAgciArIHgxIC0geDJcblxuXG5sZXQgc3QxID0gcmVmIDBcbmFuZCBzdDIgPSByZWYgMFxuXG5cbigqIFRoaXMgaXMgdG8gdGVzdCBmb3IgcXVhZHJhdGljIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcmFuZG9tXG4gICBudW1iZXJzLlxuKilcbmxldCBpbml0X2RpZmYyIHIgPSBzdDEgOj0gaW50IHI7IHN0MiA6PSBpbnQgclxubGV0IGRpZmYyIHIgPVxuICBsZXQgeDEgPSAhc3QxXG4gIGFuZCB4MiA9ICFzdDJcbiAgYW5kIHgzID0gaW50IHJcbiAgaW5cbiAgc3QxIDo9IHgyO1xuICBzdDIgOj0geDM7XG4gICh4MyAtIHgyIC0geDIgKyB4MSArIDIqcikgbW9kIHJcblxuXG4qKioqKioqKioqKioqKioqKioqKilcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQW4gYWxpYXMgZm9yIHRoZSB0eXBlIG9mIGxpc3RzLiAqKVxudHlwZSAnYSB0ID0gJ2EgbGlzdCA9IFtdIHwgKDo6KSBvZiAnYSAqICdhIGxpc3RcblxuKCogTGlzdCBvcGVyYXRpb25zICopXG5cbmxldCByZWMgbGVuZ3RoX2F1eCBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGxlblxuICB8IF86OmwgLT4gbGVuZ3RoX2F1eCAobGVuICsgMSkgbFxuXG5sZXQgbGVuZ3RoIGwgPSBsZW5ndGhfYXV4IDAgbFxuXG5sZXQgY29ucyBhIGwgPSBhOjpsXG5cbmxldCBoZCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFpbHdpdGggXCJoZFwiXG4gIHwgYTo6XyAtPiBhXG5cbmxldCB0bCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFpbHdpdGggXCJ0bFwiXG4gIHwgXzo6bCAtPiBsXG5cbmxldCBudGggbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhaWx3aXRoIFwibnRoXCJcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBhIGVsc2UgbnRoX2F1eCBsIChuLTEpXG4gIGluIG50aF9hdXggbCBuXG5cbmxldCBudGhfb3B0IGwgbiA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0Lm50aFwiIGVsc2VcbiAgbGV0IHJlYyBudGhfYXV4IGwgbiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCBhOjpsIC0+IGlmIG4gPSAwIHRoZW4gU29tZSBhIGVsc2UgbnRoX2F1eCBsIChuLTEpXG4gIGluIG50aF9hdXggbCBuXG5cbmxldCBhcHBlbmQgPSAoQClcblxubGV0IHJlYyByZXZfYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICAgIFtdIC0+IGwyXG4gIHwgYSA6OiBsIC0+IHJldl9hcHBlbmQgbCAoYSA6OiBsMilcblxubGV0IHJldiBsID0gcmV2X2FwcGVuZCBsIFtdXG5cbmxldCByZWMgaW5pdF90YWlscmVjX2F1eCBhY2MgaSBuIGYgPVxuICBpZiBpID49IG4gdGhlbiBhY2NcbiAgZWxzZSBpbml0X3RhaWxyZWNfYXV4IChmIGkgOjogYWNjKSAoaSsxKSBuIGZcblxubGV0IHJlYyBpbml0X2F1eCBpIG4gZiA9XG4gIGlmIGkgPj0gbiB0aGVuIFtdXG4gIGVsc2VcbiAgICBsZXQgciA9IGYgaSBpblxuICAgIHIgOjogaW5pdF9hdXggKGkrMSkgbiBmXG5cbmxldCByZXZfaW5pdF90aHJlc2hvbGQgPVxuICBtYXRjaCBTeXMuYmFja2VuZF90eXBlIHdpdGhcbiAgfCBTeXMuTmF0aXZlIHwgU3lzLkJ5dGVjb2RlIC0+IDEwXzAwMFxuICAoKiBXZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIHRoZSBzdGFjaywgYmV0dGVyIGJlIHNhZmUgYW5kIGFzc3VtZSBpdCdzXG4gICAgIHNtYWxsLiAqKVxuICB8IFN5cy5PdGhlciBfIC0+IDUwXG5cbmxldCBpbml0IGxlbiBmID1cbiAgaWYgbGVuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5pbml0XCIgZWxzZVxuICBpZiBsZW4gPiByZXZfaW5pdF90aHJlc2hvbGQgdGhlbiByZXYgKGluaXRfdGFpbHJlY19hdXggW10gMCBsZW4gZilcbiAgZWxzZSBpbml0X2F1eCAwIGxlbiBmXG5cbmxldCByZWMgZmxhdHRlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBsOjpyIC0+IGwgQCBmbGF0dGVuIHJcblxubGV0IGNvbmNhdCA9IGZsYXR0ZW5cblxubGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBhOjpsIC0+IGxldCByID0gZiBhIGluIHIgOjogbWFwIGYgbFxuXG5sZXQgcmVjIG1hcGkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGE6OmwgLT4gbGV0IHIgPSBmIGkgYSBpbiByIDo6IG1hcGkgKGkgKyAxKSBmIGxcblxubGV0IG1hcGkgZiBsID0gbWFwaSAwIGYgbFxuXG5sZXQgcmV2X21hcCBmIGwgPVxuICBsZXQgcmVjIHJtYXBfZiBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGFjY3VcbiAgICB8IGE6OmwgLT4gcm1hcF9mIChmIGEgOjogYWNjdSkgbFxuICBpblxuICBybWFwX2YgW10gbFxuXG5cbmxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBhOyBpdGVyIGYgbFxuXG5sZXQgcmVjIGl0ZXJpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKClcbiAgfCBhOjpsIC0+IGYgaSBhOyBpdGVyaSAoaSArIDEpIGYgbFxuXG5sZXQgaXRlcmkgZiBsID0gaXRlcmkgMCBmIGxcblxubGV0IHJlYyBmb2xkX2xlZnQgZiBhY2N1IGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmb2xkX2xlZnQgZiAoZiBhY2N1IGEpIGxcblxubGV0IHJlYyBmb2xkX3JpZ2h0IGYgbCBhY2N1ID1cbiAgbWF0Y2ggbCB3aXRoXG4gICAgW10gLT4gYWNjdVxuICB8IGE6OmwgLT4gZiBhIChmb2xkX3JpZ2h0IGYgbCBhY2N1KVxuXG5sZXQgcmVjIG1hcDIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gbGV0IHIgPSBmIGExIGEyIGluIHIgOjogbWFwMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5tYXAyXCJcblxubGV0IHJldl9tYXAyIGYgbDEgbDIgPVxuICBsZXQgcmVjIHJtYXAyX2YgYWNjdSBsMSBsMiA9XG4gICAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIHwgKFtdLCBbXSkgLT4gYWNjdVxuICAgIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBybWFwMl9mIChmIGExIGEyIDo6IGFjY3UpIGwxIGwyXG4gICAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LnJldl9tYXAyXCJcbiAgaW5cbiAgcm1hcDJfZiBbXSBsMSBsMlxuXG5cbmxldCByZWMgaXRlcjIgZiBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiAoKVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMjsgaXRlcjIgZiBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuaXRlcjJcIlxuXG5sZXQgcmVjIGZvbGRfbGVmdDIgZiBhY2N1IGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGFjY3VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGZvbGRfbGVmdDIgZiAoZiBhY2N1IGExIGEyKSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9sZWZ0MlwiXG5cbmxldCByZWMgZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1ID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGFjY3VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGYgYTEgYTIgKGZvbGRfcmlnaHQyIGYgbDEgbDIgYWNjdSlcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvbGRfcmlnaHQyXCJcblxubGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IHRydWVcbiAgfCBhOjpsIC0+IHAgYSAmJiBmb3JfYWxsIHAgbFxuXG5sZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gcCBhIHx8IGV4aXN0cyBwIGxcblxubGV0IHJlYyBmb3JfYWxsMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IHRydWVcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHAgYTEgYTIgJiYgZm9yX2FsbDIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9yX2FsbDJcIlxuXG5sZXQgcmVjIGV4aXN0czIgcCBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBmYWxzZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiB8fCBleGlzdHMyIHAgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmV4aXN0czJcIlxuXG5sZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gY29tcGFyZSBhIHggPSAwIHx8IG1lbSB4IGxcblxubGV0IHJlYyBtZW1xIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBhID09IHggfHwgbWVtcSB4IGxcblxubGV0IHJlYyBhc3NvYyB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAoYSxiKTo6bCAtPiBpZiBjb21wYXJlIGEgeCA9IDAgdGhlbiBiIGVsc2UgYXNzb2MgeCBsXG5cbmxldCByZWMgYXNzb2Nfb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBjb21wYXJlIGEgeCA9IDAgdGhlbiBTb21lIGIgZWxzZSBhc3NvY19vcHQgeCBsXG5cbmxldCByZWMgYXNzcSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBiIGVsc2UgYXNzcSB4IGxcblxubGV0IHJlYyBhc3NxX29wdCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBOb25lXG4gIHwgKGEsYik6OmwgLT4gaWYgYSA9PSB4IHRoZW4gU29tZSBiIGVsc2UgYXNzcV9vcHQgeCBsXG5cbmxldCByZWMgbWVtX2Fzc29jIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gY29tcGFyZSBhIHggPSAwIHx8IG1lbV9hc3NvYyB4IGxcblxubGV0IHJlYyBtZW1fYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWxzZVxuICB8IChhLCBfKSA6OiBsIC0+IGEgPT0geCB8fCBtZW1fYXNzcSB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCAoYSwgXyBhcyBwYWlyKSA6OiBsIC0+XG4gICAgICBpZiBjb21wYXJlIGEgeCA9IDAgdGhlbiBsIGVsc2UgcGFpciA6OiByZW1vdmVfYXNzb2MgeCBsXG5cbmxldCByZWMgcmVtb3ZlX2Fzc3EgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW11cbiAgfCAoYSwgXyBhcyBwYWlyKSA6OiBsIC0+IGlmIGEgPT0geCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NxIHggbFxuXG5sZXQgcmVjIGZpbmQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHggZWxzZSBmaW5kIHAgbFxuXG5sZXQgcmVjIGZpbmRfb3B0IHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gU29tZSB4IGVsc2UgZmluZF9vcHQgcCBsXG5cbmxldCByZWMgZmluZF9tYXAgZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPlxuICAgICBiZWdpbiBtYXRjaCBmIHggd2l0aFxuICAgICAgIHwgU29tZSBfIGFzIHJlc3VsdCAtPiByZXN1bHRcbiAgICAgICB8IE5vbmUgLT4gZmluZF9tYXAgZiBsXG4gICAgIGVuZFxuXG5sZXQgZmluZF9hbGwgcCA9XG4gIGxldCByZWMgZmluZCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByZXYgYWNjdVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBmaW5kICh4IDo6IGFjY3UpIGwgZWxzZSBmaW5kIGFjY3UgbCBpblxuICBmaW5kIFtdXG5cbmxldCBmaWx0ZXIgPSBmaW5kX2FsbFxuXG5sZXQgZmlsdGVyaSBwIGwgPVxuICBsZXQgcmVjIGF1eCBpIGFjYyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmV2IGFjY1xuICB8IHg6OmwgLT4gYXV4IChpICsgMSkgKGlmIHAgaSB4IHRoZW4geDo6YWNjIGVsc2UgYWNjKSBsXG4gIGluXG4gIGF1eCAwIFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiA9XG4gIGxldCByZWMgYXV4IGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmV2IGFjY3VcbiAgICB8IHggOjogbCAtPlxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYXV4IGFjY3UgbFxuICAgICAgICB8IFNvbWUgdiAtPiBhdXggKHYgOjogYWNjdSkgbFxuICBpblxuICBhdXggW11cblxubGV0IGNvbmNhdF9tYXAgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmV2IGFjY1xuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgbGV0IHhzID0gZiB4IGluXG4gICAgICAgYXV4IGYgKHJldl9hcHBlbmQgeHMgYWNjKSBsXG4gIGluIGF1eCBmIFtdIGxcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2N1IGwgPVxuICBsZXQgcmVjIGF1eCBhY2N1IGxfYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1LCByZXYgbF9hY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbGV0IGFjY3UsIHggPSBmIGFjY3UgeCBpblxuICAgICAgICBhdXggYWNjdSAoeCA6OiBsX2FjY3UpIGwgaW5cbiAgYXV4IGFjY3UgW10gbFxuXG5sZXQgcGFydGl0aW9uIHAgbCA9XG4gIGxldCByZWMgcGFydCB5ZXMgbm8gPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgeWVzLCByZXYgbm8pXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIHBhcnQgKHggOjogeWVzKSBubyBsIGVsc2UgcGFydCB5ZXMgKHggOjogbm8pIGwgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwIHAgbCA9XG4gIGxldCByZWMgcGFydCBsZWZ0IHJpZ2h0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IGxlZnQsIHJldiByaWdodClcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggcCB4IHdpdGhcbiAgICAgICB8IEVpdGhlci5MZWZ0IHYgLT4gcGFydCAodiA6OiBsZWZ0KSByaWdodCBsXG4gICAgICAgfCBFaXRoZXIuUmlnaHQgdiAtPiBwYXJ0IGxlZnQgKHYgOjogcmlnaHQpIGxcbiAgICAgZW5kXG4gIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcmVjIHNwbGl0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoW10sIFtdKVxuICB8ICh4LHkpOjpsIC0+XG4gICAgICBsZXQgKHJ4LCByeSkgPSBzcGxpdCBsIGluICh4OjpyeCwgeTo6cnkpXG5cbmxldCByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBbXVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gKGExLCBhMikgOjogY29tYmluZSBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuY29tYmluZVwiXG5cbigqKiBzb3J0aW5nICopXG5cbmxldCByZWMgbWVyZ2UgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgbDIgLT4gbDJcbiAgfCBsMSwgW10gLT4gbDFcbiAgfCBoMSA6OiB0MSwgaDIgOjogdDIgLT5cbiAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICB0aGVuIGgxIDo6IG1lcmdlIGNtcCB0MSBsMlxuICAgICAgZWxzZSBoMiA6OiBtZXJnZSBjbXAgbDEgdDJcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgaWYgY21wIGgxIGgyID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyIDw9IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPD0gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBpZiBjbXAgeDEgeDIgPiAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgc29ydCA9IHN0YWJsZV9zb3J0XG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCogTm90ZTogb24gYSBsaXN0IG9mIGxlbmd0aCBiZXR3ZWVuIGFib3V0IDEwMDAwMCAoZGVwZW5kaW5nIG9uIHRoZSBtaW5vclxuICAgaGVhcCBzaXplIGFuZCB0aGUgdHlwZSBvZiB0aGUgbGlzdCkgYW5kIFN5cy5tYXhfYXJyYXlfc2l6ZSwgaXQgaXNcbiAgIGFjdHVhbGx5IGZhc3RlciB0byB1c2UgdGhlIGZvbGxvd2luZywgYnV0IGl0IG1pZ2h0IGFsc28gdXNlIG1vcmUgbWVtb3J5XG4gICBiZWNhdXNlIHRoZSBhcmd1bWVudCBsaXN0IGNhbm5vdCBiZSBkZWFsbG9jYXRlZCBpbmNyZW1lbnRhbGx5LlxuXG4gICBBbHNvLCB0aGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyBpbiB0aGlzIGNvZGUgb3IgaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiBvYmpfdHJ1bmNhdGUuXG5cbmV4dGVybmFsIG9ial90cnVuY2F0ZSA6ICdhIGFycmF5IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5cbmxldCBhcnJheV90b19saXN0X2luX3BsYWNlIGEgPVxuICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBhY2N1IG4gcCA9XG4gICAgaWYgcCA8PSAwIHRoZW4gYWNjdSBlbHNlIGJlZ2luXG4gICAgICBpZiBwID0gbiB0aGVuIGJlZ2luXG4gICAgICAgIG9ial90cnVuY2F0ZSBhIHA7XG4gICAgICAgIGxvb3AgKGEuKHAtMSkgOjogYWNjdSkgKG4tMTAwMCkgKHAtMSlcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIGxvb3AgKGEuKHAtMSkgOjogYWNjdSkgbiAocC0xKVxuICAgICAgZW5kXG4gICAgZW5kXG4gIGluXG4gIGxvb3AgW10gKGwtMTAwMCkgbFxuXG5cbmxldCBzdGFibGVfc29ydCBjbXAgbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIEFycmF5LnN0YWJsZV9zb3J0IGNtcCBhO1xuICBhcnJheV90b19saXN0X2luX3BsYWNlIGFcblxuKilcblxuXG4oKiogc29ydGluZyArIHJlbW92aW5nIGR1cGxpY2F0ZXMgKilcblxubGV0IHNvcnRfdW5pcSBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZSB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA8IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2UgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZSBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgcmV2X21lcmdlX3JldiBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjID4gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZV9yZXYgdDEgbDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIHJldl9tZXJnZV9yZXYgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHNvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDJdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzXSBlbHNlIFt4MzsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgxOyB4Ml1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MyBpblxuICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgYyA9IGNtcCB4MiB4MyBpblxuICAgICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gLT4gLTFcbiAgfCBfLCBbXSAtPiAxXG4gIHwgXyA6OiBsMSwgXyA6OiBsMiAtPiBjb21wYXJlX2xlbmd0aHMgbDEgbDJcbjs7XG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhfd2l0aCBsIG4gPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPlxuICAgIGlmIG4gPSAwIHRoZW4gMCBlbHNlXG4gICAgICBpZiBuID4gMCB0aGVuIC0xIGVsc2UgMVxuICB8IF8gOjogbCAtPlxuICAgIGlmIG4gPD0gMCB0aGVuIDEgZWxzZVxuICAgICAgY29tcGFyZV9sZW5ndGhfd2l0aCBsIChuLTEpXG47O1xuXG4oKiogezEgQ29tcGFyaXNvbn0gKilcblxuKCogTm90ZTogd2UgYXJlICpub3QqIHNob3J0Y3V0dGluZyB0aGUgbGlzdCBieSB1c2luZ1xuICAgW0xpc3QuY29tcGFyZV9sZW5ndGhzXSBmaXJzdDsgdGhpcyBtYXkgYmUgc2xvd2VyIG9uIGxvbmcgbGlzdHNcbiAgIGltbWVkaWF0ZWx5IHN0YXJ0IHdpdGggZGlzdGluY3QgZWxlbWVudHMuIEl0IGlzIGFsc28gaW5jb3JyZWN0IGZvclxuICAgW2NvbXBhcmVdIGJlbG93LCBhbmQgaXQgaXMgYmV0dGVyIChwcmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2UpIHRvXG4gICB1c2UgdGhlIHNhbWUgYXBwcm9hY2ggZm9yIGJvdGggZnVuY3Rpb25zLiAqKVxubGV0IHJlYyBlcXVhbCBlcSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IHRydWVcbiAgfCBbXSwgXzo6XyB8IF86Ol8sIFtdIC0+IGZhbHNlXG4gIHwgYTE6OmwxLCBhMjo6bDIgLT4gZXEgYTEgYTIgJiYgZXF1YWwgZXEgbDEgbDJcblxubGV0IHJlYyBjb21wYXJlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXzo6XyAtPiAtMVxuICB8IF86Ol8sIFtdIC0+IDFcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPlxuICAgIGxldCBjID0gY21wIGExIGEyIGluXG4gICAgaWYgYyA8PiAwIHRoZW4gY1xuICAgIGVsc2UgY29tcGFyZSBjbXAgbDEgbDJcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBsID1cbiAgbGV0IHJlYyBhdXggbCAoKSA9IG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gU2VxLk5pbFxuICAgIHwgeCA6OiB0YWlsIC0+IFNlcS5Db25zICh4LCBhdXggdGFpbClcbiAgaW5cbiAgYXV4IGxcblxubGV0IG9mX3NlcSBzZXEgPVxuICBsZXQgcmVjIGRpcmVjdCBkZXB0aCBzZXEgOiBfIGxpc3QgPVxuICAgIGlmIGRlcHRoPTBcbiAgICB0aGVuXG4gICAgICBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBzZXFcbiAgICAgIHw+IHJldiAoKiB0YWlscmVjICopXG4gICAgZWxzZSBtYXRjaCBzZXEoKSB3aXRoXG4gICAgICB8IFNlcS5OaWwgLT4gW11cbiAgICAgIHwgU2VxLkNvbnMgKHgsIG5leHQpIC0+IHggOjogZGlyZWN0IChkZXB0aC0xKSBuZXh0XG4gIGluXG4gIGRpcmVjdCA1MDAgc2VxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE9wZXJhdGlvbnMgb24gaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIG9mIHZhbHVlcyAqKVxuXG50eXBlIHRcblxudHlwZSByYXdfZGF0YSA9IG5hdGl2ZWludFxuXG5leHRlcm5hbCByZXByIDogJ2EgLT4gdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG9iaiA6IHQgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBtYWdpYyA6ICdhIC0+ICdiID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgaXNfaW50IDogdCAtPiBib29sID0gXCIlb2JqX2lzX2ludFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBpc19ibG9jayBhID0gbm90IChpc19pbnQgYSlcbmV4dGVybmFsIHRhZyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial90YWdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2V0X3RhZyA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3NldF90YWdcIlxuZXh0ZXJuYWwgc2l6ZSA6IHQgLT4gaW50ID0gXCIlb2JqX3NpemVcIlxuZXh0ZXJuYWwgcmVhY2hhYmxlX3dvcmRzIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1wiXG5leHRlcm5hbCBmaWVsZCA6IHQgLT4gaW50IC0+IHQgPSBcIiVvYmpfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X2ZpZWxkIDogdCAtPiBpbnQgLT4gdCAtPiB1bml0ID0gXCIlb2JqX3NldF9maWVsZFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfZ2V0XCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfc2V0IDpcbiAgICBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfc2V0XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGRvdWJsZV9maWVsZCB4IGkgPSBmbG9hdGFycmF5X2dldCAob2JqIHggOiBmbG9hdGFycmF5KSBpXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBzZXRfZG91YmxlX2ZpZWxkIHggaSB2ID1cbiAgZmxvYXRhcnJheV9zZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaSB2XG5leHRlcm5hbCByYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSA9IFwiY2FtbF9vYmpfcmF3X2ZpZWxkXCJcbmV4dGVybmFsIHNldF9yYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9vYmpfc2V0X3Jhd19maWVsZFwiXG5cbmV4dGVybmFsIG5ld19ibG9jayA6IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9vYmpfYmxvY2tcIlxuZXh0ZXJuYWwgZHVwIDogdCAtPiB0ID0gXCJjYW1sX29ial9kdXBcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5leHRlcm5hbCBhZGRfb2Zmc2V0IDogdCAtPiBJbnQzMi50IC0+IHQgPSBcImNhbWxfb2JqX2FkZF9vZmZzZXRcIlxuZXh0ZXJuYWwgd2l0aF90YWcgOiBpbnQgLT4gdCAtPiB0ID0gXCJjYW1sX29ial93aXRoX3RhZ1wiXG5cbmxldCBmaXJzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMFxubGV0IGxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDI0NVxuXG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcbmxldCBmaW5hbF90YWcgPSBjdXN0b21fdGFnXG5cblxubGV0IGludF90YWcgPSAxMDAwXG5sZXQgb3V0X29mX2hlYXBfdGFnID0gMTAwMVxubGV0IHVuYWxpZ25lZF90YWcgPSAxMDAyXG5cbm1vZHVsZSBDbG9zdXJlID0gc3RydWN0XG4gIHR5cGUgaW5mbyA9IHtcbiAgICBhcml0eTogaW50O1xuICAgIHN0YXJ0X2VudjogaW50O1xuICB9XG5cbiAgbGV0IGluZm9fb2ZfcmF3IChpbmZvIDogbmF0aXZlaW50KSA9XG4gICAgbGV0IG9wZW4gTmF0aXZlaW50IGluXG4gICAgbGV0IGFyaXR5ID1cbiAgICAgICgqIHNpZ25lZDogbmVnYXRpdmUgZm9yIHR1cGxlZCBmdW5jdGlvbnMgKilcbiAgICAgIGlmIFN5cy53b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyA1NilcbiAgICAgIGVsc2VcbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDI0KVxuICAgIGluXG4gICAgbGV0IHN0YXJ0X2VudiA9XG4gICAgICAoKiBzdGFydF9lbnYgaXMgdW5zaWduZWQsIGJ1dCB3ZSBrbm93IGl0IGNhbiBhbHdheXMgZml0IGFuIE9DYW1sXG4gICAgICAgICBpbnRlZ2VyIHNvIHdlIHVzZSBbdG9faW50XSBpbnN0ZWFkIG9mIFt1bnNpZ25lZF90b19pbnRdLiAqKVxuICAgICAgdG9faW50IChzaGlmdF9yaWdodF9sb2dpY2FsIChzaGlmdF9sZWZ0IGluZm8gOCkgOSkgaW5cbiAgICB7IGFyaXR5OyBzdGFydF9lbnYgfVxuXG4gICgqIG5vdGU6IHdlIGV4cGVjdCBhIGNsb3N1cmUsIG5vdCBhbiBpbmZpeCBwb2ludGVyICopXG4gIGxldCBpbmZvIChvYmogOiB0KSA9XG4gICAgYXNzZXJ0ICh0YWcgb2JqID0gY2xvc3VyZV90YWcpO1xuICAgIGluZm9fb2ZfcmF3IChyYXdfZmllbGQgb2JqIDEpXG5lbmRcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbmxldCBleHRlbnNpb25fY29uc3RydWN0b3IgPSBFeHRlbnNpb25fY29uc3RydWN0b3Iub2ZfdmFsXG5sZXQgZXh0ZW5zaW9uX25hbWUgPSBFeHRlbnNpb25fY29uc3RydWN0b3IubmFtZVxubGV0IGV4dGVuc2lvbl9pZCA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5pZFxuXG5tb2R1bGUgRXBoZW1lcm9uID0gc3RydWN0XG4gIHR5cGUgb2JqX3QgPSB0XG5cbiAgdHlwZSB0ICgqKiBlcGhlbWVyb24gKilcblxuICAgKCoqIFRvIGNoYW5nZSBpbiBzeW5jIHdpdGggd2Vhay5oICopXG4gIGxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcbiAgbGV0IG1heF9lcGhlX2xlbmd0aCA9IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9lcGhlX2NyZWF0ZVwiOztcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEludGVybmFscyBvZiBmb3JjaW5nIGxhenkgdmFsdWVzLiAqKVxuXG50eXBlICdhIHQgPSAnYSBsYXp5X3RcblxuZXhjZXB0aW9uIFVuZGVmaW5lZFxuXG5sZXQgcmFpc2VfdW5kZWZpbmVkID0gT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBVbmRlZmluZWQpXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6IE9iai50IC0+IE9iai50IC0+IHVuaXQgPSBcImNhbWxfb2JqX21ha2VfZm9yd2FyZFwiXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gICAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICAgIHJlc3VsdFxuICB3aXRoIGUgLT5cbiAgICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgKE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgZSkpO1xuICAgIHJhaXNlIGVcblxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfdmFsX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICByZXN1bHRcblxuXG4oKiBbZm9yY2VdIGlzIG5vdCB1c2VkLCBzaW5jZSBbTGF6eS5mb3JjZV0gaXMgZGVjbGFyZWQgYXMgYSBwcmltaXRpdmVcbiAgIHdob3NlIGNvZGUgaW5saW5lcyB0aGUgdGFnIHRlc3RzIG9mIGl0cyBhcmd1bWVudCwgZXhjZXB0IHdoZW4gYWZsXG4gICBpbnN0cnVtZW50YXRpb24gaXMgdHVybmVkIG9uLiAqKVxuXG5sZXQgZm9yY2UgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gICgqIFVzaW5nIFtTeXMub3BhcXVlX2lkZW50aXR5XSBwcmV2ZW50cyB0d28gcG90ZW50aWFsIHByb2JsZW1zOlxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBoYXZlIEZvcndhcmRfdGFnLCB0aGVuIGl0cyB0YWcgY291bGQgaGF2ZVxuICAgICAgIGNoYW5nZWQgZHVyaW5nIEdDLCBzbyB0aGF0IGluZm9ybWF0aW9uIG11c3QgYmUgZm9yZ290dGVuIChzZWUgR1BSIzcxM1xuICAgICAgIGFuZCBpc3N1ZSAjNzMwMSlcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgaW1tdXRhYmxlLCB0aGVuIGlmIHRoZSBjb21waWxlclxuICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBsYXN0IGJyYW5jaCBpcyBub3QgdGFrZW4gaXQgd2lsbCBpc3N1ZSBhXG4gICAgICAgd2FybmluZyA1OSAobW9kaWZpY2F0aW9uIG9mIGFuIGltbXV0YWJsZSB2YWx1ZSkgKilcbiAgbGV0IGx6diA9IFN5cy5vcGFxdWVfaWRlbnRpdHkgbHp2IGluXG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfbGF6eV9ibG9jayBsenZcblxuXG5sZXQgZm9yY2VfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIGx6dlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAoJ2EsICdlKSB0ID0gKCdhLCAnZSkgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnZVxuXG5sZXQgb2sgdiA9IE9rIHZcbmxldCBlcnJvciBlID0gRXJyb3IgZVxubGV0IHZhbHVlIHIgfmRlZmF1bHQgPSBtYXRjaCByIHdpdGggT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5sZXQgZ2V0X29rID0gZnVuY3Rpb24gT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBFcnJvciBfXCJcbmxldCBnZXRfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGUgfCBPayBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIE9rIF9cIlxubGV0IGJpbmQgciBmID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBqb2luID0gZnVuY3Rpb24gT2sgciAtPiByIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXAgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gT2sgKGYgdikgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcF9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBFcnJvciAoZiBlKSB8IE9rIF8gYXMgdiAtPiB2XG5sZXQgZm9sZCB+b2sgfmVycm9yID0gZnVuY3Rpb24gT2sgdiAtPiBvayB2IHwgRXJyb3IgZSAtPiBlcnJvciBlXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gT2sgdiAtPiBmIHYgfCBFcnJvciBfIC0+ICgpXG5sZXQgaXRlcl9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBmIGUgfCBPayBfIC0+ICgpXG5sZXQgaXNfb2sgPSBmdW5jdGlvbiBPayBfIC0+IHRydWUgfCBFcnJvciBfIC0+IGZhbHNlXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBfIC0+IHRydWUgfCBPayBfIC0+IGZhbHNlXG5cbmxldCBlcXVhbCB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBfLCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IE9rIF8sIEVycm9yIF8gLT4gLTFcbnwgRXJyb3IgXywgT2sgXyAtPiAxXG5cbmxldCB0b19vcHRpb24gPSBmdW5jdGlvbiBPayB2IC0+IFNvbWUgdiB8IEVycm9yIF8gLT4gTm9uZVxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBPayB2IC0+IFt2XSB8IEVycm9yIF8gLT4gW11cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBPayB2IC0+IFNlcS5yZXR1cm4gdiB8IEVycm9yIF8gLT4gU2VxLmVtcHR5XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgVXRpbHMgYXJvdW5kIGNoYXJ9XG5cbiAgICBAc2luY2UgMC4xNCAqKVxuXG5pbmNsdWRlIENoYXJcblxubGV0IHBwX2J1ZiA9IEJ1ZmZlci5hZGRfY2hhclxubGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2NoYXJcbmxldCBvZl9pbnRfZXhuID0gQ2hhci5jaHJcbmxldCBvZl9pbnQgYyA9IHRyeSBTb21lIChvZl9pbnRfZXhuIGMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcbmxldCB0b19pbnQgPSBDaGFyLmNvZGVcbmxldCB0b19zdHJpbmcgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA9IClcbiAgbGV0ICggPD4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD4gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGNvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdW5zYWZlX2NocjogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBjaHIgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPiAyNTUgdGhlbiBpbnZhbGlkX2FyZyBcIkNoYXIuY2hyXCIgZWxzZSB1bnNhZmVfY2hyIG5cblxuZXh0ZXJuYWwgYnl0ZXNfY3JlYXRlOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCBlc2NhcGVkID0gZnVuY3Rpb25cbiAgfCAnXFwnJyAtPiBcIlxcXFwnXCJcbiAgfCAnXFxcXCcgLT4gXCJcXFxcXFxcXFwiXG4gIHwgJ1xcbicgLT4gXCJcXFxcblwiXG4gIHwgJ1xcdCcgLT4gXCJcXFxcdFwiXG4gIHwgJ1xccicgLT4gXCJcXFxcclwiXG4gIHwgJ1xcYicgLT4gXCJcXFxcYlwiXG4gIHwgJyAnIC4uICd+JyBhcyBjIC0+XG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAxIGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCBjO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG4gIHwgYyAtPlxuICAgICAgbGV0IG4gPSBjb2RlIGMgaW5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDQgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwICdcXFxcJztcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAxICh1bnNhZmVfY2hyICg0OCArIG4gLyAxMDApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAyICh1bnNhZmVfY2hyICg0OCArIChuIC8gMTApIG1vZCAxMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDMgKHVuc2FmZV9jaHIgKDQ4ICsgbiBtb2QgMTApKTtcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuXG5sZXQgbG93ZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onXG4gIHwgJ1xcMTkyJyAuLiAnXFwyMTQnXG4gIHwgJ1xcMjE2JyAuLiAnXFwyMjInIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyArIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgdXBwZXJjYXNlID0gZnVuY3Rpb25cbiAgfCAnYScgLi4gJ3onXG4gIHwgJ1xcMjI0JyAuLiAnXFwyNDYnXG4gIHwgJ1xcMjQ4JyAuLiAnXFwyNTQnIGFzIGMgLT5cbiAgICB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgbG93ZXJjYXNlX2FzY2lpID0gZnVuY3Rpb25cbiAgfCAnQScgLi4gJ1onIGFzIGMgLT4gdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6JyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjIC0gMzIpXG4gIHwgYyAtPiBjXG5cbnR5cGUgdCA9IGNoYXJcblxubGV0IGNvbXBhcmUgYzEgYzIgPSBjb2RlIGMxIC0gY29kZSBjMlxubGV0IGVxdWFsIChjMTogdCkgKGMyOiB0KSA9IGNvbXBhcmUgYzEgYzIgPSAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIHN0cmluZy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIHN0cmluZ19sZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2ZpbGxfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGJ5dGVzID0gXCIlYnl0ZXNfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV9ibGl0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbmxldCBtYWtlIG4gYyA9XG4gIGxldCBzID0gY3JlYXRlIG4gaW5cbiAgdW5zYWZlX2ZpbGwgcyAwIG4gYztcbiAgc1xuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIGZvciBpID0gMCB0byBuIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgcyBpIChmIGkpXG4gIGRvbmU7XG4gIHNcblxubGV0IGVtcHR5ID0gY3JlYXRlIDBcblxubGV0IGNvcHkgcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgdW5zYWZlX2JsaXQgcyAwIHIgMCBsZW47XG4gIHJcblxubGV0IHRvX3N0cmluZyBiID0gdW5zYWZlX3RvX3N0cmluZyAoY29weSBiKVxubGV0IG9mX3N0cmluZyBzID0gY29weSAodW5zYWZlX29mX3N0cmluZyBzKVxuXG5sZXQgc3ViIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLnN1YiAvIEJ5dGVzLnN1YlwiXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgICB1bnNhZmVfYmxpdCBzIG9mcyByIDAgbGVuO1xuICAgIHJcbiAgZW5kXG5cbmxldCBzdWJfc3RyaW5nIGIgb2ZzIGxlbiA9IHVuc2FmZV90b19zdHJpbmcgKHN1YiBiIG9mcyBsZW4pXG5cbigqIGFkZGl0aW9uIHdpdGggYW4gb3ZlcmZsb3cgY2hlY2sgKilcbmxldCAoKyspIGEgYiA9XG4gIGxldCBjID0gYSArIGIgaW5cbiAgbWF0Y2ggYSA8IDAsIGIgPCAwLCBjIDwgMCB3aXRoXG4gIHwgdHJ1ZSAsIHRydWUgLCBmYWxzZVxuICB8IGZhbHNlLCBmYWxzZSwgdHJ1ZSAgLT4gaW52YWxpZF9hcmcgXCJCeXRlcy5leHRlbmRcIiAoKiBvdmVyZmxvdyAqKVxuICB8IF8gLT4gY1xuXG5sZXQgZXh0ZW5kIHMgbGVmdCByaWdodCA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyArKyBsZWZ0ICsrIHJpZ2h0IGluXG4gIGxldCByID0gY3JlYXRlIGxlbiBpblxuICBsZXQgKHNyY29mZiwgZHN0b2ZmKSA9IGlmIGxlZnQgPCAwIHRoZW4gLWxlZnQsIDAgZWxzZSAwLCBsZWZ0IGluXG4gIGxldCBjcHlsZW4gPSBJbnQubWluIChsZW5ndGggcyAtIHNyY29mZikgKGxlbiAtIGRzdG9mZikgaW5cbiAgaWYgY3B5bGVuID4gMCB0aGVuIHVuc2FmZV9ibGl0IHMgc3Jjb2ZmIHIgZHN0b2ZmIGNweWxlbjtcbiAgclxuXG5sZXQgZmlsbCBzIG9mcyBsZW4gYyA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmZpbGwgLyBCeXRlcy5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBzIG9mcyBsZW4gY1xuXG5sZXQgYmxpdCBzMSBvZnMxIHMyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnl0ZXMuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgczEgb2ZzMSBzMiBvZnMyIGxlblxuXG5sZXQgYmxpdF9zdHJpbmcgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IHN0cmluZ19sZW5ndGggczEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIHMyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuYmxpdCAvIEJ5dGVzLmJsaXRfc3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfYmxpdF9zdHJpbmcgczEgb2ZzMSBzMiBvZnMyIGxlblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiQnl0ZXMuY29uY2F0XCJcblxubGV0IHJlYyBzdW1fbGVuZ3RocyBhY2Mgc2VwbGVuID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2NcbiAgfCBoZCA6OiBbXSAtPiBsZW5ndGggaGQgKyBhY2NcbiAgfCBoZCA6OiB0bCAtPiBzdW1fbGVuZ3RocyAoZW5zdXJlX2dlIChsZW5ndGggaGQgKyBzZXBsZW4gKyBhY2MpIGFjYykgc2VwbGVuIHRsXG5cbmxldCByZWMgdW5zYWZlX2JsaXRzIGRzdCBwb3Mgc2VwIHNlcGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZHN0XG4gIHwgaGQgOjogW10gLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7IGRzdFxuICB8IGhkIDo6IHRsIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpO1xuICAgIHVuc2FmZV9ibGl0IHNlcCAwIGRzdCAocG9zICsgbGVuZ3RoIGhkKSBzZXBsZW47XG4gICAgdW5zYWZlX2JsaXRzIGRzdCAocG9zICsgbGVuZ3RoIGhkICsgc2VwbGVuKSBzZXAgc2VwbGVuIHRsXG5cbmxldCBjb25jYXQgc2VwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBlbXB0eVxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW5cbiAgICAgICAgICB1bnNhZmVfYmxpdHNcbiAgICAgICAgICAgIChjcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCBzMSBzMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBzMSBpblxuICBsZXQgbDIgPSBsZW5ndGggczIgaW5cbiAgbGV0IHIgPSBjcmVhdGUgKGwxICsgbDIpIGluXG4gIHVuc2FmZV9ibGl0IHMxIDAgciAwIGwxO1xuICB1bnNhZmVfYmxpdCBzMiAwIHIgbDEgbDI7XG4gIHJcblxuXG5leHRlcm5hbCBjaGFyX2NvZGU6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgY2hhcl9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgaXNfc3BhY2UgPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IHRyaW0gcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpIDwgbGVuICYmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGxldCBqID0gcmVmIChsZW4gLSAxKSBpblxuICB3aGlsZSAhaiA+PSAhaSAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFqKSBkb1xuICAgIGRlY3IgalxuICBkb25lO1xuICBpZiAhaiA+PSAhaSB0aGVuXG4gICAgc3ViIHMgIWkgKCFqIC0gIWkgKyAxKVxuICBlbHNlXG4gICAgZW1wdHlcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgIG4gOj0gIW4gK1xuICAgICAgKG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICB8ICdcXFwiJyB8ICdcXFxcJyB8ICdcXG4nIHwgJ1xcdCcgfCAnXFxyJyB8ICdcXGInIC0+IDJcbiAgICAgICB8ICcgJyAuLiAnficgLT4gMVxuICAgICAgIHwgXyAtPiA0KVxuICBkb25lO1xuICBpZiAhbiA9IGxlbmd0aCBzIHRoZW4gY29weSBzIGVsc2UgYmVnaW5cbiAgICBsZXQgcycgPSBjcmVhdGUgIW4gaW5cbiAgICBuIDo9IDA7XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgICAgYmVnaW4gbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAoJ1xcXCInIHwgJ1xcXFwnKSBhcyBjIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiBjXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAnbidcbiAgICAgIHwgJ1xcdCcgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICd0J1xuICAgICAgfCAnXFxyJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3InXG4gICAgICB8ICdcXGInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAnYidcbiAgICAgIHwgKCcgJyAuLiAnficpIGFzIGMgLT4gdW5zYWZlX3NldCBzJyAhbiBjXG4gICAgICB8IGMgLT5cbiAgICAgICAgICBsZXQgYSA9IGNoYXJfY29kZSBjIGluXG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIGEgLyAxMDApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgKGEgLyAxMCkgbW9kIDEwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIGEgbW9kIDEwKSk7XG4gICAgICBlbmQ7XG4gICAgICBpbmNyIG5cbiAgICBkb25lO1xuICAgIHMnXG4gIGVuZFxuXG5sZXQgbWFwIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IHMgaSkpIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IG1hcGkgZiBzID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBsID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG8gdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICBkb25lO1xuICAhclxuXG5sZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDAgZG9cbiAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICBkb25lO1xuICAhclxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsIHAgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBzIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgbG93ZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG5sZXQgYXBwbHkxIGYgcyA9XG4gIGlmIGxlbmd0aCBzID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY29weSBzIGluXG4gICAgdW5zYWZlX3NldCByIDAgKGYodW5zYWZlX2dldCBzIDApKTtcbiAgICByXG4gIGVuZFxuXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlX2FzY2lpIHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZV9hc2NpaSBzXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgZW5kc193aXRoIH5zdWZmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fc3VmID0gbGVuZ3RoIHN1ZmZpeCBpblxuICBsZXQgZGlmZiA9IGxlbl9zIC0gbGVuX3N1ZiBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3N1ZiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyAoZGlmZiArIGkpIDw+IHVuc2FmZV9nZXQgc3VmZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gZGlmZiA+PSAwICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlYyBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSBpbmRleF9yZWMgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X29wdCBzIGMgPSBpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5pbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICBpbmRleF9yZWNfb3B0IHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbSAvIEJ5dGVzLnJpbmRleF9mcm9tXCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWMgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tX29wdCAvIEJ5dGVzLnJpbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjX29wdCBzIGkgY1xuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5jb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKGluZGV4X3JlYyBzIGwgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgY29udGFpbnMgcyBjID0gY29udGFpbnNfZnJvbSBzIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5cbnR5cGUgdCA9IGJ5dGVzXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmV4dGVybmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfYnl0ZXNfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHNwbGl0X29uX2NoYXIgc2VwIHMgPVxuICBsZXQgciA9IHJlZiBbXSBpblxuICBsZXQgaiA9IHJlZiAobGVuZ3RoIHMpIGluXG4gIGZvciBpID0gbGVuZ3RoIHMgLSAxIGRvd250byAwIGRvXG4gICAgaWYgdW5zYWZlX2dldCBzIGkgPSBzZXAgdGhlbiBiZWdpblxuICAgICAgciA6PSBzdWIgcyAoaSArIDEpICghaiAtIGkgLSAxKSA6OiAhcjtcbiAgICAgIGogOj0gaVxuICAgIGVuZFxuICBkb25lO1xuICBzdWIgcyAwICFqIDo6ICFyXG5cbigqIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGltcGxlbWVudGVkIHZpYSBvdGhlciBkZXByZWNhdGVkIGZ1bmN0aW9ucyAqKVxuW0BAQG9jYW1sLndhcm5pbmcgXCItM1wiXVxubGV0IHVwcGVyY2FzZSBzID0gbWFwIENoYXIudXBwZXJjYXNlIHNcbmxldCBsb3dlcmNhc2UgcyA9IG1hcCBDaGFyLmxvd2VyY2FzZSBzXG5cbmxldCBjYXBpdGFsaXplIHMgPSBhcHBseTEgQ2hhci51cHBlcmNhc2Ugc1xubGV0IHVuY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIubG93ZXJjYXNlIHNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGxldCBidWYgPSByZWYgKG1ha2UgMjU2ICdcXDAwMCcpIGluXG4gIGxldCByZXNpemUgKCkgPVxuICAgICgqIHJlc2l6ZSAqKVxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1pbiAoMiAqIGxlbmd0aCAhYnVmKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICBpZiBsZW5ndGggIWJ1ZiA9IG5ld19sZW4gdGhlbiBmYWlsd2l0aCBcIkJ5dGVzLm9mX3NlcTogY2Fubm90IGdyb3cgYnl0ZXNcIjtcbiAgICBsZXQgbmV3X2J1ZiA9IG1ha2UgbmV3X2xlbiAnXFwwMDAnIGluXG4gICAgYmxpdCAhYnVmIDAgbmV3X2J1ZiAwICFuO1xuICAgIGJ1ZiA6PSBuZXdfYnVmXG4gIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBjIC0+XG4gICAgICAgaWYgIW4gPSBsZW5ndGggIWJ1ZiB0aGVuIHJlc2l6ZSgpO1xuICAgICAgIHNldCAhYnVmICFuIGM7XG4gICAgICAgaW5jciBuKVxuICAgIGk7XG4gIHN1YiAhYnVmIDAgIW5cblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuKCogVGhlIGdldF8gZnVuY3Rpb25zIGFyZSBhbGwgZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcblxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZ1XCJcbmV4dGVybmFsIGdldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9ieXRlc19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX2J5dGVzX2dldDY0XCJcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBzZXRfaW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2XCJcbmV4dGVybmFsIHNldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMlwiXG5leHRlcm5hbCBzZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjRcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuICBlbHNlIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuXG5sZXQgZ2V0X2ludDggYiBpID1cbiAgKChnZXRfdWludDggYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDgpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDgpXG5cbmxldCBnZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfaW50MTZfbmUgYiBpID1cbiAgKChnZXRfdWludDE2X25lIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfbGUgYiBpID1cbiAgKChnZXRfdWludDE2X2xlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfYmUgYiBpID1cbiAgKChnZXRfdWludDE2X2JlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MzJfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDMyX2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeFxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfYmUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4IGVsc2VcbiAgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIChzd2FwMTYgeClcblxubGV0IHNldF9pbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MTZfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF91aW50OCA9IHNldF9pbnQ4XG5sZXQgc2V0X3VpbnQxNl9uZSA9IHNldF9pbnQxNl9uZVxubGV0IHNldF91aW50MTZfYmUgPSBzZXRfaW50MTZfYmVcbmxldCBzZXRfdWludDE2X2xlID0gc2V0X2ludDE2X2xlXG5cbigqIFVURiBjb2RlY3MgYW5kIHZhbGlkYXRpb25zICopXG5cbmxldCBkZWNfaW52YWxpZCA9IFVjaGFyLnV0Zl9kZWNvZGVfaW52YWxpZFxubGV0W0BpbmxpbmVdIGRlY19yZXQgbiB1ID0gVWNoYXIudXRmX2RlY29kZSBuIChVY2hhci51bnNhZmVfb2ZfaW50IHUpXG5cbigqIEluIGNhc2Ugb2YgZGVjb2RpbmcgZXJyb3IsIGlmIHdlIGVycm9yIG9uIHRoZSBmaXJzdCBieXRlLCB3ZVxuICAgY29uc3VtZSB0aGUgYnl0ZSwgb3RoZXJ3aXNlIHdlIGNvbnN1bWUgdGhlIFtuXSBieXRlcyBwcmVjZWVkaW5nXG4gICB0aGUgZXJyb3JpbmcgYnl0ZS5cblxuICAgVGhpcyBtZWFucyB0aGF0IGlmIGEgY2xpZW50IHVzZXMgZGVjb2RlcyB3aXRob3V0IGNhcmluZyBhYm91dFxuICAgdmFsaWRpdHkgaXQgbmF0dXJhbGx5IHJlcGxhY2UgYm9ndXMgZGF0YSB3aXRoIFVjaGFyLnJlcCBhY2NvcmRpbmdcbiAgIHRvIHRoZSBXSEFUV0cgRW5jb2Rpbmcgc3RhbmRhcmQuIE90aGVyIHNjaGVtZXMgYXJlIHBvc3NpYmxlIGJ5XG4gICBjb25zdWx0aW5nIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyBvbiBpbnZhbGlkIGRlY29kZXMuIEZvciBtb3JlXG4gICBkZXRhaWxzIHNlZSBodHRwczovL2hzaXZvbmVuLmZpL2Jyb2tlbi11dGYtOC9cblxuICAgRm9yIHRoaXMgcmVhc29uIGluIFtnZXRfdXRmXzhfdWNoYXJdIHdlIGdyYWR1YWxseSBjaGVjayB0aGUgbmV4dFxuICAgYnl0ZSBpcyBhdmFpbGFibGUgcmF0aGVyIHRoYW4gZG9pbmcgaXQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICBmaXJzdCBieXRlLiBDb250cmFzdCB3aXRoIFtpc192YWxpZF91dGZfOF0uICopXG5cbigqIFVURi04ICopXG5cbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3hCRiBiID0gYiBsc3IgNiA8PiAwYjEwXG5sZXRbQGlubGluZV0gbm90X2luX3hBMF90b194QkYgYiA9IGIgbHNyIDUgPD4gMGIxMDFcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g5RiBiID0gYiBsc3IgNSA8PiAwYjEwMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94OTBfdG9feEJGIGIgPSBiIDwgMHg5MCB8fCAweEJGIDwgYlxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feDhGIGIgPSBiIGxzciA0IDw+IDB4OFxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfMiBiMCBiMSA9XG4gICgoYjAgbGFuZCAweDFGKSBsc2wgNikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIgPVxuICAoKGIwIGxhbmQgMHgwRikgbHNsIDEyKSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCA2KSBsb3JcbiAgKChiMiBsYW5kIDB4M0YpKVxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMyA9XG4gICgoYjAgbGFuZCAweDA3KSBsc2wgMTgpIGxvclxuICAoKGIxIGxhbmQgMHgzRikgbHNsIDEyKSBsb3JcbiAgKChiMiBsYW5kIDB4M0YpIGxzbCA2KSBsb3JcbiAgKChiMyBsYW5kIDB4M0YpKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIGIgaSA9XG4gIGxldCBiMCA9IGdldF91aW50OCBiIGkgaW4gKCogcmFpc2VzIGlmIFtpXSBpcyBub3QgYSB2YWxpZCBpbmRleC4gKilcbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgYjAgd2l0aCAoKiBTZWUgVGhlIFVuaWNvZGUgU3RhbmRhcmQsIFRhYmxlIDMuNyAqKVxuICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBkZWNfcmV0IDEgYjBcbiAgfCAnXFx4QzInIC4uICdcXHhERicgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgZGVjX3JldCAyICh1dGZfOF91Y2hhcl8yIGIwIGIxKVxuICB8ICdcXHhFMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feEEwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFRCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3g5RiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEYwJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94OTBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8ICdcXHhGMScgLi4gJ1xceEYzJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8ICdcXHhGNCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3g4RiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCBfIC0+IGRlY19pbnZhbGlkIDFcblxubGV0IHNldF91dGZfOF91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweDAwN0YgLT5cbiAgICAgIHNldF91aW50OCBiIGkgdTtcbiAgICAgIDFcbiAgfCB1IHdoZW4gdSA8PSAweDA3RkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEMwIGxvciAodSBsc3IgNikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDIpXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhFMCBsb3IgKHUgbHNyIDEyKSk7XG4gICAgICAgc2V0IGIgKGkgKyAxKSAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAzKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhGMCBsb3IgKHUgbHNyIDE4KSk7XG4gICAgICAgc2V0IGIgKGkgKyAxKSAoMHg4MCBsb3IgKCh1IGxzciAxMikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgKGkgKyAyKSAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICA0KVxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfOCBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50OCBpblxuICAgIG1hdGNoIENoYXIudW5zYWZlX2NociAoZ2V0IGIgaSkgd2l0aFxuICAgIHwgJ1xceDAwJyAuLiAnXFx4N0YnIC0+IGxvb3AgbWF4IGIgKGkgKyAxKVxuICAgIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3hBMF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RTEnIC4uICdcXHhFQycgfCAnXFx4RUUnIC4uICdcXHhFRicgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEVEJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194OUYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjAnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDkwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGNCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDhGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8IF8gLT4gZmFsc2VcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcblxuKCogVVRGLTE2QkUgKilcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBiIGkgPVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBpZiBpID0gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gIG1hdGNoIGdldCBiIGkgd2l0aFxuICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gZGVjX3JldCAyIHVcbiAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBkZWNfaW52YWxpZCAyXG4gIHwgaGkgLT4gKCogY29tYmluZSBbaGldIHdpdGggYSBsb3cgc3Vycm9nYXRlICopXG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgKG1heCAtIGkgKyAxKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfaW52YWxpZCAyICgqIHJldHJ5IGhlcmUgKilcbiAgICAgIHwgbG8gLT5cbiAgICAgICAgICBsZXQgdSA9ICgoKGhpIGxhbmQgMHgzRkYpIGxzbCAxMCkgbG9yIChsbyBsYW5kIDB4M0ZGKSkgKyAweDEwMDAwIGluXG4gICAgICAgICAgZGVjX3JldCA0IHVcblxubGV0IHNldF91dGZfMTZiZV91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQxNl9iZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlIChzZXQgYiBpIHU7IDIpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgICBsZXQgaGkgPSAoMHhEODAwIGxvciAodScgbHNyIDEwKSkgaW5cbiAgICAgIGxldCBsbyA9ICgweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSkgaW5cbiAgICAgIHNldCBiIGkgaGk7IHNldCBiIChpICsgMikgbG87IDRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfYmUgaW5cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgaWYgaSA9IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gbG9vcCBtYXggYiAoaSArIDIpXG4gICAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBmYWxzZVxuICAgIHwgX2hpIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBmYWxzZVxuICAgICAgICB8IF9sbyAtPiBsb29wIG1heCBiIChpICsgNClcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcblxuKCogVVRGLTE2TEUgKilcblxubGV0IGdldF91dGZfMTZsZV91Y2hhciBiIGkgPVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBpZiBpID0gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gIG1hdGNoIGdldCBiIGkgd2l0aFxuICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gZGVjX3JldCAyIHVcbiAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBkZWNfaW52YWxpZCAyXG4gIHwgaGkgLT4gKCogY29tYmluZSBbaGldIHdpdGggYSBsb3cgc3Vycm9nYXRlICopXG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgKG1heCAtIGkgKyAxKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfaW52YWxpZCAyICgqIHJldHJ5IGhlcmUgKilcbiAgICAgIHwgbG8gLT5cbiAgICAgICAgICBsZXQgdSA9ICgoKGhpIGxhbmQgMHgzRkYpIGxzbCAxMCkgbG9yIChsbyBsYW5kIDB4M0ZGKSkgKyAweDEwMDAwIGluXG4gICAgICAgICAgZGVjX3JldCA0IHVcblxubGV0IHNldF91dGZfMTZsZV91Y2hhciBiIGkgdSA9XG4gIGxldCBzZXQgPSB1bnNhZmVfc2V0X3VpbnQxNl9sZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlIChzZXQgYiBpIHU7IDIpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgICBsZXQgaGkgPSAoMHhEODAwIGxvciAodScgbHNyIDEwKSkgaW5cbiAgICAgIGxldCBsbyA9ICgweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSkgaW5cbiAgICAgIHNldCBiIGkgaGk7IHNldCBiIChpICsgMikgbG87IDRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50MTZfbGUgaW5cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgaWYgaSA9IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICB8IHUgd2hlbiB1IDwgMHhEODAwIHx8IHUgPiAweERGRkYgLT4gbG9vcCBtYXggYiAoaSArIDIpXG4gICAgfCB1IHdoZW4gdSA+IDB4REJGRiAtPiBmYWxzZVxuICAgIHwgX2hpIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICAgIHwgdSB3aGVuIHUgPCAweERDMDAgfHwgdSA+IDB4REZGRiAtPiBmYWxzZVxuICAgICAgICB8IF9sbyAtPiBsb29wIG1heCBiIChpICsgNClcbiAgaW5cbiAgbG9vcCAobGVuZ3RoIGIgLSAxKSBiIDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IEdhbGxpdW0sIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU3RyaW5nIG9wZXJhdGlvbnMsIGJhc2VkIG9uIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMuIFdoZW4geW91IG1vZGlmeSB0aGUgb25lIGluIHRoaXMgZmlsZSB5b3UgbmVlZCB0b1xuICAgbW9kaWZ5IGl0cyBkdXBsaWNhdGUgaW4gYnl0ZXMubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGdldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlc3RyaW5nX3NhZmVfc2V0XCJcbmV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfc3RyaW5nXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogc3RyaW5nIC0+IGludCAtPiAgYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbm1vZHVsZSBCID0gQnl0ZXNcblxubGV0IGJ0cyA9IEIudW5zYWZlX3RvX3N0cmluZ1xubGV0IGJvcyA9IEIudW5zYWZlX29mX3N0cmluZ1xuXG5sZXQgbWFrZSBuIGMgPVxuICBCLm1ha2UgbiBjIHw+IGJ0c1xubGV0IGluaXQgbiBmID1cbiAgQi5pbml0IG4gZiB8PiBidHNcbmxldCBlbXB0eSA9IFwiXCJcbmxldCBjb3B5IHMgPVxuICBCLmNvcHkgKGJvcyBzKSB8PiBidHNcbmxldCBvZl9ieXRlcyA9IEIudG9fc3RyaW5nXG5sZXQgdG9fYnl0ZXMgPSBCLm9mX3N0cmluZ1xubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBCLnN1YiAoYm9zIHMpIG9mcyBsZW4gfD4gYnRzXG5sZXQgZmlsbCA9XG4gIEIuZmlsbFxubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxubGV0IGNhdCA9ICggXiApXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXJpIGYgcyA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG5sZXQgbWFwIGYgcyA9XG4gIEIubWFwIGYgKGJvcyBzKSB8PiBidHNcbmxldCBtYXBpIGYgcyA9XG4gIEIubWFwaSBmIChib3MgcykgfD4gYnRzXG5sZXQgZm9sZF9yaWdodCBmIHggYSA9XG4gIEIuZm9sZF9yaWdodCBmIChib3MgeCkgYVxubGV0IGZvbGRfbGVmdCBmIGEgeCA9XG4gIEIuZm9sZF9sZWZ0IGYgYSAoYm9zIHgpXG5sZXQgZXhpc3RzIGYgcyA9XG4gIEIuZXhpc3RzIGYgKGJvcyBzKVxubGV0IGZvcl9hbGwgZiBzID1cbiAgQi5mb3JfYWxsIGYgKGJvcyBzKVxuXG4oKiBCZXdhcmU6IHdlIGNhbm5vdCB1c2UgQi50cmltIG9yIEIuZXNjYXBlIGJlY2F1c2UgdGhleSBhbHdheXMgbWFrZSBhXG4gICBjb3B5LCBidXQgU3RyaW5nLm1saSBzcGVsbHMgb3V0IHNvbWUgY2FzZXMgd2hlcmUgd2UgYXJlIG5vdCBhbGxvd2VkXG4gICB0byBtYWtlIGEgY29weS4gKilcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBpZiBzID0gXCJcIiB0aGVuIHNcbiAgZWxzZSBpZiBpc19zcGFjZSAodW5zYWZlX2dldCBzIDApIHx8IGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgKGxlbmd0aCBzIC0gMSkpXG4gICAgdGhlbiBidHMgKEIudHJpbSAoYm9zIHMpKVxuICBlbHNlIHNcblxubGV0IGVzY2FwZWQgcyA9XG4gIGxldCByZWMgZXNjYXBlX2lmX25lZWRlZCBzIG4gaSA9XG4gICAgaWYgaSA+PSBuIHRoZW4gcyBlbHNlXG4gICAgICBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICdcXFwiJyB8ICdcXFxcJyB8ICdcXDAwMCcuLidcXDAzMScgfCAnXFwxMjcnLi4gJ1xcMjU1JyAtPlxuICAgICAgICAgIGJ0cyAoQi5lc2NhcGVkIChib3MgcykpXG4gICAgICB8IF8gLT4gZXNjYXBlX2lmX25lZWRlZCBzIG4gKGkrMSlcbiAgaW5cbiAgZXNjYXBlX2lmX25lZWRlZCBzIChsZW5ndGggcykgMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIGluZGV4X3JlYyBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSBpbmRleF9yZWMgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleCBzIGMgPSBpbmRleF9yZWMgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X29wdCBzIGMgPSBpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbSAvIEJ5dGVzLmluZGV4X2Zyb21cIiBlbHNlXG4gICAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5pbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICBpbmRleF9yZWNfb3B0IHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjIHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgcmluZGV4X3JlYyBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbSAvIEJ5dGVzLnJpbmRleF9mcm9tXCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWMgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIHJpbmRleF9yZWNfb3B0IHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb21fb3B0IHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tX29wdCAvIEJ5dGVzLnJpbmRleF9mcm9tX29wdFwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjX29wdCBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5jb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKGluZGV4X3JlYyBzIGwgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgY29udGFpbnMgcyBjID0gY29udGFpbnNfZnJvbSBzIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yY29udGFpbnNfZnJvbSAvIEJ5dGVzLnJjb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKHJpbmRleF9yZWMgcyBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgcyA9XG4gIEIudXBwZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgbG93ZXJjYXNlX2FzY2lpIHMgPVxuICBCLmxvd2VyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IHVuY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi51bmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgZW5kc193aXRoIH5zdWZmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fc3VmID0gbGVuZ3RoIHN1ZmZpeCBpblxuICBsZXQgZGlmZiA9IGxlbl9zIC0gbGVuX3N1ZiBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3N1ZiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyAoZGlmZiArIGkpIDw+IHVuc2FmZV9nZXQgc3VmZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gZGlmZiA+PSAwICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9XG4gIEIudXBwZXJjYXNlIChib3MgcykgfD4gYnRzXG5sZXQgbG93ZXJjYXNlIHMgPVxuICBCLmxvd2VyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGNhcGl0YWxpemUgcyA9XG4gIEIuY2FwaXRhbGl6ZSAoYm9zIHMpIHw+IGJ0c1xubGV0IHVuY2FwaXRhbGl6ZSBzID1cbiAgQi51bmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcblxudHlwZSB0ID0gc3RyaW5nXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmV4dGVybmFsIGVxdWFsIDogc3RyaW5nIC0+IHN0cmluZyAtPiBib29sID0gXCJjYW1sX3N0cmluZ19lcXVhbFwiIFtAQG5vYWxsb2NdXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9IGJvcyBzIHw+IEIudG9fc2VxXG5cbmxldCB0b19zZXFpIHMgPSBib3MgcyB8PiBCLnRvX3NlcWlcblxubGV0IG9mX3NlcSBnID0gQi5vZl9zZXEgZyB8PiBidHNcblxuKCogVVRGIGRlY29kZXJzIGFuZCB2YWxpZGF0b3JzICopXG5cbmxldCBnZXRfdXRmXzhfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzhfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzggcyA9IEIuaXNfdmFsaWRfdXRmXzggKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmJlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmJlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmJlIChib3MgcylcblxubGV0IGdldF91dGZfMTZsZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZsZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZsZSBzID0gQi5pc192YWxpZF91dGZfMTZsZSAoYm9zIHMpXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbmV4dGVybmFsIGdldF91aW50OCA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfc3RyaW5nX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX3N0cmluZ19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9zdHJpbmdfZ2V0NjRcIlxuXG5sZXQgZ2V0X2ludDggcyBpID0gQi5nZXRfaW50OCAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2xlIHMgaSA9IEIuZ2V0X3VpbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2JlIHMgaSA9IEIuZ2V0X3VpbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbmUgcyBpID0gQi5nZXRfaW50MTZfbmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2xlIHMgaSA9IEIuZ2V0X2ludDE2X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9iZSBzIGkgPSBCLmdldF9pbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfbGUgcyBpID0gQi5nZXRfaW50MzJfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2JlIHMgaSA9IEIuZ2V0X2ludDMyX2JlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9sZSBzIGkgPSBCLmdldF9pbnQ2NF9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfYmUgcyBpID0gQi5nZXRfaW50NjRfYmUgKGJvcyBzKSBpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBhcnJheXMuICopXG50eXBlICdhIHQgPSAnYSBhcnJheVxuXG4oKiBBcnJheSBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGxlbmd0aCA6ICdhIGFycmF5IC0+IGludCA9IFwiJWFycmF5X2xlbmd0aFwiXG5leHRlcm5hbCBnZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSA9IFwiJWFycmF5X3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVhcnJheV9zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV91bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfdW5zYWZlX3NldFwiXG5leHRlcm5hbCBtYWtlOiBpbnQgLT4gJ2EgLT4gJ2EgYXJyYXkgPSBcImNhbWxfbWFrZV92ZWN0XCJcbmV4dGVybmFsIGNyZWF0ZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCB1bnNhZmVfc3ViIDogJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9zdWJcIlxuZXh0ZXJuYWwgYXBwZW5kX3ByaW0gOiAnYSBhcnJheSAtPiAnYSBhcnJheSAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9hcHBlbmRcIlxuZXh0ZXJuYWwgY29uY2F0IDogJ2EgYXJyYXkgbGlzdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9jb25jYXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2JsaXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYXJyYXlfZmlsbFwiXG5leHRlcm5hbCBjcmVhdGVfZmxvYXQ6IGludCAtPiBmbG9hdCBhcnJheSA9IFwiY2FtbF9tYWtlX2Zsb2F0X3ZlY3RcIlxubGV0IG1ha2VfZmxvYXQgPSBjcmVhdGVfZmxvYXRcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGZvciB4ID0gMCB0byBwcmVkIHN4IGRvXG4gICAgdW5zYWZlX3NldCByZXMgeCAoY3JlYXRlIHN5IGluaXQpXG4gIGRvbmU7XG4gIHJlc1xuXG5sZXQgY3JlYXRlX21hdHJpeCA9IG1ha2VfbWF0cml4XG5cbmxldCBjb3B5IGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIHVuc2FmZV9zdWIgYSAwIGxcblxubGV0IGFwcGVuZCBhMSBhMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBhMSBpblxuICBpZiBsMSA9IDAgdGhlbiBjb3B5IGEyXG4gIGVsc2UgaWYgbGVuZ3RoIGEyID0gMCB0aGVuIHVuc2FmZV9zdWIgYTEgMCBsMVxuICBlbHNlIGFwcGVuZF9wcmltIGExIGEyXG5cbmxldCBzdWIgYSBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5zdWJcIlxuICBlbHNlIHVuc2FmZV9zdWIgYSBvZnMgbGVuXG5cbmxldCBmaWxsIGEgb2ZzIGxlbiB2ID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBhIG9mcyBsZW4gdlxuXG5sZXQgYmxpdCBhMSBvZnMxIGEyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIGExIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBhMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlblxuXG5sZXQgaXRlciBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IGl0ZXIyIGYgYSBiID1cbiAgaWYgbGVuZ3RoIGEgPD4gbGVuZ3RoIGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkgZG9uZVxuXG5sZXQgbWFwIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcCBmIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIE5vbmVcbiAgICBlbHNlXG4gICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogU2V0cyBvdmVyIG9yZGVyZWQgdHlwZXMgKilcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUgZWx0XG4gICAgdHlwZSB0XG4gICAgdmFsIGVtcHR5OiB0XG4gICAgdmFsIGlzX2VtcHR5OiB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiBlbHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGFkZDogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCBzaW5nbGV0b246IGVsdCAtPiB0XG4gICAgdmFsIHJlbW92ZTogZWx0IC0+IHQgLT4gdFxuICAgIHZhbCB1bmlvbjogdCAtPiB0IC0+IHRcbiAgICB2YWwgaW50ZXI6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGRpc2pvaW50OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBkaWZmOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBzdWJzZXQ6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChlbHQgLT4gdW5pdCkgLT4gdCAtPiB1bml0XG4gICAgdmFsIG1hcDogKGVsdCAtPiBlbHQpIC0+IHQgLT4gdFxuICAgIHZhbCBmb2xkOiAoZWx0IC0+ICdhIC0+ICdhKSAtPiB0IC0+ICdhIC0+ICdhXG4gICAgdmFsIGZvcl9hbGw6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGV4aXN0czogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZmlsdGVyOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdFxuICAgIHZhbCBmaWx0ZXJfbWFwOiAoZWx0IC0+IGVsdCBvcHRpb24pIC0+IHQgLT4gdFxuICAgIHZhbCBwYXJ0aXRpb246IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0ICogdFxuICAgIHZhbCBjYXJkaW5hbDogdCAtPiBpbnRcbiAgICB2YWwgZWxlbWVudHM6IHQgLT4gZWx0IGxpc3RcbiAgICB2YWwgbWluX2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWluX2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBtYXhfZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtYXhfZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGNob29zZTogdCAtPiBlbHRcbiAgICB2YWwgY2hvb3NlX29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIHNwbGl0OiBlbHQgLT4gdCAtPiB0ICogYm9vbCAqIHRcbiAgICB2YWwgZmluZDogZWx0IC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfb3B0OiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmRfZmlyc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIGZpbmRfbGFzdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBvZl9saXN0OiBlbHQgbGlzdCAtPiB0XG4gICAgdmFsIHRvX3NlcV9mcm9tIDogZWx0IC0+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+XG4gICAgICAgICAgICBsZXQgcmlnaHQsIGwgPSBzdWIgKG4gLSBubCAtIDEpIGwgaW5cbiAgICAgICAgICAgIGNyZWF0ZSBsZWZ0IG1pZCByaWdodCwgbFxuICAgICAgaW5cbiAgICAgIGZzdCAoc3ViIChMaXN0Lmxlbmd0aCBsKSBsKVxuXG4gICAgbGV0IG9mX2xpc3QgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gZW1wdHlcbiAgICAgIHwgW3gwXSAtPiBzaW5nbGV0b24geDBcbiAgICAgIHwgW3gwOyB4MV0gLT4gYWRkIHgxIChzaW5nbGV0b24geDApXG4gICAgICB8IFt4MDsgeDE7IHgyXSAtPiBhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzXSAtPiBhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzOyB4NF0gLT4gYWRkIHg0IChhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSkpXG4gICAgICB8IF8gLT4gb2Zfc29ydGVkX2xpc3QgKExpc3Quc29ydF91bmlxIE9yZC5jb21wYXJlIGwpXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIHMgeCAtPiBhZGQgeCBzKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgYyA9IHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHJlYyBzbm9jX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gc25vY19lbnVtIHIgKE1vcmUodiwgbCwgZSkpXG5cbiAgICBsZXQgcmVjIHJldl9zZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fcmV2X3NlcSBjID0gcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBzID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBzIGMgPSBtYXRjaCBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgcjsgdjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBzIEVuZClcbiAgZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9IHsgbXV0YWJsZSBjIDogJ2EgbGlzdDsgbXV0YWJsZSBsZW4gOiBpbnQ7IH1cblxuZXhjZXB0aW9uIEVtcHR5XG5cbmxldCBjcmVhdGUgKCkgPSB7IGMgPSBbXTsgbGVuID0gMDsgfVxuXG5sZXQgY2xlYXIgcyA9IHMuYyA8LSBbXTsgcy5sZW4gPC0gMFxuXG5sZXQgY29weSBzID0geyBjID0gcy5jOyBsZW4gPSBzLmxlbjsgfVxuXG5sZXQgcHVzaCB4IHMgPSBzLmMgPC0geCA6OiBzLmM7IHMubGVuIDwtIHMubGVuICsgMVxuXG5sZXQgcG9wIHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgaGRcbiAgfCBbXSAgICAgLT4gcmFpc2UgRW1wdHlcblxubGV0IHBvcF9vcHQgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBTb21lIGhkXG4gIHwgW10gICAgIC0+IE5vbmVcblxubGV0IHRvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBoZFxuICB8IFtdICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCB0b3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IFNvbWUgaGRcbiAgfCBbXSAgICAtPiBOb25lXG5cbmxldCBpc19lbXB0eSBzID0gKHMuYyA9IFtdKVxuXG5sZXQgbGVuZ3RoIHMgPSBzLmxlblxuXG5sZXQgaXRlciBmIHMgPSBMaXN0Lml0ZXIgZiBzLmNcblxubGV0IGZvbGQgZiBhY2MgcyA9IExpc3QuZm9sZF9sZWZ0IGYgYWNjIHMuY1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBMaXN0LnRvX3NlcSBzLmNcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBzID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBzIGc7XG4gIHNcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgRnJhbmNvaXMgUG90dGllciwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgSmVyZW1pZSBEaW1pbm8sIEphbmUgU3RyZWV0IEV1cm9wZSAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXhjZXB0aW9uIEVtcHR5XG5cbnR5cGUgJ2EgY2VsbCA9XG4gIHwgTmlsXG4gIHwgQ29ucyBvZiB7IGNvbnRlbnQ6ICdhOyBtdXRhYmxlIG5leHQ6ICdhIGNlbGwgfVxuXG50eXBlICdhIHQgPSB7XG4gIG11dGFibGUgbGVuZ3RoOiBpbnQ7XG4gIG11dGFibGUgZmlyc3Q6ICdhIGNlbGw7XG4gIG11dGFibGUgbGFzdDogJ2EgY2VsbFxufVxuXG5sZXQgY3JlYXRlICgpID0ge1xuICBsZW5ndGggPSAwO1xuICBmaXJzdCA9IE5pbDtcbiAgbGFzdCA9IE5pbFxufVxuXG5sZXQgY2xlYXIgcSA9XG4gIHEubGVuZ3RoIDwtIDA7XG4gIHEuZmlyc3QgPC0gTmlsO1xuICBxLmxhc3QgPC0gTmlsXG5cbmxldCBhZGQgeCBxID1cbiAgbGV0IGNlbGwgPSBDb25zIHtcbiAgICBjb250ZW50ID0geDtcbiAgICBuZXh0ID0gTmlsXG4gIH0gaW5cbiAgbWF0Y2ggcS5sYXN0IHdpdGhcbiAgfCBOaWwgLT5cbiAgICBxLmxlbmd0aCA8LSAxO1xuICAgIHEuZmlyc3QgPC0gY2VsbDtcbiAgICBxLmxhc3QgPC0gY2VsbFxuICB8IENvbnMgbGFzdCAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoICsgMTtcbiAgICBsYXN0Lm5leHQgPC0gY2VsbDtcbiAgICBxLmxhc3QgPC0gY2VsbFxuXG5sZXQgcHVzaCA9XG4gIGFkZFxuXG5sZXQgcGVlayBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IHJhaXNlIEVtcHR5XG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBjb250ZW50XG5cbmxldCBwZWVrX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudCB9IC0+IFNvbWUgY29udGVudFxuXG5sZXQgdG9wID1cbiAgcGVla1xuXG5sZXQgdGFrZSBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IHJhaXNlIEVtcHR5XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSAtPlxuICAgIGNsZWFyIHE7XG4gICAgY29udGVudFxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCAtIDE7XG4gICAgcS5maXJzdCA8LSBuZXh0O1xuICAgIGNvbnRlbnRcblxubGV0IHRha2Vfb3B0IHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gTm9uZVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIFNvbWUgY29udGVudFxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCAtIDE7XG4gICAgcS5maXJzdCA8LSBuZXh0O1xuICAgIFNvbWUgY29udGVudFxuXG5sZXQgcG9wID1cbiAgdGFrZVxuXG5sZXQgY29weSA9XG4gIGxldCByZWMgY29weSBxX3JlcyBwcmV2IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IHFfcmVzLmxhc3QgPC0gcHJldjsgcV9yZXNcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCByZXMgPSBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IGluXG4gICAgICBiZWdpbiBtYXRjaCBwcmV2IHdpdGhcbiAgICAgIHwgTmlsIC0+IHFfcmVzLmZpcnN0IDwtIHJlc1xuICAgICAgfCBDb25zIHAgLT4gcC5uZXh0IDwtIHJlc1xuICAgICAgZW5kO1xuICAgICAgY29weSBxX3JlcyByZXMgbmV4dFxuICBpblxuICBmdW4gcSAtPiBjb3B5IHsgbGVuZ3RoID0gcS5sZW5ndGg7IGZpcnN0ID0gTmlsOyBsYXN0ID0gTmlsIH0gTmlsIHEuZmlyc3RcblxubGV0IGlzX2VtcHR5IHEgPVxuICBxLmxlbmd0aCA9IDBcblxubGV0IGxlbmd0aCBxID1cbiAgcS5sZW5ndGhcblxubGV0IGl0ZXIgPVxuICBsZXQgcmVjIGl0ZXIgZiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgZiBjb250ZW50O1xuICAgICAgaXRlciBmIG5leHRcbiAgaW5cbiAgZnVuIGYgcSAtPiBpdGVyIGYgcS5maXJzdFxuXG5sZXQgZm9sZCA9XG4gIGxldCByZWMgZm9sZCBmIGFjY3UgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gYWNjdVxuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgbGV0IGFjY3UgPSBmIGFjY3UgY29udGVudCBpblxuICAgICAgZm9sZCBmIGFjY3UgbmV4dFxuICBpblxuICBmdW4gZiBhY2N1IHEgLT4gZm9sZCBmIGFjY3UgcS5maXJzdFxuXG5sZXQgdHJhbnNmZXIgcTEgcTIgPVxuICBpZiBxMS5sZW5ndGggPiAwIHRoZW5cbiAgICBtYXRjaCBxMi5sYXN0IHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgcTIubGVuZ3RoIDwtIHExLmxlbmd0aDtcbiAgICAgIHEyLmZpcnN0IDwtIHExLmZpcnN0O1xuICAgICAgcTIubGFzdCA8LSBxMS5sYXN0O1xuICAgICAgY2xlYXIgcTFcbiAgICB8IENvbnMgbGFzdCAtPlxuICAgICAgcTIubGVuZ3RoIDwtIHEyLmxlbmd0aCArIHExLmxlbmd0aDtcbiAgICAgIGxhc3QubmV4dCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcSA9XG4gIGxldCByZWMgYXV4IGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICB8IE5pbCAtPiBTZXEuTmlsXG4gICAgfCBDb25zIHsgY29udGVudD14OyBuZXh0OyB9IC0+IFNlcS5Db25zICh4LCBhdXggbmV4dClcbiAgaW5cbiAgYXV4IHEuZmlyc3RcblxubGV0IGFkZF9zZXEgcSBpID0gU2VxLml0ZXIgKGZ1biB4IC0+IHB1c2ggeCBxKSBpXG5cbmxldCBvZl9zZXEgZyA9XG4gIGxldCBxID0gY3JlYXRlKCkgaW5cbiAgYWRkX3NlcSBxIGc7XG4gIHFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgRGFuaWVsIGRlIFJhdWdsYXVkcmUsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0gJ2EgY2VsbCBvcHRpb25cbmFuZCAnYSBjZWxsID0geyBtdXRhYmxlIGNvdW50IDogaW50OyBtdXRhYmxlIGRhdGEgOiAnYSBkYXRhIH1cbmFuZCAnYSBkYXRhID1cbiAgICBTZW1wdHlcbiAgfCBTY29ucyBvZiAnYSAqICdhIGRhdGFcbiAgfCBTYXBwIG9mICdhIGRhdGEgKiAnYSBkYXRhXG4gIHwgU2xhenkgb2YgJ2EgZGF0YSBMYXp5LnRcbiAgfCBTZ2VuIG9mICdhIGdlblxuICB8IFNidWZmaW8gOiBidWZmaW8gLT4gY2hhciBkYXRhXG5hbmQgJ2EgZ2VuID0geyBtdXRhYmxlIGN1cnIgOiAnYSBvcHRpb24gb3B0aW9uOyBmdW5jIDogaW50IC0+ICdhIG9wdGlvbiB9XG5hbmQgYnVmZmlvID1cbiAgeyBpYyA6IGluX2NoYW5uZWw7IGJ1ZmYgOiBieXRlczsgbXV0YWJsZSBsZW4gOiBpbnQ7IG11dGFibGUgaW5kIDogaW50IH1cblxuZXhjZXB0aW9uIEZhaWx1cmVcbmV4Y2VwdGlvbiBFcnJvciBvZiBzdHJpbmdcblxubGV0IGNvdW50ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IDBcbiAgfCBTb21lIHsgY291bnQgfSAtPiBjb3VudFxubGV0IGRhdGEgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gU2VtcHR5XG4gIHwgU29tZSB7IGRhdGEgfSAtPiBkYXRhXG5cbmxldCBmaWxsX2J1ZmYgYiA9XG4gIGIubGVuIDwtIGlucHV0IGIuaWMgYi5idWZmIDAgKEJ5dGVzLmxlbmd0aCBiLmJ1ZmYpOyBiLmluZCA8LSAwXG5cblxubGV0IHJlYyBnZXRfZGF0YSA6IHR5cGUgdi4gaW50IC0+IHYgZGF0YSAtPiB2IGRhdGEgPSBmdW4gY291bnQgZCAtPiBtYXRjaCBkIHdpdGhcbiAoKiBSZXR1cm5zIGVpdGhlciBTZW1wdHkgb3IgU2NvbnMoYSwgXykgZXZlbiB3aGVuIGQgaXMgYSBnZW5lcmF0b3JcbiAgICBvciBhIGJ1ZmZlci4gSW4gdGhvc2UgY2FzZXMsIHRoZSBpdGVtIGEgaXMgc2VlbiBhcyBleHRyYWN0ZWQgZnJvbVxuIHRoZSBnZW5lcmF0b3IvYnVmZmVyLlxuIFRoZSBjb3VudCBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgY2FsbGluZyBgU2dlbi1mdW5jdGlvbnMnLiAgKilcbiAgIFNlbXB0eSB8IFNjb25zIChfLCBfKSAtPiBkXG4gfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIGNvdW50IGQxIHdpdGhcbiAgICAgICBTY29ucyAoYSwgZDExKSAtPiBTY29ucyAoYSwgU2FwcCAoZDExLCBkMikpXG4gICAgIHwgU2VtcHR5IC0+IGdldF9kYXRhIGNvdW50IGQyXG4gICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgZW5kXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBOb25lfSAtPiBTZW1wdHlcbiB8IFNnZW4gKHtjdXJyID0gU29tZShTb21lIGEpfSBhcyBnKSAtPlxuICAgICBnLmN1cnIgPC0gTm9uZTsgU2NvbnMoYSwgZClcbiB8IFNnZW4gZyAtPlxuICAgICBiZWdpbiBtYXRjaCBnLmZ1bmMgY291bnQgd2l0aFxuICAgICAgIE5vbmUgLT4gZy5jdXJyIDwtIFNvbWUoTm9uZSk7IFNlbXB0eVxuICAgICB8IFNvbWUgYSAtPiBTY29ucyhhLCBkKVxuICAgICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgIGVuZFxuIHwgU2J1ZmZpbyBiIC0+XG4gICAgIGlmIGIuaW5kID49IGIubGVuIHRoZW4gZmlsbF9idWZmIGI7XG4gICAgIGlmIGIubGVuID09IDAgdGhlbiBTZW1wdHkgZWxzZVxuICAgICAgIGxldCByID0gQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQgaW5cbiAgICAgICAoKiBXYXJuaW5nOiBhbnlvbmUgdXNpbmcgZyB0aGlua3MgdGhhdCBhbiBpdGVtIGhhcyBiZWVuIHJlYWQgKilcbiAgICAgICBiLmluZCA8LSBzdWNjIGIuaW5kOyBTY29ucyhyLCBkKVxuIHwgU2xhenkgZiAtPiBnZXRfZGF0YSBjb3VudCAoTGF6eS5mb3JjZSBmKVxuXG5cbmxldCByZWMgcGVla19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdiBvcHRpb24gPSBmdW4gcyAtPlxuICgqIGNvbnN1bHQgdGhlIGZpcnN0IGl0ZW0gb2YgcyAqKVxuIG1hdGNoIHMuZGF0YSB3aXRoXG4gICBTZW1wdHkgLT4gTm9uZVxuIHwgU2NvbnMgKGEsIF8pIC0+IFNvbWUgYVxuIHwgU2FwcCAoXywgXykgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZ2V0X2RhdGEgcy5jb3VudCBzLmRhdGEgd2l0aFxuICAgICAgIFNjb25zKGEsIF8pIGFzIGQgLT4gcy5kYXRhIDwtIGQ7IFNvbWUgYVxuICAgICB8IFNlbXB0eSAtPiBOb25lXG4gICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgZW5kXG4gfCBTbGF6eSBmIC0+IHMuZGF0YSA8LSAoTGF6eS5mb3JjZSBmKTsgcGVla19kYXRhIHNcbiB8IFNnZW4ge2N1cnIgPSBTb21lIGF9IC0+IGFcbiB8IFNnZW4gZyAtPiBsZXQgeCA9IGcuZnVuYyBzLmNvdW50IGluIGcuY3VyciA8LSBTb21lIHg7IHhcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gYmVnaW4gcy5kYXRhIDwtIFNlbXB0eTsgTm9uZSBlbmRcbiAgICAgZWxzZSBTb21lIChCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZiBiLmluZClcblxuXG5sZXQgcGVlayA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBOb25lXG4gIHwgU29tZSBzIC0+IHBlZWtfZGF0YSBzXG5cblxubGV0IHJlYyBqdW5rX2RhdGEgOiB0eXBlIHYuIHYgY2VsbCAtPiB1bml0ID0gZnVuIHMgLT5cbiAgbWF0Y2ggcy5kYXRhIHdpdGhcbiAgICBTY29ucyAoXywgZCkgLT4gcy5jb3VudCA8LSAoc3VjYyBzLmNvdW50KTsgcy5kYXRhIDwtIGRcbiAgfCBTZ2VuICh7Y3VyciA9IFNvbWUgX30gYXMgZykgLT4gcy5jb3VudCA8LSAoc3VjYyBzLmNvdW50KTsgZy5jdXJyIDwtIE5vbmVcbiAgfCBTYnVmZmlvIGIgLT5cbiAgICAgIGlmIGIuaW5kID49IGIubGVuIHRoZW4gZmlsbF9idWZmIGI7XG4gICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gcy5kYXRhIDwtIFNlbXB0eVxuICAgICAgZWxzZSAocy5jb3VudCA8LSAoc3VjYyBzLmNvdW50KTsgYi5pbmQgPC0gc3VjYyBiLmluZClcbiAgfCBfIC0+XG4gICAgICBtYXRjaCBwZWVrX2RhdGEgcyB3aXRoXG4gICAgICAgIE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBfIC0+IGp1bmtfZGF0YSBzXG5cblxubGV0IGp1bmsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIGRhdGEgLT4ganVua19kYXRhIGRhdGFcblxubGV0IHJlYyBuZ2V0X2RhdGEgbiBzID1cbiAgaWYgbiA8PSAwIHRoZW4gW10sIHMuZGF0YSwgMFxuICBlbHNlXG4gICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgU29tZSBhIC0+XG4gICAgICAgIGp1bmtfZGF0YSBzO1xuICAgICAgICBsZXQgKGFsLCBkLCBrKSA9IG5nZXRfZGF0YSAocHJlZCBuKSBzIGluIGEgOjogYWwsIFNjb25zIChhLCBkKSwgc3VjYyBrXG4gICAgfCBOb25lIC0+IFtdLCBzLmRhdGEsIDBcblxuXG5sZXQgbnBlZWtfZGF0YSBuIHMgPVxuICBsZXQgKGFsLCBkLCBsZW4pID0gbmdldF9kYXRhIG4gcyBpblxuICBzLmNvdW50IDwtIChzLmNvdW50IC0gbGVuKTtcbiAgcy5kYXRhIDwtIGQ7XG4gIGFsXG5cblxubGV0IG5wZWVrIG4gPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIGQgLT4gbnBlZWtfZGF0YSBuIGRcblxubGV0IG5leHQgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBhIC0+IGp1bmsgczsgYVxuICB8IE5vbmUgLT4gcmFpc2UgRmFpbHVyZVxuXG5cbmxldCBlbXB0eSBzID1cbiAgbWF0Y2ggcGVlayBzIHdpdGhcbiAgICBTb21lIF8gLT4gcmFpc2UgRmFpbHVyZVxuICB8IE5vbmUgLT4gKClcblxuXG5sZXQgaXRlciBmIHN0cm0gPVxuICBsZXQgcmVjIGRvX3JlYyAoKSA9XG4gICAgbWF0Y2ggcGVlayBzdHJtIHdpdGhcbiAgICAgIFNvbWUgYSAtPiBqdW5rIHN0cm07IGlnbm9yZShmIGEpOyBkb19yZWMgKClcbiAgICB8IE5vbmUgLT4gKClcbiAgaW5cbiAgZG9fcmVjICgpXG5cblxuKCogU3RyZWFtIGJ1aWxkaW5nIGZ1bmN0aW9ucyAqKVxuXG5sZXQgZnJvbSBmID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2dlbiB7Y3VyciA9IE5vbmU7IGZ1bmMgPSBmfX1cblxubGV0IG9mX2xpc3QgbCA9XG4gIFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IExpc3QuZm9sZF9yaWdodCAoZnVuIHggbCAtPiBTY29ucyAoeCwgbCkpIGwgU2VtcHR5fVxuXG5cbmxldCBvZl9zdHJpbmcgcyA9XG4gIGxldCBjb3VudCA9IHJlZiAwIGluXG4gIGZyb20gKGZ1biBfIC0+XG4gICAgKCogV2UgY2Fubm90IHVzZSB0aGUgaW5kZXggcGFzc2VkIGJ5IHRoZSBbZnJvbV0gZnVuY3Rpb24gZGlyZWN0bHlcbiAgICAgICBiZWNhdXNlIGl0IHJldHVybnMgdGhlIGN1cnJlbnQgc3RyZWFtIGNvdW50LCB3aXRoIGFic29sdXRlbHkgbm9cbiAgICAgICBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIHN0YXJ0IGZyb20gMC4gRm9yIGV4YW1wbGUsIGluIHRoZSBjYXNlXG4gICAgICAgb2YgW1N0cmVhbS5pY29ucyAnYycgKFN0cmVhbS5mcm9tX3N0cmluZyBcImFiXCIpXSwgdGhlIGZpcnN0XG4gICAgICAgYWNjZXNzIHRvIHRoZSBzdHJpbmcgd2lsbCBiZSBtYWRlIHdpdGggY291bnQgWzFdIGFscmVhZHkuXG4gICAgKilcbiAgICBsZXQgYyA9ICFjb3VudCBpblxuICAgIGlmIGMgPCBTdHJpbmcubGVuZ3RoIHNcbiAgICB0aGVuIChpbmNyIGNvdW50OyBTb21lIHMuW2NdKVxuICAgIGVsc2UgTm9uZSlcblxuXG5sZXQgb2ZfYnl0ZXMgcyA9XG4gIGxldCBjb3VudCA9IHJlZiAwIGluXG4gIGZyb20gKGZ1biBfIC0+XG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgQnl0ZXMubGVuZ3RoIHNcbiAgICB0aGVuIChpbmNyIGNvdW50OyBTb21lIChCeXRlcy5nZXQgcyBjKSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2NoYW5uZWwgaWMgPVxuICBTb21lIHtjb3VudCA9IDA7XG4gICAgICAgIGRhdGEgPSBTYnVmZmlvIHtpYyA9IGljOyBidWZmID0gQnl0ZXMuY3JlYXRlIDQwOTY7IGxlbiA9IDA7IGluZCA9IDB9fVxuXG5cbigqIFN0cmVhbSBleHByZXNzaW9ucyBidWlsZGVycyAqKVxuXG5sZXQgaWFwcCBpIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTYXBwIChkYXRhIGksIGRhdGEgcyl9XG5sZXQgaWNvbnMgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2NvbnMgKGksIGRhdGEgcyl9XG5sZXQgaXNpbmcgaSA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBTZW1wdHkpfVxuXG5sZXQgbGFwcCBmIHMgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTYXBwIChkYXRhIChmICgpKSwgZGF0YSBzKSkpfVxuXG5sZXQgbGNvbnMgZiBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2NvbnMgKGYgKCksIGRhdGEgcykpKX1cbmxldCBsc2luZyBmID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2NvbnMgKGYgKCksIFNlbXB0eSkpKX1cblxubGV0IHNlbXB0eSA9IE5vbmVcbmxldCBzbGF6eSBmID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoZGF0YSAoZiAoKSkpKX1cblxuKCogRm9yIGRlYnVnZ2luZyB1c2UgKilcblxubGV0IHJlYyBkdW1wIDogdHlwZSB2LiAodiAtPiB1bml0KSAtPiB2IHQgLT4gdW5pdCA9IGZ1biBmIHMgLT5cbiAgcHJpbnRfc3RyaW5nIFwie2NvdW50ID0gXCI7XG4gIHByaW50X2ludCAoY291bnQgcyk7XG4gIHByaW50X3N0cmluZyBcIjsgZGF0YSA9IFwiO1xuICBkdW1wX2RhdGEgZiAoZGF0YSBzKTtcbiAgcHJpbnRfc3RyaW5nIFwifVwiO1xuICBwcmludF9uZXdsaW5lICgpXG5hbmQgZHVtcF9kYXRhIDogdHlwZSB2LiAodiAtPiB1bml0KSAtPiB2IGRhdGEgLT4gdW5pdCA9IGZ1biBmIC0+XG4gIGZ1bmN0aW9uXG4gICAgU2VtcHR5IC0+IHByaW50X3N0cmluZyBcIlNlbXB0eVwiXG4gIHwgU2NvbnMgKGEsIGQpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTY29ucyAoXCI7XG4gICAgICBmIGE7XG4gICAgICBwcmludF9zdHJpbmcgXCIsIFwiO1xuICAgICAgZHVtcF9kYXRhIGYgZDtcbiAgICAgIHByaW50X3N0cmluZyBcIilcIlxuICB8IFNhcHAgKGQxLCBkMikgLT5cbiAgICAgIHByaW50X3N0cmluZyBcIlNhcHAgKFwiO1xuICAgICAgZHVtcF9kYXRhIGYgZDE7XG4gICAgICBwcmludF9zdHJpbmcgXCIsIFwiO1xuICAgICAgZHVtcF9kYXRhIGYgZDI7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTbGF6eSBfIC0+IHByaW50X3N0cmluZyBcIlNsYXp5XCJcbiAgfCBTZ2VuIF8gLT4gcHJpbnRfc3RyaW5nIFwiU2dlblwiXG4gIHwgU2J1ZmZpbyBfIC0+IHByaW50X3N0cmluZyBcIlNidWZmaW9cIlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgUGllcnJlIFdlaXMgYW5kIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5OSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeHRlbnNpYmxlIGJ1ZmZlcnMgKilcblxudHlwZSB0ID1cbiB7bXV0YWJsZSBidWZmZXIgOiBieXRlcztcbiAgbXV0YWJsZSBwb3NpdGlvbiA6IGludDtcbiAgbXV0YWJsZSBsZW5ndGggOiBpbnQ7XG4gIGluaXRpYWxfYnVmZmVyIDogYnl0ZXN9XG4oKiBJbnZhcmlhbnRzOiBhbGwgcGFydHMgb2YgdGhlIGNvZGUgcHJlc2VydmUgdGhlIGludmFyaWFudHMgdGhhdDpcbiAgIC0gWzAgPD0gYi5wb3NpdGlvbiA8PSBiLmxlbmd0aF1cbiAgIC0gW2IubGVuZ3RoID0gQnl0ZXMubGVuZ3RoIGIuYnVmZmVyXVxuXG4gICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCBbYi5wb3NpdGlvbiA9IGIubGVuZ3RoXSBpcyBsZWdhbCxcbiAgIGl0IG1lYW5zIHRoYXQgdGhlIGJ1ZmZlciBpcyBmdWxsIGFuZCB3aWxsIGhhdmUgdG8gYmUgZXh0ZW5kZWRcbiAgIGJlZm9yZSBhbnkgZnVydGhlciBhZGRpdGlvbi4gKilcblxubGV0IGNyZWF0ZSBuID1cbiBsZXQgbiA9IGlmIG4gPCAxIHRoZW4gMSBlbHNlIG4gaW5cbiBsZXQgbiA9IGlmIG4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBTeXMubWF4X3N0cmluZ19sZW5ndGggZWxzZSBuIGluXG4gbGV0IHMgPSBCeXRlcy5jcmVhdGUgbiBpblxuIHtidWZmZXIgPSBzOyBwb3NpdGlvbiA9IDA7IGxlbmd0aCA9IG47IGluaXRpYWxfYnVmZmVyID0gc31cblxubGV0IGNvbnRlbnRzIGIgPSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxubGV0IHRvX2J5dGVzIGIgPSBCeXRlcy5zdWIgYi5idWZmZXIgMCBiLnBvc2l0aW9uXG5cbmxldCBzdWIgYiBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGIucG9zaXRpb24gLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5zdWJcIlxuICBlbHNlIEJ5dGVzLnN1Yl9zdHJpbmcgYi5idWZmZXIgb2ZzIGxlblxuXG5cbmxldCBibGl0IHNyYyBzcmNvZmYgZHN0IGRzdG9mZiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IHNyY29mZiA8IDAgfHwgc3Jjb2ZmID4gc3JjLnBvc2l0aW9uIC0gbGVuXG4gICAgICAgICAgICAgfHwgZHN0b2ZmIDwgMCB8fCBkc3RvZmYgPiAoQnl0ZXMubGVuZ3RoIGRzdCkgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5ibGl0XCJcbiAgZWxzZVxuICAgIEJ5dGVzLnVuc2FmZV9ibGl0IHNyYy5idWZmZXIgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuXG5cblxubGV0IG50aCBiIG9mcyA9XG4gIGlmIG9mcyA8IDAgfHwgb2ZzID49IGIucG9zaXRpb24gdGhlblxuICAgaW52YWxpZF9hcmcgXCJCdWZmZXIubnRoXCJcbiAgZWxzZSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIG9mc1xuXG5cbmxldCBsZW5ndGggYiA9IGIucG9zaXRpb25cblxubGV0IGNsZWFyIGIgPSBiLnBvc2l0aW9uIDwtIDBcblxubGV0IHJlc2V0IGIgPVxuICBiLnBvc2l0aW9uIDwtIDA7XG4gIGIuYnVmZmVyIDwtIGIuaW5pdGlhbF9idWZmZXI7XG4gIGIubGVuZ3RoIDwtIEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlclxuXG4oKiBbcmVzaXplIGIgbW9yZV0gZW5zdXJlcyB0aGF0IFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gaG9sZHNcbiAgIGJ5IGR5bmFtaWNhbGx5IGV4dGVuZGluZyBbYi5idWZmZXJdIGlmIG5lY2Vzc2FyeSAtLSBhbmQgdGh1c1xuICAgaW5jcmVhc2luZyBbYi5sZW5ndGhdLlxuXG4gICBJbiBwYXJ0aWN1bGFyLCBhZnRlciBbcmVzaXplIGIgbW9yZV0gaXMgY2FsbGVkLCBhIGRpcmVjdCBhY2Nlc3Mgb2ZcbiAgIHNpemUgW21vcmVdIGF0IFtiLnBvc2l0aW9uXSB3aWxsIGFsd2F5cyBiZSBpbi1ib3VuZHMsIHNvIHRoYXRcbiAgICh1bnNhZmVfe2dldCxzZXR9KSBtYXkgYmUgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG4qKVxubGV0IHJlc2l6ZSBiIG1vcmUgPVxuICBsZXQgb2xkX3BvcyA9IGIucG9zaXRpb24gaW5cbiAgbGV0IG9sZF9sZW4gPSBiLmxlbmd0aCBpblxuICBsZXQgbmV3X2xlbiA9IHJlZiBvbGRfbGVuIGluXG4gIHdoaWxlIG9sZF9wb3MgKyBtb3JlID4gIW5ld19sZW4gZG8gbmV3X2xlbiA6PSAyICogIW5ld19sZW4gZG9uZTtcbiAgaWYgIW5ld19sZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiBiZWdpblxuICAgIGlmIG9sZF9wb3MgKyBtb3JlIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgIHRoZW4gbmV3X2xlbiA6PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICBlbHNlIGZhaWx3aXRoIFwiQnVmZmVyLmFkZDogY2Fubm90IGdyb3cgYnVmZmVyXCJcbiAgZW5kO1xuICBsZXQgbmV3X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAhbmV3X2xlbiBpblxuICAoKiBQUiM2MTQ4OiBsZXQncyBrZWVwIHVzaW5nIFtibGl0XSByYXRoZXIgdGhhbiBbdW5zYWZlX2JsaXRdIGluXG4gICAgIHRoaXMgdHJpY2t5IGZ1bmN0aW9uIHRoYXQgaXMgc2xvdyBhbnl3YXkuICopXG4gIEJ5dGVzLmJsaXQgYi5idWZmZXIgMCBuZXdfYnVmZmVyIDAgYi5wb3NpdGlvbjtcbiAgYi5idWZmZXIgPC0gbmV3X2J1ZmZlcjtcbiAgYi5sZW5ndGggPC0gIW5ld19sZW47XG4gIGFzc2VydCAoYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGgpO1xuICBhc3NlcnQgKG9sZF9wb3MgKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgKClcbiAgKCogTm90ZTogdGhlcmUgYXJlIHZhcmlvdXMgc2l0dWF0aW9ucyAocHJlZW1wdGl2ZSB0aHJlYWRzLCBzaWduYWxzIGFuZFxuICAgICBnYyBmaW5hbGl6ZXJzKSB3aGVyZSBPQ2FtbCBjb2RlIG1heSBiZSBydW4gYXN5bmNocm9ub3VzbHk7IGluXG4gICAgIHBhcnRpY3VsYXIsIHRoZXJlIG1heSBiZSBhIHJhY2Ugd2l0aCBhbm90aGVyIHVzZXIgb2YgW2JdLCBjaGFuZ2luZ1xuICAgICBpdHMgbXV0YWJsZSBmaWVsZHMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgW3Jlc2l6ZV0gY2FsbC4gVGhlIEJ1ZmZlclxuICAgICBtb2R1bGUgZG9lcyBub3QgcHJvdmlkZSBhbnkgY29ycmVjdG5lc3MgZ3VhcmFudGVlIGlmIHRoYXQgaGFwcGVucyxcbiAgICAgYnV0IHdlIG11c3Qgc3RpbGwgZW5zdXJlIHRoYXQgdGhlIGRhdGFzdHJ1Y3R1cmUgaW52YXJpYW50cyBob2xkIGZvclxuICAgICBtZW1vcnktc2FmZXR5IC0tIGFzIHdlIHBsYW4gdG8gdXNlIFt1bnNhZmVfe2dldCxzZXR9XS5cblxuICAgICBUaGVyZSBhcmUgdHdvIHBvdGVudGlhbCBhbGxvY2F0aW9uIHBvaW50cyBpbiB0aGlzIGZ1bmN0aW9uLFxuICAgICBbcmVmXSBhbmQgW0J5dGVzLmNyZWF0ZV0sIGJ1dCBhbGwgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgZmllbGRzXG4gICAgIG9mIFtiXSBoYXBwZW4gYmVmb3JlIGJvdGggb2YgdGhlbSBvciBhZnRlciBib3RoIG9mIHRoZW0uXG5cbiAgICAgV2UgdGhlcmVmb3JlIGFzc3VtZSB0aGF0IFtiLnBvc2l0aW9uXSBtYXkgY2hhbmdlIGF0IHRoZXNlIGFsbG9jYXRpb25zLFxuICAgICBhbmQgY2hlY2sgdGhhdCB0aGUgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBwb3N0Y29uZGl0aW9uXG4gICAgIGhvbGRzIGZvciBib3RoIHZhbHVlcyBvZiBbYi5wb3NpdGlvbl0sIGJlZm9yZSBvciBhZnRlciB0aGUgZnVuY3Rpb25cbiAgICAgaXMgY2FsbGVkLiBNb3JlIHByZWNpc2VseSwgdGhlIGZvbGxvd2luZyBpbnZhcmlhbnRzIG11c3QgaG9sZCBpZiB0aGVcbiAgICAgZnVuY3Rpb24gcmV0dXJucyBjb3JyZWN0bHksIGluIGFkZGl0aW9uIHRvIHRoZSB1c3VhbCBidWZmZXIgaW52YXJpYW50czpcbiAgICAgLSBbb2xkKGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtuZXcoYi5wb3NpdGlvbikgKyBtb3JlIDw9IG5ldyhiLmxlbmd0aCldXG4gICAgIC0gW29sZChiLmxlbmd0aCkgPD0gbmV3KGIubGVuZ3RoKV1cblxuICAgICBOb3RlOiBbYi5wb3NpdGlvbiArIG1vcmUgPD0gb2xkKGIubGVuZ3RoKV0gZG9lcyAqbm90KlxuICAgICBob2xkIGluIGdlbmVyYWwsIGFzIGl0IGlzIHByZWNpc2VseSB0aGUgY2FzZSB3aGVyZSB5b3UgbmVlZFxuICAgICB0byBjYWxsIFtyZXNpemVdIHRvIGluY3JlYXNlIFtiLmxlbmd0aF0uXG5cbiAgICAgTm90ZTogW2Fzc2VydF0gYWJvdmUgZG9lcyBub3QgbWVhbiB0aGF0IHdlIGtub3cgdGhlIGNvbmRpdGlvbnNcbiAgICAgYWx3YXlzIGhvbGQsIGJ1dCB0aGF0IHRoZSBmdW5jdGlvbiBtYXkgcmV0dXJuIGNvcnJlY3RseVxuICAgICBvbmx5IGlmIHRoZXkgaG9sZC5cblxuICAgICBOb3RlOiB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIGRvZXMgbm90IG5lZWRcbiAgICAgdG8gYmUgY2hlY2tlZCB3aXRoIHRoaXMgbGV2ZWwgb2Ygc2NydXRpbnksIGdpdmVuIHRoYXQgdGhleVxuICAgICByZWFkL3dyaXRlIHRoZSBidWZmZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgY2hlY2tpbmcgdGhhdFxuICAgICBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGQgb3IgY2FsbGluZyBbcmVzaXplXS5cbiAgKilcblxubGV0IGFkZF9jaGFyIGIgYyA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDE7XG4gIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgcG9zIGM7XG4gIGIucG9zaXRpb24gPC0gcG9zICsgMVxuXG5sZXQgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4ID0gNFxubGV0IHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXggPSA0XG5cbmxldCByZWMgYWRkX3V0Zl84X3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzhfdWNoYXIgYi5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzhfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmJlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmJlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZiZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IHJlYyBhZGRfdXRmXzE2bGVfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzE2bGVfdWNoYXIgYi5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgYWRkX3N1YnN0cmluZyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGlmIG9mZnNldCA8IDAgfHwgbGVuIDwgMCB8fCBvZmZzZXQgPiBTdHJpbmcubGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfc3Vic3RyaW5nL2FkZF9zdWJieXRlc1wiO1xuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIGxlbiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIGxlbjtcbiAgQnl0ZXMudW5zYWZlX2JsaXRfc3RyaW5nIHMgb2Zmc2V0IGIuYnVmZmVyIGIucG9zaXRpb24gbGVuO1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX3N1YmJ5dGVzIGIgcyBvZmZzZXQgbGVuID1cbiAgYWRkX3N1YnN0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpIG9mZnNldCBsZW5cblxubGV0IGFkZF9zdHJpbmcgYiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIGxlbiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIGxlbjtcbiAgQnl0ZXMudW5zYWZlX2JsaXRfc3RyaW5nIHMgMCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9ieXRlcyBiIHMgPSBhZGRfc3RyaW5nIGIgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcylcblxubGV0IGFkZF9idWZmZXIgYiBicyA9XG4gIGFkZF9zdWJieXRlcyBiIGJzLmJ1ZmZlciAwIGJzLnBvc2l0aW9uXG5cbigqIHRoaXMgKHByaXZhdGUpIGZ1bmN0aW9uIGNvdWxkIG1vdmUgaW50byB0aGUgc3RhbmRhcmQgbGlicmFyeSAqKVxubGV0IHJlYWxseV9pbnB1dF91cF90byBpYyBidWYgb2ZzIGxlbiA9XG4gIGxldCByZWMgbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZCB+b2ZzIH50b19yZWFkID1cbiAgICBpZiB0b19yZWFkID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gaW5wdXQgaWMgYnVmIG9mcyB0b19yZWFkIGluXG4gICAgICBpZiByID0gMCB0aGVuIGFscmVhZHlfcmVhZFxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBsZXQgYWxyZWFkeV9yZWFkID0gYWxyZWFkeV9yZWFkICsgciBpblxuICAgICAgICBsZXQgb2ZzID0gb2ZzICsgciBpblxuICAgICAgICBsZXQgdG9fcmVhZCA9IHRvX3JlYWQgLSByIGluXG4gICAgICAgIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZFxuICAgICAgZW5kXG4gICAgZW5kXG4gIGluIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQ6MCB+b2ZzIH50b19yZWFkOmxlblxuXG5cbmxldCB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gPVxuICBpZiBiLnBvc2l0aW9uICsgbGVuID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIGxldCBuID0gcmVhbGx5X2lucHV0X3VwX3RvIGljIGIuYnVmZmVyIGIucG9zaXRpb24gbGVuIGluXG4gICgqIFRoZSBhc3NlcnRpb24gYmVsb3cgbWF5IGZhaWwgaW4gd2VpcmQgc2NlbmFyaW8gd2hlcmVcbiAgICAgdGhyZWFkZWQvZmluYWxpemVyIGNvZGUsIHJ1biBhc3luY2hyb25vdXNseSBkdXJpbmcgdGhlXG4gICAgIFtyZWFsbHlfaW5wdXRfdXBfdG9dIGNhbGwsIHJhY2VzIG9uIHRoZSBidWZmZXI7IHdlIGRvbid0IGVuc3VyZVxuICAgICBjb3JyZWN0bmVzcyBpbiB0aGlzIGNhc2UsIGJ1dCBuZWVkIHRvIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIGZvclxuICAgICBtZW1vcnktc2FmZXR5IChzZWUgZGlzY3Vzc2lvbiBvZiBbcmVzaXplXSkuICopXG4gIGFzc2VydCAoYi5wb3NpdGlvbiArIG4gPD0gYi5sZW5ndGgpO1xuICBiLnBvc2l0aW9uIDwtIGIucG9zaXRpb24gKyBuO1xuICBuXG5cbmxldCBhZGRfY2hhbm5lbCBiIGljIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gICAoKiBQUiM1MDA0ICopXG4gICAgaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX2NoYW5uZWxcIjtcbiAgbGV0IG4gPSB1bnNhZmVfYWRkX2NoYW5uZWxfdXBfdG8gYiBpYyBsZW4gaW5cbiAgKCogSXQgaXMgaW50ZW50aW9uYWwgdGhhdCBhIGNvbnN1bWVyIGNhdGNoaW5nIEVuZF9vZl9maWxlXG4gICAgIHdpbGwgc2VlIHRoZSBkYXRhIHdyaXR0ZW4gKHNlZSAjNjcxOSwgIzcxMzYpLiAqKVxuICBpZiBuIDwgbGVuIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGU7XG4gICgpXG5cbmxldCBvdXRwdXRfYnVmZmVyIG9jIGIgPVxuICBvdXRwdXQgb2MgYi5idWZmZXIgMCBiLnBvc2l0aW9uXG5cbmxldCBjbG9zaW5nID0gZnVuY3Rpb25cbiAgfCAnKCcgLT4gJyknXG4gIHwgJ3snIC0+ICd9J1xuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbigqIG9wZW5pbmcgYW5kIGNsb3Npbmc6IG9wZW4gYW5kIGNsb3NlIGNoYXJhY3RlcnMsIHR5cGljYWxseSAoIGFuZCApXG4gICBrOiBiYWxhbmNlIG9mIG9wZW5pbmcgYW5kIGNsb3NpbmcgY2hhcnNcbiAgIHM6IHRoZSBzdHJpbmcgd2hlcmUgd2UgYXJlIHNlYXJjaGluZ1xuICAgc3RhcnQ6IHRoZSBpbmRleCB3aGVyZSB3ZSBzdGFydCB0aGUgc2VhcmNoLiAqKVxubGV0IGFkdmFuY2VfdG9fY2xvc2luZyBvcGVuaW5nIGNsb3NpbmcgayBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGsgaSBsaW0gPVxuICAgIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgICBpZiBzLltpXSA9IG9wZW5pbmcgdGhlbiBhZHZhbmNlIChrICsgMSkgKGkgKyAxKSBsaW0gZWxzZVxuICAgIGlmIHMuW2ldID0gY2xvc2luZyB0aGVuXG4gICAgICBpZiBrID0gMCB0aGVuIGkgZWxzZSBhZHZhbmNlIChrIC0gMSkgKGkgKyAxKSBsaW1cbiAgICBlbHNlIGFkdmFuY2UgayAoaSArIDEpIGxpbSBpblxuICBhZHZhbmNlIGsgc3RhcnQgKFN0cmluZy5sZW5ndGggcylcblxubGV0IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgaSBsaW0gPVxuICAgIGlmIGkgPj0gbGltIHRoZW4gbGltIGVsc2VcbiAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgfCAnYScgLi4gJ3onIHwgJ0EnIC4uICdaJyB8ICcwJyAuLiAnOScgfCAnXycgLT4gYWR2YW5jZSAoaSArIDEpIGxpbVxuICAgIHwgXyAtPiBpIGluXG4gIGFkdmFuY2Ugc3RhcnQgKFN0cmluZy5sZW5ndGggcylcblxuKCogV2UgYXJlIGp1c3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBpZGVudCBpbiBzLCBzdGFydGluZyBhdCBzdGFydC4gKilcbmxldCBmaW5kX2lkZW50IHMgc3RhcnQgbGltID1cbiAgaWYgc3RhcnQgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgbWF0Y2ggcy5bc3RhcnRdIHdpdGhcbiAgKCogUGFyZW50aGVzaXplZCBpZGVudCA/ICopXG4gIHwgJygnIHwgJ3snIGFzIGMgLT5cbiAgICAgbGV0IG5ld19zdGFydCA9IHN0YXJ0ICsgMSBpblxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fY2xvc2luZyBjIChjbG9zaW5nIGMpIDAgcyBuZXdfc3RhcnQgaW5cbiAgICAgU3RyaW5nLnN1YiBzIG5ld19zdGFydCAoc3RvcCAtIHN0YXJ0IC0gMSksIHN0b3AgKyAxXG4gICgqIFJlZ3VsYXIgaWRlbnQgKilcbiAgfCBfIC0+XG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19ub25fYWxwaGEgcyAoc3RhcnQgKyAxKSBpblxuICAgICBTdHJpbmcuc3ViIHMgc3RhcnQgKHN0b3AgLSBzdGFydCksIHN0b3BcblxuKCogU3Vic3RpdHV0ZSAkaWRlbnQsICQoaWRlbnQpLCBvciAke2lkZW50fSBpbiBzLFxuICAgIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24gbWFwcGluZyBmLiAqKVxubGV0IGFkZF9zdWJzdGl0dXRlIGIgZiBzID1cbiAgbGV0IGxpbSA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgcmVjIHN1YnN0IHByZXZpb3VzIGkgPVxuICAgIGlmIGkgPCBsaW0gdGhlbiBiZWdpblxuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnJCcgYXMgY3VycmVudCB3aGVuIHByZXZpb3VzID0gJ1xcXFwnIC0+XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnJCcgLT5cbiAgICAgICAgIGxldCBqID0gaSArIDEgaW5cbiAgICAgICAgIGxldCBpZGVudCwgbmV4dF9pID0gZmluZF9pZGVudCBzIGogbGltIGluXG4gICAgICAgICBhZGRfc3RyaW5nIGIgKGYgaWRlbnQpO1xuICAgICAgICAgc3Vic3QgJyAnIG5leHRfaVxuICAgICAgfCBjdXJyZW50IHdoZW4gcHJldmlvdXMgPT0gJ1xcXFwnIC0+XG4gICAgICAgICBhZGRfY2hhciBiICdcXFxcJztcbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0ICcgJyAoaSArIDEpXG4gICAgICB8ICdcXFxcJyBhcyBjdXJyZW50IC0+XG4gICAgICAgICBzdWJzdCBjdXJyZW50IChpICsgMSlcbiAgICAgIHwgY3VycmVudCAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgZW5kIGVsc2VcbiAgICBpZiBwcmV2aW91cyA9ICdcXFxcJyB0aGVuIGFkZF9jaGFyIGIgcHJldmlvdXMgaW5cbiAgc3Vic3QgJyAnIDBcblxubGV0IHRydW5jYXRlIGIgbGVuID1cbiAgICBpZiBsZW4gPCAwIHx8IGxlbiA+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLnRydW5jYXRlXCJcbiAgICBlbHNlXG4gICAgICBiLnBvc2l0aW9uIDwtIGxlblxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBhZGRfc2VxIGIgc2VxID0gU2VxLml0ZXIgKGFkZF9jaGFyIGIpIHNlcVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgYiA9IGNyZWF0ZSAzMiBpblxuICBhZGRfc2VxIGIgaTtcbiAgYlxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50MTYgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDMyIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMydVwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDY0IDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0dVwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5cbmxldCBhZGRfaW50OCBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDEgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICB1bnNhZmVfc2V0X2ludDggYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDE2X25lIGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgMiBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDI7XG4gIHVuc2FmZV9zZXRfaW50MTYgYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDMyX25lIGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgNCBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDQ7XG4gIHVuc2FmZV9zZXRfaW50MzIgYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDY0X25lIGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgOCBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDg7XG4gIHVuc2FmZV9zZXRfaW50NjQgYi5idWZmZXIgYi5wb3NpdGlvbiB4O1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2ludDE2X2xlIGIgeCA9XG4gIGFkZF9pbnQxNl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQxNl9iZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDE2IHgpXG5cbmxldCBhZGRfaW50MzJfbGUgYiB4ID1cbiAgYWRkX2ludDMyX25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDMyX2JlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwMzIgeClcblxubGV0IGFkZF9pbnQ2NF9sZSBiIHggPVxuICBhZGRfaW50NjRfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50NjRfYmUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXA2NCB4KVxuXG5sZXQgYWRkX3VpbnQ4ID0gYWRkX2ludDhcbmxldCBhZGRfdWludDE2X25lID0gYWRkX2ludDE2X25lXG5sZXQgYWRkX3VpbnQxNl9sZSA9IGFkZF9pbnQxNl9sZVxubGV0IGFkZF91aW50MTZfYmUgPSBhZGRfaW50MTZfYmVcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3NcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgKCogVG9vbHMgdG8gbWFuaXB1bGF0ZSBzY2FubmluZyBzZXQgb2YgY2hhcnMgKHNlZSAlWy4uLl0pICopXG5cbnR5cGUgbXV0YWJsZV9jaGFyX3NldCA9IGJ5dGVzXG5cbigqIENyZWF0ZSBhIGZyZXNoLCBlbXB0eSwgbXV0YWJsZSBjaGFyIHNldC4gKilcbmxldCBjcmVhdGVfY2hhcl9zZXQgKCkgPSBCeXRlcy5tYWtlIDMyICdcXDAwMCdcblxuKCogQWRkIGEgY2hhciBpbiBhIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgPVxuICBsZXQgaW5kID0gaW50X29mX2NoYXIgYyBpblxuICBsZXQgc3RyX2luZCA9IGluZCBsc3IgMyBhbmQgbWFzayA9IDEgbHNsIChpbmQgbGFuZCAwYjExMSkgaW5cbiAgQnl0ZXMuc2V0IGNoYXJfc2V0IHN0cl9pbmRcbiAgICAoY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIChCeXRlcy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbG9yIG1hc2spKVxuXG5sZXQgZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgQnl0ZXMudG9fc3RyaW5nIGNoYXJfc2V0XG5cbigqIENvbXB1dGUgdGhlIGNvbXBsZW1lbnQgb2YgYSBjaGFyIHNldC4gKilcbmxldCByZXZfY2hhcl9zZXQgY2hhcl9zZXQgPVxuICBsZXQgY2hhcl9zZXQnID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gIGZvciBpID0gMCB0byAzMSBkb1xuICAgIEJ5dGVzLnNldCBjaGFyX3NldCcgaVxuICAgICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoU3RyaW5nLmdldCBjaGFyX3NldCBpKSBseG9yIDB4RkYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBjaGFyX3NldCdcblxuKCogUmV0dXJuIHRydWUgaWYgYSBgYycgaXMgaW4gYGNoYXJfc2V0Jy4gKilcbmxldCBpc19pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIChpbnRfb2ZfY2hhciAoU3RyaW5nLmdldCBjaGFyX3NldCBzdHJfaW5kKSBsYW5kIG1hc2spIDw+IDBcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIElnbm9yZWQgcGFyYW0gY29udmVyc2lvbiAqKVxuXG4oKiBHQURUIHVzZWQgdG8gYWJzdHJhY3QgYW4gZXhpc3RlbnRpYWwgdHlwZSBwYXJhbWV0ZXIuICopXG4oKiBTZWUgcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0LiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFyYW1fZm9ybWF0X2ViYiA9IFBhcmFtX2Zvcm1hdF9FQkIgOlxuICAgICgneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFyYW1fZm9ybWF0X2ViYlxuXG4oKiBDb21wdXRlIGEgcGFkZGluZyBhc3NvY2lhdGVkIHRvIGEgcGFkX29wdGlvbiAoc2VlIFwiJV80MmRcIikuICopXG5sZXQgcGFkX29mX3BhZF9vcHQgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gTm9fcGFkZGluZ1xuICB8IFNvbWUgd2lkdGggLT4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcblxuKCogQ29tcHV0ZSBhIHByZWNpc2lvbiBhc3NvY2lhdGVkIHRvIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfLjQyZlwiKS4gKilcbmxldCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0ID0gbWF0Y2ggcHJlY19vcHQgd2l0aFxuICB8IE5vbmUgLT4gTm9fcHJlY2lzaW9uXG4gIHwgU29tZSBuZGVjIC0+IExpdF9wcmVjaXNpb24gbmRlY1xuXG4oKiBUdXJuIGFuIGlnbm9yZWQgcGFyYW0gaW50byBpdHMgZXF1aXZhbGVudCBub3QtaWdub3JlZCBmb3JtYXQgbm9kZS4gKilcbigqIFVzZWQgZm9yIGZvcm1hdCBwcmV0dHktcHJpbnRpbmcgYW5kIFNjYW5mLiAqKVxubGV0IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPiAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFyYW1fZm9ybWF0X2ViYiA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENoYXIgZm10KVxuICB8IElnbm9yZWRfY2FtbF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2FtbF9jaGFyIGZtdClcbiAgfCBJZ25vcmVkX3N0cmluZyBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU3RyaW5nIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfc3RyaW5nIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfaW50IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChJbnQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQzMiAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEludDMyIChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoTmF0aXZlaW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50NjQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQ2NCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2Zsb2F0IChwYWRfb3B0LCBwcmVjX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRmxvYXQgKChGbG9hdF9mbGFnXywgRmxvYXRfZiksXG4gICAgICAgICAgICAgIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIHByZWNfb2ZfcHJlY19vcHQgcHJlY19vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9ib29sIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChCb29sIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHkpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHksIGZtdCkpXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfcmVhZGVyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoUmVhZGVyIGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10KSlcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdClcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZXMgKilcblxudHlwZSAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW4gPVxuICB8IEFjY19vcGVuX3RhZyBvZiAoJ2IsICdjKSBhY2NcbiAgfCBBY2Nfb3Blbl9ib3ggb2YgKCdiLCAnYykgYWNjXG5cbigqIFJldmVyc2VkIGxpc3Qgb2YgcHJpbnRpbmcgYXRvbXMuICopXG4oKiBVc2VkIHRvIGFjY3VtdWxhdGUgcHJpbnRmIGFyZ3VtZW50cy4gKilcbmFuZCAoJ2IsICdjKSBhY2MgPVxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCBvZiAoJ2IsICdjKSBhY2MgKiBmb3JtYXR0aW5nX2xpdFxuICAgICAgKCogU3BlY2lhbCBmbXR0aW5nIChib3gpICopXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIG9mICgnYiwgJ2MpIGFjYyAqICgnYiwgJ2MpIGFjY19mb3JtYXR0aW5nX2dlblxuICAgICAgKCogU3BlY2lhbCBmbXR0aW5nIChib3gpICopXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogTGl0ZXJhbCBzdHJpbmcgKilcbiAgfCBBY2NfY2hhcl9saXRlcmFsICAgb2YgKCdiLCAnYykgYWNjICogY2hhciAgICAgICAoKiBMaXRlcmFsIGNoYXIgKilcbiAgfCBBY2NfZGF0YV9zdHJpbmcgICAgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nICAgICAoKiBHZW5lcmF0ZWQgc3RyaW5nICopXG4gIHwgQWNjX2RhdGFfY2hhciAgICAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogR2VuZXJhdGVkIGNoYXIgKilcbiAgfCBBY2NfZGVsYXkgICAgICAgICAgb2YgKCdiLCAnYykgYWNjICogKCdiIC0+ICdjKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRGVsYXllZCBwcmludGluZyAoJWEsICV0KSAqKVxuICB8IEFjY19mbHVzaCAgICAgICAgICBvZiAoJ2IsICdjKSBhY2MgICAgICAgICAgICAgICgqIEZsdXNoICopXG4gIHwgQWNjX2ludmFsaWRfYXJnICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZ1xuICAgICAgKCogUmFpc2UgSW52YWxpZF9hcmd1bWVudCBtc2cgKilcbiAgfCBFbmRfb2ZfYWNjXG5cbigqIExpc3Qgb2YgaGV0ZXJvZ2VuZW91cyB2YWx1ZXMuICopXG4oKiBVc2VkIHRvIGFjY3VtdWxhdGUgc2NhbmYgY2FsbGJhY2sgYXJndW1lbnRzLiAqKVxudHlwZSAoJ2EsICdiKSBoZXRlcl9saXN0ID1cbiAgfCBDb25zIDogJ2MgKiAoJ2EsICdiKSBoZXRlcl9saXN0IC0+ICgnYyAtPiAnYSwgJ2IpIGhldGVyX2xpc3RcbiAgfCBOaWwgOiAoJ2IsICdiKSBoZXRlcl9saXN0XG5cbigqIEV4aXN0ZW50aWFsIEJsYWNrIEJveGVzLiAqKVxuKCogVXNlZCB0byBhYnN0cmFjdCBzb21lIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVycy4gKilcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10dHkuICopXG4oKiBTZWUgdGhlIHR5cGVfcGFkZGluZyBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZGRpbmdfZm10dHlfZWJiID0gUGFkZGluZ19mbXR0eV9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYW4gZm10dHkuICopXG4oKiBTZWUgdGhlIHR5cGVfcGFkcHJlYyBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZHByZWNfZm10dHlfZWJiID0gUGFkcHJlY19mbXR0eV9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAneikgcHJlY2lzaW9uICogKCd6LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYiA9IFBhZGRpbmdfZm10X0VCQiA6XG4gICAgIChfLCAneCAtPiAnYSkgcGFkZGluZyAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdlLCAnZikgcGFkZGluZ19mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHByZWNpc2lvbiBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiID0gUHJlY2lzaW9uX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdlLCAnZikgcHJlY2lzaW9uX2ZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3BhZHByZWNfZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdwLCAnYiwgJ2MsICdlLCAnZikgcGFkcHJlY19mbXRfZWJiID0gUGFkcHJlY19mbXRfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3AgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCdwLCAnYiwgJ2MsICdlLCAnZikgcGFkcHJlY19mbXRfZWJiXG5cbigqIEFic3RyYWN0IHRoZSAnYSBhbmQgJ2QgcGFyYW1ldGVycyBvZiBhbiBmbXQuICopXG4oKiBPdXRwdXQgdHlwZSBvZiB0aGUgZm9ybWF0IHBhcnNpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYiwgJ2MsICdlLCAnZikgZm10X2ViYiA9IEZtdF9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgnYiwgJ2MsICdlLCAnZikgZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9mb3JtYXRfZ2VuIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYiA9IEZtdF9mbXR0eV9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgZm10ICpcbiAgICAgKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhbiBmbXR0eSBhbmQgYW4gZm10LiAqKVxuKCogU2VlIHRoZSB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X2ZtdF9lYmIgPSBGbXR0eV9mbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdHR5ICpcbiAgICAgKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgLT5cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X2ZtdF9lYmJcblxuKCogQWJzdHJhY3QgYWxsIGZtdHR5IHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBmb3JtYXQgdHlwZXMuICopXG50eXBlIGZtdHR5X2ViYiA9IEZtdHR5X0VCQiA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPiBmbXR0eV9lYmJcblxuKCogQWJzdHJhY3QgYWxsIHBhZGRpbmcgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIHBhZGRpbmdzLiAqKVxudHlwZSBwYWRkaW5nX2ViYiA9IFBhZGRpbmdfRUJCIDogKCdhLCAnYikgcGFkZGluZyAtPiBwYWRkaW5nX2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgcHJlY2lzaW9uIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwcmVjaXNpb25zLiAqKVxudHlwZSBwcmVjaXNpb25fZWJiID0gUHJlY2lzaW9uX0VCQiA6ICgnYSwgJ2IpIHByZWNpc2lvbiAtPiBwcmVjaXNpb25fZWJiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29uc3RhbnRzICopXG5cbigqIERlZmF1bHQgcHJlY2lzaW9uIGZvciBmbG9hdCBwcmludGluZy4gKilcbmxldCBkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udiA9XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgfCBGbG9hdF9oIHwgRmxvYXRfSFxuICB8IEZsb2F0X0NGIC0+IC02XG4gICgqIEZvciAlaCAlSCBhbmQgJSNGIGZvcm1hdHMsIGEgbmVnYXRpdmUgcHJlY2lzaW9uIG1lYW5zIFwiYXMgbWFueSBkaWdpdHMgYXNcbiAgICAgbmVjZXNzYXJ5XCIuICBGb3IgdGhlIG90aGVyIEZQIGZvcm1hdHMsIHdlIHRha2UgdGhlIGFic29sdXRlIHZhbHVlXG4gICAgIG9mIHRoZSBwcmVjaXNpb24sIGhlbmNlIDYgZGlnaXRzIGJ5IGRlZmF1bHQuICopXG4gIHwgRmxvYXRfRiAtPiAxMlxuICAoKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgT0NhbWwgZmxvYXQgcHJpbnRpbmcgKCVGKS4gKilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBFeHRlcm5hbHMgKilcblxuZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0OiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5leHRlcm5hbCBmb3JtYXRfaW50OiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQzMjogc3RyaW5nIC0+IGludDMyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9pbnQzMl9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X25hdGl2ZWludDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5leHRlcm5hbCBmb3JtYXRfaW50NjQ6IHN0cmluZyAtPiBpbnQ2NCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50NjRfZm9ybWF0XCJcbmV4dGVybmFsIGhleHN0cmluZ19vZl9mbG9hdDogZmxvYXQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2hleHN0cmluZ19vZl9mbG9hdFwiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAoKiBUb29scyB0byBwcmV0dHktcHJpbnQgZm9ybWF0cyAqKVxuXG4oKiBUeXBlIG9mIGV4dGVuc2libGUgY2hhcmFjdGVyIGJ1ZmZlcnMuICopXG50eXBlIGJ1ZmZlciA9IHtcbiAgbXV0YWJsZSBpbmQgOiBpbnQ7XG4gIG11dGFibGUgYnl0ZXMgOiBieXRlcztcbn1cblxuKCogQ3JlYXRlIGEgZnJlc2ggYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jcmVhdGUgaW5pdF9zaXplID0geyBpbmQgPSAwOyBieXRlcyA9IEJ5dGVzLmNyZWF0ZSBpbml0X3NpemUgfVxuXG4oKiBDaGVjayBzaXplIG9mIHRoZSBidWZmZXIgYW5kIGdyb3cgaXQgaWYgbmVlZGVkLiAqKVxubGV0IGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBvdmVyaGVhZCA9XG4gIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYnVmLmJ5dGVzIGluXG4gIGxldCBtaW5fbGVuID0gYnVmLmluZCArIG92ZXJoZWFkIGluXG4gIGlmIG1pbl9sZW4gPiBsZW4gdGhlbiAoXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWF4IChsZW4gKiAyKSBtaW5fbGVuIGluXG4gICAgbGV0IG5ld19zdHIgPSBCeXRlcy5jcmVhdGUgbmV3X2xlbiBpblxuICAgIEJ5dGVzLmJsaXQgYnVmLmJ5dGVzIDAgbmV3X3N0ciAwIGxlbjtcbiAgICBidWYuYnl0ZXMgPC0gbmV3X3N0cjtcbiAgKVxuXG4oKiBBZGQgdGhlIGNoYXJhY3RlciBgYycgdG8gdGhlIGJ1ZmZlciBgYnVmJy4gKilcbmxldCBidWZmZXJfYWRkX2NoYXIgYnVmIGMgPVxuICBidWZmZXJfY2hlY2tfc2l6ZSBidWYgMTtcbiAgQnl0ZXMuc2V0IGJ1Zi5ieXRlcyBidWYuaW5kIGM7XG4gIGJ1Zi5pbmQgPC0gYnVmLmluZCArIDFcblxuKCogQWRkIHRoZSBzdHJpbmcgYHMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHMgPVxuICBsZXQgc3RyX2xlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBidWZmZXJfY2hlY2tfc2l6ZSBidWYgc3RyX2xlbjtcbiAgU3RyaW5nLmJsaXQgcyAwIGJ1Zi5ieXRlcyBidWYuaW5kIHN0cl9sZW47XG4gIGJ1Zi5pbmQgPC0gYnVmLmluZCArIHN0cl9sZW5cblxuKCogR2V0IHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIuICopXG5sZXQgYnVmZmVyX2NvbnRlbnRzIGJ1ZiA9XG4gIEJ5dGVzLnN1Yl9zdHJpbmcgYnVmLmJ5dGVzIDAgYnVmLmluZFxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgY29udmVyc2lvbiB0byBjaGFyLiAqKVxubGV0IGNoYXJfb2ZfaWNvbnYgaWNvbnYgPSBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X2QgfCBJbnRfcGQgfCBJbnRfc2QgfCBJbnRfQ2QgLT4gJ2QnIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2lcbiAgfCBJbnRfQ2kgLT4gJ2knIHwgSW50X3ggfCBJbnRfQ3ggLT4gJ3gnIHwgSW50X1ggfCBJbnRfQ1ggLT4gJ1gnIHwgSW50X29cbiAgfCBJbnRfQ28gLT4gJ28nIHwgSW50X3UgfCBJbnRfQ3UgLT4gJ3UnXG5cbigqIENvbnZlcnQgYSBmbG9hdCBjb252ZXJzaW9uIHRvIGNoYXIuICopXG4oKiBgY0YnIHdpbGwgYmUgJ0YnIGZvciBkaXNwbGF5aW5nIGZvcm1hdCBhbmQgJ2cnIHRvIGNhbGwgbGliYyBwcmludGYgKilcbmxldCBjaGFyX29mX2Zjb252ID8oY0Y9J0YnKSBmY29udiA9IG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZiAtPiAnZicgfCBGbG9hdF9lIC0+ICdlJ1xuICB8IEZsb2F0X0UgLT4gJ0UnIHwgRmxvYXRfZyAtPiAnZydcbiAgfCBGbG9hdF9HIC0+ICdHJyB8IEZsb2F0X0YgLT4gY0ZcbiAgfCBGbG9hdF9oIC0+ICdoJyB8IEZsb2F0X0ggLT4gJ0gnXG4gIHwgRmxvYXRfQ0YgLT4gJ0YnXG5cblxuKCogQ29udmVydCBhIHNjYW5uaW5nIGNvdW50ZXIgdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2NvdW50ZXIgY291bnRlciA9IG1hdGNoIGNvdW50ZXIgd2l0aFxuICB8IExpbmVfY291bnRlciAgLT4gJ2wnXG4gIHwgQ2hhcl9jb3VudGVyICAtPiAnbidcbiAgfCBUb2tlbl9jb3VudGVyIC0+ICdOJ1xuXG4oKioqKVxuXG4oKiBQcmludCBhIGNoYXJfc2V0IGluIGEgYnVmZmVyIHdpdGggdGhlIE9DYW1sIGZvcm1hdCBsZXhpY2FsIGNvbnZlbnRpb24uICopXG5sZXQgYnByaW50X2NoYXJfc2V0IGJ1ZiBjaGFyX3NldCA9XG4gIGxldCByZWMgcHJpbnRfc3RhcnQgc2V0ID1cbiAgICBsZXQgaXNfYWxvbmUgYyA9XG4gICAgICBsZXQgYmVmb3JlLCBhZnRlciA9IENoYXIuKGNociAoY29kZSBjIC0gMSksIGNociAoY29kZSBjICsgMSkpIGluXG4gICAgICBpc19pbl9jaGFyX3NldCBzZXQgY1xuICAgICAgJiYgbm90IChpc19pbl9jaGFyX3NldCBzZXQgYmVmb3JlICYmIGlzX2luX2NoYXJfc2V0IHNldCBhZnRlcikgaW5cbiAgICBpZiBpc19hbG9uZSAnXScgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICddJztcbiAgICBwcmludF9vdXQgc2V0IDE7XG4gICAgaWYgaXNfYWxvbmUgJy0nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLSc7XG4gIGFuZCBwcmludF9vdXQgc2V0IGkgPVxuICAgIGlmIGkgPCAyNTYgdGhlblxuICAgICAgaWYgaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBpKSB0aGVuIHByaW50X2ZpcnN0IHNldCBpXG4gICAgICBlbHNlIHByaW50X291dCBzZXQgKGkgKyAxKVxuICBhbmQgcHJpbnRfZmlyc3Qgc2V0IGkgPVxuICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgIHwgJ1xcMjU1JyAtPiBwcmludF9jaGFyIGJ1ZiAyNTU7XG4gICAgfCAnXScgfCAnLScgLT4gcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIHwgXyAtPiBwcmludF9zZWNvbmQgc2V0IChpICsgMSk7XG4gIGFuZCBwcmludF9zZWNvbmQgc2V0IGkgPVxuICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlblxuICAgICAgbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgICB8ICdcXDI1NScgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU0O1xuICAgICAgICBwcmludF9jaGFyIGJ1ZiAyNTU7XG4gICAgICB8ICddJyB8ICctJyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgICAgfCBfIHdoZW4gbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IChpICsgMSkpKSAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgICBwcmludF9jaGFyIGJ1ZiBpO1xuICAgICAgICBwcmludF9vdXQgc2V0IChpICsgMik7XG4gICAgICB8IF8gLT5cbiAgICAgICAgcHJpbnRfaW4gc2V0IChpIC0gMSkgKGkgKyAyKTtcbiAgICBlbHNlIChcbiAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgKVxuICBhbmQgcHJpbnRfaW4gc2V0IGkgaiA9XG4gICAgaWYgaiA9IDI1NiB8fCBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaikpIHRoZW4gKFxuICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChpbnRfb2ZfY2hhciAnLScpO1xuICAgICAgcHJpbnRfY2hhciBidWYgKGogLSAxKTtcbiAgICAgIGlmIGogPCAyNTYgdGhlbiBwcmludF9vdXQgc2V0IChqICsgMSk7XG4gICAgKSBlbHNlXG4gICAgICBwcmludF9pbiBzZXQgaSAoaiArIDEpO1xuICBhbmQgcHJpbnRfY2hhciBidWYgaSA9IG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICB8ICdAJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQCc7XG4gICAgfCBjICAgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjO1xuICBpblxuICBidWZmZXJfYWRkX2NoYXIgYnVmICdbJztcbiAgcHJpbnRfc3RhcnQgKFxuICAgIGlmIGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0ICdcXDAwMCdcbiAgICB0aGVuICggYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXic7IHJldl9jaGFyX3NldCBjaGFyX3NldCApXG4gICAgZWxzZSBjaGFyX3NldFxuICApO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmICddJ1xuXG4oKioqKVxuXG4oKiBQcmludCBhIHBhZHR5IGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcGFkdHkgYnVmIHBhZHR5ID0gbWF0Y2ggcGFkdHkgd2l0aFxuICB8IExlZnQgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nXG4gIHwgUmlnaHQgLT4gKClcbiAgfCBaZXJvcyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcwJ1xuXG4oKiBQcmludCB0aGUgJ18nIG9mIGFuIGlnbm9yZWQgZmxhZyBpZiBuZWVkZWQuICopXG5sZXQgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWcgPVxuICBpZiBpZ25fZmxhZyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ18nXG5cbigqKiopXG5cbmxldCBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHdpZHRoIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyB3aWR0aClcblxuKCoqKilcblxuKCogUHJpbnQgcGFkZGluZyBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZGRpbmcgOiB0eXBlIGEgYiAuIGJ1ZmZlciAtPiAoYSwgYikgcGFkZGluZyAtPiB1bml0ID1cbmZ1biBidWYgcGFkIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPiAoKVxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgbikgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBuKTtcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGJwcmludF9wYWR0eSBidWYgcGFkdHk7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKidcblxuKCogUHJpbnQgcHJlY2lzaW9uIGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcHJlY2lzaW9uIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHByZWNpc2lvbiAtPiB1bml0ID1cbiAgZnVuIGJ1ZiBwcmVjIC0+IG1hdGNoIHByZWMgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiAtPiAoKVxuICB8IExpdF9wcmVjaXNpb24gbiAtPlxuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy4nO1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBuKTtcbiAgfCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiLipcIlxuXG4oKioqKVxuXG4oKiBQcmludCB0aGUgb3B0aW9uYWwgJysnLCAnICcgb3IgJyMnIGFzc29jaWF0ZWQgdG8gYW4gaW50IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9wZCB8IEludF9waSAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcrJ1xuICB8IEludF9zZCB8IEludF9zaSAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcgJ1xuICB8IEludF9DeCB8IEludF9DWCB8IEludF9DbyB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBJbnRfZCB8IEludF9pIHwgSW50X3ggfCBJbnRfWCB8IEludF9vIHwgSW50X3UgLT4gKClcblxuKCogUHJpbnQgYW4gY29tcGxldGUgaW50IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJTMuKmRcIikuICopXG5sZXQgYnByaW50X2ludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpXG5cbigqIFByaW50IGEgY29tcGxldGUgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NCBmb3JtYXQgaW4gYSBidWZmZXIuICopXG5sZXQgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjIGMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKioqKVxuXG4oKiBQcmludCB0aGUgb3B0aW9uYWwgJysnLCAnICcgYW5kL29yICcjJyBhc3NvY2lhdGVkIHRvIGEgZmxvYXQgY29udmVyc2lvbi4gKilcbmxldCBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnYgPVxuICBiZWdpbiBtYXRjaCBmc3QgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2ZsYWdfcCAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcrJ1xuICB8IEZsb2F0X2ZsYWdfcyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcgJ1xuICB8IEZsb2F0X2ZsYWdfIC0+ICgpIGVuZDtcbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9DRiAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcjJ1xuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HXG4gIHwgRmxvYXRfRiB8IEZsb2F0X2ggfCBGbG9hdF9IIC0+ICgpXG5cbigqIFByaW50IGEgY29tcGxldGUgZmxvYXQgZm9ybWF0IGluIGEgYnVmZmVyIChleDogXCIlKyouM2ZcIikuICopXG5sZXQgYnByaW50X2Zsb2F0X2ZtdCBidWYgaWduX2ZsYWcgZmNvbnYgcGFkIHByZWMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9mY29udiBmY29udilcblxuKCogQ29tcHV0ZSB0aGUgbGl0ZXJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBGb3JtYXR0aW5nX2xpdC4gKilcbigqIFVzZWQgYnkgUHJpbnRmIGFuZCBTY2FuZiB3aGVyZSBmb3JtYXR0aW5nIGlzIG5vdCBpbnRlcnByZXRlZC4gKilcbmxldCBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm9ybWF0dGluZ19saXQgPSBtYXRjaCBmb3JtYXR0aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgLT4gXCJAXVwiXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgLT4gXCJAfVwiXG4gIHwgQnJlYWsgKHN0ciwgXywgXykgICAgLT4gc3RyXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgLT4gXCJAP1wiXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgLT4gXCJAXFxuXCJcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAtPiBcIkAuXCJcbiAgfCBNYWdpY19zaXplIChzdHIsIF8pICAtPiBzdHJcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAtPiBcIkBAXCJcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAtPiBcIkAlXCJcbiAgfCBTY2FuX2luZGljIGMgLT4gXCJAXCIgXiAoU3RyaW5nLm1ha2UgMSBjKVxuXG4oKioqKVxuXG4oKiBQcmludCBhIGxpdGVyYWwgY2hhciBpbiBhIGJ1ZmZlciwgZXNjYXBlICclJyBieSBcIiUlXCIuICopXG5sZXQgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgY2hyID0gbWF0Y2ggY2hyIHdpdGhcbiAgfCAnJScgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSVcIlxuICB8IF8gLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjaHJcblxuKCogUHJpbnQgYSBsaXRlcmFsIHN0cmluZyBpbiBhIGJ1ZmZlciwgZXNjYXBlIGFsbCAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyID1cbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggc3RyIC0gMSBkb1xuICAgIGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIHN0ci5baV1cbiAgZG9uZVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgcHJldHR5LXByaW50aW5nICopXG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IHR5cGUgKGFuIGZtdHR5KSBpbiBhIGJ1ZmZlci4gKilcbmxldCByZWMgYnByaW50X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCAuXG4gICAgYnVmZmVyIC0+IChhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gdW5pdCA9XG5mdW4gYnVmIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlY1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFN0cmluZ190eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVzXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50X3R5IHJlc3QgICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWlcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnQzMl90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbGlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IE5hdGl2ZWludF90eSByZXN0IC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVuaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJUxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGbG9hdF90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlZlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEJvb2xfdHkgcmVzdCAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVCXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWFcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBUaGV0YV90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIldFwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFueV90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiU/XCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgUmVhZGVyX3R5IHJlc3QgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXJcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlX3JcIjtcbiAgICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHksIHJlc3QpIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXtcIjsgYnByaW50X2ZtdHR5IGJ1ZiBzdWJfZm10dHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJX1cIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViX2ZtdHR5LCBfLCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUoXCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IEVuZF9vZl9mbXR0eSAtPiAoKVxuXG4oKioqKVxuXG5sZXQgcmVjIGludF9vZl9jdXN0b21fYXJpdHkgOiB0eXBlIGEgYiBjIC5cbiAgKGEsIGIsIGMpIGN1c3RvbV9hcml0eSAtPiBpbnQgPVxuICBmdW5jdGlvblxuICB8IEN1c3RvbV96ZXJvIC0+IDBcbiAgfCBDdXN0b21fc3VjYyB4IC0+IDEgKyBpbnRfb2ZfY3VzdG9tX2FyaXR5IHhcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmb3JtYXQgaW4gYSBidWZmZXIuICopXG5sZXQgYnByaW50X2ZtdCBidWYgZm10ID1cbiAgbGV0IHJlYyBmbXRpdGVyIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGJvb2wgLT4gdW5pdCA9XG4gIGZ1biBmbXQgaWduX2ZsYWcgLT4gbWF0Y2ggZm10IHdpdGhcbiAgICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAncyc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnUyc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICdsJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbic7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnTCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQyc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0InO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnYSc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFRoZXRhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3QnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgZm9yIF9pID0gMSB0byBpbnRfb2ZfY3VzdG9tX2FyaXR5IGFyaXR5IGRvXG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnPyc7XG4gICAgICBkb25lO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgUmVhZGVyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3InOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlIVwiO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBzdHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG4gICAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNocjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAneyc7XG4gICAgICBicHJpbnRfZm10dHkgYnVmIGZtdHR5OyBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnfSc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJygnO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyknO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHdpZHRoX29wdDsgYnByaW50X2NoYXJfc2V0IGJ1ZiBjaGFyX3NldDtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2NvdW50ZXIgY291bnRlcik7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIFwiMGNcIjsgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgICBsZXQgUGFyYW1fZm9ybWF0X0VCQiBmbXQnID0gcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0IGluXG4gICAgICBmbXRpdGVyIGZtdCcgdHJ1ZTtcblxuICAgIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIChzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCk7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGZtdGluZ19nZW4gd2l0aFxuICAgICAgfCBPcGVuX3RhZyAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAe1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICB8IE9wZW5fYm94IChGb3JtYXQgKF8sIHN0cikpIC0+XG4gICAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIkBbXCI7IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzdHJcbiAgICAgIGVuZDtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgRW5kX29mX2Zvcm1hdCAtPiAoKVxuXG4gIGluIGZtdGl0ZXIgZm10IGZhbHNlXG5cbigqKiopXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdG8gc3RyaW5nLiAqKVxubGV0IHN0cmluZ19vZl9mbXQgZm10ID1cbiAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgYnByaW50X2ZtdCBidWYgZm10O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGUgZXh0cmFjdGlvbiAqKVxuXG50eXBlIChfLCBfKSBlcSA9IFJlZmwgOiAoJ2EsICdhKSBlcVxuXG4oKiBJbnZhcmlhbnQ6IHRoaXMgZnVuY3Rpb24gaXMgdGhlIGlkZW50aXR5IG9uIHZhbHVlcy5cblxuICAgSW4gcGFydGljdWxhciwgaWYgKHR5MSwgdHkyKSBoYXZlIGVxdWFsIHZhbHVlcywgdGhlblxuICAgKHRyYW5zIChzeW1tIHR5MSkgdHkyKSByZXNwZWN0cyB0aGUgJ3RyYW5zJyBwcmVjb25kaXRpb24uICopXG5sZXQgcmVjIHN5bW0gOiB0eXBlIGExIGIxIGMxIGQxIGUxIGYxIGEyIGIyIGMyIGQyIGUyIGYyIC5cbiAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsXG4gICAgYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10dHlfcmVsXG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+IENoYXJfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnRfdHkgcmVzdCAtPiBJbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+IEludDMyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPiBJbnQ2NF90eSAoc3ltbSByZXN0KVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+IE5hdGl2ZWludF90eSAoc3ltbSByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT4gRmxvYXRfdHkgKHN5bW0gcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT4gQm9vbF90eSAoc3ltbSByZXN0KVxuICB8IFN0cmluZ190eSByZXN0IC0+IFN0cmluZ190eSAoc3ltbSByZXN0KVxuICB8IFRoZXRhX3R5IHJlc3QgLT4gVGhldGFfdHkgKHN5bW0gcmVzdClcbiAgfCBBbHBoYV90eSByZXN0IC0+IEFscGhhX3R5IChzeW1tIHJlc3QpXG4gIHwgQW55X3R5IHJlc3QgLT4gQW55X3R5IChzeW1tIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT4gUmVhZGVyX3R5IChzeW1tIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPiBJZ25vcmVkX3JlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBzeW1tIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MiwgdHkxLCBzeW1tIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG5sZXQgcmVjIGZtdHR5X3JlbF9kZXQgOiB0eXBlIGExIGIgYyBkMSBlMSBmMSBhMiBkMiBlMiBmMiAuXG4gIChhMSwgYiwgYywgZDEsIGUxLCBmMSxcbiAgIGEyLCBiLCBjLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoKGYxLCBmMikgZXEgLT4gKGExLCBhMikgZXEpXG4gICogKChhMSwgYTIpIGVxIC0+IChmMSwgZjIpIGVxKVxuICAqICgoZTEsIGUyKSBlcSAtPiAoZDEsIGQyKSBlcSlcbiAgKiAoKGQxLCBkMikgZXEgLT4gKGUxLCBlMikgZXEpXG49IGZ1bmN0aW9uXG4gIHwgRW5kX29mX2ZtdHR5IC0+XG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcblxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuICB8IEZvcm1hdF9hcmdfdHkgKF90eSwgcmVzdCkgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGxldCBhZywgZ2EsIGRqLCBqZCA9IGZtdHR5X3JlbF9kZXQgdHkgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIGxldCBSZWZsID0gYWcgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBnYSBSZWZsIGluIGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIGxldCBSZWZsID0gZGogUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBqZCBSZWZsIGluIGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuXG4oKiBQcmVjb25kaXRpb246IHdlIGFzc3VtZSB0aGF0IHRoZSB0d28gZm10dHlfcmVsIGFyZ3VtZW50cyBoYXZlIGVxdWFsXG4gICB2YWx1ZXMgKGF0IHBvc3NpYmx5IGRpc3RpbmN0IHR5cGVzKTsgdGhpcyBpbnZhcmlhbnQgY29tZXMgZnJvbSB0aGUgd2F5XG4gICBmbXR0eV9yZWwgd2l0bmVzc2VzIGFyZSBwcm9kdWNlZCBieSB0aGUgdHlwZS1jaGVja2VyXG5cbiAgIFRoZSBjb2RlIGJlbG93IHVzZXMgKGFzc2VydCBmYWxzZSkgd2hlbiB0aGlzIGFzc3VtcHRpb24gaXMgYnJva2VuLiBUaGVcbiAgIGNvZGUgcGF0dGVybiBpcyB0aGUgZm9sbG93aW5nOlxuXG4gICAgIHwgRm9vIHgsIEZvbyB5IC0+XG4gICAgICAgKCogY2FzZSB3aGVyZSBpbmRlZWQgYm90aCB2YWx1ZXNcbiAgICAgICAgICBzdGFydCB3aXRoIGNvbnN0cnVjdG9yIEZvbyAqKVxuICAgICB8IEZvbyBfLCBfXG4gICAgIHwgXywgRm9vIF8gLT5cbiAgICAgICAoKiBkaWZmZXJlbnQgaGVhZCBjb25zdHJ1Y3RvcnM6IGJyb2tlbiBwcmVjb25kaXRpb24gKilcbiAgICAgICBhc3NlcnQgZmFsc2VcbiopXG5hbmQgdHJhbnMgOiB0eXBlXG4gIGExIGIxIGMxIGQxIGUxIGYxXG4gIGEyIGIyIGMyIGQyIGUyIGYyXG4gIGEzIGIzIGMzIGQzIGUzIGYzXG4uXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuLT4gKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHlfcmVsXG49IGZ1biB0eTEgdHkyIC0+IG1hdGNoIHR5MSwgdHkyIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QxLCBDaGFyX3R5IHJlc3QyIC0+IENoYXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFN0cmluZ190eSByZXN0MSwgU3RyaW5nX3R5IHJlc3QyIC0+IFN0cmluZ190eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQm9vbF90eSByZXN0MSwgQm9vbF90eSByZXN0MiAtPiBCb29sX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnRfdHkgcmVzdDEsIEludF90eSByZXN0MiAtPiBJbnRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDMyX3R5IHJlc3QxLCBJbnQzMl90eSByZXN0MiAtPiBJbnQzMl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50NjRfdHkgcmVzdDEsIEludDY0X3R5IHJlc3QyIC0+IEludDY0X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdDEsIE5hdGl2ZWludF90eSByZXN0MiAtPiBOYXRpdmVpbnRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZsb2F0X3R5IHJlc3QxLCBGbG9hdF90eSByZXN0MiAtPiBGbG9hdF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG5cbiAgfCBBbHBoYV90eSByZXN0MSwgQWxwaGFfdHkgcmVzdDIgLT4gQWxwaGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEFscGhhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQWxwaGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IFRoZXRhX3R5IHJlc3QxLCBUaGV0YV90eSByZXN0MiAtPiBUaGV0YV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgVGhldGFfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBUaGV0YV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgQW55X3R5IHJlc3QxLCBBbnlfdHkgcmVzdDIgLT4gQW55X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbnlfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBBbnlfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IFJlYWRlcl90eSByZXN0MSwgUmVhZGVyX3R5IHJlc3QyIC0+IFJlYWRlcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgUmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgUmVhZGVyX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0MSwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDIgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBJZ25vcmVkX3JlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRm9ybWF0X2FyZ190eSAodHkxLCByZXN0MSksIEZvcm1hdF9hcmdfdHkgKHR5MiwgcmVzdDIpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHJhbnMgdHkxIHR5MiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X2FyZ190eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEZvcm1hdF9hcmdfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkxMiwgcmVzdDEpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkyMSwgdHkyMiwgcmVzdDIpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxMikgdHkyMSBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgbGV0IFJlZmwgPSBmMiBSZWZsIGluXG4gICAgbGV0IFJlZmwgPSBmNCBSZWZsIGluXG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTExLCB0eTIyLCB0cmFucyByZXN0MSByZXN0MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfc3Vic3RfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEVuZF9vZl9mbXR0eSwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuICB8IEVuZF9vZl9mbXR0eSwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBFbmRfb2ZfZm10dHkgLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCByZWMgZm10dHlfb2ZfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZvcm1hdHRpbmdfZ2VuIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBmb3JtYXR0aW5nX2dlbiAtPiBtYXRjaCBmb3JtYXR0aW5nX2dlbiB3aXRoXG4gIHwgT3Blbl90YWcgKEZvcm1hdCAoZm10LCBfKSkgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IE9wZW5fYm94IChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogRXh0cmFjdCB0aGUgdHlwZSByZXByZXNlbnRhdGlvbiAoYW4gZm10dHkpIG9mIGEgZm9ybWF0LiAqKVxuYW5kIGZtdHR5X29mX2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm10dHkgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcblxuICB8IEludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50MzIgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50MzJfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKE5hdGl2ZWludF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnQ2NF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBGbG9hdCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChGbG9hdF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcblxuICB8IENoYXIgcmVzdCAgICAgICAgICAgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IENhbWxfY2hhciByZXN0ICAgICAgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEJvb2wgKHBhZCwgcmVzdCkgICAgICAgICAgIC0+XG4gICAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoQm9vbF90eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuICB8IEFscGhhIHJlc3QgICAgICAgICAgICAgICAgIC0+IEFscGhhX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBUaGV0YSByZXN0ICAgICAgICAgICAgICAgICAtPiBUaGV0YV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgICAgLT4gZm10dHlfb2ZfY3VzdG9tIGFyaXR5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBSZWFkZXIgcmVzdCAgICAgICAgICAgICAgICAtPiBSZWFkZXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRm9ybWF0X2FyZyAoXywgdHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdCAoXywgdHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eSwgdHksIGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRmx1c2ggcmVzdCAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG5cbiAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPiBTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+IEludF90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAgLT4gZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAgLT5cbiAgICBjb25jYXRfZm10dHkgKGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIGZtdGluZ19nZW4pIChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEVuZF9vZl9mb3JtYXQgICAgICAgICAgICAgIC0+IEVuZF9vZl9mbXR0eVxuXG5hbmQgZm10dHlfb2ZfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAoeSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGFyaXR5IGZtdHR5IC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBmbXR0eVxuICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+IEFueV90eSAoZm10dHlfb2ZfY3VzdG9tIGFyaXR5IGZtdHR5KVxuXG4oKiBFeHRyYWN0IHRoZSBmbXR0eSBvZiBhbiBpZ25vcmVkIHBhcmFtZXRlciBmb2xsb3dlZCBieSB0aGUgcmVzdCBvZlxuICAgdGhlIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IGNvbmNhdF9mbXR0eSBmbXR0eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IElnbm9yZWRfcmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgZm10KVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuXG4oKiBBZGQgYW4gSW50X3R5IG5vZGUgaWYgcGFkZGluZyBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpzXCIpLiAqKVxuYW5kIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgOiB0eXBlIHggYSBiIGMgZCBlIGYgLlxuICAgICh4LCBhKSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoeCwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuICBmdW4gcGFkIGZtdHR5IC0+IG1hdGNoIHBhZCB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgIC0+IGZtdHR5XG4gICAgfCBMaXRfcGFkZGluZyBfIC0+IGZtdHR5XG4gICAgfCBBcmdfcGFkZGluZyBfIC0+IEludF90eSBmbXR0eVxuXG4oKiBBZGQgYW4gSW50X3R5IG5vZGUgaWYgcHJlY2lzaW9uIGlzIHRha2VuIGFzIGFuIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpLiopXG5hbmQgZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcHJlY2lzaW9uIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoeCwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuICBmdW4gcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgICB8IE5vX3ByZWNpc2lvbiAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3ByZWNpc2lvbiBfIC0+IGZtdHR5XG4gICAgfCBBcmdfcHJlY2lzaW9uICAgLT4gSW50X3R5IGZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGluZyAqKVxuXG4oKiBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSBmb3JtYXQgZG9lcyBub3QgbWF0Y2ggYSBnaXZlbiBmb3JtYXQgdHlwZS4gKilcbmV4Y2VwdGlvbiBUeXBlX21pc21hdGNoXG5cbigqIFR5cGUgYSBwYWRkaW5nLiAqKVxuKCogVGFrZSBhbiBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgdGhlIGludGVnZXIgc2hvdWxkIGJlIGtlcHQgYXMgYXJndW1lbnQuICopXG4oKiBSYWlzZSBUeXBlX21pc21hdGNoIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCB0eXBlX3BhZGRpbmcgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFkZGluZ19mbXR0eV9lYmIgPVxuZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQsIGZtdHR5IHdpdGhcbiAgfCBOb19wYWRkaW5nLCBfIC0+IFBhZGRpbmdfZm10dHlfRUJCIChOb19wYWRkaW5nLCBmbXR0eSlcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBfIC0+IFBhZGRpbmdfZm10dHlfRUJCIChMaXRfcGFkZGluZyAocGFkdHksdyksZm10dHkpXG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEludF90eSByZXN0IC0+IFBhZGRpbmdfZm10dHlfRUJCIChBcmdfcGFkZGluZyBwYWR0eSxyZXN0KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBDb252ZXJ0IGEgKHVwYWRkaW5nLCB1cHJlY2lzaW9uKSB0byBhIChwYWRkaW5nLCBwcmVjaXNpb24pLiAqKVxuKCogVGFrZSBvbmUgb3IgdHdvIEludF90eSBmcm9tIHRoZSBmbXR0eSBpZiBuZWVkZWQuICopXG4oKiBSYWlzZSBUeXBlX21pc21hdGNoIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCB0eXBlX3BhZHByZWMgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSB6IC5cbiAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHopIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFkcHJlY19mbXR0eV9lYmIgPVxuZnVuIHBhZCBwcmVjIGZtdHR5IC0+IG1hdGNoIHByZWMsIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBOb19wcmVjaXNpb24sIHJlc3QpXG4gIHwgTGl0X3ByZWNpc2lvbiBwLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIExpdF9wcmVjaXNpb24gcCwgcmVzdClcbiAgfCBBcmdfcHJlY2lzaW9uLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBJbnRfdHkgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBBcmdfcHJlY2lzaW9uLCByZXN0KVxuICB8IF8sIFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIFR5cGUgYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogSWYgdHlwaW5nIHN1Y2NlZWQsIGdlbmVyYXRlIGEgY29weSBvZiB0aGUgZm9ybWF0IHdpdGggdGhlIHNhbWVcbiAgICB0eXBlIHBhcmFtZXRlcnMgYXMgdGhlIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgcmVjIHR5cGVfZm9ybWF0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5IHdpdGhcbiAgfCBGbXRfZm10dHlfRUJCIChmbXQnLCBFbmRfb2ZfZm10dHkpIC0+IGZtdCdcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0X2dlbiA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gZm10IGZtdHR5IC0+IG1hdGNoIGZtdCwgZm10dHkgd2l0aFxuICB8IENoYXIgZm10X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBDYW1sX2NoYXIgZm10X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDYW1sX2NoYXIgZm10JywgZm10dHknKVxuICB8IFN0cmluZyAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChTdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBDYW1sX3N0cmluZyAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChDYW1sX3N0cmluZyAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludDMyX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQ2NF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50NjQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEZsb2F0X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBCb29sIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBCb29sX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChCb29sIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgRmx1c2ggZm10X3Jlc3QsIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRmx1c2ggZm10JywgZm10dHknKVxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFN0cmluZ19saXRlcmFsIChzdHIsIGZtdCcpLCBmbXR0eScpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDaGFyX2xpdGVyYWwgKGNociwgZm10JyksIGZtdHR5JylcblxuICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpLFxuICAgIEZvcm1hdF9hcmdfdHkgKHN1Yl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1Yl9mbXR0eSA8PiBGbXR0eV9FQkIgc3ViX2ZtdHR5JyB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eScsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eTEsIF9zdWJfZm10dHkyLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViX2ZtdHR5MSkgdGhlblxuICAgICAgcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9XG4gICAgICB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgKGVyYXNlX3JlbCBmbXR0eV9yZXN0KVxuICAgIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHkxLCBmbXQnKSwgZm10dHknKVxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgQWxwaGEgZm10X3Jlc3QsIEFscGhhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQWxwaGEgZm10JywgZm10dHknKVxuICB8IFRoZXRhIGZtdF9yZXN0LCBUaGV0YV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFRoZXRhIGZtdCcsIGZtdHR5JylcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10JyksIGZtdHR5JylcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZ19nZW4sIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfZm9ybWF0dGluZ19nZW4gZm9ybWF0dGluZ19nZW4gZm10X3Jlc3QgZm10dHlfcmVzdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgZm10X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFJlYWRlciBmbXQnLCBmbXR0eScpXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10X3Jlc3QpLCBTdHJpbmdfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXQnKSwgZm10dHknKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10JyksIGZtdHR5JylcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtIGlnbiByZXN0IGZtdHR5X3Jlc3RcblxuICB8IEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QgLT4gRm10X2ZtdHR5X0VCQiAoRW5kX29mX2Zvcm1hdCwgZm10dHlfcmVzdClcblxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG5hbmQgdHlwZV9mb3JtYXR0aW5nX2dlbiA6IHR5cGUgYTEgYTMgYjEgYjMgYzEgYzMgZDEgZDMgZTEgZTIgZTMgZjEgZjIgZjMgLlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChmMSwgYjEsIGMxLCBlMSwgZTIsIGYyKSBmbXQgLT5cbiAgICAoYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHkgLT5cbiAgICAoYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10X2ZtdHR5X2ViYiA9XG5mdW4gZm9ybWF0dGluZ19nZW4gZm10MCBmbXR0eTAgLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdDEsIHN0cikpIC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDIsIGZtdHR5MikgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MSBmbXR0eTAgaW5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MywgZm10dHkzKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQwIGZtdHR5MiBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQyLCBzdHIpKSwgZm10MyksIGZtdHR5MylcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG5cbigqIFR5cGUgYW4gSWdub3JlZF9wYXJhbSBub2RlIGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbmFuZCB0eXBlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHAgcSB4IHkgeiB0IHUgdiBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIHksIHosIHQsIHEsIHApIGlnbm9yZWQgLT5cbiAgICAocCwgeSwgeiwgcSwgdSwgdikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGlnbiBmbXQgZm10dHkgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludCBfICAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludDMyIF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCBfICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludDY0IF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zsb2F0IF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSkgLT5cbiAgICB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIChJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSkpIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eScsIEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eSBmbXQgZm10dHkgaW5cbiAgICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10JyksXG4gICAgICAgICAgICAgICAgICAgZm10dHknKVxuICB8IElnbm9yZWRfcmVhZGVyIC0+IChcbiAgICBtYXRjaCBmbXR0eSB3aXRoXG4gICAgfCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9yZWFkZXIsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSA6IHR5cGUgYTEgYTIgYjEgYjIgYzEgYzIgZDEgZDIgZTEgZTIgZjEgZjIgLlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZDIsIGEyKSBpZ25vcmVkIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdCAtPlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eSAtPlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRfZm10dHlfZWJiXG49IGZ1biBpZ24gZm10IGZtdHR5IC0+XG4gIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSBpblxuICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChpZ24sIGZtdCcpLCBmbXR0eScpXG5cbigqIFR5cGluZyBvZiB0aGUgY29tcGxleCBjYXNlOiBcIiVfKC4uLiUpXCIuICopXG5hbmQgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gOiB0eXBlIHcgeCB5IHogcCBzIHQgdSBhIGIgYyBkIGUgZiAuXG4gICAgKHcsIHgsIHksIHosIHMsIHApIGZtdHR5IC0+XG4gICAgKHAsIHgsIHksIHMsIHQsIHUpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlfZm10X2ViYiA9XG5mdW4gc3ViX2ZtdHR5IGZtdCBmbXR0eSAtPiBtYXRjaCBzdWJfZm10dHksIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKENoYXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFN0cmluZ190eSBzdWJfZm10dHlfcmVzdCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFN0cmluZ190eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnQzMl90eSBzdWJfZm10dHlfcmVzdCwgSW50MzJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IE5hdGl2ZWludF90eSBzdWJfZm10dHlfcmVzdCwgTmF0aXZlaW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKE5hdGl2ZWludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50NjRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDY0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBGbG9hdF90eSBzdWJfZm10dHlfcmVzdCwgRmxvYXRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QsIEJvb2xfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQm9vbF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgQWxwaGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIEFscGhhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBUaGV0YV90eSBzdWJfZm10dHlfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFJlYWRlcl90eSBzdWJfZm10dHlfcmVzdCwgUmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFJlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIElnbm9yZWRfcmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcblxuICB8IEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHksIHN1Yl9mbXR0eV9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgc3ViMl9mbXR0eSA8PiBGbXR0eV9FQkIgc3ViMl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIHN1Yl9mbXR0eV9yZXN0JyksIGZtdCcpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5LCAgc3ViMl9mbXR0eSwgIHN1Yl9mbXR0eV9yZXN0KSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHknLCBzdWIyX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICAoKiBUT0RPIGRlZmluZSBGbXR0eV9yZWxfRUJCIHRvIHJlbW92ZSB0aG9zZSBlcmFzZV9yZWwgKilcbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIxX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIxX2ZtdHR5JylcbiAgICB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMl9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMl9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBzdWJfZm10dHknID0gdHJhbnMgKHN5bW0gc3ViMV9mbXR0eScpIHN1YjJfZm10dHknIGluXG4gICAgbGV0IF8sIGYyLCBfLCBmNCA9IGZtdHR5X3JlbF9kZXQgc3ViX2ZtdHR5JyBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIChlcmFzZV9yZWwgc3ViX2ZtdHR5X3Jlc3QpIGZtdCBmbXR0eV9yZXN0XG4gICAgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHknLCBzdWIyX2ZtdHR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW0gc3ViX2ZtdHR5X3Jlc3QnKSxcbiAgICAgICAgICAgICAgICAgICBmbXQnKVxuICB8IEVuZF9vZl9mbXR0eSwgZm10dHkgLT5cbiAgICBGbXR0eV9mbXRfRUJCIChFbmRfb2ZfZm10dHksIHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkpXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgYHJlY2FzdGAgaXMgYSBiaXQgZGlzYXBwb2ludGluZy4gVGhlXG4gICBpbnZhcmlhbnQgcHJvdmlkZWQgYnkgdGhlIHR5cGUgYXJlIHZlcnkgc3Ryb25nOiB0aGUgaW5wdXQgZm9ybWF0J3NcbiAgIHR5cGUgaXMgaW4gcmVsYXRpb24gdG8gdGhlIG91dHB1dCB0eXBlJ3MgYXMgd2l0bmVzc2VkIGJ5IHRoZVxuICAgZm10dHlfcmVsIGFyZ3VtZW50LiBPbmUgd291bGQgYXQgZmlyc3QgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYmVcbiAgIHRvdGFsLCBhbmQgaW1wbGVtZW50YWJsZSBieSBleGhhdXN0aXZlIHBhdHRlcm4gbWF0Y2hpbmcuIEluc3RlYWQsXG4gICB3ZSByZXVzZSB0aGUgaGlnaGx5IHBhcnRpYWwgYW5kIG11Y2ggbGVzcyB3ZWxsLWRlZmluZWQgZnVuY3Rpb25cbiAgIGB0eXBlX2Zvcm1hdGAgdGhhdCBoYXMgbG9zdCBhbGwga25vd2xlZGdlIG9mIHRoZSBjb3JyZXNwb25kZW5jZVxuICAgYmV0d2VlbiB0aGUgYXJndW1lbnQncyB0eXBlcy5cblxuICAgQmVzaWRlcyB0aGUgZmFjdCB0aGF0IHRoaXMgZnVuY3Rpb24gcmV1c2VzIGEgbG90IG9mIHRoZVxuICAgYHR5cGVfZm9ybWF0YCBsb2dpYyAoZWcuOiBzZWVpbmcgSW50X3R5IGluIHRoZSBmbXR0eSBwYXJhbWV0ZXIgZG9lc1xuICAgbm90IGxldCB5b3UgbWF0Y2ggb24gSW50IG9ubHksIGFzIHlvdSBtYXkgaW4gZmFjdCBoYXZlIEZsb2F0XG4gICAoQXJnX3BhZGRpbmcsIC4uLikgKFwiJS4qZFwiKSBiZWdpbm5pbmcgd2l0aCBhbiBJbnRfdHkpLCBpdCBpcyBhbHNvXG4gICBhIHBhcnRpYWwgZnVuY3Rpb24sIGJlY2F1c2UgdGhlIHR5cGluZyBpbmZvcm1hdGlvbiBpbiBhIGZvcm1hdCBpc1xuICAgbm90IHF1aXRlIGVub3VnaCB0byByZWNvbnN0cnVjdCBpdCB1bmFtYmlndW91c2x5LiBGb3IgZXhhbXBsZSwgdGhlXG4gICBmb3JtYXQgdHlwZXMgb2YgXCIlZCVfclwiIGFuZCBcIiVfciVkXCIgaGF2ZSB0aGUgc2FtZSBmb3JtYXQ2XG4gICBwYXJhbWV0ZXJzLCBidXQgdGhleSBhcmUgbm90IGF0IGFsbCBleGNoYW5nZWFibGUsIGFuZCBwdXR0aW5nIG9uZVxuICAgaW4gcGxhY2Ugb2YgdGhlIG90aGVyIG11c3QgcmVzdWx0IGluIGEgZHluYW1pYyBmYWlsdXJlLlxuXG4gICBHaXZlbiB0aGF0OlxuICAgLSB3ZSdkIGhhdmUgdG8gZHVwbGljYXRlIGEgbG90IG9mIG5vbi10cml2aWFsIHR5cGluZyBsb2dpYyBmcm9tIHR5cGVfZm9ybWF0XG4gICAtIHRoaXMgd291bGRuJ3QgZXZlbiBlbGltaW5hdGUgKGFsbCkgdGhlIGR5bmFtaWMgZmFpbHVyZXNcbiAgIHdlIGRlY2lkZWQgdG8ganVzdCByZXVzZSB0eXBlX2Zvcm1hdCBkaXJlY3RseSBmb3Igbm93LlxuKilcbmxldCByZWNhc3QgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRcbj0gZnVuIGZtdCBmbXR0eSAtPlxuICB0eXBlX2Zvcm1hdCBmbXQgKGVyYXNlX3JlbCAoc3ltbSBmbXR0eSkpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFByaW50aW5nIHRvb2xzICopXG5cbigqIEFkZCBwYWRkaW5nIHNwYWNlcyBhcm91bmQgYSBzdHJpbmcuICopXG5sZXQgZml4X3BhZGRpbmcgcGFkdHkgd2lkdGggc3RyID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCB3aWR0aCwgcGFkdHkgPVxuICAgIGFicyB3aWR0aCxcbiAgICAoKiB3aGlsZSBsaXRlcmFsIHBhZGRpbmcgd2lkdGhzIGFyZSBhbHdheXMgbm9uLW5lZ2F0aXZlLFxuICAgICAgIGR5bmFtaWNhbGx5LXNldCB3aWR0aHMgKEFyZ19wYWRkaW5nLCBlZy4gJSpkKSBtYXkgYmUgbmVnYXRpdmU7XG4gICAgICAgd2UgaW50ZXJwcmV0IHRob3NlIGFzIHNwZWNpZnlpbmcgYSBwYWRkaW5nLXRvLXRoZS1sZWZ0OyB0aGlzXG4gICAgICAgbWVhbnMgdGhhdCAnMCcgbWF5IGdldCBkcm9wcGVkIGV2ZW4gaWYgaXQgd2FzIGV4cGxpY2l0bHkgc2V0LFxuICAgICAgIGJ1dDpcbiAgICAgICAtIHRoaXMgaXMgd2hhdCB0aGUgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRvZXMsIGFuZFxuICAgICAgICAgd2UgcHJlc2VydmUgY29tcGF0aWJpbGl0eSBpZiBwb3NzaWJsZVxuICAgICAgIC0gd2UgY291bGQgb25seSBzaWduYWwgdGhpcyBpc3N1ZSBieSBmYWlsaW5nIGF0IHJ1bnRpbWUsXG4gICAgICAgICB3aGljaCBpcyBub3QgdmVyeSBuaWNlLi4uICopXG4gICAgaWYgd2lkdGggPCAwIHRoZW4gTGVmdCBlbHNlIHBhZHR5IGluXG4gIGlmIHdpZHRoIDw9IGxlbiB0aGVuIHN0ciBlbHNlXG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2Ugd2lkdGggKGlmIHBhZHR5ID0gWmVyb3MgdGhlbiAnMCcgZWxzZSAnICcpIGluXG4gICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgIHwgTGVmdCAgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzIDAgbGVuXG4gICAgfCBSaWdodCAtPiBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHdpZHRoIC0gbGVuKSBsZW5cbiAgICB8IFplcm9zIHdoZW4gbGVuID4gMCAmJiAoc3RyLlswXSA9ICcrJyB8fCBzdHIuWzBdID0gJy0nIHx8IHN0ci5bMF0gPSAnICcpIC0+XG4gICAgICBCeXRlcy5zZXQgcmVzIDAgc3RyLlswXTtcbiAgICAgIFN0cmluZy5ibGl0IHN0ciAxIHJlcyAod2lkdGggLSBsZW4gKyAxKSAobGVuIC0gMSlcbiAgICB8IFplcm9zIHdoZW4gbGVuID4gMSAmJiBzdHIuWzBdID0gJzAnICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICAgIFN0cmluZy5ibGl0IHN0ciAyIHJlcyAod2lkdGggLSBsZW4gKyAyKSAobGVuIC0gMilcbiAgICB8IFplcm9zIC0+XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHdpZHRoIC0gbGVuKSBsZW5cbiAgICBlbmQ7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogQWRkICcwJyBwYWRkaW5nIHRvIGludCwgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NCBzdHJpbmcgcmVwcmVzZW50YXRpb24uICopXG5sZXQgZml4X2ludF9wcmVjaXNpb24gcHJlYyBzdHIgPVxuICBsZXQgcHJlYyA9IGFicyBwcmVjIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBtYXRjaCBzdHIuWzBdIHdpdGhcbiAgfCAoJysnIHwgJy0nIHwgJyAnKSBhcyBjIHdoZW4gcHJlYyArIDEgPiBsZW4gLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSAocHJlYyArIDEpICcwJyBpblxuICAgIEJ5dGVzLnNldCByZXMgMCBjO1xuICAgIFN0cmluZy5ibGl0IHN0ciAxIHJlcyAocHJlYyAtIGxlbiArIDIpIChsZW4gLSAxKTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8ICcwJyB3aGVuIHByZWMgKyAyID4gbGVuICYmIGxlbiA+IDEgJiYgKHN0ci5bMV0gPSAneCcgfHwgc3RyLlsxXSA9ICdYJykgLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSAocHJlYyArIDIpICcwJyBpblxuICAgIEJ5dGVzLnNldCByZXMgMSBzdHIuWzFdO1xuICAgIFN0cmluZy5ibGl0IHN0ciAyIHJlcyAocHJlYyAtIGxlbiArIDQpIChsZW4gLSAyKTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8ICcwJyAuLiAnOScgfCAnYScgLi4gJ2YnIHwgJ0EnIC4uICdGJyB3aGVuIHByZWMgPiBsZW4gLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSBwcmVjICcwJyBpblxuICAgIFN0cmluZy5ibGl0IHN0ciAwIHJlcyAocHJlYyAtIGxlbikgbGVuO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgXyAtPlxuICAgIHN0clxuXG4oKiBFc2NhcGUgYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBPQ2FtbCBsZXhpbmcgY29udmVudGlvbi4gKilcbmxldCBzdHJpbmdfdG9fY2FtbF9zdHJpbmcgc3RyID1cbiAgbGV0IHN0ciA9IFN0cmluZy5lc2NhcGVkIHN0ciBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcXCInIGluXG4gIFN0cmluZy51bnNhZmVfYmxpdCBzdHIgMCByZXMgMSBsO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBHZW5lcmF0ZSB0aGUgZm9ybWF0X2ludC9pbnQzMi9uYXRpdmVpbnQvaW50NjQgZmlyc3QgYXJndW1lbnRcbiAgIGZyb20gYW4gaW50X2NvbnYuICopXG5sZXQgZm9ybWF0X29mX2ljb252ID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVkXCIgfCBJbnRfcGQgLT4gXCIlK2RcIiB8IEludF9zZCAtPiBcIiUgZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlaVwiIHwgSW50X3BpIC0+IFwiJStpXCIgfCBJbnRfc2kgLT4gXCIlIGlcIlxuICB8IEludF94IC0+IFwiJXhcIiB8IEludF9DeCAtPiBcIiUjeFwiXG4gIHwgSW50X1ggLT4gXCIlWFwiIHwgSW50X0NYIC0+IFwiJSNYXCJcbiAgfCBJbnRfbyAtPiBcIiVvXCIgfCBJbnRfQ28gLT4gXCIlI29cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJXVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252TCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlTGRcIiB8IEludF9wZCAtPiBcIiUrTGRcIiB8IEludF9zZCAtPiBcIiUgTGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJUxpXCIgfCBJbnRfcGkgLT4gXCIlK0xpXCIgfCBJbnRfc2kgLT4gXCIlIExpXCJcbiAgfCBJbnRfeCAtPiBcIiVMeFwiIHwgSW50X0N4IC0+IFwiJSNMeFwiXG4gIHwgSW50X1ggLT4gXCIlTFhcIiB8IEludF9DWCAtPiBcIiUjTFhcIlxuICB8IEludF9vIC0+IFwiJUxvXCIgfCBJbnRfQ28gLT4gXCIlI0xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVMdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZsID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVsZFwiIHwgSW50X3BkIC0+IFwiJStsZFwiIHwgSW50X3NkIC0+IFwiJSBsZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbGlcIiB8IEludF9waSAtPiBcIiUrbGlcIiB8IEludF9zaSAtPiBcIiUgbGlcIlxuICB8IEludF94IC0+IFwiJWx4XCIgfCBJbnRfQ3ggLT4gXCIlI2x4XCJcbiAgfCBJbnRfWCAtPiBcIiVsWFwiIHwgSW50X0NYIC0+IFwiJSNsWFwiXG4gIHwgSW50X28gLT4gXCIlbG9cIiB8IEludF9DbyAtPiBcIiUjbG9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJWx1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udm4gPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJW5kXCIgfCBJbnRfcGQgLT4gXCIlK25kXCIgfCBJbnRfc2QgLT4gXCIlIG5kXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVuaVwiIHwgSW50X3BpIC0+IFwiJStuaVwiIHwgSW50X3NpIC0+IFwiJSBuaVwiXG4gIHwgSW50X3ggLT4gXCIlbnhcIiB8IEludF9DeCAtPiBcIiUjbnhcIlxuICB8IEludF9YIC0+IFwiJW5YXCIgfCBJbnRfQ1ggLT4gXCIlI25YXCJcbiAgfCBJbnRfbyAtPiBcIiVub1wiIHwgSW50X0NvIC0+IFwiJSNub1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlbnVcIlxuXG4oKiBHZW5lcmF0ZSB0aGUgZm9ybWF0X2Zsb2F0IGZpcnN0IGFyZ3VtZW50IGZyb20gYSBmbG9hdF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjID1cbiAgICBsZXQgcHJlYyA9IGFicyBwcmVjIGluXG4gICAgbGV0IHN5bWIgPSBjaGFyX29mX2Zjb252IH5jRjonZycgZmNvbnYgaW5cbiAgICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICAgIGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udjtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgcHJlYyk7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBzeW1iO1xuICAgIGJ1ZmZlcl9jb250ZW50cyBidWZcblxubGV0IHRyYW5zZm9ybV9pbnRfYWx0IGljb252IHMgPVxuICBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1IC0+XG4gICAgbGV0IGRpZ2l0cyA9XG4gICAgICBsZXQgbiA9IHJlZiAwIGluXG4gICAgICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgICAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgICB8ICcwJy4uJzknIC0+IGluY3IgblxuICAgICAgICB8IF8gLT4gKClcbiAgICAgIGRvbmU7XG4gICAgICAhblxuICAgIGluXG4gICAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzICsgKGRpZ2l0cyAtIDEpIC8gMykgaW5cbiAgICBsZXQgcG9zID0gcmVmIDAgaW5cbiAgICBsZXQgcHV0IGMgPSBCeXRlcy5zZXQgYnVmICFwb3MgYzsgaW5jciBwb3MgaW5cbiAgICBsZXQgbGVmdCA9IHJlZiAoKGRpZ2l0cyAtIDEpIG1vZCAzICsgMSkgaW5cbiAgICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgJzAnLi4nOScgYXMgYyAtPlxuICAgICAgICAgIGlmICFsZWZ0ID0gMCB0aGVuIChwdXQgJ18nOyBsZWZ0IDo9IDMpOyBkZWNyIGxlZnQ7IHB1dCBjXG4gICAgICB8IGMgLT4gcHV0IGNcbiAgICBkb25lO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmXG4gIHwgXyAtPiBzXG5cbigqIENvbnZlcnQgYW4gaW50ZWdlciB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gYSBjb252ZXJzaW9uLiAqKVxubGV0IGNvbnZlcnRfaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludCAoZm9ybWF0X29mX2ljb252IGljb252KSBuKVxubGV0IGNvbnZlcnRfaW50MzIgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50MzIgKGZvcm1hdF9vZl9pY29udmwgaWNvbnYpIG4pXG5sZXQgY29udmVydF9uYXRpdmVpbnQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfbmF0aXZlaW50IChmb3JtYXRfb2ZfaWNvbnZuIGljb252KSBuKVxubGV0IGNvbnZlcnRfaW50NjQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50NjQgKGZvcm1hdF9vZl9pY29udkwgaWNvbnYpIG4pXG5cbigqIENvbnZlcnQgYSBmbG9hdCB0byBzdHJpbmcuICopXG4oKiBGaXggc3BlY2lhbCBjYXNlIG9mIFwiT0NhbWwgZmxvYXQgZm9ybWF0XCIuICopXG5sZXQgY29udmVydF9mbG9hdCBmY29udiBwcmVjIHggPVxuICBsZXQgaGV4ICgpID1cbiAgICBsZXQgc2lnbiA9XG4gICAgICBtYXRjaCBmc3QgZmNvbnYgd2l0aFxuICAgICAgfCBGbG9hdF9mbGFnX3AgLT4gJysnXG4gICAgICB8IEZsb2F0X2ZsYWdfcyAtPiAnICdcbiAgICAgIHwgXyAtPiAnLScgaW5cbiAgICBoZXhzdHJpbmdfb2ZfZmxvYXQgeCBwcmVjIHNpZ24gaW5cbiAgbGV0IGFkZF9kb3RfaWZfbmVlZGVkIHN0ciA9XG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gICAgbGV0IHJlYyBpc192YWxpZCBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5baV0gd2l0aFxuICAgICAgICB8ICcuJyB8ICdlJyB8ICdFJyAtPiB0cnVlXG4gICAgICAgIHwgXyAtPiBpc192YWxpZCAoaSArIDEpIGluXG4gICAgaWYgaXNfdmFsaWQgMCB0aGVuIHN0ciBlbHNlIHN0ciBeIFwiLlwiIGluXG4gIGxldCBjYW1sX3NwZWNpYWxfdmFsIHN0ciA9IG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IHggd2l0aFxuICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPiBzdHJcbiAgICB8IEZQX2luZmluaXRlIC0+IGlmIHggPCAwLjAgdGhlbiBcIm5lZ19pbmZpbml0eVwiIGVsc2UgXCJpbmZpbml0eVwiXG4gICAgfCBGUF9uYW4gLT4gXCJuYW5cIiBpblxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2ggLT4gaGV4ICgpXG4gIHwgRmxvYXRfSCAtPiBTdHJpbmcudXBwZXJjYXNlX2FzY2lpIChoZXggKCkpXG4gIHwgRmxvYXRfQ0YgLT4gY2FtbF9zcGVjaWFsX3ZhbCAoaGV4ICgpKVxuICB8IEZsb2F0X0YgLT5cbiAgICBsZXQgc3RyID0gZm9ybWF0X2Zsb2F0IChmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYykgeCBpblxuICAgIGNhbWxfc3BlY2lhbF92YWwgKGFkZF9kb3RfaWZfbmVlZGVkIHN0cilcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfRyAtPlxuICAgIGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHhcblxuKCogQ29udmVydCBhIGNoYXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBPQ2FtbCBsZXhpY2FsIGNvbnZlbnRpb24uICopXG5sZXQgZm9ybWF0X2NhbWxfY2hhciBjID1cbiAgbGV0IHN0ciA9IENoYXIuZXNjYXBlZCBjIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKGwgKyAyKSAnXFwnJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogQ29udmVydCBhIGZvcm1hdCB0eXBlIHRvIHN0cmluZyAqKVxubGV0IHN0cmluZ19vZl9mbXR0eSBmbXR0eSA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXR0eSBidWYgZm10dHk7XG4gIGJ1ZmZlcl9jb250ZW50cyBidWZcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICgqIEdlbmVyaWMgcHJpbnRpbmcgZnVuY3Rpb24gKilcblxuKCogTWFrZSBhIGdlbmVyaWMgcHJpbnRpbmcgZnVuY3Rpb24uICopXG4oKiBVc2VkIHRvIGdlbmVyYXRlIFByaW50ZiBhbmQgRm9ybWF0IHByaW50aW5nIGZ1bmN0aW9ucy4gKilcbigqIFBhcmFtZXRlcnM6XG4gICAgIGs6IGEgY29udGludWF0aW9uIGZpbmFsbHkgYXBwbGllZCB0byB0aGUgb3V0cHV0IHN0cmVhbSBhbmQgdGhlIGFjY3VtdWxhdG9yLlxuICAgICBvOiB0aGUgb3V0cHV0IHN0cmVhbSAoc2VlIGssICVhIGFuZCAldCkuXG4gICAgIGFjYzogcmV2IGxpc3Qgb2YgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1c2gsIGZvcm1hdHRpbmcsIC4uLikuXG4gICAgIGZtdDogdGhlIGZvcm1hdC4gKilcbmxldCByZWMgbWFrZV9wcmludGYgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXQgLT4gbWF0Y2ggZm10IHdpdGhcbiAgfCBDaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9jYW1sX2NoYXIgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIChmdW4gc3RyIC0+IHN0cilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCBzdHJpbmdfdG9fY2FtbF9zdHJpbmdcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludCBpY29udlxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQzMiBpY29udlxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfbmF0aXZlaW50IGljb252XG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludDY0IGljb252XG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGZjb252XG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCBzdHJpbmdfb2ZfYm9vbFxuICB8IEFscGhhIHJlc3QgLT5cbiAgICBmdW4gZiB4IC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmdW4gbyAtPiBmIG8geCkpIHJlc3RcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgZnVuIGYgLT4gbWFrZV9wcmludGYgayAoQWNjX2RlbGF5IChhY2MsIGYpKSByZXN0XG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmICgpKVxuICB8IFJlYWRlciBfIC0+XG4gICAgKCogVGhpcyBjYXNlIGlzIGltcG9zc2libGUsIGJ5IHR5cGluZyBvZiBmb3JtYXRzLiAqKVxuICAgICgqIEluZGVlZCwgc2luY2UgcHJpbnRmIGFuZCBjby4gdGFrZSBhIGZvcm1hdDQgYXMgYXJndW1lbnQsIHRoZSAnZCBhbmQgJ2VcbiAgICAgICB0eXBlIHBhcmFtZXRlcnMgb2YgZm10IGFyZSBvYnZpb3VzbHkgZXF1YWxzLiBUaGUgUmVhZGVyIGlzIHRoZVxuICAgICAgIG9ubHkgY29uc3RydWN0b3Igd2hpY2ggdG91Y2ggJ2QgYW5kICdlIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgZm9ybWF0XG4gICAgICAgdHlwZSwgaXQgYWRkcyBhbiAoLT4pIHRvIHRoZSAnZCBwYXJhbWV0ZXJzLiBDb25zZXF1ZW50bHksIGEgZm9ybWF0NFxuICAgICAgIGNhbm5vdCBjb250YWluIGEgUmVhZGVyIG5vZGUsIGV4Y2VwdCBpbiB0aGUgc3ViLWZvcm1hdCBhc3NvY2lhdGVkIHRvXG4gICAgICAgYW4gJXsuLi4lfS4gSXQncyBub3QgYSBwcm9ibGVtIGJlY2F1c2UgbWFrZV9wcmludGYgZG8gbm90IGNhbGxcbiAgICAgICBpdHNlbGYgcmVjdXJzaXZlbHkgb24gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0byAley4uLiV9LiAqKVxuICAgIGFzc2VydCBmYWxzZVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfZmx1c2ggYWNjKSByZXN0XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19zdHJpbmdfbGl0ZXJhbCAoYWNjLCBzdHIpKSByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2NoYXJfbGl0ZXJhbCAoYWNjLCBjaHIpKSByZXN0XG5cbiAgfCBGb3JtYXRfYXJnIChfLCBzdWJfZm10dHksIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gc3RyaW5nX29mX2ZtdHR5IHN1Yl9mbXR0eSBpblxuICAgIChmdW4gc3RyIC0+XG4gICAgICBpZ25vcmUgc3RyO1xuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHR5KSkgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgIGZ1biAoRm9ybWF0IChmbXQsIF8pKSAtPiBtYWtlX3ByaW50ZiBrIGFjY1xuICAgICAgKGNvbmNhdF9mbXQgKHJlY2FzdCBmbXQgZm10dHkpIHJlc3QpXG5cbiAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPlxuICAgIGxldCBuZXdfYWNjID0gQWNjX2ludmFsaWRfYXJnIChhY2MsIFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlW1wiKSBpblxuICAgIGZ1biBfIC0+IG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT5cbiAgICAoKiBUaGlzIGNhc2Ugc2hvdWxkIGJlIHJlZnVzZWQgZm9yIFByaW50Zi4gKilcbiAgICAoKiBBY2NlcHRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKilcbiAgICAoKiBJbnRlcnByZXQgJWwsICVuIGFuZCAlTCBhcyAldS4gKilcbiAgICBmdW4gbiAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZm9ybWF0X2ludCBcIiV1XCIgbikgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX2NoYXIgKGFjYywgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIG1ha2VfaWdub3JlZF9wYXJhbSBrIGFjYyBpZ24gcmVzdFxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfbGl0IChhY2MsIGZtdGluZ19saXQpKSByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBsZXQgaycga2FjYyA9XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19nZW4gKGFjYywgQWNjX29wZW5fdGFnIGthY2MpKSByZXN0IGluXG4gICAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXQnXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBsZXQgaycga2FjYyA9XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19nZW4gKGFjYywgQWNjX29wZW5fYm94IGthY2MpKSByZXN0IGluXG4gICAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXQnXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgayBhY2NcblxuKCogRGVsYXkgdGhlIGVycm9yIChJbnZhbGlkX2FyZ3VtZW50IFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlX1wiKS4gKilcbigqIEdlbmVyYXRlIGZ1bmN0aW9ucyB0byB0YWtlIHJlbWFpbmluZyBhcmd1bWVudHMgKGFmdGVyIHRoZSBcIiVfXCIpLiAqKVxuYW5kIG1ha2VfaWdub3JlZF9wYXJhbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIGZtdHR5IGZtdFxuICB8IElnbm9yZWRfcmVhZGVyICAgICAgICAgICAgICAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG5cblxuKCogU3BlY2lhbCBjYXNlIG9mIHByaW50ZiBcIiVfKFwiLiAqKVxuYW5kIG1ha2VfZnJvbV9mbXR0eSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGZtdHR5IC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXR0eSBmbXQgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFN0cmluZ190eSByZXN0ICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludF90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludDMyX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IE5hdGl2ZWludF90eSByZXN0ICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludDY0X3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEZsb2F0X3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEJvb2xfdHkgcmVzdCAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFscGhhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQW55X3R5IHJlc3QgICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgUmVhZGVyX3R5IF8gICAgICAgICAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgXyAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgRm9ybWF0X2FyZ190eSAoXywgcmVzdCkgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgRW5kX29mX2ZtdHR5ICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIChjb25jYXRfZm10dHkgdHkgcmVzdCkgZm10XG5cbigqIEluc2VydCBhbiBBY2NfaW52YWxpZF9hcmcgaW4gdGhlIGFjY3VtdWxhdG9yIGFuZCBjb250aW51ZSB0byBnZW5lcmF0ZVxuICAgY2xvc3VyZXMgdG8gZ2V0IHRoZSByZW1haW5pbmcgYXJndW1lbnRzLiAqKVxuYW5kIG1ha2VfaW52YWxpZF9hcmcgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXQgLT5cbiAgbWFrZV9wcmludGYgayAoQWNjX2ludmFsaWRfYXJnIChhY2MsIFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlX1wiKSkgZm10XG5cbigqIEZpeCBwYWRkaW5nLCB0YWtlIGl0IGFzIGFuIGV4dHJhIGludGVnZXIgYXJndW1lbnQgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfcGFkZGluZyA6IHR5cGUgeCB6IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB6IC0+IGEpIHBhZGRpbmcgLT4gKHogLT4gc3RyaW5nKSAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgdHJhbnMgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIHRyYW5zIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZml4X3BhZGRpbmcgcGFkdHkgd2lkdGggKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5IC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG5cbigqIEZpeCBwYWRkaW5nIGFuZCBwcmVjaXNpb24gZm9yIGludCwgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NC4gKilcbigqIFRha2Ugb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gOiB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPiAoaW50X2NvbnYgLT4geiAtPiBzdHJpbmcpIC0+XG4gICAgaW50X2NvbnYgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHByZWMgdHJhbnMgaWNvbnYgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IHRyYW5zIGljb252IHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcblxuKCogQ29udmVydCBhIGZsb2F0LCBmaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGlmIG5lZWRlZC4gKilcbigqIFRha2UgdGhlIGZsb2F0IGFyZ3VtZW50IGFuZCBvbmUgb3IgdHdvIGV4dHJhIGludGVnZXIgYXJndW1lbnRzIGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIGZsb2F0IC0+IGEpIHByZWNpc2lvbiAtPiBmbG9hdF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIGZjb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiBwIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbGV0IHN0cicgPSBmaXhfcGFkZGluZyBwYWR0eSB3IHN0ciBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cicpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbGV0IHN0cicgPSBmaXhfcGFkZGluZyBwYWR0eSB3IHN0ciBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cicpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5hbmQgbWFrZV9jdXN0b20gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IHggLT4geSA9XG4gIGZ1biBrIGFjYyByZXN0IGFyaXR5IGYgLT4gbWF0Y2ggYXJpdHkgd2l0aFxuICB8IEN1c3RvbV96ZXJvIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+XG4gICAgZnVuIHggLT5cbiAgICAgIG1ha2VfY3VzdG9tIGsgYWNjIHJlc3QgYXJpdHkgKGYgeClcblxubGV0IGNvbnN0IHggXyA9IHhcblxubGV0IHJlYyBtYWtlX2lwcmludGYgOiB0eXBlIGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbiAgZnVuIGsgbyBmbXQgLT4gbWF0Y2ggZm10IHdpdGhcbiAgICB8IENoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQ2FtbF9zdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfc3RyaW5nIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBOYXRpdmVpbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEludDY0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBGbG9hdCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgQm9vbCAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEJvb2wgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBBbHBoYSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IFRoZXRhIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX2N1c3RvbV9hcml0eSBrIG8gcmVzdCBhcml0eVxuICAgIHwgUmVhZGVyIF8gLT5cbiAgICAgICAgKCogVGhpcyBjYXNlIGlzIGltcG9zc2libGUsIGJ5IHR5cGluZyBvZiBmb3JtYXRzLiAgU2VlIHRoZVxuICAgICAgICAgICBub3RlIGluIHRoZSBjb3JyZXNwb25kaW5nIGNhc2UgZm9yIG1ha2VfcHJpbnRmLiAqKVxuICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICB8IEZsdXNoIHJlc3QgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgRm9ybWF0X2FyZyAoXywgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpIC0+XG4gICAgICAgIGZ1biAoRm9ybWF0IChmbXQsIF8pKSAtPlxuICAgICAgICAgIG1ha2VfaXByaW50ZiBrIG9cbiAgICAgICAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuICAgIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaWdub3JlZF9wYXJhbSAoZnVuIF8gLT4gayBvKSAoRW5kX29mX2FjYykgaWduIHJlc3RcbiAgICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiAoZnVuIGtvYyAtPiBtYWtlX2lwcmludGYgayBrb2MgcmVzdCkgbyBmbXQnXG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgICAgICBrIG9cbmFuZCBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiA6XG4gIHR5cGUgeCB5IHogYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPiBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPiB4ID1cbiAgZnVuIGsgbyBmbXQgcGFkIHByZWMgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgICAsIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBOb19wYWRkaW5nICAgLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgTGl0X3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IExpdF9wYWRkaW5nIF8sIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKSlcbmFuZCBmbl9vZl9jdXN0b21fYXJpdHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+XG4gIHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB5ID1cbiAgZnVuIGsgbyBmbXQgLT4gZnVuY3Rpb25cbiAgICB8IEN1c3RvbV96ZXJvIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gZm10XG4gICAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgICAgICBjb25zdCAoZm5fb2ZfY3VzdG9tX2FyaXR5IGsgbyBmbXQgYXJpdHkpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnRpbnVhdGlvbnMgZm9yIG1ha2VfcHJpbnRmICopXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgbyBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBcIkB7XCI7IG91dHB1dF9hY2MgbyBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBcIkBbXCI7IG91dHB1dF9hY2MgbyBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9jaGFyIG8gY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZiBvXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBmbHVzaCBvXG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgbyBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBidWZwdXRfYWNjIGIgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkB7XCI7IGJ1ZnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAW1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDsgZiBiXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBidWZwdXRfYWNjIGIgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogRGlmZmVyIGZyb20gYnVmcHV0X2FjYyBieSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgJWEgYW5kICV0LiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgc3RycHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBzdHJwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgKGYgKCkpXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBzdHJwdXRfYWNjIGIgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBFcnJvciBtYW5hZ2VtZW50ICopXG5cbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgcHJldHR5LXByaW50ZWQgZXJyb3IgbWVzc2FnZS4gKilcbmxldCBmYWlsd2l0aF9tZXNzYWdlIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBrIGFjYyA9IHN0cnB1dF9hY2MgYnVmIGFjYzsgZmFpbHdpdGggKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXR0aW5nIHRvb2xzICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYW4gb3BlbiBibG9jayBkZXNjcmlwdGlvbiAoaW5kZW50LCBibG9ja190eXBlKSAqKVxubGV0IG9wZW5fYm94X29mX3N0cmluZyBzdHIgPVxuICBpZiBzdHIgPSBcIlwiIHRoZW4gKDAsIFBwX2JveCkgZWxzZVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCBpbnZhbGlkX2JveCAoKSA9IGZhaWx3aXRoX21lc3NhZ2UgXCJpbnZhbGlkIGJveCBkZXNjcmlwdGlvbiAlU1wiIHN0ciBpblxuICAgIGxldCByZWMgcGFyc2Vfc3BhY2VzIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuIGkgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnICcgfCAnXFx0JyAtPiBwYXJzZV9zcGFjZXMgKGkgKyAxKVxuICAgICAgICB8IF8gLT4gaVxuICAgIGFuZCBwYXJzZV9sd29yZCBpIGogPVxuICAgICAgaWYgaiA9IGxlbiB0aGVuIGogZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2pdIHdpdGhcbiAgICAgICAgfCAnYScgLi4gJ3onIC0+IHBhcnNlX2x3b3JkIGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4galxuICAgIGFuZCBwYXJzZV9pbnQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBwYXJzZV9pbnQgaSAoaiArIDEpXG4gICAgICAgIHwgXyAtPiBqIGluXG4gICAgbGV0IHdzdGFydCA9IHBhcnNlX3NwYWNlcyAwIGluXG4gICAgbGV0IHdlbmQgPSBwYXJzZV9sd29yZCB3c3RhcnQgd3N0YXJ0IGluXG4gICAgbGV0IGJveF9uYW1lID0gU3RyaW5nLnN1YiBzdHIgd3N0YXJ0ICh3ZW5kIC0gd3N0YXJ0KSBpblxuICAgIGxldCBuc3RhcnQgPSBwYXJzZV9zcGFjZXMgd2VuZCBpblxuICAgIGxldCBuZW5kID0gcGFyc2VfaW50IG5zdGFydCBuc3RhcnQgaW5cbiAgICBsZXQgaW5kZW50ID1cbiAgICAgIGlmIG5zdGFydCA9IG5lbmQgdGhlbiAwIGVsc2VcbiAgICAgICAgdHJ5IGludF9vZl9zdHJpbmcgKFN0cmluZy5zdWIgc3RyIG5zdGFydCAobmVuZCAtIG5zdGFydCkpXG4gICAgICAgIHdpdGggRmFpbHVyZSBfIC0+IGludmFsaWRfYm94ICgpIGluXG4gICAgbGV0IGV4cF9lbmQgPSBwYXJzZV9zcGFjZXMgbmVuZCBpblxuICAgIGlmIGV4cF9lbmQgPD4gbGVuIHRoZW4gaW52YWxpZF9ib3ggKCk7XG4gICAgbGV0IGJveF90eXBlID0gbWF0Y2ggYm94X25hbWUgd2l0aFxuICAgICAgfCBcIlwiIHwgXCJiXCIgLT4gUHBfYm94XG4gICAgICB8IFwiaFwiICAgICAgLT4gUHBfaGJveFxuICAgICAgfCBcInZcIiAgICAgIC0+IFBwX3Zib3hcbiAgICAgIHwgXCJodlwiICAgICAtPiBQcF9odmJveFxuICAgICAgfCBcImhvdlwiICAgIC0+IFBwX2hvdmJveFxuICAgICAgfCBfICAgICAgICAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIChpbmRlbnQsIGJveF90eXBlKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFBhcnNpbmcgdG9vbHMgKilcblxuKCogQ3JlYXRlIGEgcGFkZGluZ19mbXRfZWJiIGZyb20gYSBwYWRkaW5nIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHBhZGRpbmcgdG8gZGlzam9pbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50IGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgOiB0eXBlIHggeSAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHBhZGRpbmdfZm10X2ViYiA9XG5mdW4gcGFkIGZtdCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgICAgICAgICAtPiBQYWRkaW5nX2ZtdF9FQkIgKE5vX3BhZGRpbmcsIGZtdClcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkZGluZ19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIGZtdClcbiAgfCBBcmdfcGFkZGluZyBzICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChBcmdfcGFkZGluZyBzLCBmbXQpXG5cbigqIENyZWF0ZSBhIHByZWNpc2lvbl9mbXRfZWJiIGZyb20gYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcHJlY2lzaW9uIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgOiB0eXBlIHggeSAuXG4gICAgKHgsIHkpIHByZWNpc2lvbiAtPiAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgICAoXywgXywgXywgXywgXykgcHJlY2lzaW9uX2ZtdF9lYmIgPVxuZnVuIHByZWMgZm10IC0+IG1hdGNoIHByZWMgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiAgICAtPiBQcmVjaXNpb25fZm10X0VCQiAoTm9fcHJlY2lzaW9uLCBmbXQpXG4gIHwgTGl0X3ByZWNpc2lvbiBwIC0+IFByZWNpc2lvbl9mbXRfRUJCIChMaXRfcHJlY2lzaW9uIHAsIGZtdClcbiAgfCBBcmdfcHJlY2lzaW9uICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKEFyZ19wcmVjaXNpb24sIGZtdClcblxuKCogQ3JlYXRlIGEgcGFkcHJlY19mbXRfZWJiIGZyb20gYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIGFuZCB0aGUgcHJlY2lzaW9uIHRvIGRpc2pvaW4gdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50c1xuICAgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3BhZHByZWNfZm10X2ViYiA6IHR5cGUgeCB5IHogdCAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPlxuICAgIChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAoXywgXywgXywgXywgXykgcGFkcHJlY19mbXRfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXQgLT5cbiAgbGV0IFByZWNpc2lvbl9mbXRfRUJCIChwcmVjLCBmbXQnKSA9IG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgcHJlYyBmbXQgaW5cbiAgbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkcHJlY19mbXRfRUJCIChOb19wYWRkaW5nLCBwcmVjLCBmbXQnKVxuICB8IExpdF9wYWRkaW5nIChzLCB3KSAtPiBQYWRwcmVjX2ZtdF9FQkIgKExpdF9wYWRkaW5nIChzLCB3KSwgcHJlYywgZm10JylcbiAgfCBBcmdfcGFkZGluZyBzICAgICAgLT4gUGFkcHJlY19mbXRfRUJCIChBcmdfcGFkZGluZyBzLCBwcmVjLCBmbXQnKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgcGFyc2luZyAqKVxuXG4oKiBQYXJzZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBmb3JtYXQgYW5kIGNyZWF0ZSBhIGZtdF9lYmIuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gaW4gY2FzZSBvZiBpbnZhbGlkIGZvcm1hdC4gKilcbmxldCBmbXRfZWJiX29mX3N0cmluZyA/bGVnYWN5X2JlaGF2aW9yIHN0ciA9XG4gICgqIFBhcmFtZXRlcnMgbmFtaW5nIGNvbnZlbnRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIGxpdF9zdGFydDogc3RhcnQgb2YgdGhlIGxpdGVyYWwgc2VxdWVuY2UuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gc3RyX2luZDogY3VycmVudCBpbmRleCBpbiB0aGUgc3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBlbmRfaW5kOiBlbmQgb2YgdGhlIGN1cnJlbnQgKHN1Yi0pZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHBjdF9pbmQ6IGluZGV4IG9mIHRoZSAnJScgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAqKVxuICAoKiAgIC0gemVybzogIGlzIHRoZSAnMCcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBtaW51czogaXMgdGhlICctJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBsdXM6ICBpcyB0aGUgJysnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gaGFzaDogIGlzIHRoZSAnIycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBzcGFjZTogaXMgdGhlICcgJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGlnbjogICBpcyB0aGUgJ18nIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gcGFkOiBwYWRkaW5nIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwcmVjOiBwcmVjaXNpb24gb2YgdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN5bWI6IGNoYXIgcmVwcmVzZW50aW5nIHRoZSBjb252ZXJzaW9uICgnYycsICdzJywgJ2QnLCAuLi4pLiAqKVxuICAoKiAgIC0gY2hhcl9zZXQ6IHNldCBvZiBjaGFyYWN0ZXJzIGFzIGJpdG1hcCAoc2VlIHNjYW5mICVbLi4uXSkuICAgICopXG5cbiAgbGV0IGxlZ2FjeV9iZWhhdmlvciA9IG1hdGNoIGxlZ2FjeV9iZWhhdmlvciB3aXRoXG4gICAgfCBTb21lIGZsYWcgLT4gZmxhZ1xuICAgIHwgTm9uZSAtPiB0cnVlXG4gICgqICBXaGVuIHRoaXMgZmxhZyBpcyBlbmFibGVkLCB0aGUgZm9ybWF0IHBhcnNlciB0cmllcyB0byBiZWhhdmUgYXNcbiAgICAgIHRoZSA8NC4wMiBpbXBsZW1lbnRhdGlvbnMsIGluIHBhcnRpY3VsYXIgaXQgaWdub3JlcyBtb3N0IGJlbmluZVxuICAgICAgbm9uc2Vuc2ljYWwgZm9ybWF0LiBXaGVuIHRoZSBmbGFnIGlzIGRpc2FibGVkLCBpdCB3aWxsIHJlamVjdCBhbnlcbiAgICAgIGZvcm1hdCB0aGF0IGlzIG5vdCBhY2NlcHRlZCBieSB0aGUgc3BlY2lmaWNhdGlvbi5cblxuICAgICAgQSB0eXBpY2FsIGV4YW1wbGUgd291bGQgYmUgXCIlKyBkXCI6IHNwZWNpZnlpbmcgYm90aCAnKycgKGlmIHRoZVxuICAgICAgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aCBhICcrJyB0byBnZXQgdGhlIHNhbWUgd2lkdGggYXNcbiAgICAgIG5lZ2F0aXZlIG51bWJlcnMpIGFuZCAnICcgKGlmIHRoZSBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoXG4gICAgICBhIHNwYWNlKSBkb2VzIG5vdCBtYWtlIHNlbnNlLCBidXQgdGhlIGxlZ2FjeSAoPCA0LjAyKVxuICAgICAgaW1wbGVtZW50YXRpb24gd2FzIGhhcHB5IHRvIGp1c3QgaWdub3JlIHRoZSBzcGFjZS5cbiAgKilcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UuICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmQgbXNnID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBtc2dcbiAgaW5cblxuICAoKiBVc2VkIHdoZW4gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IChvciB0aGUgY3VycmVudCBzdWItZm9ybWF0KSB3YXMgZW5jb3VudGVyZWRcbiAgICAgIHVuZXhwZWN0ZWRseS4gKilcbiAgbGV0IHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIGVuZF9pbmRcbiAgICAgIFwidW5leHBlY3RlZCBlbmQgb2YgZm9ybWF0XCJcbiAgaW5cblxuICAoKiBVc2VkIGZvciAlMGM6IG5vIG90aGVyIHdpZHRocyBhcmUgaW1wbGVtZW50ZWQgKilcbiAgbGV0IGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZFxuICAgICAgXCJub24temVybyB3aWR0aHMgYXJlIHVuc3VwcG9ydGVkIGZvciAlYyBjb252ZXJzaW9uc1wiXG4gIGluXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiBvcHRpb24gZGVwZW5kZW5jeVxuICAgICBwcm9ibGVtLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfd2l0aG91dCBzdHJfaW5kIGMgcyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJyVjJyB3aXRob3V0ICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIGMgc1xuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiB1bmV4cGVjdGVkXG4gICAgIGNoYXJhY3Rlci4gKilcbiAgbGV0IGV4cGVjdGVkX2NoYXJhY3RlciBzdHJfaW5kIGV4cGVjdGVkIHJlYWQgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXMgZXhwZWN0ZWQsIHJlYWQgJUNcIlxuICAgICAgc3RyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZFxuICBpblxuXG4gICgqIFBhcnNlIHRoZSBzdHJpbmcgZnJvbSBiZWdfaW5kIChpbmNsdWRlZCkgdG8gZW5kX2luZCAoZXhjbHVkZWQpLiAqKVxuICBsZXQgcmVjIHBhcnNlIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGJlZ19pbmQgZW5kX2luZCAtPiBwYXJzZV9saXRlcmFsIGJlZ19pbmQgYmVnX2luZCBlbmRfaW5kXG5cbiAgKCogUmVhZCBsaXRlcmFsIGNoYXJhY3RlcnMgdXAgdG8gJyUnIG9yICdAJyBzcGVjaWFsIGNoYXJhY3RlcnMuICopXG4gIGFuZCBwYXJzZV9saXRlcmFsIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBFbmRfb2ZfZm9ybWF0IGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9mb3JtYXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2FmdGVyX2F0IChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX2xpdGVyYWwgbGl0X3N0YXJ0IChzdHJfaW5kICsgMSkgZW5kX2luZFxuXG4gICgqIFBhcnNlIGEgZm9ybWF0IGFmdGVyICclJyAqKVxuICBhbmQgcGFyc2VfZm9ybWF0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgZW5kX2luZCAtPiBwYXJzZV9pZ24gcGN0X2luZCAocGN0X2luZCArIDEpIGVuZF9pbmRcblxuICBhbmQgcGFyc2VfaWduIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdfJyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIChzdHJfaW5kKzEpIGVuZF9pbmQgdHJ1ZVxuICAgICAgfCBfIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGZhbHNlXG5cbiAgYW5kIHBhcnNlX2ZsYWdzIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiXG4gID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGlnbiAtPlxuICAgIGxldCB6ZXJvID0gcmVmIGZhbHNlIGFuZCBtaW51cyA9IHJlZiBmYWxzZVxuICAgIGFuZCBwbHVzID0gcmVmIGZhbHNlIGFuZCBzcGFjZSA9IHJlZiBmYWxzZVxuICAgIGFuZCBoYXNoID0gcmVmIGZhbHNlIGluXG4gICAgbGV0IHNldF9mbGFnIHN0cl9pbmQgZmxhZyA9XG4gICAgICAoKiBpbiBsZWdhY3kgbW9kZSwgZHVwbGljYXRlIGZsYWdzIGFyZSBhY2NlcHRlZCAqKVxuICAgICAgaWYgIWZsYWcgJiYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBkdXBsaWNhdGUgZmxhZyAlQ1wiXG4gICAgICAgICAgc3RyIHN0cl9pbmQgc3RyLltzdHJfaW5kXTtcbiAgICAgIGZsYWcgOj0gdHJ1ZTtcbiAgICBpblxuICAgIGxldCByZWMgcmVhZF9mbGFncyBzdHJfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzAnIC0+IHNldF9mbGFnIHN0cl9pbmQgemVybzsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnLScgLT4gc2V0X2ZsYWcgc3RyX2luZCBtaW51czsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcrJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHBsdXM7ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyMnIC0+IHNldF9mbGFnIHN0cl9pbmQgaGFzaDsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcgJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHNwYWNlOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kXG4gICAgICAgICAgIXplcm8gIW1pbnVzICFwbHVzICFoYXNoICFzcGFjZSBpZ25cbiAgICAgIGVuZFxuICAgIGluXG4gICAgcmVhZF9mbGFncyBzdHJfaW5kXG5cbiAgKCogVHJ5IHRvIHJlYWQgYSBkaWdpdGFsIG9yIGEgJyonIHBhZGRpbmcuICopXG4gIGFuZCBwYXJzZV9wYWRkaW5nIDogdHlwZSBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgemVybyBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFkdHkgPSBtYXRjaCB6ZXJvLCBtaW51cyB3aXRoXG4gICAgICB8IGZhbHNlLCBmYWxzZSAtPiBSaWdodFxuICAgICAgfCBmYWxzZSwgdHJ1ZSAgLT4gTGVmdFxuICAgICAgfCAgdHJ1ZSwgZmFsc2UgLT4gWmVyb3NcbiAgICAgIHwgIHRydWUsIHRydWUgIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExlZnRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJy0nIFwiMFwiIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICBsZXQgbmV3X2luZCwgd2lkdGggPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIChMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIChBcmdfcGFkZGluZyBwYWR0eSlcbiAgICB8IF8gLT5cbiAgICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICAgIHwgTGVmdCAgLT5cbiAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICctJyBcInBhZGRpbmdcIjtcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgfCBaZXJvcyAtPlxuICAgICAgICAgKCogYSAnMCcgcGFkZGluZyBpbmRpY2F0aW9uIG5vdCBmb2xsb3dlZCBieSBhbnl0aGluZyBzaG91bGRcbiAgICAgICAgICAgYmUgaW50ZXJwcmV0ZWQgYXMgYSBSaWdodCBwYWRkaW5nIG9mIHdpZHRoIDAuIFRoaXMgaXMgdXNlZFxuICAgICAgICAgICBieSBzY2FubmluZyBjb252ZXJzaW9ucyAlMHMgYW5kICUwYyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICAoTGl0X3BhZGRpbmcgKFJpZ2h0LCAwKSlcbiAgICAgIHwgUmlnaHQgLT5cbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgZW5kXG5cbiAgKCogSXMgcHJlY2lzaW9uIGRlZmluZWQ/ICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wYWRkaW5nIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJy4nIC0+XG4gICAgICBwYXJzZV9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWRcbiAgICB8IHN5bWIgLT5cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgTm9fcHJlY2lzaW9uIHBhZCBzeW1iXG5cbiAgKCogUmVhZCB0aGUgZGlnaXRhbCBvciAnKicgcHJlY2lzaW9uLiAqKVxuICBhbmQgcGFyc2VfcHJlY2lzaW9uIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmQgPVxuICAgICAgbGV0IG5ld19pbmQsIHByZWMgPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIHByZWMpIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZFxuICAgIHwgKCcrJyB8ICctJykgYXMgc3ltYiB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPlxuICAgICAgKCogTGVnYWN5IG1vZGUgd291bGQgYWNjZXB0IGFuZCBpZ25vcmUgJysnIG9yICctJyBiZWZvcmUgdGhlXG4gICAgICAgICBpbnRlZ2VyIGRlc2NyaWJpbmcgdGhlIGRlc2lyZWQgcHJlY2lzaW9uOyBub3RlIHRoYXQgdGhpc1xuICAgICAgICAgY2Fubm90IGhhcHBlbiBmb3IgcGFkZGluZyB3aWR0aCwgYXMgJysnIGFuZCAnLScgYWxyZWFkeSBoYXZlXG4gICAgICAgICBhIHNlbWFudGljcyB0aGVyZS5cblxuICAgICAgICAgVGhhdCBzYWlkLCB0aGUgaWRlYSAoc3VwcG9ydGVkIGJ5IHRoaXMgdHdlYWspIHRoYXQgd2lkdGggYW5kXG4gICAgICAgICBwcmVjaXNpb24gbGl0ZXJhbHMgYXJlIFwiaW50ZWdlciBsaXRlcmFsc1wiIGluIHRoZSBPQ2FtbCBzZW5zZSBpc1xuICAgICAgICAgc3RpbGwgYmxhdGFudGx5IHdyb25nLCBhcyAxMjNfNDU2IG9yIDB4RkYgYXJlIHJlamVjdGVkLiAqKVxuICAgICAgcGFyc2VfbGl0ZXJhbCAobWludXMgfHwgc3ltYiA9ICctJykgKHN0cl9pbmQgKyAxKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiBwYWQgQXJnX3ByZWNpc2lvblxuICAgIHwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogbm90ZSB0aGF0IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IGlnbm9yZSAnLicgd2l0aG91dFxuICAgICAgICAgICBhIG51bWJlciAoYXMgaXQgZG9lcyBmb3IgcGFkZGluZyBpbmRpY2F0aW9ucyksIGJ1dFxuICAgICAgICAgICBpbnRlcnByZXRzIGl0IGFzICcuMCcgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gMClcbiAgICAgIGVsc2VcbiAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICcuJyBcInByZWNpc2lvblwiXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wcmVjaXNpb24gOiB0eXBlIHggeSB6IHQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9jb252ICh0eXBlIHUpICh0eXBlIHYpIChwYWRwcmVjIDogKHUsIHYpIHBhZGRpbmcpID1cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgcHJlYyBwYWRwcmVjIHN0ci5bc3RyX2luZF0gaW5cbiAgICAoKiBpbiBsZWdhY3kgbW9kZSwgc29tZSBmb3JtYXRzICglcyBhbmQgJVMpIGFjY2VwdCBhIHdlaXJkIG1peCBvZlxuICAgICAgIHBhZGRpbmcgYW5kIHByZWNpc2lvbiwgd2hpY2ggaXMgbWVyZ2VkIGFzIGEgc2luZ2xlIHBhZGRpbmdcbiAgICAgICBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGluICUuMTBzIHRoZSBwcmVjaXNpb24gaXMgaW1wbGljaXRseVxuICAgICAgIHVuZGVyc3Rvb2QgYXMgcGFkZGluZyAlMTBzLCBidXQgdGhlIGxlZnQtcGFkZGluZyBjb21wb25lbnQgbWF5XG4gICAgICAgYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhIGxlZnQgcGFkZGluZyBvciBhIG5lZ2F0aXZlIHByZWNpc2lvbjpcbiAgICAgICAlLS4zcyBhbmQgJS4tM3MgYXJlIGVxdWl2YWxlbnQgdG8gJS0zcyAqKVxuICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgfCBOb19wYWRkaW5nIC0+IChcbiAgICAgIG1hdGNoIG1pbnVzLCBwcmVjIHdpdGhcbiAgICAgICAgfCBfLCBOb19wcmVjaXNpb24gLT4gcGFyc2VfY29udiBOb19wYWRkaW5nXG4gICAgICAgIHwgZmFsc2UsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoUmlnaHQsIG4pKVxuICAgICAgICB8IHRydWUsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoTGVmdCwgbikpXG4gICAgICAgIHwgZmFsc2UsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgUmlnaHQpXG4gICAgICAgIHwgdHJ1ZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBMZWZ0KVxuICAgIClcbiAgICB8IHBhZCAtPiBwYXJzZV9jb252IHBhZFxuXG4gICgqIENhc2UgYW5hbHlzaXMgb24gY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2NvbnZlcnNpb24gOiB0eXBlIHggeSB6IHQgdSB2IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+ICh4LCB5KSBwYWRkaW5nIC0+XG4gICAgICAgICh6LCB0KSBwcmVjaXNpb24gLT4gKHUsIHYpIHBhZGRpbmcgLT4gY2hhciAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIHBhZHByZWMgc3ltYiAtPlxuICAgICgqIEZsYWdzIHVzZWQgdG8gY2hlY2sgb3B0aW9uIHVzYWdlcy9jb21wYXRpYmlsaXRpZXMuICopXG4gICAgbGV0IHBsdXNfdXNlZCAgPSByZWYgZmFsc2UgYW5kIGhhc2hfdXNlZCA9IHJlZiBmYWxzZVxuICAgIGFuZCBzcGFjZV91c2VkID0gcmVmIGZhbHNlIGFuZCBpZ25fdXNlZCAgID0gcmVmIGZhbHNlXG4gICAgYW5kIHBhZF91c2VkICAgPSByZWYgZmFsc2UgYW5kIHByZWNfdXNlZCAgPSByZWYgZmFsc2UgaW5cblxuICAgICgqIEFjY2VzcyB0byBvcHRpb25zLCB1cGRhdGUgZmxhZ3MuICopXG4gICAgbGV0IGdldF9wbHVzICAgICgpID0gcGx1c191c2VkICA6PSB0cnVlOyBwbHVzXG4gICAgYW5kIGdldF9oYXNoICAgKCkgPSBoYXNoX3VzZWQgOj0gdHJ1ZTsgaGFzaFxuICAgIGFuZCBnZXRfc3BhY2UgICAoKSA9IHNwYWNlX3VzZWQgOj0gdHJ1ZTsgc3BhY2VcbiAgICBhbmQgZ2V0X2lnbiAgICAgKCkgPSBpZ25fdXNlZCAgIDo9IHRydWU7IGlnblxuICAgIGFuZCBnZXRfcGFkICAgICAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkXG4gICAgYW5kIGdldF9wcmVjICAgICgpID0gcHJlY191c2VkICA6PSB0cnVlOyBwcmVjXG4gICAgYW5kIGdldF9wYWRwcmVjICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRwcmVjIGluXG5cbiAgICBsZXQgZ2V0X2ludF9wYWQgKCkgOiAoeCx5KSBwYWRkaW5nID1cbiAgICAgICgqICU1LjNkIGlzIGFjY2VwdGVkIGFuZCBtZWFuaW5nZnVsOiBwYWQgdG8gbGVuZ3RoIDUgd2l0aFxuICAgICAgICAgc3BhY2VzLCBidXQgZmlyc3QgcGFkIHdpdGggemVyb3MgdXB0byBsZW5ndGggMyAoMC1wYWRkaW5nXG4gICAgICAgICBpcyB0aGUgaW50ZXJwcmV0YXRpb24gb2YgXCJwcmVjaXNpb25cIiBmb3IgaW50ZWdlciBmb3JtYXRzKS5cblxuICAgICAgICAgJTA1LjNkIGlzIHJlZHVuZGFudDogcGFkIHRvIGxlbmd0aCA1ICp3aXRoIHplcm9zKiwgYnV0XG4gICAgICAgICBmaXJzdCBwYWQgd2l0aCB6ZXJvcy4uLiBUbyBhZGQgaW5zdWx0IHRvIHRoZSBpbmp1cnksIHRoZVxuICAgICAgICAgbGVnYWN5IGltcGxlbWVudGF0aW9uIGlnbm9yZXMgdGhlIDAtcGFkZGluZyBpbmRpY2F0aW9uIGFuZFxuICAgICAgICAgZG9lcyB0aGUgNSBwYWRkaW5nIHdpdGggc3BhY2VzIGluc3RlYWQuIFdlIHJldXNlIHRoaXNcbiAgICAgICAgIGludGVycHJldGF0aW9uIGZvciBjb21wYXRpYmlsaXR5LCBidXQgc3RhdGljYWxseSByZWplY3QgdGhpc1xuICAgICAgICAgZm9ybWF0IHdoZW4gdGhlIGxlZ2FjeSBtb2RlIGlzIGRpc2FibGVkLCB0byBwcm90ZWN0IHN0cmljdFxuICAgICAgICAgdXNlcnMgZnJvbSB0aGlzIGNvcm5lciBjYXNlLiAqKVxuICAgICAgIG1hdGNoIGdldF9wYWQgKCksIGdldF9wcmVjICgpIHdpdGhcbiAgICAgICAgIHwgcGFkLCBOb19wcmVjaXNpb24gLT4gcGFkXG4gICAgICAgICB8IE5vX3BhZGRpbmcsIF8gICAgIC0+IE5vX3BhZGRpbmdcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCBuKSwgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIG4pXG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIFplcm9zLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IExpdF9wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZFxuICAgICAgICAgfCBBcmdfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWQgaW5cblxuICAgICgqIENoZWNrIHRoYXQgcGFkdHkgPD4gWmVyb3MuICopXG4gICAgbGV0IGNoZWNrX25vXzAgc3ltYiAodHlwZSBhIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgOiAoYSxiKSBwYWRkaW5nID1cbiAgICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nICgoTGVmdCB8IFJpZ2h0KSwgXykgLT4gcGFkXG4gICAgICB8IEFyZ19wYWRkaW5nIChMZWZ0IHwgUmlnaHQpIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgICB8IEFyZ19wYWRkaW5nIFplcm9zIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICBpblxuXG4gICAgKCogR2V0IHBhZGRpbmcgYXMgYSBwYWRfb3B0aW9uIChzZWUgXCIlX1wiLCBcIiV7XCIsIFwiJShcIiBhbmQgXCIlW1wiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBvcHRfb2ZfcGFkIGMgKHR5cGUgYSkgKHR5cGUgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA9IG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gTm9uZVxuICAgICAgfCBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKSAtPiBTb21lIHdpZHRoXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicwJ1wiXG4gICAgICB8IExpdF9wYWRkaW5nIChMZWZ0LCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJy0nXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicqJ1wiXG4gICAgaW5cbiAgICBsZXQgZ2V0X3BhZF9vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZCAoKSkgaW5cbiAgICBsZXQgZ2V0X3BhZHByZWNfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWRwcmVjICgpKSBpblxuXG4gICAgKCogR2V0IHByZWNpc2lvbiBhcyBhIHByZWNfb3B0aW9uIChzZWUgXCIlX2ZcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgZ2V0X3ByZWNfb3B0ICgpID0gbWF0Y2ggZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgfCBOb19wcmVjaXNpb24gICAgICAgLT4gTm9uZVxuICAgICAgfCBMaXRfcHJlY2lzaW9uIG5kZWMgLT4gU29tZSBuZGVjXG4gICAgICB8IEFyZ19wcmVjaXNpb24gICAgICAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJyonXCJcbiAgICBpblxuXG4gICAgbGV0IGZtdF9yZXN1bHQgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICcsJyAtPlxuICAgICAgcGFyc2Ugc3RyX2luZCBlbmRfaW5kXG4gICAgfCAnYycgLT5cbiAgICAgIGxldCBjaGFyX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICVjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChDaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBzY2FuX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICUwYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9zY2FuX25leHRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBiZWdpbiBtYXRjaCBnZXRfcGFkX29wdCAnYycgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIDAgLT4gc2Nhbl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIF9uIC0+XG4gICAgICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3JcbiAgICAgICAgICAgdGhlbiBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kXG4gICAgICAgICAgIGVsc2UgKCogbGVnYWN5IGlnbm9yZXMgJWMgd2lkdGhzICopIGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICBlbmRcbiAgICB8ICdDJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NhbWxfY2hhcixmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKENhbWxfY2hhciBmbXRfcmVzdClcbiAgICB8ICdzJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKFN0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdTJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9jYW1sX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT5cbiAgICAgIGxldCBpY29udiA9IGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdOJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gVG9rZW5fY291bnRlciBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgfCAnbicgfCAnTCcgd2hlbiBzdHJfaW5kPWVuZF9pbmQgfHwgbm90IChpc19pbnRfYmFzZSBzdHIuW3N0cl9pbmRdKSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gY291bnRlcl9vZl9jaGFyIHN5bWIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQzMiAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDMyIChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnbicgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSlcbiAgICAgICAgICAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ0wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQ2NCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDY0IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnZicgfCAnZScgfCAnRScgfCAnZycgfCAnRycgfCAnRicgfCAnaCcgfCAnSCcgLT5cbiAgICAgIGxldCBmY29udiA9XG4gICAgICAgIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmRcbiAgICAgICAgICAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZmxvYXQgKGdldF9wYWRfb3B0ICdfJywgZ2V0X3ByZWNfb3B0ICgpKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChGbG9hdCAoZmNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2InIHwgJ0InIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Jvb2wgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEJvb2wgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnYScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChBbHBoYSBmbXRfcmVzdClcbiAgICB8ICd0JyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKFRoZXRhIGZtdF9yZXN0KVxuICAgIHwgJ3InIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKFJlYWRlciBmbXRfcmVzdClcbiAgICB8ICchJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZsdXNoIGZtdF9yZXN0KVxuICAgIHwgKCclJyB8ICdAJykgYXMgYyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoYywgZm10X3Jlc3QpKVxuICAgIHwgJ3snIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnfScgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ3snLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICcoJyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJyknIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnKCcsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJ1snIC0+XG4gICAgICBsZXQgbmV4dF9pbmQsIGNoYXJfc2V0ID0gcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ18nLCBjaGFyX3NldCkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnWycsIGNoYXJfc2V0LCBmbXRfcmVzdCkpXG4gICAgfCAnLScgfCAnKycgfCAnIycgfCAnICcgfCAnXycgLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGZsYWcgJUMgaXMgb25seSBhbGxvd2VkIGFmdGVyIHRoZSAnJSUnLCBiZWZvcmUgcGFkZGluZyBhbmQgcHJlY2lzaW9uXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgc3ltYlxuICAgIHwgXyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgaW52YWxpZCBjb252ZXJzaW9uIFxcXCIlJSVjXFxcIlwiIHN0ciAoc3RyX2luZCAtIDEpIHN5bWJcbiAgICBpblxuICAgICgqIENoZWNrIGZvciB1bnVzZWQgb3B0aW9ucywgYW5kIHJlamVjdCB0aGVtIGFzIGluY29tcGF0aWJsZS5cblxuICAgICAgIFN1Y2ggY2hlY2tzIG5lZWQgdG8gYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsIGFzIHRoZSBsZWdhY3lcbiAgICAgICBwYXJzZXIgc2lsZW50bHkgaWdub3JlZCBpbmNvbXBhdGlibGUgZmxhZ3MuICopXG4gICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuIGJlZ2luXG4gICAgaWYgbm90ICFwbHVzX3VzZWQgJiYgcGx1cyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiO1xuICAgIGlmIG5vdCAhaGFzaF91c2VkICYmIGhhc2ggdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIjtcbiAgICBpZiBub3QgIXNwYWNlX3VzZWQgJiYgc3BhY2UgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIjtcbiAgICBpZiBub3QgIXBhZF91c2VkICAmJiBQYWRkaW5nX0VCQiBwYWQgPD4gUGFkZGluZ19FQkIgTm9fcGFkZGluZyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcImBwYWRkaW5nJ1wiO1xuICAgIGlmIG5vdCAhcHJlY191c2VkICYmIFByZWNpc2lvbl9FQkIgcHJlYyA8PiBQcmVjaXNpb25fRUJCIE5vX3ByZWNpc2lvbiB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgKGlmIGlnbiB0aGVuICdfJyBlbHNlIHN5bWIpXG4gICAgICAgIFwiYHByZWNpc2lvbidcIjtcbiAgICBpZiBpZ24gJiYgcGx1cyB0aGVuIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKydcIjtcbiAgICBlbmQ7XG4gICAgKCogdGhpcyBsYXN0IHRlc3QgbXVzdCBub3QgYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsXG4gICAgICAgYXMgaWdub3JpbmcgaXQgd291bGQgdHlwaWNhbGx5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0eXBpbmdcbiAgICAgICB0aGFuIHdoYXQgdGhlIGxlZ2FjeSBwYXJzZXIgdXNlZCAqKVxuICAgIGlmIG5vdCAhaWduX3VzZWQgJiYgaWduIHRoZW5cbiAgICAgIGJlZ2luIG1hdGNoIHN5bWIgd2l0aFxuICAgICAgICAoKiBhcmd1bWVudC1sZXNzIGZvcm1hdHMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIGluIGxlZ2FjeSBtb2RlICopXG4gICAgICAgIHwgKCdAJyB8ICclJyB8ICchJyB8ICcsJykgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gKClcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInXydcIlxuICAgICAgZW5kO1xuICAgIGZtdF9yZXN1bHRcblxuICAoKiBQYXJzZSBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIChhZnRlciAnQCcpLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgRW5kX29mX2Zvcm1hdCkpXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdbJyAtPlxuICAgICAgICBwYXJzZV90YWcgZmFsc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICddJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfYm94LCBmbXRfcmVzdCkpXG4gICAgICB8ICd7JyAtPlxuICAgICAgICBwYXJzZV90YWcgdHJ1ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ30nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV90YWcsIGZtdF9yZXN0KSlcbiAgICAgIHwgJywnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJALFwiLCAwLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnICcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAgXCIsIDEsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICc7JyAtPlxuICAgICAgICBwYXJzZV9nb29kX2JyZWFrIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnPycgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZGbHVzaCwgZm10X3Jlc3QpKVxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRm9yY2VfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnLicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZsdXNoX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIHBhcnNlX21hZ2ljX3NpemUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9hdCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgd2hlbiBzdHJfaW5kICsgMSA8IGVuZF9pbmQgJiYgc3RyLltzdHJfaW5kICsgMV0gPSAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfcGVyY2VudCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIGZtdF9yZXN0KSlcbiAgICAgIHwgYyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyBjLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDxuYW1lPiBhZnRlciBcIkB7XCIgb3IgXCJAW1wiLiAqKVxuICBhbmQgcGFyc2VfdGFnIDogdHlwZSBlIGYgLiBib29sIC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gaXNfb3Blbl90YWcgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgdHJ5XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgbGV0IGluZCA9IFN0cmluZy5pbmRleF9mcm9tIHN0ciAoc3RyX2luZCArIDEpICc+JyBpblxuICAgICAgICBpZiBpbmQgPj0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN1Yl9zdHIgPSBTdHJpbmcuc3ViIHN0ciBzdHJfaW5kIChpbmQgLSBzdHJfaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCAoaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKHN1Yl9mbXQsIHN1Yl9zdHIpIGluXG4gICAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoRW5kX29mX2Zvcm1hdCwgXCJcIikgaW5cbiAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPHdpZHRoIG9mZnNldD4gYWZ0ZXIgXCJAO1wiLiAqKVxuICBhbmQgcGFyc2VfZ29vZF9icmVhayA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBsZXQgbmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0ID1cbiAgICAgIHRyeVxuICAgICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB8fCBzdHIuW3N0cl9pbmRdIDw+ICc8JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IChcbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCB3aWR0aCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8zXSB3aXRoXG4gICAgICAgICAgICAgIHwgJz4nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF8zLXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzMgKyAxLCBCcmVhayAocywgd2lkdGgsIDApXG4gICAgICAgICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzQsIG9mZnNldCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8zIGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF81ID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfNCBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzVdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzUtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfNSArIDEsIEJyZWFrIChzLCB3aWR0aCwgb2Zmc2V0KVxuICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgIClcbiAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgc3RyX2luZCwgQnJlYWsgKFwiQDtcIiwgMSwgMClcbiAgICBpblxuICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIHRoZSBzaXplIGluIGEgPG4+LiAqKVxuICBhbmQgcGFyc2VfbWFnaWNfc2l6ZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBtYXRjaFxuICAgICAgdHJ5XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHNpemUgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF8zXSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZCAtIDIpIChzdHJfaW5kXzMgLSBzdHJfaW5kICsgMykgaW5cbiAgICAgICAgICBTb21lIChzdHJfaW5kXzMgKyAxLCBNYWdpY19zaXplIChzLCBzaXplKSlcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIE5vbmVcbiAgICB3aXRoXG4gICAgfCBTb21lIChuZXh0X2luZCwgZm9ybWF0dGluZ19saXQpIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuICAgIHwgTm9uZSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljICc8JywgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIGFuZCBjb25zdHJ1Y3QgYSBjaGFyIHNldC4gKilcbiAgYW5kIHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcblxuICAgIGxldCBjaGFyX3NldCA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICAgIGxldCBhZGRfY2hhciBjID1cbiAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjO1xuICAgIGluXG4gICAgbGV0IGFkZF9yYW5nZSBjIGMnID1cbiAgICAgIGZvciBpID0gaW50X29mX2NoYXIgYyB0byBpbnRfb2ZfY2hhciBjJyBkb1xuICAgICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgKGNoYXJfb2ZfaW50IGkpO1xuICAgICAgZG9uZTtcbiAgICBpblxuXG4gICAgbGV0IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZCA9XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6ICclJScgYWxvbmUgaXMgbm90IGFjY2VwdGVkIGluIGNoYXJhY3RlciBzZXRzLCBcXFxuICAgICAgICAgdXNlICUlJSUgaW5zdGVhZCBhdCBwb3NpdGlvbiAlZC5cIiBzdHIgc3RyX2luZFxuICAgIGluXG5cbiAgICAoKiBQYXJzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgY2hhciBzZXQuICopXG4gICAgbGV0IHJlYyBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGxldCBjID0gc3RyLltzdHJfaW5kXSBpblxuICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogUGFyc2UgdGhlIGNvbnRlbnQgb2YgYSBjaGFyIHNldCB1bnRpbCB0aGUgZmlyc3QgJ10nLiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9jb250ZW50IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFRlc3QgZm9yIHJhbmdlIGluIGNoYXIgc2V0LiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyB3aGVuIGMgPSAnJScgLT5cbiAgICAgICAgYWRkX2NoYXIgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGlmIGMgPSAnJScgdGhlbiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQ7XG4gICAgICAgICgqIG5vdGUgdGhhdCAnQCcgYWxvbmUgaXMgYWNjZXB0ZWQsIGFzIGRvbmUgYnkgdGhlIGxlZ2FjeVxuICAgICAgICAgICBpbXBsZW1lbnRhdGlvbjsgdGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IHJlcXVpcmVzICVAXG4gICAgICAgICAgIHNvIHdlIGNvdWxkIHdhcm4gb24gdGhhdCAqKVxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjJ1xuXG4gICAgKCogTWFuYWdlIHJhbmdlIGluIGNoYXIgc2V0IChleGNlcHQgaWYgdGhlICctJyB0aGUgbGFzdCBjaGFyIGJlZm9yZSAnXScpICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyAtPlxuICAgICAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMikgZW5kX2luZFxuICAgICAgICAgIHwgXyAtPiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmRcbiAgICAgICAgZW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgIGluXG4gICAgbGV0IHN0cl9pbmQsIHJldmVyc2UgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgICB8ICdeJyAtPiBzdHJfaW5kICsgMSwgdHJ1ZVxuICAgICAgICB8IF8gLT4gc3RyX2luZCwgZmFsc2UgaW5cbiAgICBsZXQgbmV4dF9pbmQgPSBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICBsZXQgY2hhcl9zZXQgPSBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgaW5cbiAgICBuZXh0X2luZCwgKGlmIHJldmVyc2UgdGhlbiByZXZfY2hhcl9zZXQgY2hhcl9zZXQgZWxzZSBjaGFyX3NldClcblxuICAoKiBDb25zdW1lIGFsbCBuZXh0IHNwYWNlcywgcmFpc2UgYW4gRmFpbHVyZSBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGlmIHN0ci5bc3RyX2luZF0gPSAnICcgdGhlbiBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGVsc2Ugc3RyX2luZFxuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlIGlmIGVuZF9pbmQgaXNcbiAgICAgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCBhY2MgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gYWNjICogMTAgKyAoaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJykgaW5cbiAgICAgIGlmIG5ld19hY2MgPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogaW50ZWdlciAlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxpbWl0ICVkXCJcbiAgICAgICAgICBzdHIgbmV3X2FjYyBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG5ld19hY2NcbiAgICB8IF8gLT4gc3RyX2luZCwgYWNjXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmVcbiAgICAgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfaW50ZWdlciBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwXG4gICAgfCAnLScgLT4gKFxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgICAgbGV0IG5leHRfaW5kLCBuID0gcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIDAgaW5cbiAgICAgICAgbmV4dF9pbmQsIC1uXG4gICAgICB8IGMgLT5cbiAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJkaWdpdFwiIGNcbiAgICApXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIEFkZCBhIGxpdGVyYWwgdG8gYSBmb3JtYXQgZnJvbSBhIGxpdGVyYWwgY2hhcmFjdGVyIHN1Yi1zZXF1ZW5jZS4gKilcbiAgYW5kIGFkZF9saXRlcmFsIDogdHlwZSBhIGQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gKGEsIF8sIF8sIGQsIGUsIGYpIGZtdCAtPlxuICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZm10IC0+IG1hdGNoIHN0cl9pbmQgLSBsaXRfc3RhcnQgd2l0aFxuICAgIHwgMCAgICAtPiBGbXRfRUJCIGZtdFxuICAgIHwgMSAgICAtPiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKHN0ci5bbGl0X3N0YXJ0XSwgZm10KSlcbiAgICB8IHNpemUgLT4gRm10X0VCQiAoU3RyaW5nX2xpdGVyYWwgKFN0cmluZy5zdWIgc3RyIGxpdF9zdGFydCBzaXplLCBmbXQpKVxuXG4gICgqIFNlYXJjaCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXRcbiAgICAgKGkuZS4gdGhlIGNvcnJlc3BvbmRpbmcgXCIlfVwiIG9yIFwiJSlcIikgKilcbiAgYW5kIHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IHVuY2xvc2VkIHN1Yi1mb3JtYXQsIFxcXG4gICAgICAgICBleHBlY3RlZCBcXFwiJSUlY1xcXCIgYXQgY2hhcmFjdGVyIG51bWJlciAlZFwiIHN0ciBjIGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnJScgLT5cbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgaWYgc3RyLltzdHJfaW5kICsgMV0gPSBjIHRoZW4gKCogRW5kIG9mIGZvcm1hdCBmb3VuZCAqKSBzdHJfaW5kIGVsc2VcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICB8ICdfJyAtPlxuICAgICAgICAgICgqIFNlYXJjaCBmb3IgXCIlXyhcIiBvciBcIiVfe1wiLiAqKVxuICAgICAgICAgIGlmIHN0cl9pbmQgKyAyID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDJdIHdpdGhcbiAgICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCBjXG4gICAgICAgICAgZW5kXG4gICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgKCogJXsuLi4lfSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgKCogJSguLi4lKSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJ30nIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICUoLi4uJX0uICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJyknXCIgJ30nXG4gICAgICAgIHwgJyknIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICV7Li4uJSkuICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJ30nXCIgJyknXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIGVuZFxuICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICgqIENoZWNrIGlmIHN5bWIgaXMgYSB2YWxpZCBpbnQgY29udmVyc2lvbiBhZnRlciBcIiVsXCIsIFwiJW5cIiBvciBcIiVMXCIgKilcbiAgYW5kIGlzX2ludF9iYXNlIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPiB0cnVlXG4gICAgfCBfIC0+IGZhbHNlXG5cbiAgKCogQ29udmVydCBhIGNoYXIgKGwsIG4gb3IgTCkgdG8gaXRzIGFzc29jaWF0ZWQgY291bnRlci4gKilcbiAgYW5kIGNvdW50ZXJfb2ZfY2hhciBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnbCcgLT4gTGluZV9jb3VudGVyICB8ICduJyAtPiBDaGFyX2NvdW50ZXJcbiAgICB8ICdMJyAtPiBUb2tlbl9jb3VudGVyIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBpbnRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBtYXRjaCBwbHVzLCBoYXNoLCBzcGFjZSwgc3ltYiB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X2QgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9pXG4gICAgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnZCcgLT4gSW50X3NkIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2knIC0+IEludF9zaVxuICAgIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9wZCB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfcGlcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd4JyAtPiBJbnRfeCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnWCcgLT4gSW50X1hcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd4JyAtPiBJbnRfQ3ggfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnWCcgLT4gSW50X0NYXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnbycgLT4gSW50X29cbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdvJyAtPiBJbnRfQ29cbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd1JyAtPiBJbnRfdVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2QnIC0+IEludF9DZFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2knIC0+IEludF9DaVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3UnIC0+IEludF9DdVxuICAgIHwgXywgdHJ1ZSwgXywgJ3gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DeFxuICAgIHwgXywgdHJ1ZSwgXywgJ1gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DWFxuICAgIHwgXywgdHJ1ZSwgXywgJ28nIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9Db1xuICAgIHwgXywgdHJ1ZSwgXywgKCdkJyB8ICdpJyB8ICd1JykgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGZhbHNlIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIlxuICAgIHwgdHJ1ZSwgXywgdHJ1ZSwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgdHJ1ZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCJcbiAgICB8IHRydWUsIF8sIGZhbHNlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgZmFsc2UgaGFzaCBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCBmYWxzZSwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzcGFjZSwgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgZmxvYXRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIGxldCBmbGFnID0gbWF0Y2ggcGx1cywgc3BhY2Ugd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfXG4gICAgfCBmYWxzZSwgIHRydWUgLT4gRmxvYXRfZmxhZ19zXG4gICAgfCAgdHJ1ZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19wXG4gICAgfCAgdHJ1ZSwgIHRydWUgLT5cbiAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBGbG9hdF9mbGFnX3BcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiIGluXG4gICAgbGV0IGtpbmQgPSBtYXRjaCBoYXNoLCBzeW1iIHdpdGhcbiAgICB8IF8sICdmJyAtPiBGbG9hdF9mXG4gICAgfCBfLCAnZScgLT4gRmxvYXRfZVxuICAgIHwgXywgJ0UnIC0+IEZsb2F0X0VcbiAgICB8IF8sICdnJyAtPiBGbG9hdF9nXG4gICAgfCBfLCAnRycgLT4gRmxvYXRfR1xuICAgIHwgXywgJ2gnIC0+IEZsb2F0X2hcbiAgICB8IF8sICdIJyAtPiBGbG9hdF9IXG4gICAgfCBmYWxzZSwgJ0YnIC0+IEZsb2F0X0ZcbiAgICB8IHRydWUsICdGJyAtPiBGbG9hdF9DRlxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2UgaW5cbiAgICBmbGFnLCBraW5kXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGluY29tcGF0aWJsZSBvcHRpb25zLiopXG4gIGFuZCBpbmNvbXBhdGlibGVfZmxhZyA6IHR5cGUgYSAuIGludCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmcgLT4gYSA9XG4gICAgZnVuIHBjdF9pbmQgc3RyX2luZCBzeW1iIG9wdGlvbiAtPlxuICAgICAgbGV0IHN1YmZtdCA9IFN0cmluZy5zdWIgc3RyIHBjdF9pbmQgKHN0cl9pbmQgLSBwY3RfaW5kKSBpblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJyVjJyBpbiBzdWItZm9ybWF0ICVTXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgb3B0aW9uIHN5bWIgc3ViZm10XG5cbiAgaW4gcGFyc2UgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAoKiBHdWFyZGVkIHN0cmluZyB0byBmb3JtYXQgY29udmVyc2lvbnMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2ZtdHR5IHN0ciBmbXR0eSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgZm10dHksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCJcbiAgICAgIHN0ciAoc3RyaW5nX29mX2ZtdHR5IGZtdHR5KVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGNvbXBhdGlibGUgd2l0aCBhbiBvdGhlciBmb3JtYXQuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCBzdHIgKEZvcm1hdCAoZm10Jywgc3RyJykpID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCAoZm10dHlfb2ZfZm10IGZtdCcpLCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiIHN0ciBzdHInXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIFhhdmllciBMZXJveSBhbmQgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG5sZXQga2ZwcmludGYgayBvIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBvIGFjYzsgayBvKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGticHJpbnRmIGsgYiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IGJ1ZnB1dF9hY2MgYiBhY2M7IGsgYikgRW5kX29mX2FjYyBmbXRcbmxldCBpa2ZwcmludGYgayBvYyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIG9jIGZtdFxubGV0IGlrYnByaW50ZiA9IGlrZnByaW50ZlxuXG5sZXQgZnByaW50ZiBvYyBmbXQgPSBrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgYnByaW50ZiBiIGZtdCA9IGticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IGlmcHJpbnRmIG9jIGZtdCA9IGlrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgaWJwcmludGYgYiBmbXQgPSBpa2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3Rkb3V0IGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBzdGRlcnIgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGsnIGFjYyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBzdHJwdXRfYWNjIGJ1ZiBhY2M7XG4gICAgayAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXRcblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgKGZ1biBzIC0+IHMpIGZtdFxuXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG4iLCIoKiBDb252X2Vycm9yOiBNb2R1bGUgZm9yIEhhbmRsaW5nIEVycm9ycyBkdXJpbmcgQXV0b21hdGVkIFlvanNvblxuICAgQ29udmVyc2lvbnMgKilcblxub3BlbiEgU3RkTGFiZWxzXG5vcGVuIFlvanNvbl9jb252XG5cbmxldCBzcHJpbnRmID0gUHJpbnRmLnNwcmludGZcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgdHVwbGVzICopXG5cbmxldCB0dXBsZV9vZl9zaXplX25fZXhwZWN0ZWQgbG9jIG4geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiB0dXBsZSBvZiBzaXplICVkIGV4cGVjdGVkXCIgbG9jIG4pIHlvanNvblxuOztcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgc3VtIHR5cGVzICopXG5cbmxldCBzdGFnX25vX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGlzIGNvbnN0cnVjdG9yIGRvZXMgbm90IHRha2UgYXJndW1lbnRzXCIpIHlvanNvblxuOztcblxubGV0IHN0YWdfaW5jb3JyZWN0X25fYXJncyBsb2MgdGFnIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIHNwcmludGYgXCIlc19vZl95b2pzb246IHN1bSB0YWcgJVMgaGFzIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzXCIgbG9jIHRhZ1xuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHN0YWdfdGFrZXNfYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHRoaXMgY29uc3RydWN0b3IgcmVxdWlyZXMgYXJndW1lbnRzXCIpIHlvanNvblxuOztcblxubGV0IG5lc3RlZF9saXN0X2ludmFsaWRfc3VtIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogZXhwZWN0ZWQgYSB2YXJpYW50IHR5cGUsIHNhdyBhIG5lc3RlZCBsaXN0XCIpIHlvanNvblxuOztcblxubGV0IGVtcHR5X2xpc3RfaW52YWxpZF9zdW0gbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBleHBlY3RlZCBhIHZhcmlhbnQgdHlwZSwgc2F3IGFuIGVtcHR5IGxpc3RcIikgeW9qc29uXG47O1xuXG5sZXQgdW5leHBlY3RlZF9zdGFnIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdW5leHBlY3RlZCB2YXJpYW50IGNvbnN0cnVjdG9yXCIpIHlvanNvblxuOztcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgcmVjb3JkcyAqKVxuXG5sZXQgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdCB+bG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgbGV0IGZsZF9uYW1lc19zdHIgPSBTdHJpbmcuY29uY2F0IChMaXN0LnJldiByZXZfZmxkX25hbWVzKSB+c2VwOlwiIFwiIGluXG4gIGxldCBtc2cgPSBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiAlczogJXNcIiBsb2Mgd2hhdCBmbGRfbmFtZXNfc3RyIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX2R1cGxpY2F0ZV9maWVsZHMgbG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdDpcImR1cGxpY2F0ZSBmaWVsZHNcIiB+bG9jIHJldl9mbGRfbmFtZXMgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX2V4dHJhX2ZpZWxkcyBsb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb24gPVxuICByZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIH53aGF0OlwiZXh0cmEgZmllbGRzXCIgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvblxuOztcblxubGV0IHJlYyByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIGZpZWxkcyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gU3RyaW5nLmNvbmNhdCAoTGlzdC5yZXYgZmllbGRzKSB+c2VwOlwiIFwiXG4gIHwgKHRydWUsIGZpZWxkKSA6OiByZXN0IC0+IHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgKGZpZWxkIDo6IGZpZWxkcykgcmVzdFxuICB8IF8gOjogcmVzdCAtPiByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIGZpZWxkcyByZXN0XG47O1xuXG5sZXQgcmVjb3JkX3VuZGVmaW5lZF9lbGVtZW50cyBsb2MgeW9qc29uIGxzdCA9XG4gIGxldCB1bmRlZmluZWQgPSByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIFtdIGxzdCBpblxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiB0aGUgZm9sbG93aW5nIHJlY29yZCBlbGVtZW50cyB3ZXJlIHVuZGVmaW5lZDogJXNcIiBsb2MgdW5kZWZpbmVkXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX2xpc3RfaW5zdGVhZF9hdG9tIGxvYyB5b2pzb24gPVxuICBsZXQgbXNnID0gbG9jIF4gXCJfb2ZfeW9qc29uOiBsaXN0IGluc3RlYWQgb2YgYXRvbSBmb3IgcmVjb3JkIGV4cGVjdGVkXCIgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfcG9seV9maWVsZF92YWx1ZSBsb2MgeW9qc29uID1cbiAgbGV0IG1zZyA9XG4gICAgbG9jXG4gICAgXiBcIl9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IHZhbHVlcyBvZiB0eXBlcyByZXN1bHRpbmcgZnJvbSBwb2x5bW9ycGhpYyByZWNvcmQgXFxcbiAgICAgICBmaWVsZHNcIlxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxuKCogRXJyb3JzIGNvbmNlcm5pbmcgcG9seW1vcnBoaWMgdmFyaWFudHMgKilcblxuZXhjZXB0aW9uIE5vX3ZhcmlhbnRfbWF0Y2hcblxubGV0IG5vX3ZhcmlhbnRfbWF0Y2ggKCkgPSByYWlzZSBOb192YXJpYW50X21hdGNoXG5cbmxldCBub19tYXRjaGluZ192YXJpYW50X2ZvdW5kIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogbm8gbWF0Y2hpbmcgdmFyaWFudCBmb3VuZFwiKSB5b2pzb25cbjs7XG5cbmxldCBwdGFnX25vX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IGRvZXMgbm90IHRha2UgYXJndW1lbnRzXCIpIHlvanNvblxuOztcblxubGV0IHB0YWdfaW5jb3JyZWN0X25fYXJncyBsb2MgY25zdHIgeW9qc29uID1cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZlxuICAgICAgXCIlc19vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgdGFnICVTIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c1wiXG4gICAgICBsb2NcbiAgICAgIGNuc3RyXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcHRhZ190YWtlc19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCB0YWcgdGFrZXMgYW4gYXJndW1lbnRcIikgeW9qc29uXG47O1xuXG5sZXQgbmVzdGVkX2xpc3RfaW52YWxpZF9wb2x5X3ZhciBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yXG4gICAgKGxvYyBeIFwiX29mX3lvanNvbjogYSBuZXN0ZWQgbGlzdCBpcyBhbiBpbnZhbGlkIHBvbHltb3JwaGljIHZhcmlhbnRcIilcbiAgICB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV9saXN0X2ludmFsaWRfcG9seV92YXIgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvclxuICAgIChsb2MgXiBcIl9vZl95b2pzb246IHRoZSBlbXB0eSBsaXN0IGlzIGFuIGludmFsaWQgcG9seW1vcnBoaWMgdmFyaWFudFwiKVxuICAgIHlvanNvblxuOztcblxubGV0IGVtcHR5X3R5cGUgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0cnlpbmcgdG8gY29udmVydCBhbiBlbXB0eSB0eXBlXCIpIHlvanNvblxuOztcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXh0ZXJuYWwgaWQgOiAnYSAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmxldCBjb25zdCBjIF8gPSBjXG5sZXQgZmxpcCBmIHggeSA9IGYgeSB4XG5sZXQgbmVnYXRlIHAgdiA9IG5vdCAocCB2KVxuXG5leGNlcHRpb24gRmluYWxseV9yYWlzZWQgb2YgZXhuXG5cbmxldCAoKSA9IFByaW50ZXhjLnJlZ2lzdGVyX3ByaW50ZXIgQEAgZnVuY3Rpb25cbnwgRmluYWxseV9yYWlzZWQgZXhuIC0+IFNvbWUgKFwiRnVuLkZpbmFsbHlfcmFpc2VkOiBcIiBeIFByaW50ZXhjLnRvX3N0cmluZyBleG4pXG58IF8gLT4gTm9uZVxuXG5sZXQgcHJvdGVjdCB+KGZpbmFsbHkgOiB1bml0IC0+IHVuaXQpIHdvcmsgPVxuICBsZXQgZmluYWxseV9ub19leG4gKCkgPVxuICAgIHRyeSBmaW5hbGx5ICgpIHdpdGggZSAtPlxuICAgICAgbGV0IGJ0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIFByaW50ZXhjLnJhaXNlX3dpdGhfYmFja3RyYWNlIChGaW5hbGx5X3JhaXNlZCBlKSBidFxuICBpblxuICBtYXRjaCB3b3JrICgpIHdpdGhcbiAgfCByZXN1bHQgLT4gZmluYWxseV9ub19leG4gKCkgOyByZXN1bHRcbiAgfCBleGNlcHRpb24gd29ya19leG4gLT5cbiAgICAgIGxldCB3b3JrX2J0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIGZpbmFsbHlfbm9fZXhuICgpIDtcbiAgICAgIFByaW50ZXhjLnJhaXNlX3dpdGhfYmFja3RyYWNlIHdvcmtfZXhuIHdvcmtfYnRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTWVzc2FnZSBkaWdlc3QgKE1ENSkgKilcblxudHlwZSB0ID0gc3RyaW5nXG5cbmxldCBjb21wYXJlID0gU3RyaW5nLmNvbXBhcmVcbmxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG5leHRlcm5hbCB1bnNhZmVfc3RyaW5nOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9zdHJpbmdcIlxuZXh0ZXJuYWwgY2hhbm5lbDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfY2hhblwiXG5cbmxldCBzdHJpbmcgc3RyID1cbiAgdW5zYWZlX3N0cmluZyBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbmxldCBieXRlcyBiID0gc3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpXG5cbmxldCBzdWJzdHJpbmcgc3RyIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gU3RyaW5nLmxlbmd0aCBzdHIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9zdHJpbmcgc3RyIG9mcyBsZW5cblxubGV0IHN1YmJ5dGVzIGIgb2ZzIGxlbiA9IHN1YnN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKSBvZnMgbGVuXG5cbmxldCBmaWxlIGZpbGVuYW1lID1cbiAgbGV0IGljID0gb3Blbl9pbl9iaW4gZmlsZW5hbWUgaW5cbiAgbWF0Y2ggY2hhbm5lbCBpYyAoLTEpIHdpdGhcbiAgICB8IGQgLT4gY2xvc2VfaW4gaWM7IGRcbiAgICB8IGV4Y2VwdGlvbiBlIC0+IGNsb3NlX2luIGljOyByYWlzZSBlXG5cbmxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPVxuICBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbmxldCBpbnB1dCBjaGFuID0gcmVhbGx5X2lucHV0X3N0cmluZyBjaGFuIDE2XG5cbmxldCBjaGFyX2hleCBuID1cbiAgQ2hhci51bnNhZmVfY2hyIChuICsgaWYgbiA8IDEwIHRoZW4gQ2hhci5jb2RlICcwJyBlbHNlIChDaGFyLmNvZGUgJ2EnIC0gMTApKVxuXG5sZXQgdG9faGV4IGQgPVxuICBpZiBTdHJpbmcubGVuZ3RoIGQgPD4gMTYgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC50b19oZXhcIjtcbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAzMiBpblxuICBmb3IgaSA9IDAgdG8gMTUgZG9cbiAgICBsZXQgeCA9IENoYXIuY29kZSBkLltpXSBpblxuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIpIChjaGFyX2hleCAoeCBsc3IgNCkpO1xuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIrMSkgKGNoYXJfaGV4ICh4IGxhbmQgMHgwZikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuXG5sZXQgZnJvbV9oZXggcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA8PiAzMiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LmZyb21faGV4XCI7XG4gIGxldCBkaWdpdCBjID1cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8ICcwJy4uJzknIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJ1xuICAgIHwgJ0EnLi4nRicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ0EnICsgMTBcbiAgICB8ICdhJy4uJ2YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdhJyArIDEwXG4gICAgfCBfIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRGlnZXN0LmZyb21faGV4XCIpXG4gIGluXG4gIGxldCBieXRlIGkgPSBkaWdpdCBzLltpXSBsc2wgNCArIGRpZ2l0IHMuW2krMV0gaW5cbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAxNiBpblxuICBmb3IgaSA9IDAgdG8gMTUgZG9cbiAgICBCeXRlcy5zZXQgcmVzdWx0IGkgKENoYXIuY2hyIChieXRlICgyICogaSkpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSGFzaCB0YWJsZXMgKilcblxuKCogV2UgZG8gZHluYW1pYyBoYXNoaW5nLCBhbmQgcmVzaXplIHRoZSB0YWJsZSBhbmQgcmVoYXNoIHRoZSBlbGVtZW50c1xuICAgd2hlbiBidWNrZXRzIGJlY29tZSB0b28gbG9uZy4gKilcblxudHlwZSAoJ2EsICdiKSB0ID1cbiAgeyBtdXRhYmxlIHNpemU6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBudW1iZXIgb2YgZW50cmllcyAqKVxuICAgIG11dGFibGUgZGF0YTogKCdhLCAnYikgYnVja2V0bGlzdCBhcnJheTsgICgqIHRoZSBidWNrZXRzICopXG4gICAgc2VlZDogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIGZvciByYW5kb21pemF0aW9uICopXG4gICAgbXV0YWJsZSBpbml0aWFsX3NpemU6IGludDsgICAgICAgICAgICAgICAgKCogaW5pdGlhbCBhcnJheSBzaXplICopXG4gIH1cblxuYW5kICgnYSwgJ2IpIGJ1Y2tldGxpc3QgPVxuICAgIEVtcHR5XG4gIHwgQ29ucyBvZiB7IG11dGFibGUga2V5OiAnYTtcbiAgICAgICAgICAgICAgbXV0YWJsZSBkYXRhOiAnYjtcbiAgICAgICAgICAgICAgbXV0YWJsZSBuZXh0OiAoJ2EsICdiKSBidWNrZXRsaXN0IH1cblxuKCogVGhlIHNpZ24gb2YgaW5pdGlhbF9zaXplIGVuY29kZXMgdGhlIGZhY3QgdGhhdCBhIHRyYXZlcnNhbCBpc1xuICAgb25nb2luZyBvciBub3QuXG5cbiAgIFRoaXMgZGlzYWJsZXMgdGhlIGVmZmljaWVudCBpbiBwbGFjZSBpbXBsZW1lbnRhdGlvbiBvZiByZXNpemluZy5cbiopXG5cbmxldCBvbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gIHx8IGguaW5pdGlhbF9zaXplIDwgMFxuXG5sZXQgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgaC5pbml0aWFsX3NpemUgPC0gLSBoLmluaXRpYWxfc2l6ZVxuXG4oKiBUbyBwaWNrIHJhbmRvbSBzZWVkcyBpZiByZXF1ZXN0ZWQgKilcblxubGV0IHJhbmRvbWl6ZWRfZGVmYXVsdCA9XG4gIGxldCBwYXJhbXMgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiT0NBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJDQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPiBcIlwiIGluXG4gIFN0cmluZy5jb250YWlucyBwYXJhbXMgJ1InXG5cbmxldCByYW5kb21pemVkID0gcmVmIHJhbmRvbWl6ZWRfZGVmYXVsdFxuXG5sZXQgcmFuZG9taXplICgpID0gcmFuZG9taXplZCA6PSB0cnVlXG5sZXQgaXNfcmFuZG9taXplZCAoKSA9ICFyYW5kb21pemVkXG5cbmxldCBwcm5nID0gbGF6eSAoUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0KCkpXG5cbigqIEZ1bmN0aW9ucyB3aGljaCBhcHBlYXIgYmVmb3JlIHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSBtdXN0IGVpdGhlciBiZVxuICAgaW5kZXBlbmRlbnQgb2YgdGhlIGhhc2ggZnVuY3Rpb24gb3IgdGFrZSBpdCBhcyBhIHBhcmFtZXRlciAoc2VlICMyMjAyIGFuZFxuICAgY29kZSBiZWxvdyB0aGUgZnVuY3RvciBkZWZpbml0aW9ucy4gKilcblxuKCogQ3JlYXRpbmcgYSBmcmVzaCwgZW1wdHkgdGFibGUgKilcblxubGV0IHJlYyBwb3dlcl8yX2Fib3ZlIHggbiA9XG4gIGlmIHggPj0gbiB0aGVuIHhcbiAgZWxzZSBpZiB4ICogMiA+IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4geFxuICBlbHNlIHBvd2VyXzJfYWJvdmUgKHggKiAyKSBuXG5cbmxldCBjcmVhdGUgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaW5pdGlhbF9zaXplID1cbiAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IGluaXRpYWxfc2l6ZSBpblxuICBsZXQgc2VlZCA9IGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpIGVsc2UgMCBpblxuICB7IGluaXRpYWxfc2l6ZSA9IHM7IHNpemUgPSAwOyBzZWVkID0gc2VlZDsgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eSB9XG5cbmxldCBjbGVhciBoID1cbiAgaWYgaC5zaXplID4gMCB0aGVuIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgQXJyYXkuZmlsbCBoLmRhdGEgMCAoQXJyYXkubGVuZ3RoIGguZGF0YSkgRW1wdHlcbiAgZW5kXG5cbmxldCByZXNldCBoID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBoLmRhdGEgaW5cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gICAgfHwgbGVuID0gYWJzIGguaW5pdGlhbF9zaXplIHRoZW5cbiAgICBjbGVhciBoXG4gIGVsc2UgYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBoLmRhdGEgPC0gQXJyYXkubWFrZSAoYWJzIGguaW5pdGlhbF9zaXplKSBFbXB0eVxuICBlbmRcblxubGV0IGNvcHlfYnVja2V0bGlzdCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gRW1wdHlcbiAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICBsZXQgcmVjIGxvb3AgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgIHwgQ29ucyBwcmVjIC0+ICBwcmVjLm5leHQgPC0gclxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgbG9vcCByIG5leHRcbiAgICAgIGluXG4gICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgIGxvb3AgciBuZXh0O1xuICAgICAgclxuXG5sZXQgY29weSBoID0geyBoIHdpdGggZGF0YSA9IEFycmF5Lm1hcCBjb3B5X2J1Y2tldGxpc3QgaC5kYXRhIH1cblxubGV0IGxlbmd0aCBoID0gaC5zaXplXG5cbmxldCBpbnNlcnRfYWxsX2J1Y2tldHMgaW5kZXhmdW4gaW5wbGFjZSBvZGF0YSBuZGF0YSA9XG4gIGxldCBuc2l6ZSA9IEFycmF5Lmxlbmd0aCBuZGF0YSBpblxuICBsZXQgbmRhdGFfdGFpbCA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgbGV0IHJlYyBpbnNlcnRfYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+ICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGFzIGNlbGwgLT5cbiAgICAgICAgbGV0IGNlbGwgPVxuICAgICAgICAgIGlmIGlucGxhY2UgdGhlbiBjZWxsXG4gICAgICAgICAgZWxzZSBDb25zIHtrZXk7IGRhdGE7IG5leHQgPSBFbXB0eX1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG5pZHggPSBpbmRleGZ1biBrZXkgaW5cbiAgICAgICAgYmVnaW4gbWF0Y2ggbmRhdGFfdGFpbC4obmlkeCkgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IG5kYXRhLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gY2VsbDtcbiAgICAgICAgZW5kO1xuICAgICAgICBuZGF0YV90YWlsLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICBpbnNlcnRfYnVja2V0IG5leHRcbiAgaW5cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBvZGF0YSAtIDEgZG9cbiAgICBpbnNlcnRfYnVja2V0IG9kYXRhLihpKVxuICBkb25lO1xuICBpZiBpbnBsYWNlIHRoZW5cbiAgICBmb3IgaSA9IDAgdG8gbnNpemUgLSAxIGRvXG4gICAgICBtYXRjaCBuZGF0YV90YWlsLihpKSB3aXRoXG4gICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gRW1wdHlcbiAgICBkb25lXG5cbmxldCByZXNpemUgaW5kZXhmdW4gaCA9XG4gIGxldCBvZGF0YSA9IGguZGF0YSBpblxuICBsZXQgb3NpemUgPSBBcnJheS5sZW5ndGggb2RhdGEgaW5cbiAgbGV0IG5zaXplID0gb3NpemUgKiAyIGluXG4gIGlmIG5zaXplIDwgU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiBiZWdpblxuICAgIGxldCBuZGF0YSA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgICBsZXQgaW5wbGFjZSA9IG5vdCAob25nb2luZ190cmF2ZXJzYWwgaCkgaW5cbiAgICBoLmRhdGEgPC0gbmRhdGE7ICAgICAgICAgICgqIHNvIHRoYXQgaW5kZXhmdW4gc2VlcyB0aGUgbmV3IGJ1Y2tldCBjb3VudCAqKVxuICAgIGluc2VydF9hbGxfYnVja2V0cyAoaW5kZXhmdW4gaCkgaW5wbGFjZSBvZGF0YSBuZGF0YVxuICBlbmRcblxubGV0IGl0ZXIgZiBoID1cbiAgbGV0IHJlYyBkb19idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgKClcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBmIGtleSBkYXRhOyBkb19idWNrZXQgbmV4dCBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBkb19idWNrZXQgZC4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCByZWMgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gRW1wdHlcbiAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBFbXB0eVxuICAgICAgZW5kXG4gIHwgKENvbnMgKHtrZXk7IGRhdGE7IG5leHR9IGFzIGMpKSBhcyBzbG90IC0+XG4gICAgICBiZWdpbiBtYXRjaCBmIGtleSBkYXRhIHdpdGhcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyBuZXh0XG4gICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBzbG90XG4gICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIHNsb3RcbiAgICAgICAgICBlbmQ7XG4gICAgICAgICAgYy5kYXRhIDwtIGRhdGE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBzbG90IG5leHRcbiAgICAgIGVuZFxuXG5sZXQgZmlsdGVyX21hcF9pbnBsYWNlIGYgaCA9XG4gIGxldCBkID0gaC5kYXRhIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIEVtcHR5IGguZGF0YS4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaFxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IGZvbGQgZiBoIGluaXQgPVxuICBsZXQgcmVjIGRvX2J1Y2tldCBiIGFjY3UgPVxuICAgIG1hdGNoIGIgd2l0aFxuICAgICAgRW1wdHkgLT5cbiAgICAgICAgYWNjdVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGRvX2J1Y2tldCBuZXh0IChmIGtleSBkYXRhIGFjY3UpIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGxldCBhY2N1ID0gcmVmIGluaXQgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBhY2N1IDo9IGRvX2J1Y2tldCBkLihpKSAhYWNjdVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgICFhY2N1XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG50eXBlIHN0YXRpc3RpY3MgPSB7XG4gIG51bV9iaW5kaW5nczogaW50O1xuICBudW1fYnVja2V0czogaW50O1xuICBtYXhfYnVja2V0X2xlbmd0aDogaW50O1xuICBidWNrZXRfaGlzdG9ncmFtOiBpbnQgYXJyYXlcbn1cblxubGV0IHJlYyBidWNrZXRfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFjY3VcbiAgfCBDb25ze25leHR9IC0+IGJ1Y2tldF9sZW5ndGggKGFjY3UgKyAxKSBuZXh0XG5cbmxldCBzdGF0cyBoID1cbiAgbGV0IG1ibCA9XG4gICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gbSBiIC0+IEludC5tYXggbSAoYnVja2V0X2xlbmd0aCAwIGIpKSAwIGguZGF0YSBpblxuICBsZXQgaGlzdG8gPSBBcnJheS5tYWtlIChtYmwgKyAxKSAwIGluXG4gIEFycmF5Lml0ZXJcbiAgICAoZnVuIGIgLT5cbiAgICAgIGxldCBsID0gYnVja2V0X2xlbmd0aCAwIGIgaW5cbiAgICAgIGhpc3RvLihsKSA8LSBoaXN0by4obCkgKyAxKVxuICAgIGguZGF0YTtcbiAgeyBudW1fYmluZGluZ3MgPSBoLnNpemU7XG4gICAgbnVtX2J1Y2tldHMgPSBBcnJheS5sZW5ndGggaC5kYXRhO1xuICAgIG1heF9idWNrZXRfbGVuZ3RoID0gbWJsO1xuICAgIGJ1Y2tldF9oaXN0b2dyYW0gPSBoaXN0byB9XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgdGJsID1cbiAgKCogY2FwdHVyZSBjdXJyZW50IGFycmF5LCBzbyB0aGF0IGV2ZW4gaWYgdGhlIHRhYmxlIGlzIHJlc2l6ZWQgd2VcbiAgICAga2VlcCBpdGVyYXRpbmcgb24gdGhlIHNhbWUgYXJyYXkgKilcbiAgbGV0IHRibF9kYXRhID0gdGJsLmRhdGEgaW5cbiAgKCogc3RhdGU6IGluZGV4ICogbmV4dCBidWNrZXQgdG8gdHJhdmVyc2UgKilcbiAgbGV0IHJlYyBhdXggaSBidWNrICgpID0gbWF0Y2ggYnVjayB3aXRoXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIHRibF9kYXRhXG4gICAgICAgIHRoZW4gU2VxLk5pbFxuICAgICAgICBlbHNlIGF1eChpKzEpIHRibF9kYXRhLihpKSAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBTZXEuQ29ucyAoKGtleSwgZGF0YSksIGF1eCBpIG5leHQpXG4gIGluXG4gIGF1eCAwIEVtcHR5XG5cbmxldCB0b19zZXFfa2V5cyBtID0gU2VxLm1hcCBmc3QgKHRvX3NlcSBtKVxuXG5sZXQgdG9fc2VxX3ZhbHVlcyBtID0gU2VxLm1hcCBzbmQgKHRvX3NlcSBtKVxuXG4oKiBGdW5jdG9yaWFsIGludGVyZmFjZSAqKVxuXG5tb2R1bGUgdHlwZSBIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgU2VlZGVkSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogaW50IC0+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+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZVNlZWRlZChIOiBTZWVkZWRIYXNoZWRUeXBlKTogKFNlZWRlZFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGtleSA9IEgudFxuICAgIHR5cGUgJ2EgaGFzaHRibCA9IChrZXksICdhKSB0XG4gICAgdHlwZSAnYSB0ID0gJ2EgaGFzaHRibFxuICAgIGxldCBjcmVhdGUgPSBjcmVhdGVcbiAgICBsZXQgY2xlYXIgPSBjbGVhclxuICAgIGxldCByZXNldCA9IHJlc2V0XG4gICAgbGV0IGNvcHkgPSBjb3B5XG5cbiAgICBsZXQga2V5X2luZGV4IGgga2V5ID1cbiAgICAgIChILmhhc2ggaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG5cbiAgICBsZXQgYWRkIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICAgICAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxuICAgIGxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICgpXG4gICAgICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBiZWdpblxuICAgICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBuZXh0XG4gICAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2UgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IGMgbmV4dFxuXG4gICAgbGV0IHJlbW92ZSBoIGtleSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IEVtcHR5IGguZGF0YS4oaSlcblxuICAgIGxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbiAgICBsZXQgZmluZCBoIGtleSA9XG4gICAgICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBkMSBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxuICAgIGxldCByZWMgZmluZF9yZWNfb3B0IGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBTb21lIGRhdGEgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHRcblxuICAgIGxldCBmaW5kX29wdCBoIGtleSA9XG4gICAgICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbiAgICBsZXQgZmluZF9hbGwgaCBrZXkgPVxuICAgICAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgW11cbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YT1kOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGQgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICB0cnVlXG4gICAgICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbiAgICBsZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgICAgIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgICAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICAgICAgZW5kXG5cbiAgICBsZXQgbWVtIGgga2V5ID1cbiAgICAgIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgICAgICBILmVxdWFsIGsga2V5IHx8IG1lbV9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCBhZGRfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxuICAgIGxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG5cbiAgICBsZXQgaXRlciA9IGl0ZXJcbiAgICBsZXQgZmlsdGVyX21hcF9pbnBsYWNlID0gZmlsdGVyX21hcF9pbnBsYWNlXG4gICAgbGV0IGZvbGQgPSBmb2xkXG4gICAgbGV0IGxlbmd0aCA9IGxlbmd0aFxuICAgIGxldCBzdGF0cyA9IHN0YXRzXG4gICAgbGV0IHRvX3NlcSA9IHRvX3NlcVxuICAgIGxldCB0b19zZXFfa2V5cyA9IHRvX3NlcV9rZXlzXG4gICAgbGV0IHRvX3NlcV92YWx1ZXMgPSB0b19zZXFfdmFsdWVzXG4gIGVuZFxuXG5tb2R1bGUgTWFrZShIOiBIYXNoZWRUeXBlKTogKFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWQoc3RydWN0XG4gICAgICAgIHR5cGUgdCA9IEgudFxuICAgICAgICBsZXQgZXF1YWwgPSBILmVxdWFsXG4gICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbigqIFBvbHltb3JwaGljIGhhc2ggZnVuY3Rpb24tYmFzZWQgdGFibGVzICopXG4oKiBDb2RlIGluY2x1ZGVkIGJlbG93IHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSB0byBndWFyZCBhZ2FpbnN0IGFjY2lkZW50YWxcbiAgIHVzZSAtIHNlZSAjMjIwMiAqKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cblxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbmxldCBoYXNoX3BhcmFtIG4xIG4yIHggPSBzZWVkZWRfaGFzaF9wYXJhbSBuMSBuMiAwIHhcbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5cbmxldCBrZXlfaW5kZXggaCBrZXkgPVxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNFxuICB0aGVuIChzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJIYXNodGJsOiB1bnN1cHBvcnRlZCBoYXNoIHRhYmxlIGZvcm1hdFwiXG5cbmxldCBhZGQgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxubGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgICgpXG4gIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgZW5kXG4gICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxubGV0IHJlbW92ZSBoIGtleSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbmxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbmxldCBmaW5kIGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG5sZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBOb25lXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbmxldCBmaW5kX29wdCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gTm9uZVxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbmxldCBmaW5kX2FsbCBoIGtleSA9XG4gIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBbXVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiBkYXRhIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxubGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHRydWVcbiAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxubGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBsID0gaC5kYXRhLihpKSBpblxuICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgZW5kXG5cbmxldCBtZW0gaCBrZXkgPVxuICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBmYWxzZVxuICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICBjb21wYXJlIGsga2V5ID0gMCB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxubGV0IGFkZF9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbmxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gIHRibFxuXG5sZXQgcmVidWlsZCA/KHJhbmRvbSA9ICFyYW5kb21pemVkKSBoID1cbiAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IChBcnJheS5sZW5ndGggaC5kYXRhKSBpblxuICBsZXQgc2VlZCA9XG4gICAgaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKExhenkuZm9yY2UgcHJuZylcbiAgICBlbHNlIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5zZWVkXG4gICAgZWxzZSAwIGluXG4gIGxldCBoJyA9IHtcbiAgICBzaXplID0gaC5zaXplO1xuICAgIGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHk7XG4gICAgc2VlZCA9IHNlZWQ7XG4gICAgaW5pdGlhbF9zaXplID0gaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLmluaXRpYWxfc2l6ZSBlbHNlIHNcbiAgfSBpblxuICBpbnNlcnRfYWxsX2J1Y2tldHMgKGtleV9pbmRleCBoJykgZmFsc2UgaC5kYXRhIGgnLmRhdGE7XG4gIGgnXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBQaWVycmUgV2VpcywgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEEgcHJldHR5LXByaW50aW5nIGZhY2lsaXR5IGFuZCBkZWZpbml0aW9uIG9mIGZvcm1hdHRlcnMgZm9yICdwYXJhbGxlbCdcbiAgIChpLmUuIHVucmVsYXRlZCBvciBpbmRlcGVuZGVudCkgcHJldHR5LXByaW50aW5nIG9uIG11bHRpcGxlIG91dCBjaGFubmVscy4gKilcblxuKCpcbiAgIFRoZSBwcmV0dHktcHJpbnRpbmcgZW5naW5lIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy5cbiopXG5cbmxldCBpZCB4ID0geFxuXG4oKiBBIGRldm90ZWQgdHlwZSBmb3Igc2l6ZXMgdG8gYXZvaWQgY29uZnVzaW9uXG4gICBiZXR3ZWVuIHNpemVzIGFuZCBtZXJlIGludGVnZXJzLiAqKVxubW9kdWxlIFNpemUgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHRvX2ludCA6IHQgLT4gaW50XG4gIHZhbCBvZl9pbnQgOiBpbnQgLT4gdFxuICB2YWwgemVybyA6IHRcbiAgdmFsIHVua25vd24gOiB0XG4gIHZhbCBpc19rbm93biA6IHQgLT4gYm9vbFxuZW5kICA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgdG9faW50ID0gaWRcbiAgbGV0IG9mX2ludCA9IGlkXG4gIGxldCB6ZXJvID0gMFxuICBsZXQgdW5rbm93biA9IC0xXG4gIGxldCBpc19rbm93biBuID0gbiA+PSAwXG5lbmRcblxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRpbmcgYm94ZXMgZGVmaW5pdGlvbjpcbiAgIGEgcHJldHR5LXByaW50aW5nIGJveCBpcyBlaXRoZXJcbiAgIC0gaGJveDogaG9yaXpvbnRhbCBib3ggKG5vIGxpbmUgc3BsaXR0aW5nKVxuICAgLSB2Ym94OiB2ZXJ0aWNhbCBib3ggKGV2ZXJ5IGJyZWFrIGhpbnQgc3BsaXRzIHRoZSBsaW5lKVxuICAgLSBodmJveDogaG9yaXpvbnRhbC92ZXJ0aWNhbCBib3hcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIGJveCBpZiBpdCBmaXRzIG9uXG4gICAgICB0aGUgY3VycmVudCBsaW5lLCBvdGhlcndpc2UgdGhlIGJveCBiZWhhdmVzIGFzIGEgdmVydGljYWwgYm94KVxuICAgLSBob3Zib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3hcbiAgICAgKHRoZSBib3ggaXMgY29tcGFjdGluZyBtYXRlcmlhbCwgcHJpbnRpbmcgYXMgbXVjaCBtYXRlcmlhbCBhcyBwb3NzaWJsZVxuICAgICAgb24gZXZlcnkgbGluZXMpXG4gICAtIGJveDogaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjb21wYWN0aW5nIGJveCB3aXRoIGVuaGFuY2VkIGJveCBzdHJ1Y3R1cmVcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGJveCBidXQgYnJlYWsgaGludHMgc3BsaXRcbiAgICAgIHRoZSBsaW5lIGlmIHNwbGl0dGluZyB3b3VsZCBtb3ZlIHRvIHRoZSBsZWZ0KVxuKilcbnR5cGUgYm94X3R5cGUgPSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCB8IFBwX3Zib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHNcblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIHRva2VucyBkZWZpbml0aW9uOlxuICAgYXJlIGVpdGhlciB0ZXh0IHRvIHByaW50IG9yIHByZXR0eSBwcmludGluZ1xuICAgZWxlbWVudHMgdGhhdCBkcml2ZSBpbmRlbnRhdGlvbiBhbmQgbGluZSBzcGxpdHRpbmcuICopXG50eXBlIHBwX3Rva2VuID1cbiAgfCBQcF90ZXh0IG9mIHN0cmluZyAgICAgICAgICAoKiBub3JtYWwgdGV4dCAqKVxuICB8IFBwX2JyZWFrIG9mIHsgICAgICAgICAgICAgICgqIGNvbXBsZXRlIGJyZWFrICopXG4gICAgICBmaXRzOiBzdHJpbmcgKiBpbnQgKiBzdHJpbmc7ICAgKCogbGluZSBpcyBub3Qgc3BsaXQgKilcbiAgICAgIGJyZWFrczogc3RyaW5nICogaW50ICogc3RyaW5nOyAoKiBsaW5lIGlzIHNwbGl0ICopXG4gICAgfVxuICB8IFBwX3RicmVhayBvZiBpbnQgKiBpbnQgICAgICgqIGdvIHRvIG5leHQgdGFidWxhdGlvbiAqKVxuICB8IFBwX3N0YWIgICAgICAgICAgICAgICAgICAgICgqIHNldCBhIHRhYnVsYXRpb24gKilcbiAgfCBQcF9iZWdpbiBvZiBpbnQgKiBib3hfdHlwZSAoKiBiZWdpbm5pbmcgb2YgYSBib3ggKilcbiAgfCBQcF9lbmQgICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSBib3ggKilcbiAgfCBQcF90YmVnaW4gb2YgdGJveCAgICAgICAgICAoKiBiZWdpbm5pbmcgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX3RlbmQgICAgICAgICAgICAgICAgICAgICgqIGVuZCBvZiBhIHRhYnVsYXRpb24gYm94ICopXG4gIHwgUHBfbmV3bGluZSAgICAgICAgICAgICAgICAgKCogdG8gZm9yY2UgYSBuZXdsaW5lIGluc2lkZSBhIGJveCAqKVxuICB8IFBwX2lmX25ld2xpbmUgICAgICAgICAgICAgICgqIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIHRoaXMgdmVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgaGFzIGJlZW4gYnJva2VuICopXG4gIHwgUHBfb3Blbl90YWcgb2Ygc3RhZyAgICAgICAgICgqIG9wZW5pbmcgYSB0YWcgbmFtZSAqKVxuICB8IFBwX2Nsb3NlX3RhZyAgICAgICAgICAgICAgICgqIGNsb3NpbmcgdGhlIG1vc3QgcmVjZW50bHkgb3BlbiB0YWcgKilcblxuYW5kIHN0YWcgPSAuLlxuXG5hbmQgdGJveCA9IFBwX3Rib3ggb2YgaW50IGxpc3QgcmVmICAoKiBUYWJ1bGF0aW9uIGJveCAqKVxuXG50eXBlIHRhZyA9IHN0cmluZ1xudHlwZSBzdGFnICs9IFN0cmluZ190YWcgb2YgdGFnXG5cblxuKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlOlxuICAgcHJldHR5LXByaW50aW5nIG1hdGVyaWFsIGlzIG5vdCB3cml0dGVuIGluIHRoZSBvdXRwdXQgYXMgc29vbiBhcyBlbWl0dGVkO1xuICAgaW5zdGVhZCwgdGhlIG1hdGVyaWFsIGlzIHNpbXBseSByZWNvcmRlZCBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUsXG4gICB1bnRpbCB0aGUgZW5jbG9zaW5nIGJveCBoYXMgYSBrbm93biBjb21wdXRlZCBzaXplIGFuZCBwcm9wZXIgc3BsaXR0aW5nXG4gICBkZWNpc2lvbnMgY2FuIGJlIG1hZGUuXG5cbiAgIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBjb250YWlucyBmb3JtYXR0aW5nIGVsZW1lbnRzIHRvIGJlIHByaW50ZWQuXG4gICBFYWNoIGZvcm1hdHRpbmcgZWxlbWVudCBpcyBhIHR1cGxlIChzaXplLCB0b2tlbiwgbGVuZ3RoKSwgd2hlcmVcbiAgIC0gbGVuZ3RoIGlzIHRoZSBkZWNsYXJlZCBsZW5ndGggb2YgdGhlIHRva2VuLFxuICAgLSBzaXplIGlzIGVmZmVjdGl2ZSBzaXplIG9mIHRoZSB0b2tlbiB3aGVuIGl0IGlzIHByaW50ZWRcbiAgICAgKHNpemUgaXMgc2V0IHdoZW4gdGhlIHNpemUgb2YgdGhlIGJveCBpcyBrbm93biwgc28gdGhhdCBzaXplIG9mIGJyZWFrXG4gICAgICBoaW50cyBhcmUgZGVmaW5pdGl2ZSkuICopXG50eXBlIHBwX3F1ZXVlX2VsZW0gPSB7XG4gIG11dGFibGUgc2l6ZSA6IFNpemUudDtcbiAgdG9rZW4gOiBwcF90b2tlbjtcbiAgbGVuZ3RoIDogaW50O1xufVxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9xdWV1ZSA9IHBwX3F1ZXVlX2VsZW0gUXVldWUudFxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjazogc2Nhbm5pbmcgZWxlbWVudCBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9zY2FuX2VsZW0gPSB7XG4gIGxlZnRfdG90YWwgOiBpbnQ7ICgqIFZhbHVlIG9mIHBwX2xlZnRfdG90YWwgd2hlbiB0aGUgZWxlbWVudCB3YXMgZW5xdWV1ZWQuICopXG4gIHF1ZXVlX2VsZW0gOiBwcF9xdWV1ZV9lbGVtXG59XG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOlxuICAgdGhlIGZvcm1hdHRpbmcgc3RhY2sgY29udGFpbnMgdGhlIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZVxuICAgYm94ZXM7IHRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrIGlzIHVzZWQgdG8gc3BsaXQgdGhlIGxpbmVzXG4gICB3aGlsZSBwcmludGluZyB0b2tlbnMuICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOiBmb3JtYXR0aW5nIHN0YWNrIGVsZW1lbnQgZGVmaW5pdGlvbi5cbiAgIEVhY2ggc3RhY2sgZWxlbWVudCBkZXNjcmliZXMgYSBwcmV0dHktcHJpbnRpbmcgYm94LiAqKVxudHlwZSBwcF9mb3JtYXRfZWxlbSA9IHsgYm94X3R5cGUgOiBib3hfdHlwZTsgd2lkdGggOiBpbnQgfVxuXG4oKiBUaGUgZm9ybWF0dGVyIGRlZmluaXRpb24uXG4gICBFYWNoIGZvcm1hdHRlciB2YWx1ZSBpcyBhIHByZXR0eS1wcmludGVyIGluc3RhbmNlIHdpdGggYWxsIGl0c1xuICAgbWFjaGluZXJ5LiAqKVxudHlwZSBmb3JtYXR0ZXIgPSB7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay4gKilcbiAgcHBfc2Nhbl9zdGFjayA6IHBwX3NjYW5fZWxlbSBTdGFjay50O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjay4gKilcbiAgcHBfZm9ybWF0X3N0YWNrIDogcHBfZm9ybWF0X2VsZW0gU3RhY2sudDtcbiAgcHBfdGJveF9zdGFjayA6IHRib3ggU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHNlbWFudGljcyB0YWcgc3RhY2suICopXG4gIHBwX3RhZ19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgcHBfbWFya19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgKCogVmFsdWUgb2YgcmlnaHQgbWFyZ2luLiAqKVxuICBtdXRhYmxlIHBwX21hcmdpbiA6IGludDtcbiAgKCogTWluaW1hbCBzcGFjZSBsZWZ0IGJlZm9yZSBtYXJnaW4sIHdoZW4gb3BlbmluZyBhIGJveC4gKilcbiAgbXV0YWJsZSBwcF9taW5fc3BhY2VfbGVmdCA6IGludDtcbiAgKCogTWF4aW11bSB2YWx1ZSBvZiBpbmRlbnRhdGlvbjpcbiAgICAgbm8gYm94IGNhbiBiZSBvcGVuZWQgZnVydGhlci4gKilcbiAgbXV0YWJsZSBwcF9tYXhfaW5kZW50IDogaW50O1xuICAoKiBTcGFjZSByZW1haW5pbmcgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbiAgbXV0YWJsZSBwcF9zcGFjZV9sZWZ0IDogaW50O1xuICAoKiBDdXJyZW50IHZhbHVlIG9mIGluZGVudGF0aW9uLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJlbnRfaW5kZW50IDogaW50O1xuICAoKiBUcnVlIHdoZW4gdGhlIGxpbmUgaGFzIGJlZW4gYnJva2VuIGJ5IHRoZSBwcmV0dHktcHJpbnRlci4gKilcbiAgbXV0YWJsZSBwcF9pc19uZXdfbGluZSA6IGJvb2w7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBhbHJlYWR5IHByaW50ZWQuICopXG4gIG11dGFibGUgcHBfbGVmdF90b3RhbCA6IGludDtcbiAgKCogVG90YWwgd2lkdGggb2YgdG9rZW5zIGV2ZXIgcHV0IGluIHF1ZXVlLiAqKVxuICBtdXRhYmxlIHBwX3JpZ2h0X3RvdGFsIDogaW50O1xuICAoKiBDdXJyZW50IG51bWJlciBvZiBvcGVuIGJveGVzLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJfZGVwdGggOiBpbnQ7XG4gICgqIE1heGltdW0gbnVtYmVyIG9mIGJveGVzIHdoaWNoIGNhbiBiZSBzaW11bHRhbmVvdXNseSBvcGVuLiAqKVxuICBtdXRhYmxlIHBwX21heF9ib3hlcyA6IGludDtcbiAgKCogRWxsaXBzaXMgc3RyaW5nLiAqKVxuICBtdXRhYmxlIHBwX2VsbGlwc2lzIDogc3RyaW5nO1xuICAoKiBPdXRwdXQgZnVuY3Rpb24uICopXG4gIG11dGFibGUgcHBfb3V0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQ7XG4gICgqIEZsdXNoaW5nIGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9mbHVzaCA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIG5ldyBsaW5lcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIGJyZWFrIGhpbnRzIHNwYWNlcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X2luZGVudCA6IGludCAtPiB1bml0O1xuICAoKiBBcmUgdGFncyBwcmludGVkID8gKilcbiAgbXV0YWJsZSBwcF9wcmludF90YWdzIDogYm9vbDtcbiAgKCogQXJlIHRhZ3MgbWFya2VkID8gKilcbiAgbXV0YWJsZSBwcF9tYXJrX3RhZ3MgOiBib29sO1xuICAoKiBGaW5kIG9wZW5pbmcgYW5kIGNsb3NpbmcgbWFya2VycyBvZiB0YWdzLiAqKVxuICBtdXRhYmxlIHBwX21hcmtfb3Blbl90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9tYXJrX2Nsb3NlX3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtdXRhYmxlIHBwX3ByaW50X29wZW5fdGFnIDogc3RhZyAtPiB1bml0O1xuICBtdXRhYmxlIHBwX3ByaW50X2Nsb3NlX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxuICBwcF9xdWV1ZSA6IHBwX3F1ZXVlO1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgc3BlY2lmaWMgdGFnIGhhbmRsaW5nIGZ1bmN0aW9ucy4gKilcbnR5cGUgZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fc3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgcHJpbnRfb3Blbl9zdGFnIDogc3RhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV9zdGFnIDogc3RhZyAtPiB1bml0O1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25zIHRvIG91dHB1dCBtYXRlcmlhbC4gKilcbnR5cGUgZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPSB7XG4gIG91dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICBvdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gIG91dF9uZXdsaW5lIDogdW5pdCAtPiB1bml0O1xuICBvdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gIG91dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbn1cblxuXG4oKlxuXG4gIEF1eGlsaWFyaWVzIGFuZCBiYXNpYyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEVudGVyIGEgdG9rZW4gaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2VucXVldWUgc3RhdGUgdG9rZW4gPVxuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBzdGF0ZS5wcF9yaWdodF90b3RhbCArIHRva2VuLmxlbmd0aDtcbiAgUXVldWUuYWRkIHRva2VuIHN0YXRlLnBwX3F1ZXVlXG5cblxubGV0IHBwX2NsZWFyX3F1ZXVlIHN0YXRlID1cbiAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSAxOyBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSAxO1xuICBRdWV1ZS5jbGVhciBzdGF0ZS5wcF9xdWV1ZVxuXG5cbigqIFBwX2luZmluaXR5OiBsYXJnZSB2YWx1ZSBmb3IgZGVmYXVsdCB0b2tlbnMgc2l6ZS5cblxuICAgUHBfaW5maW5pdHkgaXMgZG9jdW1lbnRlZCBhcyBiZWluZyBncmVhdGVyIHRoYW4gMWUxMDsgdG8gYXZvaWRcbiAgIGNvbmZ1c2lvbiBhYm91dCB0aGUgd29yZCAnZ3JlYXRlcicsIHdlIGNob29zZSBwcF9pbmZpbml0eSBncmVhdGVyXG4gICB0aGFuIDFlMTAgKyAxOyBmb3IgY29ycmVjdCBoYW5kbGluZyBvZiB0ZXN0cyBpbiB0aGUgYWxnb3JpdGhtLFxuICAgcHBfaW5maW5pdHkgbXVzdCBiZSBldmVuIG9uZSBtb3JlIHRoYW4gMWUxMCArIDE7IGxldCdzIHN0YW5kIG9uIHRoZVxuICAgc2FmZSBzaWRlIGJ5IGNob29zaW5nIDEuZTEwKzEwLlxuXG4gICBQcF9pbmZpbml0eSBjb3VsZCBwcm9iYWJseSBiZSAxMDczNzQxODIzIHRoYXQgaXMgMl4zMCAtIDEsIHRoYXQgaXNcbiAgIHRoZSBtaW5pbWFsIHVwcGVyIGJvdW5kIGZvciBpbnRlZ2Vyczsgbm93IHRoYXQgbWF4X2ludCBpcyBkZWZpbmVkLFxuICAgdGhpcyBsaW1pdCBjb3VsZCBhbHNvIGJlIGRlZmluZWQgYXMgbWF4X2ludCAtIDEuXG5cbiAgIEhvd2V2ZXIsIGJlZm9yZSBzZXR0aW5nIHBwX2luZmluaXR5IHRvIHNvbWV0aGluZyBhcm91bmQgbWF4X2ludCwgd2VcbiAgIG11c3QgY2FyZWZ1bGx5IGRvdWJsZS1jaGVjayBhbGwgdGhlIGludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zXG4gICB0aGF0IGludm9sdmUgcHBfaW5maW5pdHksIHNpbmNlIGFueSBvdmVyZmxvdyB3b3VsZCB3cmVjayBoYXZvYyB0aGVcbiAgIHByZXR0eS1wcmludGluZyBhbGdvcml0aG0ncyBpbnZhcmlhbnRzLiBHaXZlbiB0aGF0IHRoaXMgYXJpdGhtZXRpY1xuICAgY29ycmVjdG5lc3MgY2hlY2sgaXMgZGlmZmljdWx0IGFuZCBlcnJvciBwcm9uZSBhbmQgZ2l2ZW4gdGhhdCAxZTEwXG4gICArIDEgaXMgaW4gcHJhY3RpY2UgbGFyZ2UgZW5vdWdoLCB0aGVyZSBpcyBubyBuZWVkIHRvIGF0dGVtcHQgdG8gc2V0XG4gICBwcF9pbmZpbml0eSB0byB0aGUgdGhlb3JldGljYWxseSBtYXhpbXVtIGxpbWl0LiBJdCBpcyBub3Qgd29ydGggdGhlXG4gICBidXJkZW4gISAqKVxubGV0IHBwX2luZmluaXR5ID0gMTAwMDAwMDAxMFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIGZvciB0aGUgZm9ybWF0dGVyLiAqKVxubGV0IHBwX291dHB1dF9zdHJpbmcgc3RhdGUgcyA9IHN0YXRlLnBwX291dF9zdHJpbmcgcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5hbmQgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZSAoKVxuYW5kIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9zcGFjZXMgblxuYW5kIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9pbmRlbnQgblxuXG4oKiBGb3JtYXQgYSB0ZXh0dWFsIHRva2VuICopXG5sZXQgZm9ybWF0X3BwX3RleHQgc3RhdGUgc2l6ZSB0ZXh0ID1cbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gc2l6ZTtcbiAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSB0ZXh0O1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSBmYWxzZVxuXG4oKiBGb3JtYXQgYSBzdHJpbmcgYnkgaXRzIGxlbmd0aCwgaWYgbm90IGVtcHR5ICopXG5sZXQgZm9ybWF0X3N0cmluZyBzdGF0ZSBzID1cbiAgaWYgcyA8PiBcIlwiIHRoZW4gZm9ybWF0X3BwX3RleHQgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG4oKiBUbyBmb3JtYXQgYSBicmVhaywgaW5kZW50aW5nIGEgbmV3IGxpbmUuICopXG5sZXQgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKGJlZm9yZSwgb2Zmc2V0LCBhZnRlcikgd2lkdGggPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX2lzX25ld19saW5lIDwtIHRydWU7XG4gIGxldCBpbmRlbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZnNldCBpblxuICAoKiBEb24ndCBpbmRlbnQgbW9yZSB0aGFuIHBwX21heF9pbmRlbnQuICopXG4gIGxldCByZWFsX2luZGVudCA9IEludC5taW4gc3RhdGUucHBfbWF4X2luZGVudCBpbmRlbnQgaW5cbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gcmVhbF9pbmRlbnQ7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfY3VycmVudF9pbmRlbnQ7XG4gIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgc3RhdGUucHBfY3VycmVudF9pbmRlbnQ7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBmb3JjZSBhIGxpbmUgYnJlYWsgaW5zaWRlIGEgYm94OiBubyBvZmZzZXQgaXMgYWRkZWQuICopXG5sZXQgYnJlYWtfbGluZSBzdGF0ZSB3aWR0aCA9IGJyZWFrX25ld19saW5lIHN0YXRlIChcIlwiLCAwLCBcIlwiKSB3aWR0aFxuXG4oKiBUbyBmb3JtYXQgYSBicmVhayB0aGF0IGZpdHMgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbmxldCBicmVha19zYW1lX2xpbmUgc3RhdGUgKGJlZm9yZSwgd2lkdGgsIGFmdGVyKSA9XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYmVmb3JlO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgLSB3aWR0aDtcbiAgcHBfb3V0cHV0X3NwYWNlcyBzdGF0ZSB3aWR0aDtcbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBhZnRlclxuXG5cbigqIFRvIGluZGVudCBubyBtb3JlIHRoYW4gcHBfbWF4X2luZGVudCwgaWYgb25lIHRyaWVzIHRvIG9wZW4gYSBib3hcbiAgIGJleW9uZCBwcF9tYXhfaW5kZW50LCB0aGVuIHRoZSBib3ggaXMgcmVqZWN0ZWQgb24gdGhlIGxlZnRcbiAgIGJ5IHNpbXVsYXRpbmcgYSBicmVhay4gKilcbmxldCBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICB8IE5vbmUgLT4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGVcbiAgfCBTb21lIHsgYm94X3R5cGU7IHdpZHRoIH0gLT5cbiAgICBpZiB3aWR0aCA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlblxuICAgICAgbWF0Y2ggYm94X3R5cGUgd2l0aFxuICAgICAgfCBQcF9maXRzIHwgUHBfaGJveCAtPiAoKVxuICAgICAgfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuXG5cbigqIFRvIHNraXAgYSB0b2tlbiwgaWYgdGhlIHByZXZpb3VzIGxpbmUgaGFzIGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3NraXBfdG9rZW4gc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS50YWtlX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBwcmludF9pZl9uZXdsaW5lIG11c3QgaGF2ZSBiZWVuIHRoZSBsYXN0IHByaW50aW5nIGNvbW1hbmQgKilcbiAgfCBTb21lIHsgc2l6ZTsgbGVuZ3RoOyBfIH0gLT5cbiAgICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIHN0YXRlLnBwX2xlZnRfdG90YWwgLSBsZW5ndGg7XG4gICAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0ICsgU2l6ZS50b19pbnQgc2l6ZVxuXG5cbigqXG5cbiAgVGhlIG1haW4gcHJldHR5IHByaW50aW5nIGZ1bmN0aW9ucy5cblxuKilcblxuKCogRm9ybWF0dGluZyBhIHRva2VuIHdpdGggYSBnaXZlbiBzaXplLiAqKVxubGV0IGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplID0gZnVuY3Rpb25cblxuICB8IFBwX3RleHQgcyAtPlxuICAgIGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgc1xuXG4gIHwgUHBfYmVnaW4gKG9mZiwgdHkpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBpZiBpbnNlcnRpb25fcG9pbnQgPiBzdGF0ZS5wcF9tYXhfaW5kZW50IHRoZW5cbiAgICAgICgqIGNhbiBub3Qgb3BlbiBhIGJveCByaWdodCB0aGVyZS4gKilcbiAgICAgIGJlZ2luIHBwX2ZvcmNlX2JyZWFrX2xpbmUgc3RhdGUgZW5kO1xuICAgIGxldCB3aWR0aCA9IHN0YXRlLnBwX3NwYWNlX2xlZnQgLSBvZmYgaW5cbiAgICBsZXQgYm94X3R5cGUgPVxuICAgICAgbWF0Y2ggdHkgd2l0aFxuICAgICAgfCBQcF92Ym94IC0+IFBwX3Zib3hcbiAgICAgIHwgUHBfaGJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IHwgUHBfZml0cyAtPlxuICAgICAgICBpZiBzaXplID4gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuIHR5IGVsc2UgUHBfZml0cyBpblxuICAgIFN0YWNrLnB1c2ggeyBib3hfdHlwZTsgd2lkdGggfSBzdGF0ZS5wcF9mb3JtYXRfc3RhY2tcblxuICB8IFBwX2VuZCAtPlxuICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHw+IGlnbm9yZVxuXG4gIHwgUHBfdGJlZ2luIChQcF90Ym94IF8gYXMgdGJveCkgLT5cbiAgICBTdGFjay5wdXNoIHRib3ggc3RhdGUucHBfdGJveF9zdGFja1xuXG4gIHwgUHBfdGVuZCAtPlxuICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3N0YWIgLT5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHJlYyBhZGRfdGFiIG4gPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IFtuXVxuICAgICAgICB8IHggOjogbCBhcyBscyAtPiBpZiBuIDwgeCB0aGVuIG4gOjogbHMgZWxzZSB4IDo6IGFkZF90YWIgbiBsIGluXG4gICAgICB0YWJzIDo9IGFkZF90YWIgKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQpICF0YWJzXG4gICAgZW5kXG5cbiAgfCBQcF90YnJlYWsgKG4sIG9mZikgLT5cbiAgICBsZXQgaW5zZXJ0aW9uX3BvaW50ID0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCBpblxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gdGFidWxhdGlvbiBib3guICopXG4gICAgfCBTb21lIChQcF90Ym94IHRhYnMpIC0+XG4gICAgICBsZXQgdGFiID1cbiAgICAgICAgbWF0Y2ggIXRhYnMgd2l0aFxuICAgICAgICB8IFtdIC0+IGluc2VydGlvbl9wb2ludFxuICAgICAgICB8IGZpcnN0IDo6IF8gLT5cbiAgICAgICAgICBsZXQgcmVjIGZpbmQgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCBoZWFkIDo6IHRhaWwgLT5cbiAgICAgICAgICAgICAgaWYgaGVhZCA+PSBpbnNlcnRpb25fcG9pbnQgdGhlbiBoZWFkIGVsc2UgZmluZCB0YWlsXG4gICAgICAgICAgICB8IFtdIC0+IGZpcnN0IGluXG4gICAgICAgICAgZmluZCAhdGFicyBpblxuICAgICAgbGV0IG9mZnNldCA9IHRhYiAtIGluc2VydGlvbl9wb2ludCBpblxuICAgICAgaWYgb2Zmc2V0ID49IDBcbiAgICAgIHRoZW4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIChcIlwiLCBvZmZzZXQgKyBuLCBcIlwiKVxuICAgICAgZWxzZSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgdGFiICsgb2ZmLCBcIlwiKSBzdGF0ZS5wcF9tYXJnaW5cbiAgICBlbmRcblxuICB8IFBwX25ld2xpbmUgLT5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IHdpZHRoOyBffSAtPiBicmVha19saW5lIHN0YXRlIHdpZHRoXG4gICAgZW5kXG5cbiAgfCBQcF9pZl9uZXdsaW5lIC0+XG4gICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgIT0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgIHRoZW4gcHBfc2tpcF90b2tlbiBzdGF0ZVxuXG4gIHwgUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSAtPlxuICAgIGxldCBiZWZvcmUsIG9mZiwgXyA9IGJyZWFrcyBpblxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiBib3guICopXG4gICAgfCBTb21lIHsgYm94X3R5cGU7IHdpZHRoIH0gLT5cbiAgICAgIGJlZ2luIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfaG92Ym94IC0+XG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgICAgZWxzZSBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF9ib3ggLT5cbiAgICAgICAgKCogSGF2ZSB0aGUgbGluZSBqdXN0IGJlZW4gYnJva2VuIGhlcmUgPyAqKVxuICAgICAgICBpZiBzdGF0ZS5wcF9pc19uZXdfbGluZSB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzIGVsc2VcbiAgICAgICAgaWYgc2l6ZSArIFN0cmluZy5sZW5ndGggYmVmb3JlID4gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoIGVsc2VcbiAgICAgICAgKCogYnJlYWsgdGhlIGxpbmUgaGVyZSBsZWFkcyB0byBuZXcgaW5kZW50YXRpb24gPyAqKVxuICAgICAgICBpZiBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA+IHN0YXRlLnBwX21hcmdpbiAtIHdpZHRoICsgb2ZmXG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfaHZib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2ZpdHMgLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfdmJveCAtPiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgIHwgUHBfaGJveCAtPiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgZW5kXG4gICAgZW5kXG5cbiAgIHwgUHBfb3Blbl90YWcgdGFnX25hbWUgLT5cbiAgICAgbGV0IG1hcmtlciA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBtYXJrZXI7XG4gICAgIFN0YWNrLnB1c2ggdGFnX25hbWUgc3RhdGUucHBfbWFya19zdGFja1xuXG4gICB8IFBwX2Nsb3NlX3RhZyAtPlxuICAgICBiZWdpbiBtYXRjaCBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX21hcmtfc3RhY2sgd2l0aFxuICAgICB8IE5vbmUgLT4gKCkgKCogTm8gbW9yZSB0YWcgdG8gY2xvc2UuICopXG4gICAgIHwgU29tZSB0YWdfbmFtZSAtPlxuICAgICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyB0YWdfbmFtZSBpblxuICAgICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyXG4gICAgIGVuZFxuXG5cbigqIFByaW50IGlmIHRva2VuIHNpemUgaXMga25vd24gZWxzZSBwcmludGluZyBpcyBkZWxheWVkLlxuICAgUHJpbnRpbmcgaXMgZGVsYXllZCB3aGVuIHRoZSB0ZXh0IHdhaXRpbmcgaW4gdGhlIHF1ZXVlIHJlcXVpcmVzXG4gICBtb3JlIHJvb20gdG8gZm9ybWF0IHRoYW4gZXhpc3RzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgcmVjIGFkdmFuY2VfbGVmdCBzdGF0ZSA9XG4gIG1hdGNoIFF1ZXVlLnBlZWtfb3B0IHN0YXRlLnBwX3F1ZXVlIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIE5vIHRva2VucyB0byBwcmludCAqKVxuICB8IFNvbWUgeyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gLT5cbiAgICBsZXQgcGVuZGluZ19jb3VudCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsIC0gc3RhdGUucHBfbGVmdF90b3RhbCBpblxuICAgIGlmIFNpemUuaXNfa25vd24gc2l6ZSB8fCBwZW5kaW5nX2NvdW50ID49IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiBiZWdpblxuICAgICAgUXVldWUudGFrZSBzdGF0ZS5wcF9xdWV1ZSB8PiBpZ25vcmU7ICgqIE5vdCBlbXB0eTogd2UgcGVlayBpbnRvIGl0ICopXG4gICAgICBsZXQgc2l6ZSA9IGlmIFNpemUuaXNfa25vd24gc2l6ZSB0aGVuIFNpemUudG9faW50IHNpemUgZWxzZSBwcF9pbmZpbml0eSBpblxuICAgICAgZm9ybWF0X3BwX3Rva2VuIHN0YXRlIHNpemUgdG9rZW47XG4gICAgICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIGxlbmd0aCArIHN0YXRlLnBwX2xlZnRfdG90YWw7XG4gICAgICAoYWR2YW5jZV9sZWZ0IFtAdGFpbGNhbGxdKSBzdGF0ZVxuICAgIGVuZFxuXG5cbigqIFRvIGVucXVldWUgYSB0b2tlbiA6IHRyeSB0byBhZHZhbmNlLiAqKVxubGV0IGVucXVldWVfYWR2YW5jZSBzdGF0ZSB0b2sgPSBwcF9lbnF1ZXVlIHN0YXRlIHRvazsgYWR2YW5jZV9sZWZ0IHN0YXRlXG5cblxuKCogVG8gZW5xdWV1ZSBzdHJpbmdzLiAqKVxubGV0IGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgcyA9XG4gIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemU7IHRva2VuID0gUHBfdGV4dCBzOyBsZW5ndGggPSBTaXplLnRvX2ludCBzaXplIH1cblxuXG5sZXQgZW5xdWV1ZV9zdHJpbmcgc3RhdGUgcyA9XG4gIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIChTaXplLm9mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSkgc1xuXG5cbigqIFJvdXRpbmVzIGZvciBzY2FuIHN0YWNrXG4gICBkZXRlcm1pbmUgc2l6ZSBvZiBib3hlcy4gKilcblxuKCogVGhlIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG5sZXQgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YWNrID1cbiAgU3RhY2suY2xlYXIgc3RhY2s7XG4gIGxldCBxdWV1ZV9lbGVtID0geyBzaXplID0gU2l6ZS51bmtub3duOyB0b2tlbiA9IFBwX3RleHQgXCJcIjsgbGVuZ3RoID0gMCB9IGluXG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gLTE7IHF1ZXVlX2VsZW0gfSBzdGFja1xuXG4oKiBTZXR0aW5nIHRoZSBzaXplIG9mIGJveGVzIG9uIHNjYW4gc3RhY2s6XG4gICBpZiB0eSA9IHRydWUgdGhlbiBzaXplIG9mIGJyZWFrIGlzIHNldCBlbHNlIHNpemUgb2YgYm94IGlzIHNldDtcbiAgIGluIGVhY2ggY2FzZSBwcF9zY2FuX3N0YWNrIGlzIHBvcHBlZC5cblxuICAgTm90ZTpcbiAgIFBhdHRlcm4gbWF0Y2hpbmcgb24gc2NhbiBzdGFjayBpcyBleGhhdXN0aXZlLCBzaW5jZSBzY2FuX3N0YWNrIGlzIG5ldmVyXG4gICBlbXB0eS5cbiAgIFBhdHRlcm4gbWF0Y2hpbmcgb24gdG9rZW4gaW4gc2NhbiBzdGFjayBpcyBhbHNvIGV4aGF1c3RpdmUsXG4gICBzaW5jZSBzY2FuX3B1c2ggaXMgdXNlZCBvbiBicmVha3MgYW5kIG9wZW5pbmcgb2YgYm94ZXMuICopXG5sZXQgc2V0X3NpemUgc3RhdGUgdHkgPVxuICBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogc2Nhbl9zdGFjayBpcyBuZXZlciBlbXB0eS4gKilcbiAgfCBTb21lIHsgbGVmdF90b3RhbDsgcXVldWVfZWxlbSB9IC0+XG4gICAgbGV0IHNpemUgPSBTaXplLnRvX2ludCBxdWV1ZV9lbGVtLnNpemUgaW5cbiAgICAoKiB0ZXN0IGlmIHNjYW4gc3RhY2sgY29udGFpbnMgYW55IGRhdGEgdGhhdCBpcyBub3Qgb2Jzb2xldGUuICopXG4gICAgaWYgbGVmdF90b3RhbCA8IHN0YXRlLnBwX2xlZnRfdG90YWwgdGhlblxuICAgICAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2tcbiAgICBlbHNlXG4gICAgICBtYXRjaCBxdWV1ZV9lbGVtLnRva2VuIHdpdGhcbiAgICAgIHwgUHBfYnJlYWsgXyB8IFBwX3RicmVhayAoXywgXykgLT5cbiAgICAgICAgaWYgdHkgdGhlbiBiZWdpblxuICAgICAgICAgIHF1ZXVlX2VsZW0uc2l6ZSA8LSBTaXplLm9mX2ludCAoc3RhdGUucHBfcmlnaHRfdG90YWwgKyBzaXplKTtcbiAgICAgICAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgfD4gaWdub3JlXG4gICAgICAgIGVuZFxuICAgICAgfCBQcF9iZWdpbiAoXywgXykgLT5cbiAgICAgICAgaWYgbm90IHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfdGV4dCBfIHwgUHBfc3RhYiB8IFBwX3RiZWdpbiBfIHwgUHBfdGVuZCB8IFBwX2VuZFxuICAgICAgfCBQcF9uZXdsaW5lIHwgUHBfaWZfbmV3bGluZSB8IFBwX29wZW5fdGFnIF8gfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgICAgKCkgKCogc2Nhbl9wdXNoIGlzIG9ubHkgdXNlZCBmb3IgYnJlYWtzIGFuZCBib3hlcy4gKilcblxuXG4oKiBQdXNoIGEgdG9rZW4gb24gcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suXG4gICBJZiBiIGlzIHRydWUgc2V0X3NpemUgaXMgY2FsbGVkLiAqKVxubGV0IHNjYW5fcHVzaCBzdGF0ZSBiIHRva2VuID1cbiAgcHBfZW5xdWV1ZSBzdGF0ZSB0b2tlbjtcbiAgaWYgYiB0aGVuIHNldF9zaXplIHN0YXRlIHRydWU7XG4gIGxldCBlbGVtID0geyBsZWZ0X3RvdGFsID0gc3RhdGUucHBfcmlnaHRfdG90YWw7IHF1ZXVlX2VsZW0gPSB0b2tlbiB9IGluXG4gIFN0YWNrLnB1c2ggZWxlbSBzdGF0ZS5wcF9zY2FuX3N0YWNrXG5cblxuKCogVG8gb3BlbiBhIG5ldyBib3ggOlxuICAgdGhlIHVzZXIgbWF5IHNldCB0aGUgZGVwdGggYm91bmQgcHBfbWF4X2JveGVzXG4gICBhbnkgdGV4dCBuZXN0ZWQgZGVlcGVyIGlzIHByaW50ZWQgYXMgdGhlIGVsbGlwc2lzIHN0cmluZy4gKilcbmxldCBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IGJyX3R5ID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF9iZWdpbiAoaW5kZW50LCBicl90eSk7IGxlbmd0aCA9IDAgfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSBmYWxzZSBlbGVtIGVsc2VcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA9IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nIHN0YXRlIHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVGhlIGJveCB3aGljaCBpcyBhbHdheXMgb3Blbi4gKilcbmxldCBwcF9vcGVuX3N5c19ib3ggc3RhdGUgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9ob3Zib3hcblxuKCogQ2xvc2UgYSBib3gsIHNldHRpbmcgc2l6ZXMgb2YgaXRzIHN1YiBib3hlcy4gKilcbmxldCBwcF9jbG9zZV9ib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgYmVnaW5cbiAgICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2VuZDsgbGVuZ3RoID0gMCB9O1xuICAgICAgc2V0X3NpemUgc3RhdGUgdHJ1ZTsgc2V0X3NpemUgc3RhdGUgZmFsc2VcbiAgICBlbmQ7XG4gICAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoIC0gMTtcbiAgZW5kXG5cblxuKCogT3BlbiBhIHRhZywgcHVzaGluZyBpdCBvbiB0aGUgdGFnIHN0YWNrLiAqKVxubGV0IHBwX29wZW5fc3RhZyBzdGF0ZSB0YWdfbmFtZSA9XG4gIGlmIHN0YXRlLnBwX3ByaW50X3RhZ3MgdGhlblxuICBiZWdpblxuICAgIFN0YWNrLnB1c2ggdGFnX25hbWUgc3RhdGUucHBfdGFnX3N0YWNrO1xuICAgIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIHRhZ19uYW1lXG4gIGVuZDtcbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBsZXQgdG9rZW4gPSBQcF9vcGVuX3RhZyB0YWdfbmFtZSBpblxuICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbjsgbGVuZ3RoID0gMCB9XG5cblxuKCogQ2xvc2UgYSB0YWcsIHBvcHBpbmcgaXQgZnJvbSB0aGUgdGFnIHN0YWNrLiAqKVxubGV0IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9tYXJrX3RhZ3MgdGhlblxuICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2Nsb3NlX3RhZzsgbGVuZ3RoID0gMCB9O1xuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgICBtYXRjaCBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3RhZ19zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgIHwgU29tZSB0YWdfbmFtZSAtPlxuICAgICAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIHRhZ19uYW1lXG5cbmxldCBwcF9vcGVuX3RhZyBzdGF0ZSBzID0gcHBfb3Blbl9zdGFnIHN0YXRlIChTdHJpbmdfdGFnIHMpXG5sZXQgcHBfY2xvc2VfdGFnIHN0YXRlICgpID0gcHBfY2xvc2Vfc3RhZyBzdGF0ZSAoKVxuXG5sZXQgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX3ByaW50X3RhZ3MgPC0gYlxubGV0IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX21hcmtfdGFncyA8LSBiXG5sZXQgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9wcmludF90YWdzXG5sZXQgcHBfZ2V0X21hcmtfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmtfdGFnc1xubGV0IHBwX3NldF90YWdzIHN0YXRlIGIgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiOyBwcF9zZXRfbWFya190YWdzIHN0YXRlIGJcblxuXG4oKiBIYW5kbGluZyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zOiBnZXQvc2V0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBtYXJrX29wZW5fc3RhZyA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnO1xuICBwcmludF9vcGVuX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZztcbiAgcHJpbnRfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZztcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl9zdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3N0YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fc3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2Vfc3RhZyA9IHBjdDtcbiAgfSA9XG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gbW90O1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBtY3Q7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHBvdDtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHBjdFxuXG5cbigqIEluaXRpYWxpemUgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfcmluaXQgc3RhdGUgPVxuICBwcF9jbGVhcl9xdWV1ZSBzdGF0ZTtcbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX2Zvcm1hdF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGJveF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGFnX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9tYXJrX3N0YWNrO1xuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSAwO1xuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIDA7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luO1xuICBwcF9vcGVuX3N5c19ib3ggc3RhdGVcblxubGV0IGNsZWFyX3RhZ19zdGFjayBzdGF0ZSA9XG4gIFN0YWNrLml0ZXIgKGZ1biBfIC0+IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSkgc3RhdGUucHBfdGFnX3N0YWNrXG5cblxuKCogRmx1c2hpbmcgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG5sZXQgcHBfZmx1c2hfcXVldWUgc3RhdGUgYiA9XG4gIGNsZWFyX3RhZ19zdGFjayBzdGF0ZTtcbiAgd2hpbGUgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgZG9cbiAgICBwcF9jbG9zZV9ib3ggc3RhdGUgKClcbiAgZG9uZTtcbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gcHBfaW5maW5pdHk7XG4gIGFkdmFuY2VfbGVmdCBzdGF0ZTtcbiAgaWYgYiB0aGVuIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBwcF9yaW5pdCBzdGF0ZVxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gZm9ybWF0IHZhbHVlcyBhbmQgdXNlIGJveGVzLlxuXG4qKVxuXG4oKiBUbyBmb3JtYXQgYSBzdHJpbmcuICopXG5sZXQgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSBzaXplIHMgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzXG4gIHRoZW4gZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgc2l6ZSBzXG5cblxubGV0IHBwX3ByaW50X2FzIHN0YXRlIGlzaXplIHMgPVxuICBwcF9wcmludF9hc19zaXplIHN0YXRlIChTaXplLm9mX2ludCBpc2l6ZSkgc1xuXG5cbmxldCBwcF9wcmludF9zdHJpbmcgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxubGV0IHBwX3ByaW50X2J5dGVzIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoQnl0ZXMubGVuZ3RoIHMpIChCeXRlcy50b19zdHJpbmcgcylcblxuKCogVG8gZm9ybWF0IGFuIGludGVnZXIuICopXG5sZXQgcHBfcHJpbnRfaW50IHN0YXRlIGkgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKEludC50b19zdHJpbmcgaSlcblxuKCogVG8gZm9ybWF0IGEgZmxvYXQuICopXG5sZXQgcHBfcHJpbnRfZmxvYXQgc3RhdGUgZiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Zsb2F0IGYpXG5cbigqIFRvIGZvcm1hdCBhIGJvb2xlYW4uICopXG5sZXQgcHBfcHJpbnRfYm9vbCBzdGF0ZSBiID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfYm9vbCBiKVxuXG4oKiBUbyBmb3JtYXQgYSBjaGFyLiAqKVxubGV0IHBwX3ByaW50X2NoYXIgc3RhdGUgYyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIDEgKFN0cmluZy5tYWtlIDEgYylcblxuXG4oKiBPcGVuaW5nIGJveGVzLiAqKVxubGV0IHBwX29wZW5faGJveCBzdGF0ZSAoKSA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSAwIFBwX2hib3hcbmFuZCBwcF9vcGVuX3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF92Ym94XG5cbmFuZCBwcF9vcGVuX2h2Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaHZib3hcbmFuZCBwcF9vcGVuX2hvdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2hvdmJveFxuYW5kIHBwX29wZW5fYm94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfYm94XG5cblxuKCogUHJpbnRpbmcgcXVldWVkIHRleHQuXG5cbiAgIFtwcF9wcmludF9mbHVzaF0gcHJpbnRzIGFsbCBwZW5kaW5nIGl0ZW1zIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhbmRcbiAgIHRoZW4gZmx1c2hlcyB0aGUgbG93IGxldmVsIG91dHB1dCBkZXZpY2Ugb2YgdGhlIGZvcm1hdHRlciB0byBhY3R1YWxseVxuICAgZGlzcGxheSBwcmludGluZyBtYXRlcmlhbC5cblxuICAgW3BwX3ByaW50X25ld2xpbmVdIGJlaGF2ZXMgYXMgW3BwX3ByaW50X2ZsdXNoXSBhZnRlciBwcmludGluZyBhbiBhZGRpdGlvbmFsXG4gICBuZXcgbGluZS4gKilcbmxldCBwcF9wcmludF9uZXdsaW5lIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgdHJ1ZTsgc3RhdGUucHBfb3V0X2ZsdXNoICgpXG5hbmQgcHBfcHJpbnRfZmx1c2ggc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSBmYWxzZTsgc3RhdGUucHBfb3V0X2ZsdXNoICgpXG5cblxuKCogVG8gZ2V0IGEgbmV3bGluZSB3aGVuIG9uZSBkb2VzIG5vdCB3YW50IHRvIGNsb3NlIHRoZSBjdXJyZW50IGJveC4gKilcbmxldCBwcF9mb3JjZV9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBUbyBmb3JtYXQgc29tZXRoaW5nLCBvbmx5IGluIGNhc2UgdGhlIGxpbmUgaGFzIGp1c3QgYmVlbiBicm9rZW4uICopXG5sZXQgcHBfcHJpbnRfaWZfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZVxuICAgICAgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2lmX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIEdlbmVyYWxpemVkIGJyZWFrIGhpbnQgdGhhdCBhbGxvd3MgcHJpbnRpbmcgc3RyaW5ncyBiZWZvcmUvYWZ0ZXJcbiAgIHNhbWUtbGluZSBvZmZzZXQgKHdpZHRoKSBvciBuZXctbGluZSBvZmZzZXQgKilcbmxldCBwcF9wcmludF9jdXN0b21fYnJlYWsgc3RhdGUgfmZpdHMgfmJyZWFrcyA9XG4gIGxldCBiZWZvcmUsIHdpZHRoLCBhZnRlciA9IGZpdHMgaW5cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgdG9rZW4gPSBQcF9icmVhayB7IGZpdHM7IGJyZWFrcyB9IGluXG4gICAgbGV0IGxlbmd0aCA9IFN0cmluZy5sZW5ndGggYmVmb3JlICsgd2lkdGggKyBTdHJpbmcubGVuZ3RoIGFmdGVyIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuOyBsZW5ndGggfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSB0cnVlIGVsZW1cblxuKCogUHJpbnRpbmcgYnJlYWsgaGludHM6XG4gICBBIGJyZWFrIGhpbnQgaW5kaWNhdGVzIHdoZXJlIGEgYm94IG1heSBiZSBicm9rZW4uXG4gICBJZiBsaW5lIGlzIGJyb2tlbiB0aGVuIG9mZnNldCBpcyBhZGRlZCB0byB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnRcbiAgIGJveCBlbHNlICh0aGUgdmFsdWUgb2YpIHdpZHRoIGJsYW5rcyBhcmUgcHJpbnRlZC4gKilcbmxldCBwcF9wcmludF9icmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBwcF9wcmludF9jdXN0b21fYnJlYWsgc3RhdGVcbiAgICB+Zml0czooXCJcIiwgd2lkdGgsIFwiXCIpIH5icmVha3M6KFwiXCIsIG9mZnNldCwgXCJcIilcblxuXG4oKiBQcmludCBhIHNwYWNlIDpcbiAgIGEgc3BhY2UgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIGEgc2luZ2xlIHNwYWNlIGlmIHRoZSBicmVhayBkb2VzIG5vdFxuICAgc3BsaXQgdGhlIGxpbmU7XG4gICBhIGN1dCBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgbm90aGluZyBpZiB0aGUgYnJlYWsgZG9lcyBub3Qgc3BsaXQgdGhlXG4gICBsaW5lLiAqKVxubGV0IHBwX3ByaW50X3NwYWNlIHN0YXRlICgpID0gcHBfcHJpbnRfYnJlYWsgc3RhdGUgMSAwXG5hbmQgcHBfcHJpbnRfY3V0IHN0YXRlICgpID0gcHBfcHJpbnRfYnJlYWsgc3RhdGUgMCAwXG5cblxuKCogVGFidWxhdGlvbiBib3hlcy4gKilcbmxldCBwcF9vcGVuX3Rib3ggc3RhdGUgKCkgPVxuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggKyAxO1xuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUuemVybyBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RiZWdpbiAoUHBfdGJveCAocmVmIFtdKSk7IGxlbmd0aCA9IDAgfSBpblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtXG5cblxuKCogQ2xvc2UgYSB0YWJ1bGF0aW9uIGJveC4gKilcbmxldCBwcF9jbG9zZV90Ym94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgIGxldCBlbGVtID0geyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX3RlbmQ7IGxlbmd0aCA9IDAgfSBpblxuICAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbTtcbiAgICAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoIC0gMVxuICBlbmRcblxuXG4oKiBQcmludCBhIHRhYnVsYXRpb24gYnJlYWsuICopXG5sZXQgcHBfcHJpbnRfdGJyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJyZWFrICh3aWR0aCwgb2Zmc2V0KTsgbGVuZ3RoID0gd2lkdGggfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSB0cnVlIGVsZW1cblxuXG5sZXQgcHBfcHJpbnRfdGFiIHN0YXRlICgpID0gcHBfcHJpbnRfdGJyZWFrIHN0YXRlIDAgMFxuXG5sZXQgcHBfc2V0X3RhYiBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBlbGVtID0geyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX3N0YWI7IGxlbmd0aCA9IDAgfSBpblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtXG5cblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGNvbnRyb2wgdGhlIHByZXR0eS1wcmludGVyc1xuXG4qKVxuXG4oKiBTZXRfbWF4X2JveGVzLiAqKVxubGV0IHBwX3NldF9tYXhfYm94ZXMgc3RhdGUgbiA9IGlmIG4gPiAxIHRoZW4gc3RhdGUucHBfbWF4X2JveGVzIDwtIG5cblxuKCogVG8ga25vdyB0aGUgY3VycmVudCBtYXhpbXVtIG51bWJlciBvZiBib3hlcyBhbGxvd2VkLiAqKVxubGV0IHBwX2dldF9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxubGV0IHBwX292ZXJfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfY3Vycl9kZXB0aCA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG4oKiBFbGxpcHNpcy4gKilcbmxldCBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSBzID0gc3RhdGUucHBfZWxsaXBzaXMgPC0gc1xuYW5kIHBwX2dldF9lbGxpcHNpc190ZXh0IHN0YXRlICgpID0gc3RhdGUucHBfZWxsaXBzaXNcblxuXG4oKiBUbyBzZXQgdGhlIG1hcmdpbiBvZiBwcmV0dHktcHJpbnRlci4gKilcbmxldCBwcF9saW1pdCBuID1cbiAgaWYgbiA8IHBwX2luZmluaXR5IHRoZW4gbiBlbHNlIHByZWQgcHBfaW5maW5pdHlcblxuXG4oKiBJbnRlcm5hbCBwcmV0dHktcHJpbnRlciBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIG4gPVxuICBpZiBuID49IDEgdGhlblxuICAgIGxldCBuID0gcHBfbGltaXQgbiBpblxuICAgIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0IDwtIG47XG4gICAgc3RhdGUucHBfbWF4X2luZGVudCA8LSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9yaW5pdCBzdGF0ZVxuXG5cbigqIEluaXRpYWxseSwgd2UgaGF2ZSA6XG4gICBwcF9tYXhfaW5kZW50ID0gcHBfbWFyZ2luIC0gcHBfbWluX3NwYWNlX2xlZnQsIGFuZFxuICAgcHBfc3BhY2VfbGVmdCA9IHBwX21hcmdpbi4gKilcbmxldCBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuID1cbiAgaWYgbiA+IDEgdGhlblxuICAgIHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSAoc3RhdGUucHBfbWFyZ2luIC0gbilcblxuXG5sZXQgcHBfZ2V0X21heF9pbmRlbnQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXhfaW5kZW50XG5cbmxldCBwcF9zZXRfbWFyZ2luIHN0YXRlIG4gPVxuICBpZiBuID49IDEgdGhlblxuICAgIGxldCBuID0gcHBfbGltaXQgbiBpblxuICAgIHN0YXRlLnBwX21hcmdpbiA8LSBuO1xuICAgIGxldCBuZXdfbWF4X2luZGVudCA9XG4gICAgICAoKiBUcnkgdG8gbWFpbnRhaW4gbWF4X2luZGVudCB0byBpdHMgYWN0dWFsIHZhbHVlLiAqKVxuICAgICAgaWYgc3RhdGUucHBfbWF4X2luZGVudCA8PSBzdGF0ZS5wcF9tYXJnaW5cbiAgICAgIHRoZW4gc3RhdGUucHBfbWF4X2luZGVudCBlbHNlXG4gICAgICAoKiBJZiBwb3NzaWJsZSBtYWludGFpbiBwcF9taW5fc3BhY2VfbGVmdCB0byBpdHMgYWN0dWFsIHZhbHVlLFxuICAgICAgICAgaWYgdGhpcyBsZWFkcyB0byBhIHRvbyBzbWFsbCBtYXhfaW5kZW50LCB0YWtlIGhhbGYgb2YgdGhlXG4gICAgICAgICBuZXcgbWFyZ2luLCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMS4gKilcbiAgICAgICBJbnQubWF4IChJbnQubWF4IChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdClcbiAgICAgICAgICAgICAgICAoc3RhdGUucHBfbWFyZ2luIC8gMikpIDEgaW5cbiAgICAoKiBSZWJ1aWxkIGludmFyaWFudHMuICopXG4gICAgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbmV3X21heF9pbmRlbnRcblxuXG4oKiogR2VvbWV0cnkgZnVuY3Rpb25zIGFuZCB0eXBlcyAqKVxudHlwZSBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDppbnQ7IG1hcmdpbjogaW50fVxuXG5sZXQgdmFsaWRhdGVfZ2VvbWV0cnkge21hcmdpbjsgbWF4X2luZGVudH0gPVxuICBpZiBtYXhfaW5kZW50IDwgMiB0aGVuXG4gICAgRXJyb3IgXCJtYXhfaW5kZW50IDwgMlwiXG4gIGVsc2UgaWYgbWFyZ2luIDw9IG1heF9pbmRlbnQgdGhlblxuICAgIEVycm9yIFwibWFyZ2luIDw9IG1heF9pbmRlbnRcIlxuICBlbHNlIE9rICgpXG5cbmxldCBjaGVja19nZW9tZXRyeSBnZW9tZXRyeSA9XG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBPayAoKSAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmdpblxuXG5sZXQgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUge21hcmdpbjsgbWF4X2luZGVudH0gPVxuICBwcF9zZXRfbWFyZ2luIHN0YXRlIG1hcmdpbjtcbiAgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbWF4X2luZGVudDtcbiAgKClcblxubGV0IHBwX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgbXNnIC0+XG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgKFwiRm9ybWF0LnBwX3NldF9nZW9tZXRyeTogXCIgXiBtc2cpKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBfbXNnIC0+XG4gICAgICgpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpID1cbiAgeyBtYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0YXRlICgpOyBtYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RhdGUgKCkgfVxuXG5sZXQgcHBfdXBkYXRlX2dlb21ldHJ5IHN0YXRlIHVwZGF0ZSA9XG4gIGxldCBnZW9tZXRyeSA9IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSBpblxuICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSAodXBkYXRlIGdlb21ldHJ5KVxuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgIG91dF9zdHJpbmcgPSBmO1xuICAgICAgb3V0X2ZsdXNoID0gZztcbiAgICAgIG91dF9uZXdsaW5lID0gaDtcbiAgICAgIG91dF9zcGFjZXMgPSBpO1xuICAgICAgb3V0X2luZGVudCA9IGo7XG4gICAgfSA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjtcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGc7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGg7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gaTtcbiAgc3RhdGUucHBfb3V0X2luZGVudCA8LSBqXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUgKCkgPSB7XG4gIG91dF9zdHJpbmcgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nO1xuICBvdXRfZmx1c2ggPSBzdGF0ZS5wcF9vdXRfZmx1c2g7XG4gIG91dF9uZXdsaW5lID0gc3RhdGUucHBfb3V0X25ld2xpbmU7XG4gIG91dF9zcGFjZXMgPSBzdGF0ZS5wcF9vdXRfc3BhY2VzO1xuICBvdXRfaW5kZW50ID0gc3RhdGUucHBfb3V0X2luZGVudDtcbn1cblxuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIHN0cmluZyBvdXRwdXQgYW5kIGZsdXNoIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgZiBnID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmOyBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZ1xuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaClcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfbmV3bGluZSBzdGF0ZSAoKSA9IHN0YXRlLnBwX291dF9zdHJpbmcgXCJcXG5cIiAwICAxXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBzcGFjZXMuICopXG5sZXQgYmxhbmtfbGluZSA9IFN0cmluZy5tYWtlIDgwICcgJ1xubGV0IHJlYyBkaXNwbGF5X2JsYW5rcyBzdGF0ZSBuID1cbiAgaWYgbiA+IDAgdGhlblxuICBpZiBuIDw9IDgwIHRoZW4gc3RhdGUucHBfb3V0X3N0cmluZyBibGFua19saW5lIDAgbiBlbHNlXG4gIGJlZ2luXG4gICAgc3RhdGUucHBfb3V0X3N0cmluZyBibGFua19saW5lIDAgODA7XG4gICAgZGlzcGxheV9ibGFua3Mgc3RhdGUgKG4gLSA4MClcbiAgZW5kXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IGluZGVudGF0aW9uIG9mIG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X2luZGVudCA9IGRpc3BsYXlfYmxhbmtzXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucyBhcyBwcmludGluZyB0byBhIGdpdmVuXG4gICBbUGVydmFzaXZlLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHN0YXRlIG9jID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBvdXRwdXRfc3Vic3RyaW5nIG9jO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gKGZ1biAoKSAtPiBmbHVzaCBvYyk7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBzdGF0ZTtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBkaXNwbGF5X2JsYW5rcyBzdGF0ZTtcbiAgc3RhdGUucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBzdGF0ZVxuXG4oKlxuXG4gIERlZmluaW5nIHNwZWNpZmljIGZvcm1hdHRlcnNcblxuKilcblxubGV0IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nX3RhZyBzIC0+IFwiPFwiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5sZXQgZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nX3RhZyBzIC0+IFwiPC9cIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxuXG5sZXQgZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyA9IGlnbm9yZVxubGV0IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnID0gaWdub3JlXG5cbigqIEJ1aWxkaW5nIGEgZm9ybWF0dGVyIGdpdmVuIGl0cyBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLlxuICAgT3RoZXIgZmllbGRzIGdldCByZWFzb25hYmxlIGRlZmF1bHQgdmFsdWVzLiAqKVxubGV0IHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgaiA9XG4gICgqIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBmb3JtYXR0ZXIgY29udGFpbnMgYSBkdW1teSBib3guICopXG4gIGxldCBwcF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICBsZXQgc3lzX3RvayA9XG4gICAgeyBzaXplID0gU2l6ZS51bmtub3duOyB0b2tlbiA9IFBwX2JlZ2luICgwLCBQcF9ob3Zib3gpOyBsZW5ndGggPSAwIH0gaW5cbiAgUXVldWUuYWRkIHN5c190b2sgcHBfcXVldWU7XG4gIGxldCBzY2FuX3N0YWNrID0gU3RhY2suY3JlYXRlICgpIGluXG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzY2FuX3N0YWNrO1xuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IDE7IHF1ZXVlX2VsZW0gPSBzeXNfdG9rIH0gc2Nhbl9zdGFjaztcbiAgbGV0IHBwX21hcmdpbiA9IDc4XG4gIGFuZCBwcF9taW5fc3BhY2VfbGVmdCA9IDEwIGluXG4gIHtcbiAgICBwcF9zY2FuX3N0YWNrID0gc2Nhbl9zdGFjaztcbiAgICBwcF9mb3JtYXRfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGJveF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90YWdfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFya19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJnaW4gPSBwcF9tYXJnaW47XG4gICAgcHBfbWluX3NwYWNlX2xlZnQgPSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9tYXhfaW5kZW50ID0gcHBfbWFyZ2luIC0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfc3BhY2VfbGVmdCA9IHBwX21hcmdpbjtcbiAgICBwcF9jdXJyZW50X2luZGVudCA9IDA7XG4gICAgcHBfaXNfbmV3X2xpbmUgPSB0cnVlO1xuICAgIHBwX2xlZnRfdG90YWwgPSAxO1xuICAgIHBwX3JpZ2h0X3RvdGFsID0gMTtcbiAgICBwcF9jdXJyX2RlcHRoID0gMTtcbiAgICBwcF9tYXhfYm94ZXMgPSBtYXhfaW50O1xuICAgIHBwX2VsbGlwc2lzID0gXCIuXCI7XG4gICAgcHBfb3V0X3N0cmluZyA9IGY7XG4gICAgcHBfb3V0X2ZsdXNoID0gZztcbiAgICBwcF9vdXRfbmV3bGluZSA9IGg7XG4gICAgcHBfb3V0X3NwYWNlcyA9IGk7XG4gICAgcHBfb3V0X2luZGVudCA9IGo7XG4gICAgcHBfcHJpbnRfdGFncyA9IGZhbHNlO1xuICAgIHBwX21hcmtfdGFncyA9IGZhbHNlO1xuICAgIHBwX21hcmtfb3Blbl90YWcgPSBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWc7XG4gICAgcHBfbWFya19jbG9zZV90YWcgPSBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnO1xuICAgIHBwX3ByaW50X29wZW5fdGFnID0gZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZztcbiAgICBwcF9wcmludF9jbG9zZV90YWcgPSBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZztcbiAgICBwcF9xdWV1ZSA9IHBwX3F1ZXVlO1xuICB9XG5cblxuKCogQnVpbGQgYSBmb3JtYXR0ZXIgb3V0IG9mIGl0cyBvdXQgZnVuY3Rpb25zLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfZnVuY3Rpb25zIG91dF9mdW5zID1cbiAgcHBfbWFrZV9mb3JtYXR0ZXJcbiAgICBvdXRfZnVucy5vdXRfc3RyaW5nXG4gICAgb3V0X2Z1bnMub3V0X2ZsdXNoXG4gICAgb3V0X2Z1bnMub3V0X25ld2xpbmVcbiAgICBvdXRfZnVucy5vdXRfc3BhY2VzXG4gICAgb3V0X2Z1bnMub3V0X2luZGVudFxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd2l0aCBkZWZhdWx0IGZ1bmN0aW9ucyB0byBvdXRwdXQgc3BhY2VzLFxuICBpbmRlbnRhdGlvbiwgYW5kIG5ldyBsaW5lcy4gKilcbmxldCBtYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggPVxuICBsZXQgcHBmID0gcHBfbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoIGlnbm9yZSBpZ25vcmUgaWdub3JlIGluXG4gIHBwZi5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgcHBmO1xuICBwcGYucHBfb3V0X3NwYWNlcyA8LSBkaXNwbGF5X2JsYW5rcyBwcGY7XG4gIHBwZi5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHBwZjtcbiAgcHBmXG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3cml0aW5nIHRvIGEgZ2l2ZW4gW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9jaGFubmVsIG9jID1cbiAgbWFrZV9mb3JtYXR0ZXIgKG91dHB1dF9zdWJzdHJpbmcgb2MpIChmdW4gKCkgLT4gZmx1c2ggb2MpXG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3cml0aW5nIHRvIGEgZ2l2ZW4gW0J1ZmZlci50XSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgPVxuICBtYWtlX2Zvcm1hdHRlciAoQnVmZmVyLmFkZF9zdWJzdHJpbmcgYikgaWdub3JlXG5cblxuKCogQWxsb2NhdGluZyBidWZmZXIgZm9yIHByZXR0eS1wcmludGluZyBwdXJwb3Nlcy5cbiAgIERlZmF1bHQgYnVmZmVyIHNpemUgaXMgcHBfYnVmZmVyX3NpemUgb3IgNTEyLlxuKilcbmxldCBwcF9idWZmZXJfc2l6ZSA9IDUxMlxubGV0IHBwX21ha2VfYnVmZmVyICgpID0gQnVmZmVyLmNyZWF0ZSBwcF9idWZmZXJfc2l6ZVxuXG4oKiBUaGUgc3RhbmRhcmQgKHNoYXJlZCkgYnVmZmVyLiAqKVxubGV0IHN0ZGJ1ZiA9IHBwX21ha2VfYnVmZmVyICgpXG5cbigqIFByZWRlZmluZWQgZm9ybWF0dGVycyBzdGFuZGFyZCBmb3JtYXR0ZXIgdG8gcHJpbnRcbiAgIHRvIFtTdGRsaWIuc3Rkb3V0XSwgW1N0ZGxpYi5zdGRlcnJdLCBhbmQgeyFzdGRidWZ9LiAqKVxubGV0IHN0ZF9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgU3RkbGliLnN0ZG91dFxuYW5kIGVycl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgU3RkbGliLnN0ZGVyclxuYW5kIHN0cl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIHN0ZGJ1ZlxuXG5cbigqIFtmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGJ1ZiBwcGZdIGZsdXNoZXMgZm9ybWF0dGVyIFtwcGZdLFxuICAgdGhlbiByZXR1cm5zIHRoZSBjb250ZW50cyBvZiBidWZmZXIgW2J1Zl0gdGhhdCBpcyByZXNldC5cbiAgIEZvcm1hdHRlciBbcHBmXSBpcyBzdXBwb3NlZCB0byBwcmludCB0byBidWZmZXIgW2J1Zl0sIG90aGVyd2lzZSB0aGlzXG4gICBmdW5jdGlvbiBpcyBub3QgcmVhbGx5IHVzZWZ1bC4gKilcbmxldCBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGJ1ZiBwcGYgPVxuICBwcF9mbHVzaF9xdWV1ZSBwcGYgZmFsc2U7XG4gIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICBCdWZmZXIucmVzZXQgYnVmO1xuICBzXG5cblxuKCogRmx1c2ggW3N0cl9mb3JtYXR0ZXJdIGFuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIFtzdGRidWZdLiAqKVxubGV0IGZsdXNoX3N0cl9mb3JtYXR0ZXIgKCkgPSBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIHN0ZGJ1ZiBzdHJfZm9ybWF0dGVyXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZ1xuKilcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nIGlzIHByZXR0eS1wcmludGluZyB3aXRoIG5vIGxvdyBsZXZlbCBvdXRwdXQuXG5cbiAgV2hlbiB1c2luZyBhIHN5bWJvbGljIGZvcm1hdHRlciwgYWxsIHJlZ3VsYXIgcHJldHR5LXByaW50aW5nIGFjdGl2aXRpZXNcbiAgb2NjdXIgYnV0IG91dHB1dCBtYXRlcmlhbCBpcyBzeW1ib2xpYyBhbmQgc3RvcmVkIGluIGEgYnVmZmVyIG9mIG91dHB1dFxuICBpdGVtcy4gQXQgdGhlIGVuZCBvZiBwcmV0dHktcHJpbnRpbmcsIGZsdXNoaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGFsbG93c1xuICBwb3N0LXByb2Nlc3Npbmcgb2Ygc3ltYm9saWMgb3V0cHV0IGJlZm9yZSBsb3cgbGV2ZWwgb3V0cHV0IG9wZXJhdGlvbnMuXG4qKVxuXG50eXBlIHN5bWJvbGljX291dHB1dF9pdGVtID1cbiAgfCBPdXRwdXRfZmx1c2hcbiAgfCBPdXRwdXRfbmV3bGluZVxuICB8IE91dHB1dF9zdHJpbmcgb2Ygc3RyaW5nXG4gIHwgT3V0cHV0X3NwYWNlcyBvZiBpbnRcbiAgfCBPdXRwdXRfaW5kZW50IG9mIGludFxuXG50eXBlIHN5bWJvbGljX291dHB1dF9idWZmZXIgPSB7XG4gIG11dGFibGUgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDogc3ltYm9saWNfb3V0cHV0X2l0ZW0gbGlzdDtcbn1cblxubGV0IG1ha2Vfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciAoKSA9XG4gIHsgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzID0gW10gfVxuXG5sZXQgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIFtdXG5cbmxldCBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBMaXN0LnJldiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBpdGVtcyA9IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiBpblxuICBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYjtcbiAgaXRlbXNcblxubGV0IGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgaXRlbSA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gaXRlbSA6OiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmb3JtYXR0ZXJfb2Zfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgc3ltYm9saWNfZmx1c2ggc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9mbHVzaFxuICBhbmQgc3ltYm9saWNfbmV3bGluZSBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X25ld2xpbmVcbiAgYW5kIHN5bWJvbGljX3N0cmluZyBzb2IgcyBpIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zdHJpbmcgKFN0cmluZy5zdWIgcyBpIG4pKVxuICBhbmQgc3ltYm9saWNfc3BhY2VzIHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3BhY2VzIG4pXG4gIGFuZCBzeW1ib2xpY19pbmRlbnQgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9pbmRlbnQgbikgaW5cblxuICBsZXQgZiA9IHN5bWJvbGljX3N0cmluZyBzb2JcbiAgYW5kIGcgPSBzeW1ib2xpY19mbHVzaCBzb2JcbiAgYW5kIGggPSBzeW1ib2xpY19uZXdsaW5lIHNvYlxuICBhbmQgaSA9IHN5bWJvbGljX3NwYWNlcyBzb2JcbiAgYW5kIGogPSBzeW1ib2xpY19pbmRlbnQgc29iIGluXG4gIHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgalxuXG4oKlxuXG4gIEJhc2ljIGZ1bmN0aW9ucyBvbiB0aGUgJ3N0YW5kYXJkJyBmb3JtYXR0ZXJcbiAgKHRoZSBmb3JtYXR0ZXIgdGhhdCBwcmludHMgdG8gW1N0ZGxpYi5zdGRvdXRdKS5cblxuKilcblxubGV0IG9wZW5faGJveCA9IHBwX29wZW5faGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl92Ym94ID0gcHBfb3Blbl92Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2h2Ym94ID0gcHBfb3Blbl9odmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9ob3Zib3ggPSBwcF9vcGVuX2hvdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9ib3ggPSBwcF9vcGVuX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfYm94ID0gcHBfY2xvc2VfYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3RhZyA9IHBwX29wZW5fdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90YWcgPSBwcF9jbG9zZV90YWcgc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fc3RhZyA9IHBwX29wZW5fc3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2Vfc3RhZyA9IHBwX2Nsb3NlX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2FzID0gcHBfcHJpbnRfYXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3N0cmluZyA9IHBwX3ByaW50X3N0cmluZyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYnl0ZXMgPSBwcF9wcmludF9ieXRlcyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaW50ID0gcHBfcHJpbnRfaW50IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbG9hdCA9IHBwX3ByaW50X2Zsb2F0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jaGFyID0gcHBfcHJpbnRfY2hhciBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYm9vbCA9IHBwX3ByaW50X2Jvb2wgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2JyZWFrID0gcHBfcHJpbnRfYnJlYWsgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2N1dCA9IHBwX3ByaW50X2N1dCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfc3BhY2UgPSBwcF9wcmludF9zcGFjZSBzdGRfZm9ybWF0dGVyXG5hbmQgZm9yY2VfbmV3bGluZSA9IHBwX2ZvcmNlX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ZsdXNoID0gcHBfcHJpbnRfZmx1c2ggc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X25ld2xpbmUgPSBwcF9wcmludF9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9pZl9uZXdsaW5lID0gcHBfcHJpbnRfaWZfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBvcGVuX3Rib3ggPSBwcF9vcGVuX3Rib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3Rib3ggPSBwcF9jbG9zZV90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YnJlYWsgPSBwcF9wcmludF90YnJlYWsgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X3RhYiA9IHBwX3NldF90YWIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3RhYiA9IHBwX3ByaW50X3RhYiBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWFyZ2luID0gcHBfc2V0X21hcmdpbiBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21heF9pbmRlbnQgPSBwcF9zZXRfbWF4X2luZGVudCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZ2VvbWV0cnkgPSBwcF9zZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHNhZmVfc2V0X2dlb21ldHJ5ID0gcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9nZW9tZXRyeSA9IHBwX2dldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgdXBkYXRlX2dlb21ldHJ5ID0gcHBfdXBkYXRlX2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfYm94ZXMgPSBwcF9zZXRfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWF4X2JveGVzID0gcHBfZ2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgb3Zlcl9tYXhfYm94ZXMgPSBwcF9vdmVyX21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZWxsaXBzaXNfdGV4dCA9IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZWxsaXBzaXNfdGV4dCA9IHBwX2dldF9lbGxpcHNpc190ZXh0IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3ByaW50X3RhZ3MgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X3ByaW50X3RhZ3MgPVxuICBwcF9nZXRfcHJpbnRfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X21hcmtfdGFncyA9XG4gIHBwX3NldF9tYXJrX3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJrX3RhZ3MgPVxuICBwcF9nZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfdGFncyA9XG4gIHBwX3NldF90YWdzIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgKilcblxuKCogVG8gZm9ybWF0IGEgbGlzdCAqKVxubGV0IHJlYyBwcF9wcmludF9saXN0ID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKClcbiAgfCBbdl0gLT4gcHBfdiBwcGYgdlxuICB8IHYgOjogdnMgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfcHJpbnRfbGlzdCB+cHBfc2VwIHBwX3YgcHBmIHZzXG5cbigqIFRvIGZvcm1hdCBhIHNlcXVlbmNlICopXG5sZXQgcmVjIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiAoKVxuICB8IFNlcS5Db25zICh2LCBzZXEpIC0+XG4gICAgcHBfc2VwIHBwZiAoKTtcbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG5sZXQgcHBfcHJpbnRfc2VxID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxXG5cbigqIFRvIGZvcm1hdCBmcmVlLWZsb3dpbmcgdGV4dCAqKVxubGV0IHBwX3ByaW50X3RleHQgcHBmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBsZWZ0ID0gcmVmIDAgaW5cbiAgbGV0IHJpZ2h0ID0gcmVmIDAgaW5cbiAgbGV0IGZsdXNoICgpID1cbiAgICBwcF9wcmludF9zdHJpbmcgcHBmIChTdHJpbmcuc3ViIHMgIWxlZnQgKCFyaWdodCAtICFsZWZ0KSk7XG4gICAgaW5jciByaWdodDsgbGVmdCA6PSAhcmlnaHQ7XG4gIGluXG4gIHdoaWxlICghcmlnaHQgPD4gbGVuKSBkb1xuICAgIG1hdGNoIHMuWyFyaWdodF0gd2l0aFxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBmbHVzaCAoKTtcbiAgICAgICAgcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGZsdXNoICgpOyBwcF9wcmludF9zcGFjZSBwcGYgKClcbiAgICAgICgqIHRoZXJlIGlzIG5vIHNwZWNpZmljIHN1cHBvcnQgZm9yICdcXHQnXG4gICAgICAgICBhcyBpdCBpcyB1bmNsZWFyIHdoYXQgYSByaWdodCBzZW1hbnRpY3Mgd291bGQgYmUgKilcbiAgICAgIHwgXyAtPiBpbmNyIHJpZ2h0XG4gIGRvbmU7XG4gIGlmICFsZWZ0IDw+IGxlbiB0aGVuIGZsdXNoICgpXG5cbmxldCBwcF9wcmludF9vcHRpb24gPyhub25lID0gZnVuIF8gKCkgLT4gKCkpIHBwX3YgcHBmID0gZnVuY3Rpb25cbnwgTm9uZSAtPiBub25lIHBwZiAoKVxufCBTb21lIHYgLT4gcHBfdiBwcGYgdlxuXG5sZXQgcHBfcHJpbnRfcmVzdWx0IH5vayB+ZXJyb3IgcHBmID0gZnVuY3Rpb25cbnwgT2sgdiAtPiBvayBwcGYgdlxufCBFcnJvciBlIC0+IGVycm9yIHBwZiBlXG5cbmxldCBwcF9wcmludF9laXRoZXIgfmxlZnQgfnJpZ2h0IHBwZiA9IGZ1bmN0aW9uXG58IEVpdGhlci5MZWZ0IGwgLT4gbGVmdCBwcGYgbFxufCBFaXRoZXIuUmlnaHQgciAtPiByaWdodCBwcGYgclxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5sZXQgY29tcHV0ZV90YWcgb3V0cHV0IHRhZ19hY2MgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgb3V0cHV0IHBwZiB0YWdfYWNjO1xuICBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBpZiBsZW4gPCAyIHRoZW4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICBlbHNlIEJ1ZmZlci5zdWIgYnVmIDEgKGxlbiAtIDIpXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICBEZWZpbmluZyBjb250aW51YXRpb25zIHRvIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgb2ZcbiAgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLlxuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxuKCogSW50ZXJwcmV0IGEgZm9ybWF0dGluZyBlbnRpdHkgb24gYSBmb3JtYXR0ZXIuICopXG5sZXQgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmbXRpbmdfbGl0ID0gbWF0Y2ggZm10aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9ib3ggcHBmICgpXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV90YWcgcHBmICgpXG4gIHwgQnJlYWsgKF8sIHdpZHRoLCBvZmZzZXQpICAtPiBwcF9wcmludF9icmVhayBwcGYgd2lkdGggb2Zmc2V0XG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9mbHVzaCBwcGYgKClcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgIC0+IHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9wcmludF9uZXdsaW5lIHBwZiAoKVxuICB8IE1hZ2ljX3NpemUgKF8sIF8pICAgICAgICAgLT4gKClcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICdAJ1xuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJyUnXG4gIHwgU2Nhbl9pbmRpYyBjICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCc7IHBwX3ByaW50X2NoYXIgcHBmIGNcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogRGlmZmVyIGZyb20gUHJpbnRmLm91dHB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mIGZvcm1hdHRpbmcuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBwcGYgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoU3RyaW5nLm1ha2UgMSBjKTtcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGYpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGY7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX29wZW5fc3RhZyBwcGYgKFN0cmluZ190YWcgKGNvbXB1dGVfdGFnIG91dHB1dF9hY2MgYWNjJykpXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIGxldCAoaW5kZW50LCBidHkpID0gb3Blbl9ib3hfb2Zfc3RyaW5nIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpIGluXG4gICAgcHBfb3Blbl9ib3hfZ2VuIHBwZiBpbmRlbnQgYnR5XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfY2hhciBwcGYgYztcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgZiBwcGY7XG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBwcGYgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogRGlmZmVyIGZyb20gUHJpbnRmLmJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mIGZvcm1hdHRpbmcuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi4gKilcbmxldCByZWMgc3RycHV0X2FjYyBwcGYgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoU3RyaW5nLm1ha2UgMSBjKTtcbiAgfCBBY2NfZGVsYXkgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChmICgpKTtcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGYpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGY7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX29wZW5fc3RhZyBwcGYgKFN0cmluZ190YWcgKGNvbXB1dGVfdGFnIHN0cnB1dF9hY2MgYWNjJykpXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIGxldCAoaW5kZW50LCBidHkpID0gb3Blbl9ib3hfb2Zfc3RyaW5nIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpIGluXG4gICAgcHBfb3Blbl9ib3hfZ2VuIHBwZiBpbmRlbnQgYnR5XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfY2hhciBwcGYgYztcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiAoZiAoKSk7XG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBwcGYgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKlxuXG4gIERlZmluaW5nIFtmcHJpbnRmXSBhbmQgdmFyaW91cyBmbGF2b3JzIG9mIFtmcHJpbnRmXS5cblxuKilcblxubGV0IGtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIHBwZiBhY2M7IGsgcHBmKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmFuZCBpa2ZwcmludGYgayBwcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBwcGYgZm10XG5cbmxldCBpZnByaW50ZiBfcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGlnbm9yZSAoKSBmbXRcblxubGV0IGZwcmludGYgcHBmID0ga2ZwcmludGYgaWdub3JlIHBwZlxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZF9mb3JtYXR0ZXIgZm10XG5sZXQgZXByaW50ZiBmbXQgPSBmcHJpbnRmIGVycl9mb3JtYXR0ZXIgZm10XG5cbmxldCBrZHByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBrIChmdW4gcHBmIC0+IG91dHB1dF9hY2MgcHBmIGFjYykpXG4gICAgRW5kX29mX2FjYyBmbXRcblxubGV0IGRwcmludGYgZm10ID0ga2RwcmludGYgKGZ1biBpIC0+IGkpIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBiID0gcHBfbWFrZV9idWZmZXIgKCkgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPVxuICAgIHN0cnB1dF9hY2MgcHBmIGFjYztcbiAgICBrIChmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGIgcHBmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgaWQgZm10XG5cbmxldCBrYXNwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBiID0gcHBfbWFrZV9idWZmZXIgKCkgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPVxuICAgIG91dHB1dF9hY2MgcHBmIGFjYztcbiAgICBrIChmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGIgcHBmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxubGV0IGFzcHJpbnRmIGZtdCA9IGthc3ByaW50ZiBpZCBmbXRcblxuKCogRmx1c2hpbmcgc3RhbmRhcmQgZm9ybWF0dGVycyBhdCBlbmQgb2YgZXhlY3V0aW9uLiAqKVxuXG5sZXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyAoKSA9XG4gIHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXIgKCk7XG4gIHBwX3ByaW50X2ZsdXNoIGVycl9mb3JtYXR0ZXIgKClcblxubGV0ICgpID0gYXRfZXhpdCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzXG5cbigqXG5cbiAgRGVwcmVjYXRlZCBzdHVmZi5cblxuKilcblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGVcbiAgICB+b3V0OmYgfmZsdXNoOmcgfm5ld2xpbmU6aCB+c3BhY2VzOmkgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgZiBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGlcblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoLFxuICAgc3RhdGUucHBfb3V0X25ld2xpbmUsIHN0YXRlLnBwX291dF9zcGFjZXMpXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHNldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHNldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5cbigqIERlcHJlY2F0ZWQgOiBlcnJvciBwcm9uZSBmdW5jdGlvbiwgZG8gbm90IHVzZSBpdC5cbiAgIFRoaXMgZnVuY3Rpb24gaXMgbmVpdGhlciBjb21wb3NpdGlvbmFsIG5vciBpbmNyZW1lbnRhbCwgc2luY2UgaXQgZmx1c2hlc1xuICAgdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGF0IGVhY2ggY2FsbC5cbiAgIFRvIGdldCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LCBkZWZpbmUgYSBmb3JtYXR0ZXIgb2YgeW91ciBvd24gd3JpdGluZyB0b1xuICAgdGhlIGJ1ZmZlciBhcmd1bWVudCwgYXMgaW5cbiAgIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGJcbiAgIHRoZW4gdXNlIHshZnByaW50ZiBwcGZ9IGFzIHVzdWFsLiAqKVxubGV0IGJwcmludGYgYiAoRm9ybWF0IChmbXQsIF8pIDogKCdhLCBmb3JtYXR0ZXIsIHVuaXQpIGZvcm1hdCkgPVxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9IG91dHB1dF9hY2MgcHBmIGFjYzsgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG4oKiBEZXByZWNhdGVkIDogYWxpYXMgZm9yIGtzcHJpbnRmLiAqKVxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuXG5cblxuKCogRGVwcmVjYXRlZCB0YWcgZnVuY3Rpb25zICopXG5cbnR5cGUgZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPSB7XG4gIG1hcmtfb3Blbl90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3RhZyA6IHRhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fdGFnIDogdGFnIC0+IHVuaXQ7XG4gIHByaW50X2Nsb3NlX3RhZyA6IHRhZyAtPiB1bml0O1xufVxuXG5cbmxldCBwcF9zZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3RhZyA9IG1jdDtcbiAgICAgcHJpbnRfb3Blbl90YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3RhZyA9IHBjdDtcbiAgIH0gPVxuICBsZXQgc3RyaW5naWZ5IGYgZSA9IGZ1bmN0aW9uIFN0cmluZ190YWcgcyAtPiBmIHMgfCBfIC0+IGUgaW5cbiAgc3RhdGUucHBfbWFya19vcGVuX3RhZyA8LSBzdHJpbmdpZnkgbW90IFwiXCI7XG4gIHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBtY3QgXCJcIjtcbiAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgPC0gc3RyaW5naWZ5IHBvdCAoKTtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBwY3QgKClcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBmbXQgKCkgPVxuICBsZXQgZnVucyA9IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgZm10ICgpIGluXG4gIGxldCBtYXJrX29wZW5fdGFnIHMgPSBmdW5zLm1hcmtfb3Blbl9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBtYXJrX2Nsb3NlX3RhZyBzID0gZnVucy5tYXJrX2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X29wZW5fdGFnIHMgPSBmdW5zLnByaW50X29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgcHJpbnRfY2xvc2VfdGFnIHMgPSBmdW5zLnByaW50X2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAge21hcmtfb3Blbl90YWc7IG1hcmtfY2xvc2VfdGFnOyBwcmludF9vcGVuX3RhZzsgcHJpbnRfY2xvc2VfdGFnfVxuXG5sZXQgc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iLCJtb2R1bGUgSnMgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgdHlwZSAnYSBqc19hcnJheSA9IHRcblxuICB0eXBlICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2sgPSB0XG5cbiAgZXh0ZXJuYWwgc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19zdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcIlxuXG4gIGV4dGVybmFsIGJ5dGVzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc2J5dGVzX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fYnl0ZXN0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzXCJcblxuICBleHRlcm5hbCBib29sIDogYm9vbCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgdG9fYm9vbCA6IHQgLT4gYm9vbCA9IFwiY2FtbF9qc190b19ib29sXCJcblxuICBleHRlcm5hbCBhcnJheSA6ICdhIGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnJvbV9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fYXJyYXkgOiB0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2pzX3RvX2FycmF5XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfZmxvYXQgOiBmbG9hdCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG4gIGV4dGVybmFsIGZsb2F0X29mX251bWJlciA6IHQgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9pbnQzMiA6IGludDMyIC0+IHQgPSBcImNhbWxfanNfZnJvbV9pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgaW50MzJfb2ZfbnVtYmVyIDogdCAtPiBpbnQzMiA9IFwiY2FtbF9qc190b19pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCBuYXRpdmVpbnRfb2ZfbnVtYmVyIDogdCAtPiBuYXRpdmVpbnQgPSBcImNhbWxfanNfdG9fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCB0eXBlb2YgOiB0IC0+IHQgPSBcImNhbWxfanNfdHlwZW9mXCJcblxuICBleHRlcm5hbCBpbnN0YW5jZW9mIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfaW5zdGFuY2VvZlwiXG5cbiAgZXh0ZXJuYWwgZGVidWdnZXIgOiB1bml0IC0+IHVuaXQgPSBcImRlYnVnZ2VyXCJcblxuICBleHRlcm5hbCBnZXQgOiB0IC0+IHQgLT4gdCA9IFwiY2FtbF9qc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldCA6IHQgLT4gdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfc2V0XCJcblxuICBleHRlcm5hbCBkZWxldGUgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19kZWxldGVcIlxuXG4gIGV4dGVybmFsIGNhbGwgOiB0IC0+IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2NhbGxcIlxuXG4gIGV4dGVybmFsIGZ1bl9jYWxsIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnVuX2NhbGxcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbCA6IHQgLT4gc3RyaW5nIC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19tZXRoX2NhbGxcIlxuXG4gIGV4dGVybmFsIG5ld19vYmogOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19uZXdcIlxuXG4gIGV4dGVybmFsIG5ld19vYmpfYXJyIDogdCAtPiB0IGpzX2FycmF5IC0+IHQgPSBcImNhbWxfb2pzX25ld19hcnJcIlxuXG4gIGV4dGVybmFsIG9iaiA6IChzdHJpbmcgKiB0KSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX29iamVjdFwiXG5cbiAgZXh0ZXJuYWwgZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgcHVyZV9leHByIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2pzX3B1cmVfZXhwclwiXG5cbiAgZXh0ZXJuYWwgZXZhbF9zdHJpbmcgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXZhbF9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGpzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgcHVyZV9qc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX3B1cmVfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICh0IGpzX2FycmF5IC0+ICdiKSAtPiAoJ2MsIHQganNfYXJyYXkgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAoJ2IgLT4gdCBqc19hcnJheSAtPiAnYSkgLT4gKCdiLCB0IGpzX2FycmF5IC0+ICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tcIlxuXG4gIGV4dGVybmFsIHdyYXBfbWV0aF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdhLCAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja1wiXG5lbmRcblxubW9kdWxlIFN5cyA9IHN0cnVjdFxuICB0eXBlICdhIGNhbGxiYWNrID0gJ2FcblxuICBleHRlcm5hbCBjcmVhdGVfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IGNvbnRlbnQ6c3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfY3JlYXRlX2ZpbGVcIlxuXG4gIGV4dGVybmFsIHJlYWRfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IHN0cmluZyA9IFwiY2FtbF9yZWFkX2ZpbGVfY29udGVudFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfb3V0cHV0JyA6IG91dF9jaGFubmVsIC0+IChqc19zdHJpbmc6SnMudCAtPiB1bml0KSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9pbnB1dCcgOiBpbl9jaGFubmVsIC0+ICh1bml0IC0+IHN0cmluZykgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfcG9pbnQgOiB1bml0IC0+IHN0cmluZyBsaXN0ID0gXCJjYW1sX2xpc3RfbW91bnRfcG9pbnRcIlxuXG4gIGV4dGVybmFsIG1vdW50X2F1dG9sb2FkIDogc3RyaW5nIC0+IChzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb24pIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tb3VudF9hdXRvbG9hZFwiXG5cbiAgZXh0ZXJuYWwgdW5tb3VudCA6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3VubW91bnRcIlxuXG4gIHR5cGUgcmVkaXJlY3Rpb25cblxuICBleHRlcm5hbCByZWRpcmVjdF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gaW50bzpvdXRfY2hhbm5lbCAtPiByZWRpcmVjdGlvblxuICAgID0gXCJjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3RcIlxuXG4gIGV4dGVybmFsIHJlc3RvcmVfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHJlZGlyZWN0aW9uIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmVcIlxuXG4gIG1vZHVsZSBDb25maWcgPSBzdHJ1Y3RcbiAgICBleHRlcm5hbCB1c2VfanNfc3RyaW5nIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1wiXG5cbiAgICBleHRlcm5hbCBlZmZlY3RzIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1wiXG4gIGVuZFxuXG4gIGxldCB2ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLnNcblxuICBsZXQgZ2l0X3ZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uZ2l0X3ZlcnNpb25cbmVuZFxuXG5tb2R1bGUgRXJyb3IgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHJhaXNlXyA6IHQgLT4gJ2FcblxuICB2YWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4blxuICAoKiogQXR0YWNoIGEgSmF2YXNTY3JpcHQgZXJyb3IgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLiAgaWYgW2ZvcmNlID0gZmFsc2VdIGFuZCBhXG4gICAgSmF2YXNTY3JpcHQgZXJyb3IgaXMgYWxyZWFkeSBhdHRhY2hlZCwgaXQgd2lsbCBkbyBub3RoaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB0b1xuICAgIHN0b3JlIGFuZCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlcy5cblxuICAgIEF0dGFjaGluZyBKYXZhc1NjcmlwdCBlcnJvcnMgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSB3aGVuIGNvbXBpbGluZyB3aXRoXG4gICAgWy0tZW5hYmxlIHdpdGgtanMtZXJyb3JdLiAqKVxuXG4gIHZhbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb25cbiAgKCoqIEV4dHJhY3QgYSBKYXZhU2NyaXB0IGVycm9yIGF0dGFjaGVkIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbiwgaWYgYW55LiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgICAgIGluc3BlY3QgYW4gZXZlbnR1YWwgc3RhY2sgc3RyYWNlLCBlc3BlY2lhbGx5IHdoZW4gc291cmNlbWFwIGlzIGVuYWJsZWQuICopXG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG4gICgqKiBUaGUgW0Vycm9yXSBleGNlcHRpb24gd3JhcCBqYXZhc2NyaXB0IGV4Y2VwdGlvbnMgd2hlbiBjYXVnaHQgYnkgT0NhbWwgY29kZS5cbiAgICAgIEluIGNhc2UgdGhlIGphdmFzY3JpcHQgZXhjZXB0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBqYXZhc2NyaXB0IFtFcnJvcl0sXG4gICAgICBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYW5kIHdyYXBwZWQgaW50byBhIFtGYWlsdXJlXSBleGNlcHRpb24uXG4gICopXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG5cbiAgbGV0IF8gPSBDYWxsYmFjay5yZWdpc3Rlcl9leGNlcHRpb24gXCJqc0Vycm9yXCIgKEV4biAoT2JqLm1hZ2ljIFt8fF0pKVxuXG4gIGxldCByYWlzZV8gOiB0IC0+ICdhID0gSnMuanNfZXhwciBcIihmdW5jdGlvbiAoZXhuKSB7IHRocm93IGV4biB9KVwiXG5cbiAgZXh0ZXJuYWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uID0gXCJjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cIlxuXG4gIGV4dGVybmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG4gPSBcImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXCJcbmVuZFxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMi02MFwiXVxuXG5tb2R1bGUgRm9yX2NvbXBhdGliaWxpdHlfb25seSA9IHN0cnVjdFxuICAoKiBBZGQgcHJpbWl0aXZlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiBFeGlzdGluZyB1c2VycyBtaWdodFxuICAgICBkZXBlbmQgb24gaXQgKGUuZy4gZ2VuX2pzX2FwaSksIHdlIGRvbnQgd2FudCB0aGUgb2NhbWwgY29tcGlsZXJcbiAgICAgdG8gY29tcGxhaW4gYWJvdXQgdGhlc2VzIG1pc3NpbmcgcHJpbWl0aXZlcy4gKilcblxuICBleHRlcm5hbCBjYW1sX2pzX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IEpzLnQgPSBcImNhbWxfanNfZnJvbV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19ieXRlX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF9vZl9qc19hcnJheSA6ICdhIEpzLmpzX2FycmF5IC0+ICdhIGxpc3QgPSBcImNhbWxfbGlzdF9vZl9qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X3RvX2pzX2FycmF5IDogJ2EgbGlzdCAtPiAnYSBKcy5qc19hcnJheSA9IFwiY2FtbF9saXN0X3RvX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCB2YXJpYWJsZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc192YXJcIlxuZW5kXG5cbm1vZHVsZSBUeXBlZF9hcnJheSA9IHN0cnVjdFxuICB0eXBlICgnYSwgJ2IpIHR5cGVkQXJyYXkgPSBKcy50XG5cbiAgdHlwZSBhcnJheUJ1ZmZlciA9IEpzLnRcblxuICB0eXBlIHVpbnQ4QXJyYXkgPSBKcy50XG5cbiAgZXh0ZXJuYWwga2luZCA6ICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYikgQmlnYXJyYXkua2luZFxuICAgID0gXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGZyb21fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50IC0+ICgnYSwgJ2IpIHR5cGVkQXJyYXlcbiAgICA9IFwiY2FtbF9iYV90b190eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnRcbiAgICA9IFwiY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5XCJcblxuICBtb2R1bGUgQmlnc3RyaW5nID0gc3RydWN0XG4gICAgdHlwZSB0ID0gKGNoYXIsIEJpZ2FycmF5LmludDhfdW5zaWduZWRfZWx0LCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuQXJyYXkxLnRcblxuICAgIGV4dGVybmFsIHRvX2FycmF5QnVmZmVyIDogdCAtPiBhcnJheUJ1ZmZlciA9IFwiYmlnc3RyaW5nX3RvX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCB0b191aW50OEFycmF5IDogdCAtPiB1aW50OEFycmF5ID0gXCJiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXlcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfYXJyYXlCdWZmZXIgOiBhcnJheUJ1ZmZlciAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHQgPSBcImJpZ3N0cmluZ19vZl90eXBlZF9hcnJheVwiXG4gIGVuZFxuXG4gIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfYXJyYXlcIlxuZW5kXG5cbm1vZHVsZSBJbnQ2NCA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGVfaW50NjRfbG9fbWlfaGkgOiBpbnQgLT4gaW50IC0+IGludCAtPiBJbnQ2NC50XG4gICAgPSBcImNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXCJcbmVuZFxuIiwib3BlbiEgU3RkXG5vcGVuISBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2Rcbm1vZHVsZSBBID0gQXR0cnNcblxudHlwZSAnYSB2YWxpZGF0aW9uID0gT2sgb2YgJ2EgfCBFcnJvciBvZiBzdHJpbmcgfCBFbXB0eVxudHlwZSBsYWJlbCA9IEVsd2QudCBFbHdkLmNvbFxudHlwZSAnYSBkZXNjID0geyBuYW1lIDogc3RyaW5nOyBkZWZhdWx0IDogJ2E7IGxhYmVsIDogbGFiZWwgfVxuXG4oKiBBIGZvcm0gZmllbGQgaXMgY29tcG9zZWQgb2Y6XG4gICAtIEFuIGh0bWwgaW5wdXQgZWxlbWVudCB3aXRoIHBvdGVudGlhbCB2YWxpZGF0aW9uIHZpYSBhdHRyaWJ1dGVzXG4gICAtIEEgdmFsaWRhdGlvbiBmdW5jdGlvbiB0aGF0IHJlcGxhY2Ugb3IgY29tcGxldGUgdGhlIHN0YW5kYXJkIHZhbGlkYXRpb25cbiAgIC0gQSBmdW5jdGlvbiB0aGF0IHJldGlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCAqKVxudHlwZSAnYSB0ID0ge1xuICBlbHQgOiBFbHdkLnQgTHdkLnQ7XG4gIHZhbHVlIDogJ2Egb3B0aW9uIEx3ZC52YXI7XG4gIHZhbGlkYXRlIDogJ2EgLT4gJ2EgdmFsaWRhdGlvbjtcbn1cblxubGV0IGdldF92YWx1ZSB0ID1cbiAgbGV0IGp2ID0gRWwudG9fanYgdCBpblxuICBKdi5nZXQganYgXCJ2YWx1ZVwiXG5cbmxldCBtYWtlX2hhbmRsZXIgfih2YWx1ZSA6IEp2LnQgLT4gJ2EpIH4odmFsdWVfY2hhbmdlX2V2ZW50IDogXyBFdi50eXBlJylcbiAgICBkZWZhdWx0X3ZhbHVlID1cbiAgbGV0IHZhciA9IEx3ZC52YXIgZGVmYXVsdF92YWx1ZSBpblxuICBsZXQgb25fY2hhbmdlID1cbiAgICBFbHdkLmhhbmRsZXIgdmFsdWVfY2hhbmdlX2V2ZW50IChmdW4gZXYgLT5cbiAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgIGxldCB2ID0gSnYuZ2V0IHQgXCJ2YWx1ZVwiIGluXG4gICAgICAgIEx3ZC5zZXQgdmFyIChTb21lICh2YWx1ZSB2KSkpXG4gIGluXG4gIChvbl9jaGFuZ2UsIHZhcilcblxuKCogVE9ETzogaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gc3BsaXQgdGhlIHZhbGlkYXRpb24gYXBydCBmcm9tIHRoZSBmaWVsZFxuICAgY3JlYXRpb24uIFZhbGlkYXRpb24gbWFrZSBtb3JlIHNlbnNlIGluIHRoZSBjYXNlIG9mIGEgZm9ybS4gVGhlcmUgaXMgYW5cbiAgIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdGV4dCBpbnB1dHMgaW4gYEZpZWxkX3RleHRpbnB1dGAgdGhhdCBzaG91bGRcbiAgIGJlIHVzZWQgaW5zdGVhZC4gKilcbmxldCBtYWtlX2lucHV0IH4odmFsdWUgOiBKdi50IC0+ICdhKSA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXZcbiAgICA/KHJlcXVpcmVkID0gZmFsc2UpIH52YWx1ZV9jaGFuZ2VfZXZlbnQgP3BhdHRlcm4gfnR5cGUnIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgdHlwZScgPSBBdC50eXBlJyAoSnN0ci52IHR5cGUnKSBpblxuICBsZXQgYXQgPSBgUCB0eXBlJyA6OiBhdCBpblxuICBsZXQgYXQgPVxuICAgIGF0IHw+IEEuYWRkX2Jvb2wgQXQucmVxdWlyZWQgcmVxdWlyZWQgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGF0dGVybiBwYXR0ZXJuXG4gIGluXG4gIGxldCB2YWxpZGF0ZSA9IE9wdGlvbi52YWx1ZSB2YWxpZGF0ZSB+ZGVmYXVsdDooZnVuIHYgLT4gT2sgdikgaW5cbiAgbGV0IG9uX2NoYW5nZSwgdmFsdWUgPVxuICAgIG1ha2VfaGFuZGxlciB+dmFsdWUgfnZhbHVlX2NoYW5nZV9ldmVudCBkZWZhdWx0X3ZhbHVlXG4gIGluXG4gIGxldCBldiA9IGBQIG9uX2NoYW5nZSA6OiBPcHRpb24udG9fbGlzdCBldiBpblxuICBsZXQgZWx0ID0gRWx3ZC5pbnB1dCA/ZCB+YXQgfmV2ICgpIGluXG4gIHsgZWx0OyB2YWx1ZTsgdmFsaWRhdGUgfVxuXG5sZXQgdGV4dF9pbnB1dCA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXYgP3JlcXVpcmVkID9wYXR0ZXJuID9wbGFjZWhvbGRlclxuICAgIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgYXQgPVxuICAgIGF0XG4gICAgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGxhY2Vob2xkZXIgcGxhY2Vob2xkZXJcbiAgICB8PiBBLmFkZF9vcHQgQXQuTmFtZS52YWx1ZSBkZWZhdWx0X3ZhbHVlXG4gIGluXG4gIGxldCB2YWx1ZSA9IEp2LnRvX3N0cmluZyBpblxuICBtYWtlX2lucHV0IH52YWx1ZSA/dmFsaWRhdGUgP2QgfmF0ID9ldiA/cmVxdWlyZWQgP3BhdHRlcm5cbiAgICB+dmFsdWVfY2hhbmdlX2V2ZW50OkV2LmtleXVwIH50eXBlJzpcInRleHRcIiBkZWZhdWx0X3ZhbHVlXG5cbmxldCBwYXNzd29yZF9pbnB1dCA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXYgP3JlcXVpcmVkID9wYXR0ZXJuID9wbGFjZWhvbGRlclxuICAgIF92YWx1ZSA9XG4gIGxldCBhdCA9IGF0IHw+IEEuYWRkX29wdCBBdC5OYW1lLnBsYWNlaG9sZGVyIHBsYWNlaG9sZGVyIGluXG4gIGxldCB2YWx1ZSA9IEp2LnRvX3N0cmluZyBpblxuICBtYWtlX2lucHV0IH52YWx1ZSB+dmFsdWVfY2hhbmdlX2V2ZW50OkV2LmtleXVwID92YWxpZGF0ZSA/ZCB+YXQgP2V2ID9yZXF1aXJlZFxuICAgID9wYXR0ZXJuIH50eXBlJzpcInBhc3N3b3JkXCIgTm9uZVxuXG5sZXQgc3VibWl0ID9kID8oYXQgPSBbXSkgP2V2IHRleHQgPVxuICBsZXQgYXQgPSBBLmFkZCBBdC5OYW1lLnZhbHVlIHRleHQgYXQgaW5cbiAgKCogVE9ETyB0aGlzIHNob3VsZCBiZSBtb3JlIHByZWNpc2UuIFN1Ym1pdCBpbnB1dHMgYXJlIGRpZmZlcmVudC4gKilcbiAgbWFrZV9pbnB1dCB+dmFsdWU6aWdub3JlIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYuY2hhbmdlID9kIH5hdCA/ZXZcbiAgICB+dHlwZSc6XCJzdWJtaXRcIiBOb25lXG4iLCJ0eXBlIHQgPSBKdi50XG5cbmV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgeCB0ID0gSnYuZ2V0IHQgXCJ4XCIgfD4gSnYudG9faW50XG5sZXQgeSB0ID0gSnYuZ2V0IHQgXCJ5XCIgfD4gSnYudG9faW50XG5sZXQgd2lkdGggdCA9IEp2LmdldCB0IFwid2lkdGhcIiB8PiBKdi50b19pbnRcbmxldCBoZWlnaHQgdCA9IEp2LmdldCB0IFwiaGVpZ2h0XCIgfD4gSnYudG9faW50XG5sZXQgdG9wIHQgPSBKdi5nZXQgdCBcInRvcFwiIHw+IEp2LnRvX2ludFxubGV0IHJpZ2h0IHQgPSBKdi5nZXQgdCBcInJpZ2h0XCIgfD4gSnYudG9faW50XG5sZXQgYm90dG9tIHQgPSBKdi5nZXQgdCBcImJvdHRvbVwiIHw+IEp2LnRvX2ludFxubGV0IGxlZnQgdCA9IEp2LmdldCB0IFwibGVmdFwiIHw+IEp2LnRvX2ludFxuIiwib3BlbiBCcnJcblxudHlwZSB0ID0gSnYudFxuXG5leHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxubW9kdWxlIEVudHJ5ID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICB0eXBlIGJveF9zaXplID0geyBibG9ja19zaXplIDogaW50OyBpbmxpbmVfc2l6ZSA6IGludCB9XG5cbiAgbGV0IGJveF9zaXplX29mX2p2IGp2ID1cbiAgICB7XG4gICAgICBibG9ja19zaXplID0gSnYuZ2V0IGp2IFwiYmxvY2tTaXplXCIgfD4gSnYudG9faW50O1xuICAgICAgaW5saW5lX3NpemUgPSBKdi5nZXQganYgXCJpbmxpbmVTaXplXCIgfD4gSnYudG9faW50O1xuICAgIH1cblxuICBsZXQgYm9yZGVyX2JveF9zaXplIHQgPSBKdi5nZXQgdCBcImJvcmRlckJveFNpemVcIiB8PiBKdi50b19hcnJheSBib3hfc2l6ZV9vZl9qdlxuXG4gIGxldCBjb250ZW50X2JveF9zaXplIHQgPVxuICAgIEp2LmdldCB0IFwiY29udGVudEJveFNpemVcIiB8PiBKdi50b19hcnJheSBib3hfc2l6ZV9vZl9qdlxuXG4gIGxldCBjb250ZW50X3JlY3QgdCA9IEp2LmdldCB0IFwiY29udGVudFJlY3RcIiB8PiBEb21fcmVjdF9yZWFkX29ubHkub2ZfanZcblxuICBsZXQgZGV2aWNlX3BpeGVsX2NvbnRlbnRfYm94X3NpemUgdCA9XG4gICAgSnYuZ2V0IHQgXCJkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplXCIgfD4gSnYudG9fYXJyYXkgYm94X3NpemVfb2ZfanZcblxuICBsZXQgdGFyZ2V0IHQgPSBKdi5nZXQgdCBcInRhcmdldFwiIHw+IEVsLm9mX2p2XG5lbmRcblxudHlwZSBib3ggPSBDb250ZW50X2JveCB8IEJvcmRlcl9ib3ggfCBEZXZpY2VfcGl4ZWxfY29udGVudF9ib3hcblxubGV0IHN0cmluZ19vZl9ib3ggPSBmdW5jdGlvblxuICB8IENvbnRlbnRfYm94IC0+IFwiY29udGVudC1ib3hcIlxuICB8IEJvcmRlcl9ib3ggLT4gXCJib3JkZXItYm94XCJcbiAgfCBEZXZpY2VfcGl4ZWxfY29udGVudF9ib3ggLT4gXCJkZXZpY2UtcGl4ZWwtY29udGVudC1ib3hcIlxuXG5sZXQgZGlzY29ubmVjdCB0ID0gaWdub3JlIEBAIEp2LmNhbGwgdCBcImRpc2Nvbm5lY3RcIiBbfHxdXG5cbmxldCBvYnNlcnZlIHQgP2JveCB0YXJnZXQgPVxuICBsZXQgYXJncyA9XG4gICAgbGV0IHRhcmdldCA9IEVsLnRvX2p2IHRhcmdldCBpblxuICAgIG1hdGNoIGJveCB3aXRoXG4gICAgfCBOb25lIC0+IFt8IHRhcmdldCB8XVxuICAgIHwgU29tZSBiIC0+XG4gICAgICAgIGxldCBib3ggPSBKdi5vYmogW3wgKFwiYm94XCIsIEp2Lm9mX3N0cmluZyAoc3RyaW5nX29mX2JveCBiKSkgfF0gaW5cbiAgICAgICAgW3wgdGFyZ2V0OyBib3ggfF1cbiAgaW5cbiAgSnYuY2FsbCB0IFwib2JzZXJ2ZVwiIGFyZ3MgfD4gaWdub3JlXG5cbmxldCB1bm9ic2VydmUgdCB0YXJnZXQgPVxuICBsZXQgdGFyZ2V0ID0gRWwudG9fanYgdGFyZ2V0IGluXG4gIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJkaXNjb25uZWN0XCIgW3wgdGFyZ2V0IHxdXG5cbmxldCBjcmVhdGUgfmNhbGxiYWNrID1cbiAgbGV0IGNhbGxiYWNrIGVudHJpZXMgb2JzZXJ2ZXIgPVxuICAgIGxldCBlbnRyaWVzID0gSnYudG9fbGlzdCBFbnRyeS5vZl9qdiBlbnRyaWVzIGluXG4gICAgY2FsbGJhY2sgZW50cmllcyAob2ZfanYgb2JzZXJ2ZXIpXG4gIGluXG4gIGxldCBhcmdzID0gW3wgSnYucmVwciBjYWxsYmFjayB8XSBpblxuICBKdi5uZXcnIChKdi5nZXQgSnYuZ2xvYmFsIFwiUmVzaXplT2JzZXJ2ZXJcIikgYXJnc1xuIiwib3BlbiBCcnJcblxudHlwZSB0ID0gSnYudFxuXG5leHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxubGV0IG9mX25hdmlnYXRvciBuID0gSnYuZ2V0IChOYXZpZ2F0b3IudG9fanYgbikgXCJtZWRpYVNlc3Npb25cIlxuXG5tb2R1bGUgTWVkaWFfbWV0YWRhdGEgPSBzdHJ1Y3RcbiAgdHlwZSBpbWcgPSB7IHNyYyA6IHN0cmluZzsgc2l6ZXMgOiBzdHJpbmc7IHR5cGUnIDogc3RyaW5nIH1cblxuICBsZXQgaW1nX3RvX2p2IGltZyA9XG4gICAgSnYub2JqXG4gICAgICBbfFxuICAgICAgICAoXCJzcmNcIiwgSnYub2Zfc3RyaW5nIGltZy5zcmMpO1xuICAgICAgICAoXCJzaXplc1wiLCBKdi5vZl9zdHJpbmcgaW1nLnNpemVzKTtcbiAgICAgICAgKFwidHlwZVwiLCBKdi5vZl9zdHJpbmcgaW1nLnR5cGUnKTtcbiAgICAgIHxdXG5cbiAgbGV0IG1heWJlX3N0cmluZyBqdiBwcm9wID1cbiAgICBtYXRjaCBKdi5maW5kIGp2IHByb3Agd2l0aCBOb25lIC0+IFwidW5rbm93blwiIHwgU29tZSBqdiAtPiBKdi50b19zdHJpbmcganZcblxuICBsZXQgaW1nX29mX2p2IGp2ID1cbiAgICBsZXQgc3JjID0gbWF5YmVfc3RyaW5nIGp2IFwic3JjXCIgaW5cbiAgICBsZXQgc2l6ZXMgPSBtYXliZV9zdHJpbmcganYgXCJzaXplc1wiIGluXG4gICAgbGV0IHR5cGUnID0gbWF5YmVfc3RyaW5nIGp2IFwidHlwZVwiIGluXG4gICAgeyBzcmM7IHNpemVzOyB0eXBlJyB9XG5cbiAgdHlwZSB0ID0ge1xuICAgIHRpdGxlIDogc3RyaW5nO1xuICAgIGFydGlzdCA6IHN0cmluZztcbiAgICBhbGJ1bSA6IHN0cmluZztcbiAgICBhcnR3b3JrIDogaW1nIGxpc3Q7XG4gIH1cblxuICBsZXQgdG9fanYgdCA9XG4gICAgbGV0IGFydHdvcmsgPSBKdi5vZl9saXN0IGltZ190b19qdiB0LmFydHdvcmsgaW5cbiAgICBKdi5vYmpcbiAgICAgIFt8XG4gICAgICAgIChcInRpdGxlXCIsIEp2Lm9mX3N0cmluZyB0LnRpdGxlKTtcbiAgICAgICAgKFwiYXJ0aXN0XCIsIEp2Lm9mX3N0cmluZyB0LmFydGlzdCk7XG4gICAgICAgIChcImFsYnVtXCIsIEp2Lm9mX3N0cmluZyB0LmFsYnVtKTtcbiAgICAgICAgKFwiYXJ0d29ya1wiLCBhcnR3b3JrKTtcbiAgICAgIHxdXG5cbiAgbGV0IG9mX2p2IGp2ID1cbiAgICBsZXQgdGl0bGUgPSBtYXliZV9zdHJpbmcganYgXCJ0aXRsZVwiIGluXG4gICAgbGV0IGFydGlzdCA9IG1heWJlX3N0cmluZyBqdiBcImFydGlzdFwiIGluXG4gICAgbGV0IGFsYnVtID0gbWF5YmVfc3RyaW5nIGp2IFwiYWxidW1cIiBpblxuICAgIGxldCBhcnR3b3JrID1cbiAgICAgIG1hdGNoIEp2LmZpbmQganYgXCJhcnR3b3JrXCIgd2l0aFxuICAgICAgfCBOb25lIC0+IFtdXG4gICAgICB8IFNvbWUganYgLT4gSnYudG9fbGlzdCBpbWdfb2ZfanYganZcbiAgICBpblxuICAgIHsgdGl0bGU7IGFydGlzdDsgYWxidW07IGFydHdvcmsgfVxuZW5kXG5cbmxldCBtZXRhZGF0YSB0ID0gSnYuZ2V0IHQgXCJtZXRhZGF0YVwiIHw+IEp2LnRvX29wdGlvbiBNZWRpYV9tZXRhZGF0YS5vZl9qdlxuXG5sZXQgc2V0X21ldGFkYXRhIHQgdiA9XG4gIENvbnNvbGUubG9nIFsgXCJTZXQgbWV0YWRhdGFcIjsgTWVkaWFfbWV0YWRhdGEudG9fanYgdiBdO1xuICBsZXQgbWV0YWRhdGEgPVxuICAgIEp2Lm5ldycgKEp2LmdldCBKdi5nbG9iYWwgXCJNZWRpYU1ldGFkYXRhXCIpIFt8IE1lZGlhX21ldGFkYXRhLnRvX2p2IHYgfF1cbiAgaW5cbiAgSnYuc2V0IHQgXCJtZXRhZGF0YVwiIG1ldGFkYXRhXG5cbm1vZHVsZSBBY3Rpb24gPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSnN0ci50XG5cbiAgbGV0IG5leHRfdHJhY2sgPSBKc3RyLnYgXCJuZXh0dHJhY2tcIlxuICBsZXQgcHJldmlvdXNfdHJhY2sgPSBKc3RyLnYgXCJwcmV2aW91c3RyYWNrXCJcbmVuZFxuXG5sZXQgc2V0X2FjdGlvbl9oYW5kbGVyIHQgYWN0aW9uIGYgPVxuICBsZXQgY2FsbGJhY2sgPSBKdi5jYWxsYmFjayB+YXJpdHk6MSBmIGluXG4gIEp2LmNhbGwgdCBcInNldEFjdGlvbkhhbmRsZXJcIiBbfCBKdi5vZl9qc3RyIGFjdGlvbjsgY2FsbGJhY2sgfF0gfD4gaWdub3JlXG5cbmxldCBzZXRfcG9zaXRpb25fc3RhdGUgP2R1cmF0aW9uID9wbGF5YmFja19yYXRlID9wb3NpdGlvbiB0ID1cbiAgbGV0IG1heWJlX2Zsb2F0IG5hbWUgdiA9IE9wdGlvbi5tYXAgKGZ1biB2IC0+IChuYW1lLCBKdi5vZl9mbG9hdCB2KSkgdiBpblxuICBsZXQgZHVyYXRpb24gPSBtYXliZV9mbG9hdCBcImR1cmF0aW9uXCIgZHVyYXRpb24gaW5cbiAgbGV0IHBsYXliYWNrX3JhdGUgPSBtYXliZV9mbG9hdCBcInBsYXliYWNrUmF0ZVwiIHBsYXliYWNrX3JhdGUgaW5cbiAgbGV0IHBvc2l0aW9uID0gbWF5YmVfZmxvYXQgXCJwb3NpdGlvblwiIHBvc2l0aW9uIGluXG4gIGxldCBhcmdzID1cbiAgICBsZXQgc3RhdGVfZGljdCA9XG4gICAgICBMaXN0LmZpbHRlcl9tYXAgRnVuLmlkIFsgZHVyYXRpb247IHBsYXliYWNrX3JhdGU7IHBvc2l0aW9uIF1cbiAgICBpblxuICAgIG1hdGNoIHN0YXRlX2RpY3Qgd2l0aCBbXSAtPiBbfHxdIHwgc2QgLT4gW3wgSnYub2JqIChBcnJheS5vZl9saXN0IHNkKSB8XVxuICBpblxuICBDb25zb2xlLmxvZyBbIGFyZ3MgXTtcbiAgSnYuY2FsbCB0IFwic2V0UG9zaXRpb25TdGF0ZVwiIGFyZ3MgfD4gaWdub3JlXG4iLCJtb2R1bGUgSnYgPSBKdlxubW9kdWxlIEpzdHIgPSBKc3RyXG5cbm1vZHVsZSBCcnIgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBCcnJcblxuICBtb2R1bGUgRWwgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgUyA9IFN0eWxlXG4gICAgaW5jbHVkZSBFbFxuICAgIG1vZHVsZSBTdHlsZSA9IFNcbiAgZW5kXG5cbiAgbW9kdWxlIEV2ID0gc3RydWN0XG4gICAgaW5jbHVkZSBFdlxuXG4gICAgbW9kdWxlIFN1Ym1pdCA9IHN0cnVjdFxuICAgICAgdHlwZSAnYSBldmVudCA9ICdhIHRcbiAgICAgIHR5cGUgdCA9IEp2LnRcbiAgICBlbmRcblxuICAgIGxldCBzdWJtaXQgPSBUeXBlLnZvaWQgKEpzdHIudiBcInN1Ym1pdFwiKVxuICBlbmRcblxuICBtb2R1bGUgQXQgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIEF0XG5cbiAgICBtb2R1bGUgTmFtZSA9IHN0cnVjdFxuICAgICAgaW5jbHVkZSBOYW1lXG5cbiAgICAgIGxldCBwYXR0ZXJuID0gSnN0ci52IFwicGF0dGVyblwiXG4gICAgZW5kXG5cbiAgICBsZXQgZHJhZ2dhYmxlIHMgPSB2IE5hbWUuZHJhZ2dhYmxlIHNcbiAgZW5kXG5lbmRcblxubW9kdWxlIEJycl9pbyA9IHN0cnVjdFxuICBpbmNsdWRlIEJycl9pb1xuICBtb2R1bGUgSW5kZXhlZF9kYiA9IEluZGV4ZWRfZGJcblxuICBtb2R1bGUgTWVkaWEgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1lZGlhXG4gICAgbW9kdWxlIFNlc3Npb24gPSBNZWRpYV9zZXNzaW9uXG4gIGVuZFxuXG4gIG1vZHVsZSBTdG9yYWdlID0gc3RydWN0XG4gICAgaW5jbHVkZSBTdG9yYWdlXG5cbiAgICBtb2R1bGUgTWFuYWdlciA9IHN0cnVjdFxuICAgICAgKCogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1N0b3JhZ2VNYW5hZ2VyICopXG4gICAgICB0eXBlIHQgPSBKdi50XG5cbiAgICAgIGluY2x1ZGUgKEp2LklkIDogSnYuQ09OViB3aXRoIHR5cGUgdCA6PSB0KVxuXG4gICAgICBsZXQgcGVyc2lzdCB0ID0gSnYuY2FsbCB0IFwicGVyc2lzdFwiIFt8fF0gfD4gRnV0Lm9mX3Byb21pc2Ugfm9rOkp2LnRvX2Jvb2xcbiAgICBlbmRcblxuICAgIGxldCBtYW5hZ2VyIChuIDogQnJyLk5hdmlnYXRvci50KSA9XG4gICAgICBKdi5nZXQgKEJyci5OYXZpZ2F0b3IudG9fanYgbikgXCJzdG9yYWdlXCIgfD4gTWFuYWdlci5vZl9qdlxuICBlbmRcbmVuZFxuXG5tb2R1bGUgQnJyX3dlYndvcmtlcnMgPSBCcnJfd2Vid29ya2Vyc1xubW9kdWxlIEJycl93ZWJtaWRpID0gQnJyX3dlYm1pZGlcbm1vZHVsZSBCcnJfd2ViZ3B1ID0gQnJyX3dlYmdwdVxubW9kdWxlIEJycl93ZWJjcnlwdG8gPSBCcnJfd2ViY3J5cHRvXG5tb2R1bGUgQnJyX3dlYmF1ZGlvID0gQnJyX3dlYmF1ZGlvXG5tb2R1bGUgQnJyX2NhbnZhcyA9IEJycl9jYW52YXNcbm1vZHVsZSBGdXQgPSBGdXRcbm1vZHVsZSBJbnRlcnNlY3Rpb25fb2JzZXJ2ZXIgPSBJbnRlcnNlY3Rpb25fb2JzZXJ2ZXJcbm1vZHVsZSBNdXRhdGlvbl9vYnNlcnZlciA9IE11dGF0aW9uX29ic2VydmVyXG5tb2R1bGUgUmVzaXplX29ic2VydmVyID0gUmVzaXplX29ic2VydmVyXG5tb2R1bGUgRG9tX3JlY3RfcmVhZF9vbmx5ID0gRG9tX3JlY3RfcmVhZF9vbmx5XG4iLCIoKiogQ3JlYXRlLW9ubHkgdmVyc2lvbiBvZiBbT2JqLnRdICopXG5tb2R1bGUgQW55IDogc2lnXG4gIHR5cGUgdFxuICB2YWwgYW55IDogJ2EgLT4gdFxuZW5kID0gc3RydWN0XG4gIHR5cGUgdCA9IE9iai50XG4gIGxldCBhbnkgPSBPYmoucmVwclxuZW5kXG5cbnR5cGUgJ2EgZXZhbCA9XG4gIHwgRXZhbF9ub25lXG4gIHwgRXZhbF9wcm9ncmVzc1xuICB8IEV2YWxfc29tZSBvZiAnYVxuXG50eXBlICdhIHRfID1cbiAgfCBQdXJlIG9mICdhXG4gIHwgT3BlcmF0b3IgOiB7XG4gICAgICBtdXRhYmxlIHZhbHVlIDogJ2EgZXZhbDsgKCogY2FjaGVkIHZhbHVlICopXG4gICAgICBtdXRhYmxlIHRyYWNlIDogdHJhY2U7ICgqIGxpc3Qgb2YgcGFyZW50cyB0aGlzIGNhbiBpbnZhbGlkYXRlICopXG4gICAgICBtdXRhYmxlIHRyYWNlX2lkeCA6IHRyYWNlX2lkeDsgKCogbGlzdCBvZiBkaXJlY3QgY2hpbGRyZW4gdGhhdCBjYW4gaW52YWxpZGF0ZSB0aGlzICopXG4gICAgICBkZXNjOiAnYSBkZXNjO1xuICAgIH0gLT4gJ2EgdF9cbiAgfCBSb290IDoge1xuICAgICAgbXV0YWJsZSB2YWx1ZSA6ICdhIGV2YWw7ICgqIGNhY2hlZCB2YWx1ZSAqKVxuICAgICAgbXV0YWJsZSB0cmFjZV9pZHggOiB0cmFjZV9pZHg7ICgqIGxpc3Qgb2YgZGlyZWN0IGNoaWxkcmVuIHRoYXQgY2FuIGludmFsaWRhdGUgdGhpcyAqKVxuICAgICAgbXV0YWJsZSBvbl9pbnZhbGlkYXRlIDogJ2EgLT4gdW5pdDtcbiAgICAgIG11dGFibGUgYWNxdWlyZWQgOiBib29sO1xuICAgICAgY2hpbGQgOiAnYSB0XztcbiAgICB9IC0+ICdhIHRfXG5cbmFuZCBfIGRlc2MgPVxuICB8IE1hcCAgOiAnYSB0XyAqICgnYSAtPiAnYikgLT4gJ2IgZGVzY1xuICB8IE1hcDIgOiAnYSB0XyAqICdiIHRfICogKCdhIC0+ICdiIC0+ICdjKSAtPiAnYyBkZXNjXG4gIHwgUGFpciA6ICdhIHRfICogJ2IgdF8gLT4gKCdhICogJ2IpIGRlc2NcbiAgfCBBcHAgIDogKCdhIC0+ICdiKSB0XyAqICdhIHRfIC0+ICdiIGRlc2NcbiAgfCBKb2luIDogeyBjaGlsZCA6ICdhIHRfIHRfOyBtdXRhYmxlIGludGVybWVkaWF0ZSA6ICdhIHRfIG9wdGlvbiB9IC0+ICdhIGRlc2NcbiAgfCBWYXIgIDogeyBtdXRhYmxlIGJpbmRpbmcgOiAnYSB9IC0+ICdhIGRlc2NcbiAgfCBQcmltIDogeyBhY3F1aXJlIDogJ2EgdCAtPiAnYTtcbiAgICAgICAgICAgICByZWxlYXNlIDogJ2EgdCAtPiAnYSAtPiB1bml0IH0gLT4gJ2EgZGVzY1xuICB8IEZpeCA6IHsgZG9jIDogJ2EgdF87IHdydCA6IF8gdF8gfSAtPiAnYSBkZXNjXG5cbigqIGEgc2V0IG9mIChhY3RpdmUpIHBhcmVudHMgZm9yIGEgWydhIHRdLCB1c2VkIGR1cmluZyBpbnZhbGlkYXRpb24gKilcbmFuZCB0cmFjZSA9XG4gIHwgVDBcbiAgfCBUMSA6IF8gdF8gLT4gdHJhY2VcbiAgfCBUMiA6IF8gdF8gKiBfIHRfIC0+IHRyYWNlXG4gIHwgVDMgOiBfIHRfICogXyB0XyAqIF8gdF8gLT4gdHJhY2VcbiAgfCBUNCA6IF8gdF8gKiBfIHRfICogXyB0XyAqIF8gdF8gLT4gdHJhY2VcbiAgfCBUbiA6IHsgbXV0YWJsZSBhY3RpdmUgOiBpbnQ7IG11dGFibGUgY291bnQgOiBpbnQ7XG4gICAgICAgICAgIG11dGFibGUgZW50cmllcyA6IEFueS50IHRfIGFycmF5IH0gLT4gdHJhY2VcblxuKCogYSBzZXQgb2YgZGlyZWN0IGNoaWxkcmVuIGZvciBhIGNvbXBvc2l0ZSBkb2N1bWVudCAqKVxuYW5kIHRyYWNlX2lkeCA9XG4gIHwgSTBcbiAgfCBJMSA6IHsgbXV0YWJsZSBpZHggOiBpbnQgO1xuICAgICAgICAgICBvYmogOiAnYSB0XztcbiAgICAgICAgICAgbXV0YWJsZSBuZXh0IDogdHJhY2VfaWR4IH0gLT4gdHJhY2VfaWR4XG5cbigqIFRoZSB0eXBlIHN5c3RlbSBjYW5ub3Qgc2VlIHRoYXQgdCBpcyBjb3ZhcmlhbnQgaW4gaXRzIHBhcmFtZXRlci5cbiAgIFVzZSB0aGUgRm9yY2UgdG8gY29udmluY2UgaXQuICopXG5hbmQgKydhIHRcbmV4dGVybmFsIGluaiA6ICdhIHRfIC0+ICdhIHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBwcmogOiAnYSB0IC0+ICdhIHRfID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgcHJqMiA6ICdhIHQgdCAtPiAnYSB0XyB0XyA9IFwiJWlkZW50aXR5XCJcblxuKCogQmFzaWMgY29tYmluYXRvcnMgKilcbmxldCByZXR1cm4geCA9IGluaiAoUHVyZSB4KVxubGV0IHB1cmUgeCA9IGluaiAoUHVyZSB4KVxuXG5sZXQgaXNfcHVyZSB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgeCAtPiBTb21lIHhcbiAgfCBfIC0+IE5vbmVcblxubGV0IGR1bW15ID0gUHVyZSAoQW55LmFueSAoKSlcblxubGV0IG9wZXJhdG9yIGRlc2MgPVxuICBPcGVyYXRvciB7IHZhbHVlID0gRXZhbF9ub25lOyB0cmFjZSA9IFQwOyBkZXNjOyB0cmFjZV9pZHggPSBJMCB9XG5cbmxldCBtYXAgeCB+ZiA9IGluaiAoXG4gICAgbWF0Y2ggcHJqIHggd2l0aFxuICAgIHwgUHVyZSB2eCAtPiBQdXJlIChmIHZ4KVxuICAgIHwgeCAtPiBvcGVyYXRvciAoTWFwICh4LCBmKSlcbiAgKVxuXG5sZXQgbWFwMiB4IHkgfmYgPSBpbmogKFxuICAgIG1hdGNoIHByaiB4LCBwcmogeSB3aXRoXG4gICAgfCBQdXJlIHZ4LCBQdXJlIHZ5IC0+IFB1cmUgKGYgdnggdnkpXG4gICAgfCB4LCB5IC0+IG9wZXJhdG9yIChNYXAyICh4LCB5LCBmKSlcbiAgKVxuXG5sZXQgcGFpciB4IHkgPSBpbmogKFxuICAgIG1hdGNoIHByaiB4LCBwcmogeSB3aXRoXG4gICAgfCBQdXJlIHZ4LCBQdXJlIHZ5IC0+IFB1cmUgKHZ4LCB2eSlcbiAgICB8IHgsIHkgLT4gb3BlcmF0b3IgKFBhaXIgKHgsIHkpKVxuICApXG5cbmxldCBhcHAgZiB4ID0gaW5qIChcbiAgICBtYXRjaCBwcmogZiwgcHJqIHggd2l0aFxuICAgIHwgUHVyZSB2ZiwgUHVyZSB2eCAtPiBQdXJlICh2ZiB2eClcbiAgICB8IGYsIHggLT4gb3BlcmF0b3IgKEFwcCAoZiwgeCkpXG4gIClcblxubGV0IGpvaW4gY2hpbGQgPSBpbmogKFxuICAgIG1hdGNoIHByajIgY2hpbGQgd2l0aFxuICAgIHwgUHVyZSB2IC0+IHZcbiAgICB8IGNoaWxkIC0+IG9wZXJhdG9yIChKb2luIHsgY2hpbGQ7IGludGVybWVkaWF0ZSA9IE5vbmUgfSlcbiAgKVxuXG5sZXQgYmluZCB4IH5mID0gam9pbiAobWFwIH5mIHgpXG5cbigqIE1hbmFnZW1lbnQgb2YgdHJhY2UgaW5kaWNlcyAqKVxuXG5sZXQgYWRkciBvYyBvYmogPVxuICBQcmludGYuZnByaW50ZiBvYyBcIjB4JTA4eFwiIChPYmoubWFnaWMgb2JqIDogaW50KVxuXG5leHRlcm5hbCB0X2VxdWFsIDogXyB0XyAtPiBfIHRfIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCBvYmpfdCA6ICdhIHRfIC0+IEFueS50IHRfID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgcmVjIGR1bXBfdHJhY2UgOiB0eXBlIGEuIGEgdF8gLT4gdW5pdCA9XG4gIGZ1biBvYmogLT4gbWF0Y2ggb2JqIHdpdGhcbiAgfCBQdXJlIF8gLT4gUHJpbnRmLmVwcmludGYgXCIlYTogUHVyZSBfXFxuJSFcIiBhZGRyIG9ialxuICB8IE9wZXJhdG9yIHQgLT5cbiAgICBQcmludGYuZXByaW50ZiBcIiVhOiBPcGVyYXRvciBfIC0+ICVhXFxuJSFcIiBhZGRyIG9iaiBkdW1wX3RyYWNlX2F1eCB0LnRyYWNlO1xuICAgIGJlZ2luIG1hdGNoIHQudHJhY2Ugd2l0aFxuICAgICAgfCBUMCAtPiAoKVxuICAgICAgfCBUMSBhIC0+IGR1bXBfdHJhY2UgYVxuICAgICAgfCBUMiAoYSxiKSAtPiBkdW1wX3RyYWNlIGE7IGR1bXBfdHJhY2UgYlxuICAgICAgfCBUMyAoYSxiLGMpIC0+IGR1bXBfdHJhY2UgYTsgZHVtcF90cmFjZSBiOyBkdW1wX3RyYWNlIGNcbiAgICAgIHwgVDQgKGEsYixjLGQpIC0+IGR1bXBfdHJhY2UgYTsgZHVtcF90cmFjZSBiOyBkdW1wX3RyYWNlIGM7IGR1bXBfdHJhY2UgZFxuICAgICAgfCBUbiB0IC0+IEFycmF5Lml0ZXIgZHVtcF90cmFjZSB0LmVudHJpZXNcbiAgICBlbmRcbiAgfCBSb290IF8gLT4gUHJpbnRmLmVwcmludGYgXCIlYTogUm9vdCBfXFxuJSFcIiBhZGRyIG9ialxuXG5hbmQgZHVtcF90cmFjZV9hdXggb2MgPSBmdW5jdGlvblxuICB8IFQwIC0+IFByaW50Zi5mcHJpbnRmIG9jIFwiVDBcIlxuICB8IFQxIGEgLT4gUHJpbnRmLmZwcmludGYgb2MgXCJUMSAlYVwiIGFkZHIgYVxuICB8IFQyIChhLGIpIC0+XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJUMiAoJWEsICVhKVwiIGFkZHIgYSBhZGRyIGJcbiAgfCBUMyAoYSxiLGMpIC0+XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJUMyAoJWEsICVhLCAlYSlcIiBhZGRyIGEgYWRkciBiIGFkZHIgY1xuICB8IFQ0IChhLGIsYyxkKSAtPlxuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwiVDQgKCVhLCAlYSwgJWEsICVhKVwiIGFkZHIgYSBhZGRyIGIgYWRkciBjIGFkZHIgZFxuICB8IFRuIHQgLT5cbiAgICBQcmludGYuZnByaW50ZiBvYyBcIlRuIHthY3RpdmUgPSAlZDsgY291bnQgPSAlZDsgZW50cmllcyA9IFwiXG4gICAgICB0LmFjdGl2ZSB0LmNvdW50O1xuICAgIEFycmF5Lml0ZXIgKFByaW50Zi5mcHJpbnRmIG9jIFwiKCVhKVwiIGFkZHIpIHQuZW50cmllcztcbiAgICBQcmludGYuZnByaW50ZiBvYyBcIn1cIlxuXG5sZXQgZHVtcF90cmFjZSB4ID0gZHVtcF90cmFjZSAob2JqX3QgKHByaiB4KSlcblxubGV0IGFkZF9pZHggb2JqIGlkeCA9IGZ1bmN0aW9uXG4gIHwgUHVyZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCcgLT4gdCcudHJhY2VfaWR4IDwtIEkxIHsgaWR4OyBvYmo7IG5leHQgPSB0Jy50cmFjZV9pZHggfVxuICB8IE9wZXJhdG9yIHQnIC0+IHQnLnRyYWNlX2lkeCA8LSBJMSB7IGlkeDsgb2JqOyBuZXh0ID0gdCcudHJhY2VfaWR4IH1cblxubGV0IHJlYyByZW1faWR4X3JlYyBvYmogPSBmdW5jdGlvblxuICB8IEkwIC0+IGFzc2VydCBmYWxzZVxuICB8IEkxIHQgYXMgc2VsZiAtPlxuICAgIGlmIHRfZXF1YWwgdC5vYmogb2JqXG4gICAgdGhlbiAodC5pZHgsIHQubmV4dClcbiAgICBlbHNlIChcbiAgICAgIGxldCBpZHgsIHJlc3VsdCA9IHJlbV9pZHhfcmVjIG9iaiB0Lm5leHQgaW5cbiAgICAgIHQubmV4dCA8LSByZXN1bHQ7XG4gICAgICAoaWR4LCBzZWxmKVxuICAgIClcblxuKCogcmVtb3ZlIFtvYmpdIGZyb20gdGhlIGx3ZCdzIHRyYWNlLiAqKVxubGV0IHJlbV9pZHggb2JqID0gZnVuY3Rpb25cbiAgfCBQdXJlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0JyAtPlxuICAgIGxldCBpZHgsIHRyYWNlX2lkeCA9IHJlbV9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHggaW5cbiAgICB0Jy50cmFjZV9pZHggPC0gdHJhY2VfaWR4OyBpZHhcbiAgfCBPcGVyYXRvciB0JyAtPlxuICAgIGxldCBpZHgsIHRyYWNlX2lkeCA9IHJlbV9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHggaW5cbiAgICB0Jy50cmFjZV9pZHggPC0gdHJhY2VfaWR4OyBpZHhcblxuKCogbW92ZSBbb2JqXSBmcm9tIG9sZCBpbmRleCB0byBuZXcgaW5kZXguICopXG5sZXQgcmVjIG1vdl9pZHhfcmVjIG9iaiBvbGRpZHggbmV3aWR4ID0gZnVuY3Rpb25cbiAgfCBJMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJMSB0IC0+XG4gICAgaWYgdC5pZHggPSBvbGRpZHggJiYgdF9lcXVhbCB0Lm9iaiBvYmpcbiAgICB0aGVuIHQuaWR4IDwtIG5ld2lkeFxuICAgIGVsc2UgbW92X2lkeF9yZWMgb2JqIG9sZGlkeCBuZXdpZHggdC5uZXh0XG5cbmxldCBtb3ZfaWR4IG9iaiBvbGRpZHggbmV3aWR4ID0gZnVuY3Rpb25cbiAgfCBQdXJlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0JyAtPiBtb3ZfaWR4X3JlYyBvYmogb2xkaWR4IG5ld2lkeCB0Jy50cmFjZV9pZHhcbiAgfCBPcGVyYXRvciB0JyAtPiBtb3ZfaWR4X3JlYyBvYmogb2xkaWR4IG5ld2lkeCB0Jy50cmFjZV9pZHhcblxubGV0IHJlYyBnZXRfaWR4X3JlYyBvYmogPSBmdW5jdGlvblxuICB8IEkwIC0+IGFzc2VydCBmYWxzZVxuICB8IEkxIHQgLT5cbiAgICBpZiB0X2VxdWFsIHQub2JqIG9ialxuICAgIHRoZW4gdC5pZHhcbiAgICBlbHNlIGdldF9pZHhfcmVjIG9iaiB0Lm5leHRcblxuKCogZmluZCBpbmRleCBvZiBbb2JqXSBpbiB0aGUgZ2l2ZW4gbHdkICopXG5sZXQgZ2V0X2lkeCBvYmogPSBmdW5jdGlvblxuICB8IFB1cmUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQnIC0+IGdldF9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHhcbiAgfCBPcGVyYXRvciB0JyAtPiBnZXRfaWR4X3JlYyBvYmogdCcudHJhY2VfaWR4XG5cbnR5cGUgc3RhdHVzID1cbiAgfCBOZXV0cmFsXG4gIHwgU2FmZVxuICB8IFVuc2FmZVxuXG50eXBlIHNlbnNpdGl2aXR5ID1cbiAgfCBTdHJvbmdcbiAgfCBGcmFnaWxlXG5cbigqIFByb3BhZ2F0aW5nIGludmFsaWRhdGlvbiByZWN1cnNpdmVseS5cbiAgIEVhY2ggZG9jdW1lbnQgaXMgaW52YWxpZGF0ZWQgYXQgbW9zdCBvbmNlLFxuICAgYW5kIG9ubHkgaWYgaXQgaGFzIFt0LnZhbHVlID0gU29tZSBfXS4gKilcbmxldCByZWMgaW52YWxpZGF0ZV9ub2RlIDogdHlwZSBhIC4gc3RhdHVzIHJlZiAtPiBzZW5zaXRpdml0eSAtPiBhIHRfIC0+IHVuaXQgPVxuICBmdW4gc3RhdHVzIHNlbnNpdGl2aXR5IG5vZGUgLT5cbiAgbWF0Y2ggbm9kZSwgc2Vuc2l0aXZpdHkgd2l0aFxuICB8IFB1cmUgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290ICh7dmFsdWU7IF99IGFzIHQpLCBfIC0+XG4gICAgdC52YWx1ZSA8LSBFdmFsX25vbmU7XG4gICAgYmVnaW4gbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBFdmFsX25vbmUgLT4gKClcbiAgICAgIHwgRXZhbF9wcm9ncmVzcyAtPlxuICAgICAgICBzdGF0dXMgOj0gVW5zYWZlXG4gICAgICB8IEV2YWxfc29tZSB4IC0+XG4gICAgICAgIGJlZ2luIG1hdGNoIHNlbnNpdGl2aXR5IHdpdGhcbiAgICAgICAgICB8IFN0cm9uZyAtPiAoKVxuICAgICAgICAgIHwgRnJhZ2lsZSAtPiBzdGF0dXMgOj0gVW5zYWZlXG4gICAgICAgIGVuZDtcbiAgICAgICAgdC5vbl9pbnZhbGlkYXRlIHggKCogdXNlciBjYWxsYmFjayB0aGF0IHtpIG9ic2VydmVzfSB0aGlzIHJvb3QuICopXG4gICAgZW5kXG4gIHwgT3BlcmF0b3Ige3ZhbHVlID0gRXZhbF9ub25lOyBffSwgRnJhZ2lsZSAtPlxuICAgIGJlZ2luIG1hdGNoICFzdGF0dXMgd2l0aFxuICAgICAgfCBVbnNhZmUgfCBTYWZlIC0+ICgpXG4gICAgICB8IF8gLT4gc3RhdHVzIDo9IFNhZmVcbiAgICBlbmRcbiAgfCBPcGVyYXRvciB7dmFsdWUgPSBFdmFsX25vbmU7IF99LCBfIC0+ICgpXG4gIHwgT3BlcmF0b3Ige2Rlc2MgPSBGaXgge3dydCA9IE9wZXJhdG9yIHt2YWx1ZSA9IEV2YWxfbm9uZTsgX307IF99OyBffSwgRnJhZ2lsZSAtPlxuICAgIGJlZ2luIG1hdGNoICFzdGF0dXMgd2l0aFxuICAgICAgfCBTYWZlIHwgVW5zYWZlIC0+ICgpXG4gICAgICB8IE5ldXRyYWwgLT4gc3RhdHVzIDo9IFNhZmVcbiAgICBlbmRcbiAgfCBPcGVyYXRvciB7ZGVzYyA9IEZpeCB7d3J0ID0gT3BlcmF0b3Ige3ZhbHVlID0gRXZhbF9zb21lIF87IF99OyBffTsgX30sIEZyYWdpbGUgLT5cbiAgICAoKVxuICB8IE9wZXJhdG9yIHQsIF8gLT5cbiAgICBsZXQgc2Vuc2l0aXZpdHkgPVxuICAgICAgbWF0Y2ggdC52YWx1ZSB3aXRoIEV2YWxfcHJvZ3Jlc3MgLT4gRnJhZ2lsZSB8IF8gLT4gc2Vuc2l0aXZpdHlcbiAgICBpblxuICAgIHQudmFsdWUgPC0gRXZhbF9ub25lO1xuICAgICgqIGludmFsaWRhdGUgcGFyZW50cyByZWN1cnNpdmVseSAqKVxuICAgIGludmFsaWRhdGVfdHJhY2Ugc3RhdHVzIHNlbnNpdGl2aXR5IHQudHJhY2VcblxuKCogaW52YWxpZGF0ZSByZWN1cnNpdmVseSBkb2N1bWVudHMgaW4gdGhlIGdpdmVuIHRyYWNlICopXG5hbmQgaW52YWxpZGF0ZV90cmFjZSBzdGF0dXMgc2Vuc2l0aXZpdHkgPSBmdW5jdGlvblxuICB8IFQwIC0+ICgpXG4gIHwgVDEgeCAtPiBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHhcbiAgfCBUMiAoeCwgeSkgLT5cbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHg7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB5XG4gIHwgVDMgKHgsIHksIHopIC0+XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB4O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeTtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHpcbiAgfCBUNCAoeCwgeSwgeiwgdykgLT5cbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHg7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB5O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgejtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHdcbiAgfCBUbiB0IC0+XG4gICAgbGV0IGFjdGl2ZSA9IHQuYWN0aXZlIGluXG4gICAgdC5hY3RpdmUgPC0gMDtcbiAgICBmb3IgaSA9IDAgdG8gYWN0aXZlIC0gMSBkb1xuICAgICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB0LmVudHJpZXMuKGkpXG4gICAgZG9uZVxuXG5sZXQgZGVmYXVsdF91bnNhZmVfbXV0YXRpb25fbG9nZ2VyICgpID1cbiAgbGV0IGNhbGxzdGFjayA9IFByaW50ZXhjLmdldF9jYWxsc3RhY2sgMjAgaW5cbiAgUHJpbnRmLmZwcmludGYgc3RkZXJyXG4gICAgXCJMd2Q6IHVuc2FmZSBtdXRhdGlvbiAodmFyaWFibGUgaW52YWxpZGF0ZWQgZHVyaW5nIGV2YWx1YXRpb24pIGF0XFxuJWFcIlxuICAgIFByaW50ZXhjLnByaW50X3Jhd19iYWNrdHJhY2UgY2FsbHN0YWNrXG5cbmxldCB1bnNhZmVfbXV0YXRpb25fbG9nZ2VyID0gcmVmIGRlZmF1bHRfdW5zYWZlX211dGF0aW9uX2xvZ2dlclxuXG5sZXQgZG9faW52YWxpZGF0ZSBzZW5zaXRpdml0eSBub2RlID1cbiAgbGV0IHN0YXR1cyA9IHJlZiBOZXV0cmFsIGluXG4gIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgbm9kZTtcbiAgbGV0IHVuc2FmZSA9XG4gICAgbWF0Y2ggIXN0YXR1cyB3aXRoXG4gICAgfCBOZXV0cmFsIHwgU2FmZSAtPiBmYWxzZVxuICAgIHwgVW5zYWZlIC0+IHRydWVcbiAgaW5cbiAgaWYgdW5zYWZlIHRoZW4gIXVuc2FmZV9tdXRhdGlvbl9sb2dnZXIgKClcblxuKCogVmFyaWFibGVzICopXG50eXBlICdhIHZhciA9ICdhIHRfXG5sZXQgdmFyIHggPSBvcGVyYXRvciAoVmFyIHtiaW5kaW5nID0geH0pXG5sZXQgZ2V0IHggPSBpbmogeFxuXG5sZXQgc2V0ICh2eDpfIHZhcikgeCA6IHVuaXQgPVxuICBtYXRjaCB2eCB3aXRoXG4gIHwgT3BlcmF0b3IgKHtkZXNjID0gVmFyIHY7IF99KSAtPlxuICAgICgqIHNldCB0aGUgdmFyaWFibGUsIGFuZCBpbnZhbGlkYXRlIGFsbCBvYnNlcnZlcnMgKilcbiAgICB2LmJpbmRpbmcgPC0geDtcbiAgICBkb19pbnZhbGlkYXRlIFN0cm9uZyB2eFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwZWVrID0gZnVuY3Rpb25cbiAgfCBPcGVyYXRvciAoe2Rlc2MgPSBWYXIgdjsgX30pIC0+IHYuYmluZGluZ1xuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCB1cGRhdGUgZiB2ID0gc2V0IHYgKGYgKHBlZWsgdikpXG5cbmxldCBtYXlfdXBkYXRlIGYgdiA9XG4gIG1hdGNoIGYgKHBlZWsgdikgd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gc2V0IHYgeFxuXG4oKiBQcmltaXRpdmVzICopXG50eXBlICdhIHByaW0gPSAnYSB0XG5sZXQgcHJpbSB+YWNxdWlyZSB+cmVsZWFzZSA9XG4gIGluaiAob3BlcmF0b3IgKFByaW0geyBhY3F1aXJlOyByZWxlYXNlIH0pKVxubGV0IGdldF9wcmltIHggPSB4XG5cbmxldCBpbnZhbGlkYXRlIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgT3BlcmF0b3Ige2Rlc2MgPSBQcmltIHA7IHZhbHVlOyBffSBhcyB0IC0+XG4gICAgKCogdGhlIHZhbHVlIGlzIGludmFsaWRhdGVkLCBiZSBzdXJlIHRvIGludmFsaWRhdGUgYWxsIHBhcmVudHMgYXMgd2VsbCAqKVxuICAgIGJlZ2luIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgRXZhbF9ub25lIC0+ICgpXG4gICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gZG9faW52YWxpZGF0ZSBGcmFnaWxlIHQ7XG4gICAgICB8IEV2YWxfc29tZSB2IC0+XG4gICAgICAgIGRvX2ludmFsaWRhdGUgU3Ryb25nIHQ7XG4gICAgICAgIHAucmVsZWFzZSB4IHZcbiAgICBlbmRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBGaXggcG9pbnQgKilcblxubGV0IGZpeCBkb2MgfndydCA9IG1hdGNoIHByaiB3cnQgd2l0aFxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBQdXJlIF8gLT4gZG9jXG4gIHwgT3BlcmF0b3IgXyBhcyB3cnQgLT4gaW5qIChvcGVyYXRvciAoRml4IHtkb2MgPSBwcmogZG9jOyB3cnR9KSlcblxudHlwZSByZWxlYXNlX2xpc3QgPVxuICB8IFJlbGVhc2VfZG9uZVxuICB8IFJlbGVhc2VfbW9yZSA6XG4gICAgICB7IG9yaWdpbiA6ICdhIHRfOyBlbGVtZW50IDogJ2IgdF87IG5leHQgOiByZWxlYXNlX2xpc3QgfSAtPiByZWxlYXNlX2xpc3RcblxudHlwZSByZWxlYXNlX3F1ZXVlID0gcmVsZWFzZV9saXN0IHJlZlxubGV0IG1ha2VfcmVsZWFzZV9xdWV1ZSAoKSA9IHJlZiBSZWxlYXNlX2RvbmVcblxudHlwZSByZWxlYXNlX2ZhaWx1cmUgPSBleG4gKiBQcmludGV4Yy5yYXdfYmFja3RyYWNlXG5cbigqIFtzdWJfcmVsZWFzZSBbXSBvcmlnaW4gc2VsZl0gaXMgY2FsbGVkIHdoZW4gW29yaWdpbl0gaXMgcmVsZWFzZWQsXG4gICB3aGVyZSBbb3JpZ2luXSBpcyByZWFjaGFibGUgZnJvbSBbc2VsZl0ncyB0cmFjZS5cbiAgIFdlJ3JlIGdvaW5nIHRvIHJlbW92ZSBbb3JpZ2luXSBmcm9tIHRoYXQgdHJhY2UgYXMgW29yaWdpbl0gaXMgbm93IGRlYWQuXG5cbiAgIFtzdWJfcmVsZWFzZV0gY2Fubm90IHJhaXNlLlxuICAgSWYgYSBwcmltaXRpdmUgcmFpc2VzLCB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodCBhbmQgYSB3YXJuaW5nIGlzIGVtaXR0ZWQuICopXG5sZXQgcmVjIHN1Yl9yZWxlYXNlXG4gIDogdHlwZSBhIGIgLiByZWxlYXNlX2ZhaWx1cmUgbGlzdCAtPiBhIHRfIC0+IGIgdF8gLT4gcmVsZWFzZV9mYWlsdXJlIGxpc3RcbiAgPSBmdW4gZmFpbHVyZXMgb3JpZ2luIC0+IGZ1bmN0aW9uXG4gICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBQdXJlIF8gLT4gZmFpbHVyZXNcbiAgICB8IE9wZXJhdG9yIHQgYXMgc2VsZiAtPlxuICAgICAgKCogY29tcHV0ZSBbdC50cmFjZSBcXCB7b3JpZ2lufV0gKilcbiAgICAgIGxldCB0cmFjZSA9IG1hdGNoIHQudHJhY2Ugd2l0aFxuICAgICAgICB8IFQwIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFQxIHggLT4gYXNzZXJ0ICh0X2VxdWFsIHggb3JpZ2luKTsgVDBcbiAgICAgICAgfCBUMiAoeCwgeSkgLT5cbiAgICAgICAgICBpZiB0X2VxdWFsIHggb3JpZ2luIHRoZW4gVDEgeVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB5IG9yaWdpbiB0aGVuIFQxIHhcbiAgICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgICB8IFQzICh4LCB5LCB6KSAtPlxuICAgICAgICAgIGlmIHRfZXF1YWwgeCBvcmlnaW4gdGhlbiBUMiAoeSwgeilcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeSBvcmlnaW4gdGhlbiBUMiAoeCwgeilcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeiBvcmlnaW4gdGhlbiBUMiAoeCwgeSlcbiAgICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgICB8IFQ0ICh4LCB5LCB6LCB3KSAtPlxuICAgICAgICAgIGlmIHRfZXF1YWwgeCBvcmlnaW4gdGhlbiBUMyAoeSwgeiwgdylcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeSBvcmlnaW4gdGhlbiBUMyAoeCwgeiwgdylcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeiBvcmlnaW4gdGhlbiBUMyAoeCwgeSwgdylcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgdyBvcmlnaW4gdGhlbiBUMyAoeCwgeSwgeilcbiAgICAgICAgICBlbHNlIGFzc2VydCBmYWxzZVxuICAgICAgICB8IFRuIHRuIGFzIHRyYWNlIC0+XG4gICAgICAgICAgbGV0IHJldmlkeCA9IHJlbV9pZHggc2VsZiBvcmlnaW4gaW5cbiAgICAgICAgICBhc3NlcnQgKHRfZXF1YWwgdG4uZW50cmllcy4ocmV2aWR4KSBvcmlnaW4pO1xuICAgICAgICAgIGxldCBjb3VudCA9IHRuLmNvdW50IC0gMSBpblxuICAgICAgICAgIHRuLmNvdW50IDwtIGNvdW50O1xuICAgICAgICAgIGlmIHJldmlkeCA8IGNvdW50IHRoZW4gKFxuICAgICAgICAgICAgbGV0IG9iaiA9IHRuLmVudHJpZXMuKGNvdW50KSBpblxuICAgICAgICAgICAgdG4uZW50cmllcy4ocmV2aWR4KSA8LSBvYmo7XG4gICAgICAgICAgICB0bi5lbnRyaWVzLihjb3VudCkgPC0gZHVtbXk7XG4gICAgICAgICAgICBtb3ZfaWR4IHNlbGYgY291bnQgcmV2aWR4IG9ialxuICAgICAgICAgICkgZWxzZVxuICAgICAgICAgICAgdG4uZW50cmllcy4ocmV2aWR4KSA8LSBkdW1teTtcbiAgICAgICAgICBpZiB0bi5hY3RpdmUgPiBjb3VudCB0aGVuIHRuLmFjdGl2ZSA8LSBjb3VudDtcbiAgICAgICAgICBpZiBjb3VudCA9IDQgdGhlbiAoXG4gICAgICAgICAgICAoKiBkb3duZ3JhZGUgdG8gW1Q0XSB0byBzYXZlIHNwYWNlICopXG4gICAgICAgICAgICBsZXQgYSA9IHRuLmVudHJpZXMuKDApIGFuZCBiID0gdG4uZW50cmllcy4oMSkgaW5cbiAgICAgICAgICAgIGxldCBjID0gdG4uZW50cmllcy4oMikgYW5kIGQgPSB0bi5lbnRyaWVzLigzKSBpblxuICAgICAgICAgICAgaWdub3JlIChyZW1faWR4IHNlbGYgYSA6IGludCk7XG4gICAgICAgICAgICBpZ25vcmUgKHJlbV9pZHggc2VsZiBiIDogaW50KTtcbiAgICAgICAgICAgIGlnbm9yZSAocmVtX2lkeCBzZWxmIGMgOiBpbnQpO1xuICAgICAgICAgICAgaWdub3JlIChyZW1faWR4IHNlbGYgZCA6IGludCk7XG4gICAgICAgICAgICBUNCAoYSwgYiwgYywgZClcbiAgICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCB0bi5lbnRyaWVzIGluXG4gICAgICAgICAgICBpZiBjb3VudCA8PSBsZW4gbHNyIDIgdGhlblxuICAgICAgICAgICAgICBUbiB7IGFjdGl2ZSA9IHRuLmFjdGl2ZTsgY291bnQgPSB0bi5jb3VudDtcbiAgICAgICAgICAgICAgICAgICBlbnRyaWVzID0gQXJyYXkuc3ViIHRuLmVudHJpZXMgMCAobGVuIGxzciAxKSB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHRyYWNlXG4gICAgICAgICAgKVxuICAgICAgaW5cbiAgICAgIHQudHJhY2UgPC0gdHJhY2U7XG4gICAgICBtYXRjaCB0cmFjZSB3aXRoXG4gICAgICB8IFQwIC0+XG4gICAgICAgICgqIFtzZWxmXSBpcyBub3QgYWN0aXZlIGFueW1vcmUsIHNpbmNlIGl0J3Mgbm90IHJlYWNoYWJsZVxuICAgICAgICAgICBmcm9tIGFueSByb290LiBXZSBjYW4gcmVsZWFzZSBpdHMgY2FjaGVkIHZhbHVlIGFuZFxuICAgICAgICAgICByZWN1cnNpdmVseSByZWxlYXNlIGl0cyBzdWJ0cmVlLiAqKVxuICAgICAgICBsZXQgdmFsdWUgPSB0LnZhbHVlIGluXG4gICAgICAgIHQudmFsdWUgPC0gRXZhbF9wcm9ncmVzcztcbiAgICAgICAgYmVnaW4gbWF0Y2ggdC5kZXNjIHdpdGhcbiAgICAgICAgICB8IE1hcCAgKHgsIF8pIC0+IHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgeFxuICAgICAgICAgIHwgTWFwMiAoeCwgeSwgXykgLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHgpIHNlbGYgeVxuICAgICAgICAgIHwgUGFpciAoeCwgeSkgLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHgpIHNlbGYgeVxuICAgICAgICAgIHwgQXBwICAoeCwgeSkgLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHgpIHNlbGYgeVxuICAgICAgICAgIHwgSm9pbiAoeyBjaGlsZDsgaW50ZXJtZWRpYXRlIH0gYXMgdCkgLT5cbiAgICAgICAgICAgIGxldCBmYWlsdXJlcyA9IHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgY2hpbGQgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIGludGVybWVkaWF0ZSB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBmYWlsdXJlc1xuICAgICAgICAgICAgICB8IFNvbWUgY2hpbGQnIC0+XG4gICAgICAgICAgICAgICAgdC5pbnRlcm1lZGlhdGUgPC0gTm9uZTtcbiAgICAgICAgICAgICAgICBzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIGNoaWxkJ1xuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfCBWYXIgIF8gLT4gZmFpbHVyZXNcbiAgICAgICAgICB8IEZpeCB7ZG9jOyB3cnR9IC0+XG4gICAgICAgICAgICBzdWJfcmVsZWFzZSAoc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB3cnQpIHNlbGYgZG9jXG4gICAgICAgICAgfCBQcmltIHQgLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgICAgICAgICAgfCBFdmFsX25vbmUgIHwgRXZhbF9wcm9ncmVzcyAtPiBmYWlsdXJlc1xuICAgICAgICAgICAgICB8IEV2YWxfc29tZSB4IC0+XG4gICAgICAgICAgICAgICAgYmVnaW4gbWF0Y2ggdC5yZWxlYXNlIChpbmogc2VsZikgeCB3aXRoXG4gICAgICAgICAgICAgICAgICB8ICgpIC0+IGZhaWx1cmVzXG4gICAgICAgICAgICAgICAgICB8IGV4Y2VwdGlvbiBleG4gLT5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGJ0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgICAgICAgICAgICAgICAgKGV4biwgYnQpIDo6IGZhaWx1cmVzXG4gICAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgZW5kXG4gICAgICB8IF8gLT4gZmFpbHVyZXNcblxuKCogW3N1Yl9hY3F1aXJlXSBjYW5ub3QgcmFpc2UgKilcbmxldCByZWMgc3ViX2FjcXVpcmUgOiB0eXBlIGEgYiAuIGEgdF8gLT4gYiB0XyAtPiB1bml0ID0gZnVuIG9yaWdpbiAtPlxuICBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBQdXJlIF8gLT4gKClcbiAgfCBPcGVyYXRvciB0IGFzIHNlbGYgLT5cbiAgICAoKiBbYWNxdWlyZV0gaXMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoaXMgb3BlcmF0b3JcbiAgICAgICBpcyB1c2VkLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYWNxdWlyZSBpdHMgY2hpbGRyZW4gKilcbiAgICBsZXQgYWNxdWlyZSA9IG1hdGNoIHQudHJhY2Ugd2l0aCBUMCAtPiB0cnVlIHwgXyAtPiBmYWxzZSBpblxuICAgIGxldCB0cmFjZSA9IG1hdGNoIHQudHJhY2Ugd2l0aFxuICAgICAgfCBUMCAtPiBUMSBvcmlnaW5cbiAgICAgIHwgVDEgeCAtPiBUMiAob3JpZ2luLCB4KVxuICAgICAgfCBUMiAoeCwgeSkgLT4gVDMgKG9yaWdpbiwgeCwgeSlcbiAgICAgIHwgVDMgKHgsIHksIHopIC0+IFQ0IChvcmlnaW4sIHgsIHksIHopXG4gICAgICB8IFQ0ICh4LCB5LCB6LCB3KSAtPlxuICAgICAgICBsZXQgb2JqX29yaWdpbiA9IG9ial90IG9yaWdpbiBpblxuICAgICAgICBsZXQgZW50cmllcyA9XG4gICAgICAgICAgW3wgb2JqX3QgeDsgb2JqX3QgeTsgb2JqX3Qgejsgb2JqX3Qgdzsgb2JqX29yaWdpbjsgZHVtbXk7IGR1bW15OyBkdW1teSB8XVxuICAgICAgICBpblxuICAgICAgICBmb3IgaSA9IDAgdG8gNCBkbyBhZGRfaWR4IHNlbGYgaSBlbnRyaWVzLihpKSBkb25lO1xuICAgICAgICBUbiB7IGFjdGl2ZSA9IDU7IGNvdW50ID0gNTsgZW50cmllcyB9XG4gICAgICB8IFRuIHRuIGFzIHRyYWNlIC0+XG4gICAgICAgIGxldCBpbmRleCA9IHRuLmNvdW50IGluXG4gICAgICAgIGxldCBlbnRyaWVzLCB0cmFjZSA9XG4gICAgICAgICAgKCogcG9zc2libHkgcmVzaXplIGFycmF5IFtlbnRyaWVzXSAqKVxuICAgICAgICAgIGlmIGluZGV4IDwgQXJyYXkubGVuZ3RoIHRuLmVudHJpZXMgdGhlbiAoXG4gICAgICAgICAgICB0bi5jb3VudCA8LSB0bi5jb3VudCArIDE7XG4gICAgICAgICAgICAodG4uZW50cmllcywgdHJhY2UpXG4gICAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gQXJyYXkubWFrZSAoaW5kZXggKiAyKSBkdW1teSBpblxuICAgICAgICAgICAgQXJyYXkuYmxpdCB0bi5lbnRyaWVzIDAgZW50cmllcyAwIGluZGV4O1xuICAgICAgICAgICAgKGVudHJpZXMsIFRuIHsgYWN0aXZlID0gdG4uYWN0aXZlOyBjb3VudCA9IGluZGV4ICsgMTsgZW50cmllcyB9KVxuICAgICAgICAgIClcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG9ial9vcmlnaW4gPSBvYmpfdCBvcmlnaW4gaW5cbiAgICAgICAgZW50cmllcy4oaW5kZXgpIDwtIG9ial9vcmlnaW47XG4gICAgICAgIGFkZF9pZHggc2VsZiBpbmRleCBvYmpfb3JpZ2luO1xuICAgICAgICB0cmFjZVxuICAgIGluXG4gICAgdC50cmFjZSA8LSB0cmFjZTtcbiAgICBpZiBhY3F1aXJlIHRoZW4gKFxuICAgICAgKCogYWNxdWlyZSBpbW1lZGlhdGUgY2hpbGRyZW4sIGFuZCBzbyBvbiByZWN1cnNpdmVseSAqKVxuICAgICAgbWF0Y2ggdC5kZXNjIHdpdGhcbiAgICAgIHwgTWFwICAoeCwgXykgLT4gc3ViX2FjcXVpcmUgc2VsZiB4XG4gICAgICB8IE1hcDIgKHgsIHksIF8pIC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeDtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB5XG4gICAgICB8IFBhaXIgKHgsIHkpIC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeDtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB5XG4gICAgICB8IEFwcCAgKHgsIHkpIC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeDtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB5XG4gICAgICB8IEZpeCAge2RvYzsgd3J0fSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIGRvYztcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB3cnRcbiAgICAgIHwgSm9pbiB7IGNoaWxkOyBpbnRlcm1lZGlhdGUgfSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIGNoaWxkO1xuICAgICAgICBiZWdpbiBtYXRjaCBpbnRlcm1lZGlhdGUgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBfIC0+XG4gICAgICAgICAgICBhc3NlcnQgZmFsc2UgKCogdGhpcyBjYW4ndCBpbml0aWFsaXplZCBhbHJlYWR5LCBmaXJzdC10aW1lIGFjcXVpcmUgKilcbiAgICAgICAgZW5kXG4gICAgICB8IFZhciAgXyAtPiAoKVxuICAgICAgfCBQcmltIF8gLT4gKClcbiAgICApXG5cbigqIG1ha2Ugc3VyZSB0aGF0IFtvcmlnaW5dIGlzIGluIFtzZWxmLnRyYWNlXSwgcGFzc2VkIGFzIGxhc3QgYXJnLiAqKVxubGV0IGFjdGl2YXRlX3RyYWNpbmcgc2VsZiBvcmlnaW4gPSBmdW5jdGlvblxuICB8IFRuIHRuIC0+XG4gICAgbGV0IGlkeCA9IGdldF9pZHggc2VsZiBvcmlnaW4gaW4gKCogaW5kZXggb2YgW3NlbGZdIGluIFtvcmlnaW4udHJhY2VfaWR4XSAqKVxuICAgIGxldCBhY3RpdmUgPSB0bi5hY3RpdmUgaW5cbiAgICAoKiBbaWR4IDwgYWN0aXZlXSBtZWFucyBbc2VsZl0gaXMgYWxyZWFkeSB0cmFjZWQgYnkgW29yaWdpbl0uXG4gICAgICAgV2Ugb25seSBoYXZlIHRvIGFkZCBbc2VsZl0gdG8gdGhlIGVudHJpZXMgaWYgW2lkeCA+PSBhY3RpdmVdLiAqKVxuICAgIGlmIGlkeCA+PSBhY3RpdmUgdGhlbiAoXG4gICAgICB0bi5hY3RpdmUgPC0gYWN0aXZlICsgMTtcbiAgICApO1xuICAgIGlmIGlkeCA+IGFjdGl2ZSB0aGVuIChcbiAgICAgICgqIHN3YXAgd2l0aCBsYXN0IGVudHJ5IGluIFt0bi5lbnRyaWVzXSAqKVxuICAgICAgbGV0IG9sZCA9IHRuLmVudHJpZXMuKGFjdGl2ZSkgaW5cbiAgICAgIHRuLmVudHJpZXMuKGlkeCkgPC0gb2xkO1xuICAgICAgdG4uZW50cmllcy4oYWN0aXZlKSA8LSBvYmpfdCBvcmlnaW47XG4gICAgICBtb3ZfaWR4IHNlbGYgYWN0aXZlIGlkeCBvbGQ7XG4gICAgICBtb3ZfaWR4IHNlbGYgaWR4IGFjdGl2ZSBvcmlnaW5cbiAgICApXG4gIHwgXyAtPiAoKVxuXG5sZXQgc3ViX2lzX2RhbWFnZWQgPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBQdXJlIF8gLT4gZmFsc2VcbiAgfCBPcGVyYXRvciB7dmFsdWU7IF99IC0+XG4gICAgbWF0Y2ggdmFsdWUgd2l0aFxuICAgIHwgRXZhbF9ub25lIC0+IHRydWVcbiAgICB8IEV2YWxfc29tZSBfIC0+IGZhbHNlXG4gICAgfCBFdmFsX3Byb2dyZXNzIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBbc3ViX3NhbXBsZSBvcmlnaW4gc2VsZl0gY29tcHV0ZXMgYSB2YWx1ZSBmb3IgW3NlbGZdLlxuXG4gICBbc3ViX3NhbXBsZV0gcmFpc2UgaWYgYW55IHVzZXItcHJvdmlkZWQgY29tcHV0YXRpb24gcmFpc2VzLlxuICAgR3JhcGggd2lsbCBiZSBsZWZ0IGluIGEgY29oZXJlbnQgc3RhdGUgYnV0IGV4Y2VwdGlvbiB3aWxsIGJlIHByb3BhZ2F0ZWRcbiAgIHRvIHRoZSBvYnNlcnZlci4gKilcbmxldCBzdWJfc2FtcGxlIHF1ZXVlID1cbiAgbGV0IHJlYyBhdXggOiB0eXBlIGEgYiAuIGEgdF8gLT4gYiB0XyAtPiBiID0gZnVuIG9yaWdpbiAtPlxuICAgIGZ1bmN0aW9uXG4gICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBQdXJlIHggLT4geFxuICAgIHwgT3BlcmF0b3IgdCBhcyBzZWxmIC0+XG4gICAgICAoKiB0cnkgdG8gdXNlIGNhY2hlZCB2YWx1ZSwgaWYgcHJlc2VudCAqKVxuICAgICAgbWF0Y2ggdC52YWx1ZSB3aXRoXG4gICAgICB8IEV2YWxfc29tZSB2YWx1ZSAtPlxuICAgICAgICBhY3RpdmF0ZV90cmFjaW5nIHNlbGYgb3JpZ2luIHQudHJhY2U7XG4gICAgICAgIHZhbHVlXG4gICAgICB8IF8gLT5cbiAgICAgICAgdC52YWx1ZSA8LSBFdmFsX3Byb2dyZXNzO1xuICAgICAgICBsZXQgcmVzdWx0IDogYiA9IG1hdGNoIHQuZGVzYyB3aXRoXG4gICAgICAgICAgfCBNYXAgICh4LCBmKSAtPiBmIChhdXggc2VsZiB4KVxuICAgICAgICAgIHwgTWFwMiAoeCwgeSwgZikgLT4gZiAoYXV4IHNlbGYgeCkgKGF1eCBzZWxmIHkpXG4gICAgICAgICAgfCBQYWlyICh4LCB5KSAtPiAoYXV4IHNlbGYgeCwgYXV4IHNlbGYgeSlcbiAgICAgICAgICB8IEFwcCAgKGYsIHgpIC0+IChhdXggc2VsZiBmKSAoYXV4IHNlbGYgeClcbiAgICAgICAgICB8IEZpeCB7ZG9jOyB3cnR9IC0+XG4gICAgICAgICAgICBsZXQgXyA9IGF1eCBzZWxmIHdydCBpblxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF1eCBzZWxmIGRvYyBpblxuICAgICAgICAgICAgaWYgc3ViX2lzX2RhbWFnZWQgd3J0IHRoZW5cbiAgICAgICAgICAgICAgYXV4IG9yaWdpbiBzZWxmXG4gICAgICAgICAgICBlbHNlIChcbiAgICAgICAgICAgICAgaWYgc3ViX2lzX2RhbWFnZWQgZG9jIHRoZW5cbiAgICAgICAgICAgICAgICBkb19pbnZhbGlkYXRlIEZyYWdpbGUgc2VsZjtcbiAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICApXG4gICAgICAgICAgfCBKb2luIHggLT5cbiAgICAgICAgICAgIGxldCBpbnRlcm1lZGlhdGUgPVxuICAgICAgICAgICAgICAoKiBXZSBoYXZlbid0IHRvdWNoZWQgYW55IHN0YXRlIHlldCxcbiAgICAgICAgICAgICAgICAgaXQgaXMgc2FmZSBmb3IgW2F1eF0gdG8gcmFpc2UgKilcbiAgICAgICAgICAgICAgYXV4IHNlbGYgeC5jaGlsZFxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHguaW50ZXJtZWRpYXRlIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgeC5pbnRlcm1lZGlhdGUgPC0gU29tZSBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgIHwgU29tZSB4JyB3aGVuIHgnICE9IGludGVybWVkaWF0ZSAtPlxuICAgICAgICAgICAgICAgIHF1ZXVlIDo9IFJlbGVhc2VfbW9yZSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbiA9IHNlbGY7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSB4JztcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9ICFxdWV1ZTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgeC5pbnRlcm1lZGlhdGUgPC0gU29tZSBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiBpbnRlcm1lZGlhdGU7XG4gICAgICAgICAgICAgIHwgU29tZSBfIC0+ICgpXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBhdXggc2VsZiBpbnRlcm1lZGlhdGVcbiAgICAgICAgICB8IFZhciAgeCAtPiB4LmJpbmRpbmdcbiAgICAgICAgICB8IFByaW0gdCAtPiB0LmFjcXVpcmUgKGluaiBzZWxmKVxuICAgICAgICBpblxuICAgICAgICBiZWdpbiBtYXRjaCB0LnZhbHVlIHdpdGhcbiAgICAgICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gdC52YWx1ZSA8LSBFdmFsX3NvbWUgcmVzdWx0O1xuICAgICAgICAgIHwgRXZhbF9ub25lIHwgRXZhbF9zb21lIF8gLT4gKClcbiAgICAgICAgZW5kO1xuICAgICAgICAoKiBbc2VsZl0ganVzdCBiZWNhbWUgYWN0aXZlLCBzbyBpdCBtYXkgaW52YWxpZGF0ZSBbb3JpZ2luXSBpbiBjYXNlIGl0c1xuICAgICAgICAgICB2YWx1ZSBjaGFuZ2VzIGJlY2F1c2Ugb2YgW3QuZGVzY10sIGxpa2UgaWYgaXQncyBhIHZhcmlhYmxlIGFuZCBnZXRzXG4gICAgICAgICAgIG11dGF0ZWQsIG9yIGlmIGl0J3MgYSBwcmltaXRpdmUgdGhhdCBnZXRzIGludmFsaWRhdGVkLlxuICAgICAgICAgICBXZSBuZWVkIHRvIHB1dCBbb3JpZ2luXSBpbnRvIFtzZWxmLnRyYWNlXSBpbiBjYXNlIGl0IGlzbid0IHRoZXJlIHlldC4gKilcbiAgICAgICAgYWN0aXZhdGVfdHJhY2luZyBzZWxmIG9yaWdpbiB0LnRyYWNlO1xuICAgICAgICByZXN1bHRcbiAgaW5cbiAgYXV4XG5cbnR5cGUgJ2Egcm9vdCA9ICdhIHRcblxubGV0IG9ic2VydmUgPyhvbl9pbnZhbGlkYXRlPWlnbm9yZSkgY2hpbGQgOiBfIHJvb3QgPVxuICBsZXQgcm9vdCA9IFJvb3Qge1xuICAgICAgY2hpbGQgPSBwcmogY2hpbGQ7XG4gICAgICB2YWx1ZSA9IEV2YWxfbm9uZTtcbiAgICAgIG9uX2ludmFsaWRhdGU7XG4gICAgICB0cmFjZV9pZHggPSBJMDtcbiAgICAgIGFjcXVpcmVkID0gZmFsc2U7XG4gICAgfSBpblxuICBpbmogcm9vdFxuXG5leGNlcHRpb24gUmVsZWFzZV9mYWlsdXJlIG9mIGV4biBvcHRpb24gKiByZWxlYXNlX2ZhaWx1cmUgbGlzdFxuXG5sZXQgcmF3X2ZsdXNoX3JlbGVhc2VfcXVldWUgcXVldWUgPVxuICBsZXQgcmVjIGF1eCBmYWlsdXJlcyA9IGZ1bmN0aW9uXG4gICAgfCBSZWxlYXNlX2RvbmUgLT4gZmFpbHVyZXNcbiAgICB8IFJlbGVhc2VfbW9yZSB0IC0+XG4gICAgICBsZXQgZmFpbHVyZXMgPSBzdWJfcmVsZWFzZSBmYWlsdXJlcyB0Lm9yaWdpbiB0LmVsZW1lbnQgaW5cbiAgICAgIGF1eCBmYWlsdXJlcyB0Lm5leHRcbiAgaW5cbiAgYXV4IFtdIHF1ZXVlXG5cbmxldCBmbHVzaF9yZWxlYXNlX3F1ZXVlIHF1ZXVlID1cbiAgbGV0IHF1ZXVlJyA9ICFxdWV1ZSBpblxuICBxdWV1ZSA6PSBSZWxlYXNlX2RvbmU7XG4gIHJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIHF1ZXVlJ1xuXG5sZXQgc2FtcGxlIHF1ZXVlIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSBfIHwgT3BlcmF0b3IgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQgYXMgc2VsZiAtPlxuICAgIG1hdGNoIHQudmFsdWUgd2l0aFxuICAgIHwgRXZhbF9zb21lIHZhbHVlIC0+IHZhbHVlXG4gICAgfCBfIC0+XG4gICAgICAoKiBubyBjYWNoZWQgdmFsdWUsIGNvbXB1dGUgaXQgbm93ICopXG4gICAgICBpZiBub3QgdC5hY3F1aXJlZCB0aGVuIChcbiAgICAgICAgdC5hY3F1aXJlZCA8LSB0cnVlO1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHQuY2hpbGQ7XG4gICAgICApO1xuICAgICAgdC52YWx1ZSA8LSBFdmFsX3Byb2dyZXNzO1xuICAgICAgbGV0IHZhbHVlID0gc3ViX3NhbXBsZSBxdWV1ZSBzZWxmIHQuY2hpbGQgaW5cbiAgICAgIGJlZ2luIG1hdGNoIHQudmFsdWUgd2l0aFxuICAgICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gdC52YWx1ZSA8LSBFdmFsX3NvbWUgdmFsdWU7ICgqIGNhY2hlIHZhbHVlICopXG4gICAgICAgIHwgRXZhbF9ub25lIHwgRXZhbF9zb21lIF8gLT4gKClcbiAgICAgIGVuZDtcbiAgICAgIHZhbHVlXG5cbmxldCBpc19kYW1hZ2VkIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSBfIHwgT3BlcmF0b3IgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHt2YWx1ZSA9IEV2YWxfc29tZSBfOyBffSAtPiBmYWxzZVxuICB8IFJvb3Qge3ZhbHVlID0gRXZhbF9ub25lIHwgRXZhbF9wcm9ncmVzczsgX30gLT4gdHJ1ZVxuXG5sZXQgcmVsZWFzZSBxdWV1ZSB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgXyB8IE9wZXJhdG9yIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0IGFzIHNlbGYgLT5cbiAgICBpZiB0LmFjcXVpcmVkIHRoZW4gKFxuICAgICAgKCogcmVsZWFzZSBzdWJ0cmVlLCByZW1vdmUgY2FjaGVkIHZhbHVlICopXG4gICAgICB0LnZhbHVlIDwtIEV2YWxfbm9uZTtcbiAgICAgIHQuYWNxdWlyZWQgPC0gZmFsc2U7XG4gICAgICBxdWV1ZSA6PSBSZWxlYXNlX21vcmUgeyBvcmlnaW4gPSBzZWxmOyBlbGVtZW50ID0gdC5jaGlsZDsgbmV4dCA9ICFxdWV1ZSB9XG4gICAgKVxuXG5sZXQgc2V0X29uX2ludmFsaWRhdGUgeCBmID1cbiAgbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgXyB8IE9wZXJhdG9yIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0IC0+IHQub25faW52YWxpZGF0ZSA8LSBmXG5cbmxldCBmbHVzaF9vcl9mYWlsIG1haW5fZXhuIHF1ZXVlID1cbiAgbWF0Y2ggZmx1c2hfcmVsZWFzZV9xdWV1ZSBxdWV1ZSB3aXRoXG4gIHwgW10gLT4gKClcbiAgfCBmYWlsdXJlcyAtPiByYWlzZSAoUmVsZWFzZV9mYWlsdXJlIChtYWluX2V4biwgZmFpbHVyZXMpKVxuXG5sZXQgcXVpY2tfc2FtcGxlIHJvb3QgPVxuICBsZXQgcXVldWUgPSByZWYgUmVsZWFzZV9kb25lIGluXG4gIG1hdGNoIHNhbXBsZSBxdWV1ZSByb290IHdpdGhcbiAgfCByZXN1bHQgLT4gZmx1c2hfb3JfZmFpbCBOb25lIHF1ZXVlOyByZXN1bHRcbiAgfCBleGNlcHRpb24gZXhuIC0+IGZsdXNoX29yX2ZhaWwgKFNvbWUgZXhuKSBxdWV1ZTsgcmFpc2UgZXhuXG5cbmxldCBxdWlja19yZWxlYXNlIHJvb3QgPVxuICBsZXQgcXVldWUgPSByZWYgUmVsZWFzZV9kb25lIGluXG4gIHJlbGVhc2UgcXVldWUgcm9vdDtcbiAgZmx1c2hfb3JfZmFpbCBOb25lIHF1ZXVlXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKD4+PSkgeCBmID0gYmluZCB4IH5mXG4gIGxldCAoPnw9KSB4IGYgPSBtYXAgeCB+ZlxuICBsZXQgKDwqPikgPSBhcHBcbmVuZFxuXG4oKiRSXG4gIGxldCB4ID0gdmFyIDAgaW5cbiAgbGV0IHkgPSBtYXAgfmY6c3VjYyAoZ2V0IHgpIGluXG4gIGxldCBvX3kgPSBMd2Qub2JzZXJ2ZSB5IGluXG4gIGFzc2VydF9lcXVhbCAxIChxdWlja19zYW1wbGUgb195KTtcbiAgc2V0IHggMTA7XG4gIGFzc2VydF9lcXVhbCAxMSAocXVpY2tfc2FtcGxlIG9feSk7XG4gICopXG4iLCJcbnR5cGUgJ2EgbW9ub2lkID0gJ2EgKiAoJ2EgLT4gJ2EgLT4gJ2EpXG5cbmxldCBsaWZ0X21vbm9pZCAoemVybywgcGx1cykgPVxuICAoTHdkLnJldHVybiB6ZXJvLCBMd2QubWFwMiB+ZjpwbHVzKVxuXG5sZXQgbWFwX3JlZHVjZSBpbmogKHplcm8sIHBsdXMpIGl0ZW1zID1cbiAgbGV0IHJlYyBjb25zX21vbm9pZCBjIHhzIHYgPVxuICAgIG1hdGNoIHhzIHdpdGhcbiAgICB8IChjJywgdicpIDo6IHhzIHdoZW4gYyA9IGMnIC0+XG4gICAgICBjb25zX21vbm9pZCAoYyArIDEpIHhzIChwbHVzIHYnIHYpXG4gICAgfCB4cyAtPiAoYywgdikgOjogeHNcbiAgaW5cbiAgbGV0IGNvbnNfbW9ub2lkIHhzIHYgPSBjb25zX21vbm9pZCAwIHhzIChpbmogdikgaW5cbiAgbWF0Y2ggTGlzdC5mb2xkX2xlZnQgY29uc19tb25vaWQgW10gaXRlbXMgd2l0aFxuICB8IFtdIC0+IHplcm9cbiAgfCAoXyx4KSA6OiB4cyAtPlxuICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIChfLCB2KSAtPiBwbHVzIHYgYWNjKSB4IHhzXG5cbmxldCByZWR1Y2UgbW9ub2lkIGl0ZW1zID0gbWFwX3JlZHVjZSAoZnVuIHggLT4geCkgbW9ub2lkIGl0ZW1zXG5cbmxldCByZWMgY29uc19sd2RfbW9ub2lkIHBsdXMgYyB4cyB2ID1cbiAgbWF0Y2ggeHMgd2l0aFxuICB8IChjJywgdicpIDo6IHhzIHdoZW4gYyA9IGMnIC0+XG4gICAgY29uc19sd2RfbW9ub2lkIHBsdXMgKGMgKyAxKSB4cyAoTHdkLm1hcDIgfmY6cGx1cyB2JyB2KVxuICB8IHhzIC0+IChjLCB2KSA6OiB4c1xuXG5sZXQgcGFjayAoemVybywgcGx1cykgaXRlbXMgPVxuICBtYXRjaCBMaXN0LmZvbGRfbGVmdCAoY29uc19sd2RfbW9ub2lkIHBsdXMgMCkgW10gaXRlbXMgd2l0aFxuICB8IFtdIC0+IEx3ZC5yZXR1cm4gemVyb1xuICB8IChfLHgpIDo6IHhzIC0+XG4gICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgKF8sIHYpIC0+IEx3ZC5tYXAyIH5mOnBsdXMgdiBhY2MpIHggeHNcblxubGV0IHBhY2tfc2VxICh6ZXJvLCBwbHVzKSBpdGVtcyA9XG4gIG1hdGNoIFNlcS5mb2xkX2xlZnQgKGNvbnNfbHdkX21vbm9pZCBwbHVzIDApIFtdIGl0ZW1zIHdpdGhcbiAgfCBbXSAtPiBMd2QucmV0dXJuIHplcm9cbiAgfCAoXyx4KSA6OiB4cyAtPlxuICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIChfLCB2KSAtPiBMd2QubWFwMiB+ZjpwbHVzIHYgYWNjKSB4IHhzXG5cbmxldCByZWMgbWFwX2wgKGY6J2EgLT4gJ2IgTHdkLnQpIChsOidhIGxpc3QpIDogJ2IgbGlzdCBMd2QudCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IEx3ZC5yZXR1cm4gW11cbiAgfCB4IDo6IHRsIC0+IEx3ZC5tYXAyIH5mOkxpc3QuY29ucyAoZiB4KSAobWFwX2wgZiB0bClcblxubGV0IGZsYXR0ZW5fbCAobDonYSBMd2QudCBsaXN0KSA6ICdhIGxpc3QgTHdkLnQgPVxuICBtYXBfbCAoZnVuIHgtPngpIGxcblxuKCoqIHsxIE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zfVxuXG4gICAgSSBkb24ndCBrbm93IHdoZXJlIHRvIHB1dCB0aGVzZSwgYnV0IHRoZXkgYXJlIHVzZWZ1bCwgZXNwZWNpYWxseSBmb3JcbiAgICBVSS1yZWxhdGVkIGNvbXB1dGF0aW9ucy5cbiopXG5cbmxldCBtaW5pIGEgYiA6IGludCA9IGlmIGIgPCBhIHRoZW4gYiBlbHNlIGFcblxubGV0IG1heGkgYSBiIDogaW50ID0gaWYgYiA+IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgY2xhbXBpIHggfm1pbiB+bWF4IDogaW50ID1cbiAgaWYgeCA8IG1pbiB0aGVuXG4gICAgbWluXG4gIGVsc2UgaWYgeCA+IG1heCB0aGVuXG4gICAgbWF4XG4gIGVsc2VcbiAgICB4XG5cbmxldCBtaW5mIGEgYiA6IGZsb2F0ID0gaWYgYiA8IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgbWF4ZiBhIGIgOiBmbG9hdCA9IGlmIGIgPiBhIHRoZW4gYiBlbHNlIGFcblxubGV0IGNsYW1wZiB4IH5taW4gfm1heCA6IGZsb2F0ID1cbiAgaWYgeCA8IG1pbiB0aGVuXG4gICAgbWluXG4gIGVsc2UgaWYgeCA+IG1heCB0aGVuXG4gICAgbWF4XG4gIGVsc2VcbiAgICB4XG4iLCJ0eXBlICdhIGJpbmRpbmcgPVxuICB8IEJvdW5kIG9mIHsgdmFsdWUgOiAnYSA7IG11dGFibGUgdmFsaWQgOiBib29sIH1cbiAgfCBVbmJvdW5kXG5cbnR5cGUgJ2EgdHJlZSA9XG4gIHwgTGVhZlxuICB8IE5vZGUgb2Yge1xuICAgICAgbXV0YWJsZSB2ZXJzaW9uIDogaW50O1xuICAgICAgbXV0YWJsZSBsZWZ0ICAgIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgYmluZGluZyA6ICdhIGJpbmRpbmc7XG4gICAgICBtdXRhYmxlIHJpZ2h0ICAgOiAnYSB0cmVlO1xuICAgICAgbXV0YWJsZSBwYXJlbnQgIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgc2l6ZSAgICA6IGludDtcbiAgICB9XG4gIHwgUm9vdCBvZiB7XG4gICAgICBtdXRhYmxlIHZlcnNpb24gOiBpbnQ7XG4gICAgICBtdXRhYmxlIGNoaWxkIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgZ2VuZXJhdGlvbiA6IHVuaXQgcmVmO1xuICAgICAgbXV0YWJsZSBvbl9pbnZhbGlkYXRlIDogT2JqLnQgTHdkLnByaW0gbGlzdDtcbiAgICB9XG5cbnR5cGUgJ2EgdCA9ICdhIHRyZWVcbnR5cGUgJ2Egcm93ID0gJ2EgdHJlZVxuXG5sZXQgbm90X29yaWdpbiA9IHJlZiAoKSAoKiBub3QgeyFvcmlnaW59ICopXG5sZXQgb3JpZ2luID0gcmVmICgpICgqIG5vdCB7IW5vdF9vcmlnaW59ICopXG5cbmxldCBtYWtlICgpID1cbiAgUm9vdCB7IGNoaWxkID0gTGVhZjsgZ2VuZXJhdGlvbiA9IG9yaWdpbjsgdmVyc2lvbiA9IDA7IG9uX2ludmFsaWRhdGUgPSBbXSB9XG5cbmxldCBzZXRfcGFyZW50IH5wYXJlbnQgPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIG4gLT4gbi5wYXJlbnQgPC0gcGFyZW50XG4gIHwgTGVhZiAtPiAoKVxuXG5sZXQgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQgfm5ld2NoaWxkID1cbiAgbWF0Y2ggcGFyZW50IHdpdGhcbiAgfCBSb290IHIgLT5cbiAgICBhc3NlcnQgKHIuY2hpbGQgPT0gb2xkY2hpbGQpO1xuICAgIHIuY2hpbGQgPC0gbmV3Y2hpbGRcbiAgfCBOb2RlIG4gd2hlbiBuLmxlZnQgPT0gb2xkY2hpbGQgLT5cbiAgICBuLmxlZnQgPC0gbmV3Y2hpbGRcbiAgfCBOb2RlIG4gd2hlbiBuLnJpZ2h0ID09IG9sZGNoaWxkIC0+XG4gICAgbi5yaWdodCA8LSBuZXdjaGlsZFxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBtYWtlX25vZGUgc2V0IH5sZWZ0IH5yaWdodCB+cGFyZW50ID1cbiAgbGV0IGJpbmRpbmcgPSBtYXRjaCBzZXQgd2l0aFxuICAgIHwgTm9uZSAtPiBVbmJvdW5kXG4gICAgfCBTb21lIHZhbHVlIC0+IEJvdW5kIHsgdmFsdWUgOyB2YWxpZCA9IHRydWUgfVxuICBpblxuICBsZXQgbm9kZSA9IE5vZGUgeyBsZWZ0OyByaWdodDsgcGFyZW50OyB2ZXJzaW9uID0gMDsgc2l6ZSA9IDA7IGJpbmRpbmcgfSBpblxuICBzZXRfcGFyZW50IGxlZnQgIH5wYXJlbnQ6bm9kZTtcbiAgc2V0X3BhcmVudCByaWdodCB+cGFyZW50Om5vZGU7XG4gIG5vZGVcblxubGV0IHJlYyByYXdfaW52YWxpZGF0ZSA9IGZ1bmN0aW9uXG4gIHwgTm9kZSB7IHNpemUgPSAwOyBfIH0gLT4gKClcbiAgfCBOb2RlIHQgLT5cbiAgICB0LnNpemUgPC0gMDtcbiAgICByYXdfaW52YWxpZGF0ZSB0LnBhcmVudFxuICB8IFJvb3QgciAtPlxuICAgIExpc3QuaXRlciBMd2QuaW52YWxpZGF0ZSByLm9uX2ludmFsaWRhdGVcbiAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcHJlcGVuZCA/c2V0ID0gZnVuY3Rpb25cbiAgfCBSb290IHIgYXMgcGFyZW50IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgcGFyZW50O1xuICAgIGxldCBub2RlID0gbWFrZV9ub2RlIHNldCB+bGVmdDpMZWFmIH5yaWdodDpyLmNoaWxkIH5wYXJlbnQgaW5cbiAgICByLmNoaWxkIDwtIG5vZGU7XG4gICAgbm9kZVxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwcmVwZW5kJyB4IHNldCA9IGlnbm9yZSAocHJlcGVuZCB4IH5zZXQpXG5cbmxldCBhcHBlbmQgP3NldCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCByIGFzIHBhcmVudCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHBhcmVudDtcbiAgICBsZXQgbm9kZSA9IG1ha2Vfbm9kZSBzZXQgfmxlZnQ6ci5jaGlsZCB+cmlnaHQ6TGVhZiB+cGFyZW50IGluXG4gICAgci5jaGlsZCA8LSBub2RlO1xuICAgIG5vZGVcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgYXBwZW5kJyB4IHNldCA9IGlnbm9yZSAoYXBwZW5kIHggfnNldClcblxubGV0IGJlZm9yZSA/c2V0ID0gZnVuY3Rpb25cbiAgfCBOb2RlIHsgcGFyZW50ID0gTGVhZiA7IF8gfSB8IExlYWYgLT4gTGVhZlxuICB8IE5vZGUgbiBhcyBwYXJlbnQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSBwYXJlbnQ7XG4gICAgbGV0IG5vZGUgPSBtYWtlX25vZGUgc2V0IH5sZWZ0Om4ubGVmdCB+cmlnaHQ6TGVhZiB+cGFyZW50IGluXG4gICAgbi5sZWZ0IDwtIG5vZGU7XG4gICAgbm9kZVxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGFmdGVyID9zZXQgPSBmdW5jdGlvblxuICB8IE5vZGUgeyBwYXJlbnQgPSBMZWFmIDsgXyB9IHwgTGVhZiAtPiBMZWFmXG4gIHwgTm9kZSBuIGFzIHBhcmVudCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHBhcmVudDtcbiAgICBsZXQgbm9kZSA9IG1ha2Vfbm9kZSBzZXQgfmxlZnQ6TGVhZiB+cmlnaHQ6bi5yaWdodCB+cGFyZW50IGluXG4gICAgbi5yaWdodCA8LSBub2RlO1xuICAgIG5vZGVcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBnZXQgPSBmdW5jdGlvblxuICB8IE5vZGUgeyBiaW5kaW5nID0gQm91bmQgeyB2YWx1ZSA7IF8gfSA7IF8gfSAtPiBTb21lIHZhbHVlXG4gIHwgTGVhZiB8IFJvb3QgXyB8IE5vZGUgeyBiaW5kaW5nID0gVW5ib3VuZCA7IF8gfSAtPiBOb25lXG5cbmxldCBpbnZhbGlkYXRlX2JpbmRpbmcgPSBmdW5jdGlvblxuICB8IFVuYm91bmQgLT4gKClcbiAgfCBCb3VuZCBiIC0+IGIudmFsaWQgPC0gZmFsc2VcblxubGV0IHNldF9iaW5kaW5nIHggPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIHwgTm9kZSB7IHBhcmVudCA9IExlYWY7IF8gfSAtPiAoKVxuICB8IE5vZGUgbiBhcyB0IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgdDtcbiAgICBpbnZhbGlkYXRlX2JpbmRpbmcgbi5iaW5kaW5nO1xuICAgIG4uYmluZGluZyA8LSB4XG5cbmxldCBzZXQgdCB2YWx1ZSA9IHNldF9iaW5kaW5nIChCb3VuZCB7IHZhbHVlOyB2YWxpZCA9IHRydWUgfSkgdFxubGV0IHVuc2V0IHQgPSBzZXRfYmluZGluZyBVbmJvdW5kIHRcblxubGV0IGlzX2JvdW5kID0gZnVuY3Rpb25cbiAgfCBMZWFmIHwgTm9kZSB7IHBhcmVudCA9IExlYWY7IF8gfSAtPiBmYWxzZVxuICB8IFJvb3QgXyB8IE5vZGUgXyAtPiB0cnVlXG5cbmxldCByZWMgam9pbiBsZWZ0ID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUgKHsgbGVmdCA9IExlYWY7IF8gfSBhcyBuKSBhcyBzZWxmIC0+XG4gICAgbi5sZWZ0IDwtIGxlZnQ7XG4gICAgc2V0X3BhcmVudCBsZWZ0IH5wYXJlbnQ6c2VsZjtcbiAgICBzZWxmXG4gIHwgTm9kZSBub2RlIC0+XG4gICAgam9pbiBsZWZ0IG5vZGUubGVmdFxuXG5sZXQgcmVtb3ZlID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIHwgTm9kZSB7cGFyZW50ID0gTGVhZjsgX30gLT4gKClcbiAgfCBOb2RlICh7bGVmdDsgcmlnaHQ7IHBhcmVudDsgX30gYXMgbikgYXMgdCAtPlxuICAgIGludmFsaWRhdGVfYmluZGluZyBuLmJpbmRpbmc7XG4gICAgbi5sZWZ0IDwtIExlYWY7XG4gICAgbi5yaWdodCA8LSBMZWFmO1xuICAgIG4ucGFyZW50IDwtIExlYWY7XG4gICAgbi5iaW5kaW5nIDwtIFVuYm91bmQ7XG4gICAgbi52ZXJzaW9uIDwtIG1heF9pbnQ7XG4gICAgbGV0IGpvaW4sIGludmFsaWQgPSBtYXRjaCBsZWZ0LCByaWdodCB3aXRoXG4gICAgICB8IExlYWYsIG90aGVyIHwgb3RoZXIsIExlYWYgLT4gKG90aGVyLCBwYXJlbnQpXG4gICAgICB8IF8gLT4gKHJpZ2h0LCBqb2luIGxlZnQgcmlnaHQpXG4gICAgaW5cbiAgICByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZDp0IH5uZXdjaGlsZDpqb2luO1xuICAgIHNldF9wYXJlbnQgam9pbiB+cGFyZW50O1xuICAgIHJhd19pbnZhbGlkYXRlIGludmFsaWRcblxubGV0IHJlYyBjbGVhciA9IGZ1bmN0aW9uXG4gIHwgTGVhZiAtPiAoKVxuICB8IE5vZGUgKHtsZWZ0OyByaWdodDsgX30gYXMgbikgLT5cbiAgICBpbnZhbGlkYXRlX2JpbmRpbmcgbi5iaW5kaW5nO1xuICAgIG4ubGVmdCA8LSBMZWFmO1xuICAgIG4ucmlnaHQgPC0gTGVhZjtcbiAgICBuLnBhcmVudCA8LSBMZWFmO1xuICAgIG4uYmluZGluZyA8LSBVbmJvdW5kO1xuICAgIG4udmVyc2lvbiA8LSBtYXhfaW50O1xuICAgIGNsZWFyIGxlZnQ7XG4gICAgY2xlYXIgcmlnaHRcbiAgfCBSb290IHIgYXMgcm9vdCAtPlxuICAgIGxldCBjaGlsZCA9IHIuY2hpbGQgaW5cbiAgICByLmNoaWxkIDwtIExlYWY7XG4gICAgY2xlYXIgY2hpbGQ7XG4gICAgcmF3X2ludmFsaWRhdGUgcm9vdFxuXG4oKiBUcmVlIGJhbGFuY2luZyAqKVxuXG5sZXQgc2l6ZSA9IGZ1bmN0aW9uXG4gIHwgTm9kZSBub2RlIC0+XG4gICAgYXNzZXJ0IChub2RlLnNpemUgPD4gMCk7XG4gICAgbm9kZS5zaXplXG4gIHwgTGVhZiAtPiAwXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiogW3NtYWxsZXJfZWxsIHNtaW4gc21heF0gaWZmXG4gICAgLSBbc21pbl0gaXMgbGVzcyB0aGFuIFtzbWF4XVxuICAgIC0gW3NtaW5dIGFuZCBbc21heF0gZGlmZmVycyBieSBsZXNzIHRoYW4gdHdvIG1hZ25pdHVkZSBvcmRlcnMsIGkuZVxuICAgICAgbXNicyhzbWluKSA+PSBtc2JzKHNtYXgpIC0gMVxuICAgICAgd2hlcmUgbXNicyBpcyB0aGUgaW5kZXggb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCAqKVxubGV0IHNtYWxsZXJfZWxsIHNtaW4gc21heCA9IChzbWluIDwgc21heCkgJiYgKChzbWluIGxhbmQgc21heCkgbHNsIDEgPCBzbWF4KVxuXG4oKiogW2Rpc2JhbGFuY2VkIHNtaW4gc21heF0gY2hlY2sgaWYgdHdvIHN1Yi10cmVlcyBvZiBzaXplIFtzbWluXSBhbmQgW3NtYXhdLFxuICAgIGFyZSBkaXNiYWxhbmN6ZWQuIFRoYXQgaXMsIG1zYnMoc21pbikgPCBtc2JzKHNtYXgpIC0gMSAqKVxubGV0IGRpc2JhbGFuY2VkIHNtaW4gc21heCA9IHNtYWxsZXJfZWxsIHNtaW4gKHNtYXggbHNyIDEpXG5cbmxldCByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZCB+bmV3Y2hpbGQgPVxuICBtYXRjaCBwYXJlbnQgd2l0aFxuICB8IFJvb3QgciAtPlxuICAgIGFzc2VydCAoci5jaGlsZCA9PSBvbGRjaGlsZCk7XG4gICAgci5jaGlsZCA8LSBuZXdjaGlsZDtcbiAgfCBOb2RlIG4gd2hlbiBuLmxlZnQgPT0gb2xkY2hpbGQgLT5cbiAgICBuLmxlZnQgPC0gbmV3Y2hpbGRcbiAgfCBOb2RlIG4gd2hlbiBuLnJpZ2h0ID09IG9sZGNoaWxkIC0+XG4gICAgbi5yaWdodCA8LSBuZXdjaGlsZFxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCByZWMgcm90X2xlZnQgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgTm9kZSAoeyByaWdodCA9IChOb2RlIHJuKSBhcyByOyBffSBhcyBzbikgYXMgcyAtPlxuICAgIGxldCBwYXJlbnQgPSBzbi5wYXJlbnQgaW5cbiAgICBsZXQgcmwgPSBtYXRjaCBybi5sZWZ0IHdpdGhcbiAgICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBMZWFmIC0+IExlYWZcbiAgICAgIHwgKE5vZGUgcmxuKSBhcyBybCAtPlxuICAgICAgICBybG4ucGFyZW50IDwtIHM7XG4gICAgICAgIHJsXG4gICAgaW5cbiAgICBybi5sZWZ0IDwtIHM7XG4gICAgc24ucmlnaHQgPC0gcmw7XG4gICAgc24ucGFyZW50IDwtIHI7XG4gICAgcm4ucGFyZW50IDwtIHBhcmVudDtcbiAgICByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZDpzIH5uZXdjaGlsZDpyO1xuICAgIGlnbm9yZSAoYmFsYW5jZSB2ZXJzaW9uIHMpO1xuICAgIGJhbGFuY2UgdmVyc2lvbiByXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuYW5kIHJvdF9yaWdodCB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBOb2RlICh7IGxlZnQgPSAoTm9kZSBsbikgYXMgbDsgX30gYXMgc24pIGFzIHMgLT5cbiAgICBsZXQgcGFyZW50ID0gc24ucGFyZW50IGluXG4gICAgbGV0IGxyID0gbWF0Y2ggbG4ucmlnaHQgd2l0aFxuICAgICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IExlYWYgLT4gTGVhZlxuICAgICAgfCAoTm9kZSBscm4pIGFzIGxyIC0+XG4gICAgICAgIGxybi5wYXJlbnQgPC0gcztcbiAgICAgICAgbHJcbiAgICBpblxuICAgIGxuLnJpZ2h0IDwtIHM7XG4gICAgc24ubGVmdCA8LSBscjtcbiAgICBzbi5wYXJlbnQgPC0gbDtcbiAgICBsbi5wYXJlbnQgPC0gcGFyZW50O1xuICAgIHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkOnMgfm5ld2NoaWxkOmw7XG4gICAgaWdub3JlIChiYWxhbmNlIHZlcnNpb24gcyk7XG4gICAgYmFsYW5jZSB2ZXJzaW9uIGxcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5hbmQgaW5jX2xlZnQgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIHtyaWdodDsgX30gYXMgc2VsZiAtPlxuICAgIGJlZ2luIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICAgIHwgTm9kZSBybiB3aGVuIHNtYWxsZXJfZWxsIChzaXplIHJuLnJpZ2h0KSAoc2l6ZSBybi5sZWZ0KSAtPlxuICAgICAgICBpZ25vcmUgKHJvdF9yaWdodCB2ZXJzaW9uIHJpZ2h0KVxuICAgICAgfCBfIC0+ICgpXG4gICAgZW5kO1xuICAgIHJvdF9sZWZ0IHZlcnNpb24gc2VsZlxuXG5hbmQgaW5jX3JpZ2h0IHZlcnNpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSB7bGVmdDsgX30gYXMgc2VsZiAtPlxuICAgIGJlZ2luIG1hdGNoIGxlZnQgd2l0aFxuICAgICAgfCBOb2RlIGxuIHdoZW4gc21hbGxlcl9lbGwgKHNpemUgbG4ubGVmdCkgKHNpemUgbG4ucmlnaHQpIC0+XG4gICAgICAgIGlnbm9yZSAocm90X2xlZnQgdmVyc2lvbiBsZWZ0KVxuICAgICAgfCBfIC0+ICgpXG4gICAgZW5kO1xuICAgIHJvdF9yaWdodCB2ZXJzaW9uIHNlbGZcblxuYW5kIGJhbGFuY2UgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIG5vZGUgYXMgc2VsZiAtPlxuICAgIGxldCBzbCA9IHNpemUgbm9kZS5sZWZ0IGFuZCBzciA9IHNpemUgbm9kZS5yaWdodCBpblxuICAgIGlmIHNsIDwgc3IgdGhlbiAoXG4gICAgICBpZiBkaXNiYWxhbmNlZCBzbCBzclxuICAgICAgdGhlbiBpbmNfbGVmdCB2ZXJzaW9uIHNlbGZcbiAgICAgIGVsc2UgKG5vZGUudmVyc2lvbiA8LSB2ZXJzaW9uOyBub2RlLnNpemUgPC0gMSArIHNsICsgc3I7IHNlbGYpXG4gICAgKSBlbHNlIChcbiAgICAgIGlmIGRpc2JhbGFuY2VkIHNyIHNsXG4gICAgICB0aGVuIGluY19yaWdodCB2ZXJzaW9uIHNlbGZcbiAgICAgIGVsc2UgKG5vZGUudmVyc2lvbiA8LSB2ZXJzaW9uOyBub2RlLnNpemUgPC0gMSArIHNsICsgc3I7IHNlbGYpXG4gICAgKVxuXG5sZXQgcmVjIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+ICgpXG4gIHwgTGVhZiAtPiAoKVxuICB8IE5vZGUgbm9kZSBhcyBzZWxmIC0+XG4gICAgaWYgbm9kZS5zaXplID0gMCB0aGVuXG4gICAgICBtYXRjaCBub2RlLmxlZnQgd2l0aFxuICAgICAgfCBOb2RlIHtzaXplID0gMDsgX30gLT5cbiAgICAgICAgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uIG5vZGUubGVmdFxuICAgICAgfCBfIC0+XG4gICAgICAgIG1hdGNoIG5vZGUucmlnaHQgd2l0aFxuICAgICAgICB8IE5vZGUge3NpemUgPSAwOyBffSAtPlxuICAgICAgICAgIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiBub2RlLnJpZ2h0XG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGxldCBwYXJlbnQgPSBub2RlLnBhcmVudCBpblxuICAgICAgICAgIGlnbm9yZSAoYmFsYW5jZSB2ZXJzaW9uIHNlbGYpO1xuICAgICAgICAgIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiBwYXJlbnRcblxubGV0IHJlYyByZXNldF92ZXJzaW9uIHZlcnNpb24gPSBmdW5jdGlvblxuICB8IExlYWYgLT4gKClcbiAgfCBOb2RlIG4gLT5cbiAgICBuLnZlcnNpb24gPC0gdmVyc2lvbjtcbiAgICByZXNldF92ZXJzaW9uIHZlcnNpb24gbi5sZWZ0O1xuICAgIHJlc2V0X3ZlcnNpb24gdmVyc2lvbiBuLnJpZ2h0XG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmViYWxhbmNlID0gZnVuY3Rpb25cbiAgfCBSb290IHIgLT5cbiAgICBiZWdpbiBtYXRjaCByLmNoaWxkIHdpdGhcbiAgICAgIHwgTm9kZSB7IHNpemUgPSAwOyBfIH0gLT5cbiAgICAgICAgbGV0IHZlcnNpb24gPSBzdWNjIHIudmVyc2lvbiBpblxuICAgICAgICBsZXQgdmVyc2lvbiA9XG4gICAgICAgICAgaWYgdmVyc2lvbiA9IG1heF9pbnQgdGhlbiAoXG4gICAgICAgICAgICByLmdlbmVyYXRpb24gPC0gcmVmICgpO1xuICAgICAgICAgICAgcmVzZXRfdmVyc2lvbiAwIHIuY2hpbGQ7XG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICAgIGVsc2UgdmVyc2lvblxuICAgICAgICBpblxuICAgICAgICByLnZlcnNpb24gPC0gdmVyc2lvbjtcbiAgICAgICAgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uIHIuY2hpbGQ7XG4gICAgICAgIHZlcnNpb25cbiAgICAgIHwgTm9kZSBfIHwgTGVhZiAtPiByLnZlcnNpb25cbiAgICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgIGVuZFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwbHVzICh6ZXJvLCBwbHVzKSB4IHkgPVxuICBpZiB4ID09IHplcm8gdGhlbiB5XG4gIGVsc2UgaWYgeSA9PSB6ZXJvIHRoZW4geFxuICBlbHNlIHBsdXMgeCB5XG5cbnR5cGUgKCdhLCAnYikgcmVkdWN0aW9uX3RyZWUgPVxuICB8IFJlZF9sZWFmXG4gIHwgUmVkX25vZGUgb2Yge1xuICAgICAgY2VsbDogJ2Egcm93O1xuICAgICAgYmluZGluZzogJ2EgYmluZGluZztcbiAgICAgIHJlZHVjdGlvbjogJ2I7XG4gICAgICBhZ2dyZWdhdGU6ICdiO1xuICAgICAgbGVmdCA6ICgnYSwgJ2IpIHJlZHVjdGlvbl90cmVlO1xuICAgICAgcmlnaHQgOiAoJ2EsICdiKSByZWR1Y3Rpb25fdHJlZTtcbiAgICB9XG5cbnR5cGUgKCdhLCAnYikgcmVkdWN0aW9uID0ge1xuICBtdXRhYmxlIHZlcnNpb246IGludDtcbiAgc291cmNlOiAnYSB0cmVlO1xuICBtdXRhYmxlIHJlc3VsdCA6ICgnYSwgJ2IpIHJlZHVjdGlvbl90cmVlO1xuICBtdXRhYmxlIGdlbmVyYXRpb246IHVuaXQgcmVmO1xuICBtYXBwZXI6ICdhIHJvdyAtPiAnYSAtPiAnYjtcbiAgbW9ub2lkOiAnYiBMd2RfdXRpbHMubW9ub2lkO1xufVxuXG5cbmxldCBleHRyYWN0X2JpbmRpbmdzIHRyZWUgPVxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICAgIHwgUmVkX2xlYWYgLT4gYWNjXG4gICAgfCBSZWRfbm9kZSBybm9kZSAtPlxuICAgICAgbGV0IGFjYyA9IGF1eCBhY2Mgcm5vZGUucmlnaHQgaW5cbiAgICAgIGxldCBhY2MgPSBtYXRjaCBybm9kZS5iaW5kaW5nIHdpdGhcbiAgICAgICAgfCBVbmJvdW5kIC0+IGFjY1xuICAgICAgICB8IEJvdW5kIHsgdmFsaWQgPSBmYWxzZTsgXyB9IC0+IGFjY1xuICAgICAgICB8IF8gLT4gKHJub2RlLmJpbmRpbmcsIHJub2RlLnJlZHVjdGlvbikgOjogYWNjXG4gICAgICBpblxuICAgICAgYXV4IGFjYyBybm9kZS5sZWZ0XG4gIGluXG4gIGF1eCBbXSB0cmVlXG5cbmxldCBmdWxsX3JlYnVpbGQgcmVkIHRyZWUgPVxuICBsZXQgYmluZGluZ3MgPSByZWYgKGV4dHJhY3RfYmluZGluZ3MgcmVkLnJlc3VsdCkgaW5cbiAgbGV0IHJlYyBhdXggPSBmdW5jdGlvblxuICAgIHwgTm9kZSBub2RlIGFzIGNlbGwgLT5cbiAgICAgIGxldCBsZWZ0ID0gYXV4IG5vZGUubGVmdCBpblxuICAgICAgbGV0IHJlZHVjdGlvbiA9XG4gICAgICAgIG1hdGNoIG5vZGUuYmluZGluZywgIWJpbmRpbmdzIHdpdGhcbiAgICAgICAgfCBVbmJvdW5kLCBfIC0+IGZzdCByZWQubW9ub2lkXG4gICAgICAgIHwgYmluZGluZywgKChiaW5kaW5nJywgcmVkdWN0aW9uKSA6OiBiaW5kaW5ncycpXG4gICAgICAgICAgd2hlbiBiaW5kaW5nID09IGJpbmRpbmcnIC0+XG4gICAgICAgICAgYmluZGluZ3MgOj0gYmluZGluZ3MnO1xuICAgICAgICAgIHJlZHVjdGlvblxuICAgICAgICB8IEJvdW5kIGIsIF8gLT4gYXNzZXJ0IGIudmFsaWQ7IHJlZC5tYXBwZXIgY2VsbCBiLnZhbHVlXG4gICAgICBpblxuICAgICAgbGV0IHJpZ2h0ID0gYXV4IG5vZGUucmlnaHQgaW5cbiAgICAgIGxldCBhZ2dyZWdhdGUgPSBtYXRjaCBsZWZ0IHdpdGhcbiAgICAgICAgfCBSZWRfbGVhZiAtPiByZWR1Y3Rpb25cbiAgICAgICAgfCBSZWRfbm9kZSByIC0+IHBsdXMgcmVkLm1vbm9pZCByLmFnZ3JlZ2F0ZSByZWR1Y3Rpb25cbiAgICAgIGluXG4gICAgICBsZXQgYWdncmVnYXRlID0gbWF0Y2ggcmlnaHQgd2l0aFxuICAgICAgICB8IFJlZF9sZWFmIC0+IGFnZ3JlZ2F0ZVxuICAgICAgICB8IFJlZF9ub2RlIHIgLT4gcGx1cyByZWQubW9ub2lkIGFnZ3JlZ2F0ZSByLmFnZ3JlZ2F0ZVxuICAgICAgaW5cbiAgICAgIFJlZF9ub2RlIHtcbiAgICAgICAgY2VsbDtcbiAgICAgICAgYmluZGluZyA9IG5vZGUuYmluZGluZztcbiAgICAgICAgcmVkdWN0aW9uO1xuICAgICAgICBhZ2dyZWdhdGU7XG4gICAgICAgIGxlZnQ7XG4gICAgICAgIHJpZ2h0O1xuICAgICAgfVxuICAgIHwgTGVhZiAtPiBSZWRfbGVhZlxuICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICBpblxuICBsZXQgcmVzdWx0ID0gYXV4IHRyZWUgaW5cbiAgYXNzZXJ0ICghYmluZGluZ3MgPSBbXSk7XG4gIHJlc3VsdFxuXG5sZXQgZXh0cmFjdF9mcmluZ2UgdmVyc2lvbiB0cmVlID1cbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgICB8IFJlZF9sZWFmIC0+IGFjY1xuICAgIHwgUmVkX25vZGUgcm5vZGUgYXMgdHJlZSAtPlxuICAgICAgbWF0Y2ggcm5vZGUuY2VsbCB3aXRoXG4gICAgICB8IE5vZGUgbm9kZSB3aGVuIG5vZGUudmVyc2lvbiA8PSB2ZXJzaW9uIC0+IHRyZWUgOjogYWNjXG4gICAgICB8IF8gLT5cbiAgICAgICAgbGV0IGFjYyA9IGF1eCBhY2Mgcm5vZGUucmlnaHQgaW5cbiAgICAgICAgbGV0IGFjYyA9IG1hdGNoIHJub2RlLmJpbmRpbmcgd2l0aFxuICAgICAgICAgIHwgVW5ib3VuZCAtPiBhY2NcbiAgICAgICAgICB8IEJvdW5kIHsgdmFsaWQgPSBmYWxzZTsgXyB9IC0+IGFjY1xuICAgICAgICAgIHwgXyAtPiB0cmVlIDo6IGFjY1xuICAgICAgICBpblxuICAgICAgICBhdXggYWNjIHJub2RlLmxlZnRcbiAgaW5cbiAgYXV4IFtdIHRyZWVcblxubGV0IGluY3JlbWVudGFsX3JlYnVpbGQgcmVkIHZlcnNpb24gdHJlZSA9XG4gIGxldCBmcmluZ2UgPSByZWYgKGV4dHJhY3RfZnJpbmdlIHZlcnNpb24gcmVkLnJlc3VsdCkgaW5cbiAgbGV0IHJlYyBhdXggPSBmdW5jdGlvblxuICAgIHwgTm9kZSBub2RlIGFzIGNlbGwgd2hlbiBub2RlLnZlcnNpb24gPD0gdmVyc2lvbiAtPlxuICAgICAgYmVnaW4gbWF0Y2ggIWZyaW5nZSB3aXRoXG4gICAgICAgIHwgKFJlZF9ub2RlIHJub2RlIGFzIHJlZHVjdGlvbikgOjogZnJpbmdlJyAtPlxuICAgICAgICAgIGFzc2VydCAocm5vZGUuY2VsbCA9PSBjZWxsKTtcbiAgICAgICAgICBmcmluZ2UgOj0gZnJpbmdlJztcbiAgICAgICAgICByZWR1Y3Rpb25cbiAgICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgZW5kXG4gICAgfCBOb2RlIG5vZGUgYXMgY2VsbCAtPlxuICAgICAgbGV0IGxlZnQgPSBhdXggbm9kZS5sZWZ0IGluXG4gICAgICBsZXQgcmVkdWN0aW9uID1cbiAgICAgICAgbWF0Y2ggbm9kZS5iaW5kaW5nLCAhZnJpbmdlIHdpdGhcbiAgICAgICAgfCBVbmJvdW5kLCBfIC0+IGZzdCByZWQubW9ub2lkXG4gICAgICAgIHwgYmluZGluZywgKFJlZF9ub2RlIHJub2RlIDo6IGZyaW5nZScpXG4gICAgICAgICAgd2hlbiBiaW5kaW5nID09IHJub2RlLmJpbmRpbmcgLT5cbiAgICAgICAgICBmcmluZ2UgOj0gZnJpbmdlJztcbiAgICAgICAgICBybm9kZS5yZWR1Y3Rpb25cbiAgICAgICAgfCBCb3VuZCBiLCBfIC0+XG4gICAgICAgICAgYXNzZXJ0IGIudmFsaWQ7IHJlZC5tYXBwZXIgY2VsbCBiLnZhbHVlXG4gICAgICBpblxuICAgICAgbGV0IHJpZ2h0ID0gYXV4IG5vZGUucmlnaHQgaW5cbiAgICAgIGxldCBhZ2dyZWdhdGUgPSBtYXRjaCBsZWZ0IHdpdGhcbiAgICAgICAgfCBSZWRfbGVhZiAtPiByZWR1Y3Rpb25cbiAgICAgICAgfCBSZWRfbm9kZSByIC0+IHBsdXMgcmVkLm1vbm9pZCByLmFnZ3JlZ2F0ZSByZWR1Y3Rpb25cbiAgICAgIGluXG4gICAgICBsZXQgYWdncmVnYXRlID0gbWF0Y2ggcmlnaHQgd2l0aFxuICAgICAgICB8IFJlZF9sZWFmIC0+IGFnZ3JlZ2F0ZVxuICAgICAgICB8IFJlZF9ub2RlIHIgLT4gcGx1cyByZWQubW9ub2lkIGFnZ3JlZ2F0ZSByLmFnZ3JlZ2F0ZVxuICAgICAgaW5cbiAgICAgIFJlZF9ub2RlIHtcbiAgICAgICAgY2VsbDtcbiAgICAgICAgYmluZGluZyA9IG5vZGUuYmluZGluZztcbiAgICAgICAgcmVkdWN0aW9uO1xuICAgICAgICBhZ2dyZWdhdGU7XG4gICAgICAgIGxlZnQ7XG4gICAgICAgIHJpZ2h0O1xuICAgICAgfVxuICAgIHwgUm9vdCBfIHwgTGVhZiAtPiBSZWRfbGVhZlxuICBpblxuICBsZXQgcmVzdWx0ID0gYXV4IHRyZWUgaW5cbiAgYXNzZXJ0ICghZnJpbmdlID0gW10pO1xuICByZXN1bHRcblxubGV0IGV2YWwgcmVkID1cbiAgbWF0Y2ggcmVkLnNvdXJjZSB3aXRoXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHJvb3QgLT5cbiAgICBsZXQgdmVyc2lvbiA9IHJlYmFsYW5jZSByZWQuc291cmNlIGluXG4gICAgaWYgdHJ1ZSB0aGVuIChcbiAgICAgIGlmIHJlZC5nZW5lcmF0aW9uICE9IHJvb3QuZ2VuZXJhdGlvbiB0aGVuIChcbiAgICAgICAgcmVkLmdlbmVyYXRpb24gPC0gcm9vdC5nZW5lcmF0aW9uO1xuICAgICAgICByZWQucmVzdWx0IDwtIGZ1bGxfcmVidWlsZCByZWQgcm9vdC5jaGlsZDtcbiAgICAgICkgZWxzZSAoXG4gICAgICAgIHJlZC5yZXN1bHQgPC0gaW5jcmVtZW50YWxfcmVidWlsZCByZWQgcmVkLnZlcnNpb24gcm9vdC5jaGlsZFxuICAgICAgKTtcbiAgICApIGVsc2UgKFxuICAgICAgcmVkLnJlc3VsdCA8LSBmdWxsX3JlYnVpbGQgcmVkIHJvb3QuY2hpbGQ7XG4gICAgKTtcbiAgICByZWQudmVyc2lvbiA8LSB2ZXJzaW9uO1xuICAgIG1hdGNoIHJlZC5yZXN1bHQgd2l0aFxuICAgIHwgUmVkX2xlYWYgLT4gZnN0IHJlZC5tb25vaWRcbiAgICB8IFJlZF9ub2RlIHIgLT4gci5hZ2dyZWdhdGVcblxubGV0IG9wYXF1ZSA6ICdhIEx3ZC5wcmltIC0+IE9iai50IEx3ZC5wcmltID0gT2JqLm1hZ2ljXG5cbmxldCBtYXBfcmVkdWNlIG1hcHBlciBtb25vaWQgc291cmNlID1cbiAgbGV0IHJlZHVjdGlvbiA9IHtcbiAgICBzb3VyY2U7IG1hcHBlcjsgbW9ub2lkO1xuICAgIHJlc3VsdCA9IFJlZF9sZWFmO1xuICAgIGdlbmVyYXRpb24gPSBub3Rfb3JpZ2luO1xuICAgIHZlcnNpb24gPSAwO1xuICB9IGluXG4gIGxldCBwcmltID0gTHdkLnByaW1cbiAgICAgIH5hY3F1aXJlOihmdW4gc2VsZiAtPlxuICAgICAgICAgIG1hdGNoIHJlZHVjdGlvbi5zb3VyY2Ugd2l0aFxuICAgICAgICAgIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IFJvb3Qgcm9vdCAtPlxuICAgICAgICAgICAgcm9vdC5vbl9pbnZhbGlkYXRlIDwtIG9wYXF1ZSBzZWxmIDo6IHJvb3Qub25faW52YWxpZGF0ZTtcbiAgICAgICAgICAgIHJlZHVjdGlvblxuICAgICAgICApXG4gICAgICB+cmVsZWFzZTooZnVuIHNlbGYgcmVkdWN0aW9uIC0+XG4gICAgICAgICAgbWF0Y2ggcmVkdWN0aW9uLnNvdXJjZSB3aXRoXG4gICAgICAgICAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgUm9vdCByb290IC0+XG4gICAgICAgICAgICByb290Lm9uX2ludmFsaWRhdGUgPC1cbiAgICAgICAgICAgICAgTGlzdC5maWx0ZXIgKCghPSkgKG9wYXF1ZSBzZWxmKSkgcm9vdC5vbl9pbnZhbGlkYXRlXG4gICAgICAgIClcbiAgaW5cbiAgTHdkLm1hcCB+ZjpldmFsIChMd2QuZ2V0X3ByaW0gcHJpbSlcblxubGV0IHJlZHVjZSBtb25vaWQgc291cmNlID0gbWFwX3JlZHVjZSAoZnVuIF8geCAtPiB4KSBtb25vaWQgc291cmNlXG5cbmxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgfCBMZWFmIC0+ICgpXG4gIHwgTm9kZSB0IC0+XG4gICAgaXRlciBmIHQubGVmdDtcbiAgICBiZWdpbiBtYXRjaCB0LmJpbmRpbmcgd2l0aFxuICAgICAgfCBCb3VuZCB4IC0+IGYgeC52YWx1ZVxuICAgICAgfCBVbmJvdW5kIC0+ICgpXG4gICAgZW5kO1xuICAgIGl0ZXIgZiB0LnJpZ2h0XG4gIHwgUm9vdCB0IC0+XG4gICAgaXRlciBmIHQuY2hpbGRcblxubGV0IHJlYyBsZWZ0X21vc3QgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gTm9uZVxuICB8IE5vZGUgbiBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggbGVmdF9tb3N0IG4ubGVmdCB3aXRoXG4gICAgfCBTb21lIF8gYXMgeCAtPiB4XG4gICAgfCBOb25lIC0+IFNvbWUgc2VsZlxuXG5sZXQgcmVjIHJpZ2h0X21vc3QgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gTm9uZVxuICB8IE5vZGUgbiBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggcmlnaHRfbW9zdCBuLnJpZ2h0IHdpdGhcbiAgICB8IFNvbWUgXyBhcyB4IC0+IHhcbiAgICB8IE5vbmUgLT4gU29tZSBzZWxmXG5cbmxldCBmaXJzdCA6ICdhIHQgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHJvb3QgLT4gbGVmdF9tb3N0IHJvb3QuY2hpbGRcblxubGV0IGxhc3QgOiAnYSB0IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCByb290IC0+IHJpZ2h0X21vc3Qgcm9vdC5jaGlsZFxuXG5sZXQgbmV4dCA6ICdhIHJvdyAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiAtPiBOb25lXG4gIHwgTm9kZSBuIGFzIHNlbGYgLT5cbiAgICBtYXRjaCBsZWZ0X21vc3Qgbi5yaWdodCB3aXRoXG4gICAgfCBTb21lIF8gYXMgeCAtPiB4XG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgcmVjIHdhbGtfcm9vdCBzZWxmID0gZnVuY3Rpb25cbiAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFJvb3QgXyAtPiBOb25lXG4gICAgICAgIHwgTm9kZSBuJyBhcyBwYXJlbnQgLT5cbiAgICAgICAgICBpZiBuJy5sZWZ0ID09IHNlbGYgdGhlbiBTb21lIHBhcmVudCBlbHNlIChcbiAgICAgICAgICAgIGFzc2VydCAobicucmlnaHQgPT0gc2VsZik7XG4gICAgICAgICAgICB3YWxrX3Jvb3QgcGFyZW50IG4nLnBhcmVudFxuICAgICAgICAgIClcbiAgICAgIGluXG4gICAgICB3YWxrX3Jvb3Qgc2VsZiBuLnBhcmVudFxuXG5sZXQgcHJldiA6ICdhIHJvdyAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiAtPiBOb25lXG4gIHwgTm9kZSBuIGFzIHNlbGYgLT5cbiAgICBtYXRjaCByaWdodF9tb3N0IG4ubGVmdCB3aXRoXG4gICAgfCBTb21lIF8gYXMgeCAtPiB4XG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgcmVjIHdhbGtfcm9vdCBzZWxmID0gZnVuY3Rpb25cbiAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFJvb3QgXyAtPiBOb25lXG4gICAgICAgIHwgTm9kZSBuJyBhcyBwYXJlbnQgLT5cbiAgICAgICAgICBpZiBuJy5yaWdodCA9PSBzZWxmIHRoZW4gU29tZSBwYXJlbnQgZWxzZSAoXG4gICAgICAgICAgICBhc3NlcnQgKG4nLmxlZnQgPT0gc2VsZik7XG4gICAgICAgICAgICB3YWxrX3Jvb3QgcGFyZW50IG4nLnBhcmVudFxuICAgICAgICAgIClcbiAgICAgIGluXG4gICAgICB3YWxrX3Jvb3Qgc2VsZiBuLnBhcmVudFxuIiwiXG50eXBlICErJ2EgdCA9XG5cblxuICB8IE5pbFxuICB8IExlYWYgb2YgeyBtdXRhYmxlIG1hcms6IGludDsgdjogJ2E7IH1cbiAgfCBKb2luIG9mIHsgbXV0YWJsZSBtYXJrOiBpbnQ7IGw6ICdhIHQ7IHI6ICdhIHQ7IH1cblxudHlwZSAnYSBzZXEgPSAnYSB0XG5cbmxldCBlbXB0eSA9IE5pbFxuXG5sZXQgZWxlbWVudCB2ID0gTGVhZiB7IG1hcmsgPSAwOyB2IH1cblxubGV0IG1hc2tfYml0cyA9IDJcblxubGV0IG1heGkgYSBiIDogaW50ID0gaWYgYiA+IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgcmFuayA9IGZ1bmN0aW9uXG4gIHwgTmlsIC0+IDBcbiAgfCBMZWFmIHQgLT5cbiAgICBpZiB0Lm1hcmsgPD4gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkx3ZF9zZXEucmFuazogbm9kZSBpcyBtYXJrZWRcIjtcbiAgICAwXG4gIHwgSm9pbiB0IC0+XG4gICAgaWYgdC5tYXJrIGxhbmQgbWFza19iaXRzIDw+IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJMd2Rfc2VxLnJhbms6IG5vZGUgaXMgbWFya2VkXCI7XG4gICAgdC5tYXJrIGxzciBtYXNrX2JpdHNcblxubGV0IGNvbmNhdCBhIGIgPSBtYXRjaCBhLCBiIHdpdGhcbiAgfCBOaWwsIHggfCB4LCBOaWwgLT4geFxuICB8IGwsIHIgLT4gSm9pbiB7IG1hcmsgPSAobWF4aSAocmFuayBsKSAocmFuayByKSArIDEpIGxzbCBtYXNrX2JpdHM7IGw7IHIgfVxuXG50eXBlICgnYSwgJ2IpIHZpZXcgPVxuICB8IEVtcHR5XG4gIHwgRWxlbWVudCBvZiAnYVxuICB8IENvbmNhdCBvZiAnYiAqICdiXG5cbmxldCB2aWV3ID0gZnVuY3Rpb25cbiAgfCBOaWwgICAgLT4gRW1wdHlcbiAgfCBMZWFmIHQgLT4gRWxlbWVudCB0LnZcbiAgfCBKb2luIHQgLT4gQ29uY2F0ICh0LmwsIHQucilcblxubW9kdWxlIEJhbGFuY2VkIDogc2lnXG4gIHR5cGUgJ2EgdCA9IHByaXZhdGUgJ2Egc2VxXG4gIHZhbCBlbXB0eSA6ICdhIHRcbiAgdmFsIGVsZW1lbnQgOiAnYSAtPiAnYSB0XG4gIHZhbCBjb25jYXQgOiAnYSB0IC0+ICdhIHQgLT4gJ2EgdFxuXG4gIHZhbCB2aWV3IDogJ2EgdCAtPiAoJ2EsICdhIHQpIHZpZXdcbmVuZCA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBzZXFcblxuICBsZXQgZW1wdHkgPSBlbXB0eVxuICBsZXQgZWxlbWVudCA9IGVsZW1lbnRcblxuICBsZXQgY2hlY2sgbCByID0gYWJzIChsIC0gcikgPD0gMVxuXG4gIGxldCByZWMgbm9kZV9sZWZ0IGwgciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXIgdGhlbiBjb25jYXQgbCByIGVsc2UgbWF0Y2ggbCB3aXRoXG4gICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgSm9pbiB0IC0+XG4gICAgICAgIGlmIGNoZWNrIChyYW5rIHQubCkgbWxcbiAgICAgICAgdGhlbiBjb25jYXQgdC5sIChub2RlX2xlZnQgdC5yIHIpXG4gICAgICAgIGVsc2UgbWF0Y2ggdC5yIHdpdGhcbiAgICAgICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IEpvaW4gdHIgLT5cbiAgICAgICAgICAgIGxldCB0cnIgPSBub2RlX2xlZnQgdHIuciByIGluXG4gICAgICAgICAgICBpZiBjaGVjayAoMSArIG1heGkgKHJhbmsgdC5sKSAocmFuayB0ci5sKSkgKHJhbmsgdHJyKVxuICAgICAgICAgICAgdGhlbiBjb25jYXQgKGNvbmNhdCB0LmwgdHIubCkgdHJyXG4gICAgICAgICAgICBlbHNlIGNvbmNhdCB0LmwgKGNvbmNhdCB0ci5sIHRycilcblxuICBsZXQgcmVjIG5vZGVfcmlnaHQgbCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtciBtbCB0aGVuIGNvbmNhdCBsIHIgZWxzZSBtYXRjaCByIHdpdGhcbiAgICAgIHwgTmlsIHwgTGVhZiBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBKb2luIHQgLT5cbiAgICAgICAgaWYgY2hlY2sgKHJhbmsgdC5yKSBtclxuICAgICAgICB0aGVuIGNvbmNhdCAobm9kZV9yaWdodCBsIHQubCkgdC5yXG4gICAgICAgIGVsc2UgbWF0Y2ggdC5sIHdpdGhcbiAgICAgICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IEpvaW4gdGwgLT5cbiAgICAgICAgICAgIGxldCB0bGwgPSBub2RlX3JpZ2h0IGwgdGwubCBpblxuICAgICAgICAgICAgaWYgY2hlY2sgKDEgKyBtYXhpIChyYW5rIHRsLnIpIChyYW5rIHQucikpIChyYW5rIHRsbClcbiAgICAgICAgICAgIHRoZW4gY29uY2F0IHRsbCAoY29uY2F0IHRsLnIgdC5yKVxuICAgICAgICAgICAgZWxzZSBjb25jYXQgKGNvbmNhdCB0bGwgdGwucikgdC5yXG5cbiAgbGV0IGNvbmNhdCBsIHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1sIG1yXG4gICAgdGhlbiBjb25jYXQgbCByXG4gICAgZWxzZSBpZiBtbCA8PSBtclxuICAgIHRoZW4gbm9kZV9yaWdodCBsIHJcbiAgICBlbHNlIG5vZGVfbGVmdCBsIHJcblxuICBsZXQgdmlldyA9IHZpZXdcbmVuZFxuXG5tb2R1bGUgTWFya2luZyA6IHNpZ1xuICB0eXBlIG1hcmsgPSAoKnByaXZhdGUqKSBpbnRcbiAgdmFsIGlzX3NoYXJlZCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfbm90X3NoYXJlZCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfbm9uZSA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfYm90aCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfb2xkIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19uZXcgOiBtYXJrIC0+IGJvb2xcbiAgKCp2YWwgaGFzX29sZCA6IG1hcmsgLT4gYm9vbCopXG4gICgqdmFsIGhhc19uZXcgOiBtYXJrIC0+IGJvb2wqKVxuICB2YWwgc2V0X2JvdGggOiBtYXJrIC0+IG1hcmtcbiAgdmFsIHVubWFyayA6IG1hcmsgLT4gbWFya1xuICB2YWwgZ2V0X2luZGV4IDogbWFyayAtPiBpbnRcbiAgdmFsIHdpdGhfaW5kZXhfbmV3IDogaW50IC0+IG1hcmtcblxuICB0eXBlIHN0YXRzXG4gIHZhbCBtYXJrZWQgOiBzdGF0cyAtPiBpbnRcbiAgdmFsIHNoYXJlZCA6IHN0YXRzIC0+IGludFxuICB2YWwgYmxvY2tlZCA6IHN0YXRzIC0+IGludFxuXG4gIHR5cGUgdHJhdmVyc2FsXG4gIHZhbCBvbGRfc3RhdHMgOiB0cmF2ZXJzYWwgLT4gc3RhdHNcbiAgdmFsIG5ld19zdGF0cyA6IHRyYXZlcnNhbCAtPiBzdGF0c1xuXG4gIHZhbCB1bnNhZmVfdHJhdmVyc2UgOiBvbGRfcm9vdDpfIHNlcSAtPiBuZXdfcm9vdDpfIHNlcSAtPiB0cmF2ZXJzYWxcblxuICB2YWwgcmVzdG9yZSA6IF8gc2VxIC0+IHVuaXRcbmVuZCA9IHN0cnVjdFxuICB0eXBlIG1hcmsgPSBpbnRcblxuICBsZXQgbWFza19ub25lID0gMFxuICBsZXQgbWFza19vbGQgID0gMVxuICBsZXQgbWFza19uZXcgID0gMlxuICBsZXQgbWFza19ib3RoID0gM1xuXG4gIGxldCBpc19zaGFyZWQgbSA9IG0gPSAtMVxuICBsZXQgaXNfbm90X3NoYXJlZCBtID0gbSA8PiAtMVxuICBsZXQgaXNfbm9uZSBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfbm9uZVxuICBsZXQgaXNfYm90aCBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfYm90aFxuICBsZXQgaXNfb2xkICBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfb2xkXG4gIGxldCBpc19uZXcgIG0gPSBtIGxhbmQgbWFza19ib3RoID0gbWFza19uZXdcbiAgKCpsZXQgaGFzX29sZCBtID0gbSBsYW5kIG1hc2tfb2xkIDw+IDAqKVxuICAoKmxldCBoYXNfbmV3IG0gPSBtIGxhbmQgbWFza19uZXcgPD4gMCopXG4gIGxldCBzZXRfYm90aCBtID0gbSBsb3IgbWFza19ib3RoXG5cbiAgbGV0IGdldF9pbmRleCBtID0gbSBsc3IgbWFza19iaXRzXG4gIGxldCB3aXRoX2luZGV4X25ldyBpbmRleCA9IChpbmRleCBsc2wgbWFza19iaXRzKSBsb3IgbWFza19uZXdcblxuICBsZXQgdW5tYXJrIG0gPSBtIGxhbmQgbG5vdCBtYXNrX2JvdGhcblxuICB0eXBlIHN0YXRzID0ge1xuICAgIG11dGFibGUgbWFya2VkOiBpbnQ7XG4gICAgbXV0YWJsZSBzaGFyZWQ6IGludDtcbiAgICBtdXRhYmxlIGJsb2NrZWQ6IGludDtcbiAgfVxuICBsZXQgbWFya2VkIHMgPSBzLm1hcmtlZFxuICBsZXQgc2hhcmVkIHMgPSBzLnNoYXJlZFxuICBsZXQgYmxvY2tlZCBzID0gcy5ibG9ja2VkXG5cbiAgbGV0IG1rX3N0YXRzICgpID0geyBtYXJrZWQgPSAwOyBzaGFyZWQgPSAwOyBibG9ja2VkID0gMCB9XG5cbiAgbGV0IG5ld19tYXJrZWQgc3RhdHMgPSBzdGF0cy5tYXJrZWQgPC0gc3RhdHMubWFya2VkICsgMVxuICBsZXQgbmV3X3NoYXJlZCBzdGF0cyA9IHN0YXRzLnNoYXJlZCA8LSBzdGF0cy5zaGFyZWQgKyAxXG4gIGxldCBuZXdfYmxvY2tlZCBzdGF0cyA9IHN0YXRzLmJsb2NrZWQgPC0gc3RhdHMuYmxvY2tlZCArIDFcblxuICBsZXQgcmVjIGJsb2NrIHN0YXRzIG1hc2sgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBMZWFmIHQnIC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gbWFza19ib3RoICYmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gMFxuICAgICAgdGhlbiAoXG4gICAgICAgIGlmIG1hcmsgbGFuZCBtYXNrID0gMCB0aGVuIG5ld19tYXJrZWQgc3RhdHMgZWxzZSBhc3NlcnQgZmFsc2U7XG4gICAgICAgIG5ld19ibG9ja2VkIHN0YXRzO1xuICAgICAgICB0Jy5tYXJrIDwtIG1hcmsgbG9yIG1hc2tfYm90aFxuICAgICAgKVxuICAgIHwgSm9pbiB0JyAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IG1hc2tfYm90aCAmJiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IDBcbiAgICAgIHRoZW4gKFxuICAgICAgICBpZiBtYXJrIGxhbmQgbWFzayA9IDAgdGhlbiBuZXdfbWFya2VkIHN0YXRzIGVsc2UgYXNzZXJ0IGZhbHNlO1xuICAgICAgICBuZXdfYmxvY2tlZCBzdGF0cztcbiAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrX2JvdGg7XG4gICAgICAgIGJsb2NrIHN0YXRzIG1hc2sgdCcubDtcbiAgICAgICAgYmxvY2sgc3RhdHMgbWFzayB0Jy5yO1xuICAgICAgKVxuXG4gIGxldCBlbnF1ZXVlIHN0YXRzIHEgbWFzayA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IExlYWYgdCcgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayBsYW5kIG1hc2sgPSAwIHRoZW4gKFxuICAgICAgICAoKiBOb3QgeWV0IHNlZW4gKilcbiAgICAgICAgbmV3X21hcmtlZCBzdGF0cztcbiAgICAgICAgaWYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiAwIHRoZW4gKFxuICAgICAgICAgICgqIE5ld2x5IHNoYXJlZCwgY2xlYXIgbWFzayAqKVxuICAgICAgICAgIHQnLm1hcmsgPC0gLTE7XG4gICAgICAgICAgbmV3X2Jsb2NrZWQgc3RhdHM7XG4gICAgICAgICAgbmV3X3NoYXJlZCBzdGF0cztcbiAgICAgICAgKSBlbHNlXG4gICAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrO1xuICAgICAgKTtcbiAgICAgIGlmIG1hcmsgPD4gLTEgJiYgbWFyayBsYW5kIG1hc2tfYm90aCA9IG1hc2tfYm90aCB0aGVuIChcbiAgICAgICAgdCcubWFyayA8LSAtMTtcbiAgICAgICAgbmV3X3NoYXJlZCBzdGF0c1xuICAgICAgKVxuICAgIHwgSm9pbiB0JyBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgbGFuZCBtYXNrID0gMCB0aGVuIChcbiAgICAgICAgKCogTm90IHlldCBzZWVuICopXG4gICAgICAgIG5ld19tYXJrZWQgc3RhdHM7XG4gICAgICAgIGlmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gMCB0aGVuIChcbiAgICAgICAgICAoKiBOZXdseSBzaGFyZWQsIGNsZWFyIG1hc2sgKilcbiAgICAgICAgICB0Jy5tYXJrIDwtIC0xO1xuICAgICAgICAgIG5ld19ibG9ja2VkIHN0YXRzO1xuICAgICAgICAgIG5ld19zaGFyZWQgc3RhdHM7XG4gICAgICAgICAgYmxvY2sgc3RhdHMgbWFzayB0Jy5sO1xuICAgICAgICAgIGJsb2NrIHN0YXRzIG1hc2sgdCcucjtcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAoKiBGaXJzdCBtYXJrICopXG4gICAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrO1xuICAgICAgICAgIFF1ZXVlLnB1c2ggdCBxXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBpZiBtYXJrIDw+IC0xICYmIG1hcmsgbGFuZCBtYXNrX2JvdGggPSBtYXNrX2JvdGggdGhlbiAoXG4gICAgICAgIHQnLm1hcmsgPC0gLTE7XG4gICAgICAgIG5ld19zaGFyZWQgc3RhdHNcbiAgICAgIClcblxuICBsZXQgZGVxdWV1ZSBzdGF0cyBxIG1hc2sgPVxuICAgIG1hdGNoIFF1ZXVlLnBvcCBxIHdpdGhcbiAgICB8IEpvaW4gdCAtPlxuICAgICAgaWYgdC5tYXJrIGxhbmQgbWFza19ib3RoID0gbWFzayB0aGVuIChcbiAgICAgICAgZW5xdWV1ZSBzdGF0cyBxIG1hc2sgdC5sO1xuICAgICAgICBlbnF1ZXVlIHN0YXRzIHEgbWFzayB0LnI7XG4gICAgICApXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIGxldCB0cmF2ZXJzZTEgc3RhdHMgcSBtYXNrID1cbiAgICB3aGlsZSBub3QgKFF1ZXVlLmlzX2VtcHR5IHEpIGRvXG4gICAgICBkZXF1ZXVlIHN0YXRzIHEgbWFza1xuICAgIGRvbmVcblxuICBsZXQgcmVjIHRyYXZlcnNlIHNvbGQgc25ldyBxb2xkIHFuZXcgPVxuICAgIGlmIFF1ZXVlLmlzX2VtcHR5IHFvbGQgdGhlblxuICAgICAgdHJhdmVyc2UxIHNuZXcgcW5ldyBtYXNrX25ld1xuICAgIGVsc2UgaWYgUXVldWUuaXNfZW1wdHkgcW5ldyB0aGVuXG4gICAgICB0cmF2ZXJzZTEgc29sZCBxb2xkIG1hc2tfb2xkXG4gICAgZWxzZSAoXG4gICAgICBkZXF1ZXVlIHNvbGQgcW9sZCBtYXNrX29sZDtcbiAgICAgIGRlcXVldWUgc25ldyBxbmV3IG1hc2tfbmV3O1xuICAgICAgdHJhdmVyc2Ugc29sZCBzbmV3IHFvbGQgcW5ld1xuICAgIClcblxuICB0eXBlIHRyYXZlcnNhbCA9IHtcbiAgICBvbGRfc3RhdHM6IHN0YXRzO1xuICAgIG5ld19zdGF0czogc3RhdHM7XG4gIH1cblxuICBsZXQgb2xkX3N0YXRzIHRyID0gdHIub2xkX3N0YXRzXG4gIGxldCBuZXdfc3RhdHMgdHIgPSB0ci5uZXdfc3RhdHNcblxuICBsZXQgdW5zYWZlX3RyYXZlcnNlIH5vbGRfcm9vdCB+bmV3X3Jvb3QgPVxuICAgIGxldCBvbGRfc3RhdHMgPSBta19zdGF0cyAoKSBpblxuICAgIGxldCBuZXdfc3RhdHMgPSBta19zdGF0cyAoKSBpblxuICAgIGxldCBvbGRfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgbmV3X3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgZW5xdWV1ZSBvbGRfc3RhdHMgb2xkX3F1ZXVlIG1hc2tfb2xkIG9sZF9yb290O1xuICAgIGVucXVldWUgbmV3X3N0YXRzIG5ld19xdWV1ZSBtYXNrX25ldyBuZXdfcm9vdDtcbiAgICB0cmF2ZXJzZSBvbGRfc3RhdHMgbmV3X3N0YXRzIG9sZF9xdWV1ZSBuZXdfcXVldWU7XG4gICAge29sZF9zdGF0czsgbmV3X3N0YXRzfVxuXG4gIGxldCByZXN0b3JlID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgTGVhZiB0IC0+IHQubWFyayA8LSAwXG4gICAgfCBKb2luIHQgLT5cbiAgICAgIHQubWFyayA8LSAobWF4aSAocmFuayB0LmwpIChyYW5rIHQucikgKyAxKSBsc2wgbWFza19iaXRzXG5lbmRcblxuKCogTWFya3MgZ28gdGhyb3VnaCBtYW55IHN0YXRlcy5cblxuICAgQSBtYXJrIGlzIHVzdWFsbHkgc3BsaXQgaW4gdHdvIHBhcnRzOlxuICAgLSB0aGUgbWFzaywgbWFkZSBvZiB0aGUgdHdvIGxlYXN0IHNpZ25pZmljYW50IGJpdHNcbiAgIC0gdGhlIGluZGV4IGlzIGFuIHVuc2lnbmVkIGludGVnZXIgZm9ybWVkIG9mIGFsbCB0aGUgcmVtYWluaW5nIGJpdHNcblxuICAgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgZGlzdGluZ3Vpc2hlZCBtYXNrIHdpdGggdmFsdWUgLTEgKGFsbCBiaXRzIHNldCB0byAxKVxuICAgdGhhdCBkZW5vdGUgYSBcImxvY2tlZFwiIG5vZGUuXG5cbiAgIFdoZW4gdGhlIG1hc2sgaXMgMCwgdGhlIGluZGV4IGRlbm90ZXMgdGhlIHJhbmsgb2YgdGhlIG5vZGU6IHRoZSBkZXB0aCBvZlxuICAgdGhlIHRyZWUgcm9vdGVkIGF0IHRoaXMgbm9kZS5cbiAgIFdoZW4gdGhlIG1hc2sgaXMgbm9uLXplcm8sIHRoZSBpbmRleCBtZWFuaW5nIGlzIGxlZnQgdG8gdGhlIHRyYXZlcnNhbFxuICAgYWxnb3JpdGhtLlxuICAgUmVzdG9yaW5nIHRoZSBtYXJrIHNldHMgdGhlIG1hc2sgdG8gMCBhbmQgdGhlIGluZGV4dCB0byB0aGUgcmFuayxcbiAgIGJ1dCBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gdGhlIGNoaWxkcmVuIG9mIHRoZSBub2RlIGFyZSB0aGVtc2VsdmVzIHJlc3RvcmVkLlxuKilcblxubW9kdWxlIFJlZHVjZXIgPSBzdHJ1Y3RcbiAgdHlwZSAoKydhLCAnYikgeGZvcm0gPVxuICAgIHwgWEVtcHR5XG4gICAgfCBYTGVhZiBvZiB7IGE6ICdhIHQ7IG11dGFibGUgYjogJ2Igb3B0aW9uOyB9XG4gICAgfCBYSm9pbiBvZiB7IGE6ICdhIHQ7IG11dGFibGUgYjogJ2Igb3B0aW9uO1xuICAgICAgICAgICAgICAgICBsOiAoJ2EsICdiKSB4Zm9ybTsgcjogKCdhLCAnYikgeGZvcm07IH1cblxuICB0eXBlICgnYSwgJ2IpIHVubWFya19zdGF0ZSA9IHtcbiAgICBkcm9wcGVkIDogJ2Igb3B0aW9uIGFycmF5O1xuICAgIG11dGFibGUgZHJvcHBlZF9sZWFmIDogaW50O1xuICAgIG11dGFibGUgZHJvcHBlZF9qb2luIDogaW50O1xuICAgIHNoYXJlZCA6ICdhIHNlcSBhcnJheTtcbiAgICBzaGFyZWRfeCA6ICgnYSwgJ2IpIHhmb3JtIGxpc3QgYXJyYXk7XG4gICAgbXV0YWJsZSBzaGFyZWRfaW5kZXg6IGludDtcbiAgfVxuXG4gIGxldCBuZXh0X3NoYXJlZF9pbmRleCBzdCA9XG4gICAgbGV0IHJlc3VsdCA9IHN0LnNoYXJlZF9pbmRleCBpblxuICAgIHN0LnNoYXJlZF9pbmRleCA8LSByZXN1bHQgKyAxO1xuICAgIHJlc3VsdFxuXG4gIGxldCByZWMgdW5ibG9jayA9IGZ1bmN0aW9uXG4gICAgfCBYRW1wdHkgLT4gKClcbiAgICB8IFhMZWFmIHthID0gTmlsIHwgSm9pbiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFhKb2luIHthID0gTmlsIHwgTGVhZiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFhMZWFmIHthID0gTGVhZiB0JzsgX30gLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19ub3Rfc2hhcmVkIG1hcmsgJiYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlblxuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgfCBYSm9pbiB7YSA9IEpvaW4gdCc7IGw7IHI7IF99IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfbm90X3NoYXJlZCBtYXJrICYmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgIHVuYmxvY2sgbDtcbiAgICAgICAgdW5ibG9jayByXG4gICAgICApXG5cbiAgbGV0IHJlYyB1bm1hcmtfb2xkIHN0ID0gZnVuY3Rpb25cbiAgICB8IFhFbXB0eSAtPiAoKVxuICAgIHwgWExlYWYge2EgPSBOaWwgfCBKb2luIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgIHwgWEpvaW4ge2EgPSBOaWwgfCBMZWFmIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgIHwgWExlYWYge2EgPSBMZWFmIHQnIGFzIGE7IGJ9IGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19vbGQgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGRyb3BwZWRfbGVhZiA9IHN0LmRyb3BwZWRfbGVhZiBpblxuICAgICAgICBpZiBkcm9wcGVkX2xlYWYgPiAtMSB0aGVuIChcbiAgICAgICAgICBzdC5kcm9wcGVkLihkcm9wcGVkX2xlYWYpIDwtIGI7XG4gICAgICAgICAgc3QuZHJvcHBlZF9sZWFmIDwtIGRyb3BwZWRfbGVhZiArIDE7XG4gICAgICAgICAgYXNzZXJ0IChzdC5kcm9wcGVkX2xlYWYgPD0gc3QuZHJvcHBlZF9qb2luKTtcbiAgICAgICAgKTtcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrXG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19zaGFyZWQgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbmV4dF9zaGFyZWRfaW5kZXggc3QgaW5cbiAgICAgICAgc3Quc2hhcmVkLihpbmRleCkgPC0gYTtcbiAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSBbdF07XG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy53aXRoX2luZGV4X25ldyBpbmRleDtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBNYXJraW5nLmdldF9pbmRleCBtYXJrIGluXG4gICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0gdCA6OiBzdC5zaGFyZWRfeC4oaW5kZXgpO1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgICAgKCp0Jy5tYXJrIDwtIG1hcmsgbGFuZCBsbm90IGJvdGhfbWFzayopXG4gICAgICApXG4gICAgfCBYSm9pbiB7YSA9IEpvaW4gdCcgYXMgYTsgbDsgcjsgYn0gYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX3NoYXJlZCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBuZXh0X3NoYXJlZF9pbmRleCBzdCBpblxuICAgICAgICBzdC5zaGFyZWQuKGluZGV4KSA8LSBhO1xuICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIFt0XTtcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLndpdGhfaW5kZXhfbmV3IGluZGV4O1xuICAgICAgICB1bmJsb2NrIGw7XG4gICAgICAgIHVuYmxvY2sgcjtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW4gKFxuICAgICAgICBpZiBzdC5kcm9wcGVkX2pvaW4gPiAtMSB0aGVuIChcbiAgICAgICAgICBsZXQgZHJvcHBlZF9qb2luID0gc3QuZHJvcHBlZF9qb2luIC0gMSBpblxuICAgICAgICAgIHN0LmRyb3BwZWQuKGRyb3BwZWRfam9pbikgPC0gYjtcbiAgICAgICAgICBzdC5kcm9wcGVkX2pvaW4gPC0gZHJvcHBlZF9qb2luO1xuICAgICAgICAgIGFzc2VydCAoc3QuZHJvcHBlZF9sZWFmIDw9IHN0LmRyb3BwZWRfam9pbik7XG4gICAgICAgICk7XG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgdW5tYXJrX29sZCBzdCBsO1xuICAgICAgICB1bm1hcmtfb2xkIHN0IHI7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19uZXcgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbWFyayBsc3IgbWFza19iaXRzIGluXG4gICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0gdCA6OiBzdC5zaGFyZWRfeC4oaW5kZXgpO1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICAgIClcblxuICBsZXQgcHJlcGFyZV9zaGFyZWQgc3QgPVxuICAgIGZvciBpID0gMCB0byBzdC5zaGFyZWRfaW5kZXggLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCBzdC5zaGFyZWQuKGkpIHdpdGhcbiAgICAgICAgfCBOaWwgLT4gKClcbiAgICAgICAgfCBMZWFmIHQgLT4gdC5tYXJrIDwtIE1hcmtpbmcuc2V0X2JvdGggdC5tYXJrXG4gICAgICAgIHwgSm9pbiB0IC0+IHQubWFyayA8LSBNYXJraW5nLnNldF9ib3RoIHQubWFya1xuICAgICAgZW5kO1xuICAgICAgbWF0Y2ggc3Quc2hhcmVkX3guKGkpIHdpdGhcbiAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IFtfXSAtPiAoKVxuICAgICAgfCB4cyAtPiBzdC5zaGFyZWRfeC4oaSkgPC0gTGlzdC5yZXYgeHNcbiAgICBkb25lXG5cbiAgbGV0IHJlYyB1bm1hcmtfbmV3IHN0ID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiBYRW1wdHlcbiAgICB8IExlYWYgdCcgYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX25vdF9zaGFyZWQgbWFyayAmJiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbWFyayBsc3IgbWFza19iaXRzIGluXG4gICAgICAgIG1hdGNoIHN0LnNoYXJlZF94LihpbmRleCkgd2l0aFxuICAgICAgICB8IFtdIC0+IFhMZWFmIHthID0gdDsgYiA9IE5vbmV9XG4gICAgICAgIHwgeCA6OiB4cyAtPiBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIHhzOyB4XG4gICAgICApIGVsc2UgKFxuICAgICAgICB0Jy5tYXJrIDwtIDA7XG4gICAgICAgIFhMZWFmIHthID0gdDsgYiA9IE5vbmV9XG4gICAgICApXG4gICAgfCBKb2luIHQnIGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayA9IC0xIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBuZXh0X3NoYXJlZF9pbmRleCBzdCBpblxuICAgICAgICB0Jy5tYXJrIDwtIDA7XG4gICAgICAgIHN0LnNoYXJlZC4oaW5kZXgpIDwtIHQ7XG4gICAgICAgIGxldCBsID0gdW5tYXJrX25ldyBzdCB0Jy5sIGluXG4gICAgICAgIGxldCByID0gdW5tYXJrX25ldyBzdCB0Jy5yIGluXG4gICAgICAgIFhKb2luIHthID0gdDsgYiA9IE5vbmU7IGw7IHJ9XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG1hcmsgbHNyIG1hc2tfYml0cyBpblxuICAgICAgICBtYXRjaCBzdC5zaGFyZWRfeC4oaW5kZXgpIHdpdGhcbiAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCB4IDo6IHhzIC0+XG4gICAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSB4cztcbiAgICAgICAgICBpZiB4cyA9PSBbXSB0aGVuIHQnLm1hcmsgPC0gMDtcbiAgICAgICAgICB4XG4gICAgICApIGVsc2UgKFxuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIHQnLm1hcms7XG4gICAgICAgIGxldCBsID0gdW5tYXJrX25ldyBzdCB0Jy5sIGluXG4gICAgICAgIGxldCByID0gdW5tYXJrX25ldyBzdCB0Jy5yIGluXG4gICAgICAgIFhKb2luIHthID0gdDsgYiA9IE5vbmU7IGw7IHJ9XG4gICAgICApXG5cbiAgdHlwZSAnYiBkcm9wcGVkID0ge1xuICAgIGxlYXZlczogaW50O1xuICAgIHRhYmxlOiAnYiBvcHRpb24gYXJyYXk7XG4gICAgZXh0cmFfbGVhZjogJ2IgbGlzdDtcbiAgICBleHRyYV9qb2luOiAnYiBsaXN0O1xuICB9XG5cbiAgbGV0IG5vX2Ryb3BwZWQgPVxuICAgIHsgbGVhdmVzID0gMDsgdGFibGUgPSBbfHxdOyBleHRyYV9sZWFmID0gW107IGV4dHJhX2pvaW4gPSBbXSB9XG5cbiAgbGV0IGRpZmYgZ2V0X2Ryb3BwZWQgeG9sZCB0bmV3ID0gbWF0Y2ggeG9sZCwgdG5ldyB3aXRoXG4gICAgfCBYRW1wdHksIE5pbCAtPiBub19kcm9wcGVkLCBYRW1wdHlcbiAgICB8IChYTGVhZiB7YTsgX30gfCBYSm9pbiB7YTsgX30pLCBfIHdoZW4gYSA9PSB0bmV3IC0+IG5vX2Ryb3BwZWQsIHhvbGRcbiAgICB8IF8gLT5cbiAgICAgIGxldCB0cmF2ZXJzYWwgPVxuICAgICAgICBNYXJraW5nLnVuc2FmZV90cmF2ZXJzZVxuICAgICAgICAgIH5vbGRfcm9vdDoobWF0Y2ggeG9sZCB3aXRoXG4gICAgICAgICAgICAgIHwgWEVtcHR5IC0+IGVtcHR5XG4gICAgICAgICAgICAgIHwgKFhMZWFmIHthOyBffSB8IFhKb2luIHthOyBffSkgLT4gYVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH5uZXdfcm9vdDp0bmV3XG4gICAgICBpblxuICAgICAgbGV0IHNvbGQgPSBNYXJraW5nLm9sZF9zdGF0cyB0cmF2ZXJzYWwgaW5cbiAgICAgIGxldCBzbmV3ID0gTWFya2luZy5uZXdfc3RhdHMgdHJhdmVyc2FsIGluXG4gICAgICBsZXQgbmJfZHJvcHBlZCA9XG4gICAgICAgIE1hcmtpbmcubWFya2VkIHNvbGQgLSAoTWFya2luZy5ibG9ja2VkIHNvbGQgKyBNYXJraW5nLmJsb2NrZWQgc25ldylcbiAgICAgIGluXG4gICAgICBsZXQgbmJfc2hhcmVkID1cbiAgICAgICAgTWFya2luZy5zaGFyZWQgc29sZCArIE1hcmtpbmcuc2hhcmVkIHNuZXdcbiAgICAgIGluXG4gICAgICBsZXQgc3QgPSB7XG4gICAgICAgIGRyb3BwZWQgPSBpZiBnZXRfZHJvcHBlZCB0aGVuIEFycmF5Lm1ha2UgbmJfZHJvcHBlZCBOb25lIGVsc2UgW3x8XTtcbiAgICAgICAgZHJvcHBlZF9sZWFmID0gaWYgZ2V0X2Ryb3BwZWQgdGhlbiAwIGVsc2UgLSAxO1xuICAgICAgICBkcm9wcGVkX2pvaW4gPSBpZiBnZXRfZHJvcHBlZCB0aGVuIG5iX2Ryb3BwZWQgZWxzZSAtIDE7XG4gICAgICAgIHNoYXJlZCA9IEFycmF5Lm1ha2UgbmJfc2hhcmVkIE5pbDtcbiAgICAgICAgc2hhcmVkX3ggPSBBcnJheS5tYWtlIG5iX3NoYXJlZCBbXTtcbiAgICAgICAgc2hhcmVkX2luZGV4ID0gMDtcbiAgICAgIH0gaW5cbiAgICAgICgqUHJpbnRmLmVwcmludGYgXCJzb2xkLnNoYXJlZDolZCBzb2xkLm1hcmtlZDolZCBzb2xkLmJsb2NrZWQ6JWRcXG4lIVwiXG4gICAgICAgIHNvbGQuc2hhcmVkIHNvbGQubWFya2VkIHNvbGQuYmxvY2tlZDtcbiAgICAgIFByaW50Zi5lcHJpbnRmIFwic25ldy5zaGFyZWQ6JWQgc25ldy5tYXJrZWQ6JWQgc25ldy5ibG9ja2VkOiVkXFxuJSFcIlxuICAgICAgICBzbmV3LnNoYXJlZCBzbmV3Lm1hcmtlZCBzbmV3LmJsb2NrZWQ7KilcbiAgICAgIHVubWFya19vbGQgc3QgeG9sZDtcbiAgICAgIGFzc2VydCAoc3QuZHJvcHBlZF9sZWFmID0gc3QuZHJvcHBlZF9qb2luKTtcbiAgICAgIHByZXBhcmVfc2hhcmVkIHN0O1xuICAgICAgbGV0IHJlc3VsdCA9IHVubWFya19uZXcgc3QgdG5ldyBpblxuICAgICAgKCpQcmludGYuZXByaW50ZiBcIm5ld19jb21wdXRlZDolZCUhXFxuXCIgIW5ld19jb21wdXRlZDsqKVxuICAgICAgZm9yIGkgPSBzdC5zaGFyZWRfaW5kZXggLSAxIGRvd250byAwIGRvXG4gICAgICAgIE1hcmtpbmcucmVzdG9yZSBzdC5zaGFyZWQuKGkpXG4gICAgICBkb25lO1xuICAgICAgaWYgZ2V0X2Ryb3BwZWQgdGhlbiAoXG4gICAgICAgIGxldCB4bGVhZiA9IHJlZiBbXSBpblxuICAgICAgICBsZXQgeGpvaW4gPSByZWYgW10gaW5cbiAgICAgICAgZm9yIGkgPSAwIHRvIHN0LnNoYXJlZF9pbmRleCAtIDEgZG9cbiAgICAgICAgICBMaXN0Lml0ZXIgKGZ1bmN0aW9uXG4gICAgICAgICAgICAgIHwgWExlYWYgeyBiID0gU29tZSBiOyBffSAtPiB4bGVhZiA6PSBiIDo6ICF4bGVhZlxuICAgICAgICAgICAgICB8IFhKb2luIHsgYiA9IFNvbWUgYjsgX30gLT4geGpvaW4gOj0gYiA6OiAheGpvaW5cbiAgICAgICAgICAgICAgfCBfIC0+ICgpXG4gICAgICAgICAgICApIHN0LnNoYXJlZF94LihpKVxuICAgICAgICBkb25lO1xuICAgICAgICAoeyBsZWF2ZXMgPSBzdC5kcm9wcGVkX2xlYWY7XG4gICAgICAgICAgIHRhYmxlID0gc3QuZHJvcHBlZDtcbiAgICAgICAgICAgZXh0cmFfbGVhZiA9ICF4bGVhZjtcbiAgICAgICAgICAgZXh0cmFfam9pbiA9ICF4am9pbiB9LCByZXN1bHQpXG4gICAgICApIGVsc2VcbiAgICAgICAgbm9fZHJvcHBlZCwgcmVzdWx0XG5cbiAgdHlwZSAoJ2EsICdiKSBtYXBfcmVkdWNlID0ge1xuICAgIG1hcDogJ2EgLT4gJ2I7XG4gICAgcmVkdWNlOiAnYiAtPiAnYiAtPiAnYjtcbiAgfVxuXG4gIGxldCBldmFsIG1hcF9yZWR1Y2UgPSBmdW5jdGlvblxuICAgIHwgWEVtcHR5IC0+IE5vbmVcbiAgICB8IG90aGVyIC0+XG4gICAgICBsZXQgcmVjIGF1eCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgWEVtcHR5IHwgWExlYWYge2EgPSBOaWwgfCBKb2luIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IFhMZWFmIHtiID0gU29tZSBiOyBffSB8IFhKb2luIHtiID0gU29tZSBiOyBffSAtPiBiXG4gICAgICAgIHwgWExlYWYgKHthID0gTGVhZiB0JztfIH0gYXMgdCkgLT5cbiAgICAgICAgICBsZXQgcmVzdWx0ID0gbWFwX3JlZHVjZS5tYXAgdCcudiBpblxuICAgICAgICAgIHQuYiA8LSBTb21lIHJlc3VsdDtcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgfCBYSm9pbiB0IC0+XG4gICAgICAgICAgbGV0IGwgPSBhdXggdC5sIGFuZCByID0gYXV4IHQuciBpblxuICAgICAgICAgIGxldCByZXN1bHQgPSBtYXBfcmVkdWNlLnJlZHVjZSBsIHIgaW5cbiAgICAgICAgICB0LmIgPC0gU29tZSByZXN1bHQ7XG4gICAgICAgICAgcmVzdWx0XG4gICAgICBpblxuICAgICAgU29tZSAoYXV4IG90aGVyKVxuXG4gIHR5cGUgKCdhLCAnYikgcmVkdWNlciA9ICgnYSwgJ2IpIG1hcF9yZWR1Y2UgKiAoJ2EsICdiKSB4Zm9ybVxuXG4gIGxldCBtYWtlIH5tYXAgfnJlZHVjZSA9ICh7bWFwOyByZWR1Y2V9LCBYRW1wdHkpXG5cbiAgbGV0IHJlZHVjZSAobWFwX3JlZHVjZSwgdHJlZSA6IF8gcmVkdWNlcikgPVxuICAgIGV2YWwgbWFwX3JlZHVjZSB0cmVlXG5cbiAgbGV0IHVwZGF0ZSAobWFwX3JlZHVjZSwgb2xkX3RyZWUgOiBfIHJlZHVjZXIpIG5ld190cmVlIDogXyByZWR1Y2VyID1cbiAgICBsZXQgXywgdHJlZSA9IGRpZmYgZmFsc2Ugb2xkX3RyZWUgbmV3X3RyZWUgaW5cbiAgICAobWFwX3JlZHVjZSwgdHJlZSlcblxuICBsZXQgdXBkYXRlX2FuZF9nZXRfZHJvcHBlZCAobWFwX3JlZHVjZSwgb2xkX3RyZWUgOiBfIHJlZHVjZXIpIG5ld190cmVlXG4gICAgOiBfIGRyb3BwZWQgKiBfIHJlZHVjZXIgPVxuICAgIGxldCBkcm9wcGVkLCB0cmVlID0gZGlmZiB0cnVlIG9sZF90cmVlIG5ld190cmVlIGluXG4gICAgKGRyb3BwZWQsIChtYXBfcmVkdWNlLCB0cmVlKSlcblxuICBsZXQgZm9sZF9kcm9wcGVkIGtpbmQgZiBkcm9wcGVkIGFjYyA9XG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBsZXQgc3RhcnQsIGJvdW5kID0gbWF0Y2gga2luZCB3aXRoXG4gICAgICB8IGBBbGwgICAgLT4gMCwgQXJyYXkubGVuZ3RoIGRyb3BwZWQudGFibGVcbiAgICAgIHwgYE1hcCAgICAtPiAwLCBkcm9wcGVkLmxlYXZlc1xuICAgICAgfCBgUmVkdWNlIC0+IGRyb3BwZWQubGVhdmVzLCBBcnJheS5sZW5ndGggZHJvcHBlZC50YWJsZVxuICAgIGluXG4gICAgZm9yIGkgPSBzdGFydCB0byBib3VuZCAtIDEgZG9cbiAgICAgIG1hdGNoIGRyb3BwZWQudGFibGUuKGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIHggLT4gYWNjIDo9IGYgeCAhYWNjXG4gICAgZG9uZTtcbiAgICBiZWdpbiBtYXRjaCBraW5kIHdpdGhcbiAgICAgIHwgYEFsbCB8IGBNYXAgLT5cbiAgICAgICAgTGlzdC5pdGVyIChmdW4geCAtPiBhY2MgOj0gZiB4ICFhY2MpIGRyb3BwZWQuZXh0cmFfbGVhZlxuICAgICAgfCBgUmVkdWNlIC0+ICgpXG4gICAgZW5kO1xuICAgIGJlZ2luIG1hdGNoIGtpbmQgd2l0aFxuICAgICAgfCBgQWxsIHwgYFJlZHVjZSAtPlxuICAgICAgICBMaXN0Lml0ZXIgKGZ1biB4IC0+IGFjYyA6PSBmIHggIWFjYykgZHJvcHBlZC5leHRyYV9qb2luXG4gICAgICB8IGBNYXAgLT4gKClcbiAgICBlbmQ7XG4gICAgIWFjY1xuZW5kXG5cbigqIEx3ZCBpbnRlcmZhY2UgKilcblxubGV0IHJlYyBwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSA9IGZ1bmN0aW9uXG4gIHwgTmlsICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIHQgLT4gbWFwIHQudlxuICB8IEpvaW4gdCAtPlxuICAgIHJlZHVjZVxuICAgICAgKHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlIHQubClcbiAgICAgIChwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSB0LnIpXG5cbmxldCBmb2xkIH5tYXAgfnJlZHVjZSBzZXEgPVxuICBtYXRjaCBMd2QuaXNfcHVyZSBzZXEgd2l0aFxuICB8IFNvbWUgTmlsIC0+IEx3ZC5wdXJlIE5vbmVcbiAgfCBTb21lIG90aGVyIC0+IEx3ZC5wdXJlIChTb21lIChwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSBvdGhlcikpXG4gIHwgTm9uZSAtPlxuICAgIGxldCByZWR1Y2VyID0gcmVmIChSZWR1Y2VyLm1ha2Ugfm1hcCB+cmVkdWNlKSBpblxuICAgIEx3ZC5tYXAgc2VxIH5mOmJlZ2luIGZ1biBzZXEgLT5cbiAgICAgIGxldCByZWR1Y2VyJyA9IFJlZHVjZXIudXBkYXRlICFyZWR1Y2VyIHNlcSBpblxuICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgIFJlZHVjZXIucmVkdWNlIHJlZHVjZXInXG4gICAgZW5kXG5cbmxldCBmb2xkX21vbm9pZCBtYXAgKHplcm8sIHJlZHVjZSkgc2VxID1cbiAgbWF0Y2ggTHdkLmlzX3B1cmUgc2VxIHdpdGhcbiAgfCBTb21lIE5pbCAtPiBMd2QucHVyZSB6ZXJvXG4gIHwgU29tZSBvdGhlciAtPiBMd2QucHVyZSAocHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2Ugb3RoZXIpXG4gIHwgTm9uZSAtPlxuICAgIGxldCByZWR1Y2VyID0gcmVmIChSZWR1Y2VyLm1ha2Ugfm1hcCB+cmVkdWNlKSBpblxuICAgIEx3ZC5tYXAgc2VxIH5mOmJlZ2luIGZ1biBzZXEgLT5cbiAgICAgIGxldCByZWR1Y2VyJyA9IFJlZHVjZXIudXBkYXRlICFyZWR1Y2VyIHNlcSBpblxuICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgIG1hdGNoIFJlZHVjZXIucmVkdWNlIHJlZHVjZXInIHdpdGhcbiAgICAgIHwgTm9uZSAtPiB6ZXJvXG4gICAgICB8IFNvbWUgeCAtPiB4XG4gICAgZW5kXG5cbmxldCBtb25vaWQgPSAoZW1wdHksIGNvbmNhdClcblxubGV0IHRyYW5zZm9ybV9saXN0IGxzIGYgPVxuICBMd2RfdXRpbHMubWFwX3JlZHVjZSBmIG1vbm9pZCBsc1xuXG5sZXQgb2ZfbGlzdCBscyA9IHRyYW5zZm9ybV9saXN0IGxzIGVsZW1lbnRcblxubGV0IHJlYyBvZl9zdWJfYXJyYXkgZiBhcnIgaSBqID1cbiAgaWYgaiA8IGkgdGhlbiBlbXB0eVxuICBlbHNlIGlmIGogPSBpIHRoZW4gZiBhcnIuKGkpXG4gIGVsc2VcbiAgICBsZXQgayA9IGkgKyAoaiAtIGkpIC8gMiBpblxuICAgIGNvbmNhdCAob2Zfc3ViX2FycmF5IGYgYXJyIGkgaykgKG9mX3N1Yl9hcnJheSBmIGFyciAoayArIDEpIGopXG5cbmxldCB0cmFuc2Zvcm1fYXJyYXkgYXJyIGYgPSBvZl9zdWJfYXJyYXkgZiBhcnIgMCAoQXJyYXkubGVuZ3RoIGFyciAtIDEpXG5cbmxldCBvZl9hcnJheSBhcnIgPSB0cmFuc2Zvcm1fYXJyYXkgYXJyIGVsZW1lbnRcblxubGV0IHRvX2xpc3QgeCA9XG4gIGxldCByZWMgZm9sZCB4IGFjYyA9IG1hdGNoIHggd2l0aFxuICAgIHwgTmlsIC0+IGFjY1xuICAgIHwgTGVhZiB0IC0+IHQudiA6OiBhY2NcbiAgICB8IEpvaW4gdCAtPiBmb2xkIHQubCAoZm9sZCB0LnIgYWNjKVxuICBpblxuICBmb2xkIHggW11cblxubGV0IHRvX2FycmF5IHggPVxuICBsZXQgcmVjIGNvdW50ID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiAwXG4gICAgfCBMZWFmIF8gLT4gMVxuICAgIHwgSm9pbiB0IC0+IGNvdW50IHQubCArIGNvdW50IHQuclxuICBpblxuICBtYXRjaCBjb3VudCB4IHdpdGhcbiAgfCAwIC0+IFt8fF1cbiAgfCBuIC0+XG4gICAgbGV0IHJlYyBmaXJzdCA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTGVhZiB0IC0+IHQudlxuICAgICAgfCBKb2luIHQgLT4gZmlyc3QgdC5sXG4gICAgaW5cbiAgICBsZXQgZmlyc3QgPSBmaXJzdCB4IGluXG4gICAgbGV0IGFyciA9IEFycmF5Lm1ha2UgbiBmaXJzdCBpblxuICAgIGxldCByZWMgZm9sZCBpID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+IGlcbiAgICAgIHwgTGVhZiB0IC0+IGFyci4oaSkgPC0gdC52OyBpICsgMVxuICAgICAgfCBKb2luIHQgLT5cbiAgICAgICAgbGV0IGkgPSBmb2xkIGkgdC5sIGluXG4gICAgICAgIGxldCBpID0gZm9sZCBpIHQuciBpblxuICAgICAgICBpXG4gICAgaW5cbiAgICBsZXQgXyA6IGludCA9IGZvbGQgMCB4IGluXG4gICAgYXJyXG5cbmxldCBsd2RfZW1wdHkgOiAnYSB0IEx3ZC50ID0gTHdkLnB1cmUgTmlsXG5sZXQgbHdkX21vbm9pZCA6ICdhLiAnYSB0IEx3ZC50IEx3ZF91dGlscy5tb25vaWQgPVxuICAobHdkX2VtcHR5LCBmdW4geCB5IC0+IEx3ZC5tYXAyIH5mOmNvbmNhdCB4IHkpXG5cbmxldCBtYXAgZiBzZXEgPVxuICBmb2xkX21vbm9pZCAoZnVuIHggLT4gZWxlbWVudCAoZiB4KSkgbW9ub2lkIHNlcVxuXG5sZXQgZmlsdGVyIGYgc2VxID1cbiAgZm9sZF9tb25vaWQgKGZ1biB4IC0+IGlmIGYgeCB0aGVuIGVsZW1lbnQgeCBlbHNlIGVtcHR5KSBtb25vaWQgc2VxXG5cbmxldCBmaWx0ZXJfbWFwIGYgc2VxID1cbiAgbGV0IHNlbGVjdCB4ID0gbWF0Y2ggZiB4IHdpdGhcbiAgICB8IFNvbWUgeSAtPiBlbGVtZW50IHlcbiAgICB8IE5vbmUgLT4gZW1wdHlcbiAgaW5cbiAgZm9sZF9tb25vaWQgc2VsZWN0IG1vbm9pZCBzZXFcblxubGV0IGJpbmQgKHNlcSA6ICdhIHNlcSBMd2QudCkgKGYgOiAnYSAtPiAnYiBzZXEgTHdkLnQpICA6ICdiIHNlcSBMd2QudCA9XG4gIEx3ZC5qb2luIChmb2xkX21vbm9pZCBmIGx3ZF9tb25vaWQgc2VxKVxuXG5sZXQgc2VxX2JpbmQgKHNlcSA6ICdhIHNlcSBMd2QudCkgKGYgOiAnYSAtPiAnYiBzZXEpICA6ICdiIHNlcSBMd2QudCA9XG4gIGZvbGRfbW9ub2lkIGYgbW9ub2lkIHNlcVxuXG5sZXQgbGlmdCAoc2VxIDogJ2EgTHdkLnQgc2VxIEx3ZC50KSA6ICdhIHNlcSBMd2QudCA9XG4gIGJpbmQgc2VxIChMd2QubWFwIH5mOmVsZW1lbnQpXG5cbm1vZHVsZSBCYWxhbmNlZFRyZWUgOiBzaWdcbiAgdHlwZSAnYSB0ID1cbiAgICB8IExlYWZcbiAgICB8IE5vZGUgb2Yge1xuICAgICAgICByYW5rOiBpbnQ7XG4gICAgICAgIGw6ICdhIHQ7XG4gICAgICAgIHg6IGludCAqICdhIHNlcTtcbiAgICAgICAgcjogJ2EgdDtcbiAgICAgICAgbXV0YWJsZSBzZXE6ICdhIHNlcTtcbiAgICAgIH1cbiAgdmFsIGxlYWYgOiAnYSB0XG4gICgqdmFsIG5vZGUgOiAnYSB0IC0+IGludCAqICdhIHNlcSAtPiAnYSB0IC0+ICdhIHQqKVxuXG4gIHZhbCBpbnNlcnQgOiBjbXA6KCdhIC0+ICdhIC0+IGludCkgLT4gaW50IC0+ICdhIHNlcSAtPiAnYSB0IC0+ICdhIHRcbiAgKCp2YWwgdW5pb24gOiBjbXA6KCdhIC0+ICdhIC0+IGludCkgLT4gJ2EgdCAtPiAnYSB0IC0+ICdhIHQqKVxuZW5kID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9XG4gICAgfCBMZWFmXG4gICAgfCBOb2RlIG9mIHtcbiAgICAgICAgcmFuazogaW50O1xuICAgICAgICBsOiAnYSB0O1xuICAgICAgICB4OiBpbnQgKiAnYSBzZXE7XG4gICAgICAgIHI6ICdhIHQ7XG4gICAgICAgIG11dGFibGUgc2VxOiAnYSBzZXE7XG4gICAgICB9XG5cbiAgbGV0IGxlYWYgPSBMZWFmXG5cbiAgbGV0IHJhbmsgPSBmdW5jdGlvblxuICAgIHwgTGVhZiAtPiAwXG4gICAgfCBOb2RlIHQgLT4gdC5yYW5rXG5cbiAgbGV0IGNoZWNrIGwgciA9IGFicyAobCAtIHIpIDw9IDFcblxuICBsZXQgbm9kZSBsIHggciA9XG4gICAgTm9kZSB7bDsgeDsgcjsgc2VxID0gZW1wdHk7IHJhbmsgPSBtYXhpIChyYW5rIGwpIChyYW5rIHIpICsgMX1cblxuICBsZXQgcmVjIG5vZGVfbGVmdCBsIHggciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXIgdGhlbiBub2RlIGwgeCByIGVsc2UgbWF0Y2ggbCB3aXRoXG4gICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IE5vZGUgdCAtPlxuICAgICAgICBpZiBjaGVjayAocmFuayB0LmwpIG1sXG4gICAgICAgIHRoZW4gbm9kZSB0LmwgdC54IChub2RlX2xlZnQgdC5yIHggcilcbiAgICAgICAgZWxzZSBtYXRjaCB0LnIgd2l0aFxuICAgICAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IE5vZGUgdHIgLT5cbiAgICAgICAgICAgIGxldCB0cnIgPSBub2RlX2xlZnQgdHIuciB4IHIgaW5cbiAgICAgICAgICAgIGlmIGNoZWNrICgxICsgbWF4aSAocmFuayB0LmwpIChyYW5rIHRyLmwpKSAocmFuayB0cnIpXG4gICAgICAgICAgICB0aGVuIG5vZGUgKG5vZGUgdC5sIHQueCB0ci5sKSB0ci54IHRyclxuICAgICAgICAgICAgZWxzZSBub2RlIHQubCB0LnggKG5vZGUgdHIubCB0ci54IHRycilcblxuICBsZXQgcmVjIG5vZGVfcmlnaHQgbCB4IHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1yIG1sIHRoZW4gbm9kZSBsIHggciBlbHNlIG1hdGNoIHIgd2l0aFxuICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBOb2RlIHQgLT5cbiAgICAgICAgaWYgY2hlY2sgKHJhbmsgdC5yKSBtclxuICAgICAgICB0aGVuIG5vZGUgKG5vZGVfcmlnaHQgbCB4IHQubCkgdC54IHQuclxuICAgICAgICBlbHNlIG1hdGNoIHQubCB3aXRoXG4gICAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgTm9kZSB0bCAtPlxuICAgICAgICAgICAgbGV0IHRsbCA9IG5vZGVfcmlnaHQgbCB4IHRsLmwgaW5cbiAgICAgICAgICAgIGlmIGNoZWNrICgxICsgbWF4aSAocmFuayB0bC5yKSAocmFuayB0LnIpKSAocmFuayB0bGwpXG4gICAgICAgICAgICB0aGVuIG5vZGUgdGxsIHRsLnggKG5vZGUgdGwuciB0LnggdC5yKVxuICAgICAgICAgICAgZWxzZSBub2RlIChub2RlIHRsbCB0bC54IHRsLnIpIHQueCB0LnJcblxuICBsZXQgbm9kZSBsIHggciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXJcbiAgICB0aGVuIG5vZGUgbCB4IHJcbiAgICBlbHNlIGlmIG1sIDw9IG1yXG4gICAgdGhlbiBub2RlX3JpZ2h0IGwgeCByXG4gICAgZWxzZSBub2RlX2xlZnQgbCB4IHJcblxuICBsZXQgcmVjIGpvaW4gbCByID0gbWF0Y2ggbCwgciB3aXRoXG4gICAgfCBMZWFmLCB0IHwgdCwgTGVhZiAtPiB0XG4gICAgfCBOb2RlIHRsLCBOb2RlIHRyIC0+XG4gICAgICBpZiB0bC5yYW5rIDw9IHRyLnJhbmsgdGhlblxuICAgICAgICBub2RlIChqb2luIGwgdHIubCkgdHIueCB0ci5yXG4gICAgICBlbHNlXG4gICAgICAgIG5vZGUgdGwubCB0bC54IChqb2luIHRsLnIgcilcblxuICBsZXQgZ2V0X2VsZW1lbnQgPSBmdW5jdGlvblxuICAgIHwgTmlsIHwgSm9pbiBfIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgTGVhZiB7djtffSAtPiB2XG5cbiAgKCpsZXQgcmVjIHNwbGl0IH5jbXAgayA9IGZ1bmN0aW9uXG4gICAgfCBMZWFmIC0+IExlYWYsIDAsIExlYWZcbiAgICB8IE5vZGUgdCAtPlxuICAgICAgbGV0IGMgPSBjbXAgayAoZ2V0X2VsZW1lbnQgKHNuZCAodC54KSkpIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIGxldCBsJywgdicsIHInID0gc3BsaXQgfmNtcCBrIHQubCBpblxuICAgICAgICBsJywgdicsIGpvaW4gcicgdC5yXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgbGV0IGwnLCB2JywgcicgPSBzcGxpdCB+Y21wIGsgdC5yIGluXG4gICAgICAgIGpvaW4gdC5sIGwnLCB2JywgcidcbiAgICAgIGVsc2VcbiAgICAgICAgKHQubCwgZnN0IHQueCwgdC5yKVxuXG4gIGxldCByZWMgdW5pb24gfmNtcCB0MSB0MiA9XG4gICAgbWF0Y2ggdDEsIHQyIHdpdGhcbiAgICB8IExlYWYsIHQgfCB0LCBMZWFmIC0+IHRcbiAgICB8IE5vZGUgdDEsIHQyICAtPlxuICAgICAgbGV0IG0xLCBrMSA9IHQxLnggaW5cbiAgICAgIGxldCBsMiwgbTIsIHIyID0gc3BsaXQgfmNtcCAoZ2V0X2VsZW1lbnQgazEpIHQyIGluXG4gICAgICBsZXQgbCcgPSB1bmlvbiB+Y21wIHQxLmwgbDIgaW5cbiAgICAgIGxldCByJyA9IHVuaW9uIH5jbXAgdDEuciByMiBpblxuICAgICAgbGV0IG0gPSBtMSArIG0yIGluXG4gICAgICBpZiBtID0gMCB0aGVuXG4gICAgICAgIGpvaW4gbCcgcidcbiAgICAgIGVsc2UgKFxuICAgICAgICBhc3NlcnQgKG0gPiAwKTtcbiAgICAgICAgbm9kZSBsJyAobSwgazEpIHInO1xuICAgICAgKVxuICAgICopXG5cbiAgbGV0IGluc2VydCB+Y21wIG0xIHMgdCA9XG4gICAgYXNzZXJ0IChtMSA8PiAwKTtcbiAgICBsZXQgcmVjIGF1eCA9IGZ1bmN0aW9uXG4gICAgICB8IExlYWYgLT4gbm9kZSBMZWFmIChtMSwgcykgTGVhZlxuICAgICAgfCBOb2RlIHQgLT5cbiAgICAgICAgbGV0IG0yLCB4ID0gdC54IGluXG4gICAgICAgIGxldCBjID0gY21wIChnZXRfZWxlbWVudCBzKSAoZ2V0X2VsZW1lbnQgeCkgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgIGxldCBtID0gbTEgKyBtMiBpblxuICAgICAgICAgIGlmIG0gPSAwIHRoZW5cbiAgICAgICAgICAgIGpvaW4gdC5sIHQuclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5vZGUgdC5sIChtLCB4KSB0LnJcbiAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgbGV0IGwnID0gYXV4IHQubCBpblxuICAgICAgICAgIG5vZGUgbCcgdC54IHQuclxuICAgICAgICBlbHNlXG4gICAgICAgICAgbGV0IHInID0gYXV4IHQuciBpblxuICAgICAgICAgIG5vZGUgdC5sIHQueCByJ1xuICAgIGluXG4gICAgYXV4IHRcbmVuZFxuXG5sZXQgcmVjIHNlcV9vZl90cmVlID0gZnVuY3Rpb25cbiAgfCBCYWxhbmNlZFRyZWUuTGVhZiAtPiBlbXB0eVxuICB8IEJhbGFuY2VkVHJlZS5Ob2RlIHQgLT5cbiAgICBtYXRjaCB0LnNlcSB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIGxldCBzbCA9IHNlcV9vZl90cmVlIHQubCBpblxuICAgICAgbGV0IHNyID0gc2VxX29mX3RyZWUgdC5yIGluXG4gICAgICBhc3NlcnQgKGZzdCB0LnggPiAwKTtcbiAgICAgIGxldCBzZXEgPSBjb25jYXQgc2wgKGNvbmNhdCAoc25kIHQueCkgc3IpIGluXG4gICAgICB0LnNlcSA8LSBzZXE7XG4gICAgICBzZXFcbiAgICB8IHNlcSAtPiBzZXFcblxubGV0IHNvcnRfdW5pcSBjbXAgc2VxID1cbiAgbGV0IHByZXZpb3VzX3NlcSA9IHJlZiBlbXB0eSBpblxuICBsZXQgcHJldmlvdXNfdHJlZSA9IHJlZiBCYWxhbmNlZFRyZWUubGVhZiBpblxuICBsZXQgZiBuZXdfc2VxID1cbiAgICBsZXQgb2xkX3NlcSA9ICFwcmV2aW91c19zZXEgaW5cbiAgICBsZXQgb2xkX3RyZWUgPSAhcHJldmlvdXNfdHJlZSBpblxuICAgIGxldCBfID0gTWFya2luZy51bnNhZmVfdHJhdmVyc2Ugfm9sZF9yb290Om9sZF9zZXEgfm5ld19yb290Om5ld19zZXEgaW5cbiAgICBsZXQgcmVjIHVuYmxvY2sgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gKClcbiAgICAgIHwgTGVhZiB0IC0+IHQubWFyayA8LSBNYXJraW5nLnVubWFyayB0Lm1hcmtcbiAgICAgIHwgSm9pbiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICB1bmJsb2NrIHQubDtcbiAgICAgICAgdW5ibG9jayB0LnI7XG4gICAgICAgIGlmIE1hcmtpbmcuaXNfc2hhcmVkIG1hcmsgdGhlbiAoXG4gICAgICAgICAgTWFya2luZy5yZXN0b3JlIHNlcTtcbiAgICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICAgIHQubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICApIGVsc2VcbiAgICAgICAgICBhc3NlcnQgKE1hcmtpbmcuaXNfbm9uZSBtYXJrKVxuICAgIGluXG4gICAgbGV0IHJlYyB1bm1hcmtfbmV3IHRyZWUgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gdHJlZVxuICAgICAgfCBMZWFmIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIHQubWFyayA8LSAwO1xuICAgICAgICBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW5cbiAgICAgICAgICBCYWxhbmNlZFRyZWUuaW5zZXJ0IH5jbXAgKCsxKSBzZXEgdHJlZVxuICAgICAgICBlbHNlIChcbiAgICAgICAgICBhc3NlcnQgKE1hcmtpbmcuaXNfYm90aCBtYXJrIHx8IE1hcmtpbmcuaXNfbm9uZSBtYXJrKTtcbiAgICAgICAgICB0cmVlXG4gICAgICAgIClcbiAgICAgIHwgSm9pbiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW4gKFxuICAgICAgICAgIHQubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICAgIHVubWFya19uZXcgKHVubWFya19uZXcgdHJlZSB0LmwpIHQuclxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgIHVuYmxvY2sgc2VxO1xuICAgICAgICAgIHRyZWVcbiAgICAgICAgKVxuICAgIGluXG4gICAgbGV0IHJlYyB1bm1hcmtfb2xkIHRyZWUgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gdHJlZVxuICAgICAgfCBMZWFmIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIHQubWFyayA8LSAwO1xuICAgICAgICBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW5cbiAgICAgICAgICBCYWxhbmNlZFRyZWUuaW5zZXJ0IH5jbXAgKC0xKSBzZXEgdHJlZVxuICAgICAgICBlbHNlIChcbiAgICAgICAgICBhc3NlcnQgKE1hcmtpbmcuaXNfYm90aCBtYXJrIHx8IE1hcmtpbmcuaXNfbm9uZSBtYXJrKTtcbiAgICAgICAgICB0cmVlXG4gICAgICAgIClcbiAgICAgIHwgSm9pbiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW4gKFxuICAgICAgICAgIHQubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICAgIHVubWFya19vbGQgKHVubWFya19vbGQgdHJlZSB0LmwpIHQuclxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgIHVuYmxvY2sgc2VxO1xuICAgICAgICAgIHRyZWVcbiAgICAgICAgKVxuICAgIGluXG4gICAgbGV0IG5ld190cmVlID0gdW5tYXJrX29sZCAodW5tYXJrX25ldyBvbGRfdHJlZSBuZXdfc2VxKSBvbGRfc2VxIGluXG4gICAgcHJldmlvdXNfc2VxIDo9IG5ld19zZXE7XG4gICAgcHJldmlvdXNfdHJlZSA6PSBuZXdfdHJlZTtcbiAgICBzZXFfb2ZfdHJlZSBuZXdfdHJlZVxuICBpblxuICBMd2QubWFwIHNlcSB+ZlxuIiwib3BlbiBCcnJcbm9wZW4gRWxcblxudHlwZSB0ID0gRWwudFxuXG50eXBlICdhIGNvbCA9IFtcbiAgfCBgUCBvZiAnYVxuICAoKiogUHVyZSBlbGVtZW50ICopXG4gIHwgYFIgb2YgJ2EgTHdkLnRcbiAgKCoqIFJlYWN0aXZlIGVsZW1lbnQgKilcbiAgfCBgUyBvZiAnYSBMd2Rfc2VxLnQgTHdkLnRcbiAgKCoqIFJlYWN0aXZlIHNlcXVlbmNlIG9mIGVsZW1lbnRzICopXG5dIGxpc3RcbigqKiBEZXNjcmliaW5nIGNvbGxlY3Rpb25zIG9mIGVsZW1lbnRzICopXG5cbnR5cGUgaGFuZGxlciA9IEhhbmRsZXIgOiB7XG4gICAgb3B0czogRXYubGlzdGVuX29wdHMgb3B0aW9uO1xuICAgIHR5cGUnOiAnYSBFdi50eXBlJztcbiAgICBmdW5jOiAnYSBFdi50IC0+IHVuaXQ7XG4gIH0gLT4gaGFuZGxlclxuXG5sZXQgaGFuZGxlciA/b3B0cyB0eXBlJyBmdW5jID1cbiAgSGFuZGxlciB7b3B0czsgdHlwZSc7IGZ1bmN9XG5cbmxldCBpc19wdXJlX2VsZW1lbnQgPSBmdW5jdGlvblxuICB8IGBQIF8gLT4gdHJ1ZVxuICB8IGBSIHggLT4gT3B0aW9uLmlzX3NvbWUgKEx3ZC5pc19wdXJlIHgpXG4gIHwgYFMgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcblxubGV0IGV4dHJhY3RfcHVyZV9lbGVtZW50IHggPSBPcHRpb24uZ2V0IChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgZXh0cmFjdF9wdXJlX2VsZW1lbnRzIHhzID1cbiAgTGlzdC5mbGF0dGVuIChcbiAgICBMaXN0Lm1hcCAoZnVuY3Rpb25cbiAgICAgICAgfCBgUCB4IC0+IFt4XVxuICAgICAgICB8IGBSIHggLT4gW2V4dHJhY3RfcHVyZV9lbGVtZW50IHhdXG4gICAgICAgIHwgYFMgeCAtPiBMd2Rfc2VxLnRvX2xpc3QgKGV4dHJhY3RfcHVyZV9lbGVtZW50IHgpXG4gICAgICApIHhzXG4gIClcblxubGV0IHByZXBhcmVfY29sIDogXyBjb2wgLT4gXyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW10sIFtdXG4gIHwgY29sIC0+XG4gICAgbGV0IHB1cmUsIGltcHVyZSA9IExpc3QucGFydGl0aW9uIGlzX3B1cmVfZWxlbWVudCBjb2wgaW5cbiAgICBleHRyYWN0X3B1cmVfZWxlbWVudHMgcHVyZSwgaW1wdXJlXG5cbigqKiBSZWFjdGl2ZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyAqKVxuXG5sZXQgY29uc3VtZV9jaGlsZHJlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gW10sIE5vbmVcbiAgfCBbYFAgeF0gLT4gW3hdLCBOb25lXG4gIHwgW2BTIHhdIC0+IFtdLCBTb21lIHhcbiAgfCBbYFIgeF0gLT4gW10sIFNvbWUgKEx3ZC5tYXAgfmY6THdkX3NlcS5lbGVtZW50IHgpXG4gIHwgY29sIC0+XG4gICAgaWYgTGlzdC5mb3JfYWxsIGlzX3B1cmVfZWxlbWVudCBjb2xcbiAgICB0aGVuXG4gICAgICBMaXN0LmZsYXR0ZW4gKFxuICAgICAgICBMaXN0Lm1hcCAoZnVuY3Rpb25cbiAgICAgICAgICAgIHwgYFAgeCAtPiBbeF1cbiAgICAgICAgICAgIHwgYFIgeCAtPiBbZXh0cmFjdF9wdXJlX2VsZW1lbnQgeF1cbiAgICAgICAgICAgIHwgYFMgeCAtPiBMd2Rfc2VxLnRvX2xpc3QgKGV4dHJhY3RfcHVyZV9lbGVtZW50IHgpXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbFxuICAgICAgKSwgTm9uZVxuICAgIGVsc2UgW10sIFNvbWUgKFxuICAgICAgICBMd2RfdXRpbHMubWFwX3JlZHVjZSAoZnVuY3Rpb25cbiAgICAgICAgICAgIHwgYFAgeCAtPiBMd2QucHVyZSAoTHdkX3NlcS5lbGVtZW50IHgpXG4gICAgICAgICAgICB8IGBSIHggLT4gTHdkLm1hcCB+ZjpMd2Rfc2VxLmVsZW1lbnQgeFxuICAgICAgICAgICAgfCBgUyB4IC0+IHhcbiAgICAgICAgICApIEx3ZF9zZXEubHdkX21vbm9pZFxuICAgICAgICAgIGNvbFxuICAgICAgKVxuXG50eXBlIGNoaWxkX3RyZWUgPVxuICB8IExlYWYgb2YgRWwudFxuICB8IElubmVyIG9mIHsgbXV0YWJsZSBib3VuZDogSnYudDtcbiAgICAgICAgICAgICAgIGxlZnQ6IGNoaWxkX3RyZWU7IHJpZ2h0OiBjaGlsZF90cmVlOyB9XG5cbmxldCBjaGlsZF9ub2RlIG5vZGUgPSBMZWFmIG5vZGVcblxubGV0IGNoaWxkX2pvaW4gbGVmdCByaWdodCA9IElubmVyIHsgYm91bmQgPSBKdi5udWxsOyBsZWZ0OyByaWdodCB9XG5cbmxldCBqdl9wYXJlbnROb2RlID0gSnN0ci52IFwicGFyZW50Tm9kZVwiXG5sZXQganZfbmV4dFNpYmxpbmcgPSBKc3RyLnYgXCJuZXh0U2libGluZ1wiXG5sZXQganZfYXBwZW5kID0gSnN0ci52IFwiYXBwZW5kXCJcbmxldCBqdl9iZWZvcmUgPSBKc3RyLnYgXCJiZWZvcmVcIlxubGV0IGp2X3JlbW92ZSA9IEpzdHIudiBcInJlbW92ZVwiXG5sZXQganZfY29udGFpbnMgPSBKc3RyLnYgXCJjb250YWluc1wiXG5cbmxldCBqdl90b1JlbW92ZSA9XG4gIEpzdHIudiBcImx3ZC10by1yZW1vdmVcIiAoKiBIQUNLIENvdWxkIGJlIHR1cm5lZCBpbnRvIGEgSmF2YXNjcmlwdCBzeW1ib2wgKilcblxubGV0IGNvbnRhaW5zX2ZvY3VzIG5vZGUgPVxuICBtYXRjaCBCcnIuRG9jdW1lbnQuYWN0aXZlX2VsIChCcnIuRWwuZG9jdW1lbnQgbm9kZSkgd2l0aFxuICB8IE5vbmUgLT4gZmFsc2VcbiAgfCBTb21lIGVsIC0+XG4gICAgSnYudG9fYm9vbCAoSnYuY2FsbCcgKEVsLnRvX2p2IG5vZGUpIGp2X2NvbnRhaW5zIFt8RWwudG9fanYgZWx8XSlcblxubGV0IHVwZGF0ZV9jaGlsZHJlblxuICAgIChzZWxmIDogRWwudClcbiAgICAoY2hpbGRyZW4gOiBFbC50IEx3ZF9zZXEudCBMd2QudCkgOiBFbC50IEx3ZC50ID1cbiAgbGV0IHJlZHVjZXIgPVxuICAgIHJlZiAoTHdkX3NlcS5SZWR1Y2VyLm1ha2Ugfm1hcDpjaGlsZF9ub2RlIH5yZWR1Y2U6Y2hpbGRfam9pbilcbiAgaW5cbiAgTHdkLm1hcCBjaGlsZHJlbiB+ZjpiZWdpbiBmdW4gY2hpbGRyZW4gLT5cbiAgICBsZXQgZHJvcHBlZCwgcmVkdWNlcicgPVxuICAgICAgTHdkX3NlcS5SZWR1Y2VyLnVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQgIXJlZHVjZXIgY2hpbGRyZW4gaW5cbiAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgIGxldCBzY2hlZHVsZV9mb3JfcmVtb3ZhbCBjaGlsZCAoKSA9IG1hdGNoIGNoaWxkIHdpdGhcbiAgICAgIHwgTGVhZiBub2RlIC0+IEp2LnNldCcgKEVsLnRvX2p2IG5vZGUpIGp2X3RvUmVtb3ZlIEp2LnRydWUnO1xuICAgICAgfCBJbm5lciBfIC0+ICgpXG4gICAgaW5cbiAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXAgc2NoZWR1bGVfZm9yX3JlbW92YWwgZHJvcHBlZCAoKTtcbiAgICBsZXQgcHJlc2VydmVfZm9jdXMgPSBjb250YWluc19mb2N1cyBzZWxmIGluXG4gICAgYmVnaW4gbWF0Y2ggTHdkX3NlcS5SZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJyB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSB0cmVlIC0+XG4gICAgICAgIGxldCByZWMgdXBkYXRlIGFjYyA9IGZ1bmN0aW9uXG4gICAgICAgICAgfCBMZWFmIG5vZGUgLT5cbiAgICAgICAgICAgIGxldCBub2RlJyA9IEVsLnRvX2p2IG5vZGUgaW5cbiAgICAgICAgICAgIEp2LmRlbGV0ZScgbm9kZScganZfdG9SZW1vdmU7XG4gICAgICAgICAgICAoKkJyci5Db25zb2xlLmxvZyBbXCJVcGRhdGluZyBcIjsgbm9kZV07KilcbiAgICAgICAgICAgIGlmIEp2LmdldCcgbm9kZScganZfcGFyZW50Tm9kZSAhPSBFbC50b19qdiBzZWxmIHRoZW4gKFxuICAgICAgICAgICAgICBpZiBKdi5pc19udWxsIGFjY1xuICAgICAgICAgICAgICB0aGVuIGlnbm9yZSAoSnYuY2FsbCcgKEVsLnRvX2p2IHNlbGYpIGp2X2FwcGVuZCBbfG5vZGUnfF0pXG4gICAgICAgICAgICAgIGVsc2UgaWdub3JlIChKdi5jYWxsJyBhY2MganZfYmVmb3JlIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICkgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICgqIENoZWNrIGlmIHRoZXJlIGlzIG5vdCBhbnkgd29yayB0byBkbyAqKVxuICAgICAgICAgICAgICBKdi5nZXQnIG5vZGUnIGp2X25leHRTaWJsaW5nICE9IGFjYyAmJlxuICAgICAgICAgICAgICAoKiBDaGVjayBpZiB3ZSBhcmUgaW4gdGhlIGZvY3VzIGNhc2UgYW5kIHRyeSB0byBcImJ1YmJsZSBzb3J0XCIgdG9cbiAgICAgICAgICAgICAgICAgcHJlc2VydmUgZm9jdXMgKilcbiAgICAgICAgICAgICAgbm90IChcbiAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9mb2N1cyAmJiBjb250YWluc19mb2N1cyBub2RlICYmXG4gICAgICAgICAgICAgICAgbGV0IHJlYyBzaGlmdF9zaWJsaW5ncyAoKSA9XG4gICAgICAgICAgICAgICAgICBsZXQgc2libGluZyA9IEp2LmdldCcgbm9kZScganZfbmV4dFNpYmxpbmcgaW5cbiAgICAgICAgICAgICAgICAgIGlmIHNpYmxpbmcgPT0gYWNjIHRoZW4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiBKdi5pc19udWxsIHNpYmxpbmcgdGhlbiBmYWxzZVxuICAgICAgICAgICAgICAgICAgZWxzZSAoXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZSAoSnYuY2FsbCcgbm9kZScganZfYmVmb3JlIFt8c2libGluZ3xdKTtcbiAgICAgICAgICAgICAgICAgICAgc2hpZnRfc2libGluZ3MgKClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIHNoaWZ0X3NpYmxpbmdzICgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkgdGhlbiAoXG4gICAgICAgICAgICAgIGlmIEp2LmlzX251bGwgYWNjXG4gICAgICAgICAgICAgIHRoZW4gaWdub3JlIChKdi5jYWxsJyAoRWwudG9fanYgc2VsZikganZfYXBwZW5kIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICAgZWxzZSBpZ25vcmUgKEp2LmNhbGwnIGFjYyBqdl9iZWZvcmUgW3xub2RlJ3xdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5vZGUnXG4gICAgICAgICAgfCBJbm5lciB0IC0+XG4gICAgICAgICAgICBpZiBKdi5pc19udWxsIHQuYm91bmQgdGhlbiAoXG4gICAgICAgICAgICAgIGxldCBhY2MgPSB1cGRhdGUgYWNjIHQucmlnaHQgaW5cbiAgICAgICAgICAgICAgbGV0IGFjYyA9IHVwZGF0ZSBhY2MgdC5sZWZ0IGluXG4gICAgICAgICAgICAgIHQuYm91bmQgPC0gYWNjO1xuICAgICAgICAgICAgICBhY2NcbiAgICAgICAgICAgICkgZWxzZVxuICAgICAgICAgICAgICB0LmJvdW5kXG4gICAgICAgIGluXG4gICAgICAgIGlnbm9yZSAodXBkYXRlIEp2Lm51bGwgdHJlZSlcbiAgICBlbmQ7XG4gICAgbGV0IHJlbW92ZV9jaGlsZCBjaGlsZCAoKSA9IG1hdGNoIGNoaWxkIHdpdGhcbiAgICAgIHwgTGVhZiBub2RlIC0+XG4gICAgICAgIGxldCBub2RlID0gRWwudG9fanYgbm9kZSBpblxuICAgICAgICBpZiBKdi5pc19zb21lIChKdi5nZXQnIG5vZGUganZfdG9SZW1vdmUpIHRoZW4gKFxuICAgICAgICAgICgqQnJyLkNvbnNvbGUubG9nIFtcIlJlbW92aW5nIFwiOyBub2RlXTsqKVxuICAgICAgICAgIEp2LmRlbGV0ZScgbm9kZSBqdl90b1JlbW92ZTtcbiAgICAgICAgICBpZ25vcmUgKEp2LmNhbGwnIG5vZGUganZfcmVtb3ZlIFt8fF0pXG4gICAgICAgIClcbiAgICAgIHwgSW5uZXIgXyAtPiAoKVxuICAgIGluXG4gICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwIHJlbW92ZV9jaGlsZCBkcm9wcGVkICgpO1xuICAgIHNlbGZcbiAgZW5kXG5cbmxldCBwdXJlX3VuaXQgPSBMd2QucHVyZSAoKVxuXG5sZXQgZHVtbXlfa3ZfYXQgPSAoSnN0ci5lbXB0eSwgSnN0ci5lbXB0eSlcblxubGV0IGF0dGFjaF9hdHRyaWJzIGVsIGF0dHJpYnMgPVxuICBsZXQgc2V0X2t2IChrLCB2KSA9XG4gICAgaWYgSnN0ci5lcXVhbCBrIEF0Lk5hbWUuY2xhc3MnXG4gICAgdGhlbiBFbC5zZXRfY2xhc3MgdiB0cnVlIGVsXG4gICAgZWxzZSBFbC5zZXRfYXQgayAoU29tZSB2KSBlbFxuICBpblxuICBsZXQgdW5zZXRfa3YgKGssIHYpID1cbiAgICBpZiBKc3RyLmVxdWFsIGsgQXQuTmFtZS5jbGFzcydcbiAgICB0aGVuIEVsLnNldF9jbGFzcyB2IGZhbHNlIGVsXG4gICAgZWxzZSBFbC5zZXRfYXQgayBOb25lIGVsXG4gIGluXG4gIGxldCBzZXRfbHdkX2F0ICgpID1cbiAgICBsZXQgcHJldiA9IHJlZiBkdW1teV9rdl9hdCBpblxuICAgIGZ1biBhdCAtPlxuICAgICAgaWYgIXByZXYgIT0gZHVtbXlfa3ZfYXQgdGhlblxuICAgICAgICB1bnNldF9rdiAhcHJldjtcbiAgICAgIGxldCBwYWlyID0gQXQudG9fcGFpciBhdCBpblxuICAgICAgc2V0X2t2IHBhaXI7XG4gICAgICBwcmV2IDo9IHBhaXJcbiAgaW5cbiAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgKGZ1bmN0aW9uXG4gICAgICB8IGBQIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IGBSIGF0IC0+IEx3ZC5tYXAgfmY6KHNldF9sd2RfYXQgKCkpIGF0XG4gICAgICB8IGBTIGF0cyAtPlxuICAgICAgICBsZXQgc2V0X2F0JyBhdCA9XG4gICAgICAgICAgbGV0IGt2ID0gQXQudG9fcGFpciBhdCBpblxuICAgICAgICAgIHNldF9rdiBrdjtcbiAgICAgICAgICBrdlxuICAgICAgICBpblxuICAgICAgICBsZXQgcmVkdWNlciA9XG4gICAgICAgICAgcmVmIChMd2Rfc2VxLlJlZHVjZXIubWFrZVxuICAgICAgICAgICAgICAgICB+bWFwOnNldF9hdCdcbiAgICAgICAgICAgICAgICAgfnJlZHVjZTooZnVuIF8gXyAtPiBkdW1teV9rdl9hdCkpXG4gICAgICAgIGluXG4gICAgICAgIGxldCB1cGRhdGUgYXRzID1cbiAgICAgICAgICBsZXQgZHJvcHBlZCwgcmVkdWNlcicgPVxuICAgICAgICAgICAgTHdkX3NlcS5SZWR1Y2VyLnVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQgIXJlZHVjZXIgYXRzXG4gICAgICAgICAgaW5cbiAgICAgICAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci5mb2xkX2Ryb3BwZWQgYE1hcFxuICAgICAgICAgICAgKGZ1biBrdiAoKSAtPiB1bnNldF9rdiBrdilcbiAgICAgICAgICAgIGRyb3BwZWQgKCk7XG4gICAgICAgICAgaWdub3JlIChMd2Rfc2VxLlJlZHVjZXIucmVkdWNlIHJlZHVjZXInOiBfIG9wdGlvbilcbiAgICAgICAgaW5cbiAgICAgICAgTHdkLm1hcCB+Zjp1cGRhdGUgYXRzXG4gICAgKSAocHVyZV91bml0LCBmdW4gXyBfIC0+IHB1cmVfdW5pdClcbiAgICBhdHRyaWJzXG5cbmxldCBsaXN0ZW4gZWwgKEhhbmRsZXIge29wdHM7IHR5cGUnOyBmdW5jfSkgPVxuICBFdi5saXN0ZW4gP29wdHMgdHlwZScgZnVuYyAoRWwuYXNfdGFyZ2V0IGVsKVxuXG5sZXQgYXR0YWNoX2V2ZW50cyBlbCBldmVudHMgPVxuICBMd2RfdXRpbHMubWFwX3JlZHVjZSAoZnVuY3Rpb25cbiAgICAgIHwgYFAgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgYFIgYXQgLT5cbiAgICAgICAgbGV0IGNhY2hlZCA9IHJlZiBOb25lIGluXG4gICAgICAgIEx3ZC5tYXAgfmY6KGZ1biBoIC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCAhY2FjaGVkIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgICAgIHwgU29tZSBsIC0+IEV2LnVubGlzdGVuIGxcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGNhY2hlZCA6PSBTb21lIChsaXN0ZW4gZWwgaClcbiAgICAgICAgICApIGF0XG4gICAgICB8IGBTIGF0cyAtPlxuICAgICAgICBsZXQgcmVkdWNlciA9XG4gICAgICAgICAgcmVmIChMd2Rfc2VxLlJlZHVjZXIubWFrZVxuICAgICAgICAgICAgICAgICB+bWFwOihsaXN0ZW4gZWwpXG4gICAgICAgICAgICAgICAgIH5yZWR1Y2U6KGZ1biB4IF95IC0+IHgpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgdXBkYXRlIGF0cyA9XG4gICAgICAgICAgbGV0IGRyb3BwZWQsIHJlZHVjZXInID1cbiAgICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci51cGRhdGVfYW5kX2dldF9kcm9wcGVkICFyZWR1Y2VyIGF0c1xuICAgICAgICAgIGluXG4gICAgICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXBcbiAgICAgICAgICAgIChmdW4gbCAoKSAtPiBFdi51bmxpc3RlbiBsKVxuICAgICAgICAgICAgZHJvcHBlZCAoKTtcbiAgICAgICAgICBpZ25vcmUgKEx3ZF9zZXEuUmVkdWNlci5yZWR1Y2UgcmVkdWNlcic6IF8gb3B0aW9uKVxuICAgICAgICBpblxuICAgICAgICBMd2QubWFwIH5mOnVwZGF0ZSBhdHNcbiAgICApIChwdXJlX3VuaXQsIGZ1biBfIF8gLT4gcHVyZV91bml0KVxuICAgIGV2ZW50c1xuXG5sZXQgdiA/ZCA/KGF0PVtdKSA/KGV2PVtdKSB0YWcgY2hpbGRyZW4gPVxuICBsZXQgYXQsIGltcHVyZV9hdCA9IHByZXBhcmVfY29sIGF0IGluXG4gIGxldCBldiwgaW1wdXJlX2V2ID0gcHJlcGFyZV9jb2wgZXYgaW5cbiAgbGV0IGNoaWxkcmVuLCBpbXB1cmVfY2hpbGRyZW4gPSBjb25zdW1lX2NoaWxkcmVuIGNoaWxkcmVuIGluXG4gIGxldCBlbCA9IEVsLnYgP2QgfmF0IHRhZyBjaGlsZHJlbiBpblxuICBsZXQgcmVzdWx0ID1cbiAgICBtYXRjaCBpbXB1cmVfYXQsIGltcHVyZV9jaGlsZHJlbiB3aXRoXG4gICAgfCBbXSwgTm9uZSAtPiBMd2QucHVyZSBlbFxuICAgIHwgW10sIFNvbWUgY2hpbGRyZW4gLT5cbiAgICAgIHVwZGF0ZV9jaGlsZHJlbiBlbCBjaGlsZHJlblxuICAgIHwgYXQsIE5vbmUgLT5cbiAgICAgIEx3ZC5tYXAgfmY6KGZ1biAoKSAtPiBlbCkgKGF0dGFjaF9hdHRyaWJzIGVsIGF0KVxuICAgIHwgYXQsIFNvbWUgY2hpbGRyZW4gLT5cbiAgICAgIEx3ZC5tYXAyIH5mOihmdW4gKCkgZWwgLT4gZWwpXG4gICAgICAgIChhdHRhY2hfYXR0cmlicyBlbCBhdClcbiAgICAgICAgKHVwZGF0ZV9jaGlsZHJlbiBlbCBjaGlsZHJlbilcbiAgaW5cbiAgTGlzdC5pdGVyIChmdW4gaCAtPiBpZ25vcmUgKGxpc3RlbiBlbCBoKSkgZXY7XG4gIGxldCByZXN1bHQgPVxuICAgIG1hdGNoIGltcHVyZV9ldiB3aXRoXG4gICAgfCBbXSAtPiByZXN1bHRcbiAgICB8IGV2cyAtPlxuICAgICAgTHdkLm1hcDIgfmY6KGZ1biAoKSBlbCAtPiBlbClcbiAgICAgICAgKGF0dGFjaF9ldmVudHMgZWwgZXZzKVxuICAgICAgICByZXN1bHRcbiAgaW5cbiAgcmVzdWx0XG5cbigqKiB7MTplbHMgRWxlbWVudCBjb25zdHJ1Y3RvcnN9ICopXG5cbnR5cGUgY29ucyA9ICA/ZDpkb2N1bWVudCAtPiA/YXQ6QXQudCBjb2wgLT4gP2V2OmhhbmRsZXIgY29sIC0+IHQgY29sIC0+IHQgTHdkLnRcbigqKiBUaGUgdHlwZSBmb3IgZWxlbWVudCBjb25zdHJ1Y3RvcnMuIFRoaXMgaXMgc2ltcGx5IHshdn0gd2l0aCBhXG4gICAgcHJlLWFwcGxpZWQgZWxlbWVudCBuYW1lLiAqKVxuXG50eXBlIHZvaWRfY29ucyA9ID9kOmRvY3VtZW50IC0+ID9hdDpBdC50IGNvbCAtPiA/ZXY6aGFuZGxlciBjb2wgLT4gdW5pdCAtPiB0IEx3ZC50XG4oKiogVGhlIHR5cGUgZm9yIHZvaWQgZWxlbWVudCBjb25zdHJ1Y3RvcnMuIFRoaXMgaXMgc2ltcGx5IHshdn1cbiAgICB3aXRoIGEgcHJlLWFwcGxpZWQgZWxlbWVudCBuYW1lIGFuZCB3aXRob3V0IGNoaWxkcmVuLiAqKVxuXG5sZXQgY29ucyBuYW1lID9kID9hdCA/ZXYgY3MgPSB2ID9kID9hdCA/ZXYgbmFtZSBjc1xubGV0IHZvaWRfY29ucyBuYW1lID9kID9hdCA/ZXYgKCkgPSB2ID9kID9hdCA/ZXYgbmFtZSBbXVxuXG5sZXQgYSA9IGNvbnMgTmFtZS5hXG5sZXQgYWJiciA9IGNvbnMgTmFtZS5hYmJyXG5sZXQgYWRkcmVzcyA9IGNvbnMgTmFtZS5hZGRyZXNzXG5sZXQgYXJlYSA9IHZvaWRfY29ucyBOYW1lLmFyZWFcbmxldCBhcnRpY2xlID0gY29ucyBOYW1lLmFydGljbGVcbmxldCBhc2lkZSA9IGNvbnMgTmFtZS5hc2lkZVxubGV0IGF1ZGlvID0gY29ucyBOYW1lLmF1ZGlvXG5sZXQgYiA9IGNvbnMgTmFtZS5iXG5sZXQgYmFzZSA9IHZvaWRfY29ucyBOYW1lLmJhc2VcbmxldCBiZGkgPSBjb25zIE5hbWUuYmRpXG5sZXQgYmRvID0gY29ucyBOYW1lLmJkb1xubGV0IGJsb2NrcXVvdGUgPSBjb25zIE5hbWUuYmxvY2txdW90ZVxubGV0IGJvZHkgPSBjb25zIE5hbWUuYm9keVxubGV0IGJyID0gdm9pZF9jb25zIE5hbWUuYnJcbmxldCBidXR0b24gPSBjb25zIE5hbWUuYnV0dG9uXG5sZXQgY2FudmFzID0gY29ucyBOYW1lLmNhbnZhc1xubGV0IGNhcHRpb24gPSBjb25zIE5hbWUuY2FwdGlvblxubGV0IGNpdGUgPSBjb25zIE5hbWUuY2l0ZVxubGV0IGNvZGUgPSBjb25zIE5hbWUuY29kZVxubGV0IGNvbCA9IHZvaWRfY29ucyBOYW1lLmNvbFxubGV0IGNvbGdyb3VwID0gY29ucyBOYW1lLmNvbGdyb3VwXG5sZXQgY29tbWFuZCA9IGNvbnMgTmFtZS5jb21tYW5kXG5sZXQgZGF0YWxpc3QgPSBjb25zIE5hbWUuZGF0YWxpc3RcbmxldCBkZCA9IGNvbnMgTmFtZS5kZFxubGV0IGRlbCA9IGNvbnMgTmFtZS5kZWxcbmxldCBkZXRhaWxzID0gY29ucyBOYW1lLmRldGFpbHNcbmxldCBkZm4gPSBjb25zIE5hbWUuZGZuXG5sZXQgZGl2ID0gY29ucyBOYW1lLmRpdlxubGV0IGRsID0gY29ucyBOYW1lLmRsXG5sZXQgZHQgPSBjb25zIE5hbWUuZHRcbmxldCBlbSA9IGNvbnMgTmFtZS5lbVxubGV0IGVtYmVkID0gdm9pZF9jb25zIE5hbWUuZW1iZWRcbmxldCBmaWVsZHNldCA9IGNvbnMgTmFtZS5maWVsZHNldFxubGV0IGZpZ2NhcHRpb24gPSBjb25zIE5hbWUuZmlnY2FwdGlvblxubGV0IGZpZ3VyZSA9IGNvbnMgTmFtZS5maWd1cmVcbmxldCBmb290ZXIgPSBjb25zIE5hbWUuZm9vdGVyXG5sZXQgZm9ybSA9IGNvbnMgTmFtZS5mb3JtXG5sZXQgaDEgPSBjb25zIE5hbWUuaDFcbmxldCBoMiA9IGNvbnMgTmFtZS5oMlxubGV0IGgzID0gY29ucyBOYW1lLmgzXG5sZXQgaDQgPSBjb25zIE5hbWUuaDRcbmxldCBoNSA9IGNvbnMgTmFtZS5oNVxubGV0IGg2ID0gY29ucyBOYW1lLmg2XG5sZXQgaGVhZCA9IGNvbnMgTmFtZS5oZWFkXG5sZXQgaGVhZGVyID0gY29ucyBOYW1lLmhlYWRlclxubGV0IGhncm91cCA9IGNvbnMgTmFtZS5oZ3JvdXBcbmxldCBociA9IHZvaWRfY29ucyBOYW1lLmhyXG5sZXQgaHRtbCA9IGNvbnMgTmFtZS5odG1sXG5sZXQgaSA9IGNvbnMgTmFtZS5pXG5sZXQgaWZyYW1lID0gY29ucyBOYW1lLmlmcmFtZVxubGV0IGltZyA9IHZvaWRfY29ucyBOYW1lLmltZ1xubGV0IGlucHV0ID0gdm9pZF9jb25zIE5hbWUuaW5wdXRcbmxldCBpbnMgPSBjb25zIE5hbWUuaW5zXG5sZXQga2JkID0gY29ucyBOYW1lLmtiZFxubGV0IGtleWdlbiA9IGNvbnMgTmFtZS5rZXlnZW5cbmxldCBsYWJlbCA9IGNvbnMgTmFtZS5sYWJlbFxubGV0IGxlZ2VuZCA9IGNvbnMgTmFtZS5sZWdlbmRcbmxldCBsaSA9IGNvbnMgTmFtZS5saVxubGV0IGxpbmsgPSB2b2lkX2NvbnMgTmFtZS5saW5rXG5sZXQgbWFwID0gY29ucyBOYW1lLm1hcFxubGV0IG1hcmsgPSBjb25zIE5hbWUubWFya1xubGV0IG1lbnUgPSBjb25zIE5hbWUubWVudVxubGV0IG1ldGEgPSB2b2lkX2NvbnMgTmFtZS5tZXRhXG5sZXQgbWV0ZXIgPSBjb25zIE5hbWUubWV0ZXJcbmxldCBuYXYgPSBjb25zIE5hbWUubmF2XG5sZXQgbm9zY3JpcHQgPSBjb25zIE5hbWUubm9zY3JpcHRcbmxldCBvYmplY3QnID0gY29ucyBOYW1lLm9iamVjdCdcbmxldCBvbCA9IGNvbnMgTmFtZS5vbFxubGV0IG9wdGdyb3VwID0gY29ucyBOYW1lLm9wdGdyb3VwXG5sZXQgb3B0aW9uID0gY29ucyBOYW1lLm9wdGlvblxubGV0IG91dHB1dCA9IGNvbnMgTmFtZS5vdXRwdXRcbmxldCBwID0gY29ucyBOYW1lLnBcbmxldCBwYXJhbSA9IHZvaWRfY29ucyBOYW1lLnBhcmFtXG5sZXQgcHJlID0gY29ucyBOYW1lLnByZVxubGV0IHByb2dyZXNzID0gY29ucyBOYW1lLnByb2dyZXNzXG5sZXQgcSA9IGNvbnMgTmFtZS5xXG5sZXQgcnAgPSBjb25zIE5hbWUucnBcbmxldCBydCA9IGNvbnMgTmFtZS5ydFxubGV0IHJ1YnkgPSBjb25zIE5hbWUucnVieVxubGV0IHMgPSBjb25zIE5hbWUuc1xubGV0IHNhbXAgPSBjb25zIE5hbWUuc2FtcFxubGV0IHNjcmlwdCA9IGNvbnMgTmFtZS5zY3JpcHRcbmxldCBzZWN0aW9uID0gY29ucyBOYW1lLnNlY3Rpb25cbmxldCBzZWxlY3QgPSBjb25zIE5hbWUuc2VsZWN0XG5sZXQgc21hbGwgPSBjb25zIE5hbWUuc21hbGxcbmxldCBzb3VyY2UgPSB2b2lkX2NvbnMgTmFtZS5zb3VyY2VcbmxldCBzcGFuID0gY29ucyBOYW1lLnNwYW5cbmxldCBzdHJvbmcgPSBjb25zIE5hbWUuc3Ryb25nXG5sZXQgc3R5bGUgPSBjb25zIE5hbWUuc3R5bGVcbmxldCBzdWIgPSBjb25zIE5hbWUuc3ViXG5sZXQgc3VtbWFyeSA9IGNvbnMgTmFtZS5zdW1tYXJ5XG5sZXQgc3VwID0gY29ucyBOYW1lLnN1cFxubGV0IHRhYmxlID0gY29ucyBOYW1lLnRhYmxlXG5sZXQgdGJvZHkgPSBjb25zIE5hbWUudGJvZHlcbmxldCB0ZCA9IGNvbnMgTmFtZS50ZFxubGV0IHRleHRhcmVhID0gY29ucyBOYW1lLnRleHRhcmVhXG5sZXQgdGZvb3QgPSBjb25zIE5hbWUudGZvb3RcbmxldCB0aCA9IGNvbnMgTmFtZS50aFxubGV0IHRoZWFkID0gY29ucyBOYW1lLnRoZWFkXG5sZXQgdGltZSA9IGNvbnMgTmFtZS50aW1lXG5sZXQgdGl0bGUgPSBjb25zIE5hbWUudGl0bGVcbmxldCB0ciA9IGNvbnMgTmFtZS50clxubGV0IHRyYWNrID0gdm9pZF9jb25zIE5hbWUudHJhY2tcbmxldCB1ID0gY29ucyBOYW1lLnVcbmxldCB1bCA9IGNvbnMgTmFtZS51bFxubGV0IHZhciA9IGNvbnMgTmFtZS52YXJcbmxldCB2aWRlbyA9IGNvbnMgTmFtZS52aWRlb1xubGV0IHdiciA9IHZvaWRfY29ucyBOYW1lLndiclxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEFycmF5IHV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBlcXVhbCA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2Egb3JkID0gJ2EgLT4gJ2EgLT4gaW50XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBBcnJheXN9ICopXG5cbmluY2x1ZGUgQXJyYXlcblxubGV0IGVtcHR5ID0gW3x8XVxuXG5sZXQgZ2V0X3NhZmUgYSBpID1cbiAgaWYgaSA+PSAwICYmIGkgPCBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgU29tZSAoQXJyYXkudW5zYWZlX2dldCBhIGkpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBtYXBfaW5wbGFjZSBmIGEgPSBBcnJheS5pdGVyaSAoZnVuIGkgZSAtPiBBcnJheS51bnNhZmVfc2V0IGEgaSAoZiBlKSkgYVxubGV0IG1hcGlfaW5wbGFjZSBmIGEgPSBBcnJheS5pdGVyaSAoZnVuIGkgZSAtPiBBcnJheS51bnNhZmVfc2V0IGEgaSAoZiBpIGUpKSBhXG5sZXQgZm9sZCA9IEFycmF5LmZvbGRfbGVmdFxuXG5sZXQgZm9sZGkgZiBhY2MgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChmIGFjYyBpIGEuKGkpKSAoaSArIDEpXG4gIGluXG4gIGF1eCBhY2MgMFxuXG5sZXQgZm9sZF93aGlsZSBmIGFjYyBhID1cbiAgbGV0IHJlYyBmb2xkX3doaWxlX2kgZiBhY2MgaSA9XG4gICAgaWYgaSA8IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IGFjYywgY29udCA9IGYgYWNjIGEuKGkpIGluXG4gICAgICBtYXRjaCBjb250IHdpdGhcbiAgICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgICB8IGBDb250aW51ZSAtPiBmb2xkX3doaWxlX2kgZiBhY2MgKGkgKyAxKVxuICAgICkgZWxzZVxuICAgICAgYWNjXG4gIGluXG4gIGZvbGRfd2hpbGVfaSBmIGFjYyAwXG5cbmxldCBmb2xkX21hcCBmIGFjYyBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAoKiBuZWVkIHNwZWNpYWwgY2FzZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSByZXN1bHQgKilcbiAgaWYgbiA9IDAgdGhlblxuICAgIGFjYywgW3x8XVxuICBlbHNlIChcbiAgICBsZXQgYWNjLCBiMCA9IGYgYWNjIGEuKDApIGluXG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgbiBiMCBpblxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgZm9yIGkgPSAxIHRvIG4gLSAxIGRvXG4gICAgICBsZXQgbmV3X2FjYywgYiA9IGYgIWFjYyBhLihpKSBpblxuICAgICAgYWNjIDo9IG5ld19hY2M7XG4gICAgICByZXMuKGkpIDwtIGJcbiAgICBkb25lO1xuICAgICFhY2MsIHJlc1xuICApXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgKG4gKyAxKSBhY2MgaW5cbiAgQXJyYXkuaXRlcmlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBmIHJlcy4oaSkgeCBpblxuICAgICAgcmVzLihpICsgMSkgPC0gbmV3X2FjYylcbiAgICBhO1xuICByZXNcblxubGV0IHJldmVyc2VfaW5fcGxhY2UgYSA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBsZW4gPiAwIHRoZW5cbiAgICBmb3IgayA9IDAgdG8gKGxlbiAtIDEpIC8gMiBkb1xuICAgICAgbGV0IHQgPSBhLihrKSBpblxuICAgICAgYS4oaykgPC0gYS4obGVuIC0gMSAtIGspO1xuICAgICAgYS4obGVuIC0gMSAtIGspIDwtIHRcbiAgICBkb25lXG5cbmxldCBzb3J0ZWQgY21wIGEgPVxuICBsZXQgYiA9IEFycmF5LmNvcHkgYSBpblxuICBBcnJheS5zb3J0IGNtcCBiO1xuICBiXG5cbmxldCBzb3J0X2luZGljZXMgY21wIGEgPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgbGV0IGIgPSBBcnJheS5pbml0IGxlbiAoZnVuIGsgLT4gaykgaW5cbiAgQXJyYXkuc29ydCAoZnVuIGsxIGsyIC0+IGNtcCBhLihrMSkgYS4oazIpKSBiO1xuICBiXG5cbmxldCBzb3J0X3JhbmtpbmcgY21wIGEgPSBzb3J0X2luZGljZXMgY29tcGFyZSAoc29ydF9pbmRpY2VzIGNtcCBhKVxuXG5sZXQgcmV2IGEgPVxuICBsZXQgYiA9IEFycmF5LmNvcHkgYSBpblxuICByZXZlcnNlX2luX3BsYWNlIGI7XG4gIGJcblxuZXhjZXB0aW9uIEZvdW5kXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgZWx0IGEgPVxuICB0cnlcbiAgICBBcnJheS5pdGVyIChmdW4gZSAtPiBpZiBlcSBlIGVsdCB0aGVuIHJhaXNlX25vdHJhY2UgRm91bmQpIGE7XG4gICAgZmFsc2VcbiAgd2l0aCBGb3VuZCAtPiB0cnVlXG5cbmxldCByZWMgZmluZF9hdXggZiBhIGkgPVxuICBpZiBpID49IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBOb25lXG4gIGVsc2UgKFxuICAgIG1hdGNoIGYgaSBhLihpKSB3aXRoXG4gICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgTm9uZSAtPiBmaW5kX2F1eCBmIGEgKGkgKyAxKVxuICApXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbmxldCBmaW5kX21hcCBmIGEgPSBmaW5kX2F1eCAoZnVuIF8gLT4gZikgYSAwXG5sZXQgZmluZCA9IGZpbmRfbWFwXG5sZXQgZmluZF9tYXBfaSBmIGEgPSBmaW5kX2F1eCBmIGEgMFxubGV0IGZpbmRpID0gZmluZF9tYXBfaVxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG5sZXQgZmluZF9pZHggcCBhID1cbiAgZmluZF9hdXhcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBhIDBcblxubGV0IG1heCBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRcbiAgICAgICAgIChmdW4gYWNjIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYWNjIGVsdCA8IDAgdGhlblxuICAgICAgICAgICAgIGVsdFxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgYS4oMCkgYSlcblxubGV0IG1heF9leG4gY21wIGEgPVxuICBtYXRjaCBtYXggY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5Lm1heF9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgYXJnbWF4IGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZGlcbiAgICAgICAgIChmdW4gYWNjIGkgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhLihhY2MpIGVsdCA8IDAgdGhlblxuICAgICAgICAgICAgIGlcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIDAgYSlcblxubGV0IGFyZ21heF9leG4gY21wIGEgPVxuICBtYXRjaCBhcmdtYXggY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5LmFyZ21heF9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgbWluIGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZFxuICAgICAgICAgKGZ1biBhY2MgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhY2MgZWx0ID4gMCB0aGVuXG4gICAgICAgICAgICAgZWx0XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICBhLigwKSBhKVxuXG5sZXQgbWluX2V4biBjbXAgYSA9XG4gIG1hdGNoIG1pbiBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkubWluX2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBhcmdtaW4gY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkaVxuICAgICAgICAgKGZ1biBhY2MgaSBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGEuKGFjYykgZWx0ID4gMCB0aGVuXG4gICAgICAgICAgICAgaVxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgMCBhKVxuXG5sZXQgYXJnbWluX2V4biBjbXAgYSA9XG4gIG1hdGNoIGFyZ21pbiBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkuYXJnbWluX2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBmaWx0ZXJfbWFwIGYgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYScgPSBBcnJheS5vZl9saXN0IGFjYyBpblxuICAgICAgcmV2ZXJzZV9pbl9wbGFjZSBhJztcbiAgICAgIGEnXG4gICAgKSBlbHNlIChcbiAgICAgIG1hdGNoIGYgYS4oaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGF1eCBhY2MgKGkgKyAxKVxuICAgICAgfCBTb21lIHggLT4gYXV4ICh4IDo6IGFjYykgKGkgKyAxKVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIDBcblxubGV0IGZpbHRlciBwIGEgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1biB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIHhcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBhXG5cbigqIGFwcGVuZCBbcmV2IGFdIGluIGZyb250IG9mIFthY2NdICopXG5sZXQgcmVjIF9fcmV2X2FwcGVuZF9saXN0IGEgYWNjIGkgPVxuICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIGFjY1xuICBlbHNlXG4gICAgX19yZXZfYXBwZW5kX2xpc3QgYSAoYS4oaSkgOjogYWNjKSAoaSArIDEpXG5cbmxldCBmbGF0X21hcCBmIGEgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IGEnID0gQXJyYXkub2ZfbGlzdCBhY2MgaW5cbiAgICAgIHJldmVyc2VfaW5fcGxhY2UgYSc7XG4gICAgICBhJ1xuICAgICkgZWxzZSAoXG4gICAgICBsZXQgYScgPSBmIGEuKGkpIGluXG4gICAgICBhdXggKF9fcmV2X2FwcGVuZF9saXN0IGEnIGFjYyAwKSAoaSArIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gMFxuXG5sZXQgbW9ub2lkX3Byb2R1Y3QgZiBhMSBhMiA9XG4gIGxldCBuYTEgPSBsZW5ndGggYTEgaW5cbiAgaW5pdFxuICAgIChuYTEgKiBsZW5ndGggYTIpXG4gICAgKGZ1biBpX3Byb2QgLT5cbiAgICAgIGxldCBpID0gaV9wcm9kIG1vZCBuYTEgaW5cbiAgICAgIGxldCBqID0gaV9wcm9kIC8gbmExIGluXG4gICAgICBmIGExLihpKSBhMi4oaikpXG5cbmxldCByZWMgX2xvb2t1cF9yZWMgfmNtcCBrIGEgaSBqID1cbiAgaWYgaSA+IGogdGhlblxuICAgIHJhaXNlIE5vdF9mb3VuZFxuICBlbHNlIGlmIGkgPSBqIHRoZW5cbiAgICBpZiBjbXAgayBhLihpKSA9IDAgdGhlblxuICAgICAgaVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICBlbHNlIChcbiAgICBsZXQgbWlkZGxlID0gKGogKyBpKSAvIDIgaW5cbiAgICBtYXRjaCBjbXAgayBhLihtaWRkbGUpIHdpdGhcbiAgICB8IDAgLT4gbWlkZGxlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gX2xvb2t1cF9yZWMgfmNtcCBrIGEgaSAobWlkZGxlIC0gMSlcbiAgICB8IF8gLT4gX2xvb2t1cF9yZWMgfmNtcCBrIGEgKG1pZGRsZSArIDEpIGpcbiAgKVxuXG5sZXQgX2xvb2t1cF9leG4gfmNtcCBrIGEgaSBqID1cbiAgaWYgaSA+IGogdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gIG1hdGNoIGNtcCBrIGEuKGkpIHdpdGhcbiAgfCAwIC0+IGlcbiAgfCBuIHdoZW4gbiA8IDAgLT4gcmFpc2UgTm90X2ZvdW5kICgqIHRvbyBsb3cgKilcbiAgfCBfIHdoZW4gaSA9IGogLT4gcmFpc2UgTm90X2ZvdW5kICgqIHRvbyBoaWdoICopXG4gIHwgXyAtPlxuICAgIChtYXRjaCBjbXAgayBhLihqKSB3aXRoXG4gICAgfCAwIC0+IGpcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSAoaSArIDEpIChqIC0gMSlcbiAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kKVxuKCogdG9vIGhpZ2ggKilcblxubGV0IGxvb2t1cF9leG4gfmNtcCBrIGEgPSBfbG9va3VwX2V4biB+Y21wIGsgYSAwIChBcnJheS5sZW5ndGggYSAtIDEpXG5cbmxldCBsb29rdXAgfmNtcCBrIGEgPVxuICB0cnkgU29tZSAoX2xvb2t1cF9leG4gfmNtcCBrIGEgMCAoQXJyYXkubGVuZ3RoIGEgLSAxKSlcbiAgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgYnNlYXJjaCB+Y21wIGsgYSA9XG4gIGxldCByZWMgYXV4IGkgaiA9XG4gICAgaWYgaSA+IGogdGhlblxuICAgICAgYEp1c3RfYWZ0ZXIgalxuICAgIGVsc2UgKFxuICAgICAgbGV0IG1pZGRsZSA9IGkgKyAoKGogLSBpKSAvIDIpIGluXG4gICAgICAoKiBhdm9pZCBvdmVyZmxvdyAqKVxuICAgICAgbWF0Y2ggY21wIGsgYS4obWlkZGxlKSB3aXRoXG4gICAgICB8IDAgLT4gYEF0IG1pZGRsZVxuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gYXV4IGkgKG1pZGRsZSAtIDEpXG4gICAgICB8IF8gLT4gYXV4IChtaWRkbGUgKyAxKSBqXG4gICAgKVxuICBpblxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW5cbiAgICBgRW1wdHlcbiAgZWxzZSAoXG4gICAgbWF0Y2ggY21wIGEuKDApIGssIGNtcCBhLihuIC0gMSkgayB3aXRoXG4gICAgfCBjLCBfIHdoZW4gYyA+IDAgLT4gYEFsbF9iaWdnZXJcbiAgICB8IF8sIGMgd2hlbiBjIDwgMCAtPiBgQWxsX2xvd2VyXG4gICAgfCBfIC0+IGF1eCAwIChuIC0gMSlcbiAgKVxuXG5sZXQgcmVjIF9mb3JfYWxsMiBwIGExIGEyIGkxIGkyIH5sZW4gPVxuICBsZW4gPSAwXG4gIHx8IChwIGExLihpMSkgYTIuKGkyKSAmJiBfZm9yX2FsbDIgcCBhMSBhMiAoaTEgKyAxKSAoaTIgKyAxKSB+bGVuOihsZW4gLSAxKSlcblxubGV0IGZvcl9hbGwyIHAgYSBiID1cbiAgQXJyYXkubGVuZ3RoIGEgPSBBcnJheS5sZW5ndGggYiAmJiBfZm9yX2FsbDIgcCBhIGIgMCAwIH5sZW46KEFycmF5Lmxlbmd0aCBhKVxuXG5sZXQgcmVjIF9leGlzdHMyIHAgYTEgYTIgaTEgaTIgfmxlbiA9XG4gIGxlbiA+IDBcbiAgJiYgKHAgYTEuKGkxKSBhMi4oaTIpIHx8IF9leGlzdHMyIHAgYTEgYTIgKGkxICsgMSkgKGkyICsgMSkgfmxlbjoobGVuIC0gMSkpXG5cbmxldCBleGlzdHMyIHAgYSBiID1cbiAgX2V4aXN0czIgcCBhIGIgMCAwIH5sZW46KFN0ZGxpYi5taW4gKEFycmF5Lmxlbmd0aCBhKSAoQXJyYXkubGVuZ3RoIGIpKVxuXG5sZXQgX2ZvbGQyIGYgYWNjIGEgYiBpIGogfmxlbiA9XG4gIGxldCByZWMgYXV4IGFjYyBvID1cbiAgICBpZiBvID0gbGVuIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2UgKFxuICAgICAgbGV0IGFjYyA9IGYgYWNjIChBcnJheS5nZXQgYSAoaSArIG8pKSAoQXJyYXkuZ2V0IGIgKGogKyBvKSkgaW5cbiAgICAgIGF1eCBhY2MgKG8gKyAxKVxuICAgIClcbiAgaW5cbiAgYXV4IGFjYyAwXG5cbmxldCBmb2xkMiBmIGFjYyBhIGIgPVxuICBpZiBsZW5ndGggYSA8PiBsZW5ndGggYiB0aGVuIGludmFsaWRfYXJnIFwiZm9sZDJcIjtcbiAgX2ZvbGQyIGYgYWNjIGEgYiAwIDAgfmxlbjooQXJyYXkubGVuZ3RoIGEpXG5cbmxldCAoIC0tICkgaSBqID1cbiAgaWYgaSA8PSBqIHRoZW5cbiAgICBBcnJheS5pbml0IChqIC0gaSArIDEpIChmdW4gayAtPiBpICsgaylcbiAgZWxzZVxuICAgIEFycmF5LmluaXQgKGkgLSBqICsgMSkgKGZ1biBrIC0+IGkgLSBrKVxuXG5sZXQgKCAtLV4gKSBpIGogPVxuICBpZiBpID0gaiB0aGVuXG4gICAgW3x8XVxuICBlbHNlIGlmIGkgPiBqIHRoZW5cbiAgICBBcnJheS5pbml0IChpIC0gaikgKGZ1biBrIC0+IGkgLSBrKVxuICBlbHNlXG4gICAgQXJyYXkuaW5pdCAoaiAtIGkpIChmdW4gayAtPiBpICsgaylcblxuKCoqIGFsbCB0aGUgZWxlbWVudHMgb2YgYSwgYnV0IHRoZSBpLXRoLCBpbnRvIGEgbGlzdCAqKVxubGV0IGV4Y2VwdF9pZHggYSBpID1cbiAgZm9sZGlcbiAgICAoZnVuIGFjYyBqIGVsdCAtPlxuICAgICAgaWYgaSA9IGogdGhlblxuICAgICAgICBhY2NcbiAgICAgIGVsc2VcbiAgICAgICAgZWx0IDo6IGFjYylcbiAgICBbXSBhXG5cbmxldCBlcXVhbCBlcSBhIGIgPVxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIGVxIGEuKGkpIGIuKGkpICYmIGF1eCAoaSArIDEpXG4gIGluXG4gIEFycmF5Lmxlbmd0aCBhID0gQXJyYXkubGVuZ3RoIGIgJiYgYXV4IDBcblxubGV0IGNvbXBhcmUgY21wIGEgYiA9XG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGIgdGhlblxuICAgICAgICAwXG4gICAgICBlbHNlXG4gICAgICAgIC0xXG4gICAgZWxzZSBpZiBpID0gQXJyYXkubGVuZ3RoIGIgdGhlblxuICAgICAgMVxuICAgIGVsc2UgKFxuICAgICAgbGV0IGMgPSBjbXAgYS4oaSkgYi4oaSkgaW5cbiAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgYXV4IChpICsgMSlcbiAgICAgIGVsc2VcbiAgICAgICAgY1xuICAgIClcbiAgaW5cbiAgYXV4IDBcblxuKCogc3dhcCBlbGVtZW50cyBvZiBhcnJheSAqKVxubGV0IHN3YXAgYSBpIGogPVxuICBpZiBpIDw+IGogdGhlbiAoXG4gICAgbGV0IHRtcCA9IGEuKGkpIGluXG4gICAgYS4oaSkgPC0gYS4oaik7XG4gICAgYS4oaikgPC0gdG1wXG4gIClcblxuKCogc2h1ZmZsZSBhW2kg4oCmIGpdIHVzaW5nIHRoZSBnaXZlbiBpbnQgcmFuZG9tIGdlbmVyYXRvclxuICAgU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVyLVlhdGVzX3NodWZmbGUgKilcbmxldCBfc2h1ZmZsZSBfcmFuZF9pbnQgYSBpIGogPVxuICBmb3IgayA9IGogLSAxIGRvd250byBpICsgMSBkb1xuICAgIGxldCBsID0gX3JhbmRfaW50IChrICsgMSkgaW5cbiAgICBsZXQgdG1wID0gYS4obCkgaW5cbiAgICBhLihsKSA8LSBhLihrKTtcbiAgICBhLihrKSA8LSB0bXBcbiAgZG9uZVxuXG5sZXQgc2h1ZmZsZSBhID0gX3NodWZmbGUgUmFuZG9tLmludCBhIDAgKEFycmF5Lmxlbmd0aCBhKVxubGV0IHNodWZmbGVfd2l0aCBzdCBhID0gX3NodWZmbGUgKFJhbmRvbS5TdGF0ZS5pbnQgc3QpIGEgMCAoQXJyYXkubGVuZ3RoIGEpXG5cbmxldCByYW5kb21fY2hvb3NlIGEgPVxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5yYW5kb21fY2hvb3NlXCI7XG4gIGZ1biBzdCAtPiBhLihSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCByYW5kb21fbGVuIG4gZyBzdCA9IEFycmF5LmluaXQgbiAoZnVuIF8gLT4gZyBzdClcblxubGV0IHJhbmRvbSBnIHN0ID1cbiAgbGV0IG4gPSBSYW5kb20uU3RhdGUuaW50IHN0IDFfMDAwIGluXG4gIHJhbmRvbV9sZW4gbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbiA9IDEgKyBSYW5kb20uU3RhdGUuaW50IHN0IDFfMDAwIGluXG4gIHJhbmRvbV9sZW4gbiBnIHN0XG5cbmxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgID8ocHBfc2VwID0gZnVuIG91dCAoKSAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCIsQCBcIikgcHBfaXRlbSBvdXQgYSA9XG4gIHBwX3N0YXJ0IG91dCAoKTtcbiAgZm9yIGsgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGsgPiAwIHRoZW4gcHBfc2VwIG91dCAoKTtcbiAgICBwcF9pdGVtIG91dCBhLihrKVxuICBkb25lO1xuICBwcF9zdG9wIG91dCAoKVxuXG5sZXQgcHBfaSA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgID8ocHBfc2VwID0gZnVuIG91dCAoKSAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCIsQCBcIikgcHBfaXRlbSBvdXQgYSA9XG4gIHBwX3N0YXJ0IG91dCAoKTtcbiAgZm9yIGsgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGsgPiAwIHRoZW4gcHBfc2VwIG91dCAoKTtcbiAgICBwcF9pdGVtIGsgb3V0IGEuKGspXG4gIGRvbmU7XG4gIHBwX3N0b3Agb3V0ICgpXG5cbmxldCB0b19zdHJpbmcgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGEgPVxuICBBcnJheS50b19saXN0IGEgfD4gTGlzdC5tYXAgaXRlbV90b19zdHJpbmcgfD4gU3RyaW5nLmNvbmNhdCBzZXBcblxubGV0IHRvX3NlcSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA+PSBsZW5ndGggYSB0aGVuXG4gICAgICBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgU2VxLkNvbnMgKGEuKGkpLCBhdXggKGkgKyAxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX2l0ZXIgYSBrID0gaXRlciBrIGFcblxubGV0IHRvX2dlbiBhID1cbiAgbGV0IGsgPSByZWYgMCBpblxuICBmdW4gKCkgLT5cbiAgICBpZiAhayA8IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IHggPSBhLighaykgaW5cbiAgICAgIGluY3IgaztcbiAgICAgIFNvbWUgeFxuICAgICkgZWxzZVxuICAgICAgTm9uZVxuXG4oKiogezIgR2VuZXJpYyBGdW5jdGlvbnN9ICopXG5cbm1vZHVsZSB0eXBlIE1PTk9fQVJSQVkgPSBzaWdcbiAgdHlwZSBlbHRcbiAgdHlwZSB0XG5cbiAgdmFsIGxlbmd0aCA6IHQgLT4gaW50XG4gIHZhbCBnZXQgOiB0IC0+IGludCAtPiBlbHRcbiAgdmFsIHNldCA6IHQgLT4gaW50IC0+IGVsdCAtPiB1bml0XG5lbmRcblxuKCogRHVhbCBQaXZvdCBRdWlja3NvcnQgKFlhcm9zbGF2c2tpeSlcbiAgIGZyb20gXCJhdmVyYWdlIGNhc2UgYW5hbHlzaXMgb2YgSmF2YSA3J3MgRHVhbCBQaXZvdCBRdWlja3NvcnRcIiAqKVxubW9kdWxlIFNvcnRHZW5lcmljIChBIDogTU9OT19BUlJBWSkgPSBzdHJ1Y3RcbiAgbW9kdWxlIFJhbmQgPSBSYW5kb20uU3RhdGVcblxuICBsZXQgc2VlZF8gPSBbfCAxMjM0NTYgfF1cblxuICB0eXBlIHN0YXRlID0ge1xuICAgIG11dGFibGUgbDogaW50OyAoKiBsZWZ0IHBvaW50ZXIgKilcbiAgICBtdXRhYmxlIGc6IGludDsgKCogcmlnaHQgcG9pbnRlciAqKVxuICAgIG11dGFibGUgazogaW50O1xuICB9XG5cbiAgbGV0IHJhbmRfaWR4XyByYW5kIGkgaiA9IGkgKyBSYW5kLmludCByYW5kIChqIC0gaSlcblxuICBsZXQgc3dhcF8gYSBpIGogPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgICgpXG4gICAgZWxzZSAoXG4gICAgICBsZXQgdG1wID0gQS5nZXQgYSBpIGluXG4gICAgICBBLnNldCBhIGkgKEEuZ2V0IGEgaik7XG4gICAgICBBLnNldCBhIGogdG1wXG4gICAgKVxuXG4gIGxldCBzb3J0IH5jbXAgYSA9XG4gICAgbGV0IHJlYyBpbnNlcnRfIGEgaSBrID1cbiAgICAgIGlmIGsgPCBpIHRoZW5cbiAgICAgICAgKClcbiAgICAgIGVsc2UgaWYgY21wIChBLmdldCBhIGspIChBLmdldCBhIChrICsgMSkpID4gMCB0aGVuIChcbiAgICAgICAgc3dhcF8gYSBrIChrICsgMSk7XG4gICAgICAgIGluc2VydF8gYSBpIChrIC0gMSlcbiAgICAgIClcbiAgICBpblxuICAgICgqIHJlY3Vyc2l2ZSBwYXJ0IG9mIGluc2VydGlvbiBzb3J0ICopXG4gICAgbGV0IHJlYyBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogayA9XG4gICAgICBpZiBrIDwgaiB0aGVuIChcbiAgICAgICAgaW5zZXJ0XyBhIGkgKGsgLSAxKTtcbiAgICAgICAgc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIChrICsgMSlcbiAgICAgIClcbiAgICBpblxuICAgICgqIGluc2VydGlvbiBzb3J0LCBmb3Igc21hbGwgc2xpY2VzICopXG4gICAgbGV0IHNvcnRfaW5zZXJ0aW9uIGEgaSBqID1cbiAgICAgIGlmIGogLSBpID4gMSB0aGVuIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiAoaSArIDEpXG4gICAgaW5cbiAgICBsZXQgcmFuZCA9IFJhbmQubWFrZSBzZWVkXyBpblxuICAgICgqIHNvcnQgc2xpY2UuXG4gICAgICAgVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGUgdHdvIHBpdm90cyBhcmUgZXF1YWwsIGJ1dCBpdCdzIHVubGlrZWx5LiAqKVxuICAgIGxldCByZWMgc29ydF9zbGljZV8gfnN0IGEgaSBqID1cbiAgICAgIGlmIGogLSBpID4gMTAgdGhlbiAoXG4gICAgICAgIHN0LmwgPC0gaTtcbiAgICAgICAgc3QuZyA8LSBqIC0gMTtcbiAgICAgICAgc3QuayA8LSBpO1xuICAgICAgICAoKiBjaG9vc2UgcGl2b3RzICopXG4gICAgICAgIGxldCBwID0gQS5nZXQgYSAocmFuZF9pZHhfIHJhbmQgaSBqKSBpblxuICAgICAgICBsZXQgcSA9IEEuZ2V0IGEgKHJhbmRfaWR4XyByYW5kIGkgaikgaW5cbiAgICAgICAgKCogaW52YXJpYW50OiBzdC5wIDw9IHN0LnEsIHN3YXAgdGhlbSBvdGhlcndpc2UgKilcbiAgICAgICAgbGV0IHAsIHEgPVxuICAgICAgICAgIGlmIGNtcCBwIHEgPiAwIHRoZW5cbiAgICAgICAgICAgIHEsIHBcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBwLCBxXG4gICAgICAgIGluXG4gICAgICAgIHdoaWxlIHN0LmsgPD0gc3QuZyBkb1xuICAgICAgICAgIGxldCBjdXIgPSBBLmdldCBhIHN0LmsgaW5cbiAgICAgICAgICBpZiBjbXAgY3VyIHAgPCAwIHRoZW4gKFxuICAgICAgICAgICAgKCogaW5zZXJ0IGluIGxlZnRtb3N0IGJhbmQgKilcbiAgICAgICAgICAgIGlmIHN0LmsgPD4gc3QubCB0aGVuIHN3YXBfIGEgc3QuayBzdC5sO1xuICAgICAgICAgICAgc3QubCA8LSBzdC5sICsgMVxuICAgICAgICAgICkgZWxzZSBpZiBjbXAgY3VyIHEgPiAwIHRoZW4gKFxuICAgICAgICAgICAgKCogaW5zZXJ0IGluIHJpZ2h0bW9zdCBiYW5kICopXG4gICAgICAgICAgICB3aGlsZSBzdC5rIDwgc3QuZyAmJiBjbXAgKEEuZ2V0IGEgc3QuZykgcSA+IDAgZG9cbiAgICAgICAgICAgICAgc3QuZyA8LSBzdC5nIC0gMVxuICAgICAgICAgICAgZG9uZTtcbiAgICAgICAgICAgIHN3YXBfIGEgc3QuayBzdC5nO1xuICAgICAgICAgICAgc3QuZyA8LSBzdC5nIC0gMTtcbiAgICAgICAgICAgICgqIHRoZSBlbGVtZW50IHN3YXBwZWQgZnJvbSB0aGUgcmlnaHQgbWlnaHQgYmUgaW4gdGhlIGZpcnN0IHNpdHVhdGlvbi5cbiAgICAgICAgICAgICAgIHRoYXQgaXMsIDwgcCAgKHdlIGtub3cgaXQncyA8PSBxIGFscmVhZHkpICopXG4gICAgICAgICAgICBpZiBjbXAgKEEuZ2V0IGEgc3QuaykgcCA8IDAgdGhlbiAoXG4gICAgICAgICAgICAgIGlmIHN0LmsgPD4gc3QubCB0aGVuIHN3YXBfIGEgc3QuayBzdC5sO1xuICAgICAgICAgICAgICBzdC5sIDwtIHN0LmwgKyAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdC5rIDwtIHN0LmsgKyAxXG4gICAgICAgIGRvbmU7XG4gICAgICAgICgqIHNhdmUgdmFsdWVzIGJlZm9yZSByZWN1cnNpbmcgKilcbiAgICAgICAgbGV0IGwgPSBzdC5sIGFuZCBnID0gc3QuZyBhbmQgc29ydF9taWRkbGUgPSBjbXAgcCBxIDwgMCBpblxuICAgICAgICBzb3J0X3NsaWNlXyB+c3QgYSBpIGw7XG4gICAgICAgIGlmIHNvcnRfbWlkZGxlIHRoZW4gc29ydF9zbGljZV8gfnN0IGEgbCAoZyArIDEpO1xuICAgICAgICBzb3J0X3NsaWNlXyB+c3QgYSAoZyArIDEpIGpcbiAgICAgICkgZWxzZVxuICAgICAgICBzb3J0X2luc2VydGlvbiBhIGkgalxuICAgIGluXG4gICAgaWYgQS5sZW5ndGggYSA+IDAgdGhlbiAoXG4gICAgICBsZXQgc3QgPSB7IGwgPSAwOyBnID0gQS5sZW5ndGggYTsgayA9IDAgfSBpblxuICAgICAgc29ydF9zbGljZV8gfnN0IGEgMCAoQS5sZW5ndGggYSlcbiAgICApXG5lbmRcblxubGV0IHNvcnRfZ2VuZXJpYyAodHlwZSBhcnIgZWx0KVxuICAgIChtb2R1bGUgQSA6IE1PTk9fQVJSQVkgd2l0aCB0eXBlIHQgPSBhcnIgYW5kIHR5cGUgZWx0ID0gZWx0KSB+Y21wIGEgPVxuICBsZXQgbW9kdWxlIFMgPSBTb3J0R2VuZXJpYyAoQSkgaW5cbiAgUy5zb3J0IH5jbXAgYVxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPj49ICkgYSBmID0gZmxhdF9tYXAgZiBhXG4gIGxldCAoID4+fCApIGEgZiA9IG1hcCBmIGFcbiAgbGV0ICggPnw9ICkgYSBmID0gbWFwIGYgYVxuICBsZXQgKCAtLSApID0gKCAtLSApXG4gIGxldCAoIC0tXiApID0gKCAtLV4gKVxuXG4gIHR5cGUgJ2EgdCA9ICdhIGFycmF5XG5cbiAgbGV0ICggbGV0KiApID0gKCA+Pj0gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBhMSBhMiA9IG1vbm9pZF9wcm9kdWN0IChmdW4geCB5IC0+IHgsIHkpIGExIGEyXG4gIGxldCAoIGFuZCogKSA9ICggYW5kKyApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuXG5cbnR5cGUgdCA9IGZsb2F0XG5cbnR5cGUgZnBjbGFzcyA9IFN0ZGxpYi5mcGNsYXNzID1cbiAgfCBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPSApXG4gIGxldCAoIDw+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw+IClcbiAgbGV0ICggPCApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8IClcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPD0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD0gKVxuICBsZXQgKCA+PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+PSApXG4gIGxldCAoIH4tICkgOiB0IC0+IHQgPSBTdGRsaWIuKCB+LS4gKVxuICBsZXQgKCArICkgOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi4oICsuIClcbiAgbGV0ICggLSApIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIuKCAtLiApXG4gIGxldCAoICogKSA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLiggKi4gKVxuICBsZXQgKCAvICkgOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi4oIC8uIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbmxldCBuYW4gPSBTdGRsaWIubmFuXG5sZXQgaW5maW5pdHkgPSBTdGRsaWIuaW5maW5pdHlcbmxldCBuZWdfaW5maW5pdHkgPSBTdGRsaWIubmVnX2luZmluaXR5XG5sZXQgbWF4X3ZhbHVlID0gaW5maW5pdHlcbmxldCBtaW5fdmFsdWUgPSBuZWdfaW5maW5pdHlcbmxldCBtYXhfZmluaXRlX3ZhbHVlID0gU3RkbGliLm1heF9mbG9hdFxubGV0IGVwc2lsb24gPSBTdGRsaWIuZXBzaWxvbl9mbG9hdFxubGV0IHBpID0gMHgxLjkyMWZiNTQ0NDJkMThwKzFcbmxldCBpc19uYW4geCA9IFN0ZGxpYi4oY2xhc3NpZnlfZmxvYXQgeCA9IFN0ZGxpYi5GUF9uYW4pXG5sZXQgYWRkID0gKCArLiApXG5sZXQgc3ViID0gKCAtLiApXG5sZXQgbXVsID0gKCAqLiApXG5sZXQgZGl2ID0gKCAvLiApXG5sZXQgbmVnID0gKCB+LS4gKVxubGV0IGFicyA9IFN0ZGxpYi5hYnNfZmxvYXRcbmxldCBzY2FsZSA9ICggKi4gKVxuXG5sZXQgbWluICh4IDogdCkgeSA9XG4gIG1hdGNoIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB4LCBTdGRsaWIuY2xhc3NpZnlfZmxvYXQgeSB3aXRoXG4gIHwgRlBfbmFuLCBfIC0+IHlcbiAgfCBfLCBGUF9uYW4gLT4geFxuICB8IF8gLT5cbiAgICBpZiB4IDwgeSB0aGVuXG4gICAgICB4XG4gICAgZWxzZVxuICAgICAgeVxuXG5sZXQgbWF4ICh4IDogdCkgeSA9XG4gIG1hdGNoIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB4LCBTdGRsaWIuY2xhc3NpZnlfZmxvYXQgeSB3aXRoXG4gIHwgRlBfbmFuLCBfIC0+IHlcbiAgfCBfLCBGUF9uYW4gLT4geFxuICB8IF8gLT5cbiAgICBpZiB4ID4geSB0aGVuXG4gICAgICB4XG4gICAgZWxzZVxuICAgICAgeVxuXG5sZXQgZXF1YWwgKGEgOiBmbG9hdCkgYiA9IGEgPSBiXG5sZXQgaGFzaCA6IHQgLT4gaW50ID0gSGFzaHRibC5oYXNoXG5sZXQgY29tcGFyZSAoYSA6IGZsb2F0KSBiID0gU3RkbGliLmNvbXBhcmUgYSBiXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHBwID0gRm9ybWF0LnBwX3ByaW50X2Zsb2F0XG5cbmxldCBmc2lnbiBhID1cbiAgaWYgaXNfbmFuIGEgdGhlblxuICAgIG5hblxuICBlbHNlIGlmIGEgPSAwLiB0aGVuXG4gICAgYVxuICBlbHNlXG4gICAgU3RkbGliLmNvcHlzaWduIDEuIGFcblxuZXhjZXB0aW9uIFRyYXBOYU4gb2Ygc3RyaW5nXG5cbmxldCBzaWduX2V4biAoYSA6IGZsb2F0KSA9XG4gIGlmIGlzX25hbiBhIHRoZW5cbiAgICByYWlzZSAoVHJhcE5hTiBcInNpZ25fZXhuXCIpXG4gIGVsc2VcbiAgICBjb21wYXJlIGEgMC5cblxubGV0IHJvdW5kIHggPVxuICBsZXQgbG93ID0gZmxvb3IgeCBpblxuICBsZXQgaGlnaCA9IGNlaWwgeCBpblxuICBpZiB4IC0uIGxvdyA+IGhpZ2ggLS4geCB0aGVuXG4gICAgaGlnaFxuICBlbHNlXG4gICAgbG93XG5cbmxldCB0b19pbnQgKGEgOiBmbG9hdCkgPSBTdGRsaWIuaW50X29mX2Zsb2F0IGFcbmxldCBvZl9pbnQgKGEgOiBpbnQpID0gU3RkbGliLmZsb2F0X29mX2ludCBhXG5sZXQgdG9fc3RyaW5nIChhIDogZmxvYXQpID0gU3RkbGliLnN0cmluZ19vZl9mbG9hdCBhXG5sZXQgb2Zfc3RyaW5nX2V4biAoYSA6IHN0cmluZykgPSBTdGRsaWIuZmxvYXRfb2Zfc3RyaW5nIGFcblxubGV0IG9mX3N0cmluZ19vcHQgKGEgOiBzdHJpbmcpID1cbiAgdHJ5IFNvbWUgKFN0ZGxpYi5mbG9hdF9vZl9zdHJpbmcgYSkgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgcmFuZG9tIG4gc3QgPSBSYW5kb20uU3RhdGUuZmxvYXQgc3QgblxubGV0IHJhbmRvbV9zbWFsbCA9IHJhbmRvbSAxMDAuMFxubGV0IHJhbmRvbV9yYW5nZSBpIGogc3QgPSBpICsuIHJhbmRvbSAoaiAtLiBpKSBzdFxubGV0IGVxdWFsX3ByZWNpc2lvbiB+ZXBzaWxvbiBhIGIgPSBhYnNfZmxvYXQgKGEgLS4gYikgPCBlcHNpbG9uXG5sZXQgY2xhc3NpZnkgPSBTdGRsaWIuY2xhc3NpZnlfZmxvYXRcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBFeHRlbnNpb24gdG8gdGhlIHN0YW5kYXJkIEhhc2h0Ymx9ICAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBlcSA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2EgaGFzaCA9ICdhIC0+IGludFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBQb2x5bW9ycGhpYyB0YWJsZXN9ICopXG5cbm1vZHVsZSBQb2x5ID0gc3RydWN0XG4gIGxldCBnZXQgdGJsIHggPSB0cnkgU29tZSAoSGFzaHRibC5maW5kIHRibCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBnZXRfb3IgdGJsIHggfmRlZmF1bHQgPSB0cnkgSGFzaHRibC5maW5kIHRibCB4IHdpdGggTm90X2ZvdW5kIC0+IGRlZmF1bHRcbiAgbGV0IGtleXMgdGJsIGsgPSBIYXNodGJsLml0ZXIgKGZ1biBrZXkgXyAtPiBrIGtleSkgdGJsXG4gIGxldCB2YWx1ZXMgdGJsIGsgPSBIYXNodGJsLml0ZXIgKGZ1biBfIHYgLT4gayB2KSB0YmxcbiAgbGV0IGtleXNfbGlzdCB0YmwgPSBIYXNodGJsLmZvbGQgKGZ1biBrIF8gYSAtPiBrIDo6IGEpIHRibCBbXVxuICBsZXQgdmFsdWVzX2xpc3QgdGJsID0gSGFzaHRibC5mb2xkIChmdW4gXyB2IGEgLT4gdiA6OiBhKSB0YmwgW11cblxuICBsZXQgYWRkX2xpc3QgdGJsIGsgdiA9XG4gICAgbGV0IGwgPSB0cnkgSGFzaHRibC5maW5kIHRibCBrIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgSGFzaHRibC5yZXBsYWNlIHRibCBrICh2IDo6IGwpXG5cbiAgbGV0IGluY3IgPyhieSA9IDEpIHRibCB4ID1cbiAgICBsZXQgbiA9IGdldF9vciB0YmwgeCB+ZGVmYXVsdDowIGluXG4gICAgaWYgbiArIGJ5IDw9IDAgdGhlblxuICAgICAgSGFzaHRibC5yZW1vdmUgdGJsIHhcbiAgICBlbHNlXG4gICAgICBIYXNodGJsLnJlcGxhY2UgdGJsIHggKG4gKyBieSlcblxuICBsZXQgZGVjciA/KGJ5ID0gMSkgdGJsIHggPVxuICAgIHRyeVxuICAgICAgbGV0IG4gPSBIYXNodGJsLmZpbmQgdGJsIHggaW5cbiAgICAgIGlmIG4gLSBieSA8PSAwIHRoZW5cbiAgICAgICAgSGFzaHRibC5yZW1vdmUgdGJsIHhcbiAgICAgIGVsc2VcbiAgICAgICAgSGFzaHRibC5yZXBsYWNlIHRibCB4IChuIC0gYnkpXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gKClcblxuICBsZXQgbWFwX2xpc3QgZiBoID0gSGFzaHRibC5mb2xkIChmdW4geCB5IGFjYyAtPiBmIHggeSA6OiBhY2MpIGggW11cbiAgbGV0IHRvX2l0ZXIgdGJsIGsgPSBIYXNodGJsLml0ZXIgKGZ1biBrZXkgdiAtPiBrIChrZXksIHYpKSB0YmxcbiAgbGV0IGFkZF9pdGVyIHRibCBpID0gaSAoZnVuIChrLCB2KSAtPiBIYXNodGJsLmFkZCB0YmwgayB2KVxuXG4gIGxldCBhZGRfaXRlcl93aXRoIH5mIHRibCBpID1cbiAgICBpIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBIYXNodGJsLmFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG5cbiAgbGV0IGFkZF9zZXEgdGJsIHNlcSA9IFNlcS5pdGVyIChmdW4gKGssIHYpIC0+IEhhc2h0YmwuYWRkIHRibCBrIHYpIHNlcVxuXG4gIGxldCBhZGRfc2VxX3dpdGggfmYgdGJsIHNlcSA9XG4gICAgU2VxLml0ZXJcbiAgICAgIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBIYXNodGJsLmFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG4gICAgICBzZXFcblxuICAoKiBoZWxwZXIgZm9yIGJ1aWxkaW5nIGhhc2h0YWJsZXMgYnkgYnVsayBtdXRhdGlvbiAqKVxuICBsZXRbQGlubGluZV0gbWtfdGJsXyBmIHggPVxuICAgIGxldCB0YmwgPSBIYXNodGJsLmNyZWF0ZSAzMiBpblxuICAgIGYgdGJsIHg7XG4gICAgdGJsXG5cbiAgbGV0IG9mX2l0ZXIgaSA9IG1rX3RibF8gYWRkX2l0ZXIgaVxuICBsZXQgb2Zfc2VxIGkgPSBta190YmxfIGFkZF9zZXEgaVxuICBsZXQgb2ZfaXRlcl93aXRoIH5mIGkgPSBta190YmxfIChhZGRfaXRlcl93aXRoIH5mKSBpXG4gIGxldCBvZl9zZXFfd2l0aCB+ZiBpID0gbWtfdGJsXyAoYWRkX3NlcV93aXRoIH5mKSBpXG4gIGxldCBhZGRfaXRlcl9jb3VudCB0YmwgaSA9IGkgKGZ1biBrIC0+IGluY3IgdGJsIGspXG4gIGxldCBhZGRfc2VxX2NvdW50IHRibCBzZXEgPSBTZXEuaXRlciAoZnVuIGsgLT4gaW5jciB0Ymwgaykgc2VxXG4gIGxldCBvZl9pdGVyX2NvdW50IGkgPSBta190YmxfIGFkZF9pdGVyX2NvdW50IGlcbiAgbGV0IG9mX3NlcV9jb3VudCBpID0gbWtfdGJsXyBhZGRfc2VxX2NvdW50IGlcbiAgbGV0IHRvX2xpc3QgdGJsID0gSGFzaHRibC5mb2xkIChmdW4gayB2IGwgLT4gKGssIHYpIDo6IGwpIHRibCBbXVxuXG4gIGxldCBvZl9saXN0IGwgPVxuICAgIGxldCB0YmwgPSBIYXNodGJsLmNyZWF0ZSAzMiBpblxuICAgIExpc3QuaXRlciAoZnVuIChrLCB2KSAtPiBIYXNodGJsLmFkZCB0YmwgayB2KSBsO1xuICAgIHRibFxuXG4gIGxldCBvZl9saXN0X3dpdGggfmYgbCA9XG4gICAgbGV0IHRibCA9IEhhc2h0YmwuY3JlYXRlIDMyIGluXG4gICAgTGlzdC5pdGVyXG4gICAgICAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBIYXNodGJsLmZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gSGFzaHRibC5hZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuICAgICAgbDtcbiAgICB0YmxcblxuICBsZXQgdXBkYXRlIHRibCB+ZiB+ayA9XG4gICAgbGV0IHYgPSBnZXQgdGJsIGsgaW5cbiAgICBtYXRjaCB2LCBmIGsgdiB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+ICgpXG4gICAgfCBOb25lLCBTb21lIHYnIC0+IEhhc2h0YmwuYWRkIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIFNvbWUgdicgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIE5vbmUgLT4gSGFzaHRibC5yZW1vdmUgdGJsIGtcblxuICBsZXQgZ2V0X29yX2FkZCB0YmwgfmYgfmsgPVxuICAgIHRyeSBIYXNodGJsLmZpbmQgdGJsIGtcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IHYgPSBmIGsgaW5cbiAgICAgIEhhc2h0YmwuYWRkIHRibCBrIHY7XG4gICAgICB2XG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpXG4gICAgICA/KHBwX2Fycm93ID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAIC0+IFwiKSBwcF9rIHBwX3YgZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIEhhc2h0YmwuaXRlclxuICAgICAgKGZ1biBrIHYgLT5cbiAgICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcHBfc2VwIGZtdCAoKTtcbiAgICAgICAgcHBfayBmbXQgaztcbiAgICAgICAgcHBfYXJyb3cgZm10ICgpO1xuICAgICAgICBwcF92IGZtdCB2KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG5cbmluY2x1ZGUgUG9seVxuXG4oKiogezIgRnVuY3Rvcn0gKilcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICBpbmNsdWRlIEhhc2h0YmwuU1xuXG4gIHZhbCBnZXQgOiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgKCoqIFtnZXQgdGJsIGtdIGZpbmRzIGEgYmluZGluZyBmb3IgdGhlIGtleSBba10gaWYgcHJlc2VudCxcbiAgICAgIG9yIHJldHVybnMgW05vbmVdIGlmIG5vIHZhbHVlIGlzIGZvdW5kLlxuICAgICAgU2FmZSB2ZXJzaW9uIG9mIHshSGFzaHRibC5maW5kfS4gKilcblxuICB2YWwgZ2V0X29yIDogJ2EgdCAtPiBrZXkgLT4gZGVmYXVsdDonYSAtPiAnYVxuICAoKiogW2dldF9vciB0YmwgayB+ZGVmYXVsdF0gcmV0dXJucyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byBba10gaWYgcHJlc2VudCxcbiAgICAgIGFuZCByZXR1cm5zIFtkZWZhdWx0XSBvdGhlcndpc2UgKGlmIFtrXSBkb2Vzbid0IGJlbG9uZyBpbiBbdGJsXSkuXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBhZGRfbGlzdCA6ICdhIGxpc3QgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAoKiogW2FkZF9saXN0IHRibCB4IHldIGFkZHMgW3ldIHRvIHRoZSBsaXN0IFt4XSBpcyBib3VuZCB0by4gSWYgW3hdIGlzXG4gICAgICBub3QgYm91bmQsIGl0IGJlY29tZXMgYm91bmQgdG8gW3ldLlxuICAgICAgQHNpbmNlIDAuMTYgKilcblxuICB2YWwgaW5jciA6ID9ieTppbnQgLT4gaW50IHQgLT4ga2V5IC0+IHVuaXRcbiAgKCoqIFtpbmNyID9ieSB0YmwgeF0gaW5jcmVtZW50cyBvciBpbml0aWFsaXplcyB0aGUgY291bnRlciBhc3NvY2lhdGVkIHdpdGggW3hdLlxuICAgICAgSWYgW2dldCB0YmwgeCA9IE5vbmVdLCB0aGVuIGFmdGVyIHVwZGF0ZSwgW2dldCB0YmwgeCA9IFNvbWUgMV07XG4gICAgICBvdGhlcndpc2UsIGlmIFtnZXQgdGJsIHggPSBTb21lIG5dLCBub3cgW2dldCB0YmwgeCA9IFNvbWUgKG4rMSldLlxuICAgICAgQHBhcmFtIGJ5IGlmIHNwZWNpZmllZCwgdGhlIGludCB2YWx1ZSBpcyBpbmNyZW1lbnRlZCBieSBbYnldIHJhdGhlciB0aGFuIDEuXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBkZWNyIDogP2J5OmludCAtPiBpbnQgdCAtPiBrZXkgLT4gdW5pdFxuICAoKiogW2RlY3IgP2J5IHRibCB4XSBpcyBsaWtlIHshaW5jcn0gYnV0IHN1YnRyYWN0IDEgKG9yIHRoZSB2YWx1ZSBvZiBbYnldKS5cbiAgICAgIElmIHRoZSB2YWx1ZSByZWFjaGVzIDAsIHRoZSBrZXkgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0YWJsZS5cbiAgICAgIFRoaXMgZG9lcyBub3RoaW5nIGlmIHRoZSBrZXkgaXMgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdGFibGUuXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBrZXlzIDogJ2EgdCAtPiBrZXkgaXRlclxuICAoKiogIFtrZXlzIHRibCBmXSBpdGVyYXRlcyBvbiBrZXlzIChzaW1pbGFyIG9yZGVyIGFzIHshSGFzaHRibC5pdGVyfSkuICopXG5cbiAgdmFsIHZhbHVlcyA6ICdhIHQgLT4gJ2EgaXRlclxuICAoKiogIFt2YWx1ZXMgdGJsIGZdIGl0ZXJhdGVzIG9uIHZhbHVlcyBpbiB0aGUgdGFibGUuICopXG5cbiAgdmFsIGtleXNfbGlzdCA6IF8gdCAtPiBrZXkgbGlzdFxuICAoKiogW2tleXNfbGlzdCB0YmxdIGlzIHRoZSBsaXN0IG9mIGtleXMgaW4gW3RibF0uXG4gICAgICBJZiB0aGUga2V5IGlzIGluIHRoZSBIYXNodGFibGUgbXVsdGlwbGUgdGltZXMsIGFsbCBvY2N1cnJlbmNlcyB3aWxsIGJlIHJldHVybmVkLlxuICAgICAgQHNpbmNlIDAuOCAqKVxuXG4gIHZhbCB2YWx1ZXNfbGlzdCA6ICdhIHQgLT4gJ2EgbGlzdFxuICAoKiogW3ZhbHVlc19saXN0IHRdIGlzIHRoZSBsaXN0IG9mIHZhbHVlcyBpbiBbdF0uXG4gICAgICBAc2luY2UgMC44ICopXG5cbiAgdmFsIG1hcF9saXN0IDogKGtleSAtPiAnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiBsaXN0XG4gICgqKiBNYXAgb24gYSBoYXNodGFibGUncyBpdGVtcywgY29sbGVjdCBpbnRvIGEgbGlzdC4gKilcblxuICB2YWwgdG9faXRlciA6ICdhIHQgLT4gKGtleSAqICdhKSBpdGVyXG4gICgqKiBJdGVyYXRlIG9uIGJpbmRpbmdzIGluIHRoZSB0YWJsZS5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2l0ZXIgOiAnYSB0IC0+IChrZXkgKiAnYSkgaXRlciAtPiB1bml0XG4gICgqKiBBZGQgdGhlIGNvcnJlc3BvbmRpbmcgcGFpcnMgdG8gdGhlIHRhYmxlLCB1c2luZyB7IUhhc2h0YmwuYWRkfS5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2l0ZXJfd2l0aCA6XG4gICAgZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgaXRlciAtPiB1bml0XG4gICgqKiBBZGQgdGhlIGNvcnJlc3BvbmRpbmcgcGFpcnMgdG8gdGhlIHRhYmxlLCB1c2luZyB7IUhhc2h0YmwuYWRkfS5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAoKiogQWRkIHRoZSBjb3JyZXNwb25kaW5nIHBhaXJzIHRvIHRoZSB0YWJsZSwgdXNpbmcgeyFIYXNodGJsLmFkZH0uXG4gICAgICBSZW5hbWVkIGZyb20gW2FkZF9zdGRfc2VxXSBzaW5jZSAzLjAuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIGFkZF9zZXFfd2l0aCA6XG4gICAgZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAoKiogQWRkIHRoZSBjb3JyZXNwb25kaW5nIHBhaXJzIHRvIHRoZSB0YWJsZSwgdXNpbmcgeyFIYXNodGJsLmFkZH0uXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCBvZl9pdGVyIDogKGtleSAqICdhKSBpdGVyIC0+ICdhIHRcbiAgKCoqIEZyb20gdGhlIGdpdmVuIGJpbmRpbmdzLCBhZGRlZCBpbiBvcmRlci5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgb2ZfaXRlcl93aXRoIDogZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAoa2V5ICogJ2EpIGl0ZXIgLT4gJ2EgdFxuICAoKiogRnJvbSB0aGUgZ2l2ZW4gYmluZGluZ3MsIGFkZGVkIGluIG9yZGVyLlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gICgqKiBGcm9tIHRoZSBnaXZlbiBiaW5kaW5ncywgYWRkZWQgaW4gb3JkZXIuXG4gICAgICBSZW5hbWVkIGZyb20gW29mX3N0ZF9zZXFdIHNpbmNlIDMuMC5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgb2Zfc2VxX3dpdGggOiBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICAoKiogRnJvbSB0aGUgZ2l2ZW4gYmluZGluZ3MsIGFkZGVkIGluIG9yZGVyLlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgYWRkX2l0ZXJfY291bnQgOiBpbnQgdCAtPiBrZXkgaXRlciAtPiB1bml0XG4gICgqKiBbYWRkX2l0ZXJfY291bnQgdGJsIGldIGluY3JlbWVudHMgdGhlIGNvdW50IG9mIGVhY2ggZWxlbWVudCBvZiBbaV1cbiAgICAgIGJ5IGNhbGxpbmcgeyFpbmNyfS4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvdW50aW5nIGhvdyBtYW55IHRpbWVzIGVhY2hcbiAgICAgIGVsZW1lbnQgb2YgW2ldIG9jY3Vycy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX3NlcV9jb3VudCA6IGludCB0IC0+IGtleSBTZXEudCAtPiB1bml0XG4gICgqKiBbYWRkX3NlcV9jb3VudCB0Ymwgc2VxXSBpbmNyZW1lbnRzIHRoZSBjb3VudCBvZiBlYWNoIGVsZW1lbnQgb2YgW3NlcV1cbiAgICAgIGJ5IGNhbGxpbmcgeyFpbmNyfS4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvdW50aW5nIGhvdyBtYW55IHRpbWVzIGVhY2hcbiAgICAgIGVsZW1lbnQgb2YgW3NlcV0gb2NjdXJzLlxuICAgICAgUmVuYW1lZCBmcm9tIFtvZl9zdGRfc2VxX2NvdW50XSBzaW5jZSAzLjAuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIG9mX2l0ZXJfY291bnQgOiBrZXkgaXRlciAtPiBpbnQgdFxuICAoKiogTGlrZSB7IWFkZF9zZXFfY291bnR9LCBidXQgYWxsb2NhdGVzIGEgbmV3IHRhYmxlIGFuZCByZXR1cm5zIGl0LlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBvZl9zZXFfY291bnQgOiBrZXkgU2VxLnQgLT4gaW50IHRcbiAgKCoqIExpa2UgeyFhZGRfc2VxX2NvdW50fSwgYnV0IGFsbG9jYXRlcyBhIG5ldyB0YWJsZSBhbmQgcmV0dXJucyBpdC5cbiAgICAgIFJlbmFtZWQgZnJvbSBbb2Zfc3RkX3NlcV9jb3VudF0gc2luY2UgMy4wLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCB0b19saXN0IDogJ2EgdCAtPiAoa2V5ICogJ2EpIGxpc3RcbiAgKCoqIFt0b19saXN0IHRibF0gcmV0dXJucyB0aGUgbGlzdCBvZiAoa2V5LHZhbHVlKSBiaW5kaW5ncyAob3JkZXIgdW5zcGVjaWZpZWQpLiAqKVxuXG4gIHZhbCBvZl9saXN0IDogKGtleSAqICdhKSBsaXN0IC0+ICdhIHRcbiAgKCoqIFtvZl9saXN0IGxdIGJ1aWxkcyBhIHRhYmxlIGZyb20gdGhlIGdpdmVuIGxpc3QgW2xdIG9mIGJpbmRpbmdzIFtrX2kgLT4gdl9pXSxcbiAgICAgIGFkZGVkIGluIG9yZGVyIHVzaW5nIHshYWRkfS4gSWYgYSBrZXkgb2NjdXJzIHNldmVyYWwgdGltZXMsXG4gICAgICBpdCB3aWxsIGJlIGFkZGVkIHNldmVyYWwgdGltZXMsIGFuZCB0aGUgdmlzaWJsZSBiaW5kaW5nXG4gICAgICB3aWxsIGJlIHRoZSBsYXN0IG9uZS4gKilcblxuICB2YWwgb2ZfbGlzdF93aXRoIDogZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAoa2V5ICogJ2EpIGxpc3QgLT4gJ2EgdFxuICAoKiogW29mX2xpc3QgbF0gYnVpbGRzIGEgdGFibGUgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBbbF0gb2YgYmluZGluZ3MgW2tfaSAtPiB2X2ldLlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgdXBkYXRlIDogJ2EgdCAtPiBmOihrZXkgLT4gJ2Egb3B0aW9uIC0+ICdhIG9wdGlvbikgLT4gazprZXkgLT4gdW5pdFxuICAoKiogW3VwZGF0ZSB0YmwgfmYgfmtdIHVwZGF0ZXMga2V5IFtrXSBieSBjYWxsaW5nIFtmIGsgKFNvbWUgdildIGlmXG4gICAgICBba10gd2FzIG1hcHBlZCB0byBbdl0sIG9yIFtmIGsgTm9uZV0gb3RoZXJ3aXNlOyBpZiB0aGUgY2FsbFxuICAgICAgcmV0dXJucyBbTm9uZV0gdGhlbiBba10gaXMgcmVtb3ZlZC9zdGF5cyByZW1vdmVkLCBpZiB0aGUgY2FsbFxuICAgICAgcmV0dXJucyBbU29tZSB2J10gdGhlbiB0aGUgYmluZGluZyBbayAtPiB2J10gaXMgaW5zZXJ0ZWRcbiAgICAgIHVzaW5nIHshSGFzaHRibC5yZXBsYWNlfS5cbiAgICAgIEBzaW5jZSAwLjE0ICopXG5cbiAgdmFsIGdldF9vcl9hZGQgOiAnYSB0IC0+IGY6KGtleSAtPiAnYSkgLT4gazprZXkgLT4gJ2FcbiAgKCoqIFtnZXRfb3JfYWRkIHRibCB+ayB+Zl0gZmluZHMgYW5kIHJldHVybnMgdGhlIGJpbmRpbmcgb2YgW2tdXG4gICAgICBpbiBbdGJsXSwgaWYgaXQgZXhpc3RzLiBJZiBpdCBkb2VzIG5vdCBleGlzdCwgdGhlbiBbZiBrXVxuICAgICAgaXMgY2FsbGVkIHRvIG9idGFpbiBhIG5ldyBiaW5kaW5nIFt2XTsgW2sgLT4gdl0gaXMgYWRkZWRcbiAgICAgIHRvIFt0YmxdIGFuZCBbdl0gaXMgcmV0dXJuZWQuXG4gICAgICBAc2luY2UgMS4wICopXG5cbiAgdmFsIHBwIDpcbiAgICA/cHBfc3RhcnQ6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3N0b3A6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3NlcDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfYXJyb3c6dW5pdCBwcmludGVyIC0+XG4gICAga2V5IHByaW50ZXIgLT5cbiAgICAnYSBwcmludGVyIC0+XG4gICAgJ2EgdCBwcmludGVyXG4gICgqKiBbcHAgfnBwX3N0YXJ0IH5wcF9zdG9wIH5wcF9zZXAgfnBwIGFycm93IHBwX2sgcHBfdl0gcmV0dXJucyBhIHRhYmxlIHByaW50ZXJcbiAgICAgIGdpdmVuIGEgW3BwX2tdIHByaW50ZXJcbiAgICAgIGZvciBpbmRpdmlkdWFsIGtleSBhbmQgYSBbcHBfdl0gcHJpbnRlciBmb3IgaW5kaXZpZHVhbCB2YWx1ZS5cbiAgICAgIFtwcF9zdGFydF0gYW5kIFtwcF9zdG9wXSBjb250cm9sIHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIGRlbGltaXRlcnMsXG4gICAgICBieSBkZWZhdWx0IHByaW50IG5vdGhpbmcuIFtwcF9zZXBdIGNvbnRyb2wgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIGJpbmRpbmcuXG4gICAgICBbcHBfYXJyb3ddIGNvbnRyb2wgdGhlIGFycm93IGJldHdlZW4gdGhlIGtleSBhbmQgdmFsdWUuXG4gICAgICBSZW5hbWVkIGZyb20gW3ByaW50XSBzaW5jZSAyLjAuXG4gICAgICBAc2luY2UgMC4xMyAqKVxuZW5kXG5cbm1vZHVsZSBNYWtlIChYIDogSGFzaHRibC5IYXNoZWRUeXBlKSA6XG4gIFMgd2l0aCB0eXBlIGtleSA9IFgudCBhbmQgdHlwZSAnYSB0ID0gJ2EgSGFzaHRibC5NYWtlKFgpLnQgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBIYXNodGJsLk1ha2UgKFgpXG5cbiAgbGV0IGdldCB0YmwgeCA9IHRyeSBTb21lIChmaW5kIHRibCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBnZXRfb3IgdGJsIHggfmRlZmF1bHQgPSB0cnkgZmluZCB0YmwgeCB3aXRoIE5vdF9mb3VuZCAtPiBkZWZhdWx0XG5cbiAgbGV0IGluY3IgPyhieSA9IDEpIHRibCB4ID1cbiAgICBsZXQgbiA9IGdldF9vciB0YmwgeCB+ZGVmYXVsdDowIGluXG4gICAgaWYgbiArIGJ5IDw9IDAgdGhlblxuICAgICAgcmVtb3ZlIHRibCB4XG4gICAgZWxzZVxuICAgICAgcmVwbGFjZSB0YmwgeCAobiArIGJ5KVxuXG4gIGxldCBhZGRfbGlzdCB0YmwgayB2ID1cbiAgICBsZXQgbCA9IHRyeSBmaW5kIHRibCBrIHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgcmVwbGFjZSB0YmwgayAodiA6OiBsKVxuXG4gIGxldCBkZWNyID8oYnkgPSAxKSB0YmwgeCA9XG4gICAgdHJ5XG4gICAgICBsZXQgbiA9IGZpbmQgdGJsIHggaW5cbiAgICAgIGlmIG4gLSBieSA8PSAwIHRoZW5cbiAgICAgICAgcmVtb3ZlIHRibCB4XG4gICAgICBlbHNlXG4gICAgICAgIHJlcGxhY2UgdGJsIHggKG4gLSBieSlcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKVxuXG4gIGxldCBrZXlzIHRibCBrID0gaXRlciAoZnVuIGtleSBfIC0+IGsga2V5KSB0YmxcbiAgbGV0IHZhbHVlcyB0YmwgayA9IGl0ZXIgKGZ1biBfIHYgLT4gayB2KSB0YmxcbiAgbGV0IGtleXNfbGlzdCB0YmwgPSBmb2xkIChmdW4gayBfIGEgLT4gayA6OiBhKSB0YmwgW11cbiAgbGV0IHZhbHVlc19saXN0IHRibCA9IGZvbGQgKGZ1biBfIHYgYSAtPiB2IDo6IGEpIHRibCBbXVxuICBsZXQgbWFwX2xpc3QgZiBoID0gZm9sZCAoZnVuIHggeSBhY2MgLT4gZiB4IHkgOjogYWNjKSBoIFtdXG5cbiAgbGV0IHVwZGF0ZSB0YmwgfmYgfmsgPVxuICAgIGxldCB2ID0gZ2V0IHRibCBrIGluXG4gICAgbWF0Y2ggdiwgZiBrIHYgd2l0aFxuICAgIHwgTm9uZSwgTm9uZSAtPiAoKVxuICAgIHwgTm9uZSwgU29tZSB2JyAtPiBhZGQgdGJsIGsgdidcbiAgICB8IFNvbWUgXywgU29tZSB2JyAtPiByZXBsYWNlIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIE5vbmUgLT4gcmVtb3ZlIHRibCBrXG5cbiAgbGV0IGdldF9vcl9hZGQgdGJsIH5mIH5rID1cbiAgICB0cnkgZmluZCB0Ymwga1xuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgdiA9IGYgayBpblxuICAgICAgYWRkIHRibCBrIHY7XG4gICAgICB2XG5cbiAgbGV0IHRvX2l0ZXIgdGJsIGsgPSBpdGVyIChmdW4ga2V5IHYgLT4gayAoa2V5LCB2KSkgdGJsXG4gIGxldCBhZGRfaXRlciB0YmwgaSA9IGkgKGZ1biAoaywgdikgLT4gYWRkIHRibCBrIHYpXG5cbiAgbGV0IGFkZF9pdGVyX3dpdGggfmYgdGJsIGkgPVxuICAgIGkgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBhZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IHJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcblxuICBsZXQgYWRkX3NlcSB0Ymwgc2VxID0gU2VxLml0ZXIgKGZ1biAoaywgdikgLT4gYWRkIHRibCBrIHYpIHNlcVxuXG4gIGxldCBhZGRfc2VxX3dpdGggfmYgdGJsIHNlcSA9XG4gICAgU2VxLml0ZXJcbiAgICAgIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIGZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiByZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG4gICAgICBzZXFcblxuICAoKiBoZWxwZXIgZm9yIGJ1aWxkaW5nIGhhc2h0YWJsZXMgYnkgYnVsayBtdXRhdGlvbiAqKVxuICBsZXRbQGlubGluZV0gbWtfdGJsXyBmIHggPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBmIHRibCB4O1xuICAgIHRibFxuXG4gIGxldCBvZl9pdGVyIGkgPSBta190YmxfIGFkZF9pdGVyIGlcbiAgbGV0IG9mX3NlcSBpID0gbWtfdGJsXyBhZGRfc2VxIGlcbiAgbGV0IG9mX2l0ZXJfd2l0aCB+ZiBpID0gbWtfdGJsXyAoYWRkX2l0ZXJfd2l0aCB+ZikgaVxuICBsZXQgb2Zfc2VxX3dpdGggfmYgaSA9IG1rX3RibF8gKGFkZF9zZXFfd2l0aCB+ZikgaVxuICBsZXQgYWRkX2l0ZXJfY291bnQgdGJsIGkgPSBpIChmdW4gayAtPiBpbmNyIHRibCBrKVxuICBsZXQgYWRkX3NlcV9jb3VudCB0Ymwgc2VxID0gU2VxLml0ZXIgKGZ1biBrIC0+IGluY3IgdGJsIGspIHNlcVxuXG4gIGxldCBvZl9pdGVyX2NvdW50IHNlcSA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIGFkZF9pdGVyX2NvdW50IHRibCBzZXE7XG4gICAgdGJsXG5cbiAgbGV0IG9mX3NlcV9jb3VudCBpID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgYWRkX3NlcV9jb3VudCB0YmwgaTtcbiAgICB0YmxcblxuICBsZXQgdG9fbGlzdCB0YmwgPSBmb2xkIChmdW4gayB2IGwgLT4gKGssIHYpIDo6IGwpIHRibCBbXVxuXG4gIGxldCBvZl9saXN0IGwgPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1biAoaywgdikgLT4gYWRkIHRibCBrIHYpIGw7XG4gICAgdGJsXG5cbiAgbGV0IG9mX2xpc3Rfd2l0aCB+ZiBsID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgTGlzdC5pdGVyXG4gICAgICAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBmaW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gcmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuICAgICAgbDtcbiAgICB0YmxcblxuICBsZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICAgID8ocHBfc2VwID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIilcbiAgICAgID8ocHBfYXJyb3cgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkAgLT4gXCIpIHBwX2sgcHBfdiBmbXQgbSA9XG4gICAgcHBfc3RhcnQgZm10ICgpO1xuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgaXRlclxuICAgICAgKGZ1biBrIHYgLT5cbiAgICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcHBfc2VwIGZtdCAoKTtcbiAgICAgICAgcHBfayBmbXQgaztcbiAgICAgICAgcHBfYXJyb3cgZm10ICgpO1xuICAgICAgICBwcF92IGZtdCB2KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG4iLCIoKiBiYWNrcG9ydCBuZXcgZnVuY3Rpb25zIGZyb20gc3RkbGliIGhlcmUgKilcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gOjogXyAtPiAtMVxuICB8IF8gOjogXywgW10gLT4gMVxuICB8IF8gOjogdGFpbDEsIF8gOjogdGFpbDIgLT4gY29tcGFyZV9sZW5ndGhzIHRhaWwxIHRhaWwyXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhfd2l0aCBsIG4gPVxuICBtYXRjaCBsLCBuIHdpdGhcbiAgfCBfIHdoZW4gbiA8IDAgLT4gMVxuICB8IFtdLCAwIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8gOjogdGFpbCwgXyAtPiBjb21wYXJlX2xlbmd0aF93aXRoIHRhaWwgKG4gLSAxKVxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgKHksIHYpIDo6IF8gd2hlbiBTdGRsaWIuKCA9ICkgeCB5IC0+IFNvbWUgdlxuICB8IF8gOjogdGFpbCAtPiBhc3NvY19vcHQgeCB0YWlsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8ICh5LCB2KSA6OiBfIHdoZW4gU3RkbGliLiggPT0gKSB4IHkgLT4gU29tZSB2XG4gIHwgXyA6OiB0YWlsIC0+IGFzc3Ffb3B0IHggdGFpbFxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG4oKiBlbmQgb2YgYmFja3BvcnQgKilcblxuaW5jbHVkZSBMaXN0XG5cbmxldCBlbXB0eSA9IFtdXG5cbmxldCBpc19lbXB0eSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gdHJ1ZVxuICB8IF8gOjogXyAtPiBmYWxzZVxuXG5sZXQgbWd1YXJkIGMgPVxuICBpZiBjIHRoZW5cbiAgICBbICgpIF1cbiAgZWxzZVxuICAgIFtdXG5cbigqKiBtYXggZGVwdGggZm9yIGRpcmVjdCByZWN1cnNpb24gKilcbmxldCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gPSAxMDAwXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWlsX21hcCBmIGwgPVxuICAoKiBVbndpbmQgdGhlIGxpc3Qgb2YgdHVwbGVzLCByZWNvbnN0cnVjdGluZyB0aGUgZnVsbCBsaXN0IGZyb250LXRvLWJhY2suXG4gICAgIEBwYXJhbSB0YWlsX2FjYyBhIHN1ZmZpeCBvZiB0aGUgZmluYWwgbGlzdDsgd2UgYXBwZW5kIHR1cGxlcycgY29udGVudFxuICAgICBhdCB0aGUgZnJvbnQgb2YgaXQgKilcbiAgbGV0IHJlYyByZWJ1aWxkIHRhaWxfYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHRhaWxfYWNjXG4gICAgfCAoeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgeTYsIHk3LCB5OCkgOjogYnMgLT5cbiAgICAgIHJlYnVpbGRcbiAgICAgICAgKHkwIDo6IHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IHk1IDo6IHk2IDo6IHk3IDo6IHk4IDo6IHRhaWxfYWNjKVxuICAgICAgICBic1xuICBpblxuICAoKiBDcmVhdGUgYSBjb21wcmVzc2VkIHJldmVyc2UtbGlzdCByZXByZXNlbnRhdGlvbiB1c2luZyB0dXBsZXNcbiAgICAgQHBhcmFtIHR1cGxlX2FjYyBhIHJldmVyc2UgbGlzdCBvZiBjaHVua3MgbWFwcGVkIHdpdGggW2ZdICopXG4gIGxldCByZWMgZGl2ZSB0dXBsZV9hY2MgPSBmdW5jdGlvblxuICAgIHwgeDAgOjogeDEgOjogeDIgOjogeDMgOjogeDQgOjogeDUgOjogeDYgOjogeDcgOjogeDggOjogeHMgLT5cbiAgICAgIGxldCB5MCA9IGYgeDAgaW5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIGxldCB5NSA9IGYgeDUgaW5cbiAgICAgIGxldCB5NiA9IGYgeDYgaW5cbiAgICAgIGxldCB5NyA9IGYgeDcgaW5cbiAgICAgIGxldCB5OCA9IGYgeDggaW5cbiAgICAgIGRpdmUgKCh5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCB5NiwgeTcsIHk4KSA6OiB0dXBsZV9hY2MpIHhzXG4gICAgfCB4cyAtPlxuICAgICAgKCogUmV2ZXJzZSBkaXJlY3Rpb24sIGZpbmlzaGluZyBvZmYgd2l0aCBhIGRpcmVjdCBtYXAgKilcbiAgICAgIGxldCB0YWlsID0gTGlzdC5tYXAgZiB4cyBpblxuICAgICAgcmVidWlsZCB0YWlsIHR1cGxlX2FjY1xuICBpblxuICBkaXZlIFtdIGxcblxubGV0IG1hcCBmIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBmIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgWyB4IF0gLT4gWyBmIHggXVxuICAgIHwgWyB4MTsgeDIgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgWyB5MTsgZiB4MiBdXG4gICAgfCBbIHgxOyB4MjsgeDMgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgWyB5MTsgeTI7IGYgeDMgXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHRhaWxfbWFwIGYgbFxuICAgIHwgeDEgOjogeDIgOjogeDMgOjogeDQgOjogbCcgLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IGRpcmVjdCBmIChpIC0gMSkgbCdcbiAgaW5cbiAgZGlyZWN0IGYgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxubGV0IGFwcGVuZCBsMSBsMiA9XG4gIGxldFtAaW5saW5lXSBzYWZlIGwxIGwyID0gTGlzdC5yZXZfYXBwZW5kIChMaXN0LnJldiBsMSkgbDIgaW5cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gbDJcbiAgICB8IFsgeCBdIC0+IHggOjogbDJcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyXG4gICAgfCB4IDo6IHkgOjogdGwxIC0+IHggOjogeSA6OiBkaXJlY3QgKGkgLSAxKSB0bDEgbDJcbiAgaW5cbiAgZGlyZWN0IDEwMDAgbDEgbDJcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogdGwgLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIHggOjogbWFwIGYgdGxcblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgeCA6OiB0bDEgLT4geCA6OiBhcHBlbmQgdGwxIGwyXG5cbltAQEBlbHNlX11cblxuKCogVFJNQyBmdW5jdGlvbnMgb24gPj0gNS4xLCBubyBuZWVkIHRvIGJyaW5nIG91ciBvd24gKilcblxuW0BAQGVuZGlmXVxuXG4oKiBXcmFwcGVyIGFyb3VuZCBbYXBwZW5kXSB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugb2Ygc2hvcnQgW2wxXSxcbiAgIGFuZCBmb3IgdGhlIGNhc2Ugb2YgW2wyID0gW11dIChzYXZlcyB0aGUgd2hvbGUgY29weSBvZiBbbDFdISkgKilcbmxldFtAaW5saW5lXSBhcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBfIC0+IGwyXG4gIHwgXywgW10gLT4gbDFcbiAgfCBbIHggXSwgXyAtPiB4IDo6IGwyXG4gIHwgeCA6OiB5IDo6IHRsMSwgXyAtPiB4IDo6IHkgOjogYXBwZW5kIHRsMSBsMlxuXG5sZXQgKCBAICkgPSBhcHBlbmRcbmxldFtAaW5saW5lXSBjb25zJyBsIHggPSB4IDo6IGxcblxubGV0IGNvbnNfbWF5YmUgbyBsID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgU29tZSB4IC0+IHggOjogbFxuICB8IE5vbmUgLT4gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgZGlyZWN0X2RlcHRoX2ZpbHRlcl8gPSAxMF8wMDBcblxubGV0IGZpbHRlciBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBsIFtdXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IGRpcmVjdCBpIHAgbCdcbiAgICB8IHggOjogbCcgLT4geCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gIGFuZCBzYWZlIHAgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IHNhZmUgcCBsJyBhY2NcbiAgICB8IHggOjogbCcgLT4gc2FmZSBwIGwnICh4IDo6IGFjYylcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9maWx0ZXJfIHAgbFxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgZmlsdGVyIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCBrZWVwID0gZiB4IGluXG4gICAgaWYga2VlcCB0aGVuXG4gICAgICB4IDo6IGZpbHRlciBmIHRsXG4gICAgZWxzZVxuICAgICAgZmlsdGVyIGYgdGxcblxuW0BAQGVsc2VfXVxuKCogc3RkbGliJ3MgZmlsdGVyIHVzZXMgVFJNQyBhZnRlciA1LjEgKilcblxuW0BAQGVuZGlmXVxuXG5sZXQgZm9sZF9yaWdodCBmIGwgYWNjID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgZiAoTGlzdC5yZXYgbCkgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZGlyZWN0IChpIC0gMSkgZiBsJyBhY2MgaW5cbiAgICAgIGYgeCBhY2NcbiAgYW5kIHNhZmUgZiBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIHggYWNjIGluXG4gICAgICBzYWZlIGYgbCcgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gZiBsIGFjY1xuXG5sZXQgcmVjIGZvbGRfd2hpbGUgZiBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGUgOjogbCAtPlxuICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBlIGluXG4gICAgKG1hdGNoIGNvbnQgd2l0aFxuICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZSBmIGFjYyBsKVxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5sZXQgZm9sZF9vbl9tYXAgfmYgfnJlZHVjZSBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IHJlZHVjZSBhY2MgKGYgeCkgaW5cbiAgICAgIGF1eCBhY2MgbCdcbiAgaW5cbiAgYXV4IGFjYyBsXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGxfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbF9hY2NcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIHggaW5cbiAgICAgIGxldCBsX2FjYyA9IGFjYyA6OiBsX2FjYyBpblxuICAgICAgYXV4IGYgYWNjIGxfYWNjIHRhaWxcbiAgaW5cbiAgYXV4IGYgYWNjIFsgYWNjIF0gbFxuXG5sZXQgcmVkdWNlIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gU29tZSAoZm9sZF9sZWZ0IGYgeCBsKVxuXG5sZXQgcmVkdWNlX2V4biBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDTGlzdC5yZWR1Y2VfZXhuXCIpXG4gIHwgeCA6OiBsIC0+IGZvbGRfbGVmdCBmIHggbFxuXG5sZXQgZm9sZF9tYXAyIGYgYWNjIGwxIGwyID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJmb2xkX21hcDJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4MSB4MiBpblxuICAgICAgYXV4IGYgYWNjICh5IDo6IG1hcF9hY2MpIGwxJyBsMidcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGwxIGwyXG5cbmxldCBmb2xkX2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9maWx0ZXJfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbmxldCBmb2xkX2ZsYXRfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9mbGF0X21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbigqIGtlZXAgdGhpcyBiZWNhdXNlIGl0J3MgdGFpbHJlYyBmb3IgPCA1LjEgKilcbmxldCBpbml0IGxlbiBmID1cbiAgbGV0IHJlYyBpbmRpcmVjdF8gaSBhY2MgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgaW5kaXJlY3RfIChpICsgMSkgKHggOjogYWNjKVxuICAgIClcbiAgaW5cbiAgbGV0IHJlYyBkaXJlY3RfIGkgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIGlmIGkgPCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gdGhlbiAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgeCA6OiBkaXJlY3RfIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGluZGlyZWN0XyBpIFtdXG4gIGluXG4gIGlmIGxlbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiaW5pdFwiXG4gIGVsc2UgaWYgbGVuID0gMCB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIGRpcmVjdF8gMFxuXG5sZXQgcmVjIHVuZm9sZF9rb250IGYgc2VlZCBrID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IGsgW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPlxuICAgIGxldCBrJyB0bCA9IGsgKHYgOjogdGwpIGluXG4gICAgdW5mb2xkX2tvbnQgZiBuZXh0IGsnXG5cbmxldFtAaW5saW5lXSB1bmZvbGQgZiBzZWVkID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIHNlZWQgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHVuZm9sZF9rb250IGYgc2VlZCAoZnVuIHggLT4geClcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGYgc2VlZCB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiBkaXJlY3QgKGkgLSAxKSBmIG5leHRcbiAgICApXG4gIGluXG4gIGRpcmVjdCAxMDAgZiBzZWVkXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBpbml0XyBpIG4gZiA9XG4gICAgaWYgaSA9IG4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICB4IDo6IGluaXRfIChpICsgMSkgbiBmXG4gICAgKVxuICBpblxuICBpbml0XyAwIG4gZlxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB1bmZvbGQgZiBzZWVkID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiB1bmZvbGQgZiBuZXh0XG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdW5mb2xkIGYgc2VlZCA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogdW5mb2xkIGYgbmV4dFxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgY29tcGFyZSBmIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IF8sIFtdIC0+IDFcbiAgfCBbXSwgXyAtPiAtMVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgbGV0IGMgPSBmIHgxIHgyIGluXG4gICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgIGNcbiAgICBlbHNlXG4gICAgICBjb21wYXJlIGYgbDEnIGwyJ1xuXG5sZXQgcmVjIGVxdWFsIGYgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF8gfCBfLCBbXSAtPiBmYWxzZVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+IGYgeDEgeDIgJiYgZXF1YWwgZiBsMScgbDInXG5cbltAQEBpZmx0IDUuMV1cblxubGV0IHJlYyBmbGF0X21hcF9rb250IGYgbCBrb250ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4ga29udCBbXVxuICB8IFsgeCBdIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBrb250IHhcbiAgfCB4IDo6IGwnIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBsZXQga29udCcgdGFpbCA9IGtvbnQgKGFwcGVuZCB4IHRhaWwpIGluXG4gICAgZmxhdF9tYXBfa29udCBmIGwnIGtvbnQnXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IFsgeCBdIC0+IGYgeFxuICB8IF8gOjogXyAtPiBmbGF0X21hcF9rb250IGYgbCBGdW4uaWRcblxuW0BAQGVsc2VfXVxuXG5sZXQgZmxhdF9tYXAgPSBjb25jYXRfbWFwXG5cbltAQEBlbmRpZl1cblxubGV0IGZsYXRfbWFwX2kgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpIGwga29udCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBrb250IFtdXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgeSA9IGYgaSB4IGluXG4gICAgICBsZXQga29udCcgdGFpbCA9XG4gICAgICAgIG1hdGNoIHkgd2l0aFxuICAgICAgICB8IFtdIC0+IGtvbnQgdGFpbFxuICAgICAgICB8IFsgeCBdIC0+IGtvbnQgKHggOjogdGFpbClcbiAgICAgICAgfCBbIHg7IHkgXSAtPiBrb250ICh4IDo6IHkgOjogdGFpbClcbiAgICAgICAgfCBsIC0+IGtvbnQgKGFwcGVuZCBsIHRhaWwpXG4gICAgICBpblxuICAgICAgYXV4IGYgKGkgKyAxKSBsJyBrb250J1xuICBpblxuICBhdXggZiAwIGwgKGZ1biBsIC0+IGwpXG5cbmxldCBmbGF0dGVuIGwgPSBmb2xkX3JpZ2h0IGFwcGVuZCBsIFtdXG5cbmxldCBjb3VudCBmIGwgPVxuICBmb2xkX2xlZnRcbiAgICAoZnVuIG4geCAtPlxuICAgICAgaWYgZiB4IHRoZW5cbiAgICAgICAgc3VjYyBuXG4gICAgICBlbHNlXG4gICAgICAgIG4pXG4gICAgMCBsXG5cbmxldCBjb3VudF90cnVlX2ZhbHNlIHAgbCA9XG4gIGZvbGRfbGVmdFxuICAgIChmdW4gKG9rLCBrbykgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgb2sgKyAxLCBrb1xuICAgICAgZWxzZVxuICAgICAgICBvaywga28gKyAxKVxuICAgICgwLCAwKSBsXG5cbmxldFtAaW5saW5lXSBwcm9kdWN0IGYgbDEgbDIgPSBmbGF0X21hcCAoZnVuIHggLT4gbWFwIChmdW4geSAtPiBmIHggeSkgbDIpIGwxXG5cbmxldCBmb2xkX3Byb2R1Y3QgZiBhY2MgbDEgbDIgPVxuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gYWNjIHgxIC0+IExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHgyIC0+IGYgYWNjIHgxIHgyKSBhY2MgbDIpXG4gICAgYWNjIGwxXG5cbmxldCBkaWFnb25hbCBsID1cbiAgbGV0IHJlYyBnZW4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeSAtPiAoeCwgeSkgOjogYWNjKSBhY2MgbCcgaW5cbiAgICAgIGdlbiBhY2MgbCdcbiAgaW5cbiAgZ2VuIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXBfZWl0aGVyIGYgbCA9XG4gIGxldCByZWMgaXRlciBmIGwxIGwyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbDEsIExpc3QucmV2IGwyXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgQ0NFaXRoZXIuTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgQ0NFaXRoZXIuUmlnaHQgeSAtPiBpdGVyIGYgbDEgKHkgOjogbDIpIHRsKVxuICBpblxuICBpdGVyIGYgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX2ZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyBpdGVyIGYgbDEgbDIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsMSwgTGlzdC5yZXYgbDJcbiAgICB8IHggOjogdGwgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBgTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgYFJpZ2h0IHkgLT4gaXRlciBmIGwxICh5IDo6IGwyKSB0bFxuICAgICAgfCBgRHJvcCAtPiBpdGVyIGYgbDEgbDIgdGwpXG4gIGluXG4gIGl0ZXIgZiBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwID0gcGFydGl0aW9uX2ZpbHRlcl9tYXBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGNvbWJpbmUgbDEgbDIgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcbiAgYW5kIHNhZmUgbDEgbDIgYWNjID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gc2FmZSBsMScgbDInIEBAICgoeDEsIHgyKSA6OiBhY2MpXG4gICAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGwxIGwyXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IFtdXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogY29tYmluZSBsMScgbDInXG4gIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcblxuW0BAQGVuZGlmXVxuXG5sZXQgY29tYmluZV9nZW4gbDEgbDIgPVxuICBsZXQgbDEgPSByZWYgbDEgaW5cbiAgbGV0IGwyID0gcmVmIGwyIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICFsMSwgIWwyIHdpdGhcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gTm9uZVxuICAgIHwgeDEgOjogdGFpbDEsIHgyIDo6IHRhaWwyIC0+XG4gICAgICBsMSA6PSB0YWlsMTtcbiAgICAgIGwyIDo9IHRhaWwyO1xuICAgICAgU29tZSAoeDEsIHgyKVxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgY29tYmluZV9zaG9ydGVzdCBsMSBsMiA9XG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBfLCBbXSB8IFtdLCBfIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICBhbmQgc2FmZSBsMSBsMiBhY2MgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MgPSAoeDEsIHgyKSA6OiBhY2MgaW5cbiAgICAgIHNhZmUgbDEnIGwyJyBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbWJpbmVfc2hvcnRlc3QgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IF8sIFtdIHwgW10sIF8gLT4gW11cbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBjb21iaW5lX3Nob3J0ZXN0IGwxJyBsMidcblxuW0BAQGVuZGlmXVxuXG5sZXQgc3BsaXQgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXSwgW11cbiAgICB8IFsgKHgxLCB5MSkgXSAtPiBbIHgxIF0sIFsgeTEgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5MikgXSAtPiBbIHgxOyB4MiBdLCBbIHkxOyB5MiBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKTsgKHgzLCB5MykgXSAtPiBbIHgxOyB4MjsgeDMgXSwgWyB5MTsgeTI7IHkzIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpOyAoeDMsIHkzKTsgKHg0LCB5NCkgXSAtPlxuICAgICAgWyB4MTsgeDI7IHgzOyB4NCBdLCBbIHkxOyB5MjsgeTM7IHk0IF1cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzcGxpdF9zbG93IFtdIFtdIGxcbiAgICB8ICh4MSwgeTEpIDo6ICh4MiwgeTIpIDo6ICh4MywgeTMpIDo6ICh4NCwgeTQpIDo6ICh4NSwgeTUpIDo6IGwnIC0+XG4gICAgICBsZXQgcngsIHJ5ID0gZGlyZWN0IChpIC0gMSkgbCcgaW5cbiAgICAgIHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IHg1IDo6IHJ4LCB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiB5NSA6OiByeVxuICBhbmQgc3BsaXRfc2xvdyBhY2MxIGFjYzIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MxLCBMaXN0LnJldiBhY2MyXG4gICAgfCAoeDEsIHgyKSA6OiB0YWlsIC0+XG4gICAgICBsZXQgYWNjMSA9IHgxIDo6IGFjYzEgYW5kIGFjYzIgPSB4MiA6OiBhY2MyIGluXG4gICAgICBzcGxpdF9zbG93IGFjYzEgYWNjMiB0YWlsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgcmV0dXJuIHggPSBbIHggXVxubGV0IHB1cmUgPSByZXR1cm5cbmxldCAoIDwqPiApIGZ1bnMgbCA9IHByb2R1Y3QgKGZ1biBmIHggLT4gZiB4KSBmdW5zIGxcblxubGV0IGNhcnRlc2lhbl9wcm9kdWN0IGwgPVxuICAoKiBbbGVmdF06IGVsZW1lbnRzIHBpY2tlZCBzbyBmYXJcbiAgICAgW3JpZ2h0XTogc2V0cyB0byBwaWNrIGVsZW1lbnRzIGZyb21cbiAgICAgW2FjY106IGFjY3VtdWxhdG9yIGZvciB0aGUgcmVzdWx0LCB0byBwYXNzIHRvIGNvbnRpbnVhdGlvblxuICAgICBba106IGNvbnRpbnVhdGlvbiAqKVxuICBsZXQgcmVjIHByb2RfcmVjIGxlZnQgcmlnaHQgayBhY2MgPVxuICAgIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICB8IFtdIC0+IGsgYWNjIChMaXN0LnJldiBsZWZ0KVxuICAgIHwgbDEgOjogdGFpbCAtPlxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBwcm9kX3JlYyAoeCA6OiBsZWZ0KSB0YWlsIGsgYWNjKSBhY2MgbDFcbiAgaW5cbiAgcHJvZF9yZWMgW10gbCAoZnVuIGFjYyBsJyAtPiBsJyA6OiBhY2MpIFtdXG5cbigqIGNhcnRlc2lhbiBwcm9kdWN0IG9mIGxpc3RzIG9mIGxpc3RzICopXG5sZXQgbWFwX3Byb2R1Y3RfbCBmIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGYgbCBpblxuICBjYXJ0ZXNpYW5fcHJvZHVjdCBsXG5cbmxldCByZWMgc29ydGVkX21lbSB+Y21wIHggbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGZhbHNlXG4gIHwgeSA6OiB0YWlsIC0+XG4gICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgIHwgMCAtPiB0cnVlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gZmFsc2VcbiAgICB8IF8gLT4gKHNvcnRlZF9tZW0gW0B0YWlsY2FsbF0pIH5jbXAgeCB0YWlsKVxuXG5sZXQgc29ydGVkX21lcmdlIH5jbXAgbDEgbDIgPVxuICBsZXQgcmVjIHJlY3Vyc2UgY21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDFcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogYWNjKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDIgOjogYWNjKSBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IHgyIDo6IGFjYykgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydGVkX2RpZmYgfmNtcCBsMSBsMiA9XG4gIGxldCByZWMgcmVjdXJzZSBjbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwxXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IGFjYykgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIGNtcCBhY2MgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydF91bmlxIH5jbXAgbCA9IExpc3Quc29ydF91bmlxIGNtcCBsXG5cbmxldCBpc19zb3J0ZWQgfmNtcCBsID1cbiAgbGV0IHJlYyBhdXggY21wID0gZnVuY3Rpb25cbiAgICB8IFtdIHwgWyBfIF0gLT4gdHJ1ZVxuICAgIHwgeCA6OiAoeSA6OiBfIGFzIHRhaWwpIC0+IGNtcCB4IHkgPD0gMCAmJiBhdXggY21wIHRhaWxcbiAgaW5cbiAgYXV4IGNtcCBsXG5cbmxldCBzb3J0ZWRfaW5zZXJ0IH5jbXAgPyh1bmlxID0gZmFsc2UpIHggbCA9XG4gIGxldCByZWMgYXV4IGNtcCB1bmlxIHggbGVmdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0IFsgeCBdXG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBsZXQgbCcgPVxuICAgICAgICAgIGlmIHVuaXEgdGhlblxuICAgICAgICAgICAgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHggOjogbFxuICAgICAgICBpblxuICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCBsJ1xuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgKHggOjogbClcbiAgICAgIHwgXyAtPiBhdXggY21wIHVuaXEgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIHVuaXEgeCBbXSBsXG5cbmxldCBzb3J0ZWRfcmVtb3ZlIH5jbXAgPyhhbGwgPSBmYWxzZSkgeCBsID1cbiAgbGV0IHJlYyBhdXggY21wIGFsbCB4IGxlZnQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsZWZ0XG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBpZiBhbGwgdGhlblxuICAgICAgICAgIGF1eCBjbXAgYWxsIHggbGVmdCB0YWlsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCB0YWlsXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCBsXG4gICAgICB8IF8gLT4gYXV4IGNtcCBhbGwgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIGFsbCB4IFtdIGxcblxubGV0IHVuaXFfc3VjYyB+ZXEgbCA9XG4gIGxldCByZWMgZiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFsgeCBdIC0+IExpc3QucmV2ICh4IDo6IGFjYylcbiAgICB8IHggOjogKHkgOjogXyBhcyB0YWlsKSB3aGVuIGVxIHggeSAtPiBmIGFjYyB0YWlsXG4gICAgfCB4IDo6IHRhaWwgLT4gZiAoeCA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgZiBbXSBsXG5cbmxldCBncm91cF9zdWNjIH5lcSBsID1cbiAgbGV0IHJlYyBmIH5lcSBhY2MgY3VyIGwgPVxuICAgIG1hdGNoIGN1ciwgbCB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIDo6IF8sIFtdIC0+IExpc3QucmV2IChMaXN0LnJldiBjdXIgOjogYWNjKVxuICAgIHwgW10sIHggOjogdGwgLT4gZiB+ZXEgYWNjIFsgeCBdIHRsXG4gICAgfCB5IDo6IF8sIHggOjogdGwgd2hlbiBlcSB4IHkgLT4gZiB+ZXEgYWNjICh4IDo6IGN1cikgdGxcbiAgICB8IF8sIHggOjogdGwgLT4gZiB+ZXEgKExpc3QucmV2IGN1ciA6OiBhY2MpIFsgeCBdIHRsXG4gIGluXG4gIGYgfmVxIFtdIFtdIGxcblxubGV0IHNvcnRlZF9tZXJnZV91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDIpIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICgqIGRyb3Agb25lIG9mIHRoZSBbeF0gKilcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbmxldCBzb3J0ZWRfZGlmZl91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IGFjY1xuICAgIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWtlIG4gbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBuIFtdIGxcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSAobiAtIDEpIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIG4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIHdoZW4gbiA9IDAgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+IHNhZmUgKG4gLSAxKSAoeCA6OiBhY2MpIGwnXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbiBsXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdGFrZSBuIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBuID4gMCB0aGVuXG4gICAgICB4IDo6IHRha2UgKG4gLSAxKSBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wIG4gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgXyB3aGVuIG4gPSAwIC0+IGxcbiAgfCBfIDo6IGwnIC0+IGRyb3AgKG4gLSAxKSBsJ1xuXG5sZXQgaGRfdGwgPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhaWx3aXRoIFwiaGRfdGxcIlxuICB8IHggOjogbCAtPiB4LCBsXG5cbmxldCB0YWtlX2Ryb3AgbiBsID0gdGFrZSBuIGwsIGRyb3AgbiBsXG5cbmxldCBzdWJsaXN0c19vZl9sZW4gPyhsYXN0ID0gZnVuIF8gLT4gTm9uZSkgP29mZnNldCBuIGwgPVxuICBpZiBuIDwgMSB0aGVuIGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBuIG11c3QgYmUgPiAwXCI7XG4gIGxldCBvZmZzZXQgPVxuICAgIG1hdGNoIG9mZnNldCB3aXRoXG4gICAgfCBOb25lIC0+IG5cbiAgICB8IFNvbWUgbyB3aGVuIG8gPCAxIC0+IGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBvZmZzZXQgbXVzdCBiZSA+IDBcIlxuICAgIHwgU29tZSBvIC0+IG9cbiAgaW5cbiAgKCogYWRkIHN1Yi1saXN0cyBvZiBbbF0gdG8gW2FjY10gKilcbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIGxldCBncm91cCA9IHRha2UgbiBsIGluXG4gICAgaWYgaXNfZW1wdHkgZ3JvdXAgdGhlblxuICAgICAgYWNjXG4gICAgKCogdGhpcyB3YXMgdGhlIGxhc3QgZ3JvdXAsIHdlIGFyZSBkb25lICopXG4gICAgZWxzZSBpZiBMaXN0Lmxlbmd0aCBncm91cCA8IG4gKCogbGFzdCBncm91cCwgd2l0aCBtaXNzaW5nIGVsZW1lbnRzICopIHRoZW4gKFxuICAgICAgbWF0Y2ggbGFzdCBncm91cCB3aXRoXG4gICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICB8IFNvbWUgZ3JvdXAnIC0+IGdyb3VwJyA6OiBhY2NcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGwnID0gZHJvcCBvZmZzZXQgbCBpblxuICAgICAgYXV4IChncm91cCA6OiBhY2MpIGwnICgqIGNvbnRpbnVlICopXG4gICAgKVxuICBpblxuICBMaXN0LnJldiAoYXV4IFtdIGwpXG5cbmxldCBjaHVua3MgbiBsID0gc3VibGlzdHNfb2ZfbGVuIH5sYXN0OihmdW4geCAtPiBTb21lIHgpIG4gbFxuXG5sZXQgaW50ZXJzcGVyc2UgeCBsID1cbiAgbGV0IHJlYyBhdXhfZGlyZWN0IGkgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIF8gXSAtPiBsXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gYXV4X3RhaWxyZWMgW10geCBsXG4gICAgfCB5IDo6IHRhaWwgLT4geSA6OiB4IDo6IGF1eF9kaXJlY3QgKGkgLSAxKSB4IHRhaWxcbiAgYW5kIGF1eF90YWlscmVjIGFjYyB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbIHkgXSAtPiBMaXN0LnJldiAoeSA6OiBhY2MpXG4gICAgfCB5IDo6IHRhaWwgLT4gYXV4X3RhaWxyZWMgKHggOjogeSA6OiBhY2MpIHggdGFpbFxuICBpblxuICBhdXhfZGlyZWN0IDFfMDAwIHggbFxuXG5sZXQgaW50ZXJsZWF2ZSBsMSBsMiA6IF8gbGlzdCA9XG4gIGxldCByZWMgYXV4IGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKVxuICAgIHwgXywgW10gLT4gTGlzdC5yZXYgKExpc3QucmV2X2FwcGVuZCBsMSBhY2MpXG4gICAgfCB4MSA6OiB0bDEsIHgyIDo6IHRsMiAtPiBhdXggKHgyIDo6IHgxIDo6IGFjYykgdGwxIHRsMlxuICBpblxuICBhdXggW10gbDEgbDJcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRha2Vfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgW10gbFxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIHAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBzYWZlIHAgKHggOjogYWNjKSBsJ1xuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBwIGxcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB0YWtlX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICB4IDo6IHRha2Vfd2hpbGUgcCBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICBkcm9wX3doaWxlIHAgbCdcbiAgICBlbHNlXG4gICAgICBsXG5cbmxldCB0YWtlX2Ryb3Bfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW10sIFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIFtdIGxcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgaWYgcCB4IHRoZW4gKFxuICAgICAgICBsZXQgbDEsIGwyID0gZGlyZWN0IChpIC0gMSkgcCB0YWlsIGluXG4gICAgICAgIHggOjogbDEsIGwyXG4gICAgICApIGVsc2VcbiAgICAgICAgW10sIGxcbiAgYW5kIHNhZmUgcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MsIFtdXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHNhZmUgcCAoeCA6OiBhY2MpIHRhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjLCBsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gcCBsXG5cbmxldCBsYXN0IG4gbCA9XG4gIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IG4gdGhlblxuICAgIGxcbiAgZWxzZVxuICAgIGRyb3AgKGxlbiAtIG4pIGxcblxubGV0IGhlYWRfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuXG5sZXQgdGFpbF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBfIDo6IHRhaWwgLT4gU29tZSB0YWlsXG5cbmxldCByZWMgbGFzdF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBbIHggXSAtPiBTb21lIHhcbiAgfCBfIDo6IHRhaWwgLT4gbGFzdF9vcHQgdGFpbFxuXG5sZXQgZmluZF9wcmVkID0gZmluZF9vcHRcblxubGV0IGZpbmRfcHJlZF9leG4gcCBsID1cbiAgbWF0Y2ggZmluZF9wcmVkIHAgbCB3aXRoXG4gIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBTb21lIHggLT4geFxuXG5sZXQgZmluZF9tYXBpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiBpIHggd2l0aFxuICAgICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBOb25lIC0+IGF1eCBmIChpICsgMSkgbCcpXG4gIGluXG4gIGF1eCBmIDAgbFxuXG5sZXQgZmluZF9tYXAgZiBsID0gZmluZF9tYXBpIChmdW4gXyAtPiBmKSBsXG5cbmxldCBmaW5kX2lkeCBwIGwgPVxuICBmaW5kX21hcGlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBsXG5cbmxldCByZW1vdmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlJyBlcSB4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeSA6OiB0YWlsIHdoZW4gZXEgeCB5IC0+IHJlbW92ZScgZXEgeCBhY2MgdGFpbFxuICAgIHwgeSA6OiB0YWlsIC0+IHJlbW92ZScgZXEgeCAoeSA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgcmVtb3ZlJyBlcSB4IFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyByZWN1cnNlIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYycgPVxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICAgIHwgU29tZSB5IC0+IHkgOjogYWNjXG4gICAgICBpblxuICAgICAgcmVjdXJzZSBhY2MnIGwnXG4gIGluXG4gIHJlY3Vyc2UgW10gbFxuXG5sZXQga2VlcF9zb21lIGwgPSBmaWx0ZXJfbWFwIChmdW4geCAtPiB4KSBsXG5cbmxldCBrZWVwX29rIGwgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1bmN0aW9uXG4gICAgICB8IE9rIHggLT4gU29tZSB4XG4gICAgICB8IEVycm9yIF8gLT4gTm9uZSlcbiAgICBsXG5cbmxldCBhbGxfc29tZSBsID1cbiAgdHJ5XG4gICAgU29tZVxuICAgICAgKG1hcFxuICAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgIHwgU29tZSB4IC0+IHhcbiAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgYWxsX29rIGwgPVxuICBsZXQgZXJyID0gcmVmIE5vbmUgaW5cbiAgdHJ5XG4gICAgT2tcbiAgICAgIChtYXBcbiAgICAgICAgIChmdW5jdGlvblxuICAgICAgICAgICB8IE9rIHggLT4geFxuICAgICAgICAgICB8IEVycm9yIGUgLT5cbiAgICAgICAgICAgICBlcnIgOj0gU29tZSBlO1xuICAgICAgICAgICAgIHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBlIC0+IEVycm9yIGUpXG5cbmxldCBncm91cF9ieSAodHlwZSBrKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpID8oZXEgPSBTdGRsaWIuKCA9ICkpIGwgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0ga1xuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICAoKiBjb21wdXRlIGdyb3VwIHRhYmxlICopXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGwgPSB0cnkgVGJsLmZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIFRibC5yZXBsYWNlIHRibCB4ICh4IDo6IGwpKVxuICAgIGw7XG4gIFRibC5mb2xkIChmdW4gXyB4IGFjYyAtPiB4IDo6IGFjYykgdGJsIFtdXG5cbmxldCBqb2luIH5qb2luX3JvdyBzMSBzMiA6IF8gdCA9XG4gIGZsYXRfbWFwIChmdW4gYSAtPiBmaWx0ZXJfbWFwIChqb2luX3JvdyBhKSBzMikgczFcblxubGV0IGpvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmMSBmMiB+bWVyZ2UgYzFcbiAgICBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIFRibC5hZGQgdGJsIGtleSB4KVxuICAgIGMxO1xuICBsZXQgcmVzID0gcmVmIFtdIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgbGV0IGtleSA9IGYyIHkgaW5cbiAgICAgIGxldCB4cyA9IFRibC5maW5kX2FsbCB0Ymwga2V5IGluXG4gICAgICBMaXN0Lml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggbWVyZ2Uga2V5IHggeSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHogLT4gcmVzIDo9IHogOjogIXJlcylcbiAgICAgICAgeHMpXG4gICAgYzI7XG4gICFyZXNcblxudHlwZSAoJ2EsICdiKSBqb2luX2FsbF9jZWxsID0ge1xuICBtdXRhYmxlIGphX2xlZnQ6ICdhIGxpc3Q7XG4gIG11dGFibGUgamFfcmlnaHQ6ICdiIGxpc3Q7XG59XG5cbmxldCBqb2luX2FsbF9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYxIGYyXG4gICAgfm1lcmdlIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgKCogYnVpbGQgdGhlIG1hcCBba2V5IC0+IGNlbGxdICopXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYyA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgYy5qYV9sZWZ0IDwtIHggOjogYy5qYV9sZWZ0XG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBUYmwuYWRkIHRibCBrZXkgeyBqYV9sZWZ0ID0gWyB4IF07IGphX3JpZ2h0ID0gW10gfSlcbiAgICBjMTtcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICBsZXQga2V5ID0gZjIgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBjLmphX3JpZ2h0IDwtIHkgOjogYy5qYV9yaWdodFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gVGJsLmFkZCB0Ymwga2V5IHsgamFfbGVmdCA9IFtdOyBqYV9yaWdodCA9IFsgeSBdIH0pXG4gICAgYzI7XG4gIFRibC5mb2xkXG4gICAgKGZ1biBrZXkgY2VsbCByZXMgLT5cbiAgICAgIG1hdGNoIG1lcmdlIGtleSBjZWxsLmphX2xlZnQgY2VsbC5qYV9yaWdodCB3aXRoXG4gICAgICB8IE5vbmUgLT4gcmVzXG4gICAgICB8IFNvbWUgeiAtPiB6IDo6IHJlcylcbiAgICB0YmwgW11cblxubGV0IGdyb3VwX2pvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyIChmdW4geCAtPiBUYmwucmVwbGFjZSB0YmwgeCBbXSkgYzE7XG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgKCogcHJvamVjdCBbeV0gaW50byBzb21lIGVsZW1lbnQgb2YgW2MxXSAqKVxuICAgICAgbGV0IGtleSA9IGYgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBsID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBUYmwucmVwbGFjZSB0Ymwga2V5ICh5IDo6IGwpXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKSlcbiAgICBjMjtcbiAgVGJsLmZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgbGV0IHJlYyBzZWFyY2ggZXEgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhbHNlXG4gICAgfCB5IDo6IGwnIC0+IGVxIHggeSB8fCBzZWFyY2ggZXEgeCBsJ1xuICBpblxuICBzZWFyY2ggZXEgeCBsXG5cbmxldCBhZGRfbm9kdXAgfmVxIHggbCA9XG4gIGlmIG1lbSB+ZXEgeCBsIHRoZW5cbiAgICBsXG4gIGVsc2VcbiAgICB4IDo6IGxcblxubGV0IHJlbW92ZV9vbmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlX29uZSB+ZXEgeCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IHkgOjogdGwgd2hlbiBlcSB4IHkgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyB0bFxuICAgIHwgeSA6OiB0bCAtPiByZW1vdmVfb25lIH5lcSB4ICh5IDo6IGFjYykgdGxcbiAgaW5cbiAgaWYgbWVtIH5lcSB4IGwgdGhlblxuICAgIHJlbW92ZV9vbmUgfmVxIHggW10gbFxuICBlbHNlXG4gICAgbFxuXG5sZXQgc3Vic2V0IH5lcSBsMSBsMiA9IExpc3QuZm9yX2FsbCAoZnVuIHQgLT4gbWVtIH5lcSB0IGwyKSBsMVxuXG5sZXQgdW5pcSB+ZXEgbCA9XG4gIGxldCByZWMgdW5pcSBlcSBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBMaXN0LmV4aXN0cyAoZXEgeCkgeHMgLT4gdW5pcSBlcSBhY2MgeHNcbiAgICB8IHggOjogeHMgLT4gdW5pcSBlcSAoeCA6OiBhY2MpIHhzXG4gIGluXG4gIHVuaXEgZXEgW10gbFxuXG5sZXQgdW5pb24gfmVxIGwxIGwyID1cbiAgbGV0IHJlYyB1bmlvbiBlcSBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gdW5pb24gZXEgYWNjIHhzIGwyXG4gICAgfCB4IDo6IHhzIC0+IHVuaW9uIGVxICh4IDo6IGFjYykgeHMgbDJcbiAgaW5cbiAgdW5pb24gZXEgW10gbDEgbDJcblxubGV0IGludGVyIH5lcSBsMSBsMiA9XG4gIGxldCByZWMgaW50ZXIgZXEgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gaW50ZXIgZXEgKHggOjogYWNjKSB4cyBsMlxuICAgIHwgXyA6OiB4cyAtPiBpbnRlciBlcSBhY2MgeHMgbDJcbiAgaW5cbiAgaW50ZXIgZXEgW10gbDEgbDJcblxubGV0IG1hcGkgZiBsID1cbiAgbGV0IHIgPSByZWYgMCBpblxuICBtYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCB5ID0gZiAhciB4IGluXG4gICAgICBpbmNyIHI7XG4gICAgICB5KVxuICAgIGxcblxubGV0IGl0ZXJpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+ICgpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBmIGkgeDtcbiAgICAgIGF1eCBmIChpICsgMSkgbCdcbiAgaW5cbiAgYXV4IGYgMCBsXG5cbmxldCBpdGVyaTIgZiBsMSBsMiA9XG4gIGxldCByZWMgYXV4IGYgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiAoKVxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcIml0ZXJpMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgZiBpIHgxIHgyO1xuICAgICAgYXV4IGYgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGF1eCBmIDAgbDEgbDJcblxubGV0IGZvbGRpIGYgYWNjIGwgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyBpIHggaW5cbiAgICAgIGZvbGRpIGYgYWNjIChpICsgMSkgbCdcbiAgaW5cbiAgZm9sZGkgZiBhY2MgMCBsXG5cbmxldCBmb2xkaTIgZiBhY2MgbDEgbDIgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gYWNjXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiZm9sZGkyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgaSB4MSB4MiBpblxuICAgICAgZm9sZGkgZiBhY2MgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGZvbGRpIGYgYWNjIDAgbDEgbDJcblxubGV0IHJlYyBnZXRfYXRfaWR4X3JlYyBpIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IF8gd2hlbiBpID0gMCAtPiB4XG4gIHwgXyA6OiBsJyAtPiBnZXRfYXRfaWR4X3JlYyAoaSAtIDEpIGwnXG5cbmxldCBnZXRfYXRfaWR4X2V4biBpIGwgPVxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBnZXRfYXRfaWR4X3JlYyBpIGxcblxubGV0IGdldF9hdF9pZHggaSBsID0gdHJ5IFNvbWUgKGdldF9hdF9pZHhfZXhuIGkgbCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgc2V0X2F0X2lkeCBpIHggbDAgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGwwXG4gICAgfCBfIDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyAoeCA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IGluc2VydF9hdF9pZHggaSB4IGwgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpIHggPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBbIHggXVxuICAgIHwgeSA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgKHggOjogeSA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKSB4XG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsIFtdIGkgeFxuXG5sZXQgcmVtb3ZlX2F0X2lkeCBpIGwwID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBsMFxuICAgIHwgXyA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbCdcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICByYW5nZSBpIChqIC0gc3RlcCkgKGogOjogYWNjKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0xpc3QucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIFtdXG5cbmxldCByYW5nZSBpIGogPVxuICBsZXQgcmVjIHVwIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgdXAgaSAoaiAtIDEpIChqIDo6IGFjYylcbiAgYW5kIGRvd24gaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICBkb3duIGkgKGogKyAxKSAoaiA6OiBhY2MpXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIFtdXG4gIGVsc2VcbiAgICBkb3duIGkgaiBbXVxuXG5sZXQgcmFuZ2UnIGkgaiA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSlcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKVxuXG5sZXQgKCAtLSApID0gcmFuZ2VcbmxldCAoIC0tXiApID0gcmFuZ2UnXG5cbmxldCByZXBsaWNhdGUgaSB4ID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoeCA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubGV0IHJlcGVhdCBpIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChMaXN0LnJldl9hcHBlbmQgbCBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubW9kdWxlIEFzc29jID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdCA9ICgnYSAqICdiKSBsaXN0XG5cbiAgbGV0IHJlYyBzZWFyY2hfZXhuIGVxIGwgeCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8ICh5LCB6KSA6OiBsJyAtPlxuICAgICAgaWYgZXEgeCB5IHRoZW5cbiAgICAgICAgelxuICAgICAgZWxzZVxuICAgICAgICBzZWFyY2hfZXhuIGVxIGwnIHhcblxuICBsZXQgZ2V0X2V4biB+ZXEgeCBsID0gc2VhcmNoX2V4biBlcSBsIHhcbiAgbGV0IGdldCB+ZXEgeCBsID0gdHJ5IFNvbWUgKHNlYXJjaF9leG4gZXEgbCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgKCogc2VhcmNoIGZvciBhIGJpbmRpbmcgZm9yIFt4XSBpbiBbbF0sIGFuZCBjYWxscyBbZiB4IChTb21lIHYpIHJlc3RdXG4gICAgIG9yIFtmIHggTm9uZSByZXN0XSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBmaW5kcyB0aGUgYmluZGluZy5cbiAgICAgW3Jlc3RdIGlzIHRoZSBsaXN0IG9mIHRoZSBvdGhlciBiaW5kaW5ncyAqKVxuICBsZXQgcmVjIHNlYXJjaF9zZXQgZXEgYWNjIGwgeCB+ZiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmIHggTm9uZSBhY2NcbiAgICB8ICh4JywgeScpIDo6IGwnIC0+XG4gICAgICBpZiBlcSB4IHgnIHRoZW5cbiAgICAgICAgZiB4IChTb21lIHknKSAoTGlzdC5yZXZfYXBwZW5kIGFjYyBsJylcbiAgICAgIGVsc2VcbiAgICAgICAgc2VhcmNoX3NldCBlcSAoKHgnLCB5JykgOjogYWNjKSBsJyB4IH5mXG5cbiAgbGV0IHNldCB+ZXEgeCB5IGwgPSBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIHggXyBsIC0+ICh4LCB5KSA6OiBsKVxuXG4gIGxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgICB0cnlcbiAgICAgIGlnbm9yZSAoc2VhcmNoX2V4biBlcSBsIHgpO1xuICAgICAgdHJ1ZVxuICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbiAgbGV0IHVwZGF0ZSB+ZXEgZiB4IGwgPVxuICAgIHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4geCBvcHRfeSByZXN0IC0+XG4gICAgICAgIG1hdGNoIGYgb3B0X3kgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gcmVzdCAoKiBkcm9wICopXG4gICAgICAgIHwgU29tZSB5JyAtPiAoeCwgeScpIDo6IHJlc3QpXG5cbiAgbGV0IHJlbW92ZSB+ZXEgeCBsID1cbiAgICBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIF8gb3B0X3kgcmVzdCAtPlxuICAgICAgICBtYXRjaCBvcHRfeSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBsICgqIGtlZXAgYXMgaXMgKilcbiAgICAgICAgfCBTb21lIF8gLT4gcmVzdClcblxuICBsZXQga2V5cyBsID0gbWFwIChmdW4gKGssIF8pIC0+IGspIGxcbiAgbGV0IHZhbHVlcyBsID0gbWFwIChmdW4gKF8sIHYpIC0+IHYpIGxcbiAgbGV0IG1hcF92YWx1ZXMgZiBsID0gbWFwIChmdW4gKGssIHYpIC0+IGssIGYgdikgbFxuZW5kXG5cbmxldCBhc3NvYyA9IEFzc29jLmdldF9leG5cbmxldCBhc3NvY19vcHQgPSBBc3NvYy5nZXRcbmxldCBtZW1fYXNzb2MgPSBBc3NvYy5tZW1cbmxldCByZW1vdmVfYXNzb2MgPSBBc3NvYy5yZW1vdmVcblxuKCoqIHsyIFJlZmVyZW5jZXMgb24gTGlzdHN9ICopXG5cbm1vZHVsZSBSZWYgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2EgbGlzdCByZWZcblxuICBsZXQgcHVzaCBsIHggPSBsIDo9IHggOjogIWxcblxuICBsZXQgcG9wIGwgPVxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbCA6PSB0YWlsO1xuICAgICAgU29tZSB4XG5cbiAgbGV0IHBvcF9leG4gbCA9XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJDQ0xpc3QuUmVmLnBvcF9leG5cIlxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsIDo9IHRhaWw7XG4gICAgICB4XG5cbiAgbGV0IGNyZWF0ZSAoKSA9IHJlZiBbXVxuICBsZXQgY2xlYXIgbCA9IGwgOj0gW11cbiAgbGV0IGxpZnQgZiBsID0gZiAhbFxuICBsZXQgcHVzaF9saXN0IHIgbCA9IHIgOj0gTGlzdC5yZXZfYXBwZW5kIGwgIXJcbmVuZFxuXG4oKiogezIgTW9uYWRpYyBPcGVyYXRpb25zfSAqKVxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIG9wZW4gTVxuXG4gIGxldCBtYXBfbSBmIGwgPVxuICAgIGxldCByZWMgYXV4IGYgYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IHJldHVybiAoTGlzdC5yZXYgYWNjKVxuICAgICAgfCB4IDo6IHRhaWwgLT4gZiB4ID4+PSBmdW4geCcgLT4gYXV4IGYgKHgnIDo6IGFjYykgdGFpbFxuICAgIGluXG4gICAgYXV4IGYgW10gbFxuXG4gIGxldCByZWMgbWFwX21fcGFyIGYgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBNLnJldHVybiBbXVxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgbGV0IHgnID0gZiB4IGluXG4gICAgICBsZXQgdGwnID0gbWFwX21fcGFyIGYgdGwgaW5cbiAgICAgIHgnID4+PSBmdW4geCcgLT5cbiAgICAgIHRsJyA+Pj0gZnVuIHRsJyAtPiBNLnJldHVybiAoeCcgOjogdGwnKVxuXG4gIGxldCBzZXF1ZW5jZV9tIGwgPSBtYXBfbSAoZnVuIHggLT4geCkgbFxuXG4gIGxldCByZWMgZm9sZF9tIGYgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gcmV0dXJuIGFjY1xuICAgIHwgeCA6OiBsJyAtPiBmIGFjYyB4ID4+PSBmdW4gYWNjJyAtPiBmb2xkX20gZiBhY2MnIGwnXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tX2xlbiBsZW4gZyBzdCA9IGluaXQgbGVuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbGVuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIGxlbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbGVuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBsZW4gZyBzdFxuXG5sZXQgcmFuZG9tX2Nob29zZSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgXyA6OiBfIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICBmdW4gc3QgLT5cbiAgICAgIGxldCBpID0gUmFuZG9tLlN0YXRlLmludCBzdCBsZW4gaW5cbiAgICAgIExpc3QubnRoIGwgaVxuXG5sZXQgcmFuZG9tX3NlcXVlbmNlIGwgc3QgPSBtYXAgKGZ1biBnIC0+IGcgc3QpIGxcblxubGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIGwgaW5cbiAgc3RhcnQgXiBTdHJpbmcuY29uY2F0IHNlcCBsIF4gc3RvcFxuXG5sZXQgdG9faXRlciBsIGsgPSBMaXN0Lml0ZXIgayBsXG5cbmxldCByZWMgdG9fc2VxIGwgKCkgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBTZXEuTmlsXG4gIHwgeCA6OiB0bCAtPiBTZXEuQ29ucyAoeCwgdG9fc2VxIHRsKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgaSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5yZXYgIWxcblxubGV0IG9mX3NlcV9yZXYgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgcyA9XG4gICAgbWF0Y2ggcyAoKSB3aXRoXG4gICAgfCBTZXEuTmlsIC0+IGFjY1xuICAgIHwgU2VxLkNvbnMgKHgsIHRsKSAtPiBsb29wICh4IDo6IGFjYykgdGxcbiAgaW5cbiAgbG9vcCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBvZl9zZXEgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgc2VxID1cbiAgICBpZiBpIDw9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgKG9mX3NlcV9yZXYgc2VxKVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+IHggOjogZGlyZWN0IChpIC0gMSkgdGxcbiAgICApXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5bQEBAZW5kaWZdXG5cbmxldCB0b19nZW4gbCA9XG4gIGxldCBsID0gcmVmIGwgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbCA6PSBsJztcbiAgICAgIFNvbWUgeFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGcgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHNhZmUgW10gZ1xuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSB4IC0+IHggOjogZGlyZWN0IChpIC0gMSkgZ1xuICAgIClcbiAgYW5kIHNhZmUgYWNjIGcgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFNvbWUgeCAtPiBzYWZlICh4IDo6IGFjYykgZ1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGdcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9nZW4gZyA9XG4gIG1hdGNoIGcgKCkgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4geCA6OiBvZl9nZW4gZ1xuXG5bQEBAZW5kaWZdXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXRbQGlubGluZV0gKCA+fD0gKSBsIGYgPSBtYXAgZiBsXG4gIGxldFtAaW5saW5lXSAoID4+PSApIGwgZiA9IGZsYXRfbWFwIGYgbFxuICBsZXQgKCBAICkgPSAoIEAgKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBsMSBsMiA9IHByb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgbDEgbDJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbiAgbGV0ICggYW5kJiApID0gY29tYmluZV9zaG9ydGVzdFxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX2l0ZW0gZm10IGwgPVxuICBsZXQgcmVjIHByaW50IGZtdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IHggOjogKF8gOjogXyBhcyBsKSAtPlxuICAgICAgcHBfaXRlbSBmbXQgeDtcbiAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICBwcmludCBmbXQgbFxuICAgIHwgWyB4IF0gLT4gcHBfaXRlbSBmbXQgeFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgcHBfc3RhcnQgZm10ICgpO1xuICBwcmludCBmbXQgbDtcbiAgcHBfc3RvcCBmbXQgKClcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBPcHRpb25zfSAqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb25cblxubGV0W0BpbmxpbmVdIG1hcCBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gU29tZSAoZiB4KVxuXG5sZXQgbWFwX29yIH5kZWZhdWx0IGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IG1hcF9sYXp5IGRlZmF1bHRfZm4gZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBpc19ub25lID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiAwXG4gIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBmIHggeVxuXG5sZXQgZXF1YWwgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSBfLCBOb25lIHwgTm9uZSwgU29tZSBfIC0+IGZhbHNlXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gZiB4IHlcblxubGV0IHJldHVybiB4ID0gU29tZSB4XG5sZXQgc29tZSA9IHJldHVyblxubGV0IG5vbmUgPSBOb25lXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBmbGF0X21hcF9sIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBiaW5kIG8gZiA9IGZsYXRfbWFwIGYgb1xubGV0ICggPj49ICkgPSBiaW5kXG5sZXQgcHVyZSB4ID0gU29tZSB4XG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYsIHggd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIGYsIFNvbWUgeCAtPiBTb21lIChmIHgpXG5cbmxldCBvcl8gfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfXG4gIHwgU29tZSBfIC0+IGFcblxubGV0IG9yX2xhenkgfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfICgpXG4gIHwgU29tZSBfIC0+IGFcblxubGV0ICggPCs+ICkgYSBiID0gb3JfIH5lbHNlXzpiIGFcbmxldCBjaG9pY2UgbCA9IExpc3QuZm9sZF9sZWZ0ICggPCs+ICkgTm9uZSBsXG5cbmxldCBtYXAyIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lIChmIHggeSlcblxubGV0IGZpbHRlciBwID0gZnVuY3Rpb25cbiAgfCBTb21lIHggYXMgbyB3aGVuIHAgeCAtPiBvXG4gIHwgXyAtPiBOb25lXG5cbmxldCBpZl8gcCB4ID1cbiAgaWYgcCB4IHRoZW5cbiAgICBTb21lIHhcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSB4IC0+IHAgeFxuXG5sZXQgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIHggLT4gcCB4XG5cbmxldCBpdGVyIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBmb2xkIGYgYWNjIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGFjY1xuICB8IFNvbWUgeCAtPiBmIGFjYyB4XG5cbmxldCBnZXRfb3IgfmRlZmF1bHQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCB2YWx1ZSB4IH5kZWZhdWx0ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB5IC0+IHlcblxubGV0IGdldF9leG4gPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDT3B0aW9uLmdldF9leG5cIlxuXG5sZXQgZ2V0X2V4bl9vciBtc2cgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBtc2dcblxubGV0IGdldF9sYXp5IGRlZmF1bHRfZm4geCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdF9mbiAoKVxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCBzZXF1ZW5jZV9sIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTb21lIChMaXN0LnJldiBhY2MpXG4gICAgfCBTb21lIHggOjogbCcgLT4gYXV4ICh4IDo6IGFjYykgbCdcbiAgICB8IE5vbmUgOjogXyAtPiByYWlzZSBFeGl0XG4gIGluXG4gIHRyeSBhdXggW10gbCB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgd3JhcCA/KGhhbmRsZXIgPSBmdW4gXyAtPiB0cnVlKSBmIHggPVxuICB0cnkgU29tZSAoZiB4KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHdyYXAyID8oaGFuZGxlciA9IGZ1biBfIC0+IHRydWUpIGYgeCB5ID1cbiAgdHJ5IFNvbWUgKGYgeCB5KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHRvX2xpc3QgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gWyB4IF1cblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICB8IHggOjogXyAtPiBTb21lIHhcbiAgfCBbXSAtPiBOb25lXG5cbmxldCB0b19yZXN1bHQgZXJyID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIGVyclxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCB0b19yZXN1bHRfbGF6eSBlcnJfZm4gPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgKGVycl9mbiAoKSlcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgb2ZfcmVzdWx0ID0gZnVuY3Rpb25cbiAgfCBFcnJvciBfIC0+IE5vbmVcbiAgfCBPayB4IC0+IFNvbWUgeFxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPnw9ICkgeCBmID0gbWFwIGYgeFxuICBsZXQgKCA+Pj0gKSA9ICggPj49IClcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoIDwrPiApID0gKCA8Kz4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgbzEgbzIgPVxuICAgIG1hdGNoIG8xLCBvMiB3aXRoXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lICh4LCB5KVxuICAgIHwgXyAtPiBOb25lXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGlmIFJhbmRvbS5TdGF0ZS5ib29sIHN0IHRoZW5cbiAgICBTb21lIChnIHN0KVxuICBlbHNlXG4gICAgTm9uZVxuXG5leGNlcHRpb24gRXhpdENob2ljZVxuXG5sZXQgY2hvaWNlX2l0ZXIgcyA9XG4gIGxldCByID0gcmVmIE5vbmUgaW5cbiAgKHRyeVxuICAgICBzIChmdW5jdGlvblxuICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgIHwgU29tZSBfIGFzIG8gLT5cbiAgICAgICAgIHIgOj0gbztcbiAgICAgICAgIHJhaXNlIEV4aXRDaG9pY2UpXG4gICB3aXRoIEV4aXRDaG9pY2UgLT4gKCkpO1xuICAhclxuXG5sZXQgcmVjIGNob2ljZV9zZXEgcyA9XG4gIG1hdGNoIHMgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gTm9uZVxuICB8IFNlcS5Db25zIChTb21lIHgsIF8pIC0+IFNvbWUgeFxuICB8IFNlcS5Db25zIChOb25lLCB0bCkgLT4gY2hvaWNlX3NlcSB0bFxuXG5sZXQgdG9fZ2VuIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGZ1biAoKSAtPiBOb25lXG4gIHwgU29tZSBfIC0+XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuIChcbiAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgIG9cbiAgICAgICkgZWxzZVxuICAgICAgICBOb25lXG5cbmxldCB0b19pdGVyIG8gayA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gayB4XG5cbmxldCB0b19zZXEgbyAoKSA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gU2VxLk5pbFxuICB8IFNvbWUgeCAtPiBTZXEuQ29ucyAoeCwgU2VxLmVtcHR5KVxuXG5sZXQgcHAgcHB4IG91dCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIk5vbmVcIlxuICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJAW1NvbWUgJWFAXVwiIHBweCB4XG5cbmxldCBmbGF0dGVuID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gTm9uZVxuXG5sZXQgcmV0dXJuX2lmIGIgeCA9XG4gIGlmIGIgdGhlblxuICAgIFNvbWUgeFxuICBlbHNlXG4gICAgTm9uZVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFJhbmRvbSBHZW5lcmF0b3JzfSAqKVxuXG5pbmNsdWRlIFJhbmRvbVxuXG50eXBlIHN0YXRlID0gUmFuZG9tLlN0YXRlLnRcbnR5cGUgJ2EgdCA9IHN0YXRlIC0+ICdhXG50eXBlICdhIHJhbmRvbV9nZW4gPSAnYSB0XG5cbmxldCByZXR1cm4geCBfc3QgPSB4XG5sZXQgZmxhdF9tYXAgZiBnIHN0ID0gZiAoZyBzdCkgc3RcbmxldCAoID4+PSApIGcgZiBzdCA9IGZsYXRfbWFwIGYgZyBzdFxubGV0IG1hcCBmIGcgc3QgPSBmIChnIHN0KVxubGV0ICggPnw9ICkgZyBmIHN0ID0gbWFwIGYgZyBzdFxubGV0IGRlbGF5IGYgc3QgPSBmICgpIHN0XG5cbmxldCBfY2hvb3NlX2FycmF5IGEgc3QgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkNDUmFuZG9tLmNob29zZV9hcnJheVwiO1xuICBhLihSYW5kb20uU3RhdGUuaW50IHN0IChBcnJheS5sZW5ndGggYSkpXG5cbmxldCBjaG9vc2VfYXJyYXkgYSBzdCA9XG4gIHRyeSBTb21lIChfY2hvb3NlX2FycmF5IGEgc3Qgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IGNob29zZSBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgY2hvb3NlX2FycmF5IGFcblxubGV0IGNob29zZV9leG4gbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIGZ1biBzdCAtPiBfY2hvb3NlX2FycmF5IGEgc3Qgc3RcblxubGV0IGNob29zZV9yZXR1cm4gbCA9IF9jaG9vc2VfYXJyYXkgKEFycmF5Lm9mX2xpc3QgbClcblxuZXhjZXB0aW9uIFBpY2tfZnJvbV9lbXB0eVxuXG5sZXQgcGlja19saXN0IGwgPVxuICBsZXQgbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgaWYgbiA9IDAgdGhlbiByYWlzZSBQaWNrX2Zyb21fZW1wdHk7XG4gIGZ1biBzdCAtPiBMaXN0Lm50aCBsIChSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCBwaWNrX2FycmF5IGEgPVxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW4gcmFpc2UgUGlja19mcm9tX2VtcHR5O1xuICBmdW4gc3QgLT4gQXJyYXkuZ2V0IGEgKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IGludCBpIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBpXG5sZXQgc21hbGxfaW50ID0gaW50IDEwMFxubGV0IGludF9yYW5nZSBpIGogc3QgPSBpICsgUmFuZG9tLlN0YXRlLmludCBzdCAoaiAtIGkgKyAxKVxubGV0IGZsb2F0IGYgc3QgPSBSYW5kb20uU3RhdGUuZmxvYXQgc3QgZlxubGV0IHNtYWxsX2Zsb2F0ID0gZmxvYXQgMTAwLjBcbmxldCBmbG9hdF9yYW5nZSBpIGogc3QgPSBpICsuIFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCAoaiAtLiBpKVxuXG4oKiBUT0RPOiBzYW1wbGUgZnVuY3Rpb25zICopXG5cbmxldCByZXBsaWNhdGUgbiBnIHN0ID1cbiAgbGV0IHJlYyBhdXggYWNjIG4gPVxuICAgIGlmIG4gPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoZyBzdCA6OiBhY2MpIChuIC0gMSlcbiAgaW5cbiAgYXV4IFtdIG5cblxuKCogU2FtcGxlIHdpdGhvdXQgcmVwbGFjZW1lbnQgdXNpbmcgcmVqZWN0aW9uIHNhbXBsaW5nLiAqKVxubGV0IHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgKHR5cGUgZWx0KSB+Y21wIGsgKHJuZyA6IGVsdCB0KSBzdCA9XG4gIGxldCBtb2R1bGUgUyA9IFNldC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBlbHRcblxuICAgIGxldCBjb21wYXJlID0gY21wXG4gIGVuZCkgaW5cbiAgbGV0IHJlYyBhdXggcyBrID1cbiAgICBpZiBrIDw9IDAgdGhlblxuICAgICAgUy5lbGVtZW50cyBzXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IHJuZyBzdCBpblxuICAgICAgaWYgUy5tZW0geCBzIHRoZW5cbiAgICAgICAgYXV4IHMga1xuICAgICAgZWxzZVxuICAgICAgICBhdXggKFMuYWRkIHggcykgKGsgLSAxKVxuICAgIClcbiAgaW5cbiAgaWYgayA8PSAwIHRoZW4gaW52YWxpZF9hcmcgXCJzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzXCI7XG4gIGF1eCBTLmVtcHR5IGtcblxubGV0IGxpc3Rfc2VxIGwgc3QgPSBMaXN0Lm1hcCAoZnVuIGYgLT4gZiBzdCkgbFxuXG5sZXQgc3BsaXQgaSBzdCA9XG4gIGlmIGkgPCAyIHRoZW5cbiAgICBOb25lXG4gIGVsc2UgKFxuICAgIGxldCBqID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgKGkgLSAxKSBpblxuICAgIFNvbWUgKGosIGkgLSBqKVxuICApXG5cbmxldCBfZGlmZl9saXN0IH5sYXN0IGwgPVxuICBsZXQgcmVjIGRpZmZfbGlzdCBhY2MgPSBmdW5jdGlvblxuICAgIHwgWyBhIF0gLT4gU29tZSAoKGxhc3QgLSBhKSA6OiBhY2MpXG4gICAgfCBhIDo6IChiIDo6IF8gYXMgcikgLT4gZGlmZl9saXN0ICgoYiAtIGEpIDo6IGFjYykgclxuICAgIHwgW10gLT4gTm9uZVxuICBpblxuICBkaWZmX2xpc3QgW10gbFxuXG4oKiBQYXJ0aXRpb24gb2YgYW4gaW50IGludG8gW2xlbl0gaW50ZWdlcnMgdW5pZm9ybWx5LlxuICAgV2UgZmlyc3Qgc2FtcGxlIChsZW4tMSkgcG9pbnRzIGZyb20gdGhlIHNldCB7MSwuLmktMX0gd2l0aG91dCByZXBsYWNlbWVudC5cbiAgIFdlIHNvcnQgdGhlc2UgcG9pbnRzIGFuZCBhZGQgYmFjayAwIGFuZCBpLCB3ZSBoYXZlIHRodXNcbiAgIHhfMCA9IDAgPCB4XzEgPCB4XzIgPCDigKYgPCB4X3tsZW4tMX0gPCBpID0geF97bGVufS5cbiAgIElmIHdlIGRlZmluZSwgeV9rID0geF97aysxfSAtIHhfe2t9IGZvciBrIGluIDAg4oCmIChsZW4tMSksIHRoZW4gYnkgY29uc3RydWN0aW9uXG4gICDiiJFfayB5X2sgPSDiiJFfayAoeF97aysxfSAtIHhfayApID0geF97bGVufSAtIHhfMCA9IGkuICopXG5sZXQgc3BsaXRfbGlzdCBpIH5sZW4gc3QgPVxuICBpZiBsZW4gPD0gMSB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLnNwbGl0X2xpc3RcIjtcbiAgaWYgaSA+PSBsZW4gdGhlbiAoXG4gICAgbGV0IHhzID1cbiAgICAgIHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgfmNtcDpjb21wYXJlIChsZW4gLSAxKSAoaW50X3JhbmdlIDEgKGkgLSAxKSkgc3RcbiAgICBpblxuICAgIF9kaWZmX2xpc3Qgfmxhc3Q6aSAoMCA6OiB4cylcbiAgKSBlbHNlXG4gICAgTm9uZVxuXG5sZXQgcmV0cnkgPyhtYXggPSAxMCkgZyBzdCA9XG4gIGxldCByZWMgYXV4IG4gPVxuICAgIG1hdGNoIGcgc3Qgd2l0aFxuICAgIHwgTm9uZSB3aGVuIG4gPSAwIC0+IE5vbmVcbiAgICB8IE5vbmUgLT4gYXV4IChuIC0gMSkgKCogcmV0cnkgKilcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gIGluXG4gIGF1eCBtYXhcblxubGV0IHJlYyB0cnlfc3VjY2Vzc2l2ZWx5IGwgc3QgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBOb25lXG4gIHwgZyA6OiBsJyAtPlxuICAgIChtYXRjaCBnIHN0IHdpdGhcbiAgICB8IE5vbmUgLT4gdHJ5X3N1Y2Nlc3NpdmVseSBsJyBzdFxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXMpXG5cbmxldCAoIDw/PiApIGEgYiA9IHRyeV9zdWNjZXNzaXZlbHkgWyBhOyBiIF1cblxuZXhjZXB0aW9uIEJhY2t0cmFja1xuXG5sZXQgX2Nob29zZV9hcnJheV9jYWxsIGEgZiBzdCA9XG4gIHRyeSBmIChfY2hvb3NlX2FycmF5IGEgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IHJhaXNlIEJhY2t0cmFja1xuXG5sZXQgZml4ID8oc3ViMSA9IFtdKSA/KHN1YjIgPSBbXSkgPyhzdWJuID0gW10pIH5iYXNlIGZ1ZWwgc3QgPVxuICBsZXQgc3ViMSA9IEFycmF5Lm9mX2xpc3Qgc3ViMVxuICBhbmQgc3ViMiA9IEFycmF5Lm9mX2xpc3Qgc3ViMlxuICBhbmQgc3VibiA9IEFycmF5Lm9mX2xpc3Qgc3VibiBpblxuICAoKiByZWN1cnNpdmUgZnVuY3Rpb24gd2l0aCBmdWVsICopXG4gIGxldCByZWMgbWFrZSBmdWVsIHN0ID1cbiAgICBpZiBmdWVsID0gMCB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIGlmIGZ1ZWwgPSAxIHRoZW5cbiAgICAgIGJhc2Ugc3RcbiAgICBlbHNlXG4gICAgICBfdHJ5X290aGVyd2lzZSAwXG4gICAgICAgIFt8XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1YjEgKGZ1biBmIC0+IGYgKG1ha2UgKGZ1ZWwgLSAxKSkgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWIyIChmdW4gZiAtPlxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdCBmdWVsIHN0IHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEJhY2t0cmFja1xuICAgICAgICAgICAgICB8IFNvbWUgKGksIGopIC0+IGYgKG1ha2UgaSkgKG1ha2Ugaikgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWJuIChmdW4gKGxlbiwgZikgLT5cbiAgICAgICAgICAgICAgbGV0IGxlbiA9IGxlbiBzdCBpblxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdF9saXN0IGZ1ZWwgfmxlbiBzdCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBCYWNrdHJhY2tcbiAgICAgICAgICAgICAgfCBTb21lIGwnIC0+IGYgKGZ1biBzdCAtPiBMaXN0Lm1hcCAoZnVuIHggLT4gbWFrZSB4IHN0KSBsJykgc3QpO1xuICAgICAgICAgIGJhc2UgKCogYmFzZSBjYXNlIHRoZW4gKik7XG4gICAgICAgIHxdXG4gIGFuZCBfdHJ5X290aGVyd2lzZSBpIGEgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIChcbiAgICAgIHRyeSBhLihpKSBzdCB3aXRoIEJhY2t0cmFjayAtPiBfdHJ5X290aGVyd2lzZSAoaSArIDEpIGFcbiAgICApXG4gIGluXG4gIG1ha2UgKGZ1ZWwgc3QpIHN0XG5cbmxldCBwdXJlIHggX3N0ID0geFxubGV0ICggPCo+ICkgZiBnIHN0ID0gZiBzdCAoZyBzdClcbmxldCAoIGxldCsgKSA9ICggPnw9IClcbmxldCAoIGxldCogKSA9ICggPj49IClcbmxldFtAaW5saW5lXSAoIGFuZCsgKSBhMSBhMiBzdCA9IGExIHN0LCBhMiBzdFxubGV0ICggYW5kKiApID0gKCBhbmQrIClcbmxldCBfX2RlZmF1bHRfc3RhdGUgPSBSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQgKClcbmxldCBydW4gPyhzdCA9IF9fZGVmYXVsdF9zdGF0ZSkgZyA9IGcgc3RcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBFcnJvciBNb25hZH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIG9yZCA9ICdhIC0+ICdhIC0+IGludFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBCYXNpY3N9ICopXG5cbnR5cGUgbm9ucmVjICgrJ2dvb2QsICsnYmFkKSByZXN1bHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9XG4gIHwgT2sgb2YgJ2dvb2RcbiAgfCBFcnJvciBvZiAnYmFkXG5cbnR5cGUgKCsnZ29vZCwgKydiYWQpIHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9IE9rIG9mICdnb29kIHwgRXJyb3Igb2YgJ2JhZFxuXG5sZXQgcmV0dXJuIHggPSBPayB4XG5sZXQgZmFpbCBzID0gRXJyb3Igc1xuXG5sZXQgZmFpbF9wcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgUHJpbnRmLmticHJpbnRmIChmdW4gYnVmIC0+IGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKSBidWYgZm9ybWF0XG5cbmxldCBmYWlsX2ZwcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmb3JtYXRcblxubGV0IGFkZF9jdHggbXNnIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBFcnJvciBlIC0+IEVycm9yIChlIF4gXCJcXG5jb250ZXh0OlwiIF4gbXNnKVxuICB8IE9rIHggLT4gT2sgeFxuXG5sZXQgYWRkX2N0eGYgbXNnID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCBlIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgYWRkX2N0eCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgZSlcbiAgICBvdXQgbXNnXG5cbmxldCBvZl9leG4gZSA9XG4gIGxldCBtc2cgPSBQcmludGV4Yy50b19zdHJpbmcgZSBpblxuICBFcnJvciBtc2dcblxubGV0IG9mX2V4bl90cmFjZSBlID1cbiAgbGV0IHJlcyA9XG4gICAgUHJpbnRmLnNwcmludGYgXCIlc1xcbiVzXCIgKFByaW50ZXhjLnRvX3N0cmluZyBlKSAoUHJpbnRleGMuZ2V0X2JhY2t0cmFjZSAoKSlcbiAgaW5cbiAgRXJyb3IgcmVzXG5cbmxldCBvcHRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE5vbmUgLT4gT2sgTm9uZVxuICB8IFNvbWUgeCAtPlxuICAgIChtYXRjaCBmIHggd2l0aFxuICAgIHwgT2sgeCAtPiBPayAoU29tZSB4KVxuICAgIHwgRXJyb3IgZSAtPiBFcnJvciBlKVxuXG5sZXQgbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IG1hcF9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gIHwgRXJyb3IgeSAtPiBFcnJvciAoZiB5KVxuXG5sZXQgbWFwMiBmIGcgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIChnIHMpXG5cbmxldCBpdGVyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG5sZXQgaXRlcl9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyAtPiAoKVxuICB8IEVycm9yIGVyciAtPiBmIGVyclxuXG5leGNlcHRpb24gR2V0X2Vycm9yXG5cbmxldCBnZXRfZXhuID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IHJhaXNlIEdldF9lcnJvclxuXG5sZXQgZ2V0X29yIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IGRlZmF1bHRcblxubGV0IGdldF9sYXp5IGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIGUgLT4gZiBlXG5cbmxldCBnZXRfb3JfZmFpbHdpdGggPSBmdW5jdGlvblxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIG1zZyAtPiBmYWlsd2l0aCBtc2dcblxubGV0IG1hcF9vciBmIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIF8gLT4gZGVmYXVsdFxuXG5sZXQgY2F0Y2ggZSB+b2sgfmVyciA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHkgLT4gZXJyIHlcblxubGV0IGZsYXRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbmxldCBlcXVhbCB+ZXJyIGVxIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gZXEgeCB5XG4gIHwgRXJyb3IgcywgRXJyb3IgcycgLT4gZXJyIHMgcydcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5lcnIgY21wIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gY21wIHggeVxuICB8IE9rIF8sIF8gLT4gMVxuICB8IF8sIE9rIF8gLT4gLTFcbiAgfCBFcnJvciBzLCBFcnJvciBzJyAtPiBlcnIgcyBzJ1xuXG5sZXQgZm9sZCB+b2sgfmVycm9yIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBPayB4IC0+IG9rIHhcbiAgfCBFcnJvciBzIC0+IGVycm9yIHNcblxubGV0IGZvbGRfb2sgZiBhY2MgciA9XG4gIG1hdGNoIHIgd2l0aFxuICB8IE9rIHggLT4gZiBhY2MgeFxuICB8IEVycm9yIF8gLT4gYWNjXG5cbmxldCBpc19vayA9IGZ1bmN0aW9uXG4gIHwgT2sgXyAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvblxuICB8IE9rIF8gLT4gZmFsc2VcbiAgfCBFcnJvciBfIC0+IHRydWVcblxuKCoqIHsyIFdyYXBwZXJzfSAqKVxuXG5sZXQgZ3VhcmQgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCBndWFyZF9zdHIgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IG9mX2V4biBlXG5sZXQgZ3VhcmRfc3RyX3RyYWNlIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBvZl9leG5fdHJhY2UgZVxubGV0IHdyYXAxIGYgeCA9IHRyeSByZXR1cm4gKGYgeCkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCB3cmFwMiBmIHggeSA9IHRyeSByZXR1cm4gKGYgeCB5KSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IHdyYXAzIGYgeCB5IHogPSB0cnkgcmV0dXJuIChmIHggeSB6KSB3aXRoIGUgLT4gRXJyb3IgZVxuXG4oKiogezIgQXBwbGljYXRpdmV9ICopXG5cbmxldCBwdXJlID0gcmV0dXJuXG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYgd2l0aFxuICB8IEVycm9yIHMgLT4gZmFpbCBzXG4gIHwgT2sgZiAtPiBtYXAgZiB4XG5cbmxldCBqb2luIHQgPVxuICBtYXRjaCB0IHdpdGhcbiAgfCBPayAoT2sgbykgLT4gT2sgb1xuICB8IE9rIChFcnJvciBlKSAtPiBFcnJvciBlXG4gIHwgRXJyb3IgXyBhcyBlIC0+IGVcblxubGV0IGJvdGggeCB5ID1cbiAgbWF0Y2ggeCwgeSB3aXRoXG4gIHwgT2sgbywgT2sgbycgLT4gT2sgKG8sIG8nKVxuICB8IE9rIF8sIEVycm9yIGUgLT4gRXJyb3IgZVxuICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuXG4oKiogezIgQ29sbGVjdGlvbnN9ICopXG5cbmxldCBtYXBfbCBmIGwgPVxuICBsZXQgcmVjIG1hcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBPayAoTGlzdC5yZXYgYWNjKVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgICAgfCBPayB5IC0+IG1hcCAoeSA6OiBhY2MpIGwnKVxuICBpblxuICBtYXAgW10gbFxuXG5sZXQgZmxhdHRlbl9sIGwgPVxuICBsZXQgcmVjIGxvb3AgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gT2sgKExpc3QucmV2IGFjYylcbiAgICB8IE9rIHggOjogbCcgLT4gbG9vcCAoeCA6OiBhY2MpIGwnXG4gICAgfCBFcnJvciBlIDo6IF8gLT4gRXJyb3IgZVxuICBpblxuICBsb29wIFtdIGxcblxuZXhjZXB0aW9uIExvY2FsRXhpdFxuXG5sZXQgZm9sZF9pdGVyIGYgYWNjIHNlcSA9XG4gIGxldCBlcnIgPSByZWYgTm9uZSBpblxuICB0cnlcbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIHNlcSAoZnVuIHggLT5cbiAgICAgICAgbWF0Y2ggZiAhYWNjIHggd2l0aFxuICAgICAgICB8IEVycm9yIHMgLT5cbiAgICAgICAgICBlcnIgOj0gU29tZSBzO1xuICAgICAgICAgIHJhaXNlIExvY2FsRXhpdFxuICAgICAgICB8IE9rIHkgLT4gYWNjIDo9IHkpO1xuICAgIE9rICFhY2NcbiAgd2l0aCBMb2NhbEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBzIC0+IEVycm9yIHMpXG5cbmxldCBmb2xkX2wgZiBhY2MgbCA9IGZvbGRfaXRlciBmIGFjYyAoZnVuIGsgLT4gTGlzdC5pdGVyIGsgbClcblxuKCoqIHsyIE1pc2N9ICopXG5cbmxldCBjaG9vc2UgbCA9XG4gIGxldCByZWMgZmluZF8gPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCAoT2sgXyBhcyByZXMpIDo6IF8gLT4gcmVzXG4gICAgfCBFcnJvciBfIDo6IGwnIC0+IGZpbmRfIGwnXG4gIGluXG4gIHRyeSBmaW5kXyBsXG4gIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgbGV0IGwnID1cbiAgICAgIExpc3QubWFwXG4gICAgICAgIChmdW5jdGlvblxuICAgICAgICAgIHwgRXJyb3IgcyAtPiBzXG4gICAgICAgICAgfCBPayBfIC0+IGFzc2VydCBmYWxzZSlcbiAgICAgICAgbFxuICAgIGluXG4gICAgRXJyb3IgbCdcblxubGV0IHJldHJ5IG4gZiA9XG4gIGxldCByZWMgcmV0cnkgbiBhY2MgPVxuICAgIG1hdGNoIG4gd2l0aFxuICAgIHwgMCAtPiBmYWlsIChMaXN0LnJldiBhY2MpXG4gICAgfCBfIC0+XG4gICAgICAobWF0Y2ggZiAoKSB3aXRoXG4gICAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSlcbiAgaW5cbiAgcmV0cnkgbiBbXVxuXG4oKiogezIgSW5maXh9ICopXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCA+fD0gKSBlIGYgPSBtYXAgZiBlXG4gIGxldCAoID4+PSApIGUgZiA9IGZsYXRfbWFwIGYgZVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG5cbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIHgxIHgyID1cbiAgICBtYXRjaCB4MSwgeDIgd2l0aFxuICAgIHwgT2sgeCwgT2sgeSAtPiBPayAoeCwgeSlcbiAgICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuICAgIHwgXywgRXJyb3IgZSAtPiBFcnJvciBlXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbigqKiB7MiBNb25hZGljIE9wZXJhdGlvbnN9ICopXG5cbm1vZHVsZSB0eXBlIE1PTkFEID0gc2lnXG4gIHR5cGUgJ2EgdFxuXG4gIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG4gIHZhbCAoID4+PSApIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuZW5kXG5cbm1vZHVsZSBUcmF2ZXJzZSAoTSA6IE1PTkFEKSA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSA9IE0uKCA+Pj0gKVxuXG4gIGxldCBtYXBfbSBmIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgcyAtPiBNLnJldHVybiAoRXJyb3IgcylcbiAgICB8IE9rIHggLT4gZiB4ID4+PSBmdW4geSAtPiBNLnJldHVybiAoT2sgeSlcblxuICBsZXQgc2VxdWVuY2VfbSBtID0gbWFwX20gKGZ1biB4IC0+IHgpIG1cblxuICBsZXQgZm9sZF9tIGYgYWNjIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgXyAtPiBNLnJldHVybiBhY2NcbiAgICB8IE9rIHggLT4gZiBhY2MgeCA+Pj0gZnVuIHkgLT4gTS5yZXR1cm4geVxuXG4gIGxldCByZXRyeV9tIG4gZiA9XG4gICAgbGV0IHJlYyByZXRyeSBuIGFjYyA9XG4gICAgICBtYXRjaCBuIHdpdGhcbiAgICAgIHwgMCAtPiBNLnJldHVybiAoZmFpbCAoTGlzdC5yZXYgYWNjKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBmICgpID4+PSAoIGZ1bmN0aW9uXG4gICAgICAgIHwgT2sgeCAtPiBNLnJldHVybiAoT2sgeClcbiAgICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSApXG4gICAgaW5cbiAgICByZXRyeSBuIFtdXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG5sZXQgdG9fb3B0ID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IFNvbWUgeFxuICB8IEVycm9yIF8gLT4gTm9uZVxuXG5sZXQgb2Zfb3B0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIFwib2Zfb3B0XCJcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgdG9fc2VxIGUgKCkgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG4gIHwgRXJyb3IgXyAtPiBTZXEuTmlsXG5cbmxldCB0b19pdGVyIGUgayA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gayB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG50eXBlICgnYSwgJ2IpIGVycm9yID0gWyBgT2sgb2YgJ2EgfCBgRXJyb3Igb2YgJ2IgXVxuXG5sZXQgb2ZfZXJyID0gZnVuY3Rpb25cbiAgfCBgT2sgeCAtPiBPayB4XG4gIHwgYEVycm9yIHkgLT4gRXJyb3IgeVxuXG5sZXQgdG9fZXJyID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IGBPayB4XG4gIHwgRXJyb3IgeSAtPiBgRXJyb3IgeVxuXG4oKiogezIgSU99ICopXG5cbmxldCBwcCBwcF94IGZtdCBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW29rKEAsJWEpQF1cIiBwcF94IHhcbiAgfCBFcnJvciBzIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbZXJyb3IoQCwlcylAXVwiIHNcblxubGV0IHBwJyBwcF94IHBwX2UgZm10IGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbb2soQCwlYSlAXVwiIHBwX3ggeFxuICB8IEVycm9yIHMgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtlcnJvcihALCVhKUBdXCIgcHBfZSBzXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgV3JhcHBlciBhcm91bmQgU2V0fSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID0gU2V0Lk9yZGVyZWRUeXBlXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBTZXQuU1xuXG4gIHZhbCBtaW5fZWx0X29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshbWluX2VsdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIG1heF9lbHRfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFtYXhfZWx0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgY2hvb3NlX29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshY2hvb3NlfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9vcHQgOiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgKCoqIEZpbmQgbWluaW11bSBlbGVtZW50IHNhdGlzZnlpbmcgcHJlZGljYXRlLlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0X29wdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kX2ZpcnN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdF9tYXAgOiAoZWx0IC0+ICdhIG9wdGlvbikgLT4gdCAtPiAnYSBvcHRpb25cbiAgKCoqIFtmaW5kX2ZpcnN0X21hcCBmIHNdIGZpbmQgdGhlIG1pbmltdW0gZWxlbWVudCBbeF0gb2YgW3NdIHN1Y2ggdGhhdCBbZiB4ID0gU29tZSB5XVxuICAgICAgYW5kIHJldHVybiBbU29tZSB5XS4gT3RoZXJ3aXNlIHJldHVybnMgW05vbmVdLlxuICAgICAgQHNpbmNlIDMuMTIgKilcblxuICB2YWwgZmluZF9sYXN0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAoKiogRmluZCBtYXhpbXVtIGVsZW1lbnQgc2F0aXNmeWluZyBwcmVkaWNhdGUuXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfbGFzdF9vcHQgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZF9sYXN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9sYXN0X21hcCA6IChlbHQgLT4gJ2Egb3B0aW9uKSAtPiB0IC0+ICdhIG9wdGlvblxuICAoKiogW2ZpbmRfbGFzdF9tYXAgZiBzXSBmaW5kIHRoZSBtYXhpbXVtIGVsZW1lbnQgW3hdIG9mIFtzXSBzdWNoIHRoYXQgW2YgeCA9IFNvbWUgeV1cbiAgICAgIGFuZCByZXR1cm4gW1NvbWUgeV0uIE90aGVyd2lzZSByZXR1cm5zIFtOb25lXS5cbiAgICAgIEBzaW5jZSAzLjEyICopXG5cbiAgdmFsIG9mX2l0ZXIgOiBlbHQgaXRlciAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbaXRlcl0gb2YgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX3NlcSA6IGVsdCBTZXEudCAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbc2VxXSBvZiBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgYWRkX2l0ZXIgOiB0IC0+IGVsdCBpdGVyIC0+IHRcbiAgKCoqIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgKCoqIEBzaW5jZSAzLjAgKilcblxuICB2YWwgdG9faXRlciA6IHQgLT4gZWx0IGl0ZXJcbiAgKCoqIFt0b19pdGVyIHRdIGNvbnZlcnRzIHRoZSBzZXQgW3RdIHRvIGEgW2l0ZXJdIG9mIHRoZSBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2xpc3QgOiB0IC0+IGVsdCBsaXN0IC0+IHRcbiAgKCoqIEBzaW5jZSAwLjE0ICopXG5cbiAgdmFsIHRvX2xpc3QgOiB0IC0+IGVsdCBsaXN0XG4gICgqKiBbdG9fbGlzdCB0XSBjb252ZXJ0cyB0aGUgc2V0IFt0XSB0byBhIGxpc3Qgb2YgdGhlIGVsZW1lbnRzLiAqKVxuXG4gIHZhbCB0b19zdHJpbmcgOlxuICAgID9zdGFydDpzdHJpbmcgLT5cbiAgICA/c3RvcDpzdHJpbmcgLT5cbiAgICA/c2VwOnN0cmluZyAtPlxuICAgIChlbHQgLT4gc3RyaW5nKSAtPlxuICAgIHQgLT5cbiAgICBzdHJpbmdcbiAgKCoqICBQcmludCB0aGUgc2V0IGluIGEgc3RyaW5nXG4gICAgICAgQHNpbmNlIDIuNyAqKVxuXG4gIHZhbCBwcCA6XG4gICAgP3BwX3N0YXJ0OnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zdG9wOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zZXA6dW5pdCBwcmludGVyIC0+XG4gICAgZWx0IHByaW50ZXIgLT5cbiAgICB0IHByaW50ZXJcbiAgKCoqIFByaW50IHRoZSBzZXQuICopXG5lbmRcblxubW9kdWxlIE1ha2UgKE8gOiBNYXAuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBTID0gU2V0Lk1ha2UgKE8pXG5cbiAgKCogYmFja3BvcnQgZnVuY3Rpb25zIGZyb20gcmVjZW50IHN0ZGxpYi5cbiAgICAgdGhleSB3aWxsIGJlIHNoYWRvd2VkIGJ5IGluY2x1c2lvbiBvZiBbU10gaWYgcHJlc2VudC4gKilcblxuICBbQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG4gIGxldCBmaW5kX29wdCB4IHMgPSB0cnkgU29tZSAoUy5maW5kIHggcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgY2hvb3NlX29wdCBzID0gdHJ5IFNvbWUgKFMuY2hvb3NlIHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1pbl9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5taW5fZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1heF9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5tYXhfZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBleGNlcHRpb24gRmluZF9iaW5kaW5nX2V4aXRcblxuICBsZXQgZmluZF9maXJzdF9vcHQgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICB0cnlcbiAgICAgIFMuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBpZiBmIHggdGhlbiAoXG4gICAgICAgICAgICByZXMgOj0gU29tZSB4O1xuICAgICAgICAgICAgcmFpc2UgRmluZF9iaW5kaW5nX2V4aXRcbiAgICAgICAgICApKVxuICAgICAgICBtO1xuICAgICAgTm9uZVxuICAgIHdpdGggRmluZF9iaW5kaW5nX2V4aXQgLT4gIXJlc1xuXG4gIGxldCBmaW5kX2ZpcnN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9maXJzdF9vcHQgZiBtIHdpdGhcbiAgICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCBTb21lIHggLT4geFxuXG4gIGxldCBmaW5kX2ZpcnN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIHRyeVxuICAgICAgUy5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHkgLT5cbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHk7XG4gICAgICAgICAgICByYWlzZSBGaW5kX2JpbmRpbmdfZXhpdClcbiAgICAgICAgbTtcbiAgICAgIE5vbmVcbiAgICB3aXRoIEZpbmRfYmluZGluZ19leGl0IC0+ICFyZXNcblxuICAoKiBsaW5lYXIgdGltZSwgbXVzdCB0cmF2ZXJzZSB0aGUgd2hvbGUgc2V04oCmICopXG4gIGxldCBmaW5kX2xhc3Rfb3B0IGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgUy5pdGVyIChmdW4geCAtPiBpZiBmIHggdGhlbiByZXMgOj0gU29tZSB4KSBtO1xuICAgICFyZXNcblxuICBsZXQgZmluZF9sYXN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9sYXN0X29wdCBmIG0gd2l0aFxuICAgIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IFNvbWUgeCAtPiB4XG5cbiAgW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxuICBpbmNsdWRlIFNcblxuICAoKiBVc2UgZmluZF9sYXN0IHdoaWNoIGlzIGxpbmVhciB0aW1lIG9uIE9DYW1sIDwgNC4wNSAqKVxuICBsZXQgZmluZF9sYXN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIGxldCBfID1cbiAgICAgIGZpbmRfbGFzdF9vcHRcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICB8IFNvbWUgeSAtPlxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeTtcbiAgICAgICAgICAgIHRydWUpXG4gICAgICAgIG1cbiAgICBpblxuICAgICFyZXNcblxuICBsZXQgYWRkX3NlcSBzZXEgc2V0ID1cbiAgICBsZXQgc2V0ID0gcmVmIHNldCBpblxuICAgIFNlcS5pdGVyIChmdW4geCAtPiBzZXQgOj0gYWRkIHggIXNldCkgc2VxO1xuICAgICFzZXRcblxuICBsZXQgb2Zfc2VxIHMgPSBhZGRfc2VxIHMgZW1wdHlcblxuICBsZXQgYWRkX2l0ZXIgc2V0IGkgPVxuICAgIGxldCBzZXQgPSByZWYgc2V0IGluXG4gICAgaSAoZnVuIHggLT4gc2V0IDo9IGFkZCB4ICFzZXQpO1xuICAgICFzZXRcblxuICBsZXQgb2ZfaXRlciBzID0gYWRkX2l0ZXIgZW1wdHkgc1xuICBsZXQgdG9faXRlciBzIHlpZWxkID0gaXRlciB5aWVsZCBzXG4gIGxldCBhZGRfbGlzdCA9IExpc3QuZm9sZF9sZWZ0IChmdW4gc2V0IHggLT4gYWRkIHggc2V0KVxuICBsZXQgdG9fbGlzdCA9IGVsZW1lbnRzXG5cbiAgbGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIixcIikgZWx0X3RvX3N0cmluZyBoID1cbiAgICB0b19saXN0IGggfD4gQ0NMaXN0LnRvX3N0cmluZyB+c3RhcnQgfnN0b3AgfnNlcCBlbHRfdG9fc3RyaW5nXG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX3ggZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4geCAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF94IGZtdCB4KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQmFzaWMgU3RyaW5nIFV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxuXG4oKiBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgKilcblxuaW5jbHVkZSBTdHJpbmdcblxubGV0IGNvbXBhcmVfaW50IChhIDogaW50KSBiID0gU3RkbGliLmNvbXBhcmUgYSBiXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgaGFzaCBzID0gSGFzaHRibC5oYXNoIHNcbmxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoXG5sZXQgaXNfZW1wdHkgcyA9IGVxdWFsIHMgXCJcIlxuXG5sZXQgcmV2IHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGluaXQgbiAoZnVuIGkgLT4gcy5bbiAtIGkgLSAxXSlcblxubGV0IHJlYyBfdG9fbGlzdCBzIGFjYyBpIGxlbiA9XG4gIGlmIGxlbiA9IDAgdGhlblxuICAgIExpc3QucmV2IGFjY1xuICBlbHNlXG4gICAgX3RvX2xpc3QgcyAocy5baV0gOjogYWNjKSAoaSArIDEpIChsZW4gLSAxKVxuXG5sZXQgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW4gPVxuICBsZXQgcmVjIGNoZWNrIGsgPVxuICAgIGlmIGsgPSBsZW4gdGhlblxuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIENDQ2hhci5lcXVhbCBzdWIuW2kgKyBrXSBzLltqICsga10gJiYgY2hlY2sgKGsgKyAxKVxuICBpblxuICBqICsgbGVuIDw9IFN0cmluZy5sZW5ndGggcyAmJiBjaGVjayAwXG5cbmxldCBpc19zdWIgfnN1YiBpIHMgaiB+bGVuID1cbiAgaWYgaSArIGxlbiA+IFN0cmluZy5sZW5ndGggc3ViIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pc19zdWJcIjtcbiAgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW5cblxudHlwZSBfIGRpcmVjdGlvbiA9XG4gIHwgRGlyZWN0IDogWyBgRGlyZWN0IF0gZGlyZWN0aW9uXG4gIHwgUmV2ZXJzZSA6IFsgYFJldmVyc2UgXSBkaXJlY3Rpb25cblxuKCogd2UgZm9sbG93IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tudXRo4oCTTW9ycmlz4oCTUHJhdHRfYWxnb3JpdGhtICopXG5tb2R1bGUgRmluZCA9IHN0cnVjdFxuICB0eXBlICdhIGttcF9wYXR0ZXJuID0geyBmYWlsdXJlOiBpbnQgYXJyYXk7IHN0cjogc3RyaW5nIH1cbiAgKCogaW52YXJpYW50OiBbbGVuZ3RoIGZhaWx1cmUgPSBsZW5ndGggc3RyXS5cbiAgICAgV2UgdXNlIGEgcGhhbnRvbSB0eXBlIHRvIGF2b2lkIG1peGluZyB0aGUgZGlyZWN0aW9ucy4gKilcblxuICBsZXQga21wX3BhdHRlcm5fbGVuZ3RoIHAgPSBTdHJpbmcubGVuZ3RoIHAuc3RyXG5cbiAgKCogYWNjZXNzIHRoZSBbaV0tdGggZWxlbWVudCBvZiBbc10gYWNjb3JkaW5nIHRvIGRpcmVjdGlvbiBbZGlyXSAqKVxuICBsZXQgZ2V0XyA6IHR5cGUgYS4gZGlyOmEgZGlyZWN0aW9uIC0+IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9XG4gICBmdW4gfmRpciAtPlxuICAgIG1hdGNoIGRpciB3aXRoXG4gICAgfCBEaXJlY3QgLT4gU3RyaW5nLmdldFxuICAgIHwgUmV2ZXJzZSAtPiBmdW4gcyBpIC0+IHMuW1N0cmluZy5sZW5ndGggcyAtIGkgLSAxXVxuXG4gIGxldCBrbXBfY29tcGlsZV8gOiB0eXBlIGEuIGRpcjphIGRpcmVjdGlvbiAtPiBzdHJpbmcgLT4gYSBrbXBfcGF0dGVybiA9XG4gICBmdW4gfmRpciBzdHIgLT5cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHN0ciBpblxuICAgIGxldCBnZXQgPSBnZXRfIH5kaXIgaW5cbiAgICAoKiBob3cgdG8gcmVhZCBlbGVtZW50cyBvZiB0aGUgc3RyaW5nICopXG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IDAgLT4geyBmYWlsdXJlID0gW3x8XTsgc3RyIH1cbiAgICB8IDEgLT4geyBmYWlsdXJlID0gW3wgLTEgfF07IHN0ciB9XG4gICAgfCBfIC0+XG4gICAgICAoKiBhdCBsZWFzdCAyIGVsZW1lbnRzLCB0aGUgYWxnb3JpdGhtIGNhbiB3b3JrICopXG4gICAgICBsZXQgZmFpbHVyZSA9IEFycmF5Lm1ha2UgbGVuIDAgaW5cbiAgICAgIGZhaWx1cmUuKDApIDwtIC0xO1xuICAgICAgKCogaTogY3VycmVudCBpbmRleCBpbiBzdHIgKilcbiAgICAgIGxldCBpID0gcmVmIDIgaW5cbiAgICAgICgqIGo6IGluZGV4IG9mIGNhbmRpZGF0ZSBzdWJzdHJpbmcgKilcbiAgICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgICAgIG1hdGNoICFqIHdpdGhcbiAgICAgICAgfCBfIHdoZW4gQ0NDaGFyLmVxdWFsIChnZXQgc3RyICghaSAtIDEpKSAoZ2V0IHN0ciAhaikgLT5cbiAgICAgICAgICAoKiBzdWJzdHJpbmcgc3RhcnRpbmcgYXQgIWogY29udGludWVzIG1hdGNoaW5nIGN1cnJlbnQgY2hhciAqKVxuICAgICAgICAgIGluY3IgajtcbiAgICAgICAgICBmYWlsdXJlLighaSkgPC0gIWo7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIHwgMCAtPlxuICAgICAgICAgICgqIGJhY2sgdG8gdGhlIGJlZ2lubmluZyAqKVxuICAgICAgICAgIGZhaWx1cmUuKCFpKSA8LSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAoKiBmYWxsYmFjayBmb3IgdGhlIHByZWZpeCBzdHJpbmcgKilcbiAgICAgICAgICBhc3NlcnQgKCFqID4gMCk7XG4gICAgICAgICAgaiA6PSBmYWlsdXJlLighailcbiAgICAgIGRvbmU7XG4gICAgICAoKiBGb3JtYXQucHJpbnRmIFwie0BbZmFpbHVyZTolYSwgc3RyOiVzQF19QC5cIiBDQ0Zvcm1hdC4oYXJyYXkgaW50KSBmYWlsdXJlIHN0cjsgKilcbiAgICAgIHsgZmFpbHVyZTsgc3RyIH1cblxuICBsZXQga21wX2NvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOkRpcmVjdCBzXG4gIGxldCBrbXBfcmNvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOlJldmVyc2Ugc1xuXG4gICgqIHByb3BlciBzZWFyY2ggZnVuY3Rpb24uXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfZmluZCB+cGF0dGVybiBzIGlkeCA9XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gICAgbGV0IGkgPSByZWYgaWR4IGluXG4gICAgbGV0IGogPSByZWYgMCBpblxuICAgIGxldCBwYXRfbGVuID0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm4gaW5cbiAgICB3aGlsZSAhaiA8IHBhdF9sZW4gJiYgIWkgKyAhaiA8IGxlbiBkb1xuICAgICAgbGV0IGMgPSBTdHJpbmcuZ2V0IHMgKCFpICsgIWopIGluXG4gICAgICBsZXQgZXhwZWN0ZWQgPSBTdHJpbmcuZ2V0IHBhdHRlcm4uc3RyICFqIGluXG4gICAgICBpZiBDQ0NoYXIuZXF1YWwgYyBleHBlY3RlZCB0aGVuXG4gICAgICAgICgqIGNoYXIgbWF0Y2hlcyAqKVxuICAgICAgICBpbmNyIGpcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgZmFpbF9vZmZzZXQgPSBwYXR0ZXJuLmZhaWx1cmUuKCFqKSBpblxuICAgICAgICBpZiBmYWlsX29mZnNldCA+PSAwIHRoZW4gKFxuICAgICAgICAgIGFzc2VydCAoZmFpbF9vZmZzZXQgPCAhaik7XG4gICAgICAgICAgKCogZm9sbG93IHRoZSBmYWlsdXJlIGxpbmsgKilcbiAgICAgICAgICBpIDo9ICFpICsgIWogLSBmYWlsX29mZnNldDtcbiAgICAgICAgICBqIDo9IGZhaWxfb2Zmc2V0XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogYmVnaW5uaW5nIG9mIHBhdHRlcm4gKilcbiAgICAgICAgICBqIDo9IDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIClcbiAgICAgIClcbiAgICBkb25lO1xuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICAhaVxuICAgIGVsc2VcbiAgICAgIC0xXG5cbiAgKCogcHJvcGVyIHNlYXJjaCBmdW5jdGlvbiwgZnJvbSB0aGUgcmlnaHQuXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfcmZpbmQgfnBhdHRlcm4gcyBpZHggPVxuICAgIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICAgIGxldCBpID0gcmVmIChsZW4gLSBpZHggLSAxKSBpblxuICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICBsZXQgcGF0X2xlbiA9IGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuIGluXG4gICAgd2hpbGUgIWogPCBwYXRfbGVuICYmICFpICsgIWogPCBsZW4gZG9cbiAgICAgIGxldCBjID0gU3RyaW5nLmdldCBzIChsZW4gLSAhaSAtICFqIC0gMSkgaW5cbiAgICAgIGxldCBleHBlY3RlZCA9XG4gICAgICAgIFN0cmluZy5nZXQgcGF0dGVybi5zdHIgKFN0cmluZy5sZW5ndGggcGF0dGVybi5zdHIgLSAhaiAtIDEpXG4gICAgICBpblxuICAgICAgaWYgQ0NDaGFyLmVxdWFsIGMgZXhwZWN0ZWQgdGhlblxuICAgICAgICAoKiBjaGFyIG1hdGNoZXMgKilcbiAgICAgICAgaW5jciBqXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IGZhaWxfb2Zmc2V0ID0gcGF0dGVybi5mYWlsdXJlLighaikgaW5cbiAgICAgICAgaWYgZmFpbF9vZmZzZXQgPj0gMCB0aGVuIChcbiAgICAgICAgICBhc3NlcnQgKGZhaWxfb2Zmc2V0IDwgIWopO1xuICAgICAgICAgICgqIGZvbGxvdyB0aGUgZmFpbHVyZSBsaW5rICopXG4gICAgICAgICAgaSA6PSAhaSArICFqIC0gZmFpbF9vZmZzZXQ7XG4gICAgICAgICAgaiA6PSBmYWlsX29mZnNldFxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBwYXR0ZXJuICopXG4gICAgICAgICAgaiA6PSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICApXG4gICAgICApXG4gICAgZG9uZTtcbiAgICAoKiBhZGp1c3QgcmVzdWx0OiBmaXJzdCwgW3JlcyA9IHN0cmluZy5sZW5ndGggcyAtIHJlcyAtMV0gdG8gY29udmVydFxuICAgICAgIGJhY2sgdG8gcmVhbCBpbmRpY2VzOyB0aGVuLCB3aGF0IHdlIGdvdCBpcyBhY3R1YWxseSB0aGUgcG9zaXRpb25cbiAgICAgICBvZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBzbyB3ZSBzdWJ0cmFjdCB0aGUgW2xlbmd0aCBvZiB0aGUgcGF0dGVybiAtMV1cbiAgICAgICB0byBvYnRhaW4gdGhlIHJlYWwgcmVzdWx0LiAqKVxuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICBsZW4gLSAhaSAtIGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuXG4gICAgZWxzZVxuICAgICAgLTFcblxuICB0eXBlICdhIHBhdHRlcm4gPSBQX2NoYXIgb2YgY2hhciB8IFBfS01QIG9mICdhIGttcF9wYXR0ZXJuXG5cbiAgbGV0IHBhdHRlcm5fbGVuZ3RoID0gZnVuY3Rpb25cbiAgICB8IFBfY2hhciBfIC0+IDFcbiAgICB8IFBfS01QIHAgLT4ga21wX3BhdHRlcm5fbGVuZ3RoIHBcblxuICBsZXQgY29tcGlsZSBzdWIgOiBbIGBEaXJlY3QgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfY29tcGlsZSBzdWIpXG5cbiAgbGV0IHJjb21waWxlIHN1YiA6IFsgYFJldmVyc2UgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfcmNvbXBpbGUgc3ViKVxuXG4gIGxldCBmaW5kID8oc3RhcnQgPSAwKSB+KHBhdHRlcm4gOiBbIGBEaXJlY3QgXSBwYXR0ZXJuKSBzID1cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyBzdGFydCBjIHdpdGggTm90X2ZvdW5kIC0+IC0xKVxuICAgIHwgUF9LTVAgcGF0dGVybiAtPiBrbXBfZmluZCB+cGF0dGVybiBzIHN0YXJ0XG5cbiAgbGV0IHJmaW5kID9zdGFydCB+KHBhdHRlcm4gOiBbIGBSZXZlcnNlIF0gcGF0dGVybikgcyA9XG4gICAgbGV0IHN0YXJ0ID1cbiAgICAgIG1hdGNoIHN0YXJ0IHdpdGhcbiAgICAgIHwgU29tZSBuIC0+IG5cbiAgICAgIHwgTm9uZSAtPiBTdHJpbmcubGVuZ3RoIHMgLSAxXG4gICAgaW5cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLnJpbmRleF9mcm9tIHMgc3RhcnQgYyB3aXRoIE5vdF9mb3VuZCAtPiAtMSlcbiAgICB8IFBfS01QIHBhdHRlcm4gLT4ga21wX3JmaW5kIH5wYXR0ZXJuIHMgc3RhcnRcbmVuZFxuXG5sZXQgZmluZCA/KHN0YXJ0ID0gMCkgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLmZpbmQgfnN0YXJ0IH5wYXR0ZXJuIHNcblxubGV0IGZpbmRfYWxsID8oc3RhcnQgPSAwKSB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+XG4gICAgbGV0IGkgPSByZWYgc3RhcnQgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGxldCByZXMgPSBGaW5kLmZpbmQgfnN0YXJ0OiFpIH5wYXR0ZXJuIHMgaW5cbiAgICAgIGlmIHJlcyA9IH4tMSB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBpIDo9IHJlcyArIDE7XG4gICAgICAgICgqIHBvc3NpYmxlIG92ZXJsYXAgKilcbiAgICAgICAgU29tZSByZXNcbiAgICAgIClcblxubGV0IGZpbmRfYWxsX2wgP3N0YXJ0IH5zdWIgcyA9XG4gIGxldCByZWMgYXV4IGFjYyBnID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBTb21lIGkgLT4gYXV4IChpIDo6IGFjYykgZ1xuICBpblxuICBhdXggW10gKGZpbmRfYWxsID9zdGFydCB+c3ViIHMpXG5cbmxldCBtZW0gP3N0YXJ0IH5zdWIgcyA9IGZpbmQgP3N0YXJ0IH5zdWIgcyA+PSAwXG5cbmxldCByZmluZCB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLnJjb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLnJmaW5kIH5zdGFydDooU3RyaW5nLmxlbmd0aCBzIC0gMSkgfnBhdHRlcm4gc1xuXG4oKiBSZXBsYWNlIHN1YnN0cmluZyBbcy5bcG9zXSDigKYgcy5bcG9zK2xlbi0xXV0gYnkgW2J5XSBpbiBbc10gKilcbmxldCByZXBsYWNlX2F0XyB+cG9zIH5sZW4gfmJ5IHMgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKGxlbmd0aCBzICsgbGVuZ3RoIGJ5IC0gbGVuKSBpblxuICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgMCBwb3M7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGIgYnk7XG4gIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAocG9zICsgbGVuKSAoU3RyaW5nLmxlbmd0aCBzIC0gcG9zIC0gbGVuKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJlcGxhY2UgPyh3aGljaCA9IGBBbGwpIH5zdWIgfmJ5IHMgPVxuICBpZiBpc19lbXB0eSBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnJlcGxhY2VcIjtcbiAgbWF0Y2ggd2hpY2ggd2l0aFxuICB8IGBMZWZ0IC0+XG4gICAgbGV0IGkgPSBmaW5kIH5zdGFydDowIH5zdWIgcyBpblxuICAgIGlmIGkgPj0gMCB0aGVuXG4gICAgICByZXBsYWNlX2F0XyB+cG9zOmkgfmxlbjooU3RyaW5nLmxlbmd0aCBzdWIpIH5ieSBzXG4gICAgZWxzZVxuICAgICAgc1xuICB8IGBSaWdodCAtPlxuICAgIGxldCBpID0gcmZpbmQgfnN1YiBzIGluXG4gICAgaWYgaSA+PSAwIHRoZW5cbiAgICAgIHJlcGxhY2VfYXRfIH5wb3M6aSB+bGVuOihTdHJpbmcubGVuZ3RoIHN1YikgfmJ5IHNcbiAgICBlbHNlXG4gICAgICBzXG4gIHwgYEFsbCAtPlxuICAgICgqIGNvbXBpbGUgc2VhcmNoIHBhdHRlcm4gb25seSBvbmNlICopXG4gICAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgbGV0IHN0YXJ0ID0gcmVmIDAgaW5cbiAgICB3aGlsZSAhc3RhcnQgPCBTdHJpbmcubGVuZ3RoIHMgZG9cbiAgICAgIGxldCBpID0gRmluZC5maW5kIH5zdGFydDohc3RhcnQgfnBhdHRlcm4gcyBpblxuICAgICAgaWYgaSA+PSAwIHRoZW4gKFxuICAgICAgICAoKiBiZXR3ZWVuIGxhc3QgYW5kIGN1ciBvY2N1cnJlbmNlcyAqKVxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgIXN0YXJ0IChpIC0gIXN0YXJ0KTtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiBieTtcbiAgICAgICAgc3RhcnQgOj0gaSArIFN0cmluZy5sZW5ndGggc3ViXG4gICAgICApIGVsc2UgKFxuICAgICAgICAoKiBhZGQgcmVtYWluZGVyICopXG4gICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAhc3RhcnQgKFN0cmluZy5sZW5ndGggcyAtICFzdGFydCk7XG4gICAgICAgIHN0YXJ0IDo9IFN0cmluZy5sZW5ndGggcyAoKiBzdG9wICopXG4gICAgICApXG4gICAgZG9uZTtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuXG5tb2R1bGUgU3BsaXQgPSBzdHJ1Y3RcbiAgdHlwZSBkcm9wX2lmX2VtcHR5ID0geyBmaXJzdDogYm9vbDsgbGFzdDogYm9vbCB9XG5cbiAgbGV0IG5vX2Ryb3AgPSB7IGZpcnN0ID0gZmFsc2U7IGxhc3QgPSBmYWxzZSB9XG4gIGxldCBkZWZhdWx0X2Ryb3AgPSBub19kcm9wXG5cbiAgdHlwZSBzcGxpdF9zdGF0ZSA9IFNwbGl0U3RvcCB8IFNwbGl0QXQgb2YgaW50ICgqIHByZXZpb3VzICopXG5cbiAgbGV0IHJlYyBfc3BsaXQgfmJ5IHMgc3RhdGUgPVxuICAgIG1hdGNoIHN0YXRlIHdpdGhcbiAgICB8IFNwbGl0U3RvcCAtPiBOb25lXG4gICAgfCBTcGxpdEF0IHByZXYgLT4gX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2XG5cbiAgYW5kIF9zcGxpdF9zZWFyY2ggfmJ5IHMgcHJldiA9XG4gICAgbGV0IGogPSBGaW5kLmZpbmQgfnN0YXJ0OnByZXYgfnBhdHRlcm46YnkgcyBpblxuICAgIGlmIGogPCAwIHRoZW5cbiAgICAgIFNvbWUgKFNwbGl0U3RvcCwgcHJldiwgU3RyaW5nLmxlbmd0aCBzIC0gcHJldilcbiAgICBlbHNlXG4gICAgICBTb21lIChTcGxpdEF0IChqICsgRmluZC5wYXR0ZXJuX2xlbmd0aCBieSksIHByZXYsIGogLSBwcmV2KVxuXG4gIGxldCBfdHVwbGUzIHggeSB6ID0geCwgeSwgelxuXG4gIGxldCBfbWtnZW4gfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IHN0YXRlID0gcmVmIChTcGxpdEF0IDApIGluXG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBuZXh0ICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyAhc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT5cbiAgICAgICAgc3RhdGUgOj0gc3RhdGUnO1xuICAgICAgICBuZXh0ICgpXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBOb25lXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIFNvbWUgKGsgcyBpIGxlbilcbiAgICBpblxuICAgIG5leHRcblxuICBsZXQgZ2VuID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgZ2VuX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rZ2VuIH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rbGlzdCB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIGJ1aWxkIGFjYyBzdGF0ZSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBidWlsZCBhY2Mgc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBMaXN0LnJldiBhY2NcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IGJ1aWxkIChrIHMgaSBsZW4gOjogYWNjKSBzdGF0ZSdcbiAgICBpblxuICAgIGJ1aWxkIFtdIChTcGxpdEF0IDApXG5cbiAgbGV0IGxpc3RfID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGxpc3RfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rc2VxIH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgbWFrZSBzdGF0ZSAoKSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gbWFrZSBzdGF0ZScgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IFNlcS5Db25zIChrIHMgaSBsZW4sIG1ha2Ugc3RhdGUnKVxuICAgIGluXG4gICAgbWFrZSAoU3BsaXRBdCAwKVxuXG4gIGxldCBzZXEgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBzZXFfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtzZXEgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtfaXRlciB+ZHJvcCB+YnkgcyBmIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYXV4IHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gYXV4IHN0YXRlJ1xuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIGsgKGYgcyBpIGxlbik7XG4gICAgICAgIGF1eCBzdGF0ZSdcbiAgICBpblxuICAgIGF1eCAoU3BsaXRBdCAwKVxuXG4gIGxldCBpdGVyID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBpdGVyX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rX2l0ZXIgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBsZWZ0X2V4biB+YnkgcyA9XG4gICAgbGV0IGkgPSBmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IGxlZnQgfmJ5IHMgPSB0cnkgU29tZSAobGVmdF9leG4gfmJ5IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBsZXQgcmlnaHRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IHJmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IHJpZ2h0IH5ieSBzID0gdHJ5IFNvbWUgKHJpZ2h0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuZW5kXG5cbmxldCBzcGxpdCB+YnkgcyA9IFNwbGl0Lmxpc3RfY3B5IH5ieSBzXG5cbmxldCBjb21wYXJlX3ZlcnNpb25zIGEgYiA9XG4gIGxldCBvZl9pbnQgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmUgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggb2ZfaW50IHgsIG9mX2ludCB5IHdpdGhcbiAgICAgIHwgTm9uZSwgTm9uZSAtPlxuICAgICAgICBsZXQgYyA9IFN0cmluZy5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBhKSAoU3BsaXQuZ2VuX2NweSB+Ynk6XCIuXCIgYilcblxudHlwZSBuYXRfY2h1bmsgPSBOQ19jaGFyIG9mIGNoYXIgfCBOQ19pbnQgb2YgaW50XG5cbmxldCBjb21wYXJlX25hdHVyYWwgYSBiID1cbiAgKCogc3RyZWFtIG9mIGNodW5rcyAqKVxuICBsZXQgY2h1bmtzIHMgOiB1bml0IC0+IG5hdF9jaHVuayBvcHRpb24gPVxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgcmVjIG5leHQgKCkgPVxuICAgICAgaWYgIWkgPSBsZW5ndGggcyB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnKVxuICAgICAgICB8IGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgU29tZSAoTkNfY2hhciBjKVxuICAgICAgKVxuICAgIGFuZCByZWFkX2ludCBuID1cbiAgICAgIGlmICFpID0gbGVuZ3RoIHMgdGhlblxuICAgICAgICBTb21lIChOQ19pbnQgbilcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoKDEwICogbikgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcpXG4gICAgICAgIHwgXyAtPiBTb21lIChOQ19pbnQgbilcbiAgICAgIClcbiAgICBpblxuICAgIG5leHRcbiAgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggeCwgeSB3aXRoXG4gICAgICB8IE5DX2NoYXIgeCwgTkNfY2hhciB5IC0+XG4gICAgICAgIGxldCBjID0gQ2hhci5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IE5DX2ludCBfLCBOQ19jaGFyIF8gLT4gMVxuICAgICAgfCBOQ19jaGFyIF8sIE5DX2ludCBfIC0+IC0xXG4gICAgICB8IE5DX2ludCB4LCBOQ19pbnQgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChjaHVua3MgYSkgKGNodW5rcyBiKVxuXG5sZXQgZWRpdF9kaXN0YW5jZSA/KGN1dG9mZiA9IG1heF9pbnQpIHMxIHMyID1cbiAgbGV0IG4xID0gbGVuZ3RoIHMxIGluXG4gIGxldCBuMiA9IGxlbmd0aCBzMiBpblxuICBpZiBuMSA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjJcbiAgZWxzZSBpZiBuMiA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjFcbiAgZWxzZSBpZiBlcXVhbCBzMSBzMiB0aGVuXG4gICAgMFxuICBlbHNlIGlmIG4xIC0gbjIgPj0gY3V0b2ZmIHx8IG4yIC0gbjEgPj0gY3V0b2ZmIHRoZW5cbiAgICBjdXRvZmZcbiAgKCogYXQgbGVhc3QgY3V0b2ZmIGluc2VydHMgKilcbiAgZWxzZSAoXG4gICAgdHJ5XG4gICAgICAoKiBkaXN0YW5jZSB2ZWN0b3JzICh2MD1wcmV2aW91cywgdjE9Y3VycmVudCkgKilcbiAgICAgIGxldCB2MCA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgIGxldCB2MSA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgICgqIGluaXRpYWxpemUgdjA6IHYwKGkpID0gQSgwKShpKSA9IGRlbGV0ZSBpIGNoYXJzIGZyb20gdCAqKVxuICAgICAgbGV0IGxvd2VyX2JvdW5kID0gcmVmIG1heF9pbnQgaW5cbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczIgZG9cbiAgICAgICAgdjAuKGkpIDwtIGlcbiAgICAgIGRvbmU7XG4gICAgICAoKiBtYWluIGxvb3AgZm9yIHRoZSBib3R0b20gdXAgZHluYW1pYyBhbGdvcml0aG0gKilcbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczEgLSAxIGRvXG4gICAgICAgICgqIGZpcnN0IGVkaXQgZGlzdGFuY2UgaXMgdGhlIGRlbGV0aW9uIG9mIGkrMSBlbGVtZW50cyBmcm9tIHMgKilcbiAgICAgICAgdjEuKDApIDwtIGkgKyAxO1xuXG4gICAgICAgICgqIHRyeSBhZGQvZGVsZXRlL3JlcGxhY2Ugb3BlcmF0aW9ucyAqKVxuICAgICAgICBmb3IgaiA9IDAgdG8gbGVuZ3RoIHMyIC0gMSBkb1xuICAgICAgICAgIGxldCBjb3N0ID1cbiAgICAgICAgICAgIGlmIENoYXIuZXF1YWwgKFN0cmluZy5nZXQgczEgaSkgKFN0cmluZy5nZXQgczIgaikgdGhlblxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICBpblxuICAgICAgICAgIHYxLihqICsgMSkgPC0gbWluICh2MS4oaikgKyAxKSAobWluICh2MC4oaiArIDEpICsgMSkgKHYwLihqKSArIGNvc3QpKVxuICAgICAgICBkb25lO1xuXG4gICAgICAgIGlmXG4gICAgICAgICAgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxXG4gICAgICAgICAgJiYgaSA8PSAyICogY3V0b2ZmXG4gICAgICAgICAgJiYgKDIgKiBjdXRvZmYpIC0gaSA8IFN0cmluZy5sZW5ndGggczJcbiAgICAgICAgdGhlblxuICAgICAgICAgIGxvd2VyX2JvdW5kIDo9IG1pbiAhbG93ZXJfYm91bmQgdjEuKCgyICogY3V0b2ZmKSAtIGkpO1xuICAgICAgICAoKiBkaWQgd2UgY29tcHV0ZSB1cCB0byB0aGUgZGlhZ29uYWwgMipjdXRvZmYrMT8gKilcbiAgICAgICAgaWYgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxICYmIGkgPSBjdXRvZmYgKiAyICYmICFsb3dlcl9ib3VuZCA+PSBjdXRvZmZcbiAgICAgICAgdGhlblxuICAgICAgICAgIHJhaXNlX25vdHJhY2UgRXhpdDtcblxuICAgICAgICAoKiBjb3B5IHYxIGludG8gdjAgZm9yIG5leHQgaXRlcmF0aW9uICopXG4gICAgICAgIEFycmF5LmJsaXQgdjEgMCB2MCAwIChsZW5ndGggczIgKyAxKVxuICAgICAgZG9uZTtcbiAgICAgIHYxLihsZW5ndGggczIpXG4gICAgd2l0aCBFeGl0IC0+IGN1dG9mZlxuICApXG5cbmxldCByZXBlYXQgcyBuID1cbiAgYXNzZXJ0IChuID49IDApO1xuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGFzc2VydCAobGVuID4gMCk7XG4gIGluaXQgKGxlbiAqIG4pIChmdW4gaSAtPiBzLltpIG1vZCBsZW5dKVxuXG5sZXQgcHJlZml4IH5wcmUgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHByZSBpblxuICBpZiBsZW4gPiBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIGZhbHNlXG4gIGVsc2UgKFxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZiBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIGkpIChTdHJpbmcudW5zYWZlX2dldCBwcmUgaSlcbiAgICAgIHRoZW5cbiAgICAgICAgZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgY2hlY2sgKGkgKyAxKVxuICAgIGluXG4gICAgY2hlY2sgMFxuICApXG5cbmxldCBzdWZmaXggfnN1ZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3VmIGluXG4gIGlmIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IG9mZiA9IFN0cmluZy5sZW5ndGggcyAtIGxlbiBpblxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZlxuICAgICAgICBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIChvZmYgKyBpKSkgKFN0cmluZy51bnNhZmVfZ2V0IHN1ZiBpKVxuICAgICAgdGhlblxuICAgICAgICBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBjaGVjayAoaSArIDEpXG4gICAgaW5cbiAgICBjaGVjayAwXG4gIClcblxubGV0IHRha2UgbiBzID1cbiAgaWYgbiA8IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgU3RyaW5nLnN1YiBzIDAgblxuICBlbHNlXG4gICAgc1xuXG5sZXQgZHJvcCBuIHMgPVxuICBpZiBuIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgbiAoU3RyaW5nLmxlbmd0aCBzIC0gbilcbiAgZWxzZVxuICAgIFwiXCJcblxubGV0IHRha2VfZHJvcCBuIHMgPSB0YWtlIG4gcywgZHJvcCBuIHNcblxubGV0IGNob3Bfc3VmZml4IH5zdWYgcyA9XG4gIGlmIHN1ZmZpeCB+c3VmIHMgdGhlblxuICAgIFNvbWUgKFN0cmluZy5zdWIgcyAwIChTdHJpbmcubGVuZ3RoIHMgLSBTdHJpbmcubGVuZ3RoIHN1ZikpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBjaG9wX3ByZWZpeCB+cHJlIHMgPVxuICBpZiBwcmVmaXggfnByZSBzIHRoZW5cbiAgICBTb21lXG4gICAgICAoU3RyaW5nLnN1YiBzIChTdHJpbmcubGVuZ3RoIHByZSkgKFN0cmluZy5sZW5ndGggcyAtIFN0cmluZy5sZW5ndGggcHJlKSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGJsaXQgPSBTdHJpbmcuYmxpdFxuXG5sZXQgZm9sZCBmIGFjYyBzID1cbiAgbGV0IHJlYyBmb2xkX3JlYyBmIGFjYyBzIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZF9yZWMgZiAoZiBhY2Mgcy5baV0pIHMgKGkgKyAxKVxuICBpblxuICBmb2xkX3JlYyBmIGFjYyBzIDBcblxubGV0IGZvbGRpIGYgYWNjIHMgPVxuICBsZXQgcmVjIGZvbGRfcmVjIGYgYWNjIHMgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkX3JlYyBmIChmIGFjYyBpIHMuW2ldKSBzIChpICsgMSlcbiAgaW5cbiAgZm9sZF9yZWMgZiBhY2MgcyAwXG5cbmxldCBwYWQgPyhzaWRlID0gYExlZnQpID8oYyA9ICcgJykgbiBzID1cbiAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGlmIGxlbl9zID49IG4gdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IHBhZF9sZW4gPSBuIC0gbGVuX3MgaW5cbiAgICBtYXRjaCBzaWRlIHdpdGhcbiAgICB8IGBMZWZ0IC0+XG4gICAgICBpbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgaWYgaSA8IHBhZF9sZW4gdGhlblxuICAgICAgICAgICAgY1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHMuW2kgLSBwYWRfbGVuXSlcbiAgICB8IGBSaWdodCAtPlxuICAgICAgaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgIGlmIGkgPCBsZW5fcyB0aGVuXG4gICAgICAgICAgICBzLltpXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGMpXG4gIClcblxubGV0IF90b19nZW4gcyBpMCBsZW4gPVxuICBsZXQgaSA9IHJlZiBpMCBpblxuICBmdW4gKCkgLT5cbiAgICBpZiAhaSA9IGkwICsgbGVuIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlIChcbiAgICAgIGxldCBjID0gU3RyaW5nLnVuc2FmZV9nZXQgcyAhaSBpblxuICAgICAgaW5jciBpO1xuICAgICAgU29tZSBjXG4gICAgKVxuXG5sZXQgdG9fZ2VuIHMgPSBfdG9fZ2VuIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxubGV0IG9mX2NoYXIgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgbGV0IHJlYyBhdXggKCkgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBCdWZmZXIuY29udGVudHMgYlxuICAgIHwgU29tZSBjIC0+XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYiBjO1xuICAgICAgYXV4ICgpXG4gIGluXG4gIGF1eCAoKVxuXG5sZXQgdG9faXRlciBzIGsgPSBTdHJpbmcuaXRlciBrIHNcblxubGV0IHJlYyBfdG9fc2VxIHMgaSBsZW4gKCkgPVxuICBpZiBsZW4gPSAwIHRoZW5cbiAgICBTZXEuTmlsXG4gIGVsc2VcbiAgICBTZXEuQ29ucyAocy5baV0sIF90b19zZXEgcyAoaSArIDEpIChsZW4gLSAxKSlcblxubGV0IHRvX3NlcSBzID0gX3RvX3NlcSBzIDAgKFN0cmluZy5sZW5ndGggcylcblxubGV0IG9mX2l0ZXIgaSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBpIChCdWZmZXIuYWRkX2NoYXIgYik7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIFNlcS5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYikgc2VxO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgdG9fbGlzdCBzID0gX3RvX2xpc3QgcyBbXSAwIChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBvZl9saXN0IGwgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgTGlzdC5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYnVmKSBsO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBvZl9hcnJheSBhID0gaW5pdCAoQXJyYXkubGVuZ3RoIGEpIChmdW4gaSAtPiBhLihpKSlcbmxldCB0b19hcnJheSBzID0gQXJyYXkuaW5pdCAoU3RyaW5nLmxlbmd0aCBzKSAoZnVuIGkgLT4gcy5baV0pXG5cbmxldCBsaW5lc19nZW4gcyA9XG4gIFNwbGl0Lmdlbl9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzX2l0ZXIgcyA9XG4gIFNwbGl0Lml0ZXJfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lc19zZXEgcyA9XG4gIFNwbGl0LnNlcV9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzIHMgPVxuICBTcGxpdC5saXN0X2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgY29uY2F0X2dlbl9idWYgfnNlcCBnIDogQnVmZmVyLnQgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCByZWMgYXV4IH5maXJzdCAoKSA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IGJcbiAgICB8IFNvbWUgcyAtPlxuICAgICAgaWYgbm90IGZpcnN0IHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gICAgICBhdXggfmZpcnN0OmZhbHNlICgpXG4gIGluXG4gIGF1eCB+Zmlyc3Q6dHJ1ZSAoKVxuXG5sZXQgY29uY2F0X2dlbiB+c2VwIGcgPVxuICBsZXQgYnVmID0gY29uY2F0X2dlbl9idWYgfnNlcCBnIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGNvbmNhdF9pdGVyX2J1ZiB+c2VwIGkgOiBCdWZmZXIudCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBpIChmdW4gcyAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzKTtcbiAgYnVmXG5cbmxldCBjb25jYXRfaXRlciB+c2VwIGkgPVxuICBsZXQgYnVmID0gY29uY2F0X2l0ZXJfYnVmIH5zZXAgaSBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjb25jYXRfc2VxX2J1ZiB+c2VwIHNlcSA6IEJ1ZmZlci50ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBzIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHMpXG4gICAgc2VxO1xuICBidWZcblxubGV0IGNvbmNhdF9zZXEgfnNlcCBzZXEgPVxuICBsZXQgYnVmID0gY29uY2F0X3NlcV9idWYgfnNlcCBzZXEgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lcyBsID1cbiAgbGV0IGxlbiA9IExpc3QuZm9sZF9sZWZ0IChmdW4gbiBzIC0+IG4gKyAxICsgU3RyaW5nLmxlbmd0aCBzKSAwIGwgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBsZW4gaW5cbiAgbGV0IHJlYyBhdXhfYmxpdCBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT5cbiAgICAgIGFzc2VydCAoaSA9IGxlbik7XG4gICAgICBCeXRlcy50b19zdHJpbmcgYnVmXG4gICAgfCBzIDo6IHRhaWwgLT5cbiAgICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgQnl0ZXMuYmxpdF9zdHJpbmcgcyAwIGJ1ZiBpIGxlbl9zO1xuICAgICAgQnl0ZXMuc2V0IGJ1ZiAoaSArIGxlbl9zKSAnXFxuJztcbiAgICAgIGF1eF9ibGl0IChpICsgbGVuX3MgKyAxKSB0YWlsXG4gIGluXG4gIGF1eF9ibGl0IDAgbFxuXG5sZXQgdW5saW5lc19nZW4gZyA9XG4gIGxldCBidWYgPSBjb25jYXRfZ2VuX2J1ZiB+c2VwOlwiXFxuXCIgZyBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzX2l0ZXIgaSA9XG4gIGxldCBidWYgPSBjb25jYXRfaXRlcl9idWYgfnNlcDpcIlxcblwiIGkgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lc19zZXEgc2VxID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9zZXFfYnVmIH5zZXA6XCJcXG5cIiBzZXEgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgc2V0IHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnNldFwiO1xuICBpbml0IChTdHJpbmcubGVuZ3RoIHMpIChmdW4gaiAtPlxuICAgICAgaWYgaSA9IGogdGhlblxuICAgICAgICBjXG4gICAgICBlbHNlXG4gICAgICAgIHMuW2pdKVxuXG5sZXQgaXRlciA9IFN0cmluZy5pdGVyXG5cbmxldCBmaWx0ZXJfbWFwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgIG1hdGNoIGYgYyB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBjJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMnKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGZpbHRlciBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyIChmdW4gYyAtPiBpZiBmIGMgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVuaXEgZXEgcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA9IDAgdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuWzBdO1xuICAgIGxldCBfID1cbiAgICAgIGZvbGRcbiAgICAgICAgKGZ1biBwcmV2aW91c19jIGMgLT5cbiAgICAgICAgICBpZiBub3QgKGVxIHByZXZpb3VzX2MgYykgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7XG4gICAgICAgICAgYylcbiAgICAgICAgcy5bMF0gc1xuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICApXG5cbmxldCBmbGF0X21hcCA/c2VwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJpXG4gICAgKGZ1biBpIGMgLT5cbiAgICAgIChtYXRjaCBzZXAgd2l0aFxuICAgICAgfCBTb21lIF8gd2hlbiBpID0gMCAtPiAoKVxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgc2VwIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXApO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChmIGMpKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxuZXhjZXB0aW9uIE15RXhpdFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICB0cnlcbiAgICBpdGVyIChmdW4gYyAtPiBpZiBub3QgKHAgYykgdGhlbiByYWlzZSBNeUV4aXQpIHM7XG4gICAgdHJ1ZVxuICB3aXRoIE15RXhpdCAtPiBmYWxzZVxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIHRyeVxuICAgIGl0ZXIgKGZ1biBjIC0+IGlmIHAgYyB0aGVuIHJhaXNlIE15RXhpdCkgcztcbiAgICBmYWxzZVxuICB3aXRoIE15RXhpdCAtPiB0cnVlXG5cbmxldCBkcm9wX3doaWxlIGYgcyA9XG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW5ndGggcyAmJiBmICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGlmICFpID4gMCB0aGVuXG4gICAgc3ViIHMgIWkgKGxlbmd0aCBzIC0gIWkpXG4gIGVsc2VcbiAgICBzXG5cbmxldCByZHJvcF93aGlsZSBmIHMgPVxuICBsZXQgaSA9IHJlZiAobGVuZ3RoIHMgLSAxKSBpblxuICB3aGlsZSAhaSA+PSAwICYmIGYgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBkZWNyIGlcbiAgZG9uZTtcbiAgaWYgIWkgPCBsZW5ndGggcyAtIDEgdGhlblxuICAgIHN1YiBzIDAgKCFpICsgMSlcbiAgZWxzZVxuICAgIHNcblxuKCogbm90aW9uIG9mIHdoaXRlc3BhY2UgZm9yIHRyaW0gKilcbmxldCBpc19zcGFjZV8gPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IGx0cmltIHMgPSBkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5sZXQgcnRyaW0gcyA9IHJkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5cbmxldCBtYXAyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5tYXAyXCI7XG4gIGluaXQgKFN0cmluZy5sZW5ndGggczEpIChmdW4gaSAtPiBmIHMxLltpXSBzMi5baV0pXG5cbmxldCBpdGVyMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcjJcIjtcbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggczEgLSAxIGRvXG4gICAgZiBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGl0ZXJpMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcmkyXCI7XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMxIC0gMSBkb1xuICAgIGYgaSBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGZvbGQyIGYgYWNjIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuZm9sZDJcIjtcbiAgbGV0IHJlYyBmb2xkJyBhY2MgczEgczIgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggczEgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZCcgKGYgYWNjIHMxLltpXSBzMi5baV0pIHMxIHMyIChpICsgMSlcbiAgaW5cbiAgZm9sZCcgYWNjIHMxIHMyIDBcblxubGV0IGZvcl9hbGwyIHAgczEgczIgPVxuICB0cnlcbiAgICBpdGVyMiAoZnVuIGMxIGMyIC0+IGlmIG5vdCAocCBjMSBjMikgdGhlbiByYWlzZSBNeUV4aXQpIHMxIHMyO1xuICAgIHRydWVcbiAgd2l0aCBNeUV4aXQgLT4gZmFsc2VcblxubGV0IGV4aXN0czIgcCBzMSBzMiA9XG4gIHRyeVxuICAgIGl0ZXIyIChmdW4gYzEgYzIgLT4gaWYgcCBjMSBjMiB0aGVuIHJhaXNlIE15RXhpdCkgczEgczI7XG4gICAgZmFsc2VcbiAgd2l0aCBNeUV4aXQgLT4gdHJ1ZVxuXG4oKiogezIgQXNjaWkgZnVuY3Rpb25zfSAqKVxuXG5sZXQgZXF1YWxfY2FzZWxlc3MgczEgczIgOiBib29sID1cbiAgU3RyaW5nLmxlbmd0aCBzMSA9IFN0cmluZy5sZW5ndGggczJcbiAgJiYgZm9yX2FsbDJcbiAgICAgICAoZnVuIGMxIGMyIC0+XG4gICAgICAgICBDQ0NoYXIuZXF1YWwgKENDQ2hhci5sb3dlcmNhc2VfYXNjaWkgYzEpIChDQ0NoYXIubG93ZXJjYXNlX2FzY2lpIGMyKSlcbiAgICAgICBzMSBzMlxuXG5sZXQgdG9faGV4IChzIDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIGxldCBpX3RvX2hleCAoaSA6IGludCkgPVxuICAgIGlmIGkgPCAxMCB0aGVuXG4gICAgICBDaGFyLmNociAoaSArIENoYXIuY29kZSAnMCcpXG4gICAgZWxzZVxuICAgICAgQ2hhci5jaHIgKGkgLSAxMCArIENoYXIuY29kZSAnYScpXG4gIGluXG5cbiAgbGV0IHJlcyA9IEJ5dGVzLmNyZWF0ZSAoMiAqIGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbGV0IG4gPSBDaGFyLmNvZGUgKGdldCBzIGkpIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAoMiAqIGkpIChpX3RvX2hleCAoKG4gbGFuZCAweGYwKSBsc3IgNCkpO1xuICAgIEJ5dGVzLnNldCByZXMgKCgyICogaSkgKyAxKSAoaV90b19oZXggKG4gbGFuZCAweDBmKSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxubGV0IG9mX2hleF9leG4gKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IG5fb2ZfYyA9IGZ1bmN0aW9uXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnYScgLi4gJ2YnIGFzIGMgLT4gMTAgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYSdcbiAgICB8ICdBJyAuLiAnRicgYXMgYyAtPiAxMCArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJ1xuICAgIHwgXyAtPiBpbnZhbGlkX2FyZyBcInN0cmluZzogaW52YWxpZCBoZXhcIlxuICBpblxuICBpZiBTdHJpbmcubGVuZ3RoIHMgbW9kIDIgPD4gMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJzdHJpbmc6IGhleCBzZXF1ZW5jZSBtdXN0IGJlIG9mIGV2ZW4gbGVuZ3RoXCI7XG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChTdHJpbmcubGVuZ3RoIHMgLyAyKSAnXFx4MDAnIGluXG4gIGZvciBpID0gMCB0byAoU3RyaW5nLmxlbmd0aCBzIC8gMikgLSAxIGRvXG4gICAgbGV0IG4xID0gbl9vZl9jIChTdHJpbmcuZ2V0IHMgKDIgKiBpKSkgaW5cbiAgICBsZXQgbjIgPSBuX29mX2MgKFN0cmluZy5nZXQgcyAoKDIgKiBpKSArIDEpKSBpblxuICAgIGxldCBuID0gKG4xIGxzbCA0KSBsb3IgbjIgaW5cbiAgICBCeXRlcy5zZXQgcmVzIGkgKENoYXIuY2hyIG4pXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbmxldCBvZl9oZXggcyA9IHRyeSBTb21lIChvZl9oZXhfZXhuIHMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IHBwX2J1ZiBidWYgcyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuXG5sZXQgcHAgZm10IHMgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCJcXFwiJXNcXFwiXCIgc1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApID0gZXF1YWxcbiAgbGV0ICggPD4gKSBhIGIgPSBub3QgKGVxdWFsIGEgYilcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwib3BlbiBMZXhpbmdcblxuZXhjZXB0aW9uIExleF9lcnJvciBvZiBzdHJpbmdcblxubGV0IGxleF9lcnJvciBlcnIgPSByYWlzZSAoTGV4X2Vycm9yIGVycilcblxubGV0IGVycm9yX3BvcyBsZXhidWYgPSBcbiAgbGV0IHN0YXJ0ID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxldCBjbnVtID0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHN0YXJ0LnBvc19ib2wgaW5cbiAgbGV0IGVudW0gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gc3RhcnQucG9zX2JvbCBpblxuICAoc3RhcnQucG9zX2xudW0sIGNudW0sIGVudW0pXG5cbmxldCBlcnJvcl9wb3NfbXNnIChsZXhidWYgOiBMZXhpbmcubGV4YnVmKSA9XG4gIGxldCAobGluZSwgY251bSwgZW51bSkgPSBlcnJvcl9wb3MgbGV4YnVmIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgbGluZSBjbnVtIGVudW1cblxubGV0IHN0cmluZzJudW0gcyA9XG4gIHRyeSAoVG9rZW5zLklOVCAoaW50X29mX3N0cmluZyBzKSkgd2l0aFxuICB8IEZhaWx1cmUgXyAtPiBUb2tlbnMuTEFSR0VJTlQgc1xuXG5sZXQgdXBkYXRlX3BvcyBsZXhidWYgPVxuICBsZXQgcG9zID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxleGJ1Zi5sZXhfc3RhcnRfcCA8LVxuICAgIHsgcG9zIHdpdGggcG9zX2JvbCA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zO1xuICAgICAgICAgICAgICAgcG9zX2xudW0gPSBwb3MucG9zX2xudW0gKyAxXG4gICAgfVxuXG5sZXQgaW50X29mX2hleGNoYXIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJy4uJzknIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCdcbiAgfCAnYScuLidmJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ2EnICsgMTBcbiAgfCAnQScuLidGJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ0EnICsgMTBcbiAgfCBjIC0+IGxleF9lcnJvciAoXCJpbnZhbGlkIGhleCBjaGFyIGluIHVuaWNvZGUgZXNjYXBlOiAnXCIgXiAoU3RyaW5nLm1ha2UgMSBjKSBeIFwiJ1wiKVxuXG5cbmxldCB1dGY4X29mX2NvZGUgYnVmIGlkeCB1ID1cbiAgbGV0IGkgPSByZWYgaWR4IGluXG5cbiAgbGV0IGFkZF9jaGFyIGIgYyA9IEJ5dGVzLnVuc2FmZV9zZXQgYiAhaSBjOyBpIDo9ICFpICsgMSBpblxuXG4gIGxldCBtYXhfdXNlZF9iaXRzIG4gdSA9ICh1IGxzciBuKSA9IDAgaW5cblxuICBpZiBtYXhfdXNlZF9iaXRzIDcgdSB0aGVuXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociB1KVxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMTEgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTAwMDAwMCBsb3IgKCh1IGxzciA2KSBsYW5kIDBiMDAwMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSlcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAxNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAwMDExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKVxuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDIxIHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDAwMDExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAyNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTExMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAwMDAwMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmRcbiAgZWxzZSBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTExMDAgbG9yICgodSBsc3IgMzApIGxhbmQgMGIwMDAwMDAwMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmQ7XG4gICFpXG5cbmxldCB1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIGJ1ZiBpZHggaGlnaCBsb3cgPVxuICBsZXQgaGlnaCA9IGhpZ2ggLSAweEQ4MDAgaW5cbiAgbGV0IGxvdyA9IGxvdyAtIDB4REMwMCBpblxuICBsZXQgY29kZSA9IDB4MTAwMDAgKyAoKGhpZ2ggbHNsIDEwKSBsb3IgbG93KSBpblxuICAgIHV0Zjhfb2ZfY29kZSBidWYgaWR4IGNvZGVcblxubGV0IGVzY2FwaW5nX2Vycm9yIG1zZyBzIGMgb2ZmID1cbiAgbGV0IG9mZnMgPSBzdHJpbmdfb2ZfaW50IG9mZiBpblxuICBsZXQgY3MgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgU29tZSBjIC0+IFwiICdcIiBeIChTdHJpbmcubWFrZSAxIGMpIF4gXCInIFwiXG4gICAgfCBOb25lIC0+IFwiXCJcbiAgaW5cbiAgICBsZXhfZXJyb3IgKG1zZyBeIFwiIGF0IG9mZnNldCBcIiBeIG9mZnMgXiBjcyBeIFwiOiBcIiBeIHMpXG5cbmxldCB1bmVzY2FwZV9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBzJyA9IEJ5dGVzLmNyZWF0ZSBsIGluXG4gIGxldCBqID0gcmVmIDAgaW5cbiAgbGV0IHUxID0gcmVmIDAgaW5cbiAgbGV0IHUyID0gcmVmIDAgaW5cbiAgbGV0IHN0YXRlID0gcmVmIGBDaGFyIGluXG5cbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgbWF0Y2ggIXN0YXRlIHdpdGhcbiAgICB8IGBDaGFyIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICAgICB8ICdcXFxcJyAtPiBzdGF0ZSA6PSBgRXNjYXBlXG4gICAgICAgICB8IGMgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiBjOyBqIDo9ICFqICsgMVxuICAgICAgIGVuZDtcbiAgICB8IGBFc2NhcGUgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICB8ICdcIicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1wiJzsgICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnXFxcXCcgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxcXCc7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnLycgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJy8nOyAgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdiJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxiJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdmJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFwwMTInOyBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICduJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxuJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdyJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxyJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd0JyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFx0JzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd1JyAgLT4gc3RhdGUgOj0gYFUxX2gxXG4gICAgICAgfCBfICAgIC0+IGVzY2FwaW5nX2Vycm9yIFwiaW52YWxpZCBlc2NhcGUgaW4gc3RyaW5nXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZW5kO1xuICAgIHwgYFUxX2gxIC0+IHUxIDo9IGludF9vZl9oZXhjaGFyIHMuW2ldOyAgc3RhdGUgOj0gYFUxX2gyXG4gICAgfCBgVTFfaDIgLT4gdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTFfaDNcbiAgICB8IGBVMV9oMyAtPiB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMV9oNFxuICAgIHwgYFUxX2g0IC0+XG4gICAgICB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTtcbiAgICAgIGlmICF1MSA+PSAweEQ4MDAgJiYgIXUxIDw9IDB4REJGRiB0aGVuXG4gICAgICAgIHN0YXRlIDo9IGBVMl9ic1xuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBqIDo9IHV0Zjhfb2ZfY29kZSBzJyAhaiAhdTE7XG4gICAgICAgIHN0YXRlIDo9IGBDaGFyXG4gICAgICBlbmRcbiAgICB8IGBVMl9icyAtPlxuICAgICAgaWYgcy5baV0gPD4gJ1xcXFwnIHRoZW5cbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJleHBlY3RlZCBsb3cgc3Vycm9nYXRlIGVzY2FwZSBjaGFyIChcXFxcKVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX3VcbiAgICB8IGBVMl91IC0+XG4gICAgICBpZiBzLltpXSA8PiAndScgdGhlblxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImV4cGVjdGVkIGxvdyBzdXJyb2dhdGUgZXNjYXBlIHNlcXVlbmNlICh1KVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX2gxXG4gICAgfCBgVTJfaDEgLT4gdTIgOj0gaW50X29mX2hleGNoYXIgcy5baV07ICBzdGF0ZSA6PSBgVTJfaDJcbiAgICB8IGBVMl9oMiAtPiB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMl9oM1xuICAgIHwgYFUyX2gzIC0+IHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUyX2g0XG4gICAgfCBgVTJfaDQgLT5cbiAgICAgIHN0YXRlIDo9IGBDaGFyO1xuICAgICAgdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7XG4gICAgICBpZiAhdTIgPj0gMHhEQzAwICYmICF1MiA8PSAweERGRkYgdGhlblxuICAgICAgICBqIDo9IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgcycgIWogIXUxICF1MiBcbiAgICAgIGVsc2VcbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJpbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRidcIiBzIE5vbmUgaVxuICBkb25lO1xuICBiZWdpblxuICAgIG1hdGNoICFzdGF0ZSB3aXRoXG4gICAgfCBgQ2hhciAtPiAoKVxuICAgIHwgXyAtPiBlc2NhcGluZ19lcnJvciBcImVuZCBvZiBzdHJpbmcgaW4gZXNjYXBlIHNlcXVlbmNlXCIgcyBOb25lIGxcbiAgZW5kO1xuICBpZiAhaiA8PiBsIHRoZW4gQnl0ZXMudW5zYWZlX3RvX3N0cmluZyAoQnl0ZXMuc3ViIHMnIDAgIWopIGVsc2Ugc1xuXG4iLCIoKiBjb250YWlucyB0aGUgbGluZSBhbmQgY2hhcmFjdGVyIHNwYW4gb2Ygd2hlcmUgdGhlIGVycm9yIG9jY3VyZWQgKilcblxudHlwZSB0ID0ge1xuICBsaW5lIDogaW50XG47IHN0YXJ0X2NoYXIgOiBpbnRcbjsgZW5kX2NoYXIgOiBpbnRcbjsgbXNnIDogc3RyaW5nXG59XG5cbmV4Y2VwdGlvbiBKc29uX2Vycm9yX2luZm8gb2YgdFxuXG5sZXQgY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlbXNnID1cbiAgbGV0IChlbGluZSwgc2NoYXIsIGVjaGFyKSA9IExleHhlcl91dGlscy5lcnJvcl9wb3MgbGV4YnVmIGluXG4gIHsgbGluZSA9IGVsaW5lOyBzdGFydF9jaGFyID0gc2NoYXI7IGVuZF9jaGFyID0gZWNoYXI7IG1zZyA9IGVtc2cgfVxuXG5sZXQgdG9fc3RyaW5nIGluZm8gPVxuICBsZXQgbG9jID0gUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgaW5mby5saW5lIGluZm8uc3RhcnRfY2hhciBpbmZvLmVuZF9jaGFyIGluXG4gIGluZm8ubXNnIF4gXCIgYXQgXCIgXiBsb2NcbiIsImV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxuKCogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGFuIGludGVnZXIsIGhhbmRsZXMgMzBiaXQsIDYyYml0IGFuZCBKc29vIHVzaW5nIDMyYml0IGludHMgKilcbmxldCBtYXhfanNvbl9pbnQgPVxuICBsZXQgcmVjIGxvZzIgbiA9IGlmIG4gPD0gMSB0aGVuIDAgZWxzZSAxICsgbG9nMihuIGFzciAxKSBpblxuICBsZXQgYml0cyBuID0gbG9nMiBuICsgMSBpblxuICBpZiBiaXRzIG1heF9pbnQgPiA1MyB0aGVuICgxIGxzbCA1MykgLSAxIGVsc2UgbWF4X2ludFxuXG5sZXQgbWF4X2pzb25faW50X2FzX2Zsb2F0ID0gZmxvYXRfb2ZfaW50IG1heF9qc29uX2ludFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0X2pzb24gZiA9XG4gIGxldCBpc19pbnQgPSAoZmxvYXRfb2ZfaW50IChpbnRfb2ZfZmxvYXQgZikpID0gZiBpblxuICBpZiBpc19pbnQgJiYgYWJzX2Zsb2F0IGYgPD0gbWF4X2pzb25faW50X2FzX2Zsb2F0IHRoZW4gYmVnaW4gKCogSUVFRSBtYXggaW50IGluIGEgZmxvYXQgd2hlbiBpbiA2NGJpdCBpbnQgbW9kZSopXG4gICAgbGV0IGludF92YWx1ZSA9IGludF9vZl9mbG9hdCBmIGluIChzdHJpbmdfb2ZfaW50IGludF92YWx1ZSkgXiBcIi4wXCJcbiAgZW5kXG4gIGVsc2UgYmVnaW5cbiAgICAoKiAlLjE3ZyBvZnRlbiBjcmVhdGVzIG92ZXJseSBsb25nIG91dHB1dCwgYXR0ZW1wdCB0byBjb252ZXJ0IGF0IGxvd2VyIHByZWNlc3Npb24gZmlyc3QgKilcbiAgICBsZXQgcyA9IGZvcm1hdF9mbG9hdCBcIiUuMTZnXCIgZiBpblxuICAgIGxldCBzID0gaWYgZmxvYXRfb2Zfc3RyaW5nIHMgPSBmIHRoZW4gcyBlbHNlIGZvcm1hdF9mbG9hdCBcIiUuMTdnXCIgZiBpblxuICAgIGlmIG5vdCAoU3RyaW5nLmNvbnRhaW5zIHMgJy4nIHx8IFN0cmluZy5jb250YWlucyBzICdlJykgdGhlbiBzIF4gXCIuMFwiXG4gICAgZWxzZSBzXG4gIGVuZFxuIiwiXG5sZXQgdG9rZW5fZXJyb3IgdG9rID1cbiAgbGV0IG9wZW4gVG9rZW5zIGluXG4gIGxldCBlcnIgPSBtYXRjaCB0b2sgd2l0aFxuICAgIHwgU1RSSU5HIHMgLT4gXCJ1bmV4cGVjdGVkIHN0cmluZyAnXCIgXiBzIF4gXCInXCJcbiAgICB8IE9TIC0+IFwidW5leHBlY3RlZCAneydcIlxuICAgIHwgT0UgLT4gXCJ1bmV4cGVjdGVkICd9J1wiXG4gICAgfCBOVUxMIC0+IFwidW5leHBlY3RlZCBudWxsIHZhbHVlXCJcbiAgICB8IE5FR0lORklOSVRZIC0+IFwidW5leHBlY3RlZCBuZWdhdGl2ZSBpbmZpbml0eVwiXG4gICAgfCBOQU4gLT4gXCJ1bmV4cGVjdGVkIE5vdC1hLU51bWJlclwiXG4gICAgfCBMRVhfRVJST1IgcyAtPiBzXG4gICAgfCBMQVJHRUlOVCBzIC0+IFwidW5leHBlY3RlZCBsYXJnZSBpbnRlZ2VyICdcIiBeIHMgXiBcIidcIlxuICAgIHwgSU5UIGkgLT4gXCJ1bmV4cGVjdGVkIGludGVnZXIgJ1wiIF4gKHN0cmluZ19vZl9pbnQgaSkgXiBcIidcIlxuICAgIHwgSU5GSU5JVFkgLT4gXCJ1bmV4cGVjdGVkIGluZmluaXR5XCJcbiAgICB8IEZMT0FUIGYgLT4gXCJ1bmV4cGVjdGVkIGZsb2F0ICdcIiBeIChzdHJpbmdfb2ZfZmxvYXQgZikgXiBcIidcIlxuICAgIHwgRU9GIC0+IFwidW5leHBlY3RlZCBlbmQtb2YtaW5wdXRcIlxuICAgIHwgQ09NUExJQU5DRV9FUlJPUiBzIC0+IFwiY29tcGxpYW5jZSBlcnJvciAnXCIgXiBzIF4gXCInXCJcbiAgICB8IENPTU1BIC0+IFwidW5leHBlY3RlZCAnLCdcIlxuICAgIHwgQ09MT04gLT4gXCJ1bmV4cGVjdGVkICc6J1wiXG4gICAgfCBCT09MIGIgLT4gXCJ1bmV4cGVjdGVkIGJvb2xlYW4gJ1wiIF4gKGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIikgXiBcIidcIlxuICAgIHwgQVMgLT4gXCJ1bmV4cGVjdGVkICdbJ1wiXG4gICAgfCBBRSAtPiBcInVuZXhwZWN0ZWQgJ10nXCJcbiAgICB8IFRTIC0+IFwidW5leHBlY3RlZCAnKCdcIlxuICAgIHwgVEUgLT4gXCJ1bmV4cGVjdGVkICcpJ1wiXG4gICAgfCBWUyAtPiBcInVuZXhwZWN0ZWQgJzwnXCJcbiAgICB8IFZFIC0+IFwidW5leHBlY3RlZCAnPidcIlxuICBpblxuICAgIGBTeW50YXhfZXJyb3IgZXJyXG4iLCJtb2R1bGUgdHlwZSBQYXJzZXIgPSBzaWdcbiAgbW9kdWxlIENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlNcblxuICB2YWwgZGVjb2RlXG4gICAgOiAgcmVhZGVyIDogKHVuaXQgLT4gVG9rZW5zLnRva2VuKVxuICAgIC0+IChDb21wbGlhbmNlLmpzb24gb3B0aW9uLCBzdHJpbmcpIHJlc3VsdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IFBhcnNlclxuICB3aXRoIG1vZHVsZSBDb21wbGlhbmNlID0gQ29tcGxpYW5jZVxuPSBzdHJ1Y3RcblxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IENvbXBsaWFuY2VcblxuICBleGNlcHRpb24gUGFyc2VfZXJyb3Igb2YgW2BFb2YgfCBgU3ludGF4X2Vycm9yIG9mIHN0cmluZ11cblxuICBsZXQganNvbl92YWx1ZSB+cmVhZGVyID0gXG4gICAgbGV0IG9wZW4gVG9rZW5zIGluXG4gICAgbGV0IG9wZW4gUGFyc2VyX3Rvb2xzIGluXG4gICAgbGV0IHJlYyB0b2tlbl92YWx1ZSB0b2sgPSBiZWdpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgSU5UIGkgLT4gQ29tcGxpYW5jZS5pbnRlZ2VyIGlcbiAgICAgIHwgU1RSSU5HIHMgLT4gQ29tcGxpYW5jZS5zdHJpbmcgc1xuICAgICAgfCBCT09MIGIgLT4gQ29tcGxpYW5jZS5ib29sIGJcbiAgICAgIHwgRkxPQVQgZiAtPiBDb21wbGlhbmNlLm51bWJlciAoYEZsb2F0IGYpXG4gICAgICB8IElORklOSVRZIC0+IENvbXBsaWFuY2UubnVtYmVyIGBJbmZpbml0eVxuICAgICAgfCBORUdJTkZJTklUWSAtPiBDb21wbGlhbmNlLm51bWJlciBgTmVnaW5maW5pdHlcbiAgICAgIHwgTkFOIC0+IENvbXBsaWFuY2UubnVtYmVyIGBOYW5cbiAgICAgIHwgTlVMTCAtPiBDb21wbGlhbmNlLm51bGxcbiAgICAgIHwgTEFSR0VJTlQgcyAtPiBDb21wbGlhbmNlLmxhcmdlaW50IHNcbiAgICAgIHwgRU9GIC0+IHJhaXNlIChQYXJzZV9lcnJvciBgRW9mKVxuICAgICAgfCBDT01NQSB8IENPTE9OIHwgQUUgfCBPRSB8IFRFIHwgVkUgfCBMRVhfRVJST1IgXyB8IENPTVBMSUFOQ0VfRVJST1IgXyAtPlxuICAgICAgICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICB8IEFTIC0+IGFycmF5X3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IE9TIC0+IG9iamVjdF92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBUUyAtPiB0dXBsZV92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBWUyAtPiB2YXJpYW50X3ZhbHVlX3N0YXJ0ICgpXG4gICAgZW5kXG4gICAgYW5kIHZhbHVlICgpID0gdG9rZW5fdmFsdWUgKHJlYWRlciAoKSlcbiAgICBhbmQgYXJyYXlfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHRvayA9IHJlYWRlciAoKSBpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IFtdXG4gICAgICB8IF8gLT4gYXJyYXlfdmFsdWVzX3N0YXJ0IHRvayBbXVxuICAgIGVuZFxuICAgIGFuZCBhcnJheV92YWx1ZXNfc3RhcnQgdG9rIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHRva2VuX3ZhbHVlIHRvayBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGFycmF5X3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdG9rID0gcmVhZGVyICgpIGluXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIFtdXG4gICAgICB8IF8gLT4gb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgW11cbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gY29sb25fdmFsdWUgdG9rICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gb2JqZWN0X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IGtleV9jb2xvbl92YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IG9iamVjdF92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgY29sb25fdmFsdWUgdiAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBrZXlfY29sb25fdmFsdWUgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdjEgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQ09NTUEgLT4gYmVnaW5cbiAgICAgICAgbGV0IHYyID0gdmFsdWUgKCkgaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBURSAtPiBDb21wbGlhbmNlLnR1cGxlIFt2MTsgdjJdXG4gICAgICAgIHwgQ09NTUEgLT4gdHVwbGVfdmFsdWVzIFt2MjsgdjFdXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFRFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInR1cGxlIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGVsZW1lbnRzXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFRFIC0+IENvbXBsaWFuY2UudHVwbGUgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiB0dXBsZV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdmFyaWFudF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IFZFIC0+IENvbXBsaWFuY2UudmFyaWFudCBrIE5vbmVcbiAgICAgICAgfCBDT0xPTiAtPiB2YXJpYW50X2VuZCBrIChTb21lICh2YWx1ZSAoKSkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFZFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInZhcmlhbnQgbXVzdCBoYXZlIGF0IGxlYXN0IGEgc3RyaW5nXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB2YXJpYW50X2VuZCBrIHYgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgVkUgLT4gQ29tcGxpYW5jZS52YXJpYW50IGsgdlxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGluXG4gICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gTm9uZVxuICAgIHwgZXhjZXB0aW9uIGV4bl8gLT4gcmFpc2UgZXhuX1xuICAgIHwgRU9GIC0+IE5vbmVcbiAgICB8IHRvayAtPiBTb21lICh0b2tlbl92YWx1ZSB0b2spXG5cbiAgbGV0IGRlY29kZSB+cmVhZGVyID0gXG4gICAgbWF0Y2gganNvbl92YWx1ZSB+cmVhZGVyIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gRXJyb3IgXCJVbmV4cGVjdGVkIGVuZC1vZi1pbnB1dFwiXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIGVycikpIC0+IEVycm9yIGVyclxuICAgIHwgZXhjZXB0aW9uIChMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVycikgLT4gRXJyb3IgZXJyXG4gICAgfCByZXMgLT4gT2sgcmVzXG5cbmVuZFxuIiwibGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG5sZXQgYWRkX2hleF9ieXRlIH5hZGRfY2hhciBpID1cbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxubGV0IGVzY2FwZSB+YWRkX2NoYXIgfmFkZF9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgfmFkZF9jaGFyIChpbnRfb2ZfY2hhciBjKVxuICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gIGRvbmVcbiBcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIHByZXR0eV9wcmludCA6IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHByZXR0eV9wcmludF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbGV0IHRvX2pzb25fc3RyaW5nIHMgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBVdGlscy5lc2NhcGUgfmFkZF9jaGFyIH5hZGRfc3RyaW5nIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBhZGRfcXVvdGVfc3RyaW5nIHM7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBwcF9saXN0IHNlcCBwcHggb3V0IGwgPVxuICAgIGxldCBwcF9zZXAgb3V0ICgpID0gRm9ybWF0LmZwcmludGYgb3V0IFwiJXNAIFwiIHNlcCBpblxuICAgIEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXAgcHB4IG91dCBsXG5cbiAgbGV0IHJlYyBmb3JtYXQgKG91dDpGb3JtYXQuZm9ybWF0dGVyKSBqc29uIDogdW5pdCA9XG4gICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBOdWxsIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gRm9ybWF0LnBwX3ByaW50X2Jvb2wgb3V0IGJcbiAgICAgIHwgYEludCBpIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChzdHJpbmdfb2ZfaW50IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+XG4gICAgICAgIGxldCBzID0gQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYgaW5cbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHRvX2pzb25fc3RyaW5nIHMpXG4gICAgICB8IGBJbnRsaXQgc1xuICAgICAgfCBgRmxvYXRsaXQgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgTGlzdCBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIltdXCJcbiAgICAgIHwgYExpc3QgbCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJbQDs8MSAwPkBbPGhvdj4lYUBdQDs8MSAtMj5dXCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0KSBsXG4gICAgICB8IGBBc3NvYyBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcInt9XCJcbiAgICAgIHwgYEFzc29jIGwgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwie0A7PDEgMD4lYUA7PDEgLTI+fVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdF9maWVsZCkgbFxuICAgICAgfCBgVHVwbGUgbCAtPlxuICAgICAgICBpZiBsID0gW10gdGhlbiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIigpXCJcbiAgICAgICAgZWxzZSBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQCwlYUA7PDAgLTI+KVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdCkgbFxuICAgICAgfCBgVmFyaWFudCAocywgTm9uZSkgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPCVzPlwiICh0b19qc29uX3N0cmluZyBzKVxuICAgICAgfCBgVmFyaWFudCAocywgU29tZSBqc29uKSAtPlxuICAgICAgICBsZXQgcyA9IHRvX2pzb25fc3RyaW5nIHMgaW5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPEBbPGh2Mj4lczogJWFAXT5cIiBzIGZvcm1hdCBqc29uXG5cbiAgYW5kIGZvcm1hdF9maWVsZCBvdXQgKG5hbWUsIGpzb24pID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JXM6ICVhQF1cIiAodG9fanNvbl9zdHJpbmcgbmFtZSkgZm9ybWF0IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50IG91dCBqc29uID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JWFAXVwiIGZvcm1hdCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludF90b19zdHJpbmcganNvbiA9XG4gICAgRm9ybWF0LmFzcHJpbnRmIFwiJWFcIiBwcmV0dHlfcHJpbnQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyBpblxuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhQD9cIiBwcmV0dHlfcHJpbnQganNvblxuXG5lbmRcbiIsImxldCBlcnJvciBtc2cgX2pzb24gPSByYWlzZSAoRmFpbHVyZSBtc2cpXG5cbm1vZHVsZSBJbnRlcm5hbCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBTID0gc2lnXG4gICAgdHlwZSBqc29uXG4gICAgdmFsIG51bGwgOiB1bml0IC0+IGpzb25cbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfc3RyaWN0X2ludGYgPSBzaWdcbiAgICB0eXBlIGpzb25cblxuICAgIHZhbCBtZW1iZXIgOiBzdHJpbmcgLT4gWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4ganNvblxuICAgIHZhbCBpbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uXG4gICAgdmFsIG1hcCA6IChqc29uIC0+IGpzb24pIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdXG4gICAgdmFsIHRvX2Fzc29jIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4gKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB2YWwgdG9fYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSAtPiBib29sXG4gICAgdmFsIHRvX2Zsb2F0IDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fc3RyaW5nIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgXSAtPiBzdHJpbmdcbiAgICB2YWwgdG9fc3RyaW5nX29wdGlvbiA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIHwgYE51bGwgXSAtPiBzdHJpbmcgb3B0aW9uXG4gICAgdmFsIHRvX29wdGlvbiA6ICgoWz4gYE51bGwgXSBhcyAnYSkgLT4ganNvbikgLT4gJ2EgLT4ganNvbiBvcHRpb25cbiAgICB2YWwgdG9fbGlzdCA6IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb24gbGlzdFxuICAgIHZhbCB0b19ib29sX29wdGlvbiA6IFs+IGBCb29sIG9mIGJvb2wgfCBgTnVsbCBdIC0+IGJvb2wgb3B0aW9uXG4gICAgdmFsIHRvX2Zsb2F0X29wdGlvbiA6IFs+IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIHRvX251bWJlciA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX251bWJlcl9vcHRpb24gOiBbPiBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCBjb252ZXJ0X2VhY2ggOiAoanNvbiAtPiBqc29uKSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uIGxpc3RcbiAgICB2YWwgcmV2X2ZpbHRlcl9tYXAgOiAoJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSBsaXN0IC0+ICdhIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbWFwIDogKCdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIHJldl9mbGF0dGVuIDogJ2EgbGlzdCAtPiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZsYXR0ZW4gOiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9pbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbGlzdCA6IFs+IGBMaXN0IG9mICdhIF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9hc3NvYyA6IFs+IGBBc3NvYyBvZiAnYSBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSBsaXN0IC0+IGJvb2wgbGlzdFxuICAgIHZhbCBmaWx0ZXJfZmxvYXQgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgICB2YWwgZmlsdGVyX3N0cmluZyAgOiBbPiBgU3RyaW5nIG9mIHN0cmluZyBdIGxpc3QgLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgZmlsdGVyX21lbWJlciA6IHN0cmluZyAtPiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gICAgdmFsIGtleXMgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IF0gLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgdmFsdWVzIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCBdIC0+ICdhIGxpc3RcbiAgICB2YWwgY29tYmluZSA6IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF0gLT4gWz4gYEFzc29jIG9mICdhIGxpc3QgXSAtPiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIFNoYXJlZCA9IHN0cnVjdFxuICAgIGxldCByZWMgcmV2X2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYWNjXG4gICAgICB8IGhkOjp0bCAtPlxuICAgICAgICBtYXRjaCBmIGhkIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHJldl9maWx0ZXJfbWFwIGYgYWNjIHRsXG4gICAgICAgIHwgU29tZSB2IC0+IHJldl9maWx0ZXJfbWFwIGYgKHY6OmFjYykgdGxcblxuICAgIGxldCBmaWx0ZXJfbWFwIGYgbCA9IExpc3QucmV2IChyZXZfZmlsdGVyX21hcCBmIFtdIGwpXG5cbiAgICBsZXQgcmVjIHJldl9mbGF0dGVuIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBhY2NcbiAgICAgIHwgaGQ6OnRsIC0+XG4gICAgICAgIG1hdGNoIGhkIHdpdGhcbiAgICAgICAgfCBgTGlzdCBsMiAtPiByZXZfZmxhdHRlbiAoTGlzdC5yZXZfYXBwZW5kIGwyIGFjYykgdGxcbiAgICAgICAgfCBfIC0+IHJldl9mbGF0dGVuIGFjYyB0bFxuXG4gICAgbGV0IGZsYXR0ZW4gbCA9IExpc3QucmV2IChyZXZfZmxhdHRlbiBbXSBsKVxuXG4gIGVuZFxuXG4gIG1vZHVsZSBTdHJpY3QoTSA6IFMpIDogSW50ZXJuYWxfc3RyaWN0X2ludGZcbiAgICB3aXRoIHR5cGUganNvbiA9IE0uanNvblxuICA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IE0uanNvblxuXG4gICAgbGV0IGFzc29jIG5hbWUgb2JqIDoganNvbiA9IHRyeSBMaXN0LmFzc29jIG5hbWUgb2JqIHdpdGggTm90X2ZvdW5kIC0+IE0ubnVsbCAoKVxuXG4gICAgbGV0IG1lbWJlciBuYW1lIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgQXNzb2Mgb2JqIC0+IGFzc29jIG5hbWUgb2JqXG4gICAgICB8IGpzb24gLT4gZXJyb3IgKFwiRXhwZWN0ZWQgYEFzc29jIHRvIGZpbmQgbmFtZSAnXCIgXiBuYW1lIF4gXCInIGluXCIpIGpzb25cblxuICAgIGxldCBpbmRleCBpIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICAgICAgICBsZXQgaScgPSBpZiBpIDwgMCB0aGVuIGxlbiArIGkgZWxzZSBpIGluXG4gICAgICAgICAgaWYgaScgPCAwIHx8IGknID49IGxlbiB0aGVuIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChzdHJpbmdfb2ZfaW50IGkgXiBcIiBvdXQgb2YgYm91bmRzXCIpKVxuICAgICAgICAgIGVsc2UgTGlzdC5udGggbCBpJ1xuICAgICAgfCBqc29uIC0+IGVycm9yIFwiQ2FuJ3QgaW5kZXggbm9uZSBgTGlzdCB0eXBlIFwiIGpzb25cblxuICAgIGxldCBtYXAgZiB2ID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBmIGwpXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJDYW4ndCBtYXAgb3ZlciBub25lIGBMaXN0IHR5cGUgXCIganNvblxuXG4gICAgbGV0IHRvX2Fzc29jID0gZnVuY3Rpb24gfCBgQXNzb2Mgb2JqIC0+IG9iaiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQXNzb2NcIiBqc29uXG4gICAgbGV0IHRvX2Jvb2wgPSBmdW5jdGlvbiB8IGBCb29sIGIgLT4gYiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQm9vbFwiIGpzb25cbiAgICBsZXQgdG9fZmxvYXQgPSBmdW5jdGlvbiB8IGBGbG9hdCBmIC0+IGYgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgICB8IGBTdHJpbmcgcyAtPiBzXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgU3RyaW5nXCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZ19vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgU3RyaW5nIHMgLT4gU29tZSBzXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBTdHJpbmcgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fb3B0aW9uIGYgdiA6IGpzb24gb3B0aW9uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IHYgLT4gU29tZSAoZiB2KVxuXG4gICAgbGV0IHRvX2xpc3QgdiA6IGpzb24gbGlzdCA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPiBsXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgTGlzdFwiIGpzb25cblxuICAgIGxldCB0b19mbG9hdF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX2Jvb2xfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEJvb2wgYiAtPiBTb21lIGJcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEJvb2wgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gZlxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX251bWJlcl9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IGNvbnZlcnRfZWFjaCBmID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgbCAtPiBMaXN0Lm1hcCBmIGxcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBMaXN0XCIganNvblxuXG4gICAgbGV0IHJldl9maWx0ZXJfbWFwID0gU2hhcmVkLnJldl9maWx0ZXJfbWFwXG4gICAgbGV0IGZpbHRlcl9tYXAgPSBTaGFyZWQuZmlsdGVyX21hcFxuXG4gICAgbGV0IHJldl9mbGF0dGVuID0gU2hhcmVkLnJldl9mbGF0dGVuXG4gICAgbGV0IGZsYXR0ZW4gPSBTaGFyZWQuZmxhdHRlblxuXG4gICAgbGV0IGZpbHRlcl9pbmRleCBpIGwgPVxuICAgICAgZmlsdGVyX21hcCAoZnVuY3Rpb24gfCBgTGlzdCBsIC0+ICh0cnkgU29tZSAoTGlzdC5udGggbCBpKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbGlzdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYExpc3QgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Fzc29jIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Jvb2wgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBCb29sIGIgLT4gU29tZSBiIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9mbG9hdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEZsb2F0IGYgLT4gU29tZSBmIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9zdHJpbmcgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBTdHJpbmcgcyAtPiBTb21lIHMgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbWVtYmVyIGsgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiAodHJ5IFNvbWUgKExpc3QuYXNzb2MgayBsKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICAgICAgZmlsdGVyX21hcCAoXG4gICAgICAgIGZ1bmN0aW9uXG4gICAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICApIGxcblxuICAgIGxldCBrZXlzIG8gPSB0b19hc3NvYyBvIHw+IExpc3QubWFwIChmdW4gKGtleSwgXykgLT4ga2V5KVxuXG4gICAgbGV0IHZhbHVlcyBvID0gdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChfLCB2YWx1ZSkgLT4gdmFsdWUpXG5cbiAgICBsZXQgY29tYmluZSBmaXJzdCBzZWNvbmQgPVxuICAgICAgbWF0Y2ggKGZpcnN0LCBzZWNvbmQpIHdpdGhcbiAgICAgIHwgKGBBc3NvYyBhLCBgQXNzb2MgYikgLT4gYEFzc29jIChhIEAgYilcbiAgICAgIHwgKF8sIF8pIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRXhwZWN0ZWQgdHdvIG9iamVjdHNcIilcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGVsIC0+ICBlbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9iYXNpY19pbnRmID0gc2lnXG5cbiAgICB2YWwgdG9fbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19udW1iZXJfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCB0b19pbnQgOiBbPiBgSW50IG9mIGludCBdIC0+IGludFxuICAgIHZhbCB0b19pbnRfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgTnVsbCBdIC0+IGludCBvcHRpb25cbiAgICB2YWwgZmlsdGVyX2ludCA6IFs+IGBJbnQgb2YgaW50IF0gbGlzdCAtPiBpbnQgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgZW5kXG5cbiAgbW9kdWxlIEJhc2ljKE0gOiBTKSA6IEludGVybmFsX2Jhc2ljX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCB0b19udW1iZXIgPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gZmxvYXQgaVxuICAgICAgfCBgRmxvYXQgZiAtPiBmXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50IG9yIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXJfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50LCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9faW50ID0gZnVuY3Rpb24gfCBgSW50IGkgLT4gaSB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50XCIganNvblxuXG4gICAgbGV0IHRvX2ludF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gU29tZSBpXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgZmlsdGVyX2ludCBsID0gU2hhcmVkLmZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBJbnQgaSAtPiBTb21lIGkgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX251bWJlciBsID1cbiAgICAgIFNoYXJlZC5maWx0ZXJfbWFwIChcbiAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgfCBgSW50IGkgLT4gU29tZSAoZmxvYXQgaSlcbiAgICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgICkgbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9leHRlbmRlZF9pbnRmID0gc2lnXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgfFxuICAgICAgICAgICAgICAgICAgIGBUdXBsZSBvZiAnYSBsaXN0IHwgYFZhcmlhbnQgb2YgJ2IgKiAnYSBvcHRpb24gXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIEV4dGVuZGVkKE0gOiBTKSA6IEludGVybmFsX2V4dGVuZGVkX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgVHVwbGUgbFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGBWYXJpYW50IChrLCBTb21lIHYpIGFzIHYxIC0+XG4gICAgICAgIGxldCB2JyA9IHNvcnQgdiBpbiBpZiB2JyA9PSB2IHRoZW4gdjEgZWxzZSBgVmFyaWFudCAoaywgU29tZSB2JylcbiAgICAgIHwgZWwgLT4gIGVsXG4gIGVuZFxuXG5lbmRcblxubW9kdWxlIFN0cmljdCA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uU3RyaWN0Lmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5kZWQgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkV4dGVuZGVkLmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuRXh0ZW5kZWQoTSlcbmVuZFxuXG5tb2R1bGUgWW9qc29uX3NhZmUgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPVxuICAgICAgW1xuICAgICAgfCBgTnVsbFxuICAgICAgfCBgQm9vbCBvZiBib29sXG4gICAgICB8IGBJbnQgb2YgaW50XG4gICAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgICAgfCBgU3RyaW5nIG9mIHN0cmluZ1xuICAgICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgICAgXVxuXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuICBpbmNsdWRlIEludGVybmFsLkV4dGVuZGVkKE0pXG5lbmRcbiIsImxldCB0b2tlbl90b19zdHJpbmcgKHRvazpUb2tlbnMudG9rZW4pID1cbiAgbWF0Y2ggdG9rIHdpdGhcbiAgfCBTVFJJTkcgcyAtPiBzXG4gIHwgT1MgLT4gXCJ7XCJcbiAgfCBPRSAtPiBcIn1cIlxuICB8IE5VTEwgLT4gXCJOdWxsXCJcbiAgfCBORUdJTkZJTklUWSAtPiBcIi1JbmZpbml0eVwiXG4gIHwgTkFOIC0+IFwiTkFOXCJcbiAgfCBMRVhfRVJST1IgZXJyIC0+IFwiaW5wdXQgZXJyb3IgJ1wiIF4gZXJyIF4gXCInXCJcbiAgfCBMQVJHRUlOVCBzIC0+IHNcbiAgfCBJTlQgaSAtPiBzdHJpbmdfb2ZfaW50IGlcbiAgfCBJTkZJTklUWSAtPiBcIkluZmluaXR5XCJcbiAgfCBGTE9BVCBmIC0+IHN0cmluZ19vZl9mbG9hdCBmXG4gIHwgRU9GIC0+IFwiZW5kLW9mLWZpbGVcIlxuICB8IENPTVBMSUFOQ0VfRVJST1IgZXJyIC0+IGVyclxuICB8IENPTU1BIC0+IFwiLFwiXG4gIHwgQ09MT04gLT4gXCI6XCJcbiAgfCBCT09MIGIgLT4gaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG4gIHwgQVMgLT4gXCJbXCJcbiAgfCBBRSAtPiBcIl1cIlxuICB8IFZTIC0+IFwiPFwiXG4gIHwgVkUgLT4gXCI+XCJcbiAgfCBUUyAtPiBcIihcIlxuICB8IFRFIC0+IFwiKVwiXG4iLCJtb2R1bGUgdHlwZSBSZWFkZXJfc3RyaW5nX2ZpbGUgPSBzaWdcbiAgdHlwZSBqc29uXG5cbiAgdmFsIGpzb25fb2Zfc3RyaW5nIDogc3RyaW5nIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9zdHJpbmdfZXhuIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZmlsZSA6IHN0cmluZyAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9leG4gOiBzdHJpbmcgLT4ganNvblxuICB2YWwganNvbl9vZl9jaGFubmVsIDogaW5fY2hhbm5lbCAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfY2hhbm5lbF9leG4gOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uX2V4biA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uXG4gIHZhbCBqc29uX29mX2xleGJ1ZiA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9leG4gOiBMZXhpbmcubGV4YnVmIC0+IGpzb25cbiAgdmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBvZl9maWxlIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIG9mX2NoYW5uZWwgOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIG9mX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb25cblxuICB2YWwganNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIDogc3RyaW5nIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gOiBpbl9jaGFubmVsIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mbyA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA6ID9zdHJlYW06Ym9vbCAtPiBMZXhpbmcubGV4YnVmIC0+IChqc29uIG9wdGlvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2NoYW5uZWwgOiA/ZmluOih1bml0IC0+IHVuaXQpIC0+IGluX2NoYW5uZWwgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZmlsZSA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9sZXhidWYgOiBMZXhpbmcubGV4YnVmIC0+IGpzb24gU3RyZWFtLnRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIDogP2ZpbjoodW5pdCAtPiB1bml0KSAtPiBpbl9jaGFubmVsIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uIFN0cmVhbS50XG5lbmRcblxubW9kdWxlIE1ha2UgKExleHhlciA6IENvbXBsaWFudF9sZXh4ZXIuTGV4ICkgKFBhcnNlciA6IFBhcnNlci5QYXJzZXIpIDogUmVhZGVyX3N0cmluZ19maWxlXG4gIHdpdGggdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuPSBzdHJ1Y3RcbiAgdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuXG4gIGxldCByZWFkX2pzb24nIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgIHwgT2sgTm9uZSAtPiBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEVPRiAtPiBPayByZXNcbiAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgfCB0b2sgLT4gRXJyb3IgKFwianVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTogXCIgXiAoVG9rZW5fdXRpbHMudG9rZW5fdG9fc3RyaW5nIHRvaykpXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuXG4gIGxldCByZWFkX2pzb24gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIHMgaW5cbiAgICAgIEVycm9yIChFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbylcblxuICBsZXQganNvbl9vZl9zdHJpbmcgcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9zdHJpbmdfZXhuIHMgPVxuICAgIG1hdGNoIGpzb25fb2Zfc3RyaW5nIHMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBvZl9zdHJpbmcgcyA9IGpzb25fb2Zfc3RyaW5nX2V4biBzXG5cbiAgbGV0IGpzb25fb2ZfZmlsZSBmaWxlbmFtZSA9XG4gICAgdHJ5IGJlZ2luXG4gICAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgICBsZXQgcmVzID0gcmVhZF9qc29uIH5sZXhidWYgaW5cbiAgICAgICAgY2xvc2VfaW4gaW5jO1xuICAgICAgICByZXNcbiAgICBlbmRcbiAgICB3aXRoIFN5c19lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9leG4gZmlsZW5hbWUgPVxuICAgIG1hdGNoIGpzb25fb2ZfZmlsZSBmaWxlbmFtZSB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbCBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbF9leG4gaW5jID1cbiAgICBtYXRjaCBqc29uX29mX2NoYW5uZWwgaW5jIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbiBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXhuIGxleGJ1ZiA9XG4gICAgbWF0Y2gganNvbl9vZl9sZXhidWYgbGV4YnVmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9leG4gZiA9XG4gICAgbWF0Y2gganNvbl9vZl9mdW5jdGlvbiBmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQgb2ZfZmlsZSA9IGpzb25fb2ZfZmlsZV9leG5cbiAgbGV0IG9mX2NoYW5uZWwgPSBqc29uX29mX2NoYW5uZWxfZXhuXG4gIGxldCBvZl9mdW5jdGlvbiA9IGpzb25fb2ZfZnVuY3Rpb25fZXhuXG5cbiAgKCogRXJyb3JfaW5mby50IHJldHVybmluZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG4gIGxldCBqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lID1cbiAgICB0cnkgYmVnaW5cbiAgICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgICBsZXQgcmVzID0ganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jIGluXG4gICAgICAgIGNsb3NlX2luIGluYztcbiAgICAgICAgcmVzXG4gICAgZW5kXG4gICAgd2l0aCBTeXNfZXJyb3IgZXJyIC0+IEVycm9yIHsgRXJyb3JfaW5mby5saW5lID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDsgbXNnID0gZXJyIH1cblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gICgqIEludGVybmFsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb24gc3VwcG9ydGluZyB0aGUgc3RyZWFtIGZsYWcgKilcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgPyhzdHJlYW0gPSBmYWxzZSkgbGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IHJlcyA9IG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgfCBPayBOb25lIC0+IGlmIHN0cmVhbSB0aGVuIE9rIE5vbmUgZWxzZSBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHN0cmVhbSB3aXRoXG4gICAgICB8IHRydWUgLT4gT2sgKFNvbWUgcmVzKVxuICAgICAgfCBmYWxzZSAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IEVPRiAtPiBPayAoU29tZSByZXMpXG4gICAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgICB8IHRvayAtPiBFcnJvciAoXCJqdW5rIGFmdGVyIGVuZCBvZiBKU09OIHZhbHVlOiBcIiBeIChUb2tlbl91dGlscy50b2tlbl90b19zdHJpbmcgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgIGluXG4gICAgbWF0Y2ggcmVzIHdpdGhcbiAgICB8IE9rIHJlcyAtPiBPayByZXNcbiAgICB8IEVycm9yIHMgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBzIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG5cbiAgKCogU3RyZWFtLnQgcmV0dXJuaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtIH5maW4gfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgICB8IE9rIE5vbmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IE9rIChTb21lIHJlcykgLT4gU29tZSByZXNcbiAgICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIGxldCAoKSA9IGZpbiAoKSBpblxuICAgICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICAgIGxldCBtc2cgPSBFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbyBpblxuICAgICAgICByYWlzZSAoRmFpbHVyZSBtc2cpXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID8oZmluID0gZnVuICgpIC0+ICgpKSBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpbmMpIGluY1xuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWYgbGV4YnVmID1cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gICgqIFN0cmVhbS50IEpzb25fZXJyb3JfaW5mbyByYWlzaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICAgIHwgT2sgTm9uZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBTb21lIHJlc1xuICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgbGV0ICgpID0gZmluICgpIGluXG4gICAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgICAgcmFpc2UgKEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uX2Vycm9yX2luZm8gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGluYykgaW5jXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG5lbmRcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIGpzb25fdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19maWxlX2V4biA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbCA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2V4biA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW1fZXhuIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bSA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bV9leG4gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19jaGFubmVsIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fY2hhbm5lbF9odW0gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogSW50ZiA9IHN0cnVjdFxuXG4gIGxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxuICBsZXQgYWRkX2hleF9ieXRlIG9jIGkgPVxuICAgIG91dHB1dF9jaGFyIG9jIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gICAgb3V0cHV0X2NoYXIgb2MgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIG9jIHMgPVxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSBvYyAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfZm10IG9jIGpzb24gfmVvbCB+aW5jciB+cHNlcCA9IFxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBvYyBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcHNlcCA9IFwiOlwiIF4gcHNlcCBpblxuICAgIGxldCByZWMgZm10IG9mZiB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICd7JzsgYWRkX3N0cmluZyBlb2w7IGpzb25fYXNzb2MgKG9mZiArIGluY3IpIG87XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJ1snOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSBsO1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJygnOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSB0O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICc8JzsgYWRkX3N0cmluZyBlb2w7ICB2YXJpYW50IChvZmYgKyBpbmNyKSB2O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIG9mZiBvID1cbiAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFwiIF4gZW9sIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgcGFpciBvZmYgdiApIG9cbiAgICBhbmQgcGFpciBvZmYgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfc3RyaW5nIHBzZXA7IGZtdCBvZmYgdlxuICAgIGFuZCBqc29uX2xpc3Qgb2ZmIGwgPVxuICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXCIgXiBlb2wgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBmbXQgb2ZmIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgb2ZmIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgcHNlcDsgZm10IChvZmYgKyBpbmNyKSBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCAwIGpzb247XG4gICAgYWRkX3N0cmluZyBlb2xcblxuICBsZXQganNvbl90b19jaGFubmVsJyA9IGpzb25fdG9fY2hhbm5lbF9mbXQgfmVvbDpcIlwiIH5pbmNyOjAgfnBzZXA6XCJcIlxuICBsZXQganNvbl90b19jaGFubmVsX2h1bScgPSBqc29uX3RvX2NoYW5uZWxfZm10IH5lb2w6XCJcXG5cIiB+aW5jcjoyIH5wc2VwOlwiIFwiXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fY2hhbm5lbCcgb2MganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW0gb2MganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2NoYW5uZWxfaHVtJyBvYyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19jaGFubmVsX2V4biA9IGpzb25fdG9fY2hhbm5lbCdcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW1fZXhuID0ganNvbl90b19jaGFubmVsX2h1bSdcblxuICBsZXQganNvbl90b19maWxlIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIGxldCByZXMgPSBqc29uX3RvX2NoYW5uZWwgb2MganNvbiBpblxuICAgIGNsb3NlX291dCBvYztcbiAgICByZXNcblxuICBsZXQganNvbl90b19maWxlX2h1bSBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICBsZXQgcmVzID0ganNvbl90b19jaGFubmVsX2h1bSBvYyBqc29uIGluXG4gICAgY2xvc2Vfb3V0IG9jO1xuICAgIHJlc1xuXG4gIGxldCBqc29uX3RvX2ZpbGVfZXhuIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoanNvbl90b19jaGFubmVsJyBvYyBqc29uOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCBqc29uX3RvX2ZpbGVfaHVtX2V4biBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKGpzb25fdG9fY2hhbm5lbF9odW0nIG9jIGpzb247IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHRvX2ZpbGUgPSBqc29uX3RvX2ZpbGVfZXhuXG4gIGxldCB0b19maWxlX2h1bSA9IGpzb25fdG9fZmlsZV9odW1fZXhuXG4gIGxldCB0b19jaGFubmVsID0ganNvbl90b19jaGFubmVsX2V4blxuICBsZXQgdG9fY2hhbm5lbF9odW0gPSBqc29uX3RvX2NoYW5uZWxfaHVtX2V4blxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCBvYyBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiBqc29uX3RvX2NoYW5uZWxfZXhuIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgZmlsZSBzdHJlYW0gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKHN0cmVhbV90b19jaGFubmVsIG9jIHN0cmVhbTsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cbmVuZFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwganNvbl90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IChzdHJpbmcsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX3N0cmluZ19leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHN0cmluZywgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bV9leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBqc29uX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9leG4gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2h1bSA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9odW1fZXhuIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2J1ZmZlcl9odW0gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHN0cmluZ1xuICB2YWwgc3RyZWFtX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IEludGYgPSBzdHJ1Y3RcblxuICBsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbiAgbGV0IGFkZF9oZXhfYnl0ZSBidWYgaSA9XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIGJ1ZiBzID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIGJ1ZiAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT4gYWRkX2NoYXIgJ3snOyBqc29uX2Fzc29jIG87IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+IGFkZF9jaGFyICdbJzsganNvbl9saXN0IGw7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT4gYWRkX2NoYXIgJygnOyBqc29uX2xpc3QgdDsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT4gYWRkX2NoYXIgJzwnOyAgdmFyaWFudCB2OyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBvID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBwYWlyIHYgKSBvXG4gICAgYW5kIHBhaXIgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfY2hhciAnOic7IGZtdCB2XG4gICAgYW5kIGpzb25fbGlzdCBsID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBmbXQgdiApIGxcbiAgICBhbmQgdmFyaWFudCAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfY2hhciAnOic7IGZtdCBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCBqc29uXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bScgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IGxkciB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJ7XFxuXCI7IGpzb25fYXNzb2MgKGxkciBeIFwiICBcIikgbztcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiW1xcblwiOyBqc29uX2xpc3QgKGxkciBeIFwiICBcIikgbDtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCIoXFxuXCI7IGpzb25fbGlzdCAobGRyIF4gXCIgIFwiKSB0O1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCI8XCI7ICB2YXJpYW50IChsZHIgXiBcIiAgXCIpIHY7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2MgbGRyIG8gPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IHBhaXIgbGRyIHYgKSBvXG4gICAgYW5kIHBhaXIgbGRyIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX3N0cmluZyBcIjogXCI7IGZtdCBsZHIgdlxuICAgIGFuZCBqc29uX2xpc3QgbGRyIGwgPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IGZtdCBsZHIgIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgbGRyIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgXCI6IFwiOyBmbXQgKGxkciBeIFwiICBcIikgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQgXCJcIiBqc29uO1xuICAgIGFkZF9jaGFyICdcXG4nXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nJyBqc29uID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb247XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBqc29uX3RvX3N0cmluZyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nJyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19idWZmZXIgYnVmIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19idWZmZXInIGJ1ZiBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19zdHJpbmdfZXhuID0ganNvbl90b19zdHJpbmcnXG4gIGxldCB0b19zdHJpbmcgPSBqc29uX3RvX3N0cmluZydcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2V4biA9IGpzb25fdG9fYnVmZmVyJ1xuICBsZXQgdG9fYnVmZmVyID0ganNvbl90b19idWZmZXInXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bScganNvbiA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAganNvbl90b19idWZmZXJfaHVtJyBidWYganNvbjtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bSBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nX2h1bScganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bSBidWYganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW1fZXhuID0ganNvbl90b19zdHJpbmdfaHVtJ1xuICBsZXQgdG9fc3RyaW5nX2h1bSA9IGpzb25fdG9fc3RyaW5nX2h1bSdcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bV9leG4gPSBqc29uX3RvX2J1ZmZlcl9odW0nXG4gIGxldCB0b19idWZmZXJfaHVtID0ganNvbl90b19idWZmZXJfaHVtJ1xuXG4gIGxldCBzdHJlYW1fdG9fc3RyaW5nIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2J1ZmZlciBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fYnVmZmVyIGJ1ZiBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19idWZmZXIgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG5lbmRcbiIsImV4Y2VwdGlvbiBKc29uX2Vycm9yIG9mIHN0cmluZ1xuXG5sZXQganNvbl9lcnJvciBtc2cgPSByYWlzZSAoSnNvbl9lcnJvciBtc2cpXG5cbnR5cGUgbGV4ZXJfc3RhdGUgPSB7XG4gIGJ1ZiA6IEJ1ZmZlci50O1xuICBtdXRhYmxlIGxudW0gOiBpbnQ7XG4gIG11dGFibGUgYm9sIDogaW50O1xuICBtdXRhYmxlIGZuYW1lIDogc3RyaW5nIG9wdGlvbjtcbn1cblxubGV0IGluaXRfbGV4ZXIgP2J1ZjpfID9mbmFtZSA/KGxudW0gPSAxKSAoKSA9XG4gIHtcbiAgICBidWYgPSBCdWZmZXIuY3JlYXRlIDE2ICAoKiB1bnVzZWQgKilcbiAgOyBsbnVtID0gbG51bVxuICA7IGJvbCA9IDBcbiAgOyBmbmFtZSA9IGZuYW1lXG4gIH1cblxubW9kdWxlIENvbW1vbl9yZWFkZXIgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIG1vZHVsZSBJbnRlcm5hbF9yZWFkZXIgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgTGV4eGVyID0gQ29tcGxpYW50X2xleHhlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgbW9kdWxlIFBhcnNlciA9IFBhcnNlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBSZWFkZXJfc3RyaW5nX2ZpbGUuTWFrZSAoTGV4eGVyKSAoUGFyc2VyKVxuICBlbmRcblxuICB0eXBlIGpzb24gPSBJbnRlcm5hbF9yZWFkZXIuanNvblxuICB0eXBlIHQgPSBqc29uXG4gIHR5cGUganNvbl9saW5lID0gWyBgSnNvbiBvZiB0IHwgYEV4biBvZiBleG4gXVxuXG4gICgqIEhlbHBlciBmdW5jdGlvbnMgKilcbiAgbGV0IGVycm9yX3RvX3N0cmluZyAoZXJyb3JfaW5mbzpFcnJvcl9pbmZvLnQpIGZuYW1lIGxudW0gPVxuICAgIGxldCBsbnVtID0gbWF0Y2ggbG51bSB3aXRoIFNvbWUgbG51bSAtPiBsbnVtIHwgTm9uZSAtPiAxIGluXG4gICAgbGV0IGluZm8gPSB7IGVycm9yX2luZm8gd2l0aCBsaW5lID0gbG51bSArIGVycm9yX2luZm8ubGluZSAtIDEgfSBpblxuICAgIGxldCBmbmFtZSA9IG1hdGNoIGZuYW1lIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBcIkxpbmVcIlxuICAgICAgfCBTb21lIG5hbWUgLT4gXCJGaWxlIFwiIF4gbmFtZSBeIFwiLCBsaW5lXCJcbiAgICBpblxuICAgIGxldCBsb2MgPSBQcmludGYuc3ByaW50ZiBcIiVzICVkIGNoYXJzICVkLSVkOiBcIiBmbmFtZSBpbmZvLmxpbmUgaW5mby5zdGFydF9jaGFyIGluZm8uZW5kX2NoYXIgaW5cbiAgICBsb2MgXiBpbmZvLm1zZ1xuXG4gIGxldCBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBmIGEgZm5hbWUgbG51bSA9XG4gICAgbWF0Y2ggZiBhIHdpdGhcbiAgICB8IE9rIGpzb24gLT4ganNvblxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gICgqIFJlYWRlcnMgKilcbiAgbGV0IGZyb21fc3RyaW5nID9idWY6XyA/Zm5hbWUgP2xudW0gcyA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gcyBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fY2hhbm5lbCA/YnVmOl8gP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9maWxlID9idWY6XyA/Zm5hbWUgP2xudW0gZmlsZW5hbWUgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fbGV4YnVmIGxleHN0YXRlID9zdHJlYW0gbGV4YnVmID1cbiAgICBsZXQgZm5hbWUgPSBsZXhzdGF0ZS5mbmFtZSBpblxuICAgIGxldCBsbnVtID0gU29tZSBsZXhzdGF0ZS5sbnVtIGluXG4gICAgbWF0Y2ggSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0ID9zdHJlYW0gbGV4YnVmIHdpdGhcbiAgICB8IE9rIChTb21lIGpzb24pIC0+IGpzb25cbiAgICB8IE9rIE5vbmUgLT4ganNvbl9lcnJvciBcIkJsYW5rIGlucHV0IGRhdGFcIlxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gIGxldCByZWFkX3QgbGV4c3RhdGUgbGV4YnVmID0gZnJvbV9sZXhidWYgbGV4c3RhdGUgbGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBzdHJlYW1fZiBhIGZuYW1lIGxudW0gPVxuICAgIGxldCBzdHJlYW0gPSBzdHJlYW1fZiBhIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggU3RyZWFtLm5leHQgc3RyZWFtIHdpdGhcbiAgICAgIHwgdiAtPiBTb21lIHZcbiAgICAgIHwgZXhjZXB0aW9uIFN0cmVhbS5GYWlsdXJlIC0+IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJfaW5mbyBmbmFtZSBsbnVtKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmcgP2J1ZjpfID9mbmFtZSA/bG51bSBzID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIHMgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyAoSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyB+ZmluKSBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSA/YnVmOl8gP2ZuYW1lID9sbnVtIGZpbGVuYW1lID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1ZiBsZXhzdGF0ZSA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgbGV4YnVmID1cbiAgICBsZXQgc3RyZWFtID0gSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFN0cmVhbS5uZXh0IHN0cmVhbSB3aXRoXG4gICAgICB8IHYgLT4gU29tZSB2XG4gICAgICB8IGV4Y2VwdGlvbiBTdHJlYW0uRmFpbHVyZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGZpbiAoKTsganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycl9pbmZvIGxleHN0YXRlLmZuYW1lIChTb21lIGxleHN0YXRlLmxudW0pKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID8obG51bSA9IDEpIGljID1cbiAgICBsZXQgZiBpID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgbG51bSA9IGxudW0gKyBpIGluXG4gICAgICAgIGxldCBsaW5lID0gaW5wdXRfbGluZSBpYyBpbiBTb21lIChgSnNvbiAoZnJvbV9zdHJpbmcgP2ZuYW1lIH5sbnVtIGxpbmUpKVxuICAgICAgd2l0aFxuICAgICAgICB8IEVuZF9vZl9maWxlIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgICB8IGV4bl8gLT4gZmluICgpOyBTb21lIChgRXhuIGV4bl8pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9maWxlID9idWY6XyA/Zm5hbWU6XyA/bG51bTpfIGZpbGVuYW1lID1cbiAgICBsZXQgaWMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgbGluZXN0cmVhbV9mcm9tX2NoYW5uZWwgfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGljKSBpY1xuZW5kXG5cbm1vZHVsZSBDb21tb25fd3JpdGVyIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBtb2R1bGUgSW50ZXJuYWxfd3JpdGVyID0gc3RydWN0XG4gICAgaW5jbHVkZSBXcml0ZXJfc3RyaW5nLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFdyaXRlcl9maWxlLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFByZXR0eS5NYWtlKENvbXBsaWFuY2UpXG4gIGVuZFxuXG4gIGxldCB0b19zdGFuZGFyZCBqc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2ICAoKiBpbnQgaXMgb2sgb24gb3V0cHV0ICopXG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBGbG9hdGxpdCB2IC0+IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHYpXG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIFN0cmluZy5sZW5ndGggcyB3aXRoXG4gICAgICAgIHwgMCB8IDEgLT4gYFN0cmluZyBzICAgICAgICAgKCogbWFsZm9ybWVkLCBzaG91bGQgaGF2ZSBkb3VibGUtcXVvdGVzIGF0IHN0YXJ0IGFuZCBlbmQgKilcbiAgICAgICAgfCBfIC0+IGBTdHJpbmcgKFN0cmluZy5zdWIgcyAxIChTdHJpbmcubGVuZ3RoIHMgLSAyKSlcbiAgICAgICAgZW5kXG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCBsKVxuICAgICAgfCBgQXNzb2MgYSAtPiBgQXNzb2MgKExpc3QubWFwIChmdW4gKGlkLCB2KSAtPiAoaWQsIG1hcCB2KSkgYSlcbiAgICAgIHwgYFR1cGxlIHRwbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIHRwbClcbiAgICAgIHwgYFZhcmlhbnQgKG5hbWUsIGpvcHQpIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBqb3B0IHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBgU3RyaW5nIG5hbWVcbiAgICAgICAgIHwgU29tZSB2IC0+IGBMaXN0IFsgYFN0cmluZyBuYW1lOyAobWFwIHYpIF1cbiAgICAgICAgZW5kXG4gICAgaW5cbiAgICBtYXAganNvblxuXG4gICgqIFdyaXRlcnMgKilcblxuICBsZXQgdG9fc3RyaW5nID9idWY6XyA/bGVuOl8gPyhzdGQgPSBmYWxzZSkganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX3N0cmluZyAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fc3RyaW5nIGpzb25cblxuICBsZXQgdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID8oc3RkID0gZmFsc2UpIG91dF9jaGFubmVsIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19jaGFubmVsIG91dF9jaGFubmVsICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2NoYW5uZWwgb3V0X2NoYW5uZWwganNvblxuXG4gIGxldCB0b19maWxlID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBmaWxlbmFtZSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fZmlsZSBmaWxlbmFtZSAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci50b19maWxlIGZpbGVuYW1lIGpzb25cblxuICBsZXQgdG9fb3V0YnVmID8oc3RkID0gZmFsc2UpIGJ1ZiBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiBqc29uXG5cbiAgbGV0IHRvX291dHB1dCA/YnVmOl8gP2xlbjpfID9zdGQgb3V0IGpzb24gPVxuICAgIGxldCBzdHIgPSB0b19zdHJpbmcgP3N0ZCBqc29uIGluXG4gICAgb3V0I291dHB1dCBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IHN0cmVhbV90b19zdHJpbmcgP2J1ZjpfID9sZW46XyA/c3RkIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXJcbiAgICAgIChmdW4ganNvbiAtPiB0b19vdXRidWYgP3N0ZCBidWYganNvbjsgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID9zdGQgb2Mgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fY2hhbm5lbCA/c3RkIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgP2xlbjpfID9zdGQgZmlsZW5hbWUgc3RyZWFtID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlbmFtZSBpblxuICAgIHRyeSAoc3RyZWFtX3RvX2NoYW5uZWwgP3N0ZCBvYyBzdHJlYW07IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHN0cmVhbV90b19vdXRidWYgP3N0ZCBidWYgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fb3V0YnVmID9zdGQgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCB3cml0ZV90IGJ1ZiBqc29uID0gdG9fb3V0YnVmIGJ1ZiBqc29uXG5cbiAgKCogUHJldHR5IHByaW50ZXJzICopXG4gIGxldCBwcmV0dHlfcHJpbnQgPyhzdGQgPSBmYWxzZSkgb3V0IGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnQgb3V0ICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludCBvdXQganNvblxuXG4gIGxldCBwcmV0dHlfdG9fc3RyaW5nID8oc3RkID0gZmFsc2UpIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fc3RyaW5nICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19zdHJpbmcganNvblxuXG4gIGxldCBwcmV0dHlfdG9fY2hhbm5lbCA/KHN0ZCA9IGZhbHNlKSBvYyBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MganNvblxuXG4gICgqIFV0aWxpdGllcyAqKVxuICBsZXQgc2hvdyBqc29uID0gVXRpbGl0aWVzLmpzb25fdG9fc3RyaW5nX3JlcHIganNvblxuICBsZXQgcHAgb3V0IGpzb24gPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoc2hvdyBqc29uKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5CYXNpYy5qc29uXG5cbiAgICBvcGVuIFRva2Vuc1xuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgc1xuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgXyA9IENPTVBMSUFOQ0VfRVJST1IgXCJJbnRlZ2VyIG91dCBvZiBib3VuZHNcIlxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSBmYWxzZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IGZhbHNlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnQgaVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nIHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBfbCA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICBsZXQgdmFyaWFudCBfbCA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0IGZcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXQgKDEuMCAvLiAwLjApXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0ICgtMS4wIC8uIDAuMClcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXQgKDAuMCAvLiAwLjApXG4gICAgfCBgRmxvYXRsaXQgXyAtPiAgcmFpc2UgKEZhaWx1cmUgXCJmbG9hdGxpdCBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuQmFzaWMuc29ydFxuXG4gIG1vZHVsZSBVdGlsID0gc3RydWN0XG4gICAgaW5jbHVkZSBQcm9jZXNzLkJhc2ljXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBTYWZlID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG4gICAgdHlwZSBqc29uID1cbiAgICAgIFtcbiAgICAgIHwgYE51bGxcbiAgICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgICAgfCBgSW50IG9mIGludFxuICAgICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgICAgfCBgRmxvYXQgb2YgZmxvYXRcbiAgICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICAoKiB5b2pzb24gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nICopXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCB0b2tlbiA9IHRva2VuXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IHRydWVcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSB0cnVlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBJbnRsaXQgc1xuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50IGlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZyBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgbCA9IGBUdXBsZSBsXG4gICAgbGV0IHZhcmlhbnQgayB2ID0gYFZhcmlhbnQgKGssIHYpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXQgZlxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdCAoMS4wIC8uIDAuMClcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXQgKC0xLjAgLy4gMC4wKVxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdCAoMC4wIC8uIDAuMClcbiAgICB8IGBGbG9hdGxpdCBfIC0+ICByYWlzZSAoRmFpbHVyZSBcImZsb2F0bGl0IG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIHNhZmUgbW9kZVwiKVxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5cbiAgbGV0IHRvX2Jhc2ljIGpzb24gOiBCYXNpYy5qc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIGwpXG4gICAgICB8IGBBc3NvYyBhIC0+IGBBc3NvYyAoTGlzdC5tYXAgKGZ1biAoaWQsIHYpIC0+IChpZCwgbWFwIHYpKSBhKVxuICAgICAgfCBgVHVwbGUgdHBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgdHBsKVxuICAgICAgfCBgVmFyaWFudCAobmFtZSwgam9wdCkgLT5cbiAgICAgICAgIG1hdGNoIGpvcHQgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IGBTdHJpbmcgbmFtZVxuICAgICAgICAgfCBTb21lIHYgLT4gYExpc3QgWyBgU3RyaW5nIG5hbWU7IChtYXAgdikgXVxuICAgIGluXG4gICAgbWFwIGpzb25cblxuICBtb2R1bGUgVXRpbCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgUHJvY2Vzcy5Zb2pzb25fc2FmZVxuICBlbmRcbmVuZFxuXG5tb2R1bGUgUmF3ID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG5cbiAgdHlwZSBqc29uID1cbiAgICBbXG4gICAgfCBgTnVsbFxuICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICB8IGBGbG9hdGxpdCBvZiBzdHJpbmdcbiAgICB8IGBTdHJpbmdsaXQgb2Ygc3RyaW5nXG4gICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICgqIHlvanNvbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgKilcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBcIlxcXCJcIiBeIHMgXiBcIlxcXCJcIlxuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgdG9rZW4gPSB0b2tlblxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSB0cnVlXG4gICAgbGV0IGxleF90dXBsZSBfID0gdHJ1ZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgSW50bGl0IHNcbiAgICBsZXQgaW50ZWdlciBpID0gYEludGxpdCAoc3RyaW5nX29mX2ludCBpKVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nbGl0IHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBsID0gYFR1cGxlIGxcbiAgICBsZXQgdmFyaWFudCBrIHYgPSBgVmFyaWFudCAoaywgdilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdGxpdCAoc3RyaW5nX29mX2Zsb2F0IGYpXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0bGl0IFwiSW5maW5pdHlcIlxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdGxpdCBcIi1JbmZpbml0eVwiXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0bGl0IFwiTmFOXCJcbiAgICB8IGBGbG9hdGxpdCBmIC0+ICBgRmxvYXRsaXQgZlxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5lbmRcbiIsImluY2x1ZGUgQ29udGFpbmVyc0xhYmVsc1xuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG4gIG1vZHVsZSBTZXQgPSBTZXQuTWFrZSAoU3RyaW5nKVxuZW5kXG5cbm1vZHVsZSBZb2pzb24gPSBzdHJ1Y3RcbiAgaW5jbHVkZSBKc29ueHQuWW9qc29uXG5lbmRcblxubW9kdWxlIEVuY29kaW5ncyA9IHN0cnVjdFxuICBsZXQgdG9fanN0ciB0ID0gSnYucmVwciB0IHw+IEJyci5Kc29uLmVuY29kZVxuICBsZXQgdG9fanYgdCA9IHRvX2pzdHIgdCB8PiBKdi5vZl9qc3RyXG5cbiAgbGV0IG9mX2pzdHIganN0ciA9XG4gICAgbWF0Y2ggQnJyLkpzb24uZGVjb2RlIGpzdHIgd2l0aFxuICAgIHwgT2sgdiAtPiBPayAoT2JqLm1hZ2ljIHYpXG4gICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgQnJyLkNvbnNvbGUuZXJyb3IgWyBlcnIgXTtcbiAgICAgICAgRXJyb3IgKGBNc2cgXCJGYWlsZWQgdG8gdW5tYXJzaGFsIGRhdGFcIilcblxuICBsZXQgb2ZfanYganYgPSBKdi50b19qc3RyIGp2IHw+IG9mX2pzdHJcbmVuZFxuXG5sZXQgcmFuZG9tX3N0YXRlID0gUmFuZG9tLmdldF9zdGF0ZSAoKVxubGV0IG5ld191dWlkX3Y0ICgpID0gVXVpZG0udjRfZ2VuIHJhbmRvbV9zdGF0ZSAoKVxuXG4oKiogW3RlZSBmIHhdIGFwcGxpZXMgW2ZdIHRvIFt4XSBhbmQgcmV0dXJucyBbeF0gKilcbmxldCB0ZWUgZiB4ID1cbiAgbGV0ICgpID0gZiB4IGluXG4gIHhcbiIsIm9wZW4gU3RkXG5cbm1vZHVsZSBDbGFzc2VzID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nLlNldFxuXG4gIHR5cGUgbm9ucmVjIHQgPSB0XG4gIHR5cGUgbW9kaWZpZXIgPSBBZGQgb2Ygc3RyaW5nIGxpc3QgfCBSZXBsYWNlIG9mIHN0cmluZyBsaXN0XG5cbiAgbGV0IG1ha2UgbCA9IG9mX2xpc3QgbFxuICBsZXQgdXBkYXRlIHQgPSBmdW5jdGlvbiBBZGQgbCAtPiBhZGRfbGlzdCB0IGwgfCBSZXBsYWNlIGwgLT4gb2ZfbGlzdCBsXG5cbiAgbGV0IHRvX3N0cmluZyB0ID1cbiAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4gYyAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgICAgUHJpbnRmLmJwcmludGYgYiBcIiVzXCIgYylcbiAgICAgICAgZWxzZSBQcmludGYuYnByaW50ZiBiIFwiICVzXCIgYylcbiAgICAgIHQ7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcblxuICBsZXQgYXRfb2Zfc3RyaW5nIGMgPSBCcnIuQXQuY2xhc3MnIEBAIEpzdHIudiBjXG5cbiAgbW9kdWxlIFAgPSBzdHJ1Y3RcbiAgICBsZXQgdG9fYXQgdCA9XG4gICAgICBMaXN0Lm1hcCAodG9fbGlzdCB0KSB+ZjooZnVuIGMgLT4gYFAgKEJyci5BdC5jbGFzcycgQEAgSnN0ci52IGMpKVxuICBlbmRcbmVuZFxuXG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgdCA9IHsgY2xhc3NlcyA6IENsYXNzZXMudDsgYXR0cnMgOiBBdC50IEVsd2QuY29sIH1cbigqKiBDbGFzc2VzIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBidXQgYXJlIGV2ZW50dWFsbHkgdHJhbnNsYXRlZCB0byBBdC50ICopXG5cbmxldCBlbXB0eSA9IHsgY2xhc3NlcyA9IENsYXNzZXMuZW1wdHk7IGF0dHJzID0gW10gfVxuXG5sZXQgdG9fYXQgP2lkIHQgPVxuICBsZXQgYXQgPSBMaXN0LnJldl9hcHBlbmQgdC5hdHRycyBAQCBDbGFzc2VzLlAudG9fYXQgdC5jbGFzc2VzIGluXG4gIG1hdGNoIGlkIHdpdGggTm9uZSAtPiBhdCB8IFNvbWUgaWQgLT4gYFAgKEF0LmlkIChKc3RyLnYgaWQpKSA6OiBhdFxuXG5sZXQgY2xhc3NlcyBsID0geyBlbXB0eSB3aXRoIGNsYXNzZXMgPSBDbGFzc2VzLm9mX2xpc3QgbCB9XG5cbmxldCB1bmlvbiB7IGNsYXNzZXM7IGF0dHJzIH0geyBjbGFzc2VzID0gYzsgYXR0cnMgPSBhIH0gPVxuICB7IGNsYXNzZXMgPSBDbGFzc2VzLnVuaW9uIGNsYXNzZXMgYzsgYXR0cnMgPSBMaXN0LnJldl9hcHBlbmQgYXR0cnMgYSB9XG5cbm1vZHVsZSBCdWlsZGVyID0gc3RydWN0XG4gIHR5cGUgYXQgPSBDIG9mIHN0cmluZyB8IEF0IG9mIEF0LnRcblxuICBsZXQgKCArICkgdCA9IGZ1bmN0aW9uXG4gICAgfCBDIGNsYXNzbmFtZSAtPlxuICAgICAgICBsZXQgY2xhc3NlcyA9IENsYXNzZXMuYWRkIGNsYXNzbmFtZSB0LmNsYXNzZXMgaW5cbiAgICAgICAgeyB0IHdpdGggY2xhc3NlcyB9XG4gICAgfCBBdCBhdCAtPlxuICAgICAgICBsZXQgYXR0cnMgPSBgUCBhdCA6OiB0LmF0dHJzIGluXG4gICAgICAgIHsgdCB3aXRoIGF0dHJzIH1cblxuICBsZXQgd2l0aF9pZCBzIHQgPVxuICAgIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICAgIHRvX2F0IHsgdCB3aXRoIGF0dHJzIH1cbmVuZFxuXG4oKiBuZXcgQVBJICopXG5cbmxldCBhZGQgYXRfbmFtZSB2IGF0ID1cbiAgbGV0IGEgPVxuICAgIG1hdGNoIHYgd2l0aFxuICAgIHwgYFAgdiAtPiBgUCAoQXQudiBhdF9uYW1lIEBAIEpzdHIudiB2KVxuICAgIHwgYFIgdiAtPiBgUiAoTHdkLm1hcCB2IH5mOihmdW4gdiAtPiBBdC52IGF0X25hbWUgQEAgSnN0ci52IHYpKVxuICAgIHwgYFMgXyAtPiBmYWlsd2l0aCBcIlRPRE8gbm90IGltcGxlbWVudGVkXCJcbiAgaW5cbiAgYSA6OiBhdFxuXG5sZXQgYWRkX2Jvb2wgYXRfIHYgYXQgPSBtYXRjaCB2IHdpdGggZmFsc2UgLT4gYXQgfCB0cnVlIC0+IGBQIGF0XyA6OiBhdFxuXG5sZXQgYWRkX3N0ciBhdF9uYW1lIHYgYXQgPVxuICBtYXRjaCB2IHdpdGggXCJcIiAtPiBhdCB8IHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikgOjogYXRcblxubGV0IGFkZF9vcHQgYXRfbmFtZSB2IGF0ID1cbiAgbWF0Y2ggdiB3aXRoIE5vbmUgLT4gYXQgfCBTb21lIHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikgOjogYXRcblxudHlwZSBhdCA9IEMgb2Ygc3RyaW5nIHwgQSBvZiBBdC50XG50eXBlICdhdCB0JyA9ICdhdCBFbHdkLmNvbFxuXG5sZXQgbWFwX2NvbCBmID0gZnVuY3Rpb25cbiAgfCBgUCB2IC0+IGBQIChmIHYpXG4gIHwgYFIgdiAtPiBgUiAoTHdkLm1hcCB2IH5mKVxuICB8IGBTIHYgLT4gYFMgKEx3ZF9zZXEubWFwIGYgdilcblxubGV0IG9mX2F0ID0gZnVuY3Rpb24gQSBhdCAtPiBhdCB8IEMgbmFtZSAtPiBBdC5jbGFzcycgKEpzdHIudiBuYW1lKVxubGV0IGNvbnMgYXQgdCA9IG1hcF9jb2wgb2ZfYXQgYXQgOjogdFxubGV0IGNsYXNzXyBuID0gY29ucyAobWFwX2NvbCAoZnVuIG4gLT4gQyBuKSBuKSBbXVxuXG5tb2R1bGUgTyA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyBhdCA9IGF0ID0gQyBvZiBzdHJpbmcgfCBBIG9mIEF0LnRcblxuICBsZXQgdiBhdCA9IGNvbnMgYXQgW11cbiAgbGV0ICggJDo6ICkgYXQgdCA9IGNvbnMgYXQgdFxuZW5kXG5cbmxldCB3aXRoX2lkIHMgdCA9XG4gIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICB0b19hdCB7IHQgd2l0aCBhdHRycyB9XG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJcblxudHlwZSAnYSBvbmVfbWF5YmVfcmVhY3RpdmUgPSBbIGBQIG9mICdhIHwgYFIgb2YgJ2EgTHdkLnQgXVxudHlwZSAnYSBtYXliZV9yZWFjdGl2ZSA9IFsgJ2Egb25lX21heWJlX3JlYWN0aXZlIHwgYFMgb2YgJ2EgTHdkX3NlcS50IEx3ZC50IF1cblxubGV0IGlzX3B1cmVfZWxlbWVudCA9IGZ1bmN0aW9uXG4gIHwgYFAgXyAtPiB0cnVlXG4gIHwgYFIgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcbiAgfCBgUyB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgcHVyZSB0ID0gYFAgdFxubGV0IHJlYWN0aXZlIHQgPSBgUiB0XG5sZXQgc2VxdWVuY2UgdCA9IGBTIHRcblxubW9kdWxlIFVuaXQgPSBzdHJ1Y3RcbiAgKCoqIENvbnZlcnNpb24gYmV0d2VlbiBDU1MgdW5pdHMuIFZlcnkgZWFybHkgV0lQLiAqKVxuICB0eXBlIHQgPSBQeCBvZiBmbG9hdCB8IFJlbSBvZiBmbG9hdCB8IEVtIG9mIGZsb2F0XG5cbiAgbGV0IG9mX3N0cmluZyBzID1cbiAgICAoKiBUT0RPOiBwcm9wZXIgcGFyc2luZyAqKVxuICAgIG1hdGNoIFN0cmluZy5jaG9wX3N1ZmZpeCB+c3VmOlwicHhcIiBzIHdpdGhcbiAgICB8IFNvbWUgaSAtPiAoXG4gICAgICAgIG1hdGNoIEludC5vZl9zdHJpbmcgaSB3aXRoXG4gICAgICAgIHwgU29tZSBpIC0+IFNvbWUgKFB4IChmbG9hdF9vZl9pbnQgaSkpXG4gICAgICAgIHwgTm9uZSAtPiBGbG9hdC5vZl9zdHJpbmdfb3B0IGkgfD4gT3B0aW9uLm1hcCAoZnVuIGkgLT4gUHggaSkpXG4gICAgfCBOb25lIC0+IChcbiAgICAgICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJyZW1cIiBzIHdpdGhcbiAgICAgICAgfCBTb21lIGYgLT4gRmxvYXQub2Zfc3RyaW5nX29wdCBmIHw+IE9wdGlvbi5tYXAgKGZ1biBmIC0+IFJlbSBmKVxuICAgICAgICB8IE5vbmUgLT4gKFxuICAgICAgICAgICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJlbVwiIHMgd2l0aFxuICAgICAgICAgICAgfCBTb21lIGYgLT4gRmxvYXQub2Zfc3RyaW5nX29wdCBmIHw+IE9wdGlvbi5tYXAgKGZ1biBmIC0+IFJlbSBmKVxuICAgICAgICAgICAgfCBOb25lIC0+IE5vbmUpKVxuXG4gIGxldCB0b19zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBQcmludGYuc3ByaW50ZiBcIiVmcHhcIiBpXG4gICAgfCBSZW0gZiAtPiBQcmludGYuc3ByaW50ZiBcIiVmcmVtXCIgZlxuICAgIHwgRW0gZiAtPiBQcmludGYuc3ByaW50ZiBcIiVmZW1cIiBmXG5cbiAgbGV0IHRvX3B4ID8ocGFyZW50ID0gRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSA9XG4gICAgbGV0IGdldF9mb250X3NpemVfaW5fcHggcGFyZW50ID1cbiAgICAgIGxldCBmb250X3NpemUgPVxuICAgICAgICBFbC5jb21wdXRlZF9zdHlsZSAoSnN0ci52IFwiZm9udC1zaXplXCIpIHBhcmVudCB8PiBKc3RyLnRvX3N0cmluZ1xuICAgICAgaW5cbiAgICAgIG1hdGNoIG9mX3N0cmluZyBmb250X3NpemUgd2l0aFxuICAgICAgfCBOb25lIC0+IDE2LlxuICAgICAgfCBTb21lIChQeCBpKSAtPiBpXG4gICAgICB8IFNvbWUgXyAtPiBmYWlsd2l0aCBcIm5vdCBpbXBsZW1lbnRlZFwiXG4gICAgaW5cbiAgICBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBpXG4gICAgfCBSZW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCAoRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSBpblxuICAgICAgICBmICouIGZvbnRfc2l6ZVxuICAgIHwgRW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCBwYXJlbnQgaW5cbiAgICAgICAgZiAqLiBmb250X3NpemVcbmVuZFxuXG5sZXQgbGlzdGVuIH5mIHQgPVxuICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIHQgaW5cbiAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+IGYgKEx3ZC5xdWlja19zYW1wbGUgcm9vdCkpO1xuICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG5cbmxldCBtYXAzIH5mIGEgYiBjID1cbiAgTHdkLm1hcDIgYSBiIH5mOihmdW4gYSBiIC0+IChhLCBiKSkgfD4gTHdkLm1hcDIgYyB+ZjooZnVuIGMgKGEsIGIpIC0+IGYgYSBiIGMpXG5cbmxldCB0cmlwbGUgYSBiIGMgPSBtYXAzIGEgYiBjIH5mOihmdW4gYSBiIGMgLT4gKGEsIGIsIGMpKVxuIiwib3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxubW9kdWxlIEEgPSBBdHRyc1xuXG50eXBlIHRhcmdldCA9IFBvcyBvZiBpbnQgfCBFbCBvZiBFbHdkLnRcbnR5cGUgdCA9IHsgZWx0IDogRWx3ZC50IEx3ZC50OyBzY3JvbGxfcG9zaXRpb24gOiB0YXJnZXQgb3B0aW9uIEx3ZC52YXIgfVxuXG4oKiBUT0RPOiBtYWtlIGEgcHJvcGVyIGJpbmRpbmcgKilcbmxldCBqc19zY3JvbGwgZWx0IHRhcmdldCA9XG4gIG1hdGNoIHRhcmdldCB3aXRoXG4gIHwgUG9zIHggLT5cbiAgICAgIGxldCBlbHQgPSBFbC50b19qdiBlbHQgaW5cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIGVsdCBcInNjcm9sbFwiIFt8IEp2Lm9mX2ludCAwOyBKdi5vZl9pbnQgeCB8XVxuICB8IEVsIGVsIC0+IEVsLnNjcm9sbF9pbnRvX3ZpZXcgZWxcblxubGV0IG1ha2UgPyhhdCA9IFtdKSB+c2Nyb2xsX3RhcmdldCBlbHQgPVxuICBsZXQgYWN0aXZlID0gTHdkLnZhciB0cnVlIGluXG4gIGxldCBhdCA9IEEuTy4oYFAgKEMgXCJsd2R1aS1jb250cm9sbGVkLXNjcm9sbC13cmFwcGVyXCIpICQ6OiBhdCkgaW5cbiAgbGV0IGNvbnRyb2xzID1cbiAgICBsZXQgYXQgPSBBLmNsYXNzXyAoYFAgXCJsd2R1aS1jb250cm9sbGVkLXNjcm9sbC1jb250cm9sc1wiKSBpblxuICAgIGxldCBldiA9XG4gICAgICBsZXQgb25fY2xpY2sgXyA9IEx3ZC5zZXQgYWN0aXZlIHRydWUgaW5cbiAgICAgIGxldCBoYW5kbGVyID0gRWx3ZC5oYW5kbGVyIEV2LmNsaWNrIG9uX2NsaWNrIGluXG4gICAgICBbIGBQIGhhbmRsZXIgXVxuICAgIGluXG4gICAgRWx3ZC5kaXYgfmF0IH5ldiBbIGBSIChFbHdkLmJ1dHRvbiBbIGBQIChFbC50eHQnIFwiU2hvdyBwbGF5aW5nXCIpIF0pIF1cbiAgaW5cbiAgbGV0IG9uX3doZWVsID1cbiAgICBFbHdkLmhhbmRsZXIgRXYud2hlZWwgKGZ1biBfZXYgLT5cbiAgICAgICAgaWYgTHdkLnBlZWsgYWN0aXZlIHRoZW4gTHdkLnNldCBhY3RpdmUgZmFsc2UpXG4gIGluXG4gIGxldCBlbHQgPVxuICAgIGxldCBzdGF0ZSA9IFV0aWxzLnRyaXBsZSBlbHQgKEx3ZC5nZXQgYWN0aXZlKSBzY3JvbGxfdGFyZ2V0IGluXG4gICAgTHdkLm1hcCBzdGF0ZSB+ZjooZnVuIChlbHQsIGFjdGl2ZSwgcG9zKSAtPlxuICAgICAgICBpZiBhY3RpdmUgdGhlbiBPcHRpb24uaXRlciAoanNfc2Nyb2xsIGVsdCkgcG9zO1xuICAgICAgICBlbHQpXG4gIGluXG4gIEVsd2QuZGl2IH5hdCB+ZXY6WyBgUCBvbl93aGVlbCBdIFsgYFIgZWx0OyBgUiBjb250cm9scyBdXG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG5tb2R1bGUgQ29sdW1ucyA9IHN0cnVjdFxuICB0eXBlIGNvbHVtbiA9IHsgbmFtZSA6IHN0cmluZzsgY3NzX3NpemUgOiBzdHJpbmc7IGNvbnRlbnQgOiBFbHdkLnQgRWx3ZC5jb2wgfVxuICB0eXBlIHQgPSBjb2x1bW4gYXJyYXlcblxuICBsZXQgdiBuYW1lIGNzc19zaXplIGNvbnRlbnQgPSB7IG5hbWU7IGNzc19zaXplOyBjb250ZW50IH1cblxuICBsZXQgdG9faGVhZGVyIHQgPVxuICAgIGxldCBjZWxscyA9XG4gICAgICBBcnJheS5mb2xkX3JpZ2h0IHQgfmluaXQ6W10gfmY6KGZ1biB7IGNvbnRlbnQ7IF8gfSBhY2MgLT5cbiAgICAgICAgICBgUiAoRWx3ZC5kaXYgY29udGVudCkgOjogYWNjKVxuICAgIGluXG4gICAgY2VsbHNcblxuICBsZXQgc3R5bGUgdCA9XG4gICAgbGV0IHRlbXBsYXRlID1cbiAgICAgIEFycmF5LnRvX3N0cmluZyB+c2VwOlwiIFwiIChmdW4geyBjc3Nfc2l6ZTsgXyB9IC0+IGNzc19zaXplKSB0XG4gICAgaW5cbiAgICBQcmludGYuc3ByaW50ZiBcIiVzOiAlcztcIiBcImdyaWQtdGVtcGxhdGUtY29sdW1uc1wiIHRlbXBsYXRlXG5lbmRcblxudHlwZSB0ID0geyBjb2x1bW5zIDogQ29sdW1ucy50IH1cbnR5cGUgZml4ZWRfcm93X2hlaWdodCA9IHsgdGFibGUgOiB0OyByb3dfaGVpZ2h0IDogVXRpbHMuVW5pdC50IH1cblxubGV0IHN0eWxlIHQgPVxuICBsZXQgc3R5bGUgPSBDb2x1bW5zLnN0eWxlIHQudGFibGUuY29sdW1ucyBpblxuICBTdHJpbmcuY29uY2F0IH5zZXA6XCIgXCIgWyBzdHlsZSBdXG5cbmxldCBoZWFkZXIgdCA9XG4gIGxldCByb3dfaGVpZ2h0ID0gVXRpbHMuVW5pdC50b19zdHJpbmcgdC5yb3dfaGVpZ2h0IGluXG4gIGxldCBhdCA9XG4gICAgWyBgUCAoQXQuc3R5bGUgKEpzdHIudiBAQCBQcmludGYuc3ByaW50ZiBcImhlaWdodDogJXNcIiByb3dfaGVpZ2h0KSkgXVxuICBpblxuICBFbHdkLmRpdiB+YXQgQEAgQ29sdW1ucy50b19oZWFkZXIgdC50YWJsZS5jb2x1bW5zXG5cbmxldCBfID0gVXRpbHMuVW5pdC50b19weCAoUmVtIDQuKVxuIiwiKCoqIEEgdmlydHVhbCB0YWJsZSB0aGF0IGNhbiBoYW5kbGUgbGFyZ2UgZGF0YXNldC5cblxuICAgIFRPRE86IHRoaXMgaXMgY2xlYXJseSBvdmVyLWVuZ2luZWVyZWQ6IHRoZSBsYXJnZSBsd2QgdGFibGUgdGhhdCByZWR1Y2VzIHRvIFxuICAgIHJvd3MgYW5kIHBsYWNlaG9sZGVycyB3aXRoIGEgbW9ub2lkIGlzIGVsZWdhbnQgYnUgZG9lcyBub3Qgc2NhbGUgd2VsbC4gSXQgXG4gICAgbWlnaHQgYmUgcG9zc2libGUgdG8gb3B0aW1pemUgaXQgKGVzcGVjaWFsbHkgdGhlIFwidW5pcXVldWVcIiBMUlUgdGhpbmd5KSwgXG4gICAgYnV0IGhhdmluZyB0b28gbGFyZ2UgYSBsd2RfdGFibGUgaXMgcHJvYmFibHkgYSBoYXJkIGxpbWl0LiAqKVxuXG5vcGVuIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG5tb2R1bGUgVW5pcXVldWUgKE8gOiBTZXQuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBTZXQgPSBTZXQuTWFrZSAoTylcblxuICB0eXBlIG5vbnJlYyB0ID0geyBtdXRhYmxlIHF1ZXVlIDogTy50IFF1ZXVlLnQ7IG11dGFibGUgdW5pcSA6IFNldC50IH1cblxuICBsZXQgY3JlYXRlICgpID1cbiAgICBsZXQgcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgdW5pcSA9IFNldC5lbXB0eSBpblxuICAgIHsgcXVldWU7IHVuaXEgfVxuXG4gIGxldCBhZGQgdiB0ID1cbiAgICBsZXQgbmV3X2VsdCA9IG5vdCAoU2V0Lm1lbSB2IHQudW5pcSkgaW5cbiAgICBsZXQgKCkgPVxuICAgICAgaWYgbmV3X2VsdCB0aGVuXG4gICAgICAgIGxldCAoKSA9IFF1ZXVlLmFkZCB2IHQucXVldWUgaW5cbiAgICAgICAgdC51bmlxIDwtIFNldC5hZGQgdiB0LnVuaXFcbiAgICAgIGVsc2VcbiAgICAgICAgKCogSWYgdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBpbiB0aGUgcXVldWUgd2UgXCJidWJibGVcIiBpdCB1cCAqKVxuICAgICAgICAoKiBUb2RvOiB0aGlzIGlzIG5vdCBtYWRlIGluIGEgdmVyeSBlZmZpY2llbnQgd2F5Li4uICopXG4gICAgICAgIGxldCBuZXdfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICAgICAgUXVldWUuaXRlclxuICAgICAgICAgIChmdW4gdicgLT5cbiAgICAgICAgICAgIGlmIG5vdCBAQCBJbnQuZXF1YWwgKE8uY29tcGFyZSB2IHYnKSAwIHRoZW4gUXVldWUuYWRkIHYnIG5ld19xdWV1ZSlcbiAgICAgICAgICB0LnF1ZXVlO1xuICAgICAgICBRdWV1ZS5hZGQgdiBuZXdfcXVldWU7XG4gICAgICAgIHQucXVldWUgPC0gbmV3X3F1ZXVlXG4gICAgaW5cbiAgICBuZXdfZWx0XG5cbiAgbGV0IHRha2UgdCA9XG4gICAgbGV0IGkgPSBRdWV1ZS50YWtlIHQucXVldWUgaW5cbiAgICB0LnVuaXEgPC0gU2V0LnJlbW92ZSBpIHQudW5pcTtcbiAgICBpXG5cbiAgbGV0IGxlbmd0aCB0ID0gUXVldWUubGVuZ3RoIHQucXVldWVcblxuICBsZXQgY2xlYXIgdCA9XG4gICAgbGV0IG5ld19xdWV1ZSA9IGNyZWF0ZSAoKSBpblxuICAgIHQucXVldWUgPC0gbmV3X3F1ZXVlLnF1ZXVlO1xuICAgIHQudW5pcSA8LSBuZXdfcXVldWUudW5pcVxuZW5kXG5cbm1vZHVsZSBJbnRfdW5pcXVldWUgPSBVbmlxdWV1ZSAoSW50KVxuXG50eXBlICdhIHJvd19kYXRhID0ge1xuICBpbmRleCA6IGludDtcbiAgY29udGVudCA6ICdhIG9wdGlvbjtcbiAgcmVuZGVyIDogaW50IC0+ICdhIC0+IEVsd2QudCBFbHdkLmNvbDtcbn1cblxudHlwZSAoJ2RhdGEsICdlcnJvcikgZGF0YV9zb3VyY2UgPSB7XG4gIHRvdGFsX2l0ZW1zIDogKGludCwgJ2Vycm9yKSBGdXQucmVzdWx0O1xuICBmZXRjaCA6IGludCBhcnJheSAtPiAoJ2RhdGEgb3B0aW9uIGFycmF5LCAnZXJyb3IpIEZ1dC5yZXN1bHQ7XG4gIHJlbmRlciA6IGludCAtPiAnZGF0YSAtPiBFbHdkLnQgRWx3ZC5jb2w7XG59XG5cbigqIFRoZSB2aXJ0dWFsIHRhYmxlIGlzIGEgY29tcGxleCByZWFjdGl2ZSBjb21wb25lbnQuIFByaW1hcmlseSwgaXQgcmVhY3RzIHRvXG4gICBjaGFuZ2VzIG9mIHRoZSBbZGF0YV9zb3VyY2VdIHNvIHRoYXQgY29udGVudCBpbiB0aGUgdGFibGUgaXMgcHJvcGVybHlcbiAgIHJlZnJlc2hlZCB3aGVuIGl0IGRvZXMuIEFkZGl0aW9ubmFseSBpdCBuZWVkcyB0byByZWFjdCB0byBtdWx0aXBsZSBkb21cbiAgIGV2ZW50cywgbm90YWJseSB2ZXJ0aWNhbCByZXNpemUgb2YgdGhlIGNvbnRhaW5lciBhbmQgc2Nyb2xsIGV2ZW50cywgdG8gZW5zdXJlXG4gICB0aGF0IHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIHRhbGJlIGlzIGFsd2F5cyBwb3B1bGF0ZWQgd2l0aCByb3dzLiAqKVxuXG5sZXQgbWFrZSAodHlwZSBkYXRhKSB+KHVpX3RhYmxlIDogU2NoZW1hLmZpeGVkX3Jvd19oZWlnaHQpXG4gICAgPyhwbGFjZWhvbGRlciA6IGludCAtPiBFbHdkLnQgRWx3ZC5jb2wgPSBmdW4gXyAtPiBbXSlcbiAgICA/KHNjcm9sbF90YXJnZXQgOiBpbnQgTHdkLnQgb3B0aW9uKVxuICAgIChkYXRhX3NvdXJjZSA6IChkYXRhLCBfKSBkYXRhX3NvdXJjZSBMd2QudCkgPVxuICBpZ25vcmUgcGxhY2Vob2xkZXI7XG4gIGxldCByb3dfc2l6ZSA9IHVpX3RhYmxlLnJvd19oZWlnaHQgfD4gVXRpbHMuVW5pdC50b19zdHJpbmcgaW5cbiAgbGV0IGhlaWdodF9uIG4gPSBQcmludGYuc3ByaW50ZiBcImhlaWdodDogY2FsYyglcyAqICVpKTtcIiByb3dfc2l6ZSBuIGluXG4gIGxldCBoZWlnaHQgPSBQcmludGYuc3ByaW50ZiBcImhlaWdodDogJXMgIWltcG9ydGFudDtcIiByb3dfc2l6ZSBpblxuICBsZXQgdGFibGUgOiBkYXRhIHJvd19kYXRhIEx3ZF90YWJsZS50ID0gTHdkX3RhYmxlLm1ha2UgKCkgaW5cbiAgKCogVGhlIFtyb3dzXSB0YWJsZSBpcyB1c2VkIHRvIHJlbGF0ZSBkaXZzIHRvIHRoZSB0YWJsZSdzIHJvd3MgaW4gdGhlXG4gICAgIG9ic2VydmVyJ3MgY2FsbGJhY2sgKilcbiAgbGV0IHJvd19pbmRleCA6IChpbnQsIGRhdGEgcm93X2RhdGEgTHdkX3RhYmxlLnJvdykgSGFzaHRibC50ID1cbiAgICBIYXNodGJsLmNyZWF0ZSAyMDQ4XG4gIGluXG4gIGxldCB1bmxvYWRfcXVldWUgPSBJbnRfdW5pcXVldWUuY3JlYXRlICgpIGluXG5cbiAgbGV0IGFkZCB+ZmV0Y2ggPyhtYXhfaXRlbXMgPSAyMDApIGluZGV4ZXMgPVxuICAgIGxldCB1bmxvYWQgaSA9XG4gICAgICBsZXQgb3BlbiBPcHRpb24uSW5maXggaW5cbiAgICAgIChsZXQqIHJvdyA9IEhhc2h0YmwuZ2V0IHJvd19pbmRleCBpIGluXG4gICAgICAgbGV0KyByb3dfZGF0YSA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgTHdkX3RhYmxlLnNldCByb3cgeyByb3dfZGF0YSB3aXRoIGNvbnRlbnQgPSBOb25lIH0pXG4gICAgICB8PiBpZ25vcmVcbiAgICBpblxuICAgIGxldCBsb2FkIGluZGV4ZXMgPVxuICAgICAgKGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgbGV0KyAoZGF0YSA6IGRhdGEgb3B0aW9uIGFycmF5KSA9IGZldGNoIGluZGV4ZXMgaW5cbiAgICAgICBBcnJheS5pdGVyMiBpbmRleGVzIGRhdGEgfmY6KGZ1biBpIGRhdGEgLT5cbiAgICAgICAgICAgKGxldCBvcGVuIE9wdGlvbi5JbmZpeCBpblxuICAgICAgICAgICAgbGV0KiByb3cgPSBIYXNodGJsLmdldCByb3dfaW5kZXggaSBpblxuICAgICAgICAgICAgbGV0KyByb3dfZGF0YSA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgICAgICBsZXQgZGF0YSA9XG4gICAgICAgICAgICAgIG1hdGNoIGRhdGEgd2l0aCBTb21lIGRhdGEgLT4gZGF0YSB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgTHdkX3RhYmxlLnNldCByb3cgeyByb3dfZGF0YSB3aXRoIGNvbnRlbnQgPSBTb21lIGRhdGEgfSlcbiAgICAgICAgICAgfD4gaWdub3JlKSlcbiAgICAgIHw+IGlnbm9yZVxuICAgIGluXG4gICAgbGV0IGNsZWFudXAgKCkgPVxuICAgICAgbGV0IHFfbGVuZ3RoID0gSW50X3VuaXF1ZXVlLmxlbmd0aCB1bmxvYWRfcXVldWUgaW5cbiAgICAgIGlmIHFfbGVuZ3RoID4gbWF4X2l0ZW1zIHRoZW5cbiAgICAgICAgZm9yIF8gPSBtYXhfaXRlbXMgdG8gcV9sZW5ndGggZG9cbiAgICAgICAgICB0cnkgdW5sb2FkIChJbnRfdW5pcXVldWUudGFrZSB1bmxvYWRfcXVldWUpIHdpdGggUXVldWUuRW1wdHkgLT4gKClcbiAgICAgICAgZG9uZVxuICAgIGluXG4gICAgbGV0IHRvX2xvYWQgPVxuICAgICAgTGlzdC5maWx0ZXIgaW5kZXhlcyB+ZjooZnVuIGkgLT4gSW50X3VuaXF1ZXVlLmFkZCBpIHVubG9hZF9xdWV1ZSlcbiAgICBpblxuICAgIGxvYWQgKEFycmF5Lm9mX2xpc3QgdG9fbG9hZCk7XG4gICAgY2xlYW51cCAoKVxuICBpblxuICBsZXQgdGFibGVfaGVpZ2h0ID0gTHdkLnZhciBOb25lIGluXG4gIGxldCBjb21wdXRlX3Zpc2libGVfcm93cyB+bGFzdF9zY3JvbGxfeSBkaXYgPVxuICAgIGxldCBoZWlnaHQgZWx0ID1cbiAgICAgIGxldCBqdiA9IEVsLnRvX2p2IGVsdCBpblxuICAgICAgSnYuZ2V0IGp2IFwib2Zmc2V0SGVpZ2h0XCIgfD4gSnYudG9faW50XG4gICAgaW5cbiAgICBsZXQgc2Nyb2xsX3kgPSBFbC5zY3JvbGxfeSBkaXYgaW5cbiAgICBsZXQgZGlyZWN0aW9uID0gaWYgc2Nyb2xsX3kgPi4gIWxhc3Rfc2Nyb2xsX3kgdGhlbiBgRG93biBlbHNlIGBVcCBpblxuICAgIGxldCAoKSA9IGxhc3Rfc2Nyb2xsX3kgOj0gc2Nyb2xsX3kgaW5cbiAgICBsZXQgdmlzaWJsZV9oZWlnaHQgPSBoZWlnaHQgZGl2IHw+IGZsb2F0X29mX2ludCBpblxuICAgIGxldCByb3dfaGVpZ2h0ID0gVXRpbHMuVW5pdC50b19weCB+cGFyZW50OmRpdiB1aV90YWJsZS5yb3dfaGVpZ2h0IGluXG4gICAgbGV0IGhlYWRlcl9oZWlnaHQgPSByb3dfaGVpZ2h0IGluXG4gICAgbGV0IG51bWJlcl9vZl92aXNpYmxlX3Jvd3MgPSB2aXNpYmxlX2hlaWdodCAvLiByb3dfaGVpZ2h0IHw+IGludF9vZl9mbG9hdCBpblxuICAgIGxldCBibGVlZGluZyA9IG51bWJlcl9vZl92aXNpYmxlX3Jvd3MgaW5cbiAgICBsZXQgc2Nyb2xsX3kgPSBzY3JvbGxfeSAtLiBoZWFkZXJfaGVpZ2h0IGluXG4gICAgbGV0IGZpcnN0X3Zpc2libGVfcm93ID0gaW50X29mX2Zsb2F0IChzY3JvbGxfeSAvLiByb3dfaGVpZ2h0KSArIDEgaW5cbiAgICBsZXQgbGFzdF92aXNpYmxlX3JvdyA9IGZpcnN0X3Zpc2libGVfcm93ICsgbnVtYmVyX29mX3Zpc2libGVfcm93cyBpblxuICAgIGxldCBmaXJzdCA9XG4gICAgICBsZXQgYmxlZWRpbmcgPVxuICAgICAgICBtYXRjaCBkaXJlY3Rpb24gd2l0aCBgVXAgLT4gYmxlZWRpbmcgfCBfIC0+IGJsZWVkaW5nIC8gMlxuICAgICAgaW5cbiAgICAgIGZpcnN0X3Zpc2libGVfcm93IC0gYmxlZWRpbmcgfD4gbWF4IDBcbiAgICBpblxuICAgIGxldCBsYXN0ID1cbiAgICAgIGxldCBibGVlZGluZyA9XG4gICAgICAgIG1hdGNoIGRpcmVjdGlvbiB3aXRoIGBEb3duIC0+IGJsZWVkaW5nIHwgXyAtPiBibGVlZGluZyAvIDJcbiAgICAgIGluXG4gICAgICBsYXN0X3Zpc2libGVfcm93ICsgYmxlZWRpbmdcbiAgICBpblxuICAgIExpc3QuaW5pdCAobGFzdCAtIGZpcnN0KSB+ZjooZnVuIGkgLT4gZmlyc3QgKyBpKVxuICBpblxuICBsZXQgcHJlcGFyZSB+dG90YWxfaXRlbXM6dG90YWwgfnJlbmRlciA9XG4gICAgbGV0ICgpID1cbiAgICAgICgqIENsZWFudXAgKilcbiAgICAgIEx3ZF90YWJsZS5jbGVhciB0YWJsZTtcbiAgICAgIEhhc2h0YmwuY2xlYXIgcm93X2luZGV4O1xuICAgICAgSW50X3VuaXF1ZXVlLmNsZWFyIHVubG9hZF9xdWV1ZVxuICAgIGluXG4gICAgZm9yIGkgPSAwIHRvIHRvdGFsIC0gMSBkb1xuICAgICAgbGV0IHNldCA9IHsgaW5kZXggPSBpOyBjb250ZW50ID0gTm9uZTsgcmVuZGVyIH0gaW5cbiAgICAgIEhhc2h0YmwuYWRkIHJvd19pbmRleCBpIEBAIEx3ZF90YWJsZS5hcHBlbmQgfnNldCB0YWJsZVxuICAgIGRvbmVcbiAgaW5cbiAgbGV0IHBvcHVsYXRlX29uX3Njcm9sbCA9XG4gICAgTHdkLm1hcCBkYXRhX3NvdXJjZSB+ZjooZnVuIHsgdG90YWxfaXRlbXM7IGZldGNoOyByZW5kZXIgfSAtPlxuICAgICAgICBsZXQgYWRkID0gYWRkIH5mZXRjaCBpblxuICAgICAgICBsZXQgbGFzdF9zY3JvbGxfeSA9IHJlZiAwLiBpblxuICAgICAgICBsZXQgdXBkYXRlIGRpdiA9XG4gICAgICAgICAgbGV0IHZpc2libGVfcm93cyA9IGNvbXB1dGVfdmlzaWJsZV9yb3dzIH5sYXN0X3Njcm9sbF95IGRpdiBpblxuICAgICAgICAgICgqIHRvZG86IFdlIGRvIHdheSB0b28gbXVjaCB3b3JrIGFuZCByZWJ1aWxkIHRoZSBxdWV1ZSBlYWNoXG4gICAgICAgICAgICAgdGltZS4uLiBpdCdzIHZlcnkgaW5lZmljaWVudCAqKVxuICAgICAgICAgIGFkZCB+bWF4X2l0ZW1zOig0ICogTGlzdC5sZW5ndGggdmlzaWJsZV9yb3dzKSB2aXNpYmxlX3Jvd3NcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgICBsZXQrIHRvdGFsX2l0ZW1zID0gdG90YWxfaXRlbXMgaW5cbiAgICAgICAgbWF0Y2ggdG90YWxfaXRlbXMgd2l0aFxuICAgICAgICB8IE9rIHRvdGFsX2l0ZW1zIC0+XG4gICAgICAgICAgICBwcmVwYXJlIH50b3RhbF9pdGVtcyB+cmVuZGVyO1xuICAgICAgICAgICAgdXBkYXRlXG4gICAgICAgIHwgXyAtPiBpZ25vcmUpXG4gIGluXG4gIGxldCBzY3JvbGxfaGFuZGxlciA9XG4gICAgTHdkLm1hcCBwb3B1bGF0ZV9vbl9zY3JvbGwgfmY6KGZ1biB1cGRhdGUgLT5cbiAgICAgICAgRWx3ZC5oYW5kbGVyIEV2LnNjcm9sbCAoZnVuIGV2IC0+XG4gICAgICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgICAgICBpZ25vcmVcbiAgICAgICAgICAgIEBAXG4gICAgICAgICAgICBsZXQrIHVwZGF0ZSA9IHVwZGF0ZSBpblxuICAgICAgICAgICAgbGV0IHNjcm9sbF9oYW5kbGVyID1cbiAgICAgICAgICAgICAgbGV0IGxhc3RfdXBkYXRlID0gcmVmIDAuIGluXG4gICAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gcmVmICgtMSkgaW5cbiAgICAgICAgICAgICAgbGV0IHJlc2V0X3RpY2tlciBkaXYgPVxuICAgICAgICAgICAgICAgIGxldCBkZWJvdW5jaW5nX2ludGVydmFsID0gMjUgaW5cbiAgICAgICAgICAgICAgICAoKiBXZSB1c2UgW2xhc3RfdXBkYXRlXSB0byBoYXZlIHJlZ3VsYXIgZGVib3VuY2VkIHVwZGF0ZXMgYW5kIHRoZVxuICAgICAgICAgICAgICAgICAgIFt0aW1lb3V0XSB0byBlbnN1cmUgdGhhdCB0aGUgbGFzdCBzY3JvbGwgZXZlbnQgaXMgYWx3YXlzIHRha2VuIGludG9cbiAgICAgICAgICAgICAgICAgICBhY2NvdW50IGV2ZW4gaXQgaXQgaGFwcGVucyBkdXJpbmcgdGhlIGRlYm91bmNpbmcgaW50ZXJ2YWwuICopXG4gICAgICAgICAgICAgICAgbGV0IG5vdyA9IFBlcmZvcm1hbmNlLm5vd19tcyBHLnBlcmZvcm1hbmNlIGluXG4gICAgICAgICAgICAgICAgaWYgIXRpbWVvdXQgPj0gMCB0aGVuIEcuc3RvcF90aW1lciAhdGltZW91dDtcbiAgICAgICAgICAgICAgICB0aW1lb3V0IDo9XG4gICAgICAgICAgICAgICAgICBHLnNldF90aW1lb3V0IH5tczpkZWJvdW5jaW5nX2ludGVydmFsIChmdW4gKCkgLT4gdXBkYXRlIGRpdik7XG4gICAgICAgICAgICAgICAgaWYgbm93IC0uICFsYXN0X3VwZGF0ZSA+LiBmbG9hdF9vZl9pbnQgZGVib3VuY2luZ19pbnRlcnZhbCB0aGVuIChcbiAgICAgICAgICAgICAgICAgIGxhc3RfdXBkYXRlIDo9IG5vdztcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZSBkaXYpXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIGZ1biBkaXYgLT4gcmVzZXRfdGlja2VyIGRpdlxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIGxldCBkaXYgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IHw+IEVsLm9mX2p2IGluXG4gICAgICAgICAgICBzY3JvbGxfaGFuZGxlciBkaXYpKVxuICBpblxuICBsZXQgKCkgPVxuICAgIGxldCByZXBvcHVsYXRlX2RlcHMgPVxuICAgICAgTHdkLm1hcDIgcG9wdWxhdGVfb25fc2Nyb2xsIChMd2QuZ2V0IHRhYmxlX2hlaWdodCkgfmY6KGZ1biBhIGIgLT4gKGEsIGIpKVxuICAgIGluXG4gICAgbGV0IHJvb3QgPSBMd2Qub2JzZXJ2ZSByZXBvcHVsYXRlX2RlcHMgaW5cbiAgICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgICAgbWF0Y2ggTHdkLnF1aWNrX3NhbXBsZSByb290IHdpdGhcbiAgICAgICAgfCB1cGRhdGUsIFNvbWUgKF9oLCBkaXYpIC0+IEZ1dC5hd2FpdCB1cGRhdGUgKGZ1biB1cGRhdGUgLT4gdXBkYXRlIGRpdilcbiAgICAgICAgfCBfIC0+ICgpKTtcbiAgICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG4gIGluXG4gIGxldCBtYWtlX3NwYWNlciBuID1cbiAgICBsZXQgYXQgPSBbIEF0LmNsYXNzJyAoSnN0ci52IFwicm93X3NwYWNlclwiKSBdIGluXG4gICAgbGV0IHN0eWxlID0gQXQuc3R5bGUgKEpzdHIudiBAQCBoZWlnaHRfbiBuKSBpblxuICAgIEVsLmRpdiB+YXQ6KHN0eWxlIDo6IGF0KSBbXVxuICBpblxuICBsZXQgcmVuZGVyIF8geyBjb250ZW50OyBpbmRleDsgcmVuZGVyIH0gPVxuICAgIGxldCBhdCA9IEF0dHJzLmFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJyb3dcIikgW10gaW5cbiAgICBsZXQgc3R5bGUgPSBgUCAoQXQuc3R5bGUgKEpzdHIudiBoZWlnaHQpKSBpblxuICAgIG1hdGNoIGNvbnRlbnQgd2l0aFxuICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICgwLCBMd2Rfc2VxLmVsZW1lbnQgQEAgRWx3ZC5kaXYgfmF0OihzdHlsZSA6OiBhdCkgKHJlbmRlciBpbmRleCBkYXRhKSwgMClcbiAgICB8IE5vbmUgLT4gKDEsIEx3ZF9zZXEuZW1wdHksIDApXG4gIGluXG4gIGxldCB0YWJsZV9ib2R5ID1cbiAgICBsZXQgcm93cyA9XG4gICAgICBMd2RfdGFibGUubWFwX3JlZHVjZSByZW5kZXJcbiAgICAgICAgKCAoMCwgTHdkX3NlcS5lbXB0eSwgMCksXG4gICAgICAgICAgZnVuIChuLCBzLCBtKSAocCwgcycsIHEpIC0+XG4gICAgICAgICAgICBtYXRjaCAoTHdkX3NlcS52aWV3IHMsIEx3ZF9zZXEudmlldyBzJykgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSwgRW1wdHkgLT5cbiAgICAgICAgICAgICAgICAoKiBTaW5jZSBzIGlzIGVtcHR5IGl0IGRvZXMgbm90IG1hdHRlciBvbiB3aGljaFxuICAgICAgICAgICAgICAgICAgIFwic2lkZVwiIG9mIGl0IHRoZSBzcGFjZXMgYXJlIGFjY3VtdWxhdGVkLiAqKVxuICAgICAgICAgICAgICAgIChuICsgbSArIHAgKyBxLCBzLCAwKVxuICAgICAgICAgICAgfCBFbXB0eSwgXyAtPiAobiArIG0gKyBwLCBzJywgcSlcbiAgICAgICAgICAgIHwgXywgRW1wdHkgLT4gKG4sIHMsIG0gKyBwICsgcSlcbiAgICAgICAgICAgIHwgXywgXyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID1cbiAgICAgICAgICAgICAgICAgIGlmIG0gKyBwID4gMCB0aGVuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGFjZXIgPSBMd2QucHVyZSBAQCBtYWtlX3NwYWNlciAobSArIHApIGluXG4gICAgICAgICAgICAgICAgICAgIEx3ZF9zZXEuKGNvbmNhdCBzIEBAIGNvbmNhdCAoZWxlbWVudCBzcGFjZXIpIHMnKVxuICAgICAgICAgICAgICAgICAgZWxzZSBMd2Rfc2VxLmNvbmNhdCBzIHMnXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAobiwgcywgcSkgKVxuICAgICAgICB0YWJsZVxuICAgIGluXG4gICAgTHdkLm1hcCByb3dzIH5mOihmdW4gKG4sIHMsIG0pIC0+XG4gICAgICAgIGxldCByZXN1bHQgPVxuICAgICAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgICAgIGxldCBmaXJzdF9zcGFjZXIgPSBMd2QucHVyZSBAQCBtYWtlX3NwYWNlciBuIGluXG4gICAgICAgICAgICBMd2Rfc2VxLihjb25jYXQgKGVsZW1lbnQgZmlyc3Rfc3BhY2VyKSBzKVxuICAgICAgICAgIGVsc2Ugc1xuICAgICAgICBpblxuICAgICAgICBpZiBtID4gMCB0aGVuXG4gICAgICAgICAgbGV0IGxhc3Rfc3BhY2VyID0gTHdkLnB1cmUgQEAgbWFrZV9zcGFjZXIgbSBpblxuICAgICAgICAgIEx3ZF9zZXEuKGNvbmNhdCByZXN1bHQgKGVsZW1lbnQgbGFzdF9zcGFjZXIpKVxuICAgICAgICBlbHNlIHJlc3VsdClcbiAgaW5cbiAgbGV0IHRhYmxlX2hlYWRlciA9IFNjaGVtYS5oZWFkZXIgdWlfdGFibGUgaW5cbiAgbGV0IG9ic2VydmVyID1cbiAgICAoKiBXZSBvYnNlcnZlIHRoZSBzaXplIG9mIHRoZSB0YWJsZSB0byByZS1wb3B1bGF0ZSBpZiBuZWNlc3NhcnkgKilcbiAgICBSZXNpemVfb2JzZXJ2ZXIuY3JlYXRlIH5jYWxsYmFjazooZnVuIGVudHJpZXMgXyAtPlxuICAgICAgICBsZXQgZW50cnkgPSBMaXN0LmhkIGVudHJpZXMgaW5cbiAgICAgICAgbGV0IGRpdiA9IFJlc2l6ZV9vYnNlcnZlci5FbnRyeS50YXJnZXQgZW50cnkgaW5cbiAgICAgICAgbGV0IHJlY3QgPSBSZXNpemVfb2JzZXJ2ZXIuRW50cnkuY29udGVudF9yZWN0IGVudHJ5IGluXG4gICAgICAgIGxldCBoZWlnaHQgPSBEb21fcmVjdF9yZWFkX29ubHkuaGVpZ2h0IHJlY3QgaW5cbiAgICAgICAgbWF0Y2ggTHdkLnBlZWsgdGFibGVfaGVpZ2h0IHdpdGhcbiAgICAgICAgfCBTb21lIChoLCBfKSB3aGVuIGggPD4gaGVpZ2h0IC0+XG4gICAgICAgICAgICBMd2Quc2V0IHRhYmxlX2hlaWdodCAoU29tZSAoaGVpZ2h0LCBkaXYpKVxuICAgICAgICB8IE5vbmUgLT4gTHdkLnNldCB0YWJsZV9oZWlnaHQgKFNvbWUgKGhlaWdodCwgZGl2KSlcbiAgICAgICAgfCBfIC0+ICgpKVxuICBpblxuICBsZXQgYXQgPSBBdHRycy50b19hdCBAQCBBdHRycy5jbGFzc2VzIFsgXCJsd2R1aS1sYXp5LXRhYmxlXCIgXSBpblxuICBsZXQgZ3JpZF9zdHlsZSA9IFNjaGVtYS5zdHlsZSB1aV90YWJsZSBpblxuICBsZXQgcyA9IEF0LnN0eWxlIChKc3RyLnYgQEAgZ3JpZF9zdHlsZSkgaW5cbiAgbGV0IGF0ID0gYFAgcyA6OiBhdCBpblxuICBsZXQgdGFibGUgPVxuICAgIEVsd2QuZGl2XG4gICAgICB+ZXY6WyBgUiBzY3JvbGxfaGFuZGxlciBdXG4gICAgICB+YXRcbiAgICAgIFsgYFIgdGFibGVfaGVhZGVyOyBgUyAoTHdkX3NlcS5saWZ0IHRhYmxlX2JvZHkpIF1cbiAgICB8PiBMd2QubWFwIH5mOih0ZWUgKFJlc2l6ZV9vYnNlcnZlci5vYnNlcnZlIG9ic2VydmVyKSlcbiAgaW5cbiAgbGV0IGF0ID0gQXR0cnMuTy4odiAoYFAgKEMgXCJsd2R1aS1sYXp5LXRhYmxlLXdyYXBwZXJcIikpKSBpblxuICBtYXRjaCBzY3JvbGxfdGFyZ2V0IHdpdGhcbiAgfCBTb21lIHNjcm9sbF90YXJnZXQgLT5cbiAgICAgIGxldCBzY3JvbGxfdGFyZ2V0ID1cbiAgICAgICAgTHdkLm1hcDIgdGFibGUgc2Nyb2xsX3RhcmdldCB+ZjooZnVuIHBhcmVudCBpIC0+XG4gICAgICAgICAgICBsZXQgcm93X2hlaWdodCA9XG4gICAgICAgICAgICAgIEludC5vZl9mbG9hdCAoVXRpbHMuVW5pdC50b19weCB+cGFyZW50IHVpX3RhYmxlLnJvd19oZWlnaHQpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgU29tZSAoQ29udHJvbGxlZF9zY3JvbGwuUG9zIChpICogcm93X2hlaWdodCkpKVxuICAgICAgaW5cbiAgICAgIENvbnRyb2xsZWRfc2Nyb2xsLm1ha2UgfmF0IH5zY3JvbGxfdGFyZ2V0IHRhYmxlXG4gIHwgTm9uZSAtPiBFbHdkLmRpdiB+YXQgWyBgUiB0YWJsZSBdXG5cbigqKiAjIyMjIyMjKiojKioqKioqIyUlIz09PSsrKyojIyMlIyMjIyMjIyMjIyMqKyMjPSMjIysrKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyojIyMjKioqKiUlIyM9PT09PT09PT09PSsjPT09LT09PT09PT0qIz0jIyMrKysrKysrKysrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMqIyMjIyMqKiojJSMjPT09PT09LS0tPT0rIz09LS0tPT09PT09KiM9IyMjKysrKysrKysrKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIz09PT0tLS0tPT0tPSM9LS09PT09PT09PSojPSojIyUjKysrKyslJSUrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjJSM9PT09LT09PT0tLT0jPT09PT09PT09PT0qIz0qIyMlIysrPSsjKiolJSsrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMqPS0tLS0tLS0tLS09Iz09PT09PT09PT09KyM9KyMjKyUjJSorJSslJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMrPS0tLS0tLS0tPT0tLS0tLSM9PT09LT09LS0tLSsjPSsjIyorJSMlJSsjIyUlKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIys9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09LT0rIz0rIyMjKysrIyolKyMrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIz0tLS0tLS0tLS09IyMjIz0jPS0tIz0rKz09PT0tLT09PSM9KyMjIyorKyslJSsrJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjKj09PT09PS0tPT0qKiMjIyMjIys9PT09PSs9KysrKysrKiMjPSsjIyMqKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz0tLS0tLT09KyorIyMjKiMjIyMjIz0jPT0tLS0tPT09PT0rIz0rIyMjKioqKisrKysrKysrSVMrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyM9PS09LT0qIys9IyslKyM9PT0jPT09Iz09LS09PT09PT09PSM9KyMjIyoqKisrKysrKysrKysrK1RISVMrKysrKytcbiMjIyMjIyMjIyMjIyMjPS0jKiMrKiMjPSMjIyMqKyM9Kys9PSM9PT09PT09PT09PSsjPSsjIyMqKioqKioqKysrQSsrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz09IyMjPSMjIyMjIyMjIyMjIysjKisjPT09PT09PT09PT09IysrIyMjKioqKioqKioqKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjPSorIyojIyMjIyMjIyMjIyMjIyM9Iz09PT09PT09PT09PSMrKyMjIyoqKioqKioqKioqKk1PTk9JRCs/KysrKytcbiMjIyMjIyMjIyMjIyMjIyM9PSMjIyMjIyMjIyM9PT09IyMqPSM9PT09PT09IyoqPT0jKysjIyMqKioqKioqKioqKioqKioqKisrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIz09KyMjIyMjIyMjIyMjIyMjPT0jPT09PT0jIyM9PT09IysrIyMjKioqKioqKioqKioqKioqKioqKioqKisrK1xuIyMjIyMjIyMjIyMjIyMjIyMjPT0jIyMrIyMjIyMjIyMjKyMjIyorPT0jIyM9PT09PSMrKyMjKysrKioqKioqKioqKioqKioqKioqKioqKitcbiMjIyMjIyMjIyMjIyMjKyUlJSUjIyMjIyMjIysjIyMjKj09KyM9PSsjIyMjIyMjIyMjIyMjIyorKyoqKioqKioqKioqKioqKioqKioqKioqXG4jIyMjIyMjIyMjIyMjIysrKysrPSslIyUjKiMjIyojJSUlJSsjPSsjIyMjIyMjIyMjKiMjIysjPSMjKiMqKioqKioqKioqKioqKioqKioqKlxuIyMjIyMjIyMjIyMjIyMqIz09Kz09PT0jIz09PSMjIyUlJSUlJSUjIyMjIyMjIyMjIyMjPSMrIyMjIyMjKioqKisrKj09KyoqKioqKioqKipcbiMjIyMjKz0rIyMjIyMjIyMjIyM9Kz09Kz09PT0jIyMqKyMlJSUlIyMjIyMjIyMjIyMqKysjIyMjIyMjIz09Kis9PT09PT0rKyoqKioqKioqXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyo9PT09PT09IyMjIyMrIyUlKiMjIyMjIyMjKj09IysrIyMjIyMjKj09PT09PT09PT09PT09PT0qKioqKlxuIyMjIyMjIyMjIyMjKyMjIyMjKyMjIyM9PT0rPSMjIyMjIyMrIyMjIyMjIyM9PT09PSMrKyMjIys9PT09PT09PT09PT09PT09PT09KyoqKilcbiIsIm1vZHVsZSB0eXBlIENvbmZpZyA9IHNpZ1xuICB0eXBlIGxhbmdcblxuICAoKiB2YWwgZGVmYXVsdCA6IGxhbmcgKilcbiAgdmFsIGFjdGl2ZSA6IGxhbmcgTHdkLnZhclxuICB2YWwgZ2V0IDogbGFuZyAtPiBzdHJpbmcgLT4gc3RyaW5nXG5lbmRcblxubGV0IG1ha2UgKHR5cGUgYSkgKG1vZHVsZSBDIDogQ29uZmlnIHdpdGggdHlwZSBsYW5nID0gYSkgPVxuICBsZXQgZ2V0IHN0cmluZyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBDLmFjdGl2ZSkgfmY6KGZ1biBsYW5nIC0+IEpzdHIudiBAQCBDLmdldCBsYW5nIHN0cmluZylcbiAgaW5cbiAgbGV0IHNldCAobGFuZyA6IGEpID0gTHdkLnNldCBDLmFjdGl2ZSBsYW5nIGluXG4gIChzZXQsIGdldClcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIEI2NCA9IEJhc2U2NFxub3BlbiEgQnJyXG5tb2R1bGUgU3RvcmFnZSA9IEJycl9pby5TdG9yYWdlXG5cbmxldCBrZXlzID0gSGFzaHRibC5jcmVhdGUgNjRcblxubGV0IGNoZWNrX2tleSBrZXkgPVxuICBpZiBIYXNodGJsLm1lbSBrZXlzIGtleSB0aGVuXG4gICAgZmFpbHdpdGggQEAgUHJpbnRmLnNwcmludGYgXCJNdWx0aXBsZSBwZXJzaXRlbnQgdmFyIGFyZSB1c2luZyB0aGUga2V5ICVzXCIga2V5XG4gIGVsc2UgSGFzaHRibC5hZGQga2V5cyBrZXkgKClcblxubGV0IGxvY2FsX3N0b3JhZ2UgPSBTdG9yYWdlLmxvY2FsIEcud2luZG93XG5cbmxldCBzdG9yZSB+a2V5IHZhbHVlID1cbiAgRW5jb2RpbmdzLnRvX2pzdHIgdmFsdWUgfD4gU3RvcmFnZS5zZXRfaXRlbSBsb2NhbF9zdG9yYWdlIGtleVxuXG5sZXQgZmV0Y2ggfmtleSA9XG4gIGxldCBvcGVuIFJlc3VsdC5JbmZpeCBpblxuICBsZXQqIGVuY29kZWRfdmFsdWUgPVxuICAgIG1hdGNoIFN0b3JhZ2UuZ2V0X2l0ZW0gbG9jYWxfc3RvcmFnZSBrZXkgd2l0aFxuICAgIHwgTm9uZSAtPiBFcnJvciBgTm90X2ZvdW5kXG4gICAgfCBTb21lIHYgLT4gT2sgdlxuICBpblxuICBFbmNvZGluZ3Mub2ZfanN0ciBlbmNvZGVkX3ZhbHVlXG5cbmxldCBpbml0aWFsX3ZhbHVlIH5rZXkgZiA9XG4gIG1hdGNoIGZldGNoIH5rZXkgd2l0aFxuICB8IEVycm9yIGBOb3RfZm91bmQgLT4gZiAoKVxuICB8IEVycm9yIChgTXNnIG1zZykgLT5cbiAgICAgIENvbnNvbGUud2FybiBbIG1zZyBdO1xuICAgICAgZiAoKVxuICB8IE9rIHYgLT4gdlxuXG5sZXQgaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmID1cbiAgbWF0Y2ggZmV0Y2ggfmtleSB3aXRoXG4gIHwgRXJyb3IgYE5vdF9mb3VuZCAtPiBmICgpXG4gIHwgRXJyb3IgKGBNc2cgbXNnKSAtPlxuICAgICAgQ29uc29sZS53YXJuIFsgbXNnIF07XG4gICAgICBmICgpXG4gIHwgT2sgdiAtPiBGdXQub2sgQEAgdlxuXG5sZXQgbWFrZV9wZXJzaXN0ZW50X3ZhciB+a2V5IHZhbHVlID1cbiAgaWdub3JlIEBAIHN0b3JlIH5rZXkgdmFsdWU7XG4gIGxldCB2YXIgPSBMd2QudmFyIHZhbHVlIGluXG4gIGxldCByb290ID0gTHdkLm9ic2VydmUgKEx3ZC5nZXQgdmFyKSBpblxuICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgIGxldCBuZXdfdmFsdWUgPSBMd2QucXVpY2tfc2FtcGxlIHJvb3QgaW5cbiAgICAgIGlnbm9yZSBAQCBzdG9yZSB+a2V5IG5ld192YWx1ZSk7XG4gIGxldCBfID0gTHdkLnF1aWNrX3NhbXBsZSByb290IGluXG4gIHZhclxuXG5sZXQgdmFyX2YgfmtleSBmID1cbiAgbGV0ICgpID0gY2hlY2tfa2V5IGtleSBpblxuICBsZXQga2V5ID0gSnN0ci52IGtleSBpblxuICBsZXQgdmFsdWUgPSBpbml0aWFsX3ZhbHVlIH5rZXkgZiBpblxuICBtYWtlX3BlcnNpc3RlbnRfdmFyIH5rZXkgdmFsdWVcblxubGV0IHZhciB+a2V5IGRlZmF1bHQgPSB2YXJfZiB+a2V5IChmdW4gKCkgLT4gZGVmYXVsdClcblxubGV0IHZhcl9mdXQgKHR5cGUgYSBiKSB+a2V5IChmIDogdW5pdCAtPiAoYSwgYikgRnV0LnJlc3VsdCkgOlxuICAgIChhIEx3ZC52YXIsIGIpIEZ1dC5yZXN1bHQgPVxuICBsZXQgKCkgPSBjaGVja19rZXkga2V5IGluXG4gIGxldCBrZXkgPSBKc3RyLnYga2V5IGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgKHZhbHVlIDogYSkgPSAoaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmIDogKGEsIGIpIEZ1dC5yZXN1bHQpIGluXG4gIG1ha2VfcGVyc2lzdGVudF92YXIgfmtleSB2YWx1ZVxuIiwib3BlbiBTdGRcbm9wZW4gQnJyZXIuQnJyXG5vcGVuIEJycl9sd2Rcbm1vZHVsZSBGaWVsZCA9IEZpZWxkXG5cbnR5cGUgKCd0LCAnYSkgZm9ybV9zZXR0ZXIgPSAndCAtPiAnYSBGaWVsZC52YWxpZGF0aW9uIC0+ICd0XG5cbnR5cGUgJ3JlcyBmb3JtX2ZpZWxkID1cbiAgfCBGIDogJ2EgRmllbGQudCAqICgnZm9ybSwgJ2EpIGZvcm1fc2V0dGVyIC0+ICdmb3JtIGZvcm1fZmllbGRcblxubW9kdWxlIHR5cGUgRm9ybSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgZGVmYXVsdCA6IHRcbiAgdmFsIGZpZWxkcyA6IHQgZm9ybV9maWVsZCBMd2QudCBMd2Rfc2VxLnQgTHdkLnRcbmVuZFxuXG5sZXQgZmllbGQgZmllbGQgc2V0dGVyID0gTHdkLm1hcCBmaWVsZCB+ZjooZnVuIGZpZWxkIC0+IEYgKGZpZWxkLCBzZXR0ZXIpKVxuXG5sZXQgY3JlYXRlID9kID9hdCA/ZXYgKHR5cGUgdCkgKG1vZHVsZSBGb3JtIDogRm9ybSB3aXRoIHR5cGUgdCA9IHQpIG9uX3N1Ym1pdCA6XG4gICAgRWx3ZC50IEx3ZC50ID1cbiAgbGV0IGZpZWxkcyA9XG4gICAgTHdkX3NlcS5saWZ0IEZvcm0uZmllbGRzXG4gICAgfD4gTHdkX3NlcS5mb2xkX21vbm9pZFxuICAgICAgICAgKGZ1biAoRiAoZmllbGQsIG1hcHBlcikpIC0+XG4gICAgICAgICAgICggTHdkX3NlcS5lbGVtZW50IGZpZWxkLmVsdCxcbiAgICAgICAgICAgICBsZXQgdmFsdWUgKCkgPVxuICAgICAgICAgICAgICAgbWF0Y2ggTHdkLnBlZWsgZmllbGQudmFsdWUgd2l0aFxuICAgICAgICAgICAgICAgfCBOb25lIC0+IEZpZWxkLkVtcHR5XG4gICAgICAgICAgICAgICB8IFNvbWUgdiAtPiBmaWVsZC52YWxpZGF0ZSB2XG4gICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICBmdW4gdCAtPiBtYXBwZXIgdCBAQCB2YWx1ZSAoKSApKVxuICAgICAgICAgKCAoTHdkX3NlcS5lbXB0eSwgRnVuLmlkKSxcbiAgICAgICAgICAgZnVuIChlbHRzLCBmKSAoZWx0cycsIGYnKSAtPlxuICAgICAgICAgICAgIChMd2Rfc2VxLmNvbmNhdCBlbHRzIGVsdHMnLCBmdW4gdCAtPiBmJyAoZiB0KSkgKVxuICBpblxuICBsZXQgaGFuZGxlciA9XG4gICAgTHdkLm1hcCBmaWVsZHMgfmY6KGZ1biAoXywgdmFsdWUpIC0+XG4gICAgICAgIGxldCBvbl9zdWJtaXQgZSA9XG4gICAgICAgICAgb25fc3VibWl0IEBAIHZhbHVlIEZvcm0uZGVmYXVsdDtcbiAgICAgICAgICBFdi5wcmV2ZW50X2RlZmF1bHQgZVxuICAgICAgICBpblxuICAgICAgICBFbHdkLmhhbmRsZXIgRXYuc3VibWl0IG9uX3N1Ym1pdClcbiAgaW5cbiAgbGV0IG9uX3N1Ym1pdCA9IGBSIGhhbmRsZXIgaW5cbiAgbGV0IGVsdHMgPSBMd2QubWFwIGZpZWxkcyB+ZjooZnVuIChlbHRzLCBfKSAtPiBlbHRzKSBpblxuICBsZXQgZXYgPSBPcHRpb24ubWFwX29yIH5kZWZhdWx0Olsgb25fc3VibWl0IF0gKExpc3QuY29ucyBvbl9zdWJtaXQpIGV2IGluXG4gIEVsd2QuZm9ybSA/ZCA/YXQgfmV2IFsgYFMgKEx3ZF9zZXEubGlmdCBlbHRzKSBdXG4iLCJvcGVuISBTdGRcbm9wZW4hIEJycmVyXG5vcGVuISBCcnJcbm9wZW4hIEJycl9sd2RcblxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHtcbiAgZmllbGQgOiBFbHdkLnQgTHdkLnQ7XG4gIGxhYmVsIDogRWx3ZC50IEx3ZC50O1xuICB2YWx1ZSA6ICdhIEx3ZC50O1xufVxuXG5sZXQgbmFtZSB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLS1pZFwiIGJhc2VfbmFtZVxuICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJXNcIiBiYXNlX25hbWVcblxubGV0IG1ha2UgPyhhdCA9IFtdKSA/KGV2ID0gW10pIChkZXNjIDogc3RyaW5nIG9wdGlvbiBGaWVsZC5kZXNjKSA9XG4gIGxldCBpZCA9IG5hbWUgfmlkOnRydWUgZGVzYy5uYW1lIGluXG4gIGxldCBuYW1lID0gbmFtZSB+aWQ6ZmFsc2UgZGVzYy5uYW1lIGluXG4gIGxldCB2YXIgPSBQZXJzaXN0ZW50LnZhciB+a2V5OmlkIGRlc2MuZGVmYXVsdCBpblxuICBsZXQgbGFiZWwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGRlc2MubGFiZWwgaW5cbiAgbGV0IGZpZWxkID1cbiAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgYXRcbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJ0ZXh0XCIpXG4gICAgaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbWF0Y2ggTHdkLnBlZWsgdmFyIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IGBQIChBdC52YWx1ZSBAQCBKc3RyLnYgdikgOjogYXRcbiAgICAgIHwgTm9uZSAtPiBhdFxuICAgIGluXG4gICAgbGV0IG9uX2NoYW5nZSA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYua2V5dXAgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCB2YWx1ZSA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChTb21lIChKdi50b19zdHJpbmcgdmFsdWUpKSlcbiAgICBpblxuICAgIGxldCBldiA9IGBQIG9uX2NoYW5nZSA6OiBldiBpblxuICAgIEVsd2QuaW5wdXQgfmF0IH5ldiAoKVxuICBpblxuICB7IGZpZWxkOyBsYWJlbDsgdmFsdWUgPSBMd2QuZ2V0IHZhciB9XG4iLCJvcGVuISBTdGRcbm9wZW4hIEJycmVyXG5vcGVuISBCcnJcbm9wZW4hIEJycl9sd2RcblxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHtcbiAgZmllbGQgOiBFbHdkLnQgTHdkLnQ7XG4gIGxhYmVsIDogRWx3ZC50IEx3ZC50O1xuICB2YWx1ZSA6ICdhIEx3ZC50O1xufVxuXG5sZXQgbmFtZSB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLS1pZFwiIGJhc2VfbmFtZSBlbHNlIGJhc2VfbmFtZVxuXG5sZXQgbWFrZSA/KGF0ID0gW10pID8oZXYgPSBbXSkgKGRlc2MgOiBzdHJpbmcgRmllbGQuZGVzYykgb3B0aW9ucyA9XG4gIGxldCBpZCA9IG5hbWUgfmlkOnRydWUgZGVzYy5uYW1lIGluXG4gIGxldCBuYW1lID0gbmFtZSB+aWQ6ZmFsc2UgZGVzYy5uYW1lIGluXG4gIGxldCB2YXIgPSBQZXJzaXN0ZW50LnZhciB+a2V5OmlkIGRlc2MuZGVmYXVsdCBpblxuICBsZXQgbGFiZWwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGRlc2MubGFiZWwgaW5cbiAgbGV0IGZpZWxkID1cbiAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgYXRcbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJ0ZXh0XCIpXG4gICAgaW5cbiAgICBsZXQgb25fY2hhbmdlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5jaGFuZ2UgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCB2YWx1ZSA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChKdi50b19zdHJpbmcgdmFsdWUpKVxuICAgIGluXG4gICAgbGV0IGV2ID0gYFAgb25fY2hhbmdlIDo6IGV2IGluXG4gICAgbGV0IG9wdGlvbnMgPVxuICAgICAgTHdkX3NlcS5tYXBcbiAgICAgICAgKGZ1biAodmFsdWUsIG5hbWUpIC0+XG4gICAgICAgICAgbGV0IG9wZW4gQXR0cnMuTyBpblxuICAgICAgICAgIGxldCBhdCA9IHYgKGBQIChBIChBdC52YWx1ZSBAQCBKc3RyLnYgdmFsdWUpKSkgaW5cbiAgICAgICAgICBsZXQgc2VsZWN0ZWQgPVxuICAgICAgICAgICAgTHdkLm1hcCAoTHdkLmdldCB2YXIpIH5mOihmdW4gc2VsZWN0ZWQgLT5cbiAgICAgICAgICAgICAgICBBIChBdC5pZicgKEVxdWFsLnBvbHkgc2VsZWN0ZWQgdmFsdWUpIEF0LnNlbGVjdGVkKSlcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBhdCA9IGBSIHNlbGVjdGVkICQ6OiBhdCBpblxuICAgICAgICAgIEVsd2Qub3B0aW9uIH5hdCBbIGBQIChFbC50eHQnIG5hbWUpIF0pXG4gICAgICAgIG9wdGlvbnNcbiAgICBpblxuICAgIEVsd2Quc2VsZWN0IH5hdCB+ZXYgWyBgUyAoTHdkX3NlcS5saWZ0IG9wdGlvbnMpIF1cbiAgaW5cbiAgeyBmaWVsZDsgbGFiZWw7IHZhbHVlID0gTHdkLmdldCB2YXIgfVxuIiwib3BlbiEgU3RkXG5vcGVuISBCcnJlclxub3BlbiEgQnJyXG5vcGVuISBCcnJfbHdkXG5cbnR5cGUgY2hlY2tlZCA9IGJvb2xcbnR5cGUgbGFiZWwgPSBFbHdkLnQgRWx3ZC5jb2xcbnR5cGUgJ3ZhbHVlIGRlc2MgPSBDaGVjayBvZiAndmFsdWUgKiBsYWJlbCAqIGNoZWNrZWRcbigqIFRPRE8gfCBHcm91cCBvZiBsYWJlbCAqICd2YWx1ZSBkZXNjIGxpc3QgKilcblxudHlwZSAndmFsdWUgdCA9IHsgbmFtZSA6IHN0cmluZzsgZGVzYyA6ICd2YWx1ZSBkZXNjIEx3ZF9zZXEudCBMd2QudCB9XG50eXBlICdhIHJlYWN0aXZlX2ZpZWxkID0geyBmaWVsZCA6IEVsd2QudCBMd2QudDsgdmFsdWUgOiAnYSBMd2QudCB9XG5cbmxldCBuYW1lIH5nIH5uIH5pZCBiYXNlX25hbWUgPVxuICBpZiBpZCB0aGVuIFByaW50Zi5zcHJpbnRmIFwiJXMtJWktJWktaWRcIiBiYXNlX25hbWUgZyBuXG4gIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlcy0laS0laVwiIGJhc2VfbmFtZSBnIG5cblxubGV0IG1ha2UgdCA9XG4gIGxldCBtYWtlX2NoZWNrIH5nIH5uIHZhbHVlIGxhYmVsIGNoZWNrZWQgPVxuICAgIGxldCBpZCA9IG5hbWUgfmcgfm4gfmlkOnRydWUgdC5uYW1lIGluXG4gICAgbGV0IG5hbWUgPSBuYW1lIH5nIH5uIH5pZDpmYWxzZSB0Lm5hbWUgaW5cbiAgICBsZXQgcmVzdWx0IGNoZWNrZWQgPSBpZiBjaGVja2VkIHRoZW4gU29tZSB2YWx1ZSBlbHNlIE5vbmUgaW5cbiAgICBsZXQgdmFyID0gUGVyc2lzdGVudC52YXIgfmtleTppZCAocmVzdWx0IGNoZWNrZWQpIGluXG4gICAgbGV0IGxibCA9IEVsd2QubGFiZWwgfmF0OlsgYFAgKEF0LmZvcicgKEpzdHIudiBpZCkpIF0gbGFiZWwgaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgW11cbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJjaGVja2JveFwiKVxuICAgIGluXG4gICAgbGV0IGNoZWNrZWQgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCB2YXIpIH5mOihmdW5jdGlvblxuICAgICAgICB8IFNvbWUgXyAtPiBBdC5jaGVja2VkXG4gICAgICAgIHwgTm9uZSAtPiBBdC52b2lkKVxuICAgIGluXG4gICAgbGV0IGF0ID0gYFIgY2hlY2tlZCA6OiBhdCBpblxuICAgIGxldCBvbl9jaGFuZ2UgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmNoYW5nZSAoZnVuIGV2IC0+XG4gICAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgICAgbGV0IGNoZWNrZWQgPSBKdi5nZXQgdCBcImNoZWNrZWRcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChyZXN1bHQgKEp2LnRvX2Jvb2wgY2hlY2tlZCkpKVxuICAgIGluXG4gICAgbGV0IGV2ID0gWyBgUCBvbl9jaGFuZ2UgXSBpblxuICAgIChFbHdkLihkaXYgWyBgUiAoaW5wdXQgfmF0IH5ldiAoKSk7IGBSIGxibCBdKSwgTHdkLmdldCB2YXIpXG4gIGluXG4gICgqIDxmaWVsZHNldD48bGVnZW5kPiAqKVxuICAoKiA8ZmllbGRzZXQ+PGxlZ2VuZD4gKilcbiAgbGV0IG1ha2VfYWxsIH5nIGRlc2MgPVxuICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICBMd2Rfc2VxLm1hcFxuICAgICAgKGZ1bmN0aW9uXG4gICAgICAgIHwgQ2hlY2sgKHYsIGwsIGMpIC0+XG4gICAgICAgICAgICBsZXQgZWx0LCB2YWx1ZSA9IG1ha2VfY2hlY2sgfmcgfm46IW4gdiBsIGMgaW5cbiAgICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICAgIChlbHQsIHZhbHVlKSlcbiAgICAgIGRlc2NcbiAgaW5cbiAgbGV0IGFsbCA9IG1ha2VfYWxsIH5nOjAgdC5kZXNjIGluXG4gIGxldCBlbHRzID0gTHdkX3NlcS5tYXAgKGZ1biAoZWx0LCBfKSAtPiBlbHQpIGFsbCBpblxuICBsZXQgdmFsdWUgPVxuICAgIEx3ZF9zZXEuZm9sZF9tb25vaWQgKGZ1biAoXywgdikgLT4gTHdkX3NlcS5lbGVtZW50IHYpIEx3ZF9zZXEubW9ub2lkIGFsbFxuICAgIHw+IEx3ZF9zZXEubGlmdCB8PiBMd2Rfc2VxLmZpbHRlcl9tYXAgRnVuLmlkIHw+IEx3ZC5tYXAgfmY6THdkX3NlcS50b19saXN0XG4gIGluXG4gIHsgZmllbGQgPSBFbHdkLmRpdiBbIGBTIChMd2Rfc2VxLmxpZnQgZWx0cykgXTsgdmFsdWUgfVxuXG4oKiBsZXQgcmVjIG1ha2VfYWxsIH5nIH5uIChhY2NfZWx0LCBhY2NfdmFsdWUpIGRlc2MgPVxuICAgICBtYXRjaCBkZXNjIHdpdGhcbiAgICAgfCBDaGVjayAodiwgbCwgYykgOjogdGwgLT5cbiAgICAgICAgIGxldCBlbHQsIHZhbHVlID0gbWFrZV9jaGVjayB+ZyB+biB2IGwgYyBpblxuICAgICAgICAgbGV0IGFjY19lbHQgPSBMd2Rfc2VxLmNvbmNhdCBhY2NfZWx0IEBAIEx3ZF9zZXEuZWxlbWVudCBlbHQgaW5cbiAgICAgICAgIGxldCBhY2NfdmFsdWUgPVxuICAgICAgICAgICBMd2QubWFwMiBhY2NfdmFsdWUgdmFsdWUgfmY6KGZ1biBhY2MgLT4gZnVuY3Rpb25cbiAgICAgICAgICAgICB8IE5vbmUgLT4gYWNjIHwgU29tZSB2IC0+IHYgOjogYWNjKVxuICAgICAgICAgaW5cbiAgICAgICAgIG1ha2VfYWxsIH5nIH5uOihuICsgMSkgKGFjY19lbHQsIGFjY192YWx1ZSkgdGxcbiAgICAgfCBfIC0+IChMd2QucHVyZSBhY2NfZWx0LCBhY2NfdmFsdWUpXG4gICBpblxuICAgbGV0IGVsdHMsIHZhbHVlID0gbWFrZV9hbGwgfmc6MCB+bjowIChMd2Rfc2VxLmVtcHR5LCBMd2QucHVyZSBbXSkgdC5kZXNjIGluXG4gICB7IGZpZWxkID0gRWx3ZC5kaXYgWyBgUyAoTHdkX3NlcS5saWZ0IGVsdHMpIF07IHZhbHVlIH0gKilcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG5sZXQgdiA/ZCA/KGF0ID0gW10pID9ldiB2YWx1ZSA9XG4gIGxldCBhdCA9XG4gICAgQXR0cnMuYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwiYnV0dG9uXCIpIGF0IHw+IEF0dHJzLmFkZCBBdC5OYW1lLnZhbHVlIHZhbHVlXG4gIGluXG4gIEVsd2QuaW5wdXQgP2QgfmF0ID9ldiAoKVxuXG50eXBlICdhIHVwZGF0ZSA9IE5vbmUgfCBOZXh0IHwgU2V0IG9mICdhXG5cbnR5cGUgJ3N0YXRlIGhhbmRsZXJfd2l0aF9zdGF0ZSA9XG4gIHwgSGFuZGxlcl93aXRoX3N0YXRlIDoge1xuICAgICAgb3B0cyA6IEV2Lmxpc3Rlbl9vcHRzIG9wdGlvbjtcbiAgICAgIHR5cGUnIDogJ2EgRXYudHlwZSc7XG4gICAgICBmdW5jIDogJ3N0YXRlIC0+ICdhIEV2LnQgLT4gJ3N0YXRlIHVwZGF0ZTtcbiAgICB9XG4gICAgICAtPiAnc3RhdGUgaGFuZGxlcl93aXRoX3N0YXRlXG5cbmxldCBoYW5kbGVyID9vcHRzIHR5cGUnIGZ1bmMgPSBIYW5kbGVyX3dpdGhfc3RhdGUgeyBvcHRzOyB0eXBlJzsgZnVuYyB9XG5cbm1vZHVsZSB0eXBlIFN0YXRlID0gc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCBkZWZhdWx0IDogdFxuICB2YWwgbmV4dCA6IHQgLT4gdFxuZW5kXG5cbmxldCBhcHBseV9zdGF0ZSBzdGF0ZSBmID0gZiBzdGF0ZVxuXG5sZXQgd2l0aF9zdGF0ZSA/KGJhc2UgPSBBdHRycy5lbXB0eSkgKHR5cGUgdCkgKG1vZHVsZSBTIDogU3RhdGUgd2l0aCB0eXBlIHQgPSB0KVxuICAgID8oc3RhdGUgPSBTLmRlZmF1bHQpID9kID8oYXQgOiAoUy50IC0+IEF0dHJzLnQpIG9wdGlvbilcbiAgICA/KGV2IDogdCBoYW5kbGVyX3dpdGhfc3RhdGUgRWx3ZC5jb2wgb3B0aW9uKVxuICAgIChjb250ZW50IDogUy50IC0+IEVsLnQgRWx3ZC5jb2wpID1cbiAgbGV0IHZfc3RhdGUgPSBMd2QudmFyIHN0YXRlIGluXG4gIGxldCBnZXRfc3RhdGUgKCkgPSBMd2QuZ2V0IHZfc3RhdGUgaW5cbiAgbGV0IHNldF9zdGF0ZSB0ID0gTHdkLnNldCB2X3N0YXRlIHQgaW5cbiAgbGV0IGVsdCA9XG4gICAgbGV0IG9wZW4gTHdkX2luZml4IGluXG4gICAgbGV0JCogc3RhdGUgPSBnZXRfc3RhdGUgKCkgaW5cbiAgICBsZXQgd2l0aF9zdGF0ZSAoSGFuZGxlcl93aXRoX3N0YXRlIHsgb3B0czsgdHlwZSc7IGZ1bmMgfSkgPVxuICAgICAgbGV0IGZ1bmMgZXYgPVxuICAgICAgICBtYXRjaCBmdW5jIHN0YXRlIGV2IHdpdGhcbiAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgIHwgU2V0IHMgLT4gc2V0X3N0YXRlIHNcbiAgICAgICAgfCBOZXh0IC0+IHNldF9zdGF0ZSBAQCBTLm5leHQgc3RhdGVcbiAgICAgIGluXG4gICAgICBFbHdkLmhhbmRsZXIgP29wdHMgdHlwZScgZnVuY1xuICAgIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6YmFzZVxuICAgICAgICAoZnVuIGF0IC0+IEF0dHJzLnVuaW9uIGJhc2UgQEAgYXBwbHlfc3RhdGUgc3RhdGUgYXQpXG4gICAgICAgIGF0XG4gICAgaW5cbiAgICBsZXQgYXQgPSBBdHRycy50b19hdCBhdCBpblxuICAgIGxldCBldiA9XG4gICAgICBPcHRpb24ubWFwXG4gICAgICAgIChMaXN0Lm1hcCB+ZjooZnVuY3Rpb25cbiAgICAgICAgICB8IGBQIGggLT4gYFAgKHdpdGhfc3RhdGUgaClcbiAgICAgICAgICB8IGBSIGggLT4gYFIgKEx3ZC5tYXAgaCB+Zjp3aXRoX3N0YXRlKVxuICAgICAgICAgIHwgYFMgaCAtPiBgUyAoTHdkX3NlcS5tYXAgd2l0aF9zdGF0ZSBoKSkpXG4gICAgICAgIGV2XG4gICAgaW5cbiAgICBFbHdkLmJ1dHRvbiA/ZCB+YXQgP2V2IChjb250ZW50IHN0YXRlKVxuICBpblxuICAoZWx0LCBnZXRfc3RhdGUsIHNldF9zdGF0ZSlcblxudHlwZSB0d29fc3RhdGUgPSBPbiB8IE9mZlxuXG5tb2R1bGUgVHdvX3N0YXRlID0gc3RydWN0XG4gIHR5cGUgdCA9IHR3b19zdGF0ZVxuXG4gIGxldCBkZWZhdWx0ID0gT25cbiAgbGV0IG5leHQgPSBmdW5jdGlvbiBPbiAtPiBPZmYgfCBPZmYgLT4gT25cbmVuZFxuXG5sZXQgdHdvX3N0YXRlID9iYXNlID0gd2l0aF9zdGF0ZSA/YmFzZSAobW9kdWxlIFR3b19zdGF0ZSlcbiIsIm9wZW4gU3RkTGFiZWxzXG5vcGVuIE1vcmVMYWJlbHNcbm9wZW4hIFlvanNvblxuXG50eXBlIHQgPSBZb2pzb24uU2FmZS50XG5cbmxldCB5b2pzb25fb2ZfdW5pdCAoKSA6IHQgPSBgTnVsbFxubGV0IHlvanNvbl9vZl9ib29sIGIgOiB0ID0gYEJvb2wgYlxubGV0IHlvanNvbl9vZl9zdHJpbmcgc3RyIDogdCA9IGBTdHJpbmcgc3RyXG5sZXQgeW9qc29uX29mX2J5dGVzIGJ5dGVzIDogdCA9IGBTdHJpbmcgKEJ5dGVzLnRvX3N0cmluZyBieXRlcylcbmxldCB5b2pzb25fb2ZfY2hhciBjIDogdCA9IGBTdHJpbmcgKFN0cmluZy5tYWtlIDEgYylcbmxldCB5b2pzb25fb2ZfaW50IG4gOiB0ID0gYEludCBuXG5sZXQgeW9qc29uX29mX2Zsb2F0IG4gOiB0ID0gYEZsb2F0IG5cbmxldCB5b2pzb25fb2ZfaW50MzIgKG4gOiBJbnQzMi50KSA6IHQgPSBgSW50bGl0IChJbnQzMi50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfaW50NjQgKG4gOiBJbnQ2NC50KSA6IHQgPSBgSW50bGl0IChJbnQ2NC50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfbmF0aXZlaW50IG4gOiB0ID0gYEludGxpdCAoTmF0aXZlaW50LnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9yZWYgeW9qc29uX29mX19hIHJmID0geW9qc29uX29mX19hICFyZlxubGV0IHlvanNvbl9vZl9sYXp5X3QgeW9qc29uX29mX19hIGx2ID0geW9qc29uX29mX19hIChMYXp5LmZvcmNlIGx2KVxuXG5sZXQgeW9qc29uX29mX29wdGlvbiB5b2pzb25fb2ZfX2EgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB5b2pzb25fb2ZfX2EgeFxuICB8IE5vbmUgLT4gYE51bGxcbjs7XG5cbmxldCB5b2pzb25fb2ZfcGFpciB5b2pzb25fb2ZfX2EgeW9qc29uX29mX19iIChhLCBiKSA9XG4gIGBMaXN0IFsgeW9qc29uX29mX19hIGE7IHlvanNvbl9vZl9fYiBiIF1cbjs7XG5cbmxldCB5b2pzb25fb2ZfdHJpcGxlIHlvanNvbl9vZl9fYSB5b2pzb25fb2ZfX2IgeW9qc29uX29mX19jIChhLCBiLCBjKSA9XG4gIGBMaXN0IFsgeW9qc29uX29mX19hIGE7IHlvanNvbl9vZl9fYiBiOyB5b2pzb25fb2ZfX2MgYyBdXG47O1xuXG4oKiBMaXN0LnJldiAoTGlzdC5yZXZfbWFwIC4uLikgaXMgdGFpbCByZWN1cnNpdmUsIHRoZSBPQ2FtbCBzdGFuZGFyZFxuICAgbGlicmFyeSBMaXN0Lm1hcCBpcyBOT1QuICopXG5sZXQgeW9qc29uX29mX2xpc3QgeW9qc29uX29mX19hIGxzdCA9IGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIH5mOnlvanNvbl9vZl9fYSBsc3QpKVxuXG5sZXQgeW9qc29uX29mX2FycmF5IHlvanNvbl9vZl9fYSBhciA9XG4gIGxldCBsc3RfcmVmID0gcmVmIFtdIGluXG4gIGZvciBpID0gQXJyYXkubGVuZ3RoIGFyIC0gMSBkb3dudG8gMCBkb1xuICAgIGxzdF9yZWYgOj0geW9qc29uX29mX19hIGFyLihpKSA6OiAhbHN0X3JlZlxuICBkb25lO1xuICBgTGlzdCAhbHN0X3JlZlxuOztcblxubGV0IHlvanNvbl9vZl9oYXNodGJsIHlvanNvbl9vZl9rZXkgeW9qc29uX29mX3ZhbCBodGJsID1cbiAgbGV0IGNvbGwgfmtleTprIH5kYXRhOnYgYWNjID0gYExpc3QgWyB5b2pzb25fb2Zfa2V5IGs7IHlvanNvbl9vZl92YWwgdiBdIDo6IGFjYyBpblxuICBgTGlzdCAoSGFzaHRibC5mb2xkIGh0YmwgfmluaXQ6W10gfmY6Y29sbClcbjs7XG5cbmxldCB5b2pzb25fb2Zfb3BhcXVlIF8gPSBgU3RyaW5nIFwiPG9wYXF1ZT5cIlxubGV0IHlvanNvbl9vZl9mdW4gXyA9IGBTdHJpbmcgXCI8ZnVuPlwiXG5cbmV4Y2VwdGlvbiBPZl95b2pzb25fZXJyb3Igb2YgZXhuICogdFxuXG5sZXQgcmVjb3JkX2NoZWNrX2V4dHJhX2ZpZWxkcyA9IHJlZiB0cnVlXG5sZXQgb2ZfeW9qc29uX2Vycm9yX2V4biBleGMgeW9qc29uID0gcmFpc2UgKE9mX3lvanNvbl9lcnJvciAoZXhjLCB5b2pzb24pKVxubGV0IG9mX3lvanNvbl9lcnJvciB3aGF0IHlvanNvbiA9IHJhaXNlIChPZl95b2pzb25fZXJyb3IgKEZhaWx1cmUgd2hhdCwgeW9qc29uKSlcblxubGV0IHVuaXRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYE51bGwgLT4gKClcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInVuaXRfb2ZfeW9qc29uOiBgTnVsbCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBib29sX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBCb29sIHYgLT4gdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYm9vbF9vZl95b2pzb246IHRydWUvZmFsc2UgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgc3RyaW5nX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+IHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwic3RyaW5nX29mX3lvanNvbjogc3RyaW5nIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGJ5dGVzX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+IEJ5dGVzLm9mX3N0cmluZyBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImJ5dGVzX29mX3lvanNvbjogc3RyaW5nIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGNoYXJfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT5cbiAgICBpZiBTdHJpbmcubGVuZ3RoIHN0ciA8PiAxXG4gICAgdGhlbiBvZl95b2pzb25fZXJyb3IgXCJjaGFyX29mX3lvanNvbjogc3RyaW5nIG11c3QgY29udGFpbiBvbmUgY2hhcmFjdGVyIG9ubHlcIiB5b2pzb247XG4gICAgc3RyLlswXVxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiY2hhcl9vZl95b2pzb246IHN0cmluZyBvZiBzaXplIG9uZSBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludCB2IC0+IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgZmxvYXRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEZsb2F0IHYgLT4gdlxuICB8IGBJbnQgaSAtPiBmbG9hdF9vZl9pbnQgaVxuICB8IGBJbnRsaXQgc3RyIC0+IGZsb2F0X29mX3N0cmluZyBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImZsb2F0X29mX3lvanNvbjogZmxvYXQgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50MzJfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gSW50MzIub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBJbnQzMi5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50MzJfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludDY0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IEludDY0Lm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gSW50NjQub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludDY0X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBuYXRpdmVpbnRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gTmF0aXZlaW50Lm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gTmF0aXZlaW50Lm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJuYXRpdmVpbnRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IHJlZl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9IHJlZiAoYV9fb2ZfeW9qc29uIHlvanNvbilcbmxldCBsYXp5X3Rfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPSBMYXp5LmZyb21fdmFsIChhX19vZl95b2pzb24geW9qc29uKVxuXG5sZXQgb3B0aW9uX29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTnVsbCAtPiBOb25lXG4gIHwgZWwgLT4gU29tZSAoYV9fb2ZfeW9qc29uIGVsKVxuOztcblxubGV0IHBhaXJfb2ZfeW9qc29uIGFfX29mX3lvanNvbiBiX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbIGFfeW9qc29uOyBiX3lvanNvbiBdIC0+XG4gICAgbGV0IGEgPSBhX19vZl95b2pzb24gYV95b2pzb24gaW5cbiAgICBsZXQgYiA9IGJfX29mX3lvanNvbiBiX3lvanNvbiBpblxuICAgIGEsIGJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInBhaXJfb2ZfeW9qc29uOiBpbnZhbGlkIGZvcm1hdFwiIHlvanNvblxuOztcblxubGV0IHRyaXBsZV9vZl95b2pzb24gYV9fb2ZfeW9qc29uIGJfX29mX3lvanNvbiBjX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbIGFfeW9qc29uOyBiX3lvanNvbjsgY195b2pzb24gXSAtPlxuICAgIGxldCBhID0gYV9fb2ZfeW9qc29uIGFfeW9qc29uIGluXG4gICAgbGV0IGIgPSBiX19vZl95b2pzb24gYl95b2pzb24gaW5cbiAgICBsZXQgYyA9IGNfX29mX3lvanNvbiBjX3lvanNvbiBpblxuICAgIGEsIGIsIGNcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInRyaXBsZV9vZl95b2pzb246IGludmFsaWQgZm9ybWF0XCIgeW9qc29uXG47O1xuXG5sZXQgbGlzdF9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgbHN0IC0+XG4gICAgbGV0IHJldl9sc3QgPSBMaXN0LnJldl9tYXAgbHN0IH5mOmFfX29mX3lvanNvbiBpblxuICAgIExpc3QucmV2IHJldl9sc3RcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImxpc3Rfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGFycmF5X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbXSAtPiBbfHxdXG4gIHwgYExpc3QgKGggOjogdCkgLT5cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggdCArIDEgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBsZW4gKGFfX29mX3lvanNvbiBoKSBpblxuICAgIGxldCByZWMgbG9vcCBpID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gcmVzXG4gICAgICB8IGggOjogdCAtPlxuICAgICAgICByZXMuKGkpIDwtIGFfX29mX3lvanNvbiBoO1xuICAgICAgICBsb29wIChpICsgMSkgdFxuICAgIGluXG4gICAgbG9vcCAxIHRcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImFycmF5X29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBoYXNodGJsX29mX3lvanNvbiBrZXlfb2ZfeW9qc29uIHZhbF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBsc3QgLT5cbiAgICBsZXQgaHRibCA9IEhhc2h0YmwuY3JlYXRlIDAgaW5cbiAgICBsZXQgYWN0ID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgWyBrX3lvanNvbjsgdl95b2pzb24gXSAtPlxuICAgICAgICBIYXNodGJsLmFkZCBodGJsIH5rZXk6KGtleV9vZl95b2pzb24ga195b2pzb24pIH5kYXRhOih2YWxfb2ZfeW9qc29uIHZfeW9qc29uKVxuICAgICAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImhhc2h0Ymxfb2ZfeW9qc29uOiB0dXBsZSBsaXN0IG5lZWRlZFwiIHlvanNvblxuICAgIGluXG4gICAgTGlzdC5pdGVyIGxzdCB+ZjphY3Q7XG4gICAgaHRibFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaGFzaHRibF9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgb3BhcXVlX29mX3lvanNvbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgXCJvcGFxdWVfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCBvcGFxdWUgdmFsdWVzXCIgeW9qc29uXG47O1xuXG5sZXQgZnVuX29mX3lvanNvbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgXCJmdW5fb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCBmdW5jdGlvbiB2YWx1ZXNcIiB5b2pzb25cbjs7XG5cbm1vZHVsZSBQcmltaXRpdmVzID0gc3RydWN0XG4gIGxldCB5b2pzb25fb2ZfYXJyYXkgPSB5b2pzb25fb2ZfYXJyYXlcbiAgbGV0IGFycmF5X29mX3lvanNvbiA9IGFycmF5X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2Jvb2wgPSB5b2pzb25fb2ZfYm9vbFxuICBsZXQgYm9vbF9vZl95b2pzb24gPSBib29sX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2NoYXIgPSB5b2pzb25fb2ZfY2hhclxuICBsZXQgY2hhcl9vZl95b2pzb24gPSBjaGFyX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2Zsb2F0ID0geW9qc29uX29mX2Zsb2F0XG4gIGxldCBmbG9hdF9vZl95b2pzb24gPSBmbG9hdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQgPSB5b2pzb25fb2ZfaW50XG4gIGxldCBpbnRfb2ZfeW9qc29uID0gaW50X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludDMyID0geW9qc29uX29mX2ludDMyXG4gIGxldCBpbnQzMl9vZl95b2pzb24gPSBpbnQzMl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQ2NCA9IHlvanNvbl9vZl9pbnQ2NFxuICBsZXQgaW50NjRfb2ZfeW9qc29uID0gaW50NjRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbGlzdCA9IHlvanNvbl9vZl9saXN0XG4gIGxldCBsaXN0X29mX3lvanNvbiA9IGxpc3Rfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbmF0aXZlaW50ID0geW9qc29uX29mX25hdGl2ZWludFxuICBsZXQgbmF0aXZlaW50X29mX3lvanNvbiA9IG5hdGl2ZWludF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9vcHRpb24gPSB5b2pzb25fb2Zfb3B0aW9uXG4gIGxldCBvcHRpb25fb2ZfeW9qc29uID0gb3B0aW9uX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3JlZiA9IHlvanNvbl9vZl9yZWZcbiAgbGV0IHJlZl9vZl95b2pzb24gPSByZWZfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2Zfc3RyaW5nID0geW9qc29uX29mX3N0cmluZ1xuICBsZXQgc3RyaW5nX29mX3lvanNvbiA9IHN0cmluZ19vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9ieXRlcyA9IHlvanNvbl9vZl9ieXRlc1xuICBsZXQgYnl0ZXNfb2ZfeW9qc29uID0gYnl0ZXNfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfdW5pdCA9IHlvanNvbl9vZl91bml0XG4gIGxldCB1bml0X29mX3lvanNvbiA9IHVuaXRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbGF6eV90ID0geW9qc29uX29mX2xhenlfdFxuICBsZXQgbGF6eV90X29mX3lvanNvbiA9IGxhenlfdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9oYXNodGJsID0geW9qc29uX29mX2hhc2h0YmxcbiAgbGV0IGhhc2h0Ymxfb2ZfeW9qc29uID0gaGFzaHRibF9vZl95b2pzb25cbmVuZFxuIiwibW9kdWxlIFlvanNvbl9jb252X2Vycm9yID0gWW9qc29uX2NvbnZfZXJyb3Jcbm1vZHVsZSBZb2pzb25fY29udiA9IFlvanNvbl9jb252XG5tb2R1bGUgWW9qc29uYWJsZSA9IFlvanNvbmFibGVfaW50ZlxubW9kdWxlIFlvanNvbiA9IFlvanNvblxuXG5tb2R1bGUgT3B0aW9uID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9XG4gICAgfCBOb25lXG4gICAgfCBTb21lIG9mICdhXG5lbmRcblxuZXh0ZXJuYWwgaWdub3JlIDogXyAtPiB1bml0ID0gXCIlaWdub3JlXCJcbmV4dGVybmFsIHBvbHlfZXF1YWwgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuXG5sZXQgKCAhICkgOiAnYSByZWYgLT4gJ2EgPSBmdW4geCAtPiAheFxuIiwibW9kdWxlIEFwaSA9IEplbGx5ZmluX2FwaVxuXG50eXBlIGNyZWRlbnRpYWxzID0geyBiYXNlX3VybCA6IHN0cmluZzsgdXNlcm5hbWUgOiBzdHJpbmc7IHBhc3N3b3JkIDogc3RyaW5nIH1cblxudHlwZSBjb25uZXhpb24gPSB7XG4gIGJhc2VfdXJsIDogc3RyaW5nO1xuICBhdXRoX3Jlc3BvbnNlIDogQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLnJlc3BvbnNlO1xufVxuXG5sZXQgZ2V0X3Rva2VuIHQgPSB0LmF1dGhfcmVzcG9uc2UuQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLmFjY2Vzc190b2tlblxuXG5sZXQgY29ubmVjdCBjcmVkZW50aWFscyA9XG4gIGxldCBtb2R1bGUgQXV0aCA9IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZSBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgeyBiYXNlX3VybDsgdXNlcm5hbWU7IHBhc3N3b3JkIH0gPSBjcmVkZW50aWFscyBpblxuICBsZXQgYXV0aCA9IHsgQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLnVzZXJuYW1lOyBwdyA9IHBhc3N3b3JkIH0gaW5cbiAgbGV0KyBhdXRoX3Jlc3BvbnNlID0gQXBpLnJlcXVlc3QgfmJhc2VfdXJsIChtb2R1bGUgQXV0aCkgYXV0aCAoKSBpblxuICB7IGJhc2VfdXJsOyBhdXRoX3Jlc3BvbnNlIH1cblxubGV0IHF1ZXJ5IHQgPVxuICBsZXQgdG9rZW4gPSBnZXRfdG9rZW4gdCBpblxuICBsZXQgYmFzZV91cmwgPSB0LmJhc2VfdXJsIGluXG4gIEplbGx5ZmluX2FwaS5yZXF1ZXN0IH5iYXNlX3VybCB+dG9rZW5cbiIsIm9wZW4gU3RkXG5vcGVuIEJyclxuXG50eXBlIHRhZyA9IEJsb2NrIG9mIGludCB8IEludCBvZiBpbnRcblxubGV0IHRhZ19vZiB2ID1cbiAgKCogd293IHdvdyB3b3cuIGlzIHRoYXQgb2theXlpc2ggPyopXG4gIGxldCBvYmogPSBPYmoucmVwciB2IGluXG4gIGlmIE9iai5pc19ibG9jayBvYmogdGhlbiBCbG9jayAoT2JqLnRhZyBvYmopIGVsc2UgSW50IChPYmoubWFnaWMgb2JqKVxuXG5tb2R1bGUgdHlwZSBRdWVyaWVzID0gc2lnXG4gIHR5cGUgJ2EgcXVlcnlcbiAgdHlwZSAnYSBldmVudFxuZW5kXG5cbm1vZHVsZSBNYWtlIChRIDogUXVlcmllcykgPSBzdHJ1Y3RcbiAgdHlwZSBlcnJvciA9IFsgYEp2IG9mIEp2LkVycm9yLnQgfCBgTXNnIG9mIHN0cmluZyBdXG4gIHR5cGUgJ2EgcXVlcnkgPSAnYSBRLnF1ZXJ5XG4gIHR5cGUgJ2EgZXZlbnQgPSAnYSBRLmV2ZW50XG4gIHR5cGUgJ2Egd2l0aF91dWlkID0geyB1dWlkIDogc3RyaW5nOyBkYXRhIDogJ2EgfVxuICB0eXBlICdhIG1lc3NhZ2UgPSBBbnN3ZXIgb2YgJ2Egd2l0aF91dWlkIHwgRXZlbnQgb2YgKCdhIGV2ZW50ICogJ2EpXG4gIHR5cGUgbGlzdGVuZXIgPSBzdHJpbmdcblxuICAoKiB0b2RvOmNoZWNrIHRoYXQgdGhlIHdvcmtlciBhbmQgdGhlIGNsaWVudCBzaGFyZSB0aGUgc2FtZSBhcGk/ICopXG5cbiAgbW9kdWxlIFN0YXJ0X2NsaWVudCAoUCA6IHNpZ1xuICAgIHZhbCB1cmwgOiBzdHJpbmdcbiAgZW5kKSA9XG4gIHN0cnVjdFxuICAgIGxldCBmdXR1cmVzIDogKHN0cmluZywgSnYudCAtPiB1bml0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGxldCBsaXN0ZW5lcnMgOiAodGFnLCBKdi50IC0+IHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG4gICAgbGV0IHdvcmtlciA9IEJycl93ZWJ3b3JrZXJzLldvcmtlci5jcmVhdGUgQEAgSnN0ci5vZl9zdHJpbmcgUC51cmxcblxuICAgIGxldCBxdWVyeSAodHlwZSBhKSAocXVlcnkgOiBhIHF1ZXJ5KSA6IChhLCBlcnJvcikgRnV0LnJlc3VsdCA9XG4gICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZyBpblxuICAgICAgbGV0IGZ1dCwgc2V0ID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgICAgbGV0IHNldCBqdiA9IHNldCBAQCBFbmNvZGluZ3Mub2ZfanYganYgaW5cbiAgICAgIGxldCBxdWVyeSA9IHsgdXVpZDsgZGF0YSA9IHF1ZXJ5IH0gfD4gRW5jb2RpbmdzLnRvX2pzdHIgaW5cbiAgICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5wb3N0IHdvcmtlciAoSnYub2ZfanN0ciBxdWVyeSk7XG4gICAgICBIYXNodGJsLmFkZCBmdXR1cmVzIHV1aWQgc2V0O1xuICAgICAgZnV0XG5cbiAgICBsZXQgbGlzdGVuICh0eXBlIGEpIChldmVudCA6IGEgZXZlbnQpIH4oZiA6IGEgLT4gdW5pdCkgOiBsaXN0ZW5lciA9XG4gICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZyBpblxuICAgICAgbGV0IHNldCBqdiA9IGYgKE9iai5tYWdpYyBqdikgaW5cbiAgICAgIEhhc2h0YmwuYWRkIGxpc3RlbmVycyAodGFnX29mIGV2ZW50KSBzZXQ7XG4gICAgICB1dWlkXG5cbiAgICBsZXQgb25fbWVzc2FnZSBldiA9XG4gICAgICBsZXQgbWVzc2FnZSA9IEV2LmFzX3R5cGUgZXYgaW5cbiAgICAgIGxldCBvcGVuIFJlc3VsdCBpblxuICAgICAgaWdub3JlICgqIFRPRE86IGhhbmRsZXIgZXJyb3JzICopXG4gICAgICBAQFxuICAgICAgbGV0KyBtZXNzYWdlID1cbiAgICAgICAgQnJyX2lvLk1lc3NhZ2UuRXYuZGF0YSBtZXNzYWdlIHw+IEp2LnRvX2pzdHIgfD4gRW5jb2RpbmdzLm9mX2pzdHJcbiAgICAgIGluXG4gICAgICBtYXRjaCBtZXNzYWdlIHdpdGhcbiAgICAgIHwgRXZlbnQgKGUsIHYpIC0+XG4gICAgICAgICAgSGFzaHRibC5maW5kX2FsbCBsaXN0ZW5lcnMgKHRhZ19vZiBlKSB8PiBMaXN0Lml0ZXIgfmY6KGZ1biBmIC0+IGYgdilcbiAgICAgIHwgQW5zd2VyIHsgdXVpZDsgZGF0YSB9IC0+XG4gICAgICAgICAgbGV0IGYgPSBIYXNodGJsLmZpbmQgZnV0dXJlcyB1dWlkIGluXG4gICAgICAgICAgSGFzaHRibC5yZW1vdmUgZnV0dXJlcyB1dWlkO1xuICAgICAgICAgIGYgZGF0YVxuXG4gICAgbGV0IF8gPVxuICAgICAgRXYubGlzdGVuIEJycl9pby5NZXNzYWdlLkV2Lm1lc3NhZ2Ugb25fbWVzc2FnZVxuICAgICAgQEAgQnJyX3dlYndvcmtlcnMuV29ya2VyLmFzX3RhcmdldCB3b3JrZXJcbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgV29ya2VyX2ltcGwgPSBmdW5jdG9yICgpIC0+IHNpZ1xuICAgIHZhbCBvbl9xdWVyeSA6ICdhIHF1ZXJ5IC0+ICgnYSwgZXJyb3IpIEZ1dC5yZXN1bHRcbiAgZW5kXG5cbiAgbGV0IGRpc3BhdGNoX2V2ZW50ICh0eXBlIGEpIChlIDogYSBldmVudCkgKHYgOiBhKSA9XG4gICAgKCogbGV0IGRhdGEgPSBFbmNvZGluZ3MubWFyc2hhbF90b19qc3RyIHw+IEp2Lm9mX2pzdHIgaW4gKilcbiAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuRy5wb3N0IChFbmNvZGluZ3MudG9fanN0ciAoRXZlbnQgKGUsIHYpKSB8PiBKdi5vZl9qc3RyKVxuXG4gICgqKiBFeGVjdXRlIFcncyBib2R5IGFuZCBjb25maWd1cmUgbWVzc2FnaW5nICopXG4gIG1vZHVsZSBNYWtlX3dvcmtlciAoVyA6IFdvcmtlcl9pbXBsKSA9IHN0cnVjdFxuICAgIG9wZW4gQnJyXG4gICAgbW9kdWxlIFcgPSBXICgpXG5cbiAgICBsZXQgb25fbWVzc2FnZSBldiA9XG4gICAgICBsZXQgbWVzc2FnZSA9IEV2LmFzX3R5cGUgZXYgaW5cbiAgICAgIGxldCBvcGVuIFJlc3VsdCBpblxuICAgICAgaWdub3JlICgqIFRPRE86IGhhbmRsZXIgZXJyb3JzICopXG4gICAgICBAQFxuICAgICAgbGV0KyAoeyB1dWlkOyBkYXRhIH0gOiAnYSBxdWVyeSB3aXRoX3V1aWQpID1cbiAgICAgICAgQnJyX2lvLk1lc3NhZ2UuRXYuZGF0YSBtZXNzYWdlIHw+IEp2LnRvX2pzdHIgfD4gRW5jb2RpbmdzLm9mX2pzdHJcbiAgICAgIGluXG4gICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgbGV0KyByZXN1bHQgPSBXLm9uX3F1ZXJ5IGRhdGEgaW5cbiAgICAgIGxldCBkYXRhID0gRW5jb2RpbmdzLnRvX2pzdHIgcmVzdWx0IHw+IEp2Lm9mX2pzdHIgaW5cbiAgICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5HLnBvc3RcbiAgICAgICAgKEVuY29kaW5ncy50b19qc3RyIChBbnN3ZXIgeyB1dWlkOyBkYXRhIH0pIHw+IEp2Lm9mX2pzdHIpXG5cbiAgICBsZXQgXyA9IEV2Lmxpc3RlbiBCcnJfaW8uTWVzc2FnZS5Fdi5tZXNzYWdlIG9uX21lc3NhZ2UgRy50YXJnZXRcbiAgZW5kXG5lbmRcbiIsIm9wZW4gU3RkXG5cbigqKiBTb21lIHNvcnRzIHJlcXVpcmUgYSBjdXN0b20gb3JkZXJpbmcgd2hpY2ggaXMgZG9uZSB1c2luZyBhIHRhYmxlIG9mIGluZGV4ZXMuIEZvciBleGFtcGxlLCB0byBnZXQgYSByYW5kb20gc29ydCB3ZSBzaW1wbGUgc2h1ZmZsZSBhbiBhcnJheSB3aGljaCBzaXplIGlzIHRoZSBvbmUgb2YgdGhlIHJlc3VsdC4gKilcbm1vZHVsZSBPcmRlciA9IHN0cnVjdFxuICB0eXBlIHQgPSBJbml0aWFsIHwgQXNjIHwgRGVzYyB8IEN1c3RvbSBvZiBpbnQgYXJyYXlcblxuICBsZXQgcmFuZG9tIH5zaXplID1cbiAgICBsZXQgdGJsID0gQXJyYXkuaW5pdCBzaXplIH5mOkZ1bi5pZCBpblxuICAgIGxldCAoKSA9IEFycmF5LnNodWZmbGUgdGJsIGluXG4gICAgQ3VzdG9tIHRibFxuXG4gIGxldCBhcHBseSB0IGkgPVxuICAgIG1hdGNoIHQgd2l0aFxuICAgIHwgSW5pdGlhbCB8IEFzYyB8IERlc2MgLT4gaVxuICAgIHwgQ3VzdG9tIGEgLT4gKCogdG9kbyBjaGVjayBib3VuZHMgKikgYS4oaSlcbmVuZFxuXG5tb2R1bGUgU29ydCA9IHN0cnVjdFxuICB0eXBlIHQgPSBEYXRlX2FkZGVkIHwgTmFtZVxuXG4gIGxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJkYXRlX2FkZGVkXCIgLT4gRGF0ZV9hZGRlZFxuICAgIHwgXCJuYW1lXCIgLT4gTmFtZVxuICAgIHwgXyAtPiBEYXRlX2FkZGVkXG5lbmRcblxudHlwZSAnYSBzZWxlY3Rpb24gPSBBbGwgfCBPbmx5IG9mICdhIGxpc3RcbnR5cGUga2luZCA9IEF1ZGlvXG50eXBlIGZpbHRlciA9IFNlYXJjaCBvZiBzdHJpbmdcblxudHlwZSByZXEgPSB7XG4gIGtpbmQgOiBraW5kO1xuICBzcmNfdmlld3MgOiBzdHJpbmcgc2VsZWN0aW9uO1xuICBzb3J0IDogU29ydC50O1xuICBmaWx0ZXJzIDogZmlsdGVyIGxpc3Q7XG59XG5cbnR5cGUgdCA9IHsgdXVpZCA6IFV1aWRtLnQ7IHJlcXVlc3QgOiByZXE7IHN0YXJ0X29mZnNldCA6IGludDsgaXRlbV9jb3VudCA6IGludCB9XG50eXBlIHJhbmdlZCA9IHsgdmlldyA6IHQ7IGZpcnN0IDogaW50OyBsYXN0IDogaW50OyBvcmRlciA6IE9yZGVyLnQgfVxuXG5sZXQgaXRlbV9jb3VudCB0ID0gdC5pdGVtX2NvdW50IC0gdC5zdGFydF9vZmZzZXRcblxubGV0IHJlcSBraW5kID8oc3JjX3ZpZXdzID0gQWxsKSA/KHNvcnQgPSBTb3J0LkRhdGVfYWRkZWQpID8oZmlsdGVycyA9IFtdKSAoKSA9XG4gIHsga2luZDsgc3JjX3ZpZXdzOyBzb3J0OyBmaWx0ZXJzIH1cblxubGV0IGhhc2ggcmVxID0gSGFzaHRibC5oYXNoIChyZXEuc3JjX3ZpZXdzLCByZXEuZmlsdGVycylcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIERTID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxudHlwZSBzZXJ2ZXIgPSBzdHJpbmcgKiBEUy5jb25uZXhpb25cblxubW9kdWxlIFF1ZXJpZXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBxdWVyeSA9XG4gICAgfCBTZXRfc2Vzc2lvbl91dWlkIDogc3RyaW5nIC0+IHVuaXQgcXVlcnlcbiAgICB8IEFkZF9zZXJ2ZXJzIDogc2VydmVyIGxpc3QgLT4gdW5pdCBxdWVyeVxuICAgIHwgR2V0X2FsbCA6IHVuaXQgLT4gQXBpLkl0ZW0udCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfbGlicmFyaWVzIDogdW5pdCAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyA6IHN0cmluZyAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBDcmVhdGVfdmlldyA6IFZpZXcucmVxIC0+IFZpZXcudCBxdWVyeVxuICAgIHwgR2V0IDpcbiAgICAgICAgVmlldy50ICogVmlldy5PcmRlci50ICogaW50IGFycmF5XG4gICAgICAgIC0+IFN0b3Jlcy5JdGVtcy50IG9wdGlvbiBhcnJheSBxdWVyeVxuXG4gIHR5cGUgJ2EgZXZlbnQgPSBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgOiAoc3RyaW5nICogU3luYy5yZXBvcnQpIGV2ZW50XG5lbmRcblxuaW5jbHVkZSBXb3JrZXJfYXBpLk1ha2UgKFF1ZXJpZXMpXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgTXVsdGltYXB9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgdHlwZSBrZXlcbiAgdHlwZSB2YWx1ZVxuICB0eXBlIHRcblxuICB2YWwgZW1wdHkgOiB0XG4gICgqKiBFbXB0eSBtdWx0aW1hcCAqKVxuXG4gIHZhbCBpc19lbXB0eSA6IHQgLT4gYm9vbFxuICAoKiogRW1wdHkgbXVsdGltYXA/ICopXG5cbiAgdmFsIGFkZCA6IHQgLT4ga2V5IC0+IHZhbHVlIC0+IHRcbiAgKCoqIEFkZCBhIGtleS92YWx1ZSBiaW5kaW5nICopXG5cbiAgdmFsIHJlbW92ZSA6IHQgLT4ga2V5IC0+IHZhbHVlIC0+IHRcbiAgKCoqIFJlbW92ZSB0aGUgYmluZGluZyAqKVxuXG4gIHZhbCByZW1vdmVfYWxsIDogdCAtPiBrZXkgLT4gdFxuICAoKiogUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgbWFwICopXG5cbiAgdmFsIG1lbSA6IHQgLT4ga2V5IC0+IGJvb2xcbiAgKCoqIElzIHRoZXJlIGEgYmluZGluZyBmb3IgdGhpcyBrZXk/ICopXG5cbiAgdmFsIGZpbmQgOiB0IC0+IGtleSAtPiB2YWx1ZSBsaXN0XG4gICgqKiBMaXN0IG9mIHZhbHVlcyBmb3IgdGhpcyBrZXkgKilcblxuICB2YWwgZmluZF9pdGVyIDogdCAtPiBrZXkgLT4gdmFsdWUgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBiaW5kaW5ncyBmb3IgdGhpcyBrZXkgKilcblxuICB2YWwgY291bnQgOiB0IC0+IGtleSAtPiBpbnRcbiAgKCoqIE51bWJlciBvZiBiaW5kaW5ncyBmb3IgdGhpcyBrZXkgKilcblxuICB2YWwgaXRlciA6IHQgLT4gKGtleSAtPiB2YWx1ZSAtPiB1bml0KSAtPiB1bml0XG4gICgqKiBJdGVyYXRlIG9uIGFsbCBrZXkvdmFsdWUgKilcblxuICB2YWwgZm9sZCA6IHQgLT4gJ2EgLT4gKCdhIC0+IGtleSAtPiB2YWx1ZSAtPiAnYSkgLT4gJ2FcbiAgKCoqIEZvbGQgb24gYWxsIGtleS92YWx1ZSAqKVxuXG4gIHZhbCBzaXplIDogdCAtPiBpbnRcbiAgKCoqIE51bWJlciBvZiBrZXlzICopXG5cbiAgdmFsIHVuaW9uIDogdCAtPiB0IC0+IHRcbiAgKCoqIFVuaW9uIG9mIG11bHRpbWFwcyAqKVxuXG4gIHZhbCBpbnRlciA6IHQgLT4gdCAtPiB0XG4gICgqKiBJbnRlcnNlY3Rpb24gb2YgbXVsdGltYXBzICopXG5cbiAgdmFsIGRpZmYgOiB0IC0+IHQgLT4gdFxuICAoKiogRGlmZmVyZW5jZSBvZiBtYXBzLCBpZSBiaW5kaW5ncyBvZiB0aGUgZmlyc3QgdGhhdCBhcmUgbm90XG4gICAgICBpbiB0aGUgc2Vjb25kICopXG5cbiAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbiAgKCoqIFNhbWUgbXVsdGltYXAgKilcblxuICB2YWwgY29tcGFyZSA6IHQgLT4gdCAtPiBpbnRcbiAgKCoqIFRvdGFsIG9yZGVyIG9uIG11bHRpbWFwcyAqKVxuXG4gIHZhbCBzdWJtYXAgOiB0IC0+IHQgLT4gYm9vbFxuICAoKiogW3N1Ym1hcCBtMSBtMl0gaXMgdHJ1ZSBpZmYgYWxsIGJpbmRpbmdzIG9mIFttMV0gYXJlIGFsc28gaW4gW20yXSAqKVxuXG4gIHZhbCB0b19pdGVyIDogdCAtPiAoa2V5ICogdmFsdWUpIGl0ZXJcbiAgdmFsIG9mX2l0ZXIgOiA/aW5pdDp0IC0+IChrZXkgKiB2YWx1ZSkgaXRlciAtPiB0XG4gIHZhbCBrZXlzIDogdCAtPiBrZXkgaXRlclxuXG4gIHZhbCB2YWx1ZXMgOiB0IC0+IHZhbHVlIGl0ZXJcbiAgKCoqIFNvbWUgdmFsdWVzIG1heSBvY2N1ciBzZXZlcmFsIHRpbWVzICopXG5lbmRcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIGNvbXBhcmUgOiB0IC0+IHQgLT4gaW50XG5lbmRcblxubW9kdWxlIE1ha2UgKEsgOiBPcmRlcmVkVHlwZSkgKFYgOiBPcmRlcmVkVHlwZSkgPSBzdHJ1Y3RcbiAgdHlwZSBrZXkgPSBLLnRcbiAgdHlwZSB2YWx1ZSA9IFYudFxuXG4gIG1vZHVsZSBNID0gTWFwLk1ha2UgKEspXG4gIG1vZHVsZSBTID0gU2V0Lk1ha2UgKFYpXG5cbiAgdHlwZSB0ID0gUy50IE0udFxuICAoKiogTWFwIG9mIHNldHMgKilcblxuICBsZXQgZW1wdHkgPSBNLmVtcHR5XG4gIGxldCBpc19lbXB0eSA9IE0uaXNfZW1wdHlcblxuICBsZXQgYWRkIG0gayB2ID1cbiAgICBsZXQgc2V0ID0gdHJ5IE0uZmluZCBrIG0gd2l0aCBOb3RfZm91bmQgLT4gUy5lbXB0eSBpblxuICAgIE0uYWRkIGsgKFMuYWRkIHYgc2V0KSBtXG5cbiAgbGV0IHJlbW92ZSBtIGsgdiA9XG4gICAgdHJ5XG4gICAgICBsZXQgc2V0ID0gTS5maW5kIGsgbSBpblxuICAgICAgbGV0IHNldCcgPSBTLnJlbW92ZSB2IHNldCBpblxuICAgICAgaWYgUy5pc19lbXB0eSBzZXQnIHRoZW5cbiAgICAgICAgTS5yZW1vdmUgayBtXG4gICAgICBlbHNlXG4gICAgICAgIE0uYWRkIGsgc2V0JyBtXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gbVxuXG4gIGxldCByZW1vdmVfYWxsIG0gayA9IE0ucmVtb3ZlIGsgbVxuICBsZXQgbWVtIG0gayA9IE0ubWVtIGsgbVxuXG4gIGxldCBmaW5kIG0gayA9XG4gICAgdHJ5XG4gICAgICBsZXQgc2V0ID0gTS5maW5kIGsgbSBpblxuICAgICAgUy5lbGVtZW50cyBzZXRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiBbXVxuXG4gIGxldCBmaW5kX2l0ZXIgbSBrIGYgPVxuICAgIHRyeVxuICAgICAgbGV0IHNldCA9IE0uZmluZCBrIG0gaW5cbiAgICAgIFMuaXRlciBmIHNldFxuICAgIHdpdGggTm90X2ZvdW5kIC0+ICgpXG5cbiAgbGV0IGNvdW50IG0gayA9XG4gICAgdHJ5XG4gICAgICBsZXQgc2V0ID0gTS5maW5kIGsgbSBpblxuICAgICAgUy5jYXJkaW5hbCBzZXRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiAwXG5cbiAgbGV0IGl0ZXIgbSBmID0gTS5pdGVyIChmdW4gayBzZXQgLT4gUy5pdGVyIChmdW4gdiAtPiBmIGsgdikgc2V0KSBtXG5cbiAgbGV0IGZvbGQgbSBhY2MgZiA9XG4gICAgTS5mb2xkIChmdW4gayBzZXQgYWNjIC0+IFMuZm9sZCAoZnVuIHYgYWNjIC0+IGYgYWNjIGsgdikgc2V0IGFjYykgbSBhY2NcblxuICBsZXQgc2l6ZSBtID0gTS5jYXJkaW5hbCBtXG5cbiAgbGV0IHVuaW9uIG0xIG0yID1cbiAgICBNLm1lcmdlXG4gICAgICAoZnVuIF9rIHYxIHYyIC0+XG4gICAgICAgIG1hdGNoIHYxLCB2MiB3aXRoXG4gICAgICAgIHwgTm9uZSwgTm9uZSAtPiBOb25lXG4gICAgICAgIHwgU29tZSBzZXQxLCBTb21lIHNldDIgLT4gU29tZSAoUy51bmlvbiBzZXQxIHNldDIpXG4gICAgICAgIHwgU29tZSBzZXQsIE5vbmUgfCBOb25lLCBTb21lIHNldCAtPiBTb21lIHNldClcbiAgICAgIG0xIG0yXG5cbiAgbGV0IGludGVyIG0xIG0yID1cbiAgICBNLm1lcmdlXG4gICAgICAoZnVuIF9rIHYxIHYyIC0+XG4gICAgICAgIG1hdGNoIHYxLCB2MiB3aXRoXG4gICAgICAgIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gTm9uZVxuICAgICAgICB8IFNvbWUgc2V0MSwgU29tZSBzZXQyIC0+XG4gICAgICAgICAgbGV0IHNldCA9IFMuaW50ZXIgc2V0MSBzZXQyIGluXG4gICAgICAgICAgaWYgUy5pc19lbXB0eSBzZXQgdGhlblxuICAgICAgICAgICAgTm9uZVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIFNvbWUgc2V0KVxuICAgICAgbTEgbTJcblxuICBsZXQgZGlmZiBtMSBtMiA9XG4gICAgTS5tZXJnZVxuICAgICAgKGZ1biBfayB2MSB2MiAtPlxuICAgICAgICBtYXRjaCB2MSwgdjIgd2l0aFxuICAgICAgICB8IE5vbmUsIF8gLT4gTm9uZVxuICAgICAgICB8IFNvbWUgc2V0LCBOb25lIC0+IFNvbWUgc2V0XG4gICAgICAgIHwgU29tZSBzZXQxLCBTb21lIHNldDIgLT5cbiAgICAgICAgICBsZXQgc2V0JyA9IFMuZGlmZiBzZXQxIHNldDIgaW5cbiAgICAgICAgICBpZiBTLmlzX2VtcHR5IHNldCcgdGhlblxuICAgICAgICAgICAgTm9uZVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIFNvbWUgc2V0JylcbiAgICAgIG0xIG0yXG5cbiAgbGV0IGVxdWFsIG0xIG0yID0gTS5lcXVhbCBTLmVxdWFsIG0xIG0yXG4gIGxldCBjb21wYXJlIG0xIG0yID0gTS5jb21wYXJlIFMuY29tcGFyZSBtMSBtMlxuXG4gIGxldCBzdWJtYXAgbTEgbTIgPVxuICAgIE0uZm9yX2FsbFxuICAgICAgKGZ1biBrIHNldDEgLT5cbiAgICAgICAgdHJ5XG4gICAgICAgICAgbGV0IHNldDIgPSBNLmZpbmQgayBtMiBpblxuICAgICAgICAgIFMuc3Vic2V0IHNldDEgc2V0MlxuICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZSlcbiAgICAgIG0xXG5cbiAgbGV0IHRvX2l0ZXIgbSBrID0gaXRlciBtIChmdW4geCB5IC0+IGsgKHgsIHkpKVxuXG4gIGxldCBvZl9pdGVyID8oaW5pdCA9IGVtcHR5KSBzZXEgPVxuICAgIGxldCBtID0gcmVmIGluaXQgaW5cbiAgICBzZXEgKGZ1biAoaywgdikgLT4gbSA6PSBhZGQgIW0gayB2KTtcbiAgICAhbVxuXG4gIGxldCBrZXlzIG0gayA9IE0uaXRlciAoZnVuIHggXyAtPiBrIHgpIG1cbiAgbGV0IHZhbHVlcyBtIGsgPSBpdGVyIG0gKGZ1biBfIHYgLT4gayB2KVxuZW5kXG5cbm1vZHVsZSB0eXBlIEJJRElSID0gc2lnXG4gIHR5cGUgdFxuICB0eXBlIGxlZnRcbiAgdHlwZSByaWdodFxuXG4gIHZhbCBlbXB0eSA6IHRcbiAgdmFsIGlzX2VtcHR5IDogdCAtPiBib29sXG5cbiAgdmFsIGFkZCA6IHQgLT4gbGVmdCAtPiByaWdodCAtPiB0XG4gICgqKiBBZGQgYSBiaW5kaW5nIChsZWZ0LHJpZ2h0KSAqKVxuXG4gIHZhbCByZW1vdmUgOiB0IC0+IGxlZnQgLT4gcmlnaHQgLT4gdFxuICAoKiogUmVtb3ZlIGEgc3BlY2lmaWMgYmluZGluZyAqKVxuXG4gIHZhbCBjYXJkaW5hbF9sZWZ0IDogdCAtPiBpbnRcbiAgKCoqIG51bWJlciBvZiBkaXN0aW5jdCBsZWZ0IGtleXMgKilcblxuICB2YWwgY2FyZGluYWxfcmlnaHQgOiB0IC0+IGludFxuICAoKiogbnVtYmVyIG9mIGRpc3RpbmN0IHJpZ2h0IGtleXMgKilcblxuICB2YWwgcmVtb3ZlX2xlZnQgOiB0IC0+IGxlZnQgLT4gdFxuICAoKiogUmVtb3ZlIGFsbCBiaW5kaW5ncyBmb3IgdGhlIGxlZnQga2V5ICopXG5cbiAgdmFsIHJlbW92ZV9yaWdodCA6IHQgLT4gcmlnaHQgLT4gdFxuICAoKiogUmVtb3ZlIGFsbCBiaW5kaW5ncyBmb3IgdGhlIHJpZ2h0IGtleSAqKVxuXG4gIHZhbCBtZW1fbGVmdCA6IHQgLT4gbGVmdCAtPiBib29sXG4gICgqKiBJcyB0aGUgbGVmdCBrZXkgcHJlc2VudCBpbiBhdCBsZWFzdCBvbmUgcGFpcj8gKilcblxuICB2YWwgbWVtX3JpZ2h0IDogdCAtPiByaWdodCAtPiBib29sXG4gICgqKiBJcyB0aGUgcmlnaHQga2V5IHByZXNlbnQgaW4gYXQgbGVhc3Qgb25lIHBhaXI/ICopXG5cbiAgdmFsIGZpbmRfbGVmdCA6IHQgLT4gbGVmdCAtPiByaWdodCBsaXN0XG4gICgqKiBMaXN0IG9mIHZhbHVlcyBmb3IgdGhpcyBnaXZlbiBsZWZ0LWtleS5cbiAgICAgIFRoaXMgdXNlZCB0byByZXR1cm4gYW4gaXRlciwgYnV0IHJldHVybnMgYSBsaXN0IHNpbmNlIDMuMTMuICopXG5cbiAgdmFsIGZpbmRfbGVmdF9pdGVyIDogdCAtPiBsZWZ0IC0+IHJpZ2h0IGl0ZXJcbiAgKCoqIEl0ZXJhdGUgb24gYmluZGluZ3MgZm9yIHRoaXMgZ2l2ZW4gbGVmdC1rZXlcbiAgICAgIEBzaW5jZSAzLjEzICopXG5cbiAgdmFsIGZpbmRfcmlnaHQgOiB0IC0+IHJpZ2h0IC0+IGxlZnQgbGlzdFxuICAoKiogTGlzdCBvZiB2YWx1ZXMgZm9yIHRoaXMgZ2l2ZW4gcmlnaHQta2V5LlxuICAgICAgVGhpcyB1c2VkIHRvIHJldHVybiBhbiBpdGVyLCBidXQgcmV0dXJucyBhIGxpc3Qgc2luY2UgMy4xMy4gKilcblxuICB2YWwgZmluZF9yaWdodF9pdGVyIDogdCAtPiByaWdodCAtPiBsZWZ0IGl0ZXJcbiAgKCoqIEl0ZXJhdGUgb24gYmluZGluZ3MgZm9yIHRoaXMgZ2l2ZW4gbGVmdC1rZXlcbiAgICAgIEBzaW5jZSAzLjEzICopXG5cbiAgdmFsIGZpbmQxX2xlZnQgOiB0IC0+IGxlZnQgLT4gcmlnaHQgb3B0aW9uXG4gICgqKiBsaWtlIHshZmluZF9sZWZ0fSBidXQgcmV0dXJucyBhdCBtb3N0IG9uZSB2YWx1ZSAqKVxuXG4gIHZhbCBmaW5kMV9yaWdodCA6IHQgLT4gcmlnaHQgLT4gbGVmdCBvcHRpb25cbiAgKCoqIGxpa2UgeyFmaW5kX3JpZ2h0fSBidXQgcmV0dXJucyBhdCBtb3N0IG9uZSB2YWx1ZSAqKVxuXG4gIHZhbCBmb2xkIDogKCdhIC0+IGxlZnQgLT4gcmlnaHQgLT4gJ2EpIC0+ICdhIC0+IHQgLT4gJ2FcbiAgKCoqIEZvbGQgb24gcGFpcnMgKilcblxuICB2YWwgcGFpcnMgOiB0IC0+IChsZWZ0ICogcmlnaHQpIGl0ZXJcbiAgKCoqIEl0ZXJhdGUgb24gcGFpcnMgKilcblxuICB2YWwgYWRkX3BhaXJzIDogdCAtPiAobGVmdCAqIHJpZ2h0KSBpdGVyIC0+IHRcbiAgKCoqIEFkZCBwYWlycyAqKVxuXG4gIHZhbCBpdGVyX2xlZnQgOiB0IC0+IGxlZnQgaXRlclxuICB2YWwgaXRlcl9yaWdodCA6IHQgLT4gcmlnaHQgaXRlclxuZW5kXG5cbmxldCBfZm9sZF9pdGVyIGYgYWNjIHNlcSA9XG4gIGxldCBhY2MgPSByZWYgYWNjIGluXG4gIHNlcSAoZnVuIHggLT4gYWNjIDo9IGYgIWFjYyB4KTtcbiAgIWFjY1xuXG5sZXQgX2hlYWRfaXRlciBzZXEgPVxuICBsZXQgciA9IHJlZiBOb25lIGluXG4gICh0cnlcbiAgICAgc2VxIChmdW4geCAtPlxuICAgICAgICAgciA6PSBTb21lIHg7XG4gICAgICAgICByYWlzZSBFeGl0KVxuICAgd2l0aCBFeGl0IC0+ICgpKTtcbiAgIXJcblxubW9kdWxlIE1ha2VCaWRpciAoTCA6IE9yZGVyZWRUeXBlKSAoUiA6IE9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuICB0eXBlIGxlZnQgPSBMLnRcbiAgdHlwZSByaWdodCA9IFIudFxuXG4gIG1vZHVsZSBNYXBMID0gTWFrZSAoTCkgKFIpXG4gIG1vZHVsZSBNYXBSID0gTWFrZSAoUikgKEwpXG5cbiAgdHlwZSB0ID0geyBsZWZ0OiBNYXBMLnQ7IHJpZ2h0OiBNYXBSLnQgfVxuXG4gIGxldCBlbXB0eSA9IHsgbGVmdCA9IE1hcEwuZW1wdHk7IHJpZ2h0ID0gTWFwUi5lbXB0eSB9XG4gIGxldCBpc19lbXB0eSBtID0gTWFwTC5pc19lbXB0eSBtLmxlZnRcbiAgbGV0IGFkZCBtIGEgYiA9IHsgbGVmdCA9IE1hcEwuYWRkIG0ubGVmdCBhIGI7IHJpZ2h0ID0gTWFwUi5hZGQgbS5yaWdodCBiIGEgfVxuXG4gIGxldCByZW1vdmUgbSBhIGIgPVxuICAgIHsgbGVmdCA9IE1hcEwucmVtb3ZlIG0ubGVmdCBhIGI7IHJpZ2h0ID0gTWFwUi5yZW1vdmUgbS5yaWdodCBiIGEgfVxuXG4gIGxldCBjYXJkaW5hbF9sZWZ0IG0gPSBNYXBMLnNpemUgbS5sZWZ0XG4gIGxldCBjYXJkaW5hbF9yaWdodCBtID0gTWFwUi5zaXplIG0ucmlnaHRcbiAgbGV0IGZpbmRfbGVmdCBtIGEgPSBNYXBMLmZpbmQgbS5sZWZ0IGFcbiAgbGV0IGZpbmRfbGVmdF9pdGVyIG0gYSA9IE1hcEwuZmluZF9pdGVyIG0ubGVmdCBhXG4gIGxldCBmaW5kX3JpZ2h0IG0gYiA9IE1hcFIuZmluZCBtLnJpZ2h0IGJcbiAgbGV0IGZpbmRfcmlnaHRfaXRlciBtIGIgPSBNYXBSLmZpbmRfaXRlciBtLnJpZ2h0IGJcblxuICBsZXQgcmVtb3ZlX2xlZnQgbSBhID1cbiAgICBfZm9sZF9pdGVyIChmdW4gbSBiIC0+IHJlbW92ZSBtIGEgYikgbSAoZmluZF9sZWZ0X2l0ZXIgbSBhKVxuXG4gIGxldCByZW1vdmVfcmlnaHQgbSBiID1cbiAgICBfZm9sZF9pdGVyIChmdW4gbSBhIC0+IHJlbW92ZSBtIGEgYikgbSAoZmluZF9yaWdodF9pdGVyIG0gYilcblxuICBsZXQgbWVtX2xlZnQgbSBhID0gTWFwTC5tZW0gbS5sZWZ0IGFcbiAgbGV0IG1lbV9yaWdodCBtIGIgPSBNYXBSLm1lbSBtLnJpZ2h0IGJcbiAgbGV0IGZpbmQxX2xlZnQgbSBhID0gX2hlYWRfaXRlciAoZmluZF9sZWZ0X2l0ZXIgbSBhKVxuICBsZXQgZmluZDFfcmlnaHQgbSBiID0gX2hlYWRfaXRlciAoZmluZF9yaWdodF9pdGVyIG0gYilcbiAgbGV0IGZvbGQgZiBhY2MgbSA9IE1hcEwuZm9sZCBtLmxlZnQgYWNjIGZcbiAgbGV0IHBhaXJzIG0gPSBNYXBMLnRvX2l0ZXIgbS5sZWZ0XG4gIGxldCBhZGRfcGFpcnMgbSBzZXEgPSBfZm9sZF9pdGVyIChmdW4gbSAoYSwgYikgLT4gYWRkIG0gYSBiKSBtIHNlcVxuICBsZXQgaXRlcl9sZWZ0IG0gPSBNYXBMLmtleXMgbS5sZWZ0XG4gIGxldCBpdGVyX3JpZ2h0IG0gPSBNYXBSLmtleXMgbS5yaWdodFxuZW5kXG4iLCJpbmNsdWRlIFN0ZFxubW9kdWxlIERTID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBFbHdkID0gQnJyX2x3ZC5FbHdkXG5tb2R1bGUgVWlfdXRpbHMgPSBCcnJfbHdkX3VpLlV0aWxzXG5tb2R1bGUgVmlldyA9IERiLlZpZXdcblxubW9kdWxlIFN0cmluZyA9IHN0cnVjdFxuICBpbmNsdWRlIFN0cmluZ1xuICBtb2R1bGUgTU1hcCA9IENDTXVsdGlNYXAuTWFrZSAoU3RyaW5nKVxuICBtb2R1bGUgSXRlbXNfTXVsdGlNYXAgPSBNTWFwIChEYi5TdG9yZXMuSXRlbXMpXG5lbmRcblxubW9kdWxlIFV0aWxzID0gc3RydWN0XG4gIGxldCB3aXRoX3RpbWluZyA/KG5hbWUgPSBcIlwiKSBmID1cbiAgICBsZXQgdCA9IEJyci5QZXJmb3JtYW5jZS5ub3dfbXMgQnJyLkcucGVyZm9ybWFuY2UgaW5cbiAgICBsZXQgcmVzID0gZiAoKSBpblxuICAgIEJyci5Db25zb2xlLmxvZ1xuICAgICAgWyBuYW1lOyBcInRvb2tcIjsgQnJyLlBlcmZvcm1hbmNlLm5vd19tcyBCcnIuRy5wZXJmb3JtYW5jZSAtLiB0IF07XG4gICAgcmVzXG5lbmRcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJycmVyXG5vcGVuIEJycl9sd2RfdWlcblxubW9kdWxlIFR3b19zdGF0ZV9idXR0b24gPSBzdHJ1Y3RcbiAgbGV0IGJhc2UgPSBBdHRycy5jbGFzc2VzIFsgXCJidXR0b25cIiBdXG5cbiAgbGV0IGF0ID0gZnVuY3Rpb25cbiAgICB8IEJ1dHRvbi5PbiAtPiBBdHRycy5jbGFzc2VzIFsgXCJvblwiIF1cbiAgICB8IE9mZiAtPiBBdHRycy5jbGFzc2VzIFsgXCJvZmZcIiBdXG5cbiAgbGV0IG1ha2Ugfm9uX2NsaWNrID1cbiAgICBsZXQgb25fY2xpY2sgPSBCdXR0b24uaGFuZGxlciBCcnIuRXYuY2xpY2sgb25fY2xpY2sgaW5cbiAgICBCdXR0b24udHdvX3N0YXRlIH5iYXNlIH5hdCB+ZXY6WyBgUCBvbl9jbGljayBdXG5lbmRcblxub3BlbiBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2RcblxubW9kdWxlIERyYWdnYWJsZV90YWJsZSA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBSb3cgPSBzaWdcbiAgICB0eXBlIHRcblxuICAgIHZhbCByZW5kZXIgOiB0IC0+IEVsLnQgbGlzdFxuICBlbmRcblxuICAoKiogQ29sdW1ucyBkZWNsYXJhdGlvbiAqKVxuICBtb2R1bGUgQ29sdW1ucyA9IHN0cnVjdFxuICAgIHR5cGUgY29sdW1uID0geyBuYW1lIDogc3RyaW5nOyBjc3Nfc2l6ZSA6IHN0cmluZyB9XG4gICAgdHlwZSB0ID0gY29sdW1uIGFycmF5XG5cbiAgICBsZXQgY29sdW1uIG5hbWUgY3NzX3NpemUgPSB7IG5hbWU7IGNzc19zaXplIH1cblxuICAgIGxldCB0b19zdHlsZSB0ID1cbiAgICAgIEFycmF5LnRvX3N0cmluZyB+c2VwOlwiIFwiIChmdW4geyBjc3Nfc2l6ZTsgXyB9IC0+IGNzc19zaXplKSB0XG5cbiAgICBsZXQgdG9faGVhZGVyIHQgPVxuICAgICAgbGV0IGNlbGxzID1cbiAgICAgICAgQXJyYXkuZm9sZF9yaWdodCB0IH5pbml0OltdIH5mOihmdW4geyBuYW1lOyBfIH0gYWNjIC0+XG4gICAgICAgICAgICBFbC5kaXYgWyBFbC50eHQnIG5hbWUgXSA6OiBhY2MpXG4gICAgICBpblxuICAgICAgRWwuZGl2IGNlbGxzXG5cbiAgICBsZXQgc2V0IGVsdCB0ID1cbiAgICAgIGxldCB2YWx1ZSA9IEpzdHIudiBAQCB0b19zdHlsZSB0IGluXG4gICAgICBFbC5zZXRfaW5saW5lX3N0eWxlIEVsLlN0eWxlLmdyaWRfdGVtcGxhdGVfY29sdW1ucyB2YWx1ZSBlbHRcbiAgZW5kXG5cbiAgbGV0IGdyaWQgPSBBdHRycy5jbGFzc2VzIFsgXCJkcmFnZ2FibGUtdGFibGVcIiBdXG5cbiAgbGV0IHJlbmRlcl9yb3cgKHR5cGUgdCkgKG1vZHVsZSBSb3cgOiBSb3cgd2l0aCB0eXBlIHQgPSB0KSB+c2hhcmVkX2RyYWdfZGF0YVxuICAgICAgfm4gKHRfcm93IDogdCBMd2RfdGFibGUucm93KSByb3cgPVxuICAgIGxldCBhZGRfaGludCB+dG9wIGVsID1cbiAgICAgIGxldCBjID0gaWYgdG9wIHRoZW4gXCJob3Zlci10b3BcIiBlbHNlIFwiaG92ZXItYm90dG9tXCIgaW5cbiAgICAgIEVsLnNldF9jbGFzcyAoSnN0ci52IGMpIHRydWUgZWxcbiAgICBpblxuICAgIGxldCByZW1vdmVfaGludHMgZWwgPVxuICAgICAgTGlzdC5pdGVyIFsgXCJob3Zlci10b3BcIjsgXCJob3Zlci1ib3R0b21cIiBdIH5mOihmdW4gYyAtPlxuICAgICAgICAgIEVsLnNldF9jbGFzcyAoSnN0ci52IGMpIGZhbHNlIGVsKVxuICAgIGluXG4gICAgbGV0IGlzX29uX3RvcCBlID1cbiAgICAgIGxldCBtb3VzZV9ldiA9IEV2LkRyYWcuYXNfbW91c2UgQEAgRXYuYXNfdHlwZSBlIGluXG4gICAgICBsZXQgb2Zmc2V0X3kgPSBFdi5Nb3VzZS5vZmZzZXRfeSBtb3VzZV9ldiBpblxuICAgICAgbGV0IHRhcmdldCA9IEV2LmN1cnJlbnRfdGFyZ2V0IGUgfD4gRXYudGFyZ2V0X3RvX2p2IHw+IEVsLm9mX2p2IGluXG4gICAgICBsZXQgc2l6ZV9oID0gRWwuaW5uZXJfaCB0YXJnZXQgaW5cbiAgICAgIG9mZnNldF95IDwuIHNpemVfaCAvLiAyLlxuICAgIGluXG4gICAgbGV0IGdldF9ldl90YXJnZXQgZSA9IEV2LmN1cnJlbnRfdGFyZ2V0IGUgfD4gRXYudGFyZ2V0X3RvX2p2IHw+IEVsLm9mX2p2IGluXG4gICAgTHdkX3NlcS5lbGVtZW50XG4gICAgQEBcbiAgICBsZXQgY2VsbHMgPSBSb3cucmVuZGVyIHJvdyBpblxuICAgIGFzc2VydCAoTGlzdC5sZW5ndGggY2VsbHMgPSBuKTtcbiAgICBsZXQgb25fZHJhZ19zdGFydCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJhZ3N0YXJ0IChmdW4gXyAtPlxuICAgICAgICAgIERvY3VtZW50LmJvZHkgRy5kb2N1bWVudCB8PiBFbC5zZXRfY2xhc3MgKEpzdHIudiBcImRyYWdnaW5nXCIpIHRydWU7XG4gICAgICAgICAgTHdkLnNldCBzaGFyZWRfZHJhZ19kYXRhIEBAIFNvbWUgdF9yb3cpXG4gICAgaW5cbiAgICBsZXQgb25fZHJhZ19vdmVyID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnb3ZlciAoZnVuIGUgLT5cbiAgICAgICAgICBsZXQgdGFyZ2V0ID0gZ2V0X2V2X3RhcmdldCBlIGluXG4gICAgICAgICAgcmVtb3ZlX2hpbnRzIHRhcmdldDtcbiAgICAgICAgICBsZXQgdG9wID0gaXNfb25fdG9wIGUgaW5cbiAgICAgICAgICBsZXQgbm9vcCA9XG4gICAgICAgICAgICBsZXQgb3BlbiBPcHRpb24gaW5cbiAgICAgICAgICAgIGxldCsgcm93ID0gTHdkLnBlZWsgc2hhcmVkX2RyYWdfZGF0YSBpblxuICAgICAgICAgICAgbGV0IGVxdWFsX3ByZXYgcm93ID1cbiAgICAgICAgICAgICAgT3B0aW9uLm1hcF9vciB+ZGVmYXVsdDpmYWxzZSAoRXF1YWwucGh5c2ljYWwgcm93KVxuICAgICAgICAgICAgICAgIChMd2RfdGFibGUucHJldiB0X3JvdylcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBsZXQgZXF1YWxfbmV4dCByb3cgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmZhbHNlIChFcXVhbC5waHlzaWNhbCByb3cpXG4gICAgICAgICAgICAgICAgKEx3ZF90YWJsZS5uZXh0IHRfcm93KVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIEVxdWFsLnBoeXNpY2FsIHRfcm93IHJvd1xuICAgICAgICAgICAgfHwgKHRvcCAmJiBlcXVhbF9wcmV2IHJvdylcbiAgICAgICAgICAgIHx8ICgobm90IHRvcCkgJiYgZXF1YWxfbmV4dCByb3cpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBpZiBub3QgKE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpmYWxzZSBub29wKSB0aGVuIChcbiAgICAgICAgICAgIGFkZF9oaW50IH50b3AgdGFyZ2V0O1xuICAgICAgICAgICAgKCogPiBJZiB0aGUgbW91c2UgaXMgcmVsZWFzZWQgb3ZlciBhbiBlbGVtZW50IHRoYXQgaXMgYSB2YWxpZCBkcm9wIHRhcmdldCxcbiAgICAgICAgICAgICAgID4gdGhhdCBpcywgb25lIHRoYXQgY2FuY2VsbGVkIHRoZSBsYXN0IGRyYWdlbnRlciBvciBkcmFnb3ZlciBldmVudCxcbiAgICAgICAgICAgICAgID4gdGhlbiB0aGUgZHJvcCB3aWxsIGJlIHN1Y2Nlc3NmdWwuXG4gICAgICAgICAgICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTF9EcmFnX2FuZF9Ecm9wX0FQSS9EcmFnX29wZXJhdGlvbnMjc3BlY2lmeWluZ19kcm9wX3RhcmdldHMgKilcbiAgICAgICAgICAgIEV2LnByZXZlbnRfZGVmYXVsdCBlKSlcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX2xlYXZlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnbGVhdmUgKGZ1biBlIC0+IHJlbW92ZV9oaW50cyBAQCBnZXRfZXZfdGFyZ2V0IGUpXG4gICAgaW5cbiAgICBsZXQgb25fZHJhZ19lbmQgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdlbmQgKGZ1biBfIC0+XG4gICAgICAgICAgRG9jdW1lbnQuYm9keSBHLmRvY3VtZW50IHw+IEVsLnNldF9jbGFzcyAoSnN0ci52IFwiZHJhZ2dpbmdcIikgZmFsc2UpXG4gICAgaW5cbiAgICBsZXQgb25fZHJvcCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJvcCAoZnVuIGUgLT5cbiAgICAgICAgICByZW1vdmVfaGludHMgQEAgZ2V0X2V2X3RhcmdldCBlO1xuICAgICAgICAgIGxldCBfID1cbiAgICAgICAgICAgIGxldCBvcGVuIE9wdGlvbiBpblxuICAgICAgICAgICAgbGV0KiByb3cgPSBMd2QucGVlayBzaGFyZWRfZHJhZ19kYXRhIGluXG4gICAgICAgICAgICBsZXQrIHNldCA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgICAgICBpZiBpc19vbl90b3AgZSB0aGVuIGlnbm9yZSBAQCBMd2RfdGFibGUuYmVmb3JlIH5zZXQgdF9yb3dcbiAgICAgICAgICAgIGVsc2UgaWdub3JlIEBAIEx3ZF90YWJsZS5hZnRlciB+c2V0IHRfcm93O1xuICAgICAgICAgICAgTHdkX3RhYmxlLnJlbW92ZSByb3dcbiAgICAgICAgICBpblxuICAgICAgICAgIEx3ZC5zZXQgc2hhcmVkX2RyYWdfZGF0YSBOb25lKVxuICAgIGluXG4gICAgRWx3ZC5kaXZcbiAgICAgIH5hdDpbIGBQIChBdC5kcmFnZ2FibGUgQEAgSnN0ci52IFwidHJ1ZVwiKSBdXG4gICAgICB+ZXY6XG4gICAgICAgIFtcbiAgICAgICAgICBgUCBvbl9kcmFnX3N0YXJ0O1xuICAgICAgICAgIGBQIG9uX2RyYWdfb3ZlcjtcbiAgICAgICAgICBgUCBvbl9kcmFnX2xlYXZlO1xuICAgICAgICAgIGBQIG9uX2RyYWdfZW5kO1xuICAgICAgICAgIGBQIG9uX2Ryb3A7XG4gICAgICAgIF1cbiAgICAgIChMaXN0Lm1hcCBjZWxscyB+ZjooZnVuIGMgLT4gYFAgYykpXG5cbiAgbGV0IG1ha2UgKHR5cGUgdCkgKG1vZHVsZSBSb3cgOiBSb3cgd2l0aCB0eXBlIHQgPSB0KSB+Y29sdW1uc1xuICAgICAgPyh0YWJsZSA6IHQgTHdkX3RhYmxlLnQgPSBMd2RfdGFibGUubWFrZSAoKSlcbiAgICAgID8oc2hhcmVkX2RyYWdfZGF0YSA6IHQgTHdkX3RhYmxlLnJvdyBvcHRpb24gTHdkLnZhciA9IEx3ZC52YXIgTm9uZSkgKCkgPVxuICAgIGxldCBhdCA9IEF0dHJzLnRvX2F0IGdyaWQgaW5cbiAgICBsZXQgdGFibGVfaGVhZGVyID0gQ29sdW1ucy50b19oZWFkZXIgY29sdW1ucyBpblxuICAgIGxldCB0YWJsZV9ib2R5ID1cbiAgICAgIEx3ZF90YWJsZS5tYXBfcmVkdWNlXG4gICAgICAgIChyZW5kZXJfcm93IChtb2R1bGUgUm93KSB+c2hhcmVkX2RyYWdfZGF0YSB+bjooQXJyYXkubGVuZ3RoIGNvbHVtbnMpKVxuICAgICAgICBMd2Rfc2VxLm1vbm9pZCB0YWJsZVxuICAgIGluXG4gICAgbGV0IGVsdCA9XG4gICAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICAgIGxldCQgZWx0ID1cbiAgICAgICAgRWx3ZC5kaXYgfmF0IFsgYFAgdGFibGVfaGVhZGVyOyBgUyAoTHdkX3NlcS5saWZ0IHRhYmxlX2JvZHkpIF1cbiAgICAgIGluXG4gICAgICBsZXQgKCkgPSBDb2x1bW5zLnNldCBlbHQgY29sdW1ucyBpblxuICAgICAgZWx0XG4gICAgaW5cbiAgICAoZWx0LCB0YWJsZSlcbmVuZFxuXG5sZXQgcGxheWxpc3RfY29sdW1ucyA9XG4gIERyYWdnYWJsZV90YWJsZS5Db2x1bW5zLlxuICAgIFt8IGNvbHVtbiBcIkZpcnN0Q09sXCIgXCIyNTZweFwiOyBjb2x1bW4gXCJTZWNvbmRcIiBcIjI1NnB4XCIgfF1cblxubW9kdWxlIFBsYXlsaXN0X3JvdyA9IHN0cnVjdFxuICB0eXBlIHQgPSBzdHJpbmcgKiBzdHJpbmdcblxuICBsZXQgcmVuZGVyIChsLCByKSA9IFsgRWwuZGl2IFsgRWwudHh0JyBsIF07IEVsLmRpdiBbIEVsLnR4dCcgciBdIF1cbmVuZFxuXG5sZXQgbWFrZV90YWJsZSByb3dzID1cbiAgbGV0IHRhYmxlID0gTHdkX3RhYmxlLm1ha2UgKCkgaW5cbiAgTGlzdC5pdGVyIHJvd3MgfmY6KGZ1biBzZXQgLT4gaWdub3JlIEBAIEx3ZF90YWJsZS5hcHBlbmQgfnNldCB0YWJsZSk7XG4gIHRhYmxlXG5cbmxldCBkcmFnZ2FibGVfdGFibGUgP3NoYXJlZF9kcmFnX2RhdGEgKCkgPVxuICBEcmFnZ2FibGVfdGFibGUubWFrZVxuICAgIChtb2R1bGUgUGxheWxpc3Rfcm93KVxuICAgIH5jb2x1bW5zOnBsYXlsaXN0X2NvbHVtbnMgP3NoYXJlZF9kcmFnX2RhdGFcbiAgICB+dGFibGU6XG4gICAgICAobWFrZV90YWJsZVxuICAgICAgICAgW1xuICAgICAgICAgICAoXCJ0b3RvXCIsIFwicjFcIik7XG4gICAgICAgICAgIChcInRhdGFcIiwgXCJyMlwiKTtcbiAgICAgICAgICAgKFwidGl0aVwiLCBcInIzXCIpO1xuICAgICAgICAgICAoXCJ0YVwiLCBcInI0XCIpO1xuICAgICAgICAgICAoXCJ0dVwiLCBcInI1XCIpO1xuICAgICAgICAgXSlcbiAgICAoKVxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyZXIuQnJyXG5vcGVuISBCcnJfbHdkX3VpXG5vcGVuISBCcnJfbHdkXG5tb2R1bGUgQXBpID0gRFMuQXBpXG5cbigqKiBBcHBsaWNhdGlvbiBwYXJ0ICopXG5cbigqKiBDb2x1bW5zIGRlY2xhcmF0aW9uICopXG5sZXQgY29sdW1ucyAoKSA9XG4gIFRhYmxlLkNvbHVtbnMuXG4gICAgW3xcbiAgICAgIHYgXCJPcmRlclwiIFwiNXJlbVwiIEBAIFsgYFAgKEVsLnR4dCcgXCIjXCIpIF07XG4gICAgICB2IFwiQ292ZXJcIiBcIjVyZW1cIiBAQCBbIGBQIChFbC50eHQnIFwiQ292ZXJcIikgXTtcbiAgICAgIHYgXCJUaXRsZVwiIFwiMWZyXCIgQEAgWyBgUCAoRWwudHh0JyBcIlRpdGxlXCIpIF07XG4gICAgfF1cblxubGV0IG1ha2UgfnJlc2V0X3BsYXlsaXN0IH5mZXRjaCA/c2Nyb2xsX3RhcmdldFxuICAgICh2aWV3IDogKERiLlZpZXcucmFuZ2VkLCAnYSkgRnV0LnJlc3VsdCBMd2QudCkgPVxuICBsZXQgaW1nX3VybCBzZXJ2ZXJfaWQgaXRlbV9pZCA9XG4gICAgbGV0IHNlcnZlcnMgPVxuICAgICAgKCogc2hvdWxkIHRoaXMgYmUgcmVhY3RpdmUgPyAqKVxuICAgICAgTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zIHw+IEx3ZF9zZXEudG9fbGlzdFxuICAgIGluXG4gICAgbGV0IHVybCA9XG4gICAgICB0cnlcbiAgICAgICAgbGV0IGNvbm5leGlvbiA6IERTLmNvbm5leGlvbiA9IExpc3QuYXNzcSBzZXJ2ZXJfaWQgc2VydmVycyBpblxuICAgICAgICBQcmludGYuc3ByaW50ZiBcIiVzL0l0ZW1zLyVzL0ltYWdlcy9QcmltYXJ5P3dpZHRoPTUwXCIgY29ubmV4aW9uLmJhc2VfdXJsXG4gICAgICAgICAgaXRlbV9pZFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gXCJzZXJ2ZXItZXJyb3IucG5nXCJcbiAgICBpblxuICAgIEF0LnNyYyAoSnN0ci52IHVybClcbiAgaW5cbiAgbGV0IHJlbmRlciB2aWV3IHN0YXJ0X2luZGV4XG4gICAgICB7XG4gICAgICAgIERiLlN0b3Jlcy5JdGVtcy5pdGVtID1cbiAgICAgICAgICB7IEFwaS5JdGVtLmlkOyBuYW1lOyBhbGJ1bV9pZDsgc2VydmVyX2lkOyBpbWFnZV9ibHVyX2hhc2hlczsgXyB9O1xuICAgICAgICBfO1xuICAgICAgfSA9XG4gICAgbGV0IHBsYXlfZnJvbSBfID1cbiAgICAgIGlnbm9yZVxuICAgICAgICAobGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgIGxldCsgKHZpZXcgOiBEYi5WaWV3LnJhbmdlZCkgPSB2aWV3IGluXG4gICAgICAgICByZXNldF9wbGF5bGlzdFxuICAgICAgICAgICB7XG4gICAgICAgICAgICAgdmlldyB3aXRoXG4gICAgICAgICAgICAgdmlldyA9XG4gICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgIHZpZXcudmlldyB3aXRoXG4gICAgICAgICAgICAgICAgIHN0YXJ0X29mZnNldCA9IHZpZXcudmlldy5zdGFydF9vZmZzZXQgKyBzdGFydF9pbmRleDtcbiAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgIH0pXG4gICAgaW5cbiAgICBsZXQgcGxheV9vbl9jbGljayA9IEVsd2QuaGFuZGxlciBFdi5jbGljayBwbGF5X2Zyb20gaW5cbiAgICBsZXQgaW1nX3VybCA9XG4gICAgICBtYXRjaCAoaW1hZ2VfYmx1cl9oYXNoZXMsIGFsYnVtX2lkKSB3aXRoXG4gICAgICB8IHsgcHJpbWFyeSA9IE5vbmUgfSwgXyB8IF8sIE5vbmUgLT5cbiAgICAgICAgICBMd2QucmV0dXJuIChBdC5zcmMgKEpzdHIudiBcInRyYWNrLnBuZ1wiKSlcbiAgICAgIHwgXywgU29tZSBpZCAtPiBMd2QucmV0dXJuIChpbWdfdXJsIHNlcnZlcl9pZCBpZClcbiAgICBpblxuICAgIGxldCBzdGF0dXMgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIubm93X3BsYXlpbmcpIH5mOihmdW5jdGlvblxuICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZCA9IGl0ZW1faWQ7IF8gfTsgXyB9IHdoZW4gU3RyaW5nLmVxdWFsIGl0ZW1faWQgaWQgLT5cbiAgICAgICAgICAgIEVsLmRpdiB+YXQ6WyBBdC5jbGFzcycgKEpzdHIudiBcInBsYXlpbmdcIikgXSBbIEVsLnR4dCcgXCJ8PlwiIF1cbiAgICAgICAgfCBTb21lIF8gfCBOb25lIC0+IEVsLmRpdiBbIEVsLnR4dCcgKHN0cmluZ19vZl9pbnQgKHN0YXJ0X2luZGV4ICsgMSkpIF0pXG4gICAgaW5cbiAgICBbXG4gICAgICBgUiBzdGF0dXM7XG4gICAgICBgUlxuICAgICAgICAoRWx3ZC5kaXZcbiAgICAgICAgICAgfmV2OlsgYFAgcGxheV9vbl9jbGljayBdXG4gICAgICAgICAgIFsgYFIgKEVsd2QuaW1nIH5hdDpbIGBSIGltZ191cmw7IGBQIChBdC53aWR0aCA1MCkgXSAoKSkgXSk7XG4gICAgICBgUCAoRWwuZGl2IFsgRWwuc3BhbiBbIEVsLnR4dCcgbmFtZSBdIF0pO1xuICAgIF1cbiAgaW5cbiAgbGV0IHBsYWNlaG9sZGVyIF9pID0gW10gaW5cbiAgbGV0IHVpX3RhYmxlID1cbiAgICB7IFRhYmxlLnRhYmxlID0geyBjb2x1bW5zID0gY29sdW1ucyAoKSB9OyByb3dfaGVpZ2h0ID0gRW0gNC4gfVxuICBpblxuICBsZXQgZGF0YV9zb3VyY2UgPVxuICAgIEx3ZC5tYXAgdmlldyB+ZjooZnVuIHZpZXcgLT5cbiAgICAgICAgbGV0IHRvdGFsX2l0ZW1zID1cbiAgICAgICAgICBGdXQubWFwXG4gICAgICAgICAgICAoUmVzdWx0Lm1hcCAoZnVuIHZpZXcgLT4gRGIuVmlldy5pdGVtX2NvdW50IHZpZXcuVmlldy52aWV3KSlcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGZldGNoIGkgPVxuICAgICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgICAgbGV0KiB2aWV3ID0gdmlldyBpblxuICAgICAgICAgIGZldGNoIHZpZXcgaVxuICAgICAgICBpblxuICAgICAgICBsZXQgcmVuZGVyID0gcmVuZGVyIHZpZXcgaW5cbiAgICAgICAgeyBUYWJsZS5WaXJ0dWFsLnRvdGFsX2l0ZW1zOyBmZXRjaDsgcmVuZGVyIH0pXG4gIGluXG4gIFRhYmxlLlZpcnR1YWwubWFrZSB+dWlfdGFibGUgfnBsYWNlaG9sZGVyID9zY3JvbGxfdGFyZ2V0IGRhdGFfc291cmNlXG5cbmxldCBtYWtlX25vd19wbGF5aW5nIH5yZXNldF9wbGF5bGlzdCB+ZmV0Y2hcbiAgICAodmlldyA6IChEYi5WaWV3LnJhbmdlZCwgJ2EpIEZ1dC5yZXN1bHQgTHdkLnQpID1cbiAgbGV0IHNjcm9sbF90YXJnZXQgPSBMd2QuZ2V0IFBsYXllci5wbGF5c3RhdGUuY3VycmVudF9pbmRleCBpblxuICBtYWtlIH5zY3JvbGxfdGFyZ2V0IH5yZXNldF9wbGF5bGlzdCB+ZmV0Y2ggdmlld1xuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyXG5cbigqIFRoZSBzZXNzaW9uIHV1aWQgaXMgc3RvcmVkIHRvIHRoZSBsb2NhbCBzdG9yYWdlIGFuZCB1c2VkIHRvIGlkZW50aWZ5IGEgdXNlclxuICAgc2Vzc2lvbi4gVGhpcyBpcyByZXF1aXJlZCBieSBKZWxseWZpbiBhdXRob3JpemF0aW9uIHNjaGVtZS4gKilcbmxldCBzZXNzaW9uX3V1aWQgPVxuICAoKiBXZSBuZXZlciByZWFjdCB0byB0aGlzIHZhciB3ZSBjb3VsZCByZXBsYWNlIGl0ICopXG4gIEJycl9sd2RfdWkuUGVyc2lzdGVudC52YXJfZiB+a2V5Olwic2Vzc2lvbl91dWlkXCIgKGZ1biAoKSAtPlxuICAgICAgU3RkLm5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZylcblxubGV0IF8gPVxuICBsZXQgdXVpZCA9IEx3ZC5wZWVrIHNlc3Npb25fdXVpZCBpblxuICBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGkuc2V0X3Nlc3Npb25fdXVpZCB1dWlkO1xuICBXb3JrZXJfY2xpZW50LnF1ZXJ5IChTZXRfc2Vzc2lvbl91dWlkIChMd2QucGVlayBzZXNzaW9uX3V1aWQpKVxuXG5sZXQgZmV0Y2ggcmFuZ2VkX3ZpZXcgaSA9XG4gIFdvcmtlcl9jbGllbnQuKHF1ZXJ5IChHZXQgKHJhbmdlZF92aWV3LlZpZXcudmlldywgcmFuZ2VkX3ZpZXcub3JkZXIsIGkpKSlcblxubW9kdWxlIFAgPSBQbGF5ZXIuUGxheWJhY2tfY29udHJvbGxlciAoc3RydWN0XG4gIGxldCBmZXRjaCA9IGZldGNoXG5lbmQpXG5cbmxldCBhcHAgPVxuICBsZXQgcGxheWxpc3QgPSBCcnJfbHdkX3VpLlBlcnNpc3RlbnQudmFyIH5rZXk6XCJ0b3RvMVwiIDAgaW5cbiAgbGV0IG9uX2NsaWNrIF8gXyA9XG4gICAgTHdkLnNldCBwbGF5bGlzdCAoTHdkLnBlZWsgcGxheWxpc3QgKyAxKTtcbiAgICBMYW5nLnNldCBMYW5nLkVuO1xuICAgIEJycl9sd2RfdWkuQnV0dG9uLk5leHRcbiAgaW5cbiAgbGV0IF9idG5fbWl4LCBfLCBfID1cbiAgICBVaS5Ud29fc3RhdGVfYnV0dG9uLm1ha2Ugfm9uX2NsaWNrIChmdW4gXyAtPlxuICAgICAgICBbXG4gICAgICAgICAgYFJcbiAgICAgICAgICAgIChMd2QubWFwIChMd2QuZ2V0IHBsYXlsaXN0KSB+ZjooZnVuIHBsIC0+XG4gICAgICAgICAgICAgICAgIEVsLnR4dCcgKFwiY2xpY2tcIiBeIHN0cmluZ19vZl9pbnQgcGwpKSk7XG4gICAgICAgIF0pXG4gIGluXG4gIGxldCBzdGF0dXMgPVxuICAgIEVsd2QuZGl2XG4gICAgICB+YXQ6WyBgUCAoQXQuc3R5bGUgKEpzdHIudiBcImdyaWQtY29sdW1uOjEvLTFcIikpIF1cbiAgICAgIFsgYFAgKEVsLmgxIFsgRWwudHh0JyBcIldlbGNvbWUgdG8gT0NBTUlYXCIgXSk7IGBSIChTZXJ2ZXJzLnVpICgpKSBdXG4gIGluXG4gIGxldCBwbGF5ZXJfdWkgPVxuICAgIGxldCBwbGF5ZXIgPSBQLm1ha2UgKCkgaW5cbiAgICBFbHdkLmRpdiB+YXQ6WyBgUCAoQXQuc3R5bGUgKEpzdHIudiBcImdyaWQtY29sdW1uOjEvLTFcIikpIF0gWyBgUiBwbGF5ZXIgXVxuICBpblxuICBsZXQgZl9zZWFyY2ggPVxuICAgIGxldCBvcGVuIEJycl9sd2RfdWkuRmllbGRfdGV4dGlucHV0IGluXG4gICAgbWFrZSB7IG5hbWUgPSBcInBvdWV0XCI7IGRlZmF1bHQgPSBOb25lOyBsYWJlbCA9IFtdIH1cbiAgaW5cbiAgbGV0IGZfc29ydCA9XG4gICAgbGV0IG9wZW4gQnJyX2x3ZF91aS5GaWVsZF9zZWxlY3QgaW5cbiAgICBsZXQgb3B0aW9ucyA9XG4gICAgICBMd2QucHVyZVxuICAgICAgICAoTHdkX3NlcS5vZl9saXN0XG4gICAgICAgICAgIFtcbiAgICAgICAgICAgICAoXCJkYXRlX2FkZGVkXCIsIFwiRGF0ZSBhZGRlZFwiKTsgKFwibmFtZVwiLCBcIk5hbWVcIik7IChcInJhbmRvbVwiLCBcIlJhbmRvbVwiKTtcbiAgICAgICAgICAgXSlcbiAgICBpblxuICAgIG1ha2UgeyBuYW1lID0gXCJ2aWV3LXNvcnRcIjsgZGVmYXVsdCA9IFwiZGF0ZV9hZGRlZFwiOyBsYWJlbCA9IFtdIH0gb3B0aW9uc1xuICBpblxuICBsZXQgZmlsdGVycywgZl92YWx1ZSA9XG4gICAgbGV0IGZfbGlicmFyaWVzID1cbiAgICAgIGxldCBvcGVuIEJycl9sd2RfdWkuRmllbGRfY2hlY2tib3hlcyBpblxuICAgICAgbGV0IGNob2ljZXMgPVxuICAgICAgICBMd2Rfc2VxLmZvbGRfbW9ub2lkXG4gICAgICAgICAgKGZ1biAoXywgbCkgLT5cbiAgICAgICAgICAgIGxldCBsIDogRGIuU3RvcmVzLkl0ZW1zLnQgbGlzdCBMd2QudCA9IGwgaW5cbiAgICAgICAgICAgIEx3ZC5tYXAgbCB+ZjooZnVuIGwgLT5cbiAgICAgICAgICAgICAgICBMd2Rfc2VxLnRyYW5zZm9ybV9saXN0IGwgKGZ1biBsIC0+XG4gICAgICAgICAgICAgICAgICAgIEx3ZF9zZXEuZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBAQCBDaGVjayAobC5pdGVtLmlkLCBbIGBQIChFbC50eHQnIGwuaXRlbS5uYW1lKSBdLCB0cnVlKSkpKVxuICAgICAgICAgIChMd2QucmV0dXJuIEx3ZF9zZXEuZW1wdHksIEx3ZC5tYXAyIH5mOkx3ZF9zZXEuY29uY2F0KVxuICAgICAgICAgIFNlcnZlcnMuc2VydmVyc19saWJyYXJpZXNcbiAgICAgIGluXG4gICAgICBtYWtlIHsgbmFtZSA9IFwicG91ZXRcIjsgZGVzYyA9IEx3ZC5qb2luIGNob2ljZXMgfVxuICAgIGluXG4gICAgbGV0IGZpbHRlcnMgPVxuICAgICAgRWx3ZC5kaXYgWyBgUiBmX3NvcnQuZmllbGQ7IGBSIGZfc2VhcmNoLmZpZWxkOyBgUiBmX2xpYnJhcmllcy5maWVsZCBdXG4gICAgaW5cbiAgICAoZmlsdGVycywgZl9saWJyYXJpZXMudmFsdWUpXG4gIGluXG4gIGxldCBtYWluX3ZpZXcgPVxuICAgIFVpX3V0aWxzLm1hcDMgZl92YWx1ZSBmX3NlYXJjaC52YWx1ZSBmX3NvcnQudmFsdWUgfmY6KGZ1biBsIHQgcyAtPlxuICAgICAgICBsZXQgZmlsdGVycyA9IE9wdGlvbi5tYXAgKGZ1biBzIC0+IFsgRGIuVmlldy5TZWFyY2ggcyBdKSB0IGluXG4gICAgICAgIENvbnNvbGUubG9nXG4gICAgICAgICAgW1xuICAgICAgICAgICAgXCJVcGRhdGluZyBtYWluIHZpZXc6XCI7XG4gICAgICAgICAgICBKdi5vZl9vcHRpb24gfm5vbmU6KEp2Lm9mX3N0cmluZyBcIlxcXCJcXFwiXCIpIEp2Lm9mX3N0cmluZyB0O1xuICAgICAgICAgICAgSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgbDtcbiAgICAgICAgICAgIEp2Lm9mX3N0cmluZyBzO1xuICAgICAgICAgIF07XG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCBzb3J0ID0gRGIuVmlldy5Tb3J0Lm9mX3N0cmluZyBzIGluXG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCsgdmlldyA9XG4gICAgICAgICAgV29ya2VyX2NsaWVudC5xdWVyeVxuICAgICAgICAgICAgKENyZWF0ZV92aWV3XG4gICAgICAgICAgICAgICBEYi5WaWV3LihyZXEgQXVkaW8gfnNyY192aWV3czooT25seSBsKSB+c29ydCA/ZmlsdGVycyAoKSkpXG4gICAgICAgIGluXG4gICAgICAgIGxldCBvcmRlciA9XG4gICAgICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgICAgfCBcInJhbmRvbVwiIC0+IFZpZXcuT3JkZXIucmFuZG9tIH5zaXplOnZpZXcuaXRlbV9jb3VudFxuICAgICAgICAgIHwgXyAtPiBWaWV3Lk9yZGVyLkluaXRpYWxcbiAgICAgICAgaW5cbiAgICAgICAgeyBWaWV3LnZpZXc7IGZpcnN0ID0gMDsgbGFzdCA9IHZpZXcuaXRlbV9jb3VudDsgb3JkZXIgfSlcbiAgaW5cblxuICBsZXQgbWFpbl9saXN0ID1cbiAgICBVaV9wbGF5bGlzdC5tYWtlIH5yZXNldF9wbGF5bGlzdDpQLnJlc2V0X3BsYXlsaXN0IH5mZXRjaCBtYWluX3ZpZXdcbiAgaW5cbiAgbGV0IG5vd19wbGF5aW5nID1cbiAgICBsZXQgcGxheWxpc3QgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIucGxheXN0YXRlLnBsYXlsaXN0KSB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBOb25lIC0+IEVsd2Quc3BhbiBbIGBQIChFbC50eHQnIFwiTm90aGluZyBwbGF5aW5nXCIpIF1cbiAgICAgICAgfCBTb21lIHBsYXlsaXN0IC0+XG4gICAgICAgICAgICBVaV9wbGF5bGlzdC5tYWtlX25vd19wbGF5aW5nIH5yZXNldF9wbGF5bGlzdDpQLnJlc2V0X3BsYXlsaXN0IH5mZXRjaFxuICAgICAgICAgICAgICAoTHdkLnB1cmUgKEZ1dC5vayBwbGF5bGlzdCkpKVxuICAgIGluXG4gICAgKCp0b2RvOiBkbyB3ZSBuZWVkIHRoYXQgam9pbiA/KilcbiAgICBMd2Quam9pbiBwbGF5bGlzdFxuICBpblxuICBFbHdkLmRpdlxuICAgIH5hdDpCcnJfbHdkX3VpLkF0dHJzLih0b19hdCB+aWQ6XCJtYWluLWxheW91dFwiIEBAIGNsYXNzZXMgW10pXG4gICAgW1xuICAgICAgYFIgc3RhdHVzO1xuICAgICAgYFJcbiAgICAgICAgKEVsd2QuZGl2XG4gICAgICAgICAgIH5hdDpbIGBQIChBdC5jbGFzcycgKEpzdHIudiBcIml0ZW0tbGlzdFwiKSkgXVxuICAgICAgICAgICBbIGBSIGZpbHRlcnM7IGBSIG1haW5fbGlzdCBdKTtcbiAgICAgIGBSXG4gICAgICAgIChFbHdkLmRpdiB+YXQ6WyBgUCAoQXQuY2xhc3MnIChKc3RyLnYgXCJwbGF5bGlzdFwiKSkgXSBbIGBSIG5vd19wbGF5aW5nIF0pO1xuICAgICAgYFIgcGxheWVyX3VpO1xuICAgIF1cblxubGV0IGlzX3N0b3JhZ2VfcGVyc2lzdGVudCA9XG4gIEJycl9pby5TdG9yYWdlLihtYW5hZ2VyIEcubmF2aWdhdG9yIHw+IE1hbmFnZXIucGVyc2lzdClcblxubGV0IF8gPVxuICBsZXQgb25fbG9hZCBfID1cbiAgICBDb25zb2xlLmxvZyBbIFwiUGVyc2lzdCA/XCI7IGlzX3N0b3JhZ2VfcGVyc2lzdGVudCBdO1xuICAgIGxldCBhcHAgPSBMd2Qub2JzZXJ2ZSBAQCBhcHAgaW5cbiAgICBsZXQgb25faW52YWxpZGF0ZSBfID1cbiAgICAgIGlnbm9yZSBAQCBHLnJlcXVlc3RfYW5pbWF0aW9uX2ZyYW1lXG4gICAgICBAQCBmdW4gXyAtPiBpZ25vcmUgQEAgTHdkLnF1aWNrX3NhbXBsZSBhcHBcbiAgICBpblxuICAgIEVsLmFwcGVuZF9jaGlsZHJlbiAoRG9jdW1lbnQuYm9keSBHLmRvY3VtZW50KSBbIEx3ZC5xdWlja19zYW1wbGUgYXBwIF07XG4gICAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIGFwcCBvbl9pbnZhbGlkYXRlXG4gIGluXG4gIEV2Lmxpc3RlbiBFdi5kb21fY29udGVudF9sb2FkZWQgb25fbG9hZCAoV2luZG93LmFzX3RhcmdldCBHLndpbmRvdylcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRW5zdXJlIHRoYXQgW2F0X2V4aXRdIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgcHJvZ3JhbSAqKVxuXG5sZXQgXyA9IGRvX2F0X2V4aXQoKVxuIl19