diff --git a/app.css b/app.css index 63cff3a..86544e6 100644 --- a/app.css +++ b/app.css @@ -35,8 +35,9 @@ body { justify-items: stretch; align-items: stretch; - width: 100wv; - height: 100wh; + width: 100vw; + height: 100vh; + overflow: hidden; & .item-list, & .playlist { @@ -45,6 +46,12 @@ body { flex-direction: column; height: 100%; overflow: hidden; + align-items: stretch; + + + &>div:last-child { + flex-grow: 1; + } } @media screen and (max-width: 512px) { diff --git a/brr_lwd_ui.css b/brr_lwd_ui.css index 70260ac..9b38731 100644 --- a/brr_lwd_ui.css +++ b/brr_lwd_ui.css @@ -76,6 +76,10 @@ html { border-left: 1px solid black; border-bottom: 1px solid black; + :has(> &) { + overflow: hidden; + } + & .lwdui-lazy-table-content, & .lwdui-lazy-table-content-wrapper, & .lwdui-virtual-table-row { diff --git a/main.bc.js b/main.bc.js index 1fe2240..a30617c 100644 --- a/main.bc.js +++ b/main.bc.js @@ -4615,7 +4615,7 @@ _lt_ = "#", _lu_ = cst_5rem, _lv_ = "Order", - _lV_ = "Persist ?", + _lW_ = "Persist ?", _lP_ = [0, [2, @@ -4646,7 +4646,7 @@ [0, [0, cst_desc, "Desc"], [0, [0, cst_random, "Random"], 0]]], _lK_ = [0, "view-order", cst_desc, 0], _lL_ = cst_pouet, - _lU_ = [0, "main-layout"]; + _lV_ = [0, "main-layout"]; function erase_rel(param){ if(typeof param === "number") return 0; switch(param[0]){ @@ -4875,9 +4875,9 @@ if(! param$0) return 0; var l = param$0[2], a = param$0[1]; try{caml_ml_flush(a);} - catch(_Aw_){ - var _Av_ = caml_wrap_exception(_Aw_); - if(_Av_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_Av_, 0); + catch(_Ax_){ + var _Aw_ = caml_wrap_exception(_Ax_); + if(_Aw_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_Aw_, 0); } param$0 = l; } @@ -4925,15 +4925,15 @@ return caml_call1(old_exit$0, 0); }, success = compare_and_set(exit_function, old_exit, new_exit), - _Au_ = 1 - success; - if(! _Au_) return _Au_; + _Av_ = 1 - success; + if(! _Av_) return _Av_; } } 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_(_At_){return caml_ml_close_channel(_At_);} - function _j_(_As_, _Ar_){return caml_ml_output_char(_As_, _Ar_);} - function _k_(_Aq_){return caml_ml_flush(_Aq_);} + function _i_(_Au_){return caml_ml_close_channel(_Au_);} + function _j_(_At_, _As_){return caml_ml_output_char(_At_, _As_);} + function _k_(_Ar_){return caml_ml_flush(_Ar_);} var max_array_length = caml_sys_const_max_wosize(0), max_string_length = (4 * max_array_length | 0) - 1 | 0; @@ -5119,8 +5119,8 @@ var param$0 = param; for(;;){ if(! param$0) return 1; - var l = param$0[2], a = param$0[1], _Ap_ = caml_call1(p, a); - if(! _Ap_) return _Ap_; + var l = param$0[2], a = param$0[1], _Aq_ = caml_call1(p, a); + if(! _Aq_) return _Aq_; param$0 = l; } } @@ -5157,8 +5157,8 @@ param$0 = l; } } - var _An_ = 0; - return function(_Ao_){return find(_An_, _Ao_);}; + var _Ao_ = 0; + return function(_Ap_){return find(_Ao_, _Ap_);}; } function filter_map(f){ function aux(accu, param){ @@ -5175,14 +5175,14 @@ param$0 = l; } } - var _Al_ = 0; - return function(_Am_){return aux(_Al_, _Am_);}; + var _Am_ = 0; + return function(_An_){return aux(_Am_, _An_);}; } function partition(p, l){ function part(yes, no, param){ var yes$0 = yes, no$0 = no, param$0 = param; for(;;){ - if(! param$0){var _Ak_ = rev(no$0); return [0, rev(yes$0), _Ak_];} + if(! param$0){var _Al_ = rev(no$0); return [0, rev(yes$0), _Al_];} var l = param$0[2], x = param$0[1]; if(caml_call1(p, x)){ var yes$1 = [0, x, yes$0]; @@ -5264,61 +5264,61 @@ } } else if(3 === n && l){ - var _Ae_ = l[2]; - if(_Ae_){ - var match$2 = _Ae_[2]; + var _Af_ = l[2]; + if(_Af_){ + var match$2 = _Af_[2]; if(match$2){ var tl$1 = match$2[2], x3 = match$2[1], - x2$0 = _Ae_[1], + x2$0 = _Af_[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), - _Af_ = + _Ag_ = 0 === c$1 ? [0, x2$0, 0] : 0 <= c$1 ? [0, x3, [0, x2$0, 0]] : [0, x2$0, [0, x3, 0]], - s$0 = _Af_; + s$0 = _Ag_; else if(0 <= c$0){ var c$2 = caml_call2(cmp, x1$0, x3); if(0 === c$2) - var _Ag_ = [0, x2$0, [0, x1$0, 0]]; + var _Ah_ = [0, x2$0, [0, x1$0, 0]]; else if(0 <= c$2) var c$3 = caml_call2(cmp, x2$0, x3), - _Ah_ = + _Ai_ = 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]]], - _Ag_ = _Ah_; + _Ah_ = _Ai_; else - var _Ag_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; - var s$0 = _Ag_; + var _Ah_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; + var s$0 = _Ah_; } else{ var c$4 = caml_call2(cmp, x2$0, x3); if(0 === c$4) - var _Ai_ = [0, x1$0, [0, x2$0, 0]]; + var _Aj_ = [0, x1$0, [0, x2$0, 0]]; else if(0 <= c$4) var c$5 = caml_call2(cmp, x1$0, x3), - _Aj_ = + _Ak_ = 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]]], - _Ai_ = _Aj_; + _Aj_ = _Ak_; else - var _Ai_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; - var s$0 = _Ai_; + var _Aj_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; + var s$0 = _Aj_; } return [0, s$0, tl$1]; } @@ -5354,61 +5354,61 @@ } } else if(3 === n && l){ - var _z__ = l[2]; - if(_z__){ - var match$2 = _z__[2]; + var _z$_ = l[2]; + if(_z$_){ + var match$2 = _z$_[2]; if(match$2){ var tl$1 = match$2[2], x3 = match$2[1], - x2$0 = _z__[1], + x2$0 = _z$_[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), - _z$_ = + _Aa_ = 0 === c$1 ? [0, x2$0, 0] : 0 < c$1 ? [0, x2$0, [0, x3, 0]] : [0, x3, [0, x2$0, 0]], - s$0 = _z$_; + s$0 = _Aa_; else if(0 < c$0){ var c$2 = caml_call2(cmp, x2$0, x3); if(0 === c$2) - var _Aa_ = [0, x1$0, [0, x2$0, 0]]; + var _Ab_ = [0, x1$0, [0, x2$0, 0]]; else if(0 < c$2) - var _Aa_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; + var _Ab_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; else var c$3 = caml_call2(cmp, x1$0, x3), - _Ab_ = + _Ac_ = 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]]], - _Aa_ = _Ab_; - var s$0 = _Aa_; + _Ab_ = _Ac_; + var s$0 = _Ab_; } else{ var c$4 = caml_call2(cmp, x1$0, x3); if(0 === c$4) - var _Ac_ = [0, x2$0, [0, x1$0, 0]]; + var _Ad_ = [0, x2$0, [0, x1$0, 0]]; else if(0 < c$4) - var _Ac_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; + var _Ad_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; else var c$5 = caml_call2(cmp, x2$0, x3), - _Ad_ = + _Ae_ = 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]]], - _Ac_ = _Ad_; - var s$0 = _Ac_; + _Ad_ = _Ae_; + var s$0 = _Ad_; } return [0, s$0, tl$1]; } @@ -5428,7 +5428,7 @@ var len = length(l); return 2 <= len ? sort(len, l)[1] : l; } - function compare(_z9_, _z8_){return caml_int_compare(_z9_, _z8_);} + function compare(_z__, _z9_){return caml_int_compare(_z__, _z9_);} 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;} @@ -5476,10 +5476,10 @@ return invalid_arg(_z_); } function is_space(param){ - var _z7_ = param - 9 | 0; + var _z8_ = param - 9 | 0; a: { - if(4 < _z7_ >>> 0){if(23 !== _z7_) break a;} else if(2 === _z7_) break a; + if(4 < _z8_ >>> 0){if(23 !== _z8_) break a;} else if(2 === _z8_) break a; return 1; } return 0; @@ -5498,9 +5498,9 @@ } } function escaped$0(s){ - var n = [0, 0], _z0_ = caml_ml_bytes_length(s) - 1 | 0, _zZ_ = 0; - if(_z0_ >= 0){ - var i$0 = _zZ_; + var n = [0, 0], _z1_ = caml_ml_bytes_length(s) - 1 | 0, _z0_ = 0; + if(_z1_ >= 0){ + var i$0 = _z0_; for(;;){ var match = caml_bytes_unsafe_get(s, i$0); a: @@ -5510,12 +5510,12 @@ c: { if(32 <= match){ - var _z4_ = match - 34 | 0; - if(58 < _z4_ >>> 0){ - if(93 <= _z4_) break c; + var _z5_ = match - 34 | 0; + if(58 < _z5_ >>> 0){ + if(93 <= _z5_) break c; } - else if(56 < _z4_ - 1 >>> 0) break b; - var _z5_ = 1; + else if(56 < _z5_ - 1 >>> 0) break b; + var _z6_ = 1; break a; } if(11 <= match){ @@ -5523,23 +5523,23 @@ } else if(8 <= match) break b; } - var _z5_ = 4; + var _z6_ = 4; break a; } - var _z5_ = 2; + var _z6_ = 2; } - n[1] = n[1] + _z5_ | 0; - var _z6_ = i$0 + 1 | 0; - if(_z0_ === i$0) break; - i$0 = _z6_; + n[1] = n[1] + _z6_ | 0; + var _z7_ = i$0 + 1 | 0; + if(_z1_ === i$0) break; + i$0 = _z7_; } } if(n[1] === caml_ml_bytes_length(s)) return copy(s); var s$0 = caml_create_bytes(n[1]); n[1] = 0; - var _z2_ = caml_ml_bytes_length(s) - 1 | 0, _z1_ = 0; - if(_z2_ >= 0){ - var i = _z1_; + var _z3_ = caml_ml_bytes_length(s) - 1 | 0, _z2_ = 0; + if(_z3_ >= 0){ + var i = _z2_; for(;;){ var c = caml_bytes_unsafe_get(s, i); a: @@ -5597,9 +5597,9 @@ caml_bytes_unsafe_set(s$0, n[1], c); } n[1]++; - var _z3_ = i + 1 | 0; - if(_z2_ === i) break; - i = _z3_; + var _z4_ = i + 1 | 0; + if(_z3_ === i) break; + i = _z4_; } } return s$0; @@ -5607,21 +5607,21 @@ function map$2(f, s){ var l = caml_ml_bytes_length(s); if(0 === l) return s; - var r = caml_create_bytes(l), _zX_ = l - 1 | 0, _zW_ = 0; - if(_zX_ >= 0){ - var i = _zW_; + var r = caml_create_bytes(l), _zY_ = l - 1 | 0, _zX_ = 0; + if(_zY_ >= 0){ + var i = _zX_; for(;;){ caml_bytes_unsafe_set(r, i, caml_call1(f, caml_bytes_unsafe_get(s, i))); - var _zY_ = i + 1 | 0; - if(_zX_ === i) break; - i = _zY_; + var _zZ_ = i + 1 | 0; + if(_zY_ === i) break; + i = _zZ_; } } return r; } function uppercase_ascii$0(s){return map$2(uppercase_ascii, s);} - function unsafe_of_string(_zV_){return caml_bytes_of_string(_zV_);} - function unsafe_to_string(_zU_){return caml_string_of_bytes(_zU_);} + function unsafe_of_string(_zW_){return caml_bytes_of_string(_zW_);} + function unsafe_to_string(_zV_){return caml_string_of_bytes(_zV_);} 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)); @@ -5671,10 +5671,10 @@ l)); } function is_space$0(param){ - var _zT_ = param - 9 | 0; + var _zU_ = param - 9 | 0; a: { - if(4 < _zT_ >>> 0){if(23 !== _zT_) break a;} else if(2 === _zT_) break a; + if(4 < _zU_ >>> 0){if(23 !== _zU_) break a;} else if(2 === _zU_) break a; return 1; } return 0; @@ -5695,13 +5695,13 @@ var i$0 = i; for(;;){ if(n <= i$0) return s; - var _zS_ = caml_string_unsafe_get(s, i$0) - 32 | 0; + var _zT_ = caml_string_unsafe_get(s, i$0) - 32 | 0; a: { - if(59 < _zS_ >>> 0){ - if(33 < _zS_ - 61 >>> 0) break a; + if(59 < _zT_ >>> 0){ + if(33 < _zT_ - 61 >>> 0) break a; } - else if(2 === _zS_) break a; + else if(2 === _zT_) break a; var i$1 = i$0 + 1 | 0; i$0 = i$1; continue; @@ -5723,11 +5723,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 _zQ_ = 1; return _zQ_;} - catch(_zR_){ - var _zP_ = caml_wrap_exception(_zR_); - if(_zP_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_zP_, 0); + try{index_rec(s, l, i, c); var _zR_ = 1; return _zR_;} + catch(_zS_){ + var _zQ_ = caml_wrap_exception(_zS_); + if(_zQ_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_zQ_, 0); } return invalid_arg(_C_); } @@ -5736,18 +5736,18 @@ return unsafe_to_string(uppercase_ascii$0(unsafe_of_string(s))); } function compare$0(x, y){return caml_string_compare(x, y);} - function symbol$0(_zO_, _zN_){return _zO_ == _zN_ ? 1 : 0;} + function symbol$0(_zP_, _zO_){return _zP_ == _zO_ ? 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)), _zL_ = l - 1 | 0, _zK_ = 1; - if(_zL_ >= 1){ - var i = _zK_; + var res = caml_make_vect(l, caml_call1(f, 0)), _zM_ = l - 1 | 0, _zL_ = 1; + if(_zM_ >= 1){ + var i = _zL_; for(;;){ res[1 + i] = caml_call1(f, i); - var _zM_ = i + 1 | 0; - if(_zL_ === i) break; - i = _zM_; + var _zN_ = i + 1 | 0; + if(_zM_ === i) break; + i = _zN_; } } return res; @@ -5772,14 +5772,14 @@ } function iter2(f, a, b){ if(a.length - 1 !== b.length - 1) return invalid_arg(_G_); - var _zI_ = a.length - 2 | 0, _zH_ = 0; - if(_zI_ >= 0){ - var i = _zH_; + var _zJ_ = a.length - 2 | 0, _zI_ = 0; + if(_zJ_ >= 0){ + var i = _zI_; for(;;){ caml_call2(f, a[1 + i], b[1 + i]); - var _zJ_ = i + 1 | 0; - if(_zI_ === i) break; - i = _zJ_; + var _zK_ = i + 1 | 0; + if(_zJ_ === i) break; + i = _zK_; } } return 0; @@ -5822,14 +5822,14 @@ return fill(1, tl); } function fold_right(f, a, x){ - var r = [0, x], _zF_ = a.length - 2 | 0; - if(_zF_ >= 0){ - var i = _zF_; + var r = [0, x], _zG_ = a.length - 2 | 0; + if(_zG_ >= 0){ + var i = _zG_; for(;;){ r[1] = caml_call2(f, a[1 + i], r[1]); - var _zG_ = i - 1 | 0; + var _zH_ = i - 1 | 0; if(0 === i) break; - i = _zG_; + i = _zH_; } } return r[1]; @@ -5858,15 +5858,15 @@ lexbuf[5] = 0; lexbuf[7] = lexbuf[7] - s | 0; lexbuf[3] = lexbuf[3] - s | 0; - var t = lexbuf[10], _zD_ = t.length - 2 | 0, _zC_ = 0; - if(_zD_ >= 0){ - var i = _zC_; + var t = lexbuf[10], _zE_ = t.length - 2 | 0, _zD_ = 0; + if(_zE_ >= 0){ + var i = _zD_; for(;;){ var v = caml_check_bound(t, i)[1 + i]; if(0 <= v) caml_check_bound(t, i)[1 + i] = v - s | 0; - var _zE_ = i + 1 | 0; - if(_zD_ === i) break; - i = _zE_; + var _zF_ = i + 1 | 0; + if(_zE_ === i) break; + i = _zF_; } } } @@ -5880,11 +5880,11 @@ else var with_positions = 1; var - _zy_ = with_positions ? zero_pos : dummy_pos, _zz_ = with_positions ? zero_pos : dummy_pos, - _zA_ = caml_create_bytes(512); + _zA_ = with_positions ? zero_pos : dummy_pos, + _zB_ = caml_create_bytes(512); return [0, - function(_zB_){return lex_refill(f, _zA_, _zB_);}, + function(_zC_){return lex_refill(f, _zB_, _zC_);}, caml_create_bytes(1024), 0, 0, @@ -5894,8 +5894,8 @@ 0, 0, [0], - _zz_, - _zy_]; + _zA_, + _zz_]; } function from_channel(with_positions, ic){ return from_function @@ -5907,8 +5907,8 @@ else var with_positions = 1; var - _zw_ = with_positions ? zero_pos : dummy_pos, - _zx_ = with_positions ? zero_pos : dummy_pos; + _zx_ = with_positions ? zero_pos : dummy_pos, + _zy_ = with_positions ? zero_pos : dummy_pos; return [0, function(lexbuf){lexbuf[9] = 1; return 0;}, of_string(s), @@ -5920,8 +5920,8 @@ 0, 1, [0], - _zx_, - _zw_]; + _zy_, + _zx_]; } function lexeme(lexbuf){ var len = lexbuf[6] - lexbuf[5] | 0; @@ -5936,30 +5936,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 _zv_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _zv_]; + var _zw_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _zw_]; } 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], _zq_ = height(lr); - if(_zq_ <= height(ll)) return create(ll, lv, create(lr, v, r)); + var lr = l[3], lv = l[2], ll = l[1], _zr_ = height(lr); + if(_zr_ <= 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], _zr_ = create(lrr, v, r); - return create(create(ll, lv, lrl), lrv, _zr_); + var lrr = lr[3], lrv = lr[2], lrl = lr[1], _zs_ = create(lrr, v, r); + return create(create(ll, lv, lrl), lrv, _zs_); } if((hl + 2 | 0) >= hr){ - var _zu_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _zu_]; + var _zv_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _zv_]; } if(! r) return invalid_arg(_L_); - var rr = r[3], rv = r[2], rl = r[1], _zs_ = height(rl); - if(_zs_ <= height(rr)) return create(create(l, v, rl), rv, rr); + var rr = r[3], rv = r[2], rl = r[1], _zt_ = height(rl); + if(_zt_ <= 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], _zt_ = create(rlr, rv, rr); - return create(create(l, v, rll), rlv, _zt_); + var rlr = rl[3], rlv = rl[2], rll = rl[1], _zu_ = create(rlr, rv, rr); + return create(create(l, v, rll), rlv, _zu_); } function add(x, t){ if(! t) return [0, 0, x, 0, 1]; @@ -6023,14 +6023,14 @@ function merge(t1, t2){ if(! t1) return t2; if(! t2) return t1; - var _zp_ = remove_min_elt(t2); - return bal(t1, min_elt(t2), _zp_); + var _zq_ = remove_min_elt(t2); + return bal(t1, min_elt(t2), _zq_); } function concat(t1, t2){ if(! t1) return t2; if(! t2) return t1; - var _zo_ = remove_min_elt(t2); - return join(t1, min_elt(t2), _zo_); + var _zp_ = remove_min_elt(t2); + return join(t1, min_elt(t2), _zp_); } function split(x, param){ if(! param) return _N_; @@ -6079,16 +6079,16 @@ match = split(v1, s2), r2$0 = match[3], l2$0 = match[1], - _zm_ = union(r1, r2$0); - return join(union(l1, l2$0), v1, _zm_); + _zn_ = union(r1, r2$0); + return join(union(l1, l2$0), v1, _zn_); } if(1 === h1) return add(v1, s2); var match$0 = split(v2, s1), r1$0 = match$0[3], l1$0 = match$0[1], - _zn_ = union(r1$0, r2); - return join(union(l1$0, l2), v2, _zn_); + _zo_ = union(r1$0, r2); + return join(union(l1$0, l2), v2, _zo_); } function inter(s1, s2){ if(! s1) return 0; @@ -6097,14 +6097,14 @@ r1 = s1[3], v1 = s1[2], l1 = s1[1], - _zj_ = split(v1, s2), - l2 = _zj_[1]; - if(_zj_[2]){ - var r2 = _zj_[3], _zk_ = inter(r1, r2); - return join(inter(l1, l2), v1, _zk_); + _zk_ = split(v1, s2), + l2 = _zk_[1]; + if(_zk_[2]){ + var r2 = _zk_[3], _zl_ = inter(r1, r2); + return join(inter(l1, l2), v1, _zl_); } - var r2$0 = _zj_[3], _zl_ = inter(r1, r2$0); - return concat(inter(l1, l2), _zl_); + var r2$0 = _zk_[3], _zm_ = inter(r1, r2$0); + return concat(inter(l1, l2), _zm_); } function diff(s1, s2){ if(! s1) return 0; @@ -6113,14 +6113,14 @@ r1 = s1[3], v1 = s1[2], l1 = s1[1], - _zg_ = split(v1, s2), - l2 = _zg_[1]; - if(_zg_[2]){ - var r2 = _zg_[3], _zh_ = diff(r1, r2); - return concat(diff(l1, l2), _zh_); + _zh_ = split(v1, s2), + l2 = _zh_[1]; + if(_zh_[2]){ + var r2 = _zh_[3], _zi_ = diff(r1, r2); + return concat(diff(l1, l2), _zi_); } - var r2$0 = _zg_[3], _zi_ = diff(r1, r2$0); - return join(diff(l1, l2), v1, _zi_); + var r2$0 = _zh_[3], _zj_ = diff(r1, r2$0); + return join(diff(l1, l2), v1, _zj_); } function cons_enum(s, e){ var s$0 = s, e$0 = e; @@ -6151,8 +6151,8 @@ } } function compare(s1, s2){ - var _zf_ = cons_enum(s2, 0); - return compare_aux(cons_enum(s1, 0), _zf_); + var _zg_ = cons_enum(s2, 0); + return compare_aux(cons_enum(s1, 0), _zg_); } function equal(s1, s2){return 0 === compare(s1, s2) ? 1 : 0;} function subset(s1, s2){ @@ -6169,19 +6169,19 @@ l1 = s1$0[1], c = caml_call2(Ord[1], v1, v2); if(0 === c){ - var _zc_ = subset(l1, l2); - if(! _zc_) return _zc_; + var _zd_ = subset(l1, l2); + if(! _zd_) return _zd_; s1$0 = r1; s2$0 = r2; } else if(0 <= c){ - var _zd_ = subset([0, 0, v1, r1, 0], r2); - if(! _zd_) return _zd_; + var _ze_ = subset([0, 0, v1, r1, 0], r2); + if(! _ze_) return _ze_; s1$0 = l1; } else{ - var _ze_ = subset([0, l1, v1, 0, 0], l2); - if(! _ze_) return _ze_; + var _zf_ = subset([0, l1, v1, 0, 0], l2); + if(! _zf_) return _zf_; s1$0 = r1; } } @@ -6267,14 +6267,14 @@ break; default: if(l){ - var _zb_ = l[2]; - if(_zb_){ - var match$2 = _zb_[2]; + var _zc_ = l[2]; + if(_zc_){ + var match$2 = _zc_[2]; if(match$2){ var l$5 = match$2[2], x2 = match$2[1], - x1$0 = _zb_[1], + x1$0 = _zc_[1], x0$1 = l[1]; return [0, [0, [0, 0, x0$1, 0, 1], x1$0, [0, 0, x2, 0, 1], 2], @@ -6298,16 +6298,16 @@ } function of_list(l){ if(! l) return empty; - var _y9_ = l[2], x0 = l[1]; - if(! _y9_) return singleton(x0); - var _y__ = _y9_[2], x1 = _y9_[1]; - if(! _y__) return add(x1, singleton(x0)); - var _y$_ = _y__[2], x2 = _y__[1]; - if(! _y$_) return add(x2, add(x1, singleton(x0))); - var _za_ = _y$_[2], x3 = _y$_[1]; - if(! _za_) return add(x3, add(x2, add(x1, singleton(x0)))); - if(_za_[2]) return of_sorted_list(sort_uniq(Ord[1], l)); - var x4 = _za_[1]; + var _y__ = l[2], x0 = l[1]; + if(! _y__) return singleton(x0); + var _y$_ = _y__[2], x1 = _y__[1]; + if(! _y$_) return add(x1, singleton(x0)); + var _za_ = _y$_[2], x2 = _y$_[1]; + if(! _za_) return add(x2, add(x1, singleton(x0))); + var _zb_ = _za_[2], x3 = _za_[1]; + if(! _zb_) return add(x3, add(x2, add(x1, singleton(x0)))); + if(_zb_[2]) return of_sorted_list(sort_uniq(Ord[1], l)); + var x4 = _zb_[1]; return add(x4, add(x3, add(x2, add(x1, singleton(x0))))); } return [0, @@ -6369,32 +6369,32 @@ , of_list]; } - function _P_(_y7_){ - var _y8_ = Make(_y7_); + function _P_(_y8_){ + var _y9_ = Make(_y8_); return [0, - _y8_[17], - _y8_[18], + _y9_[17], + _y9_[18], , - _y8_[4], + _y9_[4], , - _y8_[20], - _y8_[21], - _y8_[22], + _y9_[20], + _y9_[21], + _y9_[22], , - _y8_[25], - _y8_[28], - _y8_[29], - _y8_[30], - _y8_[31], + _y9_[25], + _y9_[28], + _y9_[29], + _y9_[30], + _y9_[31], , - _y8_[32], + _y9_[32], , , , , , - _y8_[37], - _y8_[39], + _y9_[37], + _y9_[39], , , , @@ -6407,8 +6407,8 @@ , , , - _y8_[50], - _y8_[57]]; + _y9_[50], + _y9_[57]]; } function Make$0(Ord){ function height(param){if(! param) return 0; var h = param[5]; return h;} @@ -6416,8 +6416,8 @@ var hl = height(l), hr = height(r), - _y6_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, x, d, r, _y6_]; + _y7_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, x, d, r, _y7_]; } function singleton(x, d){return [0, 0, x, d, 0, 1];} function bal(l, x, d, r){ @@ -6425,32 +6425,32 @@ if(r) var h$0 = r[5], hr = h$0; else var hr = 0; if((hr + 2 | 0) < hl){ if(! l) return invalid_arg(_R_); - var lr = l[4], ld = l[3], lv = l[2], ll = l[1], _y1_ = height(lr); - if(_y1_ <= height(ll)) return create(ll, lv, ld, create(lr, x, d, r)); + var lr = l[4], ld = l[3], lv = l[2], ll = l[1], _y2_ = height(lr); + if(_y2_ <= height(ll)) return create(ll, lv, ld, create(lr, x, d, r)); if(! lr) return invalid_arg(_Q_); var lrr = lr[4], lrd = lr[3], lrv = lr[2], lrl = lr[1], - _y2_ = create(lrr, x, d, r); - return create(create(ll, lv, ld, lrl), lrv, lrd, _y2_); + _y3_ = create(lrr, x, d, r); + return create(create(ll, lv, ld, lrl), lrv, lrd, _y3_); } if((hl + 2 | 0) >= hr){ - var _y5_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, x, d, r, _y5_]; + var _y6_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, x, d, r, _y6_]; } if(! r) return invalid_arg(_U_); - var rr = r[4], rd = r[3], rv = r[2], rl = r[1], _y3_ = height(rl); - if(_y3_ <= height(rr)) return create(create(l, x, d, rl), rv, rd, rr); + var rr = r[4], rd = r[3], rv = r[2], rl = r[1], _y4_ = height(rl); + if(_y4_ <= height(rr)) return create(create(l, x, d, rl), rv, rd, rr); if(! rl) return invalid_arg(_S_); var rlr = rl[4], rld = rl[3], rlv = rl[2], rll = rl[1], - _y4_ = create(rlr, rv, rd, rr); - return create(create(l, x, d, rll), rlv, rld, _y4_); + _y5_ = create(rlr, rv, rd, rr); + return create(create(l, x, d, rll), rlv, rld, _y5_); } function add(x, data, m){ if(! m) return [0, 0, x, data, 0, 1]; @@ -6508,8 +6508,8 @@ v = param$0[2], l = param$0[1], c = caml_call2(Ord[1], x, v), - _y0_ = 0 === c ? 1 : 0; - if(_y0_) return _y0_; + _y1_ = 0 === c ? 1 : 0; + if(_y1_) return _y1_; var r$0 = 0 <= c ? r : l; param$0 = r$0; } @@ -6533,7 +6533,7 @@ var r$0 = param[4]; return r$0; } - function _yQ_(t1, t2){ + function _yR_(t1, t2){ if(! t1) return t2; if(! t2) return t1; var match = min_binding(t2), d = match[2], x = match[1]; @@ -6542,7 +6542,7 @@ function remove(x, m){ if(! m) return 0; var r = m[4], d = m[3], v = m[2], l = m[1], c = caml_call2(Ord[1], x, v); - if(0 === c) return _yQ_(l, r); + if(0 === c) return _yR_(l, r); if(0 <= c){ var rr = remove(x, r); return r === rr ? m : bal(l, v, d, rr); @@ -6583,15 +6583,15 @@ d = param$0[3], v = param$0[2], l = param$0[1], - _yX_ = caml_call2(p, v, d); - if(_yX_){ - var _yY_ = for_all(p, l); - if(_yY_){param$0 = r; continue;} - var _yZ_ = _yY_; + _yY_ = caml_call2(p, v, d); + if(_yY_){ + var _yZ_ = for_all(p, l); + if(_yZ_){param$0 = r; continue;} + var _y0_ = _yZ_; } else - var _yZ_ = _yX_; - return _yZ_; + var _y0_ = _yY_; + return _y0_; } } function add_min_binding(k, x, param){ @@ -6667,9 +6667,9 @@ r2 = match[3], d2 = match[2], l2 = match[1], - _yT_ = merge(f, r1, r2), - _yU_ = caml_call3(f, v1, [0, d1], d2); - return concat_or_join(merge(f, l1, l2), v1, _yU_, _yT_); + _yU_ = merge(f, r1, r2), + _yV_ = caml_call3(f, v1, [0, d1], d2); + return concat_or_join(merge(f, l1, l2), v1, _yV_, _yU_); } } else if(! s2) return 0; @@ -6683,9 +6683,9 @@ r1$0 = match$0[3], d1$0 = match$0[2], l1$0 = match$0[1], - _yV_ = merge(f, r1$0, r2$0), - _yW_ = caml_call3(f, v2, d1$0, [0, d2$0]); - return concat_or_join(merge(f, l1$0, l2$0), v2, _yW_, _yV_); + _yW_ = merge(f, r1$0, r2$0), + _yX_ = caml_call3(f, v2, d1$0, [0, d2$0]); + return concat_or_join(merge(f, l1$0, l2$0), v2, _yX_, _yW_); } function cons_enum(m, e){ var m$0 = m, e$0 = e; @@ -6725,8 +6725,8 @@ e2$0 = e2$2; } } - var _yS_ = cons_enum(m2, 0); - return compare_aux(cons_enum(m1, 0), _yS_); + var _yT_ = cons_enum(m2, 0); + return compare_aux(cons_enum(m1, 0), _yT_); } function equal(cmp, m1, m2){ function equal_aux(e1, e2){ @@ -6752,8 +6752,8 @@ return; } } - var _yR_ = cons_enum(m2, 0); - return equal_aux(cons_enum(m1, 0), _yR_); + var _yS_ = cons_enum(m2, 0); + return equal_aux(cons_enum(m1, 0), _yS_); } function cardinal(param){ if(! param) return; @@ -6810,28 +6810,28 @@ equal, cardinal]; } - function _Y_(_yO_){ - var _yP_ = Make$0(_yO_); + function _Y_(_yP_){ + var _yQ_ = Make$0(_yP_); return [0, - _yP_[5], + _yQ_[5], , - _yP_[18], - _yP_[7], + _yQ_[18], + _yQ_[7], , , - _yP_[24], - _yP_[38], + _yQ_[24], + _yQ_[38], , - _yP_[44], - _yP_[45], - _yP_[26], - _yP_[29], - _yP_[30], + _yQ_[44], + _yQ_[45], + _yQ_[26], + _yQ_[29], + _yQ_[30], , , , , - _yP_[46], + _yQ_[46], , , , @@ -6840,8 +6840,8 @@ , , , - _yP_[8], - _yP_[17]]; + _yQ_[8], + _yQ_[17]]; } var Empty = [248, _Z_, caml_fresh_oo_id(0)]; function create(param){return [0, 0, 0];} @@ -6890,11 +6890,11 @@ return [0, content]; } function take(q){ - var _yN_ = q[2]; - if(! _yN_) throw caml_maybe_attach_backtrace(Empty$0, 1); - var content = _yN_[1]; - if(_yN_[2]){ - var next = _yN_[2]; + var _yO_ = q[2]; + if(! _yO_) throw caml_maybe_attach_backtrace(Empty$0, 1); + var content = _yO_[1]; + if(_yO_[2]){ + var next = _yO_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return content; @@ -6903,11 +6903,11 @@ return content; } function take_opt(q){ - var _yM_ = q[2]; - if(! _yM_) return 0; - var content = _yM_[1]; - if(_yM_[2]){ - var next = _yM_[2]; + var _yN_ = q[2]; + if(! _yN_) return 0; + var content = _yN_[1]; + if(_yN_[2]){ + var next = _yN_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return [0, content]; @@ -6965,14 +6965,14 @@ return 0; } function add_substring(b, s, offset, len){ - var _yJ_ = offset < 0 ? 1 : 0; - if(_yJ_) - var _yK_ = _yJ_; + var _yK_ = offset < 0 ? 1 : 0; + if(_yK_) + var _yL_ = _yK_; else var - _yL_ = len < 0 ? 1 : 0, - _yK_ = _yL_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); - if(_yK_) invalid_arg(_ad_); + _yM_ = len < 0 ? 1 : 0, + _yL_ = _yM_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); + if(_yL_) invalid_arg(_ad_); 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); @@ -7608,8 +7608,8 @@ var rest2$7 = ty2[2], ty2$0 = ty2[1], - _yI_ = trans(rest1$7, rest2$7); - return [8, trans(ty1$0, ty2$0), _yI_]; + _yJ_ = trans(rest1$7, rest2$7); + return [8, trans(ty1$0, ty2$0), _yJ_]; case 10: break a; case 11: @@ -7782,10 +7782,10 @@ throw caml_maybe_attach_backtrace(Type_mismatch, 1); } function type_format(fmt, fmtty){ - var _yH_ = type_format_gen(fmt, fmtty); - if(typeof _yH_[2] !== "number") + var _yI_ = type_format_gen(fmt, fmtty); + if(typeof _yI_[2] !== "number") throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var fmt$0 = _yH_[1]; + var fmt$0 = _yI_[1]; return fmt$0; } function type_format_gen(fmt, fmtty){ @@ -8004,8 +8004,8 @@ fmt_rest$13 = fmt[3], sub_fmtty$1 = fmt[2], pad_opt$0 = fmt[1], - _yG_ = [0, erase_rel(sub_fmtty1)]; - if(caml_notequal([0, erase_rel(sub_fmtty$1)], _yG_)) + _yH_ = [0, erase_rel(sub_fmtty1)]; + if(caml_notequal([0, erase_rel(sub_fmtty$1)], _yH_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); var match$29 = type_format_gen(fmt_rest$13, erase_rel(fmtty_rest$10)), @@ -8141,11 +8141,11 @@ var sub_fmtty$0 = ign[2], pad_opt$0 = ign[1], - _yF_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), - match$0 = _yF_[2], + _yG_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), + match$0 = _yG_[2], fmtty$1 = match$0[2], fmt$1 = match$0[1], - sub_fmtty$1 = _yF_[1]; + sub_fmtty$1 = _yG_[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); @@ -8305,11 +8305,11 @@ sub_fmtty_rest$17 = sub_fmtty[3], sub2_fmtty$2 = sub_fmtty[2], sub1_fmtty$0 = sub_fmtty[1], - _yD_ = [0, erase_rel(sub1_fmtty)]; - if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _yD_)) + _yE_ = [0, erase_rel(sub1_fmtty)]; + if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _yE_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var _yE_ = [0, erase_rel(sub2_fmtty$1)]; - if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _yE_)) + var _yF_ = [0, erase_rel(sub2_fmtty$1)]; + if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _yF_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); var sub_fmtty$0 = trans(symm(sub1_fmtty), sub2_fmtty$1), @@ -8393,7 +8393,7 @@ padty$0 = 0 <= width ? padty : 0, width$0 = abs(width); if(width$0 <= len) return str; - var _yC_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _yC_); + var _yD_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _yD_); switch(padty$0){ case 0: blit_string(str, 0, res, 0, len); break; @@ -8620,14 +8620,14 @@ } function transform_int_alt(iconv, s){ if(13 > iconv) return s; - var n = [0, 0], _yx_ = caml_ml_string_length(s) - 1 | 0, _yw_ = 0; - if(_yx_ >= 0){ - var i$0 = _yw_; + var n = [0, 0], _yy_ = caml_ml_string_length(s) - 1 | 0, _yx_ = 0; + if(_yy_ >= 0){ + var i$0 = _yx_; for(;;){ if(9 >= caml_string_unsafe_get(s, i$0) - 48 >>> 0) n[1]++; - var _yB_ = i$0 + 1 | 0; - if(_yx_ === i$0) break; - i$0 = _yB_; + var _yC_ = i$0 + 1 | 0; + if(_yy_ === i$0) break; + i$0 = _yC_; } } var @@ -8639,18 +8639,18 @@ function put(c){caml_bytes_set(buf, pos[1], c); pos[1]++; return;} var left = [0, ((digits - 1 | 0) % 3 | 0) + 1 | 0], - _yz_ = caml_ml_string_length(s) - 1 | 0, - _yy_ = 0; - if(_yz_ >= 0){ - var i = _yy_; + _yA_ = caml_ml_string_length(s) - 1 | 0, + _yz_ = 0; + if(_yA_ >= 0){ + var i = _yz_; 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]--; put(c);} - var _yA_ = i + 1 | 0; - if(_yz_ === i) break; - i = _yA_; + var _yB_ = i + 1 | 0; + if(_yA_ === i) break; + i = _yB_; } } return unsafe_to_string(buf); @@ -8688,13 +8688,13 @@ var i$0 = i; for(;;){ if(i$0 === len) return 0; - var _yv_ = caml_string_get(str, i$0) - 46 | 0; + var _yw_ = caml_string_get(str, i$0) - 46 | 0; a: { - if(23 < _yv_ >>> 0){ - if(55 === _yv_) break a; + if(23 < _yw_ >>> 0){ + if(55 === _yw_) break a; } - else if(21 < _yv_ - 1 >>> 0) break a; + else if(21 < _yw_ - 1 >>> 0) break a; var i$1 = i$0 + 1 | 0; i$0 = i$1; continue; @@ -8852,9 +8852,9 @@ fmt$0 = rest$16; break; case 18: - var _yt_ = fmt$0[1]; - if(0 === _yt_[0]){ - var rest$17 = fmt$0[2], fmt$1 = _yt_[1][1]; + var _yu_ = fmt$0[1]; + if(0 === _yu_[0]){ + var rest$17 = fmt$0[2], fmt$1 = _yu_[1][1]; let acc = acc$0, k = k$0, rest = rest$17; var k$1 = @@ -8864,7 +8864,7 @@ fmt$0 = fmt$1; } else{ - var rest$18 = fmt$0[2], fmt$2 = _yt_[1][1]; + var rest$18 = fmt$0[2], fmt$2 = _yu_[1][1]; let acc = acc$0, k = k$0, rest = rest$18; var k$2 = @@ -8901,12 +8901,12 @@ rest$23 = fmt$0[3], f = fmt$0[2], arity = fmt$0[1], - _yu_ = caml_call1(f, 0); + _yv_ = caml_call1(f, 0); if(counter >= 50) return caml_trampoline_return - (make_custom$0, [0, k$0, acc$0, rest$23, arity, _yu_]); + (make_custom$0, [0, k$0, acc$0, rest$23, arity, _yv_]); var counter$0 = counter + 1 | 0; - return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _yu_); + return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _yv_); } } } @@ -9039,7 +9039,7 @@ return make_from_fmtty(k, acc, concat_fmtty(ty, rest$8), fmt);}; case 10: var rest$9 = fmtty[1]; - return function(param, _ys_){ + return function(param, _yt_){ return make_from_fmtty(k, acc, rest$9, fmt);}; case 11: var rest$10 = fmtty[1]; @@ -9061,11 +9061,11 @@ return caml_trampoline(make_from_fmtty$0(0, k, acc, fmtty, fmt)); } function make_invalid_arg(counter, k, acc, fmt){ - var _yr_ = [8, acc, _bS_]; + var _ys_ = [8, acc, _bS_]; if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _yr_, fmt]); + return caml_trampoline_return(make_printf$0, [0, k, _ys_, fmt]); var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _yr_, fmt); + return make_printf$0(counter$0, k, _ys_, fmt); } function make_padding(k, acc, fmt, pad, trans){ if(typeof pad === "number") @@ -9222,11 +9222,11 @@ return function(x){ return make_custom(k, acc, rest, arity$0, caml_call1(f, x));}; } - var _yq_ = [4, acc, f]; + var _yr_ = [4, acc, f]; if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _yq_, rest]); + return caml_trampoline_return(make_printf$0, [0, k, _yr_, rest]); var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _yq_, rest); + return make_printf$0(counter$0, k, _yr_, rest); } function make_custom(k, acc, rest, arity, f){ return caml_trampoline(make_custom$0(0, k, acc, rest, arity, f)); @@ -9384,13 +9384,13 @@ else try{ var - _yo_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), - indent = _yo_; + _yp_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), + indent = _yp_; } - catch(_yp_){ - var _ym_ = caml_wrap_exception(_yp_); - if(_ym_[1] !== Failure) throw caml_maybe_attach_backtrace(_ym_, 0); - var _yn_ = invalid_box(0), indent = _yn_; + catch(_yq_){ + var _yn_ = caml_wrap_exception(_yq_); + if(_yn_[1] !== Failure) throw caml_maybe_attach_backtrace(_yn_, 0); + var _yo_ = invalid_box(0), indent = _yo_; } var exp_end = parse_spaces(nend); if(exp_end !== len) invalid_box(0); @@ -9416,7 +9416,7 @@ fmt); } function fprintf(oc, fmt){ - return kfprintf(function(_yl_){return 0;}, oc, fmt); + return kfprintf(function(_ym_){return 0;}, oc, fmt); } function eprintf(fmt){return fprintf(stderr, fmt);} function ksprintf(k, param){ @@ -9442,8 +9442,8 @@ } function other_fields(x, i){ if(x.length - 1 <= i) return _b2_; - var _yj_ = other_fields(x, i + 1 | 0), _yk_ = field(x, i); - return caml_call2(sprintf(_b3_), _yk_, _yj_); + var _yk_ = other_fields(x, i + 1 | 0), _yl_ = field(x, i); + return caml_call2(sprintf(_b3_), _yl_, _yk_); } function fields(x){ var match = x.length - 1; @@ -9454,10 +9454,10 @@ case 1: return _b6_; default: - var _yi_ = field(x, 1); return caml_call1(sprintf(_b7_), _yi_); + var _yj_ = field(x, 1); return caml_call1(sprintf(_b7_), _yj_); } - var _yg_ = other_fields(x, 2), _yh_ = field(x, 1); - return caml_call2(sprintf(_b4_), _yh_, _yg_); + var _yh_ = other_fields(x, 2), _yi_ = field(x, 1); + return caml_call2(sprintf(_b4_), _yi_, _yh_); } function use_printers(x){ function conv(param){ @@ -9467,7 +9467,7 @@ var tl = param$0[2], hd = param$0[1]; a: { - try{var val = caml_call1(hd, x);}catch(_yf_){break a;} + try{var val = caml_call1(hd, x);}catch(_yg_){break a;} if(val){var s = val[1]; return [0, s];} } param$0 = tl; @@ -9512,8 +9512,8 @@ return s; } function convert_raw_backtrace(bt){ - var _ye_ = [0, caml_convert_raw_backtrace(bt)]; - return _ye_; + var _yf_ = [0, caml_convert_raw_backtrace(bt)]; + return _yf_; } function format_backtrace_slot(pos, slot){ function info(is_raise){ @@ -9521,32 +9521,32 @@ } if(0 === slot[0]){ var - _x8_ = slot[5], - _x9_ = slot[4], - _x__ = slot[3], - _x$_ = slot[6] ? _cf_ : _ch_, - _ya_ = slot[2], - _yb_ = slot[7], - _yc_ = info(slot[1]); + _x9_ = slot[5], + _x__ = slot[4], + _x$_ = slot[3], + _ya_ = slot[6] ? _cf_ : _ch_, + _yb_ = slot[2], + _yc_ = slot[7], + _yd_ = info(slot[1]); return [0, caml_call7 - (sprintf(_cg_), _yc_, _yb_, _ya_, _x$_, _x__, _x9_, _x8_)]; + (sprintf(_cg_), _yd_, _yc_, _yb_, _ya_, _x$_, _x__, _x9_)]; } if(slot[1]) return 0; - var _yd_ = info(0); - return [0, caml_call1(sprintf(_ci_), _yd_)]; + var _ye_ = info(0); + return [0, caml_call1(sprintf(_ci_), _ye_)]; } function print_exception_backtrace(outchan, backtrace){ if(! backtrace) return fprintf(outchan, _ck_); - var a = backtrace[1], _x6_ = a.length - 2 | 0, _x5_ = 0; - if(_x6_ >= 0){ - var i = _x5_; + var a = backtrace[1], _x7_ = a.length - 2 | 0, _x6_ = 0; + if(_x7_ >= 0){ + var i = _x6_; for(;;){ var match = format_backtrace_slot(i, caml_check_bound(a, i)[1 + i]); if(match){var str = match[1]; caml_call1(fprintf(outchan, _cj_), str);} - var _x7_ = i + 1 | 0; - if(_x6_ === i) break; - i = _x7_; + var _x8_ = i + 1 | 0; + if(_x7_ === i) break; + i = _x8_; } } return 0; @@ -9561,68 +9561,68 @@ old_printers = get(printers), new_printers = [0, fn, old_printers], success = compare_and_set(printers, old_printers, new_printers), - _x4_ = 1 - success; - if(! _x4_) return _x4_; + _x5_ = 1 - success; + if(! _x5_) return _x5_; } } var errors = _cl_.slice(); function default_uncaught_exception_han(exn, raw_backtrace){ - var _x2_ = to_string$0(exn); - caml_call1(eprintf(_cm_), _x2_); + var _x3_ = to_string$0(exn); + caml_call1(eprintf(_cm_), _x3_); print_raw_backtrace(stderr, raw_backtrace); var status = caml_ml_debug_info_status(0); if(status < 0){ - var _x3_ = abs(status); - prerr_endline(caml_check_bound(errors, _x3_)[1 + _x3_]); + var _x4_ = abs(status); + prerr_endline(caml_check_bound(errors, _x4_)[1 + _x4_]); } return _k_(stderr); } var empty_backtrace = [0]; function try_get_raw_backtrace(param){ - var _x1_ = caml_get_exception_raw_backtrace(0); - return _x1_; + var _x2_ = caml_get_exception_raw_backtrace(0); + return _x2_; } 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(_x0_){} + try{do_at_exit(0);}catch(_x1_){} try{ var - _xY_ = default_uncaught_exception_han(exn, raw_backtrace), - _xX_ = _xY_; + _xZ_ = default_uncaught_exception_han(exn, raw_backtrace), + _xY_ = _xZ_; } catch(exn$1){ var exn$0 = caml_wrap_exception(exn$1), raw_backtrace$0 = try_get_raw_backtrace(0), - _xV_ = to_string$0(exn); - caml_call1(eprintf(_co_), _xV_); + _xW_ = to_string$0(exn); + caml_call1(eprintf(_co_), _xW_); print_raw_backtrace(stderr, raw_backtrace); - var _xW_ = to_string$0(exn$0); - caml_call1(eprintf(_cp_), _xW_); + var _xX_ = to_string$0(exn$0); + caml_call1(eprintf(_cp_), _xX_); print_raw_backtrace(stderr, raw_backtrace$0); - var _xX_ = _k_(stderr); + var _xY_ = _k_(stderr); } - return _xX_; + return _xY_; } - catch(_xZ_){ - var _xU_ = caml_wrap_exception(_xZ_); - if(_xU_ === Out_of_memory) return prerr_endline(_cn_); - throw caml_maybe_attach_backtrace(_xU_, 0); + catch(_x0_){ + var _xV_ = caml_wrap_exception(_x0_); + if(_xV_ === Out_of_memory) return prerr_endline(_cn_); + throw caml_maybe_attach_backtrace(_xV_, 0); } } function handle_uncaught_exception$0(exn, debugger_in_use){ try{ - var _xS_ = handle_uncaught_exception(exn, debugger_in_use); - return _xS_; + var _xT_ = handle_uncaught_exception(exn, debugger_in_use); + return _xT_; } - catch(_xT_){return 0;} + catch(_xU_){return 0;} } caml_register_named_value ("Printexc.handle_uncaught_exception", handle_uncaught_exception$0); - function _cq_(_xR_){return caml_get_exception_raw_backtrace(_xR_);} + function _cq_(_xS_){return caml_get_exception_raw_backtrace(_xS_);} var Finally_raised = [248, _cr_, caml_fresh_oo_id(0)]; register_printer (function(param){ @@ -9645,10 +9645,10 @@ } function extract(d){ var - _xO_ = caml_string_get(d, 3) << 24, - _xP_ = caml_string_get(d, 2) << 16, - _xQ_ = caml_string_get(d, 1) << 8; - return ((caml_string_get(d, 0) + _xQ_ | 0) + _xP_ | 0) + _xO_ | 0; + _xP_ = caml_string_get(d, 3) << 24, + _xQ_ = caml_string_get(d, 2) << 16, + _xR_ = caml_string_get(d, 1) << 8; + return ((caml_string_get(d, 0) + _xR_ | 0) + _xQ_ | 0) + _xP_ | 0; } var seed$0 = 0 === seed.length - 1 ? [0, 0] : seed, @@ -9656,26 +9656,26 @@ i$0 = 0; for(;;){ caml_check_bound(s[1], i$0)[1 + i$0] = i$0; - var _xN_ = i$0 + 1 | 0; + var _xO_ = i$0 + 1 | 0; if(54 === i$0) break; - i$0 = _xN_; + i$0 = _xO_; } - var accu = [0, _ct_], _xI_ = 54 + max$0(55, l) | 0, _xH_ = 0; - if(_xI_ >= 0){ - var i = _xH_; + var accu = [0, _ct_], _xJ_ = 54 + max$0(55, l) | 0, _xI_ = 0; + if(_xJ_ >= 0){ + var i = _xI_; for(;;){ var j = i % 55 | 0, k = caml_mod(i, l), - _xJ_ = caml_check_bound(seed$0, k)[1 + k]; - accu[1] = combine(accu[1], _xJ_); + _xK_ = caml_check_bound(seed$0, k)[1 + k]; + accu[1] = combine(accu[1], _xK_); var - _xK_ = extract(accu[1]), - _xL_ = (caml_check_bound(s[1], j)[1 + j] ^ _xK_) & 1073741823; - caml_check_bound(s[1], j)[1 + j] = _xL_; - var _xM_ = i + 1 | 0; - if(_xI_ === i) break; - i = _xM_; + _xL_ = extract(accu[1]), + _xM_ = (caml_check_bound(s[1], j)[1 + j] ^ _xL_) & 1073741823; + caml_check_bound(s[1], j)[1 + j] = _xM_; + var _xN_ = i + 1 | 0; + if(_xJ_ === i) break; + i = _xN_; } } s[2] = 0; @@ -9695,16 +9695,16 @@ function bits(s){ s[2] = (s[2] + 1 | 0) % 55 | 0; var - _xE_ = s[2], - curval = caml_check_bound(s[1], _xE_)[1 + _xE_], - _xF_ = (s[2] + 24 | 0) % 55 | 0, + _xF_ = s[2], + curval = caml_check_bound(s[1], _xF_)[1 + _xF_], + _xG_ = (s[2] + 24 | 0) % 55 | 0, newval = - caml_check_bound(s[1], _xF_)[1 + _xF_] + caml_check_bound(s[1], _xG_)[1 + _xG_] + (curval ^ (curval >>> 25 | 0) & 31) | 0, newval30 = newval & 1073741823, - _xG_ = s[2]; - caml_check_bound(s[1], _xG_)[1 + _xG_] = newval30; + _xH_ = s[2]; + caml_check_bound(s[1], _xH_)[1 + _xH_] = newval30; return newval30; } function intaux(s, n){ @@ -9721,16 +9721,16 @@ function int$1(bound){return int$0(default$0, bound);} function get_state(param){return copy$0(default$0);} function ongoing_traversal(h){ - var _xC_ = h.length - 1 < 4 ? 1 : 0, _xD_ = _xC_ || (h[4] < 0 ? 1 : 0); - return _xD_; + var _xD_ = h.length - 1 < 4 ? 1 : 0, _xE_ = _xD_ || (h[4] < 0 ? 1 : 0); + return _xE_; } - try{var _lX_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _lX_;} - catch(_xA_){ - var _cw_ = caml_wrap_exception(_xA_); + try{var _lY_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _lY_;} + catch(_xB_){ + var _cw_ = caml_wrap_exception(_xB_); if(_cw_ !== Not_found) throw caml_maybe_attach_backtrace(_cw_, 0); - try{var _lW_ = caml_sys_getenv("CAMLRUNPARAM"), _cz_ = _lW_;} - catch(_xB_){ - var _cx_ = caml_wrap_exception(_xB_); + try{var _lX_ = caml_sys_getenv("CAMLRUNPARAM"), _cz_ = _lX_;} + catch(_xC_){ + var _cx_ = caml_wrap_exception(_xC_); if(_cx_ !== Not_found) throw caml_maybe_attach_backtrace(_cx_, 0); var _cz_ = _cy_; } @@ -9738,7 +9738,7 @@ } var randomized_default = contains(params, 82), - prng = [246, function(_xz_){return make_self_init(0);}]; + prng = [246, function(_xA_){return make_self_init(0);}]; function power_2_above(x, n){ var x$0 = x; for(;;){ @@ -9756,10 +9756,10 @@ var s = power_2_above(16, initial_size); if(random) var - _xx_ = caml_obj_tag(prng), - _xy_ = - 250 === _xx_ ? prng[1] : 246 === _xx_ ? force_lazy_block(prng) : prng, - seed = bits(_xy_); + _xy_ = caml_obj_tag(prng), + _xz_ = + 250 === _xy_ ? prng[1] : 246 === _xy_ ? force_lazy_block(prng) : prng, + seed = bits(_xz_); else var seed = 0; return [0, 0, caml_make_vect(s, 0), seed, s]; @@ -9785,26 +9785,26 @@ cell$0 = next; } } - var _xs_ = odata.length - 2 | 0, _xr_ = 0; - if(_xs_ >= 0){ - var i$0 = _xr_; + var _xt_ = odata.length - 2 | 0, _xs_ = 0; + if(_xt_ >= 0){ + var i$0 = _xs_; for(;;){ insert_bucket(caml_check_bound(odata, i$0)[1 + i$0]); - var _xw_ = i$0 + 1 | 0; - if(_xs_ === i$0) break; - i$0 = _xw_; + var _xx_ = i$0 + 1 | 0; + if(_xt_ === i$0) break; + i$0 = _xx_; } } if(inplace){ - var _xu_ = nsize - 1 | 0, _xt_ = 0; - if(_xu_ >= 0){ - var i = _xt_; + var _xv_ = nsize - 1 | 0, _xu_ = 0; + if(_xv_ >= 0){ + var i = _xu_; for(;;){ var match = caml_check_bound(ndata_tail, i)[1 + i]; if(match) match[3] = 0; - var _xv_ = i + 1 | 0; - if(_xu_ === i) break; - i = _xv_; + var _xw_ = i + 1 | 0; + if(_xv_ === i) break; + i = _xw_; } } } @@ -9815,8 +9815,8 @@ odata = h[2], osize = odata.length - 1, nsize = osize * 2 | 0, - _xq_ = nsize < max_array_length ? 1 : 0; - if(! _xq_) return _xq_; + _xr_ = nsize < max_array_length ? 1 : 0; + if(! _xr_) return _xr_; 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); @@ -9832,8 +9832,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 _xp_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; - return _xp_ ? resize$0(key_index, h) : _xp_; + var _xq_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; + return _xq_ ? resize$0(key_index, h) : _xq_; } function remove_bucket(h, i, key, prec, c){ var prec$1 = prec, prec$0 = c; @@ -9865,8 +9865,8 @@ } function find(h, key){ var - _xo_ = key_index(h, key), - match = caml_check_bound(h[2], _xo_)[1 + _xo_]; + _xp_ = key_index(h, key), + match = caml_check_bound(h[2], _xp_)[1 + _xp_]; 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; @@ -9887,8 +9887,8 @@ param$0 = next; } } - var _xn_ = key_index(h, key); - return find_in_bucket(caml_check_bound(h[2], _xn_)[1 + _xn_]); + var _xo_ = key_index(h, key); + return find_in_bucket(caml_check_bound(h[2], _xo_)[1 + _xo_]); } function replace_bucket(key, data, param){ var slot = param; @@ -9916,13 +9916,13 @@ var k = param$0[1], next = param$0[3], - _xm_ = 0 === caml_compare(k, key) ? 1 : 0; - if(_xm_) return _xm_; + _xn_ = 0 === caml_compare(k, key) ? 1 : 0; + if(_xn_) return _xn_; param$0 = next; } } - var _xl_ = key_index(h, key); - return mem_in_bucket(caml_check_bound(h[2], _xl_)[1 + _xl_]); + var _xm_ = key_index(h, key); + return mem_in_bucket(caml_check_bound(h[2], _xm_)[1 + _xm_]); } function id(x){return x;} var zero = 0, unknown = -1; @@ -9951,8 +9951,8 @@ return; } function format_string(state, s){ - var _xk_ = s !== cst$1 ? 1 : 0; - return _xk_ ? format_pp_text(state, caml_ml_string_length(s), s) : _xk_; + var _xl_ = s !== cst$1 ? 1 : 0; + return _xl_ ? format_pp_text(state, caml_ml_string_length(s), s) : _xl_; } function break_new_line(state, param, width){ var after = param[3], offset = param[2], before = param[1]; @@ -9984,8 +9984,8 @@ match$0 = match[1], width = match$0[2], box_type = match$0[1], - _xj_ = state[9] < width ? 1 : 0; - if(! _xj_) return _xj_; + _xk_ = state[9] < width ? 1 : 0; + if(! _xk_) return _xk_; if(3 < box_type - 1 >>> 0) return; return break_line(state, width); } @@ -9994,8 +9994,8 @@ if(! match) return; var match$0 = match[1], size = match$0[1], length = match$0[3]; state[12] = state[12] - length | 0; - var _xi_ = id(size); - state[9] = state[9] + _xi_ | 0; + var _xj_ = id(size); + state[9] = state[9] + _xj_ | 0; return; } function format_pp_token(state, size, param){ @@ -10024,8 +10024,8 @@ var width = match$0[1][2]; return break_line(state, width); case 4: - var _xh_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; - return _xh_ ? pp_skip_token(state) : _xh_; + var _xi_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; + return _xi_ ? pp_skip_token(state) : _xi_; default: var match$1 = pop_opt(state[5]); if(! match$1) return; @@ -10132,9 +10132,9 @@ length = match$0[3], token = match$0[2], pending_count = state[13] - state[12] | 0, - _xf_ = is_known(size), - _xg_ = _xf_ || (state[9] <= pending_count ? 1 : 0); - if(! _xg_) return _xg_; + _xg_ = is_known(size), + _xh_ = _xg_ || (state[9] <= pending_count ? 1 : 0); + if(! _xh_) return _xh_; take(state[28]); var size$0 = is_known(size) ? id(size) : pp_infinity; format_pp_token(state, size$0, token); @@ -10165,9 +10165,9 @@ left_total = match$0[1], size = id(queue_elem[1]); if(left_total < state[12]) return initialize_scan_stack(state[1]); - var _xe_ = queue_elem[2]; - if(typeof _xe_ !== "number") - switch(_xe_[0]){ + var _xf_ = queue_elem[2]; + if(typeof _xf_ !== "number") + switch(_xf_[0]){ case 3: if(1 - ty){ queue_elem[1] = id(state[13] + size | 0); @@ -10193,46 +10193,46 @@ var size = id(- state[13] | 0), elem = [0, size, [3, indent, br_ty], 0]; return scan_push(state, 0, elem); } - var _xd_ = state[14] === state[15] ? 1 : 0; - return _xd_ ? enqueue_string(state, state[16]) : _xd_; + var _xe_ = state[14] === state[15] ? 1 : 0; + return _xe_ ? enqueue_string(state, state[16]) : _xe_; } function pp_open_sys_box(state){return pp_open_box_gen(state, 0, 3);} function pp_close_box(state, param){ - var _xb_ = 1 < state[14] ? 1 : 0; - if(_xb_){ + var _xc_ = 1 < state[14] ? 1 : 0; + if(_xc_){ 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 _xc_ = 0; + var _xd_ = 0; } else - var _xc_ = _xb_; - return _xc_; + var _xd_ = _xc_; + return _xd_; } function pp_open_stag(state, tag_name){ if(state[22]){push(tag_name, state[4]); caml_call1(state[26], tag_name);} - var _xa_ = state[23]; - if(! _xa_) return _xa_; + var _xb_ = state[23]; + if(! _xb_) return _xb_; 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 _w__ = state[22]; - if(_w__){ + var _w$_ = state[22]; + if(_w$_){ var match = pop_opt(state[4]); if(match){ var tag_name = match[1]; return caml_call1(state[27], tag_name); } - var _w$_ = 0; + var _xa_ = 0; } else - var _w$_ = _w__; - return _w$_; + var _xa_ = _w$_; + return _xa_; } function pp_close_tag(state, param){return pp_close_stag(state, 0);} function pp_set_mark_tags(state, b){state[23] = b; return;} @@ -10275,8 +10275,8 @@ } } function pp_print_as_size(state, size, s){ - var _w9_ = state[14] < state[15] ? 1 : 0; - return _w9_ ? enqueue_string_as(state, size, s) : _w9_; + var _w__ = state[14] < state[15] ? 1 : 0; + return _w__ ? enqueue_string_as(state, size, s) : _w__; } function pp_print_as(state, isize, s){ return pp_print_as_size(state, id(isize), s); @@ -10299,16 +10299,16 @@ return caml_call1(state[18], 0); } function pp_force_newline(state, param){ - var _w8_ = state[14] < state[15] ? 1 : 0; - return _w8_ ? enqueue_advance(state, [0, zero, 3, 0]) : _w8_; + var _w9_ = state[14] < state[15] ? 1 : 0; + return _w9_ ? enqueue_advance(state, [0, zero, 3, 0]) : _w9_; } function pp_print_custom_break(state, fits, breaks){ var after = fits[3], width = fits[2], before = fits[1], - _w7_ = state[14] < state[15] ? 1 : 0; - if(! _w7_) return _w7_; + _w8_ = state[14] < state[15] ? 1 : 0; + if(! _w8_) return _w8_; var size = id(- state[13] | 0), token = [1, fits, breaks], @@ -10331,8 +10331,8 @@ function display_blanks(state, n){ var n$0 = n; for(;;){ - var _w6_ = 0 < n$0 ? 1 : 0; - if(! _w6_) return _w6_; + var _w7_ = 0 < n$0 ? 1 : 0; + if(! _w7_) return _w7_; 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; @@ -10349,21 +10349,21 @@ var s = param[2]; return symbol_concat(_cR_, symbol_concat(s, _cQ_)); } - function default_pp_print_open_tag(_w5_){return 0;} - function default_pp_print_close_tag(_w4_){return 0;} + function default_pp_print_open_tag(_w6_){return 0;} + function default_pp_print_close_tag(_w5_){return 0;} function pp_make_formatter(f, g, h, i, j){ var pp_queue = create$0(0), sys_tok = [0, unknown, _cT_, 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, _w1_ = create(0), _w2_ = create(0), _w3_ = create(0); + var pp_margin = 78, _w2_ = create(0), _w3_ = create(0), _w4_ = create(0); return [0, scan_stack, create(0), + _w4_, _w3_, _w2_, - _w1_, pp_margin, 10, 68, @@ -10394,27 +10394,27 @@ pp_make_formatter (output, flush, + function(_w1_){return 0;}, function(_w0_){return 0;}, - function(_wZ_){return 0;}, - function(_wY_){return 0;}); - ppf[19] = function(_wX_){return display_newline(ppf, _wX_);}; - ppf[20] = function(_wW_){return display_blanks(ppf, _wW_);}; - ppf[21] = function(_wV_){return display_blanks(ppf, _wV_);}; + function(_wZ_){return 0;}); + ppf[19] = function(_wY_){return display_newline(ppf, _wY_);}; + ppf[20] = function(_wX_){return display_blanks(ppf, _wX_);}; + ppf[21] = function(_wW_){return display_blanks(ppf, _wW_);}; return ppf; } function formatter_of_out_channel(oc){ return make_formatter - (function(_wS_, _wT_, _wU_){ - return output_substring(oc, _wS_, _wT_, _wU_); + (function(_wT_, _wU_, _wV_){ + return output_substring(oc, _wT_, _wU_, _wV_); }, function(param){return _k_(oc);}); } function formatter_of_buffer(b){ return make_formatter - (function(_wP_, _wQ_, _wR_){ - return add_substring(b, _wP_, _wQ_, _wR_); + (function(_wQ_, _wR_, _wS_){ + return add_substring(b, _wQ_, _wR_, _wS_); }, - function(_wO_){return 0;}); + function(_wP_){return 0;}); } var pp_buffer_size = 512; function pp_make_buffer(param){return create$1(pp_buffer_size);} @@ -10451,7 +10451,7 @@ if(opt) var sth = opt[1], none = sth; else - var none = function(param, _wN_){return 0;}; + var none = function(param, _wO_){return 0;}; if(! param) return caml_call2(none, ppf, 0); var v = param[1]; return caml_call2(pp_v, ppf, v); @@ -10521,48 +10521,48 @@ indent = match$0[1]; return pp_open_box_gen(ppf, indent, bty); case 2: - var _wE_ = acc[1]; - if(typeof _wE_ !== "number" && 0 === _wE_[0]){ - var _wF_ = _wE_[2]; - if(typeof _wF_ !== "number" && 1 === _wF_[0]){ - var s$0 = acc[2], size = _wF_[2], p$2 = _wE_[1]; + var _wF_ = acc[1]; + if(typeof _wF_ !== "number" && 0 === _wF_[0]){ + var _wG_ = _wF_[2]; + if(typeof _wG_ !== "number" && 1 === _wG_[0]){ + var s$0 = acc[2], size = _wG_[2], p$2 = _wF_[1]; break b; } } - var s = acc[2], p$1 = _wE_; + var s = acc[2], p$1 = _wF_; break a; case 3: - var _wG_ = acc[1]; - if(typeof _wG_ !== "number" && 0 === _wG_[0]){ - var _wH_ = _wG_[2]; - if(typeof _wH_ !== "number" && 1 === _wH_[0]){ - var c$0 = acc[2], size$0 = _wH_[2], p$4 = _wG_[1]; + var _wH_ = acc[1]; + if(typeof _wH_ !== "number" && 0 === _wH_[0]){ + var _wI_ = _wH_[2]; + if(typeof _wI_ !== "number" && 1 === _wI_[0]){ + var c$0 = acc[2], size$0 = _wI_[2], p$4 = _wH_[1]; break; } } - var c = acc[2], p$3 = _wG_; + var c = acc[2], p$3 = _wH_; break c; case 4: - var _wJ_ = acc[1]; - if(typeof _wJ_ !== "number" && 0 === _wJ_[0]){ - var _wK_ = _wJ_[2]; - if(typeof _wK_ !== "number" && 1 === _wK_[0]){ - var s$0 = acc[2], size = _wK_[2], p$2 = _wJ_[1]; + var _wK_ = acc[1]; + if(typeof _wK_ !== "number" && 0 === _wK_[0]){ + var _wL_ = _wK_[2]; + if(typeof _wL_ !== "number" && 1 === _wL_[0]){ + var s$0 = acc[2], size = _wL_[2], p$2 = _wK_[1]; break b; } } - var s = acc[2], p$1 = _wJ_; + var s = acc[2], p$1 = _wK_; break a; case 5: - var _wL_ = acc[1]; - if(typeof _wL_ !== "number" && 0 === _wL_[0]){ - var _wM_ = _wL_[2]; - if(typeof _wM_ !== "number" && 1 === _wM_[0]){ - var c$0 = acc[2], size$0 = _wM_[2], p$4 = _wL_[1]; + var _wM_ = acc[1]; + if(typeof _wM_ !== "number" && 0 === _wM_[0]){ + var _wN_ = _wM_[2]; + if(typeof _wN_ !== "number" && 1 === _wN_[0]){ + var c$0 = acc[2], size$0 = _wN_[2], p$4 = _wM_[1]; break; } } - var c = acc[2], p$3 = _wL_; + var c = acc[2], p$3 = _wM_; break c; case 6: var f$0 = acc[2], p$5 = acc[1]; @@ -10578,8 +10578,8 @@ return invalid_arg(msg); } output_acc$0(ppf, p$4); - var _wI_ = make$1(1, c$0); - return pp_print_as_size(ppf, id(size$0), _wI_); + var _wJ_ = make$1(1, c$0); + return pp_print_as_size(ppf, id(size$0), _wJ_); } output_acc$0(ppf, p$3); return pp_print_char(ppf, c); @@ -10598,8 +10598,8 @@ fmt); } function fprintf$0(ppf){ - function _wB_(_wD_){return 0;} - return function(_wC_){return kfprintf$0(_wB_, ppf, _wC_);}; + function _wC_(_wE_){return 0;} + return function(_wD_){return kfprintf$0(_wC_, ppf, _wD_);}; } function kasprintf(k, param){ var fmt = param[1], b = pp_make_buffer(0), ppf = formatter_of_buffer(b); @@ -10623,7 +10623,7 @@ var Error = [248, _cV_, caml_fresh_oo_id(0)]; register_exception(_cW_, [0, Error, [0]]); (function(exn){throw exn;}); - function any(_wA_){return _wA_;} + function any(_wB_){return _wB_;} function return$0(x){return [0, x];} function pure(x){return [0, x];} function is_pure(x){ @@ -10734,20 +10734,20 @@ case 0: throw caml_maybe_attach_backtrace([0, Assert_failure, _c4_], 1); case 1: - var _wu_ = node[1]; - if(typeof _wu_ === "number" && ! _wu_){ + var _wv_ = node[1]; + if(typeof _wv_ === "number" && ! _wv_){ if(! sensitivity) return; if(status[1]) return; status[1] = 1; return; } - var _wv_ = node[4]; - if(7 === _wv_[0]){ - var _wy_ = _wv_[2]; - if(1 === _wy_[0]){ - var _wz_ = _wy_[1]; - if(typeof _wz_ === "number"){ - if(! _wz_ && sensitivity){ + var _ww_ = node[4]; + if(7 === _ww_[0]){ + var _wz_ = _ww_[2]; + if(1 === _wz_[0]){ + var _wA_ = _wz_[1]; + if(typeof _wA_ === "number"){ + if(! _wA_ && sensitivity){ if(status[1]) return; status[1] = 1; return; @@ -10756,19 +10756,19 @@ else if(sensitivity) return; } } - var _ww_ = node[1]; + var _wx_ = node[1]; a: { - if(typeof _ww_ === "number" && _ww_){var sensitivity$0 = 1; break a;} + if(typeof _wx_ === "number" && _wx_){var sensitivity$0 = 1; break a;} var sensitivity$0 = sensitivity; } node[1] = 0; - var _wx_ = node[2]; + var _wy_ = node[2]; if(counter >= 50) return caml_trampoline_return - (invalidate_trace, [0, status, sensitivity$0, _wx_]); + (invalidate_trace, [0, status, sensitivity$0, _wy_]); var counter$0 = counter + 1 | 0; - return invalidate_trace(counter$0, status, sensitivity$0, _wx_); + return invalidate_trace(counter$0, status, sensitivity$0, _wy_); default: var value = node[1]; node[1] = 0; @@ -10825,15 +10825,15 @@ default: var active = t[1]; t[1] = 0; - var _ws_ = active - 1 | 0, _wr_ = 0; - if(_ws_ >= 0){ - var i = _wr_; + var _wt_ = active - 1 | 0, _ws_ = 0; + if(_wt_ >= 0){ + var i = _ws_; for(;;){ invalidate_node (status, sensitivity, caml_check_bound(t[3], i)[1 + i]); - var _wt_ = i + 1 | 0; - if(_ws_ === i) break; - i = _wt_; + var _wu_ = i + 1 | 0; + if(_wt_ === i) break; + i = _wu_; } } return; @@ -10900,41 +10900,41 @@ case 1: var y = trace[2], x$4 = trace[1]; if(x$4 === origin$1) - var _wl_ = [0, y]; + var _wm_ = [0, y]; else{ if(y !== origin$1) throw caml_maybe_attach_backtrace([0, Assert_failure, _c$_], 1); - var _wl_ = [0, x$4]; + var _wm_ = [0, x$4]; } - var trace$0 = _wl_; + var trace$0 = _wm_; break; case 2: var z = trace[3], y$0 = trace[2], x$5 = trace[1]; if(x$5 === origin$1) - var _wm_ = [1, y$0, z]; + var _wn_ = [1, y$0, z]; else if(y$0 === origin$1) - var _wm_ = [1, x$5, z]; + var _wn_ = [1, x$5, z]; else{ if(z !== origin$1) throw caml_maybe_attach_backtrace([0, Assert_failure, _da_], 1); - var _wm_ = [1, x$5, y$0]; + var _wn_ = [1, x$5, y$0]; } - var trace$0 = _wm_; + var trace$0 = _wn_; 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 _wn_ = [2, y$1, z$0, w]; + var _wo_ = [2, y$1, z$0, w]; else if(y$1 === origin$1) - var _wn_ = [2, x$6, z$0, w]; + var _wo_ = [2, x$6, z$0, w]; else if(z$0 === origin$1) - var _wn_ = [2, x$6, y$1, w]; + var _wo_ = [2, x$6, y$1, w]; else{ if(w !== origin$1) throw caml_maybe_attach_backtrace([0, Assert_failure, _db_], 1); - var _wn_ = [2, x$6, y$1, z$0]; + var _wo_ = [2, x$6, y$1, z$0]; } - var trace$0 = _wn_; + var trace$0 = _wo_; break; default: var revidx = rem_idx(origin$0, origin$1); @@ -10961,19 +10961,19 @@ rem_idx(origin$0, b); rem_idx(origin$0, c); rem_idx(origin$0, d); - var _wo_ = [3, a, b, c, d]; + var _wp_ = [3, a, b, c, d]; } else{ var len = trace[3].length - 1; if(count <= (len >>> 2 | 0)) var - _wp_ = sub$1(trace[3], 0, len >>> 1 | 0), - _wq_ = [4, trace[1], trace[2], _wp_]; + _wq_ = sub$1(trace[3], 0, len >>> 1 | 0), + _wr_ = [4, trace[1], trace[2], _wq_]; else - var _wq_ = trace; - var _wo_ = _wq_; + var _wr_ = trace; + var _wp_ = _wr_; } - var trace$0 = _wo_; + var trace$0 = _wp_; } origin$0[2] = trace$0; if(typeof trace$0 !== "number") return failures$0; @@ -11082,9 +11082,9 @@ i = 0; for(;;){ add_idx(origin$0, i, caml_check_bound(entries, i)[1 + i]); - var _wk_ = i + 1 | 0; + var _wl_ = i + 1 | 0; if(4 === i) break; - i = _wk_; + i = _wl_; } var trace$0 = [4, 5, 5, entries]; break; @@ -11157,8 +11157,8 @@ 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 _wj_ = active < idx ? 1 : 0; - if(! _wj_) return _wj_; + var _wk_ = active < idx ? 1 : 0; + if(! _wk_) return _wk_; 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; @@ -11207,22 +11207,22 @@ f$0 = x$0[3], y = x$0[2], x$2 = x$0[1], - _wf_ = aux(self, y), - result = caml_call2(f$0, aux(self, x$2), _wf_); + _wg_ = aux(self, y), + result = caml_call2(f$0, aux(self, x$2), _wg_); break; case 2: var y$0 = x$0[2], x$3 = x$0[1], - _wg_ = aux(self, y$0), - result = [0, aux(self, x$3), _wg_]; + _wh_ = aux(self, y$0), + result = [0, aux(self, x$3), _wh_]; break; case 3: var x$4 = x$0[2], f$1 = x$0[1], - _wh_ = aux(self, x$4), - result = caml_call1(aux(self, f$1), _wh_); + _wi_ = aux(self, x$4), + result = caml_call1(aux(self, f$1), _wi_); break; case 4: var intermediate = aux(self, x$0[1]), match$0 = x$0[2]; @@ -11246,16 +11246,16 @@ aux(self, wrt); var result$0 = aux(self, doc); if(sub_is_damaged(wrt)) - var _wi_ = aux(origin, self); + var _wj_ = aux(origin, self); else{ if(sub_is_damaged(doc)) do_invalidate(1, self); - var _wi_ = result$0; + var _wj_ = result$0; } - var result = _wi_; + var result = _wj_; } - var _we_ = self[1]; + var _wf_ = self[1]; a: - if(typeof _we_ === "number" && _we_){self[1] = [0, result]; break a;} + if(typeof _wf_ === "number" && _wf_){self[1] = [0, result]; break a;} activate_tracing(self, origin, self[2]); return result; default: @@ -11268,7 +11268,7 @@ if(opt) var sth = opt[1], on_invalidate = sth; else - var on_invalidate = function(_wd_){return 0;}; + var on_invalidate = function(_we_){return 0;}; var root = [2, 0, 0, on_invalidate, 0, child]; return root; } @@ -11297,9 +11297,9 @@ 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 _wb_ = self[5], value = sub_sample(queue)(self, _wb_), _wc_ = self[1]; + var _wc_ = self[5], value = sub_sample(queue)(self, _wc_), _wd_ = self[1]; a: - if(typeof _wc_ === "number" && _wc_){self[1] = [0, value]; break a;} + if(typeof _wd_ === "number" && _wd_){self[1] = [0, value]; break a;} return value; } function set_on_invalidate(x, f){ @@ -11432,9 +11432,9 @@ } function smaller_ell(smin, smax){ var - _v$_ = smin < smax ? 1 : 0, - _wa_ = _v$_ ? (smin & smax) << 1 < smax ? 1 : 0 : _v$_; - return _wa_; + _wa_ = smin < smax ? 1 : 0, + _wb_ = _wa_ ? (smin & smax) << 1 < smax ? 1 : 0 : _wa_; + return _wb_; } function disbalanced(smin, smax){return smaller_ell(smin, smax >>> 1 | 0);} function reparent(parent, oldchild, newchild){ @@ -11515,8 +11515,8 @@ var right = self[4]; a: if(typeof right !== "number" && 0 === right[0]){ - var _v__ = size(right[2]); - if(smaller_ell(size(right[4]), _v__)){rot_right(version, right); break a;} + var _v$_ = size(right[2]); + if(smaller_ell(size(right[4]), _v$_)){rot_right(version, right); break a;} } if(counter >= 50) return caml_trampoline_return(rot_left$0, [0, version, self]); @@ -11530,8 +11530,8 @@ var left = self[2]; a: if(typeof left !== "number" && 0 === left[0]){ - var _v9_ = size(left[4]); - if(smaller_ell(size(left[2]), _v9_)){rot_left(version, left); break a;} + var _v__ = size(left[4]); + if(smaller_ell(size(left[2]), _v__)){rot_left(version, left); break a;} } if(counter >= 50) return caml_trampoline_return(rot_right$0, [0, version, self]); @@ -11574,12 +11574,12 @@ for(;;){ if(typeof self$0 === "number") return; if(0 !== self$0[0]) return; - var _v6_ = 0 === self$0[6] ? 1 : 0; - if(! _v6_) return _v6_; - var _v7_ = self$0[2]; - if(typeof _v7_ !== "number" && 0 === _v7_[0] && 0 === _v7_[6]){var self$2 = self$0[2]; self$0 = self$2; continue;} - var _v8_ = self$0[4]; - if(typeof _v8_ !== "number" && 0 === _v8_[0] && 0 === _v8_[6]){var self$1 = self$0[4]; self$0 = self$1; continue;} + var _v7_ = 0 === self$0[6] ? 1 : 0; + if(! _v7_) return _v7_; + var _v8_ = self$0[2]; + if(typeof _v8_ !== "number" && 0 === _v8_[0] && 0 === _v8_[6]){var self$2 = self$0[2]; self$0 = self$2; continue;} + var _v9_ = self$0[4]; + if(typeof _v9_ !== "number" && 0 === _v9_[0] && 0 === _v9_[6]){var self$1 = self$0[4]; self$0 = self$1; continue;} var parent = self$0[5]; balance(version, self$0); self$0 = parent; @@ -11598,11 +11598,11 @@ } function rebalance(r){ if(typeof r !== "number" && 1 === r[0]){ - var _v5_ = r[2]; - if(typeof _v5_ !== "number"){ - if(0 !== _v5_[0]) + var _v6_ = r[2]; + if(typeof _v6_ !== "number"){ + if(0 !== _v6_[0]) throw caml_maybe_attach_backtrace([0, Assert_failure, _dD_], 1); - if(0 === _v5_[6]){ + if(0 === _v6_[6]){ var version = r[1] + 1 | 0, version$0 = @@ -11627,11 +11627,11 @@ var acc$0 = acc, rnode = param; for(;;){ if(! rnode) return acc$0; - var acc$1 = aux(acc$0, rnode[6]), _v3_ = rnode[2]; - if(_v3_) + var acc$1 = aux(acc$0, rnode[6]), _v4_ = rnode[2]; + if(_v4_) var - _v4_ = _v3_[2] ? [0, [0, rnode[2], rnode[3]], acc$1] : acc$1, - acc$2 = _v4_; + _v5_ = _v4_[2] ? [0, [0, rnode[2], rnode[3]], acc$1] : acc$1, + acc$2 = _v5_; else var acc$2 = acc$1; acc$0 = acc$2; @@ -11646,13 +11646,13 @@ if(typeof cell === "number") return 0; if(0 !== cell[0]) throw caml_maybe_attach_backtrace([0, Assert_failure, _dF_], 1); - var left = aux(cell[2]), binding = cell[3], _v2_ = bindings[1]; + var left = aux(cell[2]), binding = cell[3], _v3_ = bindings[1]; a: if(binding){ - if(_v2_){ + if(_v3_){ var - bindings$0 = _v2_[2], - match = _v2_[1], + bindings$0 = _v3_[2], + match = _v3_[1], reduction = match[2], binding$0 = match[1]; if(binding === binding$0){ @@ -11685,9 +11685,9 @@ 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]), _v0_ = rnode[2]; - if(_v0_) - var _v1_ = _v0_[2] ? [0, rnode, acc$1] : acc$1, acc$2 = _v1_; + var acc$1 = aux(acc$0, rnode[6]), _v1_ = rnode[2]; + if(_v1_) + var _v2_ = _v1_[2] ? [0, rnode, acc$1] : acc$1, acc$2 = _v2_; else var acc$2 = acc$1; var tree$0 = rnode[5]; @@ -11715,16 +11715,16 @@ } throw caml_maybe_attach_backtrace([0, Assert_failure, _dI_], 1); } - var left = aux(cell[2]), binding = cell[3], _vY_ = fringe[1]; + var left = aux(cell[2]), binding = cell[3], _vZ_ = fringe[1]; a: if(binding){ - if(_vY_){ - var rnode = _vY_[1]; + if(_vZ_){ + var rnode = _vZ_[1]; if(rnode){ - var fringe$1 = _vY_[2]; + var fringe$1 = _vZ_[2]; if(binding === rnode[2]){ fringe[1] = fringe$1; - var _vZ_ = rnode[3], reduction$0 = _vZ_; + var _v0_ = rnode[3], reduction$0 = _v0_; break a; } } @@ -11763,7 +11763,7 @@ } throw caml_maybe_attach_backtrace([0, Assert_failure, _dL_], 1); } - function opaque(_vX_){return _vX_;} + function opaque(_vY_){return _vY_;} function map_reduce$0(mapper, monoid, source){ var reduction = [0, 0, source, 0, not_origin, mapper, monoid], @@ -11772,8 +11772,8 @@ (function(self){ var match = reduction[2]; if(typeof match !== "number" && 1 === match[0]){ - var _vW_ = match[4]; - match[4] = [0, opaque(self), _vW_]; + var _vX_ = match[4]; + match[4] = [0, opaque(self), _vX_]; return reduction; } throw caml_maybe_attach_backtrace([0, Assert_failure, _dN_], 1); @@ -11782,10 +11782,10 @@ var match = reduction[2]; if(typeof match !== "number" && 1 === match[0]){ var - _vQ_ = match[4], - _vR_ = opaque(self), - _vS_ = function(_vV_, _vU_){return _vV_ !== _vU_ ? 1 : 0;}; - match[4] = find_all(function(_vT_){return _vS_(_vR_, _vT_);})(_vQ_); + _vR_ = match[4], + _vS_ = opaque(self), + _vT_ = function(_vW_, _vV_){return _vW_ !== _vV_ ? 1 : 0;}; + match[4] = find_all(function(_vU_){return _vT_(_vS_, _vU_);})(_vR_); return 0; } throw caml_maybe_attach_backtrace([0, Assert_failure, _dM_], 1); @@ -11804,7 +11804,7 @@ } } function left_most(r){return aux(0, r);} - var right_most = function _vP_(_vO_){return _vP_.fun(_vO_);}; + var right_most = function _vQ_(_vP_){return _vQ_.fun(_vP_);}; function aux$0(acc, self){ var acc$0 = acc, self$0 = self; for(;;){ @@ -11858,8 +11858,8 @@ var x = b; else{ if(typeof b !== "number"){ - var _vN_ = rank(b); - return [1, (maxi(rank(a), _vN_) + 1 | 0) << 2, a, b]; + var _vO_ = rank(b); + return [1, (maxi(rank(a), _vO_) + 1 | 0) << 2, a, b]; } var x = a; } @@ -11894,9 +11894,9 @@ if(0 === t[0]){ var mark = t[1], - _vJ_ = (mark & 3) !== 3 ? 1 : 0, - _vK_ = _vJ_ ? 0 !== (mark & 3) ? 1 : 0 : _vJ_; - if(_vK_){ + _vK_ = (mark & 3) !== 3 ? 1 : 0, + _vL_ = _vK_ ? 0 !== (mark & 3) ? 1 : 0 : _vK_; + if(_vL_){ if(0 !== (mark & mask)) throw caml_maybe_attach_backtrace([0, Assert_failure, _dW_], 1); new_marked(stats); @@ -11907,9 +11907,9 @@ } var mark$0 = t[1], - _vL_ = (mark$0 & 3) !== 3 ? 1 : 0, - _vM_ = _vL_ ? 0 !== (mark$0 & 3) ? 1 : 0 : _vL_; - if(! _vM_) return _vM_; + _vM_ = (mark$0 & 3) !== 3 ? 1 : 0, + _vN_ = _vM_ ? 0 !== (mark$0 & 3) ? 1 : 0 : _vM_; + if(! _vN_) return _vN_; if(0 !== (mark$0 & mask)) throw caml_maybe_attach_backtrace([0, Assert_failure, _dX_], 1); new_marked(stats); @@ -11930,9 +11930,9 @@ else{t[1] = -1; new_blocked(stats); new_shared(stats);} } var - _vF_ = -1 !== mark ? 1 : 0, - _vG_ = _vF_ ? (mark & 3) === 3 ? 1 : 0 : _vF_; - return _vG_ ? (t[1] = -1, new_shared(stats)) : _vG_; + _vG_ = -1 !== mark ? 1 : 0, + _vH_ = _vG_ ? (mark & 3) === 3 ? 1 : 0 : _vG_; + return _vH_ ? (t[1] = -1, new_shared(stats)) : _vH_; } var mark$0 = t[1]; if(0 === (mark$0 & mask)){ @@ -11950,17 +11950,17 @@ } } var - _vH_ = -1 !== mark$0 ? 1 : 0, - _vI_ = _vH_ ? (mark$0 & 3) === 3 ? 1 : 0 : _vH_; - return _vI_ ? (t[1] = -1, new_shared(stats)) : _vI_; + _vI_ = -1 !== mark$0 ? 1 : 0, + _vJ_ = _vI_ ? (mark$0 & 3) === 3 ? 1 : 0 : _vI_; + return _vJ_ ? (t[1] = -1, new_shared(stats)) : _vJ_; } function dequeue(stats, q, mask){ var t = take(q); if(typeof t !== "number" && 1 === t[0]){ - var _vE_ = (t[1] & 3) === mask ? 1 : 0; - return _vE_ + var _vF_ = (t[1] & 3) === mask ? 1 : 0; + return _vF_ ? (enqueue(stats, q, mask, t[2]), enqueue(stats, q, mask, t[3])) - : _vE_; + : _vF_; } throw caml_maybe_attach_backtrace([0, Assert_failure, _dY_], 1); } @@ -11991,8 +11991,8 @@ function restore(param){ if(typeof param === "number") return; if(0 === param[0]){param[1] = 0; return;} - var _vD_ = rank(param[3]); - param[1] = (maxi(rank(param[2]), _vD_) + 1 | 0) << 2; + var _vE_ = rank(param[3]); + param[1] = (maxi(rank(param[2]), _vE_) + 1 | 0) << 2; return; } function next_shared_index(st){ @@ -12009,9 +12009,9 @@ if(typeof t !== "number" && 0 === t[0]){ var mark = t[1], - _vz_ = is_not_shared(mark), - _vA_ = _vz_ ? is_both(mark) : _vz_; - if(_vA_) t[1] = unmark(mark); + _vA_ = is_not_shared(mark), + _vB_ = _vA_ ? is_both(mark) : _vA_; + if(_vB_) t[1] = unmark(mark); return; } throw caml_maybe_attach_backtrace([0, Assert_failure, _dZ_], 1); @@ -12022,9 +12022,9 @@ r = param$0[4], l = param$0[3], mark$0 = t$0[1], - _vB_ = is_not_shared(mark$0), - _vC_ = _vB_ ? is_both(mark$0) : _vB_; - if(! _vC_) return _vC_; + _vC_ = is_not_shared(mark$0), + _vD_ = _vC_ ? is_both(mark$0) : _vC_; + if(! _vD_) return _vD_; t$0[1] = unmark(mark$0); unblock(l); param$0 = r; @@ -12052,14 +12052,14 @@ if(is_new(mark)){ var index$0 = get_index(mark), - _vv_ = [0, t$0, caml_check_bound(st[5], index$0)[1 + index$0]]; - caml_check_bound(st[5], index$0)[1 + index$0] = _vv_; + _vw_ = [0, t$0, caml_check_bound(st[5], index$0)[1 + index$0]]; + caml_check_bound(st[5], index$0)[1 + index$0] = _vw_; return; } - var _vw_ = is_both(mark); - if(_vw_) + var _vx_ = is_both(mark); + if(_vx_) throw caml_maybe_attach_backtrace([0, Assert_failure, _d3_], 1); - return _vw_; + return _vx_; } var dropped_leaf = st[2]; if(-1 < dropped_leaf){ @@ -12088,14 +12088,14 @@ if(is_new(mark$0)){ var index$2 = mark$0 >>> 2 | 0, - _vx_ = [0, t$0, caml_check_bound(st[5], index$2)[1 + index$2]]; - caml_check_bound(st[5], index$2)[1 + index$2] = _vx_; + _vy_ = [0, t$0, caml_check_bound(st[5], index$2)[1 + index$2]]; + caml_check_bound(st[5], index$2)[1 + index$2] = _vy_; return; } - var _vy_ = is_both(mark$0); - if(_vy_) + var _vz_ = is_both(mark$0); + if(_vz_) throw caml_maybe_attach_backtrace([0, Assert_failure, _d6_], 1); - return _vy_; + return _vz_; } if(-1 < st[3]){ var dropped_join = st[3] - 1 | 0; @@ -12113,9 +12113,9 @@ } } function prepare_shared(st){ - var _vs_ = st[6] - 1 | 0, _vr_ = 0; - if(_vs_ >= 0){ - var i = _vr_; + var _vt_ = st[6] - 1 | 0, _vs_ = 0; + if(_vt_ >= 0){ + var i = _vs_; for(;;){ var match = caml_check_bound(st[4], i)[1 + i]; if(typeof match !== "number") @@ -12126,10 +12126,10 @@ var xs = caml_check_bound(st[5], i)[1 + i]; if(! xs) throw caml_maybe_attach_backtrace([0, Assert_failure, _d7_], 1); - if(xs[2]){var _vt_ = rev(xs); caml_check_bound(st[5], i)[1 + i] = _vt_;} - var _vu_ = i + 1 | 0; - if(_vs_ === i) break; - i = _vu_; + if(xs[2]){var _vu_ = rev(xs); caml_check_bound(st[5], i)[1 + i] = _vu_;} + var _vv_ = i + 1 | 0; + if(_vt_ === i) break; + i = _vv_; } } return; @@ -12187,36 +12187,36 @@ traversal = unsafe_traverse(empty, tnew), sold = old_stats(traversal), snew = new_stats(traversal), - _ve_ = blocked(snew), - _vf_ = blocked(sold) + _ve_ | 0, - nb_dropped = marked(sold) - _vf_ | 0, - _vg_ = shared(snew), - nb_shared = shared(sold) + _vg_ | 0, - _vh_ = 0, - _vi_ = caml_make_vect(nb_shared, 0), + _vf_ = blocked(snew), + _vg_ = blocked(sold) + _vf_ | 0, + nb_dropped = marked(sold) - _vg_ | 0, + _vh_ = shared(snew), + nb_shared = shared(sold) + _vh_ | 0, + _vi_ = 0, _vj_ = caml_make_vect(nb_shared, 0), + _vk_ = caml_make_vect(nb_shared, 0), nb_dropped$0 = get_dropped ? nb_dropped : -1, - _vk_ = get_dropped ? 0 : -1, - _vl_ = get_dropped ? caml_make_vect(nb_dropped, 0) : [0], - st = [0, _vl_, _vk_, nb_dropped$0, _vj_, _vi_, _vh_]; + _vl_ = get_dropped ? 0 : -1, + _vm_ = get_dropped ? caml_make_vect(nb_dropped, 0) : [0], + st = [0, _vm_, _vl_, nb_dropped$0, _vk_, _vj_, _vi_]; unmark_old(st, xold); if(st[2] !== st[3]) throw caml_maybe_attach_backtrace([0, Assert_failure, _d9_], 1); prepare_shared(st); - var result = unmark_new(st, tnew), _vm_ = st[6] - 1 | 0; - if(_vm_ >= 0){ - var i$0 = _vm_; + var result = unmark_new(st, tnew), _vn_ = st[6] - 1 | 0; + if(_vn_ >= 0){ + var i$0 = _vn_; for(;;){ restore(caml_check_bound(st[4], i$0)[1 + i$0]); - var _vq_ = i$0 - 1 | 0; + var _vr_ = i$0 - 1 | 0; if(0 === i$0) break; - i$0 = _vq_; + i$0 = _vr_; } } if(! get_dropped) return [0, no_dropped, result]; - var xleaf = [0, 0], xjoin = [0, 0], _vo_ = st[6] - 1 | 0, _vn_ = 0; - if(_vo_ >= 0){ - var i = _vn_; + var xleaf = [0, 0], xjoin = [0, 0], _vp_ = st[6] - 1 | 0, _vo_ = 0; + if(_vp_ >= 0){ + var i = _vo_; for(;;){ iter (function(param){ @@ -12236,9 +12236,9 @@ return 0; }, caml_check_bound(st[5], i)[1 + i]); - var _vp_ = i + 1 | 0; - if(_vo_ === i) break; - i = _vp_; + var _vq_ = i + 1 | 0; + if(_vp_ === i) break; + i = _vq_; } } return [0, [0, st[2], st[1], xleaf[1], xjoin[1]], result]; @@ -12253,16 +12253,16 @@ if(0 === param[0]){ var t = param[1]; if(typeof t !== "number" && 0 === t[0]){ - var _vc_ = param[2]; - if(_vc_){var b = _vc_[1]; break b;} + var _vd_ = param[2]; + if(_vd_){var b = _vd_[1]; break b;} var result = caml_call1(map_reduce[1], t[2]); param[2] = [0, result]; return result; } break a; } - var _vd_ = param[2]; - if(! _vd_){ + var _ve_ = param[2]; + if(! _ve_){ var l = aux(param[3]), r = aux(param[4]), @@ -12270,7 +12270,7 @@ param[2] = [0, result$0]; return result$0; } - var b = _vd_[1]; + var b = _ve_[1]; } return b; } @@ -12307,15 +12307,15 @@ var bound$0 = dropped[2].length - 1, start = dropped[1]; else var bound$0 = dropped[2].length - 1, start = 0; - var _va_ = bound$0 - 1 | 0; - if(_va_ >= start){ + var _vb_ = bound$0 - 1 | 0; + if(_vb_ >= 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 _vb_ = i + 1 | 0; - if(_va_ === i) break; - i = _vb_; + var _vc_ = i + 1 | 0; + if(_vb_ === i) break; + i = _vc_; } } if(858694086 > kind) @@ -12332,8 +12332,8 @@ if(typeof param === "number") throw caml_maybe_attach_backtrace([0, Assert_failure, _d$_], 1); if(0 === param[0]) return caml_call1(map, param[2]); - var _u$_ = pure_map_reduce(map, reduce, param[3]); - return caml_call2(reduce, pure_map_reduce(map, reduce, param[2]), _u$_); + var _va_ = pure_map_reduce(map, reduce, param[3]); + return caml_call2(reduce, pure_map_reduce(map, reduce, param[2]), _va_); } function fold_monoid(map, param, seq){ var reduce$0 = param[2], zero = param[1], match = is_pure(seq); @@ -12389,7 +12389,7 @@ } function bind$0(seq, f){return join(fold_monoid(f, lwd_monoid, seq));} function lift(seq){ - return bind$0(seq, function(_u__){return func(_u__, element);}); + return bind$0(seq, function(_u$_){return func(_u$_, element);}); } var jv_global = globalThis; function length$1(s){return s[cst_length];} @@ -12414,14 +12414,14 @@ function cuts(sep, s){return caml_list_of_js_array(s.split(sep));} function is_empty$0(s){return 0 === length$1(s) ? 1 : 0;} function starts_with(prefix, s){return s.startsWith(prefix) | 0;} - function equal(_u9_, _u8_){return caml_equal(_u9_, _u8_);} + function equal(_u__, _u9_){return caml_equal(_u__, _u9_);} 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 _u7_ = is_null(v); - return _u7_ ? _u7_ : is_undefined(v); + var _u8_ = is_null(v); + return _u8_ ? _u8_ : is_undefined(v); } function is_some$0(v){return 1 - is_none(v);} function to_option(conv, v){ @@ -12455,7 +12455,7 @@ var f = param[1]; return set$0(o, p, f); } - function to_string$1(_u6_){return caml_string_of_jsstring(_u6_);} + function to_string$1(_u7_){return caml_string_of_jsstring(_u7_);} function create$3(n){return new global["Array"](n);} function length$2(a){return a[cst_length];} function to_list$1(conv, v){ @@ -12508,8 +12508,8 @@ function call(o, m, args){ return caml_js_meth_call(o, to_string$1(m), args); } - function value$0(_u5_){return caml_string_of_jsstring(_u5_);} - function _ea_(_u4_){return caml_jsstring_of_string(_u4_);} + function value$0(_u6_){return caml_string_of_jsstring(_u6_);} + function _ea_(_u5_){return caml_jsstring_of_string(_u5_);} function fut(p){return {fut: p};} function promise$0(f){return f[cst_fut];} function create$5(param){ @@ -12541,10 +12541,10 @@ return fut(then(p, ok$0, error$0)); } function of_promise$0(ok, v){ - return of_promise(ok, function(_u3_){return _u3_;}, v); + return of_promise(ok, function(_u4_){return _u4_;}, v); } function let$0(f, fn){ - return function(_u2_){return bind$2(f, _u2_);} + return function(_u3_){return bind$2(f, _u3_);} (function(e){ if(0 !== e[0]) return return$1(e); var v = e[1]; @@ -12552,7 +12552,7 @@ }); } function let$1(f, fn){ - return map$4(function(_u1_){return map$0(fn, _u1_);}, f); + return map$4(function(_u2_){return map$0(fn, _u2_);}, f); } global["Event"]; function target(e){return e[cst_target];} @@ -12615,8 +12615,8 @@ var p = path(u), p$0 = starts_with(prefix, p) ? slice(_ed_, 0, p) : p, - _u0_ = [0, map$1(decode_seg, cuts(prefix, p$0))]; - return _u0_; + _u1_ = [0, map$1(decode_seg, cuts(prefix, p$0))]; + return _u1_; } catch(exn$0){ var exn = caml_wrap_exception(exn$0); @@ -12630,8 +12630,8 @@ try{ var u$0 = new url(u), path = concat$1(0, map$1(encode_seg, segs)); u$0[cst_pathname] = path; - var _uZ_ = [0, u$0]; - return _uZ_; + var _u0_ = [0, u$0]; + return _u0_; } catch(exn$0){ var exn = caml_wrap_exception(exn$0); @@ -12654,7 +12654,7 @@ function if$0(b, at){return b ? at : void$0;} function true$1(n){return [0, n, empty$1];} function int$2(n, i){return [0, n, jstr_of_int(0, i)];} - function to_pair(_uY_){return _uY_;} + function to_pair(_uZ_){return _uZ_;} var checked = cst_checked, class$0 = "class", @@ -12708,12 +12708,12 @@ else{e.setAttribute(a, v); param$0 = at;} } } - function v$2(opt, _uW_, name, cs){ + function v$2(opt, _uX_, name, cs){ if(opt) var sth = opt[1], d = sth; else var d = global_document; - if(_uW_) var sth$0 = _uW_[1], at = sth$0; else var at = 0; + if(_uX_) var sth$0 = _uX_[1], at = sth$0; else var at = 0; var e = d.createElement(name); set_atts(e, 0, at); - iter(function(_uX_){return _ef_(e, _uX_);}, cs); + iter(function(_uY_){return _ef_(e, _uY_);}, cs); return e; } function txt(opt, s){ @@ -12732,9 +12732,9 @@ } function jv_to_float(f){return is_undefined(f) ? 0. : f;} function float$0(n){ - return [0, n, jv_to_float, function(_uV_){return _uV_;}]; + return [0, n, jv_to_float, function(_uW_){return _uW_;}]; } - function prop(p, e){var _uU_ = e[p[1]]; return caml_call1(p[2], _uU_);} + function prop(p, e){var _uV_ = e[p[1]]; return caml_call1(p[2], _uV_);} function set_class(c, b, e){ return b ? (e[cst_classList].add(c), 0) : (e[cst_classList].remove(c), 0); } @@ -12763,10 +12763,10 @@ select = "select", span = "span"; function cons$0(name, d, at, cs){return v$2(d, at, name, cs);} - function audio$0(_uR_, _uS_, _uT_){return cons$0(audio, _uR_, _uS_, _uT_);} - function div$0(_uO_, _uP_, _uQ_){return cons$0(div, _uO_, _uP_, _uQ_);} - function h1$0(_uL_, _uM_, _uN_){return cons$0(h1, _uL_, _uM_, _uN_);} - function span$0(_uI_, _uJ_, _uK_){return cons$0(span, _uI_, _uJ_, _uK_);} + function audio$0(_uS_, _uT_, _uU_){return cons$0(audio, _uS_, _uT_, _uU_);} + function div$0(_uP_, _uQ_, _uR_){return cons$0(div, _uP_, _uQ_, _uR_);} + function h1$0(_uM_, _uN_, _uO_){return cons$0(h1, _uM_, _uN_, _uO_);} + function span$0(_uJ_, _uK_, _uL_){return cons$0(span, _uJ_, _uK_, _uL_);} function root(d){return d[cst_documentElement];} function body(d){ var b = d[cst_body]; @@ -12777,7 +12777,7 @@ "Document body is null. Try to defer your script execution."); } function active_el(d){ - return to_option(function(_uH_){return _uH_;}, d["activeElement"]); + return to_option(function(_uI_){return _uI_;}, d["activeElement"]); } function call$0(c, meth, args){caml_js_meth_call(c, meth, args); return 0;} var _eh_ = global[cst_console]; @@ -12817,9 +12817,9 @@ } global["ClipboardItem"]; global["FormData"]; - function of_jstr(_uG_){return _uG_;} + function of_jstr(_uH_){return _uH_;} function text(r){ - return of_promise$0(function(_uF_){return _uF_;}, r.text()); + return of_promise$0(function(_uG_){return _uG_;}, r.text()); } var headers = global["Headers"]; function of_assoc(init, l){ @@ -12830,7 +12830,7 @@ hs.append(k, v); return 0; } - iter(function(_uE_){return add(hs, _uE_);}, l); + iter(function(_uF_){return add(hs, _uF_);}, l); return hs; } function init$1 @@ -12848,10 +12848,10 @@ signal, param){ var o = {}; - o[cst_body] = of_option(undefined$0, function(_uD_){return _uD_;}, body); + o[cst_body] = of_option(undefined$0, function(_uE_){return _uE_;}, body); set_if_some$1(o, _en_, cache); set_if_some$1(o, _eo_, credentials); - set_if_some(o, _ep_, map(function(_uC_){return _uC_;}, headers)); + set_if_some(o, _ep_, map(function(_uD_){return _uD_;}, headers)); set_if_some$1(o, _eq_, integrity); set_if_some$0(o, _er_, keepalive); set_if_some$1(o, _es_, method); @@ -12859,7 +12859,7 @@ set_if_some$1(o, _eu_, redirect); set_if_some$1(o, _ev_, referrer); set_if_some$1(o, _ew_, referrer_policy); - o["signal"] = of_option(undefined$0, function(_uB_){return _uB_;}, signal); + o["signal"] = of_option(undefined$0, function(_uC_){return _uC_;}, signal); return o; } var request = global["Request"]; @@ -12870,8 +12870,8 @@ global["Response"]; var fetch = global["fetch"]; function request$0(r){ - function _uy_(_uA_){return _uA_;} - return function(_uz_){return of_promise$0(_uy_, _uz_);}(fetch(r)); + function _uz_(_uB_){return _uB_;} + return function(_uA_){return of_promise$0(_uz_, _uA_);}(fetch(r)); } global["MediaStream"]; global["MediaRecorder"]; @@ -12882,8 +12882,8 @@ global["Notification"]; function local(w){return w["localStorage"];} function get_item(s, k){ - function _uv_(_ux_){return _ux_;} - return function(_uw_){return to_option(_uv_, _uw_);}(s.getItem(k)); + function _uw_(_uy_){return _uy_;} + return function(_ux_){return to_option(_uw_, _ux_);}(s.getItem(k)); } function set_item(s, k, v){ try{s.setItem(k, v); return;} @@ -12915,9 +12915,9 @@ global["serviceWorker"]; function handler(opts, type, func){return [0, opts, type, func];} function is_pure_element(param){ - var _uu_ = param[1]; - if(82 === _uu_){var x = param[2]; return is_some(is_pure(x));} - if(83 > _uu_) return 1; + var _uv_ = param[1]; + if(82 === _uv_){var x = param[2]; return is_some(is_pure(x));} + if(83 > _uv_) return 1; var x$0 = param[2]; return is_some(is_pure(x$0)); } @@ -12926,12 +12926,12 @@ return flatten (map$1 (function(param){ - var _ut_ = param[1]; - if(82 === _ut_){ + var _uu_ = param[1]; + if(82 === _uu_){ var x = param[2]; return [0, extract_pure_element(x), 0]; } - if(83 <= _ut_){ + if(83 <= _uu_){ var x$0 = param[2]; return to_list$0(extract_pure_element(x$0)); } @@ -12950,26 +12950,26 @@ } function consume_children(col){ if(! col) return _ey_; - var _up_ = col[1], _uq_ = _up_[1]; - if(82 === _uq_){ - if(! col[2]){var x = _up_[2]; return [0, 0, [0, func(x, element)]];} + var _uq_ = col[1], _ur_ = _uq_[1]; + if(82 === _ur_){ + if(! col[2]){var x = _uq_[2]; return [0, 0, [0, func(x, element)]];} } else - if(83 <= _uq_){ - if(! col[2]){var x$0 = _up_[2]; return [0, 0, [0, x$0]];} + if(83 <= _ur_){ + if(! col[2]){var x$0 = _uq_[2]; return [0, 0, [0, x$0]];} } - else if(! col[2]){var x$1 = _up_[2]; return [0, [0, x$1, 0], 0];} + else if(! col[2]){var x$1 = _uq_[2]; return [0, [0, x$1, 0], 0];} return for_all(is_pure_element, col) ? [0, flatten (map$1 (function(param){ - var _ur_ = param[1]; - if(82 === _ur_){ + var _us_ = param[1]; + if(82 === _us_){ var x = param[2]; return [0, extract_pure_element(x), 0]; } - if(83 <= _ur_){ + if(83 <= _us_){ var x$0 = param[2]; return to_list$0(extract_pure_element(x$0)); } @@ -12983,9 +12983,9 @@ [0, map_reduce (function(param){ - var _us_ = param[1]; - if(82 === _us_){var x = param[2]; return func(x, element);} - if(83 <= _us_){var x$0 = param[2]; return x$0;} + var _ut_ = param[1]; + if(82 === _ut_){var x = param[2]; return func(x, element);} + if(83 <= _ut_){var x$0 = param[2]; return x$0;} var x$1 = param[2]; return pure(element(x$1)); }, @@ -13043,11 +13043,11 @@ else call(acc, jv_before, [0, node]); else{ - var _ul_ = node.nextSibling !== acc ? 1 : 0; - if(_ul_){ + var _um_ = node.nextSibling !== acc ? 1 : 0; + if(_um_){ if(preserve_focus){ - var _um_ = contains_focus(node); - if(_um_) + var _un_ = contains_focus(node); + if(_un_) var shift_siblings = function(param){ @@ -13058,17 +13058,17 @@ call(node, jv_before, [0, sibling]); } }, - _un_ = shift_siblings(0); + _uo_ = shift_siblings(0); else - var _un_ = _um_; + var _uo_ = _un_; } else - var _un_ = preserve_focus; - var _uo_ = 1 - _un_; + var _uo_ = preserve_focus; + var _up_ = 1 - _uo_; } else - var _uo_ = _ul_; - if(_uo_) + var _up_ = _um_; + if(_up_) if(is_null(acc)) call(self, jv_append, [0, node]); else @@ -13082,15 +13082,15 @@ if(0 !== child[0]) return 0; var node = child[1], - _uj_ = is_some$0(node[cst_lwd_to_remove]), - _uk_ = - _uj_ + _uk_ = is_some$0(node[cst_lwd_to_remove]), + _ul_ = + _uk_ ? (delete node[cst_lwd_to_remove], call(node, jv_remove, [0]), 0) - : _uj_; - return _uk_; + : _uk_; + return _ul_; } fold_dropped(3850876, remove_child, dropped, 0); return self; @@ -13117,12 +13117,12 @@ } return map_reduce (function(param){ - var _uh_ = param[1]; - if(82 === _uh_){ + var _ui_ = param[1]; + if(82 === _ui_){ var at = param[2]; return func(at, set_lwd_at(0)); } - if(83 > _uh_) + if(83 > _ui_) throw caml_maybe_attach_backtrace([0, Assert_failure, _ez_], 1); var ats = param[2]; function set_at(at){ @@ -13133,7 +13133,7 @@ var reducer = [0, - make$4(set_at, function(param, _ui_){return dummy_kv_at;})]; + make$4(set_at, function(param, _uj_){return dummy_kv_at;})]; function update(ats){ var match = update_and_get_dropped(reducer[1], ats), @@ -13150,7 +13150,7 @@ } return func(ats, update); }, - [0, pure_unit, function(param, _ug_){return pure_unit;}], + [0, pure_unit, function(param, _uh_){return pure_unit;}], attribs); } function listen$0(el, param){ @@ -13160,8 +13160,8 @@ function attach_events(el, events){ return map_reduce (function(param){ - var _ue_ = param[1]; - if(82 === _ue_){ + var _uf_ = param[1]; + if(82 === _uf_){ var at = param[2], cached = [0, 0]; return func (at, @@ -13172,14 +13172,14 @@ return 0; }); } - if(83 > _ue_) + if(83 > _uf_) throw caml_maybe_attach_backtrace([0, Assert_failure, _eA_], 1); var ats = param[2], reducer = [0, make$4 - (function(_uf_){return listen$0(el, _uf_);}, + (function(_ug_){return listen$0(el, _ug_);}, function(x, y){return x;})]; function update(ats){ var @@ -13194,14 +13194,14 @@ } return func(ats, update); }, - [0, pure_unit, function(param, _ud_){return pure_unit;}], + [0, pure_unit, function(param, _ue_){return pure_unit;}], events); } - function v$4(d, opt, _ub_, _ua_, tag, children){ + function v$4(d, opt, _uc_, _ub_, tag, children){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_ub_) var sth$0 = _ub_[1], ev = sth$0; else var ev = 0; - if(_ua_) - var sth$1 = _ua_[1], on_create = sth$1; + if(_uc_) var sth$0 = _uc_[1], ev = sth$0; else var ev = 0; + if(_ub_) + var sth$1 = _ub_[1], on_create = sth$1; else var on_create = function(param){return;}; var @@ -13220,11 +13220,11 @@ if(impure_children) var children$1 = impure_children[1], - _uc_ = update_children(el, children$1), + _ud_ = update_children(el, children$1), result = map2 (attach_attribs(el, impure_at), - _uc_, + _ud_, function(param, el){return el;}); else var @@ -13251,52 +13251,52 @@ } function void_cons(name, d, at, ev, on_create, param){return v$4(d, at, ev, on_create, name, 0); } - function button$0(_t7_, _t8_, _t9_, _t__, _t$_){ - return cons$1(button, _t7_, _t8_, _t9_, _t__, _t$_); + function button$0(_t8_, _t9_, _t__, _t$_, _ua_){ + return cons$1(button, _t8_, _t9_, _t__, _t$_, _ua_); } - function div$1(_t2_, _t3_, _t4_, _t5_, _t6_){ - return cons$1(div, _t2_, _t3_, _t4_, _t5_, _t6_); + function div$1(_t3_, _t4_, _t5_, _t6_, _t7_){ + return cons$1(div, _t3_, _t4_, _t5_, _t6_, _t7_); } - function form$0(_tX_, _tY_, _tZ_, _t0_, _t1_){ - return cons$1(form, _tX_, _tY_, _tZ_, _t0_, _t1_); + function form$0(_tY_, _tZ_, _t0_, _t1_, _t2_){ + return cons$1(form, _tY_, _tZ_, _t0_, _t1_, _t2_); } - function img$0(_tS_, _tT_, _tU_, _tV_, _tW_){ - return void_cons(img, _tS_, _tT_, _tU_, _tV_, _tW_); + function img$0(_tT_, _tU_, _tV_, _tW_, _tX_){ + return void_cons(img, _tT_, _tU_, _tV_, _tW_, _tX_); } - function input$1(_tN_, _tO_, _tP_, _tQ_, _tR_){ - return void_cons(input$0, _tN_, _tO_, _tP_, _tQ_, _tR_); + function input$1(_tO_, _tP_, _tQ_, _tR_, _tS_){ + return void_cons(input$0, _tO_, _tP_, _tQ_, _tR_, _tS_); } - function label$0(_tI_, _tJ_, _tK_, _tL_, _tM_){ - return cons$1(label, _tI_, _tJ_, _tK_, _tL_, _tM_); + function label$0(_tJ_, _tK_, _tL_, _tM_, _tN_){ + return cons$1(label, _tJ_, _tK_, _tL_, _tM_, _tN_); } - function option$0(_tD_, _tE_, _tF_, _tG_, _tH_){ - return cons$1(option, _tD_, _tE_, _tF_, _tG_, _tH_); + function option$0(_tE_, _tF_, _tG_, _tH_, _tI_){ + return cons$1(option, _tE_, _tF_, _tG_, _tH_, _tI_); } - function select$0(_ty_, _tz_, _tA_, _tB_, _tC_){ - return cons$1(select, _ty_, _tz_, _tA_, _tB_, _tC_); + function select$0(_tz_, _tA_, _tB_, _tC_, _tD_){ + return cons$1(select, _tz_, _tA_, _tB_, _tC_, _tD_); } - function span$1(_tt_, _tu_, _tv_, _tw_, _tx_){ - return cons$1(span, _tt_, _tu_, _tv_, _tw_, _tx_); + function span$1(_tu_, _tv_, _tw_, _tx_, _ty_){ + return cons$1(span, _tu_, _tv_, _tw_, _tx_, _ty_); } - function symbol$3(_ts_, _tr_){return _ts_ === _tr_ ? 1 : 0;} - function symbol$4(_tq_, _tp_){return _tq_ !== _tp_ ? 1 : 0;} - function symbol$5(_to_, _tn_){return _tn_ < _to_ ? 1 : 0;} - function symbol$6(_tm_, _tl_){return _tm_ <= _tl_ ? 1 : 0;} - function symbol$7(_tk_, _tj_){return _tj_ <= _tk_ ? 1 : 0;} - function symbol$8(_ti_, _th_){return _th_ < _ti_ ? 1 : 0;} + function symbol$3(_tt_, _ts_){return _tt_ === _ts_ ? 1 : 0;} + function symbol$4(_tr_, _tq_){return _tr_ !== _tq_ ? 1 : 0;} + function symbol$5(_tp_, _to_){return _to_ < _tp_ ? 1 : 0;} + function symbol$6(_tn_, _tm_){return _tn_ <= _tm_ ? 1 : 0;} + function symbol$7(_tl_, _tk_){return _tk_ <= _tl_ ? 1 : 0;} + function symbol$8(_tj_, _ti_){return _ti_ < _tj_ ? 1 : 0;} function shuffle(rand_int, a, i, j){ - var _te_ = j - 1 | 0, _tf_ = i + 1 | 0; - if(_te_ >= _tf_){ - var k = _te_; + var _tf_ = j - 1 | 0, _tg_ = i + 1 | 0; + if(_tf_ >= _tg_){ + var k = _tf_; 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 _tg_ = k - 1 | 0; - if(_tf_ === k) break; - k = _tg_; + var _th_ = k - 1 | 0; + if(_tg_ === k) break; + k = _th_; } } return; @@ -13304,17 +13304,17 @@ 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 = _eB_; - return function(_tc_){return concat(sep, _tc_);} - (function(_td_){return map$1(item_to_string, _td_);}(to_list(a))); + return function(_td_){return concat(sep, _td_);} + (function(_te_){return map$1(item_to_string, _te_);}(to_list(a))); } - function poly(_tb_, _ta_){return caml_equal(_tb_, _ta_);} + function poly(_tc_, _tb_){return caml_equal(_tc_, _tb_);} function is_nan(x){return 4 === caml_classify_float(x) ? 1 : 0;} function of_string_opt(a){ - try{var _s__ = [0, caml_float_of_string(a)]; return _s__;} - catch(_s$_){ - var _s9_ = caml_wrap_exception(_s$_); - if(_s9_[1] === Failure) return 0; - throw caml_maybe_attach_backtrace(_s9_, 0); + try{var _s$_ = [0, caml_float_of_string(a)]; return _s$_;} + catch(_ta_){ + var _s__ = caml_wrap_exception(_ta_); + if(_s__[1] === Failure) return 0; + throw caml_maybe_attach_backtrace(_s__, 0); } } function int_of_color(param){ @@ -13335,8 +13335,8 @@ return 40 + int_of_color(c$0) | 0; } function string_of_style(a){ - var _s8_ = code_of_style(a); - return caml_call1(sprintf(_eC_), _s8_); + var _s9_ = code_of_style(a); + return caml_call1(sprintf(_eC_), _s9_); } string_of_style(-101336657); var No_such_style = [248, _eD_, caml_fresh_oo_id(0)]; @@ -13369,9 +13369,9 @@ function mark_open_style(st, style){push(style, st); return _eX_;} function mark_close_style(st){ try{pop(st); top(st);} - catch(_s7_){ - var _s6_ = caml_wrap_exception(_s7_); - if(_s6_ !== Empty) throw caml_maybe_attach_backtrace(_s6_, 0); + catch(_s8_){ + var _s7_ = caml_wrap_exception(_s8_); + if(_s7_ !== Empty) throw caml_maybe_attach_backtrace(_s7_, 0); } return _eY_; } @@ -13384,13 +13384,13 @@ if(tag[1] !== String_tag) return caml_call1(or_else, tag); var s = tag[2]; try{ - var style$0 = style_of_tag(s), _s4_ = mark_open_style(st, style$0); - return _s4_; + var style$0 = style_of_tag(s), _s5_ = mark_open_style(st, style$0); + return _s5_; } - catch(_s5_){ - var _s3_ = caml_wrap_exception(_s5_); - if(_s3_ === No_such_style) return caml_call1(or_else, tag); - throw caml_maybe_attach_backtrace(_s3_, 0); + catch(_s6_){ + var _s4_ = caml_wrap_exception(_s6_); + if(_s4_ === No_such_style) return caml_call1(or_else, tag); + throw caml_maybe_attach_backtrace(_s4_, 0); } } function mark_close_stag(st, or_else, tag){ @@ -13398,10 +13398,10 @@ if(tag[1] !== String_tag) return caml_call1(or_else, tag); var s = tag[2]; try{style_of_tag(s);} - catch(_s2_){ - var _s1_ = caml_wrap_exception(_s2_); - if(_s1_ === No_such_style) return caml_call1(or_else, tag); - throw caml_maybe_attach_backtrace(_s1_, 0); + catch(_s3_){ + var _s2_ = caml_wrap_exception(_s3_); + if(_s2_ === No_such_style) return caml_call1(or_else, tag); + throw caml_maybe_attach_backtrace(_s2_, 0); } return mark_close_style(st); } @@ -13410,12 +13410,12 @@ pp_set_mark_tags(ppf, 1); var funs = pp_get_formatter_stag_function(ppf, 0), - _sX_ = funs[2], - _sY_ = funs[1], + _sY_ = funs[2], + _sZ_ = funs[1], funs$0 = [0, - function(_s0_){return mark_open_stag(st, _sY_, _s0_);}, - function(_sZ_){return mark_close_stag(st, _sX_, _sZ_);}, + function(_s1_){return mark_open_stag(st, _sZ_, _s1_);}, + function(_s0_){return mark_close_stag(st, _sY_, _s0_);}, funs[3], funs[4]]; return pp_set_formatter_stag_function(ppf, funs$0); @@ -13424,8 +13424,8 @@ var buf = create$1(64), fmt = formatter_of_buffer(buf), - _sW_ = c ? _eW_ : c; - if(_sW_) set_color_tag_handling(fmt); + _sX_ = c ? _eW_ : c; + if(_sX_) set_color_tag_handling(fmt); return kfprintf$0 (function(fmt$0){pp_print_flush(fmt, 0); return contents(buf);}, fmt, @@ -13434,27 +13434,27 @@ function sprintf$1(fmt){return sprintf$0(1, fmt);} function compare$1(a, b){return compare(a, b);} function of_string$0(s){ - try{var _sU_ = [0, caml_int_of_string(s)]; return _sU_;} - catch(_sV_){ - var _sT_ = caml_wrap_exception(_sV_); - if(_sT_[1] === Failure) return 0; - throw caml_maybe_attach_backtrace(_sT_, 0); + try{var _sV_ = [0, caml_int_of_string(s)]; return _sV_;} + catch(_sW_){ + var _sU_ = caml_wrap_exception(_sW_); + if(_sU_[1] === Failure) return 0; + throw caml_maybe_attach_backtrace(_sU_, 0); } } - function of_float(_sS_){return _sS_ | 0;} + function of_float(_sT_){return _sT_ | 0;} function get$6(tbl, x){ - try{var _sQ_ = [0, find(tbl, x)]; return _sQ_;} - catch(_sR_){ - var _sP_ = caml_wrap_exception(_sR_); - if(_sP_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_sP_, 0); + try{var _sR_ = [0, find(tbl, x)]; return _sR_;} + catch(_sS_){ + var _sQ_ = caml_wrap_exception(_sS_); + if(_sQ_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_sQ_, 0); } } function get_or_add(tbl, f, k){ - try{var _sN_ = find(tbl, k); return _sN_;} - catch(_sO_){ - var _sM_ = caml_wrap_exception(_sO_); - if(_sM_ !== Not_found) throw caml_maybe_attach_backtrace(_sM_, 0); + try{var _sO_ = find(tbl, k); return _sO_;} + catch(_sP_){ + var _sN_ = caml_wrap_exception(_sP_); + if(_sN_ !== Not_found) throw caml_maybe_attach_backtrace(_sN_, 0); var v = caml_call1(f, k); add$0(tbl, k, v); return v; @@ -13616,16 +13616,16 @@ , elements]; } - function _e1_(_sK_){ - var _sL_ = Make$1(_sK_); + function _e1_(_sL_){ + var _sM_ = Make$1(_sL_); return [0, - _sL_[4], + _sM_[4], , , , , , - _sL_[10], + _sM_[10], , , , @@ -13647,7 +13647,7 @@ , , , - _sL_[40], + _sM_[40], , , , @@ -13667,7 +13667,7 @@ , , , - _sL_[51]]; + _sM_[51]]; } function suffix(suf, s){ var len = caml_ml_string_length(suf); @@ -13697,7 +13697,7 @@ : 0; } function Make$2(K, V){return;} - function _e2_(_sJ_, _sI_){Make$2(_sJ_, _sI_); return;} + function _e2_(_sK_, _sJ_){Make$2(_sK_, _sJ_); return;} var Empty$1 = [248, _e3_, caml_fresh_oo_id(0)]; function single(x){return [0, [0, x]];} function deep(n, hd, middle, tl){return [1, n, hd, middle, tl];} @@ -13728,20 +13728,20 @@ return deep(n + 1 | 0, [2, x, y$3, z$2], middle$0, tl$0); default: var - _sF_ = q[3], + _sG_ = q[3], z$3 = match$0[3], z$4 = match$0[2], y$4 = match$0[1], - _sG_ = caml_obj_tag(_sF_), + _sH_ = caml_obj_tag(_sG_), q$0 = - 250 === _sG_ - ? _sF_[1] - : 246 === _sG_ ? force_lazy_block(_sF_) : _sF_, + 250 === _sH_ + ? _sG_[1] + : 246 === _sH_ ? force_lazy_block(_sG_) : _sG_, tail = q[4]; return deep (n + 1 | 0, [1, x, y$4], - [246, function(_sH_){return cons$2([0, z$4, z$3], q$0);}], + [246, function(_sI_){return cons$2([0, z$4, z$3], q$0);}], tail); } var tl = q[4], middle = q[3], y$2 = match$0[1]; @@ -13766,11 +13766,11 @@ middle = q[3], hd = q[2], n = q[1], - _sD_ = caml_obj_tag(middle), + _sE_ = caml_obj_tag(middle), q$0 = - 250 === _sD_ + 250 === _sE_ ? middle[1] - : 246 === _sD_ ? force_lazy_block(middle) : middle, + : 246 === _sE_ ? force_lazy_block(middle) : middle, match$0 = q[4]; if(typeof match$0 !== "number" && 0 !== match$0[0]){ var match$2 = q[4]; @@ -13784,19 +13784,19 @@ var x$2 = match$0[1]; if(is_empty$1(q$0)) return [0, [0, hd], x$2]; var - _sE_ = take_back_exn(q$0), - match$1 = _sE_[2], + _sF_ = take_back_exn(q$0), + match$1 = _sF_[2], z$0 = match$1[2], y$1 = match$1[1], - q$1 = _sE_[1]; + q$1 = _sF_[1]; return [0, deep(n - 1 | 0, hd, from_val(q$1), [1, y$1, z$0]), x$2]; } function take_back(q){ - try{var _sB_ = [0, take_back_exn(q)]; return _sB_;} - catch(_sC_){ - var _sA_ = caml_wrap_exception(_sC_); - if(_sA_ === Empty$1) return 0; - throw caml_maybe_attach_backtrace(_sA_, 0); + try{var _sC_ = [0, take_back_exn(q)]; return _sC_;} + catch(_sD_){ + var _sB_ = caml_wrap_exception(_sD_); + if(_sB_ === Empty$1) return 0; + throw caml_maybe_attach_backtrace(_sB_, 0); } } function size_digit(param){ @@ -13810,7 +13810,7 @@ return n; } function height(t){return t["height"];} - function _e4_(_sz_){return _sz_;} + function _e4_(_sA_){return _sA_;} function content_rect(t){return _e4_(t["contentRect"]);} function target$0(t){t[cst_target]; return;} function string_of_box(param){ @@ -13835,26 +13835,26 @@ } function create$7(callback){ function callback$0(entries, observer){ - var entries$0 = to_list$1(function(_sy_){return _sy_;}, entries); + var entries$0 = to_list$1(function(_sz_){return _sz_;}, 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 _sw_ = _ea_(img[3]), _sx_ = _ea_(img[2]); - return {src: _ea_(img[1]), sizes: _sx_, type: _sw_}; + var _sx_ = _ea_(img[3]), _sy_ = _ea_(img[2]); + return {src: _ea_(img[1]), sizes: _sy_, type: _sx_}; } function to_jv(t){ var artwork = of_list$1(img_to_jv, t[4]), - _su_ = _ea_(t[3]), - _sv_ = _ea_(t[2]); - return {title: _ea_(t[1]), artist: _sv_, album: _su_, artwork: artwork}; + _sv_ = _ea_(t[3]), + _sw_ = _ea_(t[2]); + return {title: _ea_(t[1]), artist: _sw_, album: _sv_, artwork: artwork}; } function set_metadata(t, v){ log([0, _e8_, [0, to_jv(v), 0]]); - var _st_ = to_jv(v), metadata = new global["MediaMetadata"](_st_); + var _su_ = to_jv(v), metadata = new global["MediaMetadata"](_su_); t["metadata"] = metadata; return; } @@ -13873,17 +13873,17 @@ playback_rate$0 = maybe_float(_e__, playback_rate), position$0 = maybe_float(_e$_, position), state_dict = - filter_map(function(_ss_){return _ss_;}) + filter_map(function(_st_){return _st_;}) ([0, duration$0, [0, playback_rate$0, [0, position$0, 0]]]), args = state_dict ? [0, caml_js_object(of_list(state_dict))] : [0]; caml_js_meth_call(t, "setPositionState", args); return 0; } - function _fa_(_sr_, _sq_, _sp_){return;} + function _fa_(_ss_, _sr_, _sq_){return;} var submit = cst_submit, pattern = "pattern"; function persist(t){ - function _sm_(_so_){return _so_ | 0;} - return function(_sn_){return of_promise$0(_sm_, _sn_);}(t.persist()); + function _sn_(_sp_){return _sp_ | 0;} + return function(_so_){return of_promise$0(_sn_, _so_);}(t.persist()); } function manager(n){return n["storage"];} function tee(f, x){caml_call1(f, x); return x;} @@ -13893,19 +13893,19 @@ 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 _sg_ = function(i){return [0, i];}; - return function(_sl_){return symbol$10(_sg_, _sl_);}(of_string_opt(i)); + var _sh_ = function(i){return [0, i];}; + return function(_sm_){return symbol$10(_sh_, _sm_);}(of_string_opt(i)); } var match$1 = chop_suffix(_fc_, s); if(match$1){ - var f = match$1[1], _sh_ = function(f){return [1, f];}; - return function(_sk_){return symbol$10(_sh_, _sk_);}(of_string_opt(f)); + var f = match$1[1], _si_ = function(f){return [1, f];}; + return function(_sl_){return symbol$10(_si_, _sl_);}(of_string_opt(f)); } var match$2 = chop_suffix(_fd_, s); if(! match$2) return 0; var f$0 = match$2[1]; - function _si_(f){return [1, f];} - return function(_sj_){return symbol$10(_si_, _sj_);}(of_string_opt(f$0)); + function _sj_(f){return [1, f];} + return function(_sk_){return symbol$10(_sj_, _sk_);}(of_string_opt(f$0)); } function to_string$3(param){ switch(param[0]){ @@ -13947,12 +13947,12 @@ }}; } function map3(f, a, b, c){ - function _sb_(_se_, _sf_){return map2(c, _se_, _sf_);} - function _sc_(c, param){ + function _sc_(_sf_, _sg_){return map2(c, _sf_, _sg_);} + function _sd_(c, param){ var b = param[2], a = param[1]; return caml_call3(f, a, b, c); } - return function(_sd_){return _sb_(_sd_, _sc_);} + return function(_se_){return _sc_(_se_, _sd_);} (map2(a, b, function(a, b){return [0, a, b];})); } function triple(a, b, c){ @@ -13993,14 +13993,14 @@ } var local_storage = local(window); function store(key, value){ - return function(_sa_){return set_item(local_storage, key, _sa_);} + return function(_sb_){return set_item(local_storage, key, _sb_);} (to_jstr$1(value)); } function fetch$0(key){ var match = get_item(local_storage, key); - function _r__(encoded_value){return of_jstr$0(encoded_value);} - if(match) var v = match[1], _r$_ = [0, v]; else var _r$_ = _fm_; - return symbol_bind$1(_r$_, _r__); + function _r$_(encoded_value){return of_jstr$0(encoded_value);} + if(match) var v = match[1], _sa_ = [0, v]; else var _sa_ = _fm_; + return symbol_bind$1(_sa_, _r$_); } function initial_value(key, f){ var match = fetch$0(key); @@ -14038,7 +14038,7 @@ var fmt$0 = caml_call2(sprintf(_fn_), s, fmt); return caml_call1(l, [0, fmt$0, msg]); } - function arg(_r8_, _r9_){return log(debug, _r8_, _r9_);} + function arg(_r9_, _r__){return log(debug, _r9_, _r__);} return [0, , , , function(eta){return arg(0, eta);}]; } var @@ -14054,26 +14054,26 @@ var empty$5 = [0, empty$4, 0]; function to_at$0(id, t){ var - _r5_ = to_at(t[1]), - _r6_ = t[2], - at = function(_r7_){return rev_append(_r6_, _r7_);}(_r5_); + _r6_ = to_at(t[1]), + _r7_ = t[2], + at = function(_r8_){return rev_append(_r7_, _r8_);}(_r6_); 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 _r4_ = empty$5[2]; return [0, of_list$2(l), _r4_];} - function union$0(param, _r2_){ + function classes(l){var _r5_ = empty$5[2]; return [0, of_list$2(l), _r5_];} + function union$0(param, _r3_){ var - a = _r2_[2], - c = _r2_[1], + a = _r3_[2], + c = _r3_[1], attrs = param[2], classes = param[1], - _r3_ = rev_append(attrs, a); - return [0, union(classes, c), _r3_]; + _r4_ = rev_append(attrs, a); + return [0, union(classes, c), _r4_]; } function add$1(at_name, v, at){ - var _rZ_ = v[1]; - if(82 === _rZ_) + var _r0_ = v[1]; + if(82 === _r0_) var v$0 = v[2], a = @@ -14082,10 +14082,10 @@ func (v$0, function(v){ - return function(_r0_){return v$1(at_name, _r0_);} + return function(_r1_){return v$1(at_name, _r1_);} (caml_jsstring_of_string(v)); })]; - else if(83 <= _rZ_) + else if(83 <= _r0_) var a = failwith(_fp_); else var @@ -14093,7 +14093,7 @@ a = [0, 80, - function(_r1_){return v$1(at_name, _r1_);} + function(_r2_){return v$1(at_name, _r2_);} (caml_jsstring_of_string(v$2))]; return [0, a, at]; } @@ -14104,14 +14104,14 @@ return [0, [0, 80, - function(_rY_){return v$1(at_name, _rY_);} + function(_rZ_){return v$1(at_name, _rZ_);} (caml_jsstring_of_string(v$0))], at]; } function map_col(f, param){ - var _rX_ = param[1]; - if(82 === _rX_){var v = param[2]; return [0, 82, func(v, f)];} - if(83 <= _rX_){var v$0 = param[2]; return [0, 83, map$3(f, v$0)];} + var _rY_ = param[1]; + if(82 === _rY_){var v = param[2]; return [0, 82, func(v, f)];} + if(83 <= _rY_){var v$0 = param[2]; return [0, 83, map$3(f, v$0)];} var v$1 = param[2]; return [0, 80, caml_call1(f, v$1)]; } @@ -14133,7 +14133,7 @@ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = - function(_rW_){return add$1(value$1, value, _rW_);} + function(_rX_){return add$1(value$1, value, _rX_);} (add$1(type, _fq_, at)); return input$1(d, [0, at$0], ev, 0, 0); } @@ -14168,18 +14168,18 @@ map_or (base, function(at){ - return function(_rV_){return union$0(base, _rV_);} + return function(_rW_){return union$0(base, _rW_);} (apply_state(state, at)); }, at), at$1 = to_at$0(0, at$0); - function _rS_(param){ - var _rU_ = param[1]; - if(82 === _rU_){ + function _rT_(param){ + var _rV_ = param[1]; + if(82 === _rV_){ var h = param[2]; return [0, 82, func(h, with_state)]; } - if(83 <= _rU_){ + if(83 <= _rV_){ var h$0 = param[2]; return [0, 83, map$3(with_state, h$0)]; } @@ -14188,7 +14188,7 @@ } var ev$0 = - symbol$10(function(_rT_){return symbol$9(_rS_, _rT_);}, ev); + symbol$10(function(_rU_){return symbol$9(_rT_, _rU_);}, ev); return button$0(d, [0, at$1], ev$0, 0, caml_call1(content, state)); }); return [0, elt, get_state, set_state];};}; @@ -14201,9 +14201,9 @@ var el = target[1]; return scroll_into_view(0, el); } - function make$7(opt, _rP_, on_create, scroll_target, elt){ + function make$7(opt, _rQ_, on_create, scroll_target, elt){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_rP_) var sth$0 = _rP_[1], ev = sth$0; else var ev = 0; + if(_rQ_) var sth$0 = _rQ_[1], ev = sth$0; else var ev = 0; var active = var$0(1), active_class = @@ -14228,8 +14228,8 @@ (0, wheel, function(ev){ - var _rR_ = peek(active); - return _rR_ ? symbol$1(active, 0) : _rR_; + var _rS_ = peek(active); + return _rS_ ? symbol$1(active, 0) : _rS_; }), state = triple(elt, get$1(active), scroll_target), elt$0 = @@ -14238,7 +14238,7 @@ function(param){ var pos = param[3], active = param[2], elt = param[1]; if(active) - iter$1(function(_rQ_){return js_scroll(elt, _rQ_);}, pos); + iter$1(function(_rR_){return js_scroll(elt, _rR_);}, pos); return elt; }); return div$1 @@ -14267,19 +14267,19 @@ d, opt, ev, - _rM_, + _rN_, value_change_event, pattern$0, type, default_value){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_rM_) var sth$0 = _rM_[1], required = sth$0; else var required = 0; + if(_rN_) var sth$0 = _rN_[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(_rN_){return add_opt(pattern, pattern$0, _rN_);} - (function(_rO_){return add_bool(required$0, required, _rO_);}(at$0)), + function(_rO_){return add_opt(pattern, pattern$0, _rO_);} + (function(_rP_){return add_bool(required$0, required, _rP_);}(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], @@ -14293,8 +14293,8 @@ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = - function(_rK_){return add_opt(value$1, default_value, _rK_);} - (function(_rL_){return add_opt(placeholder, placeholder$0, _rL_);}(at)); + function(_rL_){return add_opt(value$1, default_value, _rL_);} + (function(_rM_){return add_opt(placeholder, placeholder$0, _rM_);}(at)); return make_input (value$0, validate, @@ -14312,7 +14312,7 @@ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = - function(_rJ_){return add_opt(placeholder, placeholder$0, _rJ_);}(at); + function(_rK_){return add_opt(placeholder, placeholder$0, _rK_);}(at); return make_input (value$0, validate, @@ -14329,7 +14329,7 @@ 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(_rI_){return 0;}, + (function(_rJ_){return 0;}, 0, d, [0, at$0], @@ -14346,16 +14346,16 @@ function create$8(d, at, ev, Form){ return function(on_submit){ var - _rB_ = + _rC_ = [0, - [0, empty$0, function(_rH_){return _rH_;}], - function(param, _rG_){ - var f = _rG_[2], elts = _rG_[1], f$0 = param[2], elts$0 = param[1]; + [0, empty$0, function(_rI_){return _rI_;}], + function(param, _rH_){ + var f = _rH_[2], elts = _rH_[1], f$0 = param[2], elts$0 = param[1]; return [0, concat$0(elts$0, elts), function(t){return caml_call1(f, caml_call1(f$0, t));}]; }]; - function _rC_(param){ + function _rD_(param){ var mapper = param[2], field = param[1]; function value(param){ var match = peek(field[2]); @@ -14366,13 +14366,13 @@ return [0, element(field[1]), function(t){ - var _rF_ = value(0); - return caml_call1(caml_call1(mapper, t), _rF_); + var _rG_ = value(0); + return caml_call1(caml_call1(mapper, t), _rG_); }]; } var fields = - function(_rE_){return fold_monoid(_rC_, _rB_, _rE_);}(lift(Form[2])), + function(_rF_){return fold_monoid(_rD_, _rC_, _rF_);}(lift(Form[2])), handler$0 = func (fields, @@ -14389,7 +14389,7 @@ ev$0 = map_or ([0, on_submit$0, 0], - function(_rD_){return cons(on_submit$0, _rD_);}, + function(_rE_){return cons(on_submit$0, _rE_);}, ev); return form$0(d, at, [0, ev$0], 0, [0, [0, 83, lift(elts)], 0]);}; } @@ -14398,21 +14398,21 @@ ? caml_call1(sprintf(_fx_), base_name) : caml_call1(sprintf(_fy_), base_name); } - function make$8(opt, _rw_, desc){ + function make$8(opt, _rx_, desc){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_rw_) var sth$0 = _rw_[1], ev = sth$0; else var ev = 0; + if(_rx_) var sth$0 = _rx_[1], ev = sth$0; else var ev = 0; var id = name$0(1, desc[1]), name$1 = name$0(0, desc[1]), var$0 = var$1(id, desc[2]), - _rx_ = desc[3]; + _ry_ = desc[3]; label$0 - (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, 0, _rx_); + (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, 0, _ry_); var - _ry_ = [0, 80, name$1], + _rz_ = [0, 80, name$1], at$0 = - function(_rz_){return add$1(type, _fz_, _rz_);} - (function(_rA_){return add$1(name, _ry_, _rA_);} + function(_rA_){return add$1(type, _fz_, _rA_);} + (function(_rB_){return add$1(name, _rz_, _rB_);} (add$1(id$0, [0, 80, id], at))), match = peek(var$0); if(match) @@ -14437,26 +14437,26 @@ function name$1(id, base_name){ return id ? caml_call1(sprintf(_fA_), base_name) : base_name; } - function make$9(opt, _rr_, desc){ + function make$9(opt, _rs_, desc){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_rr_) var sth$0 = _rr_[1], ev = sth$0; else var ev = 0; + if(_rs_) var sth$0 = _rs_[1], ev = sth$0; else var ev = 0; return function(options){ var id = name$1(1, desc[1]), name$0 = name$1(0, desc[1]), var$0 = var$1(id, desc[2]), - _rs_ = desc[3]; + _rt_ = desc[3]; label$0 (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, 0, - _rs_); + _rt_); var - _rt_ = [0, 80, name$0], + _ru_ = [0, 80, name$0], at$0 = - function(_ru_){return add$1(type, _fB_, _ru_);} - (function(_rv_){return add$1(name, _rt_, _rv_);} + function(_rv_){return add$1(type, _fB_, _rv_);} + (function(_rw_){return add$1(name, _ru_, _rw_);} (add$1(id$0, [0, 80, id], at))), on_change = handler @@ -14506,10 +14506,10 @@ 0, 0, label), - _rn_ = [0, 80, name$0], + _ro_ = [0, 80, name$0], at = - function(_rp_){return add$1(type, _fE_, _rp_);} - (function(_rq_){return add$1(name, _rn_, _rq_);} + function(_rq_){return add$1(type, _fE_, _rq_);} + (function(_rr_){return add$1(name, _ro_, _rr_);} (add$1(id$0, [0, 80, id], 0))), checked$1 = func @@ -14524,7 +14524,7 @@ return symbol$1(var$0, result(checked | 0)); }), ev = [0, [0, 80, on_change], 0], - _ro_ = get$1(var$0); + _rp_ = get$1(var$0); return [0, div$1 (0, @@ -14534,7 +14534,7 @@ [0, [0, 82, input$1(0, [0, at$0], [0, ev], 0, 0)], [0, [0, 82, lbl], 0]]), - _ro_]; + _rp_]; } function make_all(g, desc){ var n = [0, 0]; @@ -14555,10 +14555,10 @@ var all = make_all(0, t[2]), elts = map$3(function(param){var elt = param[1]; return elt;}, all); - function _rk_(_rm_){return _rm_;} + function _rl_(_rn_){return _rn_;} var value = - function(_rl_){return filter_map$0(_rk_, _rl_);} + function(_rm_){return filter_map$0(_rl_, _rm_);} (lift (fold_monoid (function(param){var v = param[2]; return element(v);}, @@ -14571,8 +14571,8 @@ function size(t){return size$0(t[1]);} function create(param){return [0, empty$2, Map[1]];} function add(t, k, x){ - var _rj_ = Map[4].call(null, k, x, t[2]); - return [0, cons$2(k, t[1]), _rj_]; + var _rk_ = Map[4].call(null, k, x, t[2]); + return [0, cons$2(k, t[1]), _rk_]; } function take_opt(t){ var match = take_back(t[1]); @@ -14598,20 +14598,20 @@ var t$0 = t; for(;;){ var - _rg_ = RA_queue$0[6].call(null, t$0[2]), - _rh_ = _rg_[2], - q2 = _rg_[1]; - if(! _rh_){ + _rh_ = RA_queue$0[6].call(null, t$0[2]), + _ri_ = _rh_[2], + q2 = _rh_[1]; + if(! _ri_){ if(counter >= 50) return caml_trampoline_return(evict_q1, [0, on_evict, t$0]); var counter$0 = counter + 1 | 0; return evict_q1(counter$0, on_evict, t$0); } var - _ri_ = _rh_[1], - match = _ri_[2], + _rj_ = _ri_[1], + match = _rj_[2], elt = match[1], - k = _ri_[1], + k = _rj_[1], visited = match[2]; if(! visited[1]){ caml_call1(on_evict, elt); @@ -14630,20 +14630,20 @@ var t$0 = t; for(;;){ var - _rd_ = RA_queue$0[6].call(null, t$0[1]), - _re_ = _rd_[2], - q1 = _rd_[1]; - if(! _re_){ + _re_ = RA_queue$0[6].call(null, t$0[1]), + _rf_ = _re_[2], + q1 = _re_[1]; + if(! _rf_){ if(counter >= 50) return caml_trampoline_return(evict_q2$0, [0, on_evict, t$0]); var counter$0 = counter + 1 | 0; return evict_q2$0(counter$0, on_evict, t$0); } var - _rf_ = _re_[1], - match = _rf_[2], + _rg_ = _rf_[1], + match = _rg_[2], elt = match[1], - k = _rf_[1], + k = _rg_[1], visited = match[2]; if(! visited[1]){ caml_call1(on_evict, elt); @@ -14659,8 +14659,8 @@ var t$0 = t; for(;;){ var - _rc_ = RA_queue$0[2].call(null, t$0[2]), - size = RA_queue$0[2].call(null, t$0[1]) + _rc_ | 0; + _rd_ = RA_queue$0[2].call(null, t$0[2]), + size = RA_queue$0[2].call(null, t$0[1]) + _rd_ | 0; if(0 < size && t$0[3] < size){ var t$1 = evict_one(on_evict, t$0); t$0 = t$1; @@ -14669,15 +14669,15 @@ return t$0; } } - function insert(t, opt, _q$_, k, x){ + function insert(t, opt, _ra_, k, x){ if(opt) var sth = opt[1], on_insert = sth; else - var on_insert = function(_rb_){return;}; - if(_q$_) - var sth$0 = _q$_[1], on_evict = sth$0; + var on_insert = function(_rc_){return;}; + if(_ra_) + var sth$0 = _ra_[1], on_evict = sth$0; else - var on_evict = function(_ra_){return 0;}; + var on_evict = function(_rb_){return 0;}; var match = RA_queue$0[7].call(null, t[1], k); if(match){var visited = match[1][2]; visited[1] = 1; return [0, t, 0];} var match$0 = RA_queue$0[7].call(null, t[2], k); @@ -14719,23 +14719,23 @@ function header(t){ var row_height = to_string$3(t[2]), - _q3_ = [0, [0, 80, class$1(cst_lwdui_virtual_table_row)], 0], - _q4_ = [0, [0, 80, class$1("lwdui-lazy-table-header")], _q3_], + _q4_ = [0, [0, 80, class$1(cst_lwdui_virtual_table_row)], 0], + _q5_ = [0, [0, 80, class$1("lwdui-lazy-table-header")], _q4_], at = [0, [0, 80, style$0 (caml_jsstring_of_string(caml_call1(sprintf(_fJ_), row_height)))], - _q4_], - _q6_ = [0, at], - _q5_ = to_header(t[1][1]); - return function(_q7_){ - return function(_q8_, _q9_, _q__){ - return div$1(_q7_, _q6_, _q8_, _q9_, _q__);}; + _q5_], + _q7_ = [0, at], + _q6_ = to_header(t[1][1]); + return function(_q8_){ + return function(_q9_, _q__, _q$_){ + return div$1(_q8_, _q7_, _q9_, _q__, _q$_);}; } (0) - (0, 0, _q5_); + (0, 0, _q6_); } to_px(0)(_fK_); var logger = for_section(_fL_), Cache = Make$3([0, compare$1]); @@ -14784,12 +14784,12 @@ if(! data) throw caml_maybe_attach_backtrace(Not_found, 1); var data$0 = data[1], - _q0_ = row_data[2], - _q1_ = - 1 - function(_q2_){return poly(_q0_, _q2_);}([0, data$0]); - return _q1_ + _q1_ = row_data[2], + _q2_ = + 1 - function(_q3_){return poly(_q1_, _q3_);}([0, data$0]); + return _q2_ ? symbol$2(row, [0, row_data[1], [0, data$0], row_data[3]]) - : _q1_; + : _q2_; }); }); return 0; @@ -14830,8 +14830,8 @@ var visible_height = height(div), parent = get_exn$0(content_div), - _qX_ = ui_table[2], - row_height = to_px([0, parent])(_qX_); + _qY_ = ui_table[2], + row_height = to_px([0, parent])(_qY_); logger[4].call (null, [0, _fP_, [0, visible_height, [0, _fO_, [0, row_height, 0]]]]); var @@ -14843,9 +14843,9 @@ 19067 === direction ? number_of_visible_rows : number_of_visible_rows / 2 | 0, - _qY_ = 0, + _qZ_ = 0, first = - function(_qZ_){return max(_qY_, _qZ_);} + function(_q0_){return max(_qZ_, _q0_);} (first_visible_row - bleeding | 0), bleeding$0 = 759637122 === direction @@ -14902,9 +14902,9 @@ set_on_invalidate (root, function(param){ - var _qW_ = quick_sample(root); - if(! _qW_[2]) return 0; - var update = _qW_[1]; + var _qX_ = quick_sample(root); + if(! _qX_[2]) return 0; + var update = _qX_[1]; return caml_call1(update, 0); }); quick_sample(root); @@ -14950,11 +14950,11 @@ (render$0, [0, [0, 0, empty$0, 0], - function(param, _qU_){ + function(param, _qV_){ var - q = _qU_[3], - s = _qU_[2], - p = _qU_[1], + q = _qV_[3], + s = _qV_[2], + p = _qV_[1], m = param[3], s$0 = param[2], n = param[1], @@ -14970,7 +14970,7 @@ var spacer = pure(make_spacer(m + p | 0)), s$1 = - function(_qV_){return concat$0(s$0, _qV_);} + function(_qW_){return concat$0(s$0, _qW_);} (concat$0(element(spacer), s)); else var s$1 = concat$0(s$0, s); @@ -15025,17 +15025,17 @@ function(ev){ var last_update = [0, 0.], timeout = [0, -1]; function reset_ticker(div){ - var debouncing_interval = 500, now = now_ms(performance); + var debouncing_interval = 800, now = now_ms(performance); if(symbol$7(timeout[1], 0)) stop_timer(timeout[1]); timeout[1] = set_timeout (debouncing_interval, function(param){return caml_call1(update, div);}); var - _qT_ = symbol$8(now - last_update[1], debouncing_interval); - return _qT_ + _qU_ = symbol$8(now - last_update[1], debouncing_interval); + return _qU_ ? (last_update[1] = now, caml_call1(update, div)) - : _qT_; + : _qU_; } function scroll_handler(div){return reset_ticker(div);} get_exn$0(wrapper_div); @@ -15054,21 +15054,21 @@ function(i){ var parent = get_exn$0(content_div), - _qS_ = ui_table[2], - row_height = of_float(to_px([0, parent])(_qS_)); + _qT_ = ui_table[2], + row_height = of_float(to_px([0, parent])(_qT_)); return [0, [0, caml_mul(i, row_height)]]; }), - _qN_ = + _qO_ = make$7([0, at$0], [0, ev], [0, on_create$0], scroll_target$1, rows$0); else var - _qN_ = + _qO_ = div$1 (0, [0, at$0], [0, ev], [0, on_create$0], [0, [0, 82, rows$0], 0]); - function _qO_(el){return observe$0(observer, 0, el);} - function _qP_(_qR_){return tee(_qO_, _qR_);} + function _qP_(el){return observe$0(observer, 0, el);} + function _qQ_(_qS_){return tee(_qP_, _qS_);} var - wrapper = function(_qQ_){return func(_qQ_, _qP_);}(_qN_), + wrapper = function(_qR_){return func(_qR_, _qQ_);}(_qO_), at$1 = to_at$0(0, classes(_fT_)), grid_style = style$2(ui_table), s = style$0(caml_jsstring_of_string(grid_style)), @@ -15094,11 +15094,11 @@ return [0, start[2], cnum, enum$0]; } function string2num(s){ - try{var _qL_ = [3, caml_int_of_string(s)]; return _qL_;} - catch(_qM_){ - var _qK_ = caml_wrap_exception(_qM_); - if(_qK_[1] === Failure) return [2, s]; - throw caml_maybe_attach_backtrace(_qK_, 0); + try{var _qM_ = [3, caml_int_of_string(s)]; return _qM_;} + catch(_qN_){ + var _qL_ = caml_wrap_exception(_qN_); + if(_qL_[1] === Failure) return [2, s]; + throw caml_maybe_attach_backtrace(_qL_, 0); } } function update_pos(lexbuf){ @@ -15189,17 +15189,17 @@ u1 = [0, 0], u2 = [0, 0], state = [0, 748194550], - _qB_ = l - 1 | 0, - _qA_ = 0; - if(_qB_ >= 0){ - var i = _qA_; + _qC_ = l - 1 | 0, + _qB_ = 0; + if(_qC_ >= 0){ + var i = _qB_; for(;;){ - var _qC_ = state[1]; + var _qD_ = state[1]; a: - if(308570827 <= _qC_) - if(308570829 <= _qC_) - if(748194550 <= _qC_) - if(945120947 <= _qC_) + if(308570827 <= _qD_) + if(308570829 <= _qD_) + if(748194550 <= _qD_) + if(945120947 <= _qD_) if(117 === caml_string_get(s, i)) state[1] = 308570827; else @@ -15210,10 +15210,10 @@ state[1] = 258914209; else{caml_bytes_unsafe_set(s$0, j[1], c); j[1] = j[1] + 1 | 0;} } - else if(308570830 <= _qC_){ + else if(308570830 <= _qD_){ state[1] = 748194550; - var _qE_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _qE_; + var _qF_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _qF_; if(56320 <= u2[1] && 57343 >= u2[1]){ j[1] = utf8_of_surrogate_pair(s$0, j[1], u1[1], u2[1]); break a; @@ -15221,44 +15221,44 @@ escaping_error(_f4_, s, 0, i); } else{ - var _qF_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _qF_; + var _qG_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _qG_; state[1] = 308570830; } - else if(308570828 <= _qC_){ - var _qG_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _qG_; + else if(308570828 <= _qD_){ + var _qH_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _qH_; state[1] = 308570829; } else{ u2[1] = int_of_hexchar(caml_string_get(s, i)); state[1] = 308570828; } - else if(297481261 <= _qC_) - if(297481263 <= _qC_) - if(308569555 <= _qC_) + else if(297481261 <= _qD_) + if(297481263 <= _qD_) + if(308569555 <= _qD_) if(92 === caml_string_get(s, i)) state[1] = 945120947; else escaping_error(_f5_, s, [0, caml_string_get(s, i)], i); else{ - var _qH_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _qH_; + var _qI_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _qI_; 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 <= _qC_){ - var _qI_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _qI_; + else if(297481262 <= _qD_){ + var _qJ_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _qJ_; state[1] = 297481263; } else{ - var _qJ_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _qJ_; + var _qK_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _qK_; state[1] = 297481262; } - else if(297481260 <= _qC_){ + else if(297481260 <= _qD_){ u1[1] = int_of_hexchar(caml_string_get(s, i)); state[1] = 297481261; } @@ -15321,9 +15321,9 @@ escaping_error(_f6_, s, [0, caml_string_get(s, i)], i); } } - var _qD_ = i + 1 | 0; - if(_qB_ === i) break; - i = _qD_; + var _qE_ = i + 1 | 0; + if(_qC_ === i) break; + i = _qE_; } } if(748194550 !== state[1]) escaping_error(_f2_, s, 0, l); @@ -15335,11 +15335,11 @@ } function Make$4(Compliance){ function read$0(counter, lexbuf){ - var _qz_ = 0; + var _qA_ = 0; if(counter >= 50) - return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _qz_]); + return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _qA_]); var counter$0 = counter + 1 | 0; - return ocaml_lex_read_rec(counter$0, lexbuf, _qz_); + return ocaml_lex_read_rec(counter$0, lexbuf, _qA_); } function read(lexbuf){return caml_trampoline(read$0(0, lexbuf));} function ocaml_lex_read_rec(counter, lexbuf, ocaml_lex_state){ @@ -15406,8 +15406,8 @@ } return tok; case 18: - var _qy_ = [4, caml_float_of_string(lexeme(lexbuf))]; - return caml_call1(Compliance[2], _qy_); + var _qz_ = [4, caml_float_of_string(lexeme(lexbuf))]; + return caml_call1(Compliance[2], _qz_); case 19: return _gf_; case 20: @@ -15450,12 +15450,12 @@ } } function read_comment$0(counter, lexbuf){ - var _qx_ = 88; + var _qy_ = 88; if(counter >= 50) return caml_trampoline_return - (ocaml_lex_read_comment_rec, [0, lexbuf, _qx_]); + (ocaml_lex_read_comment_rec, [0, lexbuf, _qy_]); var counter$0 = counter + 1 | 0; - return ocaml_lex_read_comment_rec(counter$0, lexbuf, _qx_); + return ocaml_lex_read_comment_rec(counter$0, lexbuf, _qy_); } function read_comment(lexbuf){ return caml_trampoline(read_comment$0(0, lexbuf)); @@ -15573,8 +15573,8 @@ default: var b = tok[1], - _qw_ = b ? _gM_ : _gO_, - err = symbol_concat(_gN_, symbol_concat(_qw_, _gL_)); + _qx_ = b ? _gM_ : _gO_, + err = symbol_concat(_gN_, symbol_concat(_qx_, _gL_)); } return [0, 148000204, err]; } @@ -15630,8 +15630,8 @@ if(typeof tok$0 === "number"){ if(7 === tok$0) return array_values([0, v, acc]); if(10 === tok$0){ - var _qv_ = rev([0, v, acc]); - return caml_call1(Compliance[16], _qv_); + var _qw_ = rev([0, v, acc]); + return caml_call1(Compliance[16], _qw_); } } throw caml_maybe_attach_backtrace @@ -15644,8 +15644,8 @@ if(typeof tok === "number"){ if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} if(10 === tok){ - var _qu_ = rev([0, v, acc$0]); - return caml_call1(Compliance[16], _qu_); + var _qv_ = rev([0, v, acc$0]); + return caml_call1(Compliance[16], _qv_); } } throw caml_maybe_attach_backtrace @@ -15662,8 +15662,8 @@ var v = colon_value(tok, 0), tok$0 = caml_call1(reader, 0); if(typeof tok$0 === "number"){ if(1 === tok$0){ - var _qt_ = rev([0, v, acc]); - return caml_call1(Compliance[15], _qt_); + var _qu_ = rev([0, v, acc]); + return caml_call1(Compliance[15], _qu_); } if(7 === tok$0) return object_values([0, v, acc]); } @@ -15676,8 +15676,8 @@ var v = key_colon_value(0), tok = caml_call1(reader, 0); if(typeof tok === "number"){ if(1 === tok){ - var _qs_ = rev([0, v, acc$0]); - return caml_call1(Compliance[15], _qs_); + var _qt_ = rev([0, v, acc$0]); + return caml_call1(Compliance[15], _qt_); } if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} } @@ -15729,8 +15729,8 @@ if(typeof tok === "number"){ if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} if(14 <= tok){ - var _qr_ = rev([0, v, acc$0]); - return caml_call1(Compliance[17], _qr_); + var _qs_ = rev([0, v, acc$0]); + return caml_call1(Compliance[17], _qs_); } } throw caml_maybe_attach_backtrace @@ -15788,17 +15788,17 @@ return [0, Compliance, decode]; } function nibble_to_hex(i){ - var _qq_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_qq_); + var _qr_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_qr_); } 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), _qo_ = l - 1 | 0, _qn_ = 0; - if(_qo_ >= 0){ - var i = _qn_; + var l = caml_ml_string_length(s), _qp_ = l - 1 | 0, _qo_ = 0; + if(_qp_ >= 0){ + var i = _qo_; for(;;){ var c = caml_string_get(s, i); a: @@ -15839,9 +15839,9 @@ caml_call1(add_string, _gU_); add_hex_byte(add_char, c); } - var _qp_ = i + 1 | 0; - if(_qo_ === i) break; - i = _qp_; + var _qq_ = i + 1 | 0; + if(_qp_ === i) break; + i = _qq_; } } return; @@ -15849,8 +15849,8 @@ function Make$6(Compliance){ function to_json_string(s){ var buf = create$1(100); - function add_char$0(_qm_){return add_char(buf, _qm_);} - function add_string$0(_ql_){return add_string(buf, _ql_);} + function add_char$0(_qn_){return add_char(buf, _qn_);} + function add_string$0(_qm_){return add_string(buf, _qm_);} function add_quote_string(s){ add_char$0(34); escape(add_char$0, add_string$0, s); @@ -15867,17 +15867,17 @@ } function format(out, json){ if(typeof json === "number") return pp_print_string(out, _g2_); - var _qc_ = json[1]; - if(726928360 <= _qc_){ - if(737456202 === _qc_){var b = json[2]; return pp_print_bool(out, b);} - if(928231259 > _qc_){ - if(848054398 <= _qc_){ + var _qd_ = json[1]; + if(726928360 <= _qd_){ + if(737456202 === _qd_){var b = json[2]; return pp_print_bool(out, b);} + if(928231259 > _qd_){ + if(848054398 <= _qd_){ var l$0 = json[2]; return l$0 ? caml_call2 (fprintf$0(out)(_g7_), - function(_qj_, _qk_){ - return pp_list(_g6_, format, _qj_, _qk_); + function(_qk_, _ql_){ + return pp_list(_g6_, format, _qk_, _ql_); }, l$0) : pp_print_string(out, _g8_); @@ -15887,42 +15887,42 @@ ? pp_print_string(out, _g9_) : caml_call2 (fprintf$0(out)(_g$_), - function(_qh_, _qi_){ - return pp_list(_g__, format, _qh_, _qi_); + function(_qi_, _qj_){ + return pp_list(_g__, format, _qi_, _qj_); }, l$1); } - if(963043957 <= _qc_){ + if(963043957 <= _qd_){ var l = json[2]; return l ? caml_call2 (fprintf$0(out)(_g4_), - function(_qf_, _qg_){ - return pp_list(_g3_, format_field, _qf_, _qg_); + function(_qg_, _qh_){ + return pp_list(_g3_, format_field, _qg_, _qh_); }, l) : pp_print_string(out, _g5_); } } else{ - if(3654863 === _qc_){ + if(3654863 === _qd_){ var i = json[2]; return pp_print_string(out, string_of_int(i)); } - if(365180284 <= _qc_){ - if(708012133 > _qc_){ + if(365180284 <= _qd_){ + if(708012133 > _qd_){ var f = json[2], s$2 = caml_call1(Compliance[8], f); return pp_print_string(out, s$2); } - var _qd_ = json[2], match = _qd_[2], s$0 = _qd_[1]; + var _qe_ = json[2], match = _qe_[2], s$0 = _qe_[1]; if(match){ var json$0 = match[1], s$1 = to_json_string(s$0); return caml_call3(fprintf$0(out)(_ha_), s$1, format, json$0); } - var _qe_ = to_json_string(s$0); - return caml_call1(fprintf$0(out)(_hb_), _qe_); + var _qf_ = to_json_string(s$0); + return caml_call1(fprintf$0(out)(_hb_), _qf_); } - if(-752863768 > _qc_){ + if(-752863768 > _qd_){ var s$3 = json[2]; return pp_print_string(out, to_json_string(s$3)); } @@ -15931,8 +15931,8 @@ return pp_print_string(out, s); } function format_field(out, param){ - var json = param[2], name = param[1], _qb_ = to_json_string(name); - return caml_call3(fprintf$0(out)(_hc_), _qb_, format, json); + var json = param[2], name = param[1], _qc_ = to_json_string(name); + return caml_call3(fprintf$0(out)(_hc_), _qc_, format, json); } function pretty_print(out, json){ return caml_call2(fprintf$0(out)(_hd_), format, json); @@ -15953,9 +15953,9 @@ pretty_print_to_string, pretty_print_to_channel]; } - function _hg_(_p$_){ - var _qa_ = Make$6(_p$_); - return [0, _qa_[5], _qa_[6], _qa_[7]]; + function _hg_(_qa_){ + var _qb_ = Make$6(_qa_); + return [0, _qb_[5], _qb_[6], _qb_[7]]; } function error$1(msg, json){ throw caml_maybe_attach_backtrace([0, Failure, msg], 1); @@ -16081,27 +16081,27 @@ var res = match$0[1]; a: if(stream) - var _p7_ = [0, [0, res]]; + var _p8_ = [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], _p9_ = [1, err], _p7_ = _p9_; + var err = exn[2], _p__ = [1, err], _p8_ = _p__; break a; } b: { - if(typeof tok === "number" && 6 === tok){var _p__ = [0, [0, res]]; break b;} - var _p__ = [1, symbol_concat(_hF_, token_to_string(tok))]; + if(typeof tok === "number" && 6 === tok){var _p$_ = [0, [0, res]]; break b;} + var _p$_ = [1, symbol_concat(_hF_, token_to_string(tok))]; } - var _p7_ = _p__; + var _p8_ = _p$_; } - var _p8_ = _p7_; + var _p9_ = _p8_; } else - var _p8_ = stream ? _hG_ : _hH_; - var res$0 = _p8_; + var _p9_ = stream ? _hG_ : _hH_; + var res$0 = _p9_; } else var s$0 = match[1], res$0 = [1, s$0]; @@ -16180,19 +16180,19 @@ } function Make$8(Compliance){ function nibble_to_hex(i){ - var _p6_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_p6_); + var _p7_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_p7_); } 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(_p5_){return _j_(oc, _p5_);} - function add_string(_p4_){return output_string(oc, _p4_);} - var l = caml_ml_string_length(s), _p2_ = l - 1 | 0, _p1_ = 0; - if(_p2_ >= 0){ - var i = _p1_; + function add_char(_p6_){return _j_(oc, _p6_);} + function add_string(_p5_){return output_string(oc, _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: @@ -16233,16 +16233,16 @@ add_string(_hJ_); add_hex_byte(oc, c); } - var _p3_ = i + 1 | 0; - if(_p2_ === i) break; - i = _p3_; + var _p4_ = i + 1 | 0; + if(_p3_ === i) break; + i = _p4_; } } return; } function json_to_channel_fmt(oc, json, eol, incr, psep){ - function add_char(_p0_){return _j_(oc, _p0_);} - function add_string(_pZ_){return output_string(oc, _pZ_);} + function add_char(_p1_){return _j_(oc, _p1_);} + function add_string(_p0_){return output_string(oc, _p0_);} function add_quote_string(s){ add_char(34); escape(oc, s); @@ -16253,10 +16253,10 @@ var psep$0 = symbol_concat(_hQ_, psep); function fmt(off, value){ if(typeof value === "number") return add_string(_hR_); - var _pY_ = value[1]; - if(708012133 <= _pY_){ - if(737456202 > _pY_){ - if(726928360 <= _pY_){ + var _pZ_ = value[1]; + if(708012133 <= _pZ_){ + if(737456202 > _pZ_){ + if(726928360 <= _pZ_){ var t = value[2], ldr$1 = make$1(off, 32); add_char(40); add_string(eol); @@ -16273,8 +16273,8 @@ add_string(ldr$2); return add_char(62); } - if(928231259 <= _pY_){ - if(963043957 <= _pY_){ + if(928231259 <= _pZ_){ + if(963043957 <= _pZ_){ var o = value[2], ldr = make$1(off, 32); add_char(123); add_string(eol); @@ -16286,7 +16286,7 @@ var s = value[2]; return add_string(s); } - if(848054398 <= _pY_){ + if(848054398 <= _pZ_){ var l = value[2], ldr$0 = make$1(off, 32); add_char(91); add_string(eol); @@ -16298,13 +16298,13 @@ var b = value[2]; return add_string(string_of_bool(b)); } - if(-752863768 === _pY_){var s$0 = value[2]; return add_string(s$0);} - if(3654863 <= _pY_){ - if(365180284 <= _pY_){var f = value[2]; return add_float(f);} + if(-752863768 === _pZ_){var s$0 = value[2]; return add_string(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 <= _pY_){var s$1 = value[2]; return add_string(s$1);} + if(-375152890 <= _pZ_){var s$1 = value[2]; return add_string(s$1);} var s$2 = value[2]; return add_quote_string(s$2); } @@ -16351,11 +16351,11 @@ fmt(0, json); return add_string(eol); } - function json_to_channel(_pR_){ - function _pS_(_pU_, _pV_, _pW_, _pX_){ - return json_to_channel_fmt(_pR_, _pU_, _pV_, _pW_, _pX_); + function json_to_channel(_pS_){ + function _pT_(_pV_, _pW_, _pX_, _pY_){ + return json_to_channel_fmt(_pS_, _pV_, _pW_, _pX_, _pY_); } - return function(_pT_){return _pS_(_pT_, _hV_, 0, _hU_);}; + return function(_pU_){return _pT_(_pU_, _hV_, 0, _hU_);}; } function json_to_file_exn(file, json){ var oc = open_out(file); @@ -16370,19 +16370,19 @@ } function Make$9(Compliance){ function nibble_to_hex(i){ - var _pQ_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_pQ_); + var _pR_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_pR_); } 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(_pP_){return add_char(buf, _pP_);} - function add_string$0(_pO_){return add_string(buf, _pO_);} - var l = caml_ml_string_length(s), _pM_ = l - 1 | 0, _pL_ = 0; - if(_pM_ >= 0){ - var i = _pL_; + function add_char$0(_pQ_){return add_char(buf, _pQ_);} + function add_string$0(_pP_){return add_string(buf, _pP_);} + var l = caml_ml_string_length(s), _pN_ = l - 1 | 0, _pM_ = 0; + if(_pN_ >= 0){ + var i = _pM_; for(;;){ var c = caml_string_get(s, i); a: @@ -16423,16 +16423,16 @@ add_string$0(_hX_); add_hex_byte(buf, c); } - var _pN_ = i + 1 | 0; - if(_pM_ === i) break; - i = _pN_; + var _pO_ = i + 1 | 0; + if(_pN_ === i) break; + i = _pO_; } } return; } function json_to_buffer(buf, json){ - function add_char$0(_pK_){return add_char(buf, _pK_);} - function add_string$0(_pJ_){return add_string(buf, _pJ_);} + function add_char$0(_pL_){return add_char(buf, _pL_);} + function add_string$0(_pK_){return add_string(buf, _pK_);} function add_quote_string(s){ add_char$0(34); escape(buf, s); @@ -16442,10 +16442,10 @@ function add_float(f){return add_string$0(caml_call1(Compliance[8], f));} function fmt(value){ if(typeof value === "number") return add_string$0(_h4_); - var _pI_ = value[1]; - if(708012133 <= _pI_){ - if(737456202 > _pI_){ - if(726928360 <= _pI_){ + var _pJ_ = value[1]; + if(708012133 <= _pJ_){ + if(737456202 > _pJ_){ + if(726928360 <= _pJ_){ var t = value[2]; add_char$0(40); json_list(t); @@ -16456,8 +16456,8 @@ variant(v); return add_char$0(62); } - if(928231259 <= _pI_){ - if(963043957 <= _pI_){ + if(928231259 <= _pJ_){ + if(963043957 <= _pJ_){ var o = value[2]; add_char$0(123); json_assoc(o); @@ -16466,7 +16466,7 @@ var s = value[2]; return add_string$0(s); } - if(848054398 <= _pI_){ + if(848054398 <= _pJ_){ var l = value[2]; add_char$0(91); json_list(l); @@ -16475,13 +16475,13 @@ var b = value[2]; return add_string$0(string_of_bool(b)); } - if(-752863768 === _pI_){var s$0 = value[2]; return add_string$0(s$0);} - if(3654863 <= _pI_){ - if(365180284 <= _pI_){var f = value[2]; return add_float(f);} + if(-752863768 === _pJ_){var s$0 = value[2]; return add_string$0(s$0);} + if(3654863 <= _pJ_){ + if(365180284 <= _pJ_){var f = value[2]; return add_float(f);} var i = value[2]; return add_int(i); } - if(-375152890 <= _pI_){var s$1 = value[2]; return add_string$0(s$1);} + if(-375152890 <= _pJ_){var s$1 = value[2]; return add_string$0(s$1);} var s$2 = value[2]; return add_quote_string(s$2); } @@ -16536,7 +16536,7 @@ var Lexxer = Make$4(Compliance), Parser = Make$5(Compliance), - include = function(_pH_){return Make$7(Lexxer, _pH_);}(Parser), + include = function(_pI_){return Make$7(Lexxer, _pI_);}(Parser), json_of_string_error_info = include[15], json_of_file_error_info = include[16], json_of_channel_error_info = include[17], @@ -16582,18 +16582,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 - _pD_ = error_info[4], - _pE_ = error_info[3], - _pF_ = error_info[2], - _pG_ = (lnum$1 + error_info[1] | 0) - 1 | 0; + _pE_ = error_info[4], + _pF_ = error_info[3], + _pG_ = error_info[2], + _pH_ = (lnum$1 + error_info[1] | 0) - 1 | 0; if(fname) var name = fname[1], fname$0 = symbol_concat(_h$_, symbol_concat(name, _h__)); else var fname$0 = _ib_; - var loc = caml_call4(sprintf(_ia_), fname$0, _pG_, _pF_, _pE_); - return symbol_concat(loc, _pD_); + var loc = caml_call4(sprintf(_ia_), fname$0, _pH_, _pG_, _pF_); + return symbol_concat(loc, _pE_); } function apply_and_handle_errors(f, a, fname, lnum){ var match = caml_call1(f, a); @@ -16608,12 +16608,12 @@ } function Common_writer(Compliance){ var - _py_ = Make$9(Compliance), - to_string = _py_[3], - to_buffer = _py_[11], - _pz_ = Make$8(Compliance), - to_file = _pz_[9], - to_channel = _pz_[11], + _pz_ = Make$9(Compliance), + to_string = _pz_[3], + to_buffer = _pz_[11], + _pA_ = Make$8(Compliance), + to_file = _pA_[9], + to_channel = _pA_[11], include = _hg_(Compliance), pretty_print = include[1], pretty_print_to_string = include[2], @@ -16654,14 +16654,14 @@ function to_standard(json){ function map(node){ if(typeof node === "number") return 870828711; - var _pC_ = node[1]; - if(708012133 > _pC_){ - if(-752863768 === _pC_){ + var _pD_ = node[1]; + if(708012133 > _pD_){ + if(-752863768 === _pD_){ var v$1 = node[2]; return [0, -976970511, v$1]; } - if(3654863 <= _pC_) return 365180284 <= _pC_ ? node : node; - if(-375152890 > _pC_) return node; + if(3654863 <= _pD_) return 365180284 <= _pD_ ? node : node; + if(-375152890 > _pD_) return node; var s = node[2]; return 1 < caml_ml_string_length(s) >>> 0 ? [0, @@ -16669,8 +16669,8 @@ sub$0(s, 1, caml_ml_string_length(s) - 2 | 0)] : [0, -976970511, s]; } - if(737456202 > _pC_){ - if(726928360 <= _pC_){ + if(737456202 > _pD_){ + if(726928360 <= _pD_){ var tpl = node[2]; return [0, 848054398, map$1(map, tpl)]; } @@ -16679,12 +16679,12 @@ var v$0 = jopt[1]; return [0, 848054398, [0, [0, -976970511, name], [0, map(v$0), 0]]]; } - if(928231259 > _pC_){ - if(848054398 > _pC_) return node; + if(928231259 > _pD_){ + if(848054398 > _pD_) return node; var l = node[2]; return [0, 848054398, map$1(map, l)]; } - if(963043957 <= _pC_){ + if(963043957 <= _pD_){ var a = node[2]; return [0, 963043957, @@ -16700,11 +16700,11 @@ } return map(json); } - function to_string$0(param, _pA_, opt, json){ + function to_string$0(param, _pB_, opt, json){ if(opt) var sth = opt[1], std = sth; else var std = 0; if(! std) return Internal_writer[3].call(null, json); - var _pB_ = to_standard(json); - return Internal_writer[3].call(null, _pB_); + var _pC_ = to_standard(json); + return Internal_writer[3].call(null, _pC_); } return [0, , , to_string$0]; } @@ -17079,58 +17079,58 @@ r3 = caml_call1(rand, 0), r4 = caml_call1(rand, 0), u = caml_create_bytes(16), - _n4_ = 0; - function _n5_(_px_, _pw_, _pv_){caml_bytes_set(_px_, _pw_, _pv_); return;} - (function(_pu_){return _n5_(u, _n4_, _pu_);}(r0 & 255)); - var _n6_ = 1; - function _n7_(_pt_, _ps_, _pr_){caml_bytes_set(_pt_, _ps_, _pr_); return;} - (function(_pq_){return _n7_(u, _n6_, _pq_);}((r0 >>> 8 | 0) & 255)); - var _n8_ = 2; - function _n9_(_pp_, _po_, _pn_){caml_bytes_set(_pp_, _po_, _pn_); return;} - (function(_pm_){return _n9_(u, _n8_, _pm_);}((r0 >>> 16 | 0) & 255)); - var _n__ = 3; - function _n$_(_pl_, _pk_, _pj_){caml_bytes_set(_pl_, _pk_, _pj_); return;} - (function(_pi_){return _n$_(u, _n__, _pi_);}(r1 & 255)); - var _oa_ = 4; - function _ob_(_ph_, _pg_, _pf_){caml_bytes_set(_ph_, _pg_, _pf_); return;} - (function(_pe_){return _ob_(u, _oa_, _pe_);}((r1 >>> 8 | 0) & 255)); - var _oc_ = 5; - function _od_(_pd_, _pc_, _pb_){caml_bytes_set(_pd_, _pc_, _pb_); return;} - (function(_pa_){return _od_(u, _oc_, _pa_);}((r1 >>> 16 | 0) & 255)); - var _oe_ = 6; - function _of_(_o$_, _o__, _o9_){caml_bytes_set(_o$_, _o__, _o9_); return;} - (function(_o8_){return _of_(u, _oe_, _o8_);}(64 | (r1 >>> 24 | 0) & 15)); - var _og_ = 7; - function _oh_(_o7_, _o6_, _o5_){caml_bytes_set(_o7_, _o6_, _o5_); return;} - (function(_o4_){return _oh_(u, _og_, _o4_);}(r2 & 255)); - var _oi_ = 8; - function _oj_(_o3_, _o2_, _o1_){caml_bytes_set(_o3_, _o2_, _o1_); return;} - (function(_o0_){return _oj_(u, _oi_, _o0_);}(128 | (r2 >>> 24 | 0) & 63)); - var _ok_ = 9; - function _ol_(_oZ_, _oY_, _oX_){caml_bytes_set(_oZ_, _oY_, _oX_); return;} - (function(_oW_){return _ol_(u, _ok_, _oW_);}((r2 >>> 8 | 0) & 255)); - var _om_ = 10; - function _on_(_oV_, _oU_, _oT_){caml_bytes_set(_oV_, _oU_, _oT_); return;} - (function(_oS_){return _on_(u, _om_, _oS_);}((r2 >>> 16 | 0) & 255)); - var _oo_ = 11; - function _op_(_oR_, _oQ_, _oP_){caml_bytes_set(_oR_, _oQ_, _oP_); return;} - (function(_oO_){return _op_(u, _oo_, _oO_);}(r3 & 255)); - var _oq_ = 12; - function _or_(_oN_, _oM_, _oL_){caml_bytes_set(_oN_, _oM_, _oL_); return;} - (function(_oK_){return _or_(u, _oq_, _oK_);}((r3 >>> 8 | 0) & 255)); - var _os_ = 13; - function _ot_(_oJ_, _oI_, _oH_){caml_bytes_set(_oJ_, _oI_, _oH_); return;} - (function(_oG_){return _ot_(u, _os_, _oG_);}((r3 >>> 16 | 0) & 255)); - var _ou_ = 14; - function _ov_(_oF_, _oE_, _oD_){caml_bytes_set(_oF_, _oE_, _oD_); return;} - (function(_oC_){return _ov_(u, _ou_, _oC_);}(r4 & 255)); - var _ow_ = 15; - function _ox_(_oB_, _oA_, _oz_){caml_bytes_set(_oB_, _oA_, _oz_); return;} - (function(_oy_){return _ox_(u, _ow_, _oy_);}((r4 >>> 8 | 0) & 255)); + _n5_ = 0; + function _n6_(_py_, _px_, _pw_){caml_bytes_set(_py_, _px_, _pw_); return;} + (function(_pv_){return _n6_(u, _n5_, _pv_);}(r0 & 255)); + var _n7_ = 1; + function _n8_(_pu_, _pt_, _ps_){caml_bytes_set(_pu_, _pt_, _ps_); return;} + (function(_pr_){return _n8_(u, _n7_, _pr_);}((r0 >>> 8 | 0) & 255)); + var _n9_ = 2; + function _n__(_pq_, _pp_, _po_){caml_bytes_set(_pq_, _pp_, _po_); return;} + (function(_pn_){return _n__(u, _n9_, _pn_);}((r0 >>> 16 | 0) & 255)); + var _n$_ = 3; + function _oa_(_pm_, _pl_, _pk_){caml_bytes_set(_pm_, _pl_, _pk_); return;} + (function(_pj_){return _oa_(u, _n$_, _pj_);}(r1 & 255)); + var _ob_ = 4; + function _oc_(_pi_, _ph_, _pg_){caml_bytes_set(_pi_, _ph_, _pg_); return;} + (function(_pf_){return _oc_(u, _ob_, _pf_);}((r1 >>> 8 | 0) & 255)); + var _od_ = 5; + function _oe_(_pe_, _pd_, _pc_){caml_bytes_set(_pe_, _pd_, _pc_); return;} + (function(_pb_){return _oe_(u, _od_, _pb_);}((r1 >>> 16 | 0) & 255)); + var _of_ = 6; + function _og_(_pa_, _o$_, _o__){caml_bytes_set(_pa_, _o$_, _o__); return;} + (function(_o9_){return _og_(u, _of_, _o9_);}(64 | (r1 >>> 24 | 0) & 15)); + var _oh_ = 7; + function _oi_(_o8_, _o7_, _o6_){caml_bytes_set(_o8_, _o7_, _o6_); return;} + (function(_o5_){return _oi_(u, _oh_, _o5_);}(r2 & 255)); + var _oj_ = 8; + function _ok_(_o4_, _o3_, _o2_){caml_bytes_set(_o4_, _o3_, _o2_); return;} + (function(_o1_){return _ok_(u, _oj_, _o1_);}(128 | (r2 >>> 24 | 0) & 63)); + var _ol_ = 9; + function _om_(_o0_, _oZ_, _oY_){caml_bytes_set(_o0_, _oZ_, _oY_); return;} + (function(_oX_){return _om_(u, _ol_, _oX_);}((r2 >>> 8 | 0) & 255)); + var _on_ = 10; + function _oo_(_oW_, _oV_, _oU_){caml_bytes_set(_oW_, _oV_, _oU_); return;} + (function(_oT_){return _oo_(u, _on_, _oT_);}((r2 >>> 16 | 0) & 255)); + var _op_ = 11; + function _oq_(_oS_, _oR_, _oQ_){caml_bytes_set(_oS_, _oR_, _oQ_); return;} + (function(_oP_){return _oq_(u, _op_, _oP_);}(r3 & 255)); + var _or_ = 12; + function _os_(_oO_, _oN_, _oM_){caml_bytes_set(_oO_, _oN_, _oM_); return;} + (function(_oL_){return _os_(u, _or_, _oL_);}((r3 >>> 8 | 0) & 255)); + var _ot_ = 13; + function _ou_(_oK_, _oJ_, _oI_){caml_bytes_set(_oK_, _oJ_, _oI_); return;} + (function(_oH_){return _ou_(u, _ot_, _oH_);}((r3 >>> 16 | 0) & 255)); + var _ov_ = 14; + function _ow_(_oG_, _oF_, _oE_){caml_bytes_set(_oG_, _oF_, _oE_); return;} + (function(_oD_){return _ow_(u, _ov_, _oD_);}(r4 & 255)); + var _ox_ = 15; + function _oy_(_oC_, _oB_, _oA_){caml_bytes_set(_oC_, _oB_, _oA_); return;} + (function(_oz_){return _oy_(u, _ox_, _oz_);}((r4 >>> 8 | 0) & 255)); return unsafe_to_string(u); } function v4_gen(seed){ - function rand$0(_n3_){return rand(seed, _n3_);} + function rand$0(_n4_){return rand(seed, _n4_);} return function(param){return v4_ocaml_random_uuid(rand$0);}; } function to_string$6(opt, u){ @@ -17139,54 +17139,54 @@ function hex(hbase, i){return 10 <= i ? hbase + i | 0 : 48 + i | 0;} var s = of_string(_iC_), i = [0, 0], j = [0, 0]; function byte$0(s, i, c){ - function _nS_(_n2_, _n1_, _n0_){ - caml_bytes_set(_n2_, _n1_, _n0_); + function _nT_(_n3_, _n2_, _n1_){ + caml_bytes_set(_n3_, _n2_, _n1_); return; } - (function(_nZ_){return _nS_(s, i, _nZ_);}(hex(hbase, c >>> 4 | 0))); - var _nT_ = i + 1 | 0; - function _nU_(_nY_, _nX_, _nW_){ - caml_bytes_set(_nY_, _nX_, _nW_); + (function(_n0_){return _nT_(s, i, _n0_);}(hex(hbase, c >>> 4 | 0))); + var _nU_ = i + 1 | 0; + function _nV_(_nZ_, _nY_, _nX_){ + caml_bytes_set(_nZ_, _nY_, _nX_); return; } - return function(_nV_){return _nU_(s, _nT_, _nV_);}(hex(hbase, c & 15)); + return function(_nW_){return _nV_(s, _nU_, _nW_);}(hex(hbase, c & 15)); } for(;;){ if(4 <= j[1]) break; - var _nR_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _nR_); + var _nS_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _nS_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(6 <= j[1]) break; - var _nQ_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _nQ_); + var _nR_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _nR_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(8 <= j[1]) break; - var _nP_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _nP_); + var _nQ_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _nQ_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(10 <= j[1]) break; - var _nO_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _nO_); + var _nP_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _nP_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(16 <= j[1]) return unsafe_to_string(s); - var _nN_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _nN_); + var _nO_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _nO_); i[1] = i[1] + 2 | 0; j[1]++; } @@ -17266,9 +17266,9 @@ var fields$0 = fields, param$0 = param; for(;;){ if(! param$0) return concat(_iQ_, rev(fields$0)); - var _nM_ = param$0[1]; - if(_nM_[1]){ - var rest = param$0[2], field = _nM_[2], fields$1 = [0, field, fields$0]; + var _nN_ = param$0[1]; + if(_nN_[1]){ + var rest = param$0[2], field = _nN_[2], fields$1 = [0, field, fields$0]; fields$0 = fields$1; param$0 = rest; } @@ -17361,12 +17361,12 @@ return [0, name_value, server_id_value, v$0, id_value]; } var - _nK_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _iT_], 0], - _nL_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _iU_], _nK_]; + _nL_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _iT_], 0], + _nM_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _iU_], _nL_]; return record_undefined_elements (tp_loc, yojson, - [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _iV_], _nL_]); + [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _iV_], _nM_]); } return record_list_instead_atom(tp_loc, yojson); } @@ -17434,11 +17434,11 @@ var pw_value = match$0[1], username_value = match[1]; return [0, username_value, pw_value]; } - var _nJ_ = [0, [0, 0 === symbol$15(pw_field) ? 1 : 0, _i0_], 0]; + var _nK_ = [0, [0, 0 === symbol$15(pw_field) ? 1 : 0, _i0_], 0]; return record_undefined_elements (tp_loc$0, yojson, - [0, [0, 0 === symbol$15(username_field) ? 1 : 0, _i1_], _nJ_]); + [0, [0, 0 === symbol$15(username_field) ? 1 : 0, _i1_], _nK_]); } return record_list_instead_atom(tp_loc$0, yojson); } @@ -17513,12 +17513,12 @@ return [0, user_value, access_token_value, server_id_value]; } var - _nH_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _i4_], 0], - _nI_ = [0, [0, 0 === symbol$15(access_token_field) ? 1 : 0, _i5_], _nH_]; + _nI_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _i4_], 0], + _nJ_ = [0, [0, 0 === symbol$15(access_token_field) ? 1 : 0, _i5_], _nI_]; return record_undefined_elements (tp_loc$1, yojson, - [0, [0, 0 === symbol$15(user_field) ? 1 : 0, _i6_], _nI_]); + [0, [0, 0 === symbol$15(user_field) ? 1 : 0, _i6_], _nJ_]); } return record_list_instead_atom(tp_loc$1, yojson); } @@ -17607,105 +17607,105 @@ } function type_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _nD_ = yojson[2]; - if(! _nD_) return empty_list_invalid_sum(tp_loc$3, yojson); - var _nE_ = _nD_[1]; - if(typeof _nE_ !== "number"){ - var _nF_ = _nE_[1]; - if(-976970511 === _nF_){ + var _nE_ = yojson[2]; + if(! _nE_) return empty_list_invalid_sum(tp_loc$3, yojson); + var _nF_ = _nE_[1]; + if(typeof _nF_ !== "number"){ + var _nG_ = _nF_[1]; + if(-976970511 === _nG_){ var - _nG_ = _nE_[2], - switch$0 = caml_string_compare(_nG_, cst_MusicGenre); + _nH_ = _nF_[2], + switch$0 = caml_string_compare(_nH_, cst_MusicGenre); if(0 <= switch$0){ if(0 >= switch$0) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 18; - var switch$1 = caml_string_compare(_nG_, cst_Series); + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 18; + var switch$1 = caml_string_compare(_nH_, cst_Series); if(0 <= switch$1){ if(0 >= switch$1) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 28; - if(_nG_ === cst_Studio) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 29; - if(_nG_ === cst_Trailer) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 30; - if(_nG_ === cst_TvChannel) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 31; - if(_nG_ === cst_TvProgram) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 32; - if(_nG_ === cst_UserRootFolder) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 33; - if(_nG_ === cst_UserView) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 34; - if(_nG_ === cst_Video) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 35; - if(_nG_ === cst_Year) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 36; + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 28; + if(_nH_ === cst_Studio) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 29; + if(_nH_ === cst_Trailer) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 30; + if(_nH_ === cst_TvChannel) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 31; + if(_nH_ === cst_TvProgram) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 32; + if(_nH_ === cst_UserRootFolder) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 33; + if(_nH_ === cst_UserView) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 34; + if(_nH_ === cst_Video) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 35; + if(_nH_ === cst_Year) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 36; } else{ - if(_nG_ === cst_MusicVideo) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 19; - if(_nG_ === cst_Person) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 20; - if(_nG_ === cst_Photo) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 21; - if(_nG_ === cst_PhotoAlbum) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 22; - if(_nG_ === cst_Playlist) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 23; - if(_nG_ === cst_PlaylistsFolder) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 24; - if(_nG_ === cst_Program) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 25; - if(_nG_ === cst_Recording) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 26; - if(_nG_ === cst_Season) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 27; + if(_nH_ === cst_MusicVideo) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 19; + if(_nH_ === cst_Person) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 20; + if(_nH_ === cst_Photo) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 21; + if(_nH_ === cst_PhotoAlbum) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 22; + if(_nH_ === cst_Playlist) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 23; + if(_nH_ === cst_PlaylistsFolder) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 24; + if(_nH_ === cst_Program) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 25; + if(_nH_ === cst_Recording) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 26; + if(_nH_ === cst_Season) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 27; } } else{ - var switch$2 = caml_string_compare(_nG_, cst_Episode); + var switch$2 = caml_string_compare(_nH_, cst_Episode); if(0 <= switch$2){ if(0 >= switch$2) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 9; - if(_nG_ === cst_Folder) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 10; - if(_nG_ === cst_Genre) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 11; - if(_nG_ === cst_LiveTvChannel) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 12; - if(_nG_ === cst_LiveTvProgram) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 13; - if(_nG_ === cst_ManualPlaylistsFolder) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 14; - if(_nG_ === cst_Movie) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 15; - if(_nG_ === cst_MusicAlbum) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 16; - if(_nG_ === cst_MusicArtist) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 17; + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 9; + if(_nH_ === cst_Folder) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 10; + if(_nH_ === cst_Genre) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 11; + if(_nH_ === cst_LiveTvChannel) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 12; + if(_nH_ === cst_LiveTvProgram) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 13; + if(_nH_ === cst_ManualPlaylistsFolder) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 14; + if(_nH_ === cst_Movie) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 15; + if(_nH_ === cst_MusicAlbum) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 16; + if(_nH_ === cst_MusicArtist) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 17; } else{ - if(_nG_ === cst_AggregateFolder) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 0; - if(_nG_ === cst_Audio) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 1; - if(_nG_ === cst_AudioBook) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 2; - if(_nG_ === cst_BasePluginFolder) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 3; - if(_nG_ === cst_Book) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 4; - if(_nG_ === cst_BoxSet) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 5; - if(_nG_ === cst_Channel) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 6; - if(_nG_ === cst_ChannelFolderItem) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 7; - if(_nG_ === cst_CollectionFolder) - return _nD_[2] ? stag_no_args(tp_loc$3, yojson) : 8; + if(_nH_ === cst_AggregateFolder) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 0; + if(_nH_ === cst_Audio) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 1; + if(_nH_ === cst_AudioBook) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 2; + if(_nH_ === cst_BasePluginFolder) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 3; + if(_nH_ === cst_Book) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 4; + if(_nH_ === cst_BoxSet) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 5; + if(_nH_ === cst_Channel) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 6; + if(_nH_ === cst_ChannelFolderItem) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 7; + if(_nH_ === cst_CollectionFolder) + return _nE_[2] ? stag_no_args(tp_loc$3, yojson) : 8; } } } - else if(848054398 === _nF_) + else if(848054398 === _nG_) return nested_list_invalid_sum(tp_loc$3, yojson); } } @@ -17795,8 +17795,8 @@ function yojson_of_type_str(ts){ var match = yojson_of_type(ts); if(typeof match !== "number" && 848054398 === match[1]){ - var _nC_ = match[2]; - if(_nC_ && ! _nC_[2]){var json = _nC_[1]; return json;} + var _nD_ = match[2]; + if(_nD_ && ! _nD_[2]){var json = _nD_[1]; return json;} } throw caml_maybe_attach_backtrace([0, Assert_failure, _jL_], 1); } @@ -17948,15 +17948,15 @@ v$0]; } var - _ny_ = [0, [0, 0 === symbol$15(type_field) ? 1 : 0, _jM_], 0], - _nz_ = - [0, [0, 0 === symbol$15(image_blur_hashes_field) ? 1 : 0, _jN_], _ny_], - _nA_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _jO_], _nz_], - _nB_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _jP_], _nA_]; + _nz_ = [0, [0, 0 === symbol$15(type_field) ? 1 : 0, _jM_], 0], + _nA_ = + [0, [0, 0 === symbol$15(image_blur_hashes_field) ? 1 : 0, _jN_], _nz_], + _nB_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _jO_], _nA_], + _nC_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _jP_], _nB_]; return record_undefined_elements (tp_loc$4, yojson, - [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _jQ_], _nB_]); + [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _jQ_], _nC_]); } return record_list_instead_atom(tp_loc$4, yojson); } @@ -17978,7 +17978,7 @@ else var arg$8 = - function(_nx_){return yojson_of_option(yojson_of_string, _nx_);} + function(_ny_){return yojson_of_option(yojson_of_string, _ny_);} (v_collection_type), bnd$3 = [0, _j0_, arg$8], bnds$0 = [0, bnd$3, bnds]; @@ -18046,7 +18046,7 @@ base_path_segments = get_ok(path_segments(base_uri)), endpoint_path_segments = map$1 - (function(_nw_){return caml_jsstring_of_string(_nw_);}, + (function(_nx_){return caml_jsstring_of_string(_nx_);}, caml_call1(Q[6], path_params)), path_segments$0 = caml_equal(base_path_segments, [0, empty$1, 0]) @@ -18112,7 +18112,7 @@ var yojson = from_string$0(0, 0, 0, caml_string_of_jsstring(json)); - try{var _nv_ = caml_call1(Q[4], yojson); return _nv_;} + try{var _nw_ = caml_call1(Q[4], yojson); return _nw_;} catch(e$0){ var e = caml_wrap_exception(e$0); log([0, _j5_, [0, json, 0]]); @@ -18185,14 +18185,14 @@ return caml_call1(f, data); } var match$0 = message[1], v = match$0[2], e = match$0[1]; - function _nt_(f){return caml_call1(f, v);} - return function(_nu_){return iter(_nt_, _nu_);} + function _nu_(f){return caml_call1(f, v);} + return function(_nv_){return iter(_nu_, _nv_);} (find_all$0(listeners, tag_of(e))); }); return 0; } - var _nr_ = 0; - (function(_ns_){return listen(_nr_, message, on_message, _ns_);}(worker)); + var _ns_ = 0; + (function(_nt_){return listen(_ns_, message, on_message, _nt_);}(worker)); return [0, , , , query, listen$0]; } function Make_worker(W){ @@ -18216,16 +18216,16 @@ } return [0, Start_client, , Make_worker]; } - function _j6_(_nn_){ - var _no_ = Make$10(_nn_)[1]; + function _j6_(_no_){ + var _np_ = Make$10(_no_)[1]; return [0, - function(_np_){ - var _nq_ = _no_(_np_); - return [0, , _nq_[4], _nq_[5]]; + function(_nq_){ + var _nr_ = _np_(_nq_); + return [0, , _nr_[4], _nr_[5]]; }]; } function random(size){ - var tbl = init$0(size, function(_nm_){return _nm_;}); + var tbl = init$0(size, function(_nn_){return _nn_;}); shuffle$0(tbl); return [0, tbl]; } @@ -18237,10 +18237,10 @@ function of_string$3(param){ return param !== cst_date_added ? param !== cst_name ? 0 : 1 : 0; } - function req(kind, opt, _nl_, _nk_, param){ + function req(kind, opt, _nm_, _nl_, param){ if(opt) var sth = opt[1], src_views = sth; else var src_views = 0; - if(_nl_) var sth$0 = _nl_[1], sort = sth$0; else var sort = 0; - if(_nk_) var sth$1 = _nk_[1], filters = sth$1; else var filters = 0; + if(_nm_) var sth$0 = _nm_[1], sort = sth$0; else var sort = 0; + if(_nl_) var sth$1 = _nl_[1], filters = sth$1; else var filters = 0; return [0, kind, src_views, sort, filters]; } function t_to_jv(encoder, t){ @@ -18318,12 +18318,12 @@ return [0, date_added_value, views_value, sort_name_value]; } var - _ni_ = [0, [0, 0 === symbol$15(sort_name_field) ? 1 : 0, _j7_], 0], - _nj_ = [0, [0, 0 === symbol$15(views_field) ? 1 : 0, _j8_], _ni_]; + _nj_ = [0, [0, 0 === symbol$15(sort_name_field) ? 1 : 0, _j7_], 0], + _nk_ = [0, [0, 0 === symbol$15(views_field) ? 1 : 0, _j8_], _nj_]; return record_undefined_elements (tp_loc$5, yojson, - [0, [0, 0 === symbol$15(date_added_field) ? 1 : 0, _j9_], _nj_]); + [0, [0, 0 === symbol$15(date_added_field) ? 1 : 0, _j9_], _nk_]); } return record_list_instead_atom(tp_loc$5, yojson); } @@ -18388,11 +18388,11 @@ var item_value = match$0[1], sorts_value = match[1]; return [0, sorts_value, item_value]; } - var _nh_ = [0, [0, 0 === symbol$15(item_field) ? 1 : 0, _kb_], 0]; + var _ni_ = [0, [0, 0 === symbol$15(item_field) ? 1 : 0, _kb_], 0]; return record_undefined_elements (tp_loc$6, yojson, - [0, [0, 0 === symbol$15(sorts_field) ? 1 : 0, _kc_], _nh_]); + [0, [0, 0 === symbol$15(sorts_field) ? 1 : 0, _kc_], _ni_]); } return record_list_instead_atom(tp_loc$6, yojson); } @@ -18442,8 +18442,8 @@ var match = caml_js_to_array(j), len = match.length - 1; if(2 !== len) throw caml_maybe_attach_backtrace([0, Assert_failure, _kk_], 1); - var type = match[1], views = match[2], _ng_ = to_list$1(value$0, views); - return [0, value$0(type), _ng_]; + var type = match[1], views = match[2], _nh_ = to_list$1(value$0, views); + return [0, value$0(type), _nh_]; } var path$3 = [1, [0, _km_, _kl_]]; function to_jv$4(t){ @@ -18456,8 +18456,8 @@ var collection_type = match[1], sort_name = match[2], - _nf_ = value$0(sort_name); - return [0, value$0(collection_type), _nf_]; + _ng_ = value$0(sort_name); + return [0, value$0(collection_type), _ng_]; } var path$4 = [1, [0, _kq_, _kp_]]; function to_jv$5(t){return t_to_jv(yojson_of_t$0, t);} @@ -18466,23 +18466,23 @@ var _kr_ = [0, [0, path$0, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _ks_(_nd_, _ne_){return _fa_(undef, _nd_, _ne_);} - (function(_nc_){return _ks_(_kr_, _nc_);}([0, path$1, to_jv$1, of_jv$1])); + function _ks_(_ne_, _nf_){return _fa_(undef, _ne_, _nf_);} + (function(_nd_){return _ks_(_kr_, _nd_);}([0, path$1, to_jv$1, of_jv$1])); var _kt_ = [0, [0, path$0, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _ku_(_na_, _nb_){return _fa_(undef, _na_, _nb_);} - (function(_m$_){return _ku_(_kt_, _m$_);}([0, path$3, to_jv$3, of_jv$3])); + function _ku_(_nb_, _nc_){return _fa_(undef, _nb_, _nc_);} + (function(_na_){return _ku_(_kt_, _na_);}([0, path$3, to_jv$3, of_jv$3])); var _kv_ = [0, [0, path$0, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _kw_(_m9_, _m__){return _fa_(undef, _m9_, _m__);} - (function(_m8_){return _kw_(_kv_, _m8_);}([0, path$2, to_jv$2, of_jv$2])); + function _kw_(_m__, _m$_){return _fa_(undef, _m__, _m$_);} + (function(_m9_){return _kw_(_kv_, _m9_);}([0, path$2, to_jv$2, of_jv$2])); var _kx_ = [0, [0, path$0, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _ky_(_m6_, _m7_){return _fa_(undef, _m6_, _m7_);} - (function(_m5_){return _ky_(_kx_, _m5_);}([0, path$4, to_jv$4, of_jv$4])); + function _ky_(_m7_, _m8_){return _fa_(undef, _m7_, _m8_);} + (function(_m6_){return _ky_(_kx_, _m6_);}([0, path$4, to_jv$4, of_jv$4])); function status_to_string(param){ if(typeof param === "number") switch(param){ @@ -18516,12 +18516,12 @@ sync_progress = param[2], status = param[1], status$0 = status_to_string(status), - _m2_ = 0; + _m3_ = 0; return caml_call3 (fprintf$0(fmt)(_kF_), status$0, - function(_m3_, _m4_){ - return pp_print_option(_m2_, pp_progress, _m3_, _m4_); + function(_m4_, _m5_){ + return pp_print_option(_m3_, pp_progress, _m4_, _m5_); }, sync_progress); } @@ -18530,11 +18530,11 @@ include$1 = _j6_(Queries), Start_client = include$1[1], _kG_ = [0, compare$0]; - function MMap(_m1_){return _e2_(_kG_, _m1_);} + function MMap(_m2_){return _e2_(_kG_, _m2_);} MMap([0, compare$2]); var active_layout = var$0(0), active = var$0(0); function get$7(lang, string){ - return function(_m0_){return value(_m0_, string);} + return function(_m1_){return value(_m1_, string);} (assoc_opt([0, lang, string], strings)); } var Config = [0, active, get$7], set$1 = make$6(Config)[1]; @@ -18561,8 +18561,8 @@ }); function update$1(opt, var$0, next){ if(opt) var sth = opt[1], eq = sth; else var eq = poly; - var current = peek(var$0), _mZ_ = 1 - caml_call2(eq, current, next); - return _mZ_ ? symbol$1(var$0, next) : _mZ_; + var current = peek(var$0), _m0_ = 1 - caml_call2(eq, current, next); + return _m0_ ? symbol$1(var$0, next) : _m0_; } var memo = create$2(0, 64); function get_view_item_count(v){ @@ -18595,21 +18595,21 @@ report = param[2], id = param[1], previous_status = peek(status), - _mV_ = symbol$0(server_id, id); - if(_mV_){ + _mW_ = symbol$0(server_id, id); + if(_mW_){ symbol$1(status, report); - var _mW_ = previous_status[2], _mX_ = report[2]; - if(_mW_){ - var remaining = _mW_[1][2]; - if(! _mX_) return symbol$1(refresh, 0); - var remaining$0 = _mX_[1][2]; + var _mX_ = previous_status[2], _mY_ = report[2]; + if(_mX_){ + var remaining = _mX_[1][2]; + if(! _mY_) return symbol$1(refresh, 0); + var remaining$0 = _mY_[1][2]; if(symbol$4(remaining, remaining$0)) return symbol$1(refresh, 0); } - var _mY_ = 0; + var _mZ_ = 0; } else - var _mY_ = _mV_; - return _mY_; + var _mZ_ = _mW_; + return _mZ_; }); query([1, [0, [0, server_id, connexion], 0]]); return; @@ -18666,12 +18666,12 @@ return create$8(0, 0, 0, Connect_form) (function(t){ log([0, _kT_, [0, t, 0]]); - var _mT_ = t[1]; + var _mU_ = t[1]; a: - if(typeof _mT_ !== "number" && 1 !== _mT_[0]){ - var _mU_ = t[2], url = _mT_[1]; - if(typeof _mU_ !== "number" && 1 !== _mU_[0]){ - var username = _mU_[1], match = t[3]; + if(typeof _mU_ !== "number" && 1 !== _mU_[0]){ + var _mV_ = t[2], url = _mU_[1]; + if(typeof _mV_ !== "number" && 1 !== _mV_[0]){ + var username = _mV_[1], match = t[3]; if(typeof match !== "number" && 1 !== match[0]){ var password = match[1]; log([0, _kW_, [0, url, [0, username, 0]]]); @@ -18708,7 +18708,7 @@ } function fut_to_lwd(init, f){ var v = var$0(init); - await$1(f, function(_mS_){return symbol$1(v, _mS_);}); + await$1(f, function(_mT_){return symbol$1(v, _mT_);}); return get$1(v); } function seq_share(cmp, prev, next){ @@ -18764,16 +18764,16 @@ bind (get$1(refresh), function(param){ - function _mJ_(_mR_){return get_or(_mR_, 0);} - function _mK_(l){log([0, _k1_, [0, l, 0]]); return l;} + function _mK_(_mS_){return get_or(_mS_, 0);} + function _mL_(l){log([0, _k1_, [0, l, 0]]); return l;} var - _mL_ = - function(_mO_){return map$4(of_list$0, _mO_);} - (function(_mP_){return map$4(_mK_, _mP_);} - (function(_mQ_){return map$4(_mJ_, _mQ_);} + _mM_ = + function(_mP_){return map$4(of_list$0, _mP_);} + (function(_mQ_){return map$4(_mL_, _mQ_);} + (function(_mR_){return map$4(_mK_, _mR_);} (query([4, server_id])))), - _mM_ = value$3(previous_value[1], empty$0); - return function(_mN_){return fut_to_lwd(_mM_, _mN_);}(_mL_); + _mN_ = value$3(previous_value[1], empty$0); + return function(_mO_){return fut_to_lwd(_mN_, _mO_);}(_mM_); }), views = func @@ -18805,13 +18805,13 @@ ? element(div$1(0, 0, 0, 0, [0, [0, 82, ui_form(0)], 0])) : empty$0; }), - _mI_ = [0, [0, 83, lift(statuses)], 0]; - return div$1(0, 0, 0, 0, [0, [0, 83, lift(ui_form$0)], _mI_]); + _mJ_ = [0, [0, 83, lift(statuses)], 0]; + return div$1(0, 0, 0, 0, [0, [0, 83, lift(ui_form$0)], _mJ_]); } var _k2_ = var$0(0), _k3_ = var$0(0), now_playing = var$0(0); function audio_url(server, item_id){ - var _mG_ = server[2][2], _mH_ = server[1]; - return caml_call3(sprintf(_k4_), _mH_, item_id, _mG_); + var _mH_ = server[2][2], _mI_ = server[1]; + return caml_call3(sprintf(_k4_), _mI_, item_id, _mH_); } function Playback_controller(P){ function set_play_url(playlist, current_index){ @@ -18823,10 +18823,10 @@ function(result){ var len = result.length - 1; if(1 === len){ - var _mE_ = result[1]; - if(_mE_){ + var _mF_ = result[1]; + if(_mF_){ var - item = _mE_[1][2], + item = _mF_[1][2], server_id = item[7], album_id = item[5], id = item[3], @@ -18838,8 +18838,8 @@ var session = of_navigator(navigator), image_id = value$3(album_id, id), - _mF_ = connexion[1], - img_src = caml_call2(sprintf(_k6_), _mF_, image_id), + _mG_ = connexion[1], + img_src = caml_call2(sprintf(_k6_), _mG_, image_id), artwork = [0, [0, img_src, _k8_, _k7_], 0]; set_metadata(session, [0, name, artist, album, artwork]); return [0, item, url]; @@ -18856,9 +18856,9 @@ } function make(param){ var - _mu_ = [0, v$1("preload", "auto"), 0], - _mv_ = [0, v$1("autoplay", cst_true), _mu_], - audio_elt = audio$0(0, [0, [0, v$1("controls", cst_true), _mv_]], 0); + _mv_ = [0, v$1("preload", "auto"), 0], + _mw_ = [0, v$1("autoplay", cst_true), _mv_], + audio_elt = audio$0(0, [0, [0, v$1("controls", cst_true), _mw_]], 0); function set_src(url){ return set_at(cst_src, [0, caml_jsstring_of_string(url)], audio_elt); } @@ -18892,8 +18892,8 @@ function set_position_state$0(param){ var duration = prop(float$0(cst_duration), audio_elt), - _mD_ = 1 - is_nan(duration); - if(! _mD_) return _mD_; + _mE_ = 1 - is_nan(duration); + if(! _mE_) return _mE_; var playback_rate = prop(float$0(cst_playbackRate), audio_elt), position = prop(float$0("currentTime"), audio_elt); @@ -18929,23 +18929,23 @@ image_id = value$3(album_id, id), servers = to_list$0(peek(connexions)), connexion = assq(server_id, servers), - _mC_ = connexion[1], - src = caml_call2(sprintf(_k$_), _mC_, image_id); + _mD_ = connexion[1], + src = caml_call2(sprintf(_k$_), _mD_, image_id); else var src = _lb_; return caml_call1(sprintf(_la_), src); }), - _mw_ = [0, 82, style$0], + _mx_ = [0, 82, style$0], at = - function(_mB_){return add$1(style, _mw_, _mB_);} + function(_mC_){return add$1(style, _mx_, _mC_);} (add$1(class$0, _lc_, 0)), on_click = handler (0, click, function(param){ - var _mz_ = peek(active_layout) ? 0 : 1; - return function(_mA_){return symbol$1(active_layout, _mA_);}(_mz_); + var _mA_ = peek(active_layout) ? 0 : 1; + return function(_mB_){return symbol$1(active_layout, _mB_);}(_mA_); }), track_cover = div$1(0, [0, at], [0, [0, [0, 80, on_click], 0]], 0, 0), at$0 = add$1(class$0, _ld_, 0), @@ -18960,7 +18960,7 @@ title = span$1(0, 0, 0, 0, [0, [0, 82, txt$0], 0]), track_details = div$1(0, [0, at$0], 0, 0, [0, [0, 82, title], 0]), at$1 = - function(_my_){return add$1(class$0, _lg_, _my_);} + function(_mz_){return add$1(class$0, _lg_, _mz_);} (add$1(class$0, _lf_, 0)), now_playing$0 = div$1 @@ -18970,7 +18970,7 @@ 0, [0, [0, 82, track_cover], [0, [0, 82, track_details], 0]]), at$2 = - function(_mx_){return add$1(class$0, _li_, _mx_);} + function(_my_){return add$1(class$0, _li_, _my_);} (add$1(class$0, _lh_, 0)); return div$1 (0, @@ -18988,46 +18988,46 @@ function make$12(on_click){ var on_click$0 = handler$0(0, click, on_click), - _mq_ = [0, at], - _mr_ = [0, [0, [0, 80, on_click$0], 0]]; - return function(_mt_, _ms_){ - return caml_call1(two_state([0, base])(_mt_, _ms_, _mq_), _mr_);}; + _mr_ = [0, at], + _ms_ = [0, [0, [0, 80, on_click$0], 0]]; + return function(_mu_, _mt_){ + return caml_call1(two_state([0, base])(_mu_, _mt_, _mr_), _ms_);}; } classes(_lm_); function columns(param){ var - _ml_ = - function(_mp_){return v$7(_lp_, _lo_, _mp_);} - ([0, [0, 80, txt(0, _ln_)], 0]), _mm_ = - function(_mo_){return v$7(_ls_, _lr_, _mo_);} + function(_mq_){return v$7(_lp_, _lo_, _mq_);} + ([0, [0, 80, txt(0, _ln_)], 0]), + _mn_ = + function(_mp_){return v$7(_ls_, _lr_, _mp_);} ([0, [0, 80, txt(0, _lq_)], 0]); return [0, - function(_mn_){return v$7(_lv_, _lu_, _mn_);} + function(_mo_){return v$7(_lv_, _lu_, _mo_);} ([0, [0, 80, txt(0, _lt_)], 0]), - _mm_, - _ml_]; + _mn_, + _mm_]; } function make$13(reset_playlist, fetch, scroll_target, view){ var - _ma_ = view[4], + _mb_ = view[4], ranged = map2 (to_view(view), - _ma_, + _mb_, function(view, order){return [0, view, 0, 0, order];}); function img_url(server_id, item_id){ var servers = to_list$0(peek(connexions)); try{ var connexion = assq(server_id, servers), - _mi_ = connexion[1], - _mj_ = caml_call2(sprintf(_lx_), _mi_, item_id), - url = _mj_; + _mj_ = connexion[1], + _mk_ = caml_call2(sprintf(_lx_), _mj_, item_id), + url = _mk_; } - catch(_mk_){ - var _mh_ = caml_wrap_exception(_mk_); - if(_mh_ !== Not_found) throw caml_maybe_attach_backtrace(_mh_, 0); + catch(_ml_){ + var _mi_ = caml_wrap_exception(_ml_); + if(_mi_ !== Not_found) throw caml_maybe_attach_backtrace(_mi_, 0); var url = _lw_; } return src$0(caml_jsstring_of_string(url)); @@ -19044,11 +19044,11 @@ return func (ranged, function(ranged, param){ - var _mg_ = ranged[1]; + var _mh_ = ranged[1]; caml_call1 (reset_playlist, [0, - [0, _mg_[1], ranged[1][2] + start_index | 0, _mg_[3]], + [0, _mh_[1], ranged[1][2] + start_index | 0, _mh_[3]], ranged[2], ranged[3], ranged[4]]); @@ -19063,8 +19063,8 @@ if(image_blur_hashes[1] && album_id){ var id$0 = album_id[1], - _md_ = return$0(img_url(server_id, id$0)), - img_url$0 = _md_; + _me_ = return$0(img_url(server_id, id$0)), + img_url$0 = _me_; break a; } var img_url$0 = return$0(src$0(cst_track_png)); @@ -19077,14 +19077,14 @@ if(param){ var item_id = param[1][1][3]; if(symbol$0(item_id, id)){ - var _mf_ = [0, txt(0, _ly_), 0]; - return div$0(0, [0, [0, class$1("playing"), 0]], _mf_); + var _mg_ = [0, txt(0, _ly_), 0]; + return div$0(0, [0, [0, class$1("playing"), 0]], _mg_); } } return div$0 (0, 0, [0, txt(0, string_of_int(start_index + 1 | 0)), 0]); }), - _me_ = + _mf_ = [0, [0, 80, div$0(0, 0, [0, span$0(0, 0, [0, txt(0, name), 0]), 0])], 0]; @@ -19108,7 +19108,7 @@ 0, 0)], 0])], - _me_]]; + _mf_]]; } function placeholder(i){return 0;} var @@ -19116,7 +19116,7 @@ total_items = view[2], fetch$0 = func(ranged, function(ranged, i){return caml_call2(fetch, ranged, i);}), - render$0 = pure(function(_mb_, _mc_){return render(ranged, _mb_, _mc_);}), + render$0 = pure(function(_mc_, _md_){return render(ranged, _mc_, _md_);}), data_source = [0, total_items, fetch$0, render$0]; return make$11(ui_table, [0, placeholder], scroll_target)(data_source); } @@ -19134,7 +19134,7 @@ return query([6, ranged_view[1], ranged_view[4], i]); } var P = Playback_controller([0, fetch$1]), playlist = var$1(_lB_, 0); - function on_click(param, _l$_){ + function on_click(param, _ma_){ symbol$1(playlist, peek(playlist) + 1 | 0); set$1(1); return 1; @@ -19177,16 +19177,16 @@ var l = param[2]; return map$3 (function(l){ - var _l__ = [0, [0, 80, txt(0, l[2][1])], 0]; - return [0, l[2][3], _l__, 1]; + var _l$_ = [0, [0, 80, txt(0, l[2][1])], 0]; + return [0, l[2][3], _l$_, 1]; }, l); }, [0, return$0(empty$0), - function(_l5_){ - function _l6_(_l8_, _l9_){return map2(_l5_, _l8_, _l9_);} - return function(_l7_){return _l6_(_l7_, concat$0);}; + function(_l6_){ + function _l7_(_l9_, _l__){return map2(_l6_, _l9_, _l__);} + return function(_l8_){return _l7_(_l8_, concat$0);}; }], servers_libraries), f_libraries = make$10([0, _lL_, join(choices)]), @@ -19209,8 +19209,8 @@ var s = param[1], filters = symbol$10(function(s){return [0, [0, s], 0];}, t), - _l4_ = [0, _ea_(s), 0]; - log([0, _lN_, [0, of_option(_ea_(_lM_), _ea_, t), _l4_]]); + _l5_ = [0, _ea_(s), 0]; + log([0, _lN_, [0, of_option(_ea_(_lM_), _ea_, t), _l5_]]); var sort = of_string$3(s), new_view = req(0, [0, [0, to_list$0(l)]], [0, sort], filters, 0); @@ -19246,10 +19246,10 @@ if(! param) return span$1(0, 0, 0, 0, [0, [0, 80, txt(0, _lO_)], 0]); var playlist = param[1], - _l1_ = pure(playlist[4]), - _l2_ = pure(playlist[1][2]), - _l3_ = pure(playlist[1][3]), - view = [0, pure(playlist[1][1]), _l3_, _l2_, _l1_]; + _l2_ = pure(playlist[4]), + _l3_ = pure(playlist[1][2]), + _l4_ = pure(playlist[1][3]), + view = [0, pure(playlist[1][1]), _l4_, _l3_, _l2_]; return make_now_playing(P[2], fetch$1, view); }), now_playing$0 = join(playlist$0), @@ -19270,8 +19270,8 @@ image_id = value$3(album_id, id), servers = to_list$0(peek(connexions)), connexion = assq(server_id, servers), - _l0_ = connexion[1], - src = caml_call2(sprintf(_lP_), _l0_, image_id); + _l1_ = connexion[1], + src = caml_call2(sprintf(_lP_), _l1_, image_id); else var src = _lR_; return style$0 @@ -19297,37 +19297,36 @@ [0, [0, 82, now_playing$0], 0])], [0, [0, 82, player_ui], 0]], _lT_ = + [0, + [0, 82, big_cover], + [0, + [0, 82, filters], + [0, [0, 82, div$1(0, 0, 0, 0, [0, [0, 82, main_list], 0])], 0]]], + _lU_ = [0, [0, 82, status], [0, [0, 82, - div$1 - (0, - [0, [0, [0, 80, class$1("item-list")], 0]], - 0, - 0, - [0, - [0, 82, big_cover], - [0, [0, 82, filters], [0, [0, 82, main_list], 0]]])], + div$1(0, [0, [0, [0, 80, class$1("item-list")], 0]], 0, 0, _lT_)], _lS_]], app = div$1 (0, - [0, function(_lZ_){return to_at$0(_lU_, _lZ_);}(classes(0))], + [0, function(_l0_){return to_at$0(_lV_, _l0_);}(classes(0))], 0, 0, - _lT_), + _lU_), is_storage_persistent = persist(manager(navigator)); function on_load(param){ - log([0, _lV_, [0, is_storage_persistent, 0]]); + log([0, _lW_, [0, is_storage_persistent, 0]]); var app$0 = observe(0, app); function on_invalidate(param){ request_animation_frame(function(param){quick_sample(app$0); return 0;}); return 0; } - var _lY_ = [0, quick_sample(app$0), 0]; - append_children(body(global_document), _lY_); + var _lZ_ = [0, quick_sample(app$0), 0]; + append_children(body(global_document), _lZ_); return set_on_invalidate(app$0, on_invalidate); } listen(0, dom_content_loaded, on_load, as_target(window)); @@ -19336,4 +19335,4 @@ } (globalThis)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtYWluLmJjLmpzIiwic291cmNlUm9vdCI6IiIsIm5hbWVzIjpbImNhbWxfYXJyYXlfYmxpdCIsImExIiwiaTEiLCJhMiIsImkyIiwibGVuIiwiaiIsImNhbWxfYXJyYXlfc3ViIiwiYSIsImkiLCJBcnJheSIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImYiLCJTdHJpbmciLCJudWxsIiwicyIsIk1hdGgiLCJjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkiLCJVaW50OEFycmF5IiwiYiIsImwiLCJjYW1sX2JsaXRfYnl0ZXMiLCJzMSIsInMyIiwiYzEiLCJjMiIsImNhbWxfc3RyX3JlcGVhdCIsIm4iLCJyIiwiY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyIsImpzb29faXNfYXNjaWkiLCJjYW1sX3V0ZjE2X29mX3V0ZjgiLCJ0IiwiYyIsInYiLCJNbEJ5dGVzIiwidGFnIiwiY29udGVudHMiLCJsZW5ndGgiLCJ0aGlzIiwiY29udGVudCIsImNhbWxfYnl0ZXNfb2ZfanNieXRlcyIsImNhbWxfanNieXRlc19vZl9zdHJpbmciLCJ4IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2JsaXRfc3RyaW5nIiwiZCIsImUiLCJqc29vX3N5c19nZXRlbnYiLCJwcm9jZXNzIiwiZ2xvYmFsVGhpcyIsInVuZGVmaW5lZCIsImNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnIiwiY2FtbF9nbG9iYWxfZGF0YSIsImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlIiwiZXhuIiwiZm9yY2UiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3JhaXNlX3dpdGhfYXJnIiwiYXJnIiwiY2FtbF9zdHJpbmdfb2ZfanNieXRlcyIsImNhbWxfcmFpc2Vfd2l0aF9zdHJpbmciLCJtc2ciLCJjYW1sX2ludmFsaWRfYXJndW1lbnQiLCJjYW1sX2J5dGVzX2JvdW5kX2Vycm9yIiwiY2FtbF9ieXRlc191bnNhZmVfc2V0IiwiY2FtbF9ieXRlc19zZXQiLCJjYW1sX2J5dGVzX3Vuc2FmZV9nZXQiLCJjYW1sX2NhbGxfZ2VuIiwiYXJncyIsImFyZ3NMZW4iLCJnIiwibmFyZ3MiLCJ5IiwiZXh0cmFfYXJncyIsImFyZ3VtZW50cyIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX2NoZWNrX2JvdW5kIiwiYXJyYXkiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwib2ZzIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2VxdWFsIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJtIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJwIiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJjYW1sX2N1cnJlbnRfZGlyIiwiY2FtbF9tYWtlX3BhdGgiLCJjb21wMCIsIm5jb21wIiwiY2FtbF91dGY4X29mX3V0ZjE2IiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJ1bml4X2Vycm9yIiwibWFrZV91bml4X2Vycl9hcmdzIiwiY29kZSIsInN5c2NhbGwiLCJlcnJubyIsInZhcmlhbnQiLCJjYW1sX25hbWVkX3ZhbHVlcyIsImNhbWxfbmFtZWRfdmFsdWUiLCJubSIsImNhbWxfcmFpc2Vfd2l0aF9hcmdzIiwiY2FtbF9ieXRlc19vZl9hcnJheSIsImNhbWxfcmFpc2Vfc3lzX2Vycm9yIiwiY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUiLCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZUZkIiwiZmlsZSIsImZsYWdzIiwiTWxGYWtlRGV2aWNlIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsImVudHJ5Iiwib2siLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyIsIk1sTm9kZUZkIiwiZmQiLCJyZXF1aXJlIiwiZXJyIiwiYnVmX29mZnNldCIsInJlYWQiLCJNbE5vZGVEZXZpY2UiLCJjb25zdHMiLCJrZXkiLCJpc0NoYXJhY3RlckRldmljZSIsIm8iLCJqc19zdGF0cyIsInRvX2RpciIsInRhcmdldCIsImxpbmsiLCJmaWxlX2tpbmQiLCJjYW1sX2dldF9yb290IiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9jcmVhdGVfZmlsZSIsImpzb29fY3JlYXRlX2ZpbGUiLCJjYW1sX2ZzX2luaXQiLCJ0bXAiLCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2hfbWl4X2pzYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyIiwiY2FtbF9tbF9ieXRlc19jb250ZW50IiwiY2FtbF9oYXNoX21peF9ieXRlcyIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2hhc2giLCJjb3VudCIsImxpbWl0Iiwic2VlZCIsIm9iaiIsInF1ZXVlIiwicmQiLCJ3ciIsImhoIiwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQiLCJzdHlsZSIsImV4cF9zaWduIiwic2lnbl9zdHIiLCJjc3QiLCJ4X3N0ciIsImlkeCIsImNhbWxfaW50NjRfaXNfemVybyIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSIsImNhbWxfaW50NjRfbmVnIiwiY2FtbF9pbnQ2NF9mb3JtYXQiLCJ3YmFzZSIsImN2dGJsIiwiY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIiwiYmFzZSIsImNhbWxfcGFyc2VfZGlnaXQiLCJjYW1sX2ludF9vZl9zdHJpbmciLCJ0aHJlc2hvbGQiLCJjYW1sX2pzX2Zyb21fYXJyYXkiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfanNfbmV3IiwiRiIsImNhbWxfanNfb2JqZWN0IiwiY2FtbF9qc190b19hcnJheSIsImNhbWxfY2FsbGJhY2siLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IiwiYXJpdHkiLCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbGV4X2FycmF5IiwiY2FtbF9sZXhfZW5naW5lIiwidGJsIiwic3RhcnRfc3RhdGUiLCJsZXhidWYiLCJsZXhfYnVmZmVyIiwibGV4X2J1ZmZlcl9sZW4iLCJsZXhfc3RhcnRfcG9zIiwibGV4X2N1cnJfcG9zIiwibGV4X2xhc3RfcG9zIiwibGV4X2xhc3RfYWN0aW9uIiwibGV4X2VvZl9yZWFjaGVkIiwibGV4X2Jhc2UiLCJsZXhfYmFja3RyayIsImxleF9kZWZhdWx0IiwibGV4X3RyYW5zIiwibGV4X2NoZWNrIiwic3RhdGUiLCJiYWNrdHJrIiwiY2FtbF9saXN0X29mX2pzX2FycmF5IiwiY2FtbF9saXN0X3RvX2pzX2FycmF5IiwiY2FtbF9tYWtlX3ZlY3QiLCJpbml0IiwiY2FtbF9NRDVJbml0IiwiQXJyYXlCdWZmZXIiLCJiMzIiLCJVaW50MzJBcnJheSIsImI4IiwiY2FtbF9NRDVUcmFuc2Zvcm0iLCJhZGQiLCJ4eCIsImZmIiwiZ2ciLCJpaSIsImNhbWxfTUQ1VXBkYXRlIiwiY3R4IiwiaW5wdXQiLCJpbnB1dF9sZW4iLCJpbl9idWYiLCJpbnB1dF9wb3MiLCJtaXNzaW5nIiwiY2FtbF9NRDVGaW5hbCIsImNhbWxfc3RyaW5nX29mX2FycmF5IiwiY2FtbF9tZDVfYnl0ZXMiLCJjYW1sX21kNV9zdHJpbmciLCJjYW1sX3N5c19mZHMiLCJjYW1sX3N5c19jbG9zZSIsImNhbWxfbWxfY2hhbm5lbHMiLCJjYW1sX21sX2NoYW5uZWxfZ2V0IiwiaWQiLCJjYW1sX21sX2ZsdXNoIiwiY2hhbmlkIiwiY2hhbiIsImNhbWxfbWxfY2xvc2VfY2hhbm5lbCIsImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMiLCJjYW1sX3JlZmlsbCIsInN0ciIsInN0cl9hIiwibnJlYWQiLCJjYW1sX21sX2lucHV0X2Jsb2NrIiwiYXZhaWwiLCJjYW1sX21sX2lucHV0IiwiY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZSIsImZzIiwiZmQyIiwiTWxGYWtlRmRfb3V0IiwiY29uc29sZSIsInNyYyIsImNhbWxfc3lzX29wZW5faW50ZXJuYWwiLCJjYW1sX3N5c19vcGVuIiwiX3Blcm1zIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4iLCJyZWZpbGwiLCJjaGFubmVsIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IiwiYnVmZmVyZWQiLCJjYW1sX21sX291dF9jaGFubmVsc19saXN0IiwiY2FtbF9tbF9vdXRwdXRfdGEiLCJjYW1sX21sX291dHB1dF9ieXRlcyIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfY2hhciIsImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZSIsImNhbWxfbW9kIiwiY2FtbF9ub3RlcXVhbCIsImNhbWxfb2JqX21ha2VfZm9yd2FyZCIsImNhbWxfb2JqX3RhZyIsIkZ1bmN0aW9uIiwiY2FtbF9idWlsZF9zeW1ib2xzIiwic3ltYiIsImNhbWxfcmVnaXN0ZXJfZ2xvYmFsIiwibmFtZV9vcHQiLCJuaWQiLCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIiwiY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX2NvbnN0X21heF93b3NpemUiLCJjYW1sX3JhaXNlX25vdF9mb3VuZCIsImNhbWxfc3lzX2dldGVudiIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwibm93IiwiRGF0ZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3VwZGF0ZV9kdW1teSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uIiwiY2FtbF9mb3JtYXRfZXhjZXB0aW9uIiwiYnVja2V0Iiwic3RhcnQiLCJjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImhhbmRsZXIiLCJhdF9leGl0IiwiY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsIm9yaWdpbiIsImV2ZW50IiwiemVyb19wb3MiLCJsb2NmbXQiLCJlbXB0eSQyIiwiZW1wdHkkMyIsIm9jYW1sX2xleF90YWJsZXMiLCJ0cF9sb2MiLCJ0cF9sb2MkMCIsInRwX2xvYyQxIiwidHBfbG9jJDIiLCJ0cF9sb2MkMyIsInRwX2xvYyQ0IiwidHBfbG9jJDUiLCJ0cF9sb2MkNiIsInBhdGgkMSIsInBhdGgkMiIsIm5hbWUkNiIsImluaXRpYWxfcmVwb3J0Iiwic3RyaW5ncyIsInVybCQwIiwiZGVmYXVsdCQxIiwiYWxidW0iLCJhcnRpc3QiLCJlcmFzZV9yZWwiLCJyZXN0IiwicmVzdCQwIiwicmVzdCQxIiwicmVzdCQyIiwicmVzdCQzIiwicmVzdCQ0IiwicmVzdCQ1IiwicmVzdCQ2IiwicmVzdCQ3IiwidHkiLCJyZXN0JDgiLCJ0eTEiLCJyZXN0JDkiLCJyZXN0JDEwIiwicmVzdCQxMSIsInJlc3QkMTIiLCJyZXN0JDEzIiwiY29uY2F0X2ZtdHR5IiwiZm10dHkxIiwiZm10dHkyIiwidHkyIiwiY29uY2F0X2ZtdCIsImZtdDEiLCJmbXQyIiwicGFkIiwicGFkJDAiLCJwYWQkMSIsImljb252IiwicHJlYyQwIiwicGFkJDIiLCJpY29udiQwIiwicHJlYyQxIiwicGFkJDMiLCJpY29udiQxIiwicHJlYyQyIiwicGFkJDQiLCJpY29udiQyIiwicHJlYyQzIiwicGFkJDUiLCJmY29udiIsInBhZCQ2IiwiY2hyIiwiZm10dHkiLCJwYWQkNyIsImZtdHR5JDAiLCJwYWQkOCIsInJlc3QkMTQiLCJyZXN0JDE1IiwicmVzdCQxNiIsImZtdGluZ19saXQiLCJyZXN0JDE3IiwiZm10aW5nX2dlbiIsInJlc3QkMTgiLCJyZXN0JDE5IiwiY2hhcl9zZXQiLCJ3aWR0aF9vcHQiLCJyZXN0JDIwIiwiY291bnRlciIsInJlc3QkMjEiLCJyZXN0JDIyIiwiaWduIiwicmVzdCQyMyIsImN1ciIsImZhaWx3aXRoIiwiaW52YWxpZF9hcmciLCJhYnMiLCJsbm90IiwibWF4X2ludCIsImNoYXJfb2ZfaW50Iiwic3RyaW5nX29mX2Jvb2wiLCJzdHJpbmdfb2ZfaW50IiwidmFsaWRfZmxvYXRfbGV4ZW0iLCJsb29wIiwiaSQwIiwiaSQxIiwic3RyaW5nX29mX2Zsb2F0Iiwic3ltYm9sIiwibDEiLCJsMiIsInRsIiwiaGQiLCJzdGRvdXQiLCJzdGRlcnIiLCJvcGVuX291dF9nZW4iLCJwZXJtIiwib3Blbl9vdXQiLCJmbHVzaF9hbGwiLCJpdGVyIiwib3V0cHV0X3N0cmluZyIsIm9jIiwib3V0cHV0X3N1YnN0cmluZyIsImNsb3NlX291dCIsIm9wZW5faW5fZ2VuIiwib3Blbl9pbiIsImljIiwicHJlcnJfZW5kbGluZSIsImV4aXRfZnVuY3Rpb24iLCJmX3lldF90b19ydW4iLCJvbGRfZXhpdCIsImZfeWV0X3RvX3J1biQwIiwib2xkX2V4aXQkMCIsIm5ld19leGl0Iiwic3VjY2VzcyIsImRvX2F0X2V4aXQiLCJpc19ibG9jayIsInJhaXNlX3VuZGVmaW5lZCIsImZvcmNlX2xhenlfYmxvY2siLCJibGsiLCJjbG9zdXJlIiwiZSQwIiwiZnJvbV92YWwiLCJ2YWx1ZSIsImRlZmF1bHQkMCIsImdldCQwIiwibWFwIiwiaXNfc29tZSIsImdldF9vayIsIm1hcCQwIiwib2ZfaW50X2V4biIsInMkMCIsImxlbmd0aF9hdXgiLCJsZW4kMCIsImNvbnMiLCJyZXZfYXBwZW5kIiwibDEkMCIsImwyJDAiLCJsMSQxIiwibDIkMSIsInJldiIsImluaXRfdGFpbHJlY19hdXgiLCJhY2MiLCJhY2MkMCIsImFjYyQxIiwiaW5pdF9hdXgiLCJybWFwX2YiLCJhY2N1JDAiLCJhY2N1IiwibCQwIiwibCQxIiwiYWNjdSQxIiwiZmluZCIsImF1eCIsInBhcnQiLCJ5ZXMkMCIsIm5vJDAiLCJjbXAiLCJyZXZfbWVyZ2UiLCJ0MiIsImgyIiwidDEiLCJoMSIsImFjY3UkMiIsImFjY3UkMyIsInJldl9tZXJnZV9yZXYiLCJzb3J0IiwieDIiLCJ4MSIsInRsJDEiLCJ4MyIsIngyJDAiLCJ4MSQwIiwiYyQwIiwiYyQxIiwiYyQyIiwiYyQzIiwiYyQ0IiwiYyQ1IiwibjEiLCJuMiIsInJldl9zb3J0IiwidGwkMCIsImNvbXBhcmUiLCJtaW4iLCJtYXgkMCIsInRvX3N0cmluZyIsIm9mczEiLCJvZnMyIiwiaXNfc3BhY2UiLCJlbnN1cmVfZ2UiLCJzdW1fbGVuZ3RocyIsInNlcGxlbiIsInVuc2FmZV9ibGl0cyIsImRzdCIsInBvcyQwIiwiaXNfc3BhY2UkMCIsImVzY2FwZV9pZl9uZWVkZWQiLCJpbmRleF9yZWMiLCJsaW0iLCJ0b2xpc3QiLCJyZXMkMCIsInJlcyQxIiwibGlzdF9sZW5ndGgiLCJmaWxsIiwibGV4X3JlZmlsbCIsInJlYWRfZnVuIiwiYXV4X2J1ZmZlciIsIm5ld2xlbiIsIm5ld2J1ZiIsIm9wdCIsInN0aCIsIndpdGhfcG9zaXRpb25zIiwiaGVpZ2h0IiwiY3JlYXRlIiwiaGwiLCJoJDAiLCJociIsImJhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsInNpbmdsZXRvbiIsImFkZF9taW5fZWxlbWVudCIsImFkZF9tYXhfZWxlbWVudCIsImpvaW4iLCJyaCIsImxoIiwibWluX2VsdCIsInJlbW92ZV9taW5fZWx0IiwiciQwIiwibWVyZ2UiLCJjb25jYXQiLCJzcGxpdCIsInByZXMiLCJwcmVzJDAiLCJlbXB0eSIsImlzX2VtcHR5IiwicmVtb3ZlIiwidW5pb24iLCJ2MiIsInYxIiwicjIkMCIsInIxJDAiLCJpbnRlciIsImRpZmYiLCJjb25zX2VudW0iLCJlJDEiLCJjb21wYXJlX2F1eCIsImUxIiwiZTIiLCJlMSQwIiwiZTIkMCIsImUyJDEiLCJlMSQxIiwiZTIkMiIsImUxJDIiLCJlcXVhbCIsInN1YnNldCIsInMxJDAiLCJzMiQwIiwiZm9sZCIsImNhcmRpbmFsIiwiZWxlbWVudHNfYXV4IiwiZWxlbWVudHMiLCJmaW5kX2xhc3Rfb3B0X2F1eCIsInYwJDAiLCJmaW5kX2xhc3Rfb3B0Iiwib2Zfc29ydGVkX2xpc3QiLCJzdWIiLCJsJDMiLCJ4MCIsImwkNCIsIngwJDAiLCJsJDUiLCJ4MCQxIiwibmwiLCJsZWZ0IiwibWlkIiwibCQyIiwicmlnaHQiLCJvZl9saXN0IiwieDQiLCJsZCIsImxyZCIsInJsZCIsImZpbmRfb3B0IiwibWVtIiwibWluX2JpbmRpbmciLCJyZW1vdmVfbWluX2JpbmRpbmciLCJtJDAiLCJmb3JfYWxsIiwiYWRkX21pbl9iaW5kaW5nIiwiYWRkX21heF9iaW5kaW5nIiwiY29uY2F0X29yX2pvaW4iLCJkJDAiLCJkMSIsImQyIiwiZDIkMCIsImQxJDAiLCJtMSIsIm0yIiwiZXF1YWxfYXV4IiwiY2xlYXIiLCJwdXNoIiwicG9wIiwicG9wX29wdCIsInRvcCIsInRvcF9vcHQiLCJpdGVyJDAiLCJjcmVhdGUkMCIsImNsZWFyJDAiLCJjZWxsIiwibWF0Y2giLCJwZWVrX29wdCIsInRha2UiLCJuZXh0IiwidGFrZV9vcHQiLCJmcm9tIiwiY3JlYXRlJDEiLCJuJDAiLCJuJDEiLCJzdWIkMiIsImxlbmd0aCQwIiwicmVzZXQiLCJyZXNpemUiLCJtb3JlIiwib2xkX3BvcyIsIm9sZF9sZW4iLCJuZXdfbGVuIiwibmV3X2J1ZmZlciIsImFkZF9jaGFyIiwiYWRkX3N1YnN0cmluZyIsIm5ld19wb3NpdGlvbiIsImFkZF9zdHJpbmciLCJkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiIsImJ1ZmZlcl9jcmVhdGUiLCJpbml0X3NpemUiLCJidWZmZXJfY2hlY2tfc2l6ZSIsIm92ZXJoZWFkIiwibWluX2xlbiIsImJ1ZmZlcl9hZGRfY2hhciIsImJ1ZmZlcl9hZGRfc3RyaW5nIiwic3RyX2xlbiIsImJ1ZmZlcl9jb250ZW50cyIsImNoYXJfb2ZfZmNvbnYiLCJjRiIsImJwcmludF9mY29udl9mbGFnIiwic3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IiwiZm9ybWF0dGluZ19saXQiLCJzdHIkMCIsImJwcmludF9mbXR0eSIsImZtdHR5JDEiLCJmbXR0eSQyIiwiZm10dHkkMyIsImZtdHR5JDQiLCJmbXR0eSQ1IiwiZm10dHkkNiIsImZtdHR5JDciLCJmbXR0eSQ4IiwiZm10dHkkOSIsInN1Yl9mbXR0eSIsImZtdHR5JDEwIiwic3ViX2ZtdHR5JDAiLCJmbXR0eSQxMSIsImZtdHR5JDEyIiwiZm10dHkkMTMiLCJmbXR0eSQxNCIsImZtdHR5JDE1Iiwic3ltbSIsImZtdHR5X3JlbF9kZXQiLCJkZSIsImVkIiwiYWYiLCJmYSIsImRlJDAiLCJlZCQwIiwiYWYkMCIsImZhJDAiLCJkZSQxIiwiZWQkMSIsImFmJDEiLCJmYSQxIiwiZGUkMiIsImVkJDIiLCJhZiQyIiwiZmEkMiIsImRlJDMiLCJlZCQzIiwiYWYkMyIsImZhJDMiLCJkZSQ0IiwiZWQkNCIsImFmJDQiLCJmYSQ0IiwiZGUkNSIsImVkJDUiLCJhZiQ1IiwiZmEkNSIsImRlJDYiLCJlZCQ2IiwiYWYkNiIsImZhJDYiLCJkZSQ3IiwiZWQkNyIsImFmJDciLCJmYSQ3IiwiZGUkOCIsImVkJDgiLCJhZiQ4IiwiZmEkOCIsInRyYW5zIiwiamQiLCJkaiIsImdhIiwiYWciLCJkZSQ5IiwiZWQkOSIsImFmJDkiLCJmYSQ5IiwiZGUkMTAiLCJlZCQxMCIsImFmJDEwIiwiZmEkMTAiLCJkZSQxMSIsImVkJDExIiwiYWYkMTEiLCJmYSQxMSIsImRlJDEyIiwiZWQkMTIiLCJhZiQxMiIsImZhJDEyIiwiZGUkMTMiLCJlZCQxMyIsImFmJDEzIiwiZmEkMTMiLCJyZXN0MSIsInJlc3QyIiwicmVzdDEkMCIsInJlc3QyJDAiLCJyZXN0MSQxIiwicmVzdDIkMSIsInJlc3QxJDIiLCJyZXN0MiQyIiwicmVzdDEkMyIsInJlc3QyJDMiLCJyZXN0MSQ0IiwicmVzdDIkNCIsInJlc3QxJDUiLCJyZXN0MiQ1IiwicmVzdDEkNiIsInJlc3QyJDYiLCJyZXN0MSQ3IiwidHkxJDAiLCJyZXN0MiQ3IiwidHkyJDAiLCJyZXN0MSQ4IiwidHkxMiIsInR5MTEiLCJyZXN0MiQ4IiwidHkyMiIsInR5MjEiLCJmNCIsImYyIiwicmVzdDEkOSIsInJlc3QyJDkiLCJyZXN0MSQxMCIsInJlc3QyJDEwIiwicmVzdDEkMTEiLCJyZXN0MiQxMSIsInJlc3QxJDEyIiwicmVzdDIkMTIiLCJyZXN0MSQxMyIsInJlc3QyJDEzIiwidHlwZV9wYWRkaW5nIiwicGFkdHkiLCJwYWR0eSQwIiwidHlwZV9wYWRwcmVjIiwidHlwZV9mb3JtYXQiLCJ0eXBlX2Zvcm1hdF9nZW4iLCJmbXQkMCIsImZtdHR5X3Jlc3QiLCJmbXRfcmVzdCIsImZtdHR5X3Jlc3QkMCIsImZtdF9yZXN0JDAiLCJmbXQkMSIsImZtdF9yZXN0JDEiLCJmbXR0eV9yZXN0JDEiLCJmbXQkMiIsImZtdF9yZXN0JDIiLCJmbXR0eV9yZXN0JDIiLCJmbXQkMyIsImZtdF9yZXN0JDMiLCJmbXR0eV9yZXN0JDMiLCJmbXQkNCIsImZtdF9yZXN0JDQiLCJmbXR0eV9yZXN0JDQiLCJmbXQkNSIsImZtdF9yZXN0JDUiLCJmbXR0eV9yZXN0JDUiLCJwcmVjJDQiLCJmbXQkNiIsImZtdF9yZXN0JDYiLCJwcmVjJDUiLCJwYWQkOSIsInBhZCQxMCIsImZtdHR5X3Jlc3QkNiIsInByZWMkNiIsImZtdCQ3IiwiZm10X3Jlc3QkNyIsInByZWMkNyIsInBhZCQxMSIsInBhZCQxMiIsImZtdHR5X3Jlc3QkNyIsInByZWMkOCIsImZtdCQ4IiwiZm10X3Jlc3QkOCIsInBhZCQxMyIsInBhZCQxNCIsImZtdHR5X3Jlc3QkOCIsImZtdCQ5IiwiZm10X3Jlc3QkOSIsImZtdCQxMCIsImZtdF9yZXN0JDEwIiwiZm10JDExIiwiZm10X3Jlc3QkMTEiLCJmbXQkMTIiLCJmbXR0eV9yZXN0JDkiLCJmbXRfcmVzdCQxMiIsInBhZF9vcHQiLCJmbXQkMTMiLCJmbXR0eV9yZXN0JDEwIiwic3ViX2ZtdHR5MSIsImZtdF9yZXN0JDEzIiwic3ViX2ZtdHR5JDEiLCJwYWRfb3B0JDAiLCJmbXQkMTQiLCJmbXR0eV9yZXN0JDExIiwiZm10X3Jlc3QkMTQiLCJmbXQkMTUiLCJmbXR0eV9yZXN0JDEyIiwiZm10X3Jlc3QkMTUiLCJmbXR0eSQxNiIsImZtdCQxNiIsImZtdF9yZXN0JDE2IiwiZm10dHkkMTciLCJmbXQkMTciLCJmbXRfcmVzdCQxNyIsImZvcm1hdHRpbmdfZ2VuIiwidHlwZV9mb3JtYXR0aW5nX2dlbiIsImZtdHR5X3Jlc3QkMTMiLCJmbXRfcmVzdCQxOCIsImZtdHR5JDE4IiwiZm10JDE4IiwiZm10dHlfcmVzdCQxNCIsImZtdF9yZXN0JDE5IiwiZm10dHkkMTkiLCJmbXQkMTkiLCJmbXR0eV9yZXN0JDE1IiwiZm10X3Jlc3QkMjAiLCJmbXR0eSQyMCIsImZtdCQyMCIsInR5cGVfaWdub3JlZF9wYXJhbSIsImZtdDAiLCJmbXR0eTAiLCJmbXR0eTMiLCJmbXQzIiwiZm10MSQwIiwiZm10dHkyJDAiLCJmbXQyJDAiLCJmbXR0eTMkMCIsImZtdDMkMCIsInR5cGVfaWdub3JlZF9wYXJhbV9vbmUiLCJ0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGkiLCJzdWJfZm10dHlfcmVzdCIsInN1Yl9mbXR0eV9yZXN0JDAiLCJzdWJfZm10dHlfcmVzdCQxIiwic3ViX2ZtdHR5X3Jlc3QkMiIsInN1Yl9mbXR0eV9yZXN0JDMiLCJzdWJfZm10dHlfcmVzdCQ0Iiwic3ViX2ZtdHR5X3Jlc3QkNSIsInN1Yl9mbXR0eV9yZXN0JDYiLCJzdWJfZm10dHlfcmVzdCQ3Iiwic3ViX2ZtdHR5X3Jlc3QkOCIsInN1Yl9mbXR0eV9yZXN0JDkiLCJzdWJfZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eV9yZXN0JDExIiwic3ViX2ZtdHR5X3Jlc3QkMTIiLCJzdWJfZm10dHlfcmVzdCQxMyIsInN1Yl9mbXR0eV9yZXN0JDE0Iiwic3ViMl9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE1Iiwic3ViMl9mbXR0eSQwIiwic3ViX2ZtdHR5X3Jlc3QkMTYiLCJzdWIyX2ZtdHR5JDEiLCJzdWIxX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTciLCJzdWIyX2ZtdHR5JDIiLCJzdWIxX2ZtdHR5JDAiLCJzdWJfZm10dHlfcmVzdCQxOCIsInN1Yl9mbXR0eV9yZXN0JDE5Iiwic3ViX2ZtdHR5X3Jlc3QkMjAiLCJzdWJfZm10dHlfcmVzdCQyMSIsInN1Yl9mbXR0eV9yZXN0JDIyIiwic3ViX2ZtdHR5X3Jlc3QkMjMiLCJzdWJfZm10dHlfcmVzdCQyNCIsInN1Yl9mbXR0eV9yZXN0JDI1Iiwic3ViX2ZtdHR5X3Jlc3QkMjYiLCJyZWNhc3QiLCJmaXhfcGFkZGluZyIsIndpZHRoIiwid2lkdGgkMCIsImZpeF9pbnRfcHJlY2lzaW9uIiwic3RyaW5nX3RvX2NhbWxfc3RyaW5nIiwiZm9ybWF0X29mX2ljb252IiwiZm9ybWF0X29mX2ljb252TCIsImZvcm1hdF9vZl9pY29udmwiLCJmb3JtYXRfb2ZfaWNvbnZuIiwiZm9ybWF0X29mX2Zjb252IiwidHJhbnNmb3JtX2ludF9hbHQiLCJkaWdpdHMiLCJwdXQiLCJjb252ZXJ0X2ludCIsImNvbnZlcnRfaW50MzIiLCJjb252ZXJ0X25hdGl2ZWludCIsImNvbnZlcnRfaW50NjQiLCJjb252ZXJ0X2Zsb2F0IiwiaGV4IiwiYWRkX2RvdF9pZl9uZWVkZWQiLCJpc192YWxpZCIsImNhbWxfc3BlY2lhbF92YWwiLCJmb3JtYXRfY2FtbF9jaGFyIiwic3RyaW5nX29mX2ZtdHR5IiwibWFrZV9wcmludGYkMCIsImskMCIsIm5ld19hY2MiLCJtYWtlX3ByaW50ZiIsIm1ha2VfcGFkZGluZyIsIm1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIiwibWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiIsImFjYyQyIiwiYWNjJDMiLCJhY2MkNCIsImskMSIsImthY2MiLCJrJDIiLCJtYWtlX2lnbm9yZWRfcGFyYW0iLCJtYWtlX2N1c3RvbSQwIiwibWFrZV9pbnZhbGlkX2FyZyIsIm1ha2VfZnJvbV9mbXR0eSQwIiwibWFrZV9mcm9tX2ZtdHR5IiwicCQwIiwicCQxIiwiYXJpdHkkMCIsIm1ha2VfY3VzdG9tIiwib3V0cHV0X2FjYyIsInAkMyIsInAkNCIsInAkNSIsInAkMiIsInN0cnB1dF9hY2MiLCJmYWlsd2l0aF9tZXNzYWdlIiwib3Blbl9ib3hfb2Zfc3RyaW5nIiwiaW52YWxpZF9ib3giLCJwYXJzZV9zcGFjZXMiLCJwYXJzZV9sd29yZCIsImokMCIsImokMSIsInBhcnNlX2ludCIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleHBfZW5kIiwiYm94X3R5cGUiLCJrZnByaW50ZiIsImZwcmludGYiLCJlcHJpbnRmIiwia3NwcmludGYiLCJzcHJpbnRmIiwicHJpbnRlcnMiLCJmaWVsZCIsIm90aGVyX2ZpZWxkcyIsImZpZWxkcyIsInVzZV9wcmludGVycyIsImNvbnYiLCJ0b19zdHJpbmdfZGVmYXVsdCIsImNoYXIkMCIsImxpbmUiLCJjaGFyJDEiLCJsaW5lJDAiLCJmaWxlJDAiLCJjaGFyJDIiLCJsaW5lJDEiLCJmaWxlJDEiLCJjb25zdHJ1Y3RvciIsInRvX3N0cmluZyQwIiwiY29udmVydF9yYXdfYmFja3RyYWNlIiwiYnQiLCJmb3JtYXRfYmFja3RyYWNlX3Nsb3QiLCJzbG90IiwiaW5mbyIsImlzX3JhaXNlIiwicHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSIsIm91dGNoYW4iLCJiYWNrdHJhY2UiLCJwcmludF9yYXdfYmFja3RyYWNlIiwicmF3X2JhY2t0cmFjZSIsInJlZ2lzdGVyX3ByaW50ZXIiLCJmbiIsIm9sZF9wcmludGVycyIsIm5ld19wcmludGVycyIsImVycm9ycyIsImRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbiIsInN0YXR1cyIsImVtcHR5X2JhY2t0cmFjZSIsInRyeV9nZXRfcmF3X2JhY2t0cmFjZSIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24iLCJkZWJ1Z2dlcl9pbl91c2UiLCJleG4kMSIsImV4biQwIiwicmF3X2JhY2t0cmFjZSQwIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiQwIiwibmV3X3N0YXRlIiwiYXNzaWduIiwic3QxIiwic3QyIiwiZnVsbF9pbml0IiwiY29tYmluZSIsImV4dHJhY3QiLCJzZWVkJDAiLCJtYWtlJDIiLCJtYWtlX3NlbGZfaW5pdCIsImNvcHkkMCIsImJpdHMiLCJjdXJ2YWwiLCJuZXd2YWwiLCJuZXd2YWwzMCIsImludGF1eCIsImludCQwIiwiYm91bmQiLCJpbnQkMSIsIm9uZ29pbmdfdHJhdmVyc2FsIiwicGFyYW1zIiwicmFuZG9taXplZF9kZWZhdWx0IiwicHJuZyIsInBvd2VyXzJfYWJvdmUiLCJ4JDAiLCJ4JDEiLCJpbml0aWFsX3NpemUiLCJyYW5kb20iLCJpbnNlcnRfYWxsX2J1Y2tldHMiLCJpbmRleGZ1biIsImlucGxhY2UiLCJvZGF0YSIsIm5kYXRhIiwibnNpemUiLCJuZGF0YV90YWlsIiwiaW5zZXJ0X2J1Y2tldCIsImNlbGwkMCIsImNlbGwkMSIsIm5pZHgiLCJyZXNpemUkMCIsIm9zaXplIiwia2V5X2luZGV4IiwicmVtb3ZlX2J1Y2tldCIsImZpbmRfcmVjIiwibmV4dDEiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfaW5fYnVja2V0IiwicmVwbGFjZV9idWNrZXQiLCJtZW1faW5fYnVja2V0IiwiemVybyIsInVua25vd24iLCJpc19rbm93biIsInBwX2VucXVldWUiLCJ0b2tlbiIsInBwX2NsZWFyX3F1ZXVlIiwicHBfaW5maW5pdHkiLCJwcF9vdXRwdXRfc3RyaW5nIiwicHBfb3V0cHV0X25ld2xpbmUiLCJwcF9vdXRwdXRfc3BhY2VzIiwicHBfb3V0cHV0X2luZGVudCIsImZvcm1hdF9wcF90ZXh0IiwidGV4dCIsImZvcm1hdF9zdHJpbmciLCJicmVha19uZXdfbGluZSIsImFmdGVyIiwiYmVmb3JlIiwicmVhbF9pbmRlbnQiLCJicmVha19saW5lIiwiYnJlYWtfc2FtZV9saW5lIiwicHBfZm9yY2VfYnJlYWtfbGluZSIsInBwX3NraXBfdG9rZW4iLCJmb3JtYXRfcHBfdG9rZW4iLCJ0YWJzIiwiYWRkX3RhYiIsImxzIiwidGFnX25hbWUiLCJtYXJrZXIiLCJicmVha3MiLCJmaXRzIiwib2ZmIiwib2ZmJDAiLCJpbnNlcnRpb25fcG9pbnQiLCJ0YWJzJDAiLCJmaXJzdCIsInRhaWwiLCJoZWFkIiwidGFiIiwib2ZmJDEiLCJpbnNlcnRpb25fcG9pbnQkMCIsIndpZHRoJDEiLCJib3hfdHlwZSQwIiwidGJveCIsInRhZ19uYW1lJDAiLCJtYXJrZXIkMCIsImFkdmFuY2VfbGVmdCIsInBlbmRpbmdfY291bnQiLCJzaXplJDAiLCJlbnF1ZXVlX2FkdmFuY2UiLCJ0b2siLCJlbnF1ZXVlX3N0cmluZ19hcyIsImVucXVldWVfc3RyaW5nIiwiaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIiwicXVldWVfZWxlbSIsInNldF9zaXplIiwibGVmdF90b3RhbCIsInNjYW5fcHVzaCIsImVsZW0iLCJwcF9vcGVuX2JveF9nZW4iLCJicl90eSIsInBwX29wZW5fc3lzX2JveCIsInBwX2Nsb3NlX3RhZyIsInBjdCIsInBvdCIsIm1jdCIsIm1vdCIsInBwX3Jpbml0IiwiY2xlYXJfdGFnX3N0YWNrIiwicHBfZmx1c2hfcXVldWUiLCJwcF9wcmludF9hc19zaXplIiwiaXNpemUiLCJwcF9wcmludF9zdHJpbmciLCJwcF9wcmludF9ib29sIiwicHBfcHJpbnRfY2hhciIsInBwX3ByaW50X2ZsdXNoIiwicHBfZm9yY2VfbmV3bGluZSIsInBwX3ByaW50X2N1dCIsImRpc3BsYXlfbmV3bGluZSIsImJsYW5rX2xpbmUiLCJkaXNwbGF5X2JsYW5rcyIsImRlZmF1bHRfcHBfbWFya19vcGVuX3RhZyIsImRlZmF1bHRfcHBfbWFya19jbG9zZV90YWciLCJkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnIiwiZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWciLCJwcF9tYWtlX2Zvcm1hdHRlciIsInBwX3F1ZXVlIiwic3lzX3RvayIsInNjYW5fc3RhY2siLCJwcF9tYXJnaW4iLCJvdXRwdXQiLCJmbHVzaCIsInBwZiIsImZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCIsInBwX2J1ZmZlcl9zaXplIiwicHBfbWFrZV9idWZmZXIiLCJzdGRfZm9ybWF0dGVyIiwiZXJyX2Zvcm1hdHRlciIsImZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIiLCJwcF92Iiwib3B0JDAiLCJwcF9zZXAiLCJvcHQkMSIsIm5vbmUiLCJjb21wdXRlX3RhZyIsInRhZ19hY2MiLCJvdXRwdXRfZm9ybWF0dGluZ19saXQiLCJvdXRwdXRfYWNjJDAiLCJidHkiLCJmJDAiLCJwJDYiLCJwJDciLCJmcHJpbnRmJDAiLCJmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzIiwicmVnaXN0ZXJfZXhjZXB0aW9uIiwiYW55IiwiZHVtbXkiLCJvcGVyYXRvciIsImRlc2MiLCJ2eCIsInZ5IiwiY2hpbGQiLCJhZGRfaWR4IiwicGFyYW0iLCJyZW1faWR4X3JlYyIsInNlbGYiLCJyZW1faWR4IiwidHJhY2VfaWR4IiwidHJhY2VfaWR4JDAiLCJpZHgkMCIsIm1vdl9pZHhfcmVjIiwib2xkaWR4IiwibmV3aWR4IiwibW92X2lkeCIsImdldF9pZHhfcmVjIiwiZ2V0X2lkeCIsImludmFsaWRhdGVfbm9kZSQwIiwic2Vuc2l0aXZpdHkiLCJub2RlIiwic2Vuc2l0aXZpdHkkMCIsImludmFsaWRhdGVfdHJhY2UiLCJpbnZhbGlkYXRlX25vZGUiLCJ6IiwieSQwIiwieiQwIiwieSQxIiwieCQyIiwiYWN0aXZlIiwiY2FsbHN0YWNrIiwiZG9faW52YWxpZGF0ZSIsInVuc2FmZSIsImFjcXVpcmUiLCJyZWxlYXNlIiwic3ViX3JlbGVhc2UiLCJmYWlsdXJlcyQwIiwib3JpZ2luJDEiLCJvcmlnaW4kMCIsInRyYWNlIiwidHJhY2UkMCIsIngkNCIsIngkNSIsIngkNiIsInJldmlkeCIsInNlbGYkMCIsInNlbGYkMSIsInNlbGYkMiIsInNlbGYkMyIsImludGVybWVkaWF0ZSIsImZhaWx1cmVzJDQiLCJjaGlsZCQwIiwieCQzIiwid3J0Iiwic2VsZiQ0Iiwic3ViX2FjcXVpcmUiLCJlbnRyaWVzIiwidHJhY2UkMSIsImVudHJpZXMkMCIsImVudHJpZXMkMSIsImRvYyIsImFjdGl2YXRlX3RyYWNpbmciLCJ0biIsInN1Yl9pc19kYW1hZ2VkIiwic3ViX3NhbXBsZSIsImYkMSIsInJlc3VsdCQwIiwib25faW52YWxpZGF0ZSIsInJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIiwicGFyYW0kMCIsImZhaWx1cmVzJDEiLCJxdWV1ZSQwIiwidmFsdWUkMCIsImZsdXNoX29yX2ZhaWwiLCJtYWluX2V4biIsImZhaWx1cmVzIiwibWFwX3JlZHVjZSIsImluaiIsIml0ZW1zIiwicGx1cyIsImNvbnNfbW9ub2lkIiwieHMiLCJ4cyQwIiwidiQwIiwieHMkMSIsInYkMSIsInYkMiIsImNvbnNfbW9ub2lkJDAiLCJub3Rfb3JpZ2luIiwibWFrZSQzIiwic2V0X3BhcmVudCIsIm1ha2Vfbm9kZSIsInNldCIsImJpbmRpbmciLCJyYXdfaW52YWxpZGF0ZSIsImFwcGVuZCIsImdldCQyIiwiaW52YWxpZGF0ZV9iaW5kaW5nIiwic2V0X2JpbmRpbmciLCJ1bnNldCIsInNtYWxsZXJfZWxsIiwic21pbiIsInNtYXgiLCJkaXNiYWxhbmNlZCIsInJlcGFyZW50Iiwib2xkY2hpbGQiLCJuZXdjaGlsZCIsInJvdF9sZWZ0JDAiLCJ2ZXJzaW9uIiwic24iLCJybiIsInJsJDAiLCJiYWxhbmNlIiwiYmFsYW5jZSQwIiwicm90X2xlZnQiLCJyb3RfcmlnaHQkMCIsImxuIiwibHIkMCIsInJvdF9yaWdodCIsImluY19sZWZ0IiwiaW5jX3JpZ2h0Iiwic2wiLCJzciIsImNvbXB1dGVfc3ViX3NpemUiLCJyZXNldF92ZXJzaW9uIiwicmViYWxhbmNlIiwidmVyc2lvbiQwIiwiZXh0cmFjdF9iaW5kaW5ncyIsInRyZWUiLCJybm9kZSIsImZ1bGxfcmVidWlsZCIsInJlZCIsImJpbmRpbmdzIiwiYmluZGluZ3MkMCIsInJlZHVjdGlvbiIsImJpbmRpbmckMCIsInJlZHVjdGlvbiQwIiwiYWdncmVnYXRlIiwiYWdncmVnYXRlJDAiLCJleHRyYWN0X2ZyaW5nZSIsImluY3JlbWVudGFsX3JlYnVpbGQiLCJmcmluZ2UiLCJmcmluZ2UkMCIsImZyaW5nZSQxIiwiZXZhbCQwIiwib3BhcXVlIiwibWFwX3JlZHVjZSQwIiwibWFwcGVyIiwibW9ub2lkIiwic291cmNlIiwicHJpbSQwIiwibGVmdF9tb3N0IiwicmlnaHRfbW9zdCIsImF1eCQwIiwid2Fsa19yb290IiwicGFyZW50JDAiLCJlbXB0eSQwIiwiZWxlbWVudCIsIm1heGkiLCJyYW5rIiwiY29uY2F0JDAiLCJtYXNrX29sZCIsIm1hc2tfbmV3IiwibWFza19ib3RoIiwiaXNfc2hhcmVkIiwiaXNfbm90X3NoYXJlZCIsImlzX2JvdGgiLCJpc19vbGQiLCJpc19uZXciLCJzZXRfYm90aCIsImdldF9pbmRleCIsIndpdGhfaW5kZXhfbmV3IiwidW5tYXJrIiwibWFya2VkIiwic2hhcmVkIiwiYmxvY2tlZCIsIm1rX3N0YXRzIiwibmV3X21hcmtlZCIsInN0YXRzIiwibmV3X3NoYXJlZCIsIm5ld19ibG9ja2VkIiwiYmxvY2siLCJtYXNrIiwibWFyayIsIm1hcmskMCIsImVucXVldWUiLCJkZXF1ZXVlIiwidHJhdmVyc2UxIiwidHJhdmVyc2UiLCJzb2xkIiwic25ldyIsInFvbGQiLCJxbmV3Iiwib2xkX3N0YXRzIiwidHIiLCJuZXdfc3RhdHMiLCJ1bnNhZmVfdHJhdmVyc2UiLCJvbGRfcm9vdCIsIm5ld19yb290Iiwib2xkX3F1ZXVlIiwibmV3X3F1ZXVlIiwicmVzdG9yZSIsIm5leHRfc2hhcmVkX2luZGV4Iiwic3QiLCJ1bmJsb2NrIiwidCQwIiwidW5tYXJrX29sZCIsImluZGV4JDAiLCJkcm9wcGVkX2xlYWYiLCJhJDAiLCJiJDAiLCJpbmRleCQxIiwiaW5kZXgkMiIsImRyb3BwZWRfam9pbiIsInByZXBhcmVfc2hhcmVkIiwidW5tYXJrX25ldyIsIm5vX2Ryb3BwZWQiLCJnZXRfZHJvcHBlZCIsInhvbGQiLCJ0bmV3IiwidHJhdmVyc2FsIiwibmJfZHJvcHBlZCIsIm5iX3NoYXJlZCIsIm5iX2Ryb3BwZWQkMCIsInhsZWFmIiwieGpvaW4iLCJldmFsJDEiLCJvdGhlciIsIm1ha2UkNCIsInJlZHVjZSIsInVwZGF0ZSQwIiwibmV3X3RyZWUiLCJvbGRfdHJlZSIsInVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQiLCJkcm9wcGVkIiwiZm9sZF9kcm9wcGVkIiwiYm91bmQkMCIsInB1cmVfbWFwX3JlZHVjZSIsImZvbGRfbW9ub2lkIiwic2VxIiwicmVkdWNlJDAiLCJyZWR1Y2VyIiwicmVkdWNlciQwIiwidHJhbnNmb3JtX2xpc3QiLCJvZl9saXN0JDAiLCJ0b19saXN0JDAiLCJsd2RfZW1wdHkiLCJsd2RfbW9ub2lkIiwibWFwJDMiLCJmaWx0ZXJfbWFwJDAiLCJzZWxlY3QiLCJiaW5kJDAiLCJsaWZ0Iiwib3B0cyIsInR5cGUiLCJmdW5jIiwiaXNfcHVyZV9lbGVtZW50IiwiZXh0cmFjdF9wdXJlX2VsZW1lbnQiLCJleHRyYWN0X3B1cmVfZWxlbWVudHMiLCJwcmVwYXJlX2NvbCIsImNvbCIsImltcHVyZSIsInB1cmUiLCJjb25zdW1lX2NoaWxkcmVuIiwiY2hpbGRfbm9kZSIsImNoaWxkX2pvaW4iLCJqdl9hcHBlbmQiLCJqdl9iZWZvcmUiLCJqdl9yZW1vdmUiLCJqdl9jb250YWlucyIsImNvbnRhaW5zX2ZvY3VzIiwiZWwiLCJ1cGRhdGVfY2hpbGRyZW4iLCJjaGlsZHJlbiIsInNjaGVkdWxlX2Zvcl9yZW1vdmFsIiwicHJlc2VydmVfZm9jdXMiLCJ1cGRhdGUiLCJzaGlmdF9zaWJsaW5ncyIsInNpYmxpbmciLCJyZW1vdmVfY2hpbGQiLCJwdXJlX3VuaXQiLCJkdW1teV9rdl9hdCIsImF0dGFjaF9hdHRyaWJzIiwiYXR0cmlicyIsInNldF9rdiIsInVuc2V0X2t2Iiwic2V0X2x3ZF9hdCIsInByZXYiLCJhdCIsInBhaXIiLCJhdHMiLCJzZXRfYXQiLCJrdiIsImxpc3RlbiQwIiwiYXR0YWNoX2V2ZW50cyIsImV2ZW50cyIsImNhY2hlZCIsInYkNCIsInN0aCQwIiwiZXYiLCJzdGgkMSIsIm9uX2NyZWF0ZSIsImltcHVyZV9hdCIsImF0JDAiLCJpbXB1cmVfZXYiLCJldiQwIiwiaW1wdXJlX2NoaWxkcmVuIiwiY2hpbGRyZW4kMCIsImNoaWxkcmVuJDEiLCJjaGlsZHJlbiQyIiwiY29ucyQxIiwiY3MiLCJ2b2lkX2NvbnMiLCJidXR0b24kMCIsImRpdiQxIiwiZm9ybSQwIiwiaW1nJDAiLCJpbnB1dCQxIiwibGFiZWwkMCIsIm9wdGlvbiQwIiwic2VsZWN0JDAiLCJzcGFuJDEiLCJzaHVmZmxlIiwicmFuZF9pbnQiLCJpdGVtX3RvX3N0cmluZyIsImlzX25hbiIsIm9mX3N0cmluZ19vcHQiLCJpbnRfb2ZfY29sb3IiLCJjb2RlX29mX3N0eWxlIiwic3RyaW5nX29mX3N0eWxlIiwic3R5bGVfb2ZfdGFnIiwibWFya19vcGVuX3N0eWxlIiwibWFya19jbG9zZV9zdHlsZSIsIm1hcmtfb3Blbl9zdGFnIiwib3JfZWxzZSIsInN0eWxlJDAiLCJtYXJrX2Nsb3NlX3N0YWciLCJzZXRfY29sb3JfdGFnX2hhbmRsaW5nIiwiZnVucyIsImZ1bnMkMCIsInNwcmludGYkMCIsImZvcm1hdCIsInNwcmludGYkMSIsImNvbXBhcmUkMSIsIm9mX3N0cmluZyQwIiwib2ZfZmxvYXQiLCJzeW1ib2wkMTAiLCJtYXBfb3IiLCJpc19zb21lJDEiLCJmbGF0X21hcCIsInN5bWJvbF9iaW5kJDAiLCJpdGVyJDEiLCJ2YWx1ZSQzIiwidG9fbGlzdCQyIiwic3ltYm9sJDExIiwic3ltYm9sJDEyIiwiZ2V0X2V4biIsImdldF9vciIsImZsYXRfbWFwJDAiLCJzeW1ib2wkMTMiLCJzeW1ib2xfYmluZCQxIiwic3VmIiwiY2hlY2siLCJzaW5nbGUiLCJkZWVwIiwibWlkZGxlIiwiaXNfZW1wdHkkMSIsImNvbnMkMiIsInokMSIsIm1pZGRsZSQwIiwieiQyIiwieSQzIiwieiQzIiwieiQ0IiwieSQ0IiwicSQwIiwieSQyIiwidGFrZV9iYWNrX2V4biIsInEkMSIsInRha2VfYmFjayIsInNpemVfZGlnaXQiLCJjb250ZW50X3JlY3QiLCJ0YXJnZXQkMCIsInN0cmluZ19vZl9ib3giLCJvYnNlcnZlJDAiLCJib3giLCJib3gkMCIsImNyZWF0ZSQ3IiwiY2FsbGJhY2siLCJjYWxsYmFjayQwIiwib2JzZXJ2ZXIiLCJvZl9uYXZpZ2F0b3IiLCJpbWdfdG9fanYiLCJpbWciLCJ0b19qdiIsImFydHdvcmsiLCJzZXRfbWV0YWRhdGEiLCJtZXRhZGF0YSIsIm5leHRfdHJhY2siLCJwcmV2aW91c190cmFjayIsInNldF9hY3Rpb25faGFuZGxlciIsImFjdGlvbiIsInNldF9wb3NpdGlvbl9zdGF0ZSIsImR1cmF0aW9uIiwicGxheWJhY2tfcmF0ZSIsInBvc2l0aW9uIiwibWF5YmVfZmxvYXQiLCJkdXJhdGlvbiQwIiwicGxheWJhY2tfcmF0ZSQwIiwicG9zaXRpb24kMCIsInN0YXRlX2RpY3QiLCJzdWJtaXQiLCJwYXR0ZXJuIiwicGVyc2lzdCIsIm1hbmFnZXIiLCJ0ZWUiLCJvZl9zdHJpbmckMSIsInRvX3N0cmluZyQzIiwidG9fcHgiLCJnZXRfZm9udF9zaXplX2luX3B4IiwiZm9udF9zaXplIiwiZm9udF9zaXplJDAiLCJtYXAzIiwidHJpcGxlIiwibWFrZSQ1Iiwic2V0X2V4biIsImdldF9leG4kMCIsIm1ha2UkNiIsIkMiLCJsYW5nIiwidG9fanN0ciQxIiwib2ZfanN0ciQwIiwianN0ciIsImtleXMiLCJjaGVja19rZXkiLCJsb2NhbF9zdG9yYWdlIiwic3RvcmUiLCJmZXRjaCQwIiwiZW5jb2RlZF92YWx1ZSIsImluaXRpYWxfdmFsdWUiLCJtYWtlX3BlcnNpc3RlbnRfdmFyIiwidmFyJDEiLCJuZXdfdmFsdWUiLCJ2YXJfZiIsImtleSQwIiwiZm9yX3NlY3Rpb24iLCJsb2ciLCJ0b19hdCIsImVtcHR5JDUiLCJ0b19hdCQwIiwiaWQkMCIsImNsYXNzZXMiLCJ1bmlvbiQwIiwiYXR0cnMiLCJhZGQkMSIsImF0X25hbWUiLCJhZGRfYm9vbCIsImFkZF9vcHQiLCJtYXBfY29sIiwib2ZfYXQiLCJjb25zJDMiLCJjbGFzcyQyIiwidiQ1Iiwic3ltYm9sJDE0IiwidiQ2IiwiaGFuZGxlciQwIiwiYXBwbHlfc3RhdGUiLCJ3aXRoX3N0YXRlIiwiUyIsInZfc3RhdGUiLCJnZXRfc3RhdGUiLCJzZXRfc3RhdGUiLCJlbHQiLCJmdW5jJDAiLCJhdCQxIiwiaCQxIiwibmV4dCQwIiwidHdvX3N0YXRlIiwianNfc2Nyb2xsIiwibWFrZSQ3Iiwic2Nyb2xsX3RhcmdldCIsImFjdGl2ZV9jbGFzcyIsIm9uX2NsaWNrIiwiY29udHJvbHMiLCJvbl93aGVlbCIsImVsdCQwIiwibWFrZV9oYW5kbGVyIiwidmFsdWVfY2hhbmdlX2V2ZW50IiwiZGVmYXVsdF92YWx1ZSIsIm9uX2NoYW5nZSIsIm1ha2VfaW5wdXQiLCJ2YWxpZGF0ZSIsInBhdHRlcm4kMCIsInJlcXVpcmVkIiwidHlwZSQxIiwidmFsaWRhdGUkMCIsInRleHRfaW5wdXQiLCJwbGFjZWhvbGRlciQwIiwicGFzc3dvcmRfaW5wdXQiLCJzdWJtaXQkMCIsImZpZWxkJDAiLCJzZXR0ZXIiLCJjcmVhdGUkOCIsIkZvcm0iLCJvbl9zdWJtaXQiLCJlbHRzIiwiZWx0cyQwIiwib25fc3VibWl0JDAiLCJuYW1lJDAiLCJiYXNlX25hbWUiLCJtYWtlJDgiLCJuYW1lJDEiLCJ2YXIkMCIsIm1ha2UkOSIsIm9wdGlvbnMiLCJvcHRpb25zJDAiLCJzZWxlY3RlZCIsIm5hbWUkMiIsIm1ha2UkMTAiLCJtYWtlX2NoZWNrIiwibGFiZWwiLCJjaGVja2VkIiwibGJsIiwiY2hlY2tlZCQxIiwibWFrZV9hbGwiLCJhbGwiLCJxMSIsInEyIiwiZXZpY3Rfb25lIiwib25fZXZpY3QiLCJldmljdF9xMiIsImV2aWN0X3EyJDAiLCJldmljdF9xMSIsInZpc2l0ZWQiLCJ0JDEiLCJldmljdCIsImluc2VydCIsIm9uX2luc2VydCIsInZpc2l0ZWQkMCIsInYkNyIsImNzc19zaXplIiwidG9faGVhZGVyIiwiY2VsbHMiLCJzdHlsZSQxIiwidGVtcGxhdGUiLCJzdHlsZSQyIiwiaGVhZGVyIiwicm93X2hlaWdodCIsImxvZ2dlciIsIm1ha2UkMTEiLCJ1aV90YWJsZSIsInJlbmRlciIsImZldGNoIiwidG90YWxfaXRlbXMiLCJjb250ZW50X2RpdiIsIndyYXBwZXJfZGl2Iiwicm93X3NpemUiLCJoZWlnaHRfbiIsImhlaWdodCQwIiwidGFibGUiLCJyb3dfaW5kZXgiLCJ1bmxvYWQiLCJyb3ciLCJyb3dfZGF0YSIsIm5ld19jYWNoZSIsImNhY2hlX3JlZiIsImluZGV4ZXMiLCJjYWNoZSIsImxvYWQiLCJkYXRhJDAiLCJpbnNlcnRlZCIsImNhY2hlJDAiLCJ0b19sb2FkIiwidG9fbG9hZCQwIiwidGFibGVfaGVpZ2h0IiwiY29tcHV0ZV92aXNpYmxlX3Jvd3MiLCJsYXN0X3Njcm9sbF95IiwiZGl2Iiwic2Nyb2xsX3kkMCIsImRpcmVjdGlvbiIsInZpc2libGVfaGVpZ2h0IiwibnVtYmVyX29mX3Zpc2libGVfcm93cyIsImZpcnN0X3Zpc2libGVfcm93IiwibGFzdF92aXNpYmxlX3JvdyIsImJsZWVkaW5nIiwiYmxlZWRpbmckMCIsImxhc3QiLCJwcmVwYXJlIiwiY3VycmVudF9yb3ciLCJyb3ckMCIsInZpc2libGVfcm93cyIsInBvcHVsYXRlX29uX3Njcm9sbCIsInJlcG9wdWxhdGVfZGVwcyIsIm1ha2Vfc3BhY2VyIiwicmVuZGVyJDAiLCJyZW5kZXJlZF9yb3ciLCJyb3dzIiwic3BhY2VyIiwicyQxIiwidGFibGVfYm9keSIsImZpcnN0X3NwYWNlciIsImxhc3Rfc3BhY2VyIiwidGFibGVfaGVhZGVyIiwicmVjdCIsInJvd3MkMCIsInNjcm9sbF9oYW5kbGVyIiwibGFzdF91cGRhdGUiLCJ0aW1lb3V0IiwicmVzZXRfdGlja2VyIiwiZGVib3VuY2luZ19pbnRlcnZhbCIsIm9uX2NyZWF0ZSQwIiwic2Nyb2xsX3RhcmdldCQwIiwic2Nyb2xsX3RhcmdldCQxIiwid3JhcHBlciIsImdyaWRfc3R5bGUiLCJhdCQyIiwidGFibGUkMCIsImxleF9lcnJvciIsImVycm9yX3BvcyIsImNudW0iLCJlbnVtJDAiLCJzdHJpbmcybnVtIiwidXBkYXRlX3BvcyIsImludF9vZl9oZXhjaGFyIiwidXRmOF9vZl9jb2RlIiwidSIsIm1heF91c2VkX2JpdHMiLCJ1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIiwiaGlnaCIsImxvdyIsImhpZ2gkMCIsImxvdyQwIiwiZXNjYXBpbmdfZXJyb3IiLCJvZmZzIiwidW5lc2NhcGVfc3RyaW5nIiwidTEiLCJ1MiIsInJlYWQkMCIsIm9jYW1sX2xleF9yZWFkX3JlYyIsIm9jYW1sX2xleF9zdGF0ZSIsIm9jYW1sX2xleF9zdGF0ZSQwIiwib2NhbWxfbGV4X3N0YXRlJDEiLCJyZWFkX2NvbW1lbnQiLCJyZWFkX2NvbW1lbnQkMCIsIm9jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIiwiY3JlYXRlX2Zyb21fbGV4YnVmIiwiZW1zZyIsImVjaGFyIiwic2NoYXIiLCJlbGluZSIsImxvZzIiLCJiaXRzJDAiLCJtYXhfanNvbl9pbnQiLCJzdHJpbmdfb2ZfZmxvYXRfanNvbiIsImlzX2ludCIsImludF92YWx1ZSIsInRva2VuX2Vycm9yIiwicyQyIiwianNvbl92YWx1ZSIsInRva2VuX3ZhbHVlIiwib2JqZWN0X3ZhbHVlX3N0YXJ0IiwiYXJyYXlfdmFsdWVfc3RhcnQiLCJ2YXJpYW50X3ZhbHVlX3N0YXJ0IiwidHVwbGVfdmFsdWVfc3RhcnQiLCJhcnJheV92YWx1ZXNfc3RhcnQiLCJ0b2skMCIsImFycmF5X3ZhbHVlcyIsIm9iamVjdF92YWx1ZXNfc3RhcnQiLCJjb2xvbl92YWx1ZSIsIm9iamVjdF92YWx1ZXMiLCJrZXlfY29sb25fdmFsdWUiLCJ0dXBsZV92YWx1ZXMiLCJ2YXJpYW50X2VuZCIsImRlY29kZSIsImVyciQwIiwibmliYmxlX3RvX2hleCIsImFkZF9oZXhfYnl0ZSIsImVzY2FwZSIsInRvX2pzb25fc3RyaW5nIiwiYWRkX2NoYXIkMCIsImFkZF9zdHJpbmckMCIsImFkZF9xdW90ZV9zdHJpbmciLCJwcF9saXN0IiwicHB4Iiwib3V0IiwianNvbiIsImZvcm1hdF9maWVsZCIsImpzb24kMCIsInMkMyIsInByZXR0eV9wcmludCIsInByZXR0eV9wcmludF90b19zdHJpbmciLCJwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCIsImVycm9yJDEiLCJ0b19hc3NvYyIsIm51bGwkMSIsInRva2VuX3RvX3N0cmluZyIsInJlYWRfanNvbiIsInJlYWRfanNvbl9lcnJvcl9pbmZvIiwiZXJyX2luZm8iLCJqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIiwianNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8iLCJpbmMiLCJqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyIsImZpbGVuYW1lIiwianNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wIiwic3RyZWFtIiwicmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIiwiZmluIiwic3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyIsImpzb25fdG9fY2hhbm5lbF9mbXQiLCJlb2wiLCJpbmNyIiwicHNlcCIsImFkZF9pbnQiLCJhZGRfZmxvYXQiLCJwc2VwJDAiLCJsZHIkMSIsImpzb25fbGlzdCIsImxkciQyIiwibGRyIiwianNvbl9hc3NvYyIsImxkciQwIiwibmV3c2VwIiwianNvbl90b19jaGFubmVsIiwianNvbl90b19maWxlX2V4biIsImpzb25fdG9fYnVmZmVyIiwianNvbl90b19zdHJpbmciLCJqc29uX2Vycm9yIiwiZXJyb3JfdG9fc3RyaW5nIiwiZXJyb3JfaW5mbyIsImZuYW1lIiwibG51bSIsImxudW0kMCIsImxudW0kMSIsImZuYW1lJDAiLCJsb2MiLCJhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyIsImZyb21fc3RyaW5nIiwidG9fc3RhbmRhcmQiLCJ0cGwiLCJqb3B0Iiwic3RkIiwibGV4X3N0cmluZyIsImxleF9udW1iZXIiLCJsZXhfaW50ZWdlciIsImxleF9sYXJnZWludCIsImxleF92YXJpYW50IiwibGV4X3R1cGxlIiwiY29tbWVudF9jaGVjayIsIm51bWJlcl90b19zdHJpbmciLCJsYXJnZWludCIsImludGVnZXIiLCJudWxsJDIiLCJzdHJpbmckMCIsImJvb2wiLCJhc3NvYyIsImxpc3QiLCJ0dXBsZSIsIm51bWJlciIsImFycmF5X3N0YXJ0IiwiYXJyYXlfZW5kIiwib2JqZWN0X3N0YXJ0Iiwib2JqZWN0X2VuZCIsInR1cGxlX3N0YXJ0IiwidHVwbGVfZW5kIiwidmFyaWFudF9zdGFydCIsIm5hbWUkMyIsImxleF9zdHJpbmckMCIsImxleF9udW1iZXIkMCIsImxleF9pbnRlZ2VyJDAiLCJsZXhfbGFyZ2VpbnQkMCIsImxleF92YXJpYW50JDAiLCJsZXhfdHVwbGUkMCIsImNvbW1lbnRfY2hlY2skMCIsIm51bWJlcl90b19zdHJpbmckMCIsImxhcmdlaW50JDAiLCJpbnRlZ2VyJDAiLCJudWxsJDMiLCJzdHJpbmckMSIsImJvb2wkMCIsImFzc29jJDAiLCJsaXN0JDAiLCJ0dXBsZSQwIiwidmFyaWFudCQwIiwibnVtYmVyJDAiLCJhcnJheV9zdGFydCQwIiwiYXJyYXlfZW5kJDAiLCJvYmplY3Rfc3RhcnQkMCIsIm9iamVjdF9lbmQkMCIsInR1cGxlX3N0YXJ0JDAiLCJ0dXBsZV9lbmQkMCIsInZhcmlhbnRfc3RhcnQkMCIsInZhcmlhbnRfZW5kJDAiLCJuYW1lJDQiLCJmcm9tX3N0cmluZyQwIiwidG9fc3RyaW5nJDUiLCJsZXhfc3RyaW5nJDEiLCJsZXhfbnVtYmVyJDEiLCJsZXhfaW50ZWdlciQxIiwibGV4X2xhcmdlaW50JDEiLCJsZXhfdmFyaWFudCQxIiwibGV4X3R1cGxlJDEiLCJjb21tZW50X2NoZWNrJDEiLCJudW1iZXJfdG9fc3RyaW5nJDEiLCJsYXJnZWludCQxIiwiaW50ZWdlciQxIiwibnVsbCQ0Iiwic3RyaW5nJDIiLCJib29sJDEiLCJhc3NvYyQxIiwibGlzdCQxIiwidHVwbGUkMSIsInZhcmlhbnQkMSIsIm51bWJlciQxIiwiYXJyYXlfc3RhcnQkMSIsImFycmF5X2VuZCQxIiwib2JqZWN0X3N0YXJ0JDEiLCJvYmplY3RfZW5kJDEiLCJ0dXBsZV9zdGFydCQxIiwidHVwbGVfZW5kJDEiLCJ2YXJpYW50X3N0YXJ0JDEiLCJ2YXJpYW50X2VuZCQxIiwibmFtZSQ1IiwidG9fanN0ciQyIiwib2ZfanN0ciQxIiwib2ZfanYiLCJqdiIsInJhbmRvbV9zdGF0ZSIsIm5ld191dWlkX3Y0IiwieW9qc29uX29mX3N0cmluZyIsInlvanNvbl9vZl9pbnQiLCJ5b2pzb25fb2Zfb3B0aW9uIiwieW9qc29uX29mX2EiLCJ5b2pzb25fb2ZfbGlzdCIsImxzdCIsInJlY29yZF9jaGVja19leHRyYV9maWVsZHMiLCJvZl95b2pzb25fZXJyb3IiLCJ3aGF0IiwieW9qc29uIiwic3RyaW5nX29mX3lvanNvbiIsImludF9vZl95b2pzb24iLCJvcHRpb25fb2ZfeW9qc29uIiwiYV9vZl95b2pzb24iLCJsaXN0X29mX3lvanNvbiIsInJldl9sc3QiLCJzdGFnX25vX2FyZ3MiLCJuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSIsImVtcHR5X2xpc3RfaW52YWxpZF9zdW0iLCJ1bmV4cGVjdGVkX3N0YWciLCJyZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIiwicmV2X2ZsZF9uYW1lcyIsImZsZF9uYW1lc19zdHIiLCJyZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyIsInJlY29yZF9leHRyYV9maWVsZHMiLCJyZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIiwiZmllbGRzJDAiLCJyZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIiwidW5kZWZpbmVkJDAiLCJyZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20iLCJzeW1ib2wkMTUiLCJqc3RyX29mX21ldGhvZCIsInVzZXJfb2ZfeW9qc29uIiwiZmllbGRfeW9qc29ucyIsIm5hbWVfZmllbGQiLCJzZXJ2ZXJfaWRfZmllbGQiLCJzZXJ2ZXJfbmFtZV9maWVsZCIsImlkX2ZpZWxkIiwiZHVwbGljYXRlcyIsImV4dHJhIiwiZmllbGRfeW9qc29uIiwiZmllbGRfbmFtZSIsImZ2YWx1ZSIsImZ2YWx1ZSQwIiwiZnZhbHVlJDEiLCJmdmFsdWUkMiIsInNlcnZlcl9uYW1lX3ZhbHVlIiwiaWRfdmFsdWUiLCJzZXJ2ZXJfaWRfdmFsdWUiLCJuYW1lX3ZhbHVlIiwieW9qc29uX29mX3VzZXIiLCJ2X2lkIiwidl9zZXJ2ZXJfbmFtZSIsInZfc2VydmVyX2lkIiwidl9uYW1lIiwiYm5kcyIsImFyZyQwIiwiYm5kcyQwIiwiYXJnJDEiLCJibmRzJDEiLCJhcmckMiIsImJuZHMkMiIsInBhcmFtc19vZl95b2pzb24iLCJ1c2VybmFtZV9maWVsZCIsInB3X2ZpZWxkIiwicHdfdmFsdWUiLCJ1c2VybmFtZV92YWx1ZSIsInlvanNvbl9vZl9wYXJhbXMiLCJ2X3B3Iiwidl91c2VybmFtZSIsInJlc3BvbnNlX29mX3lvanNvbiIsInVzZXJfZmllbGQiLCJhY2Nlc3NfdG9rZW5fZmllbGQiLCJhY2Nlc3NfdG9rZW5fdmFsdWUiLCJ1c2VyX3ZhbHVlIiwieW9qc29uX29mX3Jlc3BvbnNlIiwidl9hY2Nlc3NfdG9rZW4iLCJ2X3VzZXIiLCJlbmRwb2ludCIsImltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24iLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIiwiaW1hZ2VfYmx1cl9oYXNoZXNfb2ZfeW9qc29uIiwicHJpbWFyeV9maWVsZCIsInByaW1hcnlfdmFsdWUiLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoZXMiLCJ2X3ByaW1hcnkiLCJibmQiLCJ0eXBlX29mX3lvanNvbiIsInlvanNvbl9vZl90eXBlIiwidHlwZV9zdHJfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGVfc3RyIiwidHMiLCJ0X29mX3lvanNvbiIsInNvcnRfbmFtZV9maWVsZCIsInBhdGhfZmllbGQiLCJhbGJ1bV9pZF9maWVsZCIsInBhcmVudF9pZF9maWVsZCIsImltYWdlX2JsdXJfaGFzaGVzX2ZpZWxkIiwidHlwZV9maWVsZCIsImNvbGxlY3Rpb25fdHlwZV9maWVsZCIsImZ2YWx1ZSQzIiwiZnZhbHVlJDQiLCJmdmFsdWUkNSIsImZ2YWx1ZSQ2IiwiZnZhbHVlJDciLCJmdmFsdWUkOCIsInNvcnRfbmFtZV92YWx1ZSIsInBhdGhfdmFsdWUiLCJhbGJ1bV9pZF92YWx1ZSIsInBhcmVudF9pZF92YWx1ZSIsImNvbGxlY3Rpb25fdHlwZV92YWx1ZSIsInR5cGVfdmFsdWUiLCJpbWFnZV9ibHVyX2hhc2hlc192YWx1ZSIsInlvanNvbl9vZl90Iiwidl9jb2xsZWN0aW9uX3R5cGUiLCJ2X3R5cGUiLCJ2X2ltYWdlX2JsdXJfaGFzaGVzIiwidl9wYXJlbnRfaWQiLCJ2X2FsYnVtX2lkIiwidl9wYXRoIiwidl9zb3J0X25hbWUiLCJhcmckOCIsImJuZCQzIiwiYm5kcyQzIiwiYm5kcyQ0IiwiYXJnJDMiLCJibmQkMCIsImJuZHMkNSIsImFyZyQ0IiwiYm5kJDEiLCJibmRzJDYiLCJhcmckNSIsImJuZHMkNyIsImFyZyQ2IiwiYm5kJDIiLCJibmRzJDgiLCJhcmckNyIsImJuZHMkOSIsInNlc3Npb25fdXVpZCIsInNldF9zZXNzaW9uX3V1aWQiLCJhdXRob3JpemF0aW9uIiwidG9rZW4kMCIsInNlc3Npb25fdXVpZCQwIiwicmVxdWVzdCQxIiwiYmFzZV91cmwiLCJoZWFkZXJzIiwiUSIsInBhdGhfcGFyYW1zIiwiYmFzZV91cmkiLCJiYXNlX3BhdGhfc2VnbWVudHMiLCJlbmRwb2ludF9wYXRoX3NlZ21lbnRzIiwicGF0aF9zZWdtZW50cyQwIiwidXJpIiwidXJpJDAiLCJhdXRob3JpemF0aW9uJDAiLCJoZWFkZXJzJDAiLCJtZXRob2QiLCJib2R5IiwicGFyYW1zJDAiLCJ1cmlfd2l0aF9wYXJhbXMiLCJ1cmwkMSIsImluaXQkMCIsImNvbm5lY3QiLCJjcmVkZW50aWFscyIsInBhc3N3b3JkIiwidXNlcm5hbWUiLCJhdXRoIiwiYXV0aF9yZXNwb25zZSIsInRhZ19vZiIsImZ1dHVyZXMiLCJsaXN0ZW5lcnMiLCJ3b3JrZXIiLCJxdWVyeSIsInV1aWQiLCJmdXQiLCJzZXQkMCIsInF1ZXJ5JDAiLCJvbl9tZXNzYWdlIiwibWVzc2FnZSIsIm9mX3N0cmluZyQyIiwib2Zfc3RyaW5nJDMiLCJyZXEiLCJzcmNfdmlld3MiLCJmaWx0ZXJzIiwidF90b19qdiIsImVuY29kZXIiLCJqdl90b190IiwiZGVjb2RlciIsInNvcnRzX29mX3lvanNvbiIsImRhdGVfYWRkZWRfZmllbGQiLCJ2aWV3c19maWVsZCIsInZpZXdzX3ZhbHVlIiwiZGF0ZV9hZGRlZF92YWx1ZSIsInlvanNvbl9vZl9zb3J0cyIsInZfdmlld3MiLCJ2X2RhdGVfYWRkZWQiLCJ0X29mX3lvanNvbiQwIiwic29ydHNfZmllbGQiLCJpdGVtX2ZpZWxkIiwiaXRlbV92YWx1ZSIsInNvcnRzX3ZhbHVlIiwieW9qc29uX29mX3QkMCIsInZfaXRlbSIsInZfc29ydHMiLCJjb21wYXJlJDIiLCJ0b19qdiQwIiwidmlld3MiLCJzb3J0X25hbWUiLCJzb3J0X25hbWUkMCIsInZpZXdzJDAiLCJvZl9qdiQwIiwicGF0aCQwIiwidG9fanYkMSIsIm9mX2p2JDEiLCJ0b19qdiQyIiwib2ZfanYkMiIsInRvX2p2JDMiLCJvZl9qdiQzIiwicGF0aCQzIiwidG9fanYkNCIsIm9mX2p2JDQiLCJjb2xsZWN0aW9uX3R5cGUiLCJwYXRoJDQiLCJ0b19qdiQ1Iiwib2ZfanYkNSIsImdldF9rZXkiLCJzdGF0dXNfdG9fc3RyaW5nIiwibGFzdF9zb3VyY2VfaXRlbV9rZXkiLCJmaXJzdF91bmZldGNoZWRfa2V5IiwiZmlyc3RfbWlzc2luZ19rZXkiLCJmaXJzdF91bmZldGNoZWRfa2V5JDAiLCJwcF9wcm9ncmVzcyIsInJlbWFpbmluZyIsInBwX3JlcG9ydCIsInN5bmNfcHJvZ3Jlc3MiLCJzdGF0dXMkMCIsImFjdGl2ZV9sYXlvdXQiLCJnZXQkNyIsInN0cmluZyIsInNldCQxIiwidG9fdmlldyIsInJlcXVlc3QiLCJzdGFydF9vZmZzZXQiLCJpdGVtX2NvdW50Iiwic2VydmVyc19zdGF0dXMiLCJyZXBvcnQiLCJ1cGRhdGUkMSIsImVxIiwiY3VycmVudCIsIm1lbW8iLCJnZXRfdmlld19pdGVtX2NvdW50IiwiZXJyb3IiLCJjb25uZXhpb25zIiwiY29ubmVjdCQwIiwicmVmcmVzaCIsImNvbm5leGlvbiIsInNlcnZlcl9pZCIsInByZXZpb3VzX3N0YXR1cyIsInJlbWFpbmluZyQwIiwic2VydmVyc193aXRoX3N0YXR1cyIsInNlcnZlciIsIm5ld19jb25uZXhpb24iLCJzZXJ2ZXJzIiwidXJsX2ZpZWxkIiwicGFzc3dvcmRfZmllbGQiLCJzdWJtaXQkMSIsInVpX2Zvcm0iLCJ1cmwiLCJ1aV9zdGF0dXMiLCJmdXRfdG9fbHdkIiwic2VxX3NoYXJlIiwibF9zYW1lIiwicl9zYW1lIiwiciQxIiwibGliX2RpZmYiLCJzZXJ2ZXJzX2xpYnJhcmllcyIsInByZXZpb3VzX3ZhbHVlIiwidWkiLCJzdGF0dXNlcyIsInVpX2Zvcm0kMCIsIm5vd19wbGF5aW5nIiwiYXVkaW9fdXJsIiwiaXRlbV9pZCIsInNldF9wbGF5X3VybCIsInBsYXlsaXN0IiwiY3VycmVudF9pbmRleCIsInBsYXlsaXN0JDAiLCJpdGVtIiwiYWxidW1faWQiLCJzZXNzaW9uIiwiaW1hZ2VfaWQiLCJpbWdfc3JjIiwicmVzZXRfcGxheWxpc3QiLCJtYWtlIiwiYXVkaW9fZWx0Iiwic2V0X3NyYyIsIm5leHRfaW5kZXgiLCJzZXRfcG9zaXRpb25fc3RhdGUkMCIsIm9uX2Vycm9yIiwiYnRuX25leHQiLCJucCIsInRyYWNrX2NvdmVyIiwidHh0JDAiLCJ0aXRsZSIsInRyYWNrX2RldGFpbHMiLCJub3dfcGxheWluZyQwIiwibWFrZSQxMiIsIm9uX2NsaWNrJDAiLCJjb2x1bW5zIiwibWFrZSQxMyIsInJhbmdlZCIsIm9yZGVyIiwiaW1nX3VybCIsInN0YXJ0X2luZGV4IiwiaW1hZ2VfYmx1cl9oYXNoZXMiLCJwbGF5X2Zyb20iLCJwbGF5X29uX2NsaWNrIiwiY2IiLCJpbWdfdXJsJDAiLCJwbGFjZWhvbGRlciIsImRhdGFfc291cmNlIiwibWFrZV9ub3dfcGxheWluZyIsImZldGNoJDEiLCJyYW5nZWRfdmlldyIsInBsIiwicGxheWVyIiwicGxheWVyX3VpIiwiZl9zZWFyY2giLCJmX3NvcnQiLCJmX29yZGVyIiwiZl9zb3J0X29yZGVyIiwiY2hvaWNlcyIsImZfbGlicmFyaWVzIiwiZl92YWx1ZSIsInJlcXVlc3QkMiIsIm5ld192aWV3IiwiaXRlbV9jb3VudCQwIiwib3JkZXIkMCIsIm1haW5fdmlldyIsIm1haW5fbGlzdCIsImRpc3BsYXlfbm9uZSIsInN0eWxlJDMiLCJiaWdfY292ZXIiLCJhcHAiLCJpc19zdG9yYWdlX3BlcnNpc3RlbnQiLCJvbl9sb2FkIiwiYXBwJDAiXSwic291cmNlcyI6WyIvYnVpbHRpbi8rYXJyYXkuanMiLCIvYnVpbHRpbi8rbWxCeXRlcy5qcyIsIi9idWlsdGluLytzeXMuanMiLCIvYnVpbHRpbi8rYmFja3RyYWNlLmpzIiwiL2J1aWx0aW4vK3N0ZGxpYi5qcyIsIi9idWlsdGluLytqc2xpYi5qcyIsIi9idWlsdGluLytmYWlsLmpzIiwiL2J1aWx0aW4vK2llZWVfNzU0LmpzIiwiL2J1aWx0aW4vK29iai5qcyIsIi9idWlsdGluLytpbnQ2NC5qcyIsIi9idWlsdGluLytiaWdhcnJheS5qcyIsIi9idWlsdGluLytpbnRzLmpzIiwiL2J1aWx0aW4vK2hhc2guanMiLCIvYnVpbHRpbi8rbWFyc2hhbC5qcyIsIi9idWlsdGluLytjb21wYXJlLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytmc19ub2RlLmpzIiwiL2J1aWx0aW4vK2ZzLmpzIiwiL2J1aWx0aW4vK3VuaXguanMiLCIvYnVpbHRpbi8rZnNfZmFrZS5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rbWQ1LmpzIiwiL2J1aWx0aW4vK2lvLmpzIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbGV4aW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcHJpbnRleGMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzLWRhdGEvQ0NGUXVldWUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvY29tcGxpYW50X2xleHhlci5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGF0YV9zb3VyY2UvamVsbHlmaW5fYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9zdG9yZXMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3N5bmMubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2xhbmcubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3dvcmtlcl9jbGllbnQubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3NlcnZlcnMubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3BsYXllci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEF0b21pYy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0ZGxpYi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NJbnQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9yYW5kb20ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9saXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvb2JqLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2xhenkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9vcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9yZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDQ2hhci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NoYXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9pbnQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9ieXRlcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2FycmF5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbWFwLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RhY2subWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9xdWV1ZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0cmVhbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2J1ZmZlci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3ByaW50Zi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIveW9qc29uX2NvbnZfZXJyb3IubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9mdW4ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9kaWdlc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9oYXNodGJsLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0Zvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbGxiYWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNfb2Zfb2NhbWwtY29tcGlsZXIvcnVudGltZS9qc29vX3J1bnRpbWUubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvbHdkL2xpYi9sd2QvbHdkX3V0aWxzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2x3ZC9sd2RfdGFibGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZF9zZXEucHAubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2Zvcm1zL2ZpZWxkLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2Jyci1sd2QvZWx3ZC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NBcnJheS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NGbG9hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NIYXNodGJsLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0xpc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDT3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NSZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMtZGF0YS9DQ011bHRpTWFwLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2JycmVyL2RvbV9yZWN0X3JlYWRfb25seS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9icnJlci9yZXNpemVfb2JzZXJ2ZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvYnJyZXIvbWVkaWFfc2Vzc2lvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9icnJlci9icnJlci5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL2ltcG9ydC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL3V0aWxzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi9jb21tb24vdHJhbnNsYXRlZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL2VuY29kaW5ncy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL3BlcnNpc3RlbnQubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2NvbW1vbi9sb2dnZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2NvbW1vbi9hdHRycy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvYnV0dG9uL2J1dHRvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29udHJvbGxlZF9zY3JvbGwvY29udHJvbGxlZF9zY3JvbGwubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2Zvcm1zL2Zvcm0ubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2Zvcm1zL2ZpZWxkX3RleHRpbnB1dC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvZm9ybXMvZmllbGRfc2VsZWN0Lm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi9mb3Jtcy9maWVsZF9jaGVja2JveGVzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi90YWJsZS9GRkNhY2hlLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi90YWJsZS9zY2hlbWEubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL3RhYmxlL3ZpcnR1YWxfdGFibGUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvbGV4eGVyX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2Vycm9yX2luZm8ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvanNvbl9mbG9hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wYXJzZXJfdG9vbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcGFyc2VyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3ByZXR0eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wcm9jZXNzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3Rva2VuX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3JlYWRlcl9zdHJpbmdfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3lvanNvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3RkL3N0ZC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIveW9qc29uX2NvbnYubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3BweF95b2pzb25fY29udl9saWIubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RhdGFfc291cmNlL2plbGx5ZmluLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi93b3JrZXJfYXBpL3dvcmtlcl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3ZpZXcubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL2RiX3dvcmtlcl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2ltcG9ydC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vYXBwX3N0YXRlLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9sd2Rfdmlldy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vdWkubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3VpX3BsYXlsaXN0Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9tYWluLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIv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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJcUI1T0lHOztJQ3RIQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUNVQUM7SUFJQUM7SUNIQUM7Ozs7Ozs7Ozs7Ozs7SUNISkM7SUFvQkVDO0lBR0FDO0lBc0JBQztJQUtBQztJQW1IQUM7SUN4SkFDO0lBR0FDO0lBZ0NNQztJQVFBQztJQW9DRkM7SUNYRkM7SUN6R0VDOzs7O0lDREFDO0lDb0RBQztJQ1FjQztJQUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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SSxPO0c7Rzs2QixPLGM7O0k7SSxPO0c7O0k7STs7OztJLE87Rzt5QixPLHNCLGM7MEIsaUM7bUMsTyx5Qjs4QjtHO0csSSxlO3VCLDRCOzRCLGlDOztJO0k7Rzt5QixzQjs7SSw0QjtHOztJLFk7O0ksTzs7Rzs7SSxZOztJO0k7O0c7d0IsTSxPO3lCLGMsTzs7SSxZOztJOzt3QixZO3dCLFk7MkIsVSxPOztJLFk7O0k7OzhCO3dCLDhCO3dCLHFCOztJO0ksNkIsTyx1QjtHOzs7OztvQjs7TSxVOzs7Ozs7STtHOztJO0ksVzs7STtJO0c7O0k7SSxPLHlCLFU7RztHOzs7SyxPOzZCLE8sTyxlLE8sTztJO0ksbUI7Rzt1QixPLG1COzBCLE8scUMsTzs7SSxPLE87Rzs7SSxPO2E7YTtHOztJLE87RztZQ3JtQnpCckYsYzt1QjttQixnQjt5QixrQjs7STtLLE07STtJLHVCLCtDO0k7SSxxQyw4QjtJO29CLHVEO0k7RzswQixnQzt3Qix1Qjs7STs7OzJCLGlCLG1CO0c7O0ksNkIsZ0IsbUI7RztrQix3Qjs7cUIsbUIsb0I7SSxvQixtQix1QjtJO0c7O0kscUM7Rzs7SSxzQjs7YyxlOztjLE87YTtHOztJLDRCLE8zQjNDRjkwQjtHO0c7c0IscUI7MEMsOEI7RzsrQixvQixTOztJO0ksVTs7SztLO0k7STtJO0c7K0IsTyx3QjtHO0k7STtJO0k7STtJO0k7STtJO0c7RztHO0c7RztzQixPLGtCOztJLEksUTs7Ozs7Szs7STtHO0c7RztHO0k7STtJOztJLFc7O0k7RztHO29CLHNCOzsyQixPLG9CO0k7SztNO007TTtLOzs7Ozs7Szs7Rzs7MkIsd0IscUI7STtLLEksa0I7SztLO0s7Ozs7OztLOztHO0c7dUIsTyxhO3NCLGtCOztJO0k7STtHO3lCLE8sYTtzQixpQjtHO3dCLHVCO3NCLHVCO3dCLGlDOzBCO0c7STtJO0k7STtJO0k7STtJO0k7STtJO0k7STtJO3VCLHVCO3FCLHFCO29CLG9CO0csSSwrQjtxQixtQjt1QixxQjtzQixvQjt1Qix1Qjt1Qix1QjtHO3dCLDBCO0csK0I7dUIsa0IsUzs7Ozs7O08sNkJMbUNBVztPOztNOzs7Szs7O007Ozs7OzRCOzs7VTs7OztJO0k7SSxRO0k7SSxvQjtJO0c7O0k7SSxPO0c7O0k7STtHOztJLGtCOzBCLHdCO0k7STtHOzJCLGdDOztJLDBDO0c7dUIsb0IsTyx1Qjs7SSxZLCtCO0c7O0k7SSxJLFEsdUI7STtHO3dCLHNCOztJO0k7STtJO0c7RztJO0k7STtJO0k7STtJO0k7STtJO0k7b0MsNEI7RyxtQztHLGlDO0csZ0M7RyxrQztvQiw4Qjs7STtJOzs7OztHOztJLGdDO0c7a0Msa0MsUztHOztJOzs7b0I7O007TTs7Ozs7SSxPO0c7cUIsZ0Q7eUIsZ0Q7c0IsZ0Q7dUIsZ0Q7eUIsUztzQixPLFE7RztHO0k7STtJO0c7O0ksTyxrQjtHOzRCLDBCLE87O0ksNkI7STtHO0c7RzswQjs7SSxtQyxlO0c7Rzs7STtJLFM7STs7SztLOztJLG9CO0k7Rzs7Ozs7Ozs7Ozs7Ozs7O0k7SSxvRDtJO0k7SSxxQklwQ0FkLG1CO0k7STtJO0k7STtJO0k7SSxvRDtJO0c7Rzs7STtJO0c7RztHOzt3QjtJLHNCLGtDO0c7RztHO0c7RztHO29CLGlCO0c7cUIseUI7O3dCO0ksc0IsK0I7Rzs7SSxJLGlCOzs7MEI7OztHO0c7Rzs7STtJO0c7O0k7STtJO0c7Rzs7STtJO0k7RztHO0c7RztZNkJGQTlJLFFBQVNvcEMsTUFBS0MsTUFBTUMsTUFDdEIsV0FEV0YsTUFBS0MsTUFBTUMsTUFDSztZQUV6QkM7SUFBa0I7d0JBRWY5akQsY0FBb0IsTzdCQ3ZCc2pCLGdCNkJER3RqQjtrQkFESztRQUVMNnFDO0lBQW9CLE83QkF2QnZuQixnQjZCQUd1bkI7R0FBbUM7WUFFdENrWixxQkFBcUIvakQsR0FBSSxPN0JUekJvakIsYzZCU3FCcGpCLElBQThCO1lBRW5EZ2tELHNCQUFzQmpMO0lBQ3hCOzs7Z0JBQ1c7O3FCQUVBLzRDO2lCQUFLLFdBTmQrakQscUJBTVMvakQ7OztxQkFDQTZxQztpQkFBcUIsT0Z5a0I5QnNZLFVFaGxCQVkscUJBT1NsWjs7b0JBRkFDO2dCQUFLLFdBQUxBO2VBR047ZUFObUJp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QztPQUNBQztPQUNBQztPQUNBQzsyQixPN0VoWUp2OUIsUTtHQVRBRjs7STtLLEs7SyxLO0ssSztLLEs7SyxLO0ssSTs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjtJO0c7O0ksc0I7SSx1QixvQztHOztJO0k7SSx1Qiw0QztJLEkscUIsWTs7O007OztLLGdCO0s7O007OztLLHNCO0k7OztLLFc7Szs7Ozs7OztLLFc7Szs7Ozs7OztLLFc7Szs7Ozs7OztLLFc7Szs7Ozs7O29CO0ssVztLOzs7O0c7O1k4RXREQTA5QixVQUFRbm9FLEdBQUksY0FBSkEsR0FBZ0M7WUFHeENvb0UsVUFBUTNZO0lBQ0osbUJBRElBOzJCQUVMdnZELGNBQUssV0FBTEE7UUFDRzJQO0lBQ0osWUFESUE7SUFDSjtHQUN1QztZQUV6Q3c0RCxNQUFNQyxJQUFLLE9BUFhGLFVBT01FLElBQTZCO0dBR3RCLElBQWZDO1lBQ0FDLG1CQUFpQixjQURqQkQsaUJBQzZDO1lDbEI3Q0UsaUJBQWlCOXdELEtBQVUsdUJBQVZBLEtBQXFCO1lBR3RDK3dELGNBQWMvb0UsR0FBUSxvQkFBUkEsR0FBYztZQVE1QmdwRSxpQkFBaUJDO0ksWUFFVDtRQURIam9FO0lBQUssT0FBQSxXQURPaW9FLGFBQ1pqb0U7O1lBY0xrb0UsZUFBZUQsYUFBYUU7SUFBTSxzQjlFeUJsQ2hrRCxZOEV6QmU4akQsYUFBYUU7R0FBeUQ7R0FrQnpGO0lBQUE7SUFFSUM7WUFFQUMsZ0JBQWdCQyxNQUFLQztJQUFTLE1BQUE7OENBQWRELE9BQUtDO0dBQXVEO1lBYzVFQyxpQkFBaUJEO0lBQ25CLFVBRG1CQSxzQ0FBQUEsZUFFVHZ4RCxNQUZTdXhELFdBRUYsT0FBUHZ4RDtJQUNILE9BakJMcXhELHNCQWNpQkU7R0FHNEM7WUFrQjdERSxjQUFjRjtJQUNoQixV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Rnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7OzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzs7Ozs7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7Ozs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8s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dUIsZXFFOEtVOXVCO1FBWThEO0lBRXBFa3ZDLG1CQXJCQXEyQjtJQUZGRTtNeERnS0Y1MUI7O1l3RHpJSVg7OztvQnhEeUlKVyx5QndEekpJMjFCOzs7OztReER5SkozMUI7Ozs7O3NCd0RuTEV1ekI7bUJBL0ZBcUI7SUE4SUY7O2VBbkpFeHpDOzs7O1N4RHVSRjRlOzs7Ozs7b0J3RGhLRTQxQjt3QkF4RkEvSixzQkFrRUE0Sjs7SUFqSEZJO014RHVTQTcxQjs7MkIsT3FCcFNBdUksc0JBSUFFOzs7O0ltQ3VLQXF0Qix3QjFDNUpNM3ZCLFFBR0ZDO1kwQzZKRjJ2QjtJQUNGLGtCQUxBRDtJQU1VLElBQU5FLG1CQXBMSkg7SUFxTEEsU0FBSXBsQztLQUNGLHdDQUNZLGFBSFZ1bEMsUUFHb0IsU0FBb0I7S0FEaEM7SUFDZ0M7SUFFRSw0QkFMMUNBO0lBS0o7SUFBQSx5QkFMSUEsT0FDQXZsQztHQUttQztHQUV6Qyw4QkFWSXNsQztHNUYrVkY3NkQ7O0UiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEFycmF5XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfc3ViIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc3ViIChhLCBpLCBsZW4pIHtcbiAgdmFyIGEyID0gbmV3IEFycmF5KGxlbisxKTtcbiAgYTJbMF09MDtcbiAgZm9yKHZhciBpMiA9IDEsIGkxPSBpKzE7IGkyIDw9IGxlbjsgaTIrKyxpMSsrICl7XG4gICAgYTJbaTJdPWFbaTFdO1xuICB9XG4gIHJldHVybiBhMjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9hcHBlbmQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKSB7XG4gIHZhciBsMSA9IGExLmxlbmd0aCwgbDIgPSBhMi5sZW5ndGg7XG4gIHZhciBsID0gbDErbDItMVxuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgYVswXSA9IDA7XG4gIHZhciBpID0gMSxqID0gMTtcbiAgZm9yKDtpPGwxO2krKykgYVtpXT1hMVtpXTtcbiAgZm9yKDtpPGw7aSsrLGorKykgYVtpXT1hMltqXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfY29uY2F0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfY29uY2F0KGwpIHtcbiAgdmFyIGEgPSBbMF07XG4gIHdoaWxlIChsICE9PSAwKSB7XG4gICAgdmFyIGIgPSBsWzFdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYi5sZW5ndGg7IGkrKykgYS5wdXNoKGJbaV0pO1xuICAgIGwgPSBsWzJdO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYmxpdChhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIGlmIChpMiA8PSBpMSkge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IGxlbjsgaisrKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBqID0gbGVuOyBqID49IDE7IGotLSkgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+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+IGludCA9IFwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1c1wiXG5cbigqIERlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHN0YXJ0dXAuaC4gU2VlIGFsc28gYmFja3RyYWNlLmMgKilcbmxldCBlcnJvcnMgPSBbfCBcIlwiO1xuICAoKiBGSUxFX05PVF9GT1VORCAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgbm90IGZvdW5kKVwiO1xuICAoKiBCQURfQllURUNPREUgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGFwcGVhcnMgdG8gYmUgY29ycnVwdClcIjtcbiAgKCogV1JPTkdfTUFHSUMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGhhcyB3cm9uZyBtYWdpYyBudW1iZXIpXCI7XG4gICgqIE5PX0ZEUyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgY2Fubm90IGJlIG9wZW5lZDtcXG4gXFxcbiAgICAgIC0tIHRvbyBtYW55IG9wZW4gZmlsZXMuIFRyeSBydW5uaW5nIHdpdGggT0NBTUxSVU5QQVJBTT1iPTIpXCJcbnxdXG5cbmxldCBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlID1cbiAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gIGxldCBzdGF0dXMgPSBnZXRfZGVidWdfaW5mb19zdGF0dXMgKCkgaW5cbiAgaWYgc3RhdHVzIDwgMCB0aGVuXG4gICAgcHJlcnJfZW5kbGluZSBlcnJvcnMuKGFicyBzdGF0dXMpO1xuICBmbHVzaCBzdGRlcnJcblxubGV0IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyID0gcmVmIGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXJcblxubGV0IHNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBmbiA9IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIDo9IGZuXG5cbmxldCBlbXB0eV9iYWNrdHJhY2UgOiByYXdfYmFja3RyYWNlID0gW3wgfF1cblxubGV0IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSA9XG4gIHRyeVxuICAgIGdldF9yYXdfYmFja3RyYWNlICgpXG4gIHdpdGggXyAoKiBPdXRfb2ZfbWVtb3J5PyAqKSAtPlxuICAgIGVtcHR5X2JhY2t0cmFjZVxuXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgICgqIEdldCB0aGUgYmFja3RyYWNlIG5vdywgaW4gY2FzZSBvbmUgb2YgdGhlIFthdF9leGl0XSBmdW5jdGlvblxuICAgICAgIGRlc3Ryb3lzIGl0LiAqKVxuICAgIGxldCByYXdfYmFja3RyYWNlID1cbiAgICAgIGlmIGRlYnVnZ2VyX2luX3VzZSAoKiBTYW1lIHRlc3QgYXMgaW4gW3J1bnRpbWUvcHJpbnRleGMuY10gKikgdGhlblxuICAgICAgICBlbXB0eV9iYWNrdHJhY2VcbiAgICAgIGVsc2VcbiAgICAgICAgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpXG4gICAgaW5cbiAgICAodHJ5IFN0ZGxpYi5kb19hdF9leGl0ICgpIHdpdGggXyAtPiAoKSk7XG4gICAgdHJ5XG4gICAgICAhdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2VcbiAgICB3aXRoIGV4bicgLT5cbiAgICAgIGxldCByYXdfYmFja3RyYWNlJyA9IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yIGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyOiBleGNlcHRpb24gJXNcXG5cIlxuICAgICAgICAodG9fc3RyaW5nIGV4bicpO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZSc7XG4gICAgICBmbHVzaCBzdGRlcnJcbiAgd2l0aFxuICAgIHwgT3V0X29mX21lbW9yeSAtPlxuICAgICAgICBwcmVycl9lbmRsaW5lXG4gICAgICAgICAgXCJGYXRhbCBlcnJvcjogb3V0IG9mIG1lbW9yeSBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlclwiXG5cbigqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFtjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbl0gaW5cbiAgIFtydW50aW1lL3ByaW50ZXhjLmNdIHdoaWNoIGV4cGVjdHMgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4gKilcbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlXG4gIHdpdGggXyAtPlxuICAgICgqIFRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50ICopXG4gICAgKClcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiXG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEZ1bmN0aW9uYWwgcXVldWVzIChmaWZvKX0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEJhc2ljc30gKilcblxuW0BAQHdhcm5pbmcgXCItMzdcIl1cblxudHlwZSB6ZXJvID0gWmVyb1xudHlwZSAneCBzdWNjID0gU3VjY1xudHlwZSBvbmUgPSB6ZXJvIHN1Y2NcbnR5cGUgdHdvID0gemVybyBzdWNjIHN1Y2NcbnR5cGUgdGhyZWUgPSB6ZXJvIHN1Y2Mgc3VjYyBzdWNjXG5cbnR5cGUgKCsnYSwgJ2wpIGRpZ2l0ID1cbiAgfCBaZXJvIDogKCdhLCB6ZXJvKSBkaWdpdFxuICB8IE9uZSA6ICdhIC0+ICgnYSwgb25lKSBkaWdpdFxuICB8IFR3byA6ICdhICogJ2EgLT4gKCdhLCB0d28pIGRpZ2l0XG4gIHwgVGhyZWUgOiAnYSAqICdhICogJ2EgLT4gKCdhLCB0aHJlZSkgZGlnaXRcblxuKCogc3RvcmUgdGhlIHNpemUgaW4gZGVlcCB2ZXJzaW9uICopXG50eXBlICsnYSB0ID1cbiAgfCBTaGFsbG93IDogKCdhLCBfKSBkaWdpdCAtPiAnYSB0XG4gIHwgRGVlcCA6XG4gICAgICBpbnQgKiAoJ2EsIF8gc3VjYykgZGlnaXQgKiAoJ2EgKiAnYSkgdCBsYXp5X3QgKiAoJ2EsIF8gc3VjYykgZGlnaXRcbiAgICAgIC0+ICdhIHRcblxubGV0IGVtcHR5IDogdHlwZSBhLiBhIHQgPSBTaGFsbG93IFplcm9cblxuZXhjZXB0aW9uIEVtcHR5XG5cbmxldCBfZW1wdHkgPSBTaGFsbG93IFplcm9cbmxldCBfc2luZ2xlIHggPSBTaGFsbG93IChPbmUgeClcbmxldCBfZG91YmxlIHggeSA9IFNoYWxsb3cgKFR3byAoeCwgeSkpXG5cbmxldCBfZGVlcCA6XG4gICAgdHlwZSBsMCBsMS5cbiAgICBpbnQgLT5cbiAgICAoJ2EsIGwwIHN1Y2MpIGRpZ2l0IC0+XG4gICAgKCdhICogJ2EpIHQgbGF6eV90IC0+XG4gICAgKCdhLCBsMSBzdWNjKSBkaWdpdCAtPlxuICAgICdhIHQgPVxuIGZ1biBuIGhkIG1pZGRsZSB0bCAtPiBEZWVwIChuLCBoZCwgbWlkZGxlLCB0bClcblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBTaGFsbG93IFplcm8gLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IHNpbmdsZXRvbiB4ID0gX3NpbmdsZSB4XG5sZXQgZG91YmxldG9uIHggeSA9IF9kb3VibGUgeCB5XG5cbmxldCByZWMgY29ucyA6IHR5cGUgYS4gYSAtPiBhIHQgLT4gYSB0ID1cbiBmdW4geCBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgWmVybyAtPiBfc2luZ2xlIHhcbiAgfCBTaGFsbG93IChPbmUgeSkgLT4gU2hhbGxvdyAoVHdvICh4LCB5KSlcbiAgfCBTaGFsbG93IChUd28gKHksIHopKSAtPiBTaGFsbG93IChUaHJlZSAoeCwgeSwgeikpXG4gIHwgU2hhbGxvdyAoVGhyZWUgKHksIHosIHonKSkgLT5cbiAgICBfZGVlcCA0IChUd28gKHgsIHkpKSAobGF6eSBfZW1wdHkpIChUd28gKHosIHonKSlcbiAgfCBEZWVwIChuLCBPbmUgeSwgbWlkZGxlLCB0bCkgLT4gX2RlZXAgKG4gKyAxKSAoVHdvICh4LCB5KSkgbWlkZGxlIHRsXG4gIHwgRGVlcCAobiwgVHdvICh5LCB6KSwgbWlkZGxlLCB0bCkgLT5cbiAgICBfZGVlcCAobiArIDEpIChUaHJlZSAoeCwgeSwgeikpIG1pZGRsZSB0bFxuICB8IERlZXAgKG4sIFRocmVlICh5LCB6LCB6JyksIChsYXp5IHEnKSwgdGFpbCkgLT5cbiAgICBfZGVlcCAobiArIDEpIChUd28gKHgsIHkpKSAobGF6eSAoY29ucyAoeiwgeicpIHEnKSkgdGFpbFxuXG5sZXQgcmVjIHNub2MgOiB0eXBlIGEuIGEgdCAtPiBhIC0+IGEgdCA9XG4gZnVuIHEgeCAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IFplcm8gLT4gX3NpbmdsZSB4XG4gIHwgU2hhbGxvdyAoT25lIHkpIC0+IFNoYWxsb3cgKFR3byAoeSwgeCkpXG4gIHwgU2hhbGxvdyAoVHdvICh5LCB6KSkgLT4gU2hhbGxvdyAoVGhyZWUgKHksIHosIHgpKVxuICB8IFNoYWxsb3cgKFRocmVlICh5LCB6LCB6JykpIC0+XG4gICAgX2RlZXAgNCAoVHdvICh5LCB6KSkgKGxhenkgX2VtcHR5KSAoVHdvICh6JywgeCkpXG4gIHwgRGVlcCAobiwgaGQsIG1pZGRsZSwgT25lIHkpIC0+IF9kZWVwIChuICsgMSkgaGQgbWlkZGxlIChUd28gKHksIHgpKVxuICB8IERlZXAgKG4sIGhkLCBtaWRkbGUsIFR3byAoeSwgeikpIC0+XG4gICAgX2RlZXAgKG4gKyAxKSBoZCBtaWRkbGUgKFRocmVlICh5LCB6LCB4KSlcbiAgfCBEZWVwIChuLCBoZCwgKGxhenkgcScpLCBUaHJlZSAoeSwgeiwgeicpKSAtPlxuICAgIF9kZWVwIChuICsgMSkgaGQgKGxhenkgKHNub2MgcScgKHksIHopKSkgKFR3byAoeicsIHgpKVxuXG5sZXQgcmVjIHRha2VfZnJvbnRfZXhuIDogJ2EuICdhIHQgLT4gJ2EgKiAnYSB0ID1cbiBmdW4gcSAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IFplcm8gLT4gcmFpc2UgRW1wdHlcbiAgfCBTaGFsbG93IChPbmUgeCkgLT4geCwgZW1wdHlcbiAgfCBTaGFsbG93IChUd28gKHgsIHkpKSAtPiB4LCBTaGFsbG93IChPbmUgeSlcbiAgfCBTaGFsbG93IChUaHJlZSAoeCwgeSwgeikpIC0+IHgsIFNoYWxsb3cgKFR3byAoeSwgeikpXG4gIHwgRGVlcCAobiwgT25lIHgsIChsYXp5IHEnKSwgdGFpbCkgLT5cbiAgICBpZiBpc19lbXB0eSBxJyB0aGVuXG4gICAgICB4LCBTaGFsbG93IHRhaWxcbiAgICBlbHNlIChcbiAgICAgIGxldCAoeSwgeiksIHEnID0gdGFrZV9mcm9udF9leG4gcScgaW5cbiAgICAgIHgsIF9kZWVwIChuIC0gMSkgKFR3byAoeSwgeikpIChMYXp5LmZyb21fdmFsIHEnKSB0YWlsXG4gICAgKVxuICB8IERlZXAgKG4sIFR3byAoeCwgeSksIG1pZGRsZSwgdGFpbCkgLT4geCwgX2RlZXAgKG4gLSAxKSAoT25lIHkpIG1pZGRsZSB0YWlsXG4gIHwgRGVlcCAobiwgVGhyZWUgKHgsIHksIHopLCBtaWRkbGUsIHRhaWwpIC0+XG4gICAgeCwgX2RlZXAgKG4gLSAxKSAoVHdvICh5LCB6KSkgbWlkZGxlIHRhaWxcblxubGV0IHRha2VfZnJvbnQgcSA9IHRyeSBTb21lICh0YWtlX2Zyb250X2V4biBxKSB3aXRoIEVtcHR5IC0+IE5vbmVcblxubGV0IHRha2VfZnJvbnRfbCBuIHEgPVxuICBpZiBuIDwgMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJ0YWtlX2JhY2tfbDogY2Fubm90IHRha2UgbmVnYXRpdmUgbnVtYmVyIG9mIGFyZ3VtZW50c1wiO1xuICBsZXQgcmVjIGF1eCBhY2MgcSBuID1cbiAgICBpZiBuID0gMCB8fCBpc19lbXB0eSBxIHRoZW5cbiAgICAgIExpc3QucmV2IGFjYywgcVxuICAgIGVsc2UgKFxuICAgICAgbGV0IHgsIHEnID0gdGFrZV9mcm9udF9leG4gcSBpblxuICAgICAgYXV4ICh4IDo6IGFjYykgcScgKG4gLSAxKVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIHEgblxuXG5sZXQgdGFrZV9mcm9udF93aGlsZSBwIHEgPVxuICBsZXQgcmVjIGF1eCBhY2MgcSA9XG4gICAgaWYgaXNfZW1wdHkgcSB0aGVuXG4gICAgICBMaXN0LnJldiBhY2MsIHFcbiAgICBlbHNlIChcbiAgICAgIGxldCB4LCBxJyA9IHRha2VfZnJvbnRfZXhuIHEgaW5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIGF1eCAoeCA6OiBhY2MpIHEnXG4gICAgICBlbHNlXG4gICAgICAgIExpc3QucmV2IGFjYywgcVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIHFcblxubGV0IHJlYyB0YWtlX2JhY2tfZXhuIDogJ2EuICdhIHQgLT4gJ2EgdCAqICdhID1cbiBmdW4gcSAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IFplcm8gLT4gcmFpc2UgRW1wdHlcbiAgfCBTaGFsbG93IChPbmUgeCkgLT4gZW1wdHksIHhcbiAgfCBTaGFsbG93IChUd28gKHgsIHkpKSAtPiBfc2luZ2xlIHgsIHlcbiAgfCBTaGFsbG93IChUaHJlZSAoeCwgeSwgeikpIC0+IFNoYWxsb3cgKFR3byAoeCwgeSkpLCB6XG4gIHwgRGVlcCAobiwgaGQsIChsYXp5IHEnKSwgT25lIHgpIC0+XG4gICAgaWYgaXNfZW1wdHkgcScgdGhlblxuICAgICAgU2hhbGxvdyBoZCwgeFxuICAgIGVsc2UgKFxuICAgICAgbGV0IHEnJywgKHksIHopID0gdGFrZV9iYWNrX2V4biBxJyBpblxuICAgICAgX2RlZXAgKG4gLSAxKSBoZCAoTGF6eS5mcm9tX3ZhbCBxJycpIChUd28gKHksIHopKSwgeFxuICAgIClcbiAgfCBEZWVwIChuLCBoZCwgbWlkZGxlLCBUd28gKHgsIHkpKSAtPiBfZGVlcCAobiAtIDEpIGhkIG1pZGRsZSAoT25lIHgpLCB5XG4gIHwgRGVlcCAobiwgaGQsIG1pZGRsZSwgVGhyZWUgKHgsIHksIHopKSAtPlxuICAgIF9kZWVwIChuIC0gMSkgaGQgbWlkZGxlIChUd28gKHgsIHkpKSwgelxuXG5sZXQgdGFrZV9iYWNrIHEgPSB0cnkgU29tZSAodGFrZV9iYWNrX2V4biBxKSB3aXRoIEVtcHR5IC0+IE5vbmVcblxubGV0IHRha2VfYmFja19sIG4gcSA9XG4gIGlmIG4gPCAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcInRha2VfYmFja19sOiBjYW5ub3QgdGFrZSBuZWdhdGl2ZSBudW1iZXIgb2YgYXJndW1lbnRzXCI7XG4gIGxldCByZWMgYXV4IGFjYyBxIG4gPVxuICAgIGlmIG4gPSAwIHx8IGlzX2VtcHR5IHEgdGhlblxuICAgICAgcSwgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcScsIHggPSB0YWtlX2JhY2tfZXhuIHEgaW5cbiAgICAgIGF1eCAoeCA6OiBhY2MpIHEnIChuIC0gMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSBxIG5cblxubGV0IHRha2VfYmFja193aGlsZSBwIHEgPVxuICBsZXQgcmVjIGF1eCBhY2MgcSA9XG4gICAgaWYgaXNfZW1wdHkgcSB0aGVuXG4gICAgICBxLCBhY2NcbiAgICBlbHNlIChcbiAgICAgIGxldCBxJywgeCA9IHRha2VfYmFja19leG4gcSBpblxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgYXV4ICh4IDo6IGFjYykgcSdcbiAgICAgIGVsc2VcbiAgICAgICAgcSwgYWNjXG4gICAgKVxuICBpblxuICBhdXggW10gcVxuXG4oKiogezIgSW5kaXZpZHVhbCBleHRyYWN0aW9ufSAqKVxuXG5sZXQgZmlyc3QgcSA9IHRyeSBTb21lIChmc3QgKHRha2VfZnJvbnRfZXhuIHEpKSB3aXRoIEVtcHR5IC0+IE5vbmVcbmxldCBmaXJzdF9leG4gcSA9IGZzdCAodGFrZV9mcm9udF9leG4gcSlcbmxldCBsYXN0IHEgPSB0cnkgU29tZSAoc25kICh0YWtlX2JhY2tfZXhuIHEpKSB3aXRoIEVtcHR5IC0+IE5vbmVcbmxldCBsYXN0X2V4biBxID0gc25kICh0YWtlX2JhY2tfZXhuIHEpXG5cbmxldCBfc2l6ZV9kaWdpdCA6IHR5cGUgbC4gKCdhLCBsKSBkaWdpdCAtPiBpbnQgPSBmdW5jdGlvblxuICB8IFplcm8gLT4gMFxuICB8IE9uZSBfIC0+IDFcbiAgfCBUd28gXyAtPiAyXG4gIHwgVGhyZWUgXyAtPiAzXG5cbmxldCBzaXplIDogJ2EuICdhIHQgLT4gaW50ID0gZnVuY3Rpb25cbiAgfCBTaGFsbG93IGQgLT4gX3NpemVfZGlnaXQgZFxuICB8IERlZXAgKG4sIF8sIF8sIF8pIC0+IG5cblxubGV0IF9udGhfZGlnaXQgOiB0eXBlIGwuIGludCAtPiAoJ2EsIGwpIGRpZ2l0IC0+ICdhID1cbiBmdW4gaSBkIC0+XG4gIG1hdGNoIGksIGQgd2l0aFxuICB8IF8sIFplcm8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgMCwgT25lIHggLT4geFxuICB8IDAsIFR3byAoeCwgXykgLT4geFxuICB8IDEsIFR3byAoXywgeCkgLT4geFxuICB8IDAsIFRocmVlICh4LCBfLCBfKSAtPiB4XG4gIHwgMSwgVGhyZWUgKF8sIHgsIF8pIC0+IHhcbiAgfCAyLCBUaHJlZSAoXywgXywgeCkgLT4geFxuICB8IF8sIF8gLT4gcmFpc2UgTm90X2ZvdW5kXG5cbmxldCByZWMgbnRoX2V4biA6ICdhLiBpbnQgLT4gJ2EgdCAtPiAnYSA9XG4gZnVuIGkgcSAtPlxuICBtYXRjaCBpLCBxIHdpdGhcbiAgfCBfLCBTaGFsbG93IFplcm8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgMCwgU2hhbGxvdyAoT25lIHgpIC0+IHhcbiAgfCAwLCBTaGFsbG93IChUd28gKHgsIF8pKSAtPiB4XG4gIHwgMSwgU2hhbGxvdyAoVHdvIChfLCB4KSkgLT4geFxuICB8IDAsIFNoYWxsb3cgKFRocmVlICh4LCBfLCBfKSkgLT4geFxuICB8IDEsIFNoYWxsb3cgKFRocmVlIChfLCB4LCBfKSkgLT4geFxuICB8IDIsIFNoYWxsb3cgKFRocmVlIChfLCBfLCB4KSkgLT4geFxuICB8IF8sIFNoYWxsb3cgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBfLCBEZWVwIChfLCBsLCBxLCByKSAtPlxuICAgIGlmIGkgPCBfc2l6ZV9kaWdpdCBsIHRoZW5cbiAgICAgIF9udGhfZGlnaXQgaSBsXG4gICAgZWxzZSAoXG4gICAgICBsZXQgaScgPSBpIC0gX3NpemVfZGlnaXQgbCBpblxuICAgICAgbGV0IHEnID0gTGF6eS5mb3JjZSBxIGluXG4gICAgICBpZiBpJyA8IDIgKiBzaXplIHEnIHRoZW4gKFxuICAgICAgICBsZXQgeCwgeSA9IG50aF9leG4gKGknIC8gMikgcScgaW5cbiAgICAgICAgaWYgaScgbW9kIDIgPSAwIHRoZW5cbiAgICAgICAgICB4XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB5XG4gICAgICApIGVsc2VcbiAgICAgICAgX250aF9kaWdpdCAoaScgLSAoMiAqIHNpemUgcScpKSByXG4gICAgKVxuXG5sZXQgbnRoIGkgcSA9IHRyeSBTb21lIChudGhfZXhuIGkgcSkgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxubGV0IGluaXQgcSA9IHRyeSBmc3QgKHRha2VfYmFja19leG4gcSkgd2l0aCBFbXB0eSAtPiBxXG5sZXQgdGFpbCBxID0gdHJ5IHNuZCAodGFrZV9mcm9udF9leG4gcSkgd2l0aCBFbXB0eSAtPiBxXG5cbmxldCBhZGRfaXRlcl9mcm9udCBzZXEgcSA9XG4gIGxldCBsID0gcmVmIFtdIGluXG4gICgqIHJldmVyc2VkIHNlcSAqKVxuICBzZXEgKGZ1biB4IC0+IGwgOj0geCA6OiAhbCk7XG4gIExpc3QuZm9sZF9sZWZ0IChmdW4gcSB4IC0+IGNvbnMgeCBxKSBxICFsXG5cbmxldCBhZGRfaXRlcl9iYWNrIHEgc2VxID1cbiAgbGV0IHEgPSByZWYgcSBpblxuICBzZXEgKGZ1biB4IC0+IHEgOj0gc25vYyAhcSB4KTtcbiAgIXFcblxubGV0IF9kaWdpdF90b19pdGVyIDogdHlwZSBsLiAoJ2EsIGwpIGRpZ2l0IC0+ICdhIGl0ZXIgPVxuIGZ1biBkIGsgLT5cbiAgbWF0Y2ggZCB3aXRoXG4gIHwgWmVybyAtPiAoKVxuICB8IE9uZSB4IC0+IGsgeFxuICB8IFR3byAoeCwgeSkgLT5cbiAgICBrIHg7XG4gICAgayB5XG4gIHwgVGhyZWUgKHgsIHksIHopIC0+XG4gICAgayB4O1xuICAgIGsgeTtcbiAgICBrIHpcblxubGV0IHJlYyB0b19pdGVyIDogJ2EuICdhIHQgLT4gJ2EgaXRlciA9XG4gZnVuIHEgayAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IGQgLT4gX2RpZ2l0X3RvX2l0ZXIgZCBrXG4gIHwgRGVlcCAoXywgaGQsIChsYXp5IHEnKSwgdGFpbCkgLT5cbiAgICBfZGlnaXRfdG9faXRlciBoZCBrO1xuICAgIHRvX2l0ZXIgcScgKGZ1biAoeCwgeSkgLT5cbiAgICAgICAgayB4O1xuICAgICAgICBrIHkpO1xuICAgIF9kaWdpdF90b19pdGVyIHRhaWwga1xuXG5sZXQgYXBwZW5kIHExIHEyID1cbiAgbWF0Y2ggcTEsIHEyIHdpdGhcbiAgfCBTaGFsbG93IFplcm8sIF8gLT4gcTJcbiAgfCBfLCBTaGFsbG93IFplcm8gLT4gcTFcbiAgfCBfIC0+IGFkZF9pdGVyX2JhY2sgcTEgKHRvX2l0ZXIgcTIpXG5cbmxldCBhZGRfc2VxX2Zyb250IHNlcSBxID1cbiAgKCogcmV2ZXJzZWQgc2VxICopXG4gIGxldCBsID0gU2VxLmZvbGRfbGVmdCAoZnVuIGwgZWx0IC0+IGVsdCA6OiBsKSBbXSBzZXEgaW5cbiAgTGlzdC5mb2xkX2xlZnQgKGZ1biBxIHggLT4gY29ucyB4IHEpIHEgbFxuXG5sZXQgYWRkX3NlcV9iYWNrIHEgc2VxID0gU2VxLmZvbGRfbGVmdCAoZnVuIHEgeCAtPiBzbm9jIHEgeCkgcSBzZXFcblxubGV0IF9kaWdpdF90b19zZXEgOiB0eXBlIGwuICgnYSwgbCkgZGlnaXQgLT4gJ2EgU2VxLnQgPVxuIGZ1biBkICgpIC0+XG4gIG1hdGNoIGQgd2l0aFxuICB8IFplcm8gLT4gU2VxLk5pbFxuICB8IE9uZSB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG4gIHwgVHdvICh4LCB5KSAtPiBTZXEuQ29ucyAoeCwgU2VxLnJldHVybiB5KVxuICB8IFRocmVlICh4LCB5LCB6KSAtPiBTZXEuQ29ucyAoeCwgZnVuICgpIC0+IFNlcS5Db25zICh5LCBTZXEucmV0dXJuIHopKVxuXG5sZXQgcmVjIHRvX3NlcSA6ICdhLiAnYSB0IC0+ICdhIFNlcS50ID1cbiBmdW4gcSAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IGQgLT4gX2RpZ2l0X3RvX3NlcSBkXG4gIHwgRGVlcCAoXywgaGQsIChsYXp5IHEnKSwgdGFpbCkgLT5cbiAgICBDQ1NlcS5hcHBlbmQgKF9kaWdpdF90b19zZXEgaGQpXG4gICAgICAoQ0NTZXEuYXBwZW5kXG4gICAgICAgICAoU2VxLmZsYXRfbWFwXG4gICAgICAgICAgICAoZnVuICh4LCB5KSAoKSAtPiBTZXEuQ29ucyAoeCwgU2VxLnJldHVybiB5KSlcbiAgICAgICAgICAgICh0b19zZXEgcScpKVxuICAgICAgICAgKF9kaWdpdF90b19zZXEgdGFpbCkpXG5cbmxldCBvZl9zZXEgc2VxID0gYWRkX3NlcV9mcm9udCBzZXEgZW1wdHlcblxubGV0IF9tYXBfZGlnaXQgOiB0eXBlIGwuICgnYSAtPiAnYikgLT4gKCdhLCBsKSBkaWdpdCAtPiAoJ2IsIGwpIGRpZ2l0ID1cbiBmdW4gZiBkIC0+XG4gIG1hdGNoIGQgd2l0aFxuICB8IFplcm8gLT4gWmVyb1xuICB8IE9uZSB4IC0+IE9uZSAoZiB4KVxuICB8IFR3byAoeCwgeSkgLT4gVHdvIChmIHgsIGYgeSlcbiAgfCBUaHJlZSAoeCwgeSwgeikgLT4gVGhyZWUgKGYgeCwgZiB5LCBmIHopXG5cbmxldCByZWMgbWFwIDogJ2EgJ2IuICgnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiB0ID1cbiBmdW4gZiBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgZCAtPiBTaGFsbG93IChfbWFwX2RpZ2l0IGYgZClcbiAgfCBEZWVwIChzaXplLCBoZCwgKGxhenkgcScpLCB0bCkgLT5cbiAgICBsZXQgcScnID0gbWFwIChmdW4gKHgsIHkpIC0+IGYgeCwgZiB5KSBxJyBpblxuICAgIF9kZWVwIHNpemUgKF9tYXBfZGlnaXQgZiBoZCkgKExhenkuZnJvbV92YWwgcScnKSAoX21hcF9kaWdpdCBmIHRsKVxuXG5sZXQgKCA+fD0gKSBxIGYgPSBtYXAgZiBxXG5cbmxldCBfZm9sZF9kaWdpdCA6IHR5cGUgbC4gKCdhY2MgLT4gJ2EgLT4gJ2FjYykgLT4gJ2FjYyAtPiAoJ2EsIGwpIGRpZ2l0IC0+ICdhY2NcbiAgICA9XG4gZnVuIGYgYWNjIGQgLT5cbiAgbWF0Y2ggZCB3aXRoXG4gIHwgWmVybyAtPiBhY2NcbiAgfCBPbmUgeCAtPiBmIGFjYyB4XG4gIHwgVHdvICh4LCB5KSAtPiBmIChmIGFjYyB4KSB5XG4gIHwgVGhyZWUgKHgsIHksIHopIC0+IGYgKGYgKGYgYWNjIHgpIHkpIHpcblxubGV0IHJlYyBmb2xkIDogJ2EgJ2IuICgnYiAtPiAnYSAtPiAnYikgLT4gJ2IgLT4gJ2EgdCAtPiAnYiA9XG4gZnVuIGYgYWNjIHEgLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBkIC0+IF9mb2xkX2RpZ2l0IGYgYWNjIGRcbiAgfCBEZWVwIChfLCBoZCwgKGxhenkgcScpLCB0bCkgLT5cbiAgICBsZXQgYWNjID0gX2ZvbGRfZGlnaXQgZiBhY2MgaGQgaW5cbiAgICBsZXQgYWNjID0gZm9sZCAoZnVuIGFjYyAoeCwgeSkgLT4gZiAoZiBhY2MgeCkgeSkgYWNjIHEnIGluXG4gICAgX2ZvbGRfZGlnaXQgZiBhY2MgdGxcblxubGV0IGl0ZXIgZiBxID0gdG9faXRlciBxIGZcbmxldCBvZl9saXN0IGwgPSBMaXN0LmZvbGRfbGVmdCBzbm9jIGVtcHR5IGxcblxubGV0IHRvX2xpc3QgcSA9XG4gIGxldCBsID0gcmVmIFtdIGluXG4gIHRvX2l0ZXIgcSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5yZXYgIWxcblxubGV0IG9mX2l0ZXIgc2VxID0gYWRkX2l0ZXJfZnJvbnQgc2VxIGVtcHR5XG5cbmxldCByZXYgcSA9XG4gIGxldCBxJyA9IHJlZiBlbXB0eSBpblxuICBpdGVyIChmdW4geCAtPiBxJyA6PSBjb25zIHggIXEnKSBxO1xuICAhcSdcblxubGV0IHJlYyBfZXF1YWxfc2VxIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEgKCksIGwyICgpIHdpdGhcbiAgfCBTZXEuTmlsLCBTZXEuTmlsIC0+IHRydWVcbiAgfCBTZXEuTmlsLCBfIHwgXywgU2VxLk5pbCAtPiBmYWxzZVxuICB8IFNlcS5Db25zICh4MSwgbDEnKSwgU2VxLkNvbnMgKHgyLCBsMicpIC0+IGVxIHgxIHgyICYmIF9lcXVhbF9zZXEgZXEgbDEnIGwyJ1xuXG5sZXQgZXF1YWwgZXEgcTEgcTIgPSBfZXF1YWxfc2VxIGVxICh0b19zZXEgcTEpICh0b19zZXEgcTIpXG5cbmxldCAoIC0tICkgYSBiID1cbiAgbGV0IHJlYyB1cF90byBxIGEgYiA9XG4gICAgaWYgYSA9IGIgdGhlblxuICAgICAgc25vYyBxIGFcbiAgICBlbHNlXG4gICAgICB1cF90byAoc25vYyBxIGEpIChhICsgMSkgYlxuICBhbmQgZG93bl90byBxIGEgYiA9XG4gICAgaWYgYSA9IGIgdGhlblxuICAgICAgc25vYyBxIGFcbiAgICBlbHNlXG4gICAgICBkb3duX3RvIChzbm9jIHEgYSkgKGEgLSAxKSBiXG4gIGluXG4gIGlmIGEgPD0gYiB0aGVuXG4gICAgdXBfdG8gZW1wdHkgYSBiXG4gIGVsc2VcbiAgICBkb3duX3RvIGVtcHR5IGEgYlxuXG5sZXQgKCAtLV4gKSBhIGIgPVxuICBpZiBhID0gYiB0aGVuXG4gICAgZW1wdHlcbiAgZWxzZSBpZiBhIDwgYiB0aGVuXG4gICAgYSAtLSAoYiAtIDEpXG4gIGVsc2VcbiAgICBhIC0tIChiICsgMSlcblxubGV0IHBwIHBwX3ggb3V0IGQgPVxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxob3YyPnF1ZXVlIHtcIjtcbiAgaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiO0AgXCI7XG4gICAgICBwcF94IG91dCB4KVxuICAgIGQ7XG4gIEZvcm1hdC5mcHJpbnRmIG91dCBcIn1AXVwiXG4iLCIjIDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuIFxuICBtb2R1bGUgTGV4aW5nID0gc3RydWN0XG4gICAgKCogT3ZlcnJpZGUgdGhlIExleGluZy5lbmdpbmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgcG9zaXRpb24gcmVjb3JkXG4gICAgICAgZWFjaCB0aW1lIGEgcnVsZSBpcyBtYXRjaGVkLiBSZWR1Y2VzIHRvdGFsIHBhcnNlIHRpbWUgYnkgYXJvdW5kIDMwJS5cbiAgICAgICBJZGVhIHN0b2xlbiBmcm9tIHlvanNvbiAqKVxuXG4gICAgaW5jbHVkZSBMZXhpbmdcblxuICAgIGV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcblxuICAgIGxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gICAgICBsZXQgcmVzdWx0ID0gY19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICAgICAgKCpcbiAgICAgIGlmIHJlc3VsdCA+PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgICAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgICAgIGVuZDtcbiAgICAgICopXG4gICAgICByZXN1bHRcbiAgZW5kXG4gIG9wZW4gVG9rZW5zXG5cblxuICBtb2R1bGUgdHlwZSBMZXggPSBzaWdcbiAgICB2YWwgcmVhZCA6IExleGluZy5sZXhidWYgLT4gVG9rZW5zLnRva2VuXG4gIGVuZFxuXG4gIG1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IExleCA9IHN0cnVjdFxuXG4jIDMzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxubGV0IF9fb2NhbWxfbGV4X3RhYmxlcyA9IHtcbiAgTGV4aW5nLmxleF9iYXNlID1cbiAgIFwiXFwwMDBcXDAwMFxcMjI5XFwyNTVcXDAxN1xcMDAwXFwyMzJcXDI1NVxcMDAzXFwwMDBcXDIzNFxcMjU1XFwxMjZcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMTEzXFwwMDBcXDAwMFxcMDAwXFwwMDFcXDAwMFxcMDAxXFwwMDBcXDAwMlxcMDAwXFwxMjNcXDAwMFxcMjQzXFwyNTVcXDI0NFxcMjU1XFxcbiAgICBcXDI0NVxcMjU1XFwyNDZcXDI1NVxcMjQ3XFwyNTVcXDI0OFxcMjU1XFwyNDlcXDI1NVxcMjUwXFwyNTVcXDI1MVxcMjU1XFwyNTJcXDI1NVxcXG4gICAgXFwwMDFcXDAwMFxcMDAyXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAyXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAzXFwwMDBcXDI1NFxcMjU1XFwwMDNcXDAwMFxcMDAxXFwwMDBcXDAxMVxcMDAwXFwyNTNcXDI1NVxcMjM5XFwyNTVcXDAwM1xcMDAwXFxcbiAgICBcXDAxMFxcMDAwXFwwMTFcXDAwMFxcMDA1XFwwMDBcXDI0MlxcMjU1XFwwMjBcXDAwMFxcMDE5XFwwMDBcXDA0OFxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNjdcXDAwMFxcMDYzXFwwMDBcXDA3NVxcMDAwXFwwODRcXDAwMFxcMjQxXFwyNTVcXDA4NVxcMDAwXFwwODNcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA3NVxcMDAwXFwwNzFcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwOTNcXDAwMFxcMjQwXFwyNTVcXDA5NVxcMDAwXFxcbiAgICBcXDA5M1xcMDAwXFwwODlcXDAwMFxcMDk1XFwwMDBcXDA4NVxcMDAwXFwwODFcXDAwMFxcMDAxXFwwMDBcXDAzMlxcMDAwXFwxNTVcXDAwMFxcXG4gICAgXFwxODZcXDAwMFxcMjA5XFwwMDBcXDIxOVxcMDAwXFwyMjlcXDAwMFxcMjQwXFwwMDBcXDI1MFxcMDAwXFwwMThcXDAwMVxcMDY2XFwwMDFcXFxuICAgIFxcMjM2XFwyNTVcXDIzNVxcMjU1XFwwOTRcXDAwMVxcMTE3XFwwMDFcXDE1NVxcMDAxXFwxNzhcXDAwMVxcMDUzXFwwMDBcXDIzMVxcMjU1XFxcbiAgICBcXDA4OFxcMDAxXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwwMTRcXDAwMFxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrID1cbiAgIFwiXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMDIyXFwwMDBcXDI1NVxcMjU1XFwwMjZcXDAwMFxcMDE3XFwwMDBcXFxuICAgIFxcMDE3XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMThcXDAwMFxcMjU1XFwyNTVcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMDE4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDI1XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDNcXDAwMFxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0ID1cbiAgIFwiXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg2XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA4OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcIjtcbiAgTGV4aW5nLmxleF90cmFucyA9XG4gICBcIlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMDAzXFwwMDBcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDA2XFwwMDBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMTlcXDAwMFxcMDE4XFwwMDBcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDE1XFwwMDBcXDAxM1xcMDAwXFwwNzFcXDAwMFxcMDAyXFwwMDBcXFxuICAgIFxcMDA3XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDE0XFwwMDBcXDA4N1xcMDAwXFwwMTdcXDAwMFxcMDkzXFwwMDBcXDAxNlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwODZcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAxMVxcMDAwXFwwNTlcXDAwMFxcMDc3XFwwMDBcXDAwMFxcMDAwXFwwNzdcXDAwMFxcMDA5XFwwMDBcXDAzOFxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDAwMFxcMDAwXFwwMjFcXDAwMFxcMDAwXFwwMDBcXDAyMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA2OVxcMDAwXFwwMzRcXDAwMFxcMDMwXFwwMDBcXDA1MFxcMDAwXFwwNzBcXDAwMFxcMDI1XFwwMDBcXDAyOVxcMDAwXFxcbiAgICBcXDAzM1xcMDAwXFwwMTJcXDAwMFxcMDYwXFwwMDBcXDA0M1xcMDAwXFwwMzFcXDAwMFxcMDM2XFwwMDBcXDAyNFxcMDAwXFwwNTNcXDAwMFxcXG4gICAgXFwwNTFcXDAwMFxcMDM4XFwwMDBcXDAyN1xcMDAwXFwwMzJcXDAwMFxcMDI2XFwwMDBcXDAyOFxcMDAwXFwwMzVcXDAwMFxcMDM3XFwwMDBcXFxuICAgIFxcMDQ0XFwwMDBcXDA0MlxcMDAwXFwwNDVcXDAwMFxcMDIzXFwwMDBcXDA0NlxcMDAwXFwwMjJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA0N1xcMDAwXFwwNzFcXDAwMFxcXG4gICAgXFwwODBcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA3XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDQ4XFwwMDBcXDA3MFxcMDAwXFwwNDlcXDAwMFxcXG4gICAgXFwwNDNcXDAwMFxcMDM4XFwwMDBcXDA1MlxcMDAwXFwwNTRcXDAwMFxcMDU1XFwwMDBcXDA1NlxcMDAwXFwwNTdcXDAwMFxcMDU4XFwwMDBcXFxuICAgIFxcMDUyXFwwMDBcXDA2M1xcMDAwXFwwNjFcXDAwMFxcMDYyXFwwMDBcXDA0MFxcMDAwXFwwNjRcXDAwMFxcMDY1XFwwMDBcXDA2NlxcMDAwXFxcbiAgICBcXDA2N1xcMDAwXFwwNjhcXDAwMFxcMDYyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDAwMFxcMDAwXFwwNzBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzhcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDM5XFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzVcXDAwMFxcMDAwXFwwMDBcXDA3NVxcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwMDVcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA5MVxcMDAwXFwwMDBcXDAwMFxcMDgxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwOTJcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc4XFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDAwXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDkwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfY2hlY2sgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDA0XFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDA0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDA3XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDJcXDAwMFxcMDAwXFwwMDBcXDA5MlxcMDAwXFwwMDBcXDAwMFxcMDg2XFwwMDBcXFxuICAgIFxcMDAyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDdcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDEwXFwwMDBcXDA3MFxcMDAwXFwyNTVcXDI1NVxcMDcwXFwwMDBcXDAwMFxcMDAwXFwwNjlcXDAwMFxcXG4gICAgXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXFxuICAgIFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDlcXDAwMFxcMDI0XFwwMDBcXDAyNVxcMDAwXFwwMzlcXDAwMFxcMDA3XFwwMDBcXDAwMFxcMDAwXFwwMjhcXDAwMFxcXG4gICAgXFwwMzJcXDAwMFxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwNDJcXDAwMFxcMDMwXFwwMDBcXDAzNVxcMDAwXFwwMDBcXDAwMFxcMDExXFwwMDBcXFxuICAgIFxcMDEyXFwwMDBcXDAzNFxcMDAwXFwwMjZcXDAwMFxcMDMxXFwwMDBcXDAwMFxcMDAwXFwwMjdcXDAwMFxcMDI0XFwwMDBcXDAzNlxcMDAwXFxcbiAgICBcXDA0MFxcMDAwXFwwNDFcXDAwMFxcMDQ0XFwwMDBcXDAwMFxcMDAwXFwwNDVcXDAwMFxcMDAwXFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwNDZcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcXG4gICAgXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDA0N1xcMDAwXFwwMDhcXDAwMFxcMDQ4XFwwMDBcXFxuICAgIFxcMDQ5XFwwMDBcXDA1MFxcMDAwXFwwNTFcXDAwMFxcMDUzXFwwMDBcXDA1NFxcMDAwXFwwNTVcXDAwMFxcMDU2XFwwMDBcXDA1N1xcMDAwXFxcbiAgICBcXDA1OFxcMDAwXFwwNTlcXDAwMFxcMDYwXFwwMDBcXDA2MVxcMDAwXFwwMTNcXDAwMFxcMDYzXFwwMDBcXDA2NFxcMDAwXFwwNjVcXDAwMFxcXG4gICAgXFwwNjZcXDAwMFxcMDY3XFwwMDBcXDA2OFxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXFxuICAgIFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwyNTVcXDI1NVxcMDA4XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDEzXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAxM1xcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDczXFwwMDBcXDI1NVxcMjU1XFwwNzNcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXFxuICAgIFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXFxuICAgIFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3OFxcMDAwXFwwODZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwODhcXDAwMFxcMjU1XFwyNTVcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDc4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA2XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMDg4XFwwMDBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwwNzhcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODJcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDI1NVxcMjU1XFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2Jhc2VfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2JhY2t0cmtfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHRfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X3RyYW5zX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9jaGVja19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY29kZSA9XG4gICBcIlwiO1xufVxuXG5sZXQgcmVjIHJlYWQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiAwXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA1NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBCT09MIHRydWUgKVxuIyAyNzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxIC0+XG4jIDU5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEJPT0wgZmFsc2UgKVxuIyAyNzYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyIC0+XG4jIDYxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE5VTEwgKVxuIyAyODEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAzIC0+XG4jIDYzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE9TIClcbiMgMjg2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNCAtPlxuIyA2NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBPRSApXG4jIDI5MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDUgLT5cbiMgNjcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQVMgKVxuIyAyOTYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA2IC0+XG4jIDY5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEFFIClcbiMgMzAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNyAtPlxuIyA3MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdHVwbGUgVFMgdGhlbiBUU1xuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMwOSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDggLT5cbiMgNzYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3R1cGxlIFRFIHRoZW4gVEVcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA5IC0+XG4jIDgxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF92YXJpYW50IFZTIHRoZW4gVlNcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMjUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMCAtPlxuIyA4NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdmFyaWFudCBWRSB0aGVuIFZFXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzMzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTEgLT5cbiMgOTEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ09NTUEgKVxuIyAzMzggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMiAtPlxuIyA5MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDT0xPTiApXG4jIDM0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEzIC0+XG4jIDk1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBORUdJTkZJTklUWSApXG4jIDM0OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE0IC0+XG4jIDk3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBJTkZJTklUWSApXG4jIDM1MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE1IC0+XG4jIDk5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBJTkZJTklUWSApXG4jIDM1OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE2IC0+XG4jIDEwMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgTkFOIClcbiMgMzYzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTcgLT5cbiMgMTAzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBMZXh4ZXJfdXRpbHMuc3RyaW5nMm51bSAoTGV4aW5nLmxleGVtZSBsZXhidWYpIHdpdGhcbiAgICAgIHwgSU5UIF8gYXMgdG9rIC0+IENvbXBsaWFuY2UubGV4X2ludGVnZXIgdG9rXG4gICAgICB8IExBUkdFSU5UIF8gYXMgdG9rIC0+IENvbXBsaWFuY2UubGV4X2xhcmdlaW50IHRva1xuICAgICAgfCB0b2sgLT4gdG9rXG4gICAgKVxuIyAzNzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxOCAtPlxuIyAxMTAgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIChGTE9BVCAoZmxvYXRfb2Zfc3RyaW5nIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikpKSApXG4jIDM3OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE5IC0+XG4jIDExMiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBTVFJJTkcgXCJcIiApXG4jIDM4MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIwIC0+XG5sZXRcbiMgMTEzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1xuIyAzODkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG49IExleGluZy5zdWJfbGV4ZW1lIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgMSkgKGxleGJ1Zi5MZXhpbmcubGV4X2N1cnJfcG9zICsgLTEpIGluXG4jIDExNCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBTVFJJTkcgKExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgcykgKVxuIyAzOTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMSAtPlxuIyAxMTYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggRU9GIClcbiMgMzk4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjIgLT5cbiMgMTE4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIHJlYWQgbGV4YnVmIClcbiMgNDAzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjMgLT5cbiMgMTIwIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy51cGRhdGVfcG9zIGxleGJ1ZjsgcmVhZCBsZXhidWY7IClcbiMgNDA4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjQgLT5cbiMgMTIyIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBDb21wbGlhbmNlLmNvbW1lbnRfY2hlY2sgKCkgd2l0aFxuICAgICAgfCBPayAoKSAtPiByZWFkX2NvbW1lbnQgbGV4YnVmOyByZWFkIGxleGJ1ZlxuICAgICAgfCBFcnJvciBlcnIgLT4gIENPTVBMSUFOQ0VfRVJST1IgZXJyXG4gICAgKVxuIyA0MTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNSAtPlxuIyAxMjggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIENvbXBsaWFuY2UuY29tbWVudF9jaGVjayAoKSB3aXRoXG4gICAgICB8IE9rICgpIC0+IHJlYWQgbGV4YnVmXG4gICAgICB8IEVycm9yIGVyciAtPiAgQ09NUExJQU5DRV9FUlJPUiBlcnJcbiAgICApXG4jIDQyNiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI2IC0+XG4jIDEzNCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIikgKVxuIyA0MzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9jb21tZW50IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiA4OFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyAxMzkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggKCkgKVxuIyA0NDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxIC0+XG4jIDE0MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMudXBkYXRlX3BvcyBsZXhidWY7IHJlYWRfY29tbWVudCBsZXhidWYgKVxuIyA0NDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyIC0+XG4jIDE0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIFwidW5leHBlY3RlZCBFT0YgaW4gY29tbWVudFwiIClcbiMgNDUzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMyAtPlxuIyAxNDUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggcmVhZF9jb21tZW50IGxleGJ1ZiApXG4jIDQ1OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuOztcblxuIyAxNDcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuIFxuICBlbmRcblxuIyA0NjkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG4iLCJtb2R1bGUgWW9qc29uID0gU3RkLllvanNvblxub3BlbiBCcnJcblxudHlwZSBtZXRob2QnID0gR2V0IHwgUG9zdFxuXG5sZXQganN0cl9vZl9tZXRob2QgPSBmdW5jdGlvbiBHZXQgLT4gSnN0ci52IFwiR0VUXCIgfCBQb3N0IC0+IEpzdHIudiBcIlBPU1RcIlxuXG5tb2R1bGUgVHlwZXMgPSBzdHJ1Y3RcbiAgdHlwZSBvcmRlciA9IEFzY2VuZGluZyB8IERlc2NlbmRpbmcgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgc29ydCA9XG4gICAgfCBBbGJ1bVxuICAgIHwgQWxidW1BcnRpc3RcbiAgICB8IEFydGlzdFxuICAgIHwgQnVkZ2V0XG4gICAgfCBDb21tdW5pdHlSYXRpbmdcbiAgICB8IENyaXRpY1JhdGluZ1xuICAgIHwgRGF0ZUNyZWF0ZWRcbiAgICB8IERhdGVQbGF5ZWRcbiAgICB8IFBsYXlDb3VudFxuICAgIHwgUHJlbWllcmVEYXRlXG4gICAgfCBQcm9kdWN0aW9uWWVhclxuICAgIHwgU29ydE5hbWVcbiAgICB8IFJhbmRvbVxuICAgIHwgUmV2ZW51ZVxuICAgIHwgUnVudGltZVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5lbmRcblxudHlwZSB1c2VyID0ge1xuICBuYW1lIDogc3RyaW5nOyBbQGtleSBcIk5hbWVcIl1cbiAgc2VydmVyX2lkIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlcklkXCJdXG4gIHNlcnZlcl9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiU2VydmVyTmFtZVwiXVxuICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxufVxuW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG5tb2R1bGUgdHlwZSBRdWVyeSA9IHNpZ1xuICB0eXBlIHBhdGhfcGFyYW1zXG4gIHR5cGUgcGFyYW1zIFtAQGRlcml2aW5nIHlvanNvbl1cbiAgdHlwZSByZXNwb25zZSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdmFsIG1ldGhvZCcgOiBtZXRob2QnXG4gIHZhbCBlbmRwb2ludCA6IHBhdGhfcGFyYW1zIC0+IHN0cmluZyBsaXN0XG5lbmRcblxubW9kdWxlIEF1dGhlbnRpY2F0ZV9ieV9uYW1lID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG5cbiAgdHlwZSBwYXJhbXMgPSB7IHVzZXJuYW1lIDogc3RyaW5nOyBbQGtleSBcIlVzZXJuYW1lXCJdIHB3IDogc3RyaW5nIFtAa2V5IFwiUHdcIl0gfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICB1c2VyIDogdXNlcjsgW0BrZXkgXCJVc2VyXCJdXG4gICAgYWNjZXNzX3Rva2VuIDogc3RyaW5nOyBbQGtleSBcIkFjY2Vzc1Rva2VuXCJdXG4gICAgc2VydmVyX2lkIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlcklkXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gUG9zdFxuICBsZXQgZW5kcG9pbnQgXyA9IFsgXCJVc2Vyc1wiOyBcIkF1dGhlbnRpY2F0ZUJ5TmFtZVwiIF1cbmVuZFxuXG5tb2R1bGUgSXRlbSA9IHN0cnVjdFxuICB0eXBlIGltYWdlX2JsdXJfaGFzaCA9IChzdHJpbmcgKiBzdHJpbmcpIGxpc3RcblxuICBsZXQgaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiB5ID1cbiAgICBsZXQgYXNzb2MgPSBZb2pzb24uU2FmZS5VdGlsLnRvX2Fzc29jIHkgaW5cbiAgICBMaXN0Lm1hcCAoZnVuIChrZXksIHYpIC0+IChrZXksIFlvanNvbi5TYWZlLlV0aWwudG9fc3RyaW5nIHYpKSBhc3NvY1xuXG4gIGxldCB5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIGkgOiBZb2pzb24uU2FmZS50ID1cbiAgICBsZXQgYXNzb2MgPSBMaXN0Lm1hcCAoZnVuIChrZXksIHYpIC0+IChrZXksIGBTdHJpbmcgdikpIGkgaW5cbiAgICBgQXNzb2MgYXNzb2NcblxuICB0eXBlIGltYWdlX2JsdXJfaGFzaGVzID0ge1xuICAgIHByaW1hcnkgOiBpbWFnZV9ibHVyX2hhc2ggb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiUHJpbWFyeVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICB0eXBlIHR5cGVfID1cbiAgICB8IEFnZ3JlZ2F0ZUZvbGRlclxuICAgIHwgQXVkaW9cbiAgICB8IEF1ZGlvQm9va1xuICAgIHwgQmFzZVBsdWdpbkZvbGRlclxuICAgIHwgQm9va1xuICAgIHwgQm94U2V0XG4gICAgfCBDaGFubmVsXG4gICAgfCBDaGFubmVsRm9sZGVySXRlbVxuICAgIHwgQ29sbGVjdGlvbkZvbGRlclxuICAgIHwgRXBpc29kZVxuICAgIHwgRm9sZGVyXG4gICAgfCBHZW5yZVxuICAgIHwgTGl2ZVR2Q2hhbm5lbFxuICAgIHwgTGl2ZVR2UHJvZ3JhbVxuICAgIHwgTWFudWFsUGxheWxpc3RzRm9sZGVyXG4gICAgfCBNb3ZpZVxuICAgIHwgTXVzaWNBbGJ1bVxuICAgIHwgTXVzaWNBcnRpc3RcbiAgICB8IE11c2ljR2VucmVcbiAgICB8IE11c2ljVmlkZW9cbiAgICB8IFBlcnNvblxuICAgIHwgUGhvdG9cbiAgICB8IFBob3RvQWxidW1cbiAgICB8IFBsYXlsaXN0XG4gICAgfCBQbGF5bGlzdHNGb2xkZXJcbiAgICB8IFByb2dyYW1cbiAgICB8IFJlY29yZGluZ1xuICAgIHwgU2Vhc29uXG4gICAgfCBTZXJpZXNcbiAgICB8IFN0dWRpb1xuICAgIHwgVHJhaWxlclxuICAgIHwgVHZDaGFubmVsXG4gICAgfCBUdlByb2dyYW1cbiAgICB8IFVzZXJSb290Rm9sZGVyXG4gICAgfCBVc2VyVmlld1xuICAgIHwgVmlkZW9cbiAgICB8IFllYXJcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgZmllbGQgPVxuICAgIHwgQWlyVGltZVxuICAgIHwgQmFzaWNTeW5jSW5mb1xuICAgIHwgQ2FuRGVsZXRlXG4gICAgfCBDYW5Eb3dubG9hZFxuICAgIHwgQ2hhbm5lbEltYWdlXG4gICAgfCBDaGFubmVsSW5mb1xuICAgIHwgQ2hhcHRlcnNcbiAgICB8IENoaWxkQ291bnRcbiAgICB8IEN1bXVsYXRpdmVSdW5UaW1lVGlja3NcbiAgICB8IEN1c3RvbVJhdGluZ1xuICAgIHwgRGF0ZUNyZWF0ZWRcbiAgICB8IERhdGVMYXN0TWVkaWFBZGRlZFxuICAgIHwgRGF0ZUxhc3RSZWZyZXNoZWRcbiAgICB8IERhdGVMYXN0U2F2ZWRcbiAgICB8IERpc3BsYXlQcmVmZXJlbmNlc0lkXG4gICAgfCBFbmFibGVNZWRpYVNvdXJjZURpc3BsYXlcbiAgICB8IEV0YWdcbiAgICB8IEV4dGVybmFsRXRhZ1xuICAgIHwgRXh0ZXJuYWxTZXJpZXNJZFxuICAgIHwgRXh0ZXJuYWxVcmxzXG4gICAgfCBFeHRyYUlkc1xuICAgIHwgR2VucmVzXG4gICAgfCBIZWlnaHRcbiAgICB8IEhvbWVQYWdlVXJsXG4gICAgfCBJbmhlcml0ZWRQYXJlbnRhbFJhdGluZ1ZhbHVlXG4gICAgfCBJc0hEXG4gICAgfCBJdGVtQ291bnRzXG4gICAgfCBMb2NhbFRyYWlsZXJDb3VudFxuICAgIHwgTWVkaWFTb3VyY2VDb3VudFxuICAgIHwgTWVkaWFTb3VyY2VzXG4gICAgfCBNZWRpYVN0cmVhbXNcbiAgICB8IE9yaWdpbmFsVGl0bGVcbiAgICB8IE92ZXJ2aWV3XG4gICAgfCBQYXJlbnRJZFxuICAgIHwgUGF0aFxuICAgIHwgUGVvcGxlXG4gICAgfCBQbGF5QWNjZXNzXG4gICAgfCBQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFByaW1hcnlJbWFnZUFzcGVjdFJhdGlvXG4gICAgfCBQcm9kdWN0aW9uTG9jYXRpb25zXG4gICAgfCBQcm92aWRlcklkc1xuICAgIHwgUmVjdXJzaXZlSXRlbUNvdW50XG4gICAgfCBSZWZyZXNoU3RhdGVcbiAgICB8IFJlbW90ZVRyYWlsZXJzXG4gICAgfCBTY3JlZW5zaG90SW1hZ2VUYWdzXG4gICAgfCBTZWFzb25Vc2VyRGF0YVxuICAgIHwgU2VyaWVzUHJlc2VudGF0aW9uVW5pcXVlS2V5XG4gICAgfCBTZXJpZXNQcmltYXJ5SW1hZ2VcbiAgICB8IFNlcmllc1N0dWRpb1xuICAgIHwgU2VydmljZU5hbWVcbiAgICB8IFNldHRpbmdzXG4gICAgfCBTb3J0TmFtZVxuICAgIHwgU3BlY2lhbEVwaXNvZGVOdW1iZXJzXG4gICAgfCBTcGVjaWFsRmVhdHVyZUNvdW50XG4gICAgfCBTdHVkaW9zXG4gICAgfCBTeW5jSW5mb1xuICAgIHwgVGFnbGluZXNcbiAgICB8IFRhZ3NcbiAgICB8IFRoZW1lU29uZ0lkc1xuICAgIHwgVGhlbWVWaWRlb0lkc1xuICAgIHwgV2lkdGhcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gICgqIFRoZSBbVHlwZV0gZmllbGQgaXMgYWN0dWFsbHkgYSBqc29uIHN0cmluZyBidXQgd2Ugd2FudCB0byBzZWUgaXQgYXMgYVxuICAgICB2YXJpYW50ICh3aGljaCBpcyBhIGxpc3Qgb2Ygb25lIHN0cmluZykgKilcbiAgdHlwZSB0eXBlX3N0ciA9IHR5cGVfXG5cbiAgbGV0IHR5cGVfc3RyX29mX3lvanNvbiBqID1cbiAgICBsZXQgcyA9IFlvanNvbi5TYWZlLlV0aWwudG9fc3RyaW5nIGogaW5cbiAgICB0eXBlX19vZl95b2pzb24gKGBMaXN0IFsgYFN0cmluZyBzIF0pXG5cbiAgbGV0IHlvanNvbl9vZl90eXBlX3N0ciB0cyA9XG4gICAgbWF0Y2ggeW9qc29uX29mX3R5cGVfIHRzIHdpdGggYExpc3QgWyBqc29uIF0gLT4ganNvbiB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgdHlwZSB0ID0ge1xuICAgIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICAgIHNvcnRfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJTb3J0TmFtZVwiXVxuICAgIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG4gICAgcGF0aCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQYXRoXCJdXG4gICAgYWxidW1faWQgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiQWxidW1JZFwiXVxuICAgIHBhcmVudF9pZCA6IHN0cmluZyBvcHRpb24gb3B0aW9uO1xuICAgICAgICAoKiBbUGFyZW50SWRdIG1pZ2h0IGFic2VudCwgW251bGxdLCBvciBhIHN0cmluZyAqKVxuICAgICAgICBbQHlvanNvbi5vcHRpb25dXG4gICAgICAgIFtAa2V5IFwiUGFyZW50SWRcIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgICBpbWFnZV9ibHVyX2hhc2hlcyA6IGltYWdlX2JsdXJfaGFzaGVzOyBbQGtleSBcIkltYWdlQmx1ckhhc2hlc1wiXVxuICAgIHR5cGVfIDogdHlwZV9zdHI7IFtAa2V5IFwiVHlwZVwiXVxuICAgIGNvbGxlY3Rpb25fdHlwZSA6IHN0cmluZyBvcHRpb247XG4gICAgICAgIFtAZGVmYXVsdCBOb25lXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiQ29sbGVjdGlvblR5cGVcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5lbmRcblxubW9kdWxlIEl0ZW1zID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG5cbiAgdHlwZSBwYXJhbXMgPSB7XG4gICAgaWRzIDogc3RyaW5nIGxpc3Q7IFtAZGVmYXVsdCBbXV0gW0B5b2pzb25fZHJvcF9kZWZhdWx0ICggPSApXSBbQGtleSBcImlkc1wiXVxuICAgIHBhcmVudF9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJwYXJlbnRJZFwiXVxuICAgIHVzZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwidXNlcklkXCJdXG4gICAgZmllbGRzIDogSXRlbS5maWVsZCBsaXN0O1xuICAgIGluY2x1ZGVfaXRlbV90eXBlcyA6IEl0ZW0udHlwZV8gbGlzdDsgW0BrZXkgXCJpbmNsdWRlSXRlbVR5cGVzXCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwic3RhcnRJbmRleFwiXVxuICAgIGxpbWl0IDogaW50IG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXVxuICAgIHNvcnRfb3JkZXIgOiBUeXBlcy5vcmRlciBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzb3J0T3JkZXJcIl1cbiAgICBzb3J0X2J5IDogVHlwZXMuc29ydCBsaXN0OyBbQGtleSBcInNvcnRCeVwiXVxuICAgIHJlY3Vyc2l2ZSA6IGJvb2w7XG4gICAgZW5hYmxlX3VzZXJfZGF0YSA6IGJvb2w7IFtAa2V5IFwiZW5hYmxlVXNlckRhdGFcIl1cbiAgICBlbmFibGVfaW1hZ2VzIDogYm9vbDsgW0BrZXkgXCJlbmFibGVJbWFnZXNcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICBpdGVtcyA6IEl0ZW0udCBsaXN0OyBbQGtleSBcIkl0ZW1zXCJdXG4gICAgdG90YWxfcmVjb3JkX2NvdW50IDogaW50OyBbQGtleSBcIlRvdGFsUmVjb3JkQ291bnRcIl1cbiAgICBzdGFydF9pbmRleCA6IGludDsgW0BrZXkgXCJTdGFydEluZGV4XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gWyBcIkl0ZW1zXCIgXVxuZW5kXG5cbm1vZHVsZSBWaWV3cyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0geyB1c2VyX2lkIDogc3RyaW5nIH1cblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQgOiBib29sOyBbQGtleSBcImluY2x1ZGVFeHRlcm5hbENvbnRlbnRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICBpdGVtcyA6IEl0ZW0udCBsaXN0OyBbQGtleSBcIkl0ZW1zXCJdXG4gICAgdG90YWxfcmVjb3JkX2NvdW50IDogaW50OyBbQGtleSBcIlRvdGFsUmVjb3JkQ291bnRcIl1cbiAgICBzdGFydF9pbmRleCA6IGludDsgW0BrZXkgXCJTdGFydEluZGV4XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBwcCA9IFsgXCJVc2Vyc1wiOyBwcC51c2VyX2lkOyBcIlZpZXdzXCIgXVxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcnMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcbiAgdHlwZSBwYXJhbXMgPSB1bml0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHZpcnR1YWxfZm9sZGVyID0ge1xuICAgIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICAgIGxvY2F0aW9ucyA6IHN0cmluZyBsaXN0OyBbQGtleSBcIkxvY2F0aW9uc1wiXVxuICAgIGl0ZW1faWQgOiBzdHJpbmc7IFtAa2V5IFwiSXRlbUlkXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB2aXJ0dWFsX2ZvbGRlciBsaXN0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgXyA9IFsgXCJMaWJyYXJ5XCI7IFwiVmlydHVhbEZvbGRlcnNcIiBdXG5lbmRcblxubW9kdWxlIFN5c3RlbSA9IHN0cnVjdFxuICBtb2R1bGUgSW5mbyA9IHN0cnVjdFxuICAgIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG4gICAgdHlwZSBwYXJhbXMgPSB1bml0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICAgIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgICBsb2NhbF9hZGRyZXNzIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiTG9jYWxBZHJlc3NcIl1cbiAgICAgIHNlcnZlcl9uYW1lIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlck5hbWVcIl1cbiAgICAgIHByb2R1Y3RfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIlByb2R1Y3ROYW1lXCJdXG4gICAgICBvcGVyYXRpbmdfc3lzdGVtIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiT3BlcmF0aW5nU3lzdGVtXCJdXG4gICAgICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxuICAgIH1cbiAgICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgICBsZXQgbWV0aG9kJyA9IEdldFxuICAgIGxldCBlbmRwb2ludCBfID0gWyBcIlN5c3RlbVwiOyBcIkluZm9cIiBdXG4gIGVuZFxuZW5kXG5cbigqIEZvcndhcmQgZGVjbGFyYXRpb24gdG8gYmUgZmlsbGVkIGJ5IHRoZSBhcHAgKilcbmxldCBzZXNzaW9uX3V1aWQgPSByZWYgTm9uZVxubGV0IHNldF9zZXNzaW9uX3V1aWQgcyA9IHNlc3Npb25fdXVpZCA6PSBTb21lIHNcblxubGV0IGF1dGhvcml6YXRpb24gP3Rva2VuICgpID1cbiAgbGV0IHRva2VuID1cbiAgICBtYXRjaCB0b2tlbiB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgdCAtPiBQcmludGYuc3ByaW50ZiBcIiwgVG9rZW49JVNcIiB0XG4gIGluXG4gIGxldCBzZXNzaW9uX3V1aWQgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6XCJcIiAhc2Vzc2lvbl91dWlkIGluXG4gIFByaW50Zi5zcHJpbnRmXG4gICAgXCJNZWRpYUJyb3dzZXIgQ2xpZW50PVxcXCJPY2FtaXhcXFwiLCBEZXZpY2U9XFxcIkZpcmVmb3hcXFwiLCBEZXZpY2VJZD1cXFwiJXNcXFwiLCBcXFxuICAgICBWZXJzaW9uPVxcXCIwLjFcXFwiJXNcIlxuICAgIHNlc3Npb25fdXVpZCB0b2tlblxuXG5sZXQgcmVxdWVzdCAodHlwZSBwcCBwIHIpIH5iYXNlX3VybCA/dG9rZW4gP2hlYWRlcnNcbiAgICAobW9kdWxlIFEgOiBRdWVyeVxuICAgICAgd2l0aCB0eXBlIHBhdGhfcGFyYW1zID0gcHBcbiAgICAgICBhbmQgdHlwZSBwYXJhbXMgPSBwXG4gICAgICAgYW5kIHR5cGUgcmVzcG9uc2UgPSByKSAocGFyYW1zIDogcCkgKHBhdGhfcGFyYW1zIDogcHApIDogciBGdXQub3JfZXJyb3IgPVxuICBsZXQgb3BlbiBCcnJfaW8uRmV0Y2ggaW5cbiAgbGV0IGJhc2VfdXJpID0gVXJpLnYgKEpzdHIudiBiYXNlX3VybCkgaW5cbiAgbGV0IGJhc2VfcGF0aF9zZWdtZW50cyA9IFJlc3VsdC5nZXRfb2sgQEAgVXJpLnBhdGhfc2VnbWVudHMgYmFzZV91cmkgaW5cbiAgbGV0IGVuZHBvaW50X3BhdGhfc2VnbWVudHMgPSBMaXN0Lm1hcCBKc3RyLnYgKFEuZW5kcG9pbnQgcGF0aF9wYXJhbXMpIGluXG4gIGxldCBwYXRoX3NlZ21lbnRzID1cbiAgICBpZiBiYXNlX3BhdGhfc2VnbWVudHMgPSBbIEpzdHIuZW1wdHkgXSB0aGVuIGVuZHBvaW50X3BhdGhfc2VnbWVudHNcbiAgICBlbHNlIExpc3QuY29uY2F0IFsgYmFzZV9wYXRoX3NlZ21lbnRzOyBlbmRwb2ludF9wYXRoX3NlZ21lbnRzIF1cbiAgaW5cbiAgbGV0IHVyaSA9IFVyaS53aXRoX3BhdGhfc2VnbWVudHMgYmFzZV91cmkgcGF0aF9zZWdtZW50cyBpblxuICBsZXQgdXJpID0gUmVzdWx0LmdldF9vayB1cmkgaW5cbiAgbGV0IGF1dGhvcml6YXRpb24gPSBhdXRob3JpemF0aW9uID90b2tlbiAoKSBpblxuICBsZXQgaGVhZGVycyA9XG4gICAgSGVhZGVycy5vZl9hc3NvYyA/aW5pdDpoZWFkZXJzXG4gICAgICBKc3RyLlxuICAgICAgICBbXG4gICAgICAgICAgKHYgXCJjb250ZW50LXR5cGVcIiwgdiBcInRleHQvanNvblwiKTtcbiAgICAgICAgICAodiBcIlgtRW1ieS1BdXRob3JpemF0aW9uXCIsIHYgYXV0aG9yaXphdGlvbik7XG4gICAgICAgIF1cbiAgaW5cbiAgbGV0IG1ldGhvZCcgPSBqc3RyX29mX21ldGhvZCBRLm1ldGhvZCcgaW5cbiAgbGV0IGluaXQsIHVybCA9XG4gICAgbWF0Y2ggUS5tZXRob2QnIHdpdGhcbiAgICB8IEdldCAtPlxuICAgICAgICBsZXQgcGFyYW1zID1cbiAgICAgICAgICBwYXJhbXMgfD4gUS55b2pzb25fb2ZfcGFyYW1zIHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLnZcbiAgICAgICAgICB8PiBKc29uLmRlY29kZSB8PiBSZXN1bHQuZ2V0X29rIHw+IFVyaS5QYXJhbXMub2Zfb2JqXG4gICAgICAgIGluXG4gICAgICAgIGxldCB1cmlfd2l0aF9wYXJhbXMgPSBVcmkud2l0aF9xdWVyeV9wYXJhbXMgdXJpIHBhcmFtcyBpblxuICAgICAgICAoUmVxdWVzdC5pbml0IH5oZWFkZXJzIH5tZXRob2QnICgpLCBVcmkudG9fanN0ciB1cmlfd2l0aF9wYXJhbXMpXG4gICAgfCBQb3N0IC0+XG4gICAgICAgIGxldCBib2R5ID1cbiAgICAgICAgICBwYXJhbXMgfD4gUS55b2pzb25fb2ZfcGFyYW1zIHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLnZcbiAgICAgICAgICB8PiBCb2R5Lm9mX2pzdHJcbiAgICAgICAgaW5cbiAgICAgICAgKFJlcXVlc3QuaW5pdCB+aGVhZGVycyB+bWV0aG9kJyB+Ym9keSAoKSwgVXJpLnRvX2pzdHIgdXJpKVxuICBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQqIHJlcyA9IHJlcXVlc3QgQEAgUmVxdWVzdC52IH5pbml0IHVybCBpblxuICBsZXQrIGpzb24gPSBSZXNwb25zZS5hc19ib2R5IHJlcyB8PiBCb2R5LnRleHQgaW5cbiAgbGV0IHlvanNvbiA9IFlvanNvbi5TYWZlLmZyb21fc3RyaW5nIChKc3RyLnRvX3N0cmluZyBqc29uKSBpblxuICB0cnkgUS5yZXNwb25zZV9vZl95b2pzb24geW9qc29uXG4gIHdpdGggZSAtPlxuICAgIENvbnNvbGUubG9nIFsgXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGRlY29kaW5nIHJlc3BvbnNlOiBcIjsganNvbiBdO1xuICAgIENvbnNvbGUubG9nIFsgZSBdO1xuICAgIHJhaXNlIGVcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJfaW9cbm1vZHVsZSBBcGkgPSBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGlcblxuKCogUHJvcG9zaXRpb246XG4gICAtIFVzZSBwcmltYXJ5IGtleSB0byBwcm92aWRlIGZpbHRlcmluZ1xuICAgLSBVc2UgaW5kZXgga2V5cyB0byBwcm92aWRlIHNvcnRzXG5cbiAgIEJpZyBwcmltYXJ5IGtleXMgZHJpdmUgdGhlIGNvc3Qgb2YgW2dldF9hbGxfa2V5c10gdXAuXG4gICBXZSBjb3VsZCBkZWxlZ2F0ZSBzb21lIGZpbHRlcmluZyB0byB0aGUgaW5kZXgga2V5cyBpZiBuZWNlc3NhcnkuXG5cbiAgICBXZSBjb3VsZCBhbHNvIHRyaWVkIHRvIHByZS1wcm9jZXNzIG9yIGNvbXByZXNzIHRoZSBrZXlzICopXG5cbmxldCB0X3RvX2p2IGVuY29kZXIgdCA9XG4gIGVuY29kZXIgdCB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci5vZl9zdHJpbmcgfD4gQnJyLkpzb24uZGVjb2RlXG4gIHw+IFJlc3VsdC5nZXRfZXhuXG5cbmxldCBqdl90b190IGRlY29kZXIgaiA9XG4gIGxldCBqc29uID0gQnJyLkpzb24uZW5jb2RlIGogaW5cbiAgT2sgKEpzdHIudG9fc3RyaW5nIGpzb24gfD4gWW9qc29uLlNhZmUuZnJvbV9zdHJpbmcgfD4gZGVjb2RlcilcblxubW9kdWxlIE9yZGVycmVkX2l0ZW1zID0gc3RydWN0XG4gIHR5cGUgdCA9IHsgaWQgOiBpbnQ7IGl0ZW0gOiBzdHJpbmcgb3B0aW9uIH0gW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaWRcIlxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfZGF0ZV9hZGRlZFwiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG4gIGxldCBnZXRfa2V5IHQgPSB0LmlkXG5lbmRcblxubW9kdWxlIEl0ZW1zID0gc3RydWN0XG4gIG9wZW4gRGF0YV9zb3VyY2UuSmVsbHlmaW4uQXBpXG5cbiAgdHlwZSBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA6IGludDsgdmlld3MgOiBzdHJpbmcgbGlzdDsgc29ydF9uYW1lIDogc3RyaW5nIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgdCA9IHsgc29ydHMgOiBzb3J0czsgaXRlbSA6IEl0ZW0udCB9IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBsZXQgY29tcGFyZSB0IHQnID0gU3RyaW5nLmNvbXBhcmUgdC5zb3J0cy5zb3J0X25hbWUgdCcuc29ydHMuc29ydF9uYW1lXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgaWQgOiBzdHJpbmc7IHNvcnRfbmFtZSA6IHN0cmluZzsgdmlld3MgOiBzdHJpbmcgbGlzdCB9XG5cbiAgICBsZXQgdG9fanYgeyBpZDsgc29ydF9uYW1lOyB2aWV3cyB9ID1cbiAgICAgIGxldCBpZCA9IEp2Lm9mX3N0cmluZyBpZCBpblxuICAgICAgbGV0IHNvcnRfbmFtZSA9IEp2Lm9mX3N0cmluZyBzb3J0X25hbWUgaW5cbiAgICAgIGxldCB2aWV3cyA9IEp2Lm9mX2xpc3QgSnYub2Zfc3RyaW5nIHZpZXdzIGluXG4gICAgICBKdi5vZl9qdl9hcnJheSBbfCBpZDsgc29ydF9uYW1lOyB2aWV3cyB8XVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYudG9fanZfYXJyYXkgaiB3aXRoXG4gICAgICB8IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgbGV0IGlkID0gSnYudG9fc3RyaW5nIGlkIGluXG4gICAgICAgICAgbGV0IHNvcnRfbmFtZSA9IEp2LnRvX3N0cmluZyBzb3J0X25hbWUgaW5cbiAgICAgICAgICBsZXQgdmlld3MgPSBKdi50b19saXN0IEp2LnRvX3N0cmluZyB2aWV3cyBpblxuICAgICAgICAgIHsgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPVxuICAgICAgSW5kZXhlZF9kYi5LZXlfcGF0aC4oXG4gICAgICAgIFMgW3wgSWQgXCJpdGVtLklkXCI7IElkIFwiaXRlbS5OYW1lXCI7IElkIFwic29ydHMudmlld3NcIiB8XSlcbiAgZW5kXG5cbiAgbW9kdWxlIEtleV9kYXRlX2FkZGVkID0gc3RydWN0XG4gICAgdHlwZSB0ID0gaW50XG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX2ludCBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19pbnQgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcInNvcnRzLmRhdGVfYWRkZWRcIlxuICBlbmRcblxuICBtb2R1bGUgS2V5X2lkID0gc3RydWN0XG4gICAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX3N0cmluZyBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19zdHJpbmcgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcIml0ZW0uSWRcIlxuICBlbmRcblxuICBtb2R1bGUgS2V5X3ZpZXdfa2luZCA9IHN0cnVjdFxuICAgICgqIHRvZG86IHVzZSBhIGVudW0gZm9yIGtpbmRzICopXG4gICAgdHlwZSB0ID0geyB0eXBlJyA6IHN0cmluZzsgdmlld3MgOiBzdHJpbmcgbGlzdCB9XG5cbiAgICBsZXQgdG9fanYgX2sgPSBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBvZl9qdiBqID1cbiAgICAgIG1hdGNoIEp2Lih0b19qdl9hcnJheSBqKSB3aXRoXG4gICAgICB8IFt8IHR5cGUnOyB2aWV3cyB8XSAtPlxuICAgICAgICAgIHsgdHlwZScgPSBKdi50b19zdHJpbmcgdHlwZSc7IHZpZXdzID0gSnYuKHRvX2xpc3QgdG9fc3RyaW5nIHZpZXdzKSB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uVHlwZVwiOyBJZCBcInNvcnRzLnZpZXdzXCIgfF1cbiAgZW5kXG5cbiAgbW9kdWxlIEtleV90eXBlX25hbWUgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSB7IGNvbGxlY3Rpb25fdHlwZSA6IHN0cmluZzsgc29ydF9uYW1lIDogc3RyaW5nIH1cblxuICAgIGxldCB0b19qdiBfdCA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgY29sbGVjdGlvbl90eXBlOyBzb3J0X25hbWUgfF0gLT5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uX3R5cGUgPSBKdi50b19zdHJpbmcgY29sbGVjdGlvbl90eXBlO1xuICAgICAgICAgICAgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZTtcbiAgICAgICAgICB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9XG4gICAgICBJbmRleGVkX2RiLktleV9wYXRoLlMgW3wgSWQgXCJpdGVtLkNvbGxlY3Rpb25UeXBlXCI7IElkIFwic29ydHMuc29ydF9uYW1lXCIgfF1cbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcIml0ZW1zXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cblxuICBsZXQgZ2V0X2tleSB0ID1cbiAgICB7XG4gICAgICBLZXkuc29ydF9uYW1lID0gdC5zb3J0cy5zb3J0X25hbWU7XG4gICAgICBpZCA9IHQuaXRlbS5JdGVtLmlkO1xuICAgICAgdmlld3MgPSB0LnNvcnRzLnZpZXdzO1xuICAgIH1cbmVuZFxuXG5tb2R1bGUgVmlydHVhbF9mb2xkZXIgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGlcblxuICAoKiB0b2RvOiBtdWx0aXNlcnZlcjogd2Ugc2hvdWxkIGFkZCBhIHNlcnZlcl9pZCBrZXkgKilcbiAgdHlwZSB0ID0gVmlydHVhbF9mb2xkZXJzLnZpcnR1YWxfZm9sZGVyIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX3N0cmluZyBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19zdHJpbmcgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcIkl0ZW1JZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJ2aXJ0dWFsX2ZvbGRlcnNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gdC5WaXJ0dWFsX2ZvbGRlcnMuaXRlbV9pZFxuZW5kXG5cbm1vZHVsZSBPcmRlcnJlZF9pdGVtc19zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKE9yZGVycmVkX2l0ZW1zKVxubW9kdWxlIEl0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoSXRlbXMpXG5tb2R1bGUgVmlydHVhbF9mb2xkZXJfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChWaXJ0dWFsX2ZvbGRlcilcblxubW9kdWxlIEl0ZW1zQnlEYXRlQWRkZWQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfZGF0ZV9hZGRlZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X2RhdGVfYWRkZWQpXG5cbm1vZHVsZSBJdGVtc0J5Vmlld0FuZEtpbmQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdmlld19hbmRfa2luZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3ZpZXdfa2luZClcblxubW9kdWxlIEl0ZW1zQnlJZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9pZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X2lkKVxuXG5tb2R1bGUgSXRlbXNCeVR5cGVBbmROYW1lID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X3R5cGVfYW5kX25hbWVcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV90eXBlX25hbWUpXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyXG5vcGVuIEJycl9pby5JbmRleGVkX2RiXG5tb2R1bGUgU291cmNlID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBPSSA9IFN0b3Jlcy5PcmRlcnJlZF9pdGVtc19zdG9yZVxubW9kdWxlIEkgPSBTdG9yZXMuSXRlbXNfc3RvcmVcbm1vZHVsZSBWRiA9IFN0b3Jlcy5WaXJ0dWFsX2ZvbGRlcl9zdG9yZVxub3BlbiBTb3VyY2UuQXBpXG5cbigqIEl0ZW1zIEhpZXJhcmNoeVxuXG4gICBVc2VyUm9vdEZvbGRlciAoXCJNZWRpYSBGb2xkZXJzXCIgXCJlOWQ1MDc1YTU1NWMxY2JjMzk0ZWVjNGNlZjI5NTI3NFwiKVxuICAgICAgICAgICAgICAgICAgKEdldHMgdGhlIHJvb3QgZm9sZGVyIGZyb20gYSB1c2VyJ3MgbGlicmFyeS4gKVxuICAgXiBDb2xsZWN0aW9uRm9sZGVyIChcIk11c2ljTGliXCIgXCIxNTA4NDhjZDRmNDRiOWFlMzJlYzVhNzkzNGRlMzljZVwiKVxuXG4gICBBZ2dyZWdhdGVGb2xkZXIgKFwicm9vdFwiIFwiZjI3Y2FhMzdlNTE0MjIyNWNjZWRlZDQ4ZjY1NTM1MDJcIilcbiAgIF4gRm9sZGVyIChcIm1lZGlhXCIgXCI5MmZkZTcxZDBlYzU3N2I1MzFlN2IzNDI3YjIyM2JlZFwiKVxuICAgXiBGb2xkZXIrIDwtIE11c2ljQXJ0aXN0IDwtIE11c2ljQWxidW0gPC0gQXVkaW9cblxuICAgSmVsbHlmaW4gY29uc2lkZXJzIHRoYXQgRm9sZGVyIChcIm1lZGlhXCIgXCI5MmZkZTcxZDBlYzU3N2I1MzFlN2IzNDI3YjIyM2JlZFwiKSA9PSBDb2xsZWN0aW9uRm9sZGVyIChcIk11c2ljTGliXCIgXCIxNTA4NDhjZDRmNDRiOWFlMzJlYzVhNzkzNGRlMzljZVwiKVxuXG4gICBUaGlzIGVxdWFsaXR5IGNhbiBiZSByZXRyaXZlZCBieSBxdWVyeWluZyB0aGUgXCJWaXJ0dWFsRm9sZGVyc1wiIGFuZCBsb29rIGF0XG4gICB0aGUgbG9jYXRpb25zJyBwYXRocy4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIG5vdCBhY2Nlc3NpYmxlIHRvIHVucHJpdmlsZWRnZWQgdXNlcnMuLi5cblxuICAgVG8gYWN0dWFsbHkga25vdyB3aGljaCBmb2xkZXJzIGFyZSBwYXJ0IG9mIGEgdXNlciB2aWV3IHdlIG5lZWQgdG8gcXVlcnkgdGhlXG4gICBpdGVtcyB0aGF0IGhhdmUgdGhpcyB2aWV3J3MgaWQgYXMgYSBbcGFyZW50SWRdLiBUaGUgYWN0dWFsIFtwYXJlbnRJZF0gb2ZcbiAgIHRoZXNlIGl0ZW1zIHdpbGwgYmUgZGlmZmVyZW50IGFuZCBhcmUgdGhlIGlkcyBhY3R1YWwgZm9sZGVycyB0aGF0XG4gICBjb25zdGl0dXRlIHRoaXMgdmlldy5cblxuICAgRm9yIHNpbXBsaWNpdHkgKD8pIHdlIGNvbnNpZGVyIHRoYXQgYW4gaXRlbSBpcyBwYXJ0IG9mIGEgdmlldyBpZiBpdHMgcGF0aCBpc1xuICAgcHJlZml4ZWQgYnkgb25lIG9mIHRoZSB2aWV3J3MgdmlydHVhbCBmb2xkZXIgbG9jYXRpb25zLlxuKilcblxubGV0IGNodW5rX3NpemUgPSA1MDBcbmxldCBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbIFNvdXJjZS5BcGkuSXRlbS5NdXNpY0FydGlzdDsgTXVzaWNBbGJ1bTsgQXVkaW8gXVxuXG5sZXQgZmV0Y2hfdG90YWxfaXRlbV9jb3VudCBzb3VyY2UgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHJlcyA9XG4gICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAge1xuICAgICAgICAgICgqIHRvZG8gbWFrZSBzb3J0IGV4cGxpY2l0IChieSBkYXRlIGFkZGVkIGRhdGUpKilcbiAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgIGZpZWxkcyA9IFtdO1xuICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcztcbiAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgbGltaXQgPSBTb21lIDA7XG4gICAgICAgICAgc29ydF9vcmRlciA9IFNvbWUgQXNjZW5kaW5nO1xuICAgICAgICAgIHNvcnRfYnkgPSBbIERhdGVDcmVhdGVkIF07XG4gICAgICAgICAgcmVjdXJzaXZlID0gdHJ1ZTtcbiAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAoKVxuICBpblxuICByZXMudG90YWxfcmVjb3JkX2NvdW50XG5cbnR5cGUgZGJfaW5mb3MgPSB7XG4gIGxhc3Rfa2V5IDogaW50IG9wdGlvbjtcbiAgbGFzdF92YWx1ZSA6IFN0b3Jlcy5PcmRlcnJlZF9pdGVtcy50IG9wdGlvbjtcbn1cblxubGV0IGdldF9kYl9pbmZvcyBpZGIgPVxuICBsZXQgaW5mb3MsIHNldF9pbmZvcyA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgbGV0IHRyYW5zYWN0aW9uID0gRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKSBdIH5tb2RlOlJlYWRvbmx5IGlkYiBpblxuICBsZXQgc3RvcmUgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgbGV0IHJlcSA9IE9JLm9wZW5fY3Vyc29yIH5kaXJlY3Rpb246UHJldiBzdG9yZSBpblxuICBsZXQgbGFzdF9rZXkgPSByZWYgTm9uZSBpblxuICBsZXQgXyA9XG4gICAgUmVxdWVzdC5vbl9zdWNjZXNzIHJlcSB+ZjooZnVuIF8gcSAtPlxuICAgICAgICBtYXRjaCBSZXF1ZXN0LnJlc3VsdCBxIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHNldF9pbmZvcyB7IGxhc3Rfa2V5ID0gIWxhc3Rfa2V5OyBsYXN0X3ZhbHVlID0gTm9uZSB9XG4gICAgICAgIHwgU29tZSBjdXJzb3IgLT4gKFxuICAgICAgICAgICAgaWYgT3B0aW9uLmlzX25vbmUgIWxhc3Rfa2V5IHRoZW5cbiAgICAgICAgICAgICAgbGFzdF9rZXkgOj0gT0kuQ3Vyc29yX3dpdGhfdmFsdWUua2V5IGN1cnNvcjtcbiAgICAgICAgICAgIG1hdGNoIE9JLkN1cnNvcl93aXRoX3ZhbHVlLnZhbHVlIGN1cnNvciB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgKHsgaXRlbSA9IFNvbWUgXzsgXyB9IGFzIGl0ZW0pIC0+XG4gICAgICAgICAgICAgICAgc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBTb21lIGl0ZW0gfVxuICAgICAgICAgICAgfCBfIC0+IE9JLkN1cnNvcl93aXRoX3ZhbHVlLmNvbnRpbnVlIGN1cnNvcikpXG4gIGluXG4gIGluZm9zXG5cbmxldCBpc19kYl9jb25zaXN0ZW50IH5zb3VyY2U6XyB+bGFzdF9zb3VyY2VfaXRlbV9rZXkgZGJfc3luY19pbmZvcyA9XG4gIGxldCBsYXN0X2tleSA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDooLTEpIGRiX3N5bmNfaW5mb3MubGFzdF9rZXkgaW5cbiAgaWYgbGFzdF9rZXkgPiBsYXN0X3NvdXJjZV9pdGVtX2tleSB0aGVuXG4gICAgKCogVGhlcmUgYXJlIGZld2VyIGl0ZW1zIGluIHRoZSBzb3VyY2UgdGhhbiBleHBlY3RlZCAqKVxuICAgIGZhbHNlXG4gIGVsc2VcbiAgICAoKiBUb2RvOiBjaGVjayB0aGF0IHRoZSBsYXN0IGtub3duIGl0ZW0gaXMgdGhlIHNhbWUgdGhhbiBpbiB0aGUgc291cmNlICopXG4gICAgdHJ1ZVxuXG50eXBlIHN0YXR1cyA9XG4gIHwgVW5rbm93blxuICB8IEluX3N5bmNcbiAgfCBJbmNvbnNpc3RlbnRcbiAgfCBOZXdfaXRlbXMgb2Yge1xuICAgICAgZmlyc3RfbWlzc2luZ19rZXkgOiBpbnQ7XG4gICAgICBmaXJzdF91bmZldGNoZWRfa2V5IDogaW50O1xuICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgOiBpbnQ7XG4gICAgfVxuICB8IFBhcnRpYWxfZmV0Y2ggb2YgeyBmaXJzdF91bmZldGNoZWRfa2V5IDogaW50OyBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludCB9XG5cbnR5cGUgcHJvZ3Jlc3MgPSB7IHRvdGFsIDogaW50OyByZW1haW5pbmcgOiBpbnQgfVxudHlwZSByZXBvcnQgPSB7IHN0YXR1cyA6IHN0YXR1czsgc3luY19wcm9ncmVzcyA6IHByb2dyZXNzIG9wdGlvbiB9XG5cbmxldCBpbml0aWFsX3JlcG9ydCA9IHsgc3RhdHVzID0gVW5rbm93bjsgc3luY19wcm9ncmVzcyA9IE5vbmUgfVxuXG5sZXQgc3RhdHVzX3RvX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93biAtPiBcIlVua25vd25cIlxuICB8IEluX3N5bmMgLT4gXCJTeW5jaHJvbml6ZWRcIlxuICB8IEluY29uc2lzdGVudCAtPiBcIkluY29uc2lzdGVudFwiXG4gIHwgTmV3X2l0ZW1zIHsgZmlyc3RfbWlzc2luZ19rZXk7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAtPlxuICAgICAgRm9ybWF0LnNwcmludGYgXCJOZXcgaXRlbXM6IGxhc3Q6ICVpIG1pc3Npbmc6ICVpIHVuZmV0Y2hlZDogJWlcIlxuICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSBmaXJzdF9taXNzaW5nX2tleSBmaXJzdF91bmZldGNoZWRfa2V5XG4gIHwgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0gLT5cbiAgICAgIEZvcm1hdC5zcHJpbnRmIFwiUGFydGlhbDogbGFzdDogJWkgdW5mZXRjaGVkOiAlaVwiIGZpcnN0X3VuZmV0Y2hlZF9rZXlcbiAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleVxuXG5sZXQgcHBfcHJvZ3Jlc3MgZm10IHsgdG90YWw7IHJlbWFpbmluZyB9ID1cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiKCVpLyVpKVwiIHJlbWFpbmluZyB0b3RhbFxuXG5sZXQgcHBfcmVwb3J0IGZtdCB7IHN0YXR1czsgc3luY19wcm9ncmVzcyB9ID1cbiAgbGV0IHN0YXR1cyA9IHN0YXR1c190b19zdHJpbmcgc3RhdHVzIGluXG4gIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVzJWFcIiBzdGF0dXNcbiAgICAoRm9ybWF0LnBwX3ByaW50X29wdGlvbiBwcF9wcm9ncmVzcylcbiAgICBzeW5jX3Byb2dyZXNzXG5cbmxldCBsb2dfc3RhdHVzID0gZnVuY3Rpb25cbiAgfCBVbmtub3duIC0+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+ZGVmYXVsdDpzdHJpbmdcbmVuZFxuXG5sZXQgc2V0LCBfcyA9IEJycl9sd2RfdWkuVHJhbnNsYXRlZC5tYWtlIChtb2R1bGUgQ29uZmlnKVxubGV0IF9zIHMgZiA9IEx3ZC5tYXAgKF9zIHMpIH5mXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcblxuaW5jbHVkZSBEYi5Xb3JrZXJfYXBpLlN0YXJ0X2NsaWVudCAoc3RydWN0XG4gIGxldCB1cmwgPSBcIi4vZGJfd29ya2VyLmJjLmpzXCJcbmVuZClcblxubGV0IHNlcnZlcnNfc3RhdHVzID1cbiAgbGV0IHZhciA9IEx3ZC52YXIgKFwiXCIsIERiLlN5bmMuaW5pdGlhbF9yZXBvcnQpIGluXG4gIGxldCBfID1cbiAgICBsaXN0ZW4gU2VydmVyc19zdGF0dXNfdXBkYXRlIH5mOihmdW4gKGlkLCByZXBvcnQpIC0+XG4gICAgICAgIENvbnNvbGUubG9nXG4gICAgICAgICAgWyBGb3JtYXQuYXNwcmludGYgXCJTZXJ2ZXIgJXM6ICVhXCIgaWQgRGIuU3luYy5wcF9yZXBvcnQgcmVwb3J0IF07XG4gICAgICAgIEx3ZC5zZXQgdmFyIChpZCwgcmVwb3J0KSlcbiAgaW5cbiAgdmFyXG5cbmxldCB1cGRhdGUgPyhlcSA9IEVxdWFsLnBvbHkpIHZhciBuZXh0ID1cbiAgbGV0IGN1cnJlbnQgPSBMd2QucGVlayB2YXIgaW5cbiAgaWYgbm90IChlcSBjdXJyZW50IG5leHQpIHRoZW4gTHdkLnNldCB2YXIgbmV4dFxuXG5sZXQgZ2V0X3ZpZXdfaXRlbV9jb3VudCA9XG4gIGxldCBtZW1vIDogKFZpZXcucmVxLCBpbnQgTHdkLnZhcikgSGFzaHRibC50ID1cbiAgICAoKiB0b2RvIG1lbW9yeSBsZWFrICopIEhhc2h0YmwuY3JlYXRlIDY0XG4gIGluXG4gIGZ1biB2IC0+XG4gICAgbGV0IGl0ZW1fY291bnQgPSBIYXNodGJsLmdldF9vcl9hZGQgbWVtbyB+azp2IH5mOihmdW4gXyAtPiBMd2QudmFyIDApIGluXG4gICAgRnV0LmF3YWl0IChxdWVyeSAoQ3JlYXRlX3ZpZXcgdikpIChmdW5jdGlvblxuICAgICAgfCBPayB2IC0+XG4gICAgICAgICAgQ29uc29sZS5kZWJ1Z1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBcIkl0ZW0gY291bnQ6XCI7XG4gICAgICAgICAgICAgIHYuVmlldy5pdGVtX2NvdW50O1xuICAgICAgICAgICAgICBcIlN0YXJ0IG9mZnNldDpcIjtcbiAgICAgICAgICAgICAgdi5WaWV3LnN0YXJ0X29mZnNldDtcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgdXBkYXRlIGl0ZW1fY291bnQgdi5pdGVtX2NvdW50XG4gICAgICB8IGVycm9yIC0+XG4gICAgICAgICAgQ29uc29sZS5kZWJ1ZyBbIFwiRVJST1JcIjsgZXJyb3IgXTtcbiAgICAgICAgICB1cGRhdGUgaXRlbV9jb3VudCAwKTtcbiAgICBMd2QuZ2V0IGl0ZW1fY291bnRcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJyclxuXG50eXBlIHNlcnZlciA9IHtcbiAgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uO1xuICBzdGF0dXMgOiBEYi5TeW5jLnJlcG9ydCBMd2QudmFyO1xuICByZWZyZXNoIDogdW5pdCBMd2QudmFyO1xufVxuXG5sZXQgY29ubmV4aW9ucyA6IChzdHJpbmcgKiBEUy5jb25uZXhpb24pIEx3ZF9zZXEudCBMd2QudmFyID1cbiAgQnJyX2x3ZF91aS5QZXJzaXN0ZW50LnZhciB+a2V5OlwidWlfc2VydmVyc1wiIEx3ZF9zZXEuZW1wdHlcblxubGV0IGNvbm5lY3QgKHNlcnZlcl9pZCwgeyBjb25uZXhpb247IHN0YXR1czsgcmVmcmVzaCB9KSA9XG4gIGxldCBfID1cbiAgICBXb3JrZXJfY2xpZW50Lmxpc3RlbiBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgfmY6KGZ1biAoaWQsIHJlcG9ydCkgLT5cbiAgICAgICAgKCogVE9ETzogc3Vic2NyaWJlIHRvIGEgc3BlY2lmaWMgc2VydmVyJ3MgdXBkYXRlcyAqKVxuICAgICAgICBsZXQgcHJldmlvdXNfc3RhdHVzID0gTHdkLnBlZWsgc3RhdHVzIGluXG4gICAgICAgIGlmIFN0cmluZy5lcXVhbCBzZXJ2ZXJfaWQgaWQgdGhlbiAoXG4gICAgICAgICAgTHdkLnNldCBzdGF0dXMgcmVwb3J0O1xuICAgICAgICAgIG1hdGNoIChwcmV2aW91c19zdGF0dXMuc3luY19wcm9ncmVzcywgcmVwb3J0LnN5bmNfcHJvZ3Jlc3MpIHdpdGhcbiAgICAgICAgICB8IFNvbWUgeyByZW1haW5pbmc7IF8gfSwgU29tZSB7IHJlbWFpbmluZyA9IHJlbWFpbmluZyc7IF8gfVxuICAgICAgICAgICAgd2hlbiByZW1haW5pbmcgPD4gcmVtYWluaW5nJyAtPlxuICAgICAgICAgICAgICBMd2Quc2V0IHJlZnJlc2ggKClcbiAgICAgICAgICB8IFNvbWUgeyByZW1haW5pbmc7IF8gfSwgTm9uZSAtPiBMd2Quc2V0IHJlZnJlc2ggKClcbiAgICAgICAgICB8IF8gLT4gKCkpKVxuICBpblxuICBpZ25vcmUgKFdvcmtlcl9jbGllbnQucXVlcnkgQEAgQWRkX3NlcnZlcnMgWyAoc2VydmVyX2lkLCBjb25uZXhpb24pIF0pXG5cbmxldCBzZXJ2ZXJzX3dpdGhfc3RhdHVzID1cbiAgTHdkX3NlcS5tYXBcbiAgICAoZnVuIChpZCwgY29ubmV4aW9uKSAtPlxuICAgICAgbGV0IHN0YXR1cyA9IEx3ZC52YXIgRGIuU3luYy5pbml0aWFsX3JlcG9ydCBpblxuICAgICAgbGV0IHJlZnJlc2ggPSBMd2QudmFyICgpIGluXG4gICAgICBsZXQgc2VydmVyID0gKGlkLCB7IGNvbm5leGlvbjsgc3RhdHVzOyByZWZyZXNoIH0pIGluXG4gICAgICBjb25uZWN0IHNlcnZlcjtcbiAgICAgIHNlcnZlcilcbiAgICAoTHdkLmdldCBjb25uZXhpb25zKVxuXG5sZXQgbmV3X2Nvbm5leGlvbiB+YmFzZV91cmwgfnVzZXJuYW1lIH5wYXNzd29yZCA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgY29ubmV4aW9uID0gRFMuY29ubmVjdCB7IGJhc2VfdXJsOyB1c2VybmFtZTsgcGFzc3dvcmQgfSBpblxuICBsZXQgc2VydmVyX2lkID0gY29ubmV4aW9uLmF1dGhfcmVzcG9uc2Uuc2VydmVyX2lkIGluXG4gICgqIFRPRE8gQ0hFQ0sgU0VSVkVSIElEICopXG4gIEx3ZC51cGRhdGVcbiAgICAoZnVuIHNlcnZlcnMgLT4gTHdkX3NlcS4oY29uY2F0IHNlcnZlcnMgKGVsZW1lbnQgKHNlcnZlcl9pZCwgY29ubmV4aW9uKSkpKVxuICAgIGNvbm5leGlvbnNcblxubW9kdWxlIENvbm5lY3RfZm9ybSA9IHN0cnVjdFxuICBvcGVuIEJycl9sd2RfdWkuRm9ybXMuRm9ybVxuXG4gIHR5cGUgdCA9IHtcbiAgICB1cmwgOiBzdHJpbmcgRmllbGQudmFsaWRhdGlvbjtcbiAgICB1c2VybmFtZSA6IHN0cmluZyBGaWVsZC52YWxpZGF0aW9uO1xuICAgIHBhc3N3b3JkIDogc3RyaW5nIEZpZWxkLnZhbGlkYXRpb247XG4gIH1cblxuICBsZXQgZGVmYXVsdCA9IHsgdXJsID0gRW1wdHk7IHVzZXJuYW1lID0gRW1wdHk7IHBhc3N3b3JkID0gRW1wdHkgfVxuXG4gIGxldCBmaWVsZHMgPVxuICAgIGxldCB1cmxfZmllbGQgPVxuICAgICAgZmllbGRcbiAgICAgICAgKEx3ZC5wdXJlXG4gICAgICAgIEBAIEZpZWxkLnRleHRfaW5wdXQgfnJlcXVpcmVkOnRydWVcbiAgICAgICAgICAgICAoU29tZSBcImh0dHBzOi8vZGVtby5qZWxseWZpbi5vcmcvc3RhYmxlXCIpKVxuICAgICAgICAoZnVuIHQgdiAtPiB7IHQgd2l0aCB1cmwgPSB2IH0pXG4gICAgaW5cbiAgICBsZXQgdXNlcm5hbWVfZmllbGQgPVxuICAgICAgZmllbGRcbiAgICAgICAgKEx3ZC5wdXJlIEBAIEZpZWxkLnRleHRfaW5wdXQgfnJlcXVpcmVkOnRydWUgKFNvbWUgXCJkZW1vXCIpKVxuICAgICAgICAoZnVuIHQgdiAtPiB7IHQgd2l0aCB1c2VybmFtZSA9IHYgfSlcbiAgICBpblxuICAgIGxldCBwYXNzd29yZF9maWVsZCA9XG4gICAgICBmaWVsZFxuICAgICAgICAoTHdkLnB1cmUgQEAgRmllbGQucGFzc3dvcmRfaW5wdXQgfnJlcXVpcmVkOmZhbHNlIE5vbmUpXG4gICAgICAgIChmdW4gdCB2IC0+IHsgdCB3aXRoIHBhc3N3b3JkID0gdiB9KVxuICAgIGluXG4gICAgbGV0IHN1Ym1pdCA9XG4gICAgICBmaWVsZCAoTHdkLnB1cmUgQEAgRmllbGQuc3VibWl0IChgUCBcIkNvbm5lY3RcIikpIChmdW4gdCBfdiAtPiB0KVxuICAgIGluXG4gICAgTHdkLnJldHVyblxuICAgICAgKEx3ZF9zZXEub2ZfbGlzdCBbIHVybF9maWVsZDsgdXNlcm5hbWVfZmllbGQ7IHBhc3N3b3JkX2ZpZWxkOyBzdWJtaXQgXSlcbmVuZFxuXG5sZXQgdWlfZm9ybSAoKSA9XG4gIGxldCBvcGVuIEJycl9sd2RfdWkuRm9ybXMuRm9ybSBpblxuICBjcmVhdGVcbiAgICAobW9kdWxlIENvbm5lY3RfZm9ybSlcbiAgICAoZnVuIHQgLT5cbiAgICAgIENvbnNvbGUubG9nIFsgXCJGb3JtIHN1Ym1pdHRlZDpcIjsgdCBdO1xuICAgICAgbWF0Y2ggdCB3aXRoXG4gICAgICAoKiBGSVhNRTogdmFsaWRhdGlvbiBhbHJlYWR5IGhhcHBlbmVkLCBpdCdzIHJlZHVuZGFudCB0byBoYXZlIHRvIG1hdGNoICopXG4gICAgICB8IHsgdXJsID0gT2sgdXJsOyB1c2VybmFtZSA9IE9rIHVzZXJuYW1lOyBwYXNzd29yZCA9IE9rIHBhc3N3b3JkIH0gLT5cbiAgICAgICAgICBDb25zb2xlLmxvZyBbIFwiRm9ybSBzdWJtaXR0ZWQ6XCI7IHVybDsgdXNlcm5hbWUgXTtcbiAgICAgICAgICBpZ25vcmUgQEAgbmV3X2Nvbm5leGlvbiB+YmFzZV91cmw6dXJsIH51c2VybmFtZSB+cGFzc3dvcmRcbiAgICAgIHwgeyB1cmwgPSBPayB1cmw7IHVzZXJuYW1lID0gT2sgdXNlcm5hbWU7IF8gfSAtPlxuICAgICAgICAgIENvbnNvbGUubG9nIFsgXCJGb3JtIHN1Ym1pdHRlZDpcIjsgdXJsOyB1c2VybmFtZSBdO1xuICAgICAgICAgIGlnbm9yZSBAQCBuZXdfY29ubmV4aW9uIH5iYXNlX3VybDp1cmwgfnVzZXJuYW1lIH5wYXNzd29yZDpcIlwiXG4gICAgICB8IF8gLT4gKCkpXG5cbmxldCB1aV9zdGF0dXMgc2VydmVyID1cbiAgbGV0IHN0YXR1cyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBzZXJ2ZXIuc3RhdHVzKSB+ZjooZnVuIHsgc3RhdHVzOyBzeW5jX3Byb2dyZXNzIH0gLT5cbiAgICAgICAgbWF0Y2ggKHN0YXR1cywgc3luY19wcm9ncmVzcykgd2l0aFxuICAgICAgICB8IEluX3N5bmMsIE5vbmUgLT4gRWwudHh0JyBcIlN5bmNocm9uaXplZFwiXG4gICAgICAgIHwgXywgU29tZSB7IERiLlN5bmMudG90YWw7IHJlbWFpbmluZyB9IC0+XG4gICAgICAgICAgICBFbC50eHQnXG4gICAgICAgICAgICBAQCBQcmludGYuc3ByaW50ZiBcIlN5bmMgaW4gcHJvZ3Jlc3M6ICVpLyVpXCIgKHRvdGFsIC0gcmVtYWluaW5nKVxuICAgICAgICAgICAgICAgICB0b3RhbFxuICAgICAgICB8IF8gLT4gRWwudHh0JyBcIkRlc3luY2hyb25pemVkXCIpXG4gIGluXG4gIHN0YXR1c1xuXG5sZXQgZnV0X3RvX2x3ZCB+aW5pdCBmID1cbiAgbGV0IHYgPSBMd2QudmFyIGluaXQgaW5cbiAgbGV0ICgpID0gRnV0LmF3YWl0IGYgKEx3ZC5zZXQgdikgaW5cbiAgTHdkLmdldCB2XG5cbmxldCBzZXFfc2hhcmUgfmNtcCB+cHJldiBuZXh0ID1cbiAgbGV0IHJlYyBhdXggcHJldiBuZXh0ID1cbiAgICBtYXRjaCAoTHdkX3NlcS52aWV3IHByZXYsIEx3ZF9zZXEudmlldyBuZXh0KSB3aXRoXG4gICAgfCBFbXB0eSwgRW1wdHkgLT4gKHByZXYsIHRydWUpXG4gICAgfCBFbGVtZW50IGksIEVsZW1lbnQgaScgd2hlbiBjbXAgaSBpJyAtPiAocHJldiwgdHJ1ZSlcbiAgICB8IENvbmNhdCAobCwgciksIENvbmNhdCAobCcsIHInKSAtPlxuICAgICAgICBsZXQgbCwgbF9zYW1lID0gYXV4IGwgbCcgaW5cbiAgICAgICAgbGV0IHIsIHJfc2FtZSA9IGF1eCByIHInIGluXG4gICAgICAgIGlmIGxfc2FtZSAmJiByX3NhbWUgdGhlbiAocHJldiwgdHJ1ZSkgZWxzZSAoTHdkX3NlcS5jb25jYXQgbCByLCBmYWxzZSlcbiAgICB8IF8sIF8gLT4gKG5leHQsIGZhbHNlKVxuICBpblxuICBmc3QgQEAgYXV4IHByZXYgbmV4dFxuXG5sZXQgc2VydmVyc19saWJyYXJpZXMgPVxuICBsZXQgcmVjIGxpYl9kaWZmIH5wcmV2IG5leHQgPVxuICAgIGxldCBvcGVuIERiLlN0b3Jlcy5JdGVtcyBpblxuICAgIHNlcV9zaGFyZSB+Y21wOihmdW4gaSBpJyAtPiBTdHJpbmcuKGkuaXRlbS5pZCA9IGknLml0ZW0uaWQpKSB+cHJldiBuZXh0XG4gIGluXG4gIEx3ZF9zZXEubWFwXG4gICAgKGZ1biAoc2VydmVyX2lkLCB7IHJlZnJlc2g7IF8gfSkgLT5cbiAgICAgIENvbnNvbGUubG9nIFsgXCJORVcgUkVGXCIgXTtcbiAgICAgIGxldCBwcmV2aW91c192YWx1ZSA9IHJlZiBOb25lIGluXG4gICAgICBsZXQgdiA9XG4gICAgICAgIEx3ZC5iaW5kIChMd2QuZ2V0IHJlZnJlc2gpIH5mOihmdW4gKCkgLT5cbiAgICAgICAgICAgIFdvcmtlcl9jbGllbnQucXVlcnkgKEdldF9zZXJ2ZXJfbGlicmFyaWVzIHNlcnZlcl9pZClcbiAgICAgICAgICAgIHw+IEZ1dC5tYXAgKFJlc3VsdC5nZXRfb3IgfmRlZmF1bHQ6W10pXG4gICAgICAgICAgICB8PiBGdXQubWFwIChmdW4gbCAtPlxuICAgICAgICAgICAgICAgICAgIENvbnNvbGUubG9nIFsgXCJHT1QgTD1cIjsgbCBdO1xuICAgICAgICAgICAgICAgICAgIGwpXG4gICAgICAgICAgICB8PiBGdXQubWFwIEx3ZF9zZXEub2ZfbGlzdFxuICAgICAgICAgICAgKCogRklYTUU6IFRoaXMgaXMgYmFkOiB3ZSBjcmVhdGUgYSBsd2QgdmFyIGVhY2ggdGltZSB3ZSByZWZyZXNoXG4gICAgICAgICAgICAgICBhbmQgdGhpcSB2YXIgaGFkIGFuIGVtcHR5IHNlcSB2YWx1ZS4gVGhpcyBjYXVzZWQgZmxpY2tlcmluZ1xuICAgICAgICAgICAgICAgd2hlbiBzeW5jaW5nLiBIYXZpbmcgdGhlIGNvcnJlY3QgaW5pdGlhbCB2YWx1ZSBpcyBub3QgYSBtdWNoXG4gICAgICAgICAgICAgICBiZXR0ZXIgb3B0aW9uIHNpbmNlIHRoZXJlIGFyZSBzdGlsbCB0byBsd2QgdXBkYXRlcyBpbnN0ZWFkIG9mXG4gICAgICAgICAgICAgICBvbmUuIFdlIHByb2JhYmx5IG5lZWQgcHJvcGVyIHBvbGxpbmcgYW5kIGEgcm9vdC4gKilcbiAgICAgICAgICAgIHw+IGZ1dF90b19sd2RcbiAgICAgICAgICAgICAgICAgfmluaXQ6KE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpMd2Rfc2VxLmVtcHR5ICFwcmV2aW91c192YWx1ZSkpXG4gICAgICBpblxuICAgICAgbGV0IHZpZXdzID1cbiAgICAgICAgTHdkLm1hcFxuICAgICAgICAgIH5mOihmdW4gdiAtPlxuICAgICAgICAgICAgbGV0IG5ld192YWx1ZSA9XG4gICAgICAgICAgICAgIE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6dlxuICAgICAgICAgICAgICAgIChmdW4gcHJldiAtPiBsaWJfZGlmZiB+cHJldiB2KVxuICAgICAgICAgICAgICAgICFwcmV2aW91c192YWx1ZVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIHByZXZpb3VzX3ZhbHVlIDo9IFNvbWUgbmV3X3ZhbHVlO1xuICAgICAgICAgICAgbmV3X3ZhbHVlKVxuICAgICAgICAgIHZcbiAgICAgIGluXG4gICAgICAoc2VydmVyX2lkLCB2aWV3cykpXG4gICAgc2VydmVyc193aXRoX3N0YXR1c1xuXG5sZXQgdWkgKCkgPVxuICBsZXQgc3RhdHVzZXMgPVxuICAgIEx3ZF9zZXEubWFwIChmdW4gKF8sIHNlcnZlcikgLT4gdWlfc3RhdHVzIHNlcnZlcikgc2VydmVyc193aXRoX3N0YXR1c1xuICBpblxuICBsZXQgdWlfZm9ybSA9XG4gICAgTHdkLm1hcCBzZXJ2ZXJzX3dpdGhfc3RhdHVzIH5mOihmdW4gcyAtPlxuICAgICAgICBtYXRjaCBMd2Rfc2VxLnZpZXcgcyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gTHdkX3NlcS5lbGVtZW50IEBAIEVsd2QuZGl2IFsgYFIgKHVpX2Zvcm0gKCkpIF1cbiAgICAgICAgfCBfIC0+IEx3ZF9zZXEuZW1wdHkpXG4gIGluXG4gIEVsd2QuZGl2IFsgYFMgKEx3ZF9zZXEubGlmdCB1aV9mb3JtKTsgYFMgKEx3ZF9zZXEubGlmdCBzdGF0dXNlcykgXVxuIiwib3BlbiEgSW1wb3J0XG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgcGxheXN0YXRlID0ge1xuICBwbGF5bGlzdCA6IERiLlZpZXcucmFuZ2VkIG9wdGlvbiBMd2QudmFyO1xuICBjdXJyZW50X2luZGV4IDogaW50IEx3ZC52YXI7XG59XG5cbnR5cGUgdCA9IEVsd2QudCBMd2QudFxuXG5sZXQgcGxheXN0YXRlID0geyBwbGF5bGlzdCA9IEx3ZC52YXIgTm9uZTsgY3VycmVudF9pbmRleCA9IEx3ZC52YXIgMCB9XG5cbnR5cGUgbm93X3BsYXlpbmcgPSB7IGl0ZW0gOiBEUy5BcGkuSXRlbS50OyB1cmwgOiBzdHJpbmcgfVxuXG5sZXQgbm93X3BsYXlpbmcgPSBMd2QudmFyIE5vbmVcblxuKCogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qZWxseWZpbi9qZWxseWZpbi9ibG9iLzQ3ODY5MDFiYjc5NmMzZTkxMmYxM2I2ODY1NzFmZGU4ZDE2ZjQ5YzUvdGVzdHMvSmVsbHlmaW4uTW9kZWwuVGVzdHMvVGVzdCUyMERhdGEvRGV2aWNlUHJvZmlsZS1GaXJlZm94Lmpzb24gKilcblxuKCoqIFBsYXliYWNrIGlzc3VlIHdpdGggYWxhYyBmaWxlcyAoYW5kIHByb2JhYmx5IGFsbCBjb2RlY3Mgbm9uLW5hdGl2ZWx5XG4gICAgICBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIpXG4gICAgLSBTb21lIGNsaWVudHMgKHNvbml4ZCkgZ2l2ZSB1cCwgbXB2IGJhc2VkIHBsYXllcnMgd29yay5cbiAgICAtIFRoZSBvZmZpY2lhbCBjbGllbnQgbWFuYWdlIHRvIHBsYXkgdGhlIGZpbGUgYnV0IGdpdmVzIGEgYmxvYiB0byB0aGUgYXVkaW9cbiAgICAgIHBsYXllciBpbnN0ZWFkIG9mIGEgaGxzIHVybCBhcyBpdCBkb2VzIGZvciBvdGhlciBmaWxlcy5cbiAgICAtIEplbGx5ZmluIHNob3VsZCB1c2UgdGhlIGRldmljZSBpZCBhbmQgYXNzb2NpYXRlZCBjYXBhYmlsaXRpZXMgdG9cbiAgICAgIGF1dG9tYXRpY2FsbHkgdHJhbnNjb2RlLCBzaG91bGRuJ3QgaXQgP1xuXG4qKVxubGV0IGF1ZGlvX3VybCAoc2VydmVyIDogRFMuY29ubmV4aW9uKSBpdGVtX2lkID1cbiAgUHJpbnRmLnNwcmludGZcbiAgICBcIiVzL0F1ZGlvLyVzL3VuaXZlcnNhbD9hcGlfa2V5PSVzJmF1ZGlvQ29kZWM9YWFjJmNvbnRhaW5lcj1vcHVzLG1wMyxhYWMsbTRhLG00YixmbGFjLHdhdixvZ2cmdHJhbnNjb2RpbmdDb250YWluZXI9dHMmdHJhbnNjb2RpbmdQcm90b2NvbD1obHNcIlxuICAgIHNlcnZlci5iYXNlX3VybCBpdGVtX2lkIHNlcnZlci5hdXRoX3Jlc3BvbnNlLmFjY2Vzc190b2tlblxuXG5tb2R1bGUgUGxheWJhY2tfY29udHJvbGxlciAoUCA6IHNpZ1xuICB2YWwgZmV0Y2ggOlxuICAgIFZpZXcucmFuZ2VkIC0+XG4gICAgaW50IGFycmF5IC0+XG4gICAgKERiLlN0b3Jlcy5JdGVtcy50IG9wdGlvbiBhcnJheSwgRGIuV29ya2VyX2FwaS5lcnJvcikgRnV0LnJlc3VsdFxuZW5kKSA9XG5zdHJ1Y3RcbiAgbGV0IHNldF9wbGF5X3VybCBwbGF5bGlzdCBjdXJyZW50X2luZGV4ID1cbiAgICBtYXRjaCBwbGF5bGlzdCB3aXRoXG4gICAgfCBOb25lIC0+IEZ1dC5vayAoKVxuICAgIHwgU29tZSBwbGF5bGlzdCAtPlxuICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICBsZXQrIGl0ZW0gPVxuICAgICAgICAgIGxldCsgcmVzdWx0ID0gUC5mZXRjaCBwbGF5bGlzdCBbfCBjdXJyZW50X2luZGV4IHxdIGluXG4gICAgICAgICAgbWF0Y2ggcmVzdWx0IHdpdGhcbiAgICAgICAgICB8IFt8IFNvbWUgeyBEYi5TdG9yZXMuSXRlbXMuaXRlbTsgXyB9IHxdIC0+XG4gICAgICAgICAgICAgIGxldCB7IERTLkFwaS5JdGVtLnNlcnZlcl9pZDsgaWQ7IGFsYnVtX2lkOyBuYW1lOyBfIH0gPSBpdGVtIGluXG4gICAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gTHdkX3NlcS50b19saXN0IChMd2QucGVlayBTZXJ2ZXJzLmNvbm5leGlvbnMpIGluXG4gICAgICAgICAgICAgIGxldCBjb25uZXhpb24gOiBEUy5jb25uZXhpb24gPSBMaXN0LmFzc3Egc2VydmVyX2lkIHNlcnZlcnMgaW5cbiAgICAgICAgICAgICAgbGV0IHVybCA9IGF1ZGlvX3VybCBjb25uZXhpb24gaWQgaW5cbiAgICAgICAgICAgICAgbGV0ICgpID0gQ29uc29sZS5sb2cgWyBcIk5vdyBwbGF5aW5nOlwiOyBuYW1lOyBKdi5vZl9zdHJpbmcgdXJsIF0gaW5cbiAgICAgICAgICAgICAgbGV0ICgpID1cbiAgICAgICAgICAgICAgICBsZXQgb3BlbiBCcnJfaW8uTWVkaWEuU2Vzc2lvbiBpblxuICAgICAgICAgICAgICAgIGxldCBzZXNzaW9uID0gb2ZfbmF2aWdhdG9yIEcubmF2aWdhdG9yIGluXG4gICAgICAgICAgICAgICAgbGV0IGltYWdlX2lkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmlkIGFsYnVtX2lkIGluXG4gICAgICAgICAgICAgICAgbGV0IGltZ19zcmMgPVxuICAgICAgICAgICAgICAgICAgUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgICAgICAgICAgXCIlcy9JdGVtcy8lcy9JbWFnZXMvUHJpbWFyeT93aWR0aD01MDAmZm9ybWF0PUpwZ1wiXG4gICAgICAgICAgICAgICAgICAgIGNvbm5leGlvbi5iYXNlX3VybCBpbWFnZV9pZFxuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gbmFtZSBpblxuICAgICAgICAgICAgICAgIGxldCBhbGJ1bSA9IFwiXCIgaW5cbiAgICAgICAgICAgICAgICBsZXQgYXJ0aXN0ID0gXCJcIiBpblxuICAgICAgICAgICAgICAgIGxldCBhcnR3b3JrID1cbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIE1lZGlhX21ldGFkYXRhLnNyYyA9IGltZ19zcmM7XG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZXMgPSBcIjUwMHg1MDBcIjtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlJyA9IFwiaW1hZ2UvanBlZ1wiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgc2V0X21ldGFkYXRhIHNlc3Npb24geyB0aXRsZTsgYXJ0aXN0OyBhbGJ1bTsgYXJ0d29yayB9XG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIHsgaXRlbTsgdXJsIH1cbiAgICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgIGluXG4gICAgICAgIEx3ZC5zZXQgbm93X3BsYXlpbmcgKFNvbWUgaXRlbSlcblxuICBsZXQgcmVzZXRfcGxheWxpc3QgcGxheWxpc3QgPVxuICAgIGlnbm9yZSBAQCBzZXRfcGxheV91cmwgKFNvbWUgcGxheWxpc3QpIDA7XG4gICAgTHdkLnNldCBwbGF5c3RhdGUucGxheWxpc3QgKFNvbWUgcGxheWxpc3QpO1xuICAgIEx3ZC5zZXQgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggMFxuXG4gIGxldCBtYWtlICgpID1cbiAgICBsZXQgYXVkaW9fZWx0ID1cbiAgICAgIEVsLmF1ZGlvXG4gICAgICAgIH5hdDpcbiAgICAgICAgICBbXG4gICAgICAgICAgICBBdC52IChKc3RyLnYgXCJjb250cm9sc1wiKSAoSnN0ci52IFwidHJ1ZVwiKTtcbiAgICAgICAgICAgIEF0LnYgKEpzdHIudiBcImF1dG9wbGF5XCIpIChKc3RyLnYgXCJ0cnVlXCIpO1xuICAgICAgICAgICAgQXQudiAoSnN0ci52IFwicHJlbG9hZFwiKSAoSnN0ci52IFwiYXV0b1wiKTtcbiAgICAgICAgICBdXG4gICAgICAgIFtdXG4gICAgaW5cbiAgICBsZXQgc2V0X3NyYyB1cmwgPSBFbC5zZXRfYXQgKEpzdHIudiBcInNyY1wiKSAoU29tZSAoSnN0ci52IHVybCkpIGF1ZGlvX2VsdCBpblxuICAgIGxldCBfYXV0b19wbGF5ID1cbiAgICAgICgqIFdlIGNhbm5vdCByZWx5IG9uIHRoZSBtYWluIFtMd2RdIG9ic2VydmVyIGZvciBwbGF5YmFjayBjb250cm9sIGJlY2F1c2VcbiAgICAgICAgIGl0IGlzIHRpZWQgdG8gdGhlIFtyZXF1ZXN0QW5pbWF0aW9uRnJhbWVzXSBjYWxsYmFjay4gVGhpcyBwcmV2ZW50IHRoZVxuICAgICAgICAgcGxheWVyIHRvIHN0YXJ0IHBsYXlpbmcgdGhlIG5leHQgc29uZyBpZiB0aGUgdGFiIGlzIGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgICAgKilcbiAgICAgIGxldCByb290ID0gTHdkLm9ic2VydmUgKEx3ZC5nZXQgbm93X3BsYXlpbmcpIGluXG4gICAgICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgICAgICBtYXRjaCBMd2QucXVpY2tfc2FtcGxlIHJvb3Qgd2l0aFxuICAgICAgICAgIHwgU29tZSB7IHVybDsgXyB9IC0+IHNldF9zcmMgdXJsXG4gICAgICAgICAgfCBOb25lIC0+ICgpKTtcbiAgICAgIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB8PiBpZ25vcmVcbiAgICBpblxuICAgIGxldCBuZXh0ICgpID1cbiAgICAgIGxldCBwbGF5bGlzdCA9IEx3ZC5wZWVrIHBsYXlzdGF0ZS5wbGF5bGlzdCBpblxuICAgICAgbGV0IGN1cnJlbnRfaW5kZXggPSBMd2QucGVlayBwbGF5c3RhdGUuY3VycmVudF9pbmRleCBpblxuICAgICAgbGV0IG5leHRfaW5kZXggPSBjdXJyZW50X2luZGV4ICsgMSBpblxuICAgICAgaWdub3JlIEBAIHNldF9wbGF5X3VybCBwbGF5bGlzdCBuZXh0X2luZGV4O1xuICAgICAgTHdkLnNldCBwbGF5c3RhdGUuY3VycmVudF9pbmRleCBuZXh0X2luZGV4XG4gICAgaW5cbiAgICBsZXQgcHJldiAoKSA9XG4gICAgICBsZXQgcGxheWxpc3QgPSBMd2QucGVlayBwbGF5c3RhdGUucGxheWxpc3QgaW5cbiAgICAgIGxldCBjdXJyZW50X2luZGV4ID0gTHdkLnBlZWsgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggaW5cbiAgICAgIGxldCBuZXh0X2luZGV4ID0gbWF4IDAgKGN1cnJlbnRfaW5kZXggLSAxKSBpblxuICAgICAgaWdub3JlIEBAIHNldF9wbGF5X3VybCBwbGF5bGlzdCBuZXh0X2luZGV4O1xuICAgICAgTHdkLnNldCBwbGF5c3RhdGUuY3VycmVudF9pbmRleCBuZXh0X2luZGV4XG4gICAgaW5cbiAgICBsZXQgc2V0X3Bvc2l0aW9uX3N0YXRlID1cbiAgICAgICgqIEVuYWJsZSBjb250cm9sIGZyb20gT1MgKilcbiAgICAgIGxldCBvcGVuIEJycl9pby5NZWRpYS5TZXNzaW9uIGluXG4gICAgICBsZXQgc2Vzc2lvbiA9IG9mX25hdmlnYXRvciBHLm5hdmlnYXRvciBpblxuICAgICAgbGV0IHNldF9wb3NpdGlvbl9zdGF0ZSAoKSA9XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IEVsLnByb3AgKEVsLlByb3AuZmxvYXQgKEpzdHIudiBcImR1cmF0aW9uXCIpKSBhdWRpb19lbHQgaW5cbiAgICAgICAgaWYgbm90IChGbG9hdC5pc19uYW4gZHVyYXRpb24pIHRoZW5cbiAgICAgICAgICBsZXQgcGxheWJhY2tfcmF0ZSA9XG4gICAgICAgICAgICBFbC5wcm9wIChFbC5Qcm9wLmZsb2F0IChKc3RyLnYgXCJwbGF5YmFja1JhdGVcIikpIGF1ZGlvX2VsdFxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHBvc2l0aW9uID1cbiAgICAgICAgICAgIEVsLnByb3AgKEVsLlByb3AuZmxvYXQgKEpzdHIudiBcImN1cnJlbnRUaW1lXCIpKSBhdWRpb19lbHRcbiAgICAgICAgICBpblxuICAgICAgICAgIHNldF9wb3NpdGlvbl9zdGF0ZSB+ZHVyYXRpb24gfnBsYXliYWNrX3JhdGUgfnBvc2l0aW9uIHNlc3Npb25cbiAgICAgIGluXG4gICAgICBzZXRfYWN0aW9uX2hhbmRsZXIgc2Vzc2lvbiBBY3Rpb24ubmV4dF90cmFjayBuZXh0O1xuICAgICAgc2V0X2FjdGlvbl9oYW5kbGVyIHNlc3Npb24gQWN0aW9uLnByZXZpb3VzX3RyYWNrIHByZXY7XG4gICAgICBzZXRfcG9zaXRpb25fc3RhdGVcbiAgICBpblxuICAgIGxldCBvbl9lcnJvciBldiA9XG4gICAgICBFdi5zdG9wX2ltbWVkaWF0ZV9wcm9wYWdhdGlvbiBldjtcbiAgICAgIEV2LnByZXZlbnRfZGVmYXVsdCBldjtcbiAgICAgIENvbnNvbGUubG9nXG4gICAgICAgIFtcbiAgICAgICAgICBcIkEgcGxheWJhY2sgZXJyb3IgaGFwcGVuZWQuIFRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIGEgY29kZWMgXFxcbiAgICAgICAgICAgdW5zdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuXCI7XG4gICAgICAgICAgZXY7XG4gICAgICAgIF07XG4gICAgICBuZXh0ICgpXG4gICAgaW5cbiAgICBsZXQgbmV4dCBfID0gbmV4dCAoKSBpblxuICAgIGxldCAoKSA9XG4gICAgICBsZXQgdGFyZ2V0ID0gRWwuYXNfdGFyZ2V0IGF1ZGlvX2VsdCBpblxuICAgICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdi5lbmRlZCBuZXh0IHRhcmdldDtcbiAgICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXYuZXJyb3Igb25fZXJyb3IgdGFyZ2V0O1xuICAgICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdi5wbGF5IChmdW4gXyAtPiBzZXRfcG9zaXRpb25fc3RhdGUgKCkpIHRhcmdldFxuICAgIGluXG4gICAgbGV0IGJ0bl9uZXh0ID1cbiAgICAgIEJycl9sd2RfdWkuQnV0dG9uLnYgfmV2OlsgYFAgKEVsd2QuaGFuZGxlciBFdi5jbGljayBuZXh0KSBdIChgUCBcIk5FWFRcIilcbiAgICBpblxuICAgIGxldCBvcGVuIEJycl9sd2RfdWkgaW5cbiAgICBsZXQgbm93X3BsYXlpbmcgPVxuICAgICAgbGV0IHRyYWNrX2NvdmVyID1cbiAgICAgICAgbGV0IHN0eWxlID1cbiAgICAgICAgICBMd2QubWFwIChMd2QuZ2V0IG5vd19wbGF5aW5nKSB+ZjooZnVuIG5wIC0+XG4gICAgICAgICAgICAgIGxldCBzcmMgPVxuICAgICAgICAgICAgICAgIG1hdGNoIG5wIHdpdGhcbiAgICAgICAgICAgICAgICB8IE5vbmUgLT4gXCJ0cmFjay5wbmdcIlxuICAgICAgICAgICAgICAgIHwgU29tZSB7IGl0ZW0gPSB7IGlkOyBhbGJ1bV9pZDsgc2VydmVyX2lkOyBfIH07IF8gfSAtPlxuICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VfaWQgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6aWQgYWxidW1faWQgaW5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlcnZlcnMgPVxuICAgICAgICAgICAgICAgICAgICAgIEx3ZF9zZXEudG9fbGlzdCAoTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zKVxuICAgICAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICBMaXN0LmFzc3Egc2VydmVyX2lkIHNlcnZlcnNcbiAgICAgICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAgICAgKCogdG9kbzogdGhpcyBpcyBkb25lIGluIG11bHRpcGxlIHBsYWNlcywgd2Ugc2hvdWxkIGZhY3RvclxuICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG91dC4gKilcbiAgICAgICAgICAgICAgICAgICAgUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgICAgICAgICAgICBcIiVzL0l0ZW1zLyVzL0ltYWdlcy9QcmltYXJ5P3dpZHRoPTUwMCZmb3JtYXQ9SnBnXCJcbiAgICAgICAgICAgICAgICAgICAgICBjb25uZXhpb24uYmFzZV91cmwgaW1hZ2VfaWRcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgUHJpbnRmLnNwcmludGYgXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJVMpXCIgc3JjKVxuICAgICAgICBpblxuICAgICAgICBsZXQgYXQgPVxuICAgICAgICAgIEF0dHJzLihcbiAgICAgICAgICAgIGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJub3ctcGxheWluZy1jb3ZlclwiKSBbXVxuICAgICAgICAgICAgfD4gYWRkIEF0Lk5hbWUuc3R5bGUgKGBSIHN0eWxlKSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG9uX2NsaWNrID1cbiAgICAgICAgICBFbHdkLmhhbmRsZXIgRXYuY2xpY2sgKGZ1biBfIC0+XG4gICAgICAgICAgICAgIChtYXRjaCBMd2QucGVlayBBcHBfc3RhdGUuYWN0aXZlX2xheW91dCB3aXRoXG4gICAgICAgICAgICAgIHwgS2lvc2sgLT4gTWFpblxuICAgICAgICAgICAgICB8IE1haW4gLT4gS2lvc2spXG4gICAgICAgICAgICAgIHw+IEx3ZC5zZXQgQXBwX3N0YXRlLmFjdGl2ZV9sYXlvdXQpXG4gICAgICAgIGluXG4gICAgICAgIEVsd2QuZGl2IH5hdCB+ZXY6WyBgUCBvbl9jbGljayBdIFtdXG4gICAgICBpblxuICAgICAgbGV0IHRyYWNrX2RldGFpbHMgPVxuICAgICAgICBsZXQgYXQgPSBBdHRycy5hZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwibm93LXBsYXlpbmctZGV0YWlsc1wiKSBbXSBpblxuICAgICAgICBsZXQgdGl0bGUgPVxuICAgICAgICAgIGxldCB0eHQgPVxuICAgICAgICAgICAgTHdkLm1hcCAoTHdkLmdldCBub3dfcGxheWluZykgfmY6KGZ1bmN0aW9uXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBFbC50eHQnIFwiTm90aGluZyBwbGF5aW5nXCJcbiAgICAgICAgICAgICAgfCBTb21lIHsgaXRlbSA9IHsgbmFtZTsgXyB9OyBfIH0gLT4gRWwudHh0JyBuYW1lKVxuICAgICAgICAgIGluXG4gICAgICAgICAgRWx3ZC5zcGFuIFsgYFIgdHh0IF1cbiAgICAgICAgaW5cbiAgICAgICAgRWx3ZC5kaXYgfmF0IFsgYFIgdGl0bGUgXVxuICAgICAgaW5cbiAgICAgIGxldCBhdCA9XG4gICAgICAgIEF0dHJzLihcbiAgICAgICAgICBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwiYm94XCIpIFtdXG4gICAgICAgICAgfD4gYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcIm5vdy1wbGF5aW5nLWRpc3BsYXlcIikpXG4gICAgICBpblxuICAgICAgRWx3ZC5kaXYgfmF0IFsgYFIgdHJhY2tfY292ZXI7IGBSIHRyYWNrX2RldGFpbHMgXVxuICAgIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIEF0dHJzLihcbiAgICAgICAgYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcInBsYXllci13cmFwcGVyXCIpIFtdXG4gICAgICAgIHw+IGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJib3hcIikpXG4gICAgaW5cbiAgICBFbHdkLmRpdiB+YXQgWyBgUiBub3dfcGxheWluZzsgYFAgYXVkaW9fZWx0OyBgUiBidG5fbmV4dCBdXG5lbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUGFkZGluZyBwb3NpdGlvbi4gKilcbnR5cGUgcGFkdHkgPVxuICB8IExlZnQgICAoKiBUZXh0IGlzIGxlZnQganVzdGlmaWVkICgnLScgb3B0aW9uKS4gICAgICAgICAgICAgICAqKVxuICB8IFJpZ2h0ICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCAobm8gJy0nIG9wdGlvbikuICAgICAgICAgICAqKVxuICB8IFplcm9zICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCBieSB6ZXJvcyAoc2VlICcwJyBvcHRpb24pLiAqKVxuXG4oKioqKVxuXG4oKiBJbnRlZ2VyIGNvbnZlcnNpb24uICopXG50eXBlIGludF9jb252ID1cbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCAgICAgICAgKCogICVkIHwgJStkIHwgJSBkICAqKVxuICB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpICAgICAgICAoKiAgJWkgfCAlK2kgfCAlIGkgICopXG4gIHwgSW50X3ggfCBJbnRfQ3ggICAgICAgICAgICAgICAgICgqICAleCB8ICUjeCAgICAgICAgKilcbiAgfCBJbnRfWCB8IEludF9DWCAgICAgICAgICAgICAgICAgKCogICVYIHwgJSNYICAgICAgICAqKVxuICB8IEludF9vIHwgSW50X0NvICAgICAgICAgICAgICAgICAoKiAgJW8gfCAlI28gICAgICAgICopXG4gIHwgSW50X3UgICAgICAgICAgICAgICAgICAgICAgICAgICgqICAldSAgICAgICAgICAgICAgKilcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgICAgICAgKCogICUjZCB8ICUjaSB8ICUjdSAqKVxuXG4oKiBGbG9hdCBjb252ZXJzaW9uLiAqKVxudHlwZSBmbG9hdF9mbGFnX2NvbnYgPVxuICB8IEZsb2F0X2ZsYWdfICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcCAgICAgICAgICAgICAgICAgICAoKiAlK1tmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3MgICAgICAgICAgICAgICAgICAgKCogJSBbZmVFZ0dGaEhdICopXG50eXBlIGZsb2F0X2tpbmRfY29udiA9XG4gIHwgRmxvYXRfZiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZiB8ICUrZiB8ICUgZiAgKilcbiAgfCBGbG9hdF9lICAgICAgICAgICAgICAgICAgICAgICAgKCogICVlIHwgJStlIHwgJSBlICAqKVxuICB8IEZsb2F0X0UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUUgfCAlK0UgfCAlIEUgICopXG4gIHwgRmxvYXRfZyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZyB8ICUrZyB8ICUgZyAgKilcbiAgfCBGbG9hdF9HICAgICAgICAgICAgICAgICAgICAgICAgKCogICVHIHwgJStHIHwgJSBHICAqKVxuICB8IEZsb2F0X0YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUYgfCAlK0YgfCAlIEYgICopXG4gIHwgRmxvYXRfaCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlaCB8ICUraCB8ICUgaCAgKilcbiAgfCBGbG9hdF9IICAgICAgICAgICAgICAgICAgICAgICAgKCogICVIIHwgJStIIHwgJSBIICAqKVxuICB8IEZsb2F0X0NGICAgICAgICAgICAgICAgICAgICAgICAoKiAgJSNGfCAlKyNGfCAlICNGICopXG50eXBlIGZsb2F0X2NvbnYgPSBmbG9hdF9mbGFnX2NvbnYgKiBmbG9hdF9raW5kX2NvbnZcblxuKCoqKilcblxuKCogQ2hhciBzZXRzIChzZWUgJVsuLi5dKSBhcmUgYml0bWFwcyBpbXBsZW1lbnRlZCBhcyAzMi1jaGFyIHN0cmluZ3MuICopXG50eXBlIGNoYXJfc2V0ID0gc3RyaW5nXG5cbigqKiopXG5cbigqIENvdW50ZXIgdXNlZCBpbiBTY2FuZi4gKilcbnR5cGUgY291bnRlciA9XG4gIHwgTGluZV9jb3VudGVyICAgICAoKiAgJWwgICAgICAqKVxuICB8IENoYXJfY291bnRlciAgICAgKCogICVuICAgICAgKilcbiAgfCBUb2tlbl9jb3VudGVyICAgICgqICAlTiwgJUwgICopXG5cbigqKiopXG5cbigqIFBhZGRpbmcgb2Ygc3RyaW5ncyBhbmQgbnVtYmVycy4gKilcbnR5cGUgKCdhLCAnYikgcGFkZGluZyA9XG4gICgqIE5vIHBhZGRpbmcgKGV4OiBcIiVkXCIpICopXG4gIHwgTm9fcGFkZGluZyAgOiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIExpdGVyYWwgcGFkZGluZyAoZXg6IFwiJThkXCIpICopXG4gIHwgTGl0X3BhZGRpbmcgOiBwYWR0eSAqIGludCAtPiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIFBhZGRpbmcgYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqZFwiKSAqKVxuICB8IEFyZ19wYWRkaW5nIDogcGFkdHkgLT4gKGludCAtPiAnYSwgJ2EpIHBhZGRpbmdcblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZCxcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwYWRkaW5nIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHBhZF9vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIFByZWNpc2lvbiBvZiBmbG9hdHMgYW5kICcwJy1wYWRkaW5nIG9mIGludGVnZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwcmVjaXNpb24gPVxuICAoKiBObyBwcmVjaXNpb24gKGV4OiBcIiVmXCIpICopXG4gIHwgTm9fcHJlY2lzaW9uIDogKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIExpdGVyYWwgcHJlY2lzaW9uIChleDogXCIlLjNmXCIpICopXG4gIHwgTGl0X3ByZWNpc2lvbiA6IGludCAtPiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogUHJlY2lzaW9uIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpICopXG4gIHwgQXJnX3ByZWNpc2lvbiA6IChpbnQgLT4gJ2EsICdhKSBwcmVjaXNpb25cblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZixcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwcmVjaXNpb24gb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcHJlY19vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIHNlZSB0aGUgQ3VzdG9tIGZvcm1hdCBjb21iaW5hdG9yICopXG50eXBlICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgPVxuICB8IEN1c3RvbV96ZXJvIDogKCdhLCBzdHJpbmcsICdhKSBjdXN0b21fYXJpdHlcbiAgfCBDdXN0b21fc3VjYyA6ICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgLT5cbiAgICAoJ2EsICd4IC0+ICdiLCAneCAtPiAnYykgY3VzdG9tX2FyaXR5XG5cbigqKiopXG5cbigqICAgICAgICBSZWxhdGlvbmFsIGZvcm1hdCB0eXBlc1xuXG5JbiB0aGUgZmlyc3QgZm9ybWF0K2dhZHRzIGltcGxlbWVudGF0aW9uLCB0aGUgdHlwZSBmb3IgJSguLiUpIGluIHRoZVxuZm10IEdBRFQgd2FzIGFzIGZvbGxvd3M6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKiAoJ2QxLCAncTEsICdkMiwgJ3EyKSByZWFkZXJfbmJfdW5pZmllciAqXG4gICAgKCd4LCAnYiwgJ2MsICdkMSwgJ3ExLCAndSkgZm10dHkgKlxuICAgICgndSwgJ2IsICdjLCAncTEsICdlMSwgJ2YpIGZtdCAtPlxuICAgICAgKCgneCwgJ2IsICdjLCAnZDIsICdxMiwgJ3UpIGZvcm1hdDYgLT4gJ3gsICdiLCAnYywgJ2QxLCAnZTEsICdmKSBmbXRcblxuTm90aWNlIHRoYXQgdGhlICd1IHBhcmFtZXRlciBpbiAnZiBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0IGFyZ3VtZW50XG4oKCd4LCAuLiwgJ3UpIGZvcm1hdDYgLT4gLi4pIGlzIGVxdWFsIHRvIHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2FcbnBvc2l0aW9uIGluIHRoZSBmb3JtYXQgdGFpbCAoKCd1LCAuLiwgJ2YpIGZtdCkuIFRoaXMgbWVhbnMgdGhhdCB0aGVcbnR5cGUgb2YgdGhlIGV4cGVjdGVkIGZvcm1hdCBwYXJhbWV0ZXIgZGVwZW5kcyBvZiB3aGVyZSB0aGUgJSguLi4lKVxuYXJlIGluIHRoZSBmb3JtYXQgc3RyaW5nOlxuXG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSlcIlxuICAtIDogKHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IHVuaXRcbiAgPSA8ZnVuPlxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpJWRcIlxuICAtIDogKGludCAtPiB1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIGludCAtPiB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gaW50IC0+IHVuaXRcbiAgPSA8ZnVuPlxuXG5PbiB0aGUgY29udHJhcnksIHRoZSBsZWdhY3kgdHlwZXIgZ2l2ZXMgYSBjbGV2ZXIgdHlwZSB0aGF0IGRvZXMgbm90XG5kZXBlbmQgb24gdGhlIHBvc2l0aW9uIG9mICUoLi4lKSBpbiB0aGUgZm9ybWF0IHN0cmluZy4gRm9yIGV4YW1wbGUsXG4lKCUpIHdpbGwgaGF2ZSB0aGUgcG9seW1vcnBoaWMgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSk6IGl0IGNhblxuYmUgY29uY2F0ZW5hdGVkIHRvIGFueSBmb3JtYXQgdHlwZSwgYW5kIG9ubHkgZW5mb3JjZXMgdGhlIGNvbnN0cmFpbnRcbnRoYXQgaXRzICdhIGFuZCAnZiBwYXJhbWV0ZXJzIGFyZSBlcXVhbCAobm8gZm9ybWF0IGFyZ3VtZW50cykgYW5kICdkXG5hbmQgJ2UgYXJlIGVxdWFsIChubyByZWFkZXIgYXJndW1lbnQpLlxuXG5UaGUgd2Vha2VuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIHR5cGUgaW4gdGhlIEdBRFQgdmVyc2lvbiBicm9rZSB1c2VyXG5jb2RlIChpbiBmYWN0IGl0IGVzc2VudGlhbGx5IG1hZGUgJSguLi4lKSB1bnVzYWJsZSBleGNlcHQgYXQgdGhlIGxhc3RcbnBvc2l0aW9uIG9mIGEgZm9ybWF0KS4gSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3Qgd29ya1xuYW55bW9yZTpcblxuICBmdW4gc2VwIC0+XG4gICAgRm9ybWF0LnByaW50ZiBcImZvbyUoJSliYXIlKCUpYmF6XCIgc2VwIHNlcFxuXG5BcyB0aGUgdHlwZS1jaGVja2VyIHdvdWxkIHJlcXVpcmUgdHdvICppbmNvbXBhdGlibGUqIHR5cGVzIGZvciB0aGUgJSglKVxuaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cblxuVGhlIHNvbHV0aW9uIHRvIHJlZ2FpbiBhIGdlbmVyYWwgdHlwZSBmb3IgJSguLiUpIGlzIHRvIGdlbmVyYWxpemUgdGhpc1xudGVjaG5pcXVlLCBub3Qgb25seSBvbiB0aGUgJ2QsICdlIHBhcmFtZXRlcnMsIGJ1dCBvbiBhbGwgc2l4XG5wYXJhbWV0ZXJzIG9mIGEgZm9ybWF0OiB3ZSBpbnRyb2R1Y2UgYSBcInJlbGF0aW9uYWxcIiB0eXBlXG4gICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG53aG9zZSB2YWx1ZXMgYXJlIHByb29mcyB0aGF0ICgnYTEsIC4uLCAnZjEpIGFuZCAoJ2EyLCAuLiwgJ2YyKSBtb3JhbGx5XG5jb3JyZXNwb25kIHRvIHRoZSBzYW1lIGZvcm1hdCB0eXBlOiAnYTEgaXMgb2J0YWluZWQgZnJvbSAnZjEsJ2IxLCdjMVxuaW4gdGhlIGV4YWN0IHNhbWUgd2F5IHRoYXQgJ2EyIGlzIG9idGFpbmVkIGZyb20gJ2YyLCdiMiwnYzIsIGV0Yy5cblxuRm9yIGV4YW1wbGUsIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHR3byBmb3JtYXQgdHlwZXMgYmVnaW5uaW5nIHdpdGggYSBDaGFyXG5wYXJhbWV0ZXIgaXMgYXMgZm9sbG93czpcblxufCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbkluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB0ZXJtIHN0cnVjdHVyZSBvZiBmbXR0eV9yZWwgaXMgKGFsbW9zdFsxXSlcbmlzb21vcnBoaWMgdG8gdGhlIGZtdHR5IG9mIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbjogZXZlcnlcbmNvbnN0cnVjdG9yIGlzIHJlLXJlYWQgd2l0aCBhIGJpbmFyeSwgcmVsYXRpb25hbCB0eXBlLCBpbnN0ZWFkIG9mIHRoZVxucHJldmlvdXMgdW5hcnkgdHlwaW5nLiBmbXR0eSBjYW4gdGhlbiBiZSByZS1kZWZpbmVkIGFzIHRoZSBkaWFnb25hbCBvZlxuZm10dHlfcmVsOlxuXG4gIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5cbk9uY2Ugd2UgaGF2ZSB0aGlzIGZtdHR5X3JlbCB0eXBlIGluIHBsYWNlLCB3ZSBjYW4gZ2l2ZSB0aGUgbW9yZVxuZ2VuZXJhbCB0eXBlIHRvICUoLi4uJSk6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG5XZSBhY2NlcHQgYW55IGZvcm1hdCAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYpICh0aGlzIGlzXG5jb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmb3JtYXQpLCBidXQgYWxzb1xucmVxdWlyZSBhIHByb29mIHRoYXQgdGhpcyBmb3JtYXQgaXMgaW4gcmVsYXRpb24gdG8gYW5vdGhlciBmb3JtYXQgdGhhdFxuaXMgY29uY2F0ZW5hYmxlIHRvIHRoZSBmb3JtYXQgdGFpbC4gV2hlbiBleGVjdXRpbmcgYSAlKC4uLiUpIGZvcm1hdFxuKGluIGNhbWxpbnRlcm5hbEZvcm1hdC5tbDptYWtlX3ByaW50ZiBvciBzY2FuZi5tbDptYWtlX3NjYW5mKSwgd2VcbnRyYW5zdHlwZSB0aGUgZm9ybWF0IGFsb25nIHRoaXMgcmVsYXRpb24gdXNpbmcgdGhlICdyZWNhc3QnIGZ1bmN0aW9uXG50byB0cmFuc3Bvc2UgYmV0d2VlbiByZWxhdGVkIGZvcm1hdCB0eXBlcy5cblxuICB2YWwgcmVjYXN0IDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEpIGZtdFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10XG5cbk5PVEUgWzFdOiB0aGUgdHlwaW5nIG9mIEZvcm1hdF9zdWJzdF90eSByZXF1aXJlcyBub3Qgb25lIGZvcm1hdCB0eXBlLCBidXRcbnR3bywgb25lIHRvIGVzdGFibGlzaCB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXQgYXJndW1lbnQgYW5kIHRoZVxuZmlyc3Qgc2l4IHBhcmFtZXRlcnMsIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdFxuYXJndW1lbnQgYW5kIHRoZSBsYXN0IHNpeCBwYXJhbWV0ZXJzLlxuXG58IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuV2hlbiB3ZSBnZW5lcmF0ZSBhIGZvcm1hdCBBU1QsIHdlIGdlbmVyYXRlIGV4YWN0bHkgdGhlIHNhbWUgd2l0bmVzc1xuZm9yIGJvdGggcmVsYXRpb25zLCBhbmQgdGhlIHdpdG5lc3MtY29udmVyc2lvbiBmdW5jdGlvbnMgaW5cbmNhbWxpbnRlcm5hbEZvcm1hdCBkbyByZWx5IG9uIHRoaXMgaW52YXJpYW50LiBGb3IgZXhhbXBsZSwgdGhlXG5mdW5jdGlvbiB0aGF0IHByb3ZlcyB0aGF0IHRoZSByZWxhdGlvbiBpcyB0cmFuc2l0aXZlXG5cbiAgdmFsIHRyYW5zIDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcblxuZG9lcyBhc3N1bWUgdGhhdCB0aGUgdHdvIGlucHV0cyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgdGVybSBzdHJ1Y3R1cmVcbihhbmQgaXMgb25seSBldmVyeSB1c2VkIGZvciBhcmd1bWVudCB3aXRuZXNzZXMgb2YgdGhlXG5Gb3JtYXRfc3Vic3RfdHkgY29uc3RydWN0b3IpLlxuKilcblxuKCogVHlwZSBvZiBhIGJsb2NrIHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCAgICgqIEhvcml6b250YWwgYmxvY2sgbm8gbGluZSBicmVha2luZyAqKVxuICB8IFBwX3Zib3ggICAoKiBWZXJ0aWNhbCBibG9jayBlYWNoIGJyZWFrIGxlYWRzIHRvIGEgbmV3IGxpbmUgKilcbiAgfCBQcF9odmJveCAgKCogSG9yaXpvbnRhbC12ZXJ0aWNhbCBibG9jazogc2FtZSBhcyB2Ym94LCBleGNlcHQgaWYgdGhpcyBibG9ja1xuICAgICAgICAgICAgICAgICBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IG9uIGEgc2luZ2xlIGxpbmUgKilcbiAgfCBQcF9ob3Zib3ggKCogSG9yaXpvbnRhbCBvciBWZXJ0aWNhbCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2sgKilcbiAgfCBQcF9ib3ggICAgKCogSG9yaXpvbnRhbCBvciBJbmRlbnQgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrLCBvclxuICAgICAgICAgICAgICAgICB3aGVuIGl0IGxlYWRzIHRvIGEgbmV3IGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgKilcbiAgfCBQcF9maXRzICAgKCogSW50ZXJuYWwgdXNhZ2U6IHdoZW4gYSBibG9jayBmaXRzIG9uIGEgc2luZ2xlIGxpbmUgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgZm9ybWF0dGluZ19saXQgPVxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXSAgICopXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEB9ICAgKilcbiAgfCBCcmVhayBvZiBzdHJpbmcgKiBpbnQgKiBpbnQgICAgICAgICAgKCogQCwgfCBAICB8IEA7IHwgQDs8PiAqKVxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPyAgICopXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBcXG4gICopXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAuICAgKilcbiAgfCBNYWdpY19zaXplIG9mIHN0cmluZyAqIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQDxuPiAqKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAQCAgICopXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAlJSAgKilcbiAgfCBTY2FuX2luZGljIG9mIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFggICAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW4gPVxuICB8IE9wZW5fdGFnIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAeyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG4gIHwgT3Blbl9ib3ggOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEBbICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgdHlwZSBlbGVtZW50cy4gKilcbigqIEluIHBhcnRpY3VsYXIgdXNlZCB0byByZXByZXNlbnQgJSguLi4lKSBhbmQgJXsuLi4lfSBjb250ZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuYW5kICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgPVxuICB8IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFN0cmluZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKHN0cmluZyAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIHN0cmluZyAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50MzJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50MzIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQzMiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBOYXRpdmVpbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5kICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChuYXRpdmVpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBuYXRpdmVpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50NjRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50NjQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQ2NCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBGbG9hdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWYgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChmbG9hdCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGZsb2F0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEJvb2xfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGJvb2wgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBib29sIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRm9ybWF0X2FyZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuICB8IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzLiAqKVxuICB8IEFscGhhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ3ggLT4gJ2MxKSAtPiAneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ3ggLT4gJ2MyKSAtPiAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBUaGV0YV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICdjMSkgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICdjMikgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQW55X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBVc2VkIGZvciBjdXN0b20gZm9ybWF0cyAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBSZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IElnbm9yZWRfcmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRW5kX29mX2ZtdHR5IDpcbiAgICAgICgnZjEsICdiMSwgJ2MxLCAnZDEsICdkMSwgJ2YxLFxuICAgICAgICdmMiwgJ2IyLCAnYzIsICdkMiwgJ2QyLCAnZjIpIGZtdHR5X3JlbFxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCBlbGVtZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ID1cbiAgfCBDaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlUyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQzMiAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IE5hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgbmF0aXZlaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQ2NCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gICAgICBmbG9hdF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgZmxvYXQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBCb29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2JCXSAqKVxuICAgICAgKCd4LCBib29sIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmx1c2ggOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogYWJjICopXG4gICAgICBzdHJpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDaGFyX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiB4ICopXG4gICAgICBjaGFyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBGb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgQWxwaGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAneCAtPiAnYykgLT4gJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgVGhldGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAnYykgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICBmb3JtYXR0aW5nX2xpdCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdHRpbmdfZ2VuIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgKCdhMSwgJ2IsICdjLCAnZDEsICdlMSwgJ2YxKSBmb3JtYXR0aW5nX2dlbiAqXG4gICAgICAoJ2YxLCAnYiwgJ2MsICdlMSwgJ2UyLCAnZjIpIGZtdCAtPiAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UyLCAnZjIpIGZtdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3ggLT4gJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKHN0cmluZyAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW25sTkxdICopXG4gICAgICBjb3VudGVyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoaW50IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUwYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSWdub3JlZF9wYXJhbSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8gKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBpZ25vcmVkICogKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogQ3VzdG9tIHByaW50aW5nIGZvcm1hdCAoUFIjNjQ1MiwgR1BSIzE0MClcblxuICAgICBXZSBpbmNsdWRlIGEgdHlwZSBDdXN0b20gb2YgXCJjdXN0b20gY29udmVydGVyc1wiLCB3aGVyZSBhblxuICAgICBhcmJpdHJhcnkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29udmVydCBvbmUgb3IgbW9yZVxuICAgICBhcmd1bWVudHMuIFRoZXJlIGlzIG5vIHN5bnRheCBmb3IgY3VzdG9tIGNvbnZlcnRlcnMsIGl0IGlzIG9ubHlcbiAgICAgaW50ZW5kZWQgZm9yIGN1c3RvbSBwcm9jZXNzb3JzIHRoYXQgd2lzaCB0byByZWx5IG9uIHRoZVxuICAgICBzdGRsaWItZGVmaW5lZCBmb3JtYXQgR0FEVHMuXG5cbiAgICAgRm9yIGluc3RhbmNlIGEgcHJlLXByb2Nlc3NvciBjb3VsZCBjaG9vc2UgdG8gaW50ZXJwcmV0IHN0cmluZ3NcbiAgICAgcHJlZml4ZWQgd2l0aCBbXCIhXCJdIGFzIGZvcm1hdCBzdHJpbmdzIHdoZXJlIFsle3sgLi4uIH19XSBpc1xuICAgICBhIHNwZWNpYWwgZm9ybSB0byBwYXNzIGEgdG9fc3RyaW5nIGZ1bmN0aW9uLCBzbyB0aGF0IG9uZSBjb3VsZFxuICAgICB3cml0ZTpcblxuICAgICB7W1xuICAgICAgIHR5cGUgdCA9IHsgeCA6IGludDsgeSA6IGludCB9XG5cbiAgICAgICBsZXQgc3RyaW5nX29mX3QgdCA9IFByaW50Zi5zcHJpbnRmIFwieyB4ID0gJWQ7IHkgPSAlZCB9XCIgdC54IHQueVxuXG4gICAgICAgUHJpbnRmLnByaW50ZiAhXCJ0ID0gJXt7c3RyaW5nX29mX3R9fVwiIHsgeCA9IDQyOyB5ID0gNDIgfVxuICAgICBdfVxuICAqKVxuICB8IEN1c3RvbSA6XG4gICAgICAoJ2EsICd4LCAneSkgY3VzdG9tX2FyaXR5ICogKHVuaXQgLT4gJ3gpICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIGVuZCBvZiBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uICopXG4gIHwgRW5kX29mX2Zvcm1hdCA6XG4gICAgICAgICgnZiwgJ2IsICdjLCAnZSwgJ2UsICdmKSBmbXRcblxuKCoqKilcblxuKCogVHlwZSBmb3IgaWdub3JlZCBwYXJhbWV0ZXJzIChzZWUgXCIlX1wiKS4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZCA9XG4gIHwgSWdub3JlZF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9jICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2QgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfbmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbmQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfTGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZiAqKVxuICAgICAgcGFkX29wdGlvbiAqIHByZWNfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9ib29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9CICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV97Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZFxuICB8IElnbm9yZWRfcmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfW25sTkxdICopXG4gICAgICBjb3VudGVyIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8wYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcblxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgKiBzdHJpbmdcblxubGV0IHJlYyBlcmFzZV9yZWwgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYsXG4gICBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5XG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCBfdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTEsIGVyYXNlX3JlbCByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBlIGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdCB0eXBlcy4gKilcbigqIFVzZWQgYnk6XG4gICAqIHJlYWRlcl9uYl91bmlmaWVyX29mX2ZtdHR5IHRvIGNvdW50IHJlYWRlcnMgaW4gYW4gZm10dHksXG4gICAqIFNjYW5mLnRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgdG8gZXh0cmFjdCByZWFkZXJzIGluc2lkZSAlKC4uLiUpLFxuICAgKiBDYW1saW50ZXJuYWxGb3JtYXQuZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgdG8gZXh0cmFjdCBmb3JtYXQgdHlwZS4gKilcblxuKCpcbmxldCByZWMgY29uY2F0X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXR0eSA9XG4qKVxubGV0IHJlYyBjb25jYXRfZm10dHkgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgICAgICBnMSBqMSBnMiBqMlxuICAuXG4gICAgKGcxLCBiMSwgYzEsIGoxLCBkMSwgYTEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBkMiwgYTIpIGZtdHR5X3JlbCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGUxLCBmMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGUyLCBmMikgZm10dHlfcmVsID1cbmZ1biBmbXR0eTEgZm10dHkyIC0+IG1hdGNoIGZtdHR5MSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBFbmRfb2ZfZm10dHkgLT4gZm10dHkyXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0cy4gKilcbmxldCByZWMgY29uY2F0X2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXQgPVxuZnVuIGZtdDEgZm10MiAtPiBtYXRjaCBmbXQxIHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBTdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBDYW1sX3N0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDMyIChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgQ2hhciAocmVzdCkgLT5cbiAgICBDaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIENhbWxfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIEJvb2wgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIEFscGhhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgVGhldGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgQ3VzdG9tIChhcml0eSwgZiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgUmVhZGVyIHJlc3QgLT5cbiAgICBSZWFkZXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBGbHVzaCAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIFN0cmluZ19saXRlcmFsIChzdHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIENoYXJfbGl0ZXJhbCAgIChjaHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnICAgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fbmV4dF9jaGFyIChyZXN0KSAtPlxuICAgIFNjYW5fbmV4dF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgSWdub3JlZF9wYXJhbSAoaWduLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgZm10MlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgR2FicmllbCBTY2hlcmVyLCBwcm9qZXQgUGFydG91dCwgSU5SSUEgUGFyaXMtU2FjbGF5ICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDYW1saW50ZXJuYWxBdG9taWMgaXMgYSBkZXBlbmRlbmN5IG9mIFN0ZGxpYiwgc28gaXQgaXMgY29tcGlsZWQgd2l0aFxuICAgLW5vcGVydmFzaXZlcy4gKilcbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBXZSBhcmUgbm90IHJldXNpbmcgKCdhIHJlZikgZGlyZWN0bHkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVhc29uXG4gICBhYm91dCBhdG9taWNpdHkgaWYgd2Ugd2lzaCB0bzogZXZlbiBpbiBhIHNlcXVlbnRpYWwgaW1wbGVtZW50YXRpb24sXG4gICBzaWduYWxzIGFuZCBvdGhlciBhc3luY2hyb25vdXMgY2FsbGJhY2tzIG1pZ2h0IGJyZWFrIGF0b21pY2l0eS4gKilcbnR5cGUgJ2EgdCA9IHttdXRhYmxlIHY6ICdhfVxuXG5sZXQgbWFrZSB2ID0ge3Z9XG5sZXQgZ2V0IHIgPSByLnZcbmxldCBzZXQgciB2ID0gci52IDwtIHZcblxuKCogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHNldCB0byBuZXZlciBiZSBpbmxpbmVkOiBGbGFtYmRhIGlzXG4gICBhbGxvd2VkIHRvIG1vdmUgc3Vycm91bmRpbmcgY29kZSBpbnNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sXG4gICBpbmNsdWRpbmcgYWxsb2NhdGlvbnMuICopXG5cbmxldFtAaW5saW5lIG5ldmVyXSBleGNoYW5nZSByIHYgPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICByLnYgPC0gdjtcbiAgKCogRU5EIEFUT01JQyAqKVxuICBjdXJcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGNvbXBhcmVfYW5kX3NldCByIHNlZW4gdiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIGlmIGN1ciA9PSBzZWVuIHRoZW4gKFxuICAgIHIudiA8LSB2O1xuICAgICgqIEVORCBBVE9NSUMgKilcbiAgICB0cnVlXG4gICkgZWxzZVxuICAgIGZhbHNlXG5cbmxldFtAaW5saW5lIG5ldmVyXSBmZXRjaF9hbmRfYWRkIHIgbiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIHIudiA8LSAoY3VyICsgbik7XG4gICgqIEVORCBBVE9NSUMgKilcbiAgY3VyXG5cbmxldCBpbmNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAxKVxubGV0IGRlY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByICgtMSkpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEV4Y2VwdGlvbnMgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgKCkgPVxuICAoKiBmb3IgcnVudGltZS9mYWlsX25hdC5jICopXG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUGVydmFzaXZlcy5hcnJheV9ib3VuZF9lcnJvclwiXG4gICAgKEludmFsaWRfYXJndW1lbnQgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpXG5cbmV4dGVybmFsIHJhaXNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2VcIlxuZXh0ZXJuYWwgcmFpc2Vfbm90cmFjZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlX25vdHJhY2VcIlxuXG5sZXQgZmFpbHdpdGggcyA9IHJhaXNlKEZhaWx1cmUgcylcbmxldCBpbnZhbGlkX2FyZyBzID0gcmFpc2UoSW52YWxpZF9hcmd1bWVudCBzKVxuXG5leGNlcHRpb24gRXhpdFxuZXhjZXB0aW9uIE1hdGNoX2ZhaWx1cmUgPSBNYXRjaF9mYWlsdXJlXG5leGNlcHRpb24gQXNzZXJ0X2ZhaWx1cmUgPSBBc3NlcnRfZmFpbHVyZVxuZXhjZXB0aW9uIEludmFsaWRfYXJndW1lbnQgPSBJbnZhbGlkX2FyZ3VtZW50XG5leGNlcHRpb24gRmFpbHVyZSA9IEZhaWx1cmVcbmV4Y2VwdGlvbiBOb3RfZm91bmQgPSBOb3RfZm91bmRcbmV4Y2VwdGlvbiBPdXRfb2ZfbWVtb3J5ID0gT3V0X29mX21lbW9yeVxuZXhjZXB0aW9uIFN0YWNrX292ZXJmbG93ID0gU3RhY2tfb3ZlcmZsb3dcbmV4Y2VwdGlvbiBTeXNfZXJyb3IgPSBTeXNfZXJyb3JcbmV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSA9IEVuZF9vZl9maWxlXG5leGNlcHRpb24gRGl2aXNpb25fYnlfemVybyA9IERpdmlzaW9uX2J5X3plcm9cbmV4Y2VwdGlvbiBTeXNfYmxvY2tlZF9pbyA9IFN5c19ibG9ja2VkX2lvXG5leGNlcHRpb24gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGUgPSBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuXG4oKiBDb21wb3NpdGlvbiBvcGVyYXRvcnMgKilcblxuZXh0ZXJuYWwgKCB8PiApIDogJ2EgLT4gKCdhIC0+ICdiKSAtPiAnYiA9IFwiJXJldmFwcGx5XCJcbmV4dGVybmFsICggQEAgKSA6ICgnYSAtPiAnYikgLT4gJ2EgLT4gJ2IgPSBcIiVhcHBseVwiXG5cbigqIERlYnVnZ2luZyAqKVxuXG5leHRlcm5hbCBfX0xPQ19fIDogc3RyaW5nID0gXCIlbG9jX0xPQ1wiXG5leHRlcm5hbCBfX0ZJTEVfXyA6IHN0cmluZyA9IFwiJWxvY19GSUxFXCJcbmV4dGVybmFsIF9fTElORV9fIDogaW50ID0gXCIlbG9jX0xJTkVcIlxuZXh0ZXJuYWwgX19NT0RVTEVfXyA6IHN0cmluZyA9IFwiJWxvY19NT0RVTEVcIlxuZXh0ZXJuYWwgX19QT1NfXyA6IHN0cmluZyAqIGludCAqIGludCAqIGludCA9IFwiJWxvY19QT1NcIlxuZXh0ZXJuYWwgX19GVU5DVElPTl9fIDogc3RyaW5nID0gXCIlbG9jX0ZVTkNUSU9OXCJcblxuZXh0ZXJuYWwgX19MT0NfT0ZfXyA6ICdhIC0+IHN0cmluZyAqICdhID0gXCIlbG9jX0xPQ1wiXG5leHRlcm5hbCBfX0xJTkVfT0ZfXyA6ICdhIC0+IGludCAqICdhID0gXCIlbG9jX0xJTkVcIlxuZXh0ZXJuYWwgX19QT1NfT0ZfXyA6ICdhIC0+IChzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQpICogJ2EgPSBcIiVsb2NfUE9TXCJcblxuKCogQ29tcGFyaXNvbnMgKilcblxuZXh0ZXJuYWwgKCA9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuZXh0ZXJuYWwgKCA8PiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxdWFsXCJcbmV4dGVybmFsICggPCApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3N0aGFuXCJcbmV4dGVybmFsICggPiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJ0aGFuXCJcbmV4dGVybmFsICggPD0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzZXF1YWxcIlxuZXh0ZXJuYWwgKCA+PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJlcXVhbFwiXG5leHRlcm5hbCBjb21wYXJlIDogJ2EgLT4gJ2EgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5cbmxldCBtaW4geCB5ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggIT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcVwiXG5cbigqIEJvb2xlYW4gb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBub3QgOiBib29sIC0+IGJvb2wgPSBcIiVib29sbm90XCJcbmV4dGVybmFsICggJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggJiYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoIG9yICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5leHRlcm5hbCAoIHx8ICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5cbigqIEludGVnZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tICkgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsICggfisgKSA6IGludCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBzdWNjIDogaW50IC0+IGludCA9IFwiJXN1Y2NpbnRcIlxuZXh0ZXJuYWwgcHJlZCA6IGludCAtPiBpbnQgPSBcIiVwcmVkaW50XCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgKCAtICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXN1YmludFwiXG5leHRlcm5hbCAoICogKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsICggLyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgKCBtb2QgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcblxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5cbmV4dGVybmFsICggbGFuZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgKCBsb3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlb3JpbnRcIlxuZXh0ZXJuYWwgKCBseG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5cbmxldCBsbm90IHggPSB4IGx4b3IgKC0xKVxuXG5leHRlcm5hbCAoIGxzbCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgKCBsc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNyaW50XCJcbmV4dGVybmFsICggYXNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5cbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuXG4oKiBGbG9hdGluZy1wb2ludCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0uICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJW5lZ2Zsb2F0XCJcbmV4dGVybmFsICggfisuICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsICggKy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWRkZmxvYXRcIlxuZXh0ZXJuYWwgKCAtLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVzdWJmbG9hdFwiXG5leHRlcm5hbCAoICouICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJW11bGZsb2F0XCJcbmV4dGVybmFsICggLy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlZGl2ZmxvYXRcIlxuZXh0ZXJuYWwgKCAqKiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBfZmxvYXRcIiBcImV4cFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zX2Zsb2F0XCIgXCJhY29zXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luX2Zsb2F0XCIgXCJhc2luXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuX2Zsb2F0XCIgXCJhdGFuXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW4yIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbjJfZmxvYXRcIiBcImF0YW4yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGh5cG90IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgID0gXCJjYW1sX2h5cG90X2Zsb2F0XCIgXCJjYW1sX2h5cG90XCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc19mbG9hdFwiIFwiY29zXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NoX2Zsb2F0XCIgXCJjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc2hfZmxvYXRcIiBcImNhbWxfYWNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nX2Zsb2F0XCIgXCJsb2dcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMTAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxMF9mbG9hdFwiIFwibG9nMTBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMXAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxcF9mbG9hdFwiIFwiY2FtbF9sb2cxcFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5fZmxvYXRcIiBcInNpblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luaF9mbG9hdFwiIFwic2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5oX2Zsb2F0XCIgXCJjYW1sX2FzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNxcnQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zcXJ0X2Zsb2F0XCIgXCJzcXJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Rhbl9mbG9hdFwiIFwidGFuXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5oX2Zsb2F0XCIgXCJ0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbmhfZmxvYXRcIiBcImNhbWxfYXRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY2VpbCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2NlaWxfZmxvYXRcIiBcImNlaWxcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZmxvb3IgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9vcl9mbG9hdFwiIFwiZmxvb3JcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWJzX2Zsb2F0IDogZmxvYXQgLT4gZmxvYXQgPSBcIiVhYnNmbG9hdFwiXG5leHRlcm5hbCBjb3B5c2lnbiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICAgICA9IFwiY2FtbF9jb3B5c2lnbl9mbG9hdFwiIFwiY2FtbF9jb3B5c2lnblwiXG4gICAgICAgICAgICAgICAgICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kX2Zsb2F0IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZm1vZF9mbG9hdFwiIFwiZm1vZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmcmV4cCA6IGZsb2F0IC0+IGZsb2F0ICogaW50ID0gXCJjYW1sX2ZyZXhwX2Zsb2F0XCJcbmV4dGVybmFsIGxkZXhwIDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IChpbnQgW0B1bnRhZ2dlZF0pIC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9sZGV4cF9mbG9hdFwiIFwiY2FtbF9sZGV4cF9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZGYgOiBmbG9hdCAtPiBmbG9hdCAqIGZsb2F0ID0gXCJjYW1sX21vZGZfZmxvYXRcIlxuZXh0ZXJuYWwgZmxvYXQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIGZsb2F0X29mX2ludCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGludF9vZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfYml0cyA6IGludDY0IC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNcIiBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c191bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmxldCBpbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuZWdfaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4RkZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmFuID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAxTFxubGV0IG1heF9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9FRl9GRl9GRl9GRl9GRl9GRl9GRkxcbmxldCBtaW5fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4MDBfMTBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgZXBzaWxvbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgzQ19CMF8wMF8wMF8wMF8wMF8wMF8wMExcblxudHlwZSBmcGNsYXNzID1cbiAgICBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cbmV4dGVybmFsIGNsYXNzaWZ5X2Zsb2F0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGZwY2xhc3MgPVxuICBcImNhbWxfY2xhc3NpZnlfZmxvYXRcIiBcImNhbWxfY2xhc3NpZnlfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5cbigqIFN0cmluZyBhbmQgYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlcyBTdHJpbmcgYW5kIEJ5dGVzICopXG5cbmV4dGVybmFsIHN0cmluZ19sZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19sZW5ndGggOiBieXRlcyAtPiBpbnQgPSBcIiVieXRlc19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBzdHJpbmdfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBieXRlc19ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBieXRlc191bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcblxubGV0ICggXiApIHMxIHMyID1cbiAgbGV0IGwxID0gc3RyaW5nX2xlbmd0aCBzMSBhbmQgbDIgPSBzdHJpbmdfbGVuZ3RoIHMyIGluXG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIChsMSArIGwyKSBpblxuICBzdHJpbmdfYmxpdCBzMSAwIHMgMCBsMTtcbiAgc3RyaW5nX2JsaXQgczIgMCBzIGwxIGwyO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuKCogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgQ2hhciAqKVxuXG5leHRlcm5hbCBpbnRfb2ZfY2hhciA6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdW5zYWZlX2NoYXJfb2ZfaW50IDogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5sZXQgY2hhcl9vZl9pbnQgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPiAyNTUgdGhlbiBpbnZhbGlkX2FyZyBcImNoYXJfb2ZfaW50XCIgZWxzZSB1bnNhZmVfY2hhcl9vZl9pbnQgblxuXG4oKiBVbml0IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFBhaXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBmc3QgOiAnYSAqICdiIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsIHNuZCA6ICdhICogJ2IgLT4gJ2IgPSBcIiVmaWVsZDFcIlxuXG4oKiBSZWZlcmVuY2VzICopXG5cbnR5cGUgJ2EgcmVmID0geyBtdXRhYmxlIGNvbnRlbnRzIDogJ2EgfVxuZXh0ZXJuYWwgcmVmIDogJ2EgLT4gJ2EgcmVmID0gXCIlbWFrZW11dGFibGVcIlxuZXh0ZXJuYWwgKCAhICkgOiAnYSByZWYgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgKCA6PSApIDogJ2EgcmVmIC0+ICdhIC0+IHVuaXQgPSBcIiVzZXRmaWVsZDBcIlxuZXh0ZXJuYWwgaW5jciA6IGludCByZWYgLT4gdW5pdCA9IFwiJWluY3JcIlxuZXh0ZXJuYWwgZGVjciA6IGludCByZWYgLT4gdW5pdCA9IFwiJWRlY3JcIlxuXG4oKiBSZXN1bHQgdHlwZSAqKVxuXG50eXBlICgnYSwnYikgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnYlxuXG4oKiBTdHJpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgZm9ybWF0X2ludCA6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxuZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0IDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuXG5sZXQgc3RyaW5nX29mX2Jvb2wgYiA9XG4gIGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIlxubGV0IGJvb2xfb2Zfc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IGZhbHNlXG4gIHwgXyAtPiBpbnZhbGlkX2FyZyBcImJvb2xfb2Zfc3RyaW5nXCJcblxubGV0IGJvb2xfb2Zfc3RyaW5nX29wdCA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gU29tZSB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IFNvbWUgZmFsc2VcbiAgfCBfIC0+IE5vbmVcblxubGV0IHN0cmluZ19vZl9pbnQgbiA9XG4gIGZvcm1hdF9pbnQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5cbmxldCBpbnRfb2Zfc3RyaW5nX29wdCBzID1cbiAgKCogVE9ETzogcHJvdmlkZSB0aGlzIGRpcmVjdGx5IGFzIGEgbm9uLXJhaXNpbmcgcHJpbWl0aXZlLiAqKVxuICB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmV4dGVybmFsIHN0cmluZ19nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuXG5sZXQgdmFsaWRfZmxvYXRfbGV4ZW0gcyA9XG4gIGxldCBsID0gc3RyaW5nX2xlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID49IGwgdGhlbiBzIF4gXCIuXCIgZWxzZVxuICAgIG1hdGNoIHN0cmluZ19nZXQgcyBpIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gbG9vcCAoaSArIDEpXG4gICAgfCBfIC0+IHNcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBzdHJpbmdfb2ZfZmxvYXQgZiA9IHZhbGlkX2Zsb2F0X2xleGVtIChmb3JtYXRfZmxvYXQgXCIlLjEyZ1wiIGYpXG5cbmV4dGVybmFsIGZsb2F0X29mX3N0cmluZyA6IHN0cmluZyAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdF9vZl9zdHJpbmdcIlxuXG5sZXQgZmxvYXRfb2Zfc3RyaW5nX29wdCBzID1cbiAgKCogVE9ETzogcHJvdmlkZSB0aGlzIGRpcmVjdGx5IGFzIGEgbm9uLXJhaXNpbmcgcHJpbWl0aXZlLiAqKVxuICB0cnkgU29tZSAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuKCogTGlzdCBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIExpc3QgKilcblxubGV0IHJlYyAoIEAgKSBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGhkIDo6IHRsIC0+IGhkIDo6ICh0bCBAIGwyKVxuXG4oKiBJL08gb3BlcmF0aW9ucyAqKVxuXG50eXBlIGluX2NoYW5uZWxcbnR5cGUgb3V0X2NoYW5uZWxcblxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX291dCA6IGludCAtPiBvdXRfY2hhbm5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XCJcbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9pbiA6IGludCAtPiBpbl9jaGFubmVsID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblwiXG5cbmxldCBzdGRpbiA9IG9wZW5fZGVzY3JpcHRvcl9pbiAwXG5sZXQgc3Rkb3V0ID0gb3Blbl9kZXNjcmlwdG9yX291dCAxXG5sZXQgc3RkZXJyID0gb3Blbl9kZXNjcmlwdG9yX291dCAyXG5cbigqIEdlbmVyYWwgb3V0cHV0IGZ1bmN0aW9ucyAqKVxuXG50eXBlIG9wZW5fZmxhZyA9XG4gICAgT3Blbl9yZG9ubHkgfCBPcGVuX3dyb25seSB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdCB8IE9wZW5fdHJ1bmMgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeSB8IE9wZW5fdGV4dCB8IE9wZW5fbm9uYmxvY2tcblxuZXh0ZXJuYWwgb3Blbl9kZXNjIDogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuXG5leHRlcm5hbCBzZXRfb3V0X2NoYW5uZWxfbmFtZTogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX291dF9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9vdXQob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfb3V0X2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5fb3V0IG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX3RleHRdIDBvNjY2IG5hbWVcblxubGV0IG9wZW5fb3V0X2JpbiBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl9iaW5hcnldIDBvNjY2IG5hbWVcblxuZXh0ZXJuYWwgZmx1c2ggOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2ZsdXNoXCJcblxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxzX2xpc3QgOiB1bml0IC0+IG91dF9jaGFubmVsIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dF9jaGFubmVsc19saXN0XCJcblxubGV0IGZsdXNoX2FsbCAoKSA9XG4gIGxldCByZWMgaXRlciA9IGZ1bmN0aW9uXG4gICAgICBbXSAtPiAoKVxuICAgIHwgYTo6bCAtPlxuICAgICAgICBiZWdpbiB0cnlcbiAgICAgICAgICAgIGZsdXNoIGFcbiAgICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgICAgICgpICgqIGlnbm9yZSBjaGFubmVscyBjbG9zZWQgZHVyaW5nIGEgcHJlY2VkaW5nIGZsdXNoLiAqKVxuICAgICAgICBlbmQ7XG4gICAgICAgIGl0ZXIgbFxuICBpbiBpdGVyIChvdXRfY2hhbm5lbHNfbGlzdCAoKSlcblxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dCA6IG91dF9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dF9zdHJpbmcgOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRcIlxuXG5leHRlcm5hbCBvdXRwdXRfY2hhciA6IG91dF9jaGFubmVsIC0+IGNoYXIgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5cbmxldCBvdXRwdXRfYnl0ZXMgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXQgb2MgcyAwIChieXRlc19sZW5ndGggcylcblxubGV0IG91dHB1dF9zdHJpbmcgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgMCAoc3RyaW5nX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0IG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0XCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0IG9jIHMgb2ZzIGxlblxuXG5sZXQgb3V0cHV0X3N1YnN0cmluZyBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gc3RyaW5nX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRfc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIG9mcyBsZW5cblxuZXh0ZXJuYWwgb3V0cHV0X2J5dGUgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5leHRlcm5hbCBvdXRwdXRfYmluYXJ5X2ludCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9pbnRcIlxuXG5leHRlcm5hbCBtYXJzaGFsX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSAtPiB1bml0IGxpc3QgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVcIlxubGV0IG91dHB1dF92YWx1ZSBjaGFuIHYgPSBtYXJzaGFsX3RvX2NoYW5uZWwgY2hhbiB2IFtdXG5cbmV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRcIlxuZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3Nfb3V0XCJcbmV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2Vfb3V0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX291dCBvYyA9IGZsdXNoIG9jOyBjbG9zZV9vdXRfY2hhbm5lbCBvY1xubGV0IGNsb3NlX291dF9ub2VyciBvYyA9XG4gICh0cnkgZmx1c2ggb2Mgd2l0aCBfIC0+ICgpKTtcbiAgKHRyeSBjbG9zZV9vdXRfY2hhbm5lbCBvYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfb3V0IDogb3V0X2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIEdlbmVyYWwgaW5wdXQgZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIHNldF9pbl9jaGFubmVsX25hbWU6IGluX2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX2luX2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX2luKG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X2luX2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5faW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl90ZXh0XSAwIG5hbWVcblxubGV0IG9wZW5faW5fYmluIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fYmluYXJ5XSAwIG5hbWVcblxuZXh0ZXJuYWwgaW5wdXRfY2hhciA6IGluX2NoYW5uZWwgLT4gY2hhciA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0IDogaW5fY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2lucHV0XCJcblxubGV0IGlucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gKCkgZWxzZSBiZWdpblxuICAgIGxldCByID0gdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIChvZnMgKyByKSAobGVuIC0gcilcbiAgZW5kXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIGxlbiBpblxuICByZWFsbHlfaW5wdXQgaWMgcyAwIGxlbjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbmV4dGVybmFsIGlucHV0X3NjYW5fbGluZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X3NjYW5fbGluZVwiXG5cbmxldCBpbnB1dF9saW5lIGNoYW4gPVxuICBsZXQgcmVjIGJ1aWxkX3Jlc3VsdCBidWYgcG9zID0gZnVuY3Rpb25cbiAgICBbXSAtPiBidWZcbiAgfCBoZCA6OiB0bCAtPlxuICAgICAgbGV0IGxlbiA9IGJ5dGVzX2xlbmd0aCBoZCBpblxuICAgICAgYnl0ZXNfYmxpdCBoZCAwIGJ1ZiAocG9zIC0gbGVuKSBsZW47XG4gICAgICBidWlsZF9yZXN1bHQgYnVmIChwb3MgLSBsZW4pIHRsIGluXG4gIGxldCByZWMgc2NhbiBhY2N1IGxlbiA9XG4gICAgbGV0IG4gPSBpbnB1dF9zY2FuX2xpbmUgY2hhbiBpblxuICAgIGlmIG4gPSAwIHRoZW4gYmVnaW4gICAgICAgICAgICAgICAgICAgKCogbiA9IDA6IHdlIGFyZSBhdCBFT0YgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgfCBfICAtPiBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiBhY2N1XG4gICAgZW5kIGVsc2UgaWYgbiA+IDAgdGhlbiBiZWdpbiAgICAgICAgICAoKiBuID4gMDogbmV3bGluZSBmb3VuZCBpbiBidWZmZXIgKilcbiAgICAgIGxldCByZXMgPSBieXRlc19jcmVhdGUgKG4gLSAxKSBpblxuICAgICAgaWdub3JlICh1bnNhZmVfaW5wdXQgY2hhbiByZXMgMCAobiAtIDEpKTtcbiAgICAgIGlnbm9yZSAoaW5wdXRfY2hhciBjaGFuKTsgICAgICAgICAgICgqIHNraXAgdGhlIG5ld2xpbmUgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByZXNcbiAgICAgIHwgIF8gLT4gbGV0IGxlbiA9IGxlbiArIG4gLSAxIGluXG4gICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIChyZXMgOjogYWNjdSlcbiAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICgqIG4gPCAwOiBuZXdsaW5lIG5vdCBmb3VuZCAqKVxuICAgICAgbGV0IGJlZyA9IGJ5dGVzX2NyZWF0ZSAoLW4pIGluXG4gICAgICBpZ25vcmUodW5zYWZlX2lucHV0IGNoYW4gYmVnIDAgKC1uKSk7XG4gICAgICBzY2FuIChiZWcgOjogYWNjdSkgKGxlbiAtIG4pXG4gICAgZW5kXG4gIGluIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgKHNjYW4gW10gMClcblxuZXh0ZXJuYWwgaW5wdXRfYnl0ZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuZXh0ZXJuYWwgaW5wdXRfYmluYXJ5X2ludCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2ludFwiXG5leHRlcm5hbCBpbnB1dF92YWx1ZSA6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pblwiXG5leHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3NfaW5cIlxuZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2VfaW5fbm9lcnIgaWMgPSAodHJ5IGNsb3NlX2luIGljIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9pbiA6IGluX2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBvdXRwdXQgKilcblxubGV0IHByaW50X2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZG91dCBjXG5sZXQgcHJpbnRfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzXG5sZXQgcHJpbnRfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRvdXQgc1xubGV0IHByaW50X2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmludF9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByaW50X2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3Rkb3V0IHM7IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5sZXQgcHJpbnRfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgZXJyb3IgKilcblxubGV0IHByZXJyX2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZGVyciBjXG5sZXQgcHJlcnJfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzXG5sZXQgcHJlcnJfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRlcnIgc1xubGV0IHByZXJyX2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmVycl9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByZXJyX2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3RkZXJyIHM7IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5sZXQgcHJlcnJfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5cbigqIElucHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBpbnB1dCAqKVxuXG5sZXQgcmVhZF9saW5lICgpID0gZmx1c2ggc3Rkb3V0OyBpbnB1dF9saW5lIHN0ZGluXG5sZXQgcmVhZF9pbnQgKCkgPSBpbnRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfaW50X29wdCAoKSA9IGludF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXQgKCkgPSBmbG9hdF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdF9vcHQgKCkgPSBmbG9hdF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxuXG4oKiBPcGVyYXRpb25zIG9uIGxhcmdlIGZpbGVzICopXG5cbm1vZHVsZSBMYXJnZUZpbGUgPVxuICBzdHJ1Y3RcbiAgICBleHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRfNjRcIlxuICAgIGV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3Nfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICAgIGV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pbl82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3NfaW5fNjRcIlxuICAgIGV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICBlbmRcblxuKCogRm9ybWF0cyAqKVxuXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2XG4gICA9ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NlxuICAgPSBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mbXRcbiAgICAgICAgICAgICAgICogc3RyaW5nXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBmb3JtYXQ0ID0gKCdhLCAnYiwgJ2MsICdjLCAnYywgJ2QpIGZvcm1hdDZcblxudHlwZSAoJ2EsICdiLCAnYykgZm9ybWF0ID0gKCdhLCAnYiwgJ2MsICdjKSBmb3JtYXQ0XG5cbmxldCBzdHJpbmdfb2ZfZm9ybWF0IChGb3JtYXQgKF9mbXQsIHN0cikpID0gc3RyXG5cbmV4dGVybmFsIGZvcm1hdF9vZl9zdHJpbmcgOlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPSBcIiVpZGVudGl0eVwiXG5cbmxldCAoIF5eICkgKEZvcm1hdCAoZm10MSwgc3RyMSkpIChGb3JtYXQgKGZtdDIsIHN0cjIpKSA9XG4gIEZvcm1hdCAoQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmNvbmNhdF9mbXQgZm10MSBmbXQyLFxuICAgICAgICAgIHN0cjEgXiBcIiUsXCIgXiBzdHIyKVxuXG4oKiBNaXNjZWxsYW5lb3VzICopXG5cbmV4dGVybmFsIHN5c19leGl0IDogaW50IC0+ICdhID0gXCJjYW1sX3N5c19leGl0XCJcblxubGV0IGV4aXRfZnVuY3Rpb24gPSBDYW1saW50ZXJuYWxBdG9taWMubWFrZSBmbHVzaF9hbGxcblxubGV0IHJlYyBhdF9leGl0IGYgPVxuICBsZXQgbW9kdWxlIEF0b21pYyA9IENhbWxpbnRlcm5hbEF0b21pYyBpblxuICAoKiBNUFIjNzI1MywgTVBSIzc3OTY6IG1ha2Ugc3VyZSBcImZcIiBpcyBleGVjdXRlZCBvbmx5IG9uY2UgKilcbiAgbGV0IGZfeWV0X3RvX3J1biA9IEF0b21pYy5tYWtlIHRydWUgaW5cbiAgbGV0IG9sZF9leGl0ID0gQXRvbWljLmdldCBleGl0X2Z1bmN0aW9uIGluXG4gIGxldCBuZXdfZXhpdCAoKSA9XG4gICAgaWYgQXRvbWljLmNvbXBhcmVfYW5kX3NldCBmX3lldF90b19ydW4gdHJ1ZSBmYWxzZSB0aGVuIGYgKCkgO1xuICAgIG9sZF9leGl0ICgpXG4gIGluXG4gIGxldCBzdWNjZXNzID0gQXRvbWljLmNvbXBhcmVfYW5kX3NldCBleGl0X2Z1bmN0aW9uIG9sZF9leGl0IG5ld19leGl0IGluXG4gIGlmIG5vdCBzdWNjZXNzIHRoZW4gYXRfZXhpdCBmXG5cbmxldCBkb19hdF9leGl0ICgpID0gKENhbWxpbnRlcm5hbEF0b21pYy5nZXQgZXhpdF9mdW5jdGlvbikgKClcblxubGV0IGV4aXQgcmV0Y29kZSA9XG4gIGRvX2F0X2V4aXQgKCk7XG4gIHN5c19leGl0IHJldGNvZGVcblxubGV0IF8gPSByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuZG9fYXRfZXhpdFwiIGRvX2F0X2V4aXRcblxuZXh0ZXJuYWwgbWFqb3IgOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfZ2NfbWFqb3JcIlxuZXh0ZXJuYWwgbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCA6IHVuaXQgLT4gYm9vbFxuICA9IFwiY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZFwiXG5sZXQgKCkgPSBpZiBuYWtlZF9wb2ludGVyc19jaGVja2VkICgpIHRoZW4gYXRfZXhpdCBtYWpvclxuXG4oKk1PRFVMRV9BTElBU0VTKilcbm1vZHVsZSBBcmcgICAgICAgICAgPSBBcmdcbm1vZHVsZSBBcnJheSAgICAgICAgPSBBcnJheVxubW9kdWxlIEFycmF5TGFiZWxzICA9IEFycmF5TGFiZWxzXG5tb2R1bGUgQXRvbWljICAgICAgID0gQXRvbWljXG5tb2R1bGUgQmlnYXJyYXkgICAgID0gQmlnYXJyYXlcbm1vZHVsZSBCb29sICAgICAgICAgPSBCb29sXG5tb2R1bGUgQnVmZmVyICAgICAgID0gQnVmZmVyXG5tb2R1bGUgQnl0ZXMgICAgICAgID0gQnl0ZXNcbm1vZHVsZSBCeXRlc0xhYmVscyAgPSBCeXRlc0xhYmVsc1xubW9kdWxlIENhbGxiYWNrICAgICA9IENhbGxiYWNrXG5tb2R1bGUgQ2hhciAgICAgICAgID0gQ2hhclxubW9kdWxlIENvbXBsZXggICAgICA9IENvbXBsZXhcbm1vZHVsZSBEaWdlc3QgICAgICAgPSBEaWdlc3Rcbm1vZHVsZSBFaXRoZXIgICAgICAgPSBFaXRoZXJcbm1vZHVsZSBFcGhlbWVyb24gICAgPSBFcGhlbWVyb25cbm1vZHVsZSBGaWxlbmFtZSAgICAgPSBGaWxlbmFtZVxubW9kdWxlIEZsb2F0ICAgICAgICA9IEZsb2F0XG5tb2R1bGUgRm9ybWF0ICAgICAgID0gRm9ybWF0XG5tb2R1bGUgRnVuICAgICAgICAgID0gRnVuXG5tb2R1bGUgR2MgICAgICAgICAgID0gR2Ncbm1vZHVsZSBHZW5sZXggICAgICAgPSBHZW5sZXhcbm1vZHVsZSBIYXNodGJsICAgICAgPSBIYXNodGJsXG5tb2R1bGUgSW5fY2hhbm5lbCAgID0gSW5fY2hhbm5lbFxubW9kdWxlIEludCAgICAgICAgICA9IEludFxubW9kdWxlIEludDMyICAgICAgICA9IEludDMyXG5tb2R1bGUgSW50NjQgICAgICAgID0gSW50NjRcbm1vZHVsZSBMYXp5ICAgICAgICAgPSBMYXp5XG5tb2R1bGUgTGV4aW5nICAgICAgID0gTGV4aW5nXG5tb2R1bGUgTGlzdCAgICAgICAgID0gTGlzdFxubW9kdWxlIExpc3RMYWJlbHMgICA9IExpc3RMYWJlbHNcbm1vZHVsZSBNYXAgICAgICAgICAgPSBNYXBcbm1vZHVsZSBNYXJzaGFsICAgICAgPSBNYXJzaGFsXG5tb2R1bGUgTW9yZUxhYmVscyAgID0gTW9yZUxhYmVsc1xubW9kdWxlIE5hdGl2ZWludCAgICA9IE5hdGl2ZWludFxubW9kdWxlIE9iaiAgICAgICAgICA9IE9ialxubW9kdWxlIE9vICAgICAgICAgICA9IE9vXG5tb2R1bGUgT3B0aW9uICAgICAgID0gT3B0aW9uXG5tb2R1bGUgT3V0X2NoYW5uZWwgID0gT3V0X2NoYW5uZWxcbm1vZHVsZSBQYXJzaW5nICAgICAgPSBQYXJzaW5nXG5tb2R1bGUgUGVydmFzaXZlcyAgID0gUGVydmFzaXZlc1xubW9kdWxlIFByaW50ZXhjICAgICA9IFByaW50ZXhjXG5tb2R1bGUgUHJpbnRmICAgICAgID0gUHJpbnRmXG5tb2R1bGUgUXVldWUgICAgICAgID0gUXVldWVcbm1vZHVsZSBSYW5kb20gICAgICAgPSBSYW5kb21cbm1vZHVsZSBSZXN1bHQgICAgICAgPSBSZXN1bHRcbm1vZHVsZSBTY2FuZiAgICAgICAgPSBTY2FuZlxubW9kdWxlIFNlcSAgICAgICAgICA9IFNlcVxubW9kdWxlIFNldCAgICAgICAgICA9IFNldFxubW9kdWxlIFN0YWNrICAgICAgICA9IFN0YWNrXG5tb2R1bGUgU3RkTGFiZWxzICAgID0gU3RkTGFiZWxzXG5tb2R1bGUgU3RyZWFtICAgICAgID0gU3RyZWFtXG5tb2R1bGUgU3RyaW5nICAgICAgID0gU3RyaW5nXG5tb2R1bGUgU3RyaW5nTGFiZWxzID0gU3RyaW5nTGFiZWxzXG5tb2R1bGUgU3lzICAgICAgICAgID0gU3lzXG5tb2R1bGUgVWNoYXIgICAgICAgID0gVWNoYXJcbm1vZHVsZSBVbml0ICAgICAgICAgPSBVbml0XG5tb2R1bGUgV2VhayAgICAgICAgID0gV2Vha1xuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuaW5jbHVkZSBJbnRcblxudHlwZSB0ID0gaW50XG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmxldCBhZGQgPSAoICsgKVxubGV0IHN1YiA9ICggLSApXG5sZXQgbXVsID0gKCAqIClcbmxldCBkaXYgPSAoIC8gKVxubGV0IHN1Y2MgPSBzdWNjXG5sZXQgcHJlZCA9IHByZWRcbmxldCBhYnMgPSBhYnNcbmxldCBtYXhfaW50ID0gbWF4X2ludFxubGV0IG1pbl9pbnQgPSBtaW5faW50XG5sZXQgZXF1YWwgKGEgOiBpbnQpIGIgPSBTdGRsaWIuKCA9ICkgYSBiXG5sZXQgY29tcGFyZSAoYSA6IGludCkgYiA9IGNvbXBhcmUgYSBiXG5cbigqIHVzZSBGTlY6XG4gICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Gb3dsZXIlRTIlODAlOTNOb2xsJUUyJTgwJTkzVm9faGFzaF9mdW5jdGlvbiAqKVxubGV0IGhhc2ggKG4gOiBpbnQpIDogaW50ID1cbiAgbGV0IG9mZnNldF9iYXNpcyA9IDB4Y2JmMjljZTQ4NDIyMjMyNUwgaW5cbiAgbGV0IHByaW1lID0gMHgxMDAwMDAwMDFiM0wgaW5cblxuICBsZXQgaCA9IHJlZiBvZmZzZXRfYmFzaXMgaW5cbiAgZm9yIGsgPSAwIHRvIDcgZG9cbiAgICAoaCA6PSBJbnQ2NC4obXVsICFoIHByaW1lKSk7XG4gICAgKCogaCA6PSBoIHhvciAoay10aCBieXRlIG9mIG4pICopXG4gICAgaCA6PSBJbnQ2NC4obG9neG9yICFoIChvZl9pbnQgKChuIGxzciAoayAqIDgpKSBsYW5kIDB4ZmYpKSlcbiAgZG9uZTtcbiAgKCogdHJ1bmNhdGUgYmFjayB0byBpbnQgYW5kIHJlbW92ZSBzaWduICopXG4gIEludDY0LnRvX2ludCAhaCBsYW5kIG1heF9pbnRcblxubGV0IHJhbmdlIGkgaiB5aWVsZCA9XG4gIGxldCByZWMgdXAgaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgdXAgKGkgKyAxKSBqIHlpZWxkXG4gICAgKVxuICBhbmQgZG93biBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICBkb3duIChpIC0gMSkgaiB5aWVsZFxuICAgIClcbiAgaW5cbiAgaWYgaSA8PSBqIHRoZW5cbiAgICB1cCBpIGogeWllbGRcbiAgZWxzZVxuICAgIGRvd24gaSBqIHlpZWxkXG5cbmxldCByYW5nZScgaSBqIHlpZWxkID1cbiAgaWYgaSA8IGogdGhlblxuICAgIHJhbmdlIGkgKGogLSAxKSB5aWVsZFxuICBlbHNlIGlmIGkgPSBqIHRoZW5cbiAgICAoKVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoaiArIDEpIHlpZWxkXG5cbmxldCBzaWduIGkgPSBjb21wYXJlIGkgMFxubGV0IG5lZyBpID0gLWlcblxubGV0IHBvdyBhIGIgPVxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICAgIHwgMSAtPiBhY2NcbiAgICB8IG4gLT5cbiAgICAgIGlmIG4gbW9kIDIgPSAwIHRoZW5cbiAgICAgICAgYXV4IChhY2MgKiBhY2MpIChuIC8gMilcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjICogYXV4IChhY2MgKiBhY2MpIChuIC8gMilcbiAgaW5cbiAgbWF0Y2ggYiB3aXRoXG4gIHwgMCAtPlxuICAgIGlmIGEgPSAwIHRoZW5cbiAgICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwicG93OiB1bmRlZmluZWQgdmFsdWUgMF4wXCIpXG4gICAgZWxzZVxuICAgICAgMVxuICB8IGIgd2hlbiBiIDwgMCAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwicG93OiBjYW4ndCByYWlzZSBpbnQgdG8gbmVnYXRpdmUgcG93ZXJcIilcbiAgfCBiIC0+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+PiAxNjsgIC8vcHV0IGNvdW50IG9mIGVhY2ggMzIgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICB4ICs9IHggPj4gMzI7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDY0IGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgcmV0dXJuIHggJiAweDdmO1xuICB9XG5cbiAgIG0xID0gMHg1NTU1NTU1NTU1NTU1NTU1XG4gICBtMiA9IDB4MzMzMzMzMzMzMzMzMzMzM1xuICAgbTQgPSAweDBmMGYwZjBmMGYwZjBmMGZcbiopXG5sZXQgcG9wY291bnQgKGIgOiBpbnQpIDogaW50ID1cbiAgbGV0IG0xID0gMHg1NTU1NTU1NTU1NTU1NTU1TCBpblxuICBsZXQgbTIgPSAweDMzMzMzMzMzMzMzMzMzMzNMIGluXG4gIGxldCBtNCA9IDB4MGYwZjBmMGYwZjBmMGYwZkwgaW5cbiAgbGV0IG9wZW4gSW50NjQgaW5cbiAgbGV0IGIgPSBvZl9pbnQgYiBpblxuICAoKiBpbnQtPmludDY0ICopXG4gIGxldCBiID0gbG9nYW5kIGIgMHg3ZmZmZmZmZmZmZmZmZmZmTCBpblxuXG4gICgqIHJlbW92ZSBzaWduIGJpdCwgd2UgZGVhbCB3aXRoIHVpbnQ2NCBoZXJlICopXG4gIGxldCBiID0gc3ViIGIgKGxvZ2FuZCAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDEpIG0xKSBpblxuICBsZXQgYiA9IGFkZCAobG9nYW5kIGIgbTIpIChsb2dhbmQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAyKSBtMikgaW5cbiAgbGV0IGIgPSBsb2dhbmQgKGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgNCkpIG00IGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiA4KSBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMTYpIGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAzMikgaW5cbiAgbGV0IGIgPSBsb2dhbmQgYiAweDdmTCBpblxuICB0b19pbnQgYlxuXG5sZXQgbG9nYW5kID0gKCBsYW5kIClcbmxldCBsb2dvciA9ICggbG9yIClcbmxldCBsb2d4b3IgPSAoIGx4b3IgKVxubGV0IGxvZ25vdCA9IGxub3RcbmxldCBzaGlmdF9sZWZ0ID0gKCBsc2wgKVxubGV0IHNoaWZ0X3JpZ2h0ID0gKCBhc3IgKVxubGV0IHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgPSAoIGxzciApXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuICAgVGhpcyBpcyBhIGxhZ2dlZC1GaWJvbmFjY2kgRig1NSwgMjQsICspIHdpdGggYSBtb2RpZmllZCBhZGRpdGlvblxuICAgZnVuY3Rpb24gdG8gZW5oYW5jZSB0aGUgbWl4aW5nIG9mIGJpdHMuXG4gICBJZiB3ZSB1c2Ugbm9ybWFsIGFkZGl0aW9uLCB0aGUgbG93LW9yZGVyIGJpdCBmYWlscyB0ZXN0cyAxIGFuZCA3XG4gICBvZiB0aGUgRGllaGFyZCB0ZXN0IHN1aXRlLCBhbmQgYml0cyAxIGFuZCAyIGFsc28gZmFpbCB0ZXN0IDcuXG4gICBJZiB3ZSB1c2UgbXVsdGlwbGljYXRpb24gYXMgc3VnZ2VzdGVkIGJ5IE1hcnNhZ2xpYSwgaXQgZG9lc24ndCBmYXJlXG4gICBtdWNoIGJldHRlci5cbiAgIEJ5IG1peGluZyB0aGUgYml0cyBvZiBvbmUgb2YgdGhlIG51bWJlcnMgYmVmb3JlIGFkZGl0aW9uIChYT1IgdGhlXG4gICA1IGhpZ2gtb3JkZXIgYml0cyBpbnRvIHRoZSBsb3ctb3JkZXIgYml0cyksIHdlIGdldCBhIGdlbmVyYXRvciB0aGF0XG4gICBwYXNzZXMgYWxsIHRoZSBEaWVoYXJkIHRlc3RzLlxuKilcblxuZXh0ZXJuYWwgcmFuZG9tX3NlZWQ6IHVuaXQgLT4gaW50IGFycmF5ID0gXCJjYW1sX3N5c19yYW5kb21fc2VlZFwiXG5cbm1vZHVsZSBTdGF0ZSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IHsgc3QgOiBpbnQgYXJyYXk7IG11dGFibGUgaWR4IDogaW50IH1cblxuICBsZXQgbmV3X3N0YXRlICgpID0geyBzdCA9IEFycmF5Lm1ha2UgNTUgMDsgaWR4ID0gMCB9XG4gIGxldCBhc3NpZ24gc3QxIHN0MiA9XG4gICAgQXJyYXkuYmxpdCBzdDIuc3QgMCBzdDEuc3QgMCA1NTtcbiAgICBzdDEuaWR4IDwtIHN0Mi5pZHhcblxuXG4gIGxldCBmdWxsX2luaXQgcyBzZWVkID1cbiAgICBsZXQgY29tYmluZSBhY2N1IHggPSBEaWdlc3Quc3RyaW5nIChhY2N1IF4gSW50LnRvX3N0cmluZyB4KSBpblxuICAgIGxldCBleHRyYWN0IGQgPVxuICAgICAgQ2hhci5jb2RlIGQuWzBdICsgKENoYXIuY29kZSBkLlsxXSBsc2wgOCkgKyAoQ2hhci5jb2RlIGQuWzJdIGxzbCAxNilcbiAgICAgICsgKENoYXIuY29kZSBkLlszXSBsc2wgMjQpXG4gICAgaW5cbiAgICBsZXQgc2VlZCA9IGlmIEFycmF5Lmxlbmd0aCBzZWVkID0gMCB0aGVuIFt8IDAgfF0gZWxzZSBzZWVkIGluXG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggc2VlZCBpblxuICAgIGZvciBpID0gMCB0byA1NCBkb1xuICAgICAgcy5zdC4oaSkgPC0gaTtcbiAgICBkb25lO1xuICAgIGxldCBhY2N1ID0gcmVmIFwieFwiIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0ICsgSW50Lm1heCA1NSBsIGRvXG4gICAgICBsZXQgaiA9IGkgbW9kIDU1IGluXG4gICAgICBsZXQgayA9IGkgbW9kIGwgaW5cbiAgICAgIGFjY3UgOj0gY29tYmluZSAhYWNjdSBzZWVkLihrKTtcbiAgICAgIHMuc3QuKGopIDwtIChzLnN0LihqKSBseG9yIGV4dHJhY3QgIWFjY3UpIGxhbmQgMHgzRkZGRkZGRjsgICgqIFBSIzU1NzUgKilcbiAgICBkb25lO1xuICAgIHMuaWR4IDwtIDBcblxuXG4gIGxldCBtYWtlIHNlZWQgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBmdWxsX2luaXQgcmVzdWx0IHNlZWQ7XG4gICAgcmVzdWx0XG5cblxuICBsZXQgbWFrZV9zZWxmX2luaXQgKCkgPSBtYWtlIChyYW5kb21fc2VlZCAoKSlcblxuICBsZXQgY29weSBzID1cbiAgICBsZXQgcmVzdWx0ID0gbmV3X3N0YXRlICgpIGluXG4gICAgYXNzaWduIHJlc3VsdCBzO1xuICAgIHJlc3VsdFxuXG5cbiAgKCogUmV0dXJucyAzMCByYW5kb20gYml0cyBhcyBhbiBpbnRlZ2VyIDAgPD0geCA8IDEwNzM3NDE4MjQgKilcbiAgbGV0IGJpdHMgcyA9XG4gICAgcy5pZHggPC0gKHMuaWR4ICsgMSkgbW9kIDU1O1xuICAgIGxldCBjdXJ2YWwgPSBzLnN0LihzLmlkeCkgaW5cbiAgICBsZXQgbmV3dmFsID0gcy5zdC4oKHMuaWR4ICsgMjQpIG1vZCA1NSlcbiAgICAgICAgICAgICAgICAgKyAoY3VydmFsIGx4b3IgKChjdXJ2YWwgbHNyIDI1KSBsYW5kIDB4MUYpKSBpblxuICAgIGxldCBuZXd2YWwzMCA9IG5ld3ZhbCBsYW5kIDB4M0ZGRkZGRkYgaW4gICgqIFBSIzU1NzUgKilcbiAgICBzLnN0LihzLmlkeCkgPC0gbmV3dmFsMzA7XG4gICAgbmV3dmFsMzBcblxuXG4gIGxldCByZWMgaW50YXV4IHMgbiA9XG4gICAgbGV0IHIgPSBiaXRzIHMgaW5cbiAgICBsZXQgdiA9IHIgbW9kIG4gaW5cbiAgICBpZiByIC0gdiA+IDB4M0ZGRkZGRkYgLSBuICsgMSB0aGVuIGludGF1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA+IDB4M0ZGRkZGRkYgfHwgYm91bmQgPD0gMFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50XCJcbiAgICBlbHNlIGludGF1eCBzIGJvdW5kXG5cbiAgbGV0IHJlYyBpbnQ2M2F1eCBzIG4gPVxuICAgIGxldCBtYXhfaW50XzMyID0gKDEgbHNsIDMwKSArIDB4M0ZGRkZGRkYgaW4gKCogMHg3RkZGRkZGRiAqKVxuICAgIGxldCBiMSA9IGJpdHMgcyBpblxuICAgIGxldCBiMiA9IGJpdHMgcyBpblxuICAgIGxldCAociwgbWF4X2ludCkgPVxuICAgICAgaWYgbiA8PSBtYXhfaW50XzMyIHRoZW5cbiAgICAgICAgKCogMzEgcmFuZG9tIGJpdHMgb24gYm90aCA2NC1iaXQgT0NhbWwgYW5kIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAxNSBiaXRzIG9mIGIxIGFuZCAxNiBiaXRzIG9mIGIyLiAqKVxuICAgICAgICBsZXQgYnBvcyA9XG4gICAgICAgICAgKCgoYjIgbGFuZCAweDNGRkZDMDAwKSBsc2wgMSkgbG9yIChiMSBsc3IgMTUpKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50XzMyKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgYjMgPSBiaXRzIHMgaW5cbiAgICAgICAgKCogNjIgcmFuZG9tIGJpdHMgb24gNjQtYml0IE9DYW1sOyB1bnJlYWNoYWJsZSBvbiBKYXZhU2NyaXB0LlxuICAgICAgICAgICBVc2UgdXBwZXIgMjAgYml0cyBvZiBiMSBhbmQgMjEgYml0cyBvZiBiMiBhbmQgYjMuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKCgoYjMgbGFuZCAweDNGRkZGRTAwKSBsc2wgMTIpIGxvciAoYjIgbHNyIDkpKSBsc2wgMjApXG4gICAgICAgICAgICBsb3IgKGIxIGxzciAxMClcbiAgICAgICAgaW5cbiAgICAgICAgICAoYnBvcywgbWF4X2ludClcbiAgICBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gbWF4X2ludCAtIG4gKyAxIHRoZW4gaW50NjNhdXggcyBuIGVsc2UgdlxuXG4gIGxldCBmdWxsX2ludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiUmFuZG9tLmZ1bGxfaW50XCJcbiAgICBlbHNlIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB0aGVuXG4gICAgICBpbnQ2M2F1eCBzIGJvdW5kXG4gICAgZWxzZVxuICAgICAgaW50YXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50MzJhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQzMi5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQzMi5zaGlmdF9sZWZ0IChJbnQzMi5vZl9pbnQgKGJpdHMgcyBsYW5kIDEpKSAzMCBpblxuICAgIGxldCByID0gSW50MzIubG9nb3IgYjEgYjIgaW5cbiAgICBsZXQgdiA9IEludDMyLnJlbSByIG4gaW5cbiAgICBpZiBJbnQzMi5zdWIgciB2ID4gSW50MzIuYWRkIChJbnQzMi5zdWIgSW50MzIubWF4X2ludCBuKSAxbFxuICAgIHRoZW4gaW50MzJhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDMyIHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMlwiXG4gICAgZWxzZSBpbnQzMmF1eCBzIGJvdW5kXG5cblxuICBsZXQgcmVjIGludDY0YXV4IHMgbiA9XG4gICAgbGV0IGIxID0gSW50NjQub2ZfaW50IChiaXRzIHMpIGluXG4gICAgbGV0IGIyID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMpKSAzMCBpblxuICAgIGxldCBiMyA9IEludDY0LnNoaWZ0X2xlZnQgKEludDY0Lm9mX2ludCAoYml0cyBzIGxhbmQgNykpIDYwIGluXG4gICAgbGV0IHIgPSBJbnQ2NC5sb2dvciBiMSAoSW50NjQubG9nb3IgYjIgYjMpIGluXG4gICAgbGV0IHYgPSBJbnQ2NC5yZW0gciBuIGluXG4gICAgaWYgSW50NjQuc3ViIHIgdiA+IEludDY0LmFkZCAoSW50NjQuc3ViIEludDY0Lm1heF9pbnQgbikgMUxcbiAgICB0aGVuIGludDY0YXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQ2NCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwTFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50NjRcIlxuICAgIGVsc2UgaW50NjRhdXggcyBib3VuZFxuXG5cbiAgbGV0IG5hdGl2ZWludCA9XG4gICAgaWYgTmF0aXZlaW50LnNpemUgPSAzMlxuICAgIHRoZW4gZnVuIHMgYm91bmQgLT4gTmF0aXZlaW50Lm9mX2ludDMyIChpbnQzMiBzIChOYXRpdmVpbnQudG9faW50MzIgYm91bmQpKVxuICAgIGVsc2UgZnVuIHMgYm91bmQgLT4gSW50NjQudG9fbmF0aXZlaW50IChpbnQ2NCBzIChJbnQ2NC5vZl9uYXRpdmVpbnQgYm91bmQpKVxuXG5cbiAgKCogUmV0dXJucyBhIGZsb2F0IDAgPD0geCA8PSAxIHdpdGggYXQgbW9zdCA2MCBiaXRzIG9mIHByZWNpc2lvbi4gKilcbiAgbGV0IHJhd2Zsb2F0IHMgPVxuICAgIGxldCBzY2FsZSA9IDEwNzM3NDE4MjQuMCAgKCogMl4zMCAqKVxuICAgIGFuZCByMSA9IFN0ZGxpYi5mbG9hdCAoYml0cyBzKVxuICAgIGFuZCByMiA9IFN0ZGxpYi5mbG9hdCAoYml0cyBzKVxuICAgIGluIChyMSAvLiBzY2FsZSArLiByMikgLy4gc2NhbGVcblxuXG4gIGxldCBmbG9hdCBzIGJvdW5kID0gcmF3ZmxvYXQgcyAqLiBib3VuZFxuXG4gIGxldCBib29sIHMgPSAoYml0cyBzIGxhbmQgMSA9IDApXG5cbiAgbGV0IGJpdHMzMiBzID1cbiAgICBsZXQgYjEgPSBJbnQzMi4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSAxNCkgaW4gICgqIDE2IGJpdHMgKilcbiAgICBsZXQgYjIgPSBJbnQzMi4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSAxNCkgaW4gICgqIDE2IGJpdHMgKilcbiAgICBJbnQzMi4obG9nb3IgYjEgKHNoaWZ0X2xlZnQgYjIgMTYpKVxuXG4gIGxldCBiaXRzNjQgcyA9XG4gICAgbGV0IGIxID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOSkgaW4gICgqIDIxIGJpdHMgKilcbiAgICBsZXQgYjIgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMyA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDgpIGluICAoKiAyMiBiaXRzICopXG4gICAgSW50NjQuKGxvZ29yIGIxIChsb2dvciAoc2hpZnRfbGVmdCBiMiAyMSkgKHNoaWZ0X2xlZnQgYjMgNDIpKSlcblxuICBsZXQgbmF0aXZlYml0cyA9XG4gICAgaWYgTmF0aXZlaW50LnNpemUgPSAzMlxuICAgIHRoZW4gZnVuIHMgLT4gTmF0aXZlaW50Lm9mX2ludDMyIChiaXRzMzIgcylcbiAgICBlbHNlIGZ1biBzIC0+IEludDY0LnRvX25hdGl2ZWludCAoYml0czY0IHMpXG5cbmVuZFxuXG4oKiBUaGlzIGlzIHRoZSBzdGF0ZSB5b3UgZ2V0IHdpdGggW2luaXQgMjcxODI4MThdIGFuZCB0aGVuIGFwcGx5aW5nXG4gICB0aGUgXCJsYW5kIDB4M0ZGRkZGRkZcIiBmaWx0ZXIgdG8gdGhlbS4gIFNlZSAjNTU3NSwgIzU3OTMsICM1OTc3LiAqKVxubGV0IGRlZmF1bHQgPSB7XG4gIFN0YXRlLnN0ID0gW3xcbiAgICAgIDB4M2FlMjUyMmI7IDB4MWQ4ZDQ2MzQ7IDB4MTViNGZhZDA7IDB4MThiMTRhY2U7IDB4MTJmOGEzYzQ7IDB4M2IwODZjNDc7XG4gICAgICAweDE2ZDQ2N2Q2OyAweDEwMWQ5MWM3OyAweDMyMWRmMTc3OyAweDAxNzZjMTkzOyAweDFmZjcyYmYxOyAweDFlODg5MTA5O1xuICAgICAgMHgwYjQ2NGIxODsgMHgyYjg2Yjk3YzsgMHgwODkxZGE0ODsgMHgwMzEzNzQ2MzsgMHgwODVhYzVhMTsgMHgxNWQ2MWYyZjtcbiAgICAgIDB4M2JjZWQzNTk7IDB4MjljMWMxMzI7IDB4M2E4Njc2NmU7IDB4MzY2ZDhjODY7IDB4MWY1YjYyMjI7IDB4M2NlMWI1OWY7XG4gICAgICAweDJlYmY3OGUxOyAweDI3Y2QxYjg2OyAweDI1OGYzZGMzOyAweDM4OWE4MTk0OyAweDAyZTRjNDRjOyAweDE4YzQzZjdkO1xuICAgICAgMHgwZjZlNTM0ZjsgMHgxZTdkZjM1OTsgMHgwNTVkMGI3ZTsgMHgxMGU4NGU3ZTsgMHgxMjYxOThlNDsgMHgwZTc3MjJjYjtcbiAgICAgIDB4MWNiZWRlMjg7IDB4MzM5MWI5NjQ7IDB4M2Q0MGU5MmE7IDB4MGM1OTkzM2Q7IDB4MGI4Y2QwYjc7IDB4MjRlZmZmMWM7XG4gICAgICAweDI4MDNmZGFhOyAweDA4ZWJjNzJlOyAweDBmNTIyZTMyOyAweDA1Mzk4ZWRjOyAweDIxNDRhMDRjOyAweDBhZWYzY2JkO1xuICAgICAgMHgwMWFkNDcxOTsgMHgzNWI5M2NkNjsgMHgyYTU1OWQ0ZjsgMHgxZTZmZDc2ODsgMHgyNmUyN2YzNjsgMHgxODZmMThjMztcbiAgICAgIDB4MmZiZjk2N2E7XG4gICAgfF07XG4gIFN0YXRlLmlkeCA9IDA7XG59XG5cbmxldCBiaXRzICgpID0gU3RhdGUuYml0cyBkZWZhdWx0XG5sZXQgaW50IGJvdW5kID0gU3RhdGUuaW50IGRlZmF1bHQgYm91bmRcbmxldCBmdWxsX2ludCBib3VuZCA9IFN0YXRlLmZ1bGxfaW50IGRlZmF1bHQgYm91bmRcbmxldCBpbnQzMiBib3VuZCA9IFN0YXRlLmludDMyIGRlZmF1bHQgYm91bmRcbmxldCBuYXRpdmVpbnQgYm91bmQgPSBTdGF0ZS5uYXRpdmVpbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDY0IGJvdW5kID0gU3RhdGUuaW50NjQgZGVmYXVsdCBib3VuZFxubGV0IGZsb2F0IHNjYWxlID0gU3RhdGUuZmxvYXQgZGVmYXVsdCBzY2FsZVxubGV0IGJvb2wgKCkgPSBTdGF0ZS5ib29sIGRlZmF1bHRcbmxldCBiaXRzMzIgKCkgPSBTdGF0ZS5iaXRzMzIgZGVmYXVsdFxubGV0IGJpdHM2NCAoKSA9IFN0YXRlLmJpdHM2NCBkZWZhdWx0XG5sZXQgbmF0aXZlYml0cyAoKSA9IFN0YXRlLm5hdGl2ZWJpdHMgZGVmYXVsdFxuXG5sZXQgZnVsbF9pbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBzZWVkXG5sZXQgaW5pdCBzZWVkID0gU3RhdGUuZnVsbF9pbml0IGRlZmF1bHQgW3wgc2VlZCB8XVxubGV0IHNlbGZfaW5pdCAoKSA9IGZ1bGxfaW5pdCAocmFuZG9tX3NlZWQoKSlcblxuKCogTWFuaXB1bGF0aW5nIHRoZSBjdXJyZW50IHN0YXRlLiAqKVxuXG5sZXQgZ2V0X3N0YXRlICgpID0gU3RhdGUuY29weSBkZWZhdWx0XG5sZXQgc2V0X3N0YXRlIHMgPSBTdGF0ZS5hc3NpZ24gZGVmYXVsdCBzXG5cbigqKioqKioqKioqKioqKioqKioqKlxuXG4oKiBUZXN0IGZ1bmN0aW9ucy4gIE5vdCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeS5cbiAgIFRoZSBbY2hpc3F1YXJlXSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggbiA+IDEwci5cbiAgIEl0IHJldHVybnMgYSB0cmlwbGUgKGxvdywgYWN0dWFsLCBoaWdoKS5cbiAgIElmIGxvdyA8PSBhY3R1YWwgPD0gaGlnaCwgdGhlIFtnXSBmdW5jdGlvbiBwYXNzZWQgdGhlIHRlc3QsXG4gICBvdGhlcndpc2UgaXQgZmFpbGVkLlxuXG4gIFNvbWUgcmVzdWx0czpcblxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCA1MDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyOTk3OTI2NDM7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMTQxNDIxMzY7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZiAxMDI0OyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMDsgY2hpc3F1YXJlIGRpZmYgMTAwMDAwIDEwMFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDI0OyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuaW5pdCAxNDE0MjEzNjsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDI5OTc5MjY0MzsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG4tIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk5Ny41LCAxMDYzLjI0NTU1MzIwMzM2NzU0KVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODkuNzQwMDAwMDAwMDA1MjM4NywgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg0ODU4LjU3ODY0Mzc2MjY5LCA1MDQ1LjUsIDUxNDEuNDIxMzU2MjM3MzEpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPVxuKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk0NC44MDU5OTk5OTk5ODIzMDUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAxOS4xOTc0NDAwMDAwMDM1NSwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1OS4zMTc3NjAwMDAwMDUzNiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAzOS45ODQ2Mzk5OTk5OTUxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1NC4zODIwNzk5OTk5OTU3NywgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA5MC4wOTYwMDAwMDAwMDUsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA3Ni43ODcyMDAwMDAwMDYxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4xNzYwMDAwMDAwMDY3NTIxLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODUuMjE2MDAwMDAwMDAwMzQ5MiwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDgwLjYyMjAwMDAwMDAwMzAyNjgsIDEyMC4pXG5cbiopXG5cbigqIFJldHVybiB0aGUgc3VtIG9mIHRoZSBzcXVhcmVzIG9mIHZbaTAsaTFbICopXG5sZXQgcmVjIHN1bXNxIHYgaTAgaTEgPVxuICBpZiBpMCA+PSBpMSB0aGVuIDAuMFxuICBlbHNlIGlmIGkxID0gaTAgKyAxIHRoZW4gU3RkbGliLmZsb2F0IHYuKGkwKSAqLiBTdGRsaWIuZmxvYXQgdi4oaTApXG4gIGVsc2Ugc3Vtc3EgdiBpMCAoKGkwK2kxKS8yKSArLiBzdW1zcSB2ICgoaTAraTEpLzIpIGkxXG5cblxubGV0IGNoaXNxdWFyZSBnIG4gciA9XG4gIGlmIG4gPD0gMTAgKiByIHRoZW4gaW52YWxpZF9hcmcgXCJjaGlzcXVhcmVcIjtcbiAgbGV0IGYgPSBBcnJheS5tYWtlIHIgMCBpblxuICBmb3IgaSA9IDEgdG8gbiBkb1xuICAgIGxldCB0ID0gZyByIGluXG4gICAgZi4odCkgPC0gZi4odCkgKyAxXG4gIGRvbmU7XG4gIGxldCB0ID0gc3Vtc3EgZiAwIHJcbiAgYW5kIHIgPSBTdGRsaWIuZmxvYXQgclxuICBhbmQgbiA9IFN0ZGxpYi5mbG9hdCBuIGluXG4gIGxldCBzciA9IDIuMCAqLiBzcXJ0IHIgaW5cbiAgKHIgLS4gc3IsICAgKHIgKi4gdCAvLiBuKSAtLiBuLCAgIHIgKy4gc3IpXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBsaW5lYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb20gbnVtYmVycy5cbiopXG5sZXQgc3QgPSByZWYgMFxubGV0IGluaXRfZGlmZiByID0gc3QgOj0gaW50IHJcbmxldCBkaWZmIHIgPVxuICBsZXQgeDEgPSAhc3RcbiAgYW5kIHgyID0gaW50IHJcbiAgaW5cbiAgc3QgOj0geDI7XG4gIGlmIHgxID49IHgyIHRoZW5cbiAgICB4MSAtIHgyXG4gIGVsc2VcbiAgICByICsgeDEgLSB4MlxuXG5cbmxldCBzdDEgPSByZWYgMFxuYW5kIHN0MiA9IHJlZiAwXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBxdWFkcmF0aWMgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb21cbiAgIG51bWJlcnMuXG4qKVxubGV0IGluaXRfZGlmZjIgciA9IHN0MSA6PSBpbnQgcjsgc3QyIDo9IGludCByXG5sZXQgZGlmZjIgciA9XG4gIGxldCB4MSA9ICFzdDFcbiAgYW5kIHgyID0gIXN0MlxuICBhbmQgeDMgPSBpbnQgclxuICBpblxuICBzdDEgOj0geDI7XG4gIHN0MiA6PSB4MztcbiAgKHgzIC0geDIgLSB4MiArIHgxICsgMipyKSBtb2QgclxuXG5cbioqKioqKioqKioqKioqKioqKioqKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0IHJlYyBpbml0X3RhaWxyZWNfYXV4IGFjYyBpIG4gZiA9XG4gIGlmIGkgPj0gbiB0aGVuIGFjY1xuICBlbHNlIGluaXRfdGFpbHJlY19hdXggKGYgaSA6OiBhY2MpIChpKzEpIG4gZlxuXG5sZXQgcmVjIGluaXRfYXV4IGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gW11cbiAgZWxzZVxuICAgIGxldCByID0gZiBpIGluXG4gICAgciA6OiBpbml0X2F1eCAoaSsxKSBuIGZcblxubGV0IHJldl9pbml0X3RocmVzaG9sZCA9XG4gIG1hdGNoIFN5cy5iYWNrZW5kX3R5cGUgd2l0aFxuICB8IFN5cy5OYXRpdmUgfCBTeXMuQnl0ZWNvZGUgLT4gMTBfMDAwXG4gICgqIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgdGhlIHN0YWNrLCBiZXR0ZXIgYmUgc2FmZSBhbmQgYXNzdW1lIGl0J3NcbiAgICAgc21hbGwuICopXG4gIHwgU3lzLk90aGVyIF8gLT4gNTBcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGlmIGxlbiA+IHJldl9pbml0X3RocmVzaG9sZCB0aGVuIHJldiAoaW5pdF90YWlscmVjX2F1eCBbXSAwIGxlbiBmKVxuICBlbHNlIGluaXRfYXV4IDAgbGVuIGZcblxubGV0IHJlYyBmbGF0dGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGw6OnIgLT4gbCBAIGZsYXR0ZW4gclxuXG5sZXQgY29uY2F0ID0gZmxhdHRlblxuXG5sZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGE6OmwgLT4gbGV0IHIgPSBmIGEgaW4gciA6OiBtYXAgZiBsXG5cbmxldCByZWMgbWFwaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgaSBhIGluIHIgOjogbWFwaSAoaSArIDEpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldCByZWMgbWFwMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBsZXQgciA9IGYgYTEgYTIgaW4gciA6OiBtYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX2FsbCBwID1cbiAgbGV0IHJlYyBmaW5kIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2N1XG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIGZpbmQgKHggOjogYWNjdSkgbCBlbHNlIGZpbmQgYWNjdSBsIGluXG4gIGZpbmQgW11cblxubGV0IGZpbHRlciA9IGZpbmRfYWxsXG5cbmxldCBmaWx0ZXJpIHAgbCA9XG4gIGxldCByZWMgYXV4IGkgYWNjID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByZXYgYWNjXG4gIHwgeDo6bCAtPiBhdXggKGkgKyAxKSAoaWYgcCBpIHggdGhlbiB4OjphY2MgZWxzZSBhY2MpIGxcbiAgaW5cbiAgYXV4IDAgW10gbFxuXG5sZXQgZmlsdGVyX21hcCBmID1cbiAgbGV0IHJlYyBhdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXYgYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBhdXggYWNjdSBsXG4gICAgICAgIHwgU29tZSB2IC0+IGF1eCAodiA6OiBhY2N1KSBsXG4gIGluXG4gIGF1eCBbXVxuXG5sZXQgY29uY2F0X21hcCBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXYgYWNjXG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICBsZXQgeHMgPSBmIHggaW5cbiAgICAgICBhdXggZiAocmV2X2FwcGVuZCB4cyBhY2MpIGxcbiAgaW4gYXV4IGYgW10gbFxuXG5sZXQgZm9sZF9sZWZ0X21hcCBmIGFjY3UgbCA9XG4gIGxldCByZWMgYXV4IGFjY3UgbF9hY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGFjY3UsIHJldiBsX2FjY3VcbiAgICB8IHggOjogbCAtPlxuICAgICAgICBsZXQgYWNjdSwgeCA9IGYgYWNjdSB4IGluXG4gICAgICAgIGF1eCBhY2N1ICh4IDo6IGxfYWNjdSkgbCBpblxuICBhdXggYWNjdSBbXSBsXG5cbmxldCBwYXJ0aXRpb24gcCBsID1cbiAgbGV0IHJlYyBwYXJ0IHllcyBubyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiB5ZXMsIHJldiBubylcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gcGFydCAoeCA6OiB5ZXMpIG5vIGwgZWxzZSBwYXJ0IHllcyAoeCA6OiBubykgbCBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXAgcCBsID1cbiAgbGV0IHJlYyBwYXJ0IGxlZnQgcmlnaHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgbGVmdCwgcmV2IHJpZ2h0KVxuICB8IHggOjogbCAtPlxuICAgICBiZWdpbiBtYXRjaCBwIHggd2l0aFxuICAgICAgIHwgRWl0aGVyLkxlZnQgdiAtPiBwYXJ0ICh2IDo6IGxlZnQpIHJpZ2h0IGxcbiAgICAgICB8IEVpdGhlci5SaWdodCB2IC0+IHBhcnQgbGVmdCAodiA6OiByaWdodCkgbFxuICAgICBlbmRcbiAgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCByZWMgc3BsaXQgPSBmdW5jdGlvblxuICAgIFtdIC0+IChbXSwgW10pXG4gIHwgKHgseSk6OmwgLT5cbiAgICAgIGxldCAocngsIHJ5KSA9IHNwbGl0IGwgaW4gKHg6OnJ4LCB5OjpyeSlcblxubGV0IHJlYyBjb21iaW5lIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiAoYTEsIGEyKSA6OiBjb21iaW5lIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5jb21iaW5lXCJcblxuKCoqIHNvcnRpbmcgKilcblxubGV0IHJlYyBtZXJnZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBsMiAtPiBsMlxuICB8IGwxLCBbXSAtPiBsMVxuICB8IGgxIDo6IHQxLCBoMiA6OiB0MiAtPlxuICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgIHRoZW4gaDEgOjogbWVyZ2UgY21wIHQxIGwyXG4gICAgICBlbHNlIGgyIDo6IG1lcmdlIGNtcCBsMSB0MlxuXG5cbmxldCBzdGFibGVfc29ydCBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZSB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlIGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyByZXZfbWVyZ2VfcmV2IGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBpZiBjbXAgaDEgaDIgPiAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlX3JldiB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlX3JldiBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV0gaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGlmIGNtcCB4MSB4MiA8PSAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA8PSAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA8PSAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV0gaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGlmIGNtcCB4MSB4MiA+IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzID4gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCBzb3J0ID0gc3RhYmxlX3NvcnRcbmxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4oKiBOb3RlOiBvbiBhIGxpc3Qgb2YgbGVuZ3RoIGJldHdlZW4gYWJvdXQgMTAwMDAwIChkZXBlbmRpbmcgb24gdGhlIG1pbm9yXG4gICBoZWFwIHNpemUgYW5kIHRoZSB0eXBlIG9mIHRoZSBsaXN0KSBhbmQgU3lzLm1heF9hcnJheV9zaXplLCBpdCBpc1xuICAgYWN0dWFsbHkgZmFzdGVyIHRvIHVzZSB0aGUgZm9sbG93aW5nLCBidXQgaXQgbWlnaHQgYWxzbyB1c2UgbW9yZSBtZW1vcnlcbiAgIGJlY2F1c2UgdGhlIGFyZ3VtZW50IGxpc3QgY2Fubm90IGJlIGRlYWxsb2NhdGVkIGluY3JlbWVudGFsbHkuXG5cbiAgIEFsc28sIHRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIGluIHRoaXMgY29kZSBvciBpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIG9ial90cnVuY2F0ZS5cblxuZXh0ZXJuYWwgb2JqX3RydW5jYXRlIDogJ2EgYXJyYXkgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3RydW5jYXRlXCJcblxubGV0IGFycmF5X3RvX2xpc3RfaW5fcGxhY2UgYSA9XG4gIGxldCBsID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGFjY3UgbiBwID1cbiAgICBpZiBwIDw9IDAgdGhlbiBhY2N1IGVsc2UgYmVnaW5cbiAgICAgIGlmIHAgPSBuIHRoZW4gYmVnaW5cbiAgICAgICAgb2JqX3RydW5jYXRlIGEgcDtcbiAgICAgICAgbG9vcCAoYS4ocC0xKSA6OiBhY2N1KSAobi0xMDAwKSAocC0xKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbG9vcCAoYS4ocC0xKSA6OiBhY2N1KSBuIChwLTEpXG4gICAgICBlbmRcbiAgICBlbmRcbiAgaW5cbiAgbG9vcCBbXSAobC0xMDAwKSBsXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgQXJyYXkuc3RhYmxlX3NvcnQgY21wIGE7XG4gIGFycmF5X3RvX2xpc3RfaW5fcGxhY2UgYVxuXG4qKVxuXG5cbigqKiBzb3J0aW5nICsgcmVtb3ZpbmcgZHVwbGljYXRlcyAqKVxuXG5sZXQgc29ydF91bmlxIGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlIHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjIDwgMFxuICAgICAgICB0aGVuIHJldl9tZXJnZSB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlIGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyByZXZfbWVyZ2VfcmV2IGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZV9yZXYgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPiAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlX3JldiB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlX3JldiBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDFdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4Ml0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDNdIGVsc2UgW3gzOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDFdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4Ml0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDNdIGVsc2UgW3gzOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RocyBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8sIFtdIC0+IDFcbiAgfCBfIDo6IGwxLCBfIDo6IGwyIC0+IGNvbXBhcmVfbGVuZ3RocyBsMSBsMlxuOztcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+XG4gICAgaWYgbiA9IDAgdGhlbiAwIGVsc2VcbiAgICAgIGlmIG4gPiAwIHRoZW4gLTEgZWxzZSAxXG4gIHwgXyA6OiBsIC0+XG4gICAgaWYgbiA8PSAwIHRoZW4gMSBlbHNlXG4gICAgICBjb21wYXJlX2xlbmd0aF93aXRoIGwgKG4tMSlcbjs7XG5cbigqKiB7MSBDb21wYXJpc29ufSAqKVxuXG4oKiBOb3RlOiB3ZSBhcmUgKm5vdCogc2hvcnRjdXR0aW5nIHRoZSBsaXN0IGJ5IHVzaW5nXG4gICBbTGlzdC5jb21wYXJlX2xlbmd0aHNdIGZpcnN0OyB0aGlzIG1heSBiZSBzbG93ZXIgb24gbG9uZyBsaXN0c1xuICAgaW1tZWRpYXRlbHkgc3RhcnQgd2l0aCBkaXN0aW5jdCBlbGVtZW50cy4gSXQgaXMgYWxzbyBpbmNvcnJlY3QgZm9yXG4gICBbY29tcGFyZV0gYmVsb3csIGFuZCBpdCBpcyBiZXR0ZXIgKHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSkgdG9cbiAgIHVzZSB0aGUgc2FtZSBhcHByb2FjaCBmb3IgYm90aCBmdW5jdGlvbnMuICopXG5sZXQgcmVjIGVxdWFsIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfOjpfIHwgXzo6XywgW10gLT4gZmFsc2VcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPiBlcSBhMSBhMiAmJiBlcXVhbCBlcSBsMSBsMlxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfOjpfIC0+IC0xXG4gIHwgXzo6XywgW10gLT4gMVxuICB8IGExOjpsMSwgYTI6OmwyIC0+XG4gICAgbGV0IGMgPSBjbXAgYTEgYTIgaW5cbiAgICBpZiBjIDw+IDAgdGhlbiBjXG4gICAgZWxzZSBjb21wYXJlIGNtcCBsMSBsMlxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGwgPVxuICBsZXQgcmVjIGF1eCBsICgpID0gbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTZXEuTmlsXG4gICAgfCB4IDo6IHRhaWwgLT4gU2VxLkNvbnMgKHgsIGF1eCB0YWlsKVxuICBpblxuICBhdXggbFxuXG5sZXQgb2Zfc2VxIHNlcSA9XG4gIGxldCByZWMgZGlyZWN0IGRlcHRoIHNlcSA6IF8gbGlzdCA9XG4gICAgaWYgZGVwdGg9MFxuICAgIHRoZW5cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiB4OjphY2MpIFtdIHNlcVxuICAgICAgfD4gcmV2ICgqIHRhaWxyZWMgKilcbiAgICBlbHNlIG1hdGNoIHNlcSgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgbmV4dCkgLT4geCA6OiBkaXJlY3QgKGRlcHRoLTEpIG5leHRcbiAgaW5cbiAgZGlyZWN0IDUwMCBzZXFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogT3BlcmF0aW9ucyBvbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbnMgb2YgdmFsdWVzICopXG5cbnR5cGUgdFxuXG50eXBlIHJhd19kYXRhID0gbmF0aXZlaW50XG5cbmV4dGVybmFsIHJlcHIgOiAnYSAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgb2JqIDogdCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG1hZ2ljIDogJ2EgLT4gJ2IgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBpc19pbnQgOiB0IC0+IGJvb2wgPSBcIiVvYmpfaXNfaW50XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGlzX2Jsb2NrIGEgPSBub3QgKGlzX2ludCBhKVxuZXh0ZXJuYWwgdGFnIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3RhZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzZXRfdGFnIDogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfc2V0X3RhZ1wiXG5leHRlcm5hbCBzaXplIDogdCAtPiBpbnQgPSBcIiVvYmpfc2l6ZVwiXG5leHRlcm5hbCByZWFjaGFibGVfd29yZHMgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzXCJcbmV4dGVybmFsIGZpZWxkIDogdCAtPiBpbnQgLT4gdCA9IFwiJW9ial9maWVsZFwiXG5leHRlcm5hbCBzZXRfZmllbGQgOiB0IC0+IGludCAtPiB0IC0+IHVuaXQgPSBcIiVvYmpfc2V0X2ZpZWxkXCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRhcnJheV9nZXRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9zZXQgOlxuICAgIGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcImNhbWxfZmxvYXRhcnJheV9zZXRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gZG91YmxlX2ZpZWxkIHggaSA9IGZsb2F0YXJyYXlfZ2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGlcbmxldCBbQGlubGluZSBhbHdheXNdIHNldF9kb3VibGVfZmllbGQgeCBpIHYgPVxuICBmbG9hdGFycmF5X3NldCAob2JqIHggOiBmbG9hdGFycmF5KSBpIHZcbmV4dGVybmFsIHJhd19maWVsZCA6IHQgLT4gaW50IC0+IHJhd19kYXRhID0gXCJjYW1sX29ial9yYXdfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X3Jhd19maWVsZCA6IHQgLT4gaW50IC0+IHJhd19kYXRhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX29ial9zZXRfcmF3X2ZpZWxkXCJcblxuZXh0ZXJuYWwgbmV3X2Jsb2NrIDogaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX29ial9ibG9ja1wiXG5leHRlcm5hbCBkdXAgOiB0IC0+IHQgPSBcImNhbWxfb2JqX2R1cFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3RydW5jYXRlXCJcbmV4dGVybmFsIGFkZF9vZmZzZXQgOiB0IC0+IEludDMyLnQgLT4gdCA9IFwiY2FtbF9vYmpfYWRkX29mZnNldFwiXG5leHRlcm5hbCB3aXRoX3RhZyA6IGludCAtPiB0IC0+IHQgPSBcImNhbWxfb2JqX3dpdGhfdGFnXCJcblxubGV0IGZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAwXG5sZXQgbGFzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMjQ1XG5cbmxldCBsYXp5X3RhZyA9IDI0NlxubGV0IGNsb3N1cmVfdGFnID0gMjQ3XG5sZXQgb2JqZWN0X3RhZyA9IDI0OFxubGV0IGluZml4X3RhZyA9IDI0OVxubGV0IGZvcndhcmRfdGFnID0gMjUwXG5cbmxldCBub19zY2FuX3RhZyA9IDI1MVxuXG5sZXQgYWJzdHJhY3RfdGFnID0gMjUxXG5sZXQgc3RyaW5nX3RhZyA9IDI1MlxubGV0IGRvdWJsZV90YWcgPSAyNTNcbmxldCBkb3VibGVfYXJyYXlfdGFnID0gMjU0XG5sZXQgY3VzdG9tX3RhZyA9IDI1NVxubGV0IGZpbmFsX3RhZyA9IGN1c3RvbV90YWdcblxuXG5sZXQgaW50X3RhZyA9IDEwMDBcbmxldCBvdXRfb2ZfaGVhcF90YWcgPSAxMDAxXG5sZXQgdW5hbGlnbmVkX3RhZyA9IDEwMDJcblxubW9kdWxlIENsb3N1cmUgPSBzdHJ1Y3RcbiAgdHlwZSBpbmZvID0ge1xuICAgIGFyaXR5OiBpbnQ7XG4gICAgc3RhcnRfZW52OiBpbnQ7XG4gIH1cblxuICBsZXQgaW5mb19vZl9yYXcgKGluZm8gOiBuYXRpdmVpbnQpID1cbiAgICBsZXQgb3BlbiBOYXRpdmVpbnQgaW5cbiAgICBsZXQgYXJpdHkgPVxuICAgICAgKCogc2lnbmVkOiBuZWdhdGl2ZSBmb3IgdHVwbGVkIGZ1bmN0aW9ucyAqKVxuICAgICAgaWYgU3lzLndvcmRfc2l6ZSA9IDY0IHRoZW5cbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDU2KVxuICAgICAgZWxzZVxuICAgICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0IGluZm8gMjQpXG4gICAgaW5cbiAgICBsZXQgc3RhcnRfZW52ID1cbiAgICAgICgqIHN0YXJ0X2VudiBpcyB1bnNpZ25lZCwgYnV0IHdlIGtub3cgaXQgY2FuIGFsd2F5cyBmaXQgYW4gT0NhbWxcbiAgICAgICAgIGludGVnZXIgc28gd2UgdXNlIFt0b19pbnRdIGluc3RlYWQgb2YgW3Vuc2lnbmVkX3RvX2ludF0uICopXG4gICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKHNoaWZ0X2xlZnQgaW5mbyA4KSA5KSBpblxuICAgIHsgYXJpdHk7IHN0YXJ0X2VudiB9XG5cbiAgKCogbm90ZTogd2UgZXhwZWN0IGEgY2xvc3VyZSwgbm90IGFuIGluZml4IHBvaW50ZXIgKilcbiAgbGV0IGluZm8gKG9iaiA6IHQpID1cbiAgICBhc3NlcnQgKHRhZyBvYmogPSBjbG9zdXJlX3RhZyk7XG4gICAgaW5mb19vZl9yYXcgKHJhd19maWVsZCBvYmogMSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5zaW9uX2NvbnN0cnVjdG9yID1cbnN0cnVjdFxuICB0eXBlIHQgPSBleHRlbnNpb25fY29uc3RydWN0b3JcbiAgbGV0IG9mX3ZhbCB4ID1cbiAgICBsZXQgeCA9IHJlcHIgeCBpblxuICAgIGxldCBzbG90ID1cbiAgICAgIGlmIChpc19ibG9jayB4KSAmJiAodGFnIHgpIDw+IG9iamVjdF90YWcgJiYgKHNpemUgeCkgPj0gMSB0aGVuIGZpZWxkIHggMFxuICAgICAgZWxzZSB4XG4gICAgaW5cbiAgICBsZXQgbmFtZSA9XG4gICAgICBpZiAoaXNfYmxvY2sgc2xvdCkgJiYgKHRhZyBzbG90KSA9IG9iamVjdF90YWcgdGhlbiBmaWVsZCBzbG90IDBcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcbiAgICBpblxuICAgICAgaWYgKHRhZyBuYW1lKSA9IHN0cmluZ190YWcgdGhlbiAob2JqIHNsb3QgOiB0KVxuICAgICAgZWxzZSBpbnZhbGlkX2FyZyBcIk9iai5leHRlbnNpb25fY29uc3RydWN0b3JcIlxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIG5hbWUgKHNsb3QgOiB0KSA9XG4gICAgKG9iaiAoZmllbGQgKHJlcHIgc2xvdCkgMCkgOiBzdHJpbmcpXG5cbiAgbGV0IFtAaW5saW5lIGFsd2F5c10gaWQgKHNsb3QgOiB0KSA9XG4gICAgKG9iaiAoZmllbGQgKHJlcHIgc2xvdCkgMSkgOiBpbnQpXG5lbmRcblxubGV0IGV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5vZl92YWxcbmxldCBleHRlbnNpb25fbmFtZSA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5uYW1lXG5sZXQgZXh0ZW5zaW9uX2lkID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLmlkXG5cbm1vZHVsZSBFcGhlbWVyb24gPSBzdHJ1Y3RcbiAgdHlwZSBvYmpfdCA9IHRcblxuICB0eXBlIHQgKCoqIGVwaGVtZXJvbiAqKVxuXG4gICAoKiogVG8gY2hhbmdlIGluIHN5bmMgd2l0aCB3ZWFrLmggKilcbiAgbGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuICBsZXQgbWF4X2VwaGVfbGVuZ3RoID0gU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2VwaGVfY3JlYXRlXCI7O1xuICBsZXQgY3JlYXRlIGwgPVxuICAgIGlmIG5vdCAoMCA8PSBsICYmIGwgPD0gbWF4X2VwaGVfbGVuZ3RoKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIk9iai5FcGhlbWVyb24uY3JlYXRlXCI7XG4gICAgY3JlYXRlIGxcblxuICBsZXQgbGVuZ3RoIHggPSBzaXplKHJlcHIgeCkgLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGxldCByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gbXNnID1cbiAgICBpZiBub3QgKDAgPD0gbyAmJiBvIDwgbGVuZ3RoIGUpIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIG1zZ1xuXG4gIGV4dGVybmFsIGdldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9rZXlcIlxuICBsZXQgZ2V0X2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleVwiO1xuICAgIGdldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgZ2V0X2tleV9jb3B5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5X2NvcHlcIlxuICBsZXQgZ2V0X2tleV9jb3B5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5nZXRfa2V5X2NvcHlcIjtcbiAgICBnZXRfa2V5X2NvcHkgZSBvXG5cbiAgZXh0ZXJuYWwgc2V0X2tleTogdCAtPiBpbnQgLT4gb2JqX3QgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3NldF9rZXlcIlxuICBsZXQgc2V0X2tleSBlIG8geCA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5zZXRfa2V5XCI7XG4gICAgc2V0X2tleSBlIG8geFxuXG4gIGV4dGVybmFsIHVuc2V0X2tleTogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2tleVwiXG4gIGxldCB1bnNldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLnVuc2V0X2tleVwiO1xuICAgIHVuc2V0X2tleSBlIG9cblxuICBleHRlcm5hbCBjaGVja19rZXk6IHQgLT4gaW50IC0+IGJvb2wgPSBcImNhbWxfZXBoZV9jaGVja19rZXlcIlxuICBsZXQgY2hlY2tfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5jaGVja19rZXlcIjtcbiAgICBjaGVja19rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgYmxpdF9rZXkgOiB0IC0+IGludCAtPiB0IC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgID0gXCJjYW1sX2VwaGVfYmxpdF9rZXlcIlxuXG4gIGxldCBibGl0X2tleSBlMSBvMSBlMiBvMiBsID1cbiAgICBpZiBsIDwgMCB8fCBvMSA8IDAgfHwgbzEgPiBsZW5ndGggZTEgLSBsXG4gICAgICAgfHwgbzIgPCAwIHx8IG8yID4gbGVuZ3RoIGUyIC0gbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmJsaXRfa2V5XCJcbiAgICBlbHNlIGlmIGwgPD4gMCB0aGVuIGJsaXRfa2V5IGUxIG8xIGUyIG8yIGxcblxuICBleHRlcm5hbCBnZXRfZGF0YTogdCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfZGF0YVwiXG4gIGV4dGVybmFsIGdldF9kYXRhX2NvcHk6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFfY29weVwiXG4gIGV4dGVybmFsIHNldF9kYXRhOiB0IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfZGF0YVwiXG4gIGV4dGVybmFsIHVuc2V0X2RhdGE6IHQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2RhdGFcIlxuICBleHRlcm5hbCBjaGVja19kYXRhOiB0IC0+IGJvb2wgPSBcImNhbWxfZXBoZV9jaGVja19kYXRhXCJcbiAgZXh0ZXJuYWwgYmxpdF9kYXRhIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9ibGl0X2RhdGFcIlxuXG5lbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSW50ZXJuYWxzIG9mIGZvcmNpbmcgbGF6eSB2YWx1ZXMuICopXG5cbnR5cGUgJ2EgdCA9ICdhIGxhenlfdFxuXG5leGNlcHRpb24gVW5kZWZpbmVkXG5cbmxldCByYWlzZV91bmRlZmluZWQgPSBPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIFVuZGVmaW5lZClcblxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogT2JqLnQgLT4gT2JqLnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfbWFrZV9mb3J3YXJkXCJcblxuKCogQXNzdW1lIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgbGF6eSAqKVxubGV0IGZvcmNlX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgdHJ5XG4gICAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgICBtYWtlX2ZvcndhcmQgKE9iai5yZXByIGJsaykgKE9iai5yZXByIHJlc3VsdCk7XG4gICAgcmVzdWx0XG4gIHdpdGggZSAtPlxuICAgIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCAoT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBlKSk7XG4gICAgcmFpc2UgZVxuXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV92YWxfbGF6eV9ibG9jayAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IGNsb3N1cmUgPSAoT2JqLm9iaiAoT2JqLmZpZWxkIChPYmoucmVwciBibGspIDApIDogdW5pdCAtPiAnYXJnKSBpblxuICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgcmFpc2VfdW5kZWZpbmVkO1xuICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICBtYWtlX2ZvcndhcmQgKE9iai5yZXByIGJsaykgKE9iai5yZXByIHJlc3VsdCk7XG4gIHJlc3VsdFxuXG5cbigqIFtmb3JjZV0gaXMgbm90IHVzZWQsIHNpbmNlIFtMYXp5LmZvcmNlXSBpcyBkZWNsYXJlZCBhcyBhIHByaW1pdGl2ZVxuICAgd2hvc2UgY29kZSBpbmxpbmVzIHRoZSB0YWcgdGVzdHMgb2YgaXRzIGFyZ3VtZW50LCBleGNlcHQgd2hlbiBhZmxcbiAgIGluc3RydW1lbnRhdGlvbiBpcyB0dXJuZWQgb24uICopXG5cbmxldCBmb3JjZSAobHp2IDogJ2FyZyBsYXp5X3QpID1cbiAgKCogVXNpbmcgW1N5cy5vcGFxdWVfaWRlbnRpdHldIHByZXZlbnRzIHR3byBwb3RlbnRpYWwgcHJvYmxlbXM6XG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGhhdmUgRm9yd2FyZF90YWcsIHRoZW4gaXRzIHRhZyBjb3VsZCBoYXZlXG4gICAgICAgY2hhbmdlZCBkdXJpbmcgR0MsIHNvIHRoYXQgaW5mb3JtYXRpb24gbXVzdCBiZSBmb3Jnb3R0ZW4gKHNlZSBHUFIjNzEzXG4gICAgICAgYW5kIGlzc3VlICM3MzAxKVxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBiZSBpbW11dGFibGUsIHRoZW4gaWYgdGhlIGNvbXBpbGVyXG4gICAgICAgY2Fubm90IHByb3ZlIHRoYXQgdGhlIGxhc3QgYnJhbmNoIGlzIG5vdCB0YWtlbiBpdCB3aWxsIGlzc3VlIGFcbiAgICAgICB3YXJuaW5nIDU5IChtb2RpZmljYXRpb24gb2YgYW4gaW1tdXRhYmxlIHZhbHVlKSAqKVxuICBsZXQgbHp2ID0gU3lzLm9wYXF1ZV9pZGVudGl0eSBsenYgaW5cbiAgbGV0IHggPSBPYmoucmVwciBsenYgaW5cbiAgbGV0IHQgPSBPYmoudGFnIHggaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB0aGVuIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpIGVsc2VcbiAgaWYgdCA8PiBPYmoubGF6eV90YWcgdGhlbiAoT2JqLm9iaiB4IDogJ2FyZylcbiAgZWxzZSBmb3JjZV9sYXp5X2Jsb2NrIGx6dlxuXG5cbmxldCBmb3JjZV92YWwgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfdmFsX2xhenlfYmxvY2sgbHp2XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbTGF6eV06IGRlZmVycmVkIGNvbXB1dGF0aW9ucyAqKVxuXG5cbigqXG4gICBXQVJOSU5HOiBzb21lIHB1cnBsZSBtYWdpYyBpcyBnb2luZyBvbiBoZXJlLiAgRG8gbm90IHRha2UgdGhpcyBmaWxlXG4gICBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byBwcm9ncmFtIGluIE9DYW1sLlxuKilcblxuXG4oKiBXZSBtYWtlIHVzZSBvZiB0d28gc3BlY2lhbCB0YWdzIHByb3ZpZGVkIGJ5IHRoZSBydW50aW1lOlxuICAgW2xhenlfdGFnXSBhbmQgW2ZvcndhcmRfdGFnXS5cblxuICAgQSB2YWx1ZSBvZiB0eXBlIFsnYSBMYXp5LnRdIGNhbiBiZSBvbmUgb2YgdGhyZWUgdGhpbmdzOlxuICAgMS4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2xhenlfdGFnXS4gIEl0cyBmaWVsZCBpcyBhIGNsb3N1cmUgb2ZcbiAgICAgIHR5cGUgW3VuaXQgLT4gJ2FdIHRoYXQgY29tcHV0ZXMgdGhlIHZhbHVlLlxuICAgMi4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2ZvcndhcmRfdGFnXS4gIEl0cyBmaWVsZCBpcyB0aGUgdmFsdWVcbiAgICAgIG9mIHR5cGUgWydhXSB0aGF0IHdhcyBjb21wdXRlZC5cbiAgIDMuIEFueXRoaW5nIGVsc2UgZXhjZXB0IGEgZmxvYXQuICBUaGlzIGhhcyB0eXBlIFsnYV0gYW5kIGlzIHRoZSB2YWx1ZVxuICAgICAgdGhhdCB3YXMgY29tcHV0ZWQuXG4gICBFeGNlcHRpb25zIGFyZSBzdG9yZWQgaW4gZm9ybWF0ICgxKS5cbiAgIFRoZSBHQyB3aWxsIG1hZ2ljYWxseSBjaGFuZ2UgdGhpbmdzIGZyb20gKDIpIHRvICgzKSBhY2NvcmRpbmcgdG8gaXRzXG4gICBmYW5jeS5cblxuICAgSWYgT0NhbWwgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgLWZsYXQtZmxvYXQtYXJyYXkgb3B0aW9uICh3aGljaCBpc1xuICAgY3VycmVudGx5IHRoZSBkZWZhdWx0KSwgdGhlIGZvbGxvd2luZyBpcyBhbHNvIHRydWU6XG4gICBXZSBjYW5ub3QgdXNlIHJlcHJlc2VudGF0aW9uICgzKSBmb3IgYSBbZmxvYXQgTGF6eS50XSBiZWNhdXNlXG4gICBbY2FtbF9tYWtlX2FycmF5XSBhc3N1bWVzIHRoYXQgb25seSBhIFtmbG9hdF0gdmFsdWUgY2FuIGhhdmUgdGFnXG4gICBbRG91YmxlX3RhZ10uXG5cbiAgIFdlIGhhdmUgdG8gdXNlIHRoZSBidWlsdC1pbiB0eXBlIGNvbnN0cnVjdG9yIFtsYXp5X3RdIHRvXG4gICBsZXQgdGhlIGNvbXBpbGVyIGltcGxlbWVudCB0aGUgc3BlY2lhbCB0eXBpbmcgYW5kIGNvbXBpbGF0aW9uXG4gICBydWxlcyBmb3IgdGhlIFtsYXp5XSBrZXl3b3JkLlxuKilcblxudHlwZSAnYSB0ID0gJ2EgQ2FtbGludGVybmFsTGF6eS50XG5cbmV4Y2VwdGlvbiBVbmRlZmluZWQgPSBDYW1saW50ZXJuYWxMYXp5LlVuZGVmaW5lZFxuXG5leHRlcm5hbCBtYWtlX2ZvcndhcmQgOiAnYSAtPiAnYSBsYXp5X3QgPSBcImNhbWxfbGF6eV9tYWtlX2ZvcndhcmRcIlxuXG5leHRlcm5hbCBmb3JjZSA6ICdhIHQgLT4gJ2EgPSBcIiVsYXp5X2ZvcmNlXCJcblxuXG5sZXQgZm9yY2VfdmFsID0gQ2FtbGludGVybmFsTGF6eS5mb3JjZV92YWxcblxubGV0IGZyb21fZnVuIChmIDogdW5pdCAtPiAnYXJnKSA9XG4gIGxldCB4ID0gT2JqLm5ld19ibG9jayBPYmoubGF6eV90YWcgMSBpblxuICBPYmouc2V0X2ZpZWxkIHggMCAoT2JqLnJlcHIgZik7XG4gIChPYmoub2JqIHggOiAnYXJnIHQpXG5cbmxldCBmcm9tX3ZhbCAodiA6ICdhcmcpID1cbiAgbGV0IHQgPSBPYmoudGFnIChPYmoucmVwciB2KSBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHx8IHQgPSBPYmoubGF6eV90YWcgfHwgdCA9IE9iai5kb3VibGVfdGFnIHRoZW4gYmVnaW5cbiAgICBtYWtlX2ZvcndhcmQgdlxuICBlbmQgZWxzZSBiZWdpblxuICAgIChPYmoubWFnaWMgdiA6ICdhcmcgdClcbiAgZW5kXG5cblxubGV0IGlzX3ZhbCAobCA6ICdhcmcgdCkgPSBPYmoudGFnIChPYmoucmVwciBsKSA8PiBPYmoubGF6eV90YWdcblxubGV0IGxhenlfZnJvbV9mdW4gPSBmcm9tX2Z1blxuXG5sZXQgbGF6eV9mcm9tX3ZhbCA9IGZyb21fdmFsXG5cbmxldCBsYXp5X2lzX3ZhbCA9IGlzX3ZhbFxuXG5cbmxldCBtYXAgZiB4ID1cbiAgbGF6eSAoZiAoZm9yY2UgeCkpXG5cbmxldCBtYXBfdmFsIGYgeCA9XG4gIGlmIGlzX3ZhbCB4XG4gIHRoZW4gbGF6eV9mcm9tX3ZhbCAoZiAoZm9yY2UgeCkpXG4gIGVsc2UgbGF6eSAoZiAoZm9yY2UgeCkpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9IE5vbmUgfCBTb21lIG9mICdhXG5cbmxldCBub25lID0gTm9uZVxubGV0IHNvbWUgdiA9IFNvbWUgdlxubGV0IHZhbHVlIG8gfmRlZmF1bHQgPSBtYXRjaCBvIHdpdGggU29tZSB2IC0+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+IGNcblxudHlwZSB0ID0gY2hhclxuXG5sZXQgY29tcGFyZSBjMSBjMiA9IGNvZGUgYzEgLSBjb2RlIGMyXG5sZXQgZXF1YWwgKGMxOiB0KSAoYzI6IHQpID0gY29tcGFyZSBjMSBjMiA9IDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSB0ID0gaW50XG5cbmxldCB6ZXJvID0gMFxubGV0IG9uZSA9IDFcbmxldCBtaW51c19vbmUgPSAtMVxuZXh0ZXJuYWwgbmVnIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCBhZGQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCBzdWIgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXN1YmludFwiXG5leHRlcm5hbCBtdWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCBkaXYgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCByZW0gOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5leHRlcm5hbCBzdWNjIDogaW50IC0+IGludCA9IFwiJXN1Y2NpbnRcIlxuZXh0ZXJuYWwgcHJlZCA6IGludCAtPiBpbnQgPSBcIiVwcmVkaW50XCJcbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxubGV0IG1heF9pbnQgPSAoLTEpIGxzciAxXG5sZXQgbWluX2ludCA9IG1heF9pbnQgKyAxXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCBsb2dvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlb3JpbnRcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxubGV0IGxvZ25vdCB4ID0gbG9neG9yIHggKC0xKVxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNyaW50XCJcbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBtaW4geCB5IDogdCA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA6IHQgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5cbigqXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcbmxldCBvZl9zdHJpbmcgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcbiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmxldCB0b19zdHJpbmcgeCA9IGZvcm1hdF9pbnQgXCIlZFwiIHhcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMuIFdoZW4geW91IG1vZGlmeSB0aGUgb25lIGluIHRoaXMgZmlsZSB5b3UgbmVlZCB0b1xuICAgbW9kaWZ5IGl0cyBkdXBsaWNhdGUgaW4gc3RyaW5nLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBieXRlcyAtPiBpbnQgPSBcIiVieXRlc19sZW5ndGhcIlxuZXh0ZXJuYWwgc3RyaW5nX2xlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGdldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyID0gXCIlYnl0ZXNfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcbmV4dGVybmFsIHVuc2FmZV9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gYnl0ZXMgPSBcIiVieXRlc19vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2JsaXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cblxubGV0IG1ha2UgbiBjID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICB1bnNhZmVfZmlsbCBzIDAgbiBjO1xuICBzXG5cbmxldCBpbml0IG4gZiA9XG4gIGxldCBzID0gY3JlYXRlIG4gaW5cbiAgZm9yIGkgPSAwIHRvIG4gLSAxIGRvXG4gICAgdW5zYWZlX3NldCBzIGkgKGYgaSlcbiAgZG9uZTtcbiAgc1xuXG5sZXQgZW1wdHkgPSBjcmVhdGUgMFxuXG5sZXQgY29weSBzID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gIGxldCByID0gY3JlYXRlIGxlbiBpblxuICB1bnNhZmVfYmxpdCBzIDAgciAwIGxlbjtcbiAgclxuXG5sZXQgdG9fc3RyaW5nIGIgPSB1bnNhZmVfdG9fc3RyaW5nIChjb3B5IGIpXG5sZXQgb2Zfc3RyaW5nIHMgPSBjb3B5ICh1bnNhZmVfb2Zfc3RyaW5nIHMpXG5cbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuc3ViIC8gQnl0ZXMuc3ViXCJcbiAgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGxlbiBpblxuICAgIHVuc2FmZV9ibGl0IHMgb2ZzIHIgMCBsZW47XG4gICAgclxuICBlbmRcblxubGV0IHN1Yl9zdHJpbmcgYiBvZnMgbGVuID0gdW5zYWZlX3RvX3N0cmluZyAoc3ViIGIgb2ZzIGxlbilcblxuKCogYWRkaXRpb24gd2l0aCBhbiBvdmVyZmxvdyBjaGVjayAqKVxubGV0ICgrKykgYSBiID1cbiAgbGV0IGMgPSBhICsgYiBpblxuICBtYXRjaCBhIDwgMCwgYiA8IDAsIGMgPCAwIHdpdGhcbiAgfCB0cnVlICwgdHJ1ZSAsIGZhbHNlXG4gIHwgZmFsc2UsIGZhbHNlLCB0cnVlICAtPiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmV4dGVuZFwiICgqIG92ZXJmbG93ICopXG4gIHwgXyAtPiBjXG5cbmxldCBleHRlbmQgcyBsZWZ0IHJpZ2h0ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBzICsrIGxlZnQgKysgcmlnaHQgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIGxldCAoc3Jjb2ZmLCBkc3RvZmYpID0gaWYgbGVmdCA8IDAgdGhlbiAtbGVmdCwgMCBlbHNlIDAsIGxlZnQgaW5cbiAgbGV0IGNweWxlbiA9IEludC5taW4gKGxlbmd0aCBzIC0gc3Jjb2ZmKSAobGVuIC0gZHN0b2ZmKSBpblxuICBpZiBjcHlsZW4gPiAwIHRoZW4gdW5zYWZlX2JsaXQgcyBzcmNvZmYgciBkc3RvZmYgY3B5bGVuO1xuICByXG5cbmxldCBmaWxsIHMgb2ZzIGxlbiBjID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuZmlsbCAvIEJ5dGVzLmZpbGxcIlxuICBlbHNlIHVuc2FmZV9maWxsIHMgb2ZzIGxlbiBjXG5cbmxldCBibGl0IHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBsZW5ndGggczEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIHMyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCeXRlcy5ibGl0XCJcbiAgZWxzZSB1bnNhZmVfYmxpdCBzMSBvZnMxIHMyIG9mczIgbGVuXG5cbmxldCBibGl0X3N0cmluZyBzMSBvZnMxIHMyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gc3RyaW5nX2xlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5ibGl0IC8gQnl0ZXMuYmxpdF9zdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9ibGl0X3N0cmluZyBzMSBvZnMxIHMyIG9mczIgbGVuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaXRlciBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYodW5zYWZlX2dldCBhIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyaSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IGVuc3VyZV9nZSAoeDppbnQpIHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgaW52YWxpZF9hcmcgXCJCeXRlcy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGVtcHR5XG4gIHwgbCAtPiBsZXQgc2VwbGVuID0gbGVuZ3RoIHNlcCBpblxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKGNyZWF0ZSAoc3VtX2xlbmd0aHMgMCBzZXBsZW4gbCkpXG4gICAgICAgICAgICAwIHNlcCBzZXBsZW4gbFxuXG5sZXQgY2F0IHMxIHMyID1cbiAgbGV0IGwxID0gbGVuZ3RoIHMxIGluXG4gIGxldCBsMiA9IGxlbmd0aCBzMiBpblxuICBsZXQgciA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgdW5zYWZlX2JsaXQgczEgMCByIDAgbDE7XG4gIHVuc2FmZV9ibGl0IHMyIDAgciBsMSBsMjtcbiAgclxuXG5cbmV4dGVybmFsIGNoYXJfY29kZTogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBjaGFyX2NocjogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW4gJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBpbmNyIGlcbiAgZG9uZTtcbiAgbGV0IGogPSByZWYgKGxlbiAtIDEpIGluXG4gIHdoaWxlICFqID49ICFpICYmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgIWopIGRvXG4gICAgZGVjciBqXG4gIGRvbmU7XG4gIGlmICFqID49ICFpIHRoZW5cbiAgICBzdWIgcyAhaSAoIWogLSAhaSArIDEpXG4gIGVsc2VcbiAgICBlbXB0eVxuXG5sZXQgZXNjYXBlZCBzID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbiA6PSAhbiArXG4gICAgICAobWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgIHwgJ1xcXCInIHwgJ1xcXFwnIHwgJ1xcbicgfCAnXFx0JyB8ICdcXHInIHwgJ1xcYicgLT4gMlxuICAgICAgIHwgJyAnIC4uICd+JyAtPiAxXG4gICAgICAgfCBfIC0+IDQpXG4gIGRvbmU7XG4gIGlmICFuID0gbGVuZ3RoIHMgdGhlbiBjb3B5IHMgZWxzZSBiZWdpblxuICAgIGxldCBzJyA9IGNyZWF0ZSAhbiBpblxuICAgIG4gOj0gMDtcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICgnXFxcIicgfCAnXFxcXCcpIGFzIGMgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICduJ1xuICAgICAgfCAnXFx0JyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3QnXG4gICAgICB8ICdcXHInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAncidcbiAgICAgIHwgJ1xcYicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdiJ1xuICAgICAgfCAoJyAnIC4uICd+JykgYXMgYyAtPiB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgYyAtPlxuICAgICAgICAgIGxldCBhID0gY2hhcl9jb2RlIGMgaW5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJztcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSAvIDEwMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyAoYSAvIDEwKSBtb2QgMTApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSBtb2QgMTApKTtcbiAgICAgIGVuZDtcbiAgICAgIGluY3IgblxuICAgIGRvbmU7XG4gICAgcydcbiAgZW5kXG5cbmxldCBtYXAgZiBzID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBsID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG8gdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwaSBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IHMgaSkpIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX3JpZ2h0IGYgYSB4ID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IGxlbmd0aCBhIC0gMSBkb3dudG8gMCBkb1xuICAgIHIgOj0gZiAodW5zYWZlX2dldCBhIGkpICFyXG4gIGRvbmU7XG4gICFyXG5cbmxldCBleGlzdHMgcCBzID1cbiAgbGV0IG4gPSBsZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBzIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwgcCBzID1cbiAgbGV0IG4gPSBsZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIudXBwZXJjYXNlX2FzY2lpIHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9IG1hcCBDaGFyLmxvd2VyY2FzZV9hc2NpaSBzXG5cbmxldCBhcHBseTEgZiBzID1cbiAgaWYgbGVuZ3RoIHMgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjb3B5IHMgaW5cbiAgICB1bnNhZmVfc2V0IHIgMCAoZih1bnNhZmVfZ2V0IHMgMCkpO1xuICAgIHJcbiAgZW5kXG5cbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IHVuY2FwaXRhbGl6ZV9hc2NpaSBzID0gYXBwbHkxIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleCBzIGMgPSBpbmRleF9yZWMgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbSAvIEJ5dGVzLmluZGV4X2Zyb21cIiBlbHNlXG4gIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjIHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgcmluZGV4X3JlYyBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIHJpbmRleF9yZWNfb3B0IHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yY29udGFpbnNfZnJvbSAvIEJ5dGVzLnJjb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKHJpbmRleF9yZWMgcyBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cblxudHlwZSB0ID0gYnl0ZXNcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9ieXRlc19lcXVhbFwiIFtAQG5vYWxsb2NdXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPSBtYXAgQ2hhci51cHBlcmNhc2Ugc1xubGV0IGxvd2VyY2FzZSBzID0gbWFwIENoYXIubG93ZXJjYXNlIHNcblxubGV0IGNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgdW5jYXBpdGFsaXplIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2Ugc1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgbGV0IGJ1ZiA9IHJlZiAobWFrZSAyNTYgJ1xcMDAwJykgaW5cbiAgbGV0IHJlc2l6ZSAoKSA9XG4gICAgKCogcmVzaXplICopXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWluICgyICogbGVuZ3RoICFidWYpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgIGlmIGxlbmd0aCAhYnVmID0gbmV3X2xlbiB0aGVuIGZhaWx3aXRoIFwiQnl0ZXMub2Zfc2VxOiBjYW5ub3QgZ3JvdyBieXRlc1wiO1xuICAgIGxldCBuZXdfYnVmID0gbWFrZSBuZXdfbGVuICdcXDAwMCcgaW5cbiAgICBibGl0ICFidWYgMCBuZXdfYnVmIDAgIW47XG4gICAgYnVmIDo9IG5ld19idWZcbiAgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgICBpZiAhbiA9IGxlbmd0aCAhYnVmIHRoZW4gcmVzaXplKCk7XG4gICAgICAgc2V0ICFidWYgIW4gYztcbiAgICAgICBpbmNyIG4pXG4gICAgaTtcbiAgc3ViICFidWYgMCAhblxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG4oKiBUaGUgZ2V0XyBmdW5jdGlvbnMgYXJlIGFsbCBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxuXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNnVcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX2J5dGVzX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfYnl0ZXNfZ2V0NjRcIlxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG4gIGVsc2Ugc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG5cbmxldCBnZXRfaW50OCBiIGkgPVxuICAoKGdldF91aW50OCBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gOCkpIGFzciAoU3lzLmludF9zaXplIC0gOClcblxubGV0IGdldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF9pbnQxNl9uZSBiIGkgPVxuICAoKGdldF91aW50MTZfbmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9sZSBiIGkgPVxuICAoKGdldF91aW50MTZfbGUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9iZSBiIGkgPVxuICAoKGdldF91aW50MTZfYmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQzMl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50MzJfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4XG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9iZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHggZWxzZVxuICB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuXG5sZXQgc2V0X2ludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQxNl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X3VpbnQ4ID0gc2V0X2ludDhcbmxldCBzZXRfdWludDE2X25lID0gc2V0X2ludDE2X25lXG5sZXQgc2V0X3VpbnQxNl9iZSA9IHNldF9pbnQxNl9iZVxubGV0IHNldF91aW50MTZfbGUgPSBzZXRfaW50MTZfbGVcblxuKCogVVRGIGNvZGVjcyBhbmQgdmFsaWRhdGlvbnMgKilcblxubGV0IGRlY19pbnZhbGlkID0gVWNoYXIudXRmX2RlY29kZV9pbnZhbGlkXG5sZXRbQGlubGluZV0gZGVjX3JldCBuIHUgPSBVY2hhci51dGZfZGVjb2RlIG4gKFVjaGFyLnVuc2FmZV9vZl9pbnQgdSlcblxuKCogSW4gY2FzZSBvZiBkZWNvZGluZyBlcnJvciwgaWYgd2UgZXJyb3Igb24gdGhlIGZpcnN0IGJ5dGUsIHdlXG4gICBjb25zdW1lIHRoZSBieXRlLCBvdGhlcndpc2Ugd2UgY29uc3VtZSB0aGUgW25dIGJ5dGVzIHByZWNlZWRpbmdcbiAgIHRoZSBlcnJvcmluZyBieXRlLlxuXG4gICBUaGlzIG1lYW5zIHRoYXQgaWYgYSBjbGllbnQgdXNlcyBkZWNvZGVzIHdpdGhvdXQgY2FyaW5nIGFib3V0XG4gICB2YWxpZGl0eSBpdCBuYXR1cmFsbHkgcmVwbGFjZSBib2d1cyBkYXRhIHdpdGggVWNoYXIucmVwIGFjY29yZGluZ1xuICAgdG8gdGhlIFdIQVRXRyBFbmNvZGluZyBzdGFuZGFyZC4gT3RoZXIgc2NoZW1lcyBhcmUgcG9zc2libGUgYnlcbiAgIGNvbnN1bHRpbmcgdGhlIG51bWJlciBvZiB1c2VkIGJ5dGVzIG9uIGludmFsaWQgZGVjb2Rlcy4gRm9yIG1vcmVcbiAgIGRldGFpbHMgc2VlIGh0dHBzOi8vaHNpdm9uZW4uZmkvYnJva2VuLXV0Zi04L1xuXG4gICBGb3IgdGhpcyByZWFzb24gaW4gW2dldF91dGZfOF91Y2hhcl0gd2UgZ3JhZHVhbGx5IGNoZWNrIHRoZSBuZXh0XG4gICBieXRlIGlzIGF2YWlsYWJsZSByYXRoZXIgdGhhbiBkb2luZyBpdCBpbW1lZGlhdGVseSBhZnRlciB0aGVcbiAgIGZpcnN0IGJ5dGUuIENvbnRyYXN0IHdpdGggW2lzX3ZhbGlkX3V0Zl84XS4gKilcblxuKCogVVRGLTggKilcblxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feEJGIGIgPSBiIGxzciA2IDw+IDBiMTBcbmxldFtAaW5saW5lXSBub3RfaW5feEEwX3RvX3hCRiBiID0gYiBsc3IgNSA8PiAwYjEwMVxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feDlGIGIgPSBiIGxzciA1IDw+IDBiMTAwXG5sZXRbQGlubGluZV0gbm90X2luX3g5MF90b194QkYgYiA9IGIgPCAweDkwIHx8IDB4QkYgPCBiXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OEYgYiA9IGIgbHNyIDQgPD4gMHg4XG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8yIGIwIGIxID1cbiAgKChiMCBsYW5kIDB4MUYpIGxzbCA2KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpKVxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfMyBiMCBiMSBiMiA9XG4gICgoYjAgbGFuZCAweDBGKSBsc2wgMTIpIGxvclxuICAoKGIxIGxhbmQgMHgzRikgbHNsIDYpIGxvclxuICAoKGIyIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzID1cbiAgKChiMCBsYW5kIDB4MDcpIGxzbCAxOCkgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgMTIpIGxvclxuICAoKGIyIGxhbmQgMHgzRikgbHNsIDYpIGxvclxuICAoKGIzIGxhbmQgMHgzRikpXG5cbmxldCBnZXRfdXRmXzhfdWNoYXIgYiBpID1cbiAgbGV0IGIwID0gZ2V0X3VpbnQ4IGIgaSBpbiAoKiByYWlzZXMgaWYgW2ldIGlzIG5vdCBhIHZhbGlkIGluZGV4LiAqKVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIENoYXIudW5zYWZlX2NociBiMCB3aXRoICgqIFNlZSBUaGUgVW5pY29kZSBTdGFuZGFyZCwgVGFibGUgMy43ICopXG4gIHwgJ1xceDAwJyAuLiAnXFx4N0YnIC0+IGRlY19yZXQgMSBiMFxuICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBkZWNfcmV0IDIgKHV0Zl84X3VjaGFyXzIgYjAgYjEpXG4gIHwgJ1xceEUwJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94QTBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RTEnIC4uICdcXHhFQycgfCAnXFx4RUUnIC4uICdcXHhFRicgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEVEJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feDlGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RjAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g5MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgJ1xceEY0JyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feDhGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8IF8gLT4gZGVjX2ludmFsaWQgMVxuXG5sZXQgc2V0X3V0Zl84X3VjaGFyIGIgaSB1ID1cbiAgbGV0IHNldCA9IHVuc2FmZV9zZXRfdWludDggaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4MDA3RiAtPlxuICAgICAgc2V0X3VpbnQ4IGIgaSB1O1xuICAgICAgMVxuICB8IHUgd2hlbiB1IDw9IDB4MDdGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4QzAgbG9yICh1IGxzciA2KSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMilcbiAgfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEUwIGxvciAodSBsc3IgMTIpKTtcbiAgICAgICBzZXQgYiAoaSArIDEpICgweDgwIGxvciAoKHUgbHNyIDYpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDMpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEYwIGxvciAodSBsc3IgMTgpKTtcbiAgICAgICBzZXQgYiAoaSArIDEpICgweDgwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiAoaSArIDIpICgweDgwIGxvciAoKHUgbHNyIDYpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDQpXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl84IGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gICAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIChnZXQgYiBpKSB3aXRoXG4gICAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gbG9vcCBtYXggYiAoaSArIDEpXG4gICAgfCAnXFx4QzInIC4uICdcXHhERicgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RTAnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feEEwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RUQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g5RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94OTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGMScgLi4gJ1xceEYzJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEY0JyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194OEYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICBsb29wIChsZW5ndGggYiAtIDEpIGIgMFxuXG4oKiBVVEYtMTZCRSAqKVxuXG5sZXQgZ2V0X3V0Zl8xNmJlX3VjaGFyIGIgaSA9XG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIGlmIGkgPSBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfcmV0IDIgdVxuICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGRlY19pbnZhbGlkIDJcbiAgfCBoaSAtPiAoKiBjb21iaW5lIFtoaV0gd2l0aCBhIGxvdyBzdXJyb2dhdGUgKilcbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAobWF4IC0gaSArIDEpIGVsc2VcbiAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19pbnZhbGlkIDIgKCogcmV0cnkgaGVyZSAqKVxuICAgICAgfCBsbyAtPlxuICAgICAgICAgIGxldCB1ID0gKCgoaGkgbGFuZCAweDNGRikgbHNsIDEwKSBsb3IgKGxvIGxhbmQgMHgzRkYpKSArIDB4MTAwMDAgaW5cbiAgICAgICAgICBkZWNfcmV0IDQgdVxuXG5sZXQgc2V0X3V0Zl8xNmJlX3VjaGFyIGIgaSB1ID1cbiAgbGV0IHNldCA9IHVuc2FmZV9zZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2UgKHNldCBiIGkgdTsgMilcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgbGV0IHUnID0gdSAtIDB4MTAwMDAgaW5cbiAgICAgIGxldCBoaSA9ICgweEQ4MDAgbG9yICh1JyBsc3IgMTApKSBpblxuICAgICAgbGV0IGxvID0gKDB4REMwMCBsb3IgKHUnIGxhbmQgMHgzRkYpKSBpblxuICAgICAgc2V0IGIgaSBoaTsgc2V0IGIgKGkgKyAyKSBsbzsgNFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfMTZiZSBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBpblxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBpZiBpID0gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgIG1hdGNoIGdldCBiIGkgd2l0aFxuICAgIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBsb29wIG1heCBiIChpICsgMilcbiAgICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGZhbHNlXG4gICAgfCBfaGkgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGZhbHNlXG4gICAgICAgIHwgX2xvIC0+IGxvb3AgbWF4IGIgKGkgKyA0KVxuICBpblxuICBsb29wIChsZW5ndGggYiAtIDEpIGIgMFxuXG4oKiBVVEYtMTZMRSAqKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIGIgaSA9XG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIGlmIGkgPSBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfcmV0IDIgdVxuICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGRlY19pbnZhbGlkIDJcbiAgfCBoaSAtPiAoKiBjb21iaW5lIFtoaV0gd2l0aCBhIGxvdyBzdXJyb2dhdGUgKilcbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAobWF4IC0gaSArIDEpIGVsc2VcbiAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19pbnZhbGlkIDIgKCogcmV0cnkgaGVyZSAqKVxuICAgICAgfCBsbyAtPlxuICAgICAgICAgIGxldCB1ID0gKCgoaGkgbGFuZCAweDNGRikgbHNsIDEwKSBsb3IgKGxvIGxhbmQgMHgzRkYpKSArIDB4MTAwMDAgaW5cbiAgICAgICAgICBkZWNfcmV0IDQgdVxuXG5sZXQgc2V0X3V0Zl8xNmxlX3VjaGFyIGIgaSB1ID1cbiAgbGV0IHNldCA9IHVuc2FmZV9zZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2UgKHNldCBiIGkgdTsgMilcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgbGV0IHUnID0gdSAtIDB4MTAwMDAgaW5cbiAgICAgIGxldCBoaSA9ICgweEQ4MDAgbG9yICh1JyBsc3IgMTApKSBpblxuICAgICAgbGV0IGxvID0gKDB4REMwMCBsb3IgKHUnIGxhbmQgMHgzRkYpKSBpblxuICAgICAgc2V0IGIgaSBoaTsgc2V0IGIgKGkgKyAyKSBsbzsgNFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfMTZsZSBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBpblxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBpZiBpID0gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgIG1hdGNoIGdldCBiIGkgd2l0aFxuICAgIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBsb29wIG1heCBiIChpICsgMilcbiAgICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGZhbHNlXG4gICAgfCBfaGkgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGZhbHNlXG4gICAgICAgIHwgX2xvIC0+IGxvb3AgbWF4IGIgKGkgKyA0KVxuICBpblxuICBsb29wIChsZW5ndGggYiAtIDEpIGIgMFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTdHJpbmcgb3BlcmF0aW9ucywgYmFzZWQgb24gYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBieXRlcy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBieXRlcy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlc3RyaW5nX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+ICBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV9maWxsIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2ZpbGxfc3RyaW5nXCIgW0BAbm9hbGxvY11cblxubW9kdWxlIEIgPSBCeXRlc1xuXG5sZXQgYnRzID0gQi51bnNhZmVfdG9fc3RyaW5nXG5sZXQgYm9zID0gQi51bnNhZmVfb2Zfc3RyaW5nXG5cbmxldCBtYWtlIG4gYyA9XG4gIEIubWFrZSBuIGMgfD4gYnRzXG5sZXQgaW5pdCBuIGYgPVxuICBCLmluaXQgbiBmIHw+IGJ0c1xubGV0IGVtcHR5ID0gXCJcIlxubGV0IGNvcHkgcyA9XG4gIEIuY29weSAoYm9zIHMpIHw+IGJ0c1xubGV0IG9mX2J5dGVzID0gQi50b19zdHJpbmdcbmxldCB0b19ieXRlcyA9IEIub2Zfc3RyaW5nXG5sZXQgc3ViIHMgb2ZzIGxlbiA9XG4gIEIuc3ViIChib3Mgcykgb2ZzIGxlbiB8PiBidHNcbmxldCBmaWxsID1cbiAgQi5maWxsXG5sZXQgYmxpdCA9XG4gIEIuYmxpdF9zdHJpbmdcblxubGV0IGVuc3VyZV9nZSAoeDppbnQpIHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29uY2F0XCJcblxubGV0IHJlYyBzdW1fbGVuZ3RocyBhY2Mgc2VwbGVuID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2NcbiAgfCBoZCA6OiBbXSAtPiBsZW5ndGggaGQgKyBhY2NcbiAgfCBoZCA6OiB0bCAtPiBzdW1fbGVuZ3RocyAoZW5zdXJlX2dlIChsZW5ndGggaGQgKyBzZXBsZW4gKyBhY2MpIGFjYykgc2VwbGVuIHRsXG5cbmxldCByZWMgdW5zYWZlX2JsaXRzIGRzdCBwb3Mgc2VwIHNlcGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZHN0XG4gIHwgaGQgOjogW10gLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7IGRzdFxuICB8IGhkIDo6IHRsIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpO1xuICAgIHVuc2FmZV9ibGl0IHNlcCAwIGRzdCAocG9zICsgbGVuZ3RoIGhkKSBzZXBsZW47XG4gICAgdW5zYWZlX2JsaXRzIGRzdCAocG9zICsgbGVuZ3RoIGhkICsgc2VwbGVuKSBzZXAgc2VwbGVuIHRsXG5cbmxldCBjb25jYXQgc2VwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBcIlwiXG4gIHwgbCAtPiBsZXQgc2VwbGVuID0gbGVuZ3RoIHNlcCBpbiBidHMgQEBcbiAgICAgICAgICB1bnNhZmVfYmxpdHNcbiAgICAgICAgICAgIChCLmNyZWF0ZSAoc3VtX2xlbmd0aHMgMCBzZXBsZW4gbCkpXG4gICAgICAgICAgICAwIHNlcCBzZXBsZW4gbFxuXG5sZXQgY2F0ID0gKCBeIClcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXIgZiBzID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkbyBmICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlcmkgZiBzID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbmxldCBtYXAgZiBzID1cbiAgQi5tYXAgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IG1hcGkgZiBzID1cbiAgQi5tYXBpIGYgKGJvcyBzKSB8PiBidHNcbmxldCBmb2xkX3JpZ2h0IGYgeCBhID1cbiAgQi5mb2xkX3JpZ2h0IGYgKGJvcyB4KSBhXG5sZXQgZm9sZF9sZWZ0IGYgYSB4ID1cbiAgQi5mb2xkX2xlZnQgZiBhIChib3MgeClcbmxldCBleGlzdHMgZiBzID1cbiAgQi5leGlzdHMgZiAoYm9zIHMpXG5sZXQgZm9yX2FsbCBmIHMgPVxuICBCLmZvcl9hbGwgZiAoYm9zIHMpXG5cbigqIEJld2FyZTogd2UgY2Fubm90IHVzZSBCLnRyaW0gb3IgQi5lc2NhcGUgYmVjYXVzZSB0aGV5IGFsd2F5cyBtYWtlIGFcbiAgIGNvcHksIGJ1dCBTdHJpbmcubWxpIHNwZWxscyBvdXQgc29tZSBjYXNlcyB3aGVyZSB3ZSBhcmUgbm90IGFsbG93ZWRcbiAgIHRvIG1ha2UgYSBjb3B5LiAqKVxuXG5sZXQgaXNfc3BhY2UgPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IHRyaW0gcyA9XG4gIGlmIHMgPSBcIlwiIHRoZW4gc1xuICBlbHNlIGlmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgMCkgfHwgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAobGVuZ3RoIHMgLSAxKSlcbiAgICB0aGVuIGJ0cyAoQi50cmltIChib3MgcykpXG4gIGVsc2Ugc1xuXG5sZXQgZXNjYXBlZCBzID1cbiAgbGV0IHJlYyBlc2NhcGVfaWZfbmVlZGVkIHMgbiBpID1cbiAgICBpZiBpID49IG4gdGhlbiBzIGVsc2VcbiAgICAgIG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgJ1xcXCInIHwgJ1xcXFwnIHwgJ1xcMDAwJy4uJ1xcMDMxJyB8ICdcXDEyNycuLiAnXFwyNTUnIC0+XG4gICAgICAgICAgYnRzIChCLmVzY2FwZWQgKGJvcyBzKSlcbiAgICAgIHwgXyAtPiBlc2NhcGVfaWZfbmVlZGVkIHMgbiAoaSsxKVxuICBpblxuICBlc2NhcGVfaWZfbmVlZGVkIHMgKGxlbmd0aCBzKSAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID1cbiAgQi51cHBlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9XG4gIEIubG93ZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLnVuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHNwbGl0X29uX2NoYXIgc2VwIHMgPVxuICBsZXQgciA9IHJlZiBbXSBpblxuICBsZXQgaiA9IHJlZiAobGVuZ3RoIHMpIGluXG4gIGZvciBpID0gbGVuZ3RoIHMgLSAxIGRvd250byAwIGRvXG4gICAgaWYgdW5zYWZlX2dldCBzIGkgPSBzZXAgdGhlbiBiZWdpblxuICAgICAgciA6PSBzdWIgcyAoaSArIDEpICghaiAtIGkgLSAxKSA6OiAhcjtcbiAgICAgIGogOj0gaVxuICAgIGVuZFxuICBkb25lO1xuICBzdWIgcyAwICFqIDo6ICFyXG5cbigqIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGltcGxlbWVudGVkIHZpYSBvdGhlciBkZXByZWNhdGVkIGZ1bmN0aW9ucyAqKVxuW0BAQG9jYW1sLndhcm5pbmcgXCItM1wiXVxubGV0IHVwcGVyY2FzZSBzID1cbiAgQi51cHBlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2UgcyA9XG4gIEIubG93ZXJjYXNlIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZSBzID1cbiAgQi5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplIHMgPVxuICBCLnVuY2FwaXRhbGl6ZSAoYm9zIHMpIHw+IGJ0c1xuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3RyaW5nX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gYm9zIHMgfD4gQi50b19zZXFcblxubGV0IHRvX3NlcWkgcyA9IGJvcyBzIHw+IEIudG9fc2VxaVxuXG5sZXQgb2Zfc2VxIGcgPSBCLm9mX3NlcSBnIHw+IGJ0c1xuXG4oKiBVVEYgZGVjb2RlcnMgYW5kIHZhbGlkYXRvcnMgKilcblxubGV0IGdldF91dGZfOF91Y2hhciBzIGkgPSBCLmdldF91dGZfOF91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfOCBzID0gQi5pc192YWxpZF91dGZfOCAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2YmVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2YmUgKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmxlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmxlIChib3MgcylcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9zdHJpbmdfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfc3RyaW5nX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX3N0cmluZ19nZXQ2NFwiXG5cbmxldCBnZXRfaW50OCBzIGkgPSBCLmdldF9pbnQ4IChib3MgcykgaVxubGV0IGdldF91aW50MTZfbGUgcyBpID0gQi5nZXRfdWludDE2X2xlIChib3MgcykgaVxubGV0IGdldF91aW50MTZfYmUgcyBpID0gQi5nZXRfdWludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9uZSBzIGkgPSBCLmdldF9pbnQxNl9uZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbGUgcyBpID0gQi5nZXRfaW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2JlIHMgaSA9IEIuZ2V0X2ludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9sZSBzIGkgPSBCLmdldF9pbnQzMl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfYmUgcyBpID0gQi5nZXRfaW50MzJfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2xlIHMgaSA9IEIuZ2V0X2ludDY0X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9iZSBzIGkgPSBCLmdldF9pbnQ2NF9iZSAoYm9zIHMpIGlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQW4gYWxpYXMgZm9yIHRoZSB0eXBlIG9mIGFycmF5cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGFycmF5XG5cbigqIEFycmF5IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogJ2EgYXJyYXkgLT4gaW50ID0gXCIlYXJyYXlfbGVuZ3RoXCJcbmV4dGVybmFsIGdldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3NhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSA9IFwiJWFycmF5X3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVhcnJheV91bnNhZmVfc2V0XCJcbmV4dGVybmFsIG1ha2U6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgY3JlYXRlOiBpbnQgLT4gJ2EgLT4gJ2EgYXJyYXkgPSBcImNhbWxfbWFrZV92ZWN0XCJcbmV4dGVybmFsIHVuc2FmZV9zdWIgOiAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X3N1YlwiXG5leHRlcm5hbCBhcHBlbmRfcHJpbSA6ICdhIGFycmF5IC0+ICdhIGFycmF5IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X2FwcGVuZFwiXG5leHRlcm5hbCBjb25jYXQgOiAnYSBhcnJheSBsaXN0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X2NvbmNhdFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6XG4gICdhIGFycmF5IC0+IGludCAtPiAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfYXJyYXlfYmxpdFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6XG4gICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9maWxsXCJcbmV4dGVybmFsIGNyZWF0ZV9mbG9hdDogaW50IC0+IGZsb2F0IGFycmF5ID0gXCJjYW1sX21ha2VfZmxvYXRfdmVjdFwiXG5sZXQgbWFrZV9mbG9hdCA9IGNyZWF0ZV9mbG9hdFxuXG5tb2R1bGUgRmxvYXRhcnJheSA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gZmxvYXRhcnJheSA9IFwiY2FtbF9mbG9hdGFycmF5X2NyZWF0ZVwiXG4gIGV4dGVybmFsIGxlbmd0aCA6IGZsb2F0YXJyYXkgLT4gaW50ID0gXCIlZmxvYXRhcnJheV9sZW5ndGhcIlxuICBleHRlcm5hbCBnZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9nZXRcIlxuICBleHRlcm5hbCBzZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV9zYWZlX3NldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX2dldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0XG4gICAgICA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX3NldFwiXG5lbmRcblxubGV0IGluaXQgbCBmID1cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2VcbiAgaWYgbCA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmluaXRcIlxuICAoKiBTZWUgIzY1NzUuIFdlIGNvdWxkIGFsc28gY2hlY2sgZm9yIG1heGltdW0gYXJyYXkgc2l6ZSwgYnV0IHRoaXMgZGVwZW5kc1xuICAgICBvbiB3aGV0aGVyIHdlIGNyZWF0ZSBhIGZsb2F0IGFycmF5IG9yIGEgcmVndWxhciBvbmUuLi4gKilcbiAgZWxzZVxuICAgbGV0IHJlcyA9IGNyZWF0ZSBsIChmIDApIGluXG4gICBmb3IgaSA9IDEgdG8gcHJlZCBsIGRvXG4gICAgIHVuc2FmZV9zZXQgcmVzIGkgKGYgaSlcbiAgIGRvbmU7XG4gICByZXNcblxubGV0IG1ha2VfbWF0cml4IHN4IHN5IGluaXQgPVxuICBsZXQgcmVzID0gY3JlYXRlIHN4IFt8fF0gaW5cbiAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICB1bnNhZmVfc2V0IHJlcyB4IChjcmVhdGUgc3kgaW5pdClcbiAgZG9uZTtcbiAgcmVzXG5cbmxldCBjcmVhdGVfbWF0cml4ID0gbWFrZV9tYXRyaXhcblxubGV0IGNvcHkgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW4gaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgdW5zYWZlX3N1YiBhIDAgbFxuXG5sZXQgYXBwZW5kIGExIGEyID1cbiAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gIGlmIGwxID0gMCB0aGVuIGNvcHkgYTJcbiAgZWxzZSBpZiBsZW5ndGggYTIgPSAwIHRoZW4gdW5zYWZlX3N1YiBhMSAwIGwxXG4gIGVsc2UgYXBwZW5kX3ByaW0gYTEgYTJcblxubGV0IHN1YiBhIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIGEgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LnN1YlwiXG4gIGVsc2UgdW5zYWZlX3N1YiBhIG9mcyBsZW5cblxubGV0IGZpbGwgYSBvZnMgbGVuIHYgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIGEgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZpbGxcIlxuICBlbHNlIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbmxldCBibGl0IGExIG9mczEgYTIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBsZW5ndGggYTEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIGEyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5ibGl0XCJcbiAgZWxzZSB1bnNhZmVfYmxpdCBhMSBvZnMxIGEyIG9mczIgbGVuXG5cbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgaXRlcjIgZiBhIGIgPVxuICBpZiBsZW5ndGggYSA8PiBsZW5ndGggYiB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJBcnJheS5pdGVyMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlXG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSBkb25lXG5cbmxldCBtYXAgZiBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgKGYodW5zYWZlX2dldCBhIDApKSBpblxuICAgIGZvciBpID0gMSB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IG1hcDIgZiBhIGIgPVxuICBsZXQgbGEgPSBsZW5ndGggYSBpblxuICBsZXQgbGIgPSBsZW5ndGggYiBpblxuICBpZiBsYSA8PiBsYiB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJBcnJheS5tYXAyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2UgYmVnaW5cbiAgICBpZiBsYSA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gY3JlYXRlIGxhIChmICh1bnNhZmVfZ2V0IGEgMCkgKHVuc2FmZV9nZXQgYiAwKSkgaW5cbiAgICAgIGZvciBpID0gMSB0byBsYSAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcbiAgZW5kXG5cbmxldCBpdGVyaSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IG1hcGkgZiBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgKGYgMCAodW5zYWZlX2dldCBhIDApKSBpblxuICAgIGZvciBpID0gMSB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IHRvX2xpc3QgYSA9XG4gIGxldCByZWMgdG9saXN0IGkgcmVzID1cbiAgICBpZiBpIDwgMCB0aGVuIHJlcyBlbHNlIHRvbGlzdCAoaSAtIDEpICh1bnNhZmVfZ2V0IGEgaSA6OiByZXMpIGluXG4gIHRvbGlzdCAobGVuZ3RoIGEgLSAxKSBbXVxuXG4oKiBDYW5ub3QgdXNlIExpc3QubGVuZ3RoIGhlcmUgYmVjYXVzZSB0aGUgTGlzdCBtb2R1bGUgZGVwZW5kcyBvbiBBcnJheS4gKilcbmxldCByZWMgbGlzdF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjdVxuICB8IF86OnQgLT4gbGlzdF9sZW5ndGggKHN1Y2MgYWNjdSkgdFxuXG5sZXQgb2ZfbGlzdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW3x8XVxuICB8IGhkOjp0bCBhcyBsIC0+XG4gICAgICBsZXQgYSA9IGNyZWF0ZSAobGlzdF9sZW5ndGggMCBsKSBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGkrMSkgdGwgaW5cbiAgICAgIGZpbGwgMSB0bFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2MgaW5wdXRfYXJyYXkgPVxuICBsZXQgbGVuID0gbGVuZ3RoIGlucHV0X2FycmF5IGluXG4gIGlmIGxlbiA9IDAgdGhlbiAoYWNjLCBbfHxdKSBlbHNlIGJlZ2luXG4gICAgbGV0IGFjYywgZWx0ID0gZiBhY2MgKHVuc2FmZV9nZXQgaW5wdXRfYXJyYXkgMCkgaW5cbiAgICBsZXQgb3V0cHV0X2FycmF5ID0gY3JlYXRlIGxlbiBlbHQgaW5cbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIGZvciBpID0gMSB0byBsZW4gLSAxIGRvXG4gICAgICBsZXQgYWNjJywgZWx0ID0gZiAhYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IGkpIGluXG4gICAgICBhY2MgOj0gYWNjJztcbiAgICAgIHVuc2FmZV9zZXQgb3V0cHV0X2FycmF5IGkgZWx0O1xuICAgIGRvbmU7XG4gICAgIWFjYywgb3V0cHV0X2FycmF5XG4gIGVuZFxuXG5sZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDAgZG9cbiAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICBkb25lO1xuICAhclxuXG5sZXQgZXhpc3RzIHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsIHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZm9yX2FsbDJcIlxuICBlbHNlIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbjEgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCBleGlzdHMyIHAgbDEgbDIgPVxuICBsZXQgbjEgPSBsZW5ndGggbDFcbiAgYW5kIG4yID0gbGVuZ3RoIGwyIGluXG4gIGlmIG4xIDw+IG4yIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5leGlzdHMyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgbDEgaSkgKHVuc2FmZV9nZXQgbDIgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtIHggYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIGNvbXBhcmUgKHVuc2FmZV9nZXQgYSBpKSB4ID0gMCB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBtZW1xIHggYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHggPT0gKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX29wdCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIE5vbmVcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBpZiBwIHggdGhlbiBTb21lIHhcbiAgICAgIGVsc2UgbG9vcCAoc3VjYyBpKVxuICBpblxuICBsb29wIDBcblxubGV0IGZpbmRfbWFwIGYgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIGYgKHVuc2FmZV9nZXQgYSBpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gbG9vcCAoc3VjYyBpKVxuICAgICAgfCBTb21lIF8gYXMgciAtPiByXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3BsaXQgeCA9XG4gIGlmIHggPSBbfHxdIHRoZW4gW3x8XSwgW3x8XVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IGEwLCBiMCA9IHVuc2FmZV9nZXQgeCAwIGluXG4gICAgbGV0IG4gPSBsZW5ndGggeCBpblxuICAgIGxldCBhID0gY3JlYXRlIG4gYTAgaW5cbiAgICBsZXQgYiA9IGNyZWF0ZSBuIGIwIGluXG4gICAgZm9yIGkgPSAxIHRvIG4gLSAxIGRvXG4gICAgICBsZXQgYWksIGJpID0gdW5zYWZlX2dldCB4IGkgaW5cbiAgICAgIHVuc2FmZV9zZXQgYSBpIGFpO1xuICAgICAgdW5zYWZlX3NldCBiIGkgYmlcbiAgICBkb25lO1xuICAgIGEsIGJcbiAgZW5kXG5cbmxldCBjb21iaW5lIGEgYiA9XG4gIGxldCBuYSA9IGxlbmd0aCBhIGluXG4gIGxldCBuYiA9IGxlbmd0aCBiIGluXG4gIGlmIG5hIDw+IG5iIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5jb21iaW5lXCI7XG4gIGlmIG5hID0gMCB0aGVuIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCB4ID0gY3JlYXRlIG5hICh1bnNhZmVfZ2V0IGEgMCwgdW5zYWZlX2dldCBiIDApIGluXG4gICAgZm9yIGkgPSAxIHRvIG5hIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCB4IGkgKHVuc2FmZV9nZXQgYSBpLCB1bnNhZmVfZ2V0IGIgaSlcbiAgICBkb25lO1xuICAgIHhcbiAgZW5kXG5cbmV4Y2VwdGlvbiBCb3R0b20gb2YgaW50XG5sZXQgc29ydCBjbXAgYSA9XG4gIGxldCBtYXhzb24gbCBpID1cbiAgICBsZXQgaTMxID0gaStpK2krMSBpblxuICAgIGxldCB4ID0gcmVmIGkzMSBpblxuICAgIGlmIGkzMSsyIDwgbCB0aGVuIGJlZ2luXG4gICAgICBpZiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMCB0aGVuIHggOj0gaTMxKzE7XG4gICAgICBpZiBjbXAgKGdldCBhICF4KSAoZ2V0IGEgKGkzMSsyKSkgPCAwIHRoZW4geCA6PSBpMzErMjtcbiAgICAgICF4XG4gICAgZW5kIGVsc2VcbiAgICAgIGlmIGkzMSsxIDwgbCAmJiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMFxuICAgICAgdGhlbiBpMzErMVxuICAgICAgZWxzZSBpZiBpMzEgPCBsIHRoZW4gaTMxIGVsc2UgcmFpc2UgKEJvdHRvbSBpKVxuICBpblxuICBsZXQgcmVjIHRyaWNrbGVkb3duIGwgaSBlID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBpZiBjbXAgKGdldCBhIGopIGUgPiAwIHRoZW4gYmVnaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgICAgdHJpY2tsZWRvd24gbCBqIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCB0cmlja2xlIGwgaSBlID0gdHJ5IHRyaWNrbGVkb3duIGwgaSBlIHdpdGggQm90dG9tIGkgLT4gc2V0IGEgaSBlIGluXG4gIGxldCByZWMgYnViYmxlZG93biBsIGkgPVxuICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgIGJ1YmJsZWRvd24gbCBqXG4gIGluXG4gIGxldCBidWJibGUgbCBpID0gdHJ5IGJ1YmJsZWRvd24gbCBpIHdpdGggQm90dG9tIGkgLT4gaSBpblxuICBsZXQgcmVjIHRyaWNrbGV1cCBpIGUgPVxuICAgIGxldCBmYXRoZXIgPSAoaSAtIDEpIC8gMyBpblxuICAgIGFzc2VydCAoaSA8PiBmYXRoZXIpO1xuICAgIGlmIGNtcCAoZ2V0IGEgZmF0aGVyKSBlIDwgMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBmYXRoZXIpO1xuICAgICAgaWYgZmF0aGVyID4gMCB0aGVuIHRyaWNrbGV1cCBmYXRoZXIgZSBlbHNlIHNldCBhIDAgZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgc2V0IGEgaSBlO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBmb3IgaSA9IChsICsgMSkgLyAzIC0gMSBkb3dudG8gMCBkbyB0cmlja2xlIGwgaSAoZ2V0IGEgaSk7IGRvbmU7XG4gIGZvciBpID0gbCAtIDEgZG93bnRvIDIgZG9cbiAgICBsZXQgZSA9IChnZXQgYSBpKSBpblxuICAgIHNldCBhIGkgKGdldCBhIDApO1xuICAgIHRyaWNrbGV1cCAoYnViYmxlIGkgMCkgZTtcbiAgZG9uZTtcbiAgaWYgbCA+IDEgdGhlbiAobGV0IGUgPSAoZ2V0IGEgMSkgaW4gc2V0IGEgMSAoZ2V0IGEgMCk7IHNldCBhIDAgZSlcblxuXG5sZXQgY3V0b2ZmID0gNVxubGV0IHN0YWJsZV9zb3J0IGNtcCBhID1cbiAgbGV0IG1lcmdlIHNyYzFvZnMgc3JjMWxlbiBzcmMyIHNyYzJvZnMgc3JjMmxlbiBkc3QgZHN0b2ZzID1cbiAgICBsZXQgc3JjMXIgPSBzcmMxb2ZzICsgc3JjMWxlbiBhbmQgc3JjMnIgPSBzcmMyb2ZzICsgc3JjMmxlbiBpblxuICAgIGxldCByZWMgbG9vcCBpMSBzMSBpMiBzMiBkID1cbiAgICAgIGlmIGNtcCBzMSBzMiA8PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGRzdCBkIHMxO1xuICAgICAgICBsZXQgaTEgPSBpMSArIDEgaW5cbiAgICAgICAgaWYgaTEgPCBzcmMxciB0aGVuXG4gICAgICAgICAgbG9vcCBpMSAoZ2V0IGEgaTEpIGkyIHMyIChkICsgMSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJsaXQgc3JjMiBpMiBkc3QgKGQgKyAxKSAoc3JjMnIgLSBpMilcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMjtcbiAgICAgICAgbGV0IGkyID0gaTIgKyAxIGluXG4gICAgICAgIGlmIGkyIDwgc3JjMnIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgczEgaTIgKGdldCBzcmMyIGkyKSAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IGEgaTEgZHN0IChkICsgMSkgKHNyYzFyIC0gaTEpXG4gICAgICBlbmRcbiAgICBpbiBsb29wIHNyYzFvZnMgKGdldCBhIHNyYzFvZnMpIHNyYzJvZnMgKGdldCBzcmMyIHNyYzJvZnMpIGRzdG9mcztcbiAgaW5cbiAgbGV0IGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGUgPSAoZ2V0IGEgKHNyY29mcyArIGkpKSBpblxuICAgICAgbGV0IGogPSByZWYgKGRzdG9mcyArIGkgLSAxKSBpblxuICAgICAgd2hpbGUgKCFqID49IGRzdG9mcyAmJiBjbXAgKGdldCBkc3QgIWopIGUgPiAwKSBkb1xuICAgICAgICBzZXQgZHN0ICghaiArIDEpIChnZXQgZHN0ICFqKTtcbiAgICAgICAgZGVjciBqO1xuICAgICAgZG9uZTtcbiAgICAgIHNldCBkc3QgKCFqICsgMSkgZTtcbiAgICBkb25lO1xuICBpblxuICBsZXQgcmVjIHNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgIGlmIGxlbiA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiBlbHNlIGJlZ2luXG4gICAgICBsZXQgbDEgPSBsZW4gLyAyIGluXG4gICAgICBsZXQgbDIgPSBsZW4gLSBsMSBpblxuICAgICAgc29ydHRvIChzcmNvZnMgKyBsMSkgZHN0IChkc3RvZnMgKyBsMSkgbDI7XG4gICAgICBzb3J0dG8gc3Jjb2ZzIGEgKHNyY29mcyArIGwyKSBsMTtcbiAgICAgIG1lcmdlIChzcmNvZnMgKyBsMikgbDEgZHN0IChkc3RvZnMgKyBsMSkgbDIgZHN0IGRzdG9mcztcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIDAgYSAwIGwgZWxzZSBiZWdpblxuICAgIGxldCBsMSA9IGwgLyAyIGluXG4gICAgbGV0IGwyID0gbCAtIGwxIGluXG4gICAgbGV0IHQgPSBtYWtlIGwyIChnZXQgYSAwKSBpblxuICAgIHNvcnR0byBsMSB0IDAgbDI7XG4gICAgc29ydHRvIDAgYSBsMiBsMTtcbiAgICBtZXJnZSBsMiBsMSB0IDAgbDIgYSAwO1xuICBlbmRcblxuXG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgdGhlblxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICAgIGVsc2UgU2VxLk5pbFxuICBpblxuICBhdXggMFxuXG5sZXQgb2ZfcmV2X2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGxlbiA9IGxpc3RfbGVuZ3RoIDAgbCBpblxuICAgICAgbGV0IGEgPSBjcmVhdGUgbGVuIGhkIGluXG4gICAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgW10gLT4gYVxuICAgICAgICB8IGhkOjp0bCAtPiB1bnNhZmVfc2V0IGEgaSBoZDsgZmlsbCAoaS0xKSB0bFxuICAgICAgaW5cbiAgICAgIGZpbGwgKGxlbi0yKSB0bFxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgbCA9IFNlcS5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiB4OjphY2MpIFtdIGkgaW5cbiAgb2ZfcmV2X2xpc3QgbFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTZXRzIG92ZXIgb3JkZXJlZCB0eXBlcyAqKVxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBlbHRcbiAgICB0eXBlIHRcbiAgICB2YWwgZW1wdHk6IHRcbiAgICB2YWwgaXNfZW1wdHk6IHQgLT4gYm9vbFxuICAgIHZhbCBtZW06IGVsdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgYWRkOiBlbHQgLT4gdCAtPiB0XG4gICAgdmFsIHNpbmdsZXRvbjogZWx0IC0+IHRcbiAgICB2YWwgcmVtb3ZlOiBlbHQgLT4gdCAtPiB0XG4gICAgdmFsIHVuaW9uOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBpbnRlcjogdCAtPiB0IC0+IHRcbiAgICB2YWwgZGlzam9pbnQ6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGRpZmY6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIHN1YnNldDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGVsdCAtPiB1bml0KSAtPiB0IC0+IHVuaXRcbiAgICB2YWwgbWFwOiAoZWx0IC0+IGVsdCkgLT4gdCAtPiB0XG4gICAgdmFsIGZvbGQ6IChlbHQgLT4gJ2EgLT4gJ2EpIC0+IHQgLT4gJ2EgLT4gJ2FcbiAgICB2YWwgZm9yX2FsbDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZXhpc3RzOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBmaWx0ZXI6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0XG4gICAgdmFsIGZpbHRlcl9tYXA6IChlbHQgLT4gZWx0IG9wdGlvbikgLT4gdCAtPiB0XG4gICAgdmFsIHBhcnRpdGlvbjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHQgKiB0XG4gICAgdmFsIGNhcmRpbmFsOiB0IC0+IGludFxuICAgIHZhbCBlbGVtZW50czogdCAtPiBlbHQgbGlzdFxuICAgIHZhbCBtaW5fZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtaW5fZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIG1heF9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1heF9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgY2hvb3NlOiB0IC0+IGVsdFxuICAgIHZhbCBjaG9vc2Vfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgc3BsaXQ6IGVsdCAtPiB0IC0+IHQgKiBib29sICogdFxuICAgIHZhbCBmaW5kOiBlbHQgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9vcHQ6IGVsdCAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgZmluZF9maXJzdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX2ZpcnN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgZmluZF9sYXN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfbGFzdF9vcHQ6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIG9mX2xpc3Q6IGVsdCBsaXN0IC0+IHRcbiAgICB2YWwgdG9fc2VxX2Zyb20gOiBlbHQgLT4gdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgdG9fc2VxIDogdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgdG9fcmV2X3NlcSA6IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiBlbHQgU2VxLnQgLT4gdCAtPiB0XG4gICAgdmFsIG9mX3NlcSA6IGVsdCBTZXEudCAtPiB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZShPcmQ6IE9yZGVyZWRUeXBlKSA9XG4gIHN0cnVjdFxuICAgIHR5cGUgZWx0ID0gT3JkLnRcbiAgICB0eXBlIHQgPSBFbXB0eSB8IE5vZGUgb2Yge2w6dDsgdjplbHQ7IHI6dDsgaDppbnR9XG5cbiAgICAoKiBTZXRzIGFyZSByZXByZXNlbnRlZCBieSBiYWxhbmNlZCBiaW5hcnkgdHJlZXMgKHRoZSBoZWlnaHRzIG9mIHRoZVxuICAgICAgIGNoaWxkcmVuIGRpZmZlciBieSBhdCBtb3N0IDIgKilcblxuICAgIGxldCBoZWlnaHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGUge2h9IC0+IGhcblxuICAgICgqIENyZWF0ZXMgYSBuZXcgbm9kZSB3aXRoIGxlZnQgc29uIGwsIHZhbHVlIHYgYW5kIHJpZ2h0IHNvbiByLlxuICAgICAgIFdlIG11c3QgaGF2ZSBhbGwgZWxlbWVudHMgb2YgbCA8IHYgPCBhbGwgZWxlbWVudHMgb2Ygci5cbiAgICAgICBsIGFuZCByIG11c3QgYmUgYmFsYW5jZWQgYW5kIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDIuXG4gICAgICAgSW5saW5lIGV4cGFuc2lvbiBvZiBoZWlnaHQgZm9yIGJldHRlciBzcGVlZC4gKilcblxuICAgIGxldCBjcmVhdGUgbCB2IHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIE5vZGV7bDsgdjsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgKCogU2FtZSBhcyBjcmVhdGUsIGJ1dCBwZXJmb3JtcyBvbmUgc3RlcCBvZiByZWJhbGFuY2luZyBpZiBuZWNlc3NhcnkuXG4gICAgICAgQXNzdW1lcyBsIGFuZCByIGJhbGFuY2VkIGFuZCB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAzLlxuICAgICAgIElubGluZSBleHBhbnNpb24gb2YgY3JlYXRlIGZvciBiZXR0ZXIgc3BlZWQgaW4gdGhlIG1vc3QgZnJlcXVlbnQgY2FzZVxuICAgICAgIHdoZXJlIG5vIHJlYmFsYW5jaW5nIGlzIHJlcXVpcmVkLiAqKVxuXG4gICAgbGV0IGJhbCBsIHYgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgaWYgaGwgPiBociArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBsIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1sbDsgdj1sdjsgcj1scn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCBsbCA+PSBoZWlnaHQgbHIgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgbGwgbHYgKGNyZWF0ZSBsciB2IHIpXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIGxyIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1scmw7IHY9bHJ2OyByPWxycn0tPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbGwgbHYgbHJsKSBscnYgKGNyZWF0ZSBscnIgdiByKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBpZiBociA+IGhsICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIHIgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPXJsOyB2PXJ2OyByPXJyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IHJyID49IGhlaWdodCBybCB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgdiBybCkgcnYgcnJcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggcmwgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPXJsbDsgdj1ybHY7IHI9cmxyfSAtPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB2IHJsbCkgcmx2IChjcmVhdGUgcmxyIHJ2IHJyKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZVxuICAgICAgICBOb2Rle2w7IHY7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgICgqIEluc2VydGlvbiBvZiBvbmUgZWxlbWVudCAqKVxuXG4gICAgbGV0IHJlYyBhZGQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vZGV7bD1FbXB0eTsgdj14OyByPUVtcHR5OyBoPTF9XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiB0IGVsc2VcbiAgICAgICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSBhZGQgeCBsIGluXG4gICAgICAgICAgICBpZiBsID09IGxsIHRoZW4gdCBlbHNlIGJhbCBsbCB2IHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSBhZGQgeCByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gdCBlbHNlIGJhbCBsIHYgcnJcblxuICAgIGxldCBzaW5nbGV0b24geCA9IE5vZGV7bD1FbXB0eTsgdj14OyByPUVtcHR5OyBoPTF9XG5cbiAgICAoKiBCZXdhcmU6IHRob3NlIHR3byBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGhlIGFkZGVkIHYgaXMgKnN0cmljdGx5KlxuICAgICAgIHNtYWxsZXIgKG9yIGJpZ2dlcikgdGhhbiBhbGwgdGhlIHByZXNlbnQgZWxlbWVudHMgaW4gdGhlIHRyZWU7IGl0XG4gICAgICAgZG9lcyBub3QgdGVzdCBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgY3VycmVudCBtaW4gKG9yIG1heCkgZWxlbWVudC5cbiAgICAgICBJbmRlZWQsIHRoZXkgYXJlIG9ubHkgdXNlZCBkdXJpbmcgdGhlIFwiam9pblwiIG9wZXJhdGlvbiB3aGljaFxuICAgICAgIHJlc3BlY3RzIHRoaXMgcHJlY29uZGl0aW9uLlxuICAgICopXG5cbiAgICBsZXQgcmVjIGFkZF9taW5fZWxlbWVudCB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgYmFsIChhZGRfbWluX2VsZW1lbnQgeCBsKSB2IHJcblxuICAgIGxldCByZWMgYWRkX21heF9lbGVtZW50IHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24geFxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICBiYWwgbCB2IChhZGRfbWF4X2VsZW1lbnQgeCByKVxuXG4gICAgKCogU2FtZSBhcyBjcmVhdGUgYW5kIGJhbCwgYnV0IG5vIGFzc3VtcHRpb25zIGFyZSBtYWRlIG9uIHRoZVxuICAgICAgIHJlbGF0aXZlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCByZWMgam9pbiBsIHYgciA9XG4gICAgICBtYXRjaCAobCwgcikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IGFkZF9taW5fZWxlbWVudCB2IHJcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBhZGRfbWF4X2VsZW1lbnQgdiBsXG4gICAgICB8IChOb2Rle2w9bGw7IHY9bHY7IHI9bHI7IGg9bGh9LCBOb2Rle2w9cmw7IHY9cnY7IHI9cnI7IGg9cmh9KSAtPlxuICAgICAgICAgIGlmIGxoID4gcmggKyAyIHRoZW4gYmFsIGxsIGx2IChqb2luIGxyIHYgcikgZWxzZVxuICAgICAgICAgIGlmIHJoID4gbGggKyAyIHRoZW4gYmFsIChqb2luIGwgdiBybCkgcnYgcnIgZWxzZVxuICAgICAgICAgIGNyZWF0ZSBsIHYgclxuXG4gICAgKCogU21hbGxlc3QgYW5kIGdyZWF0ZXN0IGVsZW1lbnQgb2YgYSBzZXQgKilcblxuICAgIGxldCByZWMgbWluX2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHZ9IC0+IHZcbiAgICAgIHwgTm9kZXtsfSAtPiBtaW5fZWx0IGxcblxuICAgIGxldCByZWMgbWluX2VsdF9vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgdn0gLT4gU29tZSB2XG4gICAgICB8IE5vZGV7bH0gLT4gbWluX2VsdF9vcHQgbFxuXG4gICAgbGV0IHJlYyBtYXhfZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7djsgcj1FbXB0eX0gLT4gdlxuICAgICAgfCBOb2Rle3J9IC0+IG1heF9lbHQgclxuXG4gICAgbGV0IHJlYyBtYXhfZWx0X29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXt2OyByPUVtcHR5fSAtPiBTb21lIHZcbiAgICAgIHwgTm9kZXtyfSAtPiBtYXhfZWx0X29wdCByXG5cbiAgICAoKiBSZW1vdmUgdGhlIHNtYWxsZXN0IGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNldCAqKVxuXG4gICAgbGV0IHJlYyByZW1vdmVfbWluX2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LnJlbW92ZV9taW5fZWx0XCJcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyByfSAtPiByXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gYmFsIChyZW1vdmVfbWluX2VsdCBsKSB2IHJcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBBc3N1bWUgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi4gKilcblxuICAgIGxldCBtZXJnZSB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IGJhbCB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIE5vIGFzc3VtcHRpb24gb24gdGhlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCBjb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiBqb2luIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICAoKiBTcGxpdHRpbmcuICBzcGxpdCB4IHMgcmV0dXJucyBhIHRyaXBsZSAobCwgcHJlc2VudCwgcikgd2hlcmVcbiAgICAgICAgLSBsIGlzIHRoZSBzZXQgb2YgZWxlbWVudHMgb2YgcyB0aGF0IGFyZSA8IHhcbiAgICAgICAgLSByIGlzIHRoZSBzZXQgb2YgZWxlbWVudHMgb2YgcyB0aGF0IGFyZSA+IHhcbiAgICAgICAgLSBwcmVzZW50IGlzIGZhbHNlIGlmIHMgY29udGFpbnMgbm8gZWxlbWVudCBlcXVhbCB0byB4LFxuICAgICAgICAgIG9yIHRydWUgaWYgcyBjb250YWlucyBhbiBlbGVtZW50IGVxdWFsIHRvIHguICopXG5cbiAgICBsZXQgcmVjIHNwbGl0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIChFbXB0eSwgZmFsc2UsIEVtcHR5KVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIChsLCB0cnVlLCByKVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IChsbCwgcHJlcywgcmwpID0gc3BsaXQgeCBsIGluIChsbCwgcHJlcywgam9pbiBybCB2IHIpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsciwgcHJlcywgcnIpID0gc3BsaXQgeCByIGluIChqb2luIGwgdiBsciwgcHJlcywgcnIpXG5cbiAgICAoKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2V0IG9wZXJhdGlvbnMgKilcblxuICAgIGxldCBlbXB0eSA9IEVtcHR5XG5cbiAgICBsZXQgaXNfZW1wdHkgPSBmdW5jdGlvbiBFbXB0eSAtPiB0cnVlIHwgXyAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGMgPSAwIHx8IG1lbSB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyByZW1vdmUgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w7IHY7IHJ9IGFzIHQpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIG1lcmdlIGwgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgICAgbGV0IGxsID0gcmVtb3ZlIHggbCBpblxuICAgICAgICAgICAgICBpZiBsID09IGxsIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIGJhbCBsbCB2IHJcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IHJyID0gcmVtb3ZlIHggciBpblxuICAgICAgICAgICAgICBpZiByID09IHJyIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIGJhbCBsIHYgcnJcblxuICAgIGxldCByZWMgdW5pb24gczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIHQyKSAtPiB0MlxuICAgICAgfCAodDEsIEVtcHR5KSAtPiB0MVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxOyBoPWgxfSwgTm9kZXtsPWwyOyB2PXYyOyByPXIyOyBoPWgyfSkgLT5cbiAgICAgICAgICBpZiBoMSA+PSBoMiB0aGVuXG4gICAgICAgICAgICBpZiBoMiA9IDEgdGhlbiBhZGQgdjIgczEgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBsZXQgKGwyLCBfLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikgdjEgKHVuaW9uIHIxIHIyKVxuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgaDEgPSAxIHRoZW4gYWRkIHYxIHMyIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbGV0IChsMSwgXywgcjEpID0gc3BsaXQgdjIgczEgaW5cbiAgICAgICAgICAgICAgam9pbiAodW5pb24gbDEgbDIpIHYyICh1bmlvbiByMSByMilcbiAgICAgICAgICAgIGVuZFxuXG4gICAgbGV0IHJlYyBpbnRlciBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gRW1wdHlcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aFxuICAgICAgICAgICAgKGwyLCBmYWxzZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGNvbmNhdCAoaW50ZXIgbDEgbDIpIChpbnRlciByMSByMilcbiAgICAgICAgICB8IChsMiwgdHJ1ZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGpvaW4gKGludGVyIGwxIGwyKSB2MSAoaW50ZXIgcjEgcjIpXG5cbiAgICAoKiBTYW1lIGFzIHNwbGl0LCBidXQgY29tcHV0ZSB0aGUgbGVmdCBhbmQgcmlnaHQgc3VidHJlZXNcbiAgICAgICBvbmx5IGlmIHRoZSBwaXZvdCBlbGVtZW50IGlzIG5vdCBpbiB0aGUgc2V0LiAgVGhlIHJpZ2h0IHN1YnRyZWVcbiAgICAgICBpcyBjb21wdXRlZCBvbiBkZW1hbmQuICopXG5cbiAgICB0eXBlIHNwbGl0X2JpcyA9XG4gICAgICB8IEZvdW5kXG4gICAgICB8IE5vdEZvdW5kIG9mIHQgKiAodW5pdCAtPiB0KVxuXG4gICAgbGV0IHJlYyBzcGxpdF9iaXMgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm90Rm91bmQgKEVtcHR5LCAoZnVuICgpIC0+IEVtcHR5KSlcbiAgICAgIHwgTm9kZXtsOyB2OyByOyBffSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBGb3VuZFxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbWF0Y2ggc3BsaXRfYmlzIHggbCB3aXRoXG4gICAgICAgICAgICB8IEZvdW5kIC0+IEZvdW5kXG4gICAgICAgICAgICB8IE5vdEZvdW5kIChsbCwgcmwpIC0+IE5vdEZvdW5kIChsbCwgKGZ1biAoKSAtPiBqb2luIChybCAoKSkgdiByKSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBtYXRjaCBzcGxpdF9iaXMgeCByIHdpdGhcbiAgICAgICAgICAgIHwgRm91bmQgLT4gRm91bmRcbiAgICAgICAgICAgIHwgTm90Rm91bmQgKGxyLCBycikgLT4gTm90Rm91bmQgKGpvaW4gbCB2IGxyLCBycilcblxuICAgIGxldCByZWMgZGlzam9pbnQgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIHwgKF8sIEVtcHR5KSAtPiB0cnVlXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBpZiBzMSA9PSBzMiB0aGVuIGZhbHNlXG4gICAgICAgICAgZWxzZSBtYXRjaCBzcGxpdF9iaXMgdjEgdDIgd2l0aFxuICAgICAgICAgICAgICBOb3RGb3VuZChsMiwgcjIpIC0+IGRpc2pvaW50IGwxIGwyICYmIGRpc2pvaW50IHIxIChyMiAoKSlcbiAgICAgICAgICAgIHwgRm91bmQgLT4gZmFsc2VcblxuICAgIGxldCByZWMgZGlmZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gRW1wdHlcbiAgICAgIHwgKHQxLCBFbXB0eSkgLT4gdDFcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIG1hdGNoIHNwbGl0IHYxIHQyIHdpdGhcbiAgICAgICAgICAgIChsMiwgZmFsc2UsIHIyKSAtPlxuICAgICAgICAgICAgICBqb2luIChkaWZmIGwxIGwyKSB2MSAoZGlmZiByMSByMilcbiAgICAgICAgICB8IChsMiwgdHJ1ZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGNvbmNhdCAoZGlmZiBsMSBsMikgKGRpZmYgcjEgcjIpXG5cbiAgICB0eXBlIGVudW1lcmF0aW9uID0gRW5kIHwgTW9yZSBvZiBlbHQgKiB0ICogZW51bWVyYXRpb25cblxuICAgIGxldCByZWMgY29uc19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGNvbnNfZW51bSBsIChNb3JlKHYsIHIsIGUpKVxuXG4gICAgbGV0IHJlYyBjb21wYXJlX2F1eCBlMSBlMiA9XG4gICAgICAgIG1hdGNoIChlMSwgZTIpIHdpdGhcbiAgICAgICAgKEVuZCwgRW5kKSAtPiAwXG4gICAgICB8IChFbmQsIF8pICAtPiAtMVxuICAgICAgfCAoXywgRW5kKSAtPiAxXG4gICAgICB8IChNb3JlKHYxLCByMSwgZTEpLCBNb3JlKHYyLCByMiwgZTIpKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICBpZiBjIDw+IDBcbiAgICAgICAgICB0aGVuIGNcbiAgICAgICAgICBlbHNlIGNvbXBhcmVfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG5cbiAgICBsZXQgY29tcGFyZSBzMSBzMiA9XG4gICAgICBjb21wYXJlX2F1eCAoY29uc19lbnVtIHMxIEVuZCkgKGNvbnNfZW51bSBzMiBFbmQpXG5cbiAgICBsZXQgZXF1YWwgczEgczIgPVxuICAgICAgY29tcGFyZSBzMSBzMiA9IDBcblxuICAgIGxldCByZWMgc3Vic2V0IHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgRW1wdHksIF8gLT5cbiAgICAgICAgICB0cnVlXG4gICAgICB8IF8sIEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgTm9kZSB7bD1sMTsgdj12MTsgcj1yMX0sIChOb2RlIHtsPWwyOyB2PXYyOyByPXIyfSBhcyB0MikgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgc3Vic2V0IGwxIGwyICYmIHN1YnNldCByMSByMlxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgc3Vic2V0IChOb2RlIHtsPWwxOyB2PXYxOyByPUVtcHR5OyBoPTB9KSBsMiAmJiBzdWJzZXQgcjEgdDJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBzdWJzZXQgKE5vZGUge2w9RW1wdHk7IHY9djE7IHI9cjE7IGg9MH0pIHIyICYmIHN1YnNldCBsMSB0MlxuXG4gICAgbGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoKVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGl0ZXIgZiBsOyBmIHY7IGl0ZXIgZiByXG5cbiAgICBsZXQgcmVjIGZvbGQgZiBzIGFjY3UgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBmb2xkIGYgciAoZiB2IChmb2xkIGYgbCBhY2N1KSlcblxuICAgIGxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gdHJ1ZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHAgdiAmJiBmb3JfYWxsIHAgbCAmJiBmb3JfYWxsIHAgclxuXG4gICAgbGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gcCB2IHx8IGV4aXN0cyBwIGwgfHwgZXhpc3RzIHAgclxuXG4gICAgbGV0IHJlYyBmaWx0ZXIgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w7IHY7IHJ9KSBhcyB0IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgbCcgPSBmaWx0ZXIgcCBsIGluXG4gICAgICAgICAgbGV0IHB2ID0gcCB2IGluXG4gICAgICAgICAgbGV0IHInID0gZmlsdGVyIHAgciBpblxuICAgICAgICAgIGlmIHB2IHRoZW5cbiAgICAgICAgICAgIGlmIGw9PWwnICYmIHI9PXInIHRoZW4gdCBlbHNlIGpvaW4gbCcgdiByJ1xuICAgICAgICAgIGVsc2UgY29uY2F0IGwnIHInXG5cbiAgICBsZXQgcmVjIHBhcnRpdGlvbiBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKEVtcHR5LCBFbXB0eSlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IChsdCwgbGYpID0gcGFydGl0aW9uIHAgbCBpblxuICAgICAgICAgIGxldCBwdiA9IHAgdiBpblxuICAgICAgICAgIGxldCAocnQsIHJmKSA9IHBhcnRpdGlvbiBwIHIgaW5cbiAgICAgICAgICBpZiBwdlxuICAgICAgICAgIHRoZW4gKGpvaW4gbHQgdiBydCwgY29uY2F0IGxmIHJmKVxuICAgICAgICAgIGVsc2UgKGNvbmNhdCBsdCBydCwgam9pbiBsZiB2IHJmKVxuXG4gICAgbGV0IHJlYyBjYXJkaW5hbCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZXtsOyByfSAtPiBjYXJkaW5hbCBsICsgMSArIGNhcmRpbmFsIHJcblxuICAgIGxldCByZWMgZWxlbWVudHNfYXV4IGFjY3UgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gZWxlbWVudHNfYXV4ICh2IDo6IGVsZW1lbnRzX2F1eCBhY2N1IHIpIGxcblxuICAgIGxldCBlbGVtZW50cyBzID1cbiAgICAgIGVsZW1lbnRzX2F1eCBbXSBzXG5cbiAgICBsZXQgY2hvb3NlID0gbWluX2VsdFxuXG4gICAgbGV0IGNob29zZV9vcHQgPSBtaW5fZWx0X29wdFxuXG4gICAgbGV0IHJlYyBmaW5kIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiB2XG4gICAgICAgICAgZWxzZSBmaW5kIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3RfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2MCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3QgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHQgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2MCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3QgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHQgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfb3B0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gU29tZSB2XG4gICAgICAgICAgZWxzZSBmaW5kX29wdCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHRyeV9qb2luIGwgdiByID1cbiAgICAgICgqIFtqb2luIGwgdiByXSBjYW4gb25seSBiZSBjYWxsZWQgd2hlbiAoZWxlbWVudHMgb2YgbCA8IHYgPFxuICAgICAgICAgZWxlbWVudHMgb2Ygcik7IHVzZSBbdHJ5X2pvaW4gbCB2IHJdIHdoZW4gdGhpcyBwcm9wZXJ0eSBtYXlcbiAgICAgICAgIG5vdCBob2xkLCBidXQgeW91IGhvcGUgaXQgZG9lcyBob2xkIGluIHRoZSBjb21tb24gY2FzZSAqKVxuICAgICAgaWYgKGwgPSBFbXB0eSB8fCBPcmQuY29tcGFyZSAobWF4X2VsdCBsKSB2IDwgMClcbiAgICAgICYmIChyID0gRW1wdHkgfHwgT3JkLmNvbXBhcmUgdiAobWluX2VsdCByKSA8IDApXG4gICAgICB0aGVuIGpvaW4gbCB2IHJcbiAgICAgIGVsc2UgdW5pb24gbCAoYWRkIHYgcilcblxuICAgIGxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICgqIGVuZm9yY2UgbGVmdC10by1yaWdodCBldmFsdWF0aW9uIG9yZGVyICopXG4gICAgICAgICBsZXQgbCcgPSBtYXAgZiBsIGluXG4gICAgICAgICBsZXQgdicgPSBmIHYgaW5cbiAgICAgICAgIGxldCByJyA9IG1hcCBmIHIgaW5cbiAgICAgICAgIGlmIGwgPT0gbCcgJiYgdiA9PSB2JyAmJiByID09IHInIHRoZW4gdFxuICAgICAgICAgZWxzZSB0cnlfam9pbiBsJyB2JyByJ1xuXG4gICAgbGV0IHRyeV9jb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiB0cnlfam9pbiB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgbGV0IHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICgqIGVuZm9yY2UgbGVmdC10by1yaWdodCBldmFsdWF0aW9uIG9yZGVyICopXG4gICAgICAgICBsZXQgbCcgPSBmaWx0ZXJfbWFwIGYgbCBpblxuICAgICAgICAgbGV0IHYnID0gZiB2IGluXG4gICAgICAgICBsZXQgcicgPSBmaWx0ZXJfbWFwIGYgciBpblxuICAgICAgICAgYmVnaW4gbWF0Y2ggdicgd2l0aFxuICAgICAgICAgICB8IFNvbWUgdicgLT5cbiAgICAgICAgICAgICAgaWYgbCA9PSBsJyAmJiB2ID09IHYnICYmIHIgPT0gcicgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgdHJ5X2pvaW4gbCcgdicgcidcbiAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgIHRyeV9jb25jYXQgbCcgcidcbiAgICAgICAgIGVuZFxuXG4gICAgbGV0IG9mX3NvcnRlZF9saXN0IGwgPVxuICAgICAgbGV0IHJlYyBzdWIgbiBsID1cbiAgICAgICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgICAgIHwgMCwgbCAtPiBFbXB0eSwgbFxuICAgICAgICB8IDEsIHgwIDo6IGwgLT4gTm9kZSB7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfSwgbFxuICAgICAgICB8IDIsIHgwIDo6IHgxIDo6IGwgLT5cbiAgICAgICAgICAgIE5vZGV7bD1Ob2Rle2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX07IHY9eDE7IHI9RW1wdHk7IGg9Mn0sIGxcbiAgICAgICAgfCAzLCB4MCA6OiB4MSA6OiB4MiA6OiBsIC0+XG4gICAgICAgICAgICBOb2Rle2w9Tm9kZXtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9OyB2PXgxO1xuICAgICAgICAgICAgICAgICByPU5vZGV7bD1FbXB0eTsgdj14Mjsgcj1FbXB0eTsgaD0xfTsgaD0yfSwgbFxuICAgICAgICB8IG4sIGwgLT5cbiAgICAgICAgICBsZXQgbmwgPSBuIC8gMiBpblxuICAgICAgICAgIGxldCBsZWZ0LCBsID0gc3ViIG5sIGwgaW5cbiAgICAgICAgICBtYXRjaCBsIHdpdGhcbiAgICAgICAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgbWlkIDo6IGwgLT5cbiAgICAgICAgICAgIGxldCByaWdodCwgbCA9IHN1YiAobiAtIG5sIC0gMSkgbCBpblxuICAgICAgICAgICAgY3JlYXRlIGxlZnQgbWlkIHJpZ2h0LCBsXG4gICAgICBpblxuICAgICAgZnN0IChzdWIgKExpc3QubGVuZ3RoIGwpIGwpXG5cbiAgICBsZXQgb2ZfbGlzdCBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBlbXB0eVxuICAgICAgfCBbeDBdIC0+IHNpbmdsZXRvbiB4MFxuICAgICAgfCBbeDA7IHgxXSAtPiBhZGQgeDEgKHNpbmdsZXRvbiB4MClcbiAgICAgIHwgW3gwOyB4MTsgeDJdIC0+IGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKVxuICAgICAgfCBbeDA7IHgxOyB4MjsgeDNdIC0+IGFkZCB4MyAoYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpKVxuICAgICAgfCBbeDA7IHgxOyB4MjsgeDM7IHg0XSAtPiBhZGQgeDQgKGFkZCB4MyAoYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpKSlcbiAgICAgIHwgXyAtPiBvZl9zb3J0ZWRfbGlzdCAoTGlzdC5zb3J0X3VuaXEgT3JkLmNvbXBhcmUgbClcblxuICAgIGxldCBhZGRfc2VxIGkgbSA9XG4gICAgICBTZXEuZm9sZF9sZWZ0IChmdW4gcyB4IC0+IGFkZCB4IHMpIG0gaVxuXG4gICAgbGV0IG9mX3NlcSBpID0gYWRkX3NlcSBpIGVtcHR5XG5cbiAgICBsZXQgcmVjIHNlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKHgsIHQsIHJlc3QpIC0+IFNlcS5Db25zICh4LCBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3NlcSBjID0gc2VxX29mX2VudW1fIChjb25zX2VudW0gYyBFbmQpXG5cbiAgICBsZXQgcmVjIHNub2NfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBzbm9jX2VudW0gciAoTW9yZSh2LCBsLCBlKSlcblxuICAgIGxldCByZWMgcmV2X3NlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKHgsIHQsIHJlc3QpIC0+IFNlcS5Db25zICh4LCByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19yZXZfc2VxIGMgPSByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gYyBFbmQpXG5cbiAgICBsZXQgdG9fc2VxX2Zyb20gbG93IHMgPVxuICAgICAgbGV0IHJlYyBhdXggbG93IHMgYyA9IG1hdGNoIHMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGNcbiAgICAgICAgfCBOb2RlIHtsOyByOyB2OyBffSAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggT3JkLmNvbXBhcmUgdiBsb3cgd2l0aFxuICAgICAgICAgICAgICB8IDAgLT4gTW9yZSAodiwgciwgYylcbiAgICAgICAgICAgICAgfCBuIHdoZW4gbjwwIC0+IGF1eCBsb3cgciBjXG4gICAgICAgICAgICAgIHwgXyAtPiBhdXggbG93IGwgKE1vcmUgKHYsIHIsIGMpKVxuICAgICAgICAgICAgZW5kXG4gICAgICBpblxuICAgICAgc2VxX29mX2VudW1fIChhdXggbG93IHMgRW5kKVxuICBlbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhKydhIHRcbiAgICB2YWwgZW1wdHk6ICdhIHRcbiAgICB2YWwgaXNfZW1wdHk6ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBtZW06ICBrZXkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGFkZDoga2V5IC0+ICdhIC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCB1cGRhdGU6IGtleSAtPiAoJ2Egb3B0aW9uIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIHNpbmdsZXRvbjoga2V5IC0+ICdhIC0+ICdhIHRcbiAgICB2YWwgcmVtb3ZlOiBrZXkgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIG1lcmdlOlxuICAgICAgICAgIChrZXkgLT4gJ2Egb3B0aW9uIC0+ICdiIG9wdGlvbiAtPiAnYyBvcHRpb24pIC0+ICdhIHQgLT4gJ2IgdCAtPiAnYyB0XG4gICAgdmFsIHVuaW9uOiAoa2V5IC0+ICdhIC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgY29tcGFyZTogKCdhIC0+ICdhIC0+IGludCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogKCdhIC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQ6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgZm9yX2FsbDogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgZXhpc3RzOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBmaWx0ZXI6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGZpbHRlcl9tYXA6IChrZXkgLT4gJ2EgLT4gJ2Igb3B0aW9uKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgcGFydGl0aW9uOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdCAqICdhIHRcbiAgICB2YWwgY2FyZGluYWw6ICdhIHQgLT4gaW50XG4gICAgdmFsIGJpbmRpbmdzOiAnYSB0IC0+IChrZXkgKiAnYSkgbGlzdFxuICAgIHZhbCBtaW5fYmluZGluZzogJ2EgdCAtPiAoa2V5ICogJ2EpXG4gICAgdmFsIG1pbl9iaW5kaW5nX29wdDogJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBtYXhfYmluZGluZzogJ2EgdCAtPiAoa2V5ICogJ2EpXG4gICAgdmFsIG1heF9iaW5kaW5nX29wdDogJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBjaG9vc2U6ICdhIHQgLT4gKGtleSAqICdhKVxuICAgIHZhbCBjaG9vc2Vfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIHNwbGl0OiBrZXkgLT4gJ2EgdCAtPiAnYSB0ICogJ2Egb3B0aW9uICogJ2EgdFxuICAgIHZhbCBmaW5kOiBrZXkgLT4gJ2EgdCAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDoga2V5IC0+ICdhIHQgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfZmlyc3Q6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiBrZXkgKiAnYVxuICAgIHZhbCBmaW5kX2ZpcnN0X29wdDogKGtleSAtPiBib29sKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIGZpbmRfbGFzdDogKGtleSAtPiBib29sKSAtPiAnYSB0IC0+IGtleSAqICdhXG4gICAgdmFsIGZpbmRfbGFzdF9vcHQ6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBtYXA6ICgnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiB0XG4gICAgdmFsIG1hcGk6IChrZXkgLT4gJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fcmV2X3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfZnJvbSA6IGtleSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2UoT3JkOiBPcmRlcmVkVHlwZSkgPSBzdHJ1Y3RcblxuICAgIHR5cGUga2V5ID0gT3JkLnRcblxuICAgIHR5cGUgJ2EgdCA9XG4gICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUgb2Yge2w6J2EgdDsgdjprZXk7IGQ6J2E7IHI6J2EgdDsgaDppbnR9XG5cbiAgICBsZXQgaGVpZ2h0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtofSAtPiBoXG5cbiAgICBsZXQgY3JlYXRlIGwgeCBkIHIgPVxuICAgICAgbGV0IGhsID0gaGVpZ2h0IGwgYW5kIGhyID0gaGVpZ2h0IHIgaW5cbiAgICAgIE5vZGV7bDsgdj14OyBkOyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICBsZXQgc2luZ2xldG9uIHggZCA9IE5vZGV7bD1FbXB0eTsgdj14OyBkOyByPUVtcHR5OyBoPTF9XG5cbiAgICBsZXQgYmFsIGwgeCBkIHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGlmIGhsID4gaHIgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9bGw7IHY9bHY7IGQ9bGQ7IHI9bHJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgbGwgPj0gaGVpZ2h0IGxyIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIGxsIGx2IGxkIChjcmVhdGUgbHIgeCBkIHIpXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIGxyIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1scmw7IHY9bHJ2OyBkPWxyZDsgcj1scnJ9LT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGxsIGx2IGxkIGxybCkgbHJ2IGxyZCAoY3JlYXRlIGxyciB4IGQgcilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2UgaWYgaHIgPiBobCArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCByIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1ybDsgdj1ydjsgZD1yZDsgcj1ycn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCByciA+PSBoZWlnaHQgcmwgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHggZCBybCkgcnYgcmQgcnJcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggcmwgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPXJsbDsgdj1ybHY7IGQ9cmxkOyByPXJscn0gLT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgeCBkIHJsbCkgcmx2IHJsZCAoY3JlYXRlIHJsciBydiByZCBycilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2VcbiAgICAgICAgTm9kZXtsOyB2PXg7IGQ7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgIGxldCBlbXB0eSA9IEVtcHR5XG5cbiAgICBsZXQgaXNfZW1wdHkgPSBmdW5jdGlvbiBFbXB0eSAtPiB0cnVlIHwgXyAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBhZGQgeCBkYXRhID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb2Rle2w9RW1wdHk7IHY9eDsgZD1kYXRhOyByPUVtcHR5OyBoPTF9XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IGFzIG0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGlmIGQgPT0gZGF0YSB0aGVuIG0gZWxzZSBOb2Rle2w7IHY9eDsgZD1kYXRhOyByOyBofVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gYWRkIHggZGF0YSBsIGluXG4gICAgICAgICAgICBpZiBsID09IGxsIHRoZW4gbSBlbHNlIGJhbCBsbCB2IGQgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IGFkZCB4IGRhdGEgciBpblxuICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIG0gZWxzZSBiYWwgbCB2IGQgcnJcblxuICAgIGxldCByZWMgZmluZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gZFxuICAgICAgICAgIGVsc2UgZmluZCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdjAgZDAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBkMCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3RfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdjAgZDAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBkMCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX29wdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFNvbWUgZFxuICAgICAgICAgIGVsc2UgZmluZF9vcHQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBjID0gMCB8fCBtZW0geCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgbWluX2JpbmRpbmcgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgdjsgZH0gLT4gKHYsIGQpXG4gICAgICB8IE5vZGUge2x9IC0+IG1pbl9iaW5kaW5nIGxcblxuICAgIGxldCByZWMgbWluX2JpbmRpbmdfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2RlIHtsPUVtcHR5OyB2OyBkfSAtPiBTb21lICh2LCBkKVxuICAgICAgfCBOb2RlIHtsfS0+IG1pbl9iaW5kaW5nX29wdCBsXG5cbiAgICBsZXQgcmVjIG1heF9iaW5kaW5nID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge3Y7IGQ7IHI9RW1wdHl9IC0+ICh2LCBkKVxuICAgICAgfCBOb2RlIHtyfSAtPiBtYXhfYmluZGluZyByXG5cbiAgICBsZXQgcmVjIG1heF9iaW5kaW5nX29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZSB7djsgZDsgcj1FbXB0eX0gLT4gU29tZSAodiwgZClcbiAgICAgIHwgTm9kZSB7cn0gLT4gbWF4X2JpbmRpbmdfb3B0IHJcblxuICAgIGxldCByZWMgcmVtb3ZlX21pbl9iaW5kaW5nID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAucmVtb3ZlX21pbl9lbHRcIlxuICAgICAgfCBOb2RlIHtsPUVtcHR5OyByfSAtPiByXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IGJhbCAocmVtb3ZlX21pbl9iaW5kaW5nIGwpIHYgZCByXG5cbiAgICBsZXQgbWVyZ2UgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPlxuICAgICAgICAgIGxldCAoeCwgZCkgPSBtaW5fYmluZGluZyB0MiBpblxuICAgICAgICAgIGJhbCB0MSB4IGQgKHJlbW92ZV9taW5fYmluZGluZyB0MilcblxuICAgIGxldCByZWMgcmVtb3ZlIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IChOb2RlIHtsOyB2OyBkOyByfSBhcyBtKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBtZXJnZSBsIHJcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IHJlbW92ZSB4IGwgaW4gaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSByZW1vdmUgeCByIGluIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgcmVjIHVwZGF0ZSB4IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIGYgTm9uZSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IEVtcHR5XG4gICAgICAgICAgfCBTb21lIGRhdGEgLT4gTm9kZXtsPUVtcHR5OyB2PXg7IGQ9ZGF0YTsgcj1FbXB0eTsgaD0xfVxuICAgICAgICAgIGVuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSBhcyBtIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIGJlZ2luXG4gICAgICAgICAgICBtYXRjaCBmIChTb21lIGQpIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiBtZXJnZSBsIHJcbiAgICAgICAgICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgICAgICAgaWYgZCA9PSBkYXRhIHRoZW4gbSBlbHNlIE5vZGV7bDsgdj14OyBkPWRhdGE7IHI7IGh9XG4gICAgICAgICAgZW5kIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gdXBkYXRlIHggZiBsIGluXG4gICAgICAgICAgICBpZiBsID09IGxsIHRoZW4gbSBlbHNlIGJhbCBsbCB2IGQgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IHVwZGF0ZSB4IGYgciBpblxuICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIG0gZWxzZSBiYWwgbCB2IGQgcnJcblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpdGVyIGYgbDsgZiB2IGQ7IGl0ZXIgZiByXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSAtPlxuICAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgICBsZXQgZCcgPSBmIGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICAgTm9kZXtsPWwnOyB2OyBkPWQnOyByPXInOyBofVxuXG4gICAgbGV0IHJlYyBtYXBpIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IC0+XG4gICAgICAgICAgbGV0IGwnID0gbWFwaSBmIGwgaW5cbiAgICAgICAgICBsZXQgZCcgPSBmIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IG1hcGkgZiByIGluXG4gICAgICAgICAgTm9kZXtsPWwnOyB2OyBkPWQnOyByPXInOyBofVxuXG4gICAgbGV0IHJlYyBmb2xkIGYgbSBhY2N1ID1cbiAgICAgIG1hdGNoIG0gd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgZm9sZCBmIHIgKGYgdiBkIChmb2xkIGYgbCBhY2N1KSlcblxuICAgIGxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gdHJ1ZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBwIHYgZCAmJiBmb3JfYWxsIHAgbCAmJiBmb3JfYWxsIHAgclxuXG4gICAgbGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IHAgdiBkIHx8IGV4aXN0cyBwIGwgfHwgZXhpc3RzIHAgclxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCBrIGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGtleXMgaW4gdGhlIHRyZWU7IGl0XG4gICAgICAgZG9lcyBub3QgdGVzdCBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgY3VycmVudCBtaW4gKG9yIG1heCkga2V5LlxuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2JpbmRpbmcgayB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIGsgeFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fYmluZGluZyBrIHggbCkgdiBkIHJcblxuICAgIGxldCByZWMgYWRkX21heF9iaW5kaW5nIGsgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiBrIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiBkIChhZGRfbWF4X2JpbmRpbmcgayB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiBkIHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2JpbmRpbmcgdiBkIHJcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBhZGRfbWF4X2JpbmRpbmcgdiBkIGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgZD1sZDsgcj1scjsgaD1saH0sXG4gICAgICAgICBOb2Rle2w9cmw7IHY9cnY7IGQ9cmQ7IHI9cnI7IGg9cmh9KSAtPlxuICAgICAgICAgIGlmIGxoID4gcmggKyAyIHRoZW4gYmFsIGxsIGx2IGxkIChqb2luIGxyIHYgZCByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IGQgcmwpIHJ2IHJkIHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IGQgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIE5vIGFzc3VtcHRpb24gb24gdGhlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCBjb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPlxuICAgICAgICAgIGxldCAoeCwgZCkgPSBtaW5fYmluZGluZyB0MiBpblxuICAgICAgICAgIGpvaW4gdDEgeCBkIChyZW1vdmVfbWluX2JpbmRpbmcgdDIpXG5cbiAgICBsZXQgY29uY2F0X29yX2pvaW4gdDEgdiBkIHQyID1cbiAgICAgIG1hdGNoIGQgd2l0aFxuICAgICAgfCBTb21lIGQgLT4gam9pbiB0MSB2IGQgdDJcbiAgICAgIHwgTm9uZSAtPiBjb25jYXQgdDEgdDJcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBOb25lLCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIFNvbWUgZCwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiBkIHIpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsciwgcHJlcywgcnIpID0gc3BsaXQgeCByIGluIChqb2luIGwgdiBkIGxyLCBwcmVzLCBycilcblxuICAgIGxldCByZWMgbWVyZ2UgZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2RlIHtsPWwxOyB2PXYxOyBkPWQxOyByPXIxOyBoPWgxfSwgXykgd2hlbiBoMSA+PSBoZWlnaHQgczIgLT5cbiAgICAgICAgICBsZXQgKGwyLCBkMiwgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICBjb25jYXRfb3Jfam9pbiAobWVyZ2UgZiBsMSBsMikgdjEgKGYgdjEgKFNvbWUgZDEpIGQyKSAobWVyZ2UgZiByMSByMilcbiAgICAgIHwgKF8sIE5vZGUge2w9bDI7IHY9djI7IGQ9ZDI7IHI9cjJ9KSAtPlxuICAgICAgICAgIGxldCAobDEsIGQxLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgIGNvbmNhdF9vcl9qb2luIChtZXJnZSBmIGwxIGwyKSB2MiAoZiB2MiBkMSAoU29tZSBkMikpIChtZXJnZSBmIHIxIHIyKVxuICAgICAgfCBfIC0+XG4gICAgICAgICAgYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcmVjIHVuaW9uIGYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgfCAoRW1wdHksIHMpIHwgKHMsIEVtcHR5KSAtPiBzXG4gICAgICB8IChOb2RlIHtsPWwxOyB2PXYxOyBkPWQxOyByPXIxOyBoPWgxfSxcbiAgICAgICAgIE5vZGUge2w9bDI7IHY9djI7IGQ9ZDI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGxldCAobDIsIGQyLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgICAgbGV0IGwgPSB1bmlvbiBmIGwxIGwyIGFuZCByID0gdW5pb24gZiByMSByMiBpblxuICAgICAgICAgICAgbWF0Y2ggZDIgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IGpvaW4gbCB2MSBkMSByXG4gICAgICAgICAgICB8IFNvbWUgZDIgLT4gY29uY2F0X29yX2pvaW4gbCB2MSAoZiB2MSBkMSBkMikgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobDEsIGQxLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgbGV0IGwgPSB1bmlvbiBmIGwxIGwyIGFuZCByID0gdW5pb24gZiByMSByMiBpblxuICAgICAgICAgICAgbWF0Y2ggZDEgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IGpvaW4gbCB2MiBkMiByXG4gICAgICAgICAgICB8IFNvbWUgZDEgLT4gY29uY2F0X29yX2pvaW4gbCB2MiAoZiB2MiBkMSBkMikgclxuXG4gICAgbGV0IHJlYyBmaWx0ZXIgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IGFzIG0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHZkIHRoZW4gaWYgbD09bCcgJiYgcj09cicgdGhlbiBtIGVsc2Ugam9pbiBsJyB2IGQgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW2ZdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyX21hcCBmIGwgaW5cbiAgICAgICAgICBsZXQgZnZkID0gZiB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXJfbWFwIGYgciBpblxuICAgICAgICAgIGJlZ2luIG1hdGNoIGZ2ZCB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZCcgLT4gam9pbiBsJyB2IGQnIHInXG4gICAgICAgICAgICB8IE5vbmUgLT4gY29uY2F0IGwnIHInXG4gICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIHBhcnRpdGlvbiBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKEVtcHR5LCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZkXG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IGQgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiBkIHJmKVxuXG4gICAgdHlwZSAnYSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2Yga2V5ICogJ2EgKiAnYSB0ICogJ2EgZW51bWVyYXRpb25cblxuICAgIGxldCByZWMgY29uc19lbnVtIG0gZSA9XG4gICAgICBtYXRjaCBtIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCBkLCByLCBlKSlcblxuICAgIGxldCBjb21wYXJlIGNtcCBtMSBtMiA9XG4gICAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiAwXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgICB8IChNb3JlKHYxLCBkMSwgcjEsIGUxKSwgTW9yZSh2MiwgZDIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIGQxIGQyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBjb21wYXJlX2F1eCAoY29uc19lbnVtIG0xIEVuZCkgKGNvbnNfZW51bSBtMiBFbmQpXG5cbiAgICBsZXQgZXF1YWwgY21wIG0xIG0yID1cbiAgICAgIGxldCByZWMgZXF1YWxfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiB0cnVlXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IGZhbHNlXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gZmFsc2VcbiAgICAgICAgfCAoTW9yZSh2MSwgZDEsIHIxLCBlMSksIE1vcmUodjIsIGQyLCByMiwgZTIpKSAtPlxuICAgICAgICAgICAgT3JkLmNvbXBhcmUgdjEgdjIgPSAwICYmIGNtcCBkMSBkMiAmJlxuICAgICAgICAgICAgZXF1YWxfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBlcXVhbF9hdXggKGNvbnNfZW51bSBtMSBFbmQpIChjb25zX2VudW0gbTIgRW5kKVxuXG4gICAgbGV0IHJlYyBjYXJkaW5hbCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGJpbmRpbmdzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiaW5kaW5nc19hdXggKCh2LCBkKSA6OiBiaW5kaW5nc19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgYmluZGluZ3MgcyA9XG4gICAgICBiaW5kaW5nc19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9iaW5kaW5nXG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9iaW5kaW5nX29wdFxuXG4gICAgbGV0IGFkZF9zZXEgaSBtID1cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBtIChrLHYpIC0+IGFkZCBrIHYgbSkgbSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPSBhZGRfc2VxIGkgZW1wdHlcblxuICAgIGxldCByZWMgc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoayx2LHQscmVzdCkgLT4gU2VxLkNvbnMgKChrLHYpLCBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3NlcSBtID1cbiAgICAgIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIG0gRW5kKVxuXG4gICAgbGV0IHJlYyBzbm9jX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgZDsgcn0gLT4gc25vY19lbnVtIHIgKE1vcmUodiwgZCwgbCwgZSkpXG5cbiAgICBsZXQgcmVjIHJldl9zZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlIChrLHYsdCxyZXN0KSAtPlxuICAgICAgICAgIFNlcS5Db25zICgoayx2KSwgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fcmV2X3NlcSBjID1cbiAgICAgIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSBjIEVuZClcblxuICAgIGxldCB0b19zZXFfZnJvbSBsb3cgbSA9XG4gICAgICBsZXQgcmVjIGF1eCBsb3cgbSBjID0gbWF0Y2ggbSB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gY1xuICAgICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IF99IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBPcmQuY29tcGFyZSB2IGxvdyB3aXRoXG4gICAgICAgICAgICAgIHwgMCAtPiBNb3JlICh2LCBkLCByLCBjKVxuICAgICAgICAgICAgICB8IG4gd2hlbiBuPDAgLT4gYXV4IGxvdyByIGNcbiAgICAgICAgICAgICAgfCBfIC0+IGF1eCBsb3cgbCAoTW9yZSAodiwgZCwgciwgYykpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBzZXFfb2ZfZW51bV8gKGF1eCBsb3cgbSBFbmQpXG5lbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0geyBtdXRhYmxlIGMgOiAnYSBsaXN0OyBtdXRhYmxlIGxlbiA6IGludDsgfVxuXG5leGNlcHRpb24gRW1wdHlcblxubGV0IGNyZWF0ZSAoKSA9IHsgYyA9IFtdOyBsZW4gPSAwOyB9XG5cbmxldCBjbGVhciBzID0gcy5jIDwtIFtdOyBzLmxlbiA8LSAwXG5cbmxldCBjb3B5IHMgPSB7IGMgPSBzLmM7IGxlbiA9IHMubGVuOyB9XG5cbmxldCBwdXNoIHggcyA9IHMuYyA8LSB4IDo6IHMuYzsgcy5sZW4gPC0gcy5sZW4gKyAxXG5cbmxldCBwb3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBoZFxuICB8IFtdICAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgcG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IFNvbWUgaGRcbiAgfCBbXSAgICAgLT4gTm9uZVxuXG5sZXQgdG9wIHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IGhkXG4gIHwgW10gICAgLT4gcmFpc2UgRW1wdHlcblxubGV0IHRvcF9vcHQgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gU29tZSBoZFxuICB8IFtdICAgIC0+IE5vbmVcblxubGV0IGlzX2VtcHR5IHMgPSAocy5jID0gW10pXG5cbmxldCBsZW5ndGggcyA9IHMubGVuXG5cbmxldCBpdGVyIGYgcyA9IExpc3QuaXRlciBmIHMuY1xuXG5sZXQgZm9sZCBmIGFjYyBzID0gTGlzdC5mb2xkX2xlZnQgZiBhY2Mgcy5jXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9IExpc3QudG9fc2VxIHMuY1xuXG5sZXQgYWRkX3NlcSBxIGkgPSBTZXEuaXRlciAoZnVuIHggLT4gcHVzaCB4IHEpIGlcblxubGV0IG9mX3NlcSBnID1cbiAgbGV0IHMgPSBjcmVhdGUoKSBpblxuICBhZGRfc2VxIHMgZztcbiAgc1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICBGcmFuY29pcyBQb3R0aWVyLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICBKZXJlbWllIERpbWlubywgSmFuZSBTdHJlZXQgRXVyb3BlICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwMiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leGNlcHRpb24gRW1wdHlcblxudHlwZSAnYSBjZWxsID1cbiAgfCBOaWxcbiAgfCBDb25zIG9mIHsgY29udGVudDogJ2E7IG11dGFibGUgbmV4dDogJ2EgY2VsbCB9XG5cbnR5cGUgJ2EgdCA9IHtcbiAgbXV0YWJsZSBsZW5ndGg6IGludDtcbiAgbXV0YWJsZSBmaXJzdDogJ2EgY2VsbDtcbiAgbXV0YWJsZSBsYXN0OiAnYSBjZWxsXG59XG5cbmxldCBjcmVhdGUgKCkgPSB7XG4gIGxlbmd0aCA9IDA7XG4gIGZpcnN0ID0gTmlsO1xuICBsYXN0ID0gTmlsXG59XG5cbmxldCBjbGVhciBxID1cbiAgcS5sZW5ndGggPC0gMDtcbiAgcS5maXJzdCA8LSBOaWw7XG4gIHEubGFzdCA8LSBOaWxcblxubGV0IGFkZCB4IHEgPVxuICBsZXQgY2VsbCA9IENvbnMge1xuICAgIGNvbnRlbnQgPSB4O1xuICAgIG5leHQgPSBOaWxcbiAgfSBpblxuICBtYXRjaCBxLmxhc3Qgd2l0aFxuICB8IE5pbCAtPlxuICAgIHEubGVuZ3RoIDwtIDE7XG4gICAgcS5maXJzdCA8LSBjZWxsO1xuICAgIHEubGFzdCA8LSBjZWxsXG4gIHwgQ29ucyBsYXN0IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggKyAxO1xuICAgIGxhc3QubmV4dCA8LSBjZWxsO1xuICAgIHEubGFzdCA8LSBjZWxsXG5cbmxldCBwdXNoID1cbiAgYWRkXG5cbmxldCBwZWVrIHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gcmFpc2UgRW1wdHlcbiAgfCBDb25zIHsgY29udGVudCB9IC0+IGNvbnRlbnRcblxubGV0IHBlZWtfb3B0IHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gTm9uZVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gU29tZSBjb250ZW50XG5cbmxldCB0b3AgPVxuICBwZWVrXG5cbmxldCB0YWtlIHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gcmFpc2UgRW1wdHlcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBjb250ZW50XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoIC0gMTtcbiAgICBxLmZpcnN0IDwtIG5leHQ7XG4gICAgY29udGVudFxuXG5sZXQgdGFrZV9vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSAtPlxuICAgIGNsZWFyIHE7XG4gICAgU29tZSBjb250ZW50XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoIC0gMTtcbiAgICBxLmZpcnN0IDwtIG5leHQ7XG4gICAgU29tZSBjb250ZW50XG5cbmxldCBwb3AgPVxuICB0YWtlXG5cbmxldCBjb3B5ID1cbiAgbGV0IHJlYyBjb3B5IHFfcmVzIHByZXYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gcV9yZXMubGFzdCA8LSBwcmV2OyBxX3Jlc1xuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgbGV0IHJlcyA9IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gaW5cbiAgICAgIGJlZ2luIG1hdGNoIHByZXYgd2l0aFxuICAgICAgfCBOaWwgLT4gcV9yZXMuZmlyc3QgPC0gcmVzXG4gICAgICB8IENvbnMgcCAtPiBwLm5leHQgPC0gcmVzXG4gICAgICBlbmQ7XG4gICAgICBjb3B5IHFfcmVzIHJlcyBuZXh0XG4gIGluXG4gIGZ1biBxIC0+IGNvcHkgeyBsZW5ndGggPSBxLmxlbmd0aDsgZmlyc3QgPSBOaWw7IGxhc3QgPSBOaWwgfSBOaWwgcS5maXJzdFxuXG5sZXQgaXNfZW1wdHkgcSA9XG4gIHEubGVuZ3RoID0gMFxuXG5sZXQgbGVuZ3RoIHEgPVxuICBxLmxlbmd0aFxuXG5sZXQgaXRlciA9XG4gIGxldCByZWMgaXRlciBmIGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBmIGNvbnRlbnQ7XG4gICAgICBpdGVyIGYgbmV4dFxuICBpblxuICBmdW4gZiBxIC0+IGl0ZXIgZiBxLmZpcnN0XG5cbmxldCBmb2xkID1cbiAgbGV0IHJlYyBmb2xkIGYgYWNjdSBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBhY2N1XG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgYWNjdSA9IGYgYWNjdSBjb250ZW50IGluXG4gICAgICBmb2xkIGYgYWNjdSBuZXh0XG4gIGluXG4gIGZ1biBmIGFjY3UgcSAtPiBmb2xkIGYgYWNjdSBxLmZpcnN0XG5cbmxldCB0cmFuc2ZlciBxMSBxMiA9XG4gIGlmIHExLmxlbmd0aCA+IDAgdGhlblxuICAgIG1hdGNoIHEyLmxhc3Qgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICBxMi5sZW5ndGggPC0gcTEubGVuZ3RoO1xuICAgICAgcTIuZmlyc3QgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuICAgIHwgQ29ucyBsYXN0IC0+XG4gICAgICBxMi5sZW5ndGggPC0gcTIubGVuZ3RoICsgcTEubGVuZ3RoO1xuICAgICAgbGFzdC5uZXh0IDwtIHExLmZpcnN0O1xuICAgICAgcTIubGFzdCA8LSBxMS5sYXN0O1xuICAgICAgY2xlYXIgcTFcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBxID1cbiAgbGV0IHJlYyBhdXggYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgIHwgTmlsIC0+IFNlcS5OaWxcbiAgICB8IENvbnMgeyBjb250ZW50PXg7IG5leHQ7IH0gLT4gU2VxLkNvbnMgKHgsIGF1eCBuZXh0KVxuICBpblxuICBhdXggcS5maXJzdFxuXG5sZXQgYWRkX3NlcSBxIGkgPSBTZXEuaXRlciAoZnVuIHggLT4gcHVzaCB4IHEpIGlcblxubGV0IG9mX3NlcSBnID1cbiAgbGV0IHEgPSBjcmVhdGUoKSBpblxuICBhZGRfc2VxIHEgZztcbiAgcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICBEYW5pZWwgZGUgUmF1Z2xhdWRyZSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBjZWxsIG9wdGlvblxuYW5kICdhIGNlbGwgPSB7IG11dGFibGUgY291bnQgOiBpbnQ7IG11dGFibGUgZGF0YSA6ICdhIGRhdGEgfVxuYW5kICdhIGRhdGEgPVxuICAgIFNlbXB0eVxuICB8IFNjb25zIG9mICdhICogJ2EgZGF0YVxuICB8IFNhcHAgb2YgJ2EgZGF0YSAqICdhIGRhdGFcbiAgfCBTbGF6eSBvZiAnYSBkYXRhIExhenkudFxuICB8IFNnZW4gb2YgJ2EgZ2VuXG4gIHwgU2J1ZmZpbyA6IGJ1ZmZpbyAtPiBjaGFyIGRhdGFcbmFuZCAnYSBnZW4gPSB7IG11dGFibGUgY3VyciA6ICdhIG9wdGlvbiBvcHRpb247IGZ1bmMgOiBpbnQgLT4gJ2Egb3B0aW9uIH1cbmFuZCBidWZmaW8gPVxuICB7IGljIDogaW5fY2hhbm5lbDsgYnVmZiA6IGJ5dGVzOyBtdXRhYmxlIGxlbiA6IGludDsgbXV0YWJsZSBpbmQgOiBpbnQgfVxuXG5leGNlcHRpb24gRmFpbHVyZVxuZXhjZXB0aW9uIEVycm9yIG9mIHN0cmluZ1xuXG5sZXQgY291bnQgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gMFxuICB8IFNvbWUgeyBjb3VudCB9IC0+IGNvdW50XG5sZXQgZGF0YSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBTZW1wdHlcbiAgfCBTb21lIHsgZGF0YSB9IC0+IGRhdGFcblxubGV0IGZpbGxfYnVmZiBiID1cbiAgYi5sZW4gPC0gaW5wdXQgYi5pYyBiLmJ1ZmYgMCAoQnl0ZXMubGVuZ3RoIGIuYnVmZik7IGIuaW5kIDwtIDBcblxuXG5sZXQgcmVjIGdldF9kYXRhIDogdHlwZSB2LiBpbnQgLT4gdiBkYXRhIC0+IHYgZGF0YSA9IGZ1biBjb3VudCBkIC0+IG1hdGNoIGQgd2l0aFxuICgqIFJldHVybnMgZWl0aGVyIFNlbXB0eSBvciBTY29ucyhhLCBfKSBldmVuIHdoZW4gZCBpcyBhIGdlbmVyYXRvclxuICAgIG9yIGEgYnVmZmVyLiBJbiB0aG9zZSBjYXNlcywgdGhlIGl0ZW0gYSBpcyBzZWVuIGFzIGV4dHJhY3RlZCBmcm9tXG4gdGhlIGdlbmVyYXRvci9idWZmZXIuXG4gVGhlIGNvdW50IHBhcmFtZXRlciBpcyB1c2VkIGZvciBjYWxsaW5nIGBTZ2VuLWZ1bmN0aW9ucycuICAqKVxuICAgU2VtcHR5IHwgU2NvbnMgKF8sIF8pIC0+IGRcbiB8IFNhcHAgKGQxLCBkMikgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZ2V0X2RhdGEgY291bnQgZDEgd2l0aFxuICAgICAgIFNjb25zIChhLCBkMTEpIC0+IFNjb25zIChhLCBTYXBwIChkMTEsIGQyKSlcbiAgICAgfCBTZW1wdHkgLT4gZ2V0X2RhdGEgY291bnQgZDJcbiAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICBlbmRcbiB8IFNnZW4ge2N1cnIgPSBTb21lIE5vbmV9IC0+IFNlbXB0eVxuIHwgU2dlbiAoe2N1cnIgPSBTb21lKFNvbWUgYSl9IGFzIGcpIC0+XG4gICAgIGcuY3VyciA8LSBOb25lOyBTY29ucyhhLCBkKVxuIHwgU2dlbiBnIC0+XG4gICAgIGJlZ2luIG1hdGNoIGcuZnVuYyBjb3VudCB3aXRoXG4gICAgICAgTm9uZSAtPiBnLmN1cnIgPC0gU29tZShOb25lKTsgU2VtcHR5XG4gICAgIHwgU29tZSBhIC0+IFNjb25zKGEsIGQpXG4gICAgICAgICAoKiBXYXJuaW5nOiBhbnlvbmUgdXNpbmcgZyB0aGlua3MgdGhhdCBhbiBpdGVtIGhhcyBiZWVuIHJlYWQgKilcbiAgICAgZW5kXG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIFNlbXB0eSBlbHNlXG4gICAgICAgbGV0IHIgPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZiBiLmluZCBpblxuICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICAgIGIuaW5kIDwtIHN1Y2MgYi5pbmQ7IFNjb25zKHIsIGQpXG4gfCBTbGF6eSBmIC0+IGdldF9kYXRhIGNvdW50IChMYXp5LmZvcmNlIGYpXG5cblxubGV0IHJlYyBwZWVrX2RhdGEgOiB0eXBlIHYuIHYgY2VsbCAtPiB2IG9wdGlvbiA9IGZ1biBzIC0+XG4gKCogY29uc3VsdCB0aGUgZmlyc3QgaXRlbSBvZiBzICopXG4gbWF0Y2ggcy5kYXRhIHdpdGhcbiAgIFNlbXB0eSAtPiBOb25lXG4gfCBTY29ucyAoYSwgXykgLT4gU29tZSBhXG4gfCBTYXBwIChfLCBfKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBzLmNvdW50IHMuZGF0YSB3aXRoXG4gICAgICAgU2NvbnMoYSwgXykgYXMgZCAtPiBzLmRhdGEgPC0gZDsgU29tZSBhXG4gICAgIHwgU2VtcHR5IC0+IE5vbmVcbiAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICBlbmRcbiB8IFNsYXp5IGYgLT4gcy5kYXRhIDwtIChMYXp5LmZvcmNlIGYpOyBwZWVrX2RhdGEgc1xuIHwgU2dlbiB7Y3VyciA9IFNvbWUgYX0gLT4gYVxuIHwgU2dlbiBnIC0+IGxldCB4ID0gZy5mdW5jIHMuY291bnQgaW4gZy5jdXJyIDwtIFNvbWUgeDsgeFxuIHwgU2J1ZmZpbyBiIC0+XG4gICAgIGlmIGIuaW5kID49IGIubGVuIHRoZW4gZmlsbF9idWZmIGI7XG4gICAgIGlmIGIubGVuID09IDAgdGhlbiBiZWdpbiBzLmRhdGEgPC0gU2VtcHR5OyBOb25lIGVuZFxuICAgICBlbHNlIFNvbWUgKEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kKVxuXG5cbmxldCBwZWVrID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHMgLT4gcGVla19kYXRhIHNcblxuXG5sZXQgcmVjIGp1bmtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHVuaXQgPSBmdW4gcyAtPlxuICBtYXRjaCBzLmRhdGEgd2l0aFxuICAgIFNjb25zIChfLCBkKSAtPiBzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBzLmRhdGEgPC0gZFxuICB8IFNnZW4gKHtjdXJyID0gU29tZSBffSBhcyBnKSAtPiBzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBnLmN1cnIgPC0gTm9uZVxuICB8IFNidWZmaW8gYiAtPlxuICAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgIGlmIGIubGVuID09IDAgdGhlbiBzLmRhdGEgPC0gU2VtcHR5XG4gICAgICBlbHNlIChzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBiLmluZCA8LSBzdWNjIGIuaW5kKVxuICB8IF8gLT5cbiAgICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgICAgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIF8gLT4ganVua19kYXRhIHNcblxuXG5sZXQganVuayA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgZGF0YSAtPiBqdW5rX2RhdGEgZGF0YVxuXG5sZXQgcmVjIG5nZXRfZGF0YSBuIHMgPVxuICBpZiBuIDw9IDAgdGhlbiBbXSwgcy5kYXRhLCAwXG4gIGVsc2VcbiAgICBtYXRjaCBwZWVrX2RhdGEgcyB3aXRoXG4gICAgICBTb21lIGEgLT5cbiAgICAgICAganVua19kYXRhIHM7XG4gICAgICAgIGxldCAoYWwsIGQsIGspID0gbmdldF9kYXRhIChwcmVkIG4pIHMgaW4gYSA6OiBhbCwgU2NvbnMgKGEsIGQpLCBzdWNjIGtcbiAgICB8IE5vbmUgLT4gW10sIHMuZGF0YSwgMFxuXG5cbmxldCBucGVla19kYXRhIG4gcyA9XG4gIGxldCAoYWwsIGQsIGxlbikgPSBuZ2V0X2RhdGEgbiBzIGluXG4gIHMuY291bnQgPC0gKHMuY291bnQgLSBsZW4pO1xuICBzLmRhdGEgPC0gZDtcbiAgYWxcblxuXG5sZXQgbnBlZWsgbiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgZCAtPiBucGVla19kYXRhIG4gZFxuXG5sZXQgbmV4dCBzID1cbiAgbWF0Y2ggcGVlayBzIHdpdGhcbiAgICBTb21lIGEgLT4ganVuayBzOyBhXG4gIHwgTm9uZSAtPiByYWlzZSBGYWlsdXJlXG5cblxubGV0IGVtcHR5IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgXyAtPiByYWlzZSBGYWlsdXJlXG4gIHwgTm9uZSAtPiAoKVxuXG5cbmxldCBpdGVyIGYgc3RybSA9XG4gIGxldCByZWMgZG9fcmVjICgpID1cbiAgICBtYXRjaCBwZWVrIHN0cm0gd2l0aFxuICAgICAgU29tZSBhIC0+IGp1bmsgc3RybTsgaWdub3JlKGYgYSk7IGRvX3JlYyAoKVxuICAgIHwgTm9uZSAtPiAoKVxuICBpblxuICBkb19yZWMgKClcblxuXG4oKiBTdHJlYW0gYnVpbGRpbmcgZnVuY3Rpb25zICopXG5cbmxldCBmcm9tIGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTZ2VuIHtjdXJyID0gTm9uZTsgZnVuYyA9IGZ9fVxuXG5sZXQgb2ZfbGlzdCBsID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gTGlzdC5mb2xkX3JpZ2h0IChmdW4geCBsIC0+IFNjb25zICh4LCBsKSkgbCBTZW1wdHl9XG5cblxubGV0IG9mX3N0cmluZyBzID1cbiAgbGV0IGNvdW50ID0gcmVmIDAgaW5cbiAgZnJvbSAoZnVuIF8gLT5cbiAgICAoKiBXZSBjYW5ub3QgdXNlIHRoZSBpbmRleCBwYXNzZWQgYnkgdGhlIFtmcm9tXSBmdW5jdGlvbiBkaXJlY3RseVxuICAgICAgIGJlY2F1c2UgaXQgcmV0dXJucyB0aGUgY3VycmVudCBzdHJlYW0gY291bnQsIHdpdGggYWJzb2x1dGVseSBub1xuICAgICAgIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgc3RhcnQgZnJvbSAwLiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2VcbiAgICAgICBvZiBbU3RyZWFtLmljb25zICdjJyAoU3RyZWFtLmZyb21fc3RyaW5nIFwiYWJcIildLCB0aGUgZmlyc3RcbiAgICAgICBhY2Nlc3MgdG8gdGhlIHN0cmluZyB3aWxsIGJlIG1hZGUgd2l0aCBjb3VudCBbMV0gYWxyZWFkeS5cbiAgICAqKVxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IFN0cmluZy5sZW5ndGggc1xuICAgIHRoZW4gKGluY3IgY291bnQ7IFNvbWUgcy5bY10pXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9ieXRlcyBzID1cbiAgbGV0IGNvdW50ID0gcmVmIDAgaW5cbiAgZnJvbSAoZnVuIF8gLT5cbiAgICBsZXQgYyA9ICFjb3VudCBpblxuICAgIGlmIGMgPCBCeXRlcy5sZW5ndGggc1xuICAgIHRoZW4gKGluY3IgY291bnQ7IFNvbWUgKEJ5dGVzLmdldCBzIGMpKVxuICAgIGVsc2UgTm9uZSlcblxuXG5sZXQgb2ZfY2hhbm5lbCBpYyA9XG4gIFNvbWUge2NvdW50ID0gMDtcbiAgICAgICAgZGF0YSA9IFNidWZmaW8ge2ljID0gaWM7IGJ1ZmYgPSBCeXRlcy5jcmVhdGUgNDA5NjsgbGVuID0gMDsgaW5kID0gMH19XG5cblxuKCogU3RyZWFtIGV4cHJlc3Npb25zIGJ1aWxkZXJzICopXG5cbmxldCBpYXBwIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNhcHAgKGRhdGEgaSwgZGF0YSBzKX1cbmxldCBpY29ucyBpIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgZGF0YSBzKX1cbmxldCBpc2luZyBpID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2NvbnMgKGksIFNlbXB0eSl9XG5cbmxldCBsYXBwIGYgcyA9XG4gIFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNhcHAgKGRhdGEgKGYgKCkpLCBkYXRhIHMpKSl9XG5cbmxldCBsY29ucyBmIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTY29ucyAoZiAoKSwgZGF0YSBzKSkpfVxubGV0IGxzaW5nIGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTY29ucyAoZiAoKSwgU2VtcHR5KSkpfVxuXG5sZXQgc2VtcHR5ID0gTm9uZVxubGV0IHNsYXp5IGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShkYXRhIChmICgpKSkpfVxuXG4oKiBGb3IgZGVidWdnaW5nIHVzZSAqKVxuXG5sZXQgcmVjIGR1bXAgOiB0eXBlIHYuICh2IC0+IHVuaXQpIC0+IHYgdCAtPiB1bml0ID0gZnVuIGYgcyAtPlxuICBwcmludF9zdHJpbmcgXCJ7Y291bnQgPSBcIjtcbiAgcHJpbnRfaW50IChjb3VudCBzKTtcbiAgcHJpbnRfc3RyaW5nIFwiOyBkYXRhID0gXCI7XG4gIGR1bXBfZGF0YSBmIChkYXRhIHMpO1xuICBwcmludF9zdHJpbmcgXCJ9XCI7XG4gIHByaW50X25ld2xpbmUgKClcbmFuZCBkdW1wX2RhdGEgOiB0eXBlIHYuICh2IC0+IHVuaXQpIC0+IHYgZGF0YSAtPiB1bml0ID0gZnVuIGYgLT5cbiAgZnVuY3Rpb25cbiAgICBTZW1wdHkgLT4gcHJpbnRfc3RyaW5nIFwiU2VtcHR5XCJcbiAgfCBTY29ucyAoYSwgZCkgLT5cbiAgICAgIHByaW50X3N0cmluZyBcIlNjb25zIChcIjtcbiAgICAgIGYgYTtcbiAgICAgIHByaW50X3N0cmluZyBcIiwgXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2FwcCAoXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkMTtcbiAgICAgIHByaW50X3N0cmluZyBcIiwgXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkMjtcbiAgICAgIHByaW50X3N0cmluZyBcIilcIlxuICB8IFNsYXp5IF8gLT4gcHJpbnRfc3RyaW5nIFwiU2xhenlcIlxuICB8IFNnZW4gXyAtPiBwcmludF9zdHJpbmcgXCJTZ2VuXCJcbiAgfCBTYnVmZmlvIF8gLT4gcHJpbnRfc3RyaW5nIFwiU2J1ZmZpb1wiXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICBQaWVycmUgV2VpcyBhbmQgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk5IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEV4dGVuc2libGUgYnVmZmVycyAqKVxuXG50eXBlIHQgPVxuIHttdXRhYmxlIGJ1ZmZlciA6IGJ5dGVzO1xuICBtdXRhYmxlIHBvc2l0aW9uIDogaW50O1xuICBtdXRhYmxlIGxlbmd0aCA6IGludDtcbiAgaW5pdGlhbF9idWZmZXIgOiBieXRlc31cbigqIEludmFyaWFudHM6IGFsbCBwYXJ0cyBvZiB0aGUgY29kZSBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyB0aGF0OlxuICAgLSBbMCA8PSBiLnBvc2l0aW9uIDw9IGIubGVuZ3RoXVxuICAgLSBbYi5sZW5ndGggPSBCeXRlcy5sZW5ndGggYi5idWZmZXJdXG5cbiAgIE5vdGUgaW4gcGFydGljdWxhciB0aGF0IFtiLnBvc2l0aW9uID0gYi5sZW5ndGhdIGlzIGxlZ2FsLFxuICAgaXQgbWVhbnMgdGhhdCB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHdpbGwgaGF2ZSB0byBiZSBleHRlbmRlZFxuICAgYmVmb3JlIGFueSBmdXJ0aGVyIGFkZGl0aW9uLiAqKVxuXG5sZXQgY3JlYXRlIG4gPVxuIGxldCBuID0gaWYgbiA8IDEgdGhlbiAxIGVsc2UgbiBpblxuIGxldCBuID0gaWYgbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBlbHNlIG4gaW5cbiBsZXQgcyA9IEJ5dGVzLmNyZWF0ZSBuIGluXG4ge2J1ZmZlciA9IHM7IHBvc2l0aW9uID0gMDsgbGVuZ3RoID0gbjsgaW5pdGlhbF9idWZmZXIgPSBzfVxuXG5sZXQgY29udGVudHMgYiA9IEJ5dGVzLnN1Yl9zdHJpbmcgYi5idWZmZXIgMCBiLnBvc2l0aW9uXG5sZXQgdG9fYnl0ZXMgYiA9IEJ5dGVzLnN1YiBiLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IHN1YiBiIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYi5wb3NpdGlvbiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLnN1YlwiXG4gIGVsc2UgQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciBvZnMgbGVuXG5cblxubGV0IGJsaXQgc3JjIHNyY29mZiBkc3QgZHN0b2ZmIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgc3Jjb2ZmIDwgMCB8fCBzcmNvZmYgPiBzcmMucG9zaXRpb24gLSBsZW5cbiAgICAgICAgICAgICB8fCBkc3RvZmYgPCAwIHx8IGRzdG9mZiA+IChCeXRlcy5sZW5ndGggZHN0KSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmJsaXRcIlxuICBlbHNlXG4gICAgQnl0ZXMudW5zYWZlX2JsaXQgc3JjLmJ1ZmZlciBzcmNvZmYgZHN0IGRzdG9mZiBsZW5cblxuXG5sZXQgbnRoIGIgb2ZzID1cbiAgaWYgb2ZzIDwgMCB8fCBvZnMgPj0gYi5wb3NpdGlvbiB0aGVuXG4gICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5udGhcIlxuICBlbHNlIEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgb2ZzXG5cblxubGV0IGxlbmd0aCBiID0gYi5wb3NpdGlvblxuXG5sZXQgY2xlYXIgYiA9IGIucG9zaXRpb24gPC0gMFxuXG5sZXQgcmVzZXQgYiA9XG4gIGIucG9zaXRpb24gPC0gMDtcbiAgYi5idWZmZXIgPC0gYi5pbml0aWFsX2J1ZmZlcjtcbiAgYi5sZW5ndGggPC0gQnl0ZXMubGVuZ3RoIGIuYnVmZmVyXG5cbigqIFtyZXNpemUgYiBtb3JlXSBlbnN1cmVzIHRoYXQgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkc1xuICAgYnkgZHluYW1pY2FsbHkgZXh0ZW5kaW5nIFtiLmJ1ZmZlcl0gaWYgbmVjZXNzYXJ5IC0tIGFuZCB0aHVzXG4gICBpbmNyZWFzaW5nIFtiLmxlbmd0aF0uXG5cbiAgIEluIHBhcnRpY3VsYXIsIGFmdGVyIFtyZXNpemUgYiBtb3JlXSBpcyBjYWxsZWQsIGEgZGlyZWN0IGFjY2VzcyBvZlxuICAgc2l6ZSBbbW9yZV0gYXQgW2IucG9zaXRpb25dIHdpbGwgYWx3YXlzIGJlIGluLWJvdW5kcywgc28gdGhhdFxuICAgKHVuc2FmZV97Z2V0LHNldH0pIG1heSBiZSB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbiopXG5sZXQgcmVzaXplIGIgbW9yZSA9XG4gIGxldCBvbGRfcG9zID0gYi5wb3NpdGlvbiBpblxuICBsZXQgb2xkX2xlbiA9IGIubGVuZ3RoIGluXG4gIGxldCBuZXdfbGVuID0gcmVmIG9sZF9sZW4gaW5cbiAgd2hpbGUgb2xkX3BvcyArIG1vcmUgPiAhbmV3X2xlbiBkbyBuZXdfbGVuIDo9IDIgKiAhbmV3X2xlbiBkb25lO1xuICBpZiAhbmV3X2xlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgaWYgb2xkX3BvcyArIG1vcmUgPD0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgdGhlbiBuZXdfbGVuIDo9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgIGVsc2UgZmFpbHdpdGggXCJCdWZmZXIuYWRkOiBjYW5ub3QgZ3JvdyBidWZmZXJcIlxuICBlbmQ7XG4gIGxldCBuZXdfYnVmZmVyID0gQnl0ZXMuY3JlYXRlICFuZXdfbGVuIGluXG4gICgqIFBSIzYxNDg6IGxldCdzIGtlZXAgdXNpbmcgW2JsaXRdIHJhdGhlciB0aGFuIFt1bnNhZmVfYmxpdF0gaW5cbiAgICAgdGhpcyB0cmlja3kgZnVuY3Rpb24gdGhhdCBpcyBzbG93IGFueXdheS4gKilcbiAgQnl0ZXMuYmxpdCBiLmJ1ZmZlciAwIG5ld19idWZmZXIgMCBiLnBvc2l0aW9uO1xuICBiLmJ1ZmZlciA8LSBuZXdfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSAhbmV3X2xlbjtcbiAgYXNzZXJ0IChiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gIGFzc2VydCAob2xkX3BvcyArIG1vcmUgPD0gYi5sZW5ndGgpO1xuICAoKVxuICAoKiBOb3RlOiB0aGVyZSBhcmUgdmFyaW91cyBzaXR1YXRpb25zIChwcmVlbXB0aXZlIHRocmVhZHMsIHNpZ25hbHMgYW5kXG4gICAgIGdjIGZpbmFsaXplcnMpIHdoZXJlIE9DYW1sIGNvZGUgbWF5IGJlIHJ1biBhc3luY2hyb25vdXNseTsgaW5cbiAgICAgcGFydGljdWxhciwgdGhlcmUgbWF5IGJlIGEgcmFjZSB3aXRoIGFub3RoZXIgdXNlciBvZiBbYl0sIGNoYW5naW5nXG4gICAgIGl0cyBtdXRhYmxlIGZpZWxkcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBbcmVzaXplXSBjYWxsLiBUaGUgQnVmZmVyXG4gICAgIG1vZHVsZSBkb2VzIG5vdCBwcm92aWRlIGFueSBjb3JyZWN0bmVzcyBndWFyYW50ZWUgaWYgdGhhdCBoYXBwZW5zLFxuICAgICBidXQgd2UgbXVzdCBzdGlsbCBlbnN1cmUgdGhhdCB0aGUgZGF0YXN0cnVjdHVyZSBpbnZhcmlhbnRzIGhvbGQgZm9yXG4gICAgIG1lbW9yeS1zYWZldHkgLS0gYXMgd2UgcGxhbiB0byB1c2UgW3Vuc2FmZV97Z2V0LHNldH1dLlxuXG4gICAgIFRoZXJlIGFyZSB0d28gcG90ZW50aWFsIGFsbG9jYXRpb24gcG9pbnRzIGluIHRoaXMgZnVuY3Rpb24sXG4gICAgIFtyZWZdIGFuZCBbQnl0ZXMuY3JlYXRlXSwgYnV0IGFsbCByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBmaWVsZHNcbiAgICAgb2YgW2JdIGhhcHBlbiBiZWZvcmUgYm90aCBvZiB0aGVtIG9yIGFmdGVyIGJvdGggb2YgdGhlbS5cblxuICAgICBXZSB0aGVyZWZvcmUgYXNzdW1lIHRoYXQgW2IucG9zaXRpb25dIG1heSBjaGFuZ2UgYXQgdGhlc2UgYWxsb2NhdGlvbnMsXG4gICAgIGFuZCBjaGVjayB0aGF0IHRoZSBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIHBvc3Rjb25kaXRpb25cbiAgICAgaG9sZHMgZm9yIGJvdGggdmFsdWVzIG9mIFtiLnBvc2l0aW9uXSwgYmVmb3JlIG9yIGFmdGVyIHRoZSBmdW5jdGlvblxuICAgICBpcyBjYWxsZWQuIE1vcmUgcHJlY2lzZWx5LCB0aGUgZm9sbG93aW5nIGludmFyaWFudHMgbXVzdCBob2xkIGlmIHRoZVxuICAgICBmdW5jdGlvbiByZXR1cm5zIGNvcnJlY3RseSwgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIGJ1ZmZlciBpbnZhcmlhbnRzOlxuICAgICAtIFtvbGQoYi5wb3NpdGlvbikgKyBtb3JlIDw9IG5ldyhiLmxlbmd0aCldXG4gICAgIC0gW25ldyhiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbb2xkKGIubGVuZ3RoKSA8PSBuZXcoYi5sZW5ndGgpXVxuXG4gICAgIE5vdGU6IFtiLnBvc2l0aW9uICsgbW9yZSA8PSBvbGQoYi5sZW5ndGgpXSBkb2VzICpub3QqXG4gICAgIGhvbGQgaW4gZ2VuZXJhbCwgYXMgaXQgaXMgcHJlY2lzZWx5IHRoZSBjYXNlIHdoZXJlIHlvdSBuZWVkXG4gICAgIHRvIGNhbGwgW3Jlc2l6ZV0gdG8gaW5jcmVhc2UgW2IubGVuZ3RoXS5cblxuICAgICBOb3RlOiBbYXNzZXJ0XSBhYm92ZSBkb2VzIG5vdCBtZWFuIHRoYXQgd2Uga25vdyB0aGUgY29uZGl0aW9uc1xuICAgICBhbHdheXMgaG9sZCwgYnV0IHRoYXQgdGhlIGZ1bmN0aW9uIG1heSByZXR1cm4gY29ycmVjdGx5XG4gICAgIG9ubHkgaWYgdGhleSBob2xkLlxuXG4gICAgIE5vdGU6IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgZG9lcyBub3QgbmVlZFxuICAgICB0byBiZSBjaGVja2VkIHdpdGggdGhpcyBsZXZlbCBvZiBzY3J1dGlueSwgZ2l2ZW4gdGhhdCB0aGV5XG4gICAgIHJlYWQvd3JpdGUgdGhlIGJ1ZmZlciBpbW1lZGlhdGVseSBhZnRlciBjaGVja2luZyB0aGF0XG4gICAgIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gaG9sZCBvciBjYWxsaW5nIFtyZXNpemVdLlxuICAqKVxuXG5sZXQgYWRkX2NoYXIgYiBjID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciBwb3MgYztcbiAgYi5wb3NpdGlvbiA8LSBwb3MgKyAxXG5cbmxldCB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXggPSA0XG5sZXQgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heCA9IDRcblxubGV0IHJlYyBhZGRfdXRmXzhfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfOF91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfOF91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IHJlYyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzE2YmVfdWNoYXIgYi5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl8xNmJlX3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZsZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZsZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2bGVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCBhZGRfc3Vic3RyaW5nIGIgcyBvZmZzZXQgbGVuID1cbiAgaWYgb2Zmc2V0IDwgMCB8fCBsZW4gPCAwIHx8IG9mZnNldCA+IFN0cmluZy5sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9zdWJzdHJpbmcvYWRkX3N1YmJ5dGVzXCI7XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgbGVuIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyBvZmZzZXQgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfc3ViYnl0ZXMgYiBzIG9mZnNldCBsZW4gPVxuICBhZGRfc3Vic3RyaW5nIGIgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcykgb2Zmc2V0IGxlblxuXG5sZXQgYWRkX3N0cmluZyBiIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgbGVuIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyAwIGIuYnVmZmVyIGIucG9zaXRpb24gbGVuO1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2J5dGVzIGIgcyA9IGFkZF9zdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKVxuXG5sZXQgYWRkX2J1ZmZlciBiIGJzID1cbiAgYWRkX3N1YmJ5dGVzIGIgYnMuYnVmZmVyIDAgYnMucG9zaXRpb25cblxuKCogdGhpcyAocHJpdmF0ZSkgZnVuY3Rpb24gY291bGQgbW92ZSBpbnRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5ICopXG5sZXQgcmVhbGx5X2lucHV0X3VwX3RvIGljIGJ1ZiBvZnMgbGVuID1cbiAgbGV0IHJlYyBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWQgPVxuICAgIGlmIHRvX3JlYWQgPSAwIHRoZW4gYWxyZWFkeV9yZWFkXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBpbnB1dCBpYyBidWYgb2ZzIHRvX3JlYWQgaW5cbiAgICAgIGlmIHIgPSAwIHRoZW4gYWxyZWFkeV9yZWFkXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBhbHJlYWR5X3JlYWQgPSBhbHJlYWR5X3JlYWQgKyByIGluXG4gICAgICAgIGxldCBvZnMgPSBvZnMgKyByIGluXG4gICAgICAgIGxldCB0b19yZWFkID0gdG9fcmVhZCAtIHIgaW5cbiAgICAgICAgbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZCB+b2ZzIH50b19yZWFkXG4gICAgICBlbmRcbiAgICBlbmRcbiAgaW4gbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZDowIH5vZnMgfnRvX3JlYWQ6bGVuXG5cblxubGV0IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiA9XG4gIGlmIGIucG9zaXRpb24gKyBsZW4gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIGxlbjtcbiAgbGV0IG4gPSByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW4gaW5cbiAgKCogVGhlIGFzc2VydGlvbiBiZWxvdyBtYXkgZmFpbCBpbiB3ZWlyZCBzY2VuYXJpbyB3aGVyZVxuICAgICB0aHJlYWRlZC9maW5hbGl6ZXIgY29kZSwgcnVuIGFzeW5jaHJvbm91c2x5IGR1cmluZyB0aGVcbiAgICAgW3JlYWxseV9pbnB1dF91cF90b10gY2FsbCwgcmFjZXMgb24gdGhlIGJ1ZmZlcjsgd2UgZG9uJ3QgZW5zdXJlXG4gICAgIGNvcnJlY3RuZXNzIGluIHRoaXMgY2FzZSwgYnV0IG5lZWQgdG8gcHJlc2VydmUgdGhlIGludmFyaWFudHMgZm9yXG4gICAgIG1lbW9yeS1zYWZldHkgKHNlZSBkaXNjdXNzaW9uIG9mIFtyZXNpemVdKS4gKilcbiAgYXNzZXJ0IChiLnBvc2l0aW9uICsgbiA8PSBiLmxlbmd0aCk7XG4gIGIucG9zaXRpb24gPC0gYi5wb3NpdGlvbiArIG47XG4gIG5cblxubGV0IGFkZF9jaGFubmVsIGIgaWMgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBsZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiAgICgqIFBSIzUwMDQgKilcbiAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfY2hhbm5lbFwiO1xuICBsZXQgbiA9IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiBpblxuICAoKiBJdCBpcyBpbnRlbnRpb25hbCB0aGF0IGEgY29uc3VtZXIgY2F0Y2hpbmcgRW5kX29mX2ZpbGVcbiAgICAgd2lsbCBzZWUgdGhlIGRhdGEgd3JpdHRlbiAoc2VlICM2NzE5LCAjNzEzNikuICopXG4gIGlmIG4gPCBsZW4gdGhlbiByYWlzZSBFbmRfb2ZfZmlsZTtcbiAgKClcblxubGV0IG91dHB1dF9idWZmZXIgb2MgYiA9XG4gIG91dHB1dCBvYyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IGNsb3NpbmcgPSBmdW5jdGlvblxuICB8ICcoJyAtPiAnKSdcbiAgfCAneycgLT4gJ30nXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCogb3BlbmluZyBhbmQgY2xvc2luZzogb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycywgdHlwaWNhbGx5ICggYW5kIClcbiAgIGs6IGJhbGFuY2Ugb2Ygb3BlbmluZyBhbmQgY2xvc2luZyBjaGFyc1xuICAgczogdGhlIHN0cmluZyB3aGVyZSB3ZSBhcmUgc2VhcmNoaW5nXG4gICBzdGFydDogdGhlIGluZGV4IHdoZXJlIHdlIHN0YXJ0IHRoZSBzZWFyY2guICopXG5sZXQgYWR2YW5jZV90b19jbG9zaW5nIG9wZW5pbmcgY2xvc2luZyBrIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgayBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICAgIGlmIHMuW2ldID0gb3BlbmluZyB0aGVuIGFkdmFuY2UgKGsgKyAxKSAoaSArIDEpIGxpbSBlbHNlXG4gICAgaWYgcy5baV0gPSBjbG9zaW5nIHRoZW5cbiAgICAgIGlmIGsgPSAwIHRoZW4gaSBlbHNlIGFkdmFuY2UgKGsgLSAxKSAoaSArIDEpIGxpbVxuICAgIGVsc2UgYWR2YW5jZSBrIChpICsgMSkgbGltIGluXG4gIGFkdmFuY2UgayBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgYWR2YW5jZV90b19ub25fYWxwaGEgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiBsaW0gZWxzZVxuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIHwgJzAnIC4uICc5JyB8ICdfJyAtPiBhZHZhbmNlIChpICsgMSkgbGltXG4gICAgfCBfIC0+IGkgaW5cbiAgYWR2YW5jZSBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG4oKiBXZSBhcmUganVzdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGlkZW50IGluIHMsIHN0YXJ0aW5nIGF0IHN0YXJ0LiAqKVxubGV0IGZpbmRfaWRlbnQgcyBzdGFydCBsaW0gPVxuICBpZiBzdGFydCA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBtYXRjaCBzLltzdGFydF0gd2l0aFxuICAoKiBQYXJlbnRoZXNpemVkIGlkZW50ID8gKilcbiAgfCAnKCcgfCAneycgYXMgYyAtPlxuICAgICBsZXQgbmV3X3N0YXJ0ID0gc3RhcnQgKyAxIGluXG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19jbG9zaW5nIGMgKGNsb3NpbmcgYykgMCBzIG5ld19zdGFydCBpblxuICAgICBTdHJpbmcuc3ViIHMgbmV3X3N0YXJ0IChzdG9wIC0gc3RhcnQgLSAxKSwgc3RvcCArIDFcbiAgKCogUmVndWxhciBpZGVudCAqKVxuICB8IF8gLT5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIChzdGFydCArIDEpIGluXG4gICAgIFN0cmluZy5zdWIgcyBzdGFydCAoc3RvcCAtIHN0YXJ0KSwgc3RvcFxuXG4oKiBTdWJzdGl0dXRlICRpZGVudCwgJChpZGVudCksIG9yICR7aWRlbnR9IGluIHMsXG4gICAgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbiBtYXBwaW5nIGYuICopXG5sZXQgYWRkX3N1YnN0aXR1dGUgYiBmIHMgPVxuICBsZXQgbGltID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCByZWMgc3Vic3QgcHJldmlvdXMgaSA9XG4gICAgaWYgaSA8IGxpbSB0aGVuIGJlZ2luXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICckJyBhcyBjdXJyZW50IHdoZW4gcHJldmlvdXMgPSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0ICcgJyAoaSArIDEpXG4gICAgICB8ICckJyAtPlxuICAgICAgICAgbGV0IGogPSBpICsgMSBpblxuICAgICAgICAgbGV0IGlkZW50LCBuZXh0X2kgPSBmaW5kX2lkZW50IHMgaiBsaW0gaW5cbiAgICAgICAgIGFkZF9zdHJpbmcgYiAoZiBpZGVudCk7XG4gICAgICAgICBzdWJzdCAnICcgbmV4dF9pXG4gICAgICB8IGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9PSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgJ1xcXFwnO1xuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJ1xcXFwnIGFzIGN1cnJlbnQgLT5cbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgICAgfCBjdXJyZW50IC0+XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCBjdXJyZW50IChpICsgMSlcbiAgICBlbmQgZWxzZVxuICAgIGlmIHByZXZpb3VzID0gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBwcmV2aW91cyBpblxuICBzdWJzdCAnICcgMFxuXG5sZXQgdHJ1bmNhdGUgYiBsZW4gPVxuICAgIGlmIGxlbiA8IDAgfHwgbGVuID4gbGVuZ3RoIGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJCdWZmZXIudHJ1bmNhdGVcIlxuICAgIGVsc2VcbiAgICAgIGIucG9zaXRpb24gPC0gbGVuXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IGFkZF9zZXEgYiBzZXEgPSBTZXEuaXRlciAoYWRkX2NoYXIgYikgc2VxXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBiID0gY3JlYXRlIDMyIGluXG4gIGFkZF9zZXEgYiBpO1xuICBiXG5cbigqKiB7NiBCaW5hcnkgZW5jb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQxNiA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50MzIgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJ1XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50NjQgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjR1XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cblxubGV0IGFkZF9pbnQ4IGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgMSBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDE7XG4gIHVuc2FmZV9zZXRfaW50OCBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAyIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMjtcbiAgdW5zYWZlX3NldF9pbnQxNiBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MzJfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyA0IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgNDtcbiAgdW5zYWZlX3NldF9pbnQzMiBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50NjRfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyA4IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgODtcbiAgdW5zYWZlX3NldF9pbnQ2NCBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbGUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDE2X2JlIGIgeCA9XG4gIGFkZF9pbnQxNl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwMTYgeClcblxubGV0IGFkZF9pbnQzMl9sZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MzJfYmUgYiB4ID1cbiAgYWRkX2ludDMyX25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAzMiB4KVxuXG5sZXQgYWRkX2ludDY0X2xlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQ2NF9iZSBiIHggPVxuICBhZGRfaW50NjRfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDY0IHgpXG5cbmxldCBhZGRfdWludDggPSBhZGRfaW50OFxubGV0IGFkZF91aW50MTZfbmUgPSBhZGRfaW50MTZfbmVcbmxldCBhZGRfdWludDE2X2xlID0gYWRkX2ludDE2X2xlXG5sZXQgYWRkX3VpbnQxNl9iZSA9IGFkZF9pbnQxNl9iZVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAoKiBUb29scyB0byBtYW5pcHVsYXRlIHNjYW5uaW5nIHNldCBvZiBjaGFycyAoc2VlICVbLi4uXSkgKilcblxudHlwZSBtdXRhYmxlX2NoYXJfc2V0ID0gYnl0ZXNcblxuKCogQ3JlYXRlIGEgZnJlc2gsIGVtcHR5LCBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGNyZWF0ZV9jaGFyX3NldCAoKSA9IEJ5dGVzLm1ha2UgMzIgJ1xcMDAwJ1xuXG4oKiBBZGQgYSBjaGFyIGluIGEgbXV0YWJsZSBjaGFyIHNldC4gKilcbmxldCBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICBCeXRlcy5zZXQgY2hhcl9zZXQgc3RyX2luZFxuICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKEJ5dGVzLmdldCBjaGFyX3NldCBzdHJfaW5kKSBsb3IgbWFzaykpXG5cbmxldCBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgPVxuICBCeXRlcy50b19zdHJpbmcgY2hhcl9zZXRcblxuKCogQ29tcHV0ZSB0aGUgY29tcGxlbWVudCBvZiBhIGNoYXIgc2V0LiAqKVxubGV0IHJldl9jaGFyX3NldCBjaGFyX3NldCA9XG4gIGxldCBjaGFyX3NldCcgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgZm9yIGkgPSAwIHRvIDMxIGRvXG4gICAgQnl0ZXMuc2V0IGNoYXJfc2V0JyBpXG4gICAgICAoY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIChTdHJpbmcuZ2V0IGNoYXJfc2V0IGkpIGx4b3IgMHhGRikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGNoYXJfc2V0J1xuXG4oKiBSZXR1cm4gdHJ1ZSBpZiBhIGBjJyBpcyBpbiBgY2hhcl9zZXQnLiAqKVxubGV0IGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgPVxuICBsZXQgaW5kID0gaW50X29mX2NoYXIgYyBpblxuICBsZXQgc3RyX2luZCA9IGluZCBsc3IgMyBhbmQgbWFzayA9IDEgbHNsIChpbmQgbGFuZCAwYjExMSkgaW5cbiAgKGludF9vZl9jaGFyIChTdHJpbmcuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxhbmQgbWFzaykgPD4gMFxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogSWdub3JlZCBwYXJhbSBjb252ZXJzaW9uICopXG5cbigqIEdBRFQgdXNlZCB0byBhYnN0cmFjdCBhbiBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlci4gKilcbigqIFNlZSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYXJhbV9mb3JtYXRfZWJiID0gUGFyYW1fZm9ybWF0X0VCQiA6XG4gICAgKCd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYXJhbV9mb3JtYXRfZWJiXG5cbigqIENvbXB1dGUgYSBwYWRkaW5nIGFzc29jaWF0ZWQgdG8gYSBwYWRfb3B0aW9uIChzZWUgXCIlXzQyZFwiKS4gKilcbmxldCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBOb19wYWRkaW5nXG4gIHwgU29tZSB3aWR0aCAtPiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuXG4oKiBDb21wdXRlIGEgcHJlY2lzaW9uIGFzc29jaWF0ZWQgdG8gYSBwcmVjX29wdGlvbiAoc2VlIFwiJV8uNDJmXCIpLiAqKVxubGV0IHByZWNfb2ZfcHJlY19vcHQgcHJlY19vcHQgPSBtYXRjaCBwcmVjX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBOb19wcmVjaXNpb25cbiAgfCBTb21lIG5kZWMgLT4gTGl0X3ByZWNpc2lvbiBuZGVjXG5cbigqIFR1cm4gYW4gaWdub3JlZCBwYXJhbSBpbnRvIGl0cyBlcXVpdmFsZW50IG5vdC1pZ25vcmVkIGZvcm1hdCBub2RlLiAqKVxuKCogVXNlZCBmb3IgZm9ybWF0IHByZXR0eS1wcmludGluZyBhbmQgU2NhbmYuICopXG5sZXQgcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+ICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYXJhbV9mb3JtYXRfZWJiID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2hhciBmbXQpXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX2NoYXIgZm10KVxuICB8IElnbm9yZWRfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTdHJpbmcgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDMyIChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50MzIgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChOYXRpdmVpbnQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQ2NCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEludDY0IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfZmxvYXQgKHBhZF9vcHQsIHByZWNfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChGbG9hdCAoKEZsb2F0X2ZsYWdfLCBGbG9hdF9mKSxcbiAgICAgICAgICAgICAgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Jvb2wgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEJvb2wgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHkpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIGZtdCkpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChSZWFkZXIgZm10KVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10KSlcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10KVxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlcyAqKVxuXG50eXBlICgnYiwgJ2MpIGFjY19mb3JtYXR0aW5nX2dlbiA9XG4gIHwgQWNjX29wZW5fdGFnIG9mICgnYiwgJ2MpIGFjY1xuICB8IEFjY19vcGVuX2JveCBvZiAoJ2IsICdjKSBhY2NcblxuKCogUmV2ZXJzZWQgbGlzdCBvZiBwcmludGluZyBhdG9tcy4gKilcbigqIFVzZWQgdG8gYWNjdW11bGF0ZSBwcmludGYgYXJndW1lbnRzLiAqKVxuYW5kICgnYiwgJ2MpIGFjYyA9XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IG9mICgnYiwgJ2MpIGFjYyAqIGZvcm1hdHRpbmdfbGl0XG4gICAgICAoKiBTcGVjaWFsIGZtdHRpbmcgKGJveCkgKilcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gb2YgKCdiLCAnYykgYWNjICogKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuXG4gICAgICAoKiBTcGVjaWFsIGZtdHRpbmcgKGJveCkgKilcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nICAgICAoKiBMaXRlcmFsIHN0cmluZyAqKVxuICB8IEFjY19jaGFyX2xpdGVyYWwgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIExpdGVyYWwgY2hhciAqKVxuICB8IEFjY19kYXRhX3N0cmluZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIEdlbmVyYXRlZCBzdHJpbmcgKilcbiAgfCBBY2NfZGF0YV9jaGFyICAgICAgb2YgKCdiLCAnYykgYWNjICogY2hhciAgICAgICAoKiBHZW5lcmF0ZWQgY2hhciAqKVxuICB8IEFjY19kZWxheSAgICAgICAgICBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IgLT4gJ2MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBEZWxheWVkIHByaW50aW5nICglYSwgJXQpICopXG4gIHwgQWNjX2ZsdXNoICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAgICAgICAgICAgICAgKCogRmx1c2ggKilcbiAgfCBBY2NfaW52YWxpZF9hcmcgICAgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nXG4gICAgICAoKiBSYWlzZSBJbnZhbGlkX2FyZ3VtZW50IG1zZyAqKVxuICB8IEVuZF9vZl9hY2NcblxuKCogTGlzdCBvZiBoZXRlcm9nZW5lb3VzIHZhbHVlcy4gKilcbigqIFVzZWQgdG8gYWNjdW11bGF0ZSBzY2FuZiBjYWxsYmFjayBhcmd1bWVudHMuICopXG50eXBlICgnYSwgJ2IpIGhldGVyX2xpc3QgPVxuICB8IENvbnMgOiAnYyAqICgnYSwgJ2IpIGhldGVyX2xpc3QgLT4gKCdjIC0+ICdhLCAnYikgaGV0ZXJfbGlzdFxuICB8IE5pbCA6ICgnYiwgJ2IpIGhldGVyX2xpc3RcblxuKCogRXhpc3RlbnRpYWwgQmxhY2sgQm94ZXMuICopXG4oKiBVc2VkIHRvIGFic3RyYWN0IHNvbWUgZXhpc3RlbnRpYWwgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nIGFuZCBhbiBmbXR0eS4gKilcbigqIFNlZSB0aGUgdHlwZV9wYWRkaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmIgPSBQYWRkaW5nX2ZtdHR5X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZGRpbmdfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXR0eS4gKilcbigqIFNlZSB0aGUgdHlwZV9wYWRwcmVjIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmIgPSBQYWRwcmVjX2ZtdHR5X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICd6KSBwcmVjaXNpb24gKiAoJ3osICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZHByZWNfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3BhZGRpbmdfZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdlLCAnZikgcGFkZGluZ19mbXRfZWJiID0gUGFkZGluZ19mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwYWRkaW5nICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wcmVjaXNpb25fZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdlLCAnZikgcHJlY2lzaW9uX2ZtdF9lYmIgPSBQcmVjaXNpb25fZm10X0VCQiA6XG4gICAgIChfLCAneCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkcHJlY19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ3AsICdiLCAnYywgJ2UsICdmKSBwYWRwcmVjX2ZtdF9lYmIgPSBQYWRwcmVjX2ZtdF9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAncCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3AsICdiLCAnYywgJ2UsICdmKSBwYWRwcmVjX2ZtdF9lYmJcblxuKCogQWJzdHJhY3QgdGhlICdhIGFuZCAnZCBwYXJhbWV0ZXJzIG9mIGFuIGZtdC4gKilcbigqIE91dHB1dCB0eXBlIG9mIHRoZSBmb3JtYXQgcGFyc2luZyBmdW5jdGlvbi4gKilcbnR5cGUgKCdiLCAnYywgJ2UsICdmKSBmbXRfZWJiID0gRm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCdiLCAnYywgJ2UsICdmKSBmbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhbiBmbXR0eSBhbmQgYW4gZm10LiAqKVxuKCogU2VlIHRoZSB0eXBlX2Zvcm1hdF9nZW4gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRfZm10dHlfZWJiID0gRm10X2ZtdHR5X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXQgKlxuICAgICAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfZm10X2ViYiA9IEZtdHR5X2ZtdF9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgZm10dHkgKlxuICAgICAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10X2ZtdHR5X2ViYiAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgZm10dHkgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIGZvcm1hdCB0eXBlcy4gKilcbnR5cGUgZm10dHlfZWJiID0gRm10dHlfRUJCIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+IGZtdHR5X2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgcGFkZGluZyB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcGFkZGluZ3MuICopXG50eXBlIHBhZGRpbmdfZWJiID0gUGFkZGluZ19FQkIgOiAoJ2EsICdiKSBwYWRkaW5nIC0+IHBhZGRpbmdfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwcmVjaXNpb24gdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIHByZWNpc2lvbnMuICopXG50eXBlIHByZWNpc2lvbl9lYmIgPSBQcmVjaXNpb25fRUJCIDogKCdhLCAnYikgcHJlY2lzaW9uIC0+IHByZWNpc2lvbl9lYmJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb25zdGFudHMgKilcblxuKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIGZsb2F0IHByaW50aW5nLiAqKVxubGV0IGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252ID1cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfRyB8IEZsb2F0X2ggfCBGbG9hdF9IXG4gIHwgRmxvYXRfQ0YgLT4gLTZcbiAgKCogRm9yICVoICVIIGFuZCAlI0YgZm9ybWF0cywgYSBuZWdhdGl2ZSBwcmVjaXNpb24gbWVhbnMgXCJhcyBtYW55IGRpZ2l0cyBhc1xuICAgICBuZWNlc3NhcnlcIi4gIEZvciB0aGUgb3RoZXIgRlAgZm9ybWF0cywgd2UgdGFrZSB0aGUgYWJzb2x1dGUgdmFsdWVcbiAgICAgb2YgdGhlIHByZWNpc2lvbiwgaGVuY2UgNiBkaWdpdHMgYnkgZGVmYXVsdC4gKilcbiAgfCBGbG9hdF9GIC0+IDEyXG4gICgqIERlZmF1bHQgcHJlY2lzaW9uIGZvciBPQ2FtbCBmbG9hdCBwcmludGluZyAoJUYpLiAqKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEV4dGVybmFscyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQ6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQ6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDMyOiBzdHJpbmcgLT4gaW50MzIgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDMyX2Zvcm1hdFwiXG5leHRlcm5hbCBmb3JtYXRfbmF0aXZlaW50OiBzdHJpbmcgLT4gbmF0aXZlaW50IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9uYXRpdmVpbnRfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQ2NDogc3RyaW5nIC0+IGludDY0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9pbnQ2NF9mb3JtYXRcIlxuZXh0ZXJuYWwgaGV4c3RyaW5nX29mX2Zsb2F0OiBmbG9hdCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0XCJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICgqIFRvb2xzIHRvIHByZXR0eS1wcmludCBmb3JtYXRzICopXG5cbigqIFR5cGUgb2YgZXh0ZW5zaWJsZSBjaGFyYWN0ZXIgYnVmZmVycy4gKilcbnR5cGUgYnVmZmVyID0ge1xuICBtdXRhYmxlIGluZCA6IGludDtcbiAgbXV0YWJsZSBieXRlcyA6IGJ5dGVzO1xufVxuXG4oKiBDcmVhdGUgYSBmcmVzaCBidWZmZXIuICopXG5sZXQgYnVmZmVyX2NyZWF0ZSBpbml0X3NpemUgPSB7IGluZCA9IDA7IGJ5dGVzID0gQnl0ZXMuY3JlYXRlIGluaXRfc2l6ZSB9XG5cbigqIENoZWNrIHNpemUgb2YgdGhlIGJ1ZmZlciBhbmQgZ3JvdyBpdCBpZiBuZWVkZWQuICopXG5sZXQgYnVmZmVyX2NoZWNrX3NpemUgYnVmIG92ZXJoZWFkID1cbiAgbGV0IGxlbiA9IEJ5dGVzLmxlbmd0aCBidWYuYnl0ZXMgaW5cbiAgbGV0IG1pbl9sZW4gPSBidWYuaW5kICsgb3ZlcmhlYWQgaW5cbiAgaWYgbWluX2xlbiA+IGxlbiB0aGVuIChcbiAgICBsZXQgbmV3X2xlbiA9IEludC5tYXggKGxlbiAqIDIpIG1pbl9sZW4gaW5cbiAgICBsZXQgbmV3X3N0ciA9IEJ5dGVzLmNyZWF0ZSBuZXdfbGVuIGluXG4gICAgQnl0ZXMuYmxpdCBidWYuYnl0ZXMgMCBuZXdfc3RyIDAgbGVuO1xuICAgIGJ1Zi5ieXRlcyA8LSBuZXdfc3RyO1xuICApXG5cbigqIEFkZCB0aGUgY2hhcmFjdGVyIGBjJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfY2hhciBidWYgYyA9XG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiAxO1xuICBCeXRlcy5zZXQgYnVmLmJ5dGVzIGJ1Zi5pbmQgYztcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgMVxuXG4oKiBBZGQgdGhlIHN0cmluZyBgcycgdG8gdGhlIGJ1ZmZlciBgYnVmJy4gKilcbmxldCBidWZmZXJfYWRkX3N0cmluZyBidWYgcyA9XG4gIGxldCBzdHJfbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBzdHJfbGVuO1xuICBTdHJpbmcuYmxpdCBzIDAgYnVmLmJ5dGVzIGJ1Zi5pbmQgc3RyX2xlbjtcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgc3RyX2xlblxuXG4oKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY29udGVudHMgYnVmID1cbiAgQnl0ZXMuc3ViX3N0cmluZyBidWYuYnl0ZXMgMCBidWYuaW5kXG5cbigqKiopXG5cbigqIENvbnZlcnQgYW4gaW50ZWdlciBjb252ZXJzaW9uIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9pY29udiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCB8IEludF9DZCAtPiAnZCcgfCBJbnRfaSB8IEludF9waSB8IEludF9zaVxuICB8IEludF9DaSAtPiAnaScgfCBJbnRfeCB8IEludF9DeCAtPiAneCcgfCBJbnRfWCB8IEludF9DWCAtPiAnWCcgfCBJbnRfb1xuICB8IEludF9DbyAtPiAnbycgfCBJbnRfdSB8IEludF9DdSAtPiAndSdcblxuKCogQ29udmVydCBhIGZsb2F0IGNvbnZlcnNpb24gdG8gY2hhci4gKilcbigqIGBjRicgd2lsbCBiZSAnRicgZm9yIGRpc3BsYXlpbmcgZm9ybWF0IGFuZCAnZycgdG8gY2FsbCBsaWJjIHByaW50ZiAqKVxubGV0IGNoYXJfb2ZfZmNvbnYgPyhjRj0nRicpIGZjb252ID0gbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIC0+ICdmJyB8IEZsb2F0X2UgLT4gJ2UnXG4gIHwgRmxvYXRfRSAtPiAnRScgfCBGbG9hdF9nIC0+ICdnJ1xuICB8IEZsb2F0X0cgLT4gJ0cnIHwgRmxvYXRfRiAtPiBjRlxuICB8IEZsb2F0X2ggLT4gJ2gnIHwgRmxvYXRfSCAtPiAnSCdcbiAgfCBGbG9hdF9DRiAtPiAnRidcblxuXG4oKiBDb252ZXJ0IGEgc2Nhbm5pbmcgY291bnRlciB0byBjaGFyLiAqKVxubGV0IGNoYXJfb2ZfY291bnRlciBjb3VudGVyID0gbWF0Y2ggY291bnRlciB3aXRoXG4gIHwgTGluZV9jb3VudGVyICAtPiAnbCdcbiAgfCBDaGFyX2NvdW50ZXIgIC0+ICduJ1xuICB8IFRva2VuX2NvdW50ZXIgLT4gJ04nXG5cbigqKiopXG5cbigqIFByaW50IGEgY2hhcl9zZXQgaW4gYSBidWZmZXIgd2l0aCB0aGUgT0NhbWwgZm9ybWF0IGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0ID1cbiAgbGV0IHJlYyBwcmludF9zdGFydCBzZXQgPVxuICAgIGxldCBpc19hbG9uZSBjID1cbiAgICAgIGxldCBiZWZvcmUsIGFmdGVyID0gQ2hhci4oY2hyIChjb2RlIGMgLSAxKSwgY2hyIChjb2RlIGMgKyAxKSkgaW5cbiAgICAgIGlzX2luX2NoYXJfc2V0IHNldCBjXG4gICAgICAmJiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCBiZWZvcmUgJiYgaXNfaW5fY2hhcl9zZXQgc2V0IGFmdGVyKSBpblxuICAgIGlmIGlzX2Fsb25lICddJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nO1xuICAgIHByaW50X291dCBzZXQgMTtcbiAgICBpZiBpc19hbG9uZSAnLScgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICctJztcbiAgYW5kIHByaW50X291dCBzZXQgaSA9XG4gICAgaWYgaSA8IDI1NiB0aGVuXG4gICAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW4gcHJpbnRfZmlyc3Qgc2V0IGlcbiAgICAgIGVsc2UgcHJpbnRfb3V0IHNldCAoaSArIDEpXG4gIGFuZCBwcmludF9maXJzdCBzZXQgaSA9XG4gICAgbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnXFwyNTUnIC0+IHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICB8ICddJyB8ICctJyAtPiBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgfCBfIC0+IHByaW50X3NlY29uZCBzZXQgKGkgKyAxKTtcbiAgYW5kIHByaW50X3NlY29uZCBzZXQgaSA9XG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBpKSB0aGVuXG4gICAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICAgIHwgJ1xcMjU1JyAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAyNTQ7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICAgIHwgJ10nIHwgJy0nIHdoZW4gbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IChpICsgMSkpKSAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgICBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgICB8IF8gd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAyKTtcbiAgICAgIHwgXyAtPlxuICAgICAgICBwcmludF9pbiBzZXQgKGkgLSAxKSAoaSArIDIpO1xuICAgIGVsc2UgKFxuICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICApXG4gIGFuZCBwcmludF9pbiBzZXQgaSBqID1cbiAgICBpZiBqID0gMjU2IHx8IG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBqKSkgdGhlbiAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiBpO1xuICAgICAgcHJpbnRfY2hhciBidWYgKGludF9vZl9jaGFyICctJyk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaiAtIDEpO1xuICAgICAgaWYgaiA8IDI1NiB0aGVuIHByaW50X291dCBzZXQgKGogKyAxKTtcbiAgICApIGVsc2VcbiAgICAgIHByaW50X2luIHNldCBpIChqICsgMSk7XG4gIGFuZCBwcmludF9jaGFyIGJ1ZiBpID0gbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnJScgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICAgIHwgJ0AnIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICdAJztcbiAgICB8IGMgICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGluXG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1snO1xuICBwcmludF9zdGFydCAoXG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgJ1xcMDAwJ1xuICAgIHRoZW4gKCBidWZmZXJfYWRkX2NoYXIgYnVmICdeJzsgcmV2X2NoYXJfc2V0IGNoYXJfc2V0IClcbiAgICBlbHNlIGNoYXJfc2V0XG4gICk7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nXG5cbigqKiopXG5cbigqIFByaW50IGEgcGFkdHkgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWR0eSBidWYgcGFkdHkgPSBtYXRjaCBwYWR0eSB3aXRoXG4gIHwgTGVmdCAgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLSdcbiAgfCBSaWdodCAtPiAoKVxuICB8IFplcm9zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJzAnXG5cbigqIFByaW50IHRoZSAnXycgb2YgYW4gaWdub3JlZCBmbGFnIGlmIG5lZWRlZC4gKilcbmxldCBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZyA9XG4gIGlmIGlnbl9mbGFnIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXydcblxuKCoqKilcblxubGV0IGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgd2lkdGggLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHdpZHRoKVxuXG4oKioqKVxuXG4oKiBQcmludCBwYWRkaW5nIGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcGFkZGluZyA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwYWRkaW5nIC0+IHVuaXQgPVxuZnVuIGJ1ZiBwYWQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nIC0+ICgpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCBuKSAtPlxuICAgIGJwcmludF9wYWR0eSBidWYgcGFkdHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wYWRkaW5nIHBhZHR5IC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcqJ1xuXG4oKiBQcmludCBwcmVjaXNpb24gaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wcmVjaXNpb24gOiB0eXBlIGEgYiAuIGJ1ZmZlciAtPiAoYSwgYikgcHJlY2lzaW9uIC0+IHVuaXQgPVxuICBmdW4gYnVmIHByZWMgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uIC0+ICgpXG4gIHwgTGl0X3ByZWNpc2lvbiBuIC0+XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wcmVjaXNpb24gLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIuKlwiXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBvciAnIycgYXNzb2NpYXRlZCB0byBhbiBpbnQgY29udmVyc2lvbi4gKilcbmxldCBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnYgPSBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X3BkIHwgSW50X3BpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgSW50X3NkIHwgSW50X3NpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgSW50X0N4IHwgSW50X0NYIHwgSW50X0NvIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcjJ1xuICB8IEludF9kIHwgSW50X2kgfCBJbnRfeCB8IEludF9YIHwgSW50X28gfCBJbnRfdSAtPiAoKVxuXG4oKiBQcmludCBhbiBjb21wbGV0ZSBpbnQgZm9ybWF0IGluIGEgYnVmZmVyIChleDogXCIlMy4qZFwiKS4gKilcbmxldCBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBhbmQvb3IgJyMnIGFzc29jaWF0ZWQgdG8gYSBmbG9hdCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udiA9XG4gIGJlZ2luIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZmxhZ19wIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgRmxvYXRfZmxhZ19zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgRmxvYXRfZmxhZ18gLT4gKCkgZW5kO1xuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X0NGIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0dcbiAgfCBGbG9hdF9GIHwgRmxvYXRfaCB8IEZsb2F0X0ggLT4gKClcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmbG9hdCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUrKi4zZlwiKS4gKilcbmxldCBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2Zjb252IGZjb252KVxuXG4oKiBDb21wdXRlIHRoZSBsaXRlcmFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIEZvcm1hdHRpbmdfbGl0LiAqKVxuKCogVXNlZCBieSBQcmludGYgYW5kIFNjYW5mIHdoZXJlIGZvcm1hdHRpbmcgaXMgbm90IGludGVycHJldGVkLiAqKVxubGV0IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmb3JtYXR0aW5nX2xpdCA9IG1hdGNoIGZvcm1hdHRpbmdfbGl0IHdpdGhcbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAtPiBcIkBdXCJcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAtPiBcIkB9XCJcbiAgfCBCcmVhayAoc3RyLCBfLCBfKSAgICAtPiBzdHJcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAtPiBcIkA/XCJcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAtPiBcIkBcXG5cIlxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgIC0+IFwiQC5cIlxuICB8IE1hZ2ljX3NpemUgKHN0ciwgXykgIC0+IHN0clxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgIC0+IFwiQEBcIlxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgIC0+IFwiQCVcIlxuICB8IFNjYW5faW5kaWMgYyAtPiBcIkBcIiBeIChTdHJpbmcubWFrZSAxIGMpXG5cbigqKiopXG5cbigqIFByaW50IGEgbGl0ZXJhbCBjaGFyIGluIGEgYnVmZmVyLCBlc2NhcGUgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHIgPSBtYXRjaCBjaHIgd2l0aFxuICB8ICclJyAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlJVwiXG4gIHwgXyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGNoclxuXG4oKiBQcmludCBhIGxpdGVyYWwgc3RyaW5nIGluIGEgYnVmZmVyLCBlc2NhcGUgYWxsICclJyBieSBcIiUlXCIuICopXG5sZXQgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBzdHIgPVxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzdHIgLSAxIGRvXG4gICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgc3RyLltpXVxuICBkb25lXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwcmV0dHktcHJpbnRpbmcgKilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmb3JtYXQgdHlwZSAoYW4gZm10dHkpIGluIGEgYnVmZmVyLiAqKVxubGV0IHJlYyBicHJpbnRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgICBidWZmZXIgLT4gKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiB1bml0ID1cbmZ1biBidWYgZm10dHkgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVjXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlaVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDMyX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVsaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJW5pXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlTGlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEZsb2F0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVmXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQm9vbF90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJUJcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbHBoYV90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlYVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFRoZXRhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV0XCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQW55X3R5IHJlc3QgICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJT9cIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBSZWFkZXJfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlclwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVfclwiO1xuICAgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IEZvcm1hdF9hcmdfdHkgKHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIle1wiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlfVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHksIF8sIHJlc3QpIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJShcIjsgYnByaW50X2ZtdHR5IGJ1ZiBzdWJfZm10dHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRW5kX29mX2ZtdHR5IC0+ICgpXG5cbigqKiopXG5cbmxldCByZWMgaW50X29mX2N1c3RvbV9hcml0eSA6IHR5cGUgYSBiIGMgLlxuICAoYSwgYiwgYykgY3VzdG9tX2FyaXR5IC0+IGludCA9XG4gIGZ1bmN0aW9uXG4gIHwgQ3VzdG9tX3plcm8gLT4gMFxuICB8IEN1c3RvbV9zdWNjIHggLT4gMSArIGludF9vZl9jdXN0b21fYXJpdHkgeFxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfZm10IGJ1ZiBmbXQgPVxuICBsZXQgcmVjIGZtdGl0ZXIgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYm9vbCAtPiB1bml0ID1cbiAgZnVuIGZtdCBpZ25fZmxhZyAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdzJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdTJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2ludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ2wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICduJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICdMJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2Zsb2F0X2ZtdCBidWYgaWduX2ZsYWcgZmNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IENoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnYyc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdDJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQic7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBBbHBoYSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdhJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAndCc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpIC0+XG4gICAgICBmb3IgX2kgPSAxIHRvIGludF9vZl9jdXN0b21fYXJpdHkgYXJpdHkgZG9cbiAgICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICc/JztcbiAgICAgIGRvbmU7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBSZWFkZXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAncic7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsdXNoIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUhXCI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0cjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgY2hyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICd7JztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICd9JztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKCc7XG4gICAgICBicHJpbnRfZm10dHkgYnVmIGZtdHR5OyBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKSc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgd2lkdGhfb3B0OyBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0O1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfY291bnRlciBjb3VudGVyKTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgXCIwY1wiOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgIGxldCBQYXJhbV9mb3JtYXRfRUJCIGZtdCcgPSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3QgaW5cbiAgICAgIGZtdGl0ZXIgZm10JyB0cnVlO1xuXG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgKHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0KTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZm10aW5nX2dlbiB3aXRoXG4gICAgICB8IE9wZW5fdGFnIChGb3JtYXQgKF8sIHN0cikpIC0+XG4gICAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIkB7XCI7IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzdHJcbiAgICAgIHwgT3Blbl9ib3ggKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQFtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgZW5kO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+ICgpXG5cbiAgaW4gZm10aXRlciBmbXQgZmFsc2VcblxuKCoqKilcblxuKCogQ29udmVydCBhIGZvcm1hdCB0byBzdHJpbmcuICopXG5sZXQgc3RyaW5nX29mX2ZtdCBmbXQgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10IGJ1ZiBmbXQ7XG4gIGJ1ZmZlcl9jb250ZW50cyBidWZcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZSBleHRyYWN0aW9uICopXG5cbnR5cGUgKF8sIF8pIGVxID0gUmVmbCA6ICgnYSwgJ2EpIGVxXG5cbigqIEludmFyaWFudDogdGhpcyBmdW5jdGlvbiBpcyB0aGUgaWRlbnRpdHkgb24gdmFsdWVzLlxuXG4gICBJbiBwYXJ0aWN1bGFyLCBpZiAodHkxLCB0eTIpIGhhdmUgZXF1YWwgdmFsdWVzLCB0aGVuXG4gICAodHJhbnMgKHN5bW0gdHkxKSB0eTIpIHJlc3BlY3RzIHRoZSAndHJhbnMnIHByZWNvbmRpdGlvbi4gKilcbmxldCByZWMgc3ltbSA6IHR5cGUgYTEgYjEgYzEgZDEgZTEgZjEgYTIgYjIgYzIgZDIgZTIgZjIgLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXR0eV9yZWxcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT4gQ2hhcl90eSAoc3ltbSByZXN0KVxuICB8IEludF90eSByZXN0IC0+IEludF90eSAoc3ltbSByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT4gSW50MzJfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+IEludDY0X3R5IChzeW1tIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gTmF0aXZlaW50X3R5IChzeW1tIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPiBGbG9hdF90eSAoc3ltbSByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPiBCb29sX3R5IChzeW1tIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT4gU3RyaW5nX3R5IChzeW1tIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPiBUaGV0YV90eSAoc3ltbSByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT4gQWxwaGFfdHkgKHN5bW0gcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPiBBbnlfdHkgKHN5bW0gcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPiBSZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+IElnbm9yZWRfcmVhZGVyX3R5IChzeW1tIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkyLCB0eTEsIHN5bW0gcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbmxldCByZWMgZm10dHlfcmVsX2RldCA6IHR5cGUgYTEgYiBjIGQxIGUxIGYxIGEyIGQyIGUyIGYyIC5cbiAgKGExLCBiLCBjLCBkMSwgZTEsIGYxLFxuICAgYTIsIGIsIGMsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoZjEsIGYyKSBlcSAtPiAoYTEsIGEyKSBlcSlcbiAgKiAoKGExLCBhMikgZXEgLT4gKGYxLCBmMikgZXEpXG4gICogKChlMSwgZTIpIGVxIC0+IChkMSwgZDIpIGVxKVxuICAqICgoZDEsIGQyKSBlcSAtPiAoZTEsIGUyKSBlcSlcbj0gZnVuY3Rpb25cbiAgfCBFbmRfb2ZfZm10dHkgLT5cbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbClcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgRm9ybWF0X2FyZ190eSAoX3R5LCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgbGV0IGFnLCBnYSwgZGosIGpkID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZyBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGdhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gbGV0IFJlZmwgPSBkaiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGpkIFJlZmwgaW4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG5cbigqIFByZWNvbmRpdGlvbjogd2UgYXNzdW1lIHRoYXQgdGhlIHR3byBmbXR0eV9yZWwgYXJndW1lbnRzIGhhdmUgZXF1YWxcbiAgIHZhbHVlcyAoYXQgcG9zc2libHkgZGlzdGluY3QgdHlwZXMpOyB0aGlzIGludmFyaWFudCBjb21lcyBmcm9tIHRoZSB3YXlcbiAgIGZtdHR5X3JlbCB3aXRuZXNzZXMgYXJlIHByb2R1Y2VkIGJ5IHRoZSB0eXBlLWNoZWNrZXJcblxuICAgVGhlIGNvZGUgYmVsb3cgdXNlcyAoYXNzZXJ0IGZhbHNlKSB3aGVuIHRoaXMgYXNzdW1wdGlvbiBpcyBicm9rZW4uIFRoZVxuICAgY29kZSBwYXR0ZXJuIGlzIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgfCBGb28geCwgRm9vIHkgLT5cbiAgICAgICAoKiBjYXNlIHdoZXJlIGluZGVlZCBib3RoIHZhbHVlc1xuICAgICAgICAgIHN0YXJ0IHdpdGggY29uc3RydWN0b3IgRm9vICopXG4gICAgIHwgRm9vIF8sIF9cbiAgICAgfCBfLCBGb28gXyAtPlxuICAgICAgICgqIGRpZmZlcmVudCBoZWFkIGNvbnN0cnVjdG9yczogYnJva2VuIHByZWNvbmRpdGlvbiAqKVxuICAgICAgIGFzc2VydCBmYWxzZVxuKilcbmFuZCB0cmFucyA6IHR5cGVcbiAgYTEgYjEgYzEgZDEgZTEgZjFcbiAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgYTMgYjMgYzMgZDMgZTMgZjNcbi5cbiAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsXG4gICAgYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHlfcmVsXG4tPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbj0gZnVuIHR5MSB0eTIgLT4gbWF0Y2ggdHkxLCB0eTIgd2l0aFxuICB8IENoYXJfdHkgcmVzdDEsIENoYXJfdHkgcmVzdDIgLT4gQ2hhcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgU3RyaW5nX3R5IHJlc3QxLCBTdHJpbmdfdHkgcmVzdDIgLT4gU3RyaW5nX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBCb29sX3R5IHJlc3QxLCBCb29sX3R5IHJlc3QyIC0+IEJvb2xfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludF90eSByZXN0MSwgSW50X3R5IHJlc3QyIC0+IEludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50MzJfdHkgcmVzdDEsIEludDMyX3R5IHJlc3QyIC0+IEludDMyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQ2NF90eSByZXN0MSwgSW50NjRfdHkgcmVzdDIgLT4gSW50NjRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IE5hdGl2ZWludF90eSByZXN0MSwgTmF0aXZlaW50X3R5IHJlc3QyIC0+IE5hdGl2ZWludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRmxvYXRfdHkgcmVzdDEsIEZsb2F0X3R5IHJlc3QyIC0+IEZsb2F0X3R5ICh0cmFucyByZXN0MSByZXN0MilcblxuICB8IEFscGhhX3R5IHJlc3QxLCBBbHBoYV90eSByZXN0MiAtPiBBbHBoYV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQWxwaGFfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBBbHBoYV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgVGhldGFfdHkgcmVzdDEsIFRoZXRhX3R5IHJlc3QyIC0+IFRoZXRhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBUaGV0YV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFRoZXRhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBBbnlfdHkgcmVzdDEsIEFueV90eSByZXN0MiAtPiBBbnlfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEFueV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFueV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgUmVhZGVyX3R5IHJlc3QxLCBSZWFkZXJfdHkgcmVzdDIgLT4gUmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBSZWFkZXJfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBSZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QxLCBJZ25vcmVkX3JlYWRlcl90eSByZXN0MiAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIElnbm9yZWRfcmVhZGVyX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfYXJnX3R5ICh0eTEsIHJlc3QxKSwgRm9ybWF0X2FyZ190eSAodHkyLCByZXN0MikgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0cmFucyB0eTEgdHkyLCB0cmFucyByZXN0MSByZXN0MilcbiAgfCBGb3JtYXRfYXJnX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X2FyZ190eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTExLCB0eTEyLCByZXN0MSksXG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIxLCB0eTIyLCByZXN0MikgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEyKSB0eTIxIGluXG4gICAgbGV0IF8sIGYyLCBfLCBmNCA9IGZtdHR5X3JlbF9kZXQgdHkgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MjIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9zdWJzdF90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEZvcm1hdF9zdWJzdF90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRW5kX29mX2ZtdHR5LCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG4gIHwgRW5kX29mX2ZtdHR5LCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEVuZF9vZl9mbXR0eSAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHJlYyBmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10LCBfKSkgLT4gZm10dHlfb2ZfZm10IGZtdFxuXG4oKiBFeHRyYWN0IHRoZSB0eXBlIHJlcHJlc2VudGF0aW9uIChhbiBmbXR0eSkgb2YgYSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfZm10IDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuXG4gIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnQzMl90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBOYXRpdmVpbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoTmF0aXZlaW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDY0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDY0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEZsb2F0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuXG4gIHwgQ2hhciByZXN0ICAgICAgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAgICAgICAgICAgLT5cbiAgICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChCb29sX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQWxwaGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gQWxwaGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFRoZXRhIHJlc3QgICAgICAgICAgICAgICAgIC0+IFRoZXRhX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAgICAtPiBmbXR0eV9vZl9jdXN0b20gYXJpdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFJlYWRlciByZXN0ICAgICAgICAgICAgICAgIC0+IFJlYWRlcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGb3JtYXRfYXJnIChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5LCB0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGbHVzaCByZXN0ICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAgICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+IFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT4gSW50X3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX25leHRfY2hhciByZXN0ICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpICAtPiBmbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdFxuICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpICAtPlxuICAgIGNvbmNhdF9mbXR0eSAoZm10dHlfb2ZfZm9ybWF0dGluZ19nZW4gZm10aW5nX2dlbikgKGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAgICAgICAgICAgICAgLT4gRW5kX29mX2ZtdHR5XG5cbmFuZCBmbXR0eV9vZl9jdXN0b20gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICh5LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gYXJpdHkgZm10dHkgLT4gbWF0Y2ggYXJpdHkgd2l0aFxuICB8IEN1c3RvbV96ZXJvIC0+IGZtdHR5XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT4gQW55X3R5IChmbXR0eV9vZl9jdXN0b20gYXJpdHkgZm10dHkpXG5cbigqIEV4dHJhY3QgdGhlIGZtdHR5IG9mIGFuIGlnbm9yZWQgcGFyYW1ldGVyIGZvbGxvd2VkIGJ5IHRoZSByZXN0IG9mXG4gICB0aGUgZm9ybWF0LiAqKVxuYW5kIGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gY29uY2F0X2ZtdHR5IGZtdHR5IChmbXR0eV9vZl9mbXQgZm10KVxuICB8IElnbm9yZWRfcmVhZGVyICAgICAgICAgICAgICAgICAgLT4gSWdub3JlZF9yZWFkZXJfdHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwYWRkaW5nIGlzIHRha2VuIGFzIGFuIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKnNcIikuICopXG5hbmQgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHBhZGRpbmcgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgICAgLT4gZm10dHlcbiAgICB8IExpdF9wYWRkaW5nIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wYWRkaW5nIF8gLT4gSW50X3R5IGZtdHR5XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwcmVjaXNpb24gaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikuKilcbmFuZCBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgOiB0eXBlIHggYSBiIGMgZCBlIGYgLlxuICAgICh4LCBhKSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwcmVjIGZtdHR5IC0+IG1hdGNoIHByZWMgd2l0aFxuICAgIHwgTm9fcHJlY2lzaW9uICAgIC0+IGZtdHR5XG4gICAgfCBMaXRfcHJlY2lzaW9uIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wcmVjaXNpb24gICAtPiBJbnRfdHkgZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwaW5nICopXG5cbigqIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIGZvcm1hdCBkb2VzIG5vdCBtYXRjaCBhIGdpdmVuIGZvcm1hdCB0eXBlLiAqKVxuZXhjZXB0aW9uIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIHBhZGRpbmcuICopXG4oKiBUYWtlIGFuIEludF90eSBmcm9tIHRoZSBmbXR0eSBpZiB0aGUgaW50ZWdlciBzaG91bGQgYmUga2VwdCBhcyBhcmd1bWVudC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkZGluZyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIGZtdHR5IC0+IG1hdGNoIHBhZCwgZm10dHkgd2l0aFxuICB8IE5vX3BhZGRpbmcsIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKE5vX3BhZGRpbmcsIGZtdHR5KVxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKExpdF9wYWRkaW5nIChwYWR0eSx3KSxmbXR0eSlcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgSW50X3R5IHJlc3QgLT4gUGFkZGluZ19mbXR0eV9FQkIgKEFyZ19wYWRkaW5nIHBhZHR5LHJlc3QpXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIENvbnZlcnQgYSAodXBhZGRpbmcsIHVwcmVjaXNpb24pIHRvIGEgKHBhZGRpbmcsIHByZWNpc2lvbikuICopXG4oKiBUYWtlIG9uZSBvciB0d28gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIG5lZWRlZC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkcHJlYyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IHogLlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeikgcHJlY2lzaW9uIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYywgdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIE5vX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAsIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTGl0X3ByZWNpc2lvbiBwLCByZXN0KVxuICB8IEFyZ19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEludF90eSByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIEFyZ19wcmVjaXNpb24sIHJlc3QpXG4gIHwgXywgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBJZiB0eXBpbmcgc3VjY2VlZCwgZ2VuZXJhdGUgYSBjb3B5IG9mIHRoZSBmb3JtYXQgd2l0aCB0aGUgc2FtZVxuICAgIHR5cGUgcGFyYW1ldGVycyBhcyB0aGUgZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCByZWMgdHlwZV9mb3JtYXQgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+IG1hdGNoIHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgd2l0aFxuICB8IEZtdF9mbXR0eV9FQkIgKGZtdCcsIEVuZF9vZl9mbXR0eSkgLT4gZm10J1xuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG5hbmQgdHlwZV9mb3JtYXRfZ2VuIDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRfZm10dHlfZWJiXG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggZm10LCBmbXR0eSB3aXRoXG4gIHwgQ2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXIgZm10JywgZm10dHknKVxuICB8IENhbWxfY2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfY2hhciBmbXQnLCBmbXR0eScpXG4gIHwgU3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKFN0cmluZyAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfc3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50MzJfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgTmF0aXZlaW50X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludDY0X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgRmxvYXRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEJvb2wgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEJvb2xfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEJvb2wgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbHVzaCBmbXRfcmVzdCwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGbHVzaCBmbXQnLCBmbXR0eScpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nX2xpdGVyYWwgKHN0ciwgZm10JyksIGZtdHR5JylcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXJfbGl0ZXJhbCAoY2hyLCBmbXQnKSwgZm10dHknKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgc3ViX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5JywgZm10JyksIGZtdHR5JylcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViX2ZtdHR5MSwgX3N1Yl9mbXR0eTIsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkxKSB0aGVuXG4gICAgICByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID1cbiAgICAgIHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCAoZXJhc2VfcmVsIGZtdHR5X3Jlc3QpXG4gICAgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eTEsIGZtdCcpLCBmbXR0eScpXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBBbHBoYSBmbXRfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChBbHBoYSBmbXQnLCBmbXR0eScpXG4gIHwgVGhldGEgZm10X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoVGhldGEgZm10JywgZm10dHknKVxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nX2dlbiwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgdHlwZV9mb3JtYXR0aW5nX2dlbiBmb3JtYXR0aW5nX2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciBmbXRfcmVzdCwgUmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoUmVhZGVyIGZtdCcsIGZtdHR5JylcbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXRfcmVzdCksIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpLCBJbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQnKSwgZm10dHknKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2lnbm9yZWRfcGFyYW0gaWduIHJlc3QgZm10dHlfcmVzdFxuXG4gIHwgRW5kX29mX2Zvcm1hdCwgZm10dHlfcmVzdCAtPiBGbXRfZm10dHlfRUJCIChFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0KVxuXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhMSBhMyBiMSBiMyBjMSBjMyBkMSBkMyBlMSBlMiBlMyBmMSBmMiBmMyAuXG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZvcm1hdHRpbmdfZ2VuIC0+XG4gICAgKGYxLCBiMSwgYzEsIGUxLCBlMiwgZjIpIGZtdCAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eSAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXRfZm10dHlfZWJiID1cbmZ1biBmb3JtYXR0aW5nX2dlbiBmbXQwIGZtdHR5MCAtPiBtYXRjaCBmb3JtYXR0aW5nX2dlbiB3aXRoXG4gIHwgT3Blbl90YWcgKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuICB8IE9wZW5fYm94IChGb3JtYXQgKGZtdDEsIHN0cikpIC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDIsIGZtdHR5MikgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MSBmbXR0eTAgaW5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MywgZm10dHkzKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQwIGZtdHR5MiBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQyLCBzdHIpKSwgZm10MyksIGZtdHR5MylcblxuKCogVHlwZSBhbiBJZ25vcmVkX3BhcmFtIG5vZGUgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbSA6IHR5cGUgcCBxIHggeSB6IHQgdSB2IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgeSwgeiwgdCwgcSwgcCkgaWdub3JlZCAtPlxuICAgIChwLCB5LCB6LCBxLCB1LCB2KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10X2ZtdHR5X2ViYiA9XG5mdW4gaWduIGZtdCBmbXR0eSAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50IF8gICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50MzIgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfbmF0aXZlaW50IF8gICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50NjQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZmxvYXQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgKElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSkgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSkgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5JywgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSkgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5IGZtdCBmbXR0eSBpblxuICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQnKSxcbiAgICAgICAgICAgICAgICAgICBmbXR0eScpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT4gKFxuICAgIG1hdGNoIGZtdHR5IHdpdGhcbiAgICB8IElnbm9yZWRfcmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10JyksIGZtdHR5JylcbiAgICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG5cbmFuZCB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIDogdHlwZSBhMSBhMiBiMSBiMiBjMSBjMiBkMSBkMiBlMSBlMiBmMSBmMiAuXG4gICAgKGEyLCBiMiwgYzIsIGQyLCBkMiwgYTIpIGlnbm9yZWQgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGlnbiBmbXQgZm10dHkgLT5cbiAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5IGluXG4gIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbiwgZm10JyksIGZtdHR5JylcblxuKCogVHlwaW5nIG9mIHRoZSBjb21wbGV4IGNhc2U6IFwiJV8oLi4uJSlcIi4gKilcbmFuZCB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiA6IHR5cGUgdyB4IHkgeiBwIHMgdCB1IGEgYiBjIGQgZSBmIC5cbiAgICAodywgeCwgeSwgeiwgcywgcCkgZm10dHkgLT5cbiAgICAocCwgeCwgeSwgcywgdCwgdSkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eV9mbXRfZWJiID1cbmZ1biBzdWJfZm10dHkgZm10IGZtdHR5IC0+IG1hdGNoIHN1Yl9mbXR0eSwgZm10dHkgd2l0aFxuICB8IENoYXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQ2hhcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0LCBTdHJpbmdfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQzMl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQzMl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0LCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCwgSW50NjRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50NjRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0LCBGbG9hdF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGbG9hdF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgQm9vbF90eSBzdWJfZm10dHlfcmVzdCwgQm9vbF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChCb29sX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBBbHBoYV90eSBzdWJfZm10dHlfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQWxwaGFfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0LCBUaGV0YV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChUaGV0YV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSWdub3JlZF9yZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eSwgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWIyX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWIyX2ZtdHR5JyB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5Jywgc3ViX2ZtdHR5X3Jlc3QnKSwgZm10JylcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHksICBzdWIyX2ZtdHR5LCAgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgICgqIFRPRE8gZGVmaW5lIEZtdHR5X3JlbF9FQkIgdG8gcmVtb3ZlIHRob3NlIGVyYXNlX3JlbCAqKVxuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5JylcbiAgICB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IHN1Yl9mbXR0eScgPSB0cmFucyAoc3ltbSBzdWIxX2ZtdHR5Jykgc3ViMl9mbXR0eScgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCBzdWJfZm10dHknIGluXG4gICAgbGV0IFJlZmwgPSBmMiBSZWZsIGluXG4gICAgbGV0IFJlZmwgPSBmNCBSZWZsIGluXG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gKGVyYXNlX3JlbCBzdWJfZm10dHlfcmVzdCkgZm10IGZtdHR5X3Jlc3RcbiAgICBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbSBzdWJfZm10dHlfcmVzdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdCcpXG4gIHwgRW5kX29mX2ZtdHR5LCBmbXR0eSAtPlxuICAgIEZtdHR5X2ZtdF9FQkIgKEVuZF9vZl9mbXR0eSwgdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSlcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBgcmVjYXN0YCBpcyBhIGJpdCBkaXNhcHBvaW50aW5nLiBUaGVcbiAgIGludmFyaWFudCBwcm92aWRlZCBieSB0aGUgdHlwZSBhcmUgdmVyeSBzdHJvbmc6IHRoZSBpbnB1dCBmb3JtYXQnc1xuICAgdHlwZSBpcyBpbiByZWxhdGlvbiB0byB0aGUgb3V0cHV0IHR5cGUncyBhcyB3aXRuZXNzZWQgYnkgdGhlXG4gICBmbXR0eV9yZWwgYXJndW1lbnQuIE9uZSB3b3VsZCBhdCBmaXJzdCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgdG90YWwsIGFuZCBpbXBsZW1lbnRhYmxlIGJ5IGV4aGF1c3RpdmUgcGF0dGVybiBtYXRjaGluZy4gSW5zdGVhZCxcbiAgIHdlIHJldXNlIHRoZSBoaWdobHkgcGFydGlhbCBhbmQgbXVjaCBsZXNzIHdlbGwtZGVmaW5lZCBmdW5jdGlvblxuICAgYHR5cGVfZm9ybWF0YCB0aGF0IGhhcyBsb3N0IGFsbCBrbm93bGVkZ2Ugb2YgdGhlIGNvcnJlc3BvbmRlbmNlXG4gICBiZXR3ZWVuIHRoZSBhcmd1bWVudCdzIHR5cGVzLlxuXG4gICBCZXNpZGVzIHRoZSBmYWN0IHRoYXQgdGhpcyBmdW5jdGlvbiByZXVzZXMgYSBsb3Qgb2YgdGhlXG4gICBgdHlwZV9mb3JtYXRgIGxvZ2ljIChlZy46IHNlZWluZyBJbnRfdHkgaW4gdGhlIGZtdHR5IHBhcmFtZXRlciBkb2VzXG4gICBub3QgbGV0IHlvdSBtYXRjaCBvbiBJbnQgb25seSwgYXMgeW91IG1heSBpbiBmYWN0IGhhdmUgRmxvYXRcbiAgIChBcmdfcGFkZGluZywgLi4uKSAoXCIlLipkXCIpIGJlZ2lubmluZyB3aXRoIGFuIEludF90eSksIGl0IGlzIGFsc29cbiAgIGEgcGFydGlhbCBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgdHlwaW5nIGluZm9ybWF0aW9uIGluIGEgZm9ybWF0IGlzXG4gICBub3QgcXVpdGUgZW5vdWdoIHRvIHJlY29uc3RydWN0IGl0IHVuYW1iaWd1b3VzbHkuIEZvciBleGFtcGxlLCB0aGVcbiAgIGZvcm1hdCB0eXBlcyBvZiBcIiVkJV9yXCIgYW5kIFwiJV9yJWRcIiBoYXZlIHRoZSBzYW1lIGZvcm1hdDZcbiAgIHBhcmFtZXRlcnMsIGJ1dCB0aGV5IGFyZSBub3QgYXQgYWxsIGV4Y2hhbmdlYWJsZSwgYW5kIHB1dHRpbmcgb25lXG4gICBpbiBwbGFjZSBvZiB0aGUgb3RoZXIgbXVzdCByZXN1bHQgaW4gYSBkeW5hbWljIGZhaWx1cmUuXG5cbiAgIEdpdmVuIHRoYXQ6XG4gICAtIHdlJ2QgaGF2ZSB0byBkdXBsaWNhdGUgYSBsb3Qgb2Ygbm9uLXRyaXZpYWwgdHlwaW5nIGxvZ2ljIGZyb20gdHlwZV9mb3JtYXRcbiAgIC0gdGhpcyB3b3VsZG4ndCBldmVuIGVsaW1pbmF0ZSAoYWxsKSB0aGUgZHluYW1pYyBmYWlsdXJlc1xuICAgd2UgZGVjaWRlZCB0byBqdXN0IHJldXNlIHR5cGVfZm9ybWF0IGRpcmVjdGx5IGZvciBub3cuXG4qKVxubGV0IHJlY2FzdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+XG4gIHR5cGVfZm9ybWF0IGZtdCAoZXJhc2VfcmVsIChzeW1tIGZtdHR5KSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUHJpbnRpbmcgdG9vbHMgKilcblxuKCogQWRkIHBhZGRpbmcgc3BhY2VzIGFyb3VuZCBhIHN0cmluZy4gKilcbmxldCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCBzdHIgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHdpZHRoLCBwYWR0eSA9XG4gICAgYWJzIHdpZHRoLFxuICAgICgqIHdoaWxlIGxpdGVyYWwgcGFkZGluZyB3aWR0aHMgYXJlIGFsd2F5cyBub24tbmVnYXRpdmUsXG4gICAgICAgZHluYW1pY2FsbHktc2V0IHdpZHRocyAoQXJnX3BhZGRpbmcsIGVnLiAlKmQpIG1heSBiZSBuZWdhdGl2ZTtcbiAgICAgICB3ZSBpbnRlcnByZXQgdGhvc2UgYXMgc3BlY2lmeWluZyBhIHBhZGRpbmctdG8tdGhlLWxlZnQ7IHRoaXNcbiAgICAgICBtZWFucyB0aGF0ICcwJyBtYXkgZ2V0IGRyb3BwZWQgZXZlbiBpZiBpdCB3YXMgZXhwbGljaXRseSBzZXQsXG4gICAgICAgYnV0OlxuICAgICAgIC0gdGhpcyBpcyB3aGF0IHRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gZG9lcywgYW5kXG4gICAgICAgICB3ZSBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IGlmIHBvc3NpYmxlXG4gICAgICAgLSB3ZSBjb3VsZCBvbmx5IHNpZ25hbCB0aGlzIGlzc3VlIGJ5IGZhaWxpbmcgYXQgcnVudGltZSxcbiAgICAgICAgIHdoaWNoIGlzIG5vdCB2ZXJ5IG5pY2UuLi4gKilcbiAgICBpZiB3aWR0aCA8IDAgdGhlbiBMZWZ0IGVsc2UgcGFkdHkgaW5cbiAgaWYgd2lkdGggPD0gbGVuIHRoZW4gc3RyIGVsc2VcbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSB3aWR0aCAoaWYgcGFkdHkgPSBaZXJvcyB0aGVuICcwJyBlbHNlICcgJykgaW5cbiAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgfCBMZWZ0ICAtPiBTdHJpbmcuYmxpdCBzdHIgMCByZXMgMCBsZW5cbiAgICB8IFJpZ2h0IC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAwICYmIChzdHIuWzBdID0gJysnIHx8IHN0ci5bMF0gPSAnLScgfHwgc3RyLlswXSA9ICcgJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMCBzdHIuWzBdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzICh3aWR0aCAtIGxlbiArIDEpIChsZW4gLSAxKVxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAxICYmIHN0ci5bMF0gPSAnMCcgJiYgKHN0ci5bMV0gPSAneCcgfHwgc3RyLlsxXSA9ICdYJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMSBzdHIuWzFdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzICh3aWR0aCAtIGxlbiArIDIpIChsZW4gLSAyKVxuICAgIHwgWmVyb3MgLT5cbiAgICAgIFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIGVuZDtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBBZGQgJzAnIHBhZGRpbmcgdG8gaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKilcbmxldCBmaXhfaW50X3ByZWNpc2lvbiBwcmVjIHN0ciA9XG4gIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIG1hdGNoIHN0ci5bMF0gd2l0aFxuICB8ICgnKycgfCAnLScgfCAnICcpIGFzIGMgd2hlbiBwcmVjICsgMSA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMSkgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAwIGM7XG4gICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzIChwcmVjIC0gbGVuICsgMikgKGxlbiAtIDEpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIHdoZW4gcHJlYyArIDIgPiBsZW4gJiYgbGVuID4gMSAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMikgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzIChwcmVjIC0gbGVuICsgNCkgKGxlbiAtIDIpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIC4uICc5JyB8ICdhJyAuLiAnZicgfCAnQScgLi4gJ0YnIHdoZW4gcHJlYyA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHByZWMgJzAnIGluXG4gICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzIChwcmVjIC0gbGVuKSBsZW47XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCBfIC0+XG4gICAgc3RyXG5cbigqIEVzY2FwZSBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGluZyBjb252ZW50aW9uLiAqKVxubGV0IHN0cmluZ190b19jYW1sX3N0cmluZyBzdHIgPVxuICBsZXQgc3RyID0gU3RyaW5nLmVzY2FwZWQgc3RyIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKGwgKyAyKSAnXFxcIicgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfaW50L2ludDMyL25hdGl2ZWludC9pbnQ2NCBmaXJzdCBhcmd1bWVudFxuICAgZnJvbSBhbiBpbnRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfaWNvbnYgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWRcIiB8IEludF9wZCAtPiBcIiUrZFwiIHwgSW50X3NkIC0+IFwiJSBkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVpXCIgfCBJbnRfcGkgLT4gXCIlK2lcIiB8IEludF9zaSAtPiBcIiUgaVwiXG4gIHwgSW50X3ggLT4gXCIleFwiIHwgSW50X0N4IC0+IFwiJSN4XCJcbiAgfCBJbnRfWCAtPiBcIiVYXCIgfCBJbnRfQ1ggLT4gXCIlI1hcIlxuICB8IEludF9vIC0+IFwiJW9cIiB8IEludF9DbyAtPiBcIiUjb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIldVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZMID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVMZFwiIHwgSW50X3BkIC0+IFwiJStMZFwiIHwgSW50X3NkIC0+IFwiJSBMZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlTGlcIiB8IEludF9waSAtPiBcIiUrTGlcIiB8IEludF9zaSAtPiBcIiUgTGlcIlxuICB8IEludF94IC0+IFwiJUx4XCIgfCBJbnRfQ3ggLT4gXCIlI0x4XCJcbiAgfCBJbnRfWCAtPiBcIiVMWFwiIHwgSW50X0NYIC0+IFwiJSNMWFwiXG4gIHwgSW50X28gLT4gXCIlTG9cIiB8IEludF9DbyAtPiBcIiUjTG9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJUx1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udmwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWxkXCIgfCBJbnRfcGQgLT4gXCIlK2xkXCIgfCBJbnRfc2QgLT4gXCIlIGxkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVsaVwiIHwgSW50X3BpIC0+IFwiJStsaVwiIHwgSW50X3NpIC0+IFwiJSBsaVwiXG4gIHwgSW50X3ggLT4gXCIlbHhcIiB8IEludF9DeCAtPiBcIiUjbHhcIlxuICB8IEludF9YIC0+IFwiJWxYXCIgfCBJbnRfQ1ggLT4gXCIlI2xYXCJcbiAgfCBJbnRfbyAtPiBcIiVsb1wiIHwgSW50X0NvIC0+IFwiJSNsb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlbHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252biA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbmRcIiB8IEludF9wZCAtPiBcIiUrbmRcIiB8IEludF9zZCAtPiBcIiUgbmRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJW5pXCIgfCBJbnRfcGkgLT4gXCIlK25pXCIgfCBJbnRfc2kgLT4gXCIlIG5pXCJcbiAgfCBJbnRfeCAtPiBcIiVueFwiIHwgSW50X0N4IC0+IFwiJSNueFwiXG4gIHwgSW50X1ggLT4gXCIlblhcIiB8IEludF9DWCAtPiBcIiUjblhcIlxuICB8IEludF9vIC0+IFwiJW5vXCIgfCBJbnRfQ28gLT4gXCIlI25vXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVudVwiXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfZmxvYXQgZmlyc3QgYXJndW1lbnQgZnJvbSBhIGZsb2F0X2NvbnYuICopXG5sZXQgZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMgPVxuICAgIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgICBsZXQgc3ltYiA9IGNoYXJfb2ZfZmNvbnYgfmNGOidnJyBmY29udiBpblxuICAgIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy4nO1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBwcmVjKTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmIHN5bWI7XG4gICAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG5sZXQgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgcyA9XG4gIG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICBsZXQgZGlnaXRzID1cbiAgICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgIHwgJzAnLi4nOScgLT4gaW5jciBuXG4gICAgICAgIHwgXyAtPiAoKVxuICAgICAgZG9uZTtcbiAgICAgICFuXG4gICAgaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAoZGlnaXRzIC0gMSkgLyAzKSBpblxuICAgIGxldCBwb3MgPSByZWYgMCBpblxuICAgIGxldCBwdXQgYyA9IEJ5dGVzLnNldCBidWYgIXBvcyBjOyBpbmNyIHBvcyBpblxuICAgIGxldCBsZWZ0ID0gcmVmICgoZGlnaXRzIC0gMSkgbW9kIDMgKyAxKSBpblxuICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnMCcuLic5JyBhcyBjIC0+XG4gICAgICAgICAgaWYgIWxlZnQgPSAwIHRoZW4gKHB1dCAnXyc7IGxlZnQgOj0gMyk7IGRlY3IgbGVmdDsgcHV0IGNcbiAgICAgIHwgYyAtPiBwdXQgY1xuICAgIGRvbmU7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWZcbiAgfCBfIC0+IHNcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBhIGNvbnZlcnNpb24uICopXG5sZXQgY29udmVydF9pbnQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50IChmb3JtYXRfb2ZfaWNvbnYgaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQzMiBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQzMiAoZm9ybWF0X29mX2ljb252bCBpY29udikgbilcbmxldCBjb252ZXJ0X25hdGl2ZWludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9uYXRpdmVpbnQgKGZvcm1hdF9vZl9pY29udm4gaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQ2NCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQ2NCAoZm9ybWF0X29mX2ljb252TCBpY29udikgbilcblxuKCogQ29udmVydCBhIGZsb2F0IHRvIHN0cmluZy4gKilcbigqIEZpeCBzcGVjaWFsIGNhc2Ugb2YgXCJPQ2FtbCBmbG9hdCBmb3JtYXRcIi4gKilcbmxldCBjb252ZXJ0X2Zsb2F0IGZjb252IHByZWMgeCA9XG4gIGxldCBoZXggKCkgPVxuICAgIGxldCBzaWduID1cbiAgICAgIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gICAgICB8IEZsb2F0X2ZsYWdfcCAtPiAnKydcbiAgICAgIHwgRmxvYXRfZmxhZ19zIC0+ICcgJ1xuICAgICAgfCBfIC0+ICctJyBpblxuICAgIGhleHN0cmluZ19vZl9mbG9hdCB4IHByZWMgc2lnbiBpblxuICBsZXQgYWRkX2RvdF9pZl9uZWVkZWQgc3RyID1cbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgcmVjIGlzX3ZhbGlkIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJy4nIHwgJ2UnIHwgJ0UnIC0+IHRydWVcbiAgICAgICAgfCBfIC0+IGlzX3ZhbGlkIChpICsgMSkgaW5cbiAgICBpZiBpc192YWxpZCAwIHRoZW4gc3RyIGVsc2Ugc3RyIF4gXCIuXCIgaW5cbiAgbGV0IGNhbWxfc3BlY2lhbF92YWwgc3RyID0gbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+IHN0clxuICAgIHwgRlBfaW5maW5pdGUgLT4gaWYgeCA8IDAuMCB0aGVuIFwibmVnX2luZmluaXR5XCIgZWxzZSBcImluZmluaXR5XCJcbiAgICB8IEZQX25hbiAtPiBcIm5hblwiIGluXG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfaCAtPiBoZXggKClcbiAgfCBGbG9hdF9IIC0+IFN0cmluZy51cHBlcmNhc2VfYXNjaWkgKGhleCAoKSlcbiAgfCBGbG9hdF9DRiAtPiBjYW1sX3NwZWNpYWxfdmFsIChoZXggKCkpXG4gIHwgRmxvYXRfRiAtPlxuICAgIGxldCBzdHIgPSBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4IGluXG4gICAgY2FtbF9zcGVjaWFsX3ZhbCAoYWRkX2RvdF9pZl9uZWVkZWQgc3RyKVxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIC0+XG4gICAgZm9ybWF0X2Zsb2F0IChmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYykgeFxuXG4oKiBDb252ZXJ0IGEgY2hhciB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBmb3JtYXRfY2FtbF9jaGFyIGMgPVxuICBsZXQgc3RyID0gQ2hhci5lc2NhcGVkIGMgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXCcnIGluXG4gIFN0cmluZy51bnNhZmVfYmxpdCBzdHIgMCByZXMgMSBsO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHR5cGUgdG8gc3RyaW5nICopXG5sZXQgc3RyaW5nX29mX2ZtdHR5IGZtdHR5ID1cbiAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKCogR2VuZXJpYyBwcmludGluZyBmdW5jdGlvbiAqKVxuXG4oKiBNYWtlIGEgZ2VuZXJpYyBwcmludGluZyBmdW5jdGlvbi4gKilcbigqIFVzZWQgdG8gZ2VuZXJhdGUgUHJpbnRmIGFuZCBGb3JtYXQgcHJpbnRpbmcgZnVuY3Rpb25zLiAqKVxuKCogUGFyYW1ldGVyczpcbiAgICAgazogYSBjb250aW51YXRpb24gZmluYWxseSBhcHBsaWVkIHRvIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGUgYWNjdW11bGF0b3IuXG4gICAgIG86IHRoZSBvdXRwdXQgc3RyZWFtIChzZWUgaywgJWEgYW5kICV0KS5cbiAgICAgYWNjOiByZXYgbGlzdCBvZiBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzaCwgZm9ybWF0dGluZywgLi4uKS5cbiAgICAgZm10OiB0aGUgZm9ybWF0LiAqKVxubGV0IHJlYyBtYWtlX3ByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IENoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX2NoYXIgKGFjYywgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZm9ybWF0X2NhbWxfY2hhciBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgKGZ1biBzdHIgLT4gc3RyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ190b19jYW1sX3N0cmluZ1xuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50IGljb252XG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludDMyIGljb252XG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9uYXRpdmVpbnQgaWNvbnZcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50NjQgaWNvbnZcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgZmNvbnZcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ19vZl9ib29sXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIGZ1biBmIHggLT4gbWFrZV9wcmludGYgayAoQWNjX2RlbGF5IChhY2MsIGZ1biBvIC0+IGYgbyB4KSkgcmVzdFxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBmdW4gZiAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIG1ha2VfY3VzdG9tIGsgYWNjIHJlc3QgYXJpdHkgKGYgKCkpXG4gIHwgUmVhZGVyIF8gLT5cbiAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICopXG4gICAgKCogSW5kZWVkLCBzaW5jZSBwcmludGYgYW5kIGNvLiB0YWtlIGEgZm9ybWF0NCBhcyBhcmd1bWVudCwgdGhlICdkIGFuZCAnZVxuICAgICAgIHR5cGUgcGFyYW1ldGVycyBvZiBmbXQgYXJlIG9idmlvdXNseSBlcXVhbHMuIFRoZSBSZWFkZXIgaXMgdGhlXG4gICAgICAgb25seSBjb25zdHJ1Y3RvciB3aGljaCB0b3VjaCAnZCBhbmQgJ2UgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBmb3JtYXRcbiAgICAgICB0eXBlLCBpdCBhZGRzIGFuICgtPikgdG8gdGhlICdkIHBhcmFtZXRlcnMuIENvbnNlcXVlbnRseSwgYSBmb3JtYXQ0XG4gICAgICAgY2Fubm90IGNvbnRhaW4gYSBSZWFkZXIgbm9kZSwgZXhjZXB0IGluIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG9cbiAgICAgICBhbiAley4uLiV9LiBJdCdzIG5vdCBhIHByb2JsZW0gYmVjYXVzZSBtYWtlX3ByaW50ZiBkbyBub3QgY2FsbFxuICAgICAgIGl0c2VsZiByZWN1cnNpdmVseSBvbiB0aGUgc3ViLWZvcm1hdCBhc3NvY2lhdGVkIHRvICV7Li4uJX0uICopXG4gICAgYXNzZXJ0IGZhbHNlXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mbHVzaCBhY2MpIHJlc3RcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX3N0cmluZ19saXRlcmFsIChhY2MsIHN0cikpIHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfY2hhcl9saXRlcmFsIChhY2MsIGNocikpIHJlc3RcblxuICB8IEZvcm1hdF9hcmcgKF8sIHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSBzdHJpbmdfb2ZfZm10dHkgc3ViX2ZtdHR5IGluXG4gICAgKGZ1biBzdHIgLT5cbiAgICAgIGlnbm9yZSBzdHI7XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHkpKSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpIC0+XG4gICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+IG1ha2VfcHJpbnRmIGsgYWNjXG4gICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgbGV0IG5ld19hY2MgPSBBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVbXCIpIGluXG4gICAgZnVuIF8gLT4gbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICgqIFRoaXMgY2FzZSBzaG91bGQgYmUgcmVmdXNlZCBmb3IgUHJpbnRmLiAqKVxuICAgICgqIEFjY2VwdGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqKVxuICAgICgqIEludGVycHJldCAlbCwgJW4gYW5kICVMIGFzICV1LiAqKVxuICAgIGZ1biBuIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfaW50IFwiJXVcIiBuKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgbWFrZV9pZ25vcmVkX3BhcmFtIGsgYWNjIGlnbiByZXN0XG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19saXQgKGFjYywgZm10aW5nX2xpdCkpIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl90YWcga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl9ib3gga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBrIGFjY1xuXG4oKiBEZWxheSB0aGUgZXJyb3IgKEludmFsaWRfYXJndW1lbnQgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpLiAqKVxuKCogR2VuZXJhdGUgZnVuY3Rpb25zIHRvIHRha2UgcmVtYWluaW5nIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIFwiJV9cIikuICopXG5hbmQgbWFrZV9pZ25vcmVkX3BhcmFtIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgZm10dHkgZm10XG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcblxuXG4oKiBTcGVjaWFsIGNhc2Ugb2YgcHJpbnRmIFwiJV8oXCIuICopXG5hbmQgbWFrZV9mcm9tX2ZtdHR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgZm10dHkgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdHR5IGZtdCAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50X3R5IHJlc3QgICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQm9vbF90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBUaGV0YV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBSZWFkZXJfdHkgXyAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBGb3JtYXRfYXJnX3R5IChfLCByZXN0KSAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBFbmRfb2ZfZm10dHkgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgKGNvbmNhdF9mbXR0eSB0eSByZXN0KSBmbXRcblxuKCogSW5zZXJ0IGFuIEFjY19pbnZhbGlkX2FyZyBpbiB0aGUgYWNjdW11bGF0b3IgYW5kIGNvbnRpbnVlIHRvIGdlbmVyYXRlXG4gICBjbG9zdXJlcyB0byBnZXQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuICopXG5hbmQgbWFrZV9pbnZhbGlkX2FyZyA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPlxuICBtYWtlX3ByaW50ZiBrIChBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpKSBmbXRcblxuKCogRml4IHBhZGRpbmcsIHRha2UgaXQgYXMgYW4gZXh0cmEgaW50ZWdlciBhcmd1bWVudCBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9wYWRkaW5nIDogdHlwZSB4IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHogLT4gYSkgcGFkZGluZyAtPiAoeiAtPiBzdHJpbmcpIC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCB0cmFucyAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHJhbnMgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCAodHJhbnMgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcblxuKCogRml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBmb3IgaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0LiAqKVxuKCogVGFrZSBvbmUgb3IgdHdvIGV4dHJhIGludGVnZXIgYXJndW1lbnRzIGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IChpbnRfY29udiAtPiB6IC0+IHN0cmluZykgLT5cbiAgICBpbnRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyB0cmFucyBpY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gdHJhbnMgaWNvbnYgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuXG4oKiBDb252ZXJ0IGEgZmxvYXQsIGZpeCBwYWRkaW5nIGFuZCBwcmVjaXNpb24gaWYgbmVlZGVkLiAqKVxuKCogVGFrZSB0aGUgZmxvYXQgYXJndW1lbnQgYW5kIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgZmxvYXQgLT4gYSkgcHJlY2lzaW9uIC0+IGZsb2F0X2NvbnYgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHByZWMgZmNvbnYgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiBwIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbmFuZCBtYWtlX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geCAtPiB5ID1cbiAgZnVuIGsgYWNjIHJlc3QgYXJpdHkgZiAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIGYpKSByZXN0XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiB4KVxuXG5sZXQgY29uc3QgeCBfID0geFxuXG5sZXQgcmVjIG1ha2VfaXByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPiBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuICBmdW4gayBvIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBDYW1sX3N0cmluZyAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfc3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50MzIgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBCb29sIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEJvb2wgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfY3VzdG9tX2FyaXR5IGsgbyByZXN0IGFyaXR5XG4gICAgfCBSZWFkZXIgXyAtPlxuICAgICAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICBTZWUgdGhlXG4gICAgICAgICAgIG5vdGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2FzZSBmb3IgbWFrZV9wcmludGYuICopXG4gICAgICAgIGFzc2VydCBmYWxzZVxuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXRfYXJnIChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+XG4gICAgICAgICAgbWFrZV9pcHJpbnRmIGsgb1xuICAgICAgICAgICAgKGNvbmNhdF9mbXQgKHJlY2FzdCBmbXQgZm10dHkpIHJlc3QpXG4gICAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pZ25vcmVkX3BhcmFtIChmdW4gXyAtPiBrIG8pIChFbmRfb2ZfYWNjKSBpZ24gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiAoZnVuIGtvYyAtPiBtYWtlX2lwcmludGYgayBrb2MgcmVzdCkgbyBmbXQnXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgICAgIGsgb1xuYW5kIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIDpcbiAgdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IHggPVxuICBmdW4gayBvIGZtdCBwYWQgcHJlYyAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICwgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBOb19wYWRkaW5nICAgLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IExpdF9wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpKVxuYW5kIGZuX29mX2N1c3RvbV9hcml0eSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT5cbiAgc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IHkgPVxuICBmdW4gayBvIGZtdCAtPiBmdW5jdGlvblxuICAgIHwgQ3VzdG9tX3plcm8gLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyBmbXRcbiAgICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+XG4gICAgICAgIGNvbnN0IChmbl9vZl9jdXN0b21fYXJpdHkgayBvIGZtdCBhcml0eSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29udGludWF0aW9ucyBmb3IgbWFrZV9wcmludGYgKilcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBvIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQHtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQFtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X2NoYXIgbyBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBmIG9cbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGZsdXNoIG9cbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBvIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIGJ1ZnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IGJ1ZnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBmIGJcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IGJ1ZnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBEaWZmZXIgZnJvbSBidWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiAlYSBhbmQgJXQuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBzdHJwdXRfYWNjIGIgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkB7XCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAW1wiOyBzdHJwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiAoZiAoKSlcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gc3RycHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEVycm9yIG1hbmFnZW1lbnQgKilcblxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBwcmV0dHktcHJpbnRlZCBlcnJvciBtZXNzYWdlLiAqKVxubGV0IGZhaWx3aXRoX21lc3NhZ2UgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGsgYWNjID0gc3RycHV0X2FjYyBidWYgYWNjOyBmYWlsd2l0aCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdHRpbmcgdG9vbHMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhbiBvcGVuIGJsb2NrIGRlc2NyaXB0aW9uIChpbmRlbnQsIGJsb2NrX3R5cGUpICopXG5sZXQgb3Blbl9ib3hfb2Zfc3RyaW5nIHN0ciA9XG4gIGlmIHN0ciA9IFwiXCIgdGhlbiAoMCwgUHBfYm94KSBlbHNlXG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gICAgbGV0IGludmFsaWRfYm94ICgpID0gZmFpbHdpdGhfbWVzc2FnZSBcImludmFsaWQgYm94IGRlc2NyaXB0aW9uICVTXCIgc3RyIGluXG4gICAgbGV0IHJlYyBwYXJzZV9zcGFjZXMgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gaSBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5baV0gd2l0aFxuICAgICAgICB8ICcgJyB8ICdcXHQnIC0+IHBhcnNlX3NwYWNlcyAoaSArIDEpXG4gICAgICAgIHwgXyAtPiBpXG4gICAgYW5kIHBhcnNlX2x3b3JkIGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICdhJyAuLiAneicgLT4gcGFyc2VfbHdvcmQgaSAoaiArIDEpXG4gICAgICAgIHwgXyAtPiBqXG4gICAgYW5kIHBhcnNlX2ludCBpIGogPVxuICAgICAgaWYgaiA9IGxlbiB0aGVuIGogZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2pdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IHBhcnNlX2ludCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGogaW5cbiAgICBsZXQgd3N0YXJ0ID0gcGFyc2Vfc3BhY2VzIDAgaW5cbiAgICBsZXQgd2VuZCA9IHBhcnNlX2x3b3JkIHdzdGFydCB3c3RhcnQgaW5cbiAgICBsZXQgYm94X25hbWUgPSBTdHJpbmcuc3ViIHN0ciB3c3RhcnQgKHdlbmQgLSB3c3RhcnQpIGluXG4gICAgbGV0IG5zdGFydCA9IHBhcnNlX3NwYWNlcyB3ZW5kIGluXG4gICAgbGV0IG5lbmQgPSBwYXJzZV9pbnQgbnN0YXJ0IG5zdGFydCBpblxuICAgIGxldCBpbmRlbnQgPVxuICAgICAgaWYgbnN0YXJ0ID0gbmVuZCB0aGVuIDAgZWxzZVxuICAgICAgICB0cnkgaW50X29mX3N0cmluZyAoU3RyaW5nLnN1YiBzdHIgbnN0YXJ0IChuZW5kIC0gbnN0YXJ0KSlcbiAgICAgICAgd2l0aCBGYWlsdXJlIF8gLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICBsZXQgZXhwX2VuZCA9IHBhcnNlX3NwYWNlcyBuZW5kIGluXG4gICAgaWYgZXhwX2VuZCA8PiBsZW4gdGhlbiBpbnZhbGlkX2JveCAoKTtcbiAgICBsZXQgYm94X3R5cGUgPSBtYXRjaCBib3hfbmFtZSB3aXRoXG4gICAgICB8IFwiXCIgfCBcImJcIiAtPiBQcF9ib3hcbiAgICAgIHwgXCJoXCIgICAgICAtPiBQcF9oYm94XG4gICAgICB8IFwidlwiICAgICAgLT4gUHBfdmJveFxuICAgICAgfCBcImh2XCIgICAgIC0+IFBwX2h2Ym94XG4gICAgICB8IFwiaG92XCIgICAgLT4gUHBfaG92Ym94XG4gICAgICB8IF8gICAgICAgIC0+IGludmFsaWRfYm94ICgpIGluXG4gICAgKGluZGVudCwgYm94X3R5cGUpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUGFyc2luZyB0b29scyAqKVxuXG4oKiBDcmVhdGUgYSBwYWRkaW5nX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcgYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3BhZGRpbmdfZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgICAoXywgXywgXywgXywgXykgcGFkZGluZ19mbXRfZWJiID1cbmZ1biBwYWQgZm10IC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoTm9fcGFkZGluZywgZm10KVxuICB8IExpdF9wYWRkaW5nIChzLCB3KSAtPiBQYWRkaW5nX2ZtdF9FQkIgKExpdF9wYWRkaW5nIChzLCB3KSwgZm10KVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRkaW5nX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIGZtdClcblxuKCogQ3JlYXRlIGEgcHJlY2lzaW9uX2ZtdF9lYmIgZnJvbSBhIHByZWNpc2lvbiBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50IGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wcmVjaXNpb25fZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcHJlY2lzaW9uIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwcmVjaXNpb25fZm10X2ViYiA9XG5mdW4gcHJlYyBmbXQgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uICAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChOb19wcmVjaXNpb24sIGZtdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKExpdF9wcmVjaXNpb24gcCwgZm10KVxuICB8IEFyZ19wcmVjaXNpb24gICAtPiBQcmVjaXNpb25fZm10X0VCQiAoQXJnX3ByZWNpc2lvbiwgZm10KVxuXG4oKiBDcmVhdGUgYSBwYWRwcmVjX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHBhZGRpbmcgYW5kIHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnRzXG4gICBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkcHJlY19mbXRfZWJiIDogdHlwZSB4IHkgeiB0IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+XG4gICAgKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgIChfLCBfLCBfLCBfLCBfKSBwYWRwcmVjX2ZtdF9lYmIgPVxuZnVuIHBhZCBwcmVjIGZtdCAtPlxuICBsZXQgUHJlY2lzaW9uX2ZtdF9FQkIgKHByZWMsIGZtdCcpID0gbWFrZV9wcmVjaXNpb25fZm10X2ViYiBwcmVjIGZtdCBpblxuICBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgICAgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKE5vX3BhZGRpbmcsIHByZWMsIGZtdCcpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZHByZWNfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBwcmVjLCBmbXQnKVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIHByZWMsIGZtdCcpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwYXJzaW5nICopXG5cbigqIFBhcnNlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGZvcm1hdCBhbmQgY3JlYXRlIGEgZm10X2ViYi4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSBpbiBjYXNlIG9mIGludmFsaWQgZm9ybWF0LiAqKVxubGV0IGZtdF9lYmJfb2Zfc3RyaW5nID9sZWdhY3lfYmVoYXZpb3Igc3RyID1cbiAgKCogUGFyYW1ldGVycyBuYW1pbmcgY29udmVudGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gbGl0X3N0YXJ0OiBzdGFydCBvZiB0aGUgbGl0ZXJhbCBzZXF1ZW5jZS4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzdHJfaW5kOiBjdXJyZW50IGluZGV4IGluIHRoZSBzdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIGVuZF9pbmQ6IGVuZCBvZiB0aGUgY3VycmVudCAoc3ViLSlmb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcGN0X2luZDogaW5kZXggb2YgdGhlICclJyBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICopXG4gICgqICAgLSB6ZXJvOiAgaXMgdGhlICcwJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIG1pbnVzOiBpcyB0aGUgJy0nIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gcGx1czogIGlzIHRoZSAnKycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBoYXNoOiAgaXMgdGhlICcjJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHNwYWNlOiBpcyB0aGUgJyAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gaWduOiAgIGlzIHRoZSAnXycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwYWQ6IHBhZGRpbmcgb2YgdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHByZWM6IHByZWNpc2lvbiBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gc3ltYjogY2hhciByZXByZXNlbnRpbmcgdGhlIGNvbnZlcnNpb24gKCdjJywgJ3MnLCAnZCcsIC4uLikuICopXG4gICgqICAgLSBjaGFyX3NldDogc2V0IG9mIGNoYXJhY3RlcnMgYXMgYml0bWFwIChzZWUgc2NhbmYgJVsuLi5dKS4gICAgKilcblxuICBsZXQgbGVnYWN5X2JlaGF2aW9yID0gbWF0Y2ggbGVnYWN5X2JlaGF2aW9yIHdpdGhcbiAgICB8IFNvbWUgZmxhZyAtPiBmbGFnXG4gICAgfCBOb25lIC0+IHRydWVcbiAgKCogIFdoZW4gdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBmb3JtYXQgcGFyc2VyIHRyaWVzIHRvIGJlaGF2ZSBhc1xuICAgICAgdGhlIDw0LjAyIGltcGxlbWVudGF0aW9ucywgaW4gcGFydGljdWxhciBpdCBpZ25vcmVzIG1vc3QgYmVuaW5lXG4gICAgICBub25zZW5zaWNhbCBmb3JtYXQuIFdoZW4gdGhlIGZsYWcgaXMgZGlzYWJsZWQsIGl0IHdpbGwgcmVqZWN0IGFueVxuICAgICAgZm9ybWF0IHRoYXQgaXMgbm90IGFjY2VwdGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uLlxuXG4gICAgICBBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZSBcIiUrIGRcIjogc3BlY2lmeWluZyBib3RoICcrJyAoaWYgdGhlXG4gICAgICBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoIGEgJysnIHRvIGdldCB0aGUgc2FtZSB3aWR0aCBhc1xuICAgICAgbmVnYXRpdmUgbnVtYmVycykgYW5kICcgJyAoaWYgdGhlIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGhcbiAgICAgIGEgc3BhY2UpIGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGJ1dCB0aGUgbGVnYWN5ICg8IDQuMDIpXG4gICAgICBpbXBsZW1lbnRhdGlvbiB3YXMgaGFwcHkgdG8ganVzdCBpZ25vcmUgdGhlIHNwYWNlLlxuICAqKVxuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZCBtc2cgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIG1zZ1xuICBpblxuXG4gICgqIFVzZWQgd2hlbiB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgKG9yIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXQpIHdhcyBlbmNvdW50ZXJlZFxuICAgICAgdW5leHBlY3RlZGx5LiAqKVxuICBsZXQgdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2UgZW5kX2luZFxuICAgICAgXCJ1bmV4cGVjdGVkIGVuZCBvZiBmb3JtYXRcIlxuICBpblxuXG4gICgqIFVzZWQgZm9yICUwYzogbm8gb3RoZXIgd2lkdGhzIGFyZSBpbXBsZW1lbnRlZCAqKVxuICBsZXQgaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kXG4gICAgICBcIm5vbi16ZXJvIHdpZHRocyBhcmUgdW5zdXBwb3J0ZWQgZm9yICVjIGNvbnZlcnNpb25zXCJcbiAgaW5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIG9wdGlvbiBkZXBlbmRlbmN5XG4gICAgIHByb2JsZW0uICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IHN0cl9pbmQgYyBzID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAnJWMnIHdpdGhvdXQgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgYyBzXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIHVuZXhwZWN0ZWRcbiAgICAgY2hhcmFjdGVyLiAqKVxuICBsZXQgZXhwZWN0ZWRfY2hhcmFjdGVyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZCA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlcyBleHBlY3RlZCwgcmVhZCAlQ1wiXG4gICAgICBzdHIgc3RyX2luZCBleHBlY3RlZCByZWFkXG4gIGluXG5cbiAgKCogUGFyc2UgdGhlIHN0cmluZyBmcm9tIGJlZ19pbmQgKGluY2x1ZGVkKSB0byBlbmRfaW5kIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgcGFyc2UgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gYmVnX2luZCBlbmRfaW5kIC0+IHBhcnNlX2xpdGVyYWwgYmVnX2luZCBiZWdfaW5kIGVuZF9pbmRcblxuICAoKiBSZWFkIGxpdGVyYWwgY2hhcmFjdGVycyB1cCB0byAnJScgb3IgJ0AnIHNwZWNpYWwgY2hhcmFjdGVycy4gKilcbiAgYW5kIHBhcnNlX2xpdGVyYWwgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIEVuZF9vZl9mb3JtYXQgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2Zvcm1hdCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfYWZ0ZXJfYXQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfbGl0ZXJhbCBsaXRfc3RhcnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgKCogUGFyc2UgYSBmb3JtYXQgYWZ0ZXIgJyUnICopXG4gIGFuZCBwYXJzZV9mb3JtYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBlbmRfaW5kIC0+IHBhcnNlX2lnbiBwY3RfaW5kIChwY3RfaW5kICsgMSkgZW5kX2luZFxuXG4gIGFuZCBwYXJzZV9pZ24gOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ18nIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgKHN0cl9pbmQrMSkgZW5kX2luZCB0cnVlXG4gICAgICB8IF8gLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgZmFsc2VcblxuICBhbmQgcGFyc2VfZmxhZ3MgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmJcbiAgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgaWduIC0+XG4gICAgbGV0IHplcm8gPSByZWYgZmFsc2UgYW5kIG1pbnVzID0gcmVmIGZhbHNlXG4gICAgYW5kIHBsdXMgPSByZWYgZmFsc2UgYW5kIHNwYWNlID0gcmVmIGZhbHNlXG4gICAgYW5kIGhhc2ggPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgc2V0X2ZsYWcgc3RyX2luZCBmbGFnID1cbiAgICAgICgqIGluIGxlZ2FjeSBtb2RlLCBkdXBsaWNhdGUgZmxhZ3MgYXJlIGFjY2VwdGVkICopXG4gICAgICBpZiAhZmxhZyAmJiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIGR1cGxpY2F0ZSBmbGFnICVDXCJcbiAgICAgICAgICBzdHIgc3RyX2luZCBzdHIuW3N0cl9pbmRdO1xuICAgICAgZmxhZyA6PSB0cnVlO1xuICAgIGluXG4gICAgbGV0IHJlYyByZWFkX2ZsYWdzIHN0cl9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnMCcgLT4gc2V0X2ZsYWcgc3RyX2luZCB6ZXJvOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICctJyAtPiBzZXRfZmxhZyBzdHJfaW5kIG1pbnVzOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJysnIC0+IHNldF9mbGFnIHN0cl9pbmQgcGx1czsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnIycgLT4gc2V0X2ZsYWcgc3RyX2luZCBoYXNoOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyAnIC0+IHNldF9mbGFnIHN0cl9pbmQgc3BhY2U7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmRcbiAgICAgICAgICAhemVybyAhbWludXMgIXBsdXMgIWhhc2ggIXNwYWNlIGlnblxuICAgICAgZW5kXG4gICAgaW5cbiAgICByZWFkX2ZsYWdzIHN0cl9pbmRcblxuICAoKiBUcnkgdG8gcmVhZCBhIGRpZ2l0YWwgb3IgYSAnKicgcGFkZGluZy4gKilcbiAgYW5kIHBhcnNlX3BhZGRpbmcgOiB0eXBlIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCB6ZXJvIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYWR0eSA9IG1hdGNoIHplcm8sIG1pbnVzIHdpdGhcbiAgICAgIHwgZmFsc2UsIGZhbHNlIC0+IFJpZ2h0XG4gICAgICB8IGZhbHNlLCB0cnVlICAtPiBMZWZ0XG4gICAgICB8ICB0cnVlLCBmYWxzZSAtPiBaZXJvc1xuICAgICAgfCAgdHJ1ZSwgdHJ1ZSAgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGVmdFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnLScgXCIwXCIgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgIGxldCBuZXdfaW5kLCB3aWR0aCA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgKExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gKEFyZ19wYWRkaW5nIHBhZHR5KVxuICAgIHwgXyAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgICAgfCBMZWZ0ICAtPlxuICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy0nIFwicGFkZGluZ1wiO1xuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICB8IFplcm9zIC0+XG4gICAgICAgICAoKiBhICcwJyBwYWRkaW5nIGluZGljYXRpb24gbm90IGZvbGxvd2VkIGJ5IGFueXRoaW5nIHNob3VsZFxuICAgICAgICAgICBiZSBpbnRlcnByZXRlZCBhcyBhIFJpZ2h0IHBhZGRpbmcgb2Ygd2lkdGggMC4gVGhpcyBpcyB1c2VkXG4gICAgICAgICAgIGJ5IHNjYW5uaW5nIGNvbnZlcnNpb25zICUwcyBhbmQgJTBjICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIChMaXRfcGFkZGluZyAoUmlnaHQsIDApKVxuICAgICAgfCBSaWdodCAtPlxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICBlbmRcblxuICAoKiBJcyBwcmVjaXNpb24gZGVmaW5lZD8gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3BhZGRpbmcgOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnLicgLT5cbiAgICAgIHBhcnNlX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZFxuICAgIHwgc3ltYiAtPlxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBOb19wcmVjaXNpb24gcGFkIHN5bWJcblxuICAoKiBSZWFkIHRoZSBkaWdpdGFsIG9yICcqJyBwcmVjaXNpb24uICopXG4gIGFuZCBwYXJzZV9wcmVjaXNpb24gOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZCA9XG4gICAgICBsZXQgbmV3X2luZCwgcHJlYyA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gcHJlYykgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kXG4gICAgfCAoJysnIHwgJy0nKSBhcyBzeW1iIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+XG4gICAgICAoKiBMZWdhY3kgbW9kZSB3b3VsZCBhY2NlcHQgYW5kIGlnbm9yZSAnKycgb3IgJy0nIGJlZm9yZSB0aGVcbiAgICAgICAgIGludGVnZXIgZGVzY3JpYmluZyB0aGUgZGVzaXJlZCBwcmVjaXNpb247IG5vdGUgdGhhdCB0aGlzXG4gICAgICAgICBjYW5ub3QgaGFwcGVuIGZvciBwYWRkaW5nIHdpZHRoLCBhcyAnKycgYW5kICctJyBhbHJlYWR5IGhhdmVcbiAgICAgICAgIGEgc2VtYW50aWNzIHRoZXJlLlxuXG4gICAgICAgICBUaGF0IHNhaWQsIHRoZSBpZGVhIChzdXBwb3J0ZWQgYnkgdGhpcyB0d2VhaykgdGhhdCB3aWR0aCBhbmRcbiAgICAgICAgIHByZWNpc2lvbiBsaXRlcmFscyBhcmUgXCJpbnRlZ2VyIGxpdGVyYWxzXCIgaW4gdGhlIE9DYW1sIHNlbnNlIGlzXG4gICAgICAgICBzdGlsbCBibGF0YW50bHkgd3JvbmcsIGFzIDEyM180NTYgb3IgMHhGRiBhcmUgcmVqZWN0ZWQuICopXG4gICAgICBwYXJzZV9saXRlcmFsIChtaW51cyB8fCBzeW1iID0gJy0nKSAoc3RyX2luZCArIDEpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIHBhZCBBcmdfcHJlY2lzaW9uXG4gICAgfCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBub3RlIHRoYXQgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRpZCBub3QgaWdub3JlICcuJyB3aXRob3V0XG4gICAgICAgICAgIGEgbnVtYmVyIChhcyBpdCBkb2VzIGZvciBwYWRkaW5nIGluZGljYXRpb25zKSwgYnV0XG4gICAgICAgICAgIGludGVycHJldHMgaXQgYXMgJy4wJyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiAwKVxuICAgICAgZWxzZVxuICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy4nIFwicHJlY2lzaW9uXCJcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogdCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2NvbnYgKHR5cGUgdSkgKHR5cGUgdikgKHBhZHByZWMgOiAodSwgdikgcGFkZGluZykgPVxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBwcmVjIHBhZHByZWMgc3RyLltzdHJfaW5kXSBpblxuICAgICgqIGluIGxlZ2FjeSBtb2RlLCBzb21lIGZvcm1hdHMgKCVzIGFuZCAlUykgYWNjZXB0IGEgd2VpcmQgbWl4IG9mXG4gICAgICAgcGFkZGluZyBhbmQgcHJlY2lzaW9uLCB3aGljaCBpcyBtZXJnZWQgYXMgYSBzaW5nbGUgcGFkZGluZ1xuICAgICAgIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgaW4gJS4xMHMgdGhlIHByZWNpc2lvbiBpcyBpbXBsaWNpdGx5XG4gICAgICAgdW5kZXJzdG9vZCBhcyBwYWRkaW5nICUxMHMsIGJ1dCB0aGUgbGVmdC1wYWRkaW5nIGNvbXBvbmVudCBtYXlcbiAgICAgICBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIGEgbGVmdCBwYWRkaW5nIG9yIGEgbmVnYXRpdmUgcHJlY2lzaW9uOlxuICAgICAgICUtLjNzIGFuZCAlLi0zcyBhcmUgZXF1aXZhbGVudCB0byAlLTNzICopXG4gICAgbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgLT4gKFxuICAgICAgbWF0Y2ggbWludXMsIHByZWMgd2l0aFxuICAgICAgICB8IF8sIE5vX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IE5vX3BhZGRpbmdcbiAgICAgICAgfCBmYWxzZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChSaWdodCwgbikpXG4gICAgICAgIHwgdHJ1ZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChMZWZ0LCBuKSlcbiAgICAgICAgfCBmYWxzZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBSaWdodClcbiAgICAgICAgfCB0cnVlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIExlZnQpXG4gICAgKVxuICAgIHwgcGFkIC0+IHBhcnNlX2NvbnYgcGFkXG5cbiAgKCogQ2FzZSBhbmFseXNpcyBvbiBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfY29udmVyc2lvbiA6IHR5cGUgeCB5IHogdCB1IHYgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gKHgsIHkpIHBhZGRpbmcgLT5cbiAgICAgICAgKHosIHQpIHByZWNpc2lvbiAtPiAodSwgdikgcGFkZGluZyAtPiBjaGFyIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgcGFkcHJlYyBzeW1iIC0+XG4gICAgKCogRmxhZ3MgdXNlZCB0byBjaGVjayBvcHRpb24gdXNhZ2VzL2NvbXBhdGliaWxpdGllcy4gKilcbiAgICBsZXQgcGx1c191c2VkICA9IHJlZiBmYWxzZSBhbmQgaGFzaF91c2VkID0gcmVmIGZhbHNlXG4gICAgYW5kIHNwYWNlX3VzZWQgPSByZWYgZmFsc2UgYW5kIGlnbl91c2VkICAgPSByZWYgZmFsc2VcbiAgICBhbmQgcGFkX3VzZWQgICA9IHJlZiBmYWxzZSBhbmQgcHJlY191c2VkICA9IHJlZiBmYWxzZSBpblxuXG4gICAgKCogQWNjZXNzIHRvIG9wdGlvbnMsIHVwZGF0ZSBmbGFncy4gKilcbiAgICBsZXQgZ2V0X3BsdXMgICAgKCkgPSBwbHVzX3VzZWQgIDo9IHRydWU7IHBsdXNcbiAgICBhbmQgZ2V0X2hhc2ggICAoKSA9IGhhc2hfdXNlZCA6PSB0cnVlOyBoYXNoXG4gICAgYW5kIGdldF9zcGFjZSAgICgpID0gc3BhY2VfdXNlZCA6PSB0cnVlOyBzcGFjZVxuICAgIGFuZCBnZXRfaWduICAgICAoKSA9IGlnbl91c2VkICAgOj0gdHJ1ZTsgaWduXG4gICAgYW5kIGdldF9wYWQgICAgICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRcbiAgICBhbmQgZ2V0X3ByZWMgICAgKCkgPSBwcmVjX3VzZWQgIDo9IHRydWU7IHByZWNcbiAgICBhbmQgZ2V0X3BhZHByZWMgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZHByZWMgaW5cblxuICAgIGxldCBnZXRfaW50X3BhZCAoKSA6ICh4LHkpIHBhZGRpbmcgPVxuICAgICAgKCogJTUuM2QgaXMgYWNjZXB0ZWQgYW5kIG1lYW5pbmdmdWw6IHBhZCB0byBsZW5ndGggNSB3aXRoXG4gICAgICAgICBzcGFjZXMsIGJ1dCBmaXJzdCBwYWQgd2l0aCB6ZXJvcyB1cHRvIGxlbmd0aCAzICgwLXBhZGRpbmdcbiAgICAgICAgIGlzIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBcInByZWNpc2lvblwiIGZvciBpbnRlZ2VyIGZvcm1hdHMpLlxuXG4gICAgICAgICAlMDUuM2QgaXMgcmVkdW5kYW50OiBwYWQgdG8gbGVuZ3RoIDUgKndpdGggemVyb3MqLCBidXRcbiAgICAgICAgIGZpcnN0IHBhZCB3aXRoIHplcm9zLi4uIFRvIGFkZCBpbnN1bHQgdG8gdGhlIGluanVyeSwgdGhlXG4gICAgICAgICBsZWdhY3kgaW1wbGVtZW50YXRpb24gaWdub3JlcyB0aGUgMC1wYWRkaW5nIGluZGljYXRpb24gYW5kXG4gICAgICAgICBkb2VzIHRoZSA1IHBhZGRpbmcgd2l0aCBzcGFjZXMgaW5zdGVhZC4gV2UgcmV1c2UgdGhpc1xuICAgICAgICAgaW50ZXJwcmV0YXRpb24gZm9yIGNvbXBhdGliaWxpdHksIGJ1dCBzdGF0aWNhbGx5IHJlamVjdCB0aGlzXG4gICAgICAgICBmb3JtYXQgd2hlbiB0aGUgbGVnYWN5IG1vZGUgaXMgZGlzYWJsZWQsIHRvIHByb3RlY3Qgc3RyaWN0XG4gICAgICAgICB1c2VycyBmcm9tIHRoaXMgY29ybmVyIGNhc2UuICopXG4gICAgICAgbWF0Y2ggZ2V0X3BhZCAoKSwgZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgICAgfCBwYWQsIE5vX3ByZWNpc2lvbiAtPiBwYWRcbiAgICAgICAgIHwgTm9fcGFkZGluZywgXyAgICAgLT4gTm9fcGFkZGluZ1xuICAgICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIG4pLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgbilcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MsIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZCBpblxuXG4gICAgKCogQ2hlY2sgdGhhdCBwYWR0eSA8PiBaZXJvcy4gKilcbiAgICBsZXQgY2hlY2tfbm9fMCBzeW1iICh0eXBlIGEgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA6IChhLGIpIHBhZGRpbmcgPVxuICAgICAgbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKChMZWZ0IHwgUmlnaHQpLCBfKSAtPiBwYWRcbiAgICAgIHwgQXJnX3BhZGRpbmcgKExlZnQgfCBSaWdodCkgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgIGluXG5cbiAgICAoKiBHZXQgcGFkZGluZyBhcyBhIHBhZF9vcHRpb24gKHNlZSBcIiVfXCIsIFwiJXtcIiwgXCIlKFwiIGFuZCBcIiVbXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IG9wdF9vZl9wYWQgYyAodHlwZSBhKSAodHlwZSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpID0gbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBOb25lXG4gICAgICB8IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpIC0+IFNvbWUgd2lkdGhcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJzAnXCJcbiAgICAgIHwgTGl0X3BhZGRpbmcgKExlZnQsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInLSdcIlxuICAgICAgfCBBcmdfcGFkZGluZyBfIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJyonXCJcbiAgICBpblxuICAgIGxldCBnZXRfcGFkX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkICgpKSBpblxuICAgIGxldCBnZXRfcGFkcHJlY19vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZHByZWMgKCkpIGluXG5cbiAgICAoKiBHZXQgcHJlY2lzaW9uIGFzIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfZlwiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBnZXRfcHJlY19vcHQgKCkgPSBtYXRjaCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICB8IE5vX3ByZWNpc2lvbiAgICAgICAtPiBOb25lXG4gICAgICB8IExpdF9wcmVjaXNpb24gbmRlYyAtPiBTb21lIG5kZWNcbiAgICAgIHwgQXJnX3ByZWNpc2lvbiAgICAgIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKidcIlxuICAgIGluXG5cbiAgICBsZXQgZm10X3Jlc3VsdCA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJywnIC0+XG4gICAgICBwYXJzZSBzdHJfaW5kIGVuZF9pbmRcbiAgICB8ICdjJyAtPlxuICAgICAgbGV0IGNoYXJfZm9ybWF0IGZtdF9yZXN0ID0gKCogJWMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKENoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IHNjYW5fZm9ybWF0IGZtdF9yZXN0ID0gKCogJTBjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3NjYW5fbmV4dF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGJlZ2luIG1hdGNoIGdldF9wYWRfb3B0ICdjJyB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgMCAtPiBzY2FuX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgX24gLT5cbiAgICAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvclxuICAgICAgICAgICB0aGVuIGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmRcbiAgICAgICAgICAgZWxzZSAoKiBsZWdhY3kgaWdub3JlcyAlYyB3aWR0aHMgKikgY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgIGVuZFxuICAgIHwgJ0MnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2FtbF9jaGFyLGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoQ2FtbF9jaGFyIGZtdF9yZXN0KVxuICAgIHwgJ3MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoU3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ1MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2NhbWxfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChDYW1sX3N0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPlxuICAgICAgbGV0IGljb252ID0gY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ04nIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBUb2tlbl9jb3VudGVyIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyB8ICduJyB8ICdMJyB3aGVuIHN0cl9pbmQ9ZW5kX2luZCB8fCBub3QgKGlzX2ludF9iYXNlIHN0ci5bc3RyX2luZF0pIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBjb3VudGVyX29mX2NoYXIgc3ltYiBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDMyIChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50MzIgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICduJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKVxuICAgICAgICAgIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoTmF0aXZlaW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDY0IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50NjQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdmJyB8ICdlJyB8ICdFJyB8ICdnJyB8ICdHJyB8ICdGJyB8ICdoJyB8ICdIJyAtPlxuICAgICAgbGV0IGZjb252ID1cbiAgICAgICAgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZFxuICAgICAgICAgIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mbG9hdCAoZ2V0X3BhZF9vcHQgJ18nLCBnZXRfcHJlY19vcHQgKCkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEZsb2F0IChmY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnYicgfCAnQicgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfYm9vbCAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQm9vbCAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdhJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEFscGhhIGZtdF9yZXN0KVxuICAgIHwgJ3QnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoVGhldGEgZm10X3Jlc3QpXG4gICAgfCAncicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9yZWFkZXIsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoUmVhZGVyIGZtdF9yZXN0KVxuICAgIHwgJyEnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRmx1c2ggZm10X3Jlc3QpXG4gICAgfCAoJyUnIHwgJ0AnKSBhcyBjIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsIChjLCBmbXRfcmVzdCkpXG4gICAgfCAneycgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICd9JyBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfYXJnIChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfYXJnIChnZXRfcGFkX29wdCAneycsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJygnIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnKScgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICcoJywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnWycgLT5cbiAgICAgIGxldCBuZXh0X2luZCwgY2hhcl9zZXQgPSBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnXycsIGNoYXJfc2V0KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdbJywgY2hhcl9zZXQsIGZtdF9yZXN0KSlcbiAgICB8ICctJyB8ICcrJyB8ICcjJyB8ICcgJyB8ICdfJyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgZmxhZyAlQyBpcyBvbmx5IGFsbG93ZWQgYWZ0ZXIgdGhlICclJScsIGJlZm9yZSBwYWRkaW5nIGFuZCBwcmVjaXNpb25cIlxuICAgICAgICBzdHIgcGN0X2luZCBzeW1iXG4gICAgfCBfIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBpbnZhbGlkIGNvbnZlcnNpb24gXFxcIiUlJWNcXFwiXCIgc3RyIChzdHJfaW5kIC0gMSkgc3ltYlxuICAgIGluXG4gICAgKCogQ2hlY2sgZm9yIHVudXNlZCBvcHRpb25zLCBhbmQgcmVqZWN0IHRoZW0gYXMgaW5jb21wYXRpYmxlLlxuXG4gICAgICAgU3VjaCBjaGVja3MgbmVlZCB0byBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSwgYXMgdGhlIGxlZ2FjeVxuICAgICAgIHBhcnNlciBzaWxlbnRseSBpZ25vcmVkIGluY29tcGF0aWJsZSBmbGFncy4gKilcbiAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW4gYmVnaW5cbiAgICBpZiBub3QgIXBsdXNfdXNlZCAmJiBwbHVzIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCI7XG4gICAgaWYgbm90ICFoYXNoX3VzZWQgJiYgaGFzaCB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiO1xuICAgIGlmIG5vdCAhc3BhY2VfdXNlZCAmJiBzcGFjZSB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiO1xuICAgIGlmIG5vdCAhcGFkX3VzZWQgICYmIFBhZGRpbmdfRUJCIHBhZCA8PiBQYWRkaW5nX0VCQiBOb19wYWRkaW5nIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiYHBhZGRpbmcnXCI7XG4gICAgaWYgbm90ICFwcmVjX3VzZWQgJiYgUHJlY2lzaW9uX0VCQiBwcmVjIDw+IFByZWNpc2lvbl9FQkIgTm9fcHJlY2lzaW9uIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAoaWYgaWduIHRoZW4gJ18nIGVsc2Ugc3ltYilcbiAgICAgICAgXCJgcHJlY2lzaW9uJ1wiO1xuICAgIGlmIGlnbiAmJiBwbHVzIHRoZW4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicrJ1wiO1xuICAgIGVuZDtcbiAgICAoKiB0aGlzIGxhc3QgdGVzdCBtdXN0IG5vdCBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSxcbiAgICAgICBhcyBpZ25vcmluZyBpdCB3b3VsZCB0eXBpY2FsbHkgcmVzdWx0IGluIGEgZGlmZmVyZW50IHR5cGluZ1xuICAgICAgIHRoYW4gd2hhdCB0aGUgbGVnYWN5IHBhcnNlciB1c2VkICopXG4gICAgaWYgbm90ICFpZ25fdXNlZCAmJiBpZ24gdGhlblxuICAgICAgYmVnaW4gbWF0Y2ggc3ltYiB3aXRoXG4gICAgICAgICgqIGFyZ3VtZW50LWxlc3MgZm9ybWF0cyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgaW4gbGVnYWN5IG1vZGUgKilcbiAgICAgICAgfCAoJ0AnIHwgJyUnIHwgJyEnIHwgJywnKSB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiAoKVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIidfJ1wiXG4gICAgICBlbmQ7XG4gICAgZm10X3Jlc3VsdFxuXG4gICgqIFBhcnNlIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gKGFmdGVyICdAJykuICopXG4gIGFuZCBwYXJzZV9hZnRlcl9hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBFbmRfb2ZfZm9ybWF0KSlcbiAgICBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ1snIC0+XG4gICAgICAgIHBhcnNlX3RhZyBmYWxzZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV9ib3gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ3snIC0+XG4gICAgICAgIHBhcnNlX3RhZyB0cnVlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnfScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX3RhZywgZm10X3Jlc3QpKVxuICAgICAgfCAnLCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAsXCIsIDAsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCBcIiwgMSwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJzsnIC0+XG4gICAgICAgIHBhcnNlX2dvb2RfYnJlYWsgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICc/JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRkZsdXNoLCBmbXRfcmVzdCkpXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGb3JjZV9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICcuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRmx1c2hfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgcGFyc2VfbWFnaWNfc2l6ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX2F0LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyB3aGVuIHN0cl9pbmQgKyAxIDwgZW5kX2luZCAmJiBzdHIuW3N0cl9pbmQgKyAxXSA9ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMikgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9wZXJjZW50LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgZm10X3Jlc3QpKVxuICAgICAgfCBjIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljIGMsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPG5hbWU+IGFmdGVyIFwiQHtcIiBvciBcIkBbXCIuICopXG4gIGFuZCBwYXJzZV90YWcgOiB0eXBlIGUgZiAuIGJvb2wgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBpc19vcGVuX3RhZyBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICB0cnlcbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBsZXQgaW5kID0gU3RyaW5nLmluZGV4X2Zyb20gc3RyIChzdHJfaW5kICsgMSkgJz4nIGluXG4gICAgICAgIGlmIGluZCA+PSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3ViX3N0ciA9IFN0cmluZy5zdWIgc3RyIHN0cl9pbmQgKGluZCAtIHN0cl9pbmQgKyAxKSBpblxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChpbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIChpbmQgKyAxKSBpblxuICAgICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoc3ViX2ZtdCwgc3ViX3N0cikgaW5cbiAgICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcbiAgICAgIHwgXyAtPlxuICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChFbmRfb2ZfZm9ybWF0LCBcIlwiKSBpblxuICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8d2lkdGggb2Zmc2V0PiBhZnRlciBcIkA7XCIuICopXG4gIGFuZCBwYXJzZV9nb29kX2JyZWFrIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGxldCBuZXh0X2luZCwgZm9ybWF0dGluZ19saXQgPVxuICAgICAgdHJ5XG4gICAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHx8IHN0ci5bc3RyX2luZF0gPD4gJzwnIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gKFxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHdpZHRoID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzNdIHdpdGhcbiAgICAgICAgICAgICAgfCAnPicgLT5cbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzMtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfMyArIDEsIEJyZWFrIChzLCB3aWR0aCwgMClcbiAgICAgICAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNCwgb2Zmc2V0ID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzMgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzUgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF80IGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfNV0gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfNS1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF81ICsgMSwgQnJlYWsgKHMsIHdpZHRoLCBvZmZzZXQpXG4gICAgICAgICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgKVxuICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBzdHJfaW5kLCBCcmVhayAoXCJAO1wiLCAxLCAwKVxuICAgIGluXG4gICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgdGhlIHNpemUgaW4gYSA8bj4uICopXG4gIGFuZCBwYXJzZV9tYWdpY19zaXplIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIG1hdGNoXG4gICAgICB0cnlcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgc2l6ZSA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzNdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kIC0gMikgKHN0cl9pbmRfMyAtIHN0cl9pbmQgKyAzKSBpblxuICAgICAgICAgIFNvbWUgKHN0cl9pbmRfMyArIDEsIE1hZ2ljX3NpemUgKHMsIHNpemUpKVxuICAgICAgICB8IF8gLT4gTm9uZVxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgTm9uZVxuICAgIHdpdGhcbiAgICB8IFNvbWUgKG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgJzwnLCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgYW5kIGNvbnN0cnVjdCBhIGNoYXIgc2V0LiAqKVxuICBhbmQgcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuXG4gICAgbGV0IGNoYXJfc2V0ID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gICAgbGV0IGFkZF9jaGFyIGMgPVxuICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGM7XG4gICAgaW5cbiAgICBsZXQgYWRkX3JhbmdlIGMgYycgPVxuICAgICAgZm9yIGkgPSBpbnRfb2ZfY2hhciBjIHRvIGludF9vZl9jaGFyIGMnIGRvXG4gICAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCAoY2hhcl9vZl9pbnQgaSk7XG4gICAgICBkb25lO1xuICAgIGluXG5cbiAgICBsZXQgZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kID1cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogJyUlJyBhbG9uZSBpcyBub3QgYWNjZXB0ZWQgaW4gY2hhcmFjdGVyIHNldHMsIFxcXG4gICAgICAgICB1c2UgJSUlJSBpbnN0ZWFkIGF0IHBvc2l0aW9uICVkLlwiIHN0ciBzdHJfaW5kXG4gICAgaW5cblxuICAgICgqIFBhcnNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBjaGFyIHNldC4gKilcbiAgICBsZXQgcmVjIHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbGV0IGMgPSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBQYXJzZSB0aGUgY29udGVudCBvZiBhIGNoYXIgc2V0IHVudGlsIHRoZSBmaXJzdCAnXScuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogVGVzdCBmb3IgcmFuZ2UgaW4gY2hhciBzZXQuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG4gICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIHdoZW4gYyA9ICclJyAtPlxuICAgICAgICBhZGRfY2hhciBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgaWYgYyA9ICclJyB0aGVuIGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZDtcbiAgICAgICAgKCogbm90ZSB0aGF0ICdAJyBhbG9uZSBpcyBhY2NlcHRlZCwgYXMgZG9uZSBieSB0aGUgbGVnYWN5XG4gICAgICAgICAgIGltcGxlbWVudGF0aW9uOyB0aGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgJUBcbiAgICAgICAgICAgc28gd2UgY291bGQgd2FybiBvbiB0aGF0ICopXG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGMnXG5cbiAgICAoKiBNYW5hZ2UgcmFuZ2UgaW4gY2hhciBzZXQgKGV4Y2VwdCBpZiB0aGUgJy0nIHRoZSBsYXN0IGNoYXIgYmVmb3JlICddJykgKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIC0+XG4gICAgICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kXG4gICAgICAgICAgfCBfIC0+IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZFxuICAgICAgICBlbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgaW5cbiAgICBsZXQgc3RyX2luZCwgcmV2ZXJzZSA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICAgIHwgJ14nIC0+IHN0cl9pbmQgKyAxLCB0cnVlXG4gICAgICAgIHwgXyAtPiBzdHJfaW5kLCBmYWxzZSBpblxuICAgIGxldCBuZXh0X2luZCA9IHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgIGxldCBjaGFyX3NldCA9IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCBpblxuICAgIG5leHRfaW5kLCAoaWYgcmV2ZXJzZSB0aGVuIHJldl9jaGFyX3NldCBjaGFyX3NldCBlbHNlIGNoYXJfc2V0KVxuXG4gICgqIENvbnN1bWUgYWxsIG5leHQgc3BhY2VzLCByYWlzZSBhbiBGYWlsdXJlIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgaWYgc3RyLltzdHJfaW5kXSA9ICcgJyB0aGVuIHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgZWxzZSBzdHJfaW5kXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmUgaWYgZW5kX2luZCBpc1xuICAgICByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIGFjYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBhY2MgKiAxMCArIChpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJzAnKSBpblxuICAgICAgaWYgbmV3X2FjYyA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBpbnRlZ2VyICVkIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltaXQgJWRcIlxuICAgICAgICAgIHN0ciBuZXdfYWNjIFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgICAgZWxzZVxuICAgICAgICBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgbmV3X2FjY1xuICAgIHwgXyAtPiBzdHJfaW5kLCBhY2NcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZVxuICAgICBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9pbnRlZ2VyIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDBcbiAgICB8ICctJyAtPiAoXG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgICBsZXQgbmV4dF9pbmQsIG4gPSBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgMCBpblxuICAgICAgICBuZXh0X2luZCwgLW5cbiAgICAgIHwgYyAtPlxuICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImRpZ2l0XCIgY1xuICAgIClcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQWRkIGEgbGl0ZXJhbCB0byBhIGZvcm1hdCBmcm9tIGEgbGl0ZXJhbCBjaGFyYWN0ZXIgc3ViLXNlcXVlbmNlLiAqKVxuICBhbmQgYWRkX2xpdGVyYWwgOiB0eXBlIGEgZCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiAoYSwgXywgXywgZCwgZSwgZikgZm10IC0+XG4gICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBmbXQgLT4gbWF0Y2ggc3RyX2luZCAtIGxpdF9zdGFydCB3aXRoXG4gICAgfCAwICAgIC0+IEZtdF9FQkIgZm10XG4gICAgfCAxICAgIC0+IEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoc3RyLltsaXRfc3RhcnRdLCBmbXQpKVxuICAgIHwgc2l6ZSAtPiBGbXRfRUJCIChTdHJpbmdfbGl0ZXJhbCAoU3RyaW5nLnN1YiBzdHIgbGl0X3N0YXJ0IHNpemUsIGZtdCkpXG5cbiAgKCogU2VhcmNoIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdFxuICAgICAoaS5lLiB0aGUgY29ycmVzcG9uZGluZyBcIiV9XCIgb3IgXCIlKVwiKSAqKVxuICBhbmQgc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogdW5jbG9zZWQgc3ViLWZvcm1hdCwgXFxcbiAgICAgICAgIGV4cGVjdGVkIFxcXCIlJSVjXFxcIiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkXCIgc3RyIGMgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICclJyAtPlxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBpZiBzdHIuW3N0cl9pbmQgKyAxXSA9IGMgdGhlbiAoKiBFbmQgb2YgZm9ybWF0IGZvdW5kICopIHN0cl9pbmQgZWxzZVxuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgIHwgJ18nIC0+XG4gICAgICAgICAgKCogU2VhcmNoIGZvciBcIiVfKFwiIG9yIFwiJV97XCIuICopXG4gICAgICAgICAgaWYgc3RyX2luZCArIDIgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMl0gd2l0aFxuICAgICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kIGNcbiAgICAgICAgICBlbmRcbiAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAoKiAley4uLiV9IHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAoKiAlKC4uLiUpIHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnfScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJSguLi4lfS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnKSdcIiAnfSdcbiAgICAgICAgfCAnKScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJXsuLi4lKS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnfSdcIiAnKSdcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgZW5kXG4gICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgKCogQ2hlY2sgaWYgc3ltYiBpcyBhIHZhbGlkIGludCBjb252ZXJzaW9uIGFmdGVyIFwiJWxcIiwgXCIlblwiIG9yIFwiJUxcIiAqKVxuICBhbmQgaXNfaW50X2Jhc2Ugc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+IHRydWVcbiAgICB8IF8gLT4gZmFsc2VcblxuICAoKiBDb252ZXJ0IGEgY2hhciAobCwgbiBvciBMKSB0byBpdHMgYXNzb2NpYXRlZCBjb3VudGVyLiAqKVxuICBhbmQgY291bnRlcl9vZl9jaGFyIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdsJyAtPiBMaW5lX2NvdW50ZXIgIHwgJ24nIC0+IENoYXJfY291bnRlclxuICAgIHwgJ0wnIC0+IFRva2VuX2NvdW50ZXIgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGludF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIG1hdGNoIHBsdXMsIGhhc2gsIHNwYWNlLCBzeW1iIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfZCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X2lcbiAgICB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdkJyAtPiBJbnRfc2QgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnaScgLT4gSW50X3NpXG4gICAgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X3BkIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9waVxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3gnIC0+IEludF94ICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdYJyAtPiBJbnRfWFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3gnIC0+IEludF9DeCB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdYJyAtPiBJbnRfQ1hcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdvJyAtPiBJbnRfb1xuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ28nIC0+IEludF9Db1xuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3UnIC0+IEludF91XG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnZCcgLT4gSW50X0NkXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnaScgLT4gSW50X0NpXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAndScgLT4gSW50X0N1XG4gICAgfCBfLCB0cnVlLCBfLCAneCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0N4XG4gICAgfCBfLCB0cnVlLCBfLCAnWCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NYXG4gICAgfCBfLCB0cnVlLCBfLCAnbycgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NvXG4gICAgfCBfLCB0cnVlLCBfLCAoJ2QnIHwgJ2knIHwgJ3UnKSAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgZmFsc2Ugc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiXG4gICAgfCB0cnVlLCBfLCB0cnVlLCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCB0cnVlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIlxuICAgIHwgdHJ1ZSwgXywgZmFsc2UsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBmYWxzZSBoYXNoIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIGZhbHNlLCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHNwYWNlLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBmbG9hdF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbGV0IGZsYWcgPSBtYXRjaCBwbHVzLCBzcGFjZSB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19cbiAgICB8IGZhbHNlLCAgdHJ1ZSAtPiBGbG9hdF9mbGFnX3NcbiAgICB8ICB0cnVlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX3BcbiAgICB8ICB0cnVlLCAgdHJ1ZSAtPlxuICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEZsb2F0X2ZsYWdfcFxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCIgaW5cbiAgICBsZXQga2luZCA9IG1hdGNoIGhhc2gsIHN5bWIgd2l0aFxuICAgIHwgXywgJ2YnIC0+IEZsb2F0X2ZcbiAgICB8IF8sICdlJyAtPiBGbG9hdF9lXG4gICAgfCBfLCAnRScgLT4gRmxvYXRfRVxuICAgIHwgXywgJ2cnIC0+IEZsb2F0X2dcbiAgICB8IF8sICdHJyAtPiBGbG9hdF9HXG4gICAgfCBfLCAnaCcgLT4gRmxvYXRfaFxuICAgIHwgXywgJ0gnIC0+IEZsb2F0X0hcbiAgICB8IGZhbHNlLCAnRicgLT4gRmxvYXRfRlxuICAgIHwgdHJ1ZSwgJ0YnIC0+IEZsb2F0X0NGXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZSBpblxuICAgIGZsYWcsIGtpbmRcblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgaW5jb21wYXRpYmxlIG9wdGlvbnMuKilcbiAgYW5kIGluY29tcGF0aWJsZV9mbGFnIDogdHlwZSBhIC4gaW50IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZyAtPiBhID1cbiAgICBmdW4gcGN0X2luZCBzdHJfaW5kIHN5bWIgb3B0aW9uIC0+XG4gICAgICBsZXQgc3ViZm10ID0gU3RyaW5nLnN1YiBzdHIgcGN0X2luZCAoc3RyX2luZCAtIHBjdF9pbmQpIGluXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICAlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAnJWMnIGluIHN1Yi1mb3JtYXQgJVNcIlxuICAgICAgICBzdHIgcGN0X2luZCBvcHRpb24gc3ltYiBzdWJmbXRcblxuICBpbiBwYXJzZSAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICgqIEd1YXJkZWQgc3RyaW5nIHRvIGZvcm1hdCBjb252ZXJzaW9ucyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm10dHkgc3RyIGZtdHR5ID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCBmbXR0eSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIlxuICAgICAgc3RyIChzdHJpbmdfb2ZfZm10dHkgZm10dHkpXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgY29tcGF0aWJsZSB3aXRoIGFuIG90aGVyIGZvcm1hdC4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0IHN0ciAoRm9ybWF0IChmbXQnLCBzdHInKSkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IChmbXR0eV9vZl9mbXQgZm10JyksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCIgc3RyIHN0cidcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgWGF2aWVyIExlcm95IGFuZCBQaWVycmUgV2VpcywgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbmxldCBrZnByaW50ZiBrIG8gKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIG8gYWNjOyBrIG8pIEVuZF9vZl9hY2MgZm10XG5sZXQga2JwcmludGYgayBiIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gYnVmcHV0X2FjYyBiIGFjYzsgayBiKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGlrZnByaW50ZiBrIG9jIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgb2MgZm10XG5sZXQgaWticHJpbnRmID0gaWtmcHJpbnRmXG5cbmxldCBmcHJpbnRmIG9jIGZtdCA9IGtmcHJpbnRmIGlnbm9yZSBvYyBmbXRcbmxldCBicHJpbnRmIGIgZm10ID0ga2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgaWZwcmludGYgb2MgZm10ID0gaWtmcHJpbnRmIGlnbm9yZSBvYyBmbXRcbmxldCBpYnByaW50ZiBiIGZtdCA9IGlrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRvdXQgZm10XG5sZXQgZXByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZGVyciBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgaycgYWNjID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICAgIHN0cnB1dF9hY2MgYnVmIGFjYztcbiAgICBrIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdFxuXG5sZXQgc3ByaW50ZiBmbXQgPSBrc3ByaW50ZiAoZnVuIHMgLT4gcykgZm10XG5cbmxldCBrcHJpbnRmID0ga3NwcmludGZcbiIsIigqIENvbnZfZXJyb3I6IE1vZHVsZSBmb3IgSGFuZGxpbmcgRXJyb3JzIGR1cmluZyBBdXRvbWF0ZWQgWW9qc29uXG4gICBDb252ZXJzaW9ucyAqKVxuXG5vcGVuISBTdGRMYWJlbHNcbm9wZW4gWW9qc29uX2NvbnZcblxubGV0IHNwcmludGYgPSBQcmludGYuc3ByaW50ZlxuXG4oKiBFcnJvcnMgY29uY2VybmluZyB0dXBsZXMgKilcblxubGV0IHR1cGxlX29mX3NpemVfbl9leHBlY3RlZCBsb2MgbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKHNwcmludGYgXCIlc19vZl95b2pzb246IHR1cGxlIG9mIHNpemUgJWQgZXhwZWN0ZWRcIiBsb2MgbikgeW9qc29uXG47O1xuXG4oKiBFcnJvcnMgY29uY2VybmluZyBzdW0gdHlwZXMgKilcblxubGV0IHN0YWdfbm9fYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHRoaXMgY29uc3RydWN0b3IgZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcIikgeW9qc29uXG47O1xuXG5sZXQgc3RhZ19pbmNvcnJlY3Rfbl9hcmdzIGxvYyB0YWcgeW9qc29uID1cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZiBcIiVzX29mX3lvanNvbjogc3VtIHRhZyAlUyBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHNcIiBsb2MgdGFnXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgc3RhZ190YWtlc19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdGhpcyBjb25zdHJ1Y3RvciByZXF1aXJlcyBhcmd1bWVudHNcIikgeW9qc29uXG47O1xuXG5sZXQgbmVzdGVkX2xpc3RfaW52YWxpZF9zdW0gbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBleHBlY3RlZCBhIHZhcmlhbnQgdHlwZSwgc2F3IGEgbmVzdGVkIGxpc3RcIikgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfbGlzdF9pbnZhbGlkX3N1bSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IGV4cGVjdGVkIGEgdmFyaWFudCB0eXBlLCBzYXcgYW4gZW1wdHkgbGlzdFwiKSB5b2pzb25cbjs7XG5cbmxldCB1bmV4cGVjdGVkX3N0YWcgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB1bmV4cGVjdGVkIHZhcmlhbnQgY29uc3RydWN0b3JcIikgeW9qc29uXG47O1xuXG4oKiBFcnJvcnMgY29uY2VybmluZyByZWNvcmRzICopXG5cbmxldCByZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIH53aGF0IH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb24gPVxuICBsZXQgZmxkX25hbWVzX3N0ciA9IFN0cmluZy5jb25jYXQgKExpc3QucmV2IHJldl9mbGRfbmFtZXMpIH5zZXA6XCIgXCIgaW5cbiAgbGV0IG1zZyA9IHNwcmludGYgXCIlc19vZl95b2pzb246ICVzOiAlc1wiIGxvYyB3aGF0IGZsZF9uYW1lc19zdHIgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyBsb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb24gPVxuICByZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIH53aGF0OlwiZHVwbGljYXRlIGZpZWxkc1wiIH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfZXh0cmFfZmllbGRzIGxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQ6XCJleHRyYSBmaWVsZHNcIiB+bG9jIHJldl9mbGRfbmFtZXMgeW9qc29uXG47O1xuXG5sZXQgcmVjIHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgZmllbGRzID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBTdHJpbmcuY29uY2F0IChMaXN0LnJldiBmaWVsZHMpIH5zZXA6XCIgXCJcbiAgfCAodHJ1ZSwgZmllbGQpIDo6IHJlc3QgLT4gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCAoZmllbGQgOjogZmllbGRzKSByZXN0XG4gIHwgXyA6OiByZXN0IC0+IHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgZmllbGRzIHJlc3Rcbjs7XG5cbmxldCByZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIGxvYyB5b2pzb24gbHN0ID1cbiAgbGV0IHVuZGVmaW5lZCA9IHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgW10gbHN0IGluXG4gIGxldCBtc2cgPVxuICAgIHNwcmludGYgXCIlc19vZl95b2pzb246IHRoZSBmb2xsb3dpbmcgcmVjb3JkIGVsZW1lbnRzIHdlcmUgdW5kZWZpbmVkOiAlc1wiIGxvYyB1bmRlZmluZWRcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20gbG9jIHlvanNvbiA9XG4gIGxldCBtc2cgPSBsb2MgXiBcIl9vZl95b2pzb246IGxpc3QgaW5zdGVhZCBvZiBhdG9tIGZvciByZWNvcmQgZXhwZWN0ZWRcIiBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9wb2x5X2ZpZWxkX3ZhbHVlIGxvYyB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBsb2NcbiAgICBeIFwiX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgdmFsdWVzIG9mIHR5cGVzIHJlc3VsdGluZyBmcm9tIHBvbHltb3JwaGljIHJlY29yZCBcXFxuICAgICAgIGZpZWxkc1wiXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG4oKiBFcnJvcnMgY29uY2VybmluZyBwb2x5bW9ycGhpYyB2YXJpYW50cyAqKVxuXG5leGNlcHRpb24gTm9fdmFyaWFudF9tYXRjaFxuXG5sZXQgbm9fdmFyaWFudF9tYXRjaCAoKSA9IHJhaXNlIE5vX3ZhcmlhbnRfbWF0Y2hcblxubGV0IG5vX21hdGNoaW5nX3ZhcmlhbnRfZm91bmQgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBubyBtYXRjaGluZyB2YXJpYW50IGZvdW5kXCIpIHlvanNvblxuOztcblxubGV0IHB0YWdfbm9fYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcIikgeW9qc29uXG47O1xuXG5sZXQgcHRhZ19pbmNvcnJlY3Rfbl9hcmdzIGxvYyBjbnN0ciB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmXG4gICAgICBcIiVzX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCB0YWcgJVMgaGFzIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzXCJcbiAgICAgIGxvY1xuICAgICAgY25zdHJcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCBwdGFnX3Rha2VzX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IHRhZyB0YWtlcyBhbiBhcmd1bWVudFwiKSB5b2pzb25cbjs7XG5cbmxldCBuZXN0ZWRfbGlzdF9pbnZhbGlkX3BvbHlfdmFyIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3JcbiAgICAobG9jIF4gXCJfb2ZfeW9qc29uOiBhIG5lc3RlZCBsaXN0IGlzIGFuIGludmFsaWQgcG9seW1vcnBoaWMgdmFyaWFudFwiKVxuICAgIHlvanNvblxuOztcblxubGV0IGVtcHR5X2xpc3RfaW52YWxpZF9wb2x5X3ZhciBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yXG4gICAgKGxvYyBeIFwiX29mX3lvanNvbjogdGhlIGVtcHR5IGxpc3QgaXMgYW4gaW52YWxpZCBwb2x5bW9ycGhpYyB2YXJpYW50XCIpXG4gICAgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfdHlwZSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHRyeWluZyB0byBjb252ZXJ0IGFuIGVtcHR5IHR5cGVcIikgeW9qc29uXG47O1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBpZCA6ICdhIC0+ICdhID0gXCIlaWRlbnRpdHlcIlxubGV0IGNvbnN0IGMgXyA9IGNcbmxldCBmbGlwIGYgeCB5ID0gZiB5IHhcbmxldCBuZWdhdGUgcCB2ID0gbm90IChwIHYpXG5cbmV4Y2VwdGlvbiBGaW5hbGx5X3JhaXNlZCBvZiBleG5cblxubGV0ICgpID0gUHJpbnRleGMucmVnaXN0ZXJfcHJpbnRlciBAQCBmdW5jdGlvblxufCBGaW5hbGx5X3JhaXNlZCBleG4gLT4gU29tZSAoXCJGdW4uRmluYWxseV9yYWlzZWQ6IFwiIF4gUHJpbnRleGMudG9fc3RyaW5nIGV4bilcbnwgXyAtPiBOb25lXG5cbmxldCBwcm90ZWN0IH4oZmluYWxseSA6IHVuaXQgLT4gdW5pdCkgd29yayA9XG4gIGxldCBmaW5hbGx5X25vX2V4biAoKSA9XG4gICAgdHJ5IGZpbmFsbHkgKCkgd2l0aCBlIC0+XG4gICAgICBsZXQgYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2UgKEZpbmFsbHlfcmFpc2VkIGUpIGJ0XG4gIGluXG4gIG1hdGNoIHdvcmsgKCkgd2l0aFxuICB8IHJlc3VsdCAtPiBmaW5hbGx5X25vX2V4biAoKSA7IHJlc3VsdFxuICB8IGV4Y2VwdGlvbiB3b3JrX2V4biAtPlxuICAgICAgbGV0IHdvcmtfYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZmluYWxseV9ub19leG4gKCkgO1xuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2Ugd29ya19leG4gd29ya19idFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNZXNzYWdlIGRpZ2VzdCAoTUQ1KSAqKVxuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxubGV0IGVxdWFsID0gU3RyaW5nLmVxdWFsXG5cbmV4dGVybmFsIHVuc2FmZV9zdHJpbmc6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X3N0cmluZ1wiXG5leHRlcm5hbCBjaGFubmVsOiBpbl9jaGFubmVsIC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9jaGFuXCJcblxubGV0IHN0cmluZyBzdHIgPVxuICB1bnNhZmVfc3RyaW5nIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxubGV0IGJ5dGVzIGIgPSBzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYilcblxubGV0IHN1YnN0cmluZyBzdHIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBTdHJpbmcubGVuZ3RoIHN0ciAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnN1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX3N0cmluZyBzdHIgb2ZzIGxlblxuXG5sZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID0gc3Vic3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpIG9mcyBsZW5cblxubGV0IGZpbGUgZmlsZW5hbWUgPVxuICBsZXQgaWMgPSBvcGVuX2luX2JpbiBmaWxlbmFtZSBpblxuICBtYXRjaCBjaGFubmVsIGljICgtMSkgd2l0aFxuICAgIHwgZCAtPiBjbG9zZV9pbiBpYzsgZFxuICAgIHwgZXhjZXB0aW9uIGUgLT4gY2xvc2VfaW4gaWM7IHJhaXNlIGVcblxubGV0IG91dHB1dCBjaGFuIGRpZ2VzdCA9XG4gIG91dHB1dF9zdHJpbmcgY2hhbiBkaWdlc3RcblxubGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gMTZcblxubGV0IGNoYXJfaGV4IG4gPVxuICBDaGFyLnVuc2FmZV9jaHIgKG4gKyBpZiBuIDwgMTAgdGhlbiBDaGFyLmNvZGUgJzAnIGVsc2UgKENoYXIuY29kZSAnYScgLSAxMCkpXG5cbmxldCB0b19oZXggZCA9XG4gIGlmIFN0cmluZy5sZW5ndGggZCA8PiAxNiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIDMyIGluXG4gIGZvciBpID0gMCB0byAxNSBkb1xuICAgIGxldCB4ID0gQ2hhci5jb2RlIGQuW2ldIGluXG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMikgKGNoYXJfaGV4ICh4IGxzciA0KSk7XG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMisxKSAoY2hhcl9oZXggKHggbGFuZCAweDBmKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG5cbmxldCBmcm9tX2hleCBzID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IDMyIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QuZnJvbV9oZXhcIjtcbiAgbGV0IGRpZ2l0IGMgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJzAnLi4nOScgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnQScuLidGJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnQScgKyAxMFxuICAgIHwgJ2EnLi4nZicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ2EnICsgMTBcbiAgICB8IF8gLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJEaWdlc3QuZnJvbV9oZXhcIilcbiAgaW5cbiAgbGV0IGJ5dGUgaSA9IGRpZ2l0IHMuW2ldIGxzbCA0ICsgZGlnaXQgcy5baSsxXSBpblxuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIDE2IGluXG4gIGZvciBpID0gMCB0byAxNSBkb1xuICAgIEJ5dGVzLnNldCByZXN1bHQgaSAoQ2hhci5jaHIgKGJ5dGUgKDIgKiBpKSkpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBIYXNoIHRhYmxlcyAqKVxuXG4oKiBXZSBkbyBkeW5hbWljIGhhc2hpbmcsIGFuZCByZXNpemUgdGhlIHRhYmxlIGFuZCByZWhhc2ggdGhlIGVsZW1lbnRzXG4gICB3aGVuIGJ1Y2tldHMgYmVjb21lIHRvbyBsb25nLiAqKVxuXG50eXBlICgnYSwgJ2IpIHQgPVxuICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgbXV0YWJsZSBkYXRhOiAoJ2EsICdiKSBidWNrZXRsaXN0IGFycmF5OyAgKCogdGhlIGJ1Y2tldHMgKilcbiAgICBzZWVkOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogZm9yIHJhbmRvbWl6YXRpb24gKilcbiAgICBtdXRhYmxlIGluaXRpYWxfc2l6ZTogaW50OyAgICAgICAgICAgICAgICAoKiBpbml0aWFsIGFycmF5IHNpemUgKilcbiAgfVxuXG5hbmQgKCdhLCAnYikgYnVja2V0bGlzdCA9XG4gICAgRW1wdHlcbiAgfCBDb25zIG9mIHsgbXV0YWJsZSBrZXk6ICdhO1xuICAgICAgICAgICAgICBtdXRhYmxlIGRhdGE6ICdiO1xuICAgICAgICAgICAgICBtdXRhYmxlIG5leHQ6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgfVxuXG4oKiBUaGUgc2lnbiBvZiBpbml0aWFsX3NpemUgZW5jb2RlcyB0aGUgZmFjdCB0aGF0IGEgdHJhdmVyc2FsIGlzXG4gICBvbmdvaW5nIG9yIG5vdC5cblxuICAgVGhpcyBkaXNhYmxlcyB0aGUgZWZmaWNpZW50IGluIHBsYWNlIGltcGxlbWVudGF0aW9uIG9mIHJlc2l6aW5nLlxuKilcblxubGV0IG9uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgfHwgaC5pbml0aWFsX3NpemUgPCAwXG5cbmxldCBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBoLmluaXRpYWxfc2l6ZSA8LSAtIGguaW5pdGlhbF9zaXplXG5cbigqIFRvIHBpY2sgcmFuZG9tIHNlZWRzIGlmIHJlcXVlc3RlZCAqKVxuXG5sZXQgcmFuZG9taXplZF9kZWZhdWx0ID1cbiAgbGV0IHBhcmFtcyA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJPQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT5cbiAgICB0cnkgU3lzLmdldGVudiBcIkNBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+IFwiXCIgaW5cbiAgU3RyaW5nLmNvbnRhaW5zIHBhcmFtcyAnUidcblxubGV0IHJhbmRvbWl6ZWQgPSByZWYgcmFuZG9taXplZF9kZWZhdWx0XG5cbmxldCByYW5kb21pemUgKCkgPSByYW5kb21pemVkIDo9IHRydWVcbmxldCBpc19yYW5kb21pemVkICgpID0gIXJhbmRvbWl6ZWRcblxubGV0IHBybmcgPSBsYXp5IChSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQoKSlcblxuKCogRnVuY3Rpb25zIHdoaWNoIGFwcGVhciBiZWZvcmUgdGhlIGZ1bmN0b3JpYWwgaW50ZXJmYWNlIG11c3QgZWl0aGVyIGJlXG4gICBpbmRlcGVuZGVudCBvZiB0aGUgaGFzaCBmdW5jdGlvbiBvciB0YWtlIGl0IGFzIGEgcGFyYW1ldGVyIChzZWUgIzIyMDIgYW5kXG4gICBjb2RlIGJlbG93IHRoZSBmdW5jdG9yIGRlZmluaXRpb25zLiAqKVxuXG4oKiBDcmVhdGluZyBhIGZyZXNoLCBlbXB0eSB0YWJsZSAqKVxuXG5sZXQgcmVjIHBvd2VyXzJfYWJvdmUgeCBuID1cbiAgaWYgeCA+PSBuIHRoZW4geFxuICBlbHNlIGlmIHggKiAyID4gU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiB4XG4gIGVsc2UgcG93ZXJfMl9hYm92ZSAoeCAqIDIpIG5cblxubGV0IGNyZWF0ZSA/KHJhbmRvbSA9ICFyYW5kb21pemVkKSBpbml0aWFsX3NpemUgPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgaW5pdGlhbF9zaXplIGluXG4gIGxldCBzZWVkID0gaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKExhenkuZm9yY2UgcHJuZykgZWxzZSAwIGluXG4gIHsgaW5pdGlhbF9zaXplID0gczsgc2l6ZSA9IDA7IHNlZWQgPSBzZWVkOyBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5IH1cblxubGV0IGNsZWFyIGggPVxuICBpZiBoLnNpemUgPiAwIHRoZW4gYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBBcnJheS5maWxsIGguZGF0YSAwIChBcnJheS5sZW5ndGggaC5kYXRhKSBFbXB0eVxuICBlbmRcblxubGV0IHJlc2V0IGggPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGguZGF0YSBpblxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgICB8fCBsZW4gPSBhYnMgaC5pbml0aWFsX3NpemUgdGhlblxuICAgIGNsZWFyIGhcbiAgZWxzZSBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIGguZGF0YSA8LSBBcnJheS5tYWtlIChhYnMgaC5pbml0aWFsX3NpemUpIEVtcHR5XG4gIGVuZFxuXG5sZXQgY29weV9idWNrZXRsaXN0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBFbXB0eVxuICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGxldCByZWMgbG9vcCBwcmVjID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgfCBDb25zIHByZWMgLT4gIHByZWMubmV4dCA8LSByXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBsb29wIHIgbmV4dFxuICAgICAgaW5cbiAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgbG9vcCByIG5leHQ7XG4gICAgICByXG5cbmxldCBjb3B5IGggPSB7IGggd2l0aCBkYXRhID0gQXJyYXkubWFwIGNvcHlfYnVja2V0bGlzdCBoLmRhdGEgfVxuXG5sZXQgbGVuZ3RoIGggPSBoLnNpemVcblxubGV0IGluc2VydF9hbGxfYnVja2V0cyBpbmRleGZ1biBpbnBsYWNlIG9kYXRhIG5kYXRhID1cbiAgbGV0IG5zaXplID0gQXJyYXkubGVuZ3RoIG5kYXRhIGluXG4gIGxldCBuZGF0YV90YWlsID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT4gKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gYXMgY2VsbCAtPlxuICAgICAgICBsZXQgY2VsbCA9XG4gICAgICAgICAgaWYgaW5wbGFjZSB0aGVuIGNlbGxcbiAgICAgICAgICBlbHNlIENvbnMge2tleTsgZGF0YTsgbmV4dCA9IEVtcHR5fVxuICAgICAgICBpblxuICAgICAgICBsZXQgbmlkeCA9IGluZGV4ZnVuIGtleSBpblxuICAgICAgICBiZWdpbiBtYXRjaCBuZGF0YV90YWlsLihuaWR4KSB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gbmRhdGEuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBjZWxsO1xuICAgICAgICBlbmQ7XG4gICAgICAgIG5kYXRhX3RhaWwuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIGluc2VydF9idWNrZXQgbmV4dFxuICBpblxuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIG9kYXRhIC0gMSBkb1xuICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gIGRvbmU7XG4gIGlmIGlucGxhY2UgdGhlblxuICAgIGZvciBpID0gMCB0byBuc2l6ZSAtIDEgZG9cbiAgICAgIG1hdGNoIG5kYXRhX3RhaWwuKGkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBFbXB0eVxuICAgIGRvbmVcblxubGV0IHJlc2l6ZSBpbmRleGZ1biBoID1cbiAgbGV0IG9kYXRhID0gaC5kYXRhIGluXG4gIGxldCBvc2l6ZSA9IEFycmF5Lmxlbmd0aCBvZGF0YSBpblxuICBsZXQgbnNpemUgPSBvc2l6ZSAqIDIgaW5cbiAgaWYgbnNpemUgPCBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgbGV0IG5kYXRhID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICAgIGxldCBpbnBsYWNlID0gbm90IChvbmdvaW5nX3RyYXZlcnNhbCBoKSBpblxuICAgIGguZGF0YSA8LSBuZGF0YTsgICAgICAgICAgKCogc28gdGhhdCBpbmRleGZ1biBzZWVzIHRoZSBuZXcgYnVja2V0IGNvdW50ICopXG4gICAgaW5zZXJ0X2FsbF9idWNrZXRzIChpbmRleGZ1biBoKSBpbnBsYWNlIG9kYXRhIG5kYXRhXG4gIGVuZFxuXG5sZXQgaXRlciBmIGggPVxuICBsZXQgcmVjIGRvX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICAoKVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGYga2V5IGRhdGE7IGRvX2J1Y2tldCBuZXh0IGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGRvX2J1Y2tldCBkLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IHJlYyBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBFbXB0eVxuICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIEVtcHR5XG4gICAgICBlbmRcbiAgfCAoQ29ucyAoe2tleTsgZGF0YTsgbmV4dH0gYXMgYykpIGFzIHNsb3QgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGYga2V5IGRhdGEgd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjIG5leHRcbiAgICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIHNsb3RcbiAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gc2xvdFxuICAgICAgICAgIGVuZDtcbiAgICAgICAgICBjLmRhdGEgPC0gZGF0YTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHNsb3QgbmV4dFxuICAgICAgZW5kXG5cbmxldCBmaWx0ZXJfbWFwX2lucGxhY2UgZiBoID1cbiAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgRW1wdHkgaC5kYXRhLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoXG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgZm9sZCBmIGggaW5pdCA9XG4gIGxldCByZWMgZG9fYnVja2V0IGIgYWNjdSA9XG4gICAgbWF0Y2ggYiB3aXRoXG4gICAgICBFbXB0eSAtPlxuICAgICAgICBhY2N1XG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZG9fYnVja2V0IG5leHQgKGYga2V5IGRhdGEgYWNjdSkgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgbGV0IGFjY3UgPSByZWYgaW5pdCBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGFjY3UgOj0gZG9fYnVja2V0IGQuKGkpICFhY2N1XG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgIWFjY3VcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbnR5cGUgc3RhdGlzdGljcyA9IHtcbiAgbnVtX2JpbmRpbmdzOiBpbnQ7XG4gIG51bV9idWNrZXRzOiBpbnQ7XG4gIG1heF9idWNrZXRfbGVuZ3RoOiBpbnQ7XG4gIGJ1Y2tldF9oaXN0b2dyYW06IGludCBhcnJheVxufVxuXG5sZXQgcmVjIGJ1Y2tldF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gYWNjdVxuICB8IENvbnN7bmV4dH0gLT4gYnVja2V0X2xlbmd0aCAoYWNjdSArIDEpIG5leHRcblxubGV0IHN0YXRzIGggPVxuICBsZXQgbWJsID1cbiAgICBBcnJheS5mb2xkX2xlZnQgKGZ1biBtIGIgLT4gSW50Lm1heCBtIChidWNrZXRfbGVuZ3RoIDAgYikpIDAgaC5kYXRhIGluXG4gIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgQXJyYXkuaXRlclxuICAgIChmdW4gYiAtPlxuICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgaC5kYXRhO1xuICB7IG51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSB0YmwgPVxuICAoKiBjYXB0dXJlIGN1cnJlbnQgYXJyYXksIHNvIHRoYXQgZXZlbiBpZiB0aGUgdGFibGUgaXMgcmVzaXplZCB3ZVxuICAgICBrZWVwIGl0ZXJhdGluZyBvbiB0aGUgc2FtZSBhcnJheSAqKVxuICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAoKiBzdGF0ZTogaW5kZXggKiBuZXh0IGJ1Y2tldCB0byB0cmF2ZXJzZSAqKVxuICBsZXQgcmVjIGF1eCBpIGJ1Y2sgKCkgPSBtYXRjaCBidWNrIHdpdGhcbiAgICB8IEVtcHR5IC0+XG4gICAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggdGJsX2RhdGFcbiAgICAgICAgdGhlbiBTZXEuTmlsXG4gICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIFNlcS5Db25zICgoa2V5LCBkYXRhKSwgYXV4IGkgbmV4dClcbiAgaW5cbiAgYXV4IDAgRW1wdHlcblxubGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbmxldCB0b19zZXFfdmFsdWVzIG0gPSBTZXEubWFwIHNuZCAodG9fc2VxIG0pXG5cbigqIEZ1bmN0b3JpYWwgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiBpbnQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlOiBpbnQgLT4gJ2EgdFxuICAgIHZhbCBjbGVhciA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBjb3B5OiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIHJlbW92ZTogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICAgIHZhbCBmaW5kOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gICAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIG1lbSA6ICdhIHQgLT4ga2V5IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlOiAoa2V5IC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQ6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoOiAnYSB0IC0+IGludFxuICAgIHZhbCBzdGF0czogJ2EgdCAtPiBzdGF0aXN0aWNzXG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICEnYSB0XG4gICAgdmFsIGNyZWF0ZSA6ID9yYW5kb206Ym9vbCAtPiBpbnQgLT4gJ2EgdFxuICAgIHZhbCBjbGVhciA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBjb3B5IDogJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGFkZCA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlIDogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICAgIHZhbCBmaW5kIDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2FsbCA6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyIDogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlOiAoa2V5IC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQgOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGxlbmd0aCA6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlU2VlZGVkKEg6IFNlZWRlZEhhc2hlZFR5cGUpOiAoU2VlZGVkUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIHR5cGUga2V5ID0gSC50XG4gICAgdHlwZSAnYSBoYXNodGJsID0gKGtleSwgJ2EpIHRcbiAgICB0eXBlICdhIHQgPSAnYSBoYXNodGJsXG4gICAgbGV0IGNyZWF0ZSA9IGNyZWF0ZVxuICAgIGxldCBjbGVhciA9IGNsZWFyXG4gICAgbGV0IHJlc2V0ID0gcmVzZXRcbiAgICBsZXQgY29weSA9IGNvcHlcblxuICAgIGxldCBrZXlfaW5kZXggaCBrZXkgPVxuICAgICAgKEguaGFzaCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcblxuICAgIGxldCBhZGQgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gICAgICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG4gICAgbGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgKClcbiAgICAgIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGJlZ2luXG4gICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICAgICAgZW5kXG4gICAgICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbiAgICBsZXQgcmVtb3ZlIGgga2V5ID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG4gICAgbGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxuICAgIGxldCBmaW5kIGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG4gICAgbGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxuICAgIGxldCBmaW5kX2FsbCBoIGtleSA9XG4gICAgICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBbXVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhPWQ7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gZCA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxuICAgIGxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBsID0gaC5kYXRhLihpKSBpblxuICAgICAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gICAgICBlbmRcblxuICAgIGxldCBtZW0gaCBrZXkgPVxuICAgICAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgICAgIEguZXF1YWwgayBrZXkgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBtZW1faW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IGFkZF9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG4gICAgbGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcblxuICAgIGxldCBpdGVyID0gaXRlclxuICAgIGxldCBmaWx0ZXJfbWFwX2lucGxhY2UgPSBmaWx0ZXJfbWFwX2lucGxhY2VcbiAgICBsZXQgZm9sZCA9IGZvbGRcbiAgICBsZXQgbGVuZ3RoID0gbGVuZ3RoXG4gICAgbGV0IHN0YXRzID0gc3RhdHNcbiAgICBsZXQgdG9fc2VxID0gdG9fc2VxXG4gICAgbGV0IHRvX3NlcV9rZXlzID0gdG9fc2VxX2tleXNcbiAgICBsZXQgdG9fc2VxX3ZhbHVlcyA9IHRvX3NlcV92YWx1ZXNcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKEg6IEhhc2hlZFR5cGUpOiAoUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIGluY2x1ZGUgTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgICAgdHlwZSB0ID0gSC50XG4gICAgICAgIGxldCBlcXVhbCA9IEguZXF1YWxcbiAgICAgICAgbGV0IGhhc2ggKF9zZWVkOiBpbnQpIHggPSBILmhhc2ggeFxuICAgICAgZW5kKVxuICAgIGxldCBjcmVhdGUgc3ogPSBjcmVhdGUgfnJhbmRvbTpmYWxzZSBzelxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuICBlbmRcblxuKCogUG9seW1vcnBoaWMgaGFzaCBmdW5jdGlvbi1iYXNlZCB0YWJsZXMgKilcbigqIENvZGUgaW5jbHVkZWQgYmVsb3cgdGhlIGZ1bmN0b3JpYWwgaW50ZXJmYWNlIHRvIGd1YXJkIGFnYWluc3QgYWNjaWRlbnRhbFxuICAgdXNlIC0gc2VlICMyMjAyICopXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxuXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxubGV0IGhhc2hfcGFyYW0gbjEgbjIgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIG4xIG4yIDAgeFxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcblxubGV0IGtleV9pbmRleCBoIGtleSA9XG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0XG4gIHRoZW4gKHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkhhc2h0Ymw6IHVuc3VwcG9ydGVkIGhhc2ggdGFibGUgZm9ybWF0XCJcblxubGV0IGFkZCBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG5sZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgKClcbiAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiBiZWdpblxuICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBuZXh0XG4gICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICBlbmRcbiAgICAgIGVsc2UgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IGMgbmV4dFxuXG5sZXQgcmVtb3ZlIGgga2V5ID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IEVtcHR5IGguZGF0YS4oaSlcblxubGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgayA9IDAgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxubGV0IGZpbmQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbmxldCByZWMgZmluZF9yZWNfb3B0IGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgayA9IDAgdGhlbiBTb21lIGRhdGEgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHRcblxubGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiBOb25lXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxubGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIFtdXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGRhdGEgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgdHJ1ZVxuICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG5sZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICBlbmRcblxubGV0IG1lbSBoIGtleSA9XG4gIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgIGNvbXBhcmUgayBrZXkgPSAwIHx8IG1lbV9pbl9idWNrZXQgbmV4dCBpblxuICBtZW1faW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgYWRkX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxubGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgdGJsXG5cbmxldCByZWJ1aWxkID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGggPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIGluXG4gIGxldCBzZWVkID1cbiAgICBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKVxuICAgIGVsc2UgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLnNlZWRcbiAgICBlbHNlIDAgaW5cbiAgbGV0IGgnID0ge1xuICAgIHNpemUgPSBoLnNpemU7XG4gICAgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eTtcbiAgICBzZWVkID0gc2VlZDtcbiAgICBpbml0aWFsX3NpemUgPSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguaW5pdGlhbF9zaXplIGVsc2Ugc1xuICB9IGluXG4gIGluc2VydF9hbGxfYnVja2V0cyAoa2V5X2luZGV4IGgnKSBmYWxzZSBoLmRhdGEgaCcuZGF0YTtcbiAgaCdcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQSBwcmV0dHktcHJpbnRpbmcgZmFjaWxpdHkgYW5kIGRlZmluaXRpb24gb2YgZm9ybWF0dGVycyBmb3IgJ3BhcmFsbGVsJ1xuICAgKGkuZS4gdW5yZWxhdGVkIG9yIGluZGVwZW5kZW50KSBwcmV0dHktcHJpbnRpbmcgb24gbXVsdGlwbGUgb3V0IGNoYW5uZWxzLiAqKVxuXG4oKlxuICAgVGhlIHByZXR0eS1wcmludGluZyBlbmdpbmUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLlxuKilcblxubGV0IGlkIHggPSB4XG5cbigqIEEgZGV2b3RlZCB0eXBlIGZvciBzaXplcyB0byBhdm9pZCBjb25mdXNpb25cbiAgIGJldHdlZW4gc2l6ZXMgYW5kIG1lcmUgaW50ZWdlcnMuICopXG5tb2R1bGUgU2l6ZSA6IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgdG9faW50IDogdCAtPiBpbnRcbiAgdmFsIG9mX2ludCA6IGludCAtPiB0XG4gIHZhbCB6ZXJvIDogdFxuICB2YWwgdW5rbm93biA6IHRcbiAgdmFsIGlzX2tub3duIDogdCAtPiBib29sXG5lbmQgID0gc3RydWN0XG4gIHR5cGUgdCA9IGludFxuXG4gIGxldCB0b19pbnQgPSBpZFxuICBsZXQgb2ZfaW50ID0gaWRcbiAgbGV0IHplcm8gPSAwXG4gIGxldCB1bmtub3duID0gLTFcbiAgbGV0IGlzX2tub3duIG4gPSBuID49IDBcbmVuZFxuXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyBib3hlcyBkZWZpbml0aW9uOlxuICAgYSBwcmV0dHktcHJpbnRpbmcgYm94IGlzIGVpdGhlclxuICAgLSBoYm94OiBob3Jpem9udGFsIGJveCAobm8gbGluZSBzcGxpdHRpbmcpXG4gICAtIHZib3g6IHZlcnRpY2FsIGJveCAoZXZlcnkgYnJlYWsgaGludCBzcGxpdHMgdGhlIGxpbmUpXG4gICAtIGh2Ym94OiBob3Jpem9udGFsL3ZlcnRpY2FsIGJveFxuICAgICAodGhlIGJveCBiZWhhdmVzIGFzIGFuIGhvcml6b250YWwgYm94IGlmIGl0IGZpdHMgb25cbiAgICAgIHRoZSBjdXJyZW50IGxpbmUsIG90aGVyd2lzZSB0aGUgYm94IGJlaGF2ZXMgYXMgYSB2ZXJ0aWNhbCBib3gpXG4gICAtIGhvdmJveDogaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjb21wYWN0aW5nIGJveFxuICAgICAodGhlIGJveCBpcyBjb21wYWN0aW5nIG1hdGVyaWFsLCBwcmludGluZyBhcyBtdWNoIG1hdGVyaWFsIGFzIHBvc3NpYmxlXG4gICAgICBvbiBldmVyeSBsaW5lcylcbiAgIC0gYm94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94IHdpdGggZW5oYW5jZWQgYm94IHN0cnVjdHVyZVxuICAgICAodGhlIGJveCBiZWhhdmVzIGFzIGFuIGhvcml6b250YWwgb3IgdmVydGljYWwgYm94IGJ1dCBicmVhayBoaW50cyBzcGxpdFxuICAgICAgdGhlIGxpbmUgaWYgc3BsaXR0aW5nIHdvdWxkIG1vdmUgdG8gdGhlIGxlZnQpXG4qKVxudHlwZSBib3hfdHlwZSA9IENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5ibG9ja190eXBlID1cbiAgfCBQcF9oYm94IHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IHwgUHBfZml0c1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRpbmcgdG9rZW5zIGRlZmluaXRpb246XG4gICBhcmUgZWl0aGVyIHRleHQgdG8gcHJpbnQgb3IgcHJldHR5IHByaW50aW5nXG4gICBlbGVtZW50cyB0aGF0IGRyaXZlIGluZGVudGF0aW9uIGFuZCBsaW5lIHNwbGl0dGluZy4gKilcbnR5cGUgcHBfdG9rZW4gPVxuICB8IFBwX3RleHQgb2Ygc3RyaW5nICAgICAgICAgICgqIG5vcm1hbCB0ZXh0ICopXG4gIHwgUHBfYnJlYWsgb2YgeyAgICAgICAgICAgICAgKCogY29tcGxldGUgYnJlYWsgKilcbiAgICAgIGZpdHM6IHN0cmluZyAqIGludCAqIHN0cmluZzsgICAoKiBsaW5lIGlzIG5vdCBzcGxpdCAqKVxuICAgICAgYnJlYWtzOiBzdHJpbmcgKiBpbnQgKiBzdHJpbmc7ICgqIGxpbmUgaXMgc3BsaXQgKilcbiAgICB9XG4gIHwgUHBfdGJyZWFrIG9mIGludCAqIGludCAgICAgKCogZ28gdG8gbmV4dCB0YWJ1bGF0aW9uICopXG4gIHwgUHBfc3RhYiAgICAgICAgICAgICAgICAgICAgKCogc2V0IGEgdGFidWxhdGlvbiAqKVxuICB8IFBwX2JlZ2luIG9mIGludCAqIGJveF90eXBlICgqIGJlZ2lubmluZyBvZiBhIGJveCAqKVxuICB8IFBwX2VuZCAgICAgICAgICAgICAgICAgICAgICgqIGVuZCBvZiBhIGJveCAqKVxuICB8IFBwX3RiZWdpbiBvZiB0Ym94ICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBhIHRhYnVsYXRpb24gYm94ICopXG4gIHwgUHBfdGVuZCAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF9uZXdsaW5lICAgICAgICAgICAgICAgICAoKiB0byBmb3JjZSBhIG5ld2xpbmUgaW5zaWRlIGEgYm94ICopXG4gIHwgUHBfaWZfbmV3bGluZSAgICAgICAgICAgICAgKCogdG8gZG8gc29tZXRoaW5nIG9ubHkgaWYgdGhpcyB2ZXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSBoYXMgYmVlbiBicm9rZW4gKilcbiAgfCBQcF9vcGVuX3RhZyBvZiBzdGFnICAgICAgICAgKCogb3BlbmluZyBhIHRhZyBuYW1lICopXG4gIHwgUHBfY2xvc2VfdGFnICAgICAgICAgICAgICAgKCogY2xvc2luZyB0aGUgbW9zdCByZWNlbnRseSBvcGVuIHRhZyAqKVxuXG5hbmQgc3RhZyA9IC4uXG5cbmFuZCB0Ym94ID0gUHBfdGJveCBvZiBpbnQgbGlzdCByZWYgICgqIFRhYnVsYXRpb24gYm94ICopXG5cbnR5cGUgdGFnID0gc3RyaW5nXG50eXBlIHN0YWcgKz0gU3RyaW5nX3RhZyBvZiB0YWdcblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWU6XG4gICBwcmV0dHktcHJpbnRpbmcgbWF0ZXJpYWwgaXMgbm90IHdyaXR0ZW4gaW4gdGhlIG91dHB1dCBhcyBzb29uIGFzIGVtaXR0ZWQ7XG4gICBpbnN0ZWFkLCB0aGUgbWF0ZXJpYWwgaXMgc2ltcGx5IHJlY29yZGVkIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSxcbiAgIHVudGlsIHRoZSBlbmNsb3NpbmcgYm94IGhhcyBhIGtub3duIGNvbXB1dGVkIHNpemUgYW5kIHByb3BlciBzcGxpdHRpbmdcbiAgIGRlY2lzaW9ucyBjYW4gYmUgbWFkZS5cblxuICAgVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGNvbnRhaW5zIGZvcm1hdHRpbmcgZWxlbWVudHMgdG8gYmUgcHJpbnRlZC5cbiAgIEVhY2ggZm9ybWF0dGluZyBlbGVtZW50IGlzIGEgdHVwbGUgKHNpemUsIHRva2VuLCBsZW5ndGgpLCB3aGVyZVxuICAgLSBsZW5ndGggaXMgdGhlIGRlY2xhcmVkIGxlbmd0aCBvZiB0aGUgdG9rZW4sXG4gICAtIHNpemUgaXMgZWZmZWN0aXZlIHNpemUgb2YgdGhlIHRva2VuIHdoZW4gaXQgaXMgcHJpbnRlZFxuICAgICAoc2l6ZSBpcyBzZXQgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgYm94IGlzIGtub3duLCBzbyB0aGF0IHNpemUgb2YgYnJlYWtcbiAgICAgIGhpbnRzIGFyZSBkZWZpbml0aXZlKS4gKilcbnR5cGUgcHBfcXVldWVfZWxlbSA9IHtcbiAgbXV0YWJsZSBzaXplIDogU2l6ZS50O1xuICB0b2tlbiA6IHBwX3Rva2VuO1xuICBsZW5ndGggOiBpbnQ7XG59XG5cblxuKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGRlZmluaXRpb24uICopXG50eXBlIHBwX3F1ZXVlID0gcHBfcXVldWVfZWxlbSBRdWV1ZS50XG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay4gKilcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrOiBzY2FubmluZyBlbGVtZW50IGRlZmluaXRpb24uICopXG50eXBlIHBwX3NjYW5fZWxlbSA9IHtcbiAgbGVmdF90b3RhbCA6IGludDsgKCogVmFsdWUgb2YgcHBfbGVmdF90b3RhbCB3aGVuIHRoZSBlbGVtZW50IHdhcyBlbnF1ZXVlZC4gKilcbiAgcXVldWVfZWxlbSA6IHBwX3F1ZXVlX2VsZW1cbn1cblxuKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2s6XG4gICB0aGUgZm9ybWF0dGluZyBzdGFjayBjb250YWlucyB0aGUgZGVzY3JpcHRpb24gb2YgYWxsIHRoZSBjdXJyZW50bHkgYWN0aXZlXG4gICBib3hlczsgdGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2sgaXMgdXNlZCB0byBzcGxpdCB0aGUgbGluZXNcbiAgIHdoaWxlIHByaW50aW5nIHRva2Vucy4gKilcblxuKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2s6IGZvcm1hdHRpbmcgc3RhY2sgZWxlbWVudCBkZWZpbml0aW9uLlxuICAgRWFjaCBzdGFjayBlbGVtZW50IGRlc2NyaWJlcyBhIHByZXR0eS1wcmludGluZyBib3guICopXG50eXBlIHBwX2Zvcm1hdF9lbGVtID0geyBib3hfdHlwZSA6IGJveF90eXBlOyB3aWR0aCA6IGludCB9XG5cbigqIFRoZSBmb3JtYXR0ZXIgZGVmaW5pdGlvbi5cbiAgIEVhY2ggZm9ybWF0dGVyIHZhbHVlIGlzIGEgcHJldHR5LXByaW50ZXIgaW5zdGFuY2Ugd2l0aCBhbGwgaXRzXG4gICBtYWNoaW5lcnkuICopXG50eXBlIGZvcm1hdHRlciA9IHtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuICBwcF9zY2FuX3N0YWNrIDogcHBfc2Nhbl9lbGVtIFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrLiAqKVxuICBwcF9mb3JtYXRfc3RhY2sgOiBwcF9mb3JtYXRfZWxlbSBTdGFjay50O1xuICBwcF90Ym94X3N0YWNrIDogdGJveCBTdGFjay50O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2VtYW50aWNzIHRhZyBzdGFjay4gKilcbiAgcHBfdGFnX3N0YWNrIDogc3RhZyBTdGFjay50O1xuICBwcF9tYXJrX3N0YWNrIDogc3RhZyBTdGFjay50O1xuICAoKiBWYWx1ZSBvZiByaWdodCBtYXJnaW4uICopXG4gIG11dGFibGUgcHBfbWFyZ2luIDogaW50O1xuICAoKiBNaW5pbWFsIHNwYWNlIGxlZnQgYmVmb3JlIG1hcmdpbiwgd2hlbiBvcGVuaW5nIGEgYm94LiAqKVxuICBtdXRhYmxlIHBwX21pbl9zcGFjZV9sZWZ0IDogaW50O1xuICAoKiBNYXhpbXVtIHZhbHVlIG9mIGluZGVudGF0aW9uOlxuICAgICBubyBib3ggY2FuIGJlIG9wZW5lZCBmdXJ0aGVyLiAqKVxuICBtdXRhYmxlIHBwX21heF9pbmRlbnQgOiBpbnQ7XG4gICgqIFNwYWNlIHJlbWFpbmluZyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxuICBtdXRhYmxlIHBwX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIEN1cnJlbnQgdmFsdWUgb2YgaW5kZW50YXRpb24uICopXG4gIG11dGFibGUgcHBfY3VycmVudF9pbmRlbnQgOiBpbnQ7XG4gICgqIFRydWUgd2hlbiB0aGUgbGluZSBoYXMgYmVlbiBicm9rZW4gYnkgdGhlIHByZXR0eS1wcmludGVyLiAqKVxuICBtdXRhYmxlIHBwX2lzX25ld19saW5lIDogYm9vbDtcbiAgKCogVG90YWwgd2lkdGggb2YgdG9rZW5zIGFscmVhZHkgcHJpbnRlZC4gKilcbiAgbXV0YWJsZSBwcF9sZWZ0X3RvdGFsIDogaW50O1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgZXZlciBwdXQgaW4gcXVldWUuICopXG4gIG11dGFibGUgcHBfcmlnaHRfdG90YWwgOiBpbnQ7XG4gICgqIEN1cnJlbnQgbnVtYmVyIG9mIG9wZW4gYm94ZXMuICopXG4gIG11dGFibGUgcHBfY3Vycl9kZXB0aCA6IGludDtcbiAgKCogTWF4aW11bSBudW1iZXIgb2YgYm94ZXMgd2hpY2ggY2FuIGJlIHNpbXVsdGFuZW91c2x5IG9wZW4uICopXG4gIG11dGFibGUgcHBfbWF4X2JveGVzIDogaW50O1xuICAoKiBFbGxpcHNpcyBzdHJpbmcuICopXG4gIG11dGFibGUgcHBfZWxsaXBzaXMgOiBzdHJpbmc7XG4gICgqIE91dHB1dCBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgKCogRmx1c2hpbmcgZnVuY3Rpb24uICopXG4gIG11dGFibGUgcHBfb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9uZXdsaW5lIDogdW5pdCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgYnJlYWsgaGludHMgc3BhY2VzLiAqKVxuICBtdXRhYmxlIHBwX291dF9zcGFjZXMgOiBpbnQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIGluZGVudGF0aW9uIG9mIG5ldyBsaW5lcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG4gICgqIEFyZSB0YWdzIHByaW50ZWQgPyAqKVxuICBtdXRhYmxlIHBwX3ByaW50X3RhZ3MgOiBib29sO1xuICAoKiBBcmUgdGFncyBtYXJrZWQgPyAqKVxuICBtdXRhYmxlIHBwX21hcmtfdGFncyA6IGJvb2w7XG4gICgqIEZpbmQgb3BlbmluZyBhbmQgY2xvc2luZyBtYXJrZXJzIG9mIHRhZ3MuICopXG4gIG11dGFibGUgcHBfbWFya19vcGVuX3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtdXRhYmxlIHBwX21hcmtfY2xvc2VfdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfcHJpbnRfb3Blbl90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gIG11dGFibGUgcHBfcHJpbnRfY2xvc2VfdGFnIDogc3RhZyAtPiB1bml0O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG4gIHBwX3F1ZXVlIDogcHBfcXVldWU7XG59XG5cblxuKCogVGhlIGZvcm1hdHRlciBzcGVjaWZpYyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zLiAqKVxudHlwZSBmb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPSB7XG4gIG1hcmtfb3Blbl9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3N0YWcgOiBzdGFnIC0+IHVuaXQ7XG4gIHByaW50X2Nsb3NlX3N0YWcgOiBzdGFnIC0+IHVuaXQ7XG59XG5cblxuKCogVGhlIGZvcm1hdHRlciBmdW5jdGlvbnMgdG8gb3V0cHV0IG1hdGVyaWFsLiAqKVxudHlwZSBmb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9IHtcbiAgb3V0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQ7XG4gIG91dF9mbHVzaCA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gIG91dF9zcGFjZXMgOiBpbnQgLT4gdW5pdDtcbiAgb3V0X2luZGVudCA6IGludCAtPiB1bml0O1xufVxuXG5cbigqXG5cbiAgQXV4aWxpYXJpZXMgYW5kIGJhc2ljIGZ1bmN0aW9ucy5cblxuKilcblxuKCogRW50ZXIgYSB0b2tlbiBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG5sZXQgcHBfZW5xdWV1ZSBzdGF0ZSB0b2tlbiA9XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgdG9rZW4ubGVuZ3RoO1xuICBRdWV1ZS5hZGQgdG9rZW4gc3RhdGUucHBfcXVldWVcblxuXG5sZXQgcHBfY2xlYXJfcXVldWUgc3RhdGUgPVxuICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIDE7IHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIDE7XG4gIFF1ZXVlLmNsZWFyIHN0YXRlLnBwX3F1ZXVlXG5cblxuKCogUHBfaW5maW5pdHk6IGxhcmdlIHZhbHVlIGZvciBkZWZhdWx0IHRva2VucyBzaXplLlxuXG4gICBQcF9pbmZpbml0eSBpcyBkb2N1bWVudGVkIGFzIGJlaW5nIGdyZWF0ZXIgdGhhbiAxZTEwOyB0byBhdm9pZFxuICAgY29uZnVzaW9uIGFib3V0IHRoZSB3b3JkICdncmVhdGVyJywgd2UgY2hvb3NlIHBwX2luZmluaXR5IGdyZWF0ZXJcbiAgIHRoYW4gMWUxMCArIDE7IGZvciBjb3JyZWN0IGhhbmRsaW5nIG9mIHRlc3RzIGluIHRoZSBhbGdvcml0aG0sXG4gICBwcF9pbmZpbml0eSBtdXN0IGJlIGV2ZW4gb25lIG1vcmUgdGhhbiAxZTEwICsgMTsgbGV0J3Mgc3RhbmQgb24gdGhlXG4gICBzYWZlIHNpZGUgYnkgY2hvb3NpbmcgMS5lMTArMTAuXG5cbiAgIFBwX2luZmluaXR5IGNvdWxkIHByb2JhYmx5IGJlIDEwNzM3NDE4MjMgdGhhdCBpcyAyXjMwIC0gMSwgdGhhdCBpc1xuICAgdGhlIG1pbmltYWwgdXBwZXIgYm91bmQgZm9yIGludGVnZXJzOyBub3cgdGhhdCBtYXhfaW50IGlzIGRlZmluZWQsXG4gICB0aGlzIGxpbWl0IGNvdWxkIGFsc28gYmUgZGVmaW5lZCBhcyBtYXhfaW50IC0gMS5cblxuICAgSG93ZXZlciwgYmVmb3JlIHNldHRpbmcgcHBfaW5maW5pdHkgdG8gc29tZXRoaW5nIGFyb3VuZCBtYXhfaW50LCB3ZVxuICAgbXVzdCBjYXJlZnVsbHkgZG91YmxlLWNoZWNrIGFsbCB0aGUgaW50ZWdlciBhcml0aG1ldGljIG9wZXJhdGlvbnNcbiAgIHRoYXQgaW52b2x2ZSBwcF9pbmZpbml0eSwgc2luY2UgYW55IG92ZXJmbG93IHdvdWxkIHdyZWNrIGhhdm9jIHRoZVxuICAgcHJldHR5LXByaW50aW5nIGFsZ29yaXRobSdzIGludmFyaWFudHMuIEdpdmVuIHRoYXQgdGhpcyBhcml0aG1ldGljXG4gICBjb3JyZWN0bmVzcyBjaGVjayBpcyBkaWZmaWN1bHQgYW5kIGVycm9yIHByb25lIGFuZCBnaXZlbiB0aGF0IDFlMTBcbiAgICsgMSBpcyBpbiBwcmFjdGljZSBsYXJnZSBlbm91Z2gsIHRoZXJlIGlzIG5vIG5lZWQgdG8gYXR0ZW1wdCB0byBzZXRcbiAgIHBwX2luZmluaXR5IHRvIHRoZSB0aGVvcmV0aWNhbGx5IG1heGltdW0gbGltaXQuIEl0IGlzIG5vdCB3b3J0aCB0aGVcbiAgIGJ1cmRlbiAhICopXG5sZXQgcHBfaW5maW5pdHkgPSAxMDAwMDAwMDEwXG5cbigqIE91dHB1dCBmdW5jdGlvbnMgZm9yIHRoZSBmb3JtYXR0ZXIuICopXG5sZXQgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBzID0gc3RhdGUucHBfb3V0X3N0cmluZyBzIDAgKFN0cmluZy5sZW5ndGggcylcbmFuZCBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lICgpXG5hbmQgcHBfb3V0cHV0X3NwYWNlcyBzdGF0ZSBuID0gc3RhdGUucHBfb3V0X3NwYWNlcyBuXG5hbmQgcHBfb3V0cHV0X2luZGVudCBzdGF0ZSBuID0gc3RhdGUucHBfb3V0X2luZGVudCBuXG5cbigqIEZvcm1hdCBhIHRleHR1YWwgdG9rZW4gKilcbmxldCBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHRleHQgPVxuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgLSBzaXplO1xuICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHRleHQ7XG4gIHN0YXRlLnBwX2lzX25ld19saW5lIDwtIGZhbHNlXG5cbigqIEZvcm1hdCBhIHN0cmluZyBieSBpdHMgbGVuZ3RoLCBpZiBub3QgZW1wdHkgKilcbmxldCBmb3JtYXRfc3RyaW5nIHN0YXRlIHMgPVxuICBpZiBzIDw+IFwiXCIgdGhlbiBmb3JtYXRfcHBfdGV4dCBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbigqIFRvIGZvcm1hdCBhIGJyZWFrLCBpbmRlbnRpbmcgYSBuZXcgbGluZS4gKilcbmxldCBicmVha19uZXdfbGluZSBzdGF0ZSAoYmVmb3JlLCBvZmZzZXQsIGFmdGVyKSB3aWR0aCA9XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYmVmb3JlO1xuICBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gdHJ1ZTtcbiAgbGV0IGluZGVudCA9IHN0YXRlLnBwX21hcmdpbiAtIHdpZHRoICsgb2Zmc2V0IGluXG4gICgqIERvbid0IGluZGVudCBtb3JlIHRoYW4gcHBfbWF4X2luZGVudC4gKilcbiAgbGV0IHJlYWxfaW5kZW50ID0gSW50Lm1pbiBzdGF0ZS5wcF9tYXhfaW5kZW50IGluZGVudCBpblxuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSByZWFsX2luZGVudDtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9jdXJyZW50X2luZGVudDtcbiAgcHBfb3V0cHV0X2luZGVudCBzdGF0ZSBzdGF0ZS5wcF9jdXJyZW50X2luZGVudDtcbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBhZnRlclxuXG5cbigqIFRvIGZvcmNlIGEgbGluZSBicmVhayBpbnNpZGUgYSBib3g6IG5vIG9mZnNldCBpcyBhZGRlZC4gKilcbmxldCBicmVha19saW5lIHN0YXRlIHdpZHRoID0gYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIDAsIFwiXCIpIHdpZHRoXG5cbigqIFRvIGZvcm1hdCBhIGJyZWFrIHRoYXQgZml0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoYmVmb3JlLCB3aWR0aCwgYWZ0ZXIpID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHdpZHRoO1xuICBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIHdpZHRoO1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gaW5kZW50IG5vIG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LCBpZiBvbmUgdHJpZXMgdG8gb3BlbiBhIGJveFxuICAgYmV5b25kIHBwX21heF9pbmRlbnQsIHRoZW4gdGhlIGJveCBpcyByZWplY3RlZCBvbiB0aGUgbGVmdFxuICAgYnkgc2ltdWxhdGluZyBhIGJyZWFrLiAqKVxubGV0IHBwX2ZvcmNlX2JyZWFrX2xpbmUgc3RhdGUgPVxuICBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZVxuICB8IFNvbWUgeyBib3hfdHlwZTsgd2lkdGggfSAtPlxuICAgIGlmIHdpZHRoID4gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuXG4gICAgICBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2ZpdHMgfCBQcF9oYm94IC0+ICgpXG4gICAgICB8IFBwX3Zib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCAtPiBicmVha19saW5lIHN0YXRlIHdpZHRoXG5cblxuKCogVG8gc2tpcCBhIHRva2VuLCBpZiB0aGUgcHJldmlvdXMgbGluZSBoYXMgYmVlbiBicm9rZW4uICopXG5sZXQgcHBfc2tpcF90b2tlbiBzdGF0ZSA9XG4gIG1hdGNoIFF1ZXVlLnRha2Vfb3B0IHN0YXRlLnBwX3F1ZXVlIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHByaW50X2lmX25ld2xpbmUgbXVzdCBoYXZlIGJlZW4gdGhlIGxhc3QgcHJpbnRpbmcgY29tbWFuZCAqKVxuICB8IFNvbWUgeyBzaXplOyBsZW5ndGg7IF8gfSAtPlxuICAgIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gc3RhdGUucHBfbGVmdF90b3RhbCAtIGxlbmd0aDtcbiAgICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgKyBTaXplLnRvX2ludCBzaXplXG5cblxuKCpcblxuICBUaGUgbWFpbiBwcmV0dHkgcHJpbnRpbmcgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBGb3JtYXR0aW5nIGEgdG9rZW4gd2l0aCBhIGdpdmVuIHNpemUuICopXG5sZXQgZm9ybWF0X3BwX3Rva2VuIHN0YXRlIHNpemUgPSBmdW5jdGlvblxuXG4gIHwgUHBfdGV4dCBzIC0+XG4gICAgZm9ybWF0X3BwX3RleHQgc3RhdGUgc2l6ZSBzXG5cbiAgfCBQcF9iZWdpbiAob2ZmLCB0eSkgLT5cbiAgICBsZXQgaW5zZXJ0aW9uX3BvaW50ID0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCBpblxuICAgIGlmIGluc2VydGlvbl9wb2ludCA+IHN0YXRlLnBwX21heF9pbmRlbnQgdGhlblxuICAgICAgKCogY2FuIG5vdCBvcGVuIGEgYm94IHJpZ2h0IHRoZXJlLiAqKVxuICAgICAgYmVnaW4gcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSBlbmQ7XG4gICAgbGV0IHdpZHRoID0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIG9mZiBpblxuICAgIGxldCBib3hfdHlwZSA9XG4gICAgICBtYXRjaCB0eSB3aXRoXG4gICAgICB8IFBwX3Zib3ggLT4gUHBfdmJveFxuICAgICAgfCBQcF9oYm94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzIC0+XG4gICAgICAgIGlmIHNpemUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gdHkgZWxzZSBQcF9maXRzIGluXG4gICAgU3RhY2sucHVzaCB7IGJveF90eXBlOyB3aWR0aCB9IHN0YXRlLnBwX2Zvcm1hdF9zdGFja1xuXG4gIHwgUHBfZW5kIC0+XG4gICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF90YmVnaW4gKFBwX3Rib3ggXyBhcyB0Ym94KSAtPlxuICAgIFN0YWNrLnB1c2ggdGJveCBzdGF0ZS5wcF90Ym94X3N0YWNrXG5cbiAgfCBQcF90ZW5kIC0+XG4gICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHw+IGlnbm9yZVxuXG4gIHwgUHBfc3RhYiAtPlxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gdGFidWxhdGlvbiBib3guICopXG4gICAgfCBTb21lIChQcF90Ym94IHRhYnMpIC0+XG4gICAgICBsZXQgcmVjIGFkZF90YWIgbiA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gW25dXG4gICAgICAgIHwgeCA6OiBsIGFzIGxzIC0+IGlmIG4gPCB4IHRoZW4gbiA6OiBscyBlbHNlIHggOjogYWRkX3RhYiBuIGwgaW5cbiAgICAgIHRhYnMgOj0gYWRkX3RhYiAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCkgIXRhYnNcbiAgICBlbmRcblxuICB8IFBwX3RicmVhayAobiwgb2ZmKSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCB0YWIgPVxuICAgICAgICBtYXRjaCAhdGFicyB3aXRoXG4gICAgICAgIHwgW10gLT4gaW5zZXJ0aW9uX3BvaW50XG4gICAgICAgIHwgZmlyc3QgOjogXyAtPlxuICAgICAgICAgIGxldCByZWMgZmluZCA9IGZ1bmN0aW9uXG4gICAgICAgICAgICB8IGhlYWQgOjogdGFpbCAtPlxuICAgICAgICAgICAgICBpZiBoZWFkID49IGluc2VydGlvbl9wb2ludCB0aGVuIGhlYWQgZWxzZSBmaW5kIHRhaWxcbiAgICAgICAgICAgIHwgW10gLT4gZmlyc3QgaW5cbiAgICAgICAgICBmaW5kICF0YWJzIGluXG4gICAgICBsZXQgb2Zmc2V0ID0gdGFiIC0gaW5zZXJ0aW9uX3BvaW50IGluXG4gICAgICBpZiBvZmZzZXQgPj0gMFxuICAgICAgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgKFwiXCIsIG9mZnNldCArIG4sIFwiXCIpXG4gICAgICBlbHNlIGJyZWFrX25ld19saW5lIHN0YXRlIChcIlwiLCB0YWIgKyBvZmYsIFwiXCIpIHN0YXRlLnBwX21hcmdpblxuICAgIGVuZFxuXG4gIHwgUHBfbmV3bGluZSAtPlxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGUgKCogTm8gb3BlbiBib3guICopXG4gICAgfCBTb21lIHsgd2lkdGg7IF99IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcbiAgICBlbmRcblxuICB8IFBwX2lmX25ld2xpbmUgLT5cbiAgICBpZiBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCAhPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgdGhlbiBwcF9za2lwX3Rva2VuIHN0YXRlXG5cbiAgfCBQcF9icmVhayB7IGZpdHM7IGJyZWFrcyB9IC0+XG4gICAgbGV0IGJlZm9yZSwgb2ZmLCBfID0gYnJlYWtzIGluXG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyBib3hfdHlwZTsgd2lkdGggfSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggYm94X3R5cGUgd2l0aFxuICAgICAgfCBQcF9ob3Zib3ggLT5cbiAgICAgICAgaWYgc2l6ZSArIFN0cmluZy5sZW5ndGggYmVmb3JlID4gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2JveCAtPlxuICAgICAgICAoKiBIYXZlIHRoZSBsaW5lIGp1c3QgYmVlbiBicm9rZW4gaGVyZSA/ICopXG4gICAgICAgIGlmIHN0YXRlLnBwX2lzX25ld19saW5lIHRoZW4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHMgZWxzZVxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGggZWxzZVxuICAgICAgICAoKiBicmVhayB0aGUgbGluZSBoZXJlIGxlYWRzIHRvIG5ldyBpbmRlbnRhdGlvbiA/ICopXG4gICAgICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ID4gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZcbiAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgICAgZWxzZSBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF9odmJveCAtPiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgIHwgUHBfZml0cyAtPiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF92Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9oYm94IC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICBlbmRcbiAgICBlbmRcblxuICAgfCBQcF9vcGVuX3RhZyB0YWdfbmFtZSAtPlxuICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19vcGVuX3RhZyB0YWdfbmFtZSBpblxuICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlcjtcbiAgICAgU3RhY2sucHVzaCB0YWdfbmFtZSBzdGF0ZS5wcF9tYXJrX3N0YWNrXG5cbiAgIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgIGJlZ2luIG1hdGNoIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfbWFya19zdGFjayB3aXRoXG4gICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICAgfCBTb21lIHRhZ19uYW1lIC0+XG4gICAgICAgbGV0IG1hcmtlciA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIHRhZ19uYW1lIGluXG4gICAgICAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBtYXJrZXJcbiAgICAgZW5kXG5cblxuKCogUHJpbnQgaWYgdG9rZW4gc2l6ZSBpcyBrbm93biBlbHNlIHByaW50aW5nIGlzIGRlbGF5ZWQuXG4gICBQcmludGluZyBpcyBkZWxheWVkIHdoZW4gdGhlIHRleHQgd2FpdGluZyBpbiB0aGUgcXVldWUgcmVxdWlyZXNcbiAgIG1vcmUgcm9vbSB0byBmb3JtYXQgdGhhbiBleGlzdHMgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbmxldCByZWMgYWR2YW5jZV9sZWZ0IHN0YXRlID1cbiAgbWF0Y2ggUXVldWUucGVla19vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogTm8gdG9rZW5zIHRvIHByaW50ICopXG4gIHwgU29tZSB7IHNpemU7IHRva2VuOyBsZW5ndGggfSAtPlxuICAgIGxldCBwZW5kaW5nX2NvdW50ID0gc3RhdGUucHBfcmlnaHRfdG90YWwgLSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIGluXG4gICAgaWYgU2l6ZS5pc19rbm93biBzaXplIHx8IHBlbmRpbmdfY291bnQgPj0gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuIGJlZ2luXG4gICAgICBRdWV1ZS50YWtlIHN0YXRlLnBwX3F1ZXVlIHw+IGlnbm9yZTsgKCogTm90IGVtcHR5OiB3ZSBwZWVrIGludG8gaXQgKilcbiAgICAgIGxldCBzaXplID0gaWYgU2l6ZS5pc19rbm93biBzaXplIHRoZW4gU2l6ZS50b19pbnQgc2l6ZSBlbHNlIHBwX2luZmluaXR5IGluXG4gICAgICBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSB0b2tlbjtcbiAgICAgIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gbGVuZ3RoICsgc3RhdGUucHBfbGVmdF90b3RhbDtcbiAgICAgIChhZHZhbmNlX2xlZnQgW0B0YWlsY2FsbF0pIHN0YXRlXG4gICAgZW5kXG5cblxuKCogVG8gZW5xdWV1ZSBhIHRva2VuIDogdHJ5IHRvIGFkdmFuY2UuICopXG5sZXQgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHRvayA9IHBwX2VucXVldWUgc3RhdGUgdG9rOyBhZHZhbmNlX2xlZnQgc3RhdGVcblxuXG4oKiBUbyBlbnF1ZXVlIHN0cmluZ3MuICopXG5sZXQgZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgc2l6ZSBzID1cbiAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHsgc2l6ZTsgdG9rZW4gPSBQcF90ZXh0IHM7IGxlbmd0aCA9IFNpemUudG9faW50IHNpemUgfVxuXG5cbmxldCBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzID1cbiAgZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgKFNpemUub2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKSBzXG5cblxuKCogUm91dGluZXMgZm9yIHNjYW4gc3RhY2tcbiAgIGRldGVybWluZSBzaXplIG9mIGJveGVzLiAqKVxuXG4oKiBUaGUgc2Nhbl9zdGFjayBpcyBuZXZlciBlbXB0eS4gKilcbmxldCBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhY2sgPVxuICBTdGFjay5jbGVhciBzdGFjaztcbiAgbGV0IHF1ZXVlX2VsZW0gPSB7IHNpemUgPSBTaXplLnVua25vd247IHRva2VuID0gUHBfdGV4dCBcIlwiOyBsZW5ndGggPSAwIH0gaW5cbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAtMTsgcXVldWVfZWxlbSB9IHN0YWNrXG5cbigqIFNldHRpbmcgdGhlIHNpemUgb2YgYm94ZXMgb24gc2NhbiBzdGFjazpcbiAgIGlmIHR5ID0gdHJ1ZSB0aGVuIHNpemUgb2YgYnJlYWsgaXMgc2V0IGVsc2Ugc2l6ZSBvZiBib3ggaXMgc2V0O1xuICAgaW4gZWFjaCBjYXNlIHBwX3NjYW5fc3RhY2sgaXMgcG9wcGVkLlxuXG4gICBOb3RlOlxuICAgUGF0dGVybiBtYXRjaGluZyBvbiBzY2FuIHN0YWNrIGlzIGV4aGF1c3RpdmUsIHNpbmNlIHNjYW5fc3RhY2sgaXMgbmV2ZXJcbiAgIGVtcHR5LlxuICAgUGF0dGVybiBtYXRjaGluZyBvbiB0b2tlbiBpbiBzY2FuIHN0YWNrIGlzIGFsc28gZXhoYXVzdGl2ZSxcbiAgIHNpbmNlIHNjYW5fcHVzaCBpcyB1c2VkIG9uIGJyZWFrcyBhbmQgb3BlbmluZyBvZiBib3hlcy4gKilcbmxldCBzZXRfc2l6ZSBzdGF0ZSB0eSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxuICB8IFNvbWUgeyBsZWZ0X3RvdGFsOyBxdWV1ZV9lbGVtIH0gLT5cbiAgICBsZXQgc2l6ZSA9IFNpemUudG9faW50IHF1ZXVlX2VsZW0uc2l6ZSBpblxuICAgICgqIHRlc3QgaWYgc2NhbiBzdGFjayBjb250YWlucyBhbnkgZGF0YSB0aGF0IGlzIG5vdCBvYnNvbGV0ZS4gKilcbiAgICBpZiBsZWZ0X3RvdGFsIDwgc3RhdGUucHBfbGVmdF90b3RhbCB0aGVuXG4gICAgICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhdGUucHBfc2Nhbl9zdGFja1xuICAgIGVsc2VcbiAgICAgIG1hdGNoIHF1ZXVlX2VsZW0udG9rZW4gd2l0aFxuICAgICAgfCBQcF9icmVhayBfIHwgUHBfdGJyZWFrIChfLCBfKSAtPlxuICAgICAgICBpZiB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX2JlZ2luIChfLCBfKSAtPlxuICAgICAgICBpZiBub3QgdHkgdGhlbiBiZWdpblxuICAgICAgICAgIHF1ZXVlX2VsZW0uc2l6ZSA8LSBTaXplLm9mX2ludCAoc3RhdGUucHBfcmlnaHRfdG90YWwgKyBzaXplKTtcbiAgICAgICAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgfD4gaWdub3JlXG4gICAgICAgIGVuZFxuICAgICAgfCBQcF90ZXh0IF8gfCBQcF9zdGFiIHwgUHBfdGJlZ2luIF8gfCBQcF90ZW5kIHwgUHBfZW5kXG4gICAgICB8IFBwX25ld2xpbmUgfCBQcF9pZl9uZXdsaW5lIHwgUHBfb3Blbl90YWcgXyB8IFBwX2Nsb3NlX3RhZyAtPlxuICAgICAgICAoKSAoKiBzY2FuX3B1c2ggaXMgb25seSB1c2VkIGZvciBicmVha3MgYW5kIGJveGVzLiAqKVxuXG5cbigqIFB1c2ggYSB0b2tlbiBvbiBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay5cbiAgIElmIGIgaXMgdHJ1ZSBzZXRfc2l6ZSBpcyBjYWxsZWQuICopXG5sZXQgc2Nhbl9wdXNoIHN0YXRlIGIgdG9rZW4gPVxuICBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuO1xuICBpZiBiIHRoZW4gc2V0X3NpemUgc3RhdGUgdHJ1ZTtcbiAgbGV0IGVsZW0gPSB7IGxlZnRfdG90YWwgPSBzdGF0ZS5wcF9yaWdodF90b3RhbDsgcXVldWVfZWxlbSA9IHRva2VuIH0gaW5cbiAgU3RhY2sucHVzaCBlbGVtIHN0YXRlLnBwX3NjYW5fc3RhY2tcblxuXG4oKiBUbyBvcGVuIGEgbmV3IGJveCA6XG4gICB0aGUgdXNlciBtYXkgc2V0IHRoZSBkZXB0aCBib3VuZCBwcF9tYXhfYm94ZXNcbiAgIGFueSB0ZXh0IG5lc3RlZCBkZWVwZXIgaXMgcHJpbnRlZCBhcyB0aGUgZWxsaXBzaXMgc3RyaW5nLiAqKVxubGV0IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgYnJfdHkgPVxuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggKyAxO1xuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX2JlZ2luIChpbmRlbnQsIGJyX3R5KTsgbGVuZ3RoID0gMCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIGZhbHNlIGVsZW0gZWxzZVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID0gc3RhdGUucHBfbWF4X2JveGVzXG4gIHRoZW4gZW5xdWV1ZV9zdHJpbmcgc3RhdGUgc3RhdGUucHBfZWxsaXBzaXNcblxuXG4oKiBUaGUgYm94IHdoaWNoIGlzIGFsd2F5cyBvcGVuLiAqKVxubGV0IHBwX29wZW5fc3lzX2JveCBzdGF0ZSA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSAwIFBwX2hvdmJveFxuXG4oKiBDbG9zZSBhIGJveCwgc2V0dGluZyBzaXplcyBvZiBpdHMgc3ViIGJveGVzLiAqKVxubGV0IHBwX2Nsb3NlX2JveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBiZWdpblxuICAgICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfZW5kOyBsZW5ndGggPSAwIH07XG4gICAgICBzZXRfc2l6ZSBzdGF0ZSB0cnVlOyBzZXRfc2l6ZSBzdGF0ZSBmYWxzZVxuICAgIGVuZDtcbiAgICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggLSAxO1xuICBlbmRcblxuXG4oKiBPcGVuIGEgdGFnLCBwdXNoaW5nIGl0IG9uIHRoZSB0YWcgc3RhY2suICopXG5sZXQgcHBfb3Blbl9zdGFnIHN0YXRlIHRhZ19uYW1lID1cbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gIGJlZ2luXG4gICAgU3RhY2sucHVzaCB0YWdfbmFtZSBzdGF0ZS5wcF90YWdfc3RhY2s7XG4gICAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgdGFnX25hbWVcbiAgZW5kO1xuICBpZiBzdGF0ZS5wcF9tYXJrX3RhZ3MgdGhlblxuICAgIGxldCB0b2tlbiA9IFBwX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuOyBsZW5ndGggPSAwIH1cblxuXG4oKiBDbG9zZSBhIHRhZywgcG9wcGluZyBpdCBmcm9tIHRoZSB0YWcgc3RhY2suICopXG5sZXQgcHBfY2xvc2Vfc3RhZyBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfY2xvc2VfdGFnOyBsZW5ndGggPSAwIH07XG4gIGlmIHN0YXRlLnBwX3ByaW50X3RhZ3MgdGhlblxuICAgIG1hdGNoIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfdGFnX3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gbW9yZSB0YWcgdG8gY2xvc2UuICopXG4gICAgfCBTb21lIHRhZ19uYW1lIC0+XG4gICAgICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgdGFnX25hbWVcblxubGV0IHBwX29wZW5fdGFnIHN0YXRlIHMgPSBwcF9vcGVuX3N0YWcgc3RhdGUgKFN0cmluZ190YWcgcylcbmxldCBwcF9jbG9zZV90YWcgc3RhdGUgKCkgPSBwcF9jbG9zZV9zdGFnIHN0YXRlICgpXG5cbmxldCBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiID0gc3RhdGUucHBfcHJpbnRfdGFncyA8LSBiXG5sZXQgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiID0gc3RhdGUucHBfbWFya190YWdzIDwtIGJcbmxldCBwcF9nZXRfcHJpbnRfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX3ByaW50X3RhZ3NcbmxldCBwcF9nZXRfbWFya190YWdzIHN0YXRlICgpID0gc3RhdGUucHBfbWFya190YWdzXG5sZXQgcHBfc2V0X3RhZ3Mgc3RhdGUgYiA9XG4gIHBwX3NldF9wcmludF90YWdzIHN0YXRlIGI7IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYlxuXG5cbigqIEhhbmRsaW5nIHRhZyBoYW5kbGluZyBmdW5jdGlvbnM6IGdldC9zZXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUgKCkgPSB7XG4gIG1hcmtfb3Blbl9zdGFnID0gc3RhdGUucHBfbWFya19vcGVuX3RhZztcbiAgbWFya19jbG9zZV9zdGFnID0gc3RhdGUucHBfbWFya19jbG9zZV90YWc7XG4gIHByaW50X29wZW5fc3RhZyA9IHN0YXRlLnBwX3ByaW50X29wZW5fdGFnO1xuICBwcmludF9jbG9zZV9zdGFnID0gc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnO1xufVxuXG5cbmxldCBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3N0YWcgPSBtb3Q7XG4gICAgIG1hcmtfY2xvc2Vfc3RhZyA9IG1jdDtcbiAgICAgcHJpbnRfb3Blbl9zdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV9zdGFnID0gcGN0O1xuICB9ID1cbiAgc3RhdGUucHBfbWFya19vcGVuX3RhZyA8LSBtb3Q7XG4gIHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIDwtIG1jdDtcbiAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgPC0gcG90O1xuICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgPC0gcGN0XG5cblxuKCogSW5pdGlhbGl6ZSBwcmV0dHktcHJpbnRlci4gKilcbmxldCBwcF9yaW5pdCBzdGF0ZSA9XG4gIHBwX2NsZWFyX3F1ZXVlIHN0YXRlO1xuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhdGUucHBfc2Nhbl9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfZm9ybWF0X3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF90Ym94X3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF90YWdfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX21hcmtfc3RhY2s7XG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIDA7XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gMDtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9tYXJnaW47XG4gIHBwX29wZW5fc3lzX2JveCBzdGF0ZVxuXG5sZXQgY2xlYXJfdGFnX3N0YWNrIHN0YXRlID1cbiAgU3RhY2suaXRlciAoZnVuIF8gLT4gcHBfY2xvc2VfdGFnIHN0YXRlICgpKSBzdGF0ZS5wcF90YWdfc3RhY2tcblxuXG4oKiBGbHVzaGluZyBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSBiID1cbiAgY2xlYXJfdGFnX3N0YWNrIHN0YXRlO1xuICB3aGlsZSBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSBkb1xuICAgIHBwX2Nsb3NlX2JveCBzdGF0ZSAoKVxuICBkb25lO1xuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBwcF9pbmZpbml0eTtcbiAgYWR2YW5jZV9sZWZ0IHN0YXRlO1xuICBpZiBiIHRoZW4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHBwX3Jpbml0IHN0YXRlXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBmb3JtYXQgdmFsdWVzIGFuZCB1c2UgYm94ZXMuXG5cbiopXG5cbigqIFRvIGZvcm1hdCBhIHN0cmluZy4gKilcbmxldCBwcF9wcmludF9hc19zaXplIHN0YXRlIHNpemUgcyA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHNcblxuXG5sZXQgcHBfcHJpbnRfYXMgc3RhdGUgaXNpemUgcyA9XG4gIHBwX3ByaW50X2FzX3NpemUgc3RhdGUgKFNpemUub2ZfaW50IGlzaXplKSBzXG5cblxubGV0IHBwX3ByaW50X3N0cmluZyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG5sZXQgcHBfcHJpbnRfYnl0ZXMgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChCeXRlcy5sZW5ndGggcykgKEJ5dGVzLnRvX3N0cmluZyBzKVxuXG4oKiBUbyBmb3JtYXQgYW4gaW50ZWdlci4gKilcbmxldCBwcF9wcmludF9pbnQgc3RhdGUgaSA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoSW50LnRvX3N0cmluZyBpKVxuXG4oKiBUbyBmb3JtYXQgYSBmbG9hdC4gKilcbmxldCBwcF9wcmludF9mbG9hdCBzdGF0ZSBmID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfZmxvYXQgZilcblxuKCogVG8gZm9ybWF0IGEgYm9vbGVhbi4gKilcbmxldCBwcF9wcmludF9ib29sIHN0YXRlIGIgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9ib29sIGIpXG5cbigqIFRvIGZvcm1hdCBhIGNoYXIuICopXG5sZXQgcHBfcHJpbnRfY2hhciBzdGF0ZSBjID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgMSAoU3RyaW5nLm1ha2UgMSBjKVxuXG5cbigqIE9wZW5pbmcgYm94ZXMuICopXG5sZXQgcHBfb3Blbl9oYm94IHN0YXRlICgpID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaGJveFxuYW5kIHBwX29wZW5fdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX3Zib3hcblxuYW5kIHBwX29wZW5faHZib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9odmJveFxuYW5kIHBwX29wZW5faG92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaG92Ym94XG5hbmQgcHBfb3Blbl9ib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ib3hcblxuXG4oKiBQcmludGluZyBxdWV1ZWQgdGV4dC5cblxuICAgW3BwX3ByaW50X2ZsdXNoXSBwcmludHMgYWxsIHBlbmRpbmcgaXRlbXMgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGFuZFxuICAgdGhlbiBmbHVzaGVzIHRoZSBsb3cgbGV2ZWwgb3V0cHV0IGRldmljZSBvZiB0aGUgZm9ybWF0dGVyIHRvIGFjdHVhbGx5XG4gICBkaXNwbGF5IHByaW50aW5nIG1hdGVyaWFsLlxuXG4gICBbcHBfcHJpbnRfbmV3bGluZV0gYmVoYXZlcyBhcyBbcHBfcHJpbnRfZmx1c2hdIGFmdGVyIHByaW50aW5nIGFuIGFkZGl0aW9uYWxcbiAgIG5ldyBsaW5lLiAqKVxubGV0IHBwX3ByaW50X25ld2xpbmUgc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSB0cnVlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcbmFuZCBwcF9wcmludF9mbHVzaCBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGZhbHNlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcblxuXG4oKiBUbyBnZXQgYSBuZXdsaW5lIHdoZW4gb25lIGRvZXMgbm90IHdhbnQgdG8gY2xvc2UgdGhlIGN1cnJlbnQgYm94LiAqKVxubGV0IHBwX2ZvcmNlX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIFRvIGZvcm1hdCBzb21ldGhpbmcsIG9ubHkgaW4gY2FzZSB0aGUgbGluZSBoYXMganVzdCBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9wcmludF9pZl9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlXG4gICAgICB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfaWZfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogR2VuZXJhbGl6ZWQgYnJlYWsgaGludCB0aGF0IGFsbG93cyBwcmludGluZyBzdHJpbmdzIGJlZm9yZS9hZnRlclxuICAgc2FtZS1saW5lIG9mZnNldCAod2lkdGgpIG9yIG5ldy1saW5lIG9mZnNldCAqKVxubGV0IHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZSB+Zml0cyB+YnJlYWtzID1cbiAgbGV0IGJlZm9yZSwgd2lkdGgsIGFmdGVyID0gZml0cyBpblxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCB0b2tlbiA9IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gaW5cbiAgICBsZXQgbGVuZ3RoID0gU3RyaW5nLmxlbmd0aCBiZWZvcmUgKyB3aWR0aCArIFN0cmluZy5sZW5ndGggYWZ0ZXIgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG4oKiBQcmludGluZyBicmVhayBoaW50czpcbiAgIEEgYnJlYWsgaGludCBpbmRpY2F0ZXMgd2hlcmUgYSBib3ggbWF5IGJlIGJyb2tlbi5cbiAgIElmIGxpbmUgaXMgYnJva2VuIHRoZW4gb2Zmc2V0IGlzIGFkZGVkIHRvIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudFxuICAgYm94IGVsc2UgKHRoZSB2YWx1ZSBvZikgd2lkdGggYmxhbmtzIGFyZSBwcmludGVkLiAqKVxubGV0IHBwX3ByaW50X2JyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZVxuICAgIH5maXRzOihcIlwiLCB3aWR0aCwgXCJcIikgfmJyZWFrczooXCJcIiwgb2Zmc2V0LCBcIlwiKVxuXG5cbigqIFByaW50IGEgc3BhY2UgOlxuICAgYSBzcGFjZSBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgYSBzaW5nbGUgc3BhY2UgaWYgdGhlIGJyZWFrIGRvZXMgbm90XG4gICBzcGxpdCB0aGUgbGluZTtcbiAgIGEgY3V0IGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBub3RoaW5nIGlmIHRoZSBicmVhayBkb2VzIG5vdCBzcGxpdCB0aGVcbiAgIGxpbmUuICopXG5sZXQgcHBfcHJpbnRfc3BhY2Ugc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAxIDBcbmFuZCBwcF9wcmludF9jdXQgc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAwIDBcblxuXG4oKiBUYWJ1bGF0aW9uIGJveGVzLiAqKVxubGV0IHBwX29wZW5fdGJveCBzdGF0ZSAoKSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS56ZXJvIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJlZ2luIChQcF90Ym94IChyZWYgW10pKTsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKiBDbG9zZSBhIHRhYnVsYXRpb24gYm94LiAqKVxubGV0IHBwX2Nsb3NlX3Rib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfdGVuZDsgbGVuZ3RoID0gMCB9IGluXG4gICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtO1xuICAgICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggLSAxXG4gIGVuZFxuXG5cbigqIFByaW50IGEgdGFidWxhdGlvbiBicmVhay4gKilcbmxldCBwcF9wcmludF90YnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YnJlYWsgKHdpZHRoLCBvZmZzZXQpOyBsZW5ndGggPSB3aWR0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG5cbmxldCBwcF9wcmludF90YWIgc3RhdGUgKCkgPSBwcF9wcmludF90YnJlYWsgc3RhdGUgMCAwXG5cbmxldCBwcF9zZXRfdGFiIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfc3RhYjsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gY29udHJvbCB0aGUgcHJldHR5LXByaW50ZXJzXG5cbiopXG5cbigqIFNldF9tYXhfYm94ZXMuICopXG5sZXQgcHBfc2V0X21heF9ib3hlcyBzdGF0ZSBuID0gaWYgbiA+IDEgdGhlbiBzdGF0ZS5wcF9tYXhfYm94ZXMgPC0gblxuXG4oKiBUbyBrbm93IHRoZSBjdXJyZW50IG1heGltdW0gbnVtYmVyIG9mIGJveGVzIGFsbG93ZWQuICopXG5sZXQgcHBfZ2V0X21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG5sZXQgcHBfb3Zlcl9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9jdXJyX2RlcHRoID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbigqIEVsbGlwc2lzLiAqKVxubGV0IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0YXRlIHMgPSBzdGF0ZS5wcF9lbGxpcHNpcyA8LSBzXG5hbmQgcHBfZ2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRvIHNldCB0aGUgbWFyZ2luIG9mIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX2xpbWl0IG4gPVxuICBpZiBuIDwgcHBfaW5maW5pdHkgdGhlbiBuIGVsc2UgcHJlZCBwcF9pbmZpbml0eVxuXG5cbigqIEludGVybmFsIHByZXR0eS1wcmludGVyIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWluX3NwYWNlX2xlZnQgPC0gbjtcbiAgICBzdGF0ZS5wcF9tYXhfaW5kZW50IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3Jpbml0IHN0YXRlXG5cblxuKCogSW5pdGlhbGx5LCB3ZSBoYXZlIDpcbiAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdCwgYW5kXG4gICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luLiAqKVxubGV0IHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG4gPVxuICBpZiBuID4gMSB0aGVuXG4gICAgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIChzdGF0ZS5wcF9tYXJnaW4gLSBuKVxuXG5cbmxldCBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9pbmRlbnRcblxubGV0IHBwX3NldF9tYXJnaW4gc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWFyZ2luIDwtIG47XG4gICAgbGV0IG5ld19tYXhfaW5kZW50ID1cbiAgICAgICgqIFRyeSB0byBtYWludGFpbiBtYXhfaW5kZW50IHRvIGl0cyBhY3R1YWwgdmFsdWUuICopXG4gICAgICBpZiBzdGF0ZS5wcF9tYXhfaW5kZW50IDw9IHN0YXRlLnBwX21hcmdpblxuICAgICAgdGhlbiBzdGF0ZS5wcF9tYXhfaW5kZW50IGVsc2VcbiAgICAgICgqIElmIHBvc3NpYmxlIG1haW50YWluIHBwX21pbl9zcGFjZV9sZWZ0IHRvIGl0cyBhY3R1YWwgdmFsdWUsXG4gICAgICAgICBpZiB0aGlzIGxlYWRzIHRvIGEgdG9vIHNtYWxsIG1heF9pbmRlbnQsIHRha2UgaGFsZiBvZiB0aGVcbiAgICAgICAgIG5ldyBtYXJnaW4sIGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiAxLiAqKVxuICAgICAgIEludC5tYXggKEludC5tYXggKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0KVxuICAgICAgICAgICAgICAgIChzdGF0ZS5wcF9tYXJnaW4gLyAyKSkgMSBpblxuICAgICgqIFJlYnVpbGQgaW52YXJpYW50cy4gKilcbiAgICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuZXdfbWF4X2luZGVudFxuXG5cbigqKiBHZW9tZXRyeSBmdW5jdGlvbnMgYW5kIHR5cGVzICopXG50eXBlIGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OmludDsgbWFyZ2luOiBpbnR9XG5cbmxldCB2YWxpZGF0ZV9nZW9tZXRyeSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIGlmIG1heF9pbmRlbnQgPCAyIHRoZW5cbiAgICBFcnJvciBcIm1heF9pbmRlbnQgPCAyXCJcbiAgZWxzZSBpZiBtYXJnaW4gPD0gbWF4X2luZGVudCB0aGVuXG4gICAgRXJyb3IgXCJtYXJnaW4gPD0gbWF4X2luZGVudFwiXG4gIGVsc2UgT2sgKClcblxubGV0IGNoZWNrX2dlb21ldHJ5IGdlb21ldHJ5ID1cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IE9rICgpIC0+IHRydWVcbiAgfCBFcnJvciBfIC0+IGZhbHNlXG5cbmxldCBwcF9nZXRfbWFyZ2luIHN0YXRlICgpID0gc3RhdGUucHBfbWFyZ2luXG5cbmxldCBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIHBwX3NldF9tYXJnaW4gc3RhdGUgbWFyZ2luO1xuICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBtYXhfaW5kZW50O1xuICAoKVxuXG5sZXQgcHBfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBtc2cgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCAoXCJGb3JtYXQucHBfc2V0X2dlb21ldHJ5OiBcIiBeIG1zZykpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIF9tc2cgLT5cbiAgICAgKClcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgPVxuICB7IG1hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RhdGUgKCk7IG1heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSB9XG5cbmxldCBwcF91cGRhdGVfZ2VvbWV0cnkgc3RhdGUgdXBkYXRlID1cbiAgbGV0IGdlb21ldHJ5ID0gcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpIGluXG4gIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlICh1cGRhdGUgZ2VvbWV0cnkpXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUge1xuICAgICAgb3V0X3N0cmluZyA9IGY7XG4gICAgICBvdXRfZmx1c2ggPSBnO1xuICAgICAgb3V0X25ld2xpbmUgPSBoO1xuICAgICAgb3V0X3NwYWNlcyA9IGk7XG4gICAgICBvdXRfaW5kZW50ID0gajtcbiAgICB9ID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGpcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgb3V0X3N0cmluZyA9IHN0YXRlLnBwX291dF9zdHJpbmc7XG4gIG91dF9mbHVzaCA9IHN0YXRlLnBwX291dF9mbHVzaDtcbiAgb3V0X25ld2xpbmUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZTtcbiAgb3V0X3NwYWNlcyA9IHN0YXRlLnBwX291dF9zcGFjZXM7XG4gIG91dF9pbmRlbnQgPSBzdGF0ZS5wcF9vdXRfaW5kZW50O1xufVxuXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgc3RyaW5nIG91dHB1dCBhbmQgZmx1c2ggZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSBmIGcgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7IHN0YXRlLnBwX291dF9mbHVzaCA8LSBnXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoKVxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9uZXdsaW5lIHN0YXRlICgpID0gc3RhdGUucHBfb3V0X3N0cmluZyBcIlxcblwiIDAgIDFcblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IHNwYWNlcy4gKilcbmxldCBibGFua19saW5lID0gU3RyaW5nLm1ha2UgODAgJyAnXG5sZXQgcmVjIGRpc3BsYXlfYmxhbmtzIHN0YXRlIG4gPVxuICBpZiBuID4gMCB0aGVuXG4gIGlmIG4gPD0gODAgdGhlbiBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCBuIGVsc2VcbiAgYmVnaW5cbiAgICBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCA4MDtcbiAgICBkaXNwbGF5X2JsYW5rcyBzdGF0ZSAobiAtIDgwKVxuICBlbmRcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfaW5kZW50ID0gZGlzcGxheV9ibGFua3NcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zIGFzIHByaW50aW5nIHRvIGEgZ2l2ZW5cbiAgIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgc3RhdGUgb2MgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIG91dHB1dF9zdWJzdHJpbmcgb2M7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSAoZnVuICgpIC0+IGZsdXNoIG9jKTtcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHN0YXRlXG5cbigqXG5cbiAgRGVmaW5pbmcgc3BlY2lmaWMgZm9ybWF0dGVyc1xuXG4qKVxuXG5sZXQgZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8XCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcbmxldCBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8L1wiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5cbmxldCBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnID0gaWdub3JlXG5sZXQgZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWcgPSBpZ25vcmVcblxuKCogQnVpbGRpbmcgYSBmb3JtYXR0ZXIgZ2l2ZW4gaXRzIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuXG4gICBPdGhlciBmaWVsZHMgZ2V0IHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZXMuICopXG5sZXQgcHBfbWFrZV9mb3JtYXR0ZXIgZiBnIGggaSBqID1cbiAgKCogVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGZvcm1hdHRlciBjb250YWlucyBhIGR1bW15IGJveC4gKilcbiAgbGV0IHBwX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gIGxldCBzeXNfdG9rID1cbiAgICB7IHNpemUgPSBTaXplLnVua25vd247IHRva2VuID0gUHBfYmVnaW4gKDAsIFBwX2hvdmJveCk7IGxlbmd0aCA9IDAgfSBpblxuICBRdWV1ZS5hZGQgc3lzX3RvayBwcF9xdWV1ZTtcbiAgbGV0IHNjYW5fc3RhY2sgPSBTdGFjay5jcmVhdGUgKCkgaW5cbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHNjYW5fc3RhY2s7XG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gMTsgcXVldWVfZWxlbSA9IHN5c190b2sgfSBzY2FuX3N0YWNrO1xuICBsZXQgcHBfbWFyZ2luID0gNzhcbiAgYW5kIHBwX21pbl9zcGFjZV9sZWZ0ID0gMTAgaW5cbiAge1xuICAgIHBwX3NjYW5fc3RhY2sgPSBzY2FuX3N0YWNrO1xuICAgIHBwX2Zvcm1hdF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90Ym94X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3RhZ19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJrX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmdpbiA9IHBwX21hcmdpbjtcbiAgICBwcF9taW5fc3BhY2VfbGVmdCA9IHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luO1xuICAgIHBwX2N1cnJlbnRfaW5kZW50ID0gMDtcbiAgICBwcF9pc19uZXdfbGluZSA9IHRydWU7XG4gICAgcHBfbGVmdF90b3RhbCA9IDE7XG4gICAgcHBfcmlnaHRfdG90YWwgPSAxO1xuICAgIHBwX2N1cnJfZGVwdGggPSAxO1xuICAgIHBwX21heF9ib3hlcyA9IG1heF9pbnQ7XG4gICAgcHBfZWxsaXBzaXMgPSBcIi5cIjtcbiAgICBwcF9vdXRfc3RyaW5nID0gZjtcbiAgICBwcF9vdXRfZmx1c2ggPSBnO1xuICAgIHBwX291dF9uZXdsaW5lID0gaDtcbiAgICBwcF9vdXRfc3BhY2VzID0gaTtcbiAgICBwcF9vdXRfaW5kZW50ID0gajtcbiAgICBwcF9wcmludF90YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya190YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya19vcGVuX3RhZyA9IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZztcbiAgICBwcF9tYXJrX2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWc7XG4gICAgcHBfcHJpbnRfb3Blbl90YWcgPSBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnO1xuICAgIHBwX3ByaW50X2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnO1xuICAgIHBwX3F1ZXVlID0gcHBfcXVldWU7XG4gIH1cblxuXG4oKiBCdWlsZCBhIGZvcm1hdHRlciBvdXQgb2YgaXRzIG91dCBmdW5jdGlvbnMuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9mdW5jdGlvbnMgb3V0X2Z1bnMgPVxuICBwcF9tYWtlX2Zvcm1hdHRlclxuICAgIG91dF9mdW5zLm91dF9zdHJpbmdcbiAgICBvdXRfZnVucy5vdXRfZmx1c2hcbiAgICBvdXRfZnVucy5vdXRfbmV3bGluZVxuICAgIG91dF9mdW5zLm91dF9zcGFjZXNcbiAgICBvdXRfZnVucy5vdXRfaW5kZW50XG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3aXRoIGRlZmF1bHQgZnVuY3Rpb25zIHRvIG91dHB1dCBzcGFjZXMsXG4gIGluZGVudGF0aW9uLCBhbmQgbmV3IGxpbmVzLiAqKVxubGV0IG1ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCA9XG4gIGxldCBwcGYgPSBwcF9tYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggaWdub3JlIGlnbm9yZSBpZ25vcmUgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBwcGZcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbUGVydmFzaXZlLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgPVxuICBtYWtlX2Zvcm1hdHRlciAob3V0cHV0X3N1YnN0cmluZyBvYykgKGZ1biAoKSAtPiBmbHVzaCBvYylcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbQnVmZmVyLnRdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9idWZmZXIgYiA9XG4gIG1ha2VfZm9ybWF0dGVyIChCdWZmZXIuYWRkX3N1YnN0cmluZyBiKSBpZ25vcmVcblxuXG4oKiBBbGxvY2F0aW5nIGJ1ZmZlciBmb3IgcHJldHR5LXByaW50aW5nIHB1cnBvc2VzLlxuICAgRGVmYXVsdCBidWZmZXIgc2l6ZSBpcyBwcF9idWZmZXJfc2l6ZSBvciA1MTIuXG4qKVxubGV0IHBwX2J1ZmZlcl9zaXplID0gNTEyXG5sZXQgcHBfbWFrZV9idWZmZXIgKCkgPSBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplXG5cbigqIFRoZSBzdGFuZGFyZCAoc2hhcmVkKSBidWZmZXIuICopXG5sZXQgc3RkYnVmID0gcHBfbWFrZV9idWZmZXIgKClcblxuKCogUHJlZGVmaW5lZCBmb3JtYXR0ZXJzIHN0YW5kYXJkIGZvcm1hdHRlciB0byBwcmludFxuICAgdG8gW1N0ZGxpYi5zdGRvdXRdLCBbU3RkbGliLnN0ZGVycl0sIGFuZCB7IXN0ZGJ1Zn0uICopXG5sZXQgc3RkX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3Rkb3V0XG5hbmQgZXJyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3RkZXJyXG5hbmQgc3RyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9idWZmZXIgc3RkYnVmXG5cblxuKCogW2ZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZl0gZmx1c2hlcyBmb3JtYXR0ZXIgW3BwZl0sXG4gICB0aGVuIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBbYnVmXSB0aGF0IGlzIHJlc2V0LlxuICAgRm9ybWF0dGVyIFtwcGZdIGlzIHN1cHBvc2VkIHRvIHByaW50IHRvIGJ1ZmZlciBbYnVmXSwgb3RoZXJ3aXNlIHRoaXNcbiAgIGZ1bmN0aW9uIGlzIG5vdCByZWFsbHkgdXNlZnVsLiAqKVxubGV0IGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZiA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZTtcbiAgbGV0IHMgPSBCdWZmZXIuY29udGVudHMgYnVmIGluXG4gIEJ1ZmZlci5yZXNldCBidWY7XG4gIHNcblxuXG4oKiBGbHVzaCBbc3RyX2Zvcm1hdHRlcl0gYW5kIGdldCB0aGUgY29udGVudHMgb2YgW3N0ZGJ1Zl0uICopXG5sZXQgZmx1c2hfc3RyX2Zvcm1hdHRlciAoKSA9IGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgc3RkYnVmIHN0cl9mb3JtYXR0ZXJcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nXG4qKVxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmcgaXMgcHJldHR5LXByaW50aW5nIHdpdGggbm8gbG93IGxldmVsIG91dHB1dC5cblxuICBXaGVuIHVzaW5nIGEgc3ltYm9saWMgZm9ybWF0dGVyLCBhbGwgcmVndWxhciBwcmV0dHktcHJpbnRpbmcgYWN0aXZpdGllc1xuICBvY2N1ciBidXQgb3V0cHV0IG1hdGVyaWFsIGlzIHN5bWJvbGljIGFuZCBzdG9yZWQgaW4gYSBidWZmZXIgb2Ygb3V0cHV0XG4gIGl0ZW1zLiBBdCB0aGUgZW5kIG9mIHByZXR0eS1wcmludGluZywgZmx1c2hpbmcgdGhlIG91dHB1dCBidWZmZXIgYWxsb3dzXG4gIHBvc3QtcHJvY2Vzc2luZyBvZiBzeW1ib2xpYyBvdXRwdXQgYmVmb3JlIGxvdyBsZXZlbCBvdXRwdXQgb3BlcmF0aW9ucy5cbiopXG5cbnR5cGUgc3ltYm9saWNfb3V0cHV0X2l0ZW0gPVxuICB8IE91dHB1dF9mbHVzaFxuICB8IE91dHB1dF9uZXdsaW5lXG4gIHwgT3V0cHV0X3N0cmluZyBvZiBzdHJpbmdcbiAgfCBPdXRwdXRfc3BhY2VzIG9mIGludFxuICB8IE91dHB1dF9pbmRlbnQgb2YgaW50XG5cbnR5cGUgc3ltYm9saWNfb3V0cHV0X2J1ZmZlciA9IHtcbiAgbXV0YWJsZSBzeW1ib2xpY19vdXRwdXRfY29udGVudHMgOiBzeW1ib2xpY19vdXRwdXRfaXRlbSBsaXN0O1xufVxuXG5sZXQgbWFrZV9zeW1ib2xpY19vdXRwdXRfYnVmZmVyICgpID1cbiAgeyBzeW1ib2xpY19vdXRwdXRfY29udGVudHMgPSBbXSB9XG5cbmxldCBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gW11cblxubGV0IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIExpc3QucmV2IHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHNcblxubGV0IGZsdXNoX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IGl0ZW1zID0gZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iIGluXG4gIGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iO1xuICBpdGVtc1xuXG5sZXQgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBpdGVtID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBpdGVtIDo6IHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHNcblxubGV0IGZvcm1hdHRlcl9vZl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBzeW1ib2xpY19mbHVzaCBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X2ZsdXNoXG4gIGFuZCBzeW1ib2xpY19uZXdsaW5lIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfbmV3bGluZVxuICBhbmQgc3ltYm9saWNfc3RyaW5nIHNvYiBzIGkgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3N0cmluZyAoU3RyaW5nLnN1YiBzIGkgbikpXG4gIGFuZCBzeW1ib2xpY19zcGFjZXMgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zcGFjZXMgbilcbiAgYW5kIHN5bWJvbGljX2luZGVudCBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X2luZGVudCBuKSBpblxuXG4gIGxldCBmID0gc3ltYm9saWNfc3RyaW5nIHNvYlxuICBhbmQgZyA9IHN5bWJvbGljX2ZsdXNoIHNvYlxuICBhbmQgaCA9IHN5bWJvbGljX25ld2xpbmUgc29iXG4gIGFuZCBpID0gc3ltYm9saWNfc3BhY2VzIHNvYlxuICBhbmQgaiA9IHN5bWJvbGljX2luZGVudCBzb2IgaW5cbiAgcHBfbWFrZV9mb3JtYXR0ZXIgZiBnIGggaSBqXG5cbigqXG5cbiAgQmFzaWMgZnVuY3Rpb25zIG9uIHRoZSAnc3RhbmRhcmQnIGZvcm1hdHRlclxuICAodGhlIGZvcm1hdHRlciB0aGF0IHByaW50cyB0byBbU3RkbGliLnN0ZG91dF0pLlxuXG4qKVxuXG5sZXQgb3Blbl9oYm94ID0gcHBfb3Blbl9oYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3Zib3ggPSBwcF9vcGVuX3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faHZib3ggPSBwcF9vcGVuX2h2Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2hvdmJveCA9IHBwX29wZW5faG92Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2JveCA9IHBwX29wZW5fYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV9ib3ggPSBwcF9jbG9zZV9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdGFnID0gcHBfb3Blbl90YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3RhZyA9IHBwX2Nsb3NlX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9zdGFnID0gcHBfb3Blbl9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV9zdGFnID0gcHBfY2xvc2Vfc3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYXMgPSBwcF9wcmludF9hcyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfc3RyaW5nID0gcHBfcHJpbnRfc3RyaW5nIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9ieXRlcyA9IHBwX3ByaW50X2J5dGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9pbnQgPSBwcF9wcmludF9pbnQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Zsb2F0ID0gcHBfcHJpbnRfZmxvYXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2NoYXIgPSBwcF9wcmludF9jaGFyIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9ib29sID0gcHBfcHJpbnRfYm9vbCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYnJlYWsgPSBwcF9wcmludF9icmVhayBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY3V0ID0gcHBfcHJpbnRfY3V0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zcGFjZSA9IHBwX3ByaW50X3NwYWNlIHN0ZF9mb3JtYXR0ZXJcbmFuZCBmb3JjZV9uZXdsaW5lID0gcHBfZm9yY2VfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmx1c2ggPSBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfbmV3bGluZSA9IHBwX3ByaW50X25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2lmX25ld2xpbmUgPSBwcF9wcmludF9pZl9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIG9wZW5fdGJveCA9IHBwX29wZW5fdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGJveCA9IHBwX2Nsb3NlX3Rib3ggc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3RicmVhayA9IHBwX3ByaW50X3RicmVhayBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfdGFiID0gcHBfc2V0X3RhYiBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGFiID0gcHBfcHJpbnRfdGFiIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXJnaW4gPSBwcF9zZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2luZGVudCA9IHBwX3NldF9tYXhfaW5kZW50IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9nZW9tZXRyeSA9IHBwX3NldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgc2FmZV9zZXRfZ2VvbWV0cnkgPSBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2dlb21ldHJ5ID0gcHBfZ2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCB1cGRhdGVfZ2VvbWV0cnkgPSBwcF91cGRhdGVfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21heF9ib3hlcyA9IHBwX3NldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfYm94ZXMgPSBwcF9nZXRfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvdmVyX21heF9ib3hlcyA9IHBwX292ZXJfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9lbGxpcHNpc190ZXh0ID0gcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9lbGxpcHNpc190ZXh0ID0gcHBfZ2V0X2VsbGlwc2lzX3RleHQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfcHJpbnRfdGFncyA9XG4gIHBwX3NldF9wcmludF90YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfcHJpbnRfdGFncyA9XG4gIHBwX2dldF9wcmludF90YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfbWFya190YWdzID1cbiAgcHBfc2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21hcmtfdGFncyA9XG4gIHBwX2dldF9tYXJrX3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF90YWdzID1cbiAgcHBfc2V0X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuXG5cbigqIENvbnZlbmllbmNlIGZ1bmN0aW9ucyAqKVxuXG4oKiBUbyBmb3JtYXQgYSBsaXN0ICopXG5sZXQgcmVjIHBwX3ByaW50X2xpc3QgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAoKVxuICB8IFt2XSAtPiBwcF92IHBwZiB2XG4gIHwgdiA6OiB2cyAtPlxuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfc2VwIHBwZiAoKTtcbiAgICBwcF9wcmludF9saXN0IH5wcF9zZXAgcHBfdiBwcGYgdnNcblxuKCogVG8gZm9ybWF0IGEgc2VxdWVuY2UgKilcbmxldCByZWMgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxXG5cbmxldCBwcF9wcmludF9zZXEgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiAoKVxuICB8IFNlcS5Db25zICh2LCBzZXEpIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxuKCogVG8gZm9ybWF0IGZyZWUtZmxvd2luZyB0ZXh0ICopXG5sZXQgcHBfcHJpbnRfdGV4dCBwcGYgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IGxlZnQgPSByZWYgMCBpblxuICBsZXQgcmlnaHQgPSByZWYgMCBpblxuICBsZXQgZmx1c2ggKCkgPVxuICAgIHBwX3ByaW50X3N0cmluZyBwcGYgKFN0cmluZy5zdWIgcyAhbGVmdCAoIXJpZ2h0IC0gIWxlZnQpKTtcbiAgICBpbmNyIHJpZ2h0OyBsZWZ0IDo9ICFyaWdodDtcbiAgaW5cbiAgd2hpbGUgKCFyaWdodCA8PiBsZW4pIGRvXG4gICAgbWF0Y2ggcy5bIXJpZ2h0XSB3aXRoXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgIGZsdXNoICgpO1xuICAgICAgICBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICAgICAgfCAnICcgLT5cbiAgICAgICAgZmx1c2ggKCk7IHBwX3ByaW50X3NwYWNlIHBwZiAoKVxuICAgICAgKCogdGhlcmUgaXMgbm8gc3BlY2lmaWMgc3VwcG9ydCBmb3IgJ1xcdCdcbiAgICAgICAgIGFzIGl0IGlzIHVuY2xlYXIgd2hhdCBhIHJpZ2h0IHNlbWFudGljcyB3b3VsZCBiZSAqKVxuICAgICAgfCBfIC0+IGluY3IgcmlnaHRcbiAgZG9uZTtcbiAgaWYgIWxlZnQgPD4gbGVuIHRoZW4gZmx1c2ggKClcblxubGV0IHBwX3ByaW50X29wdGlvbiA/KG5vbmUgPSBmdW4gXyAoKSAtPiAoKSkgcHBfdiBwcGYgPSBmdW5jdGlvblxufCBOb25lIC0+IG5vbmUgcHBmICgpXG58IFNvbWUgdiAtPiBwcF92IHBwZiB2XG5cbmxldCBwcF9wcmludF9yZXN1bHQgfm9rIH5lcnJvciBwcGYgPSBmdW5jdGlvblxufCBPayB2IC0+IG9rIHBwZiB2XG58IEVycm9yIGUgLT4gZXJyb3IgcHBmIGVcblxubGV0IHBwX3ByaW50X2VpdGhlciB+bGVmdCB+cmlnaHQgcHBmID0gZnVuY3Rpb25cbnwgRWl0aGVyLkxlZnQgbCAtPiBsZWZ0IHBwZiBsXG58IEVpdGhlci5SaWdodCByIC0+IHJpZ2h0IHBwZiByXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmxldCBjb21wdXRlX3RhZyBvdXRwdXQgdGFnX2FjYyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDE2IGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBvdXRwdXQgcHBmIHRhZ19hY2M7XG4gIHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgbGV0IGxlbiA9IEJ1ZmZlci5sZW5ndGggYnVmIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBCdWZmZXIuY29udGVudHMgYnVmXG4gIGVsc2UgQnVmZmVyLnN1YiBidWYgMSAobGVuIC0gMilcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIERlZmluaW5nIGNvbnRpbnVhdGlvbnMgdG8gYmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBvZlxuICBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuXG5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG4oKiBJbnRlcnByZXQgYSBmb3JtYXR0aW5nIGVudGl0eSBvbiBhIGZvcm1hdHRlci4gKilcbmxldCBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGZtdGluZ19saXQgPSBtYXRjaCBmbXRpbmdfbGl0IHdpdGhcbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAgICAgIC0+IHBwX2Nsb3NlX2JveCBwcGYgKClcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAgICAgIC0+IHBwX2Nsb3NlX3RhZyBwcGYgKClcbiAgfCBCcmVhayAoXywgd2lkdGgsIG9mZnNldCkgIC0+IHBwX3ByaW50X2JyZWFrIHBwZiB3aWR0aCBvZmZzZXRcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2ZsdXNoIHBwZiAoKVxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAgICAgIC0+IHBwX3ByaW50X25ld2xpbmUgcHBmICgpXG4gIHwgTWFnaWNfc2l6ZSAoXywgXykgICAgICAgICAtPiAoKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnJSdcbiAgfCBTY2FuX2luZGljIGMgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICdAJzsgcHBfcHJpbnRfY2hhciBwcGYgY1xuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBEaWZmZXIgZnJvbSBQcmludGYub3V0cHV0X2FjYyBieSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgZm9ybWF0dGluZy4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIHBwZiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChTdHJpbmcubWFrZSAxIGMpO1xuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZikgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZjtcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfb3Blbl9zdGFnIHBwZiAoU3RyaW5nX3RhZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSlcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgbGV0IChpbmRlbnQsIGJ0eSkgPSBvcGVuX2JveF9vZl9zdHJpbmcgKGNvbXB1dGVfdGFnIG91dHB1dF9hY2MgYWNjJykgaW5cbiAgICBwcF9vcGVuX2JveF9nZW4gcHBmIGluZGVudCBidHlcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9jaGFyIHBwZiBjO1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBmIHBwZjtcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIHBwZiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBEaWZmZXIgZnJvbSBQcmludGYuYnVmcHV0X2FjYyBieSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgZm9ybWF0dGluZy4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBzdHJwdXRfYWNjIHBwZiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChTdHJpbmcubWFrZSAxIGMpO1xuICB8IEFjY19kZWxheSAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGYpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKGYgKCkpO1xuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZjtcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfb3Blbl9zdGFnIHBwZiAoU3RyaW5nX3RhZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSlcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgbGV0IChpbmRlbnQsIGJ0eSkgPSBvcGVuX2JveF9vZl9zdHJpbmcgKGNvbXB1dGVfdGFnIHN0cnB1dF9hY2MgYWNjJykgaW5cbiAgICBwcF9vcGVuX2JveF9nZW4gcHBmIGluZGVudCBidHlcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9jaGFyIHBwZiBjO1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIChmICgpKTtcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBzdHJwdXRfYWNjIHBwZiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqXG5cbiAgRGVmaW5pbmcgW2ZwcmludGZdIGFuZCB2YXJpb3VzIGZsYXZvcnMgb2YgW2ZwcmludGZdLlxuXG4qKVxuXG5sZXQga2ZwcmludGYgayBwcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZlxuICAgIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgcHBmIGFjYzsgayBwcGYpXG4gICAgRW5kX29mX2FjYyBmbXRcblxuYW5kIGlrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIHBwZiBmbXRcblxubGV0IGlmcHJpbnRmIF9wcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgaWdub3JlICgpIGZtdFxuXG5sZXQgZnByaW50ZiBwcGYgPSBrZnByaW50ZiBpZ25vcmUgcHBmXG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkX2Zvcm1hdHRlciBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgZXJyX2Zvcm1hdHRlciBmbXRcblxubGV0IGtkcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZlxuICAgIChmdW4gYWNjIC0+IGsgKGZ1biBwcGYgLT4gb3V0cHV0X2FjYyBwcGYgYWNjKSlcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5sZXQgZHByaW50ZiBmbXQgPSBrZHByaW50ZiAoZnVuIGkgLT4gaSkgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgc3RycHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgc3ByaW50ZiBmbXQgPSBrc3ByaW50ZiBpZCBmbXRcblxubGV0IGthc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgb3V0cHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgYXNwcmludGYgZm10ID0ga2FzcHJpbnRmIGlkIGZtdFxuXG4oKiBGbHVzaGluZyBzdGFuZGFyZCBmb3JtYXR0ZXJzIGF0IGVuZCBvZiBleGVjdXRpb24uICopXG5cbmxldCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzICgpID1cbiAgcHBfcHJpbnRfZmx1c2ggc3RkX2Zvcm1hdHRlciAoKTtcbiAgcHBfcHJpbnRfZmx1c2ggZXJyX2Zvcm1hdHRlciAoKVxuXG5sZXQgKCkgPSBhdF9leGl0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnNcblxuKCpcblxuICBEZXByZWNhdGVkIHN0dWZmLlxuXG4qKVxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZVxuICAgIH5vdXQ6ZiB+Zmx1c2g6ZyB+bmV3bGluZTpoIH5zcGFjZXM6aSA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSBmIGc7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGg7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gaVxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgcHBfZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gsXG4gICBzdGF0ZS5wcF9vdXRfbmV3bGluZSwgc3RhdGUucHBfb3V0X3NwYWNlcylcblxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBnZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IGVycm9yIHByb25lIGZ1bmN0aW9uLCBkbyBub3QgdXNlIGl0LlxuICAgVGhpcyBmdW5jdGlvbiBpcyBuZWl0aGVyIGNvbXBvc2l0aW9uYWwgbm9yIGluY3JlbWVudGFsLCBzaW5jZSBpdCBmbHVzaGVzXG4gICB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYXQgZWFjaCBjYWxsLlxuICAgVG8gZ2V0IHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHksIGRlZmluZSBhIGZvcm1hdHRlciBvZiB5b3VyIG93biB3cml0aW5nIHRvXG4gICB0aGUgYnVmZmVyIGFyZ3VtZW50LCBhcyBpblxuICAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYlxuICAgdGhlbiB1c2UgeyFmcHJpbnRmIHBwZn0gYXMgdXN1YWwuICopXG5sZXQgYnByaW50ZiBiIChGb3JtYXQgKGZtdCwgXykgOiAoJ2EsIGZvcm1hdHRlciwgdW5pdCkgZm9ybWF0KSA9XG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID0gb3V0cHV0X2FjYyBwcGYgYWNjOyBwcF9mbHVzaF9xdWV1ZSBwcGYgZmFsc2UgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbigqIERlcHJlY2F0ZWQgOiBhbGlhcyBmb3Iga3NwcmludGYuICopXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG5cblxuXG4oKiBEZXByZWNhdGVkIHRhZyBmdW5jdGlvbnMgKilcblxudHlwZSBmb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3RhZyA6IHRhZyAtPiBzdHJpbmc7XG4gIG1hcmtfY2xvc2VfdGFnIDogdGFnIC0+IHN0cmluZztcbiAgcHJpbnRfb3Blbl90YWcgOiB0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2VfdGFnIDogdGFnIC0+IHVuaXQ7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl90YWcgPSBtb3Q7XG4gICAgIG1hcmtfY2xvc2VfdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2VfdGFnID0gcGN0O1xuICAgfSA9XG4gIGxldCBzdHJpbmdpZnkgZiBlID0gZnVuY3Rpb24gU3RyaW5nX3RhZyBzIC0+IGYgcyB8IF8gLT4gZSBpblxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIHN0cmluZ2lmeSBtb3QgXCJcIjtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gc3RyaW5naWZ5IG1jdCBcIlwiO1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBzdHJpbmdpZnkgcG90ICgpO1xuICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgPC0gc3RyaW5naWZ5IHBjdCAoKVxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIGZtdCAoKSA9XG4gIGxldCBmdW5zID0gcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBmbXQgKCkgaW5cbiAgbGV0IG1hcmtfb3Blbl90YWcgcyA9IGZ1bnMubWFya19vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IG1hcmtfY2xvc2VfdGFnIHMgPSBmdW5zLm1hcmtfY2xvc2Vfc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgcHJpbnRfb3Blbl90YWcgcyA9IGZ1bnMucHJpbnRfb3Blbl9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9jbG9zZV90YWcgcyA9IGZ1bnMucHJpbnRfY2xvc2Vfc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICB7bWFya19vcGVuX3RhZzsgbWFya19jbG9zZV90YWc7IHByaW50X29wZW5fdGFnOyBwcmludF9jbG9zZV90YWd9XG5cbmxldCBzZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgSGVscGVycyBmb3IgRm9ybWF0fSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG5pbmNsdWRlIEZvcm1hdFxuXG50eXBlIHQgPSBGb3JtYXQuZm9ybWF0dGVyXG50eXBlIC0nYSBwcmludGVyID0gdCAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBDb21iaW5hdG9yc30gKilcblxubGV0IHNpbGVudCBfZm10IF8gPSAoKVxubGV0IHJldHVybiBmbXRfc3RyIG91dCAoKSA9IEZvcm1hdC5mcHJpbnRmIG91dCBcIiUoJSlcIiBmbXRfc3RyXG5sZXQgdW5pdCBmbXQgKCkgPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCBcIigpXCJcbmxldCBpbnQgZm10IGkgPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCAoc3RyaW5nX29mX2ludCBpKVxubGV0IHN0cmluZyA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmdcbmxldCBib29sID0gRm9ybWF0LnBwX3ByaW50X2Jvb2xcbmxldCBmbG9hdDMgZm10IGYgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlLjNmXCIgZlxubGV0IGZsb2F0IGZtdCBmID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBmbXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IGNoYXIgPSBGb3JtYXQucHBfcHJpbnRfY2hhclxubGV0IGludDMyIGZtdCBuID0gRm9ybWF0LmZwcmludGYgZm10IFwiJWxkXCIgblxubGV0IGludDY0IGZtdCBuID0gRm9ybWF0LmZwcmludGYgZm10IFwiJUxkXCIgblxubGV0IG5hdGl2ZWludCBmbXQgbiA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVuZFwiIG5cbmxldCBzdHJpbmdfcXVvdGVkIGZtdCBzID0gRm9ybWF0LmZwcmludGYgZm10IFwiXFxcIiVzXFxcIlwiIHNcbmxldCBmbHVzaCA9IEZvcm1hdC5wcF9wcmludF9mbHVzaFxubGV0IHNwYWNlID0gRm9ybWF0LnBwX3ByaW50X3NwYWNlXG5sZXQgY3V0ID0gRm9ybWF0LnBwX3ByaW50X2N1dFxubGV0IGJyZWFrIGZtdCAobSwgbikgPSBGb3JtYXQucHBfcHJpbnRfYnJlYWsgZm10IG0gblxubGV0IG5ld2xpbmUgPSBGb3JtYXQucHBfZm9yY2VfbmV3bGluZVxubGV0IHN1YnN0cmluZyBvdXQgKHMsIGksIGxlbikgOiB1bml0ID0gc3RyaW5nIG91dCAoU3RyaW5nLnN1YiBzIGkgbGVuKVxubGV0IHRleHQgPSBGb3JtYXQucHBfcHJpbnRfdGV4dFxuXG5sZXQgc3RyaW5nX2xpbmVzIG91dCAocyA6IHN0cmluZykgOiB1bml0ID1cbiAgZnByaW50ZiBvdXQgXCJAWzx2PlwiO1xuICBsZXQgaSA9IHJlZiAwIGluXG4gIGxldCBuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIHdoaWxlICFpIDwgbiBkb1xuICAgIGxldCBqID0gdHJ5IFN0cmluZy5pbmRleF9mcm9tIHMgIWkgJ1xcbicgd2l0aCBOb3RfZm91bmQgLT4gbiBpblxuICAgIGlmICFpID4gMCB0aGVuIGZwcmludGYgb3V0IFwiQCxcIjtcbiAgICBzdWJzdHJpbmcgb3V0IChzLCAhaSwgaiAtICFpKTtcbiAgICBpIDo9IGogKyAxXG4gIGRvbmU7XG4gIGZwcmludGYgb3V0IFwiQF1cIlxuXG5sZXQgbGlzdCA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcCBmbXQgbCA9XG4gIGxldCByZWMgcHBfbGlzdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IHggOjogKF8gOjogXyBhcyBsKSAtPlxuICAgICAgcHAgZm10IHg7XG4gICAgICBzZXAgZm10ICgpO1xuICAgICAgcHBfbGlzdCBsXG4gICAgfCBbIHggXSAtPiBwcCBmbXQgeFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgcHBfbGlzdCBsXG5cbmxldCBhcnJheSA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcCBmbXQgYSA9XG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICBpZiBpID4gMCB0aGVuIHNlcCBmbXQgKCk7XG4gICAgcHAgZm10IGEuKGkpXG4gIGRvbmVcblxubGV0IGFycmF5aSA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcCBmbXQgYSA9XG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICBpZiBpID4gMCB0aGVuIHNlcCBmbXQgKCk7XG4gICAgcHAgZm10IChpLCBhLihpKSlcbiAgZG9uZVxuXG5sZXQgc2VxID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBzZXEgPVxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBDQ1NlcS5pdGVyXG4gICAgKGZ1biB4IC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBzZXAgZm10ICgpO1xuICAgICAgcHAgZm10IHgpXG4gICAgc2VxXG5cbmxldCBpdGVyID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBzZXEgPVxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBzZXEgKGZ1biB4IC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBzZXAgZm10ICgpO1xuICAgICAgcHAgZm10IHgpXG5cbmxldCBvcHQgcHAgZm10IHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IFwibm9uZVwiXG4gIHwgU29tZSB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcInNvbWUgJWFcIiBwcCB4XG5cbmxldCBwYWlyID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwYSBwcGIgZm10IChhLCBiKSA9XG4gIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhJWElYVwiIHBwYSBhIHNlcCAoKSBwcGIgYlxuXG5sZXQgdHJpcGxlID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwYSBwcGIgcHBjIGZtdCAoYSwgYiwgYykgPVxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYSVhJWElYSVhXCIgcHBhIGEgc2VwICgpIHBwYiBiIHNlcCAoKSBwcGMgY1xuXG5sZXQgcXVhZCA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcGEgcHBiIHBwYyBwcGQgZm10IChhLCBiLCBjLCBkKSA9XG4gIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhJWElYSVhJWElYSVhXCIgcHBhIGEgc2VwICgpIHBwYiBiIHNlcCAoKSBwcGMgYyBzZXAgKCkgcHBkXG4gICAgZFxuXG5sZXQgYXBwZW5kIHBwYSBwcGIgZm10ICgpID1cbiAgcHBhIGZtdCAoKTtcbiAgcHBiIGZtdCAoKVxuXG5sZXQgYXBwZW5kX2wgcHBsIGZtdCAoKSA9IExpc3QuaXRlciAoZnVuIHBwIC0+IHBwIGZtdCAoKSkgcHBsXG5cbmxldCB3aXRoaW4gYSBiIHAgb3V0IHggPVxuICBzdHJpbmcgb3V0IGE7XG4gIHAgb3V0IHg7XG4gIHN0cmluZyBvdXQgYlxuXG5sZXQgbWFwIGYgcHAgZm10IHggPVxuICBwcCBmbXQgKGYgeCk7XG4gICgpXG5cbmxldCB2Ym94ID8oaSA9IDApIHBwIG91dCB4ID1cbiAgRm9ybWF0LnBwX29wZW5fdmJveCBvdXQgaTtcbiAgcHAgb3V0IHg7XG4gIEZvcm1hdC5wcF9jbG9zZV9ib3ggb3V0ICgpXG5cbmxldCBob3Zib3ggPyhpID0gMCkgcHAgb3V0IHggPVxuICBGb3JtYXQucHBfb3Blbl9ob3Zib3ggb3V0IGk7XG4gIHBwIG91dCB4O1xuICBGb3JtYXQucHBfY2xvc2VfYm94IG91dCAoKVxuXG5sZXQgaHZib3ggPyhpID0gMCkgcHAgb3V0IHggPVxuICBGb3JtYXQucHBfb3Blbl9odmJveCBvdXQgaTtcbiAgcHAgb3V0IHg7XG4gIEZvcm1hdC5wcF9jbG9zZV9ib3ggb3V0ICgpXG5cbmxldCBoYm94IHBwIG91dCB4ID1cbiAgRm9ybWF0LnBwX29wZW5faGJveCBvdXQgKCk7XG4gIHBwIG91dCB4O1xuICBGb3JtYXQucHBfY2xvc2VfYm94IG91dCAoKVxuXG5sZXQgb2ZfdG9fc3RyaW5nIGYgb3V0IHggPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoZiB4KVxubGV0IGV4biA9IG9mX3RvX3N0cmluZyBQcmludGV4Yy50b19zdHJpbmdcbmxldCBjb25zdCBwcCB4IG91dCAoKSA9IHBwIG91dCB4XG5cbmxldCBzb21lIHBwIG91dCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgeCAtPiBwcCBvdXQgeFxuXG5sZXQgY29uc3Rfc3RyaW5nIHMgb3V0IF8gPSBzdHJpbmcgb3V0IHNcbmxldCBvcGFxdWUgb3V0IF8gPSBzdHJpbmcgb3V0IFwib3BhcXVlXCJcbmxldCBsYXp5X2ZvcmNlIHBwIG91dCAobGF6eSB4KSA9IHBwIG91dCB4XG5cbmxldCBsYXp5X29yID8oZGVmYXVsdCA9IHJldHVybiBcIjxsYXp5PlwiKSBwcCBvdXQgeCA9XG4gIGlmIExhenkuaXNfdmFsIHggdGhlblxuICAgIHBwIG91dCAoTGF6eS5mb3JjZSB4KVxuICBlbHNlXG4gICAgZGVmYXVsdCBvdXQgKClcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgb3V0cHV0IGZtdCBwcCB4ID0gcHAgZm10IHhcblxubGV0IHRvX3N0cmluZyBwcCB4ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBwcCBmbXQgeDtcbiAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgZnByaW50ZiA9IEZvcm1hdC5mcHJpbnRmXG5sZXQgc3Rkb3V0ID0gRm9ybWF0LnN0ZF9mb3JtYXR0ZXJcbmxldCBzdGRlcnIgPSBGb3JtYXQuZXJyX2Zvcm1hdHRlclxubGV0IG9mX2NoYW4gPSBGb3JtYXQuZm9ybWF0dGVyX29mX291dF9jaGFubmVsXG5cbmxldCB3aXRoX291dF9jaGFuIG9jIGYgPVxuICBsZXQgZm10ID0gb2ZfY2hhbiBvYyBpblxuICB0cnlcbiAgICBsZXQgeCA9IGYgZm10IGluXG4gICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICB4XG4gIHdpdGggZSAtPlxuICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBmbXQgKCk7XG4gICAgcmFpc2UgZVxuXG5sZXQgdGVlIGEgYiA9XG4gIGxldCBmYSA9IEZvcm1hdC5wcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgYSAoKSBpblxuICBsZXQgZmIgPSBGb3JtYXQucHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIGIgKCkgaW5cbiAgRm9ybWF0Lm1ha2VfZm9ybWF0dGVyXG4gICAgKGZ1biBzdHIgaSBsZW4gLT5cbiAgICAgIGZhLkZvcm1hdC5vdXRfc3RyaW5nIHN0ciBpIGxlbjtcbiAgICAgIGZiLkZvcm1hdC5vdXRfc3RyaW5nIHN0ciBpIGxlbilcbiAgICAoZnVuICgpIC0+XG4gICAgICBmYS5Gb3JtYXQub3V0X2ZsdXNoICgpO1xuICAgICAgZmIuRm9ybWF0Lm91dF9mbHVzaCAoKSlcblxubGV0IHRvX2ZpbGUgZmlsZW5hbWUgZm9ybWF0ID1cbiAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZW5hbWUgaW5cbiAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgaW5cbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBmbXQgLT5cbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBmbXQgKCk7XG4gICAgICBjbG9zZV9vdXRfbm9lcnIgb2MpXG4gICAgZm10IGZvcm1hdFxuXG5tb2R1bGUgQU5TSV9jb2RlcyA9IHN0cnVjdFxuICB0eXBlIGNvbG9yID1cbiAgICBbIGBCbGFjayB8IGBSZWQgfCBgWWVsbG93IHwgYEdyZWVuIHwgYEJsdWUgfCBgTWFnZW50YSB8IGBDeWFuIHwgYFdoaXRlIF1cblxuICBsZXQgaW50X29mX2NvbG9yXyA9IGZ1bmN0aW9uXG4gICAgfCBgQmxhY2sgLT4gMFxuICAgIHwgYFJlZCAtPiAxXG4gICAgfCBgR3JlZW4gLT4gMlxuICAgIHwgYFllbGxvdyAtPiAzXG4gICAgfCBgQmx1ZSAtPiA0XG4gICAgfCBgTWFnZW50YSAtPiA1XG4gICAgfCBgQ3lhbiAtPiA2XG4gICAgfCBgV2hpdGUgLT4gN1xuXG4gIHR5cGUgc3R5bGUgPVxuICAgIFsgYEZHIG9mIGNvbG9yICgqIGZvcmVncm91bmQgKilcbiAgICB8IGBCRyBvZiBjb2xvciAoKiBiYWNrZ3JvdW5kICopXG4gICAgfCBgQm9sZFxuICAgIHwgYFJlc2V0IF1cblxuICBsZXQgY29kZV9vZl9zdHlsZSA6IHN0eWxlIC0+IGludCA9IGZ1bmN0aW9uXG4gICAgfCBgRkcgYyAtPiAzMCArIGludF9vZl9jb2xvcl8gY1xuICAgIHwgYEJHIGMgLT4gNDAgKyBpbnRfb2ZfY29sb3JfIGNcbiAgICB8IGBCb2xkIC0+IDFcbiAgICB8IGBSZXNldCAtPiAwXG5cbiAgbGV0IHN0cmluZ19vZl9zdHlsZSBhID0gUHJpbnRmLnNwcmludGYgXCJcXHgxYlslZG1cIiAoY29kZV9vZl9zdHlsZSBhKVxuICBsZXQgY2xlYXJfbGluZSA9IFwiXFx4MWJbMktcXHJcIlxuICBsZXQgcmVzZXQgPSBzdHJpbmdfb2Zfc3R5bGUgYFJlc2V0XG5cbiAgbGV0IHN0cmluZ19vZl9zdHlsZV9saXN0ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJlc2V0XG4gICAgfCBbIGEgXSAtPiBzdHJpbmdfb2Zfc3R5bGUgYVxuICAgIHwgWyBhOyBiIF0gLT5cbiAgICAgIFByaW50Zi5zcHJpbnRmIFwiXFx4MWJbJWQ7JWRtXCIgKGNvZGVfb2Zfc3R5bGUgYSkgKGNvZGVfb2Zfc3R5bGUgYilcbiAgICB8IFsgYTsgYjsgYyBdIC0+XG4gICAgICBQcmludGYuc3ByaW50ZiBcIlxceDFiWyVkOyVkOyVkbVwiIChjb2RlX29mX3N0eWxlIGEpIChjb2RlX29mX3N0eWxlIGIpXG4gICAgICAgIChjb2RlX29mX3N0eWxlIGMpXG4gICAgfCBsIC0+XG4gICAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICAgICAgbGV0IHBwX251bSBjID0gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChzdHJpbmdfb2ZfaW50IChjb2RlX29mX3N0eWxlIGMpKSBpblxuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFx4MWJbXCI7XG4gICAgICBMaXN0Lml0ZXJpXG4gICAgICAgIChmdW4gaSBjIC0+XG4gICAgICAgICAgaWYgaSA+IDAgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmICc7JztcbiAgICAgICAgICBwcF9udW0gYylcbiAgICAgICAgbDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIm1cIjtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBleGNlcHRpb24gTm9fc3VjaF9zdHlsZVxuXG4gICgqIHBhcnNlIGEgc3RyaW5nIHRhZy4gKilcbiAgbGV0IHN0eWxlX29mX3RhZ18gcyA9XG4gICAgbWF0Y2ggU3RyaW5nLnRyaW0gcyB3aXRoXG4gICAgfCBcInJlc2V0XCIgLT4gWyBgUmVzZXQgXVxuICAgIHwgXCJibGFja1wiIC0+IFsgYEZHIGBCbGFjayBdXG4gICAgfCBcInJlZFwiIC0+IFsgYEZHIGBSZWQgXVxuICAgIHwgXCJncmVlblwiIC0+IFsgYEZHIGBHcmVlbiBdXG4gICAgfCBcInllbGxvd1wiIC0+IFsgYEZHIGBZZWxsb3cgXVxuICAgIHwgXCJibHVlXCIgLT4gWyBgRkcgYEJsdWUgXVxuICAgIHwgXCJtYWdlbnRhXCIgLT4gWyBgRkcgYE1hZ2VudGEgXVxuICAgIHwgXCJjeWFuXCIgLT4gWyBgRkcgYEN5YW4gXVxuICAgIHwgXCJ3aGl0ZVwiIC0+IFsgYEZHIGBXaGl0ZSBdXG4gICAgfCBcImJvbGRcIiAtPiBbIGBCb2xkIF1cbiAgICB8IFwiQmxhY2tcIiAtPiBbIGBGRyBgQmxhY2s7IGBCb2xkIF1cbiAgICB8IFwiUmVkXCIgLT4gWyBgRkcgYFJlZDsgYEJvbGQgXVxuICAgIHwgXCJHcmVlblwiIC0+IFsgYEZHIGBHcmVlbjsgYEJvbGQgXVxuICAgIHwgXCJZZWxsb3dcIiAtPiBbIGBGRyBgWWVsbG93OyBgQm9sZCBdXG4gICAgfCBcIkJsdWVcIiAtPiBbIGBGRyBgQmx1ZTsgYEJvbGQgXVxuICAgIHwgXCJNYWdlbnRhXCIgLT4gWyBgRkcgYE1hZ2VudGE7IGBCb2xkIF1cbiAgICB8IFwiQ3lhblwiIC0+IFsgYEZHIGBDeWFuOyBgQm9sZCBdXG4gICAgfCBcIldoaXRlXCIgLT4gWyBgRkcgYFdoaXRlOyBgQm9sZCBdXG4gICAgfCBfIC0+IHJhaXNlIE5vX3N1Y2hfc3R5bGVcbmVuZFxuXG5sZXQgY29sb3JfZW5hYmxlZCA9IHJlZiBmYWxzZVxuXG5sZXQgbWFya19vcGVuX3N0eWxlIHN0IHN0eWxlID1cbiAgU3RhY2sucHVzaCBzdHlsZSBzdDtcbiAgaWYgIWNvbG9yX2VuYWJsZWQgdGhlblxuICAgIEFOU0lfY29kZXMuc3RyaW5nX29mX3N0eWxlX2xpc3Qgc3R5bGVcbiAgZWxzZVxuICAgIFwiXCJcblxubGV0IG1hcmtfY2xvc2Vfc3R5bGUgc3QgOiBzdHJpbmcgPVxuICBsZXQgc3R5bGUgPVxuICAgIHRyeVxuICAgICAgaWdub3JlIChTdGFjay5wb3Agc3QpO1xuICAgICAgKCogcG9wIGN1cnJlbnQgc3R5bGUgKGlmIHdlbGwtc2NvcGVkIOKApikgKilcbiAgICAgIFN0YWNrLnRvcCBzdFxuICAgICAgKCogbG9vayBhdCBwcmV2aW91cyBzdHlsZSAqKVxuICAgIHdpdGggU3RhY2suRW1wdHkgLT4gWyBgUmVzZXQgXVxuICBpblxuICBpZiAhY29sb3JfZW5hYmxlZCB0aGVuXG4gICAgQU5TSV9jb2Rlcy5zdHJpbmdfb2Zfc3R5bGVfbGlzdCBzdHlsZVxuICBlbHNlXG4gICAgXCJcIlxuXG50eXBlIHN0YWcgKz0gU3R5bGUgb2YgQU5TSV9jb2Rlcy5zdHlsZSBsaXN0XG5cbmxldCBwcF9vcGVuX3RhZyBvdXQgcyA9IHBwX29wZW5fc3RhZyBvdXQgKFN0cmluZ190YWcgcylcbmxldCBwcF9jbG9zZV90YWcgb3V0ICgpID0gcHBfY2xvc2Vfc3RhZyBvdXQgKClcblxuKCogZWl0aGVyIHByaW50cyB0aGUgdGFnIG9mIFtzXSBvciBkZWxlZ2F0ZSB0byBbb3JfZWxzZV0gKilcbmxldCBtYXJrX29wZW5fc3RhZyBzdCB+b3JfZWxzZSAodGFnIDogc3RhZykgOiBzdHJpbmcgPVxuICBtYXRjaCB0YWcgd2l0aFxuICB8IFN0eWxlIHN0eWxlIC0+IG1hcmtfb3Blbl9zdHlsZSBzdCBzdHlsZVxuICB8IFN0cmluZ190YWcgcyAtPlxuICAgIGxldCBvcGVuIEFOU0lfY29kZXMgaW5cbiAgICAodHJ5XG4gICAgICAgbGV0IHN0eWxlID0gc3R5bGVfb2ZfdGFnXyBzIGluXG4gICAgICAgbWFya19vcGVuX3N0eWxlIHN0IHN0eWxlXG4gICAgIHdpdGggTm9fc3VjaF9zdHlsZSAtPiBvcl9lbHNlIHRhZylcbiAgfCBfIC0+IG9yX2Vsc2UgdGFnXG5cbmxldCBtYXJrX2Nsb3NlX3N0YWcgc3Qgfm9yX2Vsc2UgKHRhZyA6IHN0YWcpIDogc3RyaW5nID1cbiAgbWF0Y2ggdGFnIHdpdGhcbiAgfCBTdHlsZSBfIC0+IG1hcmtfY2xvc2Vfc3R5bGUgc3RcbiAgfCBTdHJpbmdfdGFnIHMgLT5cbiAgICBsZXQgb3BlbiBBTlNJX2NvZGVzIGluXG4gICAgKCogY2hlY2sgaWYgaXQncyBpbmRlZWQgYWJvdXQgY29sb3IgKilcbiAgICAobWF0Y2ggc3R5bGVfb2ZfdGFnXyBzIHdpdGhcbiAgICB8IF8gLT4gbWFya19jbG9zZV9zdHlsZSBzdFxuICAgIHwgZXhjZXB0aW9uIE5vX3N1Y2hfc3R5bGUgLT4gb3JfZWxzZSB0YWcpXG4gIHwgXyAtPiBvcl9lbHNlIHRhZ1xuXG5sZXQgd2l0aF9zdHlsaW5nIHN0bCBvdXQgZiA9XG4gIHBwX29wZW5fc3RhZyBvdXQgKFN0eWxlIHN0bCk7XG4gIHRyeVxuICAgIGxldCB4ID0gZiAoKSBpblxuICAgIHBwX2Nsb3NlX3N0YWcgb3V0ICgpO1xuICAgIHhcbiAgd2l0aCBlIC0+XG4gICAgcHBfY2xvc2Vfc3RhZyBvdXQgKCk7XG4gICAgcmFpc2UgZVxuXG5sZXQgc3R5bGluZyBzdGwgcHAgb3V0IHggPSB3aXRoX3N0eWxpbmcgc3RsIG91dCBAQCBmdW4gKCkgLT4gcHAgb3V0IHhcblxuKCogYWRkIGNvbG9yIGhhbmRsaW5nIHRvIGZvcm1hdHRlciBbcHBmXSAqKVxubGV0IHNldF9jb2xvcl90YWdfaGFuZGxpbmcgcHBmID1cbiAgbGV0IHN0ID0gU3RhY2suY3JlYXRlICgpIGluXG4gICgqIHN0YWNrIG9mIHN0eWxlcyAqKVxuICBwcF9zZXRfbWFya190YWdzIHBwZiB0cnVlO1xuICAoKiBlbmFibGUgdGFncyAqKVxuICBsZXQgZnVucyA9IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgcHBmICgpIGluXG4gIGxldCBmdW5zJyA9XG4gICAge1xuICAgICAgZnVucyB3aXRoXG4gICAgICBtYXJrX29wZW5fc3RhZyA9IG1hcmtfb3Blbl9zdGFnIHN0IH5vcl9lbHNlOmZ1bnMubWFya19vcGVuX3N0YWc7XG4gICAgICBtYXJrX2Nsb3NlX3N0YWcgPSBtYXJrX2Nsb3NlX3N0YWcgc3Qgfm9yX2Vsc2U6ZnVucy5tYXJrX2Nsb3NlX3N0YWc7XG4gICAgfVxuICBpblxuICBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHBwZiBmdW5zJ1xuXG5sZXQgc2V0X2NvbG9yX2RlZmF1bHQgPVxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBmdW4gYiAtPlxuICAgIGlmIGIgJiYgbm90ICFjb2xvcl9lbmFibGVkIHRoZW4gKFxuICAgICAgY29sb3JfZW5hYmxlZCA6PSB0cnVlO1xuICAgICAgaWYgIWZpcnN0IHRoZW4gKFxuICAgICAgICBmaXJzdCA6PSBmYWxzZTtcbiAgICAgICAgc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBzdGRvdXQ7XG4gICAgICAgIHNldF9jb2xvcl90YWdfaGFuZGxpbmcgc3RkZXJyXG4gICAgICApXG4gICAgKSBlbHNlIGlmIChub3QgYikgJiYgIWNvbG9yX2VuYWJsZWQgdGhlblxuICAgICAgY29sb3JfZW5hYmxlZCA6PSBmYWxzZVxuXG5sZXQgd2l0aF9jb2xvciBzIHBwIG91dCB4ID1cbiAgcHBfb3Blbl90YWcgb3V0IHM7XG4gIHBwIG91dCB4O1xuICBwcF9jbG9zZV90YWcgb3V0ICgpXG5cbmxldCB3aXRoX2NvbG9yZiBzIG91dCBmbXQgPVxuICBwcF9vcGVuX3RhZyBvdXQgcztcbiAgRm9ybWF0LmtmcHJpbnRmIChmdW4gb3V0IC0+IHBwX2Nsb3NlX3RhZyBvdXQgKCkpIG91dCBmbXRcblxuKCogYzogd2hldGhlciBjb2xvcnMgYXJlIGVuYWJsZWQgKilcbmxldCBzcHJpbnRmXyBjIGZvcm1hdCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCBmbXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgaWYgYyAmJiAhY29sb3JfZW5hYmxlZCB0aGVuIHNldF9jb2xvcl90YWdfaGFuZGxpbmcgZm10O1xuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIF9mbXQgLT5cbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBmbXQgKCk7XG4gICAgICBCdWZmZXIuY29udGVudHMgYnVmKVxuICAgIGZtdCBmb3JtYXRcblxubGV0IHdpdGhfY29sb3Jfa3NmIH5mIHMgZm10ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBpZiAhY29sb3JfZW5hYmxlZCB0aGVuIHNldF9jb2xvcl90YWdfaGFuZGxpbmcgb3V0O1xuICBwcF9vcGVuX3RhZyBvdXQgcztcbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBvdXQgLT5cbiAgICAgIHBwX2Nsb3NlX3RhZyBvdXQgKCk7XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgZiAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikpXG4gICAgb3V0IGZtdFxuXG5sZXQgd2l0aF9jb2xvcl9zZiBzIGZtdCA9IHdpdGhfY29sb3Jfa3NmIH5mOihmdW4gcyAtPiBzKSBzIGZtdFxubGV0IHNwcmludGYgZm10ID0gc3ByaW50Zl8gdHJ1ZSBmbXRcbmxldCBzcHJpbnRmX25vX2NvbG9yIGZtdCA9IHNwcmludGZfIGZhbHNlIGZtdFxubGV0IHNwcmludGZfZHluX2NvbG9yIH5jb2xvcnMgZm10ID0gc3ByaW50Zl8gY29sb3JzIGZtdFxuXG5sZXQgZnByaW50Zl9keW5fY29sb3IgfmNvbG9ycyBvdXQgZm10ID1cbiAgbGV0IG9sZF90YWdzID0gRm9ybWF0LnBwX2dldF9tYXJrX3RhZ3Mgb3V0ICgpIGluXG4gIEZvcm1hdC5wcF9zZXRfbWFya190YWdzIG91dCBjb2xvcnM7XG4gICgqIGVuYWJsZS9kaXNhYmxlIHRhZ3MgKilcbiAgRm9ybWF0LmtmcHJpbnRmIChmdW4gb3V0IC0+IEZvcm1hdC5wcF9zZXRfbWFya190YWdzIG91dCBvbGRfdGFncykgb3V0IGZtdFxuXG5sZXQga3NwcmludGYgP21hcmdpbiB+ZiBmbXQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBsZXQgb3V0ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIGlmICFjb2xvcl9lbmFibGVkIHRoZW4gc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBvdXQ7XG4gIChtYXRjaCBtYXJnaW4gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIG0gLT4gcHBfc2V0X21hcmdpbiBvdXQgbSk7XG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gXyAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGYgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmbXRcblxubW9kdWxlIER1bXAgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2EgcHJpbnRlclxuXG4gIGxldCB1bml0ID0gdW5pdFxuICBsZXQgaW50ID0gaW50XG4gIGxldCBzdHJpbmcgPSBzdHJpbmdfcXVvdGVkXG4gIGxldCBib29sID0gYm9vbFxuICBsZXQgZmxvYXQgPSBmbG9hdFxuICBsZXQgY2hhciA9IGNoYXJcbiAgbGV0IGludDMyID0gaW50MzJcbiAgbGV0IGludDY0ID0gaW50NjRcbiAgbGV0IG5hdGl2ZWludCA9IG5hdGl2ZWludFxuICBsZXQgbGlzdCBwcCA9IHdpdGhpbiBcIltcIiBcIl1cIiAoaG92Ym94IChsaXN0IH5zZXA6KHJldHVybiBcIjtALFwiKSBwcCkpXG4gIGxldCBhcnJheSBwcCA9IHdpdGhpbiBcIlt8XCIgXCJ8XVwiIChob3Zib3ggKGFycmF5IH5zZXA6KHJldHVybiBcIjtALFwiKSBwcCkpXG5cbiAgbGV0IG9wdGlvbiBwcCBvdXQgeCA9XG4gICAgbWF0Y2ggeCB3aXRoXG4gICAgfCBOb25lIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiTm9uZVwiXG4gICAgfCBTb21lIHggLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiU29tZSAlYVwiIHBwIHhcblxuICBsZXQgcGFpciBwMSBwMiA9IHdpdGhpbiBcIihcIiBcIilcIiAoaG92Ym94IChwYWlyIHAxIHAyKSlcbiAgbGV0IHRyaXBsZSBwMSBwMiBwMyA9IHdpdGhpbiBcIihcIiBcIilcIiAoaG92Ym94ICh0cmlwbGUgcDEgcDIgcDMpKVxuICBsZXQgcXVhZCBwMSBwMiBwMyBwNCA9IHdpdGhpbiBcIihcIiBcIilcIiAoaG92Ym94IChxdWFkIHAxIHAyIHAzIHA0KSlcblxuICBsZXQgcmVzdWx0JyBwb2sgcGVycm9yIG91dCA9IGZ1bmN0aW9uXG4gICAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIihAW09rICVhQF0pXCIgcG9rIHhcbiAgICB8IEVycm9yIGUgLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiKEBbRXJyb3IgJWFAXSlcIiBwZXJyb3IgZVxuXG4gIGxldCByZXN1bHQgcG9rID0gcmVzdWx0JyBwb2sgc3RyaW5nXG4gIGxldCB0b19zdHJpbmcgPSB0b19zdHJpbmdcbmVuZFxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggKysgKSA9IGFwcGVuZFxuZW5kXG5cbmluY2x1ZGUgSW5maXhcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUmVnaXN0ZXJpbmcgT0NhbWwgdmFsdWVzIHdpdGggdGhlIEMgcnVudGltZSBmb3IgbGF0ZXIgY2FsbGJhY2tzICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+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+IGludCAtPiBpbnQgLT4gSW50NjQudFxuICAgID0gXCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVwiXG5lbmRcbiIsIigqKiBDcmVhdGUtb25seSB2ZXJzaW9uIG9mIFtPYmoudF0gKilcbm1vZHVsZSBBbnkgOiBzaWdcbiAgdHlwZSB0XG4gIHZhbCBhbnkgOiAnYSAtPiB0XG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gT2JqLnRcbiAgbGV0IGFueSA9IE9iai5yZXByXG5lbmRcblxudHlwZSAnYSBldmFsID1cbiAgfCBFdmFsX25vbmVcbiAgfCBFdmFsX3Byb2dyZXNzXG4gIHwgRXZhbF9zb21lIG9mICdhXG5cbnR5cGUgJ2EgdF8gPVxuICB8IFB1cmUgb2YgJ2FcbiAgfCBPcGVyYXRvciA6IHtcbiAgICAgIG11dGFibGUgdmFsdWUgOiAnYSBldmFsOyAoKiBjYWNoZWQgdmFsdWUgKilcbiAgICAgIG11dGFibGUgdHJhY2UgOiB0cmFjZTsgKCogbGlzdCBvZiBwYXJlbnRzIHRoaXMgY2FuIGludmFsaWRhdGUgKilcbiAgICAgIG11dGFibGUgdHJhY2VfaWR4IDogdHJhY2VfaWR4OyAoKiBsaXN0IG9mIGRpcmVjdCBjaGlsZHJlbiB0aGF0IGNhbiBpbnZhbGlkYXRlIHRoaXMgKilcbiAgICAgIGRlc2M6ICdhIGRlc2M7XG4gICAgfSAtPiAnYSB0X1xuICB8IFJvb3QgOiB7XG4gICAgICBtdXRhYmxlIHZhbHVlIDogJ2EgZXZhbDsgKCogY2FjaGVkIHZhbHVlICopXG4gICAgICBtdXRhYmxlIHRyYWNlX2lkeCA6IHRyYWNlX2lkeDsgKCogbGlzdCBvZiBkaXJlY3QgY2hpbGRyZW4gdGhhdCBjYW4gaW52YWxpZGF0ZSB0aGlzICopXG4gICAgICBtdXRhYmxlIG9uX2ludmFsaWRhdGUgOiAnYSAtPiB1bml0O1xuICAgICAgbXV0YWJsZSBhY3F1aXJlZCA6IGJvb2w7XG4gICAgICBjaGlsZCA6ICdhIHRfO1xuICAgIH0gLT4gJ2EgdF9cblxuYW5kIF8gZGVzYyA9XG4gIHwgTWFwICA6ICdhIHRfICogKCdhIC0+ICdiKSAtPiAnYiBkZXNjXG4gIHwgTWFwMiA6ICdhIHRfICogJ2IgdF8gKiAoJ2EgLT4gJ2IgLT4gJ2MpIC0+ICdjIGRlc2NcbiAgfCBQYWlyIDogJ2EgdF8gKiAnYiB0XyAtPiAoJ2EgKiAnYikgZGVzY1xuICB8IEFwcCAgOiAoJ2EgLT4gJ2IpIHRfICogJ2EgdF8gLT4gJ2IgZGVzY1xuICB8IEpvaW4gOiB7IGNoaWxkIDogJ2EgdF8gdF87IG11dGFibGUgaW50ZXJtZWRpYXRlIDogJ2EgdF8gb3B0aW9uIH0gLT4gJ2EgZGVzY1xuICB8IFZhciAgOiB7IG11dGFibGUgYmluZGluZyA6ICdhIH0gLT4gJ2EgZGVzY1xuICB8IFByaW0gOiB7IGFjcXVpcmUgOiAnYSB0IC0+ICdhO1xuICAgICAgICAgICAgIHJlbGVhc2UgOiAnYSB0IC0+ICdhIC0+IHVuaXQgfSAtPiAnYSBkZXNjXG4gIHwgRml4IDogeyBkb2MgOiAnYSB0Xzsgd3J0IDogXyB0XyB9IC0+ICdhIGRlc2NcblxuKCogYSBzZXQgb2YgKGFjdGl2ZSkgcGFyZW50cyBmb3IgYSBbJ2EgdF0sIHVzZWQgZHVyaW5nIGludmFsaWRhdGlvbiAqKVxuYW5kIHRyYWNlID1cbiAgfCBUMFxuICB8IFQxIDogXyB0XyAtPiB0cmFjZVxuICB8IFQyIDogXyB0XyAqIF8gdF8gLT4gdHJhY2VcbiAgfCBUMyA6IF8gdF8gKiBfIHRfICogXyB0XyAtPiB0cmFjZVxuICB8IFQ0IDogXyB0XyAqIF8gdF8gKiBfIHRfICogXyB0XyAtPiB0cmFjZVxuICB8IFRuIDogeyBtdXRhYmxlIGFjdGl2ZSA6IGludDsgbXV0YWJsZSBjb3VudCA6IGludDtcbiAgICAgICAgICAgbXV0YWJsZSBlbnRyaWVzIDogQW55LnQgdF8gYXJyYXkgfSAtPiB0cmFjZVxuXG4oKiBhIHNldCBvZiBkaXJlY3QgY2hpbGRyZW4gZm9yIGEgY29tcG9zaXRlIGRvY3VtZW50ICopXG5hbmQgdHJhY2VfaWR4ID1cbiAgfCBJMFxuICB8IEkxIDogeyBtdXRhYmxlIGlkeCA6IGludCA7XG4gICAgICAgICAgIG9iaiA6ICdhIHRfO1xuICAgICAgICAgICBtdXRhYmxlIG5leHQgOiB0cmFjZV9pZHggfSAtPiB0cmFjZV9pZHhcblxuKCogVGhlIHR5cGUgc3lzdGVtIGNhbm5vdCBzZWUgdGhhdCB0IGlzIGNvdmFyaWFudCBpbiBpdHMgcGFyYW1ldGVyLlxuICAgVXNlIHRoZSBGb3JjZSB0byBjb252aW5jZSBpdC4gKilcbmFuZCArJ2EgdFxuZXh0ZXJuYWwgaW5qIDogJ2EgdF8gLT4gJ2EgdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHByaiA6ICdhIHQgLT4gJ2EgdF8gPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBwcmoyIDogJ2EgdCB0IC0+ICdhIHRfIHRfID0gXCIlaWRlbnRpdHlcIlxuXG4oKiBCYXNpYyBjb21iaW5hdG9ycyAqKVxubGV0IHJldHVybiB4ID0gaW5qIChQdXJlIHgpXG5sZXQgcHVyZSB4ID0gaW5qIChQdXJlIHgpXG5cbmxldCBpc19wdXJlIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSB4IC0+IFNvbWUgeFxuICB8IF8gLT4gTm9uZVxuXG5sZXQgZHVtbXkgPSBQdXJlIChBbnkuYW55ICgpKVxuXG5sZXQgb3BlcmF0b3IgZGVzYyA9XG4gIE9wZXJhdG9yIHsgdmFsdWUgPSBFdmFsX25vbmU7IHRyYWNlID0gVDA7IGRlc2M7IHRyYWNlX2lkeCA9IEkwIH1cblxubGV0IG1hcCB4IH5mID0gaW5qIChcbiAgICBtYXRjaCBwcmogeCB3aXRoXG4gICAgfCBQdXJlIHZ4IC0+IFB1cmUgKGYgdngpXG4gICAgfCB4IC0+IG9wZXJhdG9yIChNYXAgKHgsIGYpKVxuICApXG5cbmxldCBtYXAyIHggeSB+ZiA9IGluaiAoXG4gICAgbWF0Y2ggcHJqIHgsIHByaiB5IHdpdGhcbiAgICB8IFB1cmUgdngsIFB1cmUgdnkgLT4gUHVyZSAoZiB2eCB2eSlcbiAgICB8IHgsIHkgLT4gb3BlcmF0b3IgKE1hcDIgKHgsIHksIGYpKVxuICApXG5cbmxldCBwYWlyIHggeSA9IGluaiAoXG4gICAgbWF0Y2ggcHJqIHgsIHByaiB5IHdpdGhcbiAgICB8IFB1cmUgdngsIFB1cmUgdnkgLT4gUHVyZSAodngsIHZ5KVxuICAgIHwgeCwgeSAtPiBvcGVyYXRvciAoUGFpciAoeCwgeSkpXG4gIClcblxubGV0IGFwcCBmIHggPSBpbmogKFxuICAgIG1hdGNoIHByaiBmLCBwcmogeCB3aXRoXG4gICAgfCBQdXJlIHZmLCBQdXJlIHZ4IC0+IFB1cmUgKHZmIHZ4KVxuICAgIHwgZiwgeCAtPiBvcGVyYXRvciAoQXBwIChmLCB4KSlcbiAgKVxuXG5sZXQgam9pbiBjaGlsZCA9IGluaiAoXG4gICAgbWF0Y2ggcHJqMiBjaGlsZCB3aXRoXG4gICAgfCBQdXJlIHYgLT4gdlxuICAgIHwgY2hpbGQgLT4gb3BlcmF0b3IgKEpvaW4geyBjaGlsZDsgaW50ZXJtZWRpYXRlID0gTm9uZSB9KVxuICApXG5cbmxldCBiaW5kIHggfmYgPSBqb2luIChtYXAgfmYgeClcblxuKCogTWFuYWdlbWVudCBvZiB0cmFjZSBpbmRpY2VzICopXG5cbmxldCBhZGRyIG9jIG9iaiA9XG4gIFByaW50Zi5mcHJpbnRmIG9jIFwiMHglMDh4XCIgKE9iai5tYWdpYyBvYmogOiBpbnQpXG5cbmV4dGVybmFsIHRfZXF1YWwgOiBfIHRfIC0+IF8gdF8gLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsIG9ial90IDogJ2EgdF8gLT4gQW55LnQgdF8gPSBcIiVpZGVudGl0eVwiXG5cbmxldCByZWMgZHVtcF90cmFjZSA6IHR5cGUgYS4gYSB0XyAtPiB1bml0ID1cbiAgZnVuIG9iaiAtPiBtYXRjaCBvYmogd2l0aFxuICB8IFB1cmUgXyAtPiBQcmludGYuZXByaW50ZiBcIiVhOiBQdXJlIF9cXG4lIVwiIGFkZHIgb2JqXG4gIHwgT3BlcmF0b3IgdCAtPlxuICAgIFByaW50Zi5lcHJpbnRmIFwiJWE6IE9wZXJhdG9yIF8gLT4gJWFcXG4lIVwiIGFkZHIgb2JqIGR1bXBfdHJhY2VfYXV4IHQudHJhY2U7XG4gICAgYmVnaW4gbWF0Y2ggdC50cmFjZSB3aXRoXG4gICAgICB8IFQwIC0+ICgpXG4gICAgICB8IFQxIGEgLT4gZHVtcF90cmFjZSBhXG4gICAgICB8IFQyIChhLGIpIC0+IGR1bXBfdHJhY2UgYTsgZHVtcF90cmFjZSBiXG4gICAgICB8IFQzIChhLGIsYykgLT4gZHVtcF90cmFjZSBhOyBkdW1wX3RyYWNlIGI7IGR1bXBfdHJhY2UgY1xuICAgICAgfCBUNCAoYSxiLGMsZCkgLT4gZHVtcF90cmFjZSBhOyBkdW1wX3RyYWNlIGI7IGR1bXBfdHJhY2UgYzsgZHVtcF90cmFjZSBkXG4gICAgICB8IFRuIHQgLT4gQXJyYXkuaXRlciBkdW1wX3RyYWNlIHQuZW50cmllc1xuICAgIGVuZFxuICB8IFJvb3QgXyAtPiBQcmludGYuZXByaW50ZiBcIiVhOiBSb290IF9cXG4lIVwiIGFkZHIgb2JqXG5cbmFuZCBkdW1wX3RyYWNlX2F1eCBvYyA9IGZ1bmN0aW9uXG4gIHwgVDAgLT4gUHJpbnRmLmZwcmludGYgb2MgXCJUMFwiXG4gIHwgVDEgYSAtPiBQcmludGYuZnByaW50ZiBvYyBcIlQxICVhXCIgYWRkciBhXG4gIHwgVDIgKGEsYikgLT5cbiAgICBQcmludGYuZnByaW50ZiBvYyBcIlQyICglYSwgJWEpXCIgYWRkciBhIGFkZHIgYlxuICB8IFQzIChhLGIsYykgLT5cbiAgICBQcmludGYuZnByaW50ZiBvYyBcIlQzICglYSwgJWEsICVhKVwiIGFkZHIgYSBhZGRyIGIgYWRkciBjXG4gIHwgVDQgKGEsYixjLGQpIC0+XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJUNCAoJWEsICVhLCAlYSwgJWEpXCIgYWRkciBhIGFkZHIgYiBhZGRyIGMgYWRkciBkXG4gIHwgVG4gdCAtPlxuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwiVG4ge2FjdGl2ZSA9ICVkOyBjb3VudCA9ICVkOyBlbnRyaWVzID0gXCJcbiAgICAgIHQuYWN0aXZlIHQuY291bnQ7XG4gICAgQXJyYXkuaXRlciAoUHJpbnRmLmZwcmludGYgb2MgXCIoJWEpXCIgYWRkcikgdC5lbnRyaWVzO1xuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwifVwiXG5cbmxldCBkdW1wX3RyYWNlIHggPSBkdW1wX3RyYWNlIChvYmpfdCAocHJqIHgpKVxuXG5sZXQgYWRkX2lkeCBvYmogaWR4ID0gZnVuY3Rpb25cbiAgfCBQdXJlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0JyAtPiB0Jy50cmFjZV9pZHggPC0gSTEgeyBpZHg7IG9iajsgbmV4dCA9IHQnLnRyYWNlX2lkeCB9XG4gIHwgT3BlcmF0b3IgdCcgLT4gdCcudHJhY2VfaWR4IDwtIEkxIHsgaWR4OyBvYmo7IG5leHQgPSB0Jy50cmFjZV9pZHggfVxuXG5sZXQgcmVjIHJlbV9pZHhfcmVjIG9iaiA9IGZ1bmN0aW9uXG4gIHwgSTAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSTEgdCBhcyBzZWxmIC0+XG4gICAgaWYgdF9lcXVhbCB0Lm9iaiBvYmpcbiAgICB0aGVuICh0LmlkeCwgdC5uZXh0KVxuICAgIGVsc2UgKFxuICAgICAgbGV0IGlkeCwgcmVzdWx0ID0gcmVtX2lkeF9yZWMgb2JqIHQubmV4dCBpblxuICAgICAgdC5uZXh0IDwtIHJlc3VsdDtcbiAgICAgIChpZHgsIHNlbGYpXG4gICAgKVxuXG4oKiByZW1vdmUgW29ial0gZnJvbSB0aGUgbHdkJ3MgdHJhY2UuICopXG5sZXQgcmVtX2lkeCBvYmogPSBmdW5jdGlvblxuICB8IFB1cmUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQnIC0+XG4gICAgbGV0IGlkeCwgdHJhY2VfaWR4ID0gcmVtX2lkeF9yZWMgb2JqIHQnLnRyYWNlX2lkeCBpblxuICAgIHQnLnRyYWNlX2lkeCA8LSB0cmFjZV9pZHg7IGlkeFxuICB8IE9wZXJhdG9yIHQnIC0+XG4gICAgbGV0IGlkeCwgdHJhY2VfaWR4ID0gcmVtX2lkeF9yZWMgb2JqIHQnLnRyYWNlX2lkeCBpblxuICAgIHQnLnRyYWNlX2lkeCA8LSB0cmFjZV9pZHg7IGlkeFxuXG4oKiBtb3ZlIFtvYmpdIGZyb20gb2xkIGluZGV4IHRvIG5ldyBpbmRleC4gKilcbmxldCByZWMgbW92X2lkeF9yZWMgb2JqIG9sZGlkeCBuZXdpZHggPSBmdW5jdGlvblxuICB8IEkwIC0+IGFzc2VydCBmYWxzZVxuICB8IEkxIHQgLT5cbiAgICBpZiB0LmlkeCA9IG9sZGlkeCAmJiB0X2VxdWFsIHQub2JqIG9ialxuICAgIHRoZW4gdC5pZHggPC0gbmV3aWR4XG4gICAgZWxzZSBtb3ZfaWR4X3JlYyBvYmogb2xkaWR4IG5ld2lkeCB0Lm5leHRcblxubGV0IG1vdl9pZHggb2JqIG9sZGlkeCBuZXdpZHggPSBmdW5jdGlvblxuICB8IFB1cmUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQnIC0+IG1vdl9pZHhfcmVjIG9iaiBvbGRpZHggbmV3aWR4IHQnLnRyYWNlX2lkeFxuICB8IE9wZXJhdG9yIHQnIC0+IG1vdl9pZHhfcmVjIG9iaiBvbGRpZHggbmV3aWR4IHQnLnRyYWNlX2lkeFxuXG5sZXQgcmVjIGdldF9pZHhfcmVjIG9iaiA9IGZ1bmN0aW9uXG4gIHwgSTAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSTEgdCAtPlxuICAgIGlmIHRfZXF1YWwgdC5vYmogb2JqXG4gICAgdGhlbiB0LmlkeFxuICAgIGVsc2UgZ2V0X2lkeF9yZWMgb2JqIHQubmV4dFxuXG4oKiBmaW5kIGluZGV4IG9mIFtvYmpdIGluIHRoZSBnaXZlbiBsd2QgKilcbmxldCBnZXRfaWR4IG9iaiA9IGZ1bmN0aW9uXG4gIHwgUHVyZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCcgLT4gZ2V0X2lkeF9yZWMgb2JqIHQnLnRyYWNlX2lkeFxuICB8IE9wZXJhdG9yIHQnIC0+IGdldF9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHhcblxudHlwZSBzdGF0dXMgPVxuICB8IE5ldXRyYWxcbiAgfCBTYWZlXG4gIHwgVW5zYWZlXG5cbnR5cGUgc2Vuc2l0aXZpdHkgPVxuICB8IFN0cm9uZ1xuICB8IEZyYWdpbGVcblxuKCogUHJvcGFnYXRpbmcgaW52YWxpZGF0aW9uIHJlY3Vyc2l2ZWx5LlxuICAgRWFjaCBkb2N1bWVudCBpcyBpbnZhbGlkYXRlZCBhdCBtb3N0IG9uY2UsXG4gICBhbmQgb25seSBpZiBpdCBoYXMgW3QudmFsdWUgPSBTb21lIF9dLiAqKVxubGV0IHJlYyBpbnZhbGlkYXRlX25vZGUgOiB0eXBlIGEgLiBzdGF0dXMgcmVmIC0+IHNlbnNpdGl2aXR5IC0+IGEgdF8gLT4gdW5pdCA9XG4gIGZ1biBzdGF0dXMgc2Vuc2l0aXZpdHkgbm9kZSAtPlxuICBtYXRjaCBub2RlLCBzZW5zaXRpdml0eSB3aXRoXG4gIHwgUHVyZSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgKHt2YWx1ZTsgX30gYXMgdCksIF8gLT5cbiAgICB0LnZhbHVlIDwtIEV2YWxfbm9uZTtcbiAgICBiZWdpbiBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IEV2YWxfbm9uZSAtPiAoKVxuICAgICAgfCBFdmFsX3Byb2dyZXNzIC0+XG4gICAgICAgIHN0YXR1cyA6PSBVbnNhZmVcbiAgICAgIHwgRXZhbF9zb21lIHggLT5cbiAgICAgICAgYmVnaW4gbWF0Y2ggc2Vuc2l0aXZpdHkgd2l0aFxuICAgICAgICAgIHwgU3Ryb25nIC0+ICgpXG4gICAgICAgICAgfCBGcmFnaWxlIC0+IHN0YXR1cyA6PSBVbnNhZmVcbiAgICAgICAgZW5kO1xuICAgICAgICB0Lm9uX2ludmFsaWRhdGUgeCAoKiB1c2VyIGNhbGxiYWNrIHRoYXQge2kgb2JzZXJ2ZXN9IHRoaXMgcm9vdC4gKilcbiAgICBlbmRcbiAgfCBPcGVyYXRvciB7dmFsdWUgPSBFdmFsX25vbmU7IF99LCBGcmFnaWxlIC0+XG4gICAgYmVnaW4gbWF0Y2ggIXN0YXR1cyB3aXRoXG4gICAgICB8IFVuc2FmZSB8IFNhZmUgLT4gKClcbiAgICAgIHwgXyAtPiBzdGF0dXMgOj0gU2FmZVxuICAgIGVuZFxuICB8IE9wZXJhdG9yIHt2YWx1ZSA9IEV2YWxfbm9uZTsgX30sIF8gLT4gKClcbiAgfCBPcGVyYXRvciB7ZGVzYyA9IEZpeCB7d3J0ID0gT3BlcmF0b3Ige3ZhbHVlID0gRXZhbF9ub25lOyBffTsgX307IF99LCBGcmFnaWxlIC0+XG4gICAgYmVnaW4gbWF0Y2ggIXN0YXR1cyB3aXRoXG4gICAgICB8IFNhZmUgfCBVbnNhZmUgLT4gKClcbiAgICAgIHwgTmV1dHJhbCAtPiBzdGF0dXMgOj0gU2FmZVxuICAgIGVuZFxuICB8IE9wZXJhdG9yIHtkZXNjID0gRml4IHt3cnQgPSBPcGVyYXRvciB7dmFsdWUgPSBFdmFsX3NvbWUgXzsgX307IF99OyBffSwgRnJhZ2lsZSAtPlxuICAgICgpXG4gIHwgT3BlcmF0b3IgdCwgXyAtPlxuICAgIGxldCBzZW5zaXRpdml0eSA9XG4gICAgICBtYXRjaCB0LnZhbHVlIHdpdGggRXZhbF9wcm9ncmVzcyAtPiBGcmFnaWxlIHwgXyAtPiBzZW5zaXRpdml0eVxuICAgIGluXG4gICAgdC52YWx1ZSA8LSBFdmFsX25vbmU7XG4gICAgKCogaW52YWxpZGF0ZSBwYXJlbnRzIHJlY3Vyc2l2ZWx5ICopXG4gICAgaW52YWxpZGF0ZV90cmFjZSBzdGF0dXMgc2Vuc2l0aXZpdHkgdC50cmFjZVxuXG4oKiBpbnZhbGlkYXRlIHJlY3Vyc2l2ZWx5IGRvY3VtZW50cyBpbiB0aGUgZ2l2ZW4gdHJhY2UgKilcbmFuZCBpbnZhbGlkYXRlX3RyYWNlIHN0YXR1cyBzZW5zaXRpdml0eSA9IGZ1bmN0aW9uXG4gIHwgVDAgLT4gKClcbiAgfCBUMSB4IC0+IGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeFxuICB8IFQyICh4LCB5KSAtPlxuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeDtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHlcbiAgfCBUMyAoeCwgeSwgeikgLT5cbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHg7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB5O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgelxuICB8IFQ0ICh4LCB5LCB6LCB3KSAtPlxuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeDtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHk7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB6O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgd1xuICB8IFRuIHQgLT5cbiAgICBsZXQgYWN0aXZlID0gdC5hY3RpdmUgaW5cbiAgICB0LmFjdGl2ZSA8LSAwO1xuICAgIGZvciBpID0gMCB0byBhY3RpdmUgLSAxIGRvXG4gICAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHQuZW50cmllcy4oaSlcbiAgICBkb25lXG5cbmxldCBkZWZhdWx0X3Vuc2FmZV9tdXRhdGlvbl9sb2dnZXIgKCkgPVxuICBsZXQgY2FsbHN0YWNrID0gUHJpbnRleGMuZ2V0X2NhbGxzdGFjayAyMCBpblxuICBQcmludGYuZnByaW50ZiBzdGRlcnJcbiAgICBcIkx3ZDogdW5zYWZlIG11dGF0aW9uICh2YXJpYWJsZSBpbnZhbGlkYXRlZCBkdXJpbmcgZXZhbHVhdGlvbikgYXRcXG4lYVwiXG4gICAgUHJpbnRleGMucHJpbnRfcmF3X2JhY2t0cmFjZSBjYWxsc3RhY2tcblxubGV0IHVuc2FmZV9tdXRhdGlvbl9sb2dnZXIgPSByZWYgZGVmYXVsdF91bnNhZmVfbXV0YXRpb25fbG9nZ2VyXG5cbmxldCBkb19pbnZhbGlkYXRlIHNlbnNpdGl2aXR5IG5vZGUgPVxuICBsZXQgc3RhdHVzID0gcmVmIE5ldXRyYWwgaW5cbiAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSBub2RlO1xuICBsZXQgdW5zYWZlID1cbiAgICBtYXRjaCAhc3RhdHVzIHdpdGhcbiAgICB8IE5ldXRyYWwgfCBTYWZlIC0+IGZhbHNlXG4gICAgfCBVbnNhZmUgLT4gdHJ1ZVxuICBpblxuICBpZiB1bnNhZmUgdGhlbiAhdW5zYWZlX211dGF0aW9uX2xvZ2dlciAoKVxuXG4oKiBWYXJpYWJsZXMgKilcbnR5cGUgJ2EgdmFyID0gJ2EgdF9cbmxldCB2YXIgeCA9IG9wZXJhdG9yIChWYXIge2JpbmRpbmcgPSB4fSlcbmxldCBnZXQgeCA9IGluaiB4XG5cbmxldCBzZXQgKHZ4Ol8gdmFyKSB4IDogdW5pdCA9XG4gIG1hdGNoIHZ4IHdpdGhcbiAgfCBPcGVyYXRvciAoe2Rlc2MgPSBWYXIgdjsgX30pIC0+XG4gICAgKCogc2V0IHRoZSB2YXJpYWJsZSwgYW5kIGludmFsaWRhdGUgYWxsIG9ic2VydmVycyAqKVxuICAgIHYuYmluZGluZyA8LSB4O1xuICAgIGRvX2ludmFsaWRhdGUgU3Ryb25nIHZ4XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHBlZWsgPSBmdW5jdGlvblxuICB8IE9wZXJhdG9yICh7ZGVzYyA9IFZhciB2OyBffSkgLT4gdi5iaW5kaW5nXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHVwZGF0ZSBmIHYgPSBzZXQgdiAoZiAocGVlayB2KSlcblxubGV0IG1heV91cGRhdGUgZiB2ID1cbiAgbWF0Y2ggZiAocGVlayB2KSB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgeCAtPiBzZXQgdiB4XG5cbigqIFByaW1pdGl2ZXMgKilcbnR5cGUgJ2EgcHJpbSA9ICdhIHRcbmxldCBwcmltIH5hY3F1aXJlIH5yZWxlYXNlID1cbiAgaW5qIChvcGVyYXRvciAoUHJpbSB7IGFjcXVpcmU7IHJlbGVhc2UgfSkpXG5sZXQgZ2V0X3ByaW0geCA9IHhcblxubGV0IGludmFsaWRhdGUgeCA9IG1hdGNoIHByaiB4IHdpdGhcbiAgfCBPcGVyYXRvciB7ZGVzYyA9IFByaW0gcDsgdmFsdWU7IF99IGFzIHQgLT5cbiAgICAoKiB0aGUgdmFsdWUgaXMgaW52YWxpZGF0ZWQsIGJlIHN1cmUgdG8gaW52YWxpZGF0ZSBhbGwgcGFyZW50cyBhcyB3ZWxsICopXG4gICAgYmVnaW4gbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBFdmFsX25vbmUgLT4gKClcbiAgICAgIHwgRXZhbF9wcm9ncmVzcyAtPiBkb19pbnZhbGlkYXRlIEZyYWdpbGUgdDtcbiAgICAgIHwgRXZhbF9zb21lIHYgLT5cbiAgICAgICAgZG9faW52YWxpZGF0ZSBTdHJvbmcgdDtcbiAgICAgICAgcC5yZWxlYXNlIHggdlxuICAgIGVuZFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbigqIEZpeCBwb2ludCAqKVxuXG5sZXQgZml4IGRvYyB+d3J0ID0gbWF0Y2ggcHJqIHdydCB3aXRoXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFB1cmUgXyAtPiBkb2NcbiAgfCBPcGVyYXRvciBfIGFzIHdydCAtPiBpbmogKG9wZXJhdG9yIChGaXgge2RvYyA9IHByaiBkb2M7IHdydH0pKVxuXG50eXBlIHJlbGVhc2VfbGlzdCA9XG4gIHwgUmVsZWFzZV9kb25lXG4gIHwgUmVsZWFzZV9tb3JlIDpcbiAgICAgIHsgb3JpZ2luIDogJ2EgdF87IGVsZW1lbnQgOiAnYiB0XzsgbmV4dCA6IHJlbGVhc2VfbGlzdCB9IC0+IHJlbGVhc2VfbGlzdFxuXG50eXBlIHJlbGVhc2VfcXVldWUgPSByZWxlYXNlX2xpc3QgcmVmXG5sZXQgbWFrZV9yZWxlYXNlX3F1ZXVlICgpID0gcmVmIFJlbGVhc2VfZG9uZVxuXG50eXBlIHJlbGVhc2VfZmFpbHVyZSA9IGV4biAqIFByaW50ZXhjLnJhd19iYWNrdHJhY2VcblxuKCogW3N1Yl9yZWxlYXNlIFtdIG9yaWdpbiBzZWxmXSBpcyBjYWxsZWQgd2hlbiBbb3JpZ2luXSBpcyByZWxlYXNlZCxcbiAgIHdoZXJlIFtvcmlnaW5dIGlzIHJlYWNoYWJsZSBmcm9tIFtzZWxmXSdzIHRyYWNlLlxuICAgV2UncmUgZ29pbmcgdG8gcmVtb3ZlIFtvcmlnaW5dIGZyb20gdGhhdCB0cmFjZSBhcyBbb3JpZ2luXSBpcyBub3cgZGVhZC5cblxuICAgW3N1Yl9yZWxlYXNlXSBjYW5ub3QgcmFpc2UuXG4gICBJZiBhIHByaW1pdGl2ZSByYWlzZXMsIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0IGFuZCBhIHdhcm5pbmcgaXMgZW1pdHRlZC4gKilcbmxldCByZWMgc3ViX3JlbGVhc2VcbiAgOiB0eXBlIGEgYiAuIHJlbGVhc2VfZmFpbHVyZSBsaXN0IC0+IGEgdF8gLT4gYiB0XyAtPiByZWxlYXNlX2ZhaWx1cmUgbGlzdFxuICA9IGZ1biBmYWlsdXJlcyBvcmlnaW4gLT4gZnVuY3Rpb25cbiAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFB1cmUgXyAtPiBmYWlsdXJlc1xuICAgIHwgT3BlcmF0b3IgdCBhcyBzZWxmIC0+XG4gICAgICAoKiBjb21wdXRlIFt0LnRyYWNlIFxcIHtvcmlnaW59XSAqKVxuICAgICAgbGV0IHRyYWNlID0gbWF0Y2ggdC50cmFjZSB3aXRoXG4gICAgICAgIHwgVDAgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgVDEgeCAtPiBhc3NlcnQgKHRfZXF1YWwgeCBvcmlnaW4pOyBUMFxuICAgICAgICB8IFQyICh4LCB5KSAtPlxuICAgICAgICAgIGlmIHRfZXF1YWwgeCBvcmlnaW4gdGhlbiBUMSB5XG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHkgb3JpZ2luIHRoZW4gVDEgeFxuICAgICAgICAgIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgVDMgKHgsIHksIHopIC0+XG4gICAgICAgICAgaWYgdF9lcXVhbCB4IG9yaWdpbiB0aGVuIFQyICh5LCB6KVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB5IG9yaWdpbiB0aGVuIFQyICh4LCB6KVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB6IG9yaWdpbiB0aGVuIFQyICh4LCB5KVxuICAgICAgICAgIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgVDQgKHgsIHksIHosIHcpIC0+XG4gICAgICAgICAgaWYgdF9lcXVhbCB4IG9yaWdpbiB0aGVuIFQzICh5LCB6LCB3KVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB5IG9yaWdpbiB0aGVuIFQzICh4LCB6LCB3KVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB6IG9yaWdpbiB0aGVuIFQzICh4LCB5LCB3KVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB3IG9yaWdpbiB0aGVuIFQzICh4LCB5LCB6KVxuICAgICAgICAgIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgVG4gdG4gYXMgdHJhY2UgLT5cbiAgICAgICAgICBsZXQgcmV2aWR4ID0gcmVtX2lkeCBzZWxmIG9yaWdpbiBpblxuICAgICAgICAgIGFzc2VydCAodF9lcXVhbCB0bi5lbnRyaWVzLihyZXZpZHgpIG9yaWdpbik7XG4gICAgICAgICAgbGV0IGNvdW50ID0gdG4uY291bnQgLSAxIGluXG4gICAgICAgICAgdG4uY291bnQgPC0gY291bnQ7XG4gICAgICAgICAgaWYgcmV2aWR4IDwgY291bnQgdGhlbiAoXG4gICAgICAgICAgICBsZXQgb2JqID0gdG4uZW50cmllcy4oY291bnQpIGluXG4gICAgICAgICAgICB0bi5lbnRyaWVzLihyZXZpZHgpIDwtIG9iajtcbiAgICAgICAgICAgIHRuLmVudHJpZXMuKGNvdW50KSA8LSBkdW1teTtcbiAgICAgICAgICAgIG1vdl9pZHggc2VsZiBjb3VudCByZXZpZHggb2JqXG4gICAgICAgICAgKSBlbHNlXG4gICAgICAgICAgICB0bi5lbnRyaWVzLihyZXZpZHgpIDwtIGR1bW15O1xuICAgICAgICAgIGlmIHRuLmFjdGl2ZSA+IGNvdW50IHRoZW4gdG4uYWN0aXZlIDwtIGNvdW50O1xuICAgICAgICAgIGlmIGNvdW50ID0gNCB0aGVuIChcbiAgICAgICAgICAgICgqIGRvd25ncmFkZSB0byBbVDRdIHRvIHNhdmUgc3BhY2UgKilcbiAgICAgICAgICAgIGxldCBhID0gdG4uZW50cmllcy4oMCkgYW5kIGIgPSB0bi5lbnRyaWVzLigxKSBpblxuICAgICAgICAgICAgbGV0IGMgPSB0bi5lbnRyaWVzLigyKSBhbmQgZCA9IHRuLmVudHJpZXMuKDMpIGluXG4gICAgICAgICAgICBpZ25vcmUgKHJlbV9pZHggc2VsZiBhIDogaW50KTtcbiAgICAgICAgICAgIGlnbm9yZSAocmVtX2lkeCBzZWxmIGIgOiBpbnQpO1xuICAgICAgICAgICAgaWdub3JlIChyZW1faWR4IHNlbGYgYyA6IGludCk7XG4gICAgICAgICAgICBpZ25vcmUgKHJlbV9pZHggc2VsZiBkIDogaW50KTtcbiAgICAgICAgICAgIFQ0IChhLCBiLCBjLCBkKVxuICAgICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIHRuLmVudHJpZXMgaW5cbiAgICAgICAgICAgIGlmIGNvdW50IDw9IGxlbiBsc3IgMiB0aGVuXG4gICAgICAgICAgICAgIFRuIHsgYWN0aXZlID0gdG4uYWN0aXZlOyBjb3VudCA9IHRuLmNvdW50O1xuICAgICAgICAgICAgICAgICAgIGVudHJpZXMgPSBBcnJheS5zdWIgdG4uZW50cmllcyAwIChsZW4gbHNyIDEpIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdHJhY2VcbiAgICAgICAgICApXG4gICAgICBpblxuICAgICAgdC50cmFjZSA8LSB0cmFjZTtcbiAgICAgIG1hdGNoIHRyYWNlIHdpdGhcbiAgICAgIHwgVDAgLT5cbiAgICAgICAgKCogW3NlbGZdIGlzIG5vdCBhY3RpdmUgYW55bW9yZSwgc2luY2UgaXQncyBub3QgcmVhY2hhYmxlXG4gICAgICAgICAgIGZyb20gYW55IHJvb3QuIFdlIGNhbiByZWxlYXNlIGl0cyBjYWNoZWQgdmFsdWUgYW5kXG4gICAgICAgICAgIHJlY3Vyc2l2ZWx5IHJlbGVhc2UgaXRzIHN1YnRyZWUuICopXG4gICAgICAgIGxldCB2YWx1ZSA9IHQudmFsdWUgaW5cbiAgICAgICAgdC52YWx1ZSA8LSBFdmFsX3Byb2dyZXNzO1xuICAgICAgICBiZWdpbiBtYXRjaCB0LmRlc2Mgd2l0aFxuICAgICAgICAgIHwgTWFwICAoeCwgXykgLT4gc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB4XG4gICAgICAgICAgfCBNYXAyICh4LCB5LCBfKSAtPlxuICAgICAgICAgICAgc3ViX3JlbGVhc2UgKHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgeCkgc2VsZiB5XG4gICAgICAgICAgfCBQYWlyICh4LCB5KSAtPlxuICAgICAgICAgICAgc3ViX3JlbGVhc2UgKHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgeCkgc2VsZiB5XG4gICAgICAgICAgfCBBcHAgICh4LCB5KSAtPlxuICAgICAgICAgICAgc3ViX3JlbGVhc2UgKHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgeCkgc2VsZiB5XG4gICAgICAgICAgfCBKb2luICh7IGNoaWxkOyBpbnRlcm1lZGlhdGUgfSBhcyB0KSAtPlxuICAgICAgICAgICAgbGV0IGZhaWx1cmVzID0gc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiBjaGlsZCBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggaW50ZXJtZWRpYXRlIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IGZhaWx1cmVzXG4gICAgICAgICAgICAgIHwgU29tZSBjaGlsZCcgLT5cbiAgICAgICAgICAgICAgICB0LmludGVybWVkaWF0ZSA8LSBOb25lO1xuICAgICAgICAgICAgICAgIHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgY2hpbGQnXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICB8IFZhciAgXyAtPiBmYWlsdXJlc1xuICAgICAgICAgIHwgRml4IHtkb2M7IHdydH0gLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHdydCkgc2VsZiBkb2NcbiAgICAgICAgICB8IFByaW0gdCAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgICAgICAgICB8IEV2YWxfbm9uZSAgfCBFdmFsX3Byb2dyZXNzIC0+IGZhaWx1cmVzXG4gICAgICAgICAgICAgIHwgRXZhbF9zb21lIHggLT5cbiAgICAgICAgICAgICAgICBiZWdpbiBtYXRjaCB0LnJlbGVhc2UgKGluaiBzZWxmKSB4IHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgKCkgLT4gZmFpbHVyZXNcbiAgICAgICAgICAgICAgICAgIHwgZXhjZXB0aW9uIGV4biAtPlxuICAgICAgICAgICAgICAgICAgICBsZXQgYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgICAgICAgICAgICAgICAoZXhuLCBidCkgOjogZmFpbHVyZXNcbiAgICAgICAgICAgICAgICBlbmRcbiAgICAgICAgICAgIGVuZFxuICAgICAgICBlbmRcbiAgICAgIHwgXyAtPiBmYWlsdXJlc1xuXG4oKiBbc3ViX2FjcXVpcmVdIGNhbm5vdCByYWlzZSAqKVxubGV0IHJlYyBzdWJfYWNxdWlyZSA6IHR5cGUgYSBiIC4gYSB0XyAtPiBiIHRfIC0+IHVuaXQgPSBmdW4gb3JpZ2luIC0+XG4gIGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFB1cmUgXyAtPiAoKVxuICB8IE9wZXJhdG9yIHQgYXMgc2VsZiAtPlxuICAgICgqIFthY3F1aXJlXSBpcyB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhpcyBvcGVyYXRvclxuICAgICAgIGlzIHVzZWQsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBhY3F1aXJlIGl0cyBjaGlsZHJlbiAqKVxuICAgIGxldCBhY3F1aXJlID0gbWF0Y2ggdC50cmFjZSB3aXRoIFQwIC0+IHRydWUgfCBfIC0+IGZhbHNlIGluXG4gICAgbGV0IHRyYWNlID0gbWF0Y2ggdC50cmFjZSB3aXRoXG4gICAgICB8IFQwIC0+IFQxIG9yaWdpblxuICAgICAgfCBUMSB4IC0+IFQyIChvcmlnaW4sIHgpXG4gICAgICB8IFQyICh4LCB5KSAtPiBUMyAob3JpZ2luLCB4LCB5KVxuICAgICAgfCBUMyAoeCwgeSwgeikgLT4gVDQgKG9yaWdpbiwgeCwgeSwgeilcbiAgICAgIHwgVDQgKHgsIHksIHosIHcpIC0+XG4gICAgICAgIGxldCBvYmpfb3JpZ2luID0gb2JqX3Qgb3JpZ2luIGluXG4gICAgICAgIGxldCBlbnRyaWVzID1cbiAgICAgICAgICBbfCBvYmpfdCB4OyBvYmpfdCB5OyBvYmpfdCB6OyBvYmpfdCB3OyBvYmpfb3JpZ2luOyBkdW1teTsgZHVtbXk7IGR1bW15IHxdXG4gICAgICAgIGluXG4gICAgICAgIGZvciBpID0gMCB0byA0IGRvIGFkZF9pZHggc2VsZiBpIGVudHJpZXMuKGkpIGRvbmU7XG4gICAgICAgIFRuIHsgYWN0aXZlID0gNTsgY291bnQgPSA1OyBlbnRyaWVzIH1cbiAgICAgIHwgVG4gdG4gYXMgdHJhY2UgLT5cbiAgICAgICAgbGV0IGluZGV4ID0gdG4uY291bnQgaW5cbiAgICAgICAgbGV0IGVudHJpZXMsIHRyYWNlID1cbiAgICAgICAgICAoKiBwb3NzaWJseSByZXNpemUgYXJyYXkgW2VudHJpZXNdICopXG4gICAgICAgICAgaWYgaW5kZXggPCBBcnJheS5sZW5ndGggdG4uZW50cmllcyB0aGVuIChcbiAgICAgICAgICAgIHRuLmNvdW50IDwtIHRuLmNvdW50ICsgMTtcbiAgICAgICAgICAgICh0bi5lbnRyaWVzLCB0cmFjZSlcbiAgICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICAgbGV0IGVudHJpZXMgPSBBcnJheS5tYWtlIChpbmRleCAqIDIpIGR1bW15IGluXG4gICAgICAgICAgICBBcnJheS5ibGl0IHRuLmVudHJpZXMgMCBlbnRyaWVzIDAgaW5kZXg7XG4gICAgICAgICAgICAoZW50cmllcywgVG4geyBhY3RpdmUgPSB0bi5hY3RpdmU7IGNvdW50ID0gaW5kZXggKyAxOyBlbnRyaWVzIH0pXG4gICAgICAgICAgKVxuICAgICAgICBpblxuICAgICAgICBsZXQgb2JqX29yaWdpbiA9IG9ial90IG9yaWdpbiBpblxuICAgICAgICBlbnRyaWVzLihpbmRleCkgPC0gb2JqX29yaWdpbjtcbiAgICAgICAgYWRkX2lkeCBzZWxmIGluZGV4IG9ial9vcmlnaW47XG4gICAgICAgIHRyYWNlXG4gICAgaW5cbiAgICB0LnRyYWNlIDwtIHRyYWNlO1xuICAgIGlmIGFjcXVpcmUgdGhlbiAoXG4gICAgICAoKiBhY3F1aXJlIGltbWVkaWF0ZSBjaGlsZHJlbiwgYW5kIHNvIG9uIHJlY3Vyc2l2ZWx5ICopXG4gICAgICBtYXRjaCB0LmRlc2Mgd2l0aFxuICAgICAgfCBNYXAgICh4LCBfKSAtPiBzdWJfYWNxdWlyZSBzZWxmIHhcbiAgICAgIHwgTWFwMiAoeCwgeSwgXykgLT5cbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB4O1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHlcbiAgICAgIHwgUGFpciAoeCwgeSkgLT5cbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB4O1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHlcbiAgICAgIHwgQXBwICAoeCwgeSkgLT5cbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB4O1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHlcbiAgICAgIHwgRml4ICB7ZG9jOyB3cnR9IC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgZG9jO1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHdydFxuICAgICAgfCBKb2luIHsgY2hpbGQ7IGludGVybWVkaWF0ZSB9IC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgY2hpbGQ7XG4gICAgICAgIGJlZ2luIG1hdGNoIGludGVybWVkaWF0ZSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIF8gLT5cbiAgICAgICAgICAgIGFzc2VydCBmYWxzZSAoKiB0aGlzIGNhbid0IGluaXRpYWxpemVkIGFscmVhZHksIGZpcnN0LXRpbWUgYWNxdWlyZSAqKVxuICAgICAgICBlbmRcbiAgICAgIHwgVmFyICBfIC0+ICgpXG4gICAgICB8IFByaW0gXyAtPiAoKVxuICAgIClcblxuKCogbWFrZSBzdXJlIHRoYXQgW29yaWdpbl0gaXMgaW4gW3NlbGYudHJhY2VdLCBwYXNzZWQgYXMgbGFzdCBhcmcuICopXG5sZXQgYWN0aXZhdGVfdHJhY2luZyBzZWxmIG9yaWdpbiA9IGZ1bmN0aW9uXG4gIHwgVG4gdG4gLT5cbiAgICBsZXQgaWR4ID0gZ2V0X2lkeCBzZWxmIG9yaWdpbiBpbiAoKiBpbmRleCBvZiBbc2VsZl0gaW4gW29yaWdpbi50cmFjZV9pZHhdICopXG4gICAgbGV0IGFjdGl2ZSA9IHRuLmFjdGl2ZSBpblxuICAgICgqIFtpZHggPCBhY3RpdmVdIG1lYW5zIFtzZWxmXSBpcyBhbHJlYWR5IHRyYWNlZCBieSBbb3JpZ2luXS5cbiAgICAgICBXZSBvbmx5IGhhdmUgdG8gYWRkIFtzZWxmXSB0byB0aGUgZW50cmllcyBpZiBbaWR4ID49IGFjdGl2ZV0uICopXG4gICAgaWYgaWR4ID49IGFjdGl2ZSB0aGVuIChcbiAgICAgIHRuLmFjdGl2ZSA8LSBhY3RpdmUgKyAxO1xuICAgICk7XG4gICAgaWYgaWR4ID4gYWN0aXZlIHRoZW4gKFxuICAgICAgKCogc3dhcCB3aXRoIGxhc3QgZW50cnkgaW4gW3RuLmVudHJpZXNdICopXG4gICAgICBsZXQgb2xkID0gdG4uZW50cmllcy4oYWN0aXZlKSBpblxuICAgICAgdG4uZW50cmllcy4oaWR4KSA8LSBvbGQ7XG4gICAgICB0bi5lbnRyaWVzLihhY3RpdmUpIDwtIG9ial90IG9yaWdpbjtcbiAgICAgIG1vdl9pZHggc2VsZiBhY3RpdmUgaWR4IG9sZDtcbiAgICAgIG1vdl9pZHggc2VsZiBpZHggYWN0aXZlIG9yaWdpblxuICAgIClcbiAgfCBfIC0+ICgpXG5cbmxldCBzdWJfaXNfZGFtYWdlZCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFB1cmUgXyAtPiBmYWxzZVxuICB8IE9wZXJhdG9yIHt2YWx1ZTsgX30gLT5cbiAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgfCBFdmFsX25vbmUgLT4gdHJ1ZVxuICAgIHwgRXZhbF9zb21lIF8gLT4gZmFsc2VcbiAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gYXNzZXJ0IGZhbHNlXG5cbigqIFtzdWJfc2FtcGxlIG9yaWdpbiBzZWxmXSBjb21wdXRlcyBhIHZhbHVlIGZvciBbc2VsZl0uXG5cbiAgIFtzdWJfc2FtcGxlXSByYWlzZSBpZiBhbnkgdXNlci1wcm92aWRlZCBjb21wdXRhdGlvbiByYWlzZXMuXG4gICBHcmFwaCB3aWxsIGJlIGxlZnQgaW4gYSBjb2hlcmVudCBzdGF0ZSBidXQgZXhjZXB0aW9uIHdpbGwgYmUgcHJvcGFnYXRlZFxuICAgdG8gdGhlIG9ic2VydmVyLiAqKVxubGV0IHN1Yl9zYW1wbGUgcXVldWUgPVxuICBsZXQgcmVjIGF1eCA6IHR5cGUgYSBiIC4gYSB0XyAtPiBiIHRfIC0+IGIgPSBmdW4gb3JpZ2luIC0+XG4gICAgZnVuY3Rpb25cbiAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFB1cmUgeCAtPiB4XG4gICAgfCBPcGVyYXRvciB0IGFzIHNlbGYgLT5cbiAgICAgICgqIHRyeSB0byB1c2UgY2FjaGVkIHZhbHVlLCBpZiBwcmVzZW50ICopXG4gICAgICBtYXRjaCB0LnZhbHVlIHdpdGhcbiAgICAgIHwgRXZhbF9zb21lIHZhbHVlIC0+XG4gICAgICAgIGFjdGl2YXRlX3RyYWNpbmcgc2VsZiBvcmlnaW4gdC50cmFjZTtcbiAgICAgICAgdmFsdWVcbiAgICAgIHwgXyAtPlxuICAgICAgICB0LnZhbHVlIDwtIEV2YWxfcHJvZ3Jlc3M7XG4gICAgICAgIGxldCByZXN1bHQgOiBiID0gbWF0Y2ggdC5kZXNjIHdpdGhcbiAgICAgICAgICB8IE1hcCAgKHgsIGYpIC0+IGYgKGF1eCBzZWxmIHgpXG4gICAgICAgICAgfCBNYXAyICh4LCB5LCBmKSAtPiBmIChhdXggc2VsZiB4KSAoYXV4IHNlbGYgeSlcbiAgICAgICAgICB8IFBhaXIgKHgsIHkpIC0+IChhdXggc2VsZiB4LCBhdXggc2VsZiB5KVxuICAgICAgICAgIHwgQXBwICAoZiwgeCkgLT4gKGF1eCBzZWxmIGYpIChhdXggc2VsZiB4KVxuICAgICAgICAgIHwgRml4IHtkb2M7IHdydH0gLT5cbiAgICAgICAgICAgIGxldCBfID0gYXV4IHNlbGYgd3J0IGluXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXV4IHNlbGYgZG9jIGluXG4gICAgICAgICAgICBpZiBzdWJfaXNfZGFtYWdlZCB3cnQgdGhlblxuICAgICAgICAgICAgICBhdXggb3JpZ2luIHNlbGZcbiAgICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgICBpZiBzdWJfaXNfZGFtYWdlZCBkb2MgdGhlblxuICAgICAgICAgICAgICAgIGRvX2ludmFsaWRhdGUgRnJhZ2lsZSBzZWxmO1xuICAgICAgICAgICAgICByZXN1bHRcbiAgICAgICAgICAgIClcbiAgICAgICAgICB8IEpvaW4geCAtPlxuICAgICAgICAgICAgbGV0IGludGVybWVkaWF0ZSA9XG4gICAgICAgICAgICAgICgqIFdlIGhhdmVuJ3QgdG91Y2hlZCBhbnkgc3RhdGUgeWV0LFxuICAgICAgICAgICAgICAgICBpdCBpcyBzYWZlIGZvciBbYXV4XSB0byByYWlzZSAqKVxuICAgICAgICAgICAgICBhdXggc2VsZiB4LmNoaWxkXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggeC5pbnRlcm1lZGlhdGUgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICB4LmludGVybWVkaWF0ZSA8LSBTb21lIGludGVybWVkaWF0ZTtcbiAgICAgICAgICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIGludGVybWVkaWF0ZTtcbiAgICAgICAgICAgICAgfCBTb21lIHgnIHdoZW4geCcgIT0gaW50ZXJtZWRpYXRlIC0+XG4gICAgICAgICAgICAgICAgcXVldWUgOj0gUmVsZWFzZV9tb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luID0gc2VsZjtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IHgnO1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gIXF1ZXVlO1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB4LmludGVybWVkaWF0ZSA8LSBTb21lIGludGVybWVkaWF0ZTtcbiAgICAgICAgICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIGludGVybWVkaWF0ZTtcbiAgICAgICAgICAgICAgfCBTb21lIF8gLT4gKClcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGF1eCBzZWxmIGludGVybWVkaWF0ZVxuICAgICAgICAgIHwgVmFyICB4IC0+IHguYmluZGluZ1xuICAgICAgICAgIHwgUHJpbSB0IC0+IHQuYWNxdWlyZSAoaW5qIHNlbGYpXG4gICAgICAgIGluXG4gICAgICAgIGJlZ2luIG1hdGNoIHQudmFsdWUgd2l0aFxuICAgICAgICAgIHwgRXZhbF9wcm9ncmVzcyAtPiB0LnZhbHVlIDwtIEV2YWxfc29tZSByZXN1bHQ7XG4gICAgICAgICAgfCBFdmFsX25vbmUgfCBFdmFsX3NvbWUgXyAtPiAoKVxuICAgICAgICBlbmQ7XG4gICAgICAgICgqIFtzZWxmXSBqdXN0IGJlY2FtZSBhY3RpdmUsIHNvIGl0IG1heSBpbnZhbGlkYXRlIFtvcmlnaW5dIGluIGNhc2UgaXRzXG4gICAgICAgICAgIHZhbHVlIGNoYW5nZXMgYmVjYXVzZSBvZiBbdC5kZXNjXSwgbGlrZSBpZiBpdCdzIGEgdmFyaWFibGUgYW5kIGdldHNcbiAgICAgICAgICAgbXV0YXRlZCwgb3IgaWYgaXQncyBhIHByaW1pdGl2ZSB0aGF0IGdldHMgaW52YWxpZGF0ZWQuXG4gICAgICAgICAgIFdlIG5lZWQgdG8gcHV0IFtvcmlnaW5dIGludG8gW3NlbGYudHJhY2VdIGluIGNhc2UgaXQgaXNuJ3QgdGhlcmUgeWV0LiAqKVxuICAgICAgICBhY3RpdmF0ZV90cmFjaW5nIHNlbGYgb3JpZ2luIHQudHJhY2U7XG4gICAgICAgIHJlc3VsdFxuICBpblxuICBhdXhcblxudHlwZSAnYSByb290ID0gJ2EgdFxuXG5sZXQgb2JzZXJ2ZSA/KG9uX2ludmFsaWRhdGU9aWdub3JlKSBjaGlsZCA6IF8gcm9vdCA9XG4gIGxldCByb290ID0gUm9vdCB7XG4gICAgICBjaGlsZCA9IHByaiBjaGlsZDtcbiAgICAgIHZhbHVlID0gRXZhbF9ub25lO1xuICAgICAgb25faW52YWxpZGF0ZTtcbiAgICAgIHRyYWNlX2lkeCA9IEkwO1xuICAgICAgYWNxdWlyZWQgPSBmYWxzZTtcbiAgICB9IGluXG4gIGluaiByb290XG5cbmV4Y2VwdGlvbiBSZWxlYXNlX2ZhaWx1cmUgb2YgZXhuIG9wdGlvbiAqIHJlbGVhc2VfZmFpbHVyZSBsaXN0XG5cbmxldCByYXdfZmx1c2hfcmVsZWFzZV9xdWV1ZSBxdWV1ZSA9XG4gIGxldCByZWMgYXV4IGZhaWx1cmVzID0gZnVuY3Rpb25cbiAgICB8IFJlbGVhc2VfZG9uZSAtPiBmYWlsdXJlc1xuICAgIHwgUmVsZWFzZV9tb3JlIHQgLT5cbiAgICAgIGxldCBmYWlsdXJlcyA9IHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHQub3JpZ2luIHQuZWxlbWVudCBpblxuICAgICAgYXV4IGZhaWx1cmVzIHQubmV4dFxuICBpblxuICBhdXggW10gcXVldWVcblxubGV0IGZsdXNoX3JlbGVhc2VfcXVldWUgcXVldWUgPVxuICBsZXQgcXVldWUnID0gIXF1ZXVlIGluXG4gIHF1ZXVlIDo9IFJlbGVhc2VfZG9uZTtcbiAgcmF3X2ZsdXNoX3JlbGVhc2VfcXVldWUgcXVldWUnXG5cbmxldCBzYW1wbGUgcXVldWUgeCA9IG1hdGNoIHByaiB4IHdpdGhcbiAgfCBQdXJlIF8gfCBPcGVyYXRvciBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggdC52YWx1ZSB3aXRoXG4gICAgfCBFdmFsX3NvbWUgdmFsdWUgLT4gdmFsdWVcbiAgICB8IF8gLT5cbiAgICAgICgqIG5vIGNhY2hlZCB2YWx1ZSwgY29tcHV0ZSBpdCBub3cgKilcbiAgICAgIGlmIG5vdCB0LmFjcXVpcmVkIHRoZW4gKFxuICAgICAgICB0LmFjcXVpcmVkIDwtIHRydWU7XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgdC5jaGlsZDtcbiAgICAgICk7XG4gICAgICB0LnZhbHVlIDwtIEV2YWxfcHJvZ3Jlc3M7XG4gICAgICBsZXQgdmFsdWUgPSBzdWJfc2FtcGxlIHF1ZXVlIHNlbGYgdC5jaGlsZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggdC52YWx1ZSB3aXRoXG4gICAgICAgIHwgRXZhbF9wcm9ncmVzcyAtPiB0LnZhbHVlIDwtIEV2YWxfc29tZSB2YWx1ZTsgKCogY2FjaGUgdmFsdWUgKilcbiAgICAgICAgfCBFdmFsX25vbmUgfCBFdmFsX3NvbWUgXyAtPiAoKVxuICAgICAgZW5kO1xuICAgICAgdmFsdWVcblxubGV0IGlzX2RhbWFnZWQgeCA9IG1hdGNoIHByaiB4IHdpdGhcbiAgfCBQdXJlIF8gfCBPcGVyYXRvciBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3Qge3ZhbHVlID0gRXZhbF9zb21lIF87IF99IC0+IGZhbHNlXG4gIHwgUm9vdCB7dmFsdWUgPSBFdmFsX25vbmUgfCBFdmFsX3Byb2dyZXNzOyBffSAtPiB0cnVlXG5cbmxldCByZWxlYXNlIHF1ZXVlIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSBfIHwgT3BlcmF0b3IgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQgYXMgc2VsZiAtPlxuICAgIGlmIHQuYWNxdWlyZWQgdGhlbiAoXG4gICAgICAoKiByZWxlYXNlIHN1YnRyZWUsIHJlbW92ZSBjYWNoZWQgdmFsdWUgKilcbiAgICAgIHQudmFsdWUgPC0gRXZhbF9ub25lO1xuICAgICAgdC5hY3F1aXJlZCA8LSBmYWxzZTtcbiAgICAgIHF1ZXVlIDo9IFJlbGVhc2VfbW9yZSB7IG9yaWdpbiA9IHNlbGY7IGVsZW1lbnQgPSB0LmNoaWxkOyBuZXh0ID0gIXF1ZXVlIH1cbiAgICApXG5cbmxldCBzZXRfb25faW52YWxpZGF0ZSB4IGYgPVxuICBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSBfIHwgT3BlcmF0b3IgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQgLT4gdC5vbl9pbnZhbGlkYXRlIDwtIGZcblxubGV0IGZsdXNoX29yX2ZhaWwgbWFpbl9leG4gcXVldWUgPVxuICBtYXRjaCBmbHVzaF9yZWxlYXNlX3F1ZXVlIHF1ZXVlIHdpdGhcbiAgfCBbXSAtPiAoKVxuICB8IGZhaWx1cmVzIC0+IHJhaXNlIChSZWxlYXNlX2ZhaWx1cmUgKG1haW5fZXhuLCBmYWlsdXJlcykpXG5cbmxldCBxdWlja19zYW1wbGUgcm9vdCA9XG4gIGxldCBxdWV1ZSA9IHJlZiBSZWxlYXNlX2RvbmUgaW5cbiAgbWF0Y2ggc2FtcGxlIHF1ZXVlIHJvb3Qgd2l0aFxuICB8IHJlc3VsdCAtPiBmbHVzaF9vcl9mYWlsIE5vbmUgcXVldWU7IHJlc3VsdFxuICB8IGV4Y2VwdGlvbiBleG4gLT4gZmx1c2hfb3JfZmFpbCAoU29tZSBleG4pIHF1ZXVlOyByYWlzZSBleG5cblxubGV0IHF1aWNrX3JlbGVhc2Ugcm9vdCA9XG4gIGxldCBxdWV1ZSA9IHJlZiBSZWxlYXNlX2RvbmUgaW5cbiAgcmVsZWFzZSBxdWV1ZSByb290O1xuICBmbHVzaF9vcl9mYWlsIE5vbmUgcXVldWVcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoPj49KSB4IGYgPSBiaW5kIHggfmZcbiAgbGV0ICg+fD0pIHggZiA9IG1hcCB4IH5mXG4gIGxldCAoPCo+KSA9IGFwcFxuZW5kXG5cbigqJFJcbiAgbGV0IHggPSB2YXIgMCBpblxuICBsZXQgeSA9IG1hcCB+ZjpzdWNjIChnZXQgeCkgaW5cbiAgbGV0IG9feSA9IEx3ZC5vYnNlcnZlIHkgaW5cbiAgYXNzZXJ0X2VxdWFsIDEgKHF1aWNrX3NhbXBsZSBvX3kpO1xuICBzZXQgeCAxMDtcbiAgYXNzZXJ0X2VxdWFsIDExIChxdWlja19zYW1wbGUgb195KTtcbiAgKilcbiIsIlxudHlwZSAnYSBtb25vaWQgPSAnYSAqICgnYSAtPiAnYSAtPiAnYSlcblxubGV0IGxpZnRfbW9ub2lkICh6ZXJvLCBwbHVzKSA9XG4gIChMd2QucmV0dXJuIHplcm8sIEx3ZC5tYXAyIH5mOnBsdXMpXG5cbmxldCBtYXBfcmVkdWNlIGluaiAoemVybywgcGx1cykgaXRlbXMgPVxuICBsZXQgcmVjIGNvbnNfbW9ub2lkIGMgeHMgdiA9XG4gICAgbWF0Y2ggeHMgd2l0aFxuICAgIHwgKGMnLCB2JykgOjogeHMgd2hlbiBjID0gYycgLT5cbiAgICAgIGNvbnNfbW9ub2lkIChjICsgMSkgeHMgKHBsdXMgdicgdilcbiAgICB8IHhzIC0+IChjLCB2KSA6OiB4c1xuICBpblxuICBsZXQgY29uc19tb25vaWQgeHMgdiA9IGNvbnNfbW9ub2lkIDAgeHMgKGluaiB2KSBpblxuICBtYXRjaCBMaXN0LmZvbGRfbGVmdCBjb25zX21vbm9pZCBbXSBpdGVtcyB3aXRoXG4gIHwgW10gLT4gemVyb1xuICB8IChfLHgpIDo6IHhzIC0+XG4gICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgKF8sIHYpIC0+IHBsdXMgdiBhY2MpIHggeHNcblxubGV0IHJlZHVjZSBtb25vaWQgaXRlbXMgPSBtYXBfcmVkdWNlIChmdW4geCAtPiB4KSBtb25vaWQgaXRlbXNcblxubGV0IHJlYyBjb25zX2x3ZF9tb25vaWQgcGx1cyBjIHhzIHYgPVxuICBtYXRjaCB4cyB3aXRoXG4gIHwgKGMnLCB2JykgOjogeHMgd2hlbiBjID0gYycgLT5cbiAgICBjb25zX2x3ZF9tb25vaWQgcGx1cyAoYyArIDEpIHhzIChMd2QubWFwMiB+ZjpwbHVzIHYnIHYpXG4gIHwgeHMgLT4gKGMsIHYpIDo6IHhzXG5cbmxldCBwYWNrICh6ZXJvLCBwbHVzKSBpdGVtcyA9XG4gIG1hdGNoIExpc3QuZm9sZF9sZWZ0IChjb25zX2x3ZF9tb25vaWQgcGx1cyAwKSBbXSBpdGVtcyB3aXRoXG4gIHwgW10gLT4gTHdkLnJldHVybiB6ZXJvXG4gIHwgKF8seCkgOjogeHMgLT5cbiAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyAoXywgdikgLT4gTHdkLm1hcDIgfmY6cGx1cyB2IGFjYykgeCB4c1xuXG5sZXQgcGFja19zZXEgKHplcm8sIHBsdXMpIGl0ZW1zID1cbiAgbWF0Y2ggU2VxLmZvbGRfbGVmdCAoY29uc19sd2RfbW9ub2lkIHBsdXMgMCkgW10gaXRlbXMgd2l0aFxuICB8IFtdIC0+IEx3ZC5yZXR1cm4gemVyb1xuICB8IChfLHgpIDo6IHhzIC0+XG4gICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgKF8sIHYpIC0+IEx3ZC5tYXAyIH5mOnBsdXMgdiBhY2MpIHggeHNcblxubGV0IHJlYyBtYXBfbCAoZjonYSAtPiAnYiBMd2QudCkgKGw6J2EgbGlzdCkgOiAnYiBsaXN0IEx3ZC50ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gTHdkLnJldHVybiBbXVxuICB8IHggOjogdGwgLT4gTHdkLm1hcDIgfmY6TGlzdC5jb25zIChmIHgpIChtYXBfbCBmIHRsKVxuXG5sZXQgZmxhdHRlbl9sIChsOidhIEx3ZC50IGxpc3QpIDogJ2EgbGlzdCBMd2QudCA9XG4gIG1hcF9sIChmdW4geC0+eCkgbFxuXG4oKiogezEgTWlzY2VsbGFuZW91cyBmdW5jdGlvbnN9XG5cbiAgICBJIGRvbid0IGtub3cgd2hlcmUgdG8gcHV0IHRoZXNlLCBidXQgdGhleSBhcmUgdXNlZnVsLCBlc3BlY2lhbGx5IGZvclxuICAgIFVJLXJlbGF0ZWQgY29tcHV0YXRpb25zLlxuKilcblxubGV0IG1pbmkgYSBiIDogaW50ID0gaWYgYiA8IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgbWF4aSBhIGIgOiBpbnQgPSBpZiBiID4gYSB0aGVuIGIgZWxzZSBhXG5cbmxldCBjbGFtcGkgeCB+bWluIH5tYXggOiBpbnQgPVxuICBpZiB4IDwgbWluIHRoZW5cbiAgICBtaW5cbiAgZWxzZSBpZiB4ID4gbWF4IHRoZW5cbiAgICBtYXhcbiAgZWxzZVxuICAgIHhcblxubGV0IG1pbmYgYSBiIDogZmxvYXQgPSBpZiBiIDwgYSB0aGVuIGIgZWxzZSBhXG5cbmxldCBtYXhmIGEgYiA6IGZsb2F0ID0gaWYgYiA+IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgY2xhbXBmIHggfm1pbiB+bWF4IDogZmxvYXQgPVxuICBpZiB4IDwgbWluIHRoZW5cbiAgICBtaW5cbiAgZWxzZSBpZiB4ID4gbWF4IHRoZW5cbiAgICBtYXhcbiAgZWxzZVxuICAgIHhcbiIsInR5cGUgJ2EgYmluZGluZyA9XG4gIHwgQm91bmQgb2YgeyB2YWx1ZSA6ICdhIDsgbXV0YWJsZSB2YWxpZCA6IGJvb2wgfVxuICB8IFVuYm91bmRcblxudHlwZSAnYSB0cmVlID1cbiAgfCBMZWFmXG4gIHwgTm9kZSBvZiB7XG4gICAgICBtdXRhYmxlIHZlcnNpb24gOiBpbnQ7XG4gICAgICBtdXRhYmxlIGxlZnQgICAgOiAnYSB0cmVlO1xuICAgICAgbXV0YWJsZSBiaW5kaW5nIDogJ2EgYmluZGluZztcbiAgICAgIG11dGFibGUgcmlnaHQgICA6ICdhIHRyZWU7XG4gICAgICBtdXRhYmxlIHBhcmVudCAgOiAnYSB0cmVlO1xuICAgICAgbXV0YWJsZSBzaXplICAgIDogaW50O1xuICAgIH1cbiAgfCBSb290IG9mIHtcbiAgICAgIG11dGFibGUgdmVyc2lvbiA6IGludDtcbiAgICAgIG11dGFibGUgY2hpbGQgOiAnYSB0cmVlO1xuICAgICAgbXV0YWJsZSBnZW5lcmF0aW9uIDogdW5pdCByZWY7XG4gICAgICBtdXRhYmxlIG9uX2ludmFsaWRhdGUgOiBPYmoudCBMd2QucHJpbSBsaXN0O1xuICAgIH1cblxudHlwZSAnYSB0ID0gJ2EgdHJlZVxudHlwZSAnYSByb3cgPSAnYSB0cmVlXG5cbmxldCBub3Rfb3JpZ2luID0gcmVmICgpICgqIG5vdCB7IW9yaWdpbn0gKilcbmxldCBvcmlnaW4gPSByZWYgKCkgKCogbm90IHshbm90X29yaWdpbn0gKilcblxubGV0IG1ha2UgKCkgPVxuICBSb290IHsgY2hpbGQgPSBMZWFmOyBnZW5lcmF0aW9uID0gb3JpZ2luOyB2ZXJzaW9uID0gMDsgb25faW52YWxpZGF0ZSA9IFtdIH1cblxubGV0IHNldF9wYXJlbnQgfnBhcmVudCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUgbiAtPiBuLnBhcmVudCA8LSBwYXJlbnRcbiAgfCBMZWFmIC0+ICgpXG5cbmxldCByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZCB+bmV3Y2hpbGQgPVxuICBtYXRjaCBwYXJlbnQgd2l0aFxuICB8IFJvb3QgciAtPlxuICAgIGFzc2VydCAoci5jaGlsZCA9PSBvbGRjaGlsZCk7XG4gICAgci5jaGlsZCA8LSBuZXdjaGlsZFxuICB8IE5vZGUgbiB3aGVuIG4ubGVmdCA9PSBvbGRjaGlsZCAtPlxuICAgIG4ubGVmdCA8LSBuZXdjaGlsZFxuICB8IE5vZGUgbiB3aGVuIG4ucmlnaHQgPT0gb2xkY2hpbGQgLT5cbiAgICBuLnJpZ2h0IDwtIG5ld2NoaWxkXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IG1ha2Vfbm9kZSBzZXQgfmxlZnQgfnJpZ2h0IH5wYXJlbnQgPVxuICBsZXQgYmluZGluZyA9IG1hdGNoIHNldCB3aXRoXG4gICAgfCBOb25lIC0+IFVuYm91bmRcbiAgICB8IFNvbWUgdmFsdWUgLT4gQm91bmQgeyB2YWx1ZSA7IHZhbGlkID0gdHJ1ZSB9XG4gIGluXG4gIGxldCBub2RlID0gTm9kZSB7IGxlZnQ7IHJpZ2h0OyBwYXJlbnQ7IHZlcnNpb24gPSAwOyBzaXplID0gMDsgYmluZGluZyB9IGluXG4gIHNldF9wYXJlbnQgbGVmdCAgfnBhcmVudDpub2RlO1xuICBzZXRfcGFyZW50IHJpZ2h0IH5wYXJlbnQ6bm9kZTtcbiAgbm9kZVxuXG5sZXQgcmVjIHJhd19pbnZhbGlkYXRlID0gZnVuY3Rpb25cbiAgfCBOb2RlIHsgc2l6ZSA9IDA7IF8gfSAtPiAoKVxuICB8IE5vZGUgdCAtPlxuICAgIHQuc2l6ZSA8LSAwO1xuICAgIHJhd19pbnZhbGlkYXRlIHQucGFyZW50XG4gIHwgUm9vdCByIC0+XG4gICAgTGlzdC5pdGVyIEx3ZC5pbnZhbGlkYXRlIHIub25faW52YWxpZGF0ZVxuICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwcmVwZW5kID9zZXQgPSBmdW5jdGlvblxuICB8IFJvb3QgciBhcyBwYXJlbnQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSBwYXJlbnQ7XG4gICAgbGV0IG5vZGUgPSBtYWtlX25vZGUgc2V0IH5sZWZ0OkxlYWYgfnJpZ2h0OnIuY2hpbGQgfnBhcmVudCBpblxuICAgIHIuY2hpbGQgPC0gbm9kZTtcbiAgICBub2RlXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHByZXBlbmQnIHggc2V0ID0gaWdub3JlIChwcmVwZW5kIHggfnNldClcblxubGV0IGFwcGVuZCA/c2V0ID0gZnVuY3Rpb25cbiAgfCBSb290IHIgYXMgcGFyZW50IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgcGFyZW50O1xuICAgIGxldCBub2RlID0gbWFrZV9ub2RlIHNldCB+bGVmdDpyLmNoaWxkIH5yaWdodDpMZWFmIH5wYXJlbnQgaW5cbiAgICByLmNoaWxkIDwtIG5vZGU7XG4gICAgbm9kZVxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBhcHBlbmQnIHggc2V0ID0gaWdub3JlIChhcHBlbmQgeCB+c2V0KVxuXG5sZXQgYmVmb3JlID9zZXQgPSBmdW5jdGlvblxuICB8IE5vZGUgeyBwYXJlbnQgPSBMZWFmIDsgXyB9IHwgTGVhZiAtPiBMZWFmXG4gIHwgTm9kZSBuIGFzIHBhcmVudCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHBhcmVudDtcbiAgICBsZXQgbm9kZSA9IG1ha2Vfbm9kZSBzZXQgfmxlZnQ6bi5sZWZ0IH5yaWdodDpMZWFmIH5wYXJlbnQgaW5cbiAgICBuLmxlZnQgPC0gbm9kZTtcbiAgICBub2RlXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgYWZ0ZXIgP3NldCA9IGZ1bmN0aW9uXG4gIHwgTm9kZSB7IHBhcmVudCA9IExlYWYgOyBfIH0gfCBMZWFmIC0+IExlYWZcbiAgfCBOb2RlIG4gYXMgcGFyZW50IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgcGFyZW50O1xuICAgIGxldCBub2RlID0gbWFrZV9ub2RlIHNldCB+bGVmdDpMZWFmIH5yaWdodDpuLnJpZ2h0IH5wYXJlbnQgaW5cbiAgICBuLnJpZ2h0IDwtIG5vZGU7XG4gICAgbm9kZVxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGdldCA9IGZ1bmN0aW9uXG4gIHwgTm9kZSB7IGJpbmRpbmcgPSBCb3VuZCB7IHZhbHVlIDsgXyB9IDsgXyB9IC0+IFNvbWUgdmFsdWVcbiAgfCBMZWFmIHwgUm9vdCBfIHwgTm9kZSB7IGJpbmRpbmcgPSBVbmJvdW5kIDsgXyB9IC0+IE5vbmVcblxubGV0IGludmFsaWRhdGVfYmluZGluZyA9IGZ1bmN0aW9uXG4gIHwgVW5ib3VuZCAtPiAoKVxuICB8IEJvdW5kIGIgLT4gYi52YWxpZCA8LSBmYWxzZVxuXG5sZXQgc2V0X2JpbmRpbmcgeCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgfCBOb2RlIHsgcGFyZW50ID0gTGVhZjsgXyB9IC0+ICgpXG4gIHwgTm9kZSBuIGFzIHQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSB0O1xuICAgIGludmFsaWRhdGVfYmluZGluZyBuLmJpbmRpbmc7XG4gICAgbi5iaW5kaW5nIDwtIHhcblxubGV0IHNldCB0IHZhbHVlID0gc2V0X2JpbmRpbmcgKEJvdW5kIHsgdmFsdWU7IHZhbGlkID0gdHJ1ZSB9KSB0XG5sZXQgdW5zZXQgdCA9IHNldF9iaW5kaW5nIFVuYm91bmQgdFxuXG5sZXQgaXNfYm91bmQgPSBmdW5jdGlvblxuICB8IExlYWYgfCBOb2RlIHsgcGFyZW50ID0gTGVhZjsgXyB9IC0+IGZhbHNlXG4gIHwgUm9vdCBfIHwgTm9kZSBfIC0+IHRydWVcblxubGV0IHJlYyBqb2luIGxlZnQgPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSAoeyBsZWZ0ID0gTGVhZjsgXyB9IGFzIG4pIGFzIHNlbGYgLT5cbiAgICBuLmxlZnQgPC0gbGVmdDtcbiAgICBzZXRfcGFyZW50IGxlZnQgfnBhcmVudDpzZWxmO1xuICAgIHNlbGZcbiAgfCBOb2RlIG5vZGUgLT5cbiAgICBqb2luIGxlZnQgbm9kZS5sZWZ0XG5cbmxldCByZW1vdmUgPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgfCBOb2RlIHtwYXJlbnQgPSBMZWFmOyBffSAtPiAoKVxuICB8IE5vZGUgKHtsZWZ0OyByaWdodDsgcGFyZW50OyBffSBhcyBuKSBhcyB0IC0+XG4gICAgaW52YWxpZGF0ZV9iaW5kaW5nIG4uYmluZGluZztcbiAgICBuLmxlZnQgPC0gTGVhZjtcbiAgICBuLnJpZ2h0IDwtIExlYWY7XG4gICAgbi5wYXJlbnQgPC0gTGVhZjtcbiAgICBuLmJpbmRpbmcgPC0gVW5ib3VuZDtcbiAgICBuLnZlcnNpb24gPC0gbWF4X2ludDtcbiAgICBsZXQgam9pbiwgaW52YWxpZCA9IG1hdGNoIGxlZnQsIHJpZ2h0IHdpdGhcbiAgICAgIHwgTGVhZiwgb3RoZXIgfCBvdGhlciwgTGVhZiAtPiAob3RoZXIsIHBhcmVudClcbiAgICAgIHwgXyAtPiAocmlnaHQsIGpvaW4gbGVmdCByaWdodClcbiAgICBpblxuICAgIHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkOnQgfm5ld2NoaWxkOmpvaW47XG4gICAgc2V0X3BhcmVudCBqb2luIH5wYXJlbnQ7XG4gICAgcmF3X2ludmFsaWRhdGUgaW52YWxpZFxuXG5sZXQgcmVjIGNsZWFyID0gZnVuY3Rpb25cbiAgfCBMZWFmIC0+ICgpXG4gIHwgTm9kZSAoe2xlZnQ7IHJpZ2h0OyBffSBhcyBuKSAtPlxuICAgIGludmFsaWRhdGVfYmluZGluZyBuLmJpbmRpbmc7XG4gICAgbi5sZWZ0IDwtIExlYWY7XG4gICAgbi5yaWdodCA8LSBMZWFmO1xuICAgIG4ucGFyZW50IDwtIExlYWY7XG4gICAgbi5iaW5kaW5nIDwtIFVuYm91bmQ7XG4gICAgbi52ZXJzaW9uIDwtIG1heF9pbnQ7XG4gICAgY2xlYXIgbGVmdDtcbiAgICBjbGVhciByaWdodFxuICB8IFJvb3QgciBhcyByb290IC0+XG4gICAgbGV0IGNoaWxkID0gci5jaGlsZCBpblxuICAgIHIuY2hpbGQgPC0gTGVhZjtcbiAgICBjbGVhciBjaGlsZDtcbiAgICByYXdfaW52YWxpZGF0ZSByb290XG5cbigqIFRyZWUgYmFsYW5jaW5nICopXG5cbmxldCBzaXplID0gZnVuY3Rpb25cbiAgfCBOb2RlIG5vZGUgLT5cbiAgICBhc3NlcnQgKG5vZGUuc2l6ZSA8PiAwKTtcbiAgICBub2RlLnNpemVcbiAgfCBMZWFmIC0+IDBcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbigqKiBbc21hbGxlcl9lbGwgc21pbiBzbWF4XSBpZmZcbiAgICAtIFtzbWluXSBpcyBsZXNzIHRoYW4gW3NtYXhdXG4gICAgLSBbc21pbl0gYW5kIFtzbWF4XSBkaWZmZXJzIGJ5IGxlc3MgdGhhbiB0d28gbWFnbml0dWRlIG9yZGVycywgaS5lXG4gICAgICBtc2JzKHNtaW4pID49IG1zYnMoc21heCkgLSAxXG4gICAgICB3aGVyZSBtc2JzIGlzIHRoZSBpbmRleCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0ICopXG5sZXQgc21hbGxlcl9lbGwgc21pbiBzbWF4ID0gKHNtaW4gPCBzbWF4KSAmJiAoKHNtaW4gbGFuZCBzbWF4KSBsc2wgMSA8IHNtYXgpXG5cbigqKiBbZGlzYmFsYW5jZWQgc21pbiBzbWF4XSBjaGVjayBpZiB0d28gc3ViLXRyZWVzIG9mIHNpemUgW3NtaW5dIGFuZCBbc21heF0sXG4gICAgYXJlIGRpc2JhbGFuY3plZC4gVGhhdCBpcywgbXNicyhzbWluKSA8IG1zYnMoc21heCkgLSAxICopXG5sZXQgZGlzYmFsYW5jZWQgc21pbiBzbWF4ID0gc21hbGxlcl9lbGwgc21pbiAoc21heCBsc3IgMSlcblxubGV0IHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkIH5uZXdjaGlsZCA9XG4gIG1hdGNoIHBhcmVudCB3aXRoXG4gIHwgUm9vdCByIC0+XG4gICAgYXNzZXJ0IChyLmNoaWxkID09IG9sZGNoaWxkKTtcbiAgICByLmNoaWxkIDwtIG5ld2NoaWxkO1xuICB8IE5vZGUgbiB3aGVuIG4ubGVmdCA9PSBvbGRjaGlsZCAtPlxuICAgIG4ubGVmdCA8LSBuZXdjaGlsZFxuICB8IE5vZGUgbiB3aGVuIG4ucmlnaHQgPT0gb2xkY2hpbGQgLT5cbiAgICBuLnJpZ2h0IDwtIG5ld2NoaWxkXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHJlYyByb3RfbGVmdCB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBOb2RlICh7IHJpZ2h0ID0gKE5vZGUgcm4pIGFzIHI7IF99IGFzIHNuKSBhcyBzIC0+XG4gICAgbGV0IHBhcmVudCA9IHNuLnBhcmVudCBpblxuICAgIGxldCBybCA9IG1hdGNoIHJuLmxlZnQgd2l0aFxuICAgICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IExlYWYgLT4gTGVhZlxuICAgICAgfCAoTm9kZSBybG4pIGFzIHJsIC0+XG4gICAgICAgIHJsbi5wYXJlbnQgPC0gcztcbiAgICAgICAgcmxcbiAgICBpblxuICAgIHJuLmxlZnQgPC0gcztcbiAgICBzbi5yaWdodCA8LSBybDtcbiAgICBzbi5wYXJlbnQgPC0gcjtcbiAgICBybi5wYXJlbnQgPC0gcGFyZW50O1xuICAgIHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkOnMgfm5ld2NoaWxkOnI7XG4gICAgaWdub3JlIChiYWxhbmNlIHZlcnNpb24gcyk7XG4gICAgYmFsYW5jZSB2ZXJzaW9uIHJcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5hbmQgcm90X3JpZ2h0IHZlcnNpb24gPSBmdW5jdGlvblxuICB8IE5vZGUgKHsgbGVmdCA9IChOb2RlIGxuKSBhcyBsOyBffSBhcyBzbikgYXMgcyAtPlxuICAgIGxldCBwYXJlbnQgPSBzbi5wYXJlbnQgaW5cbiAgICBsZXQgbHIgPSBtYXRjaCBsbi5yaWdodCB3aXRoXG4gICAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTGVhZiAtPiBMZWFmXG4gICAgICB8IChOb2RlIGxybikgYXMgbHIgLT5cbiAgICAgICAgbHJuLnBhcmVudCA8LSBzO1xuICAgICAgICBsclxuICAgIGluXG4gICAgbG4ucmlnaHQgPC0gcztcbiAgICBzbi5sZWZ0IDwtIGxyO1xuICAgIHNuLnBhcmVudCA8LSBsO1xuICAgIGxuLnBhcmVudCA8LSBwYXJlbnQ7XG4gICAgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQ6cyB+bmV3Y2hpbGQ6bDtcbiAgICBpZ25vcmUgKGJhbGFuY2UgdmVyc2lvbiBzKTtcbiAgICBiYWxhbmNlIHZlcnNpb24gbFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmFuZCBpbmNfbGVmdCB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUge3JpZ2h0OyBffSBhcyBzZWxmIC0+XG4gICAgYmVnaW4gbWF0Y2ggcmlnaHQgd2l0aFxuICAgICAgfCBOb2RlIHJuIHdoZW4gc21hbGxlcl9lbGwgKHNpemUgcm4ucmlnaHQpIChzaXplIHJuLmxlZnQpIC0+XG4gICAgICAgIGlnbm9yZSAocm90X3JpZ2h0IHZlcnNpb24gcmlnaHQpXG4gICAgICB8IF8gLT4gKClcbiAgICBlbmQ7XG4gICAgcm90X2xlZnQgdmVyc2lvbiBzZWxmXG5cbmFuZCBpbmNfcmlnaHQgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIHtsZWZ0OyBffSBhcyBzZWxmIC0+XG4gICAgYmVnaW4gbWF0Y2ggbGVmdCB3aXRoXG4gICAgICB8IE5vZGUgbG4gd2hlbiBzbWFsbGVyX2VsbCAoc2l6ZSBsbi5sZWZ0KSAoc2l6ZSBsbi5yaWdodCkgLT5cbiAgICAgICAgaWdub3JlIChyb3RfbGVmdCB2ZXJzaW9uIGxlZnQpXG4gICAgICB8IF8gLT4gKClcbiAgICBlbmQ7XG4gICAgcm90X3JpZ2h0IHZlcnNpb24gc2VsZlxuXG5hbmQgYmFsYW5jZSB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUgbm9kZSBhcyBzZWxmIC0+XG4gICAgbGV0IHNsID0gc2l6ZSBub2RlLmxlZnQgYW5kIHNyID0gc2l6ZSBub2RlLnJpZ2h0IGluXG4gICAgaWYgc2wgPCBzciB0aGVuIChcbiAgICAgIGlmIGRpc2JhbGFuY2VkIHNsIHNyXG4gICAgICB0aGVuIGluY19sZWZ0IHZlcnNpb24gc2VsZlxuICAgICAgZWxzZSAobm9kZS52ZXJzaW9uIDwtIHZlcnNpb247IG5vZGUuc2l6ZSA8LSAxICsgc2wgKyBzcjsgc2VsZilcbiAgICApIGVsc2UgKFxuICAgICAgaWYgZGlzYmFsYW5jZWQgc3Igc2xcbiAgICAgIHRoZW4gaW5jX3JpZ2h0IHZlcnNpb24gc2VsZlxuICAgICAgZWxzZSAobm9kZS52ZXJzaW9uIDwtIHZlcnNpb247IG5vZGUuc2l6ZSA8LSAxICsgc2wgKyBzcjsgc2VsZilcbiAgICApXG5cbmxldCByZWMgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gKClcbiAgfCBMZWFmIC0+ICgpXG4gIHwgTm9kZSBub2RlIGFzIHNlbGYgLT5cbiAgICBpZiBub2RlLnNpemUgPSAwIHRoZW5cbiAgICAgIG1hdGNoIG5vZGUubGVmdCB3aXRoXG4gICAgICB8IE5vZGUge3NpemUgPSAwOyBffSAtPlxuICAgICAgICBjb21wdXRlX3N1Yl9zaXplIHZlcnNpb24gbm9kZS5sZWZ0XG4gICAgICB8IF8gLT5cbiAgICAgICAgbWF0Y2ggbm9kZS5yaWdodCB3aXRoXG4gICAgICAgIHwgTm9kZSB7c2l6ZSA9IDA7IF99IC0+XG4gICAgICAgICAgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uIG5vZGUucmlnaHRcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgbGV0IHBhcmVudCA9IG5vZGUucGFyZW50IGluXG4gICAgICAgICAgaWdub3JlIChiYWxhbmNlIHZlcnNpb24gc2VsZik7XG4gICAgICAgICAgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uIHBhcmVudFxuXG5sZXQgcmVjIHJlc2V0X3ZlcnNpb24gdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgTGVhZiAtPiAoKVxuICB8IE5vZGUgbiAtPlxuICAgIG4udmVyc2lvbiA8LSB2ZXJzaW9uO1xuICAgIHJlc2V0X3ZlcnNpb24gdmVyc2lvbiBuLmxlZnQ7XG4gICAgcmVzZXRfdmVyc2lvbiB2ZXJzaW9uIG4ucmlnaHRcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCByZWJhbGFuY2UgPSBmdW5jdGlvblxuICB8IFJvb3QgciAtPlxuICAgIGJlZ2luIG1hdGNoIHIuY2hpbGQgd2l0aFxuICAgICAgfCBOb2RlIHsgc2l6ZSA9IDA7IF8gfSAtPlxuICAgICAgICBsZXQgdmVyc2lvbiA9IHN1Y2Mgci52ZXJzaW9uIGluXG4gICAgICAgIGxldCB2ZXJzaW9uID1cbiAgICAgICAgICBpZiB2ZXJzaW9uID0gbWF4X2ludCB0aGVuIChcbiAgICAgICAgICAgIHIuZ2VuZXJhdGlvbiA8LSByZWYgKCk7XG4gICAgICAgICAgICByZXNldF92ZXJzaW9uIDAgci5jaGlsZDtcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgICAgZWxzZSB2ZXJzaW9uXG4gICAgICAgIGluXG4gICAgICAgIHIudmVyc2lvbiA8LSB2ZXJzaW9uO1xuICAgICAgICBjb21wdXRlX3N1Yl9zaXplIHZlcnNpb24gci5jaGlsZDtcbiAgICAgICAgdmVyc2lvblxuICAgICAgfCBOb2RlIF8gfCBMZWFmIC0+IHIudmVyc2lvblxuICAgICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgZW5kXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHBsdXMgKHplcm8sIHBsdXMpIHggeSA9XG4gIGlmIHggPT0gemVybyB0aGVuIHlcbiAgZWxzZSBpZiB5ID09IHplcm8gdGhlbiB4XG4gIGVsc2UgcGx1cyB4IHlcblxudHlwZSAoJ2EsICdiKSByZWR1Y3Rpb25fdHJlZSA9XG4gIHwgUmVkX2xlYWZcbiAgfCBSZWRfbm9kZSBvZiB7XG4gICAgICBjZWxsOiAnYSByb3c7XG4gICAgICBiaW5kaW5nOiAnYSBiaW5kaW5nO1xuICAgICAgcmVkdWN0aW9uOiAnYjtcbiAgICAgIGFnZ3JlZ2F0ZTogJ2I7XG4gICAgICBsZWZ0IDogKCdhLCAnYikgcmVkdWN0aW9uX3RyZWU7XG4gICAgICByaWdodCA6ICgnYSwgJ2IpIHJlZHVjdGlvbl90cmVlO1xuICAgIH1cblxudHlwZSAoJ2EsICdiKSByZWR1Y3Rpb24gPSB7XG4gIG11dGFibGUgdmVyc2lvbjogaW50O1xuICBzb3VyY2U6ICdhIHRyZWU7XG4gIG11dGFibGUgcmVzdWx0IDogKCdhLCAnYikgcmVkdWN0aW9uX3RyZWU7XG4gIG11dGFibGUgZ2VuZXJhdGlvbjogdW5pdCByZWY7XG4gIG1hcHBlcjogJ2Egcm93IC0+ICdhIC0+ICdiO1xuICBtb25vaWQ6ICdiIEx3ZF91dGlscy5tb25vaWQ7XG59XG5cblxubGV0IGV4dHJhY3RfYmluZGluZ3MgdHJlZSA9XG4gIGxldCByZWMgYXV4IGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBSZWRfbGVhZiAtPiBhY2NcbiAgICB8IFJlZF9ub2RlIHJub2RlIC0+XG4gICAgICBsZXQgYWNjID0gYXV4IGFjYyBybm9kZS5yaWdodCBpblxuICAgICAgbGV0IGFjYyA9IG1hdGNoIHJub2RlLmJpbmRpbmcgd2l0aFxuICAgICAgICB8IFVuYm91bmQgLT4gYWNjXG4gICAgICAgIHwgQm91bmQgeyB2YWxpZCA9IGZhbHNlOyBfIH0gLT4gYWNjXG4gICAgICAgIHwgXyAtPiAocm5vZGUuYmluZGluZywgcm5vZGUucmVkdWN0aW9uKSA6OiBhY2NcbiAgICAgIGluXG4gICAgICBhdXggYWNjIHJub2RlLmxlZnRcbiAgaW5cbiAgYXV4IFtdIHRyZWVcblxubGV0IGZ1bGxfcmVidWlsZCByZWQgdHJlZSA9XG4gIGxldCBiaW5kaW5ncyA9IHJlZiAoZXh0cmFjdF9iaW5kaW5ncyByZWQucmVzdWx0KSBpblxuICBsZXQgcmVjIGF1eCA9IGZ1bmN0aW9uXG4gICAgfCBOb2RlIG5vZGUgYXMgY2VsbCAtPlxuICAgICAgbGV0IGxlZnQgPSBhdXggbm9kZS5sZWZ0IGluXG4gICAgICBsZXQgcmVkdWN0aW9uID1cbiAgICAgICAgbWF0Y2ggbm9kZS5iaW5kaW5nLCAhYmluZGluZ3Mgd2l0aFxuICAgICAgICB8IFVuYm91bmQsIF8gLT4gZnN0IHJlZC5tb25vaWRcbiAgICAgICAgfCBiaW5kaW5nLCAoKGJpbmRpbmcnLCByZWR1Y3Rpb24pIDo6IGJpbmRpbmdzJylcbiAgICAgICAgICB3aGVuIGJpbmRpbmcgPT0gYmluZGluZycgLT5cbiAgICAgICAgICBiaW5kaW5ncyA6PSBiaW5kaW5ncyc7XG4gICAgICAgICAgcmVkdWN0aW9uXG4gICAgICAgIHwgQm91bmQgYiwgXyAtPiBhc3NlcnQgYi52YWxpZDsgcmVkLm1hcHBlciBjZWxsIGIudmFsdWVcbiAgICAgIGluXG4gICAgICBsZXQgcmlnaHQgPSBhdXggbm9kZS5yaWdodCBpblxuICAgICAgbGV0IGFnZ3JlZ2F0ZSA9IG1hdGNoIGxlZnQgd2l0aFxuICAgICAgICB8IFJlZF9sZWFmIC0+IHJlZHVjdGlvblxuICAgICAgICB8IFJlZF9ub2RlIHIgLT4gcGx1cyByZWQubW9ub2lkIHIuYWdncmVnYXRlIHJlZHVjdGlvblxuICAgICAgaW5cbiAgICAgIGxldCBhZ2dyZWdhdGUgPSBtYXRjaCByaWdodCB3aXRoXG4gICAgICAgIHwgUmVkX2xlYWYgLT4gYWdncmVnYXRlXG4gICAgICAgIHwgUmVkX25vZGUgciAtPiBwbHVzIHJlZC5tb25vaWQgYWdncmVnYXRlIHIuYWdncmVnYXRlXG4gICAgICBpblxuICAgICAgUmVkX25vZGUge1xuICAgICAgICBjZWxsO1xuICAgICAgICBiaW5kaW5nID0gbm9kZS5iaW5kaW5nO1xuICAgICAgICByZWR1Y3Rpb247XG4gICAgICAgIGFnZ3JlZ2F0ZTtcbiAgICAgICAgbGVmdDtcbiAgICAgICAgcmlnaHQ7XG4gICAgICB9XG4gICAgfCBMZWFmIC0+IFJlZF9sZWFmXG4gICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIGluXG4gIGxldCByZXN1bHQgPSBhdXggdHJlZSBpblxuICBhc3NlcnQgKCFiaW5kaW5ncyA9IFtdKTtcbiAgcmVzdWx0XG5cbmxldCBleHRyYWN0X2ZyaW5nZSB2ZXJzaW9uIHRyZWUgPVxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICAgIHwgUmVkX2xlYWYgLT4gYWNjXG4gICAgfCBSZWRfbm9kZSBybm9kZSBhcyB0cmVlIC0+XG4gICAgICBtYXRjaCBybm9kZS5jZWxsIHdpdGhcbiAgICAgIHwgTm9kZSBub2RlIHdoZW4gbm9kZS52ZXJzaW9uIDw9IHZlcnNpb24gLT4gdHJlZSA6OiBhY2NcbiAgICAgIHwgXyAtPlxuICAgICAgICBsZXQgYWNjID0gYXV4IGFjYyBybm9kZS5yaWdodCBpblxuICAgICAgICBsZXQgYWNjID0gbWF0Y2ggcm5vZGUuYmluZGluZyB3aXRoXG4gICAgICAgICAgfCBVbmJvdW5kIC0+IGFjY1xuICAgICAgICAgIHwgQm91bmQgeyB2YWxpZCA9IGZhbHNlOyBfIH0gLT4gYWNjXG4gICAgICAgICAgfCBfIC0+IHRyZWUgOjogYWNjXG4gICAgICAgIGluXG4gICAgICAgIGF1eCBhY2Mgcm5vZGUubGVmdFxuICBpblxuICBhdXggW10gdHJlZVxuXG5sZXQgaW5jcmVtZW50YWxfcmVidWlsZCByZWQgdmVyc2lvbiB0cmVlID1cbiAgbGV0IGZyaW5nZSA9IHJlZiAoZXh0cmFjdF9mcmluZ2UgdmVyc2lvbiByZWQucmVzdWx0KSBpblxuICBsZXQgcmVjIGF1eCA9IGZ1bmN0aW9uXG4gICAgfCBOb2RlIG5vZGUgYXMgY2VsbCB3aGVuIG5vZGUudmVyc2lvbiA8PSB2ZXJzaW9uIC0+XG4gICAgICBiZWdpbiBtYXRjaCAhZnJpbmdlIHdpdGhcbiAgICAgICAgfCAoUmVkX25vZGUgcm5vZGUgYXMgcmVkdWN0aW9uKSA6OiBmcmluZ2UnIC0+XG4gICAgICAgICAgYXNzZXJ0IChybm9kZS5jZWxsID09IGNlbGwpO1xuICAgICAgICAgIGZyaW5nZSA6PSBmcmluZ2UnO1xuICAgICAgICAgIHJlZHVjdGlvblxuICAgICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICBlbmRcbiAgICB8IE5vZGUgbm9kZSBhcyBjZWxsIC0+XG4gICAgICBsZXQgbGVmdCA9IGF1eCBub2RlLmxlZnQgaW5cbiAgICAgIGxldCByZWR1Y3Rpb24gPVxuICAgICAgICBtYXRjaCBub2RlLmJpbmRpbmcsICFmcmluZ2Ugd2l0aFxuICAgICAgICB8IFVuYm91bmQsIF8gLT4gZnN0IHJlZC5tb25vaWRcbiAgICAgICAgfCBiaW5kaW5nLCAoUmVkX25vZGUgcm5vZGUgOjogZnJpbmdlJylcbiAgICAgICAgICB3aGVuIGJpbmRpbmcgPT0gcm5vZGUuYmluZGluZyAtPlxuICAgICAgICAgIGZyaW5nZSA6PSBmcmluZ2UnO1xuICAgICAgICAgIHJub2RlLnJlZHVjdGlvblxuICAgICAgICB8IEJvdW5kIGIsIF8gLT5cbiAgICAgICAgICBhc3NlcnQgYi52YWxpZDsgcmVkLm1hcHBlciBjZWxsIGIudmFsdWVcbiAgICAgIGluXG4gICAgICBsZXQgcmlnaHQgPSBhdXggbm9kZS5yaWdodCBpblxuICAgICAgbGV0IGFnZ3JlZ2F0ZSA9IG1hdGNoIGxlZnQgd2l0aFxuICAgICAgICB8IFJlZF9sZWFmIC0+IHJlZHVjdGlvblxuICAgICAgICB8IFJlZF9ub2RlIHIgLT4gcGx1cyByZWQubW9ub2lkIHIuYWdncmVnYXRlIHJlZHVjdGlvblxuICAgICAgaW5cbiAgICAgIGxldCBhZ2dyZWdhdGUgPSBtYXRjaCByaWdodCB3aXRoXG4gICAgICAgIHwgUmVkX2xlYWYgLT4gYWdncmVnYXRlXG4gICAgICAgIHwgUmVkX25vZGUgciAtPiBwbHVzIHJlZC5tb25vaWQgYWdncmVnYXRlIHIuYWdncmVnYXRlXG4gICAgICBpblxuICAgICAgUmVkX25vZGUge1xuICAgICAgICBjZWxsO1xuICAgICAgICBiaW5kaW5nID0gbm9kZS5iaW5kaW5nO1xuICAgICAgICByZWR1Y3Rpb247XG4gICAgICAgIGFnZ3JlZ2F0ZTtcbiAgICAgICAgbGVmdDtcbiAgICAgICAgcmlnaHQ7XG4gICAgICB9XG4gICAgfCBSb290IF8gfCBMZWFmIC0+IFJlZF9sZWFmXG4gIGluXG4gIGxldCByZXN1bHQgPSBhdXggdHJlZSBpblxuICBhc3NlcnQgKCFmcmluZ2UgPSBbXSk7XG4gIHJlc3VsdFxuXG5sZXQgZXZhbCByZWQgPVxuICBtYXRjaCByZWQuc291cmNlIHdpdGhcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3Qgcm9vdCAtPlxuICAgIGxldCB2ZXJzaW9uID0gcmViYWxhbmNlIHJlZC5zb3VyY2UgaW5cbiAgICBpZiB0cnVlIHRoZW4gKFxuICAgICAgaWYgcmVkLmdlbmVyYXRpb24gIT0gcm9vdC5nZW5lcmF0aW9uIHRoZW4gKFxuICAgICAgICByZWQuZ2VuZXJhdGlvbiA8LSByb290LmdlbmVyYXRpb247XG4gICAgICAgIHJlZC5yZXN1bHQgPC0gZnVsbF9yZWJ1aWxkIHJlZCByb290LmNoaWxkO1xuICAgICAgKSBlbHNlIChcbiAgICAgICAgcmVkLnJlc3VsdCA8LSBpbmNyZW1lbnRhbF9yZWJ1aWxkIHJlZCByZWQudmVyc2lvbiByb290LmNoaWxkXG4gICAgICApO1xuICAgICkgZWxzZSAoXG4gICAgICByZWQucmVzdWx0IDwtIGZ1bGxfcmVidWlsZCByZWQgcm9vdC5jaGlsZDtcbiAgICApO1xuICAgIHJlZC52ZXJzaW9uIDwtIHZlcnNpb247XG4gICAgbWF0Y2ggcmVkLnJlc3VsdCB3aXRoXG4gICAgfCBSZWRfbGVhZiAtPiBmc3QgcmVkLm1vbm9pZFxuICAgIHwgUmVkX25vZGUgciAtPiByLmFnZ3JlZ2F0ZVxuXG5sZXQgb3BhcXVlIDogJ2EgTHdkLnByaW0gLT4gT2JqLnQgTHdkLnByaW0gPSBPYmoubWFnaWNcblxubGV0IG1hcF9yZWR1Y2UgbWFwcGVyIG1vbm9pZCBzb3VyY2UgPVxuICBsZXQgcmVkdWN0aW9uID0ge1xuICAgIHNvdXJjZTsgbWFwcGVyOyBtb25vaWQ7XG4gICAgcmVzdWx0ID0gUmVkX2xlYWY7XG4gICAgZ2VuZXJhdGlvbiA9IG5vdF9vcmlnaW47XG4gICAgdmVyc2lvbiA9IDA7XG4gIH0gaW5cbiAgbGV0IHByaW0gPSBMd2QucHJpbVxuICAgICAgfmFjcXVpcmU6KGZ1biBzZWxmIC0+XG4gICAgICAgICAgbWF0Y2ggcmVkdWN0aW9uLnNvdXJjZSB3aXRoXG4gICAgICAgICAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgUm9vdCByb290IC0+XG4gICAgICAgICAgICByb290Lm9uX2ludmFsaWRhdGUgPC0gb3BhcXVlIHNlbGYgOjogcm9vdC5vbl9pbnZhbGlkYXRlO1xuICAgICAgICAgICAgcmVkdWN0aW9uXG4gICAgICAgIClcbiAgICAgIH5yZWxlYXNlOihmdW4gc2VsZiByZWR1Y3Rpb24gLT5cbiAgICAgICAgICBtYXRjaCByZWR1Y3Rpb24uc291cmNlIHdpdGhcbiAgICAgICAgICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBSb290IHJvb3QgLT5cbiAgICAgICAgICAgIHJvb3Qub25faW52YWxpZGF0ZSA8LVxuICAgICAgICAgICAgICBMaXN0LmZpbHRlciAoKCE9KSAob3BhcXVlIHNlbGYpKSByb290Lm9uX2ludmFsaWRhdGVcbiAgICAgICAgKVxuICBpblxuICBMd2QubWFwIH5mOmV2YWwgKEx3ZC5nZXRfcHJpbSBwcmltKVxuXG5sZXQgcmVkdWNlIG1vbm9pZCBzb3VyY2UgPSBtYXBfcmVkdWNlIChmdW4gXyB4IC0+IHgpIG1vbm9pZCBzb3VyY2VcblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICB8IExlYWYgLT4gKClcbiAgfCBOb2RlIHQgLT5cbiAgICBpdGVyIGYgdC5sZWZ0O1xuICAgIGJlZ2luIG1hdGNoIHQuYmluZGluZyB3aXRoXG4gICAgICB8IEJvdW5kIHggLT4gZiB4LnZhbHVlXG4gICAgICB8IFVuYm91bmQgLT4gKClcbiAgICBlbmQ7XG4gICAgaXRlciBmIHQucmlnaHRcbiAgfCBSb290IHQgLT5cbiAgICBpdGVyIGYgdC5jaGlsZFxuXG5sZXQgbGVmdF9tb3N0IDogJ2Egcm93IC0+ICdhIHJvdyBvcHRpb24gPSBcbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiAtPiBhY2NcbiAgfCBOb2RlIG4gYXMgc2VsZiAtPiBhdXggKFNvbWUgc2VsZikgbi5sZWZ0XG4gIGluXG4gIGZ1biByIC0+IGF1eCBOb25lIHJcblxubGV0IHJlYyByaWdodF9tb3N0IDogJ2Egcm93IC0+ICdhIHJvdyBvcHRpb24gPSBcbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiAtPiBhY2NcbiAgfCBOb2RlIG4gYXMgc2VsZiAtPiBhdXggKFNvbWUgc2VsZikgbi5yaWdodFxuICBpblxuICBmdW4gciAtPiBhdXggTm9uZSByXG5cbmxldCBmaXJzdCA6ICdhIHQgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHJvb3QgLT4gbGVmdF9tb3N0IHJvb3QuY2hpbGRcblxubGV0IGxhc3QgOiAnYSB0IC0+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+ZlxuIiwib3BlbiEgSW1wb3J0XG5vcGVuIEJycmVyLkJyclxub3BlbiEgQnJyX2x3ZFxubW9kdWxlIEEgPSBBdHRyc1xuXG50eXBlICdhIHZhbGlkYXRpb24gPSBPayBvZiAnYSB8IEVycm9yIG9mIHN0cmluZyB8IEVtcHR5XG50eXBlIGxhYmVsID0gRWx3ZC50IEVsd2QuY29sXG50eXBlICdhIGRlc2MgPSB7IG5hbWUgOiBzdHJpbmc7IGRlZmF1bHQgOiAnYTsgbGFiZWwgOiBsYWJlbCB9XG5cbigqIEEgZm9ybSBmaWVsZCBpcyBjb21wb3NlZCBvZjpcbiAgIC0gQW4gaHRtbCBpbnB1dCBlbGVtZW50IHdpdGggcG90ZW50aWFsIHZhbGlkYXRpb24gdmlhIGF0dHJpYnV0ZXNcbiAgIC0gQSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHRoYXQgcmVwbGFjZSBvciBjb21wbGV0ZSB0aGUgc3RhbmRhcmQgdmFsaWRhdGlvblxuICAgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0aWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50ICopXG50eXBlICdhIHQgPSB7XG4gIGVsdCA6IEVsd2QudCBMd2QudDtcbiAgdmFsdWUgOiAnYSBvcHRpb24gTHdkLnZhcjtcbiAgdmFsaWRhdGUgOiAnYSAtPiAnYSB2YWxpZGF0aW9uO1xufVxuXG5sZXQgZ2V0X3ZhbHVlIHQgPVxuICBsZXQganYgPSBFbC50b19qdiB0IGluXG4gIEp2LmdldCBqdiBcInZhbHVlXCJcblxubGV0IG1ha2VfaGFuZGxlciB+KHZhbHVlIDogSnYudCAtPiAnYSkgfih2YWx1ZV9jaGFuZ2VfZXZlbnQgOiBfIEV2LnR5cGUnKVxuICAgIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgdmFyID0gTHdkLnZhciBkZWZhdWx0X3ZhbHVlIGluXG4gIGxldCBvbl9jaGFuZ2UgPVxuICAgIEVsd2QuaGFuZGxlciB2YWx1ZV9jaGFuZ2VfZXZlbnQgKGZ1biBldiAtPlxuICAgICAgICBsZXQgdCA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgaW5cbiAgICAgICAgbGV0IHYgPSBKdi5nZXQgdCBcInZhbHVlXCIgaW5cbiAgICAgICAgTHdkLnNldCB2YXIgKFNvbWUgKHZhbHVlIHYpKSlcbiAgaW5cbiAgKG9uX2NoYW5nZSwgdmFyKVxuXG4oKiBUT0RPOiBpdCdzIHByb2JhYmx5IGJldHRlciB0byBzcGxpdCB0aGUgdmFsaWRhdGlvbiBhcHJ0IGZyb20gdGhlIGZpZWxkXG4gICBjcmVhdGlvbi4gVmFsaWRhdGlvbiBtYWtlIG1vcmUgc2Vuc2UgaW4gdGhlIGNhc2Ugb2YgYSBmb3JtLiBUaGVyZSBpcyBhblxuICAgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB0ZXh0IGlucHV0cyBpbiBgRmllbGRfdGV4dGlucHV0YCB0aGF0IHNob3VsZFxuICAgYmUgdXNlZCBpbnN0ZWFkLiAqKVxubGV0IG1ha2VfaW5wdXQgfih2YWx1ZSA6IEp2LnQgLT4gJ2EpID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldlxuICAgID8ocmVxdWlyZWQgPSBmYWxzZSkgfnZhbHVlX2NoYW5nZV9ldmVudCA/cGF0dGVybiB+dHlwZScgZGVmYXVsdF92YWx1ZSA9XG4gIGxldCB0eXBlJyA9IEF0LnR5cGUnIChKc3RyLnYgdHlwZScpIGluXG4gIGxldCBhdCA9IGBQIHR5cGUnIDo6IGF0IGluXG4gIGxldCBhdCA9XG4gICAgYXQgfD4gQS5hZGRfYm9vbCBBdC5yZXF1aXJlZCByZXF1aXJlZCB8PiBBLmFkZF9vcHQgQXQuTmFtZS5wYXR0ZXJuIHBhdHRlcm5cbiAgaW5cbiAgbGV0IHZhbGlkYXRlID0gT3B0aW9uLnZhbHVlIHZhbGlkYXRlIH5kZWZhdWx0OihmdW4gdiAtPiBPayB2KSBpblxuICBsZXQgb25fY2hhbmdlLCB2YWx1ZSA9XG4gICAgbWFrZV9oYW5kbGVyIH52YWx1ZSB+dmFsdWVfY2hhbmdlX2V2ZW50IGRlZmF1bHRfdmFsdWVcbiAgaW5cbiAgbGV0IGV2ID0gYFAgb25fY2hhbmdlIDo6IE9wdGlvbi50b19saXN0IGV2IGluXG4gIGxldCBlbHQgPSBFbHdkLmlucHV0ID9kIH5hdCB+ZXYgKCkgaW5cbiAgeyBlbHQ7IHZhbHVlOyB2YWxpZGF0ZSB9XG5cbmxldCB0ZXh0X2lucHV0ID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldiA/cmVxdWlyZWQgP3BhdHRlcm4gP3BsYWNlaG9sZGVyXG4gICAgZGVmYXVsdF92YWx1ZSA9XG4gIGxldCBhdCA9XG4gICAgYXRcbiAgICB8PiBBLmFkZF9vcHQgQXQuTmFtZS5wbGFjZWhvbGRlciBwbGFjZWhvbGRlclxuICAgIHw+IEEuYWRkX29wdCBBdC5OYW1lLnZhbHVlIGRlZmF1bHRfdmFsdWVcbiAgaW5cbiAgbGV0IHZhbHVlID0gSnYudG9fc3RyaW5nIGluXG4gIG1ha2VfaW5wdXQgfnZhbHVlID92YWxpZGF0ZSA/ZCB+YXQgP2V2ID9yZXF1aXJlZCA/cGF0dGVyblxuICAgIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYua2V5dXAgfnR5cGUnOlwidGV4dFwiIGRlZmF1bHRfdmFsdWVcblxubGV0IHBhc3N3b3JkX2lucHV0ID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldiA/cmVxdWlyZWQgP3BhdHRlcm4gP3BsYWNlaG9sZGVyXG4gICAgX3ZhbHVlID1cbiAgbGV0IGF0ID0gYXQgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGxhY2Vob2xkZXIgcGxhY2Vob2xkZXIgaW5cbiAgbGV0IHZhbHVlID0gSnYudG9fc3RyaW5nIGluXG4gIG1ha2VfaW5wdXQgfnZhbHVlIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYua2V5dXAgP3ZhbGlkYXRlID9kIH5hdCA/ZXYgP3JlcXVpcmVkXG4gICAgP3BhdHRlcm4gfnR5cGUnOlwicGFzc3dvcmRcIiBOb25lXG5cbmxldCBzdWJtaXQgP2QgPyhhdCA9IFtdKSA/ZXYgdGV4dCA9XG4gIGxldCBhdCA9IEEuYWRkIEF0Lk5hbWUudmFsdWUgdGV4dCBhdCBpblxuICAoKiBUT0RPIHRoaXMgc2hvdWxkIGJlIG1vcmUgcHJlY2lzZS4gU3VibWl0IGlucHV0cyBhcmUgZGlmZmVyZW50LiAqKVxuICBtYWtlX2lucHV0IH52YWx1ZTppZ25vcmUgfnZhbHVlX2NoYW5nZV9ldmVudDpFdi5jaGFuZ2UgP2QgfmF0ID9ldlxuICAgIH50eXBlJzpcInN1Ym1pdFwiIE5vbmVcbiIsIm9wZW4gQnJyXG5vcGVuIEVsXG5cbnR5cGUgdCA9IEVsLnRcblxudHlwZSAnYSBjb2wgPSBbXG4gIHwgYFAgb2YgJ2FcbiAgKCoqIFB1cmUgZWxlbWVudCAqKVxuICB8IGBSIG9mICdhIEx3ZC50XG4gICgqKiBSZWFjdGl2ZSBlbGVtZW50ICopXG4gIHwgYFMgb2YgJ2EgTHdkX3NlcS50IEx3ZC50XG4gICgqKiBSZWFjdGl2ZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyAqKVxuXSBsaXN0XG4oKiogRGVzY3JpYmluZyBjb2xsZWN0aW9ucyBvZiBlbGVtZW50cyAqKVxuXG50eXBlIGhhbmRsZXIgPSBIYW5kbGVyIDoge1xuICAgIG9wdHM6IEV2Lmxpc3Rlbl9vcHRzIG9wdGlvbjtcbiAgICB0eXBlJzogJ2EgRXYudHlwZSc7XG4gICAgZnVuYzogJ2EgRXYudCAtPiB1bml0O1xuICB9IC0+IGhhbmRsZXJcblxubGV0IGhhbmRsZXIgP29wdHMgdHlwZScgZnVuYyA9XG4gIEhhbmRsZXIge29wdHM7IHR5cGUnOyBmdW5jfVxuXG5sZXQgaXNfcHVyZV9lbGVtZW50ID0gZnVuY3Rpb25cbiAgfCBgUCBfIC0+IHRydWVcbiAgfCBgUiB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuICB8IGBTIHggLT4gT3B0aW9uLmlzX3NvbWUgKEx3ZC5pc19wdXJlIHgpXG5cbmxldCBleHRyYWN0X3B1cmVfZWxlbWVudCB4ID0gT3B0aW9uLmdldCAoTHdkLmlzX3B1cmUgeClcblxubGV0IGV4dHJhY3RfcHVyZV9lbGVtZW50cyB4cyA9XG4gIExpc3QuZmxhdHRlbiAoXG4gICAgTGlzdC5tYXAgKGZ1bmN0aW9uXG4gICAgICAgIHwgYFAgeCAtPiBbeF1cbiAgICAgICAgfCBgUiB4IC0+IFtleHRyYWN0X3B1cmVfZWxlbWVudCB4XVxuICAgICAgICB8IGBTIHggLT4gTHdkX3NlcS50b19saXN0IChleHRyYWN0X3B1cmVfZWxlbWVudCB4KVxuICAgICAgKSB4c1xuICApXG5cbmxldCBwcmVwYXJlX2NvbCA6IF8gY29sIC0+IF8gPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdLCBbXVxuICB8IGNvbCAtPlxuICAgIGxldCBwdXJlLCBpbXB1cmUgPSBMaXN0LnBhcnRpdGlvbiBpc19wdXJlX2VsZW1lbnQgY29sIGluXG4gICAgZXh0cmFjdF9wdXJlX2VsZW1lbnRzIHB1cmUsIGltcHVyZVxuXG4oKiogUmVhY3RpdmUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgKilcblxubGV0IGNvbnN1bWVfY2hpbGRyZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdLCBOb25lXG4gIHwgW2BQIHhdIC0+IFt4XSwgTm9uZVxuICB8IFtgUyB4XSAtPiBbXSwgU29tZSB4XG4gIHwgW2BSIHhdIC0+IFtdLCBTb21lIChMd2QubWFwIH5mOkx3ZF9zZXEuZWxlbWVudCB4KVxuICB8IGNvbCAtPlxuICAgIGlmIExpc3QuZm9yX2FsbCBpc19wdXJlX2VsZW1lbnQgY29sXG4gICAgdGhlblxuICAgICAgTGlzdC5mbGF0dGVuIChcbiAgICAgICAgTGlzdC5tYXAgKGZ1bmN0aW9uXG4gICAgICAgICAgICB8IGBQIHggLT4gW3hdXG4gICAgICAgICAgICB8IGBSIHggLT4gW2V4dHJhY3RfcHVyZV9lbGVtZW50IHhdXG4gICAgICAgICAgICB8IGBTIHggLT4gTHdkX3NlcS50b19saXN0IChleHRyYWN0X3B1cmVfZWxlbWVudCB4KVxuICAgICAgICAgIClcbiAgICAgICAgICBjb2xcbiAgICAgICksIE5vbmVcbiAgICBlbHNlIFtdLCBTb21lIChcbiAgICAgICAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgKGZ1bmN0aW9uXG4gICAgICAgICAgICB8IGBQIHggLT4gTHdkLnB1cmUgKEx3ZF9zZXEuZWxlbWVudCB4KVxuICAgICAgICAgICAgfCBgUiB4IC0+IEx3ZC5tYXAgfmY6THdkX3NlcS5lbGVtZW50IHhcbiAgICAgICAgICAgIHwgYFMgeCAtPiB4XG4gICAgICAgICAgKSBMd2Rfc2VxLmx3ZF9tb25vaWRcbiAgICAgICAgICBjb2xcbiAgICAgIClcblxudHlwZSBjaGlsZF90cmVlID1cbiAgfCBMZWFmIG9mIEVsLnRcbiAgfCBJbm5lciBvZiB7IG11dGFibGUgYm91bmQ6IEp2LnQ7XG4gICAgICAgICAgICAgICBsZWZ0OiBjaGlsZF90cmVlOyByaWdodDogY2hpbGRfdHJlZTsgfVxuXG5sZXQgY2hpbGRfbm9kZSBub2RlID0gTGVhZiBub2RlXG5cbmxldCBjaGlsZF9qb2luIGxlZnQgcmlnaHQgPSBJbm5lciB7IGJvdW5kID0gSnYubnVsbDsgbGVmdDsgcmlnaHQgfVxuXG5sZXQganZfcGFyZW50Tm9kZSA9IEpzdHIudiBcInBhcmVudE5vZGVcIlxubGV0IGp2X25leHRTaWJsaW5nID0gSnN0ci52IFwibmV4dFNpYmxpbmdcIlxubGV0IGp2X2FwcGVuZCA9IEpzdHIudiBcImFwcGVuZFwiXG5sZXQganZfYmVmb3JlID0gSnN0ci52IFwiYmVmb3JlXCJcbmxldCBqdl9yZW1vdmUgPSBKc3RyLnYgXCJyZW1vdmVcIlxubGV0IGp2X2NvbnRhaW5zID0gSnN0ci52IFwiY29udGFpbnNcIlxuXG5sZXQganZfdG9SZW1vdmUgPVxuICBKc3RyLnYgXCJsd2QtdG8tcmVtb3ZlXCIgKCogSEFDSyBDb3VsZCBiZSB0dXJuZWQgaW50byBhIEphdmFzY3JpcHQgc3ltYm9sICopXG5cbmxldCBjb250YWluc19mb2N1cyBub2RlID1cbiAgbWF0Y2ggQnJyLkRvY3VtZW50LmFjdGl2ZV9lbCAoQnJyLkVsLmRvY3VtZW50IG5vZGUpIHdpdGhcbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSBlbCAtPlxuICAgIEp2LnRvX2Jvb2wgKEp2LmNhbGwnIChFbC50b19qdiBub2RlKSBqdl9jb250YWlucyBbfEVsLnRvX2p2IGVsfF0pXG5cbmxldCB1cGRhdGVfY2hpbGRyZW5cbiAgICAoc2VsZiA6IEVsLnQpXG4gICAgKGNoaWxkcmVuIDogRWwudCBMd2Rfc2VxLnQgTHdkLnQpIDogRWwudCBMd2QudCA9XG4gIGxldCByZWR1Y2VyID1cbiAgICByZWYgKEx3ZF9zZXEuUmVkdWNlci5tYWtlIH5tYXA6Y2hpbGRfbm9kZSB+cmVkdWNlOmNoaWxkX2pvaW4pXG4gIGluXG4gIEx3ZC5tYXAgY2hpbGRyZW4gfmY6YmVnaW4gZnVuIGNoaWxkcmVuIC0+XG4gICAgbGV0IGRyb3BwZWQsIHJlZHVjZXInID1cbiAgICAgIEx3ZF9zZXEuUmVkdWNlci51cGRhdGVfYW5kX2dldF9kcm9wcGVkICFyZWR1Y2VyIGNoaWxkcmVuIGluXG4gICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICBsZXQgc2NoZWR1bGVfZm9yX3JlbW92YWwgY2hpbGQgKCkgPSBtYXRjaCBjaGlsZCB3aXRoXG4gICAgICB8IExlYWYgbm9kZSAtPiBKdi5zZXQnIChFbC50b19qdiBub2RlKSBqdl90b1JlbW92ZSBKdi50cnVlJztcbiAgICAgIHwgSW5uZXIgXyAtPiAoKVxuICAgIGluXG4gICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwIHNjaGVkdWxlX2Zvcl9yZW1vdmFsIGRyb3BwZWQgKCk7XG4gICAgbGV0IHByZXNlcnZlX2ZvY3VzID0gY29udGFpbnNfZm9jdXMgc2VsZiBpblxuICAgIGJlZ2luIG1hdGNoIEx3ZF9zZXEuUmVkdWNlci5yZWR1Y2UgcmVkdWNlcicgd2l0aFxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgdHJlZSAtPlxuICAgICAgICBsZXQgcmVjIHVwZGF0ZSBhY2MgPSBmdW5jdGlvblxuICAgICAgICAgIHwgTGVhZiBub2RlIC0+XG4gICAgICAgICAgICBsZXQgbm9kZScgPSBFbC50b19qdiBub2RlIGluXG4gICAgICAgICAgICBKdi5kZWxldGUnIG5vZGUnIGp2X3RvUmVtb3ZlO1xuICAgICAgICAgICAgKCpCcnIuQ29uc29sZS5sb2cgW1wiVXBkYXRpbmcgXCI7IG5vZGVdOyopXG4gICAgICAgICAgICBpZiBKdi5nZXQnIG5vZGUnIGp2X3BhcmVudE5vZGUgIT0gRWwudG9fanYgc2VsZiB0aGVuIChcbiAgICAgICAgICAgICAgaWYgSnYuaXNfbnVsbCBhY2NcbiAgICAgICAgICAgICAgdGhlbiBpZ25vcmUgKEp2LmNhbGwnIChFbC50b19qdiBzZWxmKSBqdl9hcHBlbmQgW3xub2RlJ3xdKVxuICAgICAgICAgICAgICBlbHNlIGlnbm9yZSAoSnYuY2FsbCcgYWNjIGp2X2JlZm9yZSBbfG5vZGUnfF0pXG4gICAgICAgICAgICApIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAoKiBDaGVjayBpZiB0aGVyZSBpcyBub3QgYW55IHdvcmsgdG8gZG8gKilcbiAgICAgICAgICAgICAgSnYuZ2V0JyBub2RlJyBqdl9uZXh0U2libGluZyAhPSBhY2MgJiZcbiAgICAgICAgICAgICAgKCogQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBmb2N1cyBjYXNlIGFuZCB0cnkgdG8gXCJidWJibGUgc29ydFwiIHRvXG4gICAgICAgICAgICAgICAgIHByZXNlcnZlIGZvY3VzICopXG4gICAgICAgICAgICAgIG5vdCAoXG4gICAgICAgICAgICAgICAgcHJlc2VydmVfZm9jdXMgJiYgY29udGFpbnNfZm9jdXMgbm9kZSAmJlxuICAgICAgICAgICAgICAgIGxldCByZWMgc2hpZnRfc2libGluZ3MgKCkgPVxuICAgICAgICAgICAgICAgICAgbGV0IHNpYmxpbmcgPSBKdi5nZXQnIG5vZGUnIGp2X25leHRTaWJsaW5nIGluXG4gICAgICAgICAgICAgICAgICBpZiBzaWJsaW5nID09IGFjYyB0aGVuIHRydWVcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgSnYuaXNfbnVsbCBzaWJsaW5nIHRoZW4gZmFsc2VcbiAgICAgICAgICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmUgKEp2LmNhbGwnIG5vZGUnIGp2X2JlZm9yZSBbfHNpYmxpbmd8XSk7XG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0X3NpYmxpbmdzICgpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICBzaGlmdF9zaWJsaW5ncyAoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHRoZW4gKFxuICAgICAgICAgICAgICBpZiBKdi5pc19udWxsIGFjY1xuICAgICAgICAgICAgICB0aGVuIGlnbm9yZSAoSnYuY2FsbCcgKEVsLnRvX2p2IHNlbGYpIGp2X2FwcGVuZCBbfG5vZGUnfF0pXG4gICAgICAgICAgICAgIGVsc2UgaWdub3JlIChKdi5jYWxsJyBhY2MganZfYmVmb3JlIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBub2RlJ1xuICAgICAgICAgIHwgSW5uZXIgdCAtPlxuICAgICAgICAgICAgaWYgSnYuaXNfbnVsbCB0LmJvdW5kIHRoZW4gKFxuICAgICAgICAgICAgICBsZXQgYWNjID0gdXBkYXRlIGFjYyB0LnJpZ2h0IGluXG4gICAgICAgICAgICAgIGxldCBhY2MgPSB1cGRhdGUgYWNjIHQubGVmdCBpblxuICAgICAgICAgICAgICB0LmJvdW5kIDwtIGFjYztcbiAgICAgICAgICAgICAgYWNjXG4gICAgICAgICAgICApIGVsc2VcbiAgICAgICAgICAgICAgdC5ib3VuZFxuICAgICAgICBpblxuICAgICAgICBpZ25vcmUgKHVwZGF0ZSBKdi5udWxsIHRyZWUpXG4gICAgZW5kO1xuICAgIGxldCByZW1vdmVfY2hpbGQgY2hpbGQgKCkgPSBtYXRjaCBjaGlsZCB3aXRoXG4gICAgICB8IExlYWYgbm9kZSAtPlxuICAgICAgICBsZXQgbm9kZSA9IEVsLnRvX2p2IG5vZGUgaW5cbiAgICAgICAgaWYgSnYuaXNfc29tZSAoSnYuZ2V0JyBub2RlIGp2X3RvUmVtb3ZlKSB0aGVuIChcbiAgICAgICAgICAoKkJyci5Db25zb2xlLmxvZyBbXCJSZW1vdmluZyBcIjsgbm9kZV07KilcbiAgICAgICAgICBKdi5kZWxldGUnIG5vZGUganZfdG9SZW1vdmU7XG4gICAgICAgICAgaWdub3JlIChKdi5jYWxsJyBub2RlIGp2X3JlbW92ZSBbfHxdKVxuICAgICAgICApXG4gICAgICB8IElubmVyIF8gLT4gKClcbiAgICBpblxuICAgIEx3ZF9zZXEuUmVkdWNlci5mb2xkX2Ryb3BwZWQgYE1hcCByZW1vdmVfY2hpbGQgZHJvcHBlZCAoKTtcbiAgICBzZWxmXG4gIGVuZFxuXG5sZXQgcHVyZV91bml0ID0gTHdkLnB1cmUgKClcblxubGV0IGR1bW15X2t2X2F0ID0gKEpzdHIuZW1wdHksIEpzdHIuZW1wdHkpXG5cbmxldCBhdHRhY2hfYXR0cmlicyBlbCBhdHRyaWJzID1cbiAgbGV0IHNldF9rdiAoaywgdikgPVxuICAgIGlmIEpzdHIuZXF1YWwgayBBdC5OYW1lLmNsYXNzJ1xuICAgIHRoZW4gRWwuc2V0X2NsYXNzIHYgdHJ1ZSBlbFxuICAgIGVsc2UgRWwuc2V0X2F0IGsgKFNvbWUgdikgZWxcbiAgaW5cbiAgbGV0IHVuc2V0X2t2IChrLCB2KSA9XG4gICAgaWYgSnN0ci5lcXVhbCBrIEF0Lk5hbWUuY2xhc3MnXG4gICAgdGhlbiBFbC5zZXRfY2xhc3MgdiBmYWxzZSBlbFxuICAgIGVsc2UgRWwuc2V0X2F0IGsgTm9uZSBlbFxuICBpblxuICBsZXQgc2V0X2x3ZF9hdCAoKSA9XG4gICAgbGV0IHByZXYgPSByZWYgZHVtbXlfa3ZfYXQgaW5cbiAgICBmdW4gYXQgLT5cbiAgICAgIGlmICFwcmV2ICE9IGR1bW15X2t2X2F0IHRoZW5cbiAgICAgICAgdW5zZXRfa3YgIXByZXY7XG4gICAgICBsZXQgcGFpciA9IEF0LnRvX3BhaXIgYXQgaW5cbiAgICAgIHNldF9rdiBwYWlyO1xuICAgICAgcHJldiA6PSBwYWlyXG4gIGluXG4gIEx3ZF91dGlscy5tYXBfcmVkdWNlIChmdW5jdGlvblxuICAgICAgfCBgUCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBgUiBhdCAtPiBMd2QubWFwIH5mOihzZXRfbHdkX2F0ICgpKSBhdFxuICAgICAgfCBgUyBhdHMgLT5cbiAgICAgICAgbGV0IHNldF9hdCcgYXQgPVxuICAgICAgICAgIGxldCBrdiA9IEF0LnRvX3BhaXIgYXQgaW5cbiAgICAgICAgICBzZXRfa3Yga3Y7XG4gICAgICAgICAga3ZcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHJlZHVjZXIgPVxuICAgICAgICAgIHJlZiAoTHdkX3NlcS5SZWR1Y2VyLm1ha2VcbiAgICAgICAgICAgICAgICAgfm1hcDpzZXRfYXQnXG4gICAgICAgICAgICAgICAgIH5yZWR1Y2U6KGZ1biBfIF8gLT4gZHVtbXlfa3ZfYXQpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgdXBkYXRlIGF0cyA9XG4gICAgICAgICAgbGV0IGRyb3BwZWQsIHJlZHVjZXInID1cbiAgICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci51cGRhdGVfYW5kX2dldF9kcm9wcGVkICFyZWR1Y2VyIGF0c1xuICAgICAgICAgIGluXG4gICAgICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXBcbiAgICAgICAgICAgIChmdW4ga3YgKCkgLT4gdW5zZXRfa3Yga3YpXG4gICAgICAgICAgICBkcm9wcGVkICgpO1xuICAgICAgICAgIGlnbm9yZSAoTHdkX3NlcS5SZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJzogXyBvcHRpb24pXG4gICAgICAgIGluXG4gICAgICAgIEx3ZC5tYXAgfmY6dXBkYXRlIGF0c1xuICAgICkgKHB1cmVfdW5pdCwgZnVuIF8gXyAtPiBwdXJlX3VuaXQpXG4gICAgYXR0cmlic1xuXG5sZXQgbGlzdGVuIGVsIChIYW5kbGVyIHtvcHRzOyB0eXBlJzsgZnVuY30pID1cbiAgRXYubGlzdGVuID9vcHRzIHR5cGUnIGZ1bmMgKEVsLmFzX3RhcmdldCBlbClcblxubGV0IGF0dGFjaF9ldmVudHMgZWwgZXZlbnRzID1cbiAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgKGZ1bmN0aW9uXG4gICAgICB8IGBQIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IGBSIGF0IC0+XG4gICAgICAgIGxldCBjYWNoZWQgPSByZWYgTm9uZSBpblxuICAgICAgICBMd2QubWFwIH5mOihmdW4gaCAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggIWNhY2hlZCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgICAgICB8IFNvbWUgbCAtPiBFdi51bmxpc3RlbiBsXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBjYWNoZWQgOj0gU29tZSAobGlzdGVuIGVsIGgpXG4gICAgICAgICAgKSBhdFxuICAgICAgfCBgUyBhdHMgLT5cbiAgICAgICAgbGV0IHJlZHVjZXIgPVxuICAgICAgICAgIHJlZiAoTHdkX3NlcS5SZWR1Y2VyLm1ha2VcbiAgICAgICAgICAgICAgICAgfm1hcDoobGlzdGVuIGVsKVxuICAgICAgICAgICAgICAgICB+cmVkdWNlOihmdW4geCBfeSAtPiB4KSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVwZGF0ZSBhdHMgPVxuICAgICAgICAgIGxldCBkcm9wcGVkLCByZWR1Y2VyJyA9XG4gICAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIudXBkYXRlX2FuZF9nZXRfZHJvcHBlZCAhcmVkdWNlciBhdHNcbiAgICAgICAgICBpblxuICAgICAgICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgICAgICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwXG4gICAgICAgICAgICAoZnVuIGwgKCkgLT4gRXYudW5saXN0ZW4gbClcbiAgICAgICAgICAgIGRyb3BwZWQgKCk7XG4gICAgICAgICAgaWdub3JlIChMd2Rfc2VxLlJlZHVjZXIucmVkdWNlIHJlZHVjZXInOiBfIG9wdGlvbilcbiAgICAgICAgaW5cbiAgICAgICAgTHdkLm1hcCB+Zjp1cGRhdGUgYXRzXG4gICAgKSAocHVyZV91bml0LCBmdW4gXyBfIC0+IHB1cmVfdW5pdClcbiAgICBldmVudHNcblxubGV0IHYgP2QgPyhhdD1bXSkgPyhldj1bXSkgPyhvbl9jcmVhdGUgPSBmdW4gXyAtPiAoKSkgdGFnIGNoaWxkcmVuID1cbiAgbGV0IGF0LCBpbXB1cmVfYXQgPSBwcmVwYXJlX2NvbCBhdCBpblxuICBsZXQgZXYsIGltcHVyZV9ldiA9IHByZXBhcmVfY29sIGV2IGluXG4gIGxldCBjaGlsZHJlbiwgaW1wdXJlX2NoaWxkcmVuID0gY29uc3VtZV9jaGlsZHJlbiBjaGlsZHJlbiBpblxuICBsZXQgZWwgPSBFbC52ID9kIH5hdCB0YWcgY2hpbGRyZW4gaW5cbiAgbGV0ICgpID0gb25fY3JlYXRlIGVsIGluXG4gIGxldCByZXN1bHQgPVxuICAgIG1hdGNoIGltcHVyZV9hdCwgaW1wdXJlX2NoaWxkcmVuIHdpdGhcbiAgICB8IFtdLCBOb25lIC0+IEx3ZC5wdXJlIGVsXG4gICAgfCBbXSwgU29tZSBjaGlsZHJlbiAtPlxuICAgICAgdXBkYXRlX2NoaWxkcmVuIGVsIGNoaWxkcmVuXG4gICAgfCBhdCwgTm9uZSAtPlxuICAgICAgTHdkLm1hcCB+ZjooZnVuICgpIC0+IGVsKSAoYXR0YWNoX2F0dHJpYnMgZWwgYXQpXG4gICAgfCBhdCwgU29tZSBjaGlsZHJlbiAtPlxuICAgICAgTHdkLm1hcDIgfmY6KGZ1biAoKSBlbCAtPiBlbClcbiAgICAgICAgKGF0dGFjaF9hdHRyaWJzIGVsIGF0KVxuICAgICAgICAodXBkYXRlX2NoaWxkcmVuIGVsIGNoaWxkcmVuKVxuICBpblxuICBMaXN0Lml0ZXIgKGZ1biBoIC0+IGlnbm9yZSAobGlzdGVuIGVsIGgpKSBldjtcbiAgbGV0IHJlc3VsdCA9XG4gICAgbWF0Y2ggaW1wdXJlX2V2IHdpdGhcbiAgICB8IFtdIC0+IHJlc3VsdFxuICAgIHwgZXZzIC0+XG4gICAgICBMd2QubWFwMiB+ZjooZnVuICgpIGVsIC0+IGVsKVxuICAgICAgICAoYXR0YWNoX2V2ZW50cyBlbCBldnMpXG4gICAgICAgIHJlc3VsdFxuICBpblxuICByZXN1bHRcblxuKCoqIHsxOmVscyBFbGVtZW50IGNvbnN0cnVjdG9yc30gKilcblxudHlwZSBjb25zID0gID9kOmRvY3VtZW50IC0+ID9hdDpBdC50IGNvbCAtPiA/ZXY6aGFuZGxlciBjb2wgLT4gP29uX2NyZWF0ZToodCAtPiB1bml0KSAtPiB0IGNvbCAtPiB0IEx3ZC50XG4oKiogVGhlIHR5cGUgZm9yIGVsZW1lbnQgY29uc3RydWN0b3JzLiBUaGlzIGlzIHNpbXBseSB7IXZ9IHdpdGggYVxuICAgIHByZS1hcHBsaWVkIGVsZW1lbnQgbmFtZS4gKilcblxudHlwZSB2b2lkX2NvbnMgPSA/ZDpkb2N1bWVudCAtPiA/YXQ6QXQudCBjb2wgLT4gP2V2OmhhbmRsZXIgY29sIC0+ID9vbl9jcmVhdGU6KHQgLT4gdW5pdCkgLT4gdW5pdCAtPiB0IEx3ZC50XG4oKiogVGhlIHR5cGUgZm9yIHZvaWQgZWxlbWVudCBjb25zdHJ1Y3RvcnMuIFRoaXMgaXMgc2ltcGx5IHshdn1cbiAgICB3aXRoIGEgcHJlLWFwcGxpZWQgZWxlbWVudCBuYW1lIGFuZCB3aXRob3V0IGNoaWxkcmVuLiAqKVxuXG5sZXQgY29ucyBuYW1lID9kID9hdCA/ZXYgP29uX2NyZWF0ZSBjcyA9IHYgP2QgP2F0ID9ldiA/b25fY3JlYXRlIG5hbWUgY3NcbmxldCB2b2lkX2NvbnMgbmFtZSA/ZCA/YXQgP2V2ID9vbl9jcmVhdGUgKCkgPSB2ID9kID9hdCA/ZXYgP29uX2NyZWF0ZSBuYW1lIFtdXG5cbmxldCBhID0gY29ucyBOYW1lLmFcbmxldCBhYmJyID0gY29ucyBOYW1lLmFiYnJcbmxldCBhZGRyZXNzID0gY29ucyBOYW1lLmFkZHJlc3NcbmxldCBhcmVhID0gdm9pZF9jb25zIE5hbWUuYXJlYVxubGV0IGFydGljbGUgPSBjb25zIE5hbWUuYXJ0aWNsZVxubGV0IGFzaWRlID0gY29ucyBOYW1lLmFzaWRlXG5sZXQgYXVkaW8gPSBjb25zIE5hbWUuYXVkaW9cbmxldCBiID0gY29ucyBOYW1lLmJcbmxldCBiYXNlID0gdm9pZF9jb25zIE5hbWUuYmFzZVxubGV0IGJkaSA9IGNvbnMgTmFtZS5iZGlcbmxldCBiZG8gPSBjb25zIE5hbWUuYmRvXG5sZXQgYmxvY2txdW90ZSA9IGNvbnMgTmFtZS5ibG9ja3F1b3RlXG5sZXQgYm9keSA9IGNvbnMgTmFtZS5ib2R5XG5sZXQgYnIgPSB2b2lkX2NvbnMgTmFtZS5iclxubGV0IGJ1dHRvbiA9IGNvbnMgTmFtZS5idXR0b25cbmxldCBjYW52YXMgPSBjb25zIE5hbWUuY2FudmFzXG5sZXQgY2FwdGlvbiA9IGNvbnMgTmFtZS5jYXB0aW9uXG5sZXQgY2l0ZSA9IGNvbnMgTmFtZS5jaXRlXG5sZXQgY29kZSA9IGNvbnMgTmFtZS5jb2RlXG5sZXQgY29sID0gdm9pZF9jb25zIE5hbWUuY29sXG5sZXQgY29sZ3JvdXAgPSBjb25zIE5hbWUuY29sZ3JvdXBcbmxldCBjb21tYW5kID0gY29ucyBOYW1lLmNvbW1hbmRcbmxldCBkYXRhbGlzdCA9IGNvbnMgTmFtZS5kYXRhbGlzdFxubGV0IGRkID0gY29ucyBOYW1lLmRkXG5sZXQgZGVsID0gY29ucyBOYW1lLmRlbFxubGV0IGRldGFpbHMgPSBjb25zIE5hbWUuZGV0YWlsc1xubGV0IGRmbiA9IGNvbnMgTmFtZS5kZm5cbmxldCBkaXYgPSBjb25zIE5hbWUuZGl2XG5sZXQgZGwgPSBjb25zIE5hbWUuZGxcbmxldCBkdCA9IGNvbnMgTmFtZS5kdFxubGV0IGVtID0gY29ucyBOYW1lLmVtXG5sZXQgZW1iZWQgPSB2b2lkX2NvbnMgTmFtZS5lbWJlZFxubGV0IGZpZWxkc2V0ID0gY29ucyBOYW1lLmZpZWxkc2V0XG5sZXQgZmlnY2FwdGlvbiA9IGNvbnMgTmFtZS5maWdjYXB0aW9uXG5sZXQgZmlndXJlID0gY29ucyBOYW1lLmZpZ3VyZVxubGV0IGZvb3RlciA9IGNvbnMgTmFtZS5mb290ZXJcbmxldCBmb3JtID0gY29ucyBOYW1lLmZvcm1cbmxldCBoMSA9IGNvbnMgTmFtZS5oMVxubGV0IGgyID0gY29ucyBOYW1lLmgyXG5sZXQgaDMgPSBjb25zIE5hbWUuaDNcbmxldCBoNCA9IGNvbnMgTmFtZS5oNFxubGV0IGg1ID0gY29ucyBOYW1lLmg1XG5sZXQgaDYgPSBjb25zIE5hbWUuaDZcbmxldCBoZWFkID0gY29ucyBOYW1lLmhlYWRcbmxldCBoZWFkZXIgPSBjb25zIE5hbWUuaGVhZGVyXG5sZXQgaGdyb3VwID0gY29ucyBOYW1lLmhncm91cFxubGV0IGhyID0gdm9pZF9jb25zIE5hbWUuaHJcbmxldCBodG1sID0gY29ucyBOYW1lLmh0bWxcbmxldCBpID0gY29ucyBOYW1lLmlcbmxldCBpZnJhbWUgPSBjb25zIE5hbWUuaWZyYW1lXG5sZXQgaW1nID0gdm9pZF9jb25zIE5hbWUuaW1nXG5sZXQgaW5wdXQgPSB2b2lkX2NvbnMgTmFtZS5pbnB1dFxubGV0IGlucyA9IGNvbnMgTmFtZS5pbnNcbmxldCBrYmQgPSBjb25zIE5hbWUua2JkXG5sZXQga2V5Z2VuID0gY29ucyBOYW1lLmtleWdlblxubGV0IGxhYmVsID0gY29ucyBOYW1lLmxhYmVsXG5sZXQgbGVnZW5kID0gY29ucyBOYW1lLmxlZ2VuZFxubGV0IGxpID0gY29ucyBOYW1lLmxpXG5sZXQgbGluayA9IHZvaWRfY29ucyBOYW1lLmxpbmtcbmxldCBtYXAgPSBjb25zIE5hbWUubWFwXG5sZXQgbWFyayA9IGNvbnMgTmFtZS5tYXJrXG5sZXQgbWVudSA9IGNvbnMgTmFtZS5tZW51XG5sZXQgbWV0YSA9IHZvaWRfY29ucyBOYW1lLm1ldGFcbmxldCBtZXRlciA9IGNvbnMgTmFtZS5tZXRlclxubGV0IG5hdiA9IGNvbnMgTmFtZS5uYXZcbmxldCBub3NjcmlwdCA9IGNvbnMgTmFtZS5ub3NjcmlwdFxubGV0IG9iamVjdCcgPSBjb25zIE5hbWUub2JqZWN0J1xubGV0IG9sID0gY29ucyBOYW1lLm9sXG5sZXQgb3B0Z3JvdXAgPSBjb25zIE5hbWUub3B0Z3JvdXBcbmxldCBvcHRpb24gPSBjb25zIE5hbWUub3B0aW9uXG5sZXQgb3V0cHV0ID0gY29ucyBOYW1lLm91dHB1dFxubGV0IHAgPSBjb25zIE5hbWUucFxubGV0IHBhcmFtID0gdm9pZF9jb25zIE5hbWUucGFyYW1cbmxldCBwcmUgPSBjb25zIE5hbWUucHJlXG5sZXQgcHJvZ3Jlc3MgPSBjb25zIE5hbWUucHJvZ3Jlc3NcbmxldCBxID0gY29ucyBOYW1lLnFcbmxldCBycCA9IGNvbnMgTmFtZS5ycFxubGV0IHJ0ID0gY29ucyBOYW1lLnJ0XG5sZXQgcnVieSA9IGNvbnMgTmFtZS5ydWJ5XG5sZXQgcyA9IGNvbnMgTmFtZS5zXG5sZXQgc2FtcCA9IGNvbnMgTmFtZS5zYW1wXG5sZXQgc2NyaXB0ID0gY29ucyBOYW1lLnNjcmlwdFxubGV0IHNlY3Rpb24gPSBjb25zIE5hbWUuc2VjdGlvblxubGV0IHNlbGVjdCA9IGNvbnMgTmFtZS5zZWxlY3RcbmxldCBzbWFsbCA9IGNvbnMgTmFtZS5zbWFsbFxubGV0IHNvdXJjZSA9IHZvaWRfY29ucyBOYW1lLnNvdXJjZVxubGV0IHNwYW4gPSBjb25zIE5hbWUuc3BhblxubGV0IHN0cm9uZyA9IGNvbnMgTmFtZS5zdHJvbmdcbmxldCBzdHlsZSA9IGNvbnMgTmFtZS5zdHlsZVxubGV0IHN1YiA9IGNvbnMgTmFtZS5zdWJcbmxldCBzdW1tYXJ5ID0gY29ucyBOYW1lLnN1bW1hcnlcbmxldCBzdXAgPSBjb25zIE5hbWUuc3VwXG5sZXQgdGFibGUgPSBjb25zIE5hbWUudGFibGVcbmxldCB0Ym9keSA9IGNvbnMgTmFtZS50Ym9keVxubGV0IHRkID0gY29ucyBOYW1lLnRkXG5sZXQgdGV4dGFyZWEgPSBjb25zIE5hbWUudGV4dGFyZWFcbmxldCB0Zm9vdCA9IGNvbnMgTmFtZS50Zm9vdFxubGV0IHRoID0gY29ucyBOYW1lLnRoXG5sZXQgdGhlYWQgPSBjb25zIE5hbWUudGhlYWRcbmxldCB0aW1lID0gY29ucyBOYW1lLnRpbWVcbmxldCB0aXRsZSA9IGNvbnMgTmFtZS50aXRsZVxubGV0IHRyID0gY29ucyBOYW1lLnRyXG5sZXQgdHJhY2sgPSB2b2lkX2NvbnMgTmFtZS50cmFja1xubGV0IHUgPSBjb25zIE5hbWUudVxubGV0IHVsID0gY29ucyBOYW1lLnVsXG5sZXQgdmFyID0gY29ucyBOYW1lLnZhclxubGV0IHZpZGVvID0gY29ucyBOYW1lLnZpZGVvXG5sZXQgd2JyID0gdm9pZF9jb25zIE5hbWUud2JyXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQXJyYXkgdXRpbHN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIGVxdWFsID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBvcmQgPSAnYSAtPiAnYSAtPiBpbnRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+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+PSApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIGExIGEyID0gbW9ub2lkX3Byb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgYTEgYTJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG5cblxudHlwZSB0ID0gZmxvYXRcblxudHlwZSBmcGNsYXNzID0gU3RkbGliLmZwY2xhc3MgPVxuICB8IEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA9IClcbiAgbGV0ICggPD4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD4gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbiAgbGV0ICggfi0gKSA6IHQgLT4gdCA9IFN0ZGxpYi4oIH4tLiApXG4gIGxldCAoICsgKSA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLiggKy4gKVxuICBsZXQgKCAtICkgOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi4oIC0uIClcbiAgbGV0ICggKiApIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIuKCAqLiApXG4gIGxldCAoIC8gKSA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLiggLy4gKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IG5hbiA9IFN0ZGxpYi5uYW5cbmxldCBpbmZpbml0eSA9IFN0ZGxpYi5pbmZpbml0eVxubGV0IG5lZ19pbmZpbml0eSA9IFN0ZGxpYi5uZWdfaW5maW5pdHlcbmxldCBtYXhfdmFsdWUgPSBpbmZpbml0eVxubGV0IG1pbl92YWx1ZSA9IG5lZ19pbmZpbml0eVxubGV0IG1heF9maW5pdGVfdmFsdWUgPSBTdGRsaWIubWF4X2Zsb2F0XG5sZXQgZXBzaWxvbiA9IFN0ZGxpYi5lcHNpbG9uX2Zsb2F0XG5sZXQgcGkgPSAweDEuOTIxZmI1NDQ0MmQxOHArMVxubGV0IGlzX25hbiB4ID0gU3RkbGliLihjbGFzc2lmeV9mbG9hdCB4ID0gU3RkbGliLkZQX25hbilcbmxldCBhZGQgPSAoICsuIClcbmxldCBzdWIgPSAoIC0uIClcbmxldCBtdWwgPSAoICouIClcbmxldCBkaXYgPSAoIC8uIClcbmxldCBuZWcgPSAoIH4tLiApXG5sZXQgYWJzID0gU3RkbGliLmFic19mbG9hdFxubGV0IHNjYWxlID0gKCAqLiApXG5cbmxldCBtaW4gKHggOiB0KSB5ID1cbiAgbWF0Y2ggU3RkbGliLmNsYXNzaWZ5X2Zsb2F0IHgsIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB5IHdpdGhcbiAgfCBGUF9uYW4sIF8gLT4geVxuICB8IF8sIEZQX25hbiAtPiB4XG4gIHwgXyAtPlxuICAgIGlmIHggPCB5IHRoZW5cbiAgICAgIHhcbiAgICBlbHNlXG4gICAgICB5XG5cbmxldCBtYXggKHggOiB0KSB5ID1cbiAgbWF0Y2ggU3RkbGliLmNsYXNzaWZ5X2Zsb2F0IHgsIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB5IHdpdGhcbiAgfCBGUF9uYW4sIF8gLT4geVxuICB8IF8sIEZQX25hbiAtPiB4XG4gIHwgXyAtPlxuICAgIGlmIHggPiB5IHRoZW5cbiAgICAgIHhcbiAgICBlbHNlXG4gICAgICB5XG5cbmxldCBlcXVhbCAoYSA6IGZsb2F0KSBiID0gYSA9IGJcbmxldCBoYXNoIDogdCAtPiBpbnQgPSBIYXNodGJsLmhhc2hcbmxldCBjb21wYXJlIChhIDogZmxvYXQpIGIgPSBTdGRsaWIuY29tcGFyZSBhIGJcblxuW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfZmxvYXRcblxubGV0IGZzaWduIGEgPVxuICBpZiBpc19uYW4gYSB0aGVuXG4gICAgbmFuXG4gIGVsc2UgaWYgYSA9IDAuIHRoZW5cbiAgICBhXG4gIGVsc2VcbiAgICBTdGRsaWIuY29weXNpZ24gMS4gYVxuXG5leGNlcHRpb24gVHJhcE5hTiBvZiBzdHJpbmdcblxubGV0IHNpZ25fZXhuIChhIDogZmxvYXQpID1cbiAgaWYgaXNfbmFuIGEgdGhlblxuICAgIHJhaXNlIChUcmFwTmFOIFwic2lnbl9leG5cIilcbiAgZWxzZVxuICAgIGNvbXBhcmUgYSAwLlxuXG5sZXQgcm91bmQgeCA9XG4gIGxldCBsb3cgPSBmbG9vciB4IGluXG4gIGxldCBoaWdoID0gY2VpbCB4IGluXG4gIGlmIHggLS4gbG93ID4gaGlnaCAtLiB4IHRoZW5cbiAgICBoaWdoXG4gIGVsc2VcbiAgICBsb3dcblxubGV0IHRvX2ludCAoYSA6IGZsb2F0KSA9IFN0ZGxpYi5pbnRfb2ZfZmxvYXQgYVxubGV0IG9mX2ludCAoYSA6IGludCkgPSBTdGRsaWIuZmxvYXRfb2ZfaW50IGFcbmxldCB0b19zdHJpbmcgKGEgOiBmbG9hdCkgPSBTdGRsaWIuc3RyaW5nX29mX2Zsb2F0IGFcbmxldCBvZl9zdHJpbmdfZXhuIChhIDogc3RyaW5nKSA9IFN0ZGxpYi5mbG9hdF9vZl9zdHJpbmcgYVxuXG5sZXQgb2Zfc3RyaW5nX29wdCAoYSA6IHN0cmluZykgPVxuICB0cnkgU29tZSAoU3RkbGliLmZsb2F0X29mX3N0cmluZyBhKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCByYW5kb20gbiBzdCA9IFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCBuXG5sZXQgcmFuZG9tX3NtYWxsID0gcmFuZG9tIDEwMC4wXG5sZXQgcmFuZG9tX3JhbmdlIGkgaiBzdCA9IGkgKy4gcmFuZG9tIChqIC0uIGkpIHN0XG5sZXQgZXF1YWxfcHJlY2lzaW9uIH5lcHNpbG9uIGEgYiA9IGFic19mbG9hdCAoYSAtLiBiKSA8IGVwc2lsb25cbmxldCBjbGFzc2lmeSA9IFN0ZGxpYi5jbGFzc2lmeV9mbG9hdFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEV4dGVuc2lvbiB0byB0aGUgc3RhbmRhcmQgSGFzaHRibH0gICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGVxID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBoYXNoID0gJ2EgLT4gaW50XG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIFBvbHltb3JwaGljIHRhYmxlc30gKilcblxubW9kdWxlIFBvbHkgPSBzdHJ1Y3RcbiAgbGV0IGdldCB0YmwgeCA9IHRyeSBTb21lIChIYXNodGJsLmZpbmQgdGJsIHgpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IGdldF9vciB0YmwgeCB+ZGVmYXVsdCA9IHRyeSBIYXNodGJsLmZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gZGVmYXVsdFxuICBsZXQga2V5cyB0YmwgayA9IEhhc2h0YmwuaXRlciAoZnVuIGtleSBfIC0+IGsga2V5KSB0YmxcbiAgbGV0IHZhbHVlcyB0YmwgayA9IEhhc2h0YmwuaXRlciAoZnVuIF8gdiAtPiBrIHYpIHRibFxuICBsZXQga2V5c19saXN0IHRibCA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhIC0+IGsgOjogYSkgdGJsIFtdXG4gIGxldCB2YWx1ZXNfbGlzdCB0YmwgPSBIYXNodGJsLmZvbGQgKGZ1biBfIHYgYSAtPiB2IDo6IGEpIHRibCBbXVxuXG4gIGxldCBhZGRfbGlzdCB0YmwgayB2ID1cbiAgICBsZXQgbCA9IHRyeSBIYXNodGJsLmZpbmQgdGJsIGsgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgdGJsIGsgKHYgOjogbClcblxuICBsZXQgaW5jciA/KGJ5ID0gMSkgdGJsIHggPVxuICAgIGxldCBuID0gZ2V0X29yIHRibCB4IH5kZWZhdWx0OjAgaW5cbiAgICBpZiBuICsgYnkgPD0gMCB0aGVuXG4gICAgICBIYXNodGJsLnJlbW92ZSB0YmwgeFxuICAgIGVsc2VcbiAgICAgIEhhc2h0YmwucmVwbGFjZSB0YmwgeCAobiArIGJ5KVxuXG4gIGxldCBkZWNyID8oYnkgPSAxKSB0YmwgeCA9XG4gICAgdHJ5XG4gICAgICBsZXQgbiA9IEhhc2h0YmwuZmluZCB0YmwgeCBpblxuICAgICAgaWYgbiAtIGJ5IDw9IDAgdGhlblxuICAgICAgICBIYXNodGJsLnJlbW92ZSB0YmwgeFxuICAgICAgZWxzZVxuICAgICAgICBIYXNodGJsLnJlcGxhY2UgdGJsIHggKG4gLSBieSlcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKVxuXG4gIGxldCBtYXBfbGlzdCBmIGggPSBIYXNodGJsLmZvbGQgKGZ1biB4IHkgYWNjIC0+IGYgeCB5IDo6IGFjYykgaCBbXVxuICBsZXQgdG9faXRlciB0YmwgayA9IEhhc2h0YmwuaXRlciAoZnVuIGtleSB2IC0+IGsgKGtleSwgdikpIHRibFxuICBsZXQgYWRkX2l0ZXIgdGJsIGkgPSBpIChmdW4gKGssIHYpIC0+IEhhc2h0YmwuYWRkIHRibCBrIHYpXG5cbiAgbGV0IGFkZF9pdGVyX3dpdGggfmYgdGJsIGkgPVxuICAgIGkgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggSGFzaHRibC5maW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IEhhc2h0YmwuYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcblxuICBsZXQgYWRkX3NlcSB0Ymwgc2VxID0gU2VxLml0ZXIgKGZ1biAoaywgdikgLT4gSGFzaHRibC5hZGQgdGJsIGsgdikgc2VxXG5cbiAgbGV0IGFkZF9zZXFfd2l0aCB+ZiB0Ymwgc2VxID1cbiAgICBTZXEuaXRlclxuICAgICAgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggSGFzaHRibC5maW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IEhhc2h0YmwuYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcbiAgICAgIHNlcVxuXG4gICgqIGhlbHBlciBmb3IgYnVpbGRpbmcgaGFzaHRhYmxlcyBieSBidWxrIG11dGF0aW9uICopXG4gIGxldFtAaW5saW5lXSBta190YmxfIGYgeCA9XG4gICAgbGV0IHRibCA9IEhhc2h0YmwuY3JlYXRlIDMyIGluXG4gICAgZiB0YmwgeDtcbiAgICB0YmxcblxuICBsZXQgb2ZfaXRlciBpID0gbWtfdGJsXyBhZGRfaXRlciBpXG4gIGxldCBvZl9zZXEgaSA9IG1rX3RibF8gYWRkX3NlcSBpXG4gIGxldCBvZl9pdGVyX3dpdGggfmYgaSA9IG1rX3RibF8gKGFkZF9pdGVyX3dpdGggfmYpIGlcbiAgbGV0IG9mX3NlcV93aXRoIH5mIGkgPSBta190YmxfIChhZGRfc2VxX3dpdGggfmYpIGlcbiAgbGV0IGFkZF9pdGVyX2NvdW50IHRibCBpID0gaSAoZnVuIGsgLT4gaW5jciB0YmwgaylcbiAgbGV0IGFkZF9zZXFfY291bnQgdGJsIHNlcSA9IFNlcS5pdGVyIChmdW4gayAtPiBpbmNyIHRibCBrKSBzZXFcbiAgbGV0IG9mX2l0ZXJfY291bnQgaSA9IG1rX3RibF8gYWRkX2l0ZXJfY291bnQgaVxuICBsZXQgb2Zfc2VxX2NvdW50IGkgPSBta190YmxfIGFkZF9zZXFfY291bnQgaVxuICBsZXQgdG9fbGlzdCB0YmwgPSBIYXNodGJsLmZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHRibCA9IEhhc2h0YmwuY3JlYXRlIDMyIGluXG4gICAgTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IEhhc2h0YmwuYWRkIHRibCBrIHYpIGw7XG4gICAgdGJsXG5cbiAgbGV0IG9mX2xpc3Rfd2l0aCB+ZiBsID1cbiAgICBsZXQgdGJsID0gSGFzaHRibC5jcmVhdGUgMzIgaW5cbiAgICBMaXN0Lml0ZXJcbiAgICAgIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBIYXNodGJsLmFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG4gICAgICBsO1xuICAgIHRibFxuXG4gIGxldCB1cGRhdGUgdGJsIH5mIH5rID1cbiAgICBsZXQgdiA9IGdldCB0YmwgayBpblxuICAgIG1hdGNoIHYsIGYgayB2IHdpdGhcbiAgICB8IE5vbmUsIE5vbmUgLT4gKClcbiAgICB8IE5vbmUsIFNvbWUgdicgLT4gSGFzaHRibC5hZGQgdGJsIGsgdidcbiAgICB8IFNvbWUgXywgU29tZSB2JyAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGsgdidcbiAgICB8IFNvbWUgXywgTm9uZSAtPiBIYXNodGJsLnJlbW92ZSB0Ymwga1xuXG4gIGxldCBnZXRfb3JfYWRkIHRibCB+ZiB+ayA9XG4gICAgdHJ5IEhhc2h0YmwuZmluZCB0Ymwga1xuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgdiA9IGYgayBpblxuICAgICAgSGFzaHRibC5hZGQgdGJsIGsgdjtcbiAgICAgIHZcblxuICBsZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICAgID8ocHBfc2VwID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIilcbiAgICAgID8ocHBfYXJyb3cgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkAgLT4gXCIpIHBwX2sgcHBfdiBmbXQgbSA9XG4gICAgcHBfc3RhcnQgZm10ICgpO1xuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgSGFzaHRibC5pdGVyXG4gICAgICAoZnVuIGsgdiAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF9rIGZtdCBrO1xuICAgICAgICBwcF9hcnJvdyBmbXQgKCk7XG4gICAgICAgIHBwX3YgZm10IHYpXG4gICAgICBtO1xuICAgIHBwX3N0b3AgZm10ICgpXG5lbmRcblxuaW5jbHVkZSBQb2x5XG5cbigqKiB7MiBGdW5jdG9yfSAqKVxuXG5tb2R1bGUgdHlwZSBTID0gc2lnXG4gIGluY2x1ZGUgSGFzaHRibC5TXG5cbiAgdmFsIGdldCA6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAoKiogW2dldCB0Ymwga10gZmluZHMgYSBiaW5kaW5nIGZvciB0aGUga2V5IFtrXSBpZiBwcmVzZW50LFxuICAgICAgb3IgcmV0dXJucyBbTm9uZV0gaWYgbm8gdmFsdWUgaXMgZm91bmQuXG4gICAgICBTYWZlIHZlcnNpb24gb2YgeyFIYXNodGJsLmZpbmR9LiAqKVxuXG4gIHZhbCBnZXRfb3IgOiAnYSB0IC0+IGtleSAtPiBkZWZhdWx0OidhIC0+ICdhXG4gICgqKiBbZ2V0X29yIHRibCBrIH5kZWZhdWx0XSByZXR1cm5zIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHRvIFtrXSBpZiBwcmVzZW50LFxuICAgICAgYW5kIHJldHVybnMgW2RlZmF1bHRdIG90aGVyd2lzZSAoaWYgW2tdIGRvZXNuJ3QgYmVsb25nIGluIFt0YmxdKS5cbiAgICAgIEBzaW5jZSAwLjE2ICopXG5cbiAgdmFsIGFkZF9saXN0IDogJ2EgbGlzdCB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICgqKiBbYWRkX2xpc3QgdGJsIHggeV0gYWRkcyBbeV0gdG8gdGhlIGxpc3QgW3hdIGlzIGJvdW5kIHRvLiBJZiBbeF0gaXNcbiAgICAgIG5vdCBib3VuZCwgaXQgYmVjb21lcyBib3VuZCB0byBbeV0uXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBpbmNyIDogP2J5OmludCAtPiBpbnQgdCAtPiBrZXkgLT4gdW5pdFxuICAoKiogW2luY3IgP2J5IHRibCB4XSBpbmNyZW1lbnRzIG9yIGluaXRpYWxpemVzIHRoZSBjb3VudGVyIGFzc29jaWF0ZWQgd2l0aCBbeF0uXG4gICAgICBJZiBbZ2V0IHRibCB4ID0gTm9uZV0sIHRoZW4gYWZ0ZXIgdXBkYXRlLCBbZ2V0IHRibCB4ID0gU29tZSAxXTtcbiAgICAgIG90aGVyd2lzZSwgaWYgW2dldCB0YmwgeCA9IFNvbWUgbl0sIG5vdyBbZ2V0IHRibCB4ID0gU29tZSAobisxKV0uXG4gICAgICBAcGFyYW0gYnkgaWYgc3BlY2lmaWVkLCB0aGUgaW50IHZhbHVlIGlzIGluY3JlbWVudGVkIGJ5IFtieV0gcmF0aGVyIHRoYW4gMS5cbiAgICAgIEBzaW5jZSAwLjE2ICopXG5cbiAgdmFsIGRlY3IgOiA/Ynk6aW50IC0+IGludCB0IC0+IGtleSAtPiB1bml0XG4gICgqKiBbZGVjciA/YnkgdGJsIHhdIGlzIGxpa2UgeyFpbmNyfSBidXQgc3VidHJhY3QgMSAob3IgdGhlIHZhbHVlIG9mIFtieV0pLlxuICAgICAgSWYgdGhlIHZhbHVlIHJlYWNoZXMgMCwgdGhlIGtleSBpcyByZW1vdmVkIGZyb20gdGhlIHRhYmxlLlxuICAgICAgVGhpcyBkb2VzIG5vdGhpbmcgaWYgdGhlIGtleSBpcyBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB0YWJsZS5cbiAgICAgIEBzaW5jZSAwLjE2ICopXG5cbiAgdmFsIGtleXMgOiAnYSB0IC0+IGtleSBpdGVyXG4gICgqKiAgW2tleXMgdGJsIGZdIGl0ZXJhdGVzIG9uIGtleXMgKHNpbWlsYXIgb3JkZXIgYXMgeyFIYXNodGJsLml0ZXJ9KS4gKilcblxuICB2YWwgdmFsdWVzIDogJ2EgdCAtPiAnYSBpdGVyXG4gICgqKiAgW3ZhbHVlcyB0YmwgZl0gaXRlcmF0ZXMgb24gdmFsdWVzIGluIHRoZSB0YWJsZS4gKilcblxuICB2YWwga2V5c19saXN0IDogXyB0IC0+IGtleSBsaXN0XG4gICgqKiBba2V5c19saXN0IHRibF0gaXMgdGhlIGxpc3Qgb2Yga2V5cyBpbiBbdGJsXS5cbiAgICAgIElmIHRoZSBrZXkgaXMgaW4gdGhlIEhhc2h0YWJsZSBtdWx0aXBsZSB0aW1lcywgYWxsIG9jY3VycmVuY2VzIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICBAc2luY2UgMC44ICopXG5cbiAgdmFsIHZhbHVlc19saXN0IDogJ2EgdCAtPiAnYSBsaXN0XG4gICgqKiBbdmFsdWVzX2xpc3QgdF0gaXMgdGhlIGxpc3Qgb2YgdmFsdWVzIGluIFt0XS5cbiAgICAgIEBzaW5jZSAwLjggKilcblxuICB2YWwgbWFwX2xpc3QgOiAoa2V5IC0+ICdhIC0+ICdiKSAtPiAnYSB0IC0+ICdiIGxpc3RcbiAgKCoqIE1hcCBvbiBhIGhhc2h0YWJsZSdzIGl0ZW1zLCBjb2xsZWN0IGludG8gYSBsaXN0LiAqKVxuXG4gIHZhbCB0b19pdGVyIDogJ2EgdCAtPiAoa2V5ICogJ2EpIGl0ZXJcbiAgKCoqIEl0ZXJhdGUgb24gYmluZGluZ3MgaW4gdGhlIHRhYmxlLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfaXRlciA6ICdhIHQgLT4gKGtleSAqICdhKSBpdGVyIC0+IHVuaXRcbiAgKCoqIEFkZCB0aGUgY29ycmVzcG9uZGluZyBwYWlycyB0byB0aGUgdGFibGUsIHVzaW5nIHshSGFzaHRibC5hZGR9LlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfaXRlcl93aXRoIDpcbiAgICBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBpdGVyIC0+IHVuaXRcbiAgKCoqIEFkZCB0aGUgY29ycmVzcG9uZGluZyBwYWlycyB0byB0aGUgdGFibGUsIHVzaW5nIHshSGFzaHRibC5hZGR9LlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICgqKiBBZGQgdGhlIGNvcnJlc3BvbmRpbmcgcGFpcnMgdG8gdGhlIHRhYmxlLCB1c2luZyB7IUhhc2h0YmwuYWRkfS5cbiAgICAgIFJlbmFtZWQgZnJvbSBbYWRkX3N0ZF9zZXFdIHNpbmNlIDMuMC5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgYWRkX3NlcV93aXRoIDpcbiAgICBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICgqKiBBZGQgdGhlIGNvcnJlc3BvbmRpbmcgcGFpcnMgdG8gdGhlIHRhYmxlLCB1c2luZyB7IUhhc2h0YmwuYWRkfS5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIG9mX2l0ZXIgOiAoa2V5ICogJ2EpIGl0ZXIgLT4gJ2EgdFxuICAoKiogRnJvbSB0aGUgZ2l2ZW4gYmluZGluZ3MsIGFkZGVkIGluIG9yZGVyLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBvZl9pdGVyX3dpdGggOiBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+IChrZXkgKiAnYSkgaXRlciAtPiAnYSB0XG4gICgqKiBGcm9tIHRoZSBnaXZlbiBiaW5kaW5ncywgYWRkZWQgaW4gb3JkZXIuXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgKCoqIEZyb20gdGhlIGdpdmVuIGJpbmRpbmdzLCBhZGRlZCBpbiBvcmRlci5cbiAgICAgIFJlbmFtZWQgZnJvbSBbb2Zfc3RkX3NlcV0gc2luY2UgMy4wLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCBvZl9zZXFfd2l0aCA6IGY6KGtleSAtPiAnYSAtPiAnYSAtPiAnYSkgLT4gKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gICgqKiBGcm9tIHRoZSBnaXZlbiBiaW5kaW5ncywgYWRkZWQgaW4gb3JkZXIuXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCBhZGRfaXRlcl9jb3VudCA6IGludCB0IC0+IGtleSBpdGVyIC0+IHVuaXRcbiAgKCoqIFthZGRfaXRlcl9jb3VudCB0YmwgaV0gaW5jcmVtZW50cyB0aGUgY291bnQgb2YgZWFjaCBlbGVtZW50IG9mIFtpXVxuICAgICAgYnkgY2FsbGluZyB7IWluY3J9LiBUaGlzIGlzIHVzZWZ1bCBmb3IgY291bnRpbmcgaG93IG1hbnkgdGltZXMgZWFjaFxuICAgICAgZWxlbWVudCBvZiBbaV0gb2NjdXJzLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfc2VxX2NvdW50IDogaW50IHQgLT4ga2V5IFNlcS50IC0+IHVuaXRcbiAgKCoqIFthZGRfc2VxX2NvdW50IHRibCBzZXFdIGluY3JlbWVudHMgdGhlIGNvdW50IG9mIGVhY2ggZWxlbWVudCBvZiBbc2VxXVxuICAgICAgYnkgY2FsbGluZyB7IWluY3J9LiBUaGlzIGlzIHVzZWZ1bCBmb3IgY291bnRpbmcgaG93IG1hbnkgdGltZXMgZWFjaFxuICAgICAgZWxlbWVudCBvZiBbc2VxXSBvY2N1cnMuXG4gICAgICBSZW5hbWVkIGZyb20gW29mX3N0ZF9zZXFfY291bnRdIHNpbmNlIDMuMC5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgb2ZfaXRlcl9jb3VudCA6IGtleSBpdGVyIC0+IGludCB0XG4gICgqKiBMaWtlIHshYWRkX3NlcV9jb3VudH0sIGJ1dCBhbGxvY2F0ZXMgYSBuZXcgdGFibGUgYW5kIHJldHVybnMgaXQuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX3NlcV9jb3VudCA6IGtleSBTZXEudCAtPiBpbnQgdFxuICAoKiogTGlrZSB7IWFkZF9zZXFfY291bnR9LCBidXQgYWxsb2NhdGVzIGEgbmV3IHRhYmxlIGFuZCByZXR1cm5zIGl0LlxuICAgICAgUmVuYW1lZCBmcm9tIFtvZl9zdGRfc2VxX2NvdW50XSBzaW5jZSAzLjAuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIHRvX2xpc3QgOiAnYSB0IC0+IChrZXkgKiAnYSkgbGlzdFxuICAoKiogW3RvX2xpc3QgdGJsXSByZXR1cm5zIHRoZSBsaXN0IG9mIChrZXksdmFsdWUpIGJpbmRpbmdzIChvcmRlciB1bnNwZWNpZmllZCkuICopXG5cbiAgdmFsIG9mX2xpc3QgOiAoa2V5ICogJ2EpIGxpc3QgLT4gJ2EgdFxuICAoKiogW29mX2xpc3QgbF0gYnVpbGRzIGEgdGFibGUgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBbbF0gb2YgYmluZGluZ3MgW2tfaSAtPiB2X2ldLFxuICAgICAgYWRkZWQgaW4gb3JkZXIgdXNpbmcgeyFhZGR9LiBJZiBhIGtleSBvY2N1cnMgc2V2ZXJhbCB0aW1lcyxcbiAgICAgIGl0IHdpbGwgYmUgYWRkZWQgc2V2ZXJhbCB0aW1lcywgYW5kIHRoZSB2aXNpYmxlIGJpbmRpbmdcbiAgICAgIHdpbGwgYmUgdGhlIGxhc3Qgb25lLiAqKVxuXG4gIHZhbCBvZl9saXN0X3dpdGggOiBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+IChrZXkgKiAnYSkgbGlzdCAtPiAnYSB0XG4gICgqKiBbb2ZfbGlzdCBsXSBidWlsZHMgYSB0YWJsZSBmcm9tIHRoZSBnaXZlbiBsaXN0IFtsXSBvZiBiaW5kaW5ncyBba19pIC0+IHZfaV0uXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCB1cGRhdGUgOiAnYSB0IC0+IGY6KGtleSAtPiAnYSBvcHRpb24gLT4gJ2Egb3B0aW9uKSAtPiBrOmtleSAtPiB1bml0XG4gICgqKiBbdXBkYXRlIHRibCB+ZiB+a10gdXBkYXRlcyBrZXkgW2tdIGJ5IGNhbGxpbmcgW2YgayAoU29tZSB2KV0gaWZcbiAgICAgIFtrXSB3YXMgbWFwcGVkIHRvIFt2XSwgb3IgW2YgayBOb25lXSBvdGhlcndpc2U7IGlmIHRoZSBjYWxsXG4gICAgICByZXR1cm5zIFtOb25lXSB0aGVuIFtrXSBpcyByZW1vdmVkL3N0YXlzIHJlbW92ZWQsIGlmIHRoZSBjYWxsXG4gICAgICByZXR1cm5zIFtTb21lIHYnXSB0aGVuIHRoZSBiaW5kaW5nIFtrIC0+IHYnXSBpcyBpbnNlcnRlZFxuICAgICAgdXNpbmcgeyFIYXNodGJsLnJlcGxhY2V9LlxuICAgICAgQHNpbmNlIDAuMTQgKilcblxuICB2YWwgZ2V0X29yX2FkZCA6ICdhIHQgLT4gZjooa2V5IC0+ICdhKSAtPiBrOmtleSAtPiAnYVxuICAoKiogW2dldF9vcl9hZGQgdGJsIH5rIH5mXSBmaW5kcyBhbmQgcmV0dXJucyB0aGUgYmluZGluZyBvZiBba11cbiAgICAgIGluIFt0YmxdLCBpZiBpdCBleGlzdHMuIElmIGl0IGRvZXMgbm90IGV4aXN0LCB0aGVuIFtmIGtdXG4gICAgICBpcyBjYWxsZWQgdG8gb2J0YWluIGEgbmV3IGJpbmRpbmcgW3ZdOyBbayAtPiB2XSBpcyBhZGRlZFxuICAgICAgdG8gW3RibF0gYW5kIFt2XSBpcyByZXR1cm5lZC5cbiAgICAgIEBzaW5jZSAxLjAgKilcblxuICB2YWwgcHAgOlxuICAgID9wcF9zdGFydDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfc3RvcDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfc2VwOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9hcnJvdzp1bml0IHByaW50ZXIgLT5cbiAgICBrZXkgcHJpbnRlciAtPlxuICAgICdhIHByaW50ZXIgLT5cbiAgICAnYSB0IHByaW50ZXJcbiAgKCoqIFtwcCB+cHBfc3RhcnQgfnBwX3N0b3AgfnBwX3NlcCB+cHAgYXJyb3cgcHBfayBwcF92XSByZXR1cm5zIGEgdGFibGUgcHJpbnRlclxuICAgICAgZ2l2ZW4gYSBbcHBfa10gcHJpbnRlclxuICAgICAgZm9yIGluZGl2aWR1YWwga2V5IGFuZCBhIFtwcF92XSBwcmludGVyIGZvciBpbmRpdmlkdWFsIHZhbHVlLlxuICAgICAgW3BwX3N0YXJ0XSBhbmQgW3BwX3N0b3BdIGNvbnRyb2wgdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGVsaW1pdGVycyxcbiAgICAgIGJ5IGRlZmF1bHQgcHJpbnQgbm90aGluZy4gW3BwX3NlcF0gY29udHJvbCB0aGUgc2VwYXJhdG9yIGJldHdlZW4gYmluZGluZy5cbiAgICAgIFtwcF9hcnJvd10gY29udHJvbCB0aGUgYXJyb3cgYmV0d2VlbiB0aGUga2V5IGFuZCB2YWx1ZS5cbiAgICAgIFJlbmFtZWQgZnJvbSBbcHJpbnRdIHNpbmNlIDIuMC5cbiAgICAgIEBzaW5jZSAwLjEzICopXG5lbmRcblxubW9kdWxlIE1ha2UgKFggOiBIYXNodGJsLkhhc2hlZFR5cGUpIDpcbiAgUyB3aXRoIHR5cGUga2V5ID0gWC50IGFuZCB0eXBlICdhIHQgPSAnYSBIYXNodGJsLk1ha2UoWCkudCA9IHN0cnVjdFxuICBpbmNsdWRlIEhhc2h0YmwuTWFrZSAoWClcblxuICBsZXQgZ2V0IHRibCB4ID0gdHJ5IFNvbWUgKGZpbmQgdGJsIHgpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IGdldF9vciB0YmwgeCB+ZGVmYXVsdCA9IHRyeSBmaW5kIHRibCB4IHdpdGggTm90X2ZvdW5kIC0+IGRlZmF1bHRcblxuICBsZXQgaW5jciA/KGJ5ID0gMSkgdGJsIHggPVxuICAgIGxldCBuID0gZ2V0X29yIHRibCB4IH5kZWZhdWx0OjAgaW5cbiAgICBpZiBuICsgYnkgPD0gMCB0aGVuXG4gICAgICByZW1vdmUgdGJsIHhcbiAgICBlbHNlXG4gICAgICByZXBsYWNlIHRibCB4IChuICsgYnkpXG5cbiAgbGV0IGFkZF9saXN0IHRibCBrIHYgPVxuICAgIGxldCBsID0gdHJ5IGZpbmQgdGJsIGsgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICByZXBsYWNlIHRibCBrICh2IDo6IGwpXG5cbiAgbGV0IGRlY3IgPyhieSA9IDEpIHRibCB4ID1cbiAgICB0cnlcbiAgICAgIGxldCBuID0gZmluZCB0YmwgeCBpblxuICAgICAgaWYgbiAtIGJ5IDw9IDAgdGhlblxuICAgICAgICByZW1vdmUgdGJsIHhcbiAgICAgIGVsc2VcbiAgICAgICAgcmVwbGFjZSB0YmwgeCAobiAtIGJ5KVxuICAgIHdpdGggTm90X2ZvdW5kIC0+ICgpXG5cbiAgbGV0IGtleXMgdGJsIGsgPSBpdGVyIChmdW4ga2V5IF8gLT4gayBrZXkpIHRibFxuICBsZXQgdmFsdWVzIHRibCBrID0gaXRlciAoZnVuIF8gdiAtPiBrIHYpIHRibFxuICBsZXQga2V5c19saXN0IHRibCA9IGZvbGQgKGZ1biBrIF8gYSAtPiBrIDo6IGEpIHRibCBbXVxuICBsZXQgdmFsdWVzX2xpc3QgdGJsID0gZm9sZCAoZnVuIF8gdiBhIC0+IHYgOjogYSkgdGJsIFtdXG4gIGxldCBtYXBfbGlzdCBmIGggPSBmb2xkIChmdW4geCB5IGFjYyAtPiBmIHggeSA6OiBhY2MpIGggW11cblxuICBsZXQgdXBkYXRlIHRibCB+ZiB+ayA9XG4gICAgbGV0IHYgPSBnZXQgdGJsIGsgaW5cbiAgICBtYXRjaCB2LCBmIGsgdiB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+ICgpXG4gICAgfCBOb25lLCBTb21lIHYnIC0+IGFkZCB0YmwgayB2J1xuICAgIHwgU29tZSBfLCBTb21lIHYnIC0+IHJlcGxhY2UgdGJsIGsgdidcbiAgICB8IFNvbWUgXywgTm9uZSAtPiByZW1vdmUgdGJsIGtcblxuICBsZXQgZ2V0X29yX2FkZCB0YmwgfmYgfmsgPVxuICAgIHRyeSBmaW5kIHRibCBrXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgIGxldCB2ID0gZiBrIGluXG4gICAgICBhZGQgdGJsIGsgdjtcbiAgICAgIHZcblxuICBsZXQgdG9faXRlciB0YmwgayA9IGl0ZXIgKGZ1biBrZXkgdiAtPiBrIChrZXksIHYpKSB0YmxcbiAgbGV0IGFkZF9pdGVyIHRibCBpID0gaSAoZnVuIChrLCB2KSAtPiBhZGQgdGJsIGsgdilcblxuICBsZXQgYWRkX2l0ZXJfd2l0aCB+ZiB0YmwgaSA9XG4gICAgaSAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBmaW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gcmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuXG4gIGxldCBhZGRfc2VxIHRibCBzZXEgPSBTZXEuaXRlciAoZnVuIChrLCB2KSAtPiBhZGQgdGJsIGsgdikgc2VxXG5cbiAgbGV0IGFkZF9zZXFfd2l0aCB+ZiB0Ymwgc2VxID1cbiAgICBTZXEuaXRlclxuICAgICAgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBhZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IHJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcbiAgICAgIHNlcVxuXG4gICgqIGhlbHBlciBmb3IgYnVpbGRpbmcgaGFzaHRhYmxlcyBieSBidWxrIG11dGF0aW9uICopXG4gIGxldFtAaW5saW5lXSBta190YmxfIGYgeCA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIGYgdGJsIHg7XG4gICAgdGJsXG5cbiAgbGV0IG9mX2l0ZXIgaSA9IG1rX3RibF8gYWRkX2l0ZXIgaVxuICBsZXQgb2Zfc2VxIGkgPSBta190YmxfIGFkZF9zZXEgaVxuICBsZXQgb2ZfaXRlcl93aXRoIH5mIGkgPSBta190YmxfIChhZGRfaXRlcl93aXRoIH5mKSBpXG4gIGxldCBvZl9zZXFfd2l0aCB+ZiBpID0gbWtfdGJsXyAoYWRkX3NlcV93aXRoIH5mKSBpXG4gIGxldCBhZGRfaXRlcl9jb3VudCB0YmwgaSA9IGkgKGZ1biBrIC0+IGluY3IgdGJsIGspXG4gIGxldCBhZGRfc2VxX2NvdW50IHRibCBzZXEgPSBTZXEuaXRlciAoZnVuIGsgLT4gaW5jciB0Ymwgaykgc2VxXG5cbiAgbGV0IG9mX2l0ZXJfY291bnQgc2VxID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgYWRkX2l0ZXJfY291bnQgdGJsIHNlcTtcbiAgICB0YmxcblxuICBsZXQgb2Zfc2VxX2NvdW50IGkgPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBhZGRfc2VxX2NvdW50IHRibCBpO1xuICAgIHRibFxuXG4gIGxldCB0b19saXN0IHRibCA9IGZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIExpc3QuaXRlciAoZnVuIChrLCB2KSAtPiBhZGQgdGJsIGsgdikgbDtcbiAgICB0YmxcblxuICBsZXQgb2ZfbGlzdF93aXRoIH5mIGwgPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBMaXN0Lml0ZXJcbiAgICAgIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIGZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiByZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG4gICAgICBsO1xuICAgIHRibFxuXG4gIGxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgICAgPyhwcF9zZXAgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIixAIFwiKVxuICAgICAgPyhwcF9hcnJvdyA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQCAtPiBcIikgcHBfayBwcF92IGZtdCBtID1cbiAgICBwcF9zdGFydCBmbXQgKCk7XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBpdGVyXG4gICAgICAoZnVuIGsgdiAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF9rIGZtdCBrO1xuICAgICAgICBwcF9hcnJvdyBmbXQgKCk7XG4gICAgICAgIHBwX3YgZm10IHYpXG4gICAgICBtO1xuICAgIHBwX3N0b3AgZm10ICgpXG5lbmRcbiIsIigqIGJhY2twb3J0IG5ldyBmdW5jdGlvbnMgZnJvbSBzdGRsaWIgaGVyZSAqKVxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RocyBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+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+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw9IClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgTXVsdGltYXB9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgdHlwZSBrZXlcbiAgdHlwZSB2YWx1ZVxuICB0eXBlIHRcblxuICB2YWwgZW1wdHkgOiB0XG4gICgqKiBFbXB0eSBtdWx0aW1hcCAqKVxuXG4gIHZhbCBpc19lbXB0eSA6IHQgLT4gYm9vbFxuICAoKiogRW1wdHkgbXVsdGltYXA/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+IHJlbW92ZSBtIGEgYikgbSAoZmluZF9yaWdodF9pdGVyIG0gYilcblxuICBsZXQgbWVtX2xlZnQgbSBhID0gTWFwTC5tZW0gbS5sZWZ0IGFcbiAgbGV0IG1lbV9yaWdodCBtIGIgPSBNYXBSLm1lbSBtLnJpZ2h0IGJcbiAgbGV0IGZpbmQxX2xlZnQgbSBhID0gX2hlYWRfaXRlciAoZmluZF9sZWZ0X2l0ZXIgbSBhKVxuICBsZXQgZmluZDFfcmlnaHQgbSBiID0gX2hlYWRfaXRlciAoZmluZF9yaWdodF9pdGVyIG0gYilcbiAgbGV0IGZvbGQgZiBhY2MgbSA9IE1hcEwuZm9sZCBtLmxlZnQgYWNjIGZcbiAgbGV0IHBhaXJzIG0gPSBNYXBMLnRvX2l0ZXIgbS5sZWZ0XG4gIGxldCBhZGRfcGFpcnMgbSBzZXEgPSBfZm9sZF9pdGVyIChmdW4gbSAoYSwgYikgLT4gYWRkIG0gYSBiKSBtIHNlcVxuICBsZXQgaXRlcl9sZWZ0IG0gPSBNYXBMLmtleXMgbS5sZWZ0XG4gIGxldCBpdGVyX3JpZ2h0IG0gPSBNYXBSLmtleXMgbS5yaWdodFxuZW5kXG4iLCJ0eXBlIHQgPSBKdi50XG5cbmV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgeCB0ID0gSnYuZ2V0IHQgXCJ4XCIgfD4gSnYudG9faW50XG5sZXQgeSB0ID0gSnYuZ2V0IHQgXCJ5XCIgfD4gSnYudG9faW50XG5sZXQgd2lkdGggdCA9IEp2LmdldCB0IFwid2lkdGhcIiB8PiBKdi50b19pbnRcbmxldCBoZWlnaHQgdCA9IEp2LmdldCB0IFwiaGVpZ2h0XCIgfD4gSnYudG9faW50XG5sZXQgdG9wIHQgPSBKdi5nZXQgdCBcInRvcFwiIHw+IEp2LnRvX2ludFxubGV0IHJpZ2h0IHQgPSBKdi5nZXQgdCBcInJpZ2h0XCIgfD4gSnYudG9faW50XG5sZXQgYm90dG9tIHQgPSBKdi5nZXQgdCBcImJvdHRvbVwiIHw+IEp2LnRvX2ludFxubGV0IGxlZnQgdCA9IEp2LmdldCB0IFwibGVmdFwiIHw+IEp2LnRvX2ludFxuIiwib3BlbiBCcnJcblxudHlwZSB0ID0gSnYudFxuXG5leHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxubW9kdWxlIEVudHJ5ID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICB0eXBlIGJveF9zaXplID0geyBibG9ja19zaXplIDogaW50OyBpbmxpbmVfc2l6ZSA6IGludCB9XG5cbiAgbGV0IGJveF9zaXplX29mX2p2IGp2ID1cbiAgICB7XG4gICAgICBibG9ja19zaXplID0gSnYuZ2V0IGp2IFwiYmxvY2tTaXplXCIgfD4gSnYudG9faW50O1xuICAgICAgaW5saW5lX3NpemUgPSBKdi5nZXQganYgXCJpbmxpbmVTaXplXCIgfD4gSnYudG9faW50O1xuICAgIH1cblxuICBsZXQgYm9yZGVyX2JveF9zaXplIHQgPSBKdi5nZXQgdCBcImJvcmRlckJveFNpemVcIiB8PiBKdi50b19hcnJheSBib3hfc2l6ZV9vZl9qdlxuXG4gIGxldCBjb250ZW50X2JveF9zaXplIHQgPVxuICAgIEp2LmdldCB0IFwiY29udGVudEJveFNpemVcIiB8PiBKdi50b19hcnJheSBib3hfc2l6ZV9vZl9qdlxuXG4gIGxldCBjb250ZW50X3JlY3QgdCA9IEp2LmdldCB0IFwiY29udGVudFJlY3RcIiB8PiBEb21fcmVjdF9yZWFkX29ubHkub2ZfanZcblxuICBsZXQgZGV2aWNlX3BpeGVsX2NvbnRlbnRfYm94X3NpemUgdCA9XG4gICAgSnYuZ2V0IHQgXCJkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplXCIgfD4gSnYudG9fYXJyYXkgYm94X3NpemVfb2ZfanZcblxuICBsZXQgdGFyZ2V0IHQgPSBKdi5nZXQgdCBcInRhcmdldFwiIHw+IEVsLm9mX2p2XG5lbmRcblxudHlwZSBib3ggPSBDb250ZW50X2JveCB8IEJvcmRlcl9ib3ggfCBEZXZpY2VfcGl4ZWxfY29udGVudF9ib3hcblxubGV0IHN0cmluZ19vZl9ib3ggPSBmdW5jdGlvblxuICB8IENvbnRlbnRfYm94IC0+IFwiY29udGVudC1ib3hcIlxuICB8IEJvcmRlcl9ib3ggLT4gXCJib3JkZXItYm94XCJcbiAgfCBEZXZpY2VfcGl4ZWxfY29udGVudF9ib3ggLT4gXCJkZXZpY2UtcGl4ZWwtY29udGVudC1ib3hcIlxuXG5sZXQgZGlzY29ubmVjdCB0ID0gaWdub3JlIEBAIEp2LmNhbGwgdCBcImRpc2Nvbm5lY3RcIiBbfHxdXG5cbmxldCBvYnNlcnZlIHQgP2JveCB0YXJnZXQgPVxuICBsZXQgYXJncyA9XG4gICAgbGV0IHRhcmdldCA9IEVsLnRvX2p2IHRhcmdldCBpblxuICAgIG1hdGNoIGJveCB3aXRoXG4gICAgfCBOb25lIC0+IFt8IHRhcmdldCB8XVxuICAgIHwgU29tZSBiIC0+XG4gICAgICAgIGxldCBib3ggPSBKdi5vYmogW3wgKFwiYm94XCIsIEp2Lm9mX3N0cmluZyAoc3RyaW5nX29mX2JveCBiKSkgfF0gaW5cbiAgICAgICAgW3wgdGFyZ2V0OyBib3ggfF1cbiAgaW5cbiAgSnYuY2FsbCB0IFwib2JzZXJ2ZVwiIGFyZ3MgfD4gaWdub3JlXG5cbmxldCB1bm9ic2VydmUgdCB0YXJnZXQgPVxuICBsZXQgdGFyZ2V0ID0gRWwudG9fanYgdGFyZ2V0IGluXG4gIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJkaXNjb25uZWN0XCIgW3wgdGFyZ2V0IHxdXG5cbmxldCBjcmVhdGUgfmNhbGxiYWNrID1cbiAgbGV0IGNhbGxiYWNrIGVudHJpZXMgb2JzZXJ2ZXIgPVxuICAgIGxldCBlbnRyaWVzID0gSnYudG9fbGlzdCBFbnRyeS5vZl9qdiBlbnRyaWVzIGluXG4gICAgY2FsbGJhY2sgZW50cmllcyAob2ZfanYgb2JzZXJ2ZXIpXG4gIGluXG4gIGxldCBhcmdzID0gW3wgSnYucmVwciBjYWxsYmFjayB8XSBpblxuICBKdi5uZXcnIChKdi5nZXQgSnYuZ2xvYmFsIFwiUmVzaXplT2JzZXJ2ZXJcIikgYXJnc1xuIiwib3BlbiBCcnJcblxudHlwZSB0ID0gSnYudFxuXG5leHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxubGV0IG9mX25hdmlnYXRvciBuID0gSnYuZ2V0IChOYXZpZ2F0b3IudG9fanYgbikgXCJtZWRpYVNlc3Npb25cIlxuXG5tb2R1bGUgTWVkaWFfbWV0YWRhdGEgPSBzdHJ1Y3RcbiAgdHlwZSBpbWcgPSB7IHNyYyA6IHN0cmluZzsgc2l6ZXMgOiBzdHJpbmc7IHR5cGUnIDogc3RyaW5nIH1cblxuICBsZXQgaW1nX3RvX2p2IGltZyA9XG4gICAgSnYub2JqXG4gICAgICBbfFxuICAgICAgICAoXCJzcmNcIiwgSnYub2Zfc3RyaW5nIGltZy5zcmMpO1xuICAgICAgICAoXCJzaXplc1wiLCBKdi5vZl9zdHJpbmcgaW1nLnNpemVzKTtcbiAgICAgICAgKFwidHlwZVwiLCBKdi5vZl9zdHJpbmcgaW1nLnR5cGUnKTtcbiAgICAgIHxdXG5cbiAgbGV0IG1heWJlX3N0cmluZyBqdiBwcm9wID1cbiAgICBtYXRjaCBKdi5maW5kIGp2IHByb3Agd2l0aCBOb25lIC0+IFwidW5rbm93blwiIHwgU29tZSBqdiAtPiBKdi50b19zdHJpbmcganZcblxuICBsZXQgaW1nX29mX2p2IGp2ID1cbiAgICBsZXQgc3JjID0gbWF5YmVfc3RyaW5nIGp2IFwic3JjXCIgaW5cbiAgICBsZXQgc2l6ZXMgPSBtYXliZV9zdHJpbmcganYgXCJzaXplc1wiIGluXG4gICAgbGV0IHR5cGUnID0gbWF5YmVfc3RyaW5nIGp2IFwidHlwZVwiIGluXG4gICAgeyBzcmM7IHNpemVzOyB0eXBlJyB9XG5cbiAgdHlwZSB0ID0ge1xuICAgIHRpdGxlIDogc3RyaW5nO1xuICAgIGFydGlzdCA6IHN0cmluZztcbiAgICBhbGJ1bSA6IHN0cmluZztcbiAgICBhcnR3b3JrIDogaW1nIGxpc3Q7XG4gIH1cblxuICBsZXQgdG9fanYgdCA9XG4gICAgbGV0IGFydHdvcmsgPSBKdi5vZl9saXN0IGltZ190b19qdiB0LmFydHdvcmsgaW5cbiAgICBKdi5vYmpcbiAgICAgIFt8XG4gICAgICAgIChcInRpdGxlXCIsIEp2Lm9mX3N0cmluZyB0LnRpdGxlKTtcbiAgICAgICAgKFwiYXJ0aXN0XCIsIEp2Lm9mX3N0cmluZyB0LmFydGlzdCk7XG4gICAgICAgIChcImFsYnVtXCIsIEp2Lm9mX3N0cmluZyB0LmFsYnVtKTtcbiAgICAgICAgKFwiYXJ0d29ya1wiLCBhcnR3b3JrKTtcbiAgICAgIHxdXG5cbiAgbGV0IG9mX2p2IGp2ID1cbiAgICBsZXQgdGl0bGUgPSBtYXliZV9zdHJpbmcganYgXCJ0aXRsZVwiIGluXG4gICAgbGV0IGFydGlzdCA9IG1heWJlX3N0cmluZyBqdiBcImFydGlzdFwiIGluXG4gICAgbGV0IGFsYnVtID0gbWF5YmVfc3RyaW5nIGp2IFwiYWxidW1cIiBpblxuICAgIGxldCBhcnR3b3JrID1cbiAgICAgIG1hdGNoIEp2LmZpbmQganYgXCJhcnR3b3JrXCIgd2l0aFxuICAgICAgfCBOb25lIC0+IFtdXG4gICAgICB8IFNvbWUganYgLT4gSnYudG9fbGlzdCBpbWdfb2ZfanYganZcbiAgICBpblxuICAgIHsgdGl0bGU7IGFydGlzdDsgYWxidW07IGFydHdvcmsgfVxuZW5kXG5cbmxldCBtZXRhZGF0YSB0ID0gSnYuZ2V0IHQgXCJtZXRhZGF0YVwiIHw+IEp2LnRvX29wdGlvbiBNZWRpYV9tZXRhZGF0YS5vZl9qdlxuXG5sZXQgc2V0X21ldGFkYXRhIHQgdiA9XG4gIENvbnNvbGUubG9nIFsgXCJTZXQgbWV0YWRhdGFcIjsgTWVkaWFfbWV0YWRhdGEudG9fanYgdiBdO1xuICBsZXQgbWV0YWRhdGEgPVxuICAgIEp2Lm5ldycgKEp2LmdldCBKdi5nbG9iYWwgXCJNZWRpYU1ldGFkYXRhXCIpIFt8IE1lZGlhX21ldGFkYXRhLnRvX2p2IHYgfF1cbiAgaW5cbiAgSnYuc2V0IHQgXCJtZXRhZGF0YVwiIG1ldGFkYXRhXG5cbm1vZHVsZSBBY3Rpb24gPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSnN0ci50XG5cbiAgbGV0IG5leHRfdHJhY2sgPSBKc3RyLnYgXCJuZXh0dHJhY2tcIlxuICBsZXQgcHJldmlvdXNfdHJhY2sgPSBKc3RyLnYgXCJwcmV2aW91c3RyYWNrXCJcbmVuZFxuXG5sZXQgc2V0X2FjdGlvbl9oYW5kbGVyIHQgYWN0aW9uIGYgPVxuICBsZXQgY2FsbGJhY2sgPSBKdi5jYWxsYmFjayB+YXJpdHk6MSBmIGluXG4gIEp2LmNhbGwgdCBcInNldEFjdGlvbkhhbmRsZXJcIiBbfCBKdi5vZl9qc3RyIGFjdGlvbjsgY2FsbGJhY2sgfF0gfD4gaWdub3JlXG5cbmxldCBzZXRfcG9zaXRpb25fc3RhdGUgP2R1cmF0aW9uID9wbGF5YmFja19yYXRlID9wb3NpdGlvbiB0ID1cbiAgbGV0IG1heWJlX2Zsb2F0IG5hbWUgdiA9IE9wdGlvbi5tYXAgKGZ1biB2IC0+IChuYW1lLCBKdi5vZl9mbG9hdCB2KSkgdiBpblxuICBsZXQgZHVyYXRpb24gPSBtYXliZV9mbG9hdCBcImR1cmF0aW9uXCIgZHVyYXRpb24gaW5cbiAgbGV0IHBsYXliYWNrX3JhdGUgPSBtYXliZV9mbG9hdCBcInBsYXliYWNrUmF0ZVwiIHBsYXliYWNrX3JhdGUgaW5cbiAgbGV0IHBvc2l0aW9uID0gbWF5YmVfZmxvYXQgXCJwb3NpdGlvblwiIHBvc2l0aW9uIGluXG4gIGxldCBhcmdzID1cbiAgICBsZXQgc3RhdGVfZGljdCA9XG4gICAgICBMaXN0LmZpbHRlcl9tYXAgRnVuLmlkIFsgZHVyYXRpb247IHBsYXliYWNrX3JhdGU7IHBvc2l0aW9uIF1cbiAgICBpblxuICAgIG1hdGNoIHN0YXRlX2RpY3Qgd2l0aCBbXSAtPiBbfHxdIHwgc2QgLT4gW3wgSnYub2JqIChBcnJheS5vZl9saXN0IHNkKSB8XVxuICBpblxuICBKdi5jYWxsIHQgXCJzZXRQb3NpdGlvblN0YXRlXCIgYXJncyB8PiBpZ25vcmVcbiIsIm1vZHVsZSBKdiA9IEp2XG5tb2R1bGUgSnN0ciA9IEpzdHJcblxubW9kdWxlIEJyciA9IHN0cnVjdFxuICBpbmNsdWRlIEJyclxuXG4gIG1vZHVsZSBFbCA9IHN0cnVjdFxuICAgIG1vZHVsZSBTID0gU3R5bGVcbiAgICBpbmNsdWRlIEVsXG4gICAgbW9kdWxlIFN0eWxlID0gU1xuICBlbmRcblxuICBtb2R1bGUgRXYgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIEV2XG5cbiAgICBtb2R1bGUgU3VibWl0ID0gc3RydWN0XG4gICAgICB0eXBlICdhIGV2ZW50ID0gJ2EgdFxuICAgICAgdHlwZSB0ID0gSnYudFxuICAgIGVuZFxuXG4gICAgbGV0IHN1Ym1pdCA9IFR5cGUudm9pZCAoSnN0ci52IFwic3VibWl0XCIpXG4gIGVuZFxuXG4gIG1vZHVsZSBBdCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgQXRcblxuICAgIG1vZHVsZSBOYW1lID0gc3RydWN0XG4gICAgICBpbmNsdWRlIE5hbWVcblxuICAgICAgbGV0IHBhdHRlcm4gPSBKc3RyLnYgXCJwYXR0ZXJuXCJcbiAgICBlbmRcblxuICAgIGxldCBkcmFnZ2FibGUgcyA9IHYgTmFtZS5kcmFnZ2FibGUgc1xuICBlbmRcbmVuZFxuXG5tb2R1bGUgQnJyX2lvID0gc3RydWN0XG4gIGluY2x1ZGUgQnJyX2lvXG4gIG1vZHVsZSBJbmRleGVkX2RiID0gSW5kZXhlZF9kYlxuXG4gIG1vZHVsZSBNZWRpYSA9IHN0cnVjdFxuICAgIGluY2x1ZGUgTWVkaWFcbiAgICBtb2R1bGUgU2Vzc2lvbiA9IE1lZGlhX3Nlc3Npb25cbiAgZW5kXG5cbiAgbW9kdWxlIFN0b3JhZ2UgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIFN0b3JhZ2VcblxuICAgIG1vZHVsZSBNYW5hZ2VyID0gc3RydWN0XG4gICAgICAoKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3RvcmFnZU1hbmFnZXIgKilcbiAgICAgIHR5cGUgdCA9IEp2LnRcblxuICAgICAgaW5jbHVkZSAoSnYuSWQgOiBKdi5DT05WIHdpdGggdHlwZSB0IDo9IHQpXG5cbiAgICAgIGxldCBwZXJzaXN0IHQgPSBKdi5jYWxsIHQgXCJwZXJzaXN0XCIgW3x8XSB8PiBGdXQub2ZfcHJvbWlzZSB+b2s6SnYudG9fYm9vbFxuICAgIGVuZFxuXG4gICAgbGV0IG1hbmFnZXIgKG4gOiBCcnIuTmF2aWdhdG9yLnQpID1cbiAgICAgIEp2LmdldCAoQnJyLk5hdmlnYXRvci50b19qdiBuKSBcInN0b3JhZ2VcIiB8PiBNYW5hZ2VyLm9mX2p2XG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBCcnJfd2Vid29ya2VycyA9IEJycl93ZWJ3b3JrZXJzXG5tb2R1bGUgQnJyX3dlYm1pZGkgPSBCcnJfd2VibWlkaVxubW9kdWxlIEJycl93ZWJncHUgPSBCcnJfd2ViZ3B1XG5tb2R1bGUgQnJyX3dlYmNyeXB0byA9IEJycl93ZWJjcnlwdG9cbm1vZHVsZSBCcnJfd2ViYXVkaW8gPSBCcnJfd2ViYXVkaW9cbm1vZHVsZSBCcnJfY2FudmFzID0gQnJyX2NhbnZhc1xubW9kdWxlIEZ1dCA9IEZ1dFxubW9kdWxlIEludGVyc2VjdGlvbl9vYnNlcnZlciA9IEludGVyc2VjdGlvbl9vYnNlcnZlclxubW9kdWxlIE11dGF0aW9uX29ic2VydmVyID0gTXV0YXRpb25fb2JzZXJ2ZXJcbm1vZHVsZSBSZXNpemVfb2JzZXJ2ZXIgPSBSZXNpemVfb2JzZXJ2ZXJcbm1vZHVsZSBEb21fcmVjdF9yZWFkX29ubHkgPSBEb21fcmVjdF9yZWFkX29ubHlcbiIsImluY2x1ZGUgQ29udGFpbmVyc0xhYmVsc1xubW9kdWxlIEJyciA9IEJycmVyLkJyclxuXG4oKiogW3RlZSBmIHhdIGFwcGxpZXMgW2ZdIHRvIFt4XSBhbmQgcmV0dXJucyBbeF0gKilcbmxldCB0ZWUgZiB4ID1cbiAgbGV0ICgpID0gZiB4IGluXG4gIHhcblxubW9kdWxlIFN0cmluZyA9IHN0cnVjdFxuICBpbmNsdWRlIFN0cmluZ1xuICBtb2R1bGUgU2V0ID0gU2V0Lk1ha2UgKFN0cmluZylcbmVuZFxuXG5tb2R1bGUgTHdkID0gc3RydWN0XG4gIGluY2x1ZGUgTHdkXG5lbmRcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJyclxuXG50eXBlICdhIG9uZV9tYXliZV9yZWFjdGl2ZSA9IFsgYFAgb2YgJ2EgfCBgUiBvZiAnYSBMd2QudCBdXG50eXBlICdhIG1heWJlX3JlYWN0aXZlID0gWyAnYSBvbmVfbWF5YmVfcmVhY3RpdmUgfCBgUyBvZiAnYSBMd2Rfc2VxLnQgTHdkLnQgXVxuXG5sZXQgaXNfcHVyZV9lbGVtZW50ID0gZnVuY3Rpb25cbiAgfCBgUCBfIC0+IHRydWVcbiAgfCBgUiB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuICB8IGBTIHggLT4gT3B0aW9uLmlzX3NvbWUgKEx3ZC5pc19wdXJlIHgpXG5cbmxldCBwdXJlIHQgPSBgUCB0XG5sZXQgcmVhY3RpdmUgdCA9IGBSIHRcbmxldCBzZXF1ZW5jZSB0ID0gYFMgdFxuXG5tb2R1bGUgVW5pdCA9IHN0cnVjdFxuICAoKiogQ29udmVyc2lvbiBiZXR3ZWVuIENTUyB1bml0cy4gVmVyeSBlYXJseSBXSVAuICopXG4gIHR5cGUgdCA9IFB4IG9mIGZsb2F0IHwgUmVtIG9mIGZsb2F0IHwgRW0gb2YgZmxvYXRcblxuICBsZXQgb2Zfc3RyaW5nIHMgPVxuICAgICgqIFRPRE86IHByb3BlciBwYXJzaW5nICopXG4gICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJweFwiIHMgd2l0aFxuICAgIHwgU29tZSBpIC0+IChcbiAgICAgICAgbWF0Y2ggSW50Lm9mX3N0cmluZyBpIHdpdGhcbiAgICAgICAgfCBTb21lIGkgLT4gU29tZSAoUHggKGZsb2F0X29mX2ludCBpKSlcbiAgICAgICAgfCBOb25lIC0+IEZsb2F0Lm9mX3N0cmluZ19vcHQgaSB8PiBPcHRpb24ubWFwIChmdW4gaSAtPiBQeCBpKSlcbiAgICB8IE5vbmUgLT4gKFxuICAgICAgICBtYXRjaCBTdHJpbmcuY2hvcF9zdWZmaXggfnN1ZjpcInJlbVwiIHMgd2l0aFxuICAgICAgICB8IFNvbWUgZiAtPiBGbG9hdC5vZl9zdHJpbmdfb3B0IGYgfD4gT3B0aW9uLm1hcCAoZnVuIGYgLT4gUmVtIGYpXG4gICAgICAgIHwgTm9uZSAtPiAoXG4gICAgICAgICAgICBtYXRjaCBTdHJpbmcuY2hvcF9zdWZmaXggfnN1ZjpcImVtXCIgcyB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZiAtPiBGbG9hdC5vZl9zdHJpbmdfb3B0IGYgfD4gT3B0aW9uLm1hcCAoZnVuIGYgLT4gUmVtIGYpXG4gICAgICAgICAgICB8IE5vbmUgLT4gTm9uZSkpXG5cbiAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBQeCBpIC0+IFByaW50Zi5zcHJpbnRmIFwiJWZweFwiIGlcbiAgICB8IFJlbSBmIC0+IFByaW50Zi5zcHJpbnRmIFwiJWZyZW1cIiBmXG4gICAgfCBFbSBmIC0+IFByaW50Zi5zcHJpbnRmIFwiJWZlbVwiIGZcblxuICBsZXQgdG9fcHggPyhwYXJlbnQgPSBHLmRvY3VtZW50IHw+IERvY3VtZW50LnJvb3QpID1cbiAgICBsZXQgZ2V0X2ZvbnRfc2l6ZV9pbl9weCBwYXJlbnQgPVxuICAgICAgbGV0IGZvbnRfc2l6ZSA9XG4gICAgICAgIEVsLmNvbXB1dGVkX3N0eWxlIChKc3RyLnYgXCJmb250LXNpemVcIikgcGFyZW50IHw+IEpzdHIudG9fc3RyaW5nXG4gICAgICBpblxuICAgICAgbWF0Y2ggb2Zfc3RyaW5nIGZvbnRfc2l6ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gMTYuXG4gICAgICB8IFNvbWUgKFB4IGkpIC0+IGlcbiAgICAgIHwgU29tZSBfIC0+IGZhaWx3aXRoIFwibm90IGltcGxlbWVudGVkXCJcbiAgICBpblxuICAgIGZ1bmN0aW9uXG4gICAgfCBQeCBpIC0+IGlcbiAgICB8IFJlbSBmIC0+XG4gICAgICAgIGxldCBmb250X3NpemUgPSBnZXRfZm9udF9zaXplX2luX3B4IChHLmRvY3VtZW50IHw+IERvY3VtZW50LnJvb3QpIGluXG4gICAgICAgIGYgKi4gZm9udF9zaXplXG4gICAgfCBFbSBmIC0+XG4gICAgICAgIGxldCBmb250X3NpemUgPSBnZXRfZm9udF9zaXplX2luX3B4IHBhcmVudCBpblxuICAgICAgICBmICouIGZvbnRfc2l6ZVxuZW5kXG5cbmxldCBsaXN0ZW4gfmYgdCA9XG4gIGxldCByb290ID0gTHdkLm9ic2VydmUgdCBpblxuICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT4gZiAoTHdkLnF1aWNrX3NhbXBsZSByb290KSk7XG4gIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB8PiBpZ25vcmVcblxubGV0IG1hcDMgfmYgYSBiIGMgPVxuICBMd2QubWFwMiBhIGIgfmY6KGZ1biBhIGIgLT4gKGEsIGIpKSB8PiBMd2QubWFwMiBjIH5mOihmdW4gYyAoYSwgYikgLT4gZiBhIGIgYylcblxubGV0IHRyaXBsZSBhIGIgYyA9IG1hcDMgYSBiIGMgfmY6KGZ1biBhIGIgYyAtPiAoYSwgYiwgYykpXG5cbm1vZHVsZSBGb3J3YXJkX3JlZiA6IHNpZ1xuICB0eXBlICdhIHRcblxuICBleGNlcHRpb24gTm90X3NldFxuICBleGNlcHRpb24gQWxyZWFkeV9zZXRcblxuICB2YWwgbWFrZSA6IHVuaXQgLT4gJ2EgdFxuICB2YWwgc2V0X2V4biA6ICdhIHQgLT4gJ2EgLT4gdW5pdFxuICB2YWwgZ2V0X2V4biA6ICdhIHQgLT4gJ2FcbmVuZCA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBvcHRpb24gcmVmXG5cbiAgZXhjZXB0aW9uIE5vdF9zZXRcbiAgZXhjZXB0aW9uIEFscmVhZHlfc2V0XG5cbiAgbGV0IG1ha2UgKCkgPSByZWYgTm9uZVxuXG4gIGxldCBzZXRfZXhuIHQgdiA9XG4gICAgbWF0Y2ggIXQgd2l0aCBOb25lIC0+IHQgOj0gU29tZSB2IHwgU29tZSBfIC0+IHJhaXNlIEFscmVhZHlfc2V0XG5cbiAgbGV0IGdldF9leG4gdCA9IG1hdGNoICF0IHdpdGggTm9uZSAtPiByYWlzZSBOb3Rfc2V0IHwgU29tZSB2IC0+IHZcbmVuZFxuIiwibW9kdWxlIHR5cGUgQ29uZmlnID0gc2lnXG4gIHR5cGUgbGFuZ1xuXG4gICgqIHZhbCBkZWZhdWx0IDogbGFuZyAqKVxuICB2YWwgYWN0aXZlIDogbGFuZyBMd2QudmFyXG4gIHZhbCBnZXQgOiBsYW5nIC0+IHN0cmluZyAtPiBzdHJpbmdcbmVuZFxuXG5sZXQgbWFrZSAodHlwZSBhKSAobW9kdWxlIEMgOiBDb25maWcgd2l0aCB0eXBlIGxhbmcgPSBhKSA9XG4gIGxldCBnZXQgc3RyaW5nID1cbiAgICBMd2QubWFwIChMd2QuZ2V0IEMuYWN0aXZlKSB+ZjooZnVuIGxhbmcgLT4gSnN0ci52IEBAIEMuZ2V0IGxhbmcgc3RyaW5nKVxuICBpblxuICBsZXQgc2V0IChsYW5nIDogYSkgPSBMd2Quc2V0IEMuYWN0aXZlIGxhbmcgaW5cbiAgKHNldCwgZ2V0KVxuIiwib3BlbiBJbXBvcnRcblxubGV0IHRvX2pzdHIgdCA9IEp2LnJlcHIgdCB8PiBCcnIuSnNvbi5lbmNvZGVcbmxldCB0b19qdiB0ID0gdG9fanN0ciB0IHw+IEp2Lm9mX2pzdHJcblxubGV0IG9mX2pzdHIganN0ciA9XG4gIG1hdGNoIEJyci5Kc29uLmRlY29kZSBqc3RyIHdpdGhcbiAgfCBPayB2IC0+IE9rIChPYmoubWFnaWMgdilcbiAgfCBFcnJvciBlcnIgLT5cbiAgICAgIEJyci5Db25zb2xlLmVycm9yIFsgZXJyIF07XG4gICAgICBFcnJvciAoYE1zZyBcIkZhaWxlZCB0byB1bm1hcnNoYWwgZGF0YVwiKVxuXG5sZXQgb2ZfanYganYgPSBKdi50b19qc3RyIGp2IHw+IG9mX2pzdHJcbiIsIm9wZW4gSW1wb3J0XG5tb2R1bGUgQjY0ID0gQmFzZTY0XG5vcGVuISBCcnJcbm1vZHVsZSBTdG9yYWdlID0gQnJyX2lvLlN0b3JhZ2VcblxubGV0IGtleXMgPSBIYXNodGJsLmNyZWF0ZSA2NFxuXG5sZXQgY2hlY2tfa2V5IGtleSA9XG4gIGlmIEhhc2h0YmwubWVtIGtleXMga2V5IHRoZW5cbiAgICBmYWlsd2l0aCBAQCBQcmludGYuc3ByaW50ZiBcIk11bHRpcGxlIHBlcnNpdGVudCB2YXIgYXJlIHVzaW5nIHRoZSBrZXkgJXNcIiBrZXlcbiAgZWxzZSBIYXNodGJsLmFkZCBrZXlzIGtleSAoKVxuXG5sZXQgbG9jYWxfc3RvcmFnZSA9IFN0b3JhZ2UubG9jYWwgRy53aW5kb3dcblxubGV0IHN0b3JlIH5rZXkgdmFsdWUgPVxuICBFbmNvZGluZ3MudG9fanN0ciB2YWx1ZSB8PiBTdG9yYWdlLnNldF9pdGVtIGxvY2FsX3N0b3JhZ2Uga2V5XG5cbmxldCBmZXRjaCB+a2V5ID1cbiAgbGV0IG9wZW4gUmVzdWx0LkluZml4IGluXG4gIGxldCogZW5jb2RlZF92YWx1ZSA9XG4gICAgbWF0Y2ggU3RvcmFnZS5nZXRfaXRlbSBsb2NhbF9zdG9yYWdlIGtleSB3aXRoXG4gICAgfCBOb25lIC0+IEVycm9yIGBOb3RfZm91bmRcbiAgICB8IFNvbWUgdiAtPiBPayB2XG4gIGluXG4gIEVuY29kaW5ncy5vZl9qc3RyIGVuY29kZWRfdmFsdWVcblxubGV0IGluaXRpYWxfdmFsdWUgfmtleSBmID1cbiAgbWF0Y2ggZmV0Y2ggfmtleSB3aXRoXG4gIHwgRXJyb3IgYE5vdF9mb3VuZCAtPiBmICgpXG4gIHwgRXJyb3IgKGBNc2cgbXNnKSAtPlxuICAgICAgQ29uc29sZS53YXJuIFsgbXNnIF07XG4gICAgICBmICgpXG4gIHwgT2sgdiAtPiB2XG5cbmxldCBpbml0aWFsX3ZhbHVlX2Z1dCB+a2V5IGYgPVxuICBtYXRjaCBmZXRjaCB+a2V5IHdpdGhcbiAgfCBFcnJvciBgTm90X2ZvdW5kIC0+IGYgKClcbiAgfCBFcnJvciAoYE1zZyBtc2cpIC0+XG4gICAgICBDb25zb2xlLndhcm4gWyBtc2cgXTtcbiAgICAgIGYgKClcbiAgfCBPayB2IC0+IEZ1dC5vayBAQCB2XG5cbmxldCBtYWtlX3BlcnNpc3RlbnRfdmFyIH5rZXkgdmFsdWUgPVxuICBpZ25vcmUgQEAgc3RvcmUgfmtleSB2YWx1ZTtcbiAgbGV0IHZhciA9IEx3ZC52YXIgdmFsdWUgaW5cbiAgbGV0IHJvb3QgPSBMd2Qub2JzZXJ2ZSAoTHdkLmdldCB2YXIpIGluXG4gIEx3ZC5zZXRfb25faW52YWxpZGF0ZSByb290IChmdW4gXyAtPlxuICAgICAgbGV0IG5ld192YWx1ZSA9IEx3ZC5xdWlja19zYW1wbGUgcm9vdCBpblxuICAgICAgaWdub3JlIEBAIHN0b3JlIH5rZXkgbmV3X3ZhbHVlKTtcbiAgbGV0IF8gPSBMd2QucXVpY2tfc2FtcGxlIHJvb3QgaW5cbiAgdmFyXG5cbmxldCB2YXJfZiB+a2V5IGYgPVxuICBsZXQgKCkgPSBjaGVja19rZXkga2V5IGluXG4gIGxldCBrZXkgPSBKc3RyLnYga2V5IGluXG4gIGxldCB2YWx1ZSA9IGluaXRpYWxfdmFsdWUgfmtleSBmIGluXG4gIG1ha2VfcGVyc2lzdGVudF92YXIgfmtleSB2YWx1ZVxuXG5sZXQgdmFyIH5rZXkgZGVmYXVsdCA9IHZhcl9mIH5rZXkgKGZ1biAoKSAtPiBkZWZhdWx0KVxuXG5sZXQgdmFyX2Z1dCAodHlwZSBhIGIpIH5rZXkgKGYgOiB1bml0IC0+IChhLCBiKSBGdXQucmVzdWx0KSA6XG4gICAgKGEgTHdkLnZhciwgYikgRnV0LnJlc3VsdCA9XG4gIGxldCAoKSA9IGNoZWNrX2tleSBrZXkgaW5cbiAgbGV0IGtleSA9IEpzdHIudiBrZXkgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyAodmFsdWUgOiBhKSA9IChpbml0aWFsX3ZhbHVlX2Z1dCB+a2V5IGYgOiAoYSwgYikgRnV0LnJlc3VsdCkgaW5cbiAgbWFrZV9wZXJzaXN0ZW50X3ZhciB+a2V5IHZhbHVlXG4iLCJvcGVuIEltcG9ydFxuXG5vcGVuIEJyclxuXG50eXBlIHNlY3Rpb24gPSAuLlxudHlwZSBhY3RpdmUgPSBBbGwgfCBPbmx5IG9mIHNlY3Rpb24gbGlzdFxudHlwZSBsZXZlbHMgPSBMb2cgfCBFcnJvciB8IEluZm8gfCBEZWJ1Z1xuXG5sZXQgbG9nZ2VyID0gZnVuY3Rpb25cbiAgfCBMb2cgLT4gQ29uc29sZS5sb2dcbiAgfCBFcnJvciAtPiBDb25zb2xlLmVycm9yXG4gIHwgSW5mbyAtPiBDb25zb2xlLmluZm9cbiAgfCBEZWJ1ZyAtPiBDb25zb2xlLmRlYnVnXG5cbnR5cGUgdCA9IHtcbiAgbG9nIDogQ29uc29sZS5sb2c7XG4gIGVycm9yIDogQ29uc29sZS5sb2c7XG4gIGluZm8gOiBDb25zb2xlLmxvZztcbiAgZGVidWcgOiBDb25zb2xlLmxvZztcbn1cblxubGV0IGZvcl9zZWN0aW9uIHMgPVxuICBsZXQgbG9nIChsIDogQ29uc29sZS5sb2cpID8oZm10ID0gXCJcIikgbXNnID1cbiAgICBsZXQgZm10ID0gUHJpbnRmLnNwcmludGYgXCJbJXNdICVzXCIgcyBmbXQgaW5cbiAgICBsIChmbXQgOjogbXNnKVxuICBpblxuICB7XG4gICAgbG9nID0gbG9nIENvbnNvbGUubG9nO1xuICAgIGVycm9yID0gbG9nIENvbnNvbGUuZXJyb3I7XG4gICAgaW5mbyA9IGxvZyBDb25zb2xlLmluZm87XG4gICAgZGVidWcgPSBsb2cgQ29uc29sZS5kZWJ1ZztcbiAgfVxuIiwib3BlbiBJbXBvcnRcblxubW9kdWxlIENsYXNzZXMgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmcuU2V0XG5cbiAgdHlwZSBub25yZWMgdCA9IHRcbiAgdHlwZSBtb2RpZmllciA9IEFkZCBvZiBzdHJpbmcgbGlzdCB8IFJlcGxhY2Ugb2Ygc3RyaW5nIGxpc3RcblxuICBsZXQgbWFrZSBsID0gb2ZfbGlzdCBsXG4gIGxldCB1cGRhdGUgdCA9IGZ1bmN0aW9uIEFkZCBsIC0+IGFkZF9saXN0IHQgbCB8IFJlcGxhY2UgbCAtPiBvZl9saXN0IGxcblxuICBsZXQgdG9fc3RyaW5nIHQgPVxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgaXRlclxuICAgICAgKGZ1biBjIC0+XG4gICAgICAgIGlmICFmaXJzdCB0aGVuIChcbiAgICAgICAgICBmaXJzdCA6PSBmYWxzZTtcbiAgICAgICAgICBQcmludGYuYnByaW50ZiBiIFwiJXNcIiBjKVxuICAgICAgICBlbHNlIFByaW50Zi5icHJpbnRmIGIgXCIgJXNcIiBjKVxuICAgICAgdDtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuXG4gIGxldCBhdF9vZl9zdHJpbmcgYyA9IEJyci5BdC5jbGFzcycgQEAgSnN0ci52IGNcblxuICBtb2R1bGUgUCA9IHN0cnVjdFxuICAgIGxldCB0b19hdCB0ID1cbiAgICAgIExpc3QubWFwICh0b19saXN0IHQpIH5mOihmdW4gYyAtPiBgUCAoQnJyLkF0LmNsYXNzJyBAQCBKc3RyLnYgYykpXG4gIGVuZFxuZW5kXG5cbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxudHlwZSB0ID0geyBjbGFzc2VzIDogQ2xhc3Nlcy50OyBhdHRycyA6IEF0LnQgRWx3ZC5jb2wgfVxuKCoqIENsYXNzZXMgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGJ1dCBhcmUgZXZlbnR1YWxseSB0cmFuc2xhdGVkIHRvIEF0LnQgKilcblxubGV0IGVtcHR5ID0geyBjbGFzc2VzID0gQ2xhc3Nlcy5lbXB0eTsgYXR0cnMgPSBbXSB9XG5cbmxldCB0b19hdCA/aWQgdCA9XG4gIGxldCBhdCA9IExpc3QucmV2X2FwcGVuZCB0LmF0dHJzIEBAIENsYXNzZXMuUC50b19hdCB0LmNsYXNzZXMgaW5cbiAgbWF0Y2ggaWQgd2l0aCBOb25lIC0+IGF0IHwgU29tZSBpZCAtPiBgUCAoQXQuaWQgKEpzdHIudiBpZCkpIDo6IGF0XG5cbmxldCBjbGFzc2VzIGwgPSB7IGVtcHR5IHdpdGggY2xhc3NlcyA9IENsYXNzZXMub2ZfbGlzdCBsIH1cblxubGV0IHVuaW9uIHsgY2xhc3NlczsgYXR0cnMgfSB7IGNsYXNzZXMgPSBjOyBhdHRycyA9IGEgfSA9XG4gIHsgY2xhc3NlcyA9IENsYXNzZXMudW5pb24gY2xhc3NlcyBjOyBhdHRycyA9IExpc3QucmV2X2FwcGVuZCBhdHRycyBhIH1cblxubW9kdWxlIEJ1aWxkZXIgPSBzdHJ1Y3RcbiAgdHlwZSBhdCA9IEMgb2Ygc3RyaW5nIHwgQXQgb2YgQXQudFxuXG4gIGxldCAoICsgKSB0ID0gZnVuY3Rpb25cbiAgICB8IEMgY2xhc3NuYW1lIC0+XG4gICAgICAgIGxldCBjbGFzc2VzID0gQ2xhc3Nlcy5hZGQgY2xhc3NuYW1lIHQuY2xhc3NlcyBpblxuICAgICAgICB7IHQgd2l0aCBjbGFzc2VzIH1cbiAgICB8IEF0IGF0IC0+XG4gICAgICAgIGxldCBhdHRycyA9IGBQIGF0IDo6IHQuYXR0cnMgaW5cbiAgICAgICAgeyB0IHdpdGggYXR0cnMgfVxuXG4gIGxldCB3aXRoX2lkIHMgdCA9XG4gICAgbGV0IGF0dHJzID0gYFAgKEF0LmlkIEBAIEpzdHIudiBzKSA6OiB0LmF0dHJzIGluXG4gICAgdG9fYXQgeyB0IHdpdGggYXR0cnMgfVxuZW5kXG5cbigqIG5ldyBBUEkgKilcblxubGV0IGFkZCBhdF9uYW1lIHYgYXQgPVxuICBsZXQgYSA9XG4gICAgbWF0Y2ggdiB3aXRoXG4gICAgfCBgUCB2IC0+IGBQIChBdC52IGF0X25hbWUgQEAgSnN0ci52IHYpXG4gICAgfCBgUiB2IC0+IGBSIChMd2QubWFwIHYgfmY6KGZ1biB2IC0+IEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikpXG4gICAgfCBgUyBfIC0+IGZhaWx3aXRoIFwiVE9ETyBub3QgaW1wbGVtZW50ZWRcIlxuICBpblxuICBhIDo6IGF0XG5cbmxldCBhZGRfYm9vbCBhdF8gdiBhdCA9IG1hdGNoIHYgd2l0aCBmYWxzZSAtPiBhdCB8IHRydWUgLT4gYFAgYXRfIDo6IGF0XG5cbmxldCBhZGRfc3RyIGF0X25hbWUgdiBhdCA9XG4gIG1hdGNoIHYgd2l0aCBcIlwiIC0+IGF0IHwgdiAtPiBgUCAoQXQudiBhdF9uYW1lIEBAIEpzdHIudiB2KSA6OiBhdFxuXG5sZXQgYWRkX29wdCBhdF9uYW1lIHYgYXQgPVxuICBtYXRjaCB2IHdpdGggTm9uZSAtPiBhdCB8IFNvbWUgdiAtPiBgUCAoQXQudiBhdF9uYW1lIEBAIEpzdHIudiB2KSA6OiBhdFxuXG50eXBlIGF0ID0gQyBvZiBzdHJpbmcgfCBBIG9mIEF0LnRcbnR5cGUgJ2F0IHQnID0gJ2F0IEVsd2QuY29sXG5cbmxldCBtYXBfY29sIGYgPSBmdW5jdGlvblxuICB8IGBQIHYgLT4gYFAgKGYgdilcbiAgfCBgUiB2IC0+IGBSIChMd2QubWFwIHYgfmYpXG4gIHwgYFMgdiAtPiBgUyAoTHdkX3NlcS5tYXAgZiB2KVxuXG5sZXQgb2ZfYXQgPSBmdW5jdGlvbiBBIGF0IC0+IGF0IHwgQyBuYW1lIC0+IEF0LmNsYXNzJyAoSnN0ci52IG5hbWUpXG5sZXQgY29ucyBhdCB0ID0gbWFwX2NvbCBvZl9hdCBhdCA6OiB0XG5sZXQgY2xhc3NfIG4gPSBjb25zIChtYXBfY29sIChmdW4gbiAtPiBDIG4pIG4pIFtdXG5cbm1vZHVsZSBPID0gc3RydWN0XG4gIHR5cGUgbm9ucmVjIGF0ID0gYXQgPSBDIG9mIHN0cmluZyB8IEEgb2YgQXQudFxuXG4gIGxldCB2IGF0ID0gY29ucyBhdCBbXVxuICBsZXQgKCBAOjogKSBhdCB0ID0gY29ucyBhdCB0XG5lbmRcblxubGV0IHdpdGhfaWQgcyB0ID1cbiAgbGV0IGF0dHJzID0gYFAgKEF0LmlkIEBAIEpzdHIudiBzKSA6OiB0LmF0dHJzIGluXG4gIHRvX2F0IHsgdCB3aXRoIGF0dHJzIH1cbiIsIm9wZW4hIEltcG9ydFxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG5sZXQgdiA/ZCA/KGF0ID0gW10pID9ldiB2YWx1ZSA9XG4gIGxldCBhdCA9XG4gICAgQXR0cnMuYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwiYnV0dG9uXCIpIGF0IHw+IEF0dHJzLmFkZCBBdC5OYW1lLnZhbHVlIHZhbHVlXG4gIGluXG4gIEVsd2QuaW5wdXQgP2QgfmF0ID9ldiAoKVxuXG50eXBlICdhIHVwZGF0ZSA9IE5vbmUgfCBOZXh0IHwgU2V0IG9mICdhXG5cbnR5cGUgJ3N0YXRlIGhhbmRsZXJfd2l0aF9zdGF0ZSA9XG4gIHwgSGFuZGxlcl93aXRoX3N0YXRlIDoge1xuICAgICAgb3B0cyA6IEV2Lmxpc3Rlbl9vcHRzIG9wdGlvbjtcbiAgICAgIHR5cGUnIDogJ2EgRXYudHlwZSc7XG4gICAgICBmdW5jIDogJ3N0YXRlIC0+ICdhIEV2LnQgLT4gJ3N0YXRlIHVwZGF0ZTtcbiAgICB9XG4gICAgICAtPiAnc3RhdGUgaGFuZGxlcl93aXRoX3N0YXRlXG5cbmxldCBoYW5kbGVyID9vcHRzIHR5cGUnIGZ1bmMgPSBIYW5kbGVyX3dpdGhfc3RhdGUgeyBvcHRzOyB0eXBlJzsgZnVuYyB9XG5cbm1vZHVsZSB0eXBlIFN0YXRlID0gc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCBkZWZhdWx0IDogdFxuICB2YWwgbmV4dCA6IHQgLT4gdFxuZW5kXG5cbmxldCBhcHBseV9zdGF0ZSBzdGF0ZSBmID0gZiBzdGF0ZVxuXG5sZXQgd2l0aF9zdGF0ZSA/KGJhc2UgPSBBdHRycy5lbXB0eSkgKHR5cGUgdCkgKG1vZHVsZSBTIDogU3RhdGUgd2l0aCB0eXBlIHQgPSB0KVxuICAgID8oc3RhdGUgPSBTLmRlZmF1bHQpID9kID8oYXQgOiAoUy50IC0+IEF0dHJzLnQpIG9wdGlvbilcbiAgICA/KGV2IDogdCBoYW5kbGVyX3dpdGhfc3RhdGUgRWx3ZC5jb2wgb3B0aW9uKVxuICAgIChjb250ZW50IDogUy50IC0+IEVsLnQgRWx3ZC5jb2wpID1cbiAgbGV0IHZfc3RhdGUgPSBMd2QudmFyIHN0YXRlIGluXG4gIGxldCBnZXRfc3RhdGUgKCkgPSBMd2QuZ2V0IHZfc3RhdGUgaW5cbiAgbGV0IHNldF9zdGF0ZSB0ID0gTHdkLnNldCB2X3N0YXRlIHQgaW5cbiAgbGV0IGVsdCA9XG4gICAgbGV0IG9wZW4gTHdkX2luZml4IGluXG4gICAgbGV0JCogc3RhdGUgPSBnZXRfc3RhdGUgKCkgaW5cbiAgICBsZXQgd2l0aF9zdGF0ZSAoSGFuZGxlcl93aXRoX3N0YXRlIHsgb3B0czsgdHlwZSc7IGZ1bmMgfSkgPVxuICAgICAgbGV0IGZ1bmMgZXYgPVxuICAgICAgICBtYXRjaCBmdW5jIHN0YXRlIGV2IHdpdGhcbiAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgIHwgU2V0IHMgLT4gc2V0X3N0YXRlIHNcbiAgICAgICAgfCBOZXh0IC0+IHNldF9zdGF0ZSBAQCBTLm5leHQgc3RhdGVcbiAgICAgIGluXG4gICAgICBFbHdkLmhhbmRsZXIgP29wdHMgdHlwZScgZnVuY1xuICAgIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6YmFzZVxuICAgICAgICAoZnVuIGF0IC0+IEF0dHJzLnVuaW9uIGJhc2UgQEAgYXBwbHlfc3RhdGUgc3RhdGUgYXQpXG4gICAgICAgIGF0XG4gICAgaW5cbiAgICBsZXQgYXQgPSBBdHRycy50b19hdCBhdCBpblxuICAgIGxldCBldiA9XG4gICAgICBPcHRpb24ubWFwXG4gICAgICAgIChMaXN0Lm1hcCB+ZjooZnVuY3Rpb25cbiAgICAgICAgICB8IGBQIGggLT4gYFAgKHdpdGhfc3RhdGUgaClcbiAgICAgICAgICB8IGBSIGggLT4gYFIgKEx3ZC5tYXAgaCB+Zjp3aXRoX3N0YXRlKVxuICAgICAgICAgIHwgYFMgaCAtPiBgUyAoTHdkX3NlcS5tYXAgd2l0aF9zdGF0ZSBoKSkpXG4gICAgICAgIGV2XG4gICAgaW5cbiAgICBFbHdkLmJ1dHRvbiA/ZCB+YXQgP2V2IChjb250ZW50IHN0YXRlKVxuICBpblxuICAoZWx0LCBnZXRfc3RhdGUsIHNldF9zdGF0ZSlcblxudHlwZSB0d29fc3RhdGUgPSBPbiB8IE9mZlxuXG5tb2R1bGUgVHdvX3N0YXRlID0gc3RydWN0XG4gIHR5cGUgdCA9IHR3b19zdGF0ZVxuXG4gIGxldCBkZWZhdWx0ID0gT25cbiAgbGV0IG5leHQgPSBmdW5jdGlvbiBPbiAtPiBPZmYgfCBPZmYgLT4gT25cbmVuZFxuXG5sZXQgdHdvX3N0YXRlID9iYXNlID0gd2l0aF9zdGF0ZSA/YmFzZSAobW9kdWxlIFR3b19zdGF0ZSlcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgdGFyZ2V0ID0gUG9zIG9mIGludCB8IEVsIG9mIEVsd2QudFxudHlwZSB0ID0geyBlbHQgOiBFbHdkLnQgTHdkLnQ7IHNjcm9sbF9wb3NpdGlvbiA6IHRhcmdldCBvcHRpb24gTHdkLnZhciB9XG5cbigqIFRPRE86IG1ha2UgYSBwcm9wZXIgYmluZGluZyAqKVxubGV0IGpzX3Njcm9sbCBlbHQgdGFyZ2V0ID1cbiAgbWF0Y2ggdGFyZ2V0IHdpdGhcbiAgfCBQb3MgeCAtPlxuICAgICAgbGV0IGVsdCA9IEVsLnRvX2p2IGVsdCBpblxuICAgICAgaWdub3JlIEBAIEp2LmNhbGwgZWx0IFwic2Nyb2xsXCIgW3wgSnYub2ZfaW50IDA7IEp2Lm9mX2ludCB4IHxdXG4gIHwgRWwgZWwgLT4gRWwuc2Nyb2xsX2ludG9fdmlldyBlbFxuXG5sZXQgbWFrZSA/KGF0ID0gW10pID8oZXYgPSBbXSkgP29uX2NyZWF0ZSB+c2Nyb2xsX3RhcmdldCBlbHQgPVxuICBsZXQgYWN0aXZlID0gTHdkLnZhciB0cnVlIGluXG4gIGxldCBhY3RpdmVfY2xhc3MgPVxuICAgIEx3ZC5tYXAgKEx3ZC5nZXQgYWN0aXZlKSB+ZjooZnVuY3Rpb25cbiAgICAgIHwgZmFsc2UgLT4gQXR0cnMuQSBBdC52b2lkXG4gICAgICB8IHRydWUgLT4gQXR0cnMuQSAoQXQuY2xhc3MnIChKc3RyLnYgXCJsb2NrZWRcIikpKVxuICBpblxuICBsZXQgYXQgPVxuICAgIEF0dHJzLk8uKFxuICAgICAgYFAgKEMgXCJsd2R1aS1jb250cm9sbGVkLXNjcm9sbC13cmFwcGVyXCIpIEA6OiBgUiBhY3RpdmVfY2xhc3MgQDo6IGF0KVxuICBpblxuICBsZXQgY29udHJvbHMgPVxuICAgIGxldCBhdCA9IEF0dHJzLmNsYXNzXyAoYFAgXCJsd2R1aS1jb250cm9sbGVkLXNjcm9sbC1jb250cm9sc1wiKSBpblxuICAgIGxldCBldiA9XG4gICAgICBsZXQgb25fY2xpY2sgXyA9IEx3ZC5zZXQgYWN0aXZlIHRydWUgaW5cbiAgICAgIGxldCBoYW5kbGVyID0gRWx3ZC5oYW5kbGVyIEV2LmNsaWNrIG9uX2NsaWNrIGluXG4gICAgICBbIGBQIGhhbmRsZXIgXVxuICAgIGluXG4gICAgRWx3ZC5kaXYgfmF0IH5ldiBbIGBSIChFbHdkLmJ1dHRvbiBbIGBQIChFbC50eHQnIFwiU2hvdyBwbGF5aW5nXCIpIF0pIF1cbiAgaW5cbiAgbGV0IG9uX3doZWVsID1cbiAgICBFbHdkLmhhbmRsZXIgRXYud2hlZWwgKGZ1biBfZXYgLT5cbiAgICAgICAgaWYgTHdkLnBlZWsgYWN0aXZlIHRoZW4gTHdkLnNldCBhY3RpdmUgZmFsc2UpXG4gIGluXG4gIGxldCBlbHQgPVxuICAgIGxldCBzdGF0ZSA9IFV0aWxzLnRyaXBsZSBlbHQgKEx3ZC5nZXQgYWN0aXZlKSBzY3JvbGxfdGFyZ2V0IGluXG4gICAgTHdkLm1hcCBzdGF0ZSB+ZjooZnVuIChlbHQsIGFjdGl2ZSwgcG9zKSAtPlxuICAgICAgICBpZiBhY3RpdmUgdGhlbiBPcHRpb24uaXRlciAoanNfc2Nyb2xsIGVsdCkgcG9zO1xuICAgICAgICBlbHQpXG4gIGluXG4gIEVsd2QuZGl2IH5hdCB+ZXY6KGBQIG9uX3doZWVsIDo6IGV2KSA/b25fY3JlYXRlIFsgYFIgZWx0OyBgUiBjb250cm9scyBdXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJlci5CcnJcbm9wZW4gQnJyX2x3ZFxubW9kdWxlIEZpZWxkID0gRmllbGRcblxudHlwZSAoJ3QsICdhKSBmb3JtX3NldHRlciA9ICd0IC0+ICdhIEZpZWxkLnZhbGlkYXRpb24gLT4gJ3RcblxudHlwZSAncmVzIGZvcm1fZmllbGQgPVxuICB8IEYgOiAnYSBGaWVsZC50ICogKCdmb3JtLCAnYSkgZm9ybV9zZXR0ZXIgLT4gJ2Zvcm0gZm9ybV9maWVsZFxuXG5tb2R1bGUgdHlwZSBGb3JtID0gc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCBkZWZhdWx0IDogdFxuICB2YWwgZmllbGRzIDogdCBmb3JtX2ZpZWxkIEx3ZC50IEx3ZF9zZXEudCBMd2QudFxuZW5kXG5cbmxldCBmaWVsZCBmaWVsZCBzZXR0ZXIgPSBMd2QubWFwIGZpZWxkIH5mOihmdW4gZmllbGQgLT4gRiAoZmllbGQsIHNldHRlcikpXG5cbmxldCBjcmVhdGUgP2QgP2F0ID9ldiAodHlwZSB0KSAobW9kdWxlIEZvcm0gOiBGb3JtIHdpdGggdHlwZSB0ID0gdCkgb25fc3VibWl0IDpcbiAgICBFbHdkLnQgTHdkLnQgPVxuICBsZXQgZmllbGRzID1cbiAgICBMd2Rfc2VxLmxpZnQgRm9ybS5maWVsZHNcbiAgICB8PiBMd2Rfc2VxLmZvbGRfbW9ub2lkXG4gICAgICAgICAoZnVuIChGIChmaWVsZCwgbWFwcGVyKSkgLT5cbiAgICAgICAgICAgKCBMd2Rfc2VxLmVsZW1lbnQgZmllbGQuZWx0LFxuICAgICAgICAgICAgIGxldCB2YWx1ZSAoKSA9XG4gICAgICAgICAgICAgICBtYXRjaCBMd2QucGVlayBmaWVsZC52YWx1ZSB3aXRoXG4gICAgICAgICAgICAgICB8IE5vbmUgLT4gRmllbGQuRW1wdHlcbiAgICAgICAgICAgICAgIHwgU29tZSB2IC0+IGZpZWxkLnZhbGlkYXRlIHZcbiAgICAgICAgICAgICBpblxuICAgICAgICAgICAgIGZ1biB0IC0+IG1hcHBlciB0IEBAIHZhbHVlICgpICkpXG4gICAgICAgICAoIChMd2Rfc2VxLmVtcHR5LCBGdW4uaWQpLFxuICAgICAgICAgICBmdW4gKGVsdHMsIGYpIChlbHRzJywgZicpIC0+XG4gICAgICAgICAgICAgKEx3ZF9zZXEuY29uY2F0IGVsdHMgZWx0cycsIGZ1biB0IC0+IGYnIChmIHQpKSApXG4gIGluXG4gIGxldCBoYW5kbGVyID1cbiAgICBMd2QubWFwIGZpZWxkcyB+ZjooZnVuIChfLCB2YWx1ZSkgLT5cbiAgICAgICAgbGV0IG9uX3N1Ym1pdCBlID1cbiAgICAgICAgICBvbl9zdWJtaXQgQEAgdmFsdWUgRm9ybS5kZWZhdWx0O1xuICAgICAgICAgIEV2LnByZXZlbnRfZGVmYXVsdCBlXG4gICAgICAgIGluXG4gICAgICAgIEVsd2QuaGFuZGxlciBFdi5zdWJtaXQgb25fc3VibWl0KVxuICBpblxuICBsZXQgb25fc3VibWl0ID0gYFIgaGFuZGxlciBpblxuICBsZXQgZWx0cyA9IEx3ZC5tYXAgZmllbGRzIH5mOihmdW4gKGVsdHMsIF8pIC0+IGVsdHMpIGluXG4gIGxldCBldiA9IE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6WyBvbl9zdWJtaXQgXSAoTGlzdC5jb25zIG9uX3N1Ym1pdCkgZXYgaW5cbiAgRWx3ZC5mb3JtID9kID9hdCB+ZXYgWyBgUyAoTHdkX3NlcS5saWZ0IGVsdHMpIF1cbiIsIm9wZW4hIEltcG9ydFxub3BlbiEgQnJyZXJcbm9wZW4hIEJyclxub3BlbiEgQnJyX2x3ZFxuXG50eXBlICdhIHJlYWN0aXZlX2ZpZWxkID0ge1xuICBmaWVsZCA6IEVsd2QudCBMd2QudDtcbiAgbGFiZWwgOiBFbHdkLnQgTHdkLnQ7XG4gIHZhbHVlIDogJ2EgTHdkLnQ7XG59XG5cbmxldCBuYW1lIH5pZCBiYXNlX25hbWUgPVxuICBpZiBpZCB0aGVuIFByaW50Zi5zcHJpbnRmIFwiJXMtLWlkXCIgYmFzZV9uYW1lXG4gIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlc1wiIGJhc2VfbmFtZVxuXG5sZXQgbWFrZSA/KGF0ID0gW10pID8oZXYgPSBbXSkgKGRlc2MgOiBzdHJpbmcgb3B0aW9uIEZpZWxkLmRlc2MpID1cbiAgbGV0IGlkID0gbmFtZSB+aWQ6dHJ1ZSBkZXNjLm5hbWUgaW5cbiAgbGV0IG5hbWUgPSBuYW1lIH5pZDpmYWxzZSBkZXNjLm5hbWUgaW5cbiAgbGV0IHZhciA9IFBlcnNpc3RlbnQudmFyIH5rZXk6aWQgZGVzYy5kZWZhdWx0IGluXG4gIGxldCBsYWJlbCA9IEVsd2QubGFiZWwgfmF0OlsgYFAgKEF0LmZvcicgKEpzdHIudiBpZCkpIF0gZGVzYy5sYWJlbCBpblxuICBsZXQgZmllbGQgPVxuICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgIGxldCBhdCA9XG4gICAgICBsZXQgb3BlbiBBdHRycyBpblxuICAgICAgYWRkIEF0Lk5hbWUuaWQgKGBQIGlkKSBhdFxuICAgICAgfD4gYWRkIEF0Lk5hbWUubmFtZSAoYFAgbmFtZSlcbiAgICAgIHw+IGFkZCBBdC5OYW1lLnR5cGUnIChgUCBcInRleHRcIilcbiAgICBpblxuICAgIGxldCBhdCA9XG4gICAgICBtYXRjaCBMd2QucGVlayB2YXIgd2l0aFxuICAgICAgfCBTb21lIHYgLT4gYFAgKEF0LnZhbHVlIEBAIEpzdHIudiB2KSA6OiBhdFxuICAgICAgfCBOb25lIC0+IGF0XG4gICAgaW5cbiAgICBsZXQgb25fY2hhbmdlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5rZXl1cCAoZnVuIGV2IC0+XG4gICAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgICAgbGV0IHZhbHVlID0gSnYuZ2V0IHQgXCJ2YWx1ZVwiIGluXG4gICAgICAgICAgTHdkLnNldCB2YXIgKFNvbWUgKEp2LnRvX3N0cmluZyB2YWx1ZSkpKVxuICAgIGluXG4gICAgbGV0IGV2ID0gYFAgb25fY2hhbmdlIDo6IGV2IGluXG4gICAgRWx3ZC5pbnB1dCB+YXQgfmV2ICgpXG4gIGluXG4gIHsgZmllbGQ7IGxhYmVsOyB2YWx1ZSA9IEx3ZC5nZXQgdmFyIH1cbiIsIm9wZW4hIEltcG9ydFxub3BlbiEgQnJyZXJcbm9wZW4hIEJyclxub3BlbiEgQnJyX2x3ZFxuXG50eXBlICdhIHJlYWN0aXZlX2ZpZWxkID0ge1xuICBmaWVsZCA6IEVsd2QudCBMd2QudDtcbiAgbGFiZWwgOiBFbHdkLnQgTHdkLnQ7XG4gIHZhbHVlIDogJ2EgTHdkLnQ7XG59XG5cbmxldCBuYW1lIH5pZCBiYXNlX25hbWUgPVxuICBpZiBpZCB0aGVuIFByaW50Zi5zcHJpbnRmIFwiJXMtLWlkXCIgYmFzZV9uYW1lIGVsc2UgYmFzZV9uYW1lXG5cbmxldCBtYWtlID8oYXQgPSBbXSkgPyhldiA9IFtdKSAoZGVzYyA6IHN0cmluZyBGaWVsZC5kZXNjKSBvcHRpb25zID1cbiAgbGV0IGlkID0gbmFtZSB+aWQ6dHJ1ZSBkZXNjLm5hbWUgaW5cbiAgbGV0IG5hbWUgPSBuYW1lIH5pZDpmYWxzZSBkZXNjLm5hbWUgaW5cbiAgbGV0IHZhciA9IFBlcnNpc3RlbnQudmFyIH5rZXk6aWQgZGVzYy5kZWZhdWx0IGluXG4gIGxldCBsYWJlbCA9IEVsd2QubGFiZWwgfmF0OlsgYFAgKEF0LmZvcicgKEpzdHIudiBpZCkpIF0gZGVzYy5sYWJlbCBpblxuICBsZXQgZmllbGQgPVxuICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgIGxldCBhdCA9XG4gICAgICBsZXQgb3BlbiBBdHRycyBpblxuICAgICAgYWRkIEF0Lk5hbWUuaWQgKGBQIGlkKSBhdFxuICAgICAgfD4gYWRkIEF0Lk5hbWUubmFtZSAoYFAgbmFtZSlcbiAgICAgIHw+IGFkZCBBdC5OYW1lLnR5cGUnIChgUCBcInRleHRcIilcbiAgICBpblxuICAgIGxldCBvbl9jaGFuZ2UgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmNoYW5nZSAoZnVuIGV2IC0+XG4gICAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgICAgbGV0IHZhbHVlID0gSnYuZ2V0IHQgXCJ2YWx1ZVwiIGluXG4gICAgICAgICAgTHdkLnNldCB2YXIgKEp2LnRvX3N0cmluZyB2YWx1ZSkpXG4gICAgaW5cbiAgICBsZXQgZXYgPSBgUCBvbl9jaGFuZ2UgOjogZXYgaW5cbiAgICBsZXQgb3B0aW9ucyA9XG4gICAgICBMd2Rfc2VxLm1hcFxuICAgICAgICAoZnVuICh2YWx1ZSwgbmFtZSkgLT5cbiAgICAgICAgICBsZXQgb3BlbiBBdHRycy5PIGluXG4gICAgICAgICAgbGV0IGF0ID0gdiAoYFAgKEEgKEF0LnZhbHVlIEBAIEpzdHIudiB2YWx1ZSkpKSBpblxuICAgICAgICAgIGxldCBzZWxlY3RlZCA9XG4gICAgICAgICAgICBMd2QubWFwIChMd2QuZ2V0IHZhcikgfmY6KGZ1biBzZWxlY3RlZCAtPlxuICAgICAgICAgICAgICAgIEEgKEF0LmlmJyAoRXF1YWwucG9seSBzZWxlY3RlZCB2YWx1ZSkgQXQuc2VsZWN0ZWQpKVxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IGF0ID0gYFIgc2VsZWN0ZWQgQDo6IGF0IGluXG4gICAgICAgICAgRWx3ZC5vcHRpb24gfmF0IFsgYFAgKEVsLnR4dCcgbmFtZSkgXSlcbiAgICAgICAgb3B0aW9uc1xuICAgIGluXG4gICAgRWx3ZC5zZWxlY3QgfmF0IH5ldiBbIGBTIChMd2Rfc2VxLmxpZnQgb3B0aW9ucykgXVxuICBpblxuICB7IGZpZWxkOyBsYWJlbDsgdmFsdWUgPSBMd2QuZ2V0IHZhciB9XG4iLCJvcGVuISBJbXBvcnRcbm9wZW4hIEJyclxub3BlbiEgQnJyX2x3ZFxuXG50eXBlIGNoZWNrZWQgPSBib29sXG50eXBlIGxhYmVsID0gRWx3ZC50IEVsd2QuY29sXG50eXBlICd2YWx1ZSBkZXNjID0gQ2hlY2sgb2YgJ3ZhbHVlICogbGFiZWwgKiBjaGVja2VkXG4oKiBUT0RPIHwgR3JvdXAgb2YgbGFiZWwgKiAndmFsdWUgZGVzYyBsaXN0ICopXG5cbnR5cGUgJ3ZhbHVlIHQgPSB7IG5hbWUgOiBzdHJpbmc7IGRlc2MgOiAndmFsdWUgZGVzYyBMd2Rfc2VxLnQgTHdkLnQgfVxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHsgZmllbGQgOiBFbHdkLnQgTHdkLnQ7IHZhbHVlIDogJ2EgTHdkLnQgfVxuXG5sZXQgbmFtZSB+ZyB+biB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLSVpLSVpLWlkXCIgYmFzZV9uYW1lIGcgblxuICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJXMtJWktJWlcIiBiYXNlX25hbWUgZyBuXG5cbmxldCBtYWtlIHQgPVxuICBsZXQgbWFrZV9jaGVjayB+ZyB+biB2YWx1ZSBsYWJlbCBjaGVja2VkID1cbiAgICBsZXQgaWQgPSBuYW1lIH5nIH5uIH5pZDp0cnVlIHQubmFtZSBpblxuICAgIGxldCBuYW1lID0gbmFtZSB+ZyB+biB+aWQ6ZmFsc2UgdC5uYW1lIGluXG4gICAgbGV0IHJlc3VsdCBjaGVja2VkID0gaWYgY2hlY2tlZCB0aGVuIFNvbWUgdmFsdWUgZWxzZSBOb25lIGluXG4gICAgbGV0IHZhciA9IFBlcnNpc3RlbnQudmFyIH5rZXk6aWQgKHJlc3VsdCBjaGVja2VkKSBpblxuICAgIGxldCBsYmwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGxhYmVsIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIGxldCBvcGVuIEF0dHJzIGluXG4gICAgICBhZGQgQXQuTmFtZS5pZCAoYFAgaWQpIFtdXG4gICAgICB8PiBhZGQgQXQuTmFtZS5uYW1lIChgUCBuYW1lKVxuICAgICAgfD4gYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwiY2hlY2tib3hcIilcbiAgICBpblxuICAgIGxldCBjaGVja2VkID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgdmFyKSB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBTb21lIF8gLT4gQXQuY2hlY2tlZFxuICAgICAgICB8IE5vbmUgLT4gQXQudm9pZClcbiAgICBpblxuICAgIGxldCBhdCA9IGBSIGNoZWNrZWQgOjogYXQgaW5cbiAgICBsZXQgb25fY2hhbmdlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5jaGFuZ2UgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCBjaGVja2VkID0gSnYuZ2V0IHQgXCJjaGVja2VkXCIgaW5cbiAgICAgICAgICBMd2Quc2V0IHZhciAocmVzdWx0IChKdi50b19ib29sIGNoZWNrZWQpKSlcbiAgICBpblxuICAgIGxldCBldiA9IFsgYFAgb25fY2hhbmdlIF0gaW5cbiAgICAoRWx3ZC4oZGl2IFsgYFIgKGlucHV0IH5hdCB+ZXYgKCkpOyBgUiBsYmwgXSksIEx3ZC5nZXQgdmFyKVxuICBpblxuICAoKiA8ZmllbGRzZXQ+PGxlZ2VuZD4gKilcbiAgKCogPGZpZWxkc2V0PjxsZWdlbmQ+ICopXG4gIGxldCBtYWtlX2FsbCB+ZyBkZXNjID1cbiAgICBsZXQgbiA9IHJlZiAwIGluXG4gICAgTHdkX3NlcS5tYXBcbiAgICAgIChmdW5jdGlvblxuICAgICAgICB8IENoZWNrICh2LCBsLCBjKSAtPlxuICAgICAgICAgICAgbGV0IGVsdCwgdmFsdWUgPSBtYWtlX2NoZWNrIH5nIH5uOiFuIHYgbCBjIGluXG4gICAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgICAoZWx0LCB2YWx1ZSkpXG4gICAgICBkZXNjXG4gIGluXG4gIGxldCBhbGwgPSBtYWtlX2FsbCB+ZzowIHQuZGVzYyBpblxuICBsZXQgZWx0cyA9IEx3ZF9zZXEubWFwIChmdW4gKGVsdCwgXykgLT4gZWx0KSBhbGwgaW5cbiAgbGV0IHZhbHVlID1cbiAgICBMd2Rfc2VxLmZvbGRfbW9ub2lkIChmdW4gKF8sIHYpIC0+IEx3ZF9zZXEuZWxlbWVudCB2KSBMd2Rfc2VxLm1vbm9pZCBhbGxcbiAgICB8PiBMd2Rfc2VxLmxpZnQgfD4gTHdkX3NlcS5maWx0ZXJfbWFwIEZ1bi5pZFxuICBpblxuICB7IGZpZWxkID0gRWx3ZC5kaXYgWyBgUyAoTHdkX3NlcS5saWZ0IGVsdHMpIF07IHZhbHVlIH1cblxuKCogbGV0IHJlYyBtYWtlX2FsbCB+ZyB+biAoYWNjX2VsdCwgYWNjX3ZhbHVlKSBkZXNjID1cbiAgICAgbWF0Y2ggZGVzYyB3aXRoXG4gICAgIHwgQ2hlY2sgKHYsIGwsIGMpIDo6IHRsIC0+XG4gICAgICAgICBsZXQgZWx0LCB2YWx1ZSA9IG1ha2VfY2hlY2sgfmcgfm4gdiBsIGMgaW5cbiAgICAgICAgIGxldCBhY2NfZWx0ID0gTHdkX3NlcS5jb25jYXQgYWNjX2VsdCBAQCBMd2Rfc2VxLmVsZW1lbnQgZWx0IGluXG4gICAgICAgICBsZXQgYWNjX3ZhbHVlID1cbiAgICAgICAgICAgTHdkLm1hcDIgYWNjX3ZhbHVlIHZhbHVlIH5mOihmdW4gYWNjIC0+IGZ1bmN0aW9uXG4gICAgICAgICAgICAgfCBOb25lIC0+IGFjYyB8IFNvbWUgdiAtPiB2IDo6IGFjYylcbiAgICAgICAgIGluXG4gICAgICAgICBtYWtlX2FsbCB+ZyB+bjoobiArIDEpIChhY2NfZWx0LCBhY2NfdmFsdWUpIHRsXG4gICAgIHwgXyAtPiAoTHdkLnB1cmUgYWNjX2VsdCwgYWNjX3ZhbHVlKVxuICAgaW5cbiAgIGxldCBlbHRzLCB2YWx1ZSA9IG1ha2VfYWxsIH5nOjAgfm46MCAoTHdkX3NlcS5lbXB0eSwgTHdkLnB1cmUgW10pIHQuZGVzYyBpblxuICAgeyBmaWVsZCA9IEVsd2QuZGl2IFsgYFMgKEx3ZF9zZXEubGlmdCBlbHRzKSBdOyB2YWx1ZSB9ICopXG4iLCIoKiBUaGUgaW1wbGVtZW50YXRpb24gaXMgaW5zcGlyZWQgYnkgU2lldmU6XG4gICAtIGh0dHBzOi8vY2FjaGVtb24uZ2l0aHViLmlvL1NJRVZFLXdlYnNpdGUvXG4gICAtIGh0dHBzOi8vanVuY2hlbmd5YW5nLmNvbS9wdWJsaWNhdGlvbi9uc2RpMjQtU0lFVkUucGRmXG5cbiAgIFNpZXZlIHVzZXMgYSBkb3VibHktbGlua2VkIGxpc3QgYW5kIGEgXCJoYWQgcG9pbnRlclwiLlxuICAgV2UgdXNlIGEgRklGTyBhbmQgcmVwbGFjZSB0aGUgaGFuZCBieSBhbm90aGVyIEZJRk8uXG5cbiAgIFRoZSBpZGVhIHdhcyBzdWdnZXN0ZWQgYnkgQGFydC13ICopXG5cbigqIEEgW1JBX3F1ZXVlXSBwYWlycyBhIFtRdWV1ZS50XSB3aXRoIGEgW0hhc2h0YmwudF0gdG8gZW5hYmxlIGVmZmljaWVudCByYW5kb21cbiAgIGFjY2VzcyB0byBlbGVtZW50cyBvZiB0aGUgcXVldWUuICopXG5tb2R1bGUgUkFfcXVldWUgKEtleSA6IE1hcC5PcmRlcmVkVHlwZSkgPSBzdHJ1Y3RcbiAgbW9kdWxlIFF1ZXVlID0gQ0NGUXVldWVcbiAgbW9kdWxlIE1hcCA9IE1hcC5NYWtlIChLZXkpXG5cbiAgdHlwZSAndiB0ID0geyBxdWV1ZSA6IEtleS50IFF1ZXVlLnQ7IGVsdHMgOiAndiBNYXAudCB9XG5cbiAgbGV0IHNpemUgdCA9IFF1ZXVlLnNpemUgdC5xdWV1ZVxuICBsZXQgY3JlYXRlICgpID0geyBxdWV1ZSA9IFF1ZXVlLmVtcHR5OyBlbHRzID0gTWFwLmVtcHR5IH1cbiAgbGV0IGVtcHR5ID0geyBxdWV1ZSA9IFF1ZXVlLmVtcHR5OyBlbHRzID0gTWFwLmVtcHR5IH1cbiAgbGV0IGFkZCB0IGsgeCA9IHsgcXVldWUgPSBRdWV1ZS5jb25zIGsgdC5xdWV1ZTsgZWx0cyA9IE1hcC5hZGQgayB4IHQuZWx0cyB9XG5cbiAgbGV0IHRha2Vfb3B0IHQgPVxuICAgIG1hdGNoIFF1ZXVlLnRha2VfYmFjayB0LnF1ZXVlIHdpdGhcbiAgICB8IE5vbmUgLT4gKHQsIE5vbmUpXG4gICAgfCBTb21lIChxdWV1ZSwgaykgLT5cbiAgICAgICAgbGV0IHggPSBNYXAuZmluZCBrIHQuZWx0cyBpblxuICAgICAgICAoeyBxdWV1ZTsgZWx0cyA9IE1hcC5yZW1vdmUgayB0LmVsdHMgfSwgU29tZSAoaywgeCkpXG5cbiAgbGV0IGZpbmQgdCBrID0gTWFwLmZpbmRfb3B0IGsgdC5lbHRzXG5lbmRcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICB0eXBlIGtleVxuICAoKiogVGhlIHR5cGUgb2YgdGhlIGNhY2hlIGtleXMuICopXG5cbiAgdHlwZSArISdhIHRcbiAgKCoqIFRoZSB0eXBlIG9mIGNhY2hlcyBmcm9tIHR5cGUgW2tleV0gdG8gdHlwZSBbJ2FdLiAqKVxuXG4gIHZhbCBjcmVhdGUgOiBzaXplOmludCAtPiAnYSB0XG4gICgqKiBDcmVhdGVzIGFuIGVtcHR5IGNhY2hlLiAqKVxuXG4gIHZhbCBpbnNlcnQgOlxuICAgICdhIHQgLT5cbiAgICA/b25faW5zZXJ0OignYSAtPiB1bml0KSAtPlxuICAgID9vbl9ldmljdDooJ2EgLT4gdW5pdCkgLT5cbiAgICBrZXkgLT5cbiAgICAnYSAtPlxuICAgICdhIHQgKiBib29sXG5lbmRcblxubW9kdWxlIE1ha2UgKEtleSA6IE1hcC5PcmRlcmVkVHlwZSkgOiBTIHdpdGggdHlwZSBrZXkgPSBLZXkudCA9IHN0cnVjdFxuICBtb2R1bGUgUkFfcXVldWUgPSBSQV9xdWV1ZSAoS2V5KVxuXG4gIHR5cGUga2V5ID0gS2V5LnRcbiAgdHlwZSAnYSBlbHQgPSB7IGVsdCA6ICdhOyB2aXNpdGVkIDogYm9vbCByZWYgfVxuICB0eXBlICdhIHQgPSB7IHExIDogJ2EgZWx0IFJBX3F1ZXVlLnQ7IHEyIDogJ2EgZWx0IFJBX3F1ZXVlLnQ7IHNpemUgOiBpbnQgfVxuXG4gIGxldCBjcmVhdGUgfnNpemUgPVxuICAgIGxldCBxMSA9IFJBX3F1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGxldCBxMiA9IFJBX3F1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIHsgcTE7IHEyOyBzaXplIH1cblxuICAoKiogW2V2aWN0X29uZSB0XSBmaXJzdCB0cmllcyB0byBldmljdCB0aGUgbGFzdCBlbGVtZW50IG9mIFt0LnEyXS5cbiAgICBJZiB0aGF0IGxhc3QgZWxlbWVudCBoYXMgYmVlbiB2aXNpdGVkLCBpdCBpcyBtb3ZlZCB0byB0aGUgaGVhZCBvZiBbdC5xMV0uXG4gICAgTG9vcCB1bnRpbCBhbiBlbGVtZW50IGlzIGV2aWN0ZWQgb3IgW3QucTJdIGlzIGVtcHR5LlxuICAgIElmIFt0LnEyXSBpcyBlbXB0eSB3ZSBwZXJmb3JtIHRoZSBzYW1lIHByb2Nlc3MgYnkgaW52ZXJzaW5nIHRoZSByb2xlcyBvZlxuICAgIFt0LnEyXSBhbmQgW3QucTFdLlxuXG4gICAgLyFcXCBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9vcCBpZiBib3RoIHF1ZXVlcyBhcmUgZW1wdHkuICopXG4gIGxldCByZWMgZXZpY3Rfb25lIH5vbl9ldmljdCB0ID0gZXZpY3RfcTIgfm9uX2V2aWN0IHRcblxuICBhbmQgZXZpY3RfcTIgfm9uX2V2aWN0IHQgPVxuICAgIG1hdGNoIFJBX3F1ZXVlLnRha2Vfb3B0IHQucTIgd2l0aFxuICAgIHwgcTIsIFNvbWUgKGssIHsgZWx0OyB2aXNpdGVkIH0pIHdoZW4gIXZpc2l0ZWQgLT5cbiAgICAgICAgbGV0IHExID0gUkFfcXVldWUuYWRkIHQucTEgayB7IGVsdDsgdmlzaXRlZCA9IHJlZiBmYWxzZSB9IGluXG4gICAgICAgIGV2aWN0X3EyIH5vbl9ldmljdCB7IHQgd2l0aCBxMTsgcTIgfVxuICAgIHwgcTIsIFNvbWUgKF9rLCB7IGVsdDsgXyB9KSAtPlxuICAgICAgICBvbl9ldmljdCBlbHQ7XG4gICAgICAgIHsgdCB3aXRoIHEyIH1cbiAgICB8IF8sIE5vbmUgLT4gZXZpY3RfcTEgfm9uX2V2aWN0IHRcblxuICBhbmQgZXZpY3RfcTEgfm9uX2V2aWN0IHQgPVxuICAgIG1hdGNoIFJBX3F1ZXVlLnRha2Vfb3B0IHQucTEgd2l0aFxuICAgIHwgcTEsIFNvbWUgKGssIHsgZWx0OyB2aXNpdGVkIH0pIHdoZW4gIXZpc2l0ZWQgLT5cbiAgICAgICAgbGV0IHEyID0gUkFfcXVldWUuYWRkIHQucTIgayB7IGVsdDsgdmlzaXRlZCA9IHJlZiBmYWxzZSB9IGluXG4gICAgICAgIGV2aWN0X3ExIH5vbl9ldmljdCB7IHQgd2l0aCBxMTsgcTIgfVxuICAgIHwgcTEsIFNvbWUgKF9rLCB7IGVsdDsgXyB9KSAtPlxuICAgICAgICBvbl9ldmljdCBlbHQ7XG4gICAgICAgIHsgdCB3aXRoIHExIH1cbiAgICB8IF8sIE5vbmUgLT4gZXZpY3RfcTIgfm9uX2V2aWN0IHRcblxuICBsZXQgcmVjIGV2aWN0IH5vbl9ldmljdCB0ID1cbiAgICBsZXQgc2l6ZSA9IFJBX3F1ZXVlLnNpemUgdC5xMSArIFJBX3F1ZXVlLnNpemUgdC5xMiBpblxuICAgIGlmIHNpemUgPiAwICYmIHNpemUgPiB0LnNpemUgdGhlbiBldmljdCB+b25fZXZpY3QgKGV2aWN0X29uZSB+b25fZXZpY3QgdClcbiAgICBlbHNlIHRcblxuICBsZXQgaW5zZXJ0IHQgPyhvbl9pbnNlcnQgPSBpZ25vcmUpID8ob25fZXZpY3QgPSBpZ25vcmUpIGsgeCA9XG4gICAgbWF0Y2ggUkFfcXVldWUuZmluZCB0LnExIGsgd2l0aFxuICAgIHwgU29tZSB7IGVsdDsgdmlzaXRlZCB9IC0+XG4gICAgICAgICgqIElmIHRoZSBlbHQgaXMgYWxyZWFkeSBpbiBxMSB3ZSBtYXJrIGl0IGFzIHZpc2l0ZWQgKilcbiAgICAgICAgdmlzaXRlZCA6PSB0cnVlO1xuICAgICAgICAodCwgZmFsc2UpXG4gICAgfCBOb25lIC0+IChcbiAgICAgICAgbWF0Y2ggUkFfcXVldWUuZmluZCB0LnEyIGsgd2l0aFxuICAgICAgICAoKiBJZiB0aGUgZWx0IGlzIGFscmVhZHkgaW4gcTIgd2UgbWFyayBpdCBhcyB2aXNpdGVkICopXG4gICAgICAgIHwgU29tZSB7IGVsdDsgdmlzaXRlZCB9IC0+XG4gICAgICAgICAgICB2aXNpdGVkIDo9IHRydWU7XG4gICAgICAgICAgICAodCwgZmFsc2UpXG4gICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgKCogSWYgdGhlIGVsdCB3YXMgbm90IHlldCBpbiB0aGUgY2FjaGUgd2UgYWRkIGl0IHRvIHExICopXG4gICAgICAgICAgICBsZXQgcTEgPSBSQV9xdWV1ZS5hZGQgdC5xMSBrIHsgZWx0ID0geDsgdmlzaXRlZCA9IHJlZiBmYWxzZSB9IGluXG4gICAgICAgICAgICBvbl9pbnNlcnQgeDtcbiAgICAgICAgICAgIChldmljdCB+b25fZXZpY3QgeyB0IHdpdGggcTEgfSwgdHJ1ZSkpXG5lbmRcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbm1vZHVsZSBDb2x1bW5zID0gc3RydWN0XG4gIHR5cGUgY29sdW1uID0geyBuYW1lIDogc3RyaW5nOyBjc3Nfc2l6ZSA6IHN0cmluZzsgY29udGVudCA6IEVsd2QudCBFbHdkLmNvbCB9XG4gIHR5cGUgdCA9IGNvbHVtbiBhcnJheVxuXG4gIGxldCB2IG5hbWUgY3NzX3NpemUgY29udGVudCA9IHsgbmFtZTsgY3NzX3NpemU7IGNvbnRlbnQgfVxuXG4gIGxldCB0b19oZWFkZXIgdCA9XG4gICAgbGV0IGNlbGxzID1cbiAgICAgIEFycmF5LmZvbGRfcmlnaHQgdCB+aW5pdDpbXSB+ZjooZnVuIHsgY29udGVudDsgXyB9IGFjYyAtPlxuICAgICAgICAgIGBSIChFbHdkLmRpdiBjb250ZW50KSA6OiBhY2MpXG4gICAgaW5cbiAgICBjZWxsc1xuXG4gIGxldCBzdHlsZSB0ID1cbiAgICBsZXQgdGVtcGxhdGUgPVxuICAgICAgQXJyYXkudG9fc3RyaW5nIH5zZXA6XCIgXCIgKGZ1biB7IGNzc19zaXplOyBfIH0gLT4gY3NzX3NpemUpIHRcbiAgICBpblxuICAgIFByaW50Zi5zcHJpbnRmIFwiJXM6ICVzO1wiIFwiZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXCIgdGVtcGxhdGVcbmVuZFxuXG50eXBlIHQgPSB7IGNvbHVtbnMgOiBDb2x1bW5zLnQgfVxudHlwZSBmaXhlZF9yb3dfaGVpZ2h0ID0geyB0YWJsZSA6IHQ7IHJvd19oZWlnaHQgOiBVdGlscy5Vbml0LnQgfVxuXG5sZXQgc3R5bGUgdCA9XG4gIGxldCBzdHlsZSA9IENvbHVtbnMuc3R5bGUgdC50YWJsZS5jb2x1bW5zIGluXG4gIFN0cmluZy5jb25jYXQgfnNlcDpcIiBcIiBbIHN0eWxlIF1cblxubGV0IGhlYWRlciB0ID1cbiAgbGV0IHJvd19oZWlnaHQgPSBVdGlscy5Vbml0LnRvX3N0cmluZyB0LnJvd19oZWlnaHQgaW5cbiAgbGV0IGF0ID1cbiAgICBbXG4gICAgICBgUCAoQXQuc3R5bGUgKEpzdHIudiBAQCBQcmludGYuc3ByaW50ZiBcImhlaWdodDogJXNcIiByb3dfaGVpZ2h0KSk7XG4gICAgICBgUCAoQXQuY2xhc3MnIChKc3RyLnYgXCJsd2R1aS1sYXp5LXRhYmxlLWhlYWRlclwiKSk7XG4gICAgICBgUCAoQXQuY2xhc3MnIChKc3RyLnYgXCJsd2R1aS12aXJ0dWFsLXRhYmxlLXJvd1wiKSk7XG4gICAgXVxuICBpblxuICBFbHdkLmRpdiB+YXQgQEAgQ29sdW1ucy50b19oZWFkZXIgdC50YWJsZS5jb2x1bW5zXG5cbmxldCBfID0gVXRpbHMuVW5pdC50b19weCAoUmVtIDQuKVxuIiwiKCoqIEEgdmlydHVhbCB0YWJsZSB0aGF0IGNhbiBoYW5kbGUgbGFyZ2UgZGF0YXNldC5cblxuICAgIFRPRE86IHRoaXMgaXMgY2xlYXJseSBvdmVyLWVuZ2luZWVyZWQ6IHRoZSBsYXJnZSBsd2QgdGFibGUgdGhhdCByZWR1Y2VzIHRvXG4gICAgcm93cyBhbmQgcGxhY2Vob2xkZXJzIHdpdGggYSBtb25vaWQgaXMgZWxlZ2FudCBidSBkb2VzIG5vdCBzY2FsZSB3ZWxsLiBJdFxuICAgIG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG9wdGltaXplIGl0IChlc3BlY2lhbGx5IHRoZSBcInVuaXF1ZXVlXCIgTFJVIHRoaW5neSksXG4gICAgYnV0IGhhdmluZyB0b28gbGFyZ2UgYSBsd2RfdGFibGUgaXMgcHJvYmFibHkgYSBoYXJkIGxpbWl0LiAqKVxuXG5vcGVuIEltcG9ydFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxubW9kdWxlIEZSZWYgPSBVdGlscy5Gb3J3YXJkX3JlZlxuXG5sZXQgbG9nZ2VyID0gTG9nZ2VyLmZvcl9zZWN0aW9uIFwidmlydHVhbCB0YWJsZVwiXG5cbnR5cGUgJ2Egcm93X2RhdGEgPSB7XG4gIGluZGV4IDogaW50O1xuICBjb250ZW50IDogJ2Egb3B0aW9uO1xuICByZW5kZXIgOiAoaW50IC0+ICdhIC0+IEVsd2QudCBFbHdkLmNvbCkgTHdkLnQ7XG59XG5cbnR5cGUgKCdkYXRhLCAnZXJyb3IpIGRhdGFfc291cmNlID0ge1xuICB0b3RhbF9pdGVtcyA6IGludCBMd2QudDtcbiAgZmV0Y2ggOiAoaW50IGFycmF5IC0+ICgnZGF0YSBvcHRpb24gYXJyYXksICdlcnJvcikgRnV0LnJlc3VsdCkgTHdkLnQ7XG4gIHJlbmRlciA6IChpbnQgLT4gJ2RhdGEgLT4gRWx3ZC50IEVsd2QuY29sKSBMd2QudDtcbn1cblxuKCogVGhlIHZpcnR1YWwgdGFibGUgaXMgYSBjb21wbGV4IHJlYWN0aXZlIGNvbXBvbmVudC4gUHJpbWFyaWx5LCBpdCByZWFjdHMgdG9cbiAgIGNoYW5nZXMgb2YgdGhlIFtkYXRhX3NvdXJjZV0gc28gdGhhdCBjb250ZW50IGluIHRoZSB0YWJsZSBpcyBwcm9wZXJseVxuICAgcmVmcmVzaGVkIHdoZW4gaXQgZG9lcy4gQWRkaXRpb25uYWx5IGl0IG5lZWRzIHRvIHJlYWN0IHRvIG11bHRpcGxlIGRvbVxuICAgZXZlbnRzLCBub3RhYmx5IHZlcnRpY2FsIHJlc2l6ZSBvZiB0aGUgY29udGFpbmVyIGFuZCBzY3JvbGwgZXZlbnRzLCB0byBlbnN1cmVcbiAgIHRoYXQgdGhlIHZpc2libGUgcGFydCBvZiB0aGUgdGFsYmUgaXMgYWx3YXlzIHBvcHVsYXRlZCB3aXRoIHJvd3MuICopXG5tb2R1bGUgQ2FjaGUgPSBGRkNhY2hlLk1ha2UgKEludClcblxubGV0IG1ha2UgKHR5cGUgZGF0YSkgfih1aV90YWJsZSA6IFNjaGVtYS5maXhlZF9yb3dfaGVpZ2h0KVxuICAgID8ocGxhY2Vob2xkZXIgOiBpbnQgLT4gRWx3ZC50IEVsd2QuY29sID0gZnVuIF8gLT4gW10pXG4gICAgPyhzY3JvbGxfdGFyZ2V0IDogaW50IEx3ZC50IG9wdGlvbilcbiAgICAoeyB0b3RhbF9pdGVtczsgZmV0Y2g7IHJlbmRlciB9IDogKGRhdGEsIF8pIGRhdGFfc291cmNlKSA9XG4gIGlnbm9yZSBwbGFjZWhvbGRlcjtcblxuICBsZXQgbW9kdWxlIFN0YXRlID0gc3RydWN0XG4gICAgKCogVGhlIHdyYXBwZXJfZGl2IHJlZiBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29ycmVjdCBlbGVtZW50IGFzXG4gICAgICAgc29vbiBhcyBpdCBpcyBjcmVhdGVkLiBJdCBpcyBub3QgcmVhY3RpdmUgcGVyIHNlLiAqKVxuICAgIGxldCBjb250ZW50X2RpdiA6IEVsLnQgVXRpbHMuRm9yd2FyZF9yZWYudCA9IFV0aWxzLkZvcndhcmRfcmVmLm1ha2UgKClcblxuICAgICgqIFRoZSB3cmFwcGVyX2RpdiByZWYgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIGNvcnJlY3QgZWxlbWVudCBhc1xuICAgICAgIHNvb24gYXMgaXQgaXMgY3JlYXRlZC4gSXQgaXMgbm90IHJlYWN0aXZlIHBlciBzZS4gKilcbiAgICBsZXQgd3JhcHBlcl9kaXYgOiBFbC50IFV0aWxzLkZvcndhcmRfcmVmLnQgPSBVdGlscy5Gb3J3YXJkX3JlZi5tYWtlICgpXG5cbiAgICAoKiBUaGUgaGVpZ2h0IG9mIHRoZSB3aW5kb3cgaXMgYSByZWFjdGl2ZSB2YWx1ZSB0aGF0IG1pZ2h0IGNoYW5nZSBkdXJpbmdcbiAgICAgICBleGVjdXRpb24gd2hlbiB0aGUgYnJvd3NlciBpcyByZXNpemVkIG9yIG90aGVyIGxheW91dCBjaGFuZ2VzIGFyZSBtYWRlLiAqKVxuICAgIGxldCB3aW5kb3dfaGVpZ2h0IDogaW50IG9wdGlvbiBMd2QudmFyID0gTHdkLnZhciBOb25lXG4gIGVuZCBpblxuICBsZXQgcm93X3NpemUgPSB1aV90YWJsZS5yb3dfaGVpZ2h0IHw+IFV0aWxzLlVuaXQudG9fc3RyaW5nIGluXG4gIGxldCBoZWlnaHRfbiBuID0gUHJpbnRmLnNwcmludGYgXCJoZWlnaHQ6IGNhbGMoJXMgKiAlaSk7XCIgcm93X3NpemUgbiBpblxuICBsZXQgaGVpZ2h0ID0gUHJpbnRmLnNwcmludGYgXCJoZWlnaHQ6ICVzICFpbXBvcnRhbnQ7XCIgcm93X3NpemUgaW5cbiAgbGV0IHRhYmxlIDogZGF0YSByb3dfZGF0YSBMd2RfdGFibGUudCA9IEx3ZF90YWJsZS5tYWtlICgpIGluXG4gICgqIFRoZSBbcm93X2luZGV4XSB0YWJsZSBpcyB1c2VkIHRvIHByb3ZpZGUgZmFzdCByYW5kb20gYWNjZXNzIHRvIHRoZSB0YWJsZSdzXG4gICAgIHJvd3MgaW4gdGhlIG9ic2VydmVyJ3MgY2FsbGJhY2sgKilcbiAgbGV0IHJvd19pbmRleCA6IChpbnQsIGRhdGEgcm93X2RhdGEgTHdkX3RhYmxlLnJvdykgSGFzaHRibC50ID1cbiAgICBIYXNodGJsLmNyZWF0ZSAyMDQ4XG4gIGluXG4gIGxldCB1bmxvYWQgaSA9XG4gICAgbGV0IG9wZW4gT3B0aW9uLkluZml4IGluXG4gICAgKGxldCogcm93ID0gSGFzaHRibC5nZXQgcm93X2luZGV4IGkgaW5cbiAgICAgbGV0KyByb3dfZGF0YSA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgIEx3ZF90YWJsZS5zZXQgcm93IHsgcm93X2RhdGEgd2l0aCBjb250ZW50ID0gTm9uZSB9KVxuICAgIHw+IGlnbm9yZVxuICBpblxuICBsZXQgbmV3X2NhY2hlICgpID0gQ2FjaGUuY3JlYXRlIH5zaXplOjUwIGluXG4gICgqIFRoZSBjYWNoZSBpcyBzb21lIHNvcnQgb2YgTFJVIHRvIGtlZXAgbGl2ZSB0aGUgY29udGVudCBvZiByZWNlbnRseSBzZWVuXG4gICAgIHJvd3MgKilcbiAgbGV0IGNhY2hlX3JlZiA9IHJlZiAobmV3X2NhY2hlICgpKSBpblxuICBsZXQgYWRkIH5mZXRjaCA/KG1heF9pdGVtcyA9IDIwMCkgaW5kZXhlcyA9XG4gICAgbGV0IGNhY2hlID0gIWNhY2hlX3JlZiBpblxuICAgIGxldCBsb2FkIGluZGV4ZXMgPVxuICAgICAgKGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgbGV0KyAoZGF0YSA6IGRhdGEgb3B0aW9uIGFycmF5KSA9IGZldGNoIGluZGV4ZXMgaW5cbiAgICAgICBBcnJheS5pdGVyMiBpbmRleGVzIGRhdGEgfmY6KGZ1biBpIGRhdGEgLT5cbiAgICAgICAgICAgKGxldCBvcGVuIE9wdGlvbi5JbmZpeCBpblxuICAgICAgICAgICAgbGV0KiByb3cgPSBIYXNodGJsLmdldCByb3dfaW5kZXggaSBpblxuICAgICAgICAgICAgbGV0KyByb3dfZGF0YSA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgICAgICBsZXQgZGF0YSA9XG4gICAgICAgICAgICAgIG1hdGNoIGRhdGEgd2l0aCBTb21lIGRhdGEgLT4gZGF0YSB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgKCogdG9kbzogbGV0IHVzZXJzIHByb3ZpZGUgY29tcGFyaXNvbiAqKVxuICAgICAgICAgICAgaWYgbm90IChFcXVhbC5wb2x5IHJvd19kYXRhLmNvbnRlbnQgQEAgU29tZSBkYXRhKSB0aGVuXG4gICAgICAgICAgICAgIEx3ZF90YWJsZS5zZXQgcm93IHsgcm93X2RhdGEgd2l0aCBjb250ZW50ID0gU29tZSBkYXRhIH0pXG4gICAgICAgICAgIHw+IGlnbm9yZSkpXG4gICAgICB8PiBpZ25vcmVcbiAgICBpblxuICAgIGxldCBjYWNoZSwgdG9fbG9hZCA9XG4gICAgICBMaXN0LmZvbGRfbGVmdCB+aW5pdDooY2FjaGUsIFtdKSBpbmRleGVzIH5mOihmdW4gKGNhY2hlLCBhY2MpIGkgLT5cbiAgICAgICAgICBsZXQgY2FjaGUsIGluc2VydGVkID0gQ2FjaGUuaW5zZXJ0IH5vbl9ldmljdDp1bmxvYWQgY2FjaGUgaSBpIGluXG4gICAgICAgICAgaWYgaW5zZXJ0ZWQgdGhlbiAoY2FjaGUsIGkgOjogYWNjKSBlbHNlIChjYWNoZSwgYWNjKSlcbiAgICBpblxuICAgIGNhY2hlX3JlZiA6PSBjYWNoZTtcbiAgICBtYXRjaCBBcnJheS5vZl9saXN0IHRvX2xvYWQgd2l0aCBbfHxdIC0+ICgpIHwgdG9fbG9hZCAtPiBsb2FkIHRvX2xvYWRcbiAgaW5cbiAgbGV0IHRhYmxlX2hlaWdodCA9IEx3ZC52YXIgTm9uZSBpblxuICBsZXQgY29tcHV0ZV92aXNpYmxlX3Jvd3Mgfmxhc3Rfc2Nyb2xsX3kgPVxuICAgIGxldCBoZWlnaHQgZWx0ID1cbiAgICAgIGxldCBqdiA9IEVsLnRvX2p2IGVsdCBpblxuICAgICAgSnYuZ2V0IGp2IFwib2Zmc2V0SGVpZ2h0XCIgfD4gSnYudG9fZmxvYXRcbiAgICBpblxuICAgIGxldCBkaXYgPSBGUmVmLmdldF9leG4gU3RhdGUud3JhcHBlcl9kaXYgaW5cbiAgICBsZXQgc2Nyb2xsX3kgPSBFbC5zY3JvbGxfeSBkaXYgaW5cbiAgICBsZXQgZGlyZWN0aW9uID0gaWYgc2Nyb2xsX3kgPi4gIWxhc3Rfc2Nyb2xsX3kgdGhlbiBgRG93biBlbHNlIGBVcCBpblxuICAgIGxldCAoKSA9IGxhc3Rfc2Nyb2xsX3kgOj0gc2Nyb2xsX3kgaW5cbiAgICBsZXQgdmlzaWJsZV9oZWlnaHQgPSBoZWlnaHQgZGl2IGluXG4gICAgbGV0IHBhcmVudCA9IFV0aWxzLkZvcndhcmRfcmVmLmdldF9leG4gU3RhdGUuY29udGVudF9kaXYgaW5cbiAgICBsZXQgcm93X2hlaWdodCA9IFV0aWxzLlVuaXQudG9fcHggfnBhcmVudCB1aV90YWJsZS5yb3dfaGVpZ2h0IGluXG4gICAgbG9nZ2VyLmRlYnVnIFsgXCJWaXNpYmxlIGhlaWdodDpcIjsgdmlzaWJsZV9oZWlnaHQ7IFwiUm93IGhlaWdodFwiOyByb3dfaGVpZ2h0IF07XG4gICAgbGV0IG51bWJlcl9vZl92aXNpYmxlX3Jvd3MgPVxuICAgICAgSW50Lm9mX2Zsb2F0IChjZWlsICh2aXNpYmxlX2hlaWdodCAvLiByb3dfaGVpZ2h0KSlcbiAgICBpblxuICAgIGxldCBibGVlZGluZyA9IG51bWJlcl9vZl92aXNpYmxlX3Jvd3MgaW5cbiAgICBsZXQgc2Nyb2xsX3kgPSBzY3JvbGxfeSBpblxuICAgIGxldCBmaXJzdF92aXNpYmxlX3JvdyA9IGludF9vZl9mbG9hdCAoc2Nyb2xsX3kgLy4gcm93X2hlaWdodCkgaW5cbiAgICBsZXQgbGFzdF92aXNpYmxlX3JvdyA9IGZpcnN0X3Zpc2libGVfcm93ICsgbnVtYmVyX29mX3Zpc2libGVfcm93cyBpblxuICAgIGxldCBmaXJzdCA9XG4gICAgICBsZXQgYmxlZWRpbmcgPVxuICAgICAgICBtYXRjaCBkaXJlY3Rpb24gd2l0aCBgVXAgLT4gYmxlZWRpbmcgfCBfIC0+IGJsZWVkaW5nIC8gMlxuICAgICAgaW5cbiAgICAgIGZpcnN0X3Zpc2libGVfcm93IC0gYmxlZWRpbmcgfD4gbWF4IDBcbiAgICBpblxuICAgIGxldCBsYXN0ID1cbiAgICAgIGxldCBibGVlZGluZyA9XG4gICAgICAgIG1hdGNoIGRpcmVjdGlvbiB3aXRoIGBEb3duIC0+IGJsZWVkaW5nIHwgXyAtPiBibGVlZGluZyAvIDJcbiAgICAgIGluXG4gICAgICBsYXN0X3Zpc2libGVfcm93ICsgYmxlZWRpbmdcbiAgICBpblxuICAgIExpc3QuaW5pdCAobGFzdCAtIGZpcnN0KSB+ZjooZnVuIGkgLT4gZmlyc3QgKyBpKVxuICBpblxuICBsZXQgcHJlcGFyZSB+dG90YWxfaXRlbXM6dG90YWwgfnJlbmRlciA9XG4gICAgbGV0ICgpID0gY2FjaGVfcmVmIDo9IG5ld19jYWNoZSAoKSBpblxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgY3VycmVudF9yb3cgPSByZWYgKEx3ZF90YWJsZS5maXJzdCB0YWJsZSkgaW5cbiAgICB3aGlsZSBPcHRpb24uaXNfc29tZSAhY3VycmVudF9yb3cgfHwgIWkgPD0gdG90YWwgLSAxIGRvXG4gICAgICBtYXRjaCAhY3VycmVudF9yb3cgd2l0aFxuICAgICAgfCBTb21lIHJvdyAtPlxuICAgICAgICAgIGlmICFpIDw9IHRvdGFsIC0gMSB0aGVuXG4gICAgICAgICAgICBsZXQgKCkgPSBIYXNodGJsLnJlcGxhY2Ugcm93X2luZGV4ICFpIHJvdyBpblxuICAgICAgICAgICAgTHdkX3RhYmxlLnNldCByb3cgeyBpbmRleCA9ICFpOyBjb250ZW50ID0gTm9uZTsgcmVuZGVyIH1cbiAgICAgICAgICBlbHNlIEx3ZF90YWJsZS51bnNldCByb3c7XG4gICAgICAgICAgaW5jciBpO1xuICAgICAgICAgIGN1cnJlbnRfcm93IDo9IEx3ZF90YWJsZS5uZXh0IHJvd1xuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgaWYgIWkgPD0gdG90YWwgLSAxIHRoZW4gKFxuICAgICAgICAgICAgbGV0IHNldCA9IHsgaW5kZXggPSAhaTsgY29udGVudCA9IE5vbmU7IHJlbmRlciB9IGluXG4gICAgICAgICAgICBsZXQgcm93ID0gTHdkX3RhYmxlLmFwcGVuZCB+c2V0IHRhYmxlIGluXG4gICAgICAgICAgICBIYXNodGJsLmFkZCByb3dfaW5kZXggIWkgcm93O1xuICAgICAgICAgICAgaW5jciBpO1xuICAgICAgICAgICAgY3VycmVudF9yb3cgOj0gTHdkX3RhYmxlLm5leHQgcm93KVxuICAgIGRvbmVcbiAgaW5cbiAgbGV0IHBvcHVsYXRlX29uX3Njcm9sbCA9XG4gICAgbGV0IGxhc3Rfc2Nyb2xsX3kgPSByZWYgMC4gaW5cbiAgICBsZXQgdXBkYXRlID1cbiAgICAgIEx3ZC5tYXAgZmV0Y2ggfmY6KGZ1biBmZXRjaCAoKSAtPlxuICAgICAgICAgIGxldCB2aXNpYmxlX3Jvd3MgPSBjb21wdXRlX3Zpc2libGVfcm93cyB+bGFzdF9zY3JvbGxfeSBpblxuICAgICAgICAgICgqIHRvZG86IFdlIGRvIHdheSB0b28gbXVjaCB3b3JrIGFuZCByZWJ1aWxkIHRoZSBxdWV1ZSBlYWNoXG4gICAgICAgICAgICAgdGltZS4uLiBpdCdzIHZlcnkgaW5lZmljaWVudCAqKVxuICAgICAgICAgIGFkZCB+ZmV0Y2ggfm1heF9pdGVtczooNCAqIExpc3QubGVuZ3RoIHZpc2libGVfcm93cykgdmlzaWJsZV9yb3dzKVxuICAgIGluXG4gICAgTHdkLm1hcDIgdG90YWxfaXRlbXMgdXBkYXRlIH5mOihmdW4gdG90YWxfaXRlbXMgdXBkYXRlIC0+XG4gICAgICAgIHByZXBhcmUgfnRvdGFsX2l0ZW1zIH5yZW5kZXI7XG4gICAgICAgIHVwZGF0ZSlcbiAgaW5cbiAgbGV0ICgpID1cbiAgICBsZXQgcmVwb3B1bGF0ZV9kZXBzID0gTHdkLnBhaXIgcG9wdWxhdGVfb25fc2Nyb2xsIChMd2QuZ2V0IHRhYmxlX2hlaWdodCkgaW5cbiAgICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIHJlcG9wdWxhdGVfZGVwcyBpblxuICAgIEx3ZC5zZXRfb25faW52YWxpZGF0ZSByb290IChmdW4gXyAtPlxuICAgICAgICBtYXRjaCBMd2QucXVpY2tfc2FtcGxlIHJvb3Qgd2l0aFxuICAgICAgICB8IHVwZGF0ZSwgU29tZSBfaCAtPiB1cGRhdGUgKClcbiAgICAgICAgfCBfIC0+ICgpKTtcbiAgICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG4gIGluXG4gIGxldCBtYWtlX3NwYWNlciBuID1cbiAgICBsZXQgYXQgPSBbIEF0LmNsYXNzJyAoSnN0ci52IFwicm93X3NwYWNlclwiKSBdIGluXG4gICAgbGV0IHN0eWxlID0gQXQuc3R5bGUgKEpzdHIudiBAQCBoZWlnaHRfbiBuKSBpblxuICAgIEVsLmRpdiB+YXQ6KHN0eWxlIDo6IGF0KSBbXVxuICBpblxuICBsZXQgcmVuZGVyIF9yb3cgeyBjb250ZW50OyBpbmRleDsgcmVuZGVyIH0gPVxuICAgIGxldCBhdCA9IEF0dHJzLmFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJsd2R1aS12aXJ0dWFsLXRhYmxlLXJvd1wiKSBbXSBpblxuICAgIGxldCBzdHlsZSA9IGBQIChBdC5zdHlsZSAoSnN0ci52IGhlaWdodCkpIGluXG4gICAgbWF0Y2ggY29udGVudCB3aXRoXG4gICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgbGV0IHJlbmRlcmVkX3JvdyA9XG4gICAgICAgICAgTHdkLm1hcCByZW5kZXIgfmY6KGZ1biByZW5kZXIgLT5cbiAgICAgICAgICAgICAgTHdkX3NlcS5vZl9saXN0XG4gICAgICAgICAgICAgICAgKExpc3QubWFwIChyZW5kZXIgaW5kZXggZGF0YSkgfmY6KGZ1biBlbHQgLT4gRWx3ZC5kaXYgWyBlbHQgXSkpKVxuICAgICAgICBpblxuICAgICAgICAoIDAsXG4gICAgICAgICAgTHdkX3NlcS5lbGVtZW50XG4gICAgICAgICAgQEAgRWx3ZC5kaXYgfmF0OihzdHlsZSA6OiBhdCkgWyBgUyAoTHdkX3NlcS5saWZ0IHJlbmRlcmVkX3JvdykgXSxcbiAgICAgICAgICAwIClcbiAgICB8IE5vbmUgLT4gKDEsIEx3ZF9zZXEuZW1wdHksIDApXG4gIGluXG4gIGxldCB0YWJsZV9ib2R5ID1cbiAgICBsZXQgcm93cyA9XG4gICAgICBMd2RfdGFibGUubWFwX3JlZHVjZSByZW5kZXJcbiAgICAgICAgKCAoMCwgTHdkX3NlcS5lbXB0eSwgMCksXG4gICAgICAgICAgZnVuIChuLCBzLCBtKSAocCwgcycsIHEpIC0+XG4gICAgICAgICAgICBtYXRjaCAoTHdkX3NlcS52aWV3IHMsIEx3ZF9zZXEudmlldyBzJykgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSwgRW1wdHkgLT5cbiAgICAgICAgICAgICAgICAoKiBTaW5jZSBzIGlzIGVtcHR5IGl0IGRvZXMgbm90IG1hdHRlciBvbiB3aGljaFxuICAgICAgICAgICAgICAgICAgIFwic2lkZVwiIG9mIGl0IHRoZSBzcGFjZXMgYXJlIGFjY3VtdWxhdGVkLiAqKVxuICAgICAgICAgICAgICAgIChuICsgbSArIHAgKyBxLCBzLCAwKVxuICAgICAgICAgICAgfCBFbXB0eSwgXyAtPiAobiArIG0gKyBwLCBzJywgcSlcbiAgICAgICAgICAgIHwgXywgRW1wdHkgLT4gKG4sIHMsIG0gKyBwICsgcSlcbiAgICAgICAgICAgIHwgXywgXyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID1cbiAgICAgICAgICAgICAgICAgIGlmIG0gKyBwID4gMCB0aGVuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGFjZXIgPSBMd2QucHVyZSBAQCBtYWtlX3NwYWNlciAobSArIHApIGluXG4gICAgICAgICAgICAgICAgICAgIEx3ZF9zZXEuKGNvbmNhdCBzIEBAIGNvbmNhdCAoZWxlbWVudCBzcGFjZXIpIHMnKVxuICAgICAgICAgICAgICAgICAgZWxzZSBMd2Rfc2VxLmNvbmNhdCBzIHMnXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAobiwgcywgcSkgKVxuICAgICAgICB0YWJsZVxuICAgIGluXG4gICAgTHdkLm1hcCByb3dzIH5mOihmdW4gKG4sIHMsIG0pIC0+XG4gICAgICAgIGxldCByZXN1bHQgPVxuICAgICAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgICAgIGxldCBmaXJzdF9zcGFjZXIgPSBMd2QucHVyZSBAQCBtYWtlX3NwYWNlciBuIGluXG4gICAgICAgICAgICBMd2Rfc2VxLihjb25jYXQgKGVsZW1lbnQgZmlyc3Rfc3BhY2VyKSBzKVxuICAgICAgICAgIGVsc2Ugc1xuICAgICAgICBpblxuICAgICAgICBpZiBtID4gMCB0aGVuXG4gICAgICAgICAgbGV0IGxhc3Rfc3BhY2VyID0gTHdkLnB1cmUgQEAgbWFrZV9zcGFjZXIgbSBpblxuICAgICAgICAgIEx3ZF9zZXEuKGNvbmNhdCByZXN1bHQgKGVsZW1lbnQgbGFzdF9zcGFjZXIpKVxuICAgICAgICBlbHNlIHJlc3VsdClcbiAgaW5cbiAgbGV0IHRhYmxlX2hlYWRlciA9IFNjaGVtYS5oZWFkZXIgdWlfdGFibGUgaW5cbiAgbGV0IG9ic2VydmVyID1cbiAgICAoKiBXZSBvYnNlcnZlIHRoZSBzaXplIG9mIHRoZSB0YWJsZSB0byByZS1wb3B1bGF0ZSBpZiBuZWNlc3NhcnkgKilcbiAgICBSZXNpemVfb2JzZXJ2ZXIuY3JlYXRlIH5jYWxsYmFjazooZnVuIGVudHJpZXMgXyAtPlxuICAgICAgICBsZXQgZW50cnkgPSBMaXN0LmhkIGVudHJpZXMgaW5cbiAgICAgICAgbGV0IGRpdiA9IFJlc2l6ZV9vYnNlcnZlci5FbnRyeS50YXJnZXQgZW50cnkgaW5cbiAgICAgICAgbGV0IHJlY3QgPSBSZXNpemVfb2JzZXJ2ZXIuRW50cnkuY29udGVudF9yZWN0IGVudHJ5IGluXG4gICAgICAgIGxldCBoZWlnaHQgPSBEb21fcmVjdF9yZWFkX29ubHkuaGVpZ2h0IHJlY3QgaW5cbiAgICAgICAgbWF0Y2ggTHdkLnBlZWsgdGFibGVfaGVpZ2h0IHdpdGhcbiAgICAgICAgfCBTb21lIGggd2hlbiBoIDw+IGhlaWdodCAtPiBMd2Quc2V0IHRhYmxlX2hlaWdodCAoU29tZSBoZWlnaHQpXG4gICAgICAgIHwgTm9uZSAtPiBMd2Quc2V0IHRhYmxlX2hlaWdodCAoU29tZSBoZWlnaHQpXG4gICAgICAgIHwgXyAtPiAoKSlcbiAgaW5cbiAgbGV0IHJvd3MgPVxuICAgIGxldCBhdCA9IEF0dHJzLk8uKHYgKGBQIChDIFwibHdkdWktbGF6eS10YWJsZS1jb250ZW50XCIpKSkgaW5cbiAgICBsZXQgb25fY3JlYXRlIGVsID0gVXRpbHMuRm9yd2FyZF9yZWYuc2V0X2V4biBTdGF0ZS5jb250ZW50X2RpdiBlbCBpblxuICAgIEVsd2QuZGl2IH5hdCB+b25fY3JlYXRlIFsgYFMgKEx3ZF9zZXEubGlmdCB0YWJsZV9ib2R5KSBdXG4gIGluXG4gIGxldCB3cmFwcGVyID1cbiAgICBsZXQgYXQgPSBBdHRycy5PLih2IChgUCAoQyBcImx3ZHVpLWxhenktdGFibGUtY29udGVudC13cmFwcGVyXCIpKSkgaW5cbiAgICBsZXQgc2Nyb2xsX2hhbmRsZXIgPVxuICAgICAgTHdkLm1hcCBwb3B1bGF0ZV9vbl9zY3JvbGwgfmY6KGZ1biB1cGRhdGUgLT5cbiAgICAgICAgICBFbHdkLmhhbmRsZXIgRXYuc2Nyb2xsIChmdW4gX2V2IC0+XG4gICAgICAgICAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgICAgICAgICAgaWdub3JlXG4gICAgICAgICAgICAgIEBAXG4gICAgICAgICAgICAgIGxldCBzY3JvbGxfaGFuZGxlciA9XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RfdXBkYXRlID0gcmVmIDAuIGluXG4gICAgICAgICAgICAgICAgbGV0IHRpbWVvdXQgPSByZWYgKC0xKSBpblxuICAgICAgICAgICAgICAgIGxldCByZXNldF90aWNrZXIgZGl2ID1cbiAgICAgICAgICAgICAgICAgIGxldCBkZWJvdW5jaW5nX2ludGVydmFsID0gNTAwIGluXG4gICAgICAgICAgICAgICAgICAoKiBXZSB1c2UgW2xhc3RfdXBkYXRlXSB0byBoYXZlIHJlZ3VsYXIgZGVib3VuY2VkIHVwZGF0ZXMgYW5kIHRoZVxuICAgICAgICAgICAgICAgICAgICAgW3RpbWVvdXRdIHRvIGVuc3VyZSB0aGF0IHRoZSBsYXN0IHNjcm9sbCBldmVudCBpcyBhbHdheXMgdGFrZW4gaW50b1xuICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCBldmVuIGl0IGl0IGhhcHBlbnMgZHVyaW5nIHRoZSBkZWJvdW5jaW5nIGludGVydmFsLiAqKVxuICAgICAgICAgICAgICAgICAgbGV0IG5vdyA9IFBlcmZvcm1hbmNlLm5vd19tcyBHLnBlcmZvcm1hbmNlIGluXG4gICAgICAgICAgICAgICAgICBpZiAhdGltZW91dCA+PSAwIHRoZW4gRy5zdG9wX3RpbWVyICF0aW1lb3V0O1xuICAgICAgICAgICAgICAgICAgdGltZW91dCA6PVxuICAgICAgICAgICAgICAgICAgICBHLnNldF90aW1lb3V0IH5tczpkZWJvdW5jaW5nX2ludGVydmFsIChmdW4gKCkgLT4gdXBkYXRlIGRpdik7XG4gICAgICAgICAgICAgICAgICBpZiBub3cgLS4gIWxhc3RfdXBkYXRlID4uIGZsb2F0X29mX2ludCBkZWJvdW5jaW5nX2ludGVydmFsXG4gICAgICAgICAgICAgICAgICB0aGVuIChcbiAgICAgICAgICAgICAgICAgICAgbGFzdF91cGRhdGUgOj0gbm93O1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGUgZGl2KVxuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgZnVuIGRpdiAtPiByZXNldF90aWNrZXIgZGl2XG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIGxldCBkaXYgPSBVdGlscy5Gb3J3YXJkX3JlZi5nZXRfZXhuIFN0YXRlLndyYXBwZXJfZGl2IGluXG4gICAgICAgICAgICAgIHNjcm9sbF9oYW5kbGVyICgpKSlcbiAgICBpblxuICAgIGxldCBldiA9IFsgYFIgc2Nyb2xsX2hhbmRsZXIgXSBpblxuICAgIGxldCBvbl9jcmVhdGUgZWwgPSBVdGlscy5Gb3J3YXJkX3JlZi5zZXRfZXhuIFN0YXRlLndyYXBwZXJfZGl2IGVsIGluXG4gICAgKG1hdGNoIHNjcm9sbF90YXJnZXQgd2l0aFxuICAgIHwgU29tZSBzY3JvbGxfdGFyZ2V0IC0+XG4gICAgICAgIGxldCBzY3JvbGxfdGFyZ2V0ID1cbiAgICAgICAgICBMd2QubWFwIHNjcm9sbF90YXJnZXQgfmY6KGZ1biBpIC0+XG4gICAgICAgICAgICAgIGxldCByb3dfaGVpZ2h0ID1cbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gVXRpbHMuRm9yd2FyZF9yZWYuZ2V0X2V4biBTdGF0ZS5jb250ZW50X2RpdiBpblxuICAgICAgICAgICAgICAgIEludC5vZl9mbG9hdCAoVXRpbHMuVW5pdC50b19weCB+cGFyZW50IHVpX3RhYmxlLnJvd19oZWlnaHQpXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIFNvbWUgKENvbnRyb2xsZWRfc2Nyb2xsLlBvcyAoaSAqIHJvd19oZWlnaHQpKSlcbiAgICAgICAgaW5cbiAgICAgICAgQ29udHJvbGxlZF9zY3JvbGwubWFrZSB+YXQgfmV2IH5vbl9jcmVhdGUgfnNjcm9sbF90YXJnZXQgcm93c1xuICAgIHwgTm9uZSAtPiBFbHdkLmRpdiB+YXQgfmV2IH5vbl9jcmVhdGUgWyBgUiByb3dzIF0pXG4gICAgfD4gTHdkLm1hcCB+ZjoodGVlIChmdW4gZWwgLT4gUmVzaXplX29ic2VydmVyLm9ic2VydmUgb2JzZXJ2ZXIgZWwpKVxuICBpblxuICBsZXQgdGFibGUgPVxuICAgIGxldCBhdCA9IEF0dHJzLnRvX2F0IEBAIEF0dHJzLmNsYXNzZXMgWyBcImx3ZHVpLWxhenktdGFibGVcIiBdIGluXG4gICAgbGV0IGdyaWRfc3R5bGUgPSBTY2hlbWEuc3R5bGUgdWlfdGFibGUgaW5cbiAgICBsZXQgcyA9IEF0LnN0eWxlIChKc3RyLnYgQEAgZ3JpZF9zdHlsZSkgaW5cbiAgICBsZXQgYXQgPSBgUCBzIDo6IGF0IGluXG4gICAgRWx3ZC5kaXYgfmF0IFsgYFIgdGFibGVfaGVhZGVyOyBgUiB3cmFwcGVyIF1cbiAgaW5cbiAgdGFibGVcblxuKCoqICMjIyMjIyMqKiMqKioqKiojJSUjPT09KysrKiMjIyUjIyMjIyMjIyMjIyorIyM9IyMjKysrKysrKysrKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjKiMjIyMqKioqJSUjIz09PT09PT09PT09KyM9PT0tPT09PT09PSojPSMjIysrKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyojIyMjIyoqKiMlIyM9PT09PT0tLS09PSsjPT0tLS09PT09PT0qIz0jIyMrKysrKysrKysrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjPT09PS0tLS09PS09Iz0tLT09PT09PT09KiM9KiMjJSMrKysrKyUlJSsrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMlIz09PT0tPT09PS0tPSM9PT09PT09PT09PSojPSojIyUjKys9KyMqKiUlKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyo9LS0tLS0tLS0tLT0jPT09PT09PT09PT0rIz0rIyMrJSMlKislKyUlJSsrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMjIys9LS0tLS0tLS09PS0tLS0tIz09PT0tPT0tLS0tKyM9KyMjKislIyUlKyMjJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjKz0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT0tPSsjPSsjIyMrKysjKiUrIysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjPS0tLS0tLS0tLT0jIyMjPSM9LS0jPSsrPT09PS0tPT09Iz0rIyMjKisrKyUlKyslJSsrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMqPT09PT09LS09PSoqIyMjIyMjKz09PT09Kz0rKysrKysqIyM9KyMjIyorKysrKysrKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjPS0tLS0tPT0rKisjIyMqIyMjIyMjPSM9PS0tLS09PT09PSsjPSsjIyMqKioqKysrKysrKytJUysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz09LT0tPSojKz0jKyUrIz09PSM9PT0jPT0tLT09PT09PT09Iz0rIyMjKioqKysrKysrKysrKysrVEhJUysrKysrK1xuIyMjIyMjIyMjIyMjIyM9LSMqIysqIyM9IyMjIyorIz0rKz09Iz09PT09PT09PT09KyM9KyMjIyoqKioqKiorKytBKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjPT0jIyM9IyMjIyMjIyMjIyMjKyMqKyM9PT09PT09PT09PT0jKysjIyMqKioqKioqKiorKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyM9KisjKiMjIyMjIyMjIyMjIyMjIz0jPT09PT09PT09PT09IysrIyMjKioqKioqKioqKioqTU9OT0lEKz8rKysrK1xuIyMjIyMjIyMjIyMjIyMjIz09IyMjIyMjIyMjIz09PT0jIyo9Iz09PT09PT0jKio9PSMrKyMjIyoqKioqKioqKioqKioqKioqKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjPT0rIyMjIyMjIyMjIyMjIyM9PSM9PT09PSMjIz09PT0jKysjIyMqKioqKioqKioqKioqKioqKioqKioqKysrXG4jIyMjIyMjIyMjIyMjIyMjIyM9PSMjIysjIyMjIyMjIyMrIyMjKis9PSMjIz09PT09IysrIyMrKysqKioqKioqKioqKioqKioqKioqKioqK1xuIyMjIyMjIyMjIyMjIyMrJSUlJSMjIyMjIyMjKyMjIyMqPT0rIz09KyMjIyMjIyMjIyMjIyMjKisrKioqKioqKioqKioqKioqKioqKioqKipcbiMjIyMjIyMjIyMjIyMjKysrKys9KyUjJSMqIyMjKiMlJSUlKyM9KyMjIyMjIyMjIyMqIyMjKyM9IyMqIyoqKioqKioqKioqKioqKioqKioqXG4jIyMjIyMjIyMjIyMjIyojPT0rPT09PSMjPT09IyMjJSUlJSUlJSMjIyMjIyMjIyMjIyM9IysjIyMjIyMqKioqKysqPT0rKioqKioqKioqKlxuIyMjIyMrPSsjIyMjIyMjIyMjIz0rPT0rPT09PSMjIyorIyUlJSUjIyMjIyMjIyMjIyorKyMjIyMjIyMjPT0qKz09PT09PSsrKioqKioqKipcbiMjIyMjIyMjIyMjIyMjIyMjIyMjKj09PT09PT0jIyMjIysjJSUqIyMjIyMjIyMqPT0jKysjIyMjIyMqPT09PT09PT09PT09PT09PSoqKioqXG4jIyMjIyMjIyMjIyMrIyMjIyMrIyMjIz09PSs9IyMjIyMjIysjIyMjIyMjIz09PT09IysrIyMjKz09PT09PT09PT09PT09PT09PT0rKioqKVxuIiwib3BlbiBMZXhpbmdcblxuZXhjZXB0aW9uIExleF9lcnJvciBvZiBzdHJpbmdcblxubGV0IGxleF9lcnJvciBlcnIgPSByYWlzZSAoTGV4X2Vycm9yIGVycilcblxubGV0IGVycm9yX3BvcyBsZXhidWYgPSBcbiAgbGV0IHN0YXJ0ID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxldCBjbnVtID0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHN0YXJ0LnBvc19ib2wgaW5cbiAgbGV0IGVudW0gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gc3RhcnQucG9zX2JvbCBpblxuICAoc3RhcnQucG9zX2xudW0sIGNudW0sIGVudW0pXG5cbmxldCBlcnJvcl9wb3NfbXNnIChsZXhidWYgOiBMZXhpbmcubGV4YnVmKSA9XG4gIGxldCAobGluZSwgY251bSwgZW51bSkgPSBlcnJvcl9wb3MgbGV4YnVmIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgbGluZSBjbnVtIGVudW1cblxubGV0IHN0cmluZzJudW0gcyA9XG4gIHRyeSAoVG9rZW5zLklOVCAoaW50X29mX3N0cmluZyBzKSkgd2l0aFxuICB8IEZhaWx1cmUgXyAtPiBUb2tlbnMuTEFSR0VJTlQgc1xuXG5sZXQgdXBkYXRlX3BvcyBsZXhidWYgPVxuICBsZXQgcG9zID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxleGJ1Zi5sZXhfc3RhcnRfcCA8LVxuICAgIHsgcG9zIHdpdGggcG9zX2JvbCA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zO1xuICAgICAgICAgICAgICAgcG9zX2xudW0gPSBwb3MucG9zX2xudW0gKyAxXG4gICAgfVxuXG5sZXQgaW50X29mX2hleGNoYXIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJy4uJzknIC0+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+IEp2Lm9mX2pzdHIpXG5cbiAgICBsZXQgXyA9IEV2Lmxpc3RlbiBCcnJfaW8uTWVzc2FnZS5Fdi5tZXNzYWdlIG9uX21lc3NhZ2UgRy50YXJnZXRcbiAgZW5kXG5lbmRcbiIsIm9wZW4gU3RkXG5cbigqKiBTb21lIHNvcnRzIHJlcXVpcmUgYSBjdXN0b20gb3JkZXJpbmcgd2hpY2ggaXMgZG9uZSB1c2luZyBhIHRhYmxlIG9mIGluZGV4ZXMuIEZvciBleGFtcGxlLCB0byBnZXQgYSByYW5kb20gc29ydCB3ZSBzaW1wbGUgc2h1ZmZsZSBhbiBhcnJheSB3aGljaCBzaXplIGlzIHRoZSBvbmUgb2YgdGhlIHJlc3VsdC4gKilcbm1vZHVsZSBPcmRlciA9IHN0cnVjdFxuICB0eXBlIHQgPSBJbml0aWFsIHwgQXNjIHwgRGVzYyB8IEN1c3RvbSBvZiBpbnQgYXJyYXlcblxuICBsZXQgcmFuZG9tIH5zaXplID1cbiAgICBsZXQgdGJsID0gQXJyYXkuaW5pdCBzaXplIH5mOkZ1bi5pZCBpblxuICAgIGxldCAoKSA9IEFycmF5LnNodWZmbGUgdGJsIGluXG4gICAgQ3VzdG9tIHRibFxuXG4gIGxldCBvZl9zdHJpbmcgfnNpemUgPSBmdW5jdGlvblxuICAgIHwgXCJyYW5kb21cIiAtPiByYW5kb20gfnNpemVcbiAgICB8IFwiYXNjXCIgLT4gQXNjXG4gICAgfCBcImRlc2NcIiAtPiBEZXNjXG4gICAgfCBfIC0+IEluaXRpYWxcblxuICBsZXQgYXBwbHkgdCB+c2l6ZSBpID1cbiAgICBtYXRjaCB0IHdpdGhcbiAgICB8IEluaXRpYWwgfCBBc2MgLT4gaVxuICAgIHwgRGVzYyAtPiBzaXplIC0gMSAtIGlcbiAgICB8IEN1c3RvbSBhIC0+ICgqIHRvZG8gY2hlY2sgYm91bmRzICopIGEuKGkpXG5lbmRcblxubW9kdWxlIFNvcnQgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gRGF0ZV9hZGRlZCB8IE5hbWVcblxuICBsZXQgb2Zfc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IFwiZGF0ZV9hZGRlZFwiIC0+IERhdGVfYWRkZWRcbiAgICB8IFwibmFtZVwiIC0+IE5hbWVcbiAgICB8IF8gLT4gRGF0ZV9hZGRlZFxuZW5kXG5cbnR5cGUgJ2Egc2VsZWN0aW9uID0gQWxsIHwgT25seSBvZiAnYSBsaXN0XG50eXBlIGtpbmQgPSBBdWRpb1xudHlwZSBmaWx0ZXIgPSBTZWFyY2ggb2Ygc3RyaW5nXG5cbnR5cGUgcmVxID0ge1xuICBraW5kIDoga2luZDtcbiAgc3JjX3ZpZXdzIDogc3RyaW5nIHNlbGVjdGlvbjtcbiAgc29ydCA6IFNvcnQudDtcbiAgZmlsdGVycyA6IGZpbHRlciBsaXN0O1xufVxuXG50eXBlIHQgPSB7IHJlcXVlc3QgOiByZXE7IHN0YXJ0X29mZnNldCA6IGludDsgaXRlbV9jb3VudCA6IGludCB9XG50eXBlIHJhbmdlZCA9IHsgdmlldyA6IHQ7IGZpcnN0IDogaW50OyBsYXN0IDogaW50OyBvcmRlciA6IE9yZGVyLnQgfVxuXG5sZXQgaXRlbV9jb3VudCB0ID0gdC5pdGVtX2NvdW50IC0gdC5zdGFydF9vZmZzZXRcblxubGV0IHJlcSBraW5kID8oc3JjX3ZpZXdzID0gQWxsKSA/KHNvcnQgPSBTb3J0LkRhdGVfYWRkZWQpID8oZmlsdGVycyA9IFtdKSAoKSA9XG4gIHsga2luZDsgc3JjX3ZpZXdzOyBzb3J0OyBmaWx0ZXJzIH1cblxubGV0IGhhc2ggcmVxID0gSGFzaHRibC5oYXNoIChyZXEuc3JjX3ZpZXdzLCByZXEuZmlsdGVycylcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIERTID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxudHlwZSBzZXJ2ZXIgPSBzdHJpbmcgKiBEUy5jb25uZXhpb25cblxubW9kdWxlIFF1ZXJpZXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBxdWVyeSA9XG4gICAgfCBTZXRfc2Vzc2lvbl91dWlkIDogc3RyaW5nIC0+IHVuaXQgcXVlcnlcbiAgICB8IEFkZF9zZXJ2ZXJzIDogc2VydmVyIGxpc3QgLT4gdW5pdCBxdWVyeVxuICAgIHwgR2V0X2FsbCA6IHVuaXQgLT4gQXBpLkl0ZW0udCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfbGlicmFyaWVzIDogdW5pdCAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyA6IHN0cmluZyAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBDcmVhdGVfdmlldyA6IFZpZXcucmVxIC0+IFZpZXcudCBxdWVyeVxuICAgIHwgR2V0IDpcbiAgICAgICAgVmlldy50ICogVmlldy5PcmRlci50ICogaW50IGFycmF5XG4gICAgICAgIC0+IFN0b3Jlcy5JdGVtcy50IG9wdGlvbiBhcnJheSBxdWVyeVxuXG4gIHR5cGUgJ2EgZXZlbnQgPSBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgOiAoc3RyaW5nICogU3luYy5yZXBvcnQpIGV2ZW50XG5lbmRcblxuaW5jbHVkZSBXb3JrZXJfYXBpLk1ha2UgKFF1ZXJpZXMpXG4iLCJpbmNsdWRlIFN0ZFxubW9kdWxlIERTID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBFbHdkID0gQnJyX2x3ZC5FbHdkXG5tb2R1bGUgVWlfdXRpbHMgPSBCcnJfbHdkX3VpLlV0aWxzXG5tb2R1bGUgVmlldyA9IERiLlZpZXdcbm1vZHVsZSBBdHRycyA9IEJycl9sd2RfdWkuQXR0cnNcblxubW9kdWxlIFN0cmluZyA9IHN0cnVjdFxuICBpbmNsdWRlIFN0cmluZ1xuICBtb2R1bGUgTU1hcCA9IENDTXVsdGlNYXAuTWFrZSAoU3RyaW5nKVxuICBtb2R1bGUgSXRlbXNfTXVsdGlNYXAgPSBNTWFwIChEYi5TdG9yZXMuSXRlbXMpXG5lbmRcblxubW9kdWxlIFV0aWxzID0gc3RydWN0XG4gIGxldCB3aXRoX3RpbWluZyA/KG5hbWUgPSBcIlwiKSBmID1cbiAgICBsZXQgdCA9IEJyci5QZXJmb3JtYW5jZS5ub3dfbXMgQnJyLkcucGVyZm9ybWFuY2UgaW5cbiAgICBsZXQgcmVzID0gZiAoKSBpblxuICAgIEJyci5Db25zb2xlLmxvZ1xuICAgICAgWyBuYW1lOyBcInRvb2tcIjsgQnJyLlBlcmZvcm1hbmNlLm5vd19tcyBCcnIuRy5wZXJmb3JtYW5jZSAtLiB0IF07XG4gICAgcmVzXG5lbmRcbiIsIm9wZW4gSW1wb3J0XG5cbnR5cGUgbGF5b3V0ID0gTWFpbiB8IEtpb3NrXG5cbmxldCBhY3RpdmVfbGF5b3V0ID0gTHdkLnZhciBNYWluXG4iLCJvcGVuIEltcG9ydFxuXG50eXBlIG9yZGVyZWQgPSB7XG4gIHJlcXVlc3QgOiBWaWV3LnJlcSBMd2QudDtcbiAgaXRlbV9jb3VudCA6IGludCBMd2QudDtcbiAgc3RhcnRfb2Zmc2V0IDogaW50IEx3ZC50O1xuICBvcmRlciA6IFZpZXcuT3JkZXIudCBMd2QudDtcbn1cblxubGV0IHRvX3ZpZXcgdmlldyA9XG4gIFVpX3V0aWxzLm1hcDMgdmlldy5yZXF1ZXN0IHZpZXcuc3RhcnRfb2Zmc2V0IHZpZXcuaXRlbV9jb3VudFxuICAgIH5mOihmdW4gcmVxdWVzdCBzdGFydF9vZmZzZXQgaXRlbV9jb3VudCAtPlxuICAgICAgeyBWaWV3LnJlcXVlc3Q7IHN0YXJ0X29mZnNldDsgaXRlbV9jb3VudCB9KVxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyX2x3ZF91aVxuXG5tb2R1bGUgVHdvX3N0YXRlX2J1dHRvbiA9IHN0cnVjdFxuICBsZXQgYmFzZSA9IEF0dHJzLmNsYXNzZXMgWyBcImJ1dHRvblwiIF1cblxuICBsZXQgYXQgPSBmdW5jdGlvblxuICAgIHwgQnV0dG9uLk9uIC0+IEF0dHJzLmNsYXNzZXMgWyBcIm9uXCIgXVxuICAgIHwgT2ZmIC0+IEF0dHJzLmNsYXNzZXMgWyBcIm9mZlwiIF1cblxuICBsZXQgbWFrZSB+b25fY2xpY2sgPVxuICAgIGxldCBvbl9jbGljayA9IEJ1dHRvbi5oYW5kbGVyIEJyci5Fdi5jbGljayBvbl9jbGljayBpblxuICAgIEJ1dHRvbi50d29fc3RhdGUgfmJhc2UgfmF0IH5ldjpbIGBQIG9uX2NsaWNrIF1cbmVuZFxuXG5vcGVuIEJycmVyLkJyclxub3BlbiEgQnJyX2x3ZFxuXG5tb2R1bGUgRHJhZ2dhYmxlX3RhYmxlID0gc3RydWN0XG4gIG1vZHVsZSB0eXBlIFJvdyA9IHNpZ1xuICAgIHR5cGUgdFxuXG4gICAgdmFsIHJlbmRlciA6IHQgLT4gRWwudCBsaXN0XG4gIGVuZFxuXG4gICgqKiBDb2x1bW5zIGRlY2xhcmF0aW9uICopXG4gIG1vZHVsZSBDb2x1bW5zID0gc3RydWN0XG4gICAgdHlwZSBjb2x1bW4gPSB7IG5hbWUgOiBzdHJpbmc7IGNzc19zaXplIDogc3RyaW5nIH1cbiAgICB0eXBlIHQgPSBjb2x1bW4gYXJyYXlcblxuICAgIGxldCBjb2x1bW4gbmFtZSBjc3Nfc2l6ZSA9IHsgbmFtZTsgY3NzX3NpemUgfVxuXG4gICAgbGV0IHRvX3N0eWxlIHQgPVxuICAgICAgQXJyYXkudG9fc3RyaW5nIH5zZXA6XCIgXCIgKGZ1biB7IGNzc19zaXplOyBfIH0gLT4gY3NzX3NpemUpIHRcblxuICAgIGxldCB0b19oZWFkZXIgdCA9XG4gICAgICBsZXQgY2VsbHMgPVxuICAgICAgICBBcnJheS5mb2xkX3JpZ2h0IHQgfmluaXQ6W10gfmY6KGZ1biB7IG5hbWU7IF8gfSBhY2MgLT5cbiAgICAgICAgICAgIEVsLmRpdiBbIEVsLnR4dCcgbmFtZSBdIDo6IGFjYylcbiAgICAgIGluXG4gICAgICBFbC5kaXYgY2VsbHNcblxuICAgIGxldCBzZXQgZWx0IHQgPVxuICAgICAgbGV0IHZhbHVlID0gSnN0ci52IEBAIHRvX3N0eWxlIHQgaW5cbiAgICAgIEVsLnNldF9pbmxpbmVfc3R5bGUgRWwuU3R5bGUuZ3JpZF90ZW1wbGF0ZV9jb2x1bW5zIHZhbHVlIGVsdFxuICBlbmRcblxuICBsZXQgZ3JpZCA9IEF0dHJzLmNsYXNzZXMgWyBcImRyYWdnYWJsZS10YWJsZVwiIF1cblxuICBsZXQgcmVuZGVyX3JvdyAodHlwZSB0KSAobW9kdWxlIFJvdyA6IFJvdyB3aXRoIHR5cGUgdCA9IHQpIH5zaGFyZWRfZHJhZ19kYXRhXG4gICAgICB+biAodF9yb3cgOiB0IEx3ZF90YWJsZS5yb3cpIHJvdyA9XG4gICAgbGV0IGFkZF9oaW50IH50b3AgZWwgPVxuICAgICAgbGV0IGMgPSBpZiB0b3AgdGhlbiBcImhvdmVyLXRvcFwiIGVsc2UgXCJob3Zlci1ib3R0b21cIiBpblxuICAgICAgRWwuc2V0X2NsYXNzIChKc3RyLnYgYykgdHJ1ZSBlbFxuICAgIGluXG4gICAgbGV0IHJlbW92ZV9oaW50cyBlbCA9XG4gICAgICBMaXN0Lml0ZXIgWyBcImhvdmVyLXRvcFwiOyBcImhvdmVyLWJvdHRvbVwiIF0gfmY6KGZ1biBjIC0+XG4gICAgICAgICAgRWwuc2V0X2NsYXNzIChKc3RyLnYgYykgZmFsc2UgZWwpXG4gICAgaW5cbiAgICBsZXQgaXNfb25fdG9wIGUgPVxuICAgICAgbGV0IG1vdXNlX2V2ID0gRXYuRHJhZy5hc19tb3VzZSBAQCBFdi5hc190eXBlIGUgaW5cbiAgICAgIGxldCBvZmZzZXRfeSA9IEV2Lk1vdXNlLm9mZnNldF95IG1vdXNlX2V2IGluXG4gICAgICBsZXQgdGFyZ2V0ID0gRXYuY3VycmVudF90YXJnZXQgZSB8PiBFdi50YXJnZXRfdG9fanYgfD4gRWwub2ZfanYgaW5cbiAgICAgIGxldCBzaXplX2ggPSBFbC5pbm5lcl9oIHRhcmdldCBpblxuICAgICAgb2Zmc2V0X3kgPC4gc2l6ZV9oIC8uIDIuXG4gICAgaW5cbiAgICBsZXQgZ2V0X2V2X3RhcmdldCBlID0gRXYuY3VycmVudF90YXJnZXQgZSB8PiBFdi50YXJnZXRfdG9fanYgfD4gRWwub2ZfanYgaW5cbiAgICBMd2Rfc2VxLmVsZW1lbnRcbiAgICBAQFxuICAgIGxldCBjZWxscyA9IFJvdy5yZW5kZXIgcm93IGluXG4gICAgYXNzZXJ0IChMaXN0Lmxlbmd0aCBjZWxscyA9IG4pO1xuICAgIGxldCBvbl9kcmFnX3N0YXJ0ID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnc3RhcnQgKGZ1biBfIC0+XG4gICAgICAgICAgRG9jdW1lbnQuYm9keSBHLmRvY3VtZW50IHw+IEVsLnNldF9jbGFzcyAoSnN0ci52IFwiZHJhZ2dpbmdcIikgdHJ1ZTtcbiAgICAgICAgICBMd2Quc2V0IHNoYXJlZF9kcmFnX2RhdGEgQEAgU29tZSB0X3JvdylcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX292ZXIgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdvdmVyIChmdW4gZSAtPlxuICAgICAgICAgIGxldCB0YXJnZXQgPSBnZXRfZXZfdGFyZ2V0IGUgaW5cbiAgICAgICAgICByZW1vdmVfaGludHMgdGFyZ2V0O1xuICAgICAgICAgIGxldCB0b3AgPSBpc19vbl90b3AgZSBpblxuICAgICAgICAgIGxldCBub29wID1cbiAgICAgICAgICAgIGxldCBvcGVuIE9wdGlvbiBpblxuICAgICAgICAgICAgbGV0KyByb3cgPSBMd2QucGVlayBzaGFyZWRfZHJhZ19kYXRhIGluXG4gICAgICAgICAgICBsZXQgZXF1YWxfcHJldiByb3cgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmZhbHNlIChFcXVhbC5waHlzaWNhbCByb3cpXG4gICAgICAgICAgICAgICAgKEx3ZF90YWJsZS5wcmV2IHRfcm93KVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIGxldCBlcXVhbF9uZXh0IHJvdyA9XG4gICAgICAgICAgICAgIE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6ZmFsc2UgKEVxdWFsLnBoeXNpY2FsIHJvdylcbiAgICAgICAgICAgICAgICAoTHdkX3RhYmxlLm5leHQgdF9yb3cpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgRXF1YWwucGh5c2ljYWwgdF9yb3cgcm93XG4gICAgICAgICAgICB8fCAodG9wICYmIGVxdWFsX3ByZXYgcm93KVxuICAgICAgICAgICAgfHwgKChub3QgdG9wKSAmJiBlcXVhbF9uZXh0IHJvdylcbiAgICAgICAgICBpblxuICAgICAgICAgIGlmIG5vdCAoT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmZhbHNlIG5vb3ApIHRoZW4gKFxuICAgICAgICAgICAgYWRkX2hpbnQgfnRvcCB0YXJnZXQ7XG4gICAgICAgICAgICAoKiA+IElmIHRoZSBtb3VzZSBpcyByZWxlYXNlZCBvdmVyIGFuIGVsZW1lbnQgdGhhdCBpcyBhIHZhbGlkIGRyb3AgdGFyZ2V0LFxuICAgICAgICAgICAgICAgPiB0aGF0IGlzLCBvbmUgdGhhdCBjYW5jZWxsZWQgdGhlIGxhc3QgZHJhZ2VudGVyIG9yIGRyYWdvdmVyIGV2ZW50LFxuICAgICAgICAgICAgICAgPiB0aGVuIHRoZSBkcm9wIHdpbGwgYmUgc3VjY2Vzc2Z1bC5cbiAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MX0RyYWdfYW5kX0Ryb3BfQVBJL0RyYWdfb3BlcmF0aW9ucyNzcGVjaWZ5aW5nX2Ryb3BfdGFyZ2V0cyAqKVxuICAgICAgICAgICAgRXYucHJldmVudF9kZWZhdWx0IGUpKVxuICAgIGluXG4gICAgbGV0IG9uX2RyYWdfbGVhdmUgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdsZWF2ZSAoZnVuIGUgLT4gcmVtb3ZlX2hpbnRzIEBAIGdldF9ldl90YXJnZXQgZSlcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX2VuZCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJhZ2VuZCAoZnVuIF8gLT5cbiAgICAgICAgICBEb2N1bWVudC5ib2R5IEcuZG9jdW1lbnQgfD4gRWwuc2V0X2NsYXNzIChKc3RyLnYgXCJkcmFnZ2luZ1wiKSBmYWxzZSlcbiAgICBpblxuICAgIGxldCBvbl9kcm9wID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcm9wIChmdW4gZSAtPlxuICAgICAgICAgIHJlbW92ZV9oaW50cyBAQCBnZXRfZXZfdGFyZ2V0IGU7XG4gICAgICAgICAgbGV0IF8gPVxuICAgICAgICAgICAgbGV0IG9wZW4gT3B0aW9uIGluXG4gICAgICAgICAgICBsZXQqIHJvdyA9IEx3ZC5wZWVrIHNoYXJlZF9kcmFnX2RhdGEgaW5cbiAgICAgICAgICAgIGxldCsgc2V0ID0gTHdkX3RhYmxlLmdldCByb3cgaW5cbiAgICAgICAgICAgIGlmIGlzX29uX3RvcCBlIHRoZW4gaWdub3JlIEBAIEx3ZF90YWJsZS5iZWZvcmUgfnNldCB0X3Jvd1xuICAgICAgICAgICAgZWxzZSBpZ25vcmUgQEAgTHdkX3RhYmxlLmFmdGVyIH5zZXQgdF9yb3c7XG4gICAgICAgICAgICBMd2RfdGFibGUucmVtb3ZlIHJvd1xuICAgICAgICAgIGluXG4gICAgICAgICAgTHdkLnNldCBzaGFyZWRfZHJhZ19kYXRhIE5vbmUpXG4gICAgaW5cbiAgICBFbHdkLmRpdlxuICAgICAgfmF0OlsgYFAgKEF0LmRyYWdnYWJsZSBAQCBKc3RyLnYgXCJ0cnVlXCIpIF1cbiAgICAgIH5ldjpcbiAgICAgICAgW1xuICAgICAgICAgIGBQIG9uX2RyYWdfc3RhcnQ7XG4gICAgICAgICAgYFAgb25fZHJhZ19vdmVyO1xuICAgICAgICAgIGBQIG9uX2RyYWdfbGVhdmU7XG4gICAgICAgICAgYFAgb25fZHJhZ19lbmQ7XG4gICAgICAgICAgYFAgb25fZHJvcDtcbiAgICAgICAgXVxuICAgICAgKExpc3QubWFwIGNlbGxzIH5mOihmdW4gYyAtPiBgUCBjKSlcblxuICBsZXQgbWFrZSAodHlwZSB0KSAobW9kdWxlIFJvdyA6IFJvdyB3aXRoIHR5cGUgdCA9IHQpIH5jb2x1bW5zXG4gICAgICA/KHRhYmxlIDogdCBMd2RfdGFibGUudCA9IEx3ZF90YWJsZS5tYWtlICgpKVxuICAgICAgPyhzaGFyZWRfZHJhZ19kYXRhIDogdCBMd2RfdGFibGUucm93IG9wdGlvbiBMd2QudmFyID0gTHdkLnZhciBOb25lKSAoKSA9XG4gICAgbGV0IGF0ID0gQXR0cnMudG9fYXQgZ3JpZCBpblxuICAgIGxldCB0YWJsZV9oZWFkZXIgPSBDb2x1bW5zLnRvX2hlYWRlciBjb2x1bW5zIGluXG4gICAgbGV0IHRhYmxlX2JvZHkgPVxuICAgICAgTHdkX3RhYmxlLm1hcF9yZWR1Y2VcbiAgICAgICAgKHJlbmRlcl9yb3cgKG1vZHVsZSBSb3cpIH5zaGFyZWRfZHJhZ19kYXRhIH5uOihBcnJheS5sZW5ndGggY29sdW1ucykpXG4gICAgICAgIEx3ZF9zZXEubW9ub2lkIHRhYmxlXG4gICAgaW5cbiAgICBsZXQgZWx0ID1cbiAgICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgICAgbGV0JCBlbHQgPVxuICAgICAgICBFbHdkLmRpdiB+YXQgWyBgUCB0YWJsZV9oZWFkZXI7IGBTIChMd2Rfc2VxLmxpZnQgdGFibGVfYm9keSkgXVxuICAgICAgaW5cbiAgICAgIGxldCAoKSA9IENvbHVtbnMuc2V0IGVsdCBjb2x1bW5zIGluXG4gICAgICBlbHRcbiAgICBpblxuICAgIChlbHQsIHRhYmxlKVxuZW5kXG5cbmxldCBwbGF5bGlzdF9jb2x1bW5zID1cbiAgRHJhZ2dhYmxlX3RhYmxlLkNvbHVtbnMuXG4gICAgW3wgY29sdW1uIFwiRmlyc3RDT2xcIiBcIjI1NnB4XCI7IGNvbHVtbiBcIlNlY29uZFwiIFwiMjU2cHhcIiB8XVxuXG5tb2R1bGUgUGxheWxpc3Rfcm93ID0gc3RydWN0XG4gIHR5cGUgdCA9IHN0cmluZyAqIHN0cmluZ1xuXG4gIGxldCByZW5kZXIgKGwsIHIpID0gWyBFbC5kaXYgWyBFbC50eHQnIGwgXTsgRWwuZGl2IFsgRWwudHh0JyByIF0gXVxuZW5kXG5cbmxldCBtYWtlX3RhYmxlIHJvd3MgPVxuICBsZXQgdGFibGUgPSBMd2RfdGFibGUubWFrZSAoKSBpblxuICBMaXN0Lml0ZXIgcm93cyB+ZjooZnVuIHNldCAtPiBpZ25vcmUgQEAgTHdkX3RhYmxlLmFwcGVuZCB+c2V0IHRhYmxlKTtcbiAgdGFibGVcblxubGV0IGRyYWdnYWJsZV90YWJsZSA/c2hhcmVkX2RyYWdfZGF0YSAoKSA9XG4gIERyYWdnYWJsZV90YWJsZS5tYWtlXG4gICAgKG1vZHVsZSBQbGF5bGlzdF9yb3cpXG4gICAgfmNvbHVtbnM6cGxheWxpc3RfY29sdW1ucyA/c2hhcmVkX2RyYWdfZGF0YVxuICAgIH50YWJsZTpcbiAgICAgIChtYWtlX3RhYmxlXG4gICAgICAgICBbXG4gICAgICAgICAgIChcInRvdG9cIiwgXCJyMVwiKTtcbiAgICAgICAgICAgKFwidGF0YVwiLCBcInIyXCIpO1xuICAgICAgICAgICAoXCJ0aXRpXCIsIFwicjNcIik7XG4gICAgICAgICAgIChcInRhXCIsIFwicjRcIik7XG4gICAgICAgICAgIChcInR1XCIsIFwicjVcIik7XG4gICAgICAgICBdKVxuICAgICgpXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJlclxub3BlbiBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2RfdWlcbm9wZW4hIEJycl9sd2Rcbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxuKCoqIEFwcGxpY2F0aW9uIHBhcnQgKilcblxuKCoqIENvbHVtbnMgZGVjbGFyYXRpb24gKilcbmxldCBjb2x1bW5zICgpID1cbiAgVGFibGUuQ29sdW1ucy5cbiAgICBbfFxuICAgICAgdiBcIk9yZGVyXCIgXCI1cmVtXCIgQEAgWyBgUCAoRWwudHh0JyBcIiNcIikgXTtcbiAgICAgIHYgXCJDb3ZlclwiIFwiNXJlbVwiIEBAIFsgYFAgKEVsLnR4dCcgXCJDb3ZlclwiKSBdO1xuICAgICAgdiBcIlRpdGxlXCIgXCIxZnJcIiBAQCBbIGBQIChFbC50eHQnIFwiVGl0bGVcIikgXTtcbiAgICB8XVxuXG5sZXQgbWFrZSB+cmVzZXRfcGxheWxpc3QgfmZldGNoID9zY3JvbGxfdGFyZ2V0ICh2aWV3IDogTHdkX3ZpZXcub3JkZXJlZCkgPVxuICBsZXQgcmFuZ2VkID1cbiAgICBMd2QubWFwMiAoTHdkX3ZpZXcudG9fdmlldyB2aWV3KSB2aWV3Lm9yZGVyIH5mOihmdW4gdmlldyBvcmRlciAtPlxuICAgICAgICB7IFZpZXcudmlldzsgZmlyc3QgPSAwOyBsYXN0ID0gMDsgb3JkZXIgfSlcbiAgaW5cbiAgbGV0IGltZ191cmwgc2VydmVyX2lkIGl0ZW1faWQgPVxuICAgIGxldCBzZXJ2ZXJzID1cbiAgICAgICgqIHNob3VsZCB0aGlzIGJlIHJlYWN0aXZlID8gKilcbiAgICAgIEx3ZC5wZWVrIFNlcnZlcnMuY29ubmV4aW9ucyB8PiBMd2Rfc2VxLnRvX2xpc3RcbiAgICBpblxuICAgIGxldCB1cmwgPVxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjb25uZXhpb24gOiBEUy5jb25uZXhpb24gPSBMaXN0LmFzc3Egc2VydmVyX2lkIHNlcnZlcnMgaW5cbiAgICAgICAgUHJpbnRmLnNwcmludGYgXCIlcy9JdGVtcy8lcy9JbWFnZXMvUHJpbWFyeT93aWR0aD01MFwiIGNvbm5leGlvbi5iYXNlX3VybFxuICAgICAgICAgIGl0ZW1faWRcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+IFwic2VydmVyLWVycm9yLnBuZ1wiXG4gICAgaW5cbiAgICBBdC5zcmMgKEpzdHIudiB1cmwpXG4gIGluXG4gIGxldCByZW5kZXIgKHJhbmdlZCA6IFZpZXcucmFuZ2VkIEx3ZC50KSBzdGFydF9pbmRleFxuICAgICAge1xuICAgICAgICBEYi5TdG9yZXMuSXRlbXMuaXRlbSA9XG4gICAgICAgICAgeyBBcGkuSXRlbS5pZDsgbmFtZTsgYWxidW1faWQ7IHNlcnZlcl9pZDsgaW1hZ2VfYmx1cl9oYXNoZXM7IF8gfTtcbiAgICAgICAgXztcbiAgICAgIH0gPVxuICAgIGxldCBwbGF5X2Zyb20gKHJhbmdlZCA6IFZpZXcucmFuZ2VkIEx3ZC50KSA9XG4gICAgICBMd2QubWFwIHJhbmdlZCB+ZjooZnVuIHJhbmdlZCBfIC0+XG4gICAgICAgICAgaWdub3JlXG4gICAgICAgICAgICAocmVzZXRfcGxheWxpc3RcbiAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgcmFuZ2VkIHdpdGhcbiAgICAgICAgICAgICAgICAgdmlldyA9XG4gICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgcmFuZ2VkLnZpZXcgd2l0aFxuICAgICAgICAgICAgICAgICAgICAgc3RhcnRfb2Zmc2V0ID0gcmFuZ2VkLnZpZXcuc3RhcnRfb2Zmc2V0ICsgc3RhcnRfaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgIH0pKVxuICAgIGluXG4gICAgbGV0IHBsYXlfb25fY2xpY2sgPVxuICAgICAgTHdkLm1hcCAocGxheV9mcm9tIHJhbmdlZCkgfmY6KGZ1biBjYiAtPiBFbHdkLmhhbmRsZXIgRXYuY2xpY2sgY2IpXG4gICAgaW5cbiAgICBsZXQgaW1nX3VybCA9XG4gICAgICBtYXRjaCAoaW1hZ2VfYmx1cl9oYXNoZXMsIGFsYnVtX2lkKSB3aXRoXG4gICAgICB8IHsgcHJpbWFyeSA9IE5vbmUgfSwgXyB8IF8sIE5vbmUgLT5cbiAgICAgICAgICBMd2QucmV0dXJuIChBdC5zcmMgKEpzdHIudiBcInRyYWNrLnBuZ1wiKSlcbiAgICAgIHwgXywgU29tZSBpZCAtPiBMd2QucmV0dXJuIChpbWdfdXJsIHNlcnZlcl9pZCBpZClcbiAgICBpblxuICAgIGxldCBzdGF0dXMgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIubm93X3BsYXlpbmcpIH5mOihmdW5jdGlvblxuICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZCA9IGl0ZW1faWQ7IF8gfTsgXyB9IHdoZW4gU3RyaW5nLmVxdWFsIGl0ZW1faWQgaWQgLT5cbiAgICAgICAgICAgIEVsLmRpdiB+YXQ6WyBBdC5jbGFzcycgKEpzdHIudiBcInBsYXlpbmdcIikgXSBbIEVsLnR4dCcgXCJ8PlwiIF1cbiAgICAgICAgfCBTb21lIF8gfCBOb25lIC0+IEVsLmRpdiBbIEVsLnR4dCcgKHN0cmluZ19vZl9pbnQgKHN0YXJ0X2luZGV4ICsgMSkpIF0pXG4gICAgaW5cbiAgICBbXG4gICAgICBgUiBzdGF0dXM7XG4gICAgICBgUlxuICAgICAgICAoRWx3ZC5kaXZcbiAgICAgICAgICAgfmV2OlsgYFIgcGxheV9vbl9jbGljayBdXG4gICAgICAgICAgIFsgYFIgKEVsd2QuaW1nIH5hdDpbIGBSIGltZ191cmw7IGBQIChBdC53aWR0aCA1MCkgXSAoKSkgXSk7XG4gICAgICBgUCAoRWwuZGl2IFsgRWwuc3BhbiBbIEVsLnR4dCcgbmFtZSBdIF0pO1xuICAgIF1cbiAgaW5cbiAgbGV0IHBsYWNlaG9sZGVyIF9pID0gW10gaW5cbiAgbGV0IHVpX3RhYmxlID1cbiAgICB7IFRhYmxlLnRhYmxlID0geyBjb2x1bW5zID0gY29sdW1ucyAoKSB9OyByb3dfaGVpZ2h0ID0gRW0gNC4gfVxuICBpblxuICBsZXQgZGF0YV9zb3VyY2UgPVxuICAgIGxldCB0b3RhbF9pdGVtcyA9IHZpZXcuaXRlbV9jb3VudCBpblxuICAgIGxldCBmZXRjaCA9IEx3ZC5tYXAgcmFuZ2VkIH5mOihmdW4gcmFuZ2VkIGkgLT4gZmV0Y2ggcmFuZ2VkIGkpIGluXG4gICAgbGV0IHJlbmRlciA9IEx3ZC5wdXJlIChyZW5kZXIgcmFuZ2VkKSBpblxuICAgIHsgVGFibGUuVmlydHVhbC50b3RhbF9pdGVtczsgZmV0Y2g7IHJlbmRlciB9XG4gIGluXG4gIFRhYmxlLlZpcnR1YWwubWFrZSB+dWlfdGFibGUgfnBsYWNlaG9sZGVyID9zY3JvbGxfdGFyZ2V0IGRhdGFfc291cmNlXG5cbmxldCBtYWtlX25vd19wbGF5aW5nIH5yZXNldF9wbGF5bGlzdCB+ZmV0Y2ggdmlldyA9XG4gIGxldCBzY3JvbGxfdGFyZ2V0ID0gTHdkLmdldCBQbGF5ZXIucGxheXN0YXRlLmN1cnJlbnRfaW5kZXggaW5cbiAgbWFrZSB+c2Nyb2xsX3RhcmdldCB+cmVzZXRfcGxheWxpc3QgfmZldGNoIHZpZXdcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJyclxuXG4oKiBUaGUgc2Vzc2lvbiB1dWlkIGlzIHN0b3JlZCB0byB0aGUgbG9jYWwgc3RvcmFnZSBhbmQgdXNlZCB0byBpZGVudGlmeSBhIHVzZXJcbiAgIHNlc3Npb24uIFRoaXMgaXMgcmVxdWlyZWQgYnkgSmVsbHlmaW4gYXV0aG9yaXphdGlvbiBzY2hlbWUuICopXG4oKiBUaGUgb2ZmaWNpYWwgY2xpZW50IGRvZXMgaXQgbGlrZSB0aGlzOlxuXG4gICBmdW5jdGlvbiBnZW5lcmF0ZURldmljZUlkKCkge1xuICAgICAgIGNvbnN0IGtleXMgPSBbXTtcblxuICAgICAgIGtleXMucHVzaChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICBrZXlzLnB1c2gobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgICAgIGlmICh3aW5kb3cuYnRvYSkge1xuICAgICAgICAgICByZXR1cm4gYnRvYShrZXlzLmpvaW4oJ3wnKSkucmVwbGFjZUFsbCgnPScsICcxJyk7XG4gICAgICAgfVxuXG4gICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgfVxuKilcbmxldCBzZXNzaW9uX3V1aWQgPVxuICAoKiBXZSBuZXZlciByZWFjdCB0byB0aGlzIHZhciB3ZSBjb3VsZCByZXBsYWNlIGl0ICopXG4gIEJycl9sd2RfdWkuUGVyc2lzdGVudC52YXJfZiB+a2V5Olwic2Vzc2lvbl91dWlkXCIgKGZ1biAoKSAtPlxuICAgICAgU3RkLm5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZylcblxubGV0IF8gPVxuICBsZXQgdXVpZCA9IEx3ZC5wZWVrIHNlc3Npb25fdXVpZCBpblxuICBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGkuc2V0X3Nlc3Npb25fdXVpZCB1dWlkO1xuICBXb3JrZXJfY2xpZW50LnF1ZXJ5IChTZXRfc2Vzc2lvbl91dWlkIChMd2QucGVlayBzZXNzaW9uX3V1aWQpKVxuXG5sZXQgZmV0Y2ggcmFuZ2VkX3ZpZXcgaSA9XG4gIFdvcmtlcl9jbGllbnQuKHF1ZXJ5IChHZXQgKHJhbmdlZF92aWV3LlZpZXcudmlldywgcmFuZ2VkX3ZpZXcub3JkZXIsIGkpKSlcblxubW9kdWxlIFAgPSBQbGF5ZXIuUGxheWJhY2tfY29udHJvbGxlciAoc3RydWN0XG4gIGxldCBmZXRjaCA9IGZldGNoXG5lbmQpXG5cbmxldCBhcHAgPVxuICBsZXQgb3BlbiBCcnJfbHdkX3VpLkZvcm1zIGluXG4gIGxldCBwbGF5bGlzdCA9IEJycl9sd2RfdWkuUGVyc2lzdGVudC52YXIgfmtleTpcInRvdG8xXCIgMCBpblxuICBsZXQgb25fY2xpY2sgXyBfID1cbiAgICBMd2Quc2V0IHBsYXlsaXN0IChMd2QucGVlayBwbGF5bGlzdCArIDEpO1xuICAgIExhbmcuc2V0IExhbmcuRW47XG4gICAgQnJyX2x3ZF91aS5CdXR0b24uTmV4dFxuICBpblxuICBsZXQgX2J0bl9taXgsIF8sIF8gPVxuICAgIFVpLlR3b19zdGF0ZV9idXR0b24ubWFrZSB+b25fY2xpY2sgKGZ1biBfIC0+XG4gICAgICAgIFtcbiAgICAgICAgICBgUlxuICAgICAgICAgICAgKEx3ZC5tYXAgKEx3ZC5nZXQgcGxheWxpc3QpIH5mOihmdW4gcGwgLT5cbiAgICAgICAgICAgICAgICAgRWwudHh0JyAoXCJjbGlja1wiIF4gc3RyaW5nX29mX2ludCBwbCkpKTtcbiAgICAgICAgXSlcbiAgaW5cbiAgbGV0IHN0YXR1cyA9XG4gICAgRWx3ZC5kaXZcbiAgICAgIH5hdDpbIGBQIChBdC5zdHlsZSAoSnN0ci52IFwiZ3JpZC1jb2x1bW46MS8tMVwiKSkgXVxuICAgICAgWyBgUCAoRWwuaDEgWyBFbC50eHQnIFwiV2VsY29tZSB0byBPQ0FNSVhcIiBdKTsgYFIgKFNlcnZlcnMudWkgKCkpIF1cbiAgaW5cbiAgbGV0IHBsYXllcl91aSA9XG4gICAgbGV0IHBsYXllciA9IFAubWFrZSAoKSBpblxuICAgIEVsd2QuZGl2IH5hdDpbIGBQIChBdC5zdHlsZSAoSnN0ci52IFwiZ3JpZC1jb2x1bW46MS8tMVwiKSkgXSBbIGBSIHBsYXllciBdXG4gIGluXG4gIGxldCBmX3NlYXJjaCA9XG4gICAgbGV0IG9wZW4gRmllbGRfdGV4dGlucHV0IGluXG4gICAgbWFrZSB7IG5hbWUgPSBcInBvdWV0XCI7IGRlZmF1bHQgPSBOb25lOyBsYWJlbCA9IFtdIH1cbiAgaW5cbiAgbGV0IGZfc29ydCA9XG4gICAgbGV0IG9wZW4gRmllbGRfc2VsZWN0IGluXG4gICAgbGV0IG9wdGlvbnMgPVxuICAgICAgTHdkLnB1cmVcbiAgICAgICAgKEx3ZF9zZXEub2ZfbGlzdCBbIChcImRhdGVfYWRkZWRcIiwgXCJEYXRlIGFkZGVkXCIpOyAoXCJuYW1lXCIsIFwiTmFtZVwiKSBdKVxuICAgIGluXG4gICAgbWFrZSB7IG5hbWUgPSBcInZpZXctc29ydFwiOyBkZWZhdWx0ID0gXCJkYXRlX2FkZGVkXCI7IGxhYmVsID0gW10gfSBvcHRpb25zXG4gIGluXG4gIGxldCBmX29yZGVyID1cbiAgICBsZXQgb3BlbiBGaWVsZF9zZWxlY3QgaW5cbiAgICBsZXQgb3B0aW9ucyA9XG4gICAgICBMd2QucHVyZVxuICAgICAgICAoTHdkX3NlcS5vZl9saXN0XG4gICAgICAgICAgIFsgKFwiYXNjXCIsIFwiQXNjXCIpOyAoXCJkZXNjXCIsIFwiRGVzY1wiKTsgKFwicmFuZG9tXCIsIFwiUmFuZG9tXCIpIF0pXG4gICAgaW5cbiAgICBtYWtlIHsgbmFtZSA9IFwidmlldy1vcmRlclwiOyBkZWZhdWx0ID0gXCJkZXNjXCI7IGxhYmVsID0gW10gfSBvcHRpb25zXG4gIGluXG4gIGxldCBmX3NvcnRfb3JkZXIgPSBMd2QucGFpciBmX3NvcnQudmFsdWUgZl9vcmRlci52YWx1ZSBpblxuICBsZXQgZmlsdGVycywgZl92YWx1ZSA9XG4gICAgbGV0IGZfbGlicmFyaWVzID1cbiAgICAgIGxldCBvcGVuIEZpZWxkX2NoZWNrYm94ZXMgaW5cbiAgICAgIGxldCBjaG9pY2VzID1cbiAgICAgICAgTHdkX3NlcS5mb2xkX21vbm9pZFxuICAgICAgICAgIChmdW4gKF8sIGwpIC0+XG4gICAgICAgICAgICBMd2Rfc2VxLm1hcFxuICAgICAgICAgICAgICAoZnVuIChsIDogRGIuU3RvcmVzLkl0ZW1zLnQpIC0+XG4gICAgICAgICAgICAgICAgQ2hlY2sgKGwuaXRlbS5pZCwgWyBgUCAoRWwudHh0JyBsLml0ZW0ubmFtZSkgXSwgdHJ1ZSkpXG4gICAgICAgICAgICAgIGwpXG4gICAgICAgICAgKEx3ZC5yZXR1cm4gTHdkX3NlcS5lbXB0eSwgTHdkLm1hcDIgfmY6THdkX3NlcS5jb25jYXQpXG4gICAgICAgICAgU2VydmVycy5zZXJ2ZXJzX2xpYnJhcmllc1xuICAgICAgaW5cbiAgICAgIG1ha2UgeyBuYW1lID0gXCJwb3VldFwiOyBkZXNjID0gTHdkLmpvaW4gY2hvaWNlcyB9XG4gICAgaW5cbiAgICBsZXQgZmlsdGVycyA9XG4gICAgICBFbHdkLmRpdlxuICAgICAgICBbXG4gICAgICAgICAgYFIgZl9zb3J0LmZpZWxkO1xuICAgICAgICAgIGBSIGZfb3JkZXIuZmllbGQ7XG4gICAgICAgICAgYFIgZl9zZWFyY2guZmllbGQ7XG4gICAgICAgICAgYFIgZl9saWJyYXJpZXMuZmllbGQ7XG4gICAgICAgIF1cbiAgICBpblxuICAgIChmaWx0ZXJzLCBmX2xpYnJhcmllcy52YWx1ZSlcbiAgaW5cbiAgbGV0IG1haW5fdmlldyA9XG4gICAgbGV0IHByZXZpb3VzX3ZhbHVlID0gcmVmIE5vbmUgaW5cbiAgICBsZXQgcmVxdWVzdCA9XG4gICAgICBVaV91dGlscy5tYXAzIGZfdmFsdWUgZl9zZWFyY2gudmFsdWUgZl9zb3J0X29yZGVyIH5mOihmdW4gbCB0IChzLCBvKSAtPlxuICAgICAgICAgIGxldCBmaWx0ZXJzID0gT3B0aW9uLm1hcCAoZnVuIHMgLT4gWyBEYi5WaWV3LlNlYXJjaCBzIF0pIHQgaW5cbiAgICAgICAgICBDb25zb2xlLmxvZ1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBcIlVwZGF0aW5nIG1haW4gdmlldzpcIjtcbiAgICAgICAgICAgICAgSnYub2Zfb3B0aW9uIH5ub25lOihKdi5vZl9zdHJpbmcgXCJcXFwiXFxcIlwiKSBKdi5vZl9zdHJpbmcgdDtcbiAgICAgICAgICAgICAgKCogSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgbDsgKilcbiAgICAgICAgICAgICAgSnYub2Zfc3RyaW5nIHM7XG4gICAgICAgICAgICBdO1xuICAgICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgICAgbGV0IHNvcnQgPSBEYi5WaWV3LlNvcnQub2Zfc3RyaW5nIHMgaW5cbiAgICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICAgIGxldCBuZXdfdmlldyA9XG4gICAgICAgICAgICBEYi5WaWV3LihcbiAgICAgICAgICAgICAgcmVxIEF1ZGlvIH5zcmNfdmlld3M6KE9ubHkgKEx3ZF9zZXEudG9fbGlzdCBsKSkgfnNvcnQgP2ZpbHRlcnMgKCkpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0Om5ld192aWV3XG4gICAgICAgICAgICAoZnVuIG9sZCAtPlxuICAgICAgICAgICAgICBpZiBFcXVhbC5wb2x5IG9sZCBuZXdfdmlldyB0aGVuIG9sZFxuICAgICAgICAgICAgICBlbHNlIChcbiAgICAgICAgICAgICAgICBwcmV2aW91c192YWx1ZSA6PSBTb21lIG5ld192aWV3O1xuICAgICAgICAgICAgICAgIG5ld192aWV3KSlcbiAgICAgICAgICAgICFwcmV2aW91c192YWx1ZSlcbiAgICBpblxuICAgIGxldCBpdGVtX2NvdW50ID1cbiAgICAgIEx3ZC5tYXAgcmVxdWVzdCB+ZjooZnVuIHJlcSAtPiBXb3JrZXJfY2xpZW50LmdldF92aWV3X2l0ZW1fY291bnQgcmVxKVxuICAgIGluXG4gICAgbGV0IGl0ZW1fY291bnQgPSAoKiBGSVhNRSAqKSBMd2Quam9pbiBpdGVtX2NvdW50IGluXG4gICAgbGV0IG9yZGVyID1cbiAgICAgIEx3ZC5tYXAyIGl0ZW1fY291bnQgZl9zb3J0X29yZGVyIH5mOihmdW4gaXRlbV9jb3VudCAoXywgb3JkZXIpIC0+XG4gICAgICAgICAgbGV0IHNpemUgPSBpdGVtX2NvdW50IGluXG4gICAgICAgICAgbGV0IG9yZGVyID0gVmlldy5PcmRlci5vZl9zdHJpbmcgfnNpemUgb3JkZXIgaW5cbiAgICAgICAgICBvcmRlcilcbiAgICBpblxuICAgIHsgTHdkX3ZpZXcucmVxdWVzdDsgaXRlbV9jb3VudDsgc3RhcnRfb2Zmc2V0ID0gTHdkLnB1cmUgMDsgb3JkZXIgfVxuICBpblxuXG4gIGxldCBtYWluX2xpc3QgPVxuICAgIFVpX3BsYXlsaXN0Lm1ha2UgfnJlc2V0X3BsYXlsaXN0OlAucmVzZXRfcGxheWxpc3QgfmZldGNoIG1haW5fdmlld1xuICBpblxuICBsZXQgbm93X3BsYXlpbmcgPVxuICAgIGxldCBwbGF5bGlzdCA9XG4gICAgICBMd2QubWFwIChMd2QuZ2V0IFBsYXllci5wbGF5c3RhdGUucGxheWxpc3QpIH5mOihmdW5jdGlvblxuICAgICAgICB8IE5vbmUgLT4gRWx3ZC5zcGFuIFsgYFAgKEVsLnR4dCcgXCJOb3RoaW5nIHBsYXlpbmdcIikgXVxuICAgICAgICB8IFNvbWUgcGxheWxpc3QgLT5cbiAgICAgICAgICAgIGxldCB2aWV3ID1cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEx3ZF92aWV3LnJlcXVlc3QgPSBMd2QucHVyZSBwbGF5bGlzdC52aWV3LnJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgaXRlbV9jb3VudCA9IEx3ZC5wdXJlIHBsYXlsaXN0LnZpZXcuaXRlbV9jb3VudDtcbiAgICAgICAgICAgICAgICBzdGFydF9vZmZzZXQgPSBMd2QucHVyZSBwbGF5bGlzdC52aWV3LnN0YXJ0X29mZnNldDtcbiAgICAgICAgICAgICAgICBvcmRlciA9IEx3ZC5wdXJlIHBsYXlsaXN0Lm9yZGVyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgVWlfcGxheWxpc3QubWFrZV9ub3dfcGxheWluZyB+cmVzZXRfcGxheWxpc3Q6UC5yZXNldF9wbGF5bGlzdCB+ZmV0Y2hcbiAgICAgICAgICAgICAgdmlldylcbiAgICBpblxuICAgICgqdG9kbzogZG8gd2UgbmVlZCB0aGF0IGpvaW4gPyopXG4gICAgTHdkLmpvaW4gcGxheWxpc3RcbiAgaW5cbiAgbGV0IGJpZ19jb3ZlciA9XG4gICAgbGV0IG9wZW4gQXR0cnMuTyBpblxuICAgIGxldCBkaXNwbGF5X25vbmUgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBBcHBfc3RhdGUuYWN0aXZlX2xheW91dCkgfmY6KGZ1bmN0aW9uXG4gICAgICAgIHwgTWFpbiAtPiBBdC5jbGFzcycgKEpzdHIudiBcImRpc3BsYXktbm9uZVwiKVxuICAgICAgICB8IEtpb3NrIC0+IEF0LnZvaWQpXG4gICAgaW5cbiAgICBsZXQgc3R5bGUgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIubm93X3BsYXlpbmcpIH5mOihmdW4gbnAgLT5cbiAgICAgICAgICBsZXQgc3JjID1cbiAgICAgICAgICAgIG1hdGNoIG5wIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiBcInRyYWNrLnBuZ1wiXG4gICAgICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZDsgYWxidW1faWQ7IHNlcnZlcl9pZDsgXyB9OyBfIH0gLT5cbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2VfaWQgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6aWQgYWxidW1faWQgaW5cbiAgICAgICAgICAgICAgICBsZXQgc2VydmVycyA9IEx3ZF9zZXEudG9fbGlzdCAoTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zKSBpblxuICAgICAgICAgICAgICAgIGxldCBjb25uZXhpb24gOiBEUy5jb25uZXhpb24gPSBMaXN0LmFzc3Egc2VydmVyX2lkIHNlcnZlcnMgaW5cbiAgICAgICAgICAgICAgICAoKiB0b2RvOiB0aGlzIGlzIGRvbmUgaW4gbXVsdGlwbGUgcGxhY2VzLCB3ZSBzaG91bGQgZmFjdG9yXG4gICAgICAgICAgICAgICAgICAgdGhhdCBvdXQuICopXG4gICAgICAgICAgICAgICAgUHJpbnRmLnNwcmludGYgXCIlcy9JdGVtcy8lcy9JbWFnZXMvUHJpbWFyeT93aWR0aD04MDAmZm9ybWF0PUpwZ1wiXG4gICAgICAgICAgICAgICAgICBjb25uZXhpb24uYmFzZV91cmwgaW1hZ2VfaWRcbiAgICAgICAgICBpblxuICAgICAgICAgIEF0LnN0eWxlIChKc3RyLnYgKFByaW50Zi5zcHJpbnRmIFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCVTKVwiIHNyYykpKVxuICAgIGluXG4gICAgbGV0IGF0ID0gWyBgUiBkaXNwbGF5X25vbmU7IGBQIChBdC5jbGFzcycgKEpzdHIudiBcImJpZy1jb3ZlclwiKSkgXSBpblxuICAgIEVsd2QuZGl2IH5hdCBbIGBSIChFbHdkLmRpdiB+YXQ6WyBgUiBzdHlsZSBdIFtdKSBdXG4gIGluXG4gIEVsd2QuZGl2XG4gICAgfmF0OkJycl9sd2RfdWkuQXR0cnMuKHRvX2F0IH5pZDpcIm1haW4tbGF5b3V0XCIgQEAgY2xhc3NlcyBbXSlcbiAgICBbXG4gICAgICBgUiBzdGF0dXM7XG4gICAgICBgUlxuICAgICAgICAoRWx3ZC5kaXZcbiAgICAgICAgICAgfmF0OlsgYFAgKEF0LmNsYXNzJyAoSnN0ci52IFwiaXRlbS1saXN0XCIpKSBdXG4gICAgICAgICAgIFsgYFIgYmlnX2NvdmVyOyBgUiBmaWx0ZXJzOyBgUiBtYWluX2xpc3QgXSk7XG4gICAgICBgUlxuICAgICAgICAoRWx3ZC5kaXYgfmF0OlsgYFAgKEF0LmNsYXNzJyAoSnN0ci52IFwicGxheWxpc3RcIikpIF0gWyBgUiBub3dfcGxheWluZyBdKTtcbiAgICAgIGBSIHBsYXllcl91aTtcbiAgICBdXG5cbmxldCBpc19zdG9yYWdlX3BlcnNpc3RlbnQgPVxuICBCcnJfaW8uU3RvcmFnZS4obWFuYWdlciBHLm5hdmlnYXRvciB8PiBNYW5hZ2VyLnBlcnNpc3QpXG5cbmxldCBfID1cbiAgbGV0IG9uX2xvYWQgXyA9XG4gICAgQ29uc29sZS5sb2cgWyBcIlBlcnNpc3QgP1wiOyBpc19zdG9yYWdlX3BlcnNpc3RlbnQgXTtcbiAgICBsZXQgYXBwID0gTHdkLm9ic2VydmUgQEAgYXBwIGluXG4gICAgbGV0IG9uX2ludmFsaWRhdGUgXyA9XG4gICAgICBpZ25vcmUgQEAgRy5yZXF1ZXN0X2FuaW1hdGlvbl9mcmFtZVxuICAgICAgQEAgZnVuIF8gLT4gaWdub3JlIEBAIEx3ZC5xdWlja19zYW1wbGUgYXBwXG4gICAgaW5cbiAgICBFbC5hcHBlbmRfY2hpbGRyZW4gKERvY3VtZW50LmJvZHkgRy5kb2N1bWVudCkgWyBMd2QucXVpY2tfc2FtcGxlIGFwcCBdO1xuICAgIEx3ZC5zZXRfb25faW52YWxpZGF0ZSBhcHAgb25faW52YWxpZGF0ZVxuICBpblxuICBFdi5saXN0ZW4gRXYuZG9tX2NvbnRlbnRfbG9hZGVkIG9uX2xvYWQgKFdpbmRvdy5hc190YXJnZXQgRy53aW5kb3cpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEVuc3VyZSB0aGF0IFthdF9leGl0XSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHByb2dyYW0gKilcblxubGV0IF8gPSBkb19hdF9leGl0KClcbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtYWluLmJjLmpzIiwic291cmNlUm9vdCI6IiIsIm5hbWVzIjpbImNhbWxfYXJyYXlfYmxpdCIsImExIiwiaTEiLCJhMiIsImkyIiwibGVuIiwiaiIsImNhbWxfYXJyYXlfc3ViIiwiYSIsImkiLCJBcnJheSIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImYiLCJTdHJpbmciLCJudWxsIiwicyIsIk1hdGgiLCJjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkiLCJVaW50OEFycmF5IiwiYiIsImwiLCJjYW1sX2JsaXRfYnl0ZXMiLCJzMSIsInMyIiwiYzEiLCJjMiIsImNhbWxfc3RyX3JlcGVhdCIsIm4iLCJyIiwiY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyIsImpzb29faXNfYXNjaWkiLCJjYW1sX3V0ZjE2X29mX3V0ZjgiLCJ0IiwiYyIsInYiLCJNbEJ5dGVzIiwidGFnIiwiY29udGVudHMiLCJsZW5ndGgiLCJ0aGlzIiwiY29udGVudCIsImNhbWxfYnl0ZXNfb2ZfanNieXRlcyIsImNhbWxfanNieXRlc19vZl9zdHJpbmciLCJ4IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2JsaXRfc3RyaW5nIiwiZCIsImUiLCJqc29vX3N5c19nZXRlbnYiLCJwcm9jZXNzIiwiZ2xvYmFsVGhpcyIsInVuZGVmaW5lZCIsImNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnIiwiY2FtbF9nbG9iYWxfZGF0YSIsImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlIiwiZXhuIiwiZm9yY2UiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3JhaXNlX3dpdGhfYXJnIiwiYXJnIiwiY2FtbF9zdHJpbmdfb2ZfanNieXRlcyIsImNhbWxfcmFpc2Vfd2l0aF9zdHJpbmciLCJtc2ciLCJjYW1sX2ludmFsaWRfYXJndW1lbnQiLCJjYW1sX2J5dGVzX2JvdW5kX2Vycm9yIiwiY2FtbF9ieXRlc191bnNhZmVfc2V0IiwiY2FtbF9ieXRlc19zZXQiLCJjYW1sX2J5dGVzX3Vuc2FmZV9nZXQiLCJjYW1sX2NhbGxfZ2VuIiwiYXJncyIsImFyZ3NMZW4iLCJnIiwibmFyZ3MiLCJ5IiwiZXh0cmFfYXJncyIsImFyZ3VtZW50cyIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX2NoZWNrX2JvdW5kIiwiYXJyYXkiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwib2ZzIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2VxdWFsIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJtIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJwIiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJjYW1sX2N1cnJlbnRfZGlyIiwiY2FtbF9tYWtlX3BhdGgiLCJjb21wMCIsIm5jb21wIiwiY2FtbF91dGY4X29mX3V0ZjE2IiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJ1bml4X2Vycm9yIiwibWFrZV91bml4X2Vycl9hcmdzIiwiY29kZSIsInN5c2NhbGwiLCJlcnJubyIsInZhcmlhbnQiLCJjYW1sX25hbWVkX3ZhbHVlcyIsImNhbWxfbmFtZWRfdmFsdWUiLCJubSIsImNhbWxfcmFpc2Vfd2l0aF9hcmdzIiwiY2FtbF9ieXRlc19vZl9hcnJheSIsImNhbWxfcmFpc2Vfc3lzX2Vycm9yIiwiY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUiLCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZUZkIiwiZmlsZSIsImZsYWdzIiwiTWxGYWtlRGV2aWNlIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsImVudHJ5Iiwib2siLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyIsIk1sTm9kZUZkIiwiZmQiLCJyZXF1aXJlIiwiZXJyIiwiYnVmX29mZnNldCIsInJlYWQiLCJNbE5vZGVEZXZpY2UiLCJjb25zdHMiLCJrZXkiLCJpc0NoYXJhY3RlckRldmljZSIsIm8iLCJqc19zdGF0cyIsInRvX2RpciIsInRhcmdldCIsImxpbmsiLCJmaWxlX2tpbmQiLCJjYW1sX2dldF9yb290IiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9jcmVhdGVfZmlsZSIsImpzb29fY3JlYXRlX2ZpbGUiLCJjYW1sX2ZzX2luaXQiLCJ0bXAiLCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2hfbWl4X2pzYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyIiwiY2FtbF9tbF9ieXRlc19jb250ZW50IiwiY2FtbF9oYXNoX21peF9ieXRlcyIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2hhc2giLCJjb3VudCIsImxpbWl0Iiwic2VlZCIsIm9iaiIsInF1ZXVlIiwicmQiLCJ3ciIsImhoIiwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQiLCJzdHlsZSIsImV4cF9zaWduIiwic2lnbl9zdHIiLCJjc3QiLCJ4X3N0ciIsImlkeCIsImNhbWxfaW50NjRfaXNfemVybyIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSIsImNhbWxfaW50NjRfbmVnIiwiY2FtbF9pbnQ2NF9mb3JtYXQiLCJ3YmFzZSIsImN2dGJsIiwiY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIiwiYmFzZSIsImNhbWxfcGFyc2VfZGlnaXQiLCJjYW1sX2ludF9vZl9zdHJpbmciLCJ0aHJlc2hvbGQiLCJjYW1sX2pzX2Zyb21fYXJyYXkiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfanNfbmV3IiwiRiIsImNhbWxfanNfb2JqZWN0IiwiY2FtbF9qc190b19hcnJheSIsImNhbWxfY2FsbGJhY2siLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IiwiYXJpdHkiLCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbGV4X2FycmF5IiwiY2FtbF9sZXhfZW5naW5lIiwidGJsIiwic3RhcnRfc3RhdGUiLCJsZXhidWYiLCJsZXhfYnVmZmVyIiwibGV4X2J1ZmZlcl9sZW4iLCJsZXhfc3RhcnRfcG9zIiwibGV4X2N1cnJfcG9zIiwibGV4X2xhc3RfcG9zIiwibGV4X2xhc3RfYWN0aW9uIiwibGV4X2VvZl9yZWFjaGVkIiwibGV4X2Jhc2UiLCJsZXhfYmFja3RyayIsImxleF9kZWZhdWx0IiwibGV4X3RyYW5zIiwibGV4X2NoZWNrIiwic3RhdGUiLCJiYWNrdHJrIiwiY2FtbF9saXN0X29mX2pzX2FycmF5IiwiY2FtbF9saXN0X3RvX2pzX2FycmF5IiwiY2FtbF9tYWtlX3ZlY3QiLCJpbml0IiwiY2FtbF9NRDVJbml0IiwiQXJyYXlCdWZmZXIiLCJiMzIiLCJVaW50MzJBcnJheSIsImI4IiwiY2FtbF9NRDVUcmFuc2Zvcm0iLCJhZGQiLCJ4eCIsImZmIiwiZ2ciLCJpaSIsImNhbWxfTUQ1VXBkYXRlIiwiY3R4IiwiaW5wdXQiLCJpbnB1dF9sZW4iLCJpbl9idWYiLCJpbnB1dF9wb3MiLCJtaXNzaW5nIiwiY2FtbF9NRDVGaW5hbCIsImNhbWxfc3RyaW5nX29mX2FycmF5IiwiY2FtbF9tZDVfYnl0ZXMiLCJjYW1sX21kNV9zdHJpbmciLCJjYW1sX3N5c19mZHMiLCJjYW1sX3N5c19jbG9zZSIsImNhbWxfbWxfY2hhbm5lbHMiLCJjYW1sX21sX2NoYW5uZWxfZ2V0IiwiaWQiLCJjYW1sX21sX2ZsdXNoIiwiY2hhbmlkIiwiY2hhbiIsImNhbWxfbWxfY2xvc2VfY2hhbm5lbCIsImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMiLCJjYW1sX3JlZmlsbCIsInN0ciIsInN0cl9hIiwibnJlYWQiLCJjYW1sX21sX2lucHV0X2Jsb2NrIiwiYXZhaWwiLCJjYW1sX21sX2lucHV0IiwiY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZSIsImZzIiwiZmQyIiwiTWxGYWtlRmRfb3V0IiwiY29uc29sZSIsInNyYyIsImNhbWxfc3lzX29wZW5faW50ZXJuYWwiLCJjYW1sX3N5c19vcGVuIiwiX3Blcm1zIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4iLCJyZWZpbGwiLCJjaGFubmVsIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IiwiYnVmZmVyZWQiLCJjYW1sX21sX291dF9jaGFubmVsc19saXN0IiwiY2FtbF9tbF9vdXRwdXRfdGEiLCJjYW1sX21sX291dHB1dF9ieXRlcyIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfY2hhciIsImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZSIsImNhbWxfbW9kIiwiY2FtbF9ub3RlcXVhbCIsImNhbWxfb2JqX21ha2VfZm9yd2FyZCIsImNhbWxfb2JqX3RhZyIsIkZ1bmN0aW9uIiwiY2FtbF9idWlsZF9zeW1ib2xzIiwic3ltYiIsImNhbWxfcmVnaXN0ZXJfZ2xvYmFsIiwibmFtZV9vcHQiLCJuaWQiLCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIiwiY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX2NvbnN0X21heF93b3NpemUiLCJjYW1sX3JhaXNlX25vdF9mb3VuZCIsImNhbWxfc3lzX2dldGVudiIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwibm93IiwiRGF0ZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3VwZGF0ZV9kdW1teSIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2lzX3NwZWNpYWxfZXhjZXB0aW9uIiwiY2FtbF9mb3JtYXRfZXhjZXB0aW9uIiwiYnVja2V0Iiwic3RhcnQiLCJjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImhhbmRsZXIiLCJhdF9leGl0IiwiY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsIm9yaWdpbiIsImV2ZW50IiwiemVyb19wb3MiLCJsb2NmbXQiLCJlbXB0eSQyIiwiZW1wdHkkMyIsIm9jYW1sX2xleF90YWJsZXMiLCJ0cF9sb2MiLCJ0cF9sb2MkMCIsInRwX2xvYyQxIiwidHBfbG9jJDIiLCJ0cF9sb2MkMyIsInRwX2xvYyQ0IiwidHBfbG9jJDUiLCJ0cF9sb2MkNiIsInBhdGgkMSIsInBhdGgkMiIsIm5hbWUkNiIsImluaXRpYWxfcmVwb3J0Iiwic3RyaW5ncyIsInVybCQwIiwiZGVmYXVsdCQxIiwiYWxidW0iLCJhcnRpc3QiLCJlcmFzZV9yZWwiLCJyZXN0IiwicmVzdCQwIiwicmVzdCQxIiwicmVzdCQyIiwicmVzdCQzIiwicmVzdCQ0IiwicmVzdCQ1IiwicmVzdCQ2IiwicmVzdCQ3IiwidHkiLCJyZXN0JDgiLCJ0eTEiLCJyZXN0JDkiLCJyZXN0JDEwIiwicmVzdCQxMSIsInJlc3QkMTIiLCJyZXN0JDEzIiwiY29uY2F0X2ZtdHR5IiwiZm10dHkxIiwiZm10dHkyIiwidHkyIiwiY29uY2F0X2ZtdCIsImZtdDEiLCJmbXQyIiwicGFkIiwicGFkJDAiLCJwYWQkMSIsImljb252IiwicHJlYyQwIiwicGFkJDIiLCJpY29udiQwIiwicHJlYyQxIiwicGFkJDMiLCJpY29udiQxIiwicHJlYyQyIiwicGFkJDQiLCJpY29udiQyIiwicHJlYyQzIiwicGFkJDUiLCJmY29udiIsInBhZCQ2IiwiY2hyIiwiZm10dHkiLCJwYWQkNyIsImZtdHR5JDAiLCJwYWQkOCIsInJlc3QkMTQiLCJyZXN0JDE1IiwicmVzdCQxNiIsImZtdGluZ19saXQiLCJyZXN0JDE3IiwiZm10aW5nX2dlbiIsInJlc3QkMTgiLCJyZXN0JDE5IiwiY2hhcl9zZXQiLCJ3aWR0aF9vcHQiLCJyZXN0JDIwIiwiY291bnRlciIsInJlc3QkMjEiLCJyZXN0JDIyIiwiaWduIiwicmVzdCQyMyIsImN1ciIsImZhaWx3aXRoIiwiaW52YWxpZF9hcmciLCJhYnMiLCJsbm90IiwibWF4X2ludCIsImNoYXJfb2ZfaW50Iiwic3RyaW5nX29mX2Jvb2wiLCJzdHJpbmdfb2ZfaW50IiwidmFsaWRfZmxvYXRfbGV4ZW0iLCJsb29wIiwiaSQwIiwiaSQxIiwic3RyaW5nX29mX2Zsb2F0Iiwic3ltYm9sIiwibDEiLCJsMiIsInRsIiwiaGQiLCJzdGRvdXQiLCJzdGRlcnIiLCJvcGVuX291dF9nZW4iLCJwZXJtIiwib3Blbl9vdXQiLCJmbHVzaF9hbGwiLCJpdGVyIiwib3V0cHV0X3N0cmluZyIsIm9jIiwib3V0cHV0X3N1YnN0cmluZyIsImNsb3NlX291dCIsIm9wZW5faW5fZ2VuIiwib3Blbl9pbiIsImljIiwicHJlcnJfZW5kbGluZSIsImV4aXRfZnVuY3Rpb24iLCJmX3lldF90b19ydW4iLCJvbGRfZXhpdCIsImZfeWV0X3RvX3J1biQwIiwib2xkX2V4aXQkMCIsIm5ld19leGl0Iiwic3VjY2VzcyIsImRvX2F0X2V4aXQiLCJpc19ibG9jayIsInJhaXNlX3VuZGVmaW5lZCIsImZvcmNlX2xhenlfYmxvY2siLCJibGsiLCJjbG9zdXJlIiwiZSQwIiwiZnJvbV92YWwiLCJ2YWx1ZSIsImRlZmF1bHQkMCIsImdldCQwIiwibWFwIiwiaXNfc29tZSIsImdldF9vayIsIm1hcCQwIiwib2ZfaW50X2V4biIsInMkMCIsImxlbmd0aF9hdXgiLCJsZW4kMCIsImNvbnMiLCJyZXZfYXBwZW5kIiwibDEkMCIsImwyJDAiLCJsMSQxIiwibDIkMSIsInJldiIsImluaXRfdGFpbHJlY19hdXgiLCJhY2MiLCJhY2MkMCIsImFjYyQxIiwiaW5pdF9hdXgiLCJybWFwX2YiLCJhY2N1JDAiLCJhY2N1IiwibCQwIiwibCQxIiwiYWNjdSQxIiwiZmluZCIsImF1eCIsInBhcnQiLCJ5ZXMkMCIsIm5vJDAiLCJjbXAiLCJyZXZfbWVyZ2UiLCJ0MiIsImgyIiwidDEiLCJoMSIsImFjY3UkMiIsImFjY3UkMyIsInJldl9tZXJnZV9yZXYiLCJzb3J0IiwieDIiLCJ4MSIsInRsJDEiLCJ4MyIsIngyJDAiLCJ4MSQwIiwiYyQwIiwiYyQxIiwiYyQyIiwiYyQzIiwiYyQ0IiwiYyQ1IiwibjEiLCJuMiIsInJldl9zb3J0IiwidGwkMCIsImNvbXBhcmUiLCJtaW4iLCJtYXgkMCIsInRvX3N0cmluZyIsIm9mczEiLCJvZnMyIiwiaXNfc3BhY2UiLCJlbnN1cmVfZ2UiLCJzdW1fbGVuZ3RocyIsInNlcGxlbiIsInVuc2FmZV9ibGl0cyIsImRzdCIsInBvcyQwIiwiaXNfc3BhY2UkMCIsImVzY2FwZV9pZl9uZWVkZWQiLCJpbmRleF9yZWMiLCJsaW0iLCJ0b2xpc3QiLCJyZXMkMCIsInJlcyQxIiwibGlzdF9sZW5ndGgiLCJmaWxsIiwibGV4X3JlZmlsbCIsInJlYWRfZnVuIiwiYXV4X2J1ZmZlciIsIm5ld2xlbiIsIm5ld2J1ZiIsIm9wdCIsInN0aCIsIndpdGhfcG9zaXRpb25zIiwiaGVpZ2h0IiwiY3JlYXRlIiwiaGwiLCJoJDAiLCJociIsImJhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsInNpbmdsZXRvbiIsImFkZF9taW5fZWxlbWVudCIsImFkZF9tYXhfZWxlbWVudCIsImpvaW4iLCJyaCIsImxoIiwibWluX2VsdCIsInJlbW92ZV9taW5fZWx0IiwiciQwIiwibWVyZ2UiLCJjb25jYXQiLCJzcGxpdCIsInByZXMiLCJwcmVzJDAiLCJlbXB0eSIsImlzX2VtcHR5IiwicmVtb3ZlIiwidW5pb24iLCJ2MiIsInYxIiwicjIkMCIsInIxJDAiLCJpbnRlciIsImRpZmYiLCJjb25zX2VudW0iLCJlJDEiLCJjb21wYXJlX2F1eCIsImUxIiwiZTIiLCJlMSQwIiwiZTIkMCIsImUyJDEiLCJlMSQxIiwiZTIkMiIsImUxJDIiLCJlcXVhbCIsInN1YnNldCIsInMxJDAiLCJzMiQwIiwiZm9sZCIsImNhcmRpbmFsIiwiZWxlbWVudHNfYXV4IiwiZWxlbWVudHMiLCJmaW5kX2xhc3Rfb3B0X2F1eCIsInYwJDAiLCJmaW5kX2xhc3Rfb3B0Iiwib2Zfc29ydGVkX2xpc3QiLCJzdWIiLCJsJDMiLCJ4MCIsImwkNCIsIngwJDAiLCJsJDUiLCJ4MCQxIiwibmwiLCJsZWZ0IiwibWlkIiwibCQyIiwicmlnaHQiLCJvZl9saXN0IiwieDQiLCJsZCIsImxyZCIsInJsZCIsImZpbmRfb3B0IiwibWVtIiwibWluX2JpbmRpbmciLCJyZW1vdmVfbWluX2JpbmRpbmciLCJtJDAiLCJmb3JfYWxsIiwiYWRkX21pbl9iaW5kaW5nIiwiYWRkX21heF9iaW5kaW5nIiwiY29uY2F0X29yX2pvaW4iLCJkJDAiLCJkMSIsImQyIiwiZDIkMCIsImQxJDAiLCJtMSIsIm0yIiwiZXF1YWxfYXV4IiwiY2xlYXIiLCJwdXNoIiwicG9wIiwicG9wX29wdCIsInRvcCIsInRvcF9vcHQiLCJpdGVyJDAiLCJjcmVhdGUkMCIsImNsZWFyJDAiLCJjZWxsIiwibWF0Y2giLCJwZWVrX29wdCIsInRha2UiLCJuZXh0IiwidGFrZV9vcHQiLCJmcm9tIiwiY3JlYXRlJDEiLCJuJDAiLCJuJDEiLCJzdWIkMiIsImxlbmd0aCQwIiwicmVzZXQiLCJyZXNpemUiLCJtb3JlIiwib2xkX3BvcyIsIm9sZF9sZW4iLCJuZXdfbGVuIiwibmV3X2J1ZmZlciIsImFkZF9jaGFyIiwiYWRkX3N1YnN0cmluZyIsIm5ld19wb3NpdGlvbiIsImFkZF9zdHJpbmciLCJkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiIsImJ1ZmZlcl9jcmVhdGUiLCJpbml0X3NpemUiLCJidWZmZXJfY2hlY2tfc2l6ZSIsIm92ZXJoZWFkIiwibWluX2xlbiIsImJ1ZmZlcl9hZGRfY2hhciIsImJ1ZmZlcl9hZGRfc3RyaW5nIiwic3RyX2xlbiIsImJ1ZmZlcl9jb250ZW50cyIsImNoYXJfb2ZfZmNvbnYiLCJjRiIsImJwcmludF9mY29udl9mbGFnIiwic3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IiwiZm9ybWF0dGluZ19saXQiLCJzdHIkMCIsImJwcmludF9mbXR0eSIsImZtdHR5JDEiLCJmbXR0eSQyIiwiZm10dHkkMyIsImZtdHR5JDQiLCJmbXR0eSQ1IiwiZm10dHkkNiIsImZtdHR5JDciLCJmbXR0eSQ4IiwiZm10dHkkOSIsInN1Yl9mbXR0eSIsImZtdHR5JDEwIiwic3ViX2ZtdHR5JDAiLCJmbXR0eSQxMSIsImZtdHR5JDEyIiwiZm10dHkkMTMiLCJmbXR0eSQxNCIsImZtdHR5JDE1Iiwic3ltbSIsImZtdHR5X3JlbF9kZXQiLCJkZSIsImVkIiwiYWYiLCJmYSIsImRlJDAiLCJlZCQwIiwiYWYkMCIsImZhJDAiLCJkZSQxIiwiZWQkMSIsImFmJDEiLCJmYSQxIiwiZGUkMiIsImVkJDIiLCJhZiQyIiwiZmEkMiIsImRlJDMiLCJlZCQzIiwiYWYkMyIsImZhJDMiLCJkZSQ0IiwiZWQkNCIsImFmJDQiLCJmYSQ0IiwiZGUkNSIsImVkJDUiLCJhZiQ1IiwiZmEkNSIsImRlJDYiLCJlZCQ2IiwiYWYkNiIsImZhJDYiLCJkZSQ3IiwiZWQkNyIsImFmJDciLCJmYSQ3IiwiZGUkOCIsImVkJDgiLCJhZiQ4IiwiZmEkOCIsInRyYW5zIiwiamQiLCJkaiIsImdhIiwiYWciLCJkZSQ5IiwiZWQkOSIsImFmJDkiLCJmYSQ5IiwiZGUkMTAiLCJlZCQxMCIsImFmJDEwIiwiZmEkMTAiLCJkZSQxMSIsImVkJDExIiwiYWYkMTEiLCJmYSQxMSIsImRlJDEyIiwiZWQkMTIiLCJhZiQxMiIsImZhJDEyIiwiZGUkMTMiLCJlZCQxMyIsImFmJDEzIiwiZmEkMTMiLCJyZXN0MSIsInJlc3QyIiwicmVzdDEkMCIsInJlc3QyJDAiLCJyZXN0MSQxIiwicmVzdDIkMSIsInJlc3QxJDIiLCJyZXN0MiQyIiwicmVzdDEkMyIsInJlc3QyJDMiLCJyZXN0MSQ0IiwicmVzdDIkNCIsInJlc3QxJDUiLCJyZXN0MiQ1IiwicmVzdDEkNiIsInJlc3QyJDYiLCJyZXN0MSQ3IiwidHkxJDAiLCJyZXN0MiQ3IiwidHkyJDAiLCJyZXN0MSQ4IiwidHkxMiIsInR5MTEiLCJyZXN0MiQ4IiwidHkyMiIsInR5MjEiLCJmNCIsImYyIiwicmVzdDEkOSIsInJlc3QyJDkiLCJyZXN0MSQxMCIsInJlc3QyJDEwIiwicmVzdDEkMTEiLCJyZXN0MiQxMSIsInJlc3QxJDEyIiwicmVzdDIkMTIiLCJyZXN0MSQxMyIsInJlc3QyJDEzIiwidHlwZV9wYWRkaW5nIiwicGFkdHkiLCJwYWR0eSQwIiwidHlwZV9wYWRwcmVjIiwidHlwZV9mb3JtYXQiLCJ0eXBlX2Zvcm1hdF9nZW4iLCJmbXQkMCIsImZtdHR5X3Jlc3QiLCJmbXRfcmVzdCIsImZtdHR5X3Jlc3QkMCIsImZtdF9yZXN0JDAiLCJmbXQkMSIsImZtdF9yZXN0JDEiLCJmbXR0eV9yZXN0JDEiLCJmbXQkMiIsImZtdF9yZXN0JDIiLCJmbXR0eV9yZXN0JDIiLCJmbXQkMyIsImZtdF9yZXN0JDMiLCJmbXR0eV9yZXN0JDMiLCJmbXQkNCIsImZtdF9yZXN0JDQiLCJmbXR0eV9yZXN0JDQiLCJmbXQkNSIsImZtdF9yZXN0JDUiLCJmbXR0eV9yZXN0JDUiLCJwcmVjJDQiLCJmbXQkNiIsImZtdF9yZXN0JDYiLCJwcmVjJDUiLCJwYWQkOSIsInBhZCQxMCIsImZtdHR5X3Jlc3QkNiIsInByZWMkNiIsImZtdCQ3IiwiZm10X3Jlc3QkNyIsInByZWMkNyIsInBhZCQxMSIsInBhZCQxMiIsImZtdHR5X3Jlc3QkNyIsInByZWMkOCIsImZtdCQ4IiwiZm10X3Jlc3QkOCIsInBhZCQxMyIsInBhZCQxNCIsImZtdHR5X3Jlc3QkOCIsImZtdCQ5IiwiZm10X3Jlc3QkOSIsImZtdCQxMCIsImZtdF9yZXN0JDEwIiwiZm10JDExIiwiZm10X3Jlc3QkMTEiLCJmbXQkMTIiLCJmbXR0eV9yZXN0JDkiLCJmbXRfcmVzdCQxMiIsInBhZF9vcHQiLCJmbXQkMTMiLCJmbXR0eV9yZXN0JDEwIiwic3ViX2ZtdHR5MSIsImZtdF9yZXN0JDEzIiwic3ViX2ZtdHR5JDEiLCJwYWRfb3B0JDAiLCJmbXQkMTQiLCJmbXR0eV9yZXN0JDExIiwiZm10X3Jlc3QkMTQiLCJmbXQkMTUiLCJmbXR0eV9yZXN0JDEyIiwiZm10X3Jlc3QkMTUiLCJmbXR0eSQxNiIsImZtdCQxNiIsImZtdF9yZXN0JDE2IiwiZm10dHkkMTciLCJmbXQkMTciLCJmbXRfcmVzdCQxNyIsImZvcm1hdHRpbmdfZ2VuIiwidHlwZV9mb3JtYXR0aW5nX2dlbiIsImZtdHR5X3Jlc3QkMTMiLCJmbXRfcmVzdCQxOCIsImZtdHR5JDE4IiwiZm10JDE4IiwiZm10dHlfcmVzdCQxNCIsImZtdF9yZXN0JDE5IiwiZm10dHkkMTkiLCJmbXQkMTkiLCJmbXR0eV9yZXN0JDE1IiwiZm10X3Jlc3QkMjAiLCJmbXR0eSQyMCIsImZtdCQyMCIsInR5cGVfaWdub3JlZF9wYXJhbSIsImZtdDAiLCJmbXR0eTAiLCJmbXR0eTMiLCJmbXQzIiwiZm10MSQwIiwiZm10dHkyJDAiLCJmbXQyJDAiLCJmbXR0eTMkMCIsImZtdDMkMCIsInR5cGVfaWdub3JlZF9wYXJhbV9vbmUiLCJ0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGkiLCJzdWJfZm10dHlfcmVzdCIsInN1Yl9mbXR0eV9yZXN0JDAiLCJzdWJfZm10dHlfcmVzdCQxIiwic3ViX2ZtdHR5X3Jlc3QkMiIsInN1Yl9mbXR0eV9yZXN0JDMiLCJzdWJfZm10dHlfcmVzdCQ0Iiwic3ViX2ZtdHR5X3Jlc3QkNSIsInN1Yl9mbXR0eV9yZXN0JDYiLCJzdWJfZm10dHlfcmVzdCQ3Iiwic3ViX2ZtdHR5X3Jlc3QkOCIsInN1Yl9mbXR0eV9yZXN0JDkiLCJzdWJfZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eV9yZXN0JDExIiwic3ViX2ZtdHR5X3Jlc3QkMTIiLCJzdWJfZm10dHlfcmVzdCQxMyIsInN1Yl9mbXR0eV9yZXN0JDE0Iiwic3ViMl9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE1Iiwic3ViMl9mbXR0eSQwIiwic3ViX2ZtdHR5X3Jlc3QkMTYiLCJzdWIyX2ZtdHR5JDEiLCJzdWIxX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTciLCJzdWIyX2ZtdHR5JDIiLCJzdWIxX2ZtdHR5JDAiLCJzdWJfZm10dHlfcmVzdCQxOCIsInN1Yl9mbXR0eV9yZXN0JDE5Iiwic3ViX2ZtdHR5X3Jlc3QkMjAiLCJzdWJfZm10dHlfcmVzdCQyMSIsInN1Yl9mbXR0eV9yZXN0JDIyIiwic3ViX2ZtdHR5X3Jlc3QkMjMiLCJzdWJfZm10dHlfcmVzdCQyNCIsInN1Yl9mbXR0eV9yZXN0JDI1Iiwic3ViX2ZtdHR5X3Jlc3QkMjYiLCJyZWNhc3QiLCJmaXhfcGFkZGluZyIsIndpZHRoIiwid2lkdGgkMCIsImZpeF9pbnRfcHJlY2lzaW9uIiwic3RyaW5nX3RvX2NhbWxfc3RyaW5nIiwiZm9ybWF0X29mX2ljb252IiwiZm9ybWF0X29mX2ljb252TCIsImZvcm1hdF9vZl9pY29udmwiLCJmb3JtYXRfb2ZfaWNvbnZuIiwiZm9ybWF0X29mX2Zjb252IiwidHJhbnNmb3JtX2ludF9hbHQiLCJkaWdpdHMiLCJwdXQiLCJjb252ZXJ0X2ludCIsImNvbnZlcnRfaW50MzIiLCJjb252ZXJ0X25hdGl2ZWludCIsImNvbnZlcnRfaW50NjQiLCJjb252ZXJ0X2Zsb2F0IiwiaGV4IiwiYWRkX2RvdF9pZl9uZWVkZWQiLCJpc192YWxpZCIsImNhbWxfc3BlY2lhbF92YWwiLCJmb3JtYXRfY2FtbF9jaGFyIiwic3RyaW5nX29mX2ZtdHR5IiwibWFrZV9wcmludGYkMCIsImskMCIsIm5ld19hY2MiLCJtYWtlX3ByaW50ZiIsIm1ha2VfcGFkZGluZyIsIm1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIiwibWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiIsImFjYyQyIiwiYWNjJDMiLCJhY2MkNCIsImskMSIsImthY2MiLCJrJDIiLCJtYWtlX2lnbm9yZWRfcGFyYW0iLCJtYWtlX2N1c3RvbSQwIiwibWFrZV9pbnZhbGlkX2FyZyIsIm1ha2VfZnJvbV9mbXR0eSQwIiwibWFrZV9mcm9tX2ZtdHR5IiwicCQwIiwicCQxIiwiYXJpdHkkMCIsIm1ha2VfY3VzdG9tIiwib3V0cHV0X2FjYyIsInAkMyIsInAkNCIsInAkNSIsInAkMiIsInN0cnB1dF9hY2MiLCJmYWlsd2l0aF9tZXNzYWdlIiwib3Blbl9ib3hfb2Zfc3RyaW5nIiwiaW52YWxpZF9ib3giLCJwYXJzZV9zcGFjZXMiLCJwYXJzZV9sd29yZCIsImokMCIsImokMSIsInBhcnNlX2ludCIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleHBfZW5kIiwiYm94X3R5cGUiLCJrZnByaW50ZiIsImZwcmludGYiLCJlcHJpbnRmIiwia3NwcmludGYiLCJzcHJpbnRmIiwicHJpbnRlcnMiLCJmaWVsZCIsIm90aGVyX2ZpZWxkcyIsImZpZWxkcyIsInVzZV9wcmludGVycyIsImNvbnYiLCJ0b19zdHJpbmdfZGVmYXVsdCIsImNoYXIkMCIsImxpbmUiLCJjaGFyJDEiLCJsaW5lJDAiLCJmaWxlJDAiLCJjaGFyJDIiLCJsaW5lJDEiLCJmaWxlJDEiLCJjb25zdHJ1Y3RvciIsInRvX3N0cmluZyQwIiwiY29udmVydF9yYXdfYmFja3RyYWNlIiwiYnQiLCJmb3JtYXRfYmFja3RyYWNlX3Nsb3QiLCJzbG90IiwiaW5mbyIsImlzX3JhaXNlIiwicHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSIsIm91dGNoYW4iLCJiYWNrdHJhY2UiLCJwcmludF9yYXdfYmFja3RyYWNlIiwicmF3X2JhY2t0cmFjZSIsInJlZ2lzdGVyX3ByaW50ZXIiLCJmbiIsIm9sZF9wcmludGVycyIsIm5ld19wcmludGVycyIsImVycm9ycyIsImRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbiIsInN0YXR1cyIsImVtcHR5X2JhY2t0cmFjZSIsInRyeV9nZXRfcmF3X2JhY2t0cmFjZSIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24iLCJkZWJ1Z2dlcl9pbl91c2UiLCJleG4kMSIsImV4biQwIiwicmF3X2JhY2t0cmFjZSQwIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiQwIiwibmV3X3N0YXRlIiwiYXNzaWduIiwic3QxIiwic3QyIiwiZnVsbF9pbml0IiwiY29tYmluZSIsImV4dHJhY3QiLCJzZWVkJDAiLCJtYWtlJDIiLCJtYWtlX3NlbGZfaW5pdCIsImNvcHkkMCIsImJpdHMiLCJjdXJ2YWwiLCJuZXd2YWwiLCJuZXd2YWwzMCIsImludGF1eCIsImludCQwIiwiYm91bmQiLCJpbnQkMSIsIm9uZ29pbmdfdHJhdmVyc2FsIiwicGFyYW1zIiwicmFuZG9taXplZF9kZWZhdWx0IiwicHJuZyIsInBvd2VyXzJfYWJvdmUiLCJ4JDAiLCJ4JDEiLCJpbml0aWFsX3NpemUiLCJyYW5kb20iLCJpbnNlcnRfYWxsX2J1Y2tldHMiLCJpbmRleGZ1biIsImlucGxhY2UiLCJvZGF0YSIsIm5kYXRhIiwibnNpemUiLCJuZGF0YV90YWlsIiwiaW5zZXJ0X2J1Y2tldCIsImNlbGwkMCIsImNlbGwkMSIsIm5pZHgiLCJyZXNpemUkMCIsIm9zaXplIiwia2V5X2luZGV4IiwicmVtb3ZlX2J1Y2tldCIsImZpbmRfcmVjIiwibmV4dDEiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfaW5fYnVja2V0IiwicmVwbGFjZV9idWNrZXQiLCJtZW1faW5fYnVja2V0IiwiemVybyIsInVua25vd24iLCJpc19rbm93biIsInBwX2VucXVldWUiLCJ0b2tlbiIsInBwX2NsZWFyX3F1ZXVlIiwicHBfaW5maW5pdHkiLCJwcF9vdXRwdXRfc3RyaW5nIiwicHBfb3V0cHV0X25ld2xpbmUiLCJwcF9vdXRwdXRfc3BhY2VzIiwicHBfb3V0cHV0X2luZGVudCIsImZvcm1hdF9wcF90ZXh0IiwidGV4dCIsImZvcm1hdF9zdHJpbmciLCJicmVha19uZXdfbGluZSIsImFmdGVyIiwiYmVmb3JlIiwicmVhbF9pbmRlbnQiLCJicmVha19saW5lIiwiYnJlYWtfc2FtZV9saW5lIiwicHBfZm9yY2VfYnJlYWtfbGluZSIsInBwX3NraXBfdG9rZW4iLCJmb3JtYXRfcHBfdG9rZW4iLCJ0YWJzIiwiYWRkX3RhYiIsImxzIiwidGFnX25hbWUiLCJtYXJrZXIiLCJicmVha3MiLCJmaXRzIiwib2ZmIiwib2ZmJDAiLCJpbnNlcnRpb25fcG9pbnQiLCJ0YWJzJDAiLCJmaXJzdCIsInRhaWwiLCJoZWFkIiwidGFiIiwib2ZmJDEiLCJpbnNlcnRpb25fcG9pbnQkMCIsIndpZHRoJDEiLCJib3hfdHlwZSQwIiwidGJveCIsInRhZ19uYW1lJDAiLCJtYXJrZXIkMCIsImFkdmFuY2VfbGVmdCIsInBlbmRpbmdfY291bnQiLCJzaXplJDAiLCJlbnF1ZXVlX2FkdmFuY2UiLCJ0b2siLCJlbnF1ZXVlX3N0cmluZ19hcyIsImVucXVldWVfc3RyaW5nIiwiaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIiwicXVldWVfZWxlbSIsInNldF9zaXplIiwibGVmdF90b3RhbCIsInNjYW5fcHVzaCIsImVsZW0iLCJwcF9vcGVuX2JveF9nZW4iLCJicl90eSIsInBwX29wZW5fc3lzX2JveCIsInBwX2Nsb3NlX3RhZyIsInBjdCIsInBvdCIsIm1jdCIsIm1vdCIsInBwX3Jpbml0IiwiY2xlYXJfdGFnX3N0YWNrIiwicHBfZmx1c2hfcXVldWUiLCJwcF9wcmludF9hc19zaXplIiwiaXNpemUiLCJwcF9wcmludF9zdHJpbmciLCJwcF9wcmludF9ib29sIiwicHBfcHJpbnRfY2hhciIsInBwX3ByaW50X2ZsdXNoIiwicHBfZm9yY2VfbmV3bGluZSIsInBwX3ByaW50X2N1dCIsImRpc3BsYXlfbmV3bGluZSIsImJsYW5rX2xpbmUiLCJkaXNwbGF5X2JsYW5rcyIsImRlZmF1bHRfcHBfbWFya19vcGVuX3RhZyIsImRlZmF1bHRfcHBfbWFya19jbG9zZV90YWciLCJkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnIiwiZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWciLCJwcF9tYWtlX2Zvcm1hdHRlciIsInBwX3F1ZXVlIiwic3lzX3RvayIsInNjYW5fc3RhY2siLCJwcF9tYXJnaW4iLCJvdXRwdXQiLCJmbHVzaCIsInBwZiIsImZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCIsInBwX2J1ZmZlcl9zaXplIiwicHBfbWFrZV9idWZmZXIiLCJzdGRfZm9ybWF0dGVyIiwiZXJyX2Zvcm1hdHRlciIsImZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIiLCJwcF92Iiwib3B0JDAiLCJwcF9zZXAiLCJvcHQkMSIsIm5vbmUiLCJjb21wdXRlX3RhZyIsInRhZ19hY2MiLCJvdXRwdXRfZm9ybWF0dGluZ19saXQiLCJvdXRwdXRfYWNjJDAiLCJidHkiLCJmJDAiLCJwJDYiLCJwJDciLCJmcHJpbnRmJDAiLCJmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzIiwicmVnaXN0ZXJfZXhjZXB0aW9uIiwiYW55IiwiZHVtbXkiLCJvcGVyYXRvciIsImRlc2MiLCJ2eCIsInZ5IiwiY2hpbGQiLCJhZGRfaWR4IiwicGFyYW0iLCJyZW1faWR4X3JlYyIsInNlbGYiLCJyZW1faWR4IiwidHJhY2VfaWR4IiwidHJhY2VfaWR4JDAiLCJpZHgkMCIsIm1vdl9pZHhfcmVjIiwib2xkaWR4IiwibmV3aWR4IiwibW92X2lkeCIsImdldF9pZHhfcmVjIiwiZ2V0X2lkeCIsImludmFsaWRhdGVfbm9kZSQwIiwic2Vuc2l0aXZpdHkiLCJub2RlIiwic2Vuc2l0aXZpdHkkMCIsImludmFsaWRhdGVfdHJhY2UiLCJpbnZhbGlkYXRlX25vZGUiLCJ6IiwieSQwIiwieiQwIiwieSQxIiwieCQyIiwiYWN0aXZlIiwiY2FsbHN0YWNrIiwiZG9faW52YWxpZGF0ZSIsInVuc2FmZSIsImFjcXVpcmUiLCJyZWxlYXNlIiwic3ViX3JlbGVhc2UiLCJmYWlsdXJlcyQwIiwib3JpZ2luJDEiLCJvcmlnaW4kMCIsInRyYWNlIiwidHJhY2UkMCIsIngkNCIsIngkNSIsIngkNiIsInJldmlkeCIsInNlbGYkMCIsInNlbGYkMSIsInNlbGYkMiIsInNlbGYkMyIsImludGVybWVkaWF0ZSIsImZhaWx1cmVzJDQiLCJjaGlsZCQwIiwieCQzIiwid3J0Iiwic2VsZiQ0Iiwic3ViX2FjcXVpcmUiLCJlbnRyaWVzIiwidHJhY2UkMSIsImVudHJpZXMkMCIsImVudHJpZXMkMSIsImRvYyIsImFjdGl2YXRlX3RyYWNpbmciLCJ0biIsInN1Yl9pc19kYW1hZ2VkIiwic3ViX3NhbXBsZSIsImYkMSIsInJlc3VsdCQwIiwib25faW52YWxpZGF0ZSIsInJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIiwicGFyYW0kMCIsImZhaWx1cmVzJDEiLCJxdWV1ZSQwIiwidmFsdWUkMCIsImZsdXNoX29yX2ZhaWwiLCJtYWluX2V4biIsImZhaWx1cmVzIiwibWFwX3JlZHVjZSIsImluaiIsIml0ZW1zIiwicGx1cyIsImNvbnNfbW9ub2lkIiwieHMiLCJ4cyQwIiwidiQwIiwieHMkMSIsInYkMSIsInYkMiIsImNvbnNfbW9ub2lkJDAiLCJub3Rfb3JpZ2luIiwibWFrZSQzIiwic2V0X3BhcmVudCIsIm1ha2Vfbm9kZSIsInNldCIsImJpbmRpbmciLCJyYXdfaW52YWxpZGF0ZSIsImFwcGVuZCIsImdldCQyIiwiaW52YWxpZGF0ZV9iaW5kaW5nIiwic2V0X2JpbmRpbmciLCJ1bnNldCIsInNtYWxsZXJfZWxsIiwic21pbiIsInNtYXgiLCJkaXNiYWxhbmNlZCIsInJlcGFyZW50Iiwib2xkY2hpbGQiLCJuZXdjaGlsZCIsInJvdF9sZWZ0JDAiLCJ2ZXJzaW9uIiwic24iLCJybiIsInJsJDAiLCJiYWxhbmNlIiwiYmFsYW5jZSQwIiwicm90X2xlZnQiLCJyb3RfcmlnaHQkMCIsImxuIiwibHIkMCIsInJvdF9yaWdodCIsImluY19sZWZ0IiwiaW5jX3JpZ2h0Iiwic2wiLCJzciIsImNvbXB1dGVfc3ViX3NpemUiLCJyZXNldF92ZXJzaW9uIiwicmViYWxhbmNlIiwidmVyc2lvbiQwIiwiZXh0cmFjdF9iaW5kaW5ncyIsInRyZWUiLCJybm9kZSIsImZ1bGxfcmVidWlsZCIsInJlZCIsImJpbmRpbmdzIiwiYmluZGluZ3MkMCIsInJlZHVjdGlvbiIsImJpbmRpbmckMCIsInJlZHVjdGlvbiQwIiwiYWdncmVnYXRlIiwiYWdncmVnYXRlJDAiLCJleHRyYWN0X2ZyaW5nZSIsImluY3JlbWVudGFsX3JlYnVpbGQiLCJmcmluZ2UiLCJmcmluZ2UkMCIsImZyaW5nZSQxIiwiZXZhbCQwIiwib3BhcXVlIiwibWFwX3JlZHVjZSQwIiwibWFwcGVyIiwibW9ub2lkIiwic291cmNlIiwicHJpbSQwIiwibGVmdF9tb3N0IiwicmlnaHRfbW9zdCIsImF1eCQwIiwid2Fsa19yb290IiwicGFyZW50JDAiLCJlbXB0eSQwIiwiZWxlbWVudCIsIm1heGkiLCJyYW5rIiwiY29uY2F0JDAiLCJtYXNrX29sZCIsIm1hc2tfbmV3IiwibWFza19ib3RoIiwiaXNfc2hhcmVkIiwiaXNfbm90X3NoYXJlZCIsImlzX2JvdGgiLCJpc19vbGQiLCJpc19uZXciLCJzZXRfYm90aCIsImdldF9pbmRleCIsIndpdGhfaW5kZXhfbmV3IiwidW5tYXJrIiwibWFya2VkIiwic2hhcmVkIiwiYmxvY2tlZCIsIm1rX3N0YXRzIiwibmV3X21hcmtlZCIsInN0YXRzIiwibmV3X3NoYXJlZCIsIm5ld19ibG9ja2VkIiwiYmxvY2siLCJtYXNrIiwibWFyayIsIm1hcmskMCIsImVucXVldWUiLCJkZXF1ZXVlIiwidHJhdmVyc2UxIiwidHJhdmVyc2UiLCJzb2xkIiwic25ldyIsInFvbGQiLCJxbmV3Iiwib2xkX3N0YXRzIiwidHIiLCJuZXdfc3RhdHMiLCJ1bnNhZmVfdHJhdmVyc2UiLCJvbGRfcm9vdCIsIm5ld19yb290Iiwib2xkX3F1ZXVlIiwibmV3X3F1ZXVlIiwicmVzdG9yZSIsIm5leHRfc2hhcmVkX2luZGV4Iiwic3QiLCJ1bmJsb2NrIiwidCQwIiwidW5tYXJrX29sZCIsImluZGV4JDAiLCJkcm9wcGVkX2xlYWYiLCJhJDAiLCJiJDAiLCJpbmRleCQxIiwiaW5kZXgkMiIsImRyb3BwZWRfam9pbiIsInByZXBhcmVfc2hhcmVkIiwidW5tYXJrX25ldyIsIm5vX2Ryb3BwZWQiLCJnZXRfZHJvcHBlZCIsInhvbGQiLCJ0bmV3IiwidHJhdmVyc2FsIiwibmJfZHJvcHBlZCIsIm5iX3NoYXJlZCIsIm5iX2Ryb3BwZWQkMCIsInhsZWFmIiwieGpvaW4iLCJldmFsJDEiLCJvdGhlciIsIm1ha2UkNCIsInJlZHVjZSIsInVwZGF0ZSQwIiwibmV3X3RyZWUiLCJvbGRfdHJlZSIsInVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQiLCJkcm9wcGVkIiwiZm9sZF9kcm9wcGVkIiwiYm91bmQkMCIsInB1cmVfbWFwX3JlZHVjZSIsImZvbGRfbW9ub2lkIiwic2VxIiwicmVkdWNlJDAiLCJyZWR1Y2VyIiwicmVkdWNlciQwIiwidHJhbnNmb3JtX2xpc3QiLCJvZl9saXN0JDAiLCJ0b19saXN0JDAiLCJsd2RfZW1wdHkiLCJsd2RfbW9ub2lkIiwibWFwJDMiLCJmaWx0ZXJfbWFwJDAiLCJzZWxlY3QiLCJiaW5kJDAiLCJsaWZ0Iiwib3B0cyIsInR5cGUiLCJmdW5jIiwiaXNfcHVyZV9lbGVtZW50IiwiZXh0cmFjdF9wdXJlX2VsZW1lbnQiLCJleHRyYWN0X3B1cmVfZWxlbWVudHMiLCJwcmVwYXJlX2NvbCIsImNvbCIsImltcHVyZSIsInB1cmUiLCJjb25zdW1lX2NoaWxkcmVuIiwiY2hpbGRfbm9kZSIsImNoaWxkX2pvaW4iLCJqdl9hcHBlbmQiLCJqdl9iZWZvcmUiLCJqdl9yZW1vdmUiLCJqdl9jb250YWlucyIsImNvbnRhaW5zX2ZvY3VzIiwiZWwiLCJ1cGRhdGVfY2hpbGRyZW4iLCJjaGlsZHJlbiIsInNjaGVkdWxlX2Zvcl9yZW1vdmFsIiwicHJlc2VydmVfZm9jdXMiLCJ1cGRhdGUiLCJzaGlmdF9zaWJsaW5ncyIsInNpYmxpbmciLCJyZW1vdmVfY2hpbGQiLCJwdXJlX3VuaXQiLCJkdW1teV9rdl9hdCIsImF0dGFjaF9hdHRyaWJzIiwiYXR0cmlicyIsInNldF9rdiIsInVuc2V0X2t2Iiwic2V0X2x3ZF9hdCIsInByZXYiLCJhdCIsInBhaXIiLCJhdHMiLCJzZXRfYXQiLCJrdiIsImxpc3RlbiQwIiwiYXR0YWNoX2V2ZW50cyIsImV2ZW50cyIsImNhY2hlZCIsInYkNCIsInN0aCQwIiwiZXYiLCJzdGgkMSIsIm9uX2NyZWF0ZSIsImltcHVyZV9hdCIsImF0JDAiLCJpbXB1cmVfZXYiLCJldiQwIiwiaW1wdXJlX2NoaWxkcmVuIiwiY2hpbGRyZW4kMCIsImNoaWxkcmVuJDEiLCJjaGlsZHJlbiQyIiwiY29ucyQxIiwiY3MiLCJ2b2lkX2NvbnMiLCJidXR0b24kMCIsImRpdiQxIiwiZm9ybSQwIiwiaW1nJDAiLCJpbnB1dCQxIiwibGFiZWwkMCIsIm9wdGlvbiQwIiwic2VsZWN0JDAiLCJzcGFuJDEiLCJzaHVmZmxlIiwicmFuZF9pbnQiLCJpdGVtX3RvX3N0cmluZyIsImlzX25hbiIsIm9mX3N0cmluZ19vcHQiLCJpbnRfb2ZfY29sb3IiLCJjb2RlX29mX3N0eWxlIiwic3RyaW5nX29mX3N0eWxlIiwic3R5bGVfb2ZfdGFnIiwibWFya19vcGVuX3N0eWxlIiwibWFya19jbG9zZV9zdHlsZSIsIm1hcmtfb3Blbl9zdGFnIiwib3JfZWxzZSIsInN0eWxlJDAiLCJtYXJrX2Nsb3NlX3N0YWciLCJzZXRfY29sb3JfdGFnX2hhbmRsaW5nIiwiZnVucyIsImZ1bnMkMCIsInNwcmludGYkMCIsImZvcm1hdCIsInNwcmludGYkMSIsImNvbXBhcmUkMSIsIm9mX3N0cmluZyQwIiwib2ZfZmxvYXQiLCJzeW1ib2wkMTAiLCJtYXBfb3IiLCJpc19zb21lJDEiLCJmbGF0X21hcCIsInN5bWJvbF9iaW5kJDAiLCJpdGVyJDEiLCJ2YWx1ZSQzIiwidG9fbGlzdCQyIiwic3ltYm9sJDExIiwic3ltYm9sJDEyIiwiZ2V0X2V4biIsImdldF9vciIsImZsYXRfbWFwJDAiLCJzeW1ib2wkMTMiLCJzeW1ib2xfYmluZCQxIiwic3VmIiwiY2hlY2siLCJzaW5nbGUiLCJkZWVwIiwibWlkZGxlIiwiaXNfZW1wdHkkMSIsImNvbnMkMiIsInokMSIsIm1pZGRsZSQwIiwieiQyIiwieSQzIiwieiQzIiwieiQ0IiwieSQ0IiwicSQwIiwieSQyIiwidGFrZV9iYWNrX2V4biIsInEkMSIsInRha2VfYmFjayIsInNpemVfZGlnaXQiLCJjb250ZW50X3JlY3QiLCJ0YXJnZXQkMCIsInN0cmluZ19vZl9ib3giLCJvYnNlcnZlJDAiLCJib3giLCJib3gkMCIsImNyZWF0ZSQ3IiwiY2FsbGJhY2siLCJjYWxsYmFjayQwIiwib2JzZXJ2ZXIiLCJvZl9uYXZpZ2F0b3IiLCJpbWdfdG9fanYiLCJpbWciLCJ0b19qdiIsImFydHdvcmsiLCJzZXRfbWV0YWRhdGEiLCJtZXRhZGF0YSIsIm5leHRfdHJhY2siLCJwcmV2aW91c190cmFjayIsInNldF9hY3Rpb25faGFuZGxlciIsImFjdGlvbiIsInNldF9wb3NpdGlvbl9zdGF0ZSIsImR1cmF0aW9uIiwicGxheWJhY2tfcmF0ZSIsInBvc2l0aW9uIiwibWF5YmVfZmxvYXQiLCJkdXJhdGlvbiQwIiwicGxheWJhY2tfcmF0ZSQwIiwicG9zaXRpb24kMCIsInN0YXRlX2RpY3QiLCJzdWJtaXQiLCJwYXR0ZXJuIiwicGVyc2lzdCIsIm1hbmFnZXIiLCJ0ZWUiLCJvZl9zdHJpbmckMSIsInRvX3N0cmluZyQzIiwidG9fcHgiLCJnZXRfZm9udF9zaXplX2luX3B4IiwiZm9udF9zaXplIiwiZm9udF9zaXplJDAiLCJtYXAzIiwidHJpcGxlIiwibWFrZSQ1Iiwic2V0X2V4biIsImdldF9leG4kMCIsIm1ha2UkNiIsIkMiLCJsYW5nIiwidG9fanN0ciQxIiwib2ZfanN0ciQwIiwianN0ciIsImtleXMiLCJjaGVja19rZXkiLCJsb2NhbF9zdG9yYWdlIiwic3RvcmUiLCJmZXRjaCQwIiwiZW5jb2RlZF92YWx1ZSIsImluaXRpYWxfdmFsdWUiLCJtYWtlX3BlcnNpc3RlbnRfdmFyIiwidmFyJDEiLCJuZXdfdmFsdWUiLCJ2YXJfZiIsImtleSQwIiwiZm9yX3NlY3Rpb24iLCJsb2ciLCJ0b19hdCIsImVtcHR5JDUiLCJ0b19hdCQwIiwiaWQkMCIsImNsYXNzZXMiLCJ1bmlvbiQwIiwiYXR0cnMiLCJhZGQkMSIsImF0X25hbWUiLCJhZGRfYm9vbCIsImFkZF9vcHQiLCJtYXBfY29sIiwib2ZfYXQiLCJjb25zJDMiLCJjbGFzcyQyIiwidiQ1Iiwic3ltYm9sJDE0IiwidiQ2IiwiaGFuZGxlciQwIiwiYXBwbHlfc3RhdGUiLCJ3aXRoX3N0YXRlIiwiUyIsInZfc3RhdGUiLCJnZXRfc3RhdGUiLCJzZXRfc3RhdGUiLCJlbHQiLCJmdW5jJDAiLCJhdCQxIiwiaCQxIiwibmV4dCQwIiwidHdvX3N0YXRlIiwianNfc2Nyb2xsIiwibWFrZSQ3Iiwic2Nyb2xsX3RhcmdldCIsImFjdGl2ZV9jbGFzcyIsIm9uX2NsaWNrIiwiY29udHJvbHMiLCJvbl93aGVlbCIsImVsdCQwIiwibWFrZV9oYW5kbGVyIiwidmFsdWVfY2hhbmdlX2V2ZW50IiwiZGVmYXVsdF92YWx1ZSIsIm9uX2NoYW5nZSIsIm1ha2VfaW5wdXQiLCJ2YWxpZGF0ZSIsInBhdHRlcm4kMCIsInJlcXVpcmVkIiwidHlwZSQxIiwidmFsaWRhdGUkMCIsInRleHRfaW5wdXQiLCJwbGFjZWhvbGRlciQwIiwicGFzc3dvcmRfaW5wdXQiLCJzdWJtaXQkMCIsImZpZWxkJDAiLCJzZXR0ZXIiLCJjcmVhdGUkOCIsIkZvcm0iLCJvbl9zdWJtaXQiLCJlbHRzIiwiZWx0cyQwIiwib25fc3VibWl0JDAiLCJuYW1lJDAiLCJiYXNlX25hbWUiLCJtYWtlJDgiLCJuYW1lJDEiLCJ2YXIkMCIsIm1ha2UkOSIsIm9wdGlvbnMiLCJvcHRpb25zJDAiLCJzZWxlY3RlZCIsIm5hbWUkMiIsIm1ha2UkMTAiLCJtYWtlX2NoZWNrIiwibGFiZWwiLCJjaGVja2VkIiwibGJsIiwiY2hlY2tlZCQxIiwibWFrZV9hbGwiLCJhbGwiLCJxMSIsInEyIiwiZXZpY3Rfb25lIiwib25fZXZpY3QiLCJldmljdF9xMiIsImV2aWN0X3EyJDAiLCJldmljdF9xMSIsInZpc2l0ZWQiLCJ0JDEiLCJldmljdCIsImluc2VydCIsIm9uX2luc2VydCIsInZpc2l0ZWQkMCIsInYkNyIsImNzc19zaXplIiwidG9faGVhZGVyIiwiY2VsbHMiLCJzdHlsZSQxIiwidGVtcGxhdGUiLCJzdHlsZSQyIiwiaGVhZGVyIiwicm93X2hlaWdodCIsImxvZ2dlciIsIm1ha2UkMTEiLCJ1aV90YWJsZSIsInJlbmRlciIsImZldGNoIiwidG90YWxfaXRlbXMiLCJjb250ZW50X2RpdiIsIndyYXBwZXJfZGl2Iiwicm93X3NpemUiLCJoZWlnaHRfbiIsImhlaWdodCQwIiwidGFibGUiLCJyb3dfaW5kZXgiLCJ1bmxvYWQiLCJyb3ciLCJyb3dfZGF0YSIsIm5ld19jYWNoZSIsImNhY2hlX3JlZiIsImluZGV4ZXMiLCJjYWNoZSIsImxvYWQiLCJkYXRhJDAiLCJpbnNlcnRlZCIsImNhY2hlJDAiLCJ0b19sb2FkIiwidG9fbG9hZCQwIiwidGFibGVfaGVpZ2h0IiwiY29tcHV0ZV92aXNpYmxlX3Jvd3MiLCJsYXN0X3Njcm9sbF95IiwiZGl2Iiwic2Nyb2xsX3kkMCIsImRpcmVjdGlvbiIsInZpc2libGVfaGVpZ2h0IiwibnVtYmVyX29mX3Zpc2libGVfcm93cyIsImZpcnN0X3Zpc2libGVfcm93IiwibGFzdF92aXNpYmxlX3JvdyIsImJsZWVkaW5nIiwiYmxlZWRpbmckMCIsImxhc3QiLCJwcmVwYXJlIiwiY3VycmVudF9yb3ciLCJyb3ckMCIsInZpc2libGVfcm93cyIsInBvcHVsYXRlX29uX3Njcm9sbCIsInJlcG9wdWxhdGVfZGVwcyIsIm1ha2Vfc3BhY2VyIiwicmVuZGVyJDAiLCJyZW5kZXJlZF9yb3ciLCJyb3dzIiwic3BhY2VyIiwicyQxIiwidGFibGVfYm9keSIsImZpcnN0X3NwYWNlciIsImxhc3Rfc3BhY2VyIiwidGFibGVfaGVhZGVyIiwicmVjdCIsInJvd3MkMCIsInNjcm9sbF9oYW5kbGVyIiwibGFzdF91cGRhdGUiLCJ0aW1lb3V0IiwicmVzZXRfdGlja2VyIiwiZGVib3VuY2luZ19pbnRlcnZhbCIsIm9uX2NyZWF0ZSQwIiwic2Nyb2xsX3RhcmdldCQwIiwic2Nyb2xsX3RhcmdldCQxIiwid3JhcHBlciIsImdyaWRfc3R5bGUiLCJhdCQyIiwidGFibGUkMCIsImxleF9lcnJvciIsImVycm9yX3BvcyIsImNudW0iLCJlbnVtJDAiLCJzdHJpbmcybnVtIiwidXBkYXRlX3BvcyIsImludF9vZl9oZXhjaGFyIiwidXRmOF9vZl9jb2RlIiwidSIsIm1heF91c2VkX2JpdHMiLCJ1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIiwiaGlnaCIsImxvdyIsImhpZ2gkMCIsImxvdyQwIiwiZXNjYXBpbmdfZXJyb3IiLCJvZmZzIiwidW5lc2NhcGVfc3RyaW5nIiwidTEiLCJ1MiIsInJlYWQkMCIsIm9jYW1sX2xleF9yZWFkX3JlYyIsIm9jYW1sX2xleF9zdGF0ZSIsIm9jYW1sX2xleF9zdGF0ZSQwIiwib2NhbWxfbGV4X3N0YXRlJDEiLCJyZWFkX2NvbW1lbnQiLCJyZWFkX2NvbW1lbnQkMCIsIm9jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIiwiY3JlYXRlX2Zyb21fbGV4YnVmIiwiZW1zZyIsImVjaGFyIiwic2NoYXIiLCJlbGluZSIsImxvZzIiLCJiaXRzJDAiLCJtYXhfanNvbl9pbnQiLCJzdHJpbmdfb2ZfZmxvYXRfanNvbiIsImlzX2ludCIsImludF92YWx1ZSIsInRva2VuX2Vycm9yIiwicyQyIiwianNvbl92YWx1ZSIsInRva2VuX3ZhbHVlIiwib2JqZWN0X3ZhbHVlX3N0YXJ0IiwiYXJyYXlfdmFsdWVfc3RhcnQiLCJ2YXJpYW50X3ZhbHVlX3N0YXJ0IiwidHVwbGVfdmFsdWVfc3RhcnQiLCJhcnJheV92YWx1ZXNfc3RhcnQiLCJ0b2skMCIsImFycmF5X3ZhbHVlcyIsIm9iamVjdF92YWx1ZXNfc3RhcnQiLCJjb2xvbl92YWx1ZSIsIm9iamVjdF92YWx1ZXMiLCJrZXlfY29sb25fdmFsdWUiLCJ0dXBsZV92YWx1ZXMiLCJ2YXJpYW50X2VuZCIsImRlY29kZSIsImVyciQwIiwibmliYmxlX3RvX2hleCIsImFkZF9oZXhfYnl0ZSIsImVzY2FwZSIsInRvX2pzb25fc3RyaW5nIiwiYWRkX2NoYXIkMCIsImFkZF9zdHJpbmckMCIsImFkZF9xdW90ZV9zdHJpbmciLCJwcF9saXN0IiwicHB4Iiwib3V0IiwianNvbiIsImZvcm1hdF9maWVsZCIsImpzb24kMCIsInMkMyIsInByZXR0eV9wcmludCIsInByZXR0eV9wcmludF90b19zdHJpbmciLCJwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCIsImVycm9yJDEiLCJ0b19hc3NvYyIsIm51bGwkMSIsInRva2VuX3RvX3N0cmluZyIsInJlYWRfanNvbiIsInJlYWRfanNvbl9lcnJvcl9pbmZvIiwiZXJyX2luZm8iLCJqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIiwianNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8iLCJpbmMiLCJqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyIsImZpbGVuYW1lIiwianNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wIiwic3RyZWFtIiwicmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIiwiZmluIiwic3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyIsImpzb25fdG9fY2hhbm5lbF9mbXQiLCJlb2wiLCJpbmNyIiwicHNlcCIsImFkZF9pbnQiLCJhZGRfZmxvYXQiLCJwc2VwJDAiLCJsZHIkMSIsImpzb25fbGlzdCIsImxkciQyIiwibGRyIiwianNvbl9hc3NvYyIsImxkciQwIiwibmV3c2VwIiwianNvbl90b19jaGFubmVsIiwianNvbl90b19maWxlX2V4biIsImpzb25fdG9fYnVmZmVyIiwianNvbl90b19zdHJpbmciLCJqc29uX2Vycm9yIiwiZXJyb3JfdG9fc3RyaW5nIiwiZXJyb3JfaW5mbyIsImZuYW1lIiwibG51bSIsImxudW0kMCIsImxudW0kMSIsImZuYW1lJDAiLCJsb2MiLCJhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyIsImZyb21fc3RyaW5nIiwidG9fc3RhbmRhcmQiLCJ0cGwiLCJqb3B0Iiwic3RkIiwibGV4X3N0cmluZyIsImxleF9udW1iZXIiLCJsZXhfaW50ZWdlciIsImxleF9sYXJnZWludCIsImxleF92YXJpYW50IiwibGV4X3R1cGxlIiwiY29tbWVudF9jaGVjayIsIm51bWJlcl90b19zdHJpbmciLCJsYXJnZWludCIsImludGVnZXIiLCJudWxsJDIiLCJzdHJpbmckMCIsImJvb2wiLCJhc3NvYyIsImxpc3QiLCJ0dXBsZSIsIm51bWJlciIsImFycmF5X3N0YXJ0IiwiYXJyYXlfZW5kIiwib2JqZWN0X3N0YXJ0Iiwib2JqZWN0X2VuZCIsInR1cGxlX3N0YXJ0IiwidHVwbGVfZW5kIiwidmFyaWFudF9zdGFydCIsIm5hbWUkMyIsImxleF9zdHJpbmckMCIsImxleF9udW1iZXIkMCIsImxleF9pbnRlZ2VyJDAiLCJsZXhfbGFyZ2VpbnQkMCIsImxleF92YXJpYW50JDAiLCJsZXhfdHVwbGUkMCIsImNvbW1lbnRfY2hlY2skMCIsIm51bWJlcl90b19zdHJpbmckMCIsImxhcmdlaW50JDAiLCJpbnRlZ2VyJDAiLCJudWxsJDMiLCJzdHJpbmckMSIsImJvb2wkMCIsImFzc29jJDAiLCJsaXN0JDAiLCJ0dXBsZSQwIiwidmFyaWFudCQwIiwibnVtYmVyJDAiLCJhcnJheV9zdGFydCQwIiwiYXJyYXlfZW5kJDAiLCJvYmplY3Rfc3RhcnQkMCIsIm9iamVjdF9lbmQkMCIsInR1cGxlX3N0YXJ0JDAiLCJ0dXBsZV9lbmQkMCIsInZhcmlhbnRfc3RhcnQkMCIsInZhcmlhbnRfZW5kJDAiLCJuYW1lJDQiLCJmcm9tX3N0cmluZyQwIiwidG9fc3RyaW5nJDUiLCJsZXhfc3RyaW5nJDEiLCJsZXhfbnVtYmVyJDEiLCJsZXhfaW50ZWdlciQxIiwibGV4X2xhcmdlaW50JDEiLCJsZXhfdmFyaWFudCQxIiwibGV4X3R1cGxlJDEiLCJjb21tZW50X2NoZWNrJDEiLCJudW1iZXJfdG9fc3RyaW5nJDEiLCJsYXJnZWludCQxIiwiaW50ZWdlciQxIiwibnVsbCQ0Iiwic3RyaW5nJDIiLCJib29sJDEiLCJhc3NvYyQxIiwibGlzdCQxIiwidHVwbGUkMSIsInZhcmlhbnQkMSIsIm51bWJlciQxIiwiYXJyYXlfc3RhcnQkMSIsImFycmF5X2VuZCQxIiwib2JqZWN0X3N0YXJ0JDEiLCJvYmplY3RfZW5kJDEiLCJ0dXBsZV9zdGFydCQxIiwidHVwbGVfZW5kJDEiLCJ2YXJpYW50X3N0YXJ0JDEiLCJ2YXJpYW50X2VuZCQxIiwibmFtZSQ1IiwidG9fanN0ciQyIiwib2ZfanN0ciQxIiwib2ZfanYiLCJqdiIsInJhbmRvbV9zdGF0ZSIsIm5ld191dWlkX3Y0IiwieW9qc29uX29mX3N0cmluZyIsInlvanNvbl9vZl9pbnQiLCJ5b2pzb25fb2Zfb3B0aW9uIiwieW9qc29uX29mX2EiLCJ5b2pzb25fb2ZfbGlzdCIsImxzdCIsInJlY29yZF9jaGVja19leHRyYV9maWVsZHMiLCJvZl95b2pzb25fZXJyb3IiLCJ3aGF0IiwieW9qc29uIiwic3RyaW5nX29mX3lvanNvbiIsImludF9vZl95b2pzb24iLCJvcHRpb25fb2ZfeW9qc29uIiwiYV9vZl95b2pzb24iLCJsaXN0X29mX3lvanNvbiIsInJldl9sc3QiLCJzdGFnX25vX2FyZ3MiLCJuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSIsImVtcHR5X2xpc3RfaW52YWxpZF9zdW0iLCJ1bmV4cGVjdGVkX3N0YWciLCJyZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIiwicmV2X2ZsZF9uYW1lcyIsImZsZF9uYW1lc19zdHIiLCJyZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyIsInJlY29yZF9leHRyYV9maWVsZHMiLCJyZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIiwiZmllbGRzJDAiLCJyZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIiwidW5kZWZpbmVkJDAiLCJyZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20iLCJzeW1ib2wkMTUiLCJqc3RyX29mX21ldGhvZCIsInVzZXJfb2ZfeW9qc29uIiwiZmllbGRfeW9qc29ucyIsIm5hbWVfZmllbGQiLCJzZXJ2ZXJfaWRfZmllbGQiLCJzZXJ2ZXJfbmFtZV9maWVsZCIsImlkX2ZpZWxkIiwiZHVwbGljYXRlcyIsImV4dHJhIiwiZmllbGRfeW9qc29uIiwiZmllbGRfbmFtZSIsImZ2YWx1ZSIsImZ2YWx1ZSQwIiwiZnZhbHVlJDEiLCJmdmFsdWUkMiIsInNlcnZlcl9uYW1lX3ZhbHVlIiwiaWRfdmFsdWUiLCJzZXJ2ZXJfaWRfdmFsdWUiLCJuYW1lX3ZhbHVlIiwieW9qc29uX29mX3VzZXIiLCJ2X2lkIiwidl9zZXJ2ZXJfbmFtZSIsInZfc2VydmVyX2lkIiwidl9uYW1lIiwiYm5kcyIsImFyZyQwIiwiYm5kcyQwIiwiYXJnJDEiLCJibmRzJDEiLCJhcmckMiIsImJuZHMkMiIsInBhcmFtc19vZl95b2pzb24iLCJ1c2VybmFtZV9maWVsZCIsInB3X2ZpZWxkIiwicHdfdmFsdWUiLCJ1c2VybmFtZV92YWx1ZSIsInlvanNvbl9vZl9wYXJhbXMiLCJ2X3B3Iiwidl91c2VybmFtZSIsInJlc3BvbnNlX29mX3lvanNvbiIsInVzZXJfZmllbGQiLCJhY2Nlc3NfdG9rZW5fZmllbGQiLCJhY2Nlc3NfdG9rZW5fdmFsdWUiLCJ1c2VyX3ZhbHVlIiwieW9qc29uX29mX3Jlc3BvbnNlIiwidl9hY2Nlc3NfdG9rZW4iLCJ2X3VzZXIiLCJlbmRwb2ludCIsImltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24iLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIiwiaW1hZ2VfYmx1cl9oYXNoZXNfb2ZfeW9qc29uIiwicHJpbWFyeV9maWVsZCIsInByaW1hcnlfdmFsdWUiLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoZXMiLCJ2X3ByaW1hcnkiLCJibmQiLCJ0eXBlX29mX3lvanNvbiIsInlvanNvbl9vZl90eXBlIiwidHlwZV9zdHJfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGVfc3RyIiwidHMiLCJ0X29mX3lvanNvbiIsInNvcnRfbmFtZV9maWVsZCIsInBhdGhfZmllbGQiLCJhbGJ1bV9pZF9maWVsZCIsInBhcmVudF9pZF9maWVsZCIsImltYWdlX2JsdXJfaGFzaGVzX2ZpZWxkIiwidHlwZV9maWVsZCIsImNvbGxlY3Rpb25fdHlwZV9maWVsZCIsImZ2YWx1ZSQzIiwiZnZhbHVlJDQiLCJmdmFsdWUkNSIsImZ2YWx1ZSQ2IiwiZnZhbHVlJDciLCJmdmFsdWUkOCIsInNvcnRfbmFtZV92YWx1ZSIsInBhdGhfdmFsdWUiLCJhbGJ1bV9pZF92YWx1ZSIsInBhcmVudF9pZF92YWx1ZSIsImNvbGxlY3Rpb25fdHlwZV92YWx1ZSIsInR5cGVfdmFsdWUiLCJpbWFnZV9ibHVyX2hhc2hlc192YWx1ZSIsInlvanNvbl9vZl90Iiwidl9jb2xsZWN0aW9uX3R5cGUiLCJ2X3R5cGUiLCJ2X2ltYWdlX2JsdXJfaGFzaGVzIiwidl9wYXJlbnRfaWQiLCJ2X2FsYnVtX2lkIiwidl9wYXRoIiwidl9zb3J0X25hbWUiLCJhcmckOCIsImJuZCQzIiwiYm5kcyQzIiwiYm5kcyQ0IiwiYXJnJDMiLCJibmQkMCIsImJuZHMkNSIsImFyZyQ0IiwiYm5kJDEiLCJibmRzJDYiLCJhcmckNSIsImJuZHMkNyIsImFyZyQ2IiwiYm5kJDIiLCJibmRzJDgiLCJhcmckNyIsImJuZHMkOSIsInNlc3Npb25fdXVpZCIsInNldF9zZXNzaW9uX3V1aWQiLCJhdXRob3JpemF0aW9uIiwidG9rZW4kMCIsInNlc3Npb25fdXVpZCQwIiwicmVxdWVzdCQxIiwiYmFzZV91cmwiLCJoZWFkZXJzIiwiUSIsInBhdGhfcGFyYW1zIiwiYmFzZV91cmkiLCJiYXNlX3BhdGhfc2VnbWVudHMiLCJlbmRwb2ludF9wYXRoX3NlZ21lbnRzIiwicGF0aF9zZWdtZW50cyQwIiwidXJpIiwidXJpJDAiLCJhdXRob3JpemF0aW9uJDAiLCJoZWFkZXJzJDAiLCJtZXRob2QiLCJib2R5IiwicGFyYW1zJDAiLCJ1cmlfd2l0aF9wYXJhbXMiLCJ1cmwkMSIsImluaXQkMCIsImNvbm5lY3QiLCJjcmVkZW50aWFscyIsInBhc3N3b3JkIiwidXNlcm5hbWUiLCJhdXRoIiwiYXV0aF9yZXNwb25zZSIsInRhZ19vZiIsImZ1dHVyZXMiLCJsaXN0ZW5lcnMiLCJ3b3JrZXIiLCJxdWVyeSIsInV1aWQiLCJmdXQiLCJzZXQkMCIsInF1ZXJ5JDAiLCJvbl9tZXNzYWdlIiwibWVzc2FnZSIsIm9mX3N0cmluZyQyIiwib2Zfc3RyaW5nJDMiLCJyZXEiLCJzcmNfdmlld3MiLCJmaWx0ZXJzIiwidF90b19qdiIsImVuY29kZXIiLCJqdl90b190IiwiZGVjb2RlciIsInNvcnRzX29mX3lvanNvbiIsImRhdGVfYWRkZWRfZmllbGQiLCJ2aWV3c19maWVsZCIsInZpZXdzX3ZhbHVlIiwiZGF0ZV9hZGRlZF92YWx1ZSIsInlvanNvbl9vZl9zb3J0cyIsInZfdmlld3MiLCJ2X2RhdGVfYWRkZWQiLCJ0X29mX3lvanNvbiQwIiwic29ydHNfZmllbGQiLCJpdGVtX2ZpZWxkIiwiaXRlbV92YWx1ZSIsInNvcnRzX3ZhbHVlIiwieW9qc29uX29mX3QkMCIsInZfaXRlbSIsInZfc29ydHMiLCJjb21wYXJlJDIiLCJ0b19qdiQwIiwidmlld3MiLCJzb3J0X25hbWUiLCJzb3J0X25hbWUkMCIsInZpZXdzJDAiLCJvZl9qdiQwIiwicGF0aCQwIiwidG9fanYkMSIsIm9mX2p2JDEiLCJ0b19qdiQyIiwib2ZfanYkMiIsInRvX2p2JDMiLCJvZl9qdiQzIiwicGF0aCQzIiwidG9fanYkNCIsIm9mX2p2JDQiLCJjb2xsZWN0aW9uX3R5cGUiLCJwYXRoJDQiLCJ0b19qdiQ1Iiwib2ZfanYkNSIsImdldF9rZXkiLCJzdGF0dXNfdG9fc3RyaW5nIiwibGFzdF9zb3VyY2VfaXRlbV9rZXkiLCJmaXJzdF91bmZldGNoZWRfa2V5IiwiZmlyc3RfbWlzc2luZ19rZXkiLCJmaXJzdF91bmZldGNoZWRfa2V5JDAiLCJwcF9wcm9ncmVzcyIsInJlbWFpbmluZyIsInBwX3JlcG9ydCIsInN5bmNfcHJvZ3Jlc3MiLCJzdGF0dXMkMCIsImFjdGl2ZV9sYXlvdXQiLCJnZXQkNyIsInN0cmluZyIsInNldCQxIiwidG9fdmlldyIsInJlcXVlc3QiLCJzdGFydF9vZmZzZXQiLCJpdGVtX2NvdW50Iiwic2VydmVyc19zdGF0dXMiLCJyZXBvcnQiLCJ1cGRhdGUkMSIsImVxIiwiY3VycmVudCIsIm1lbW8iLCJnZXRfdmlld19pdGVtX2NvdW50IiwiZXJyb3IiLCJjb25uZXhpb25zIiwiY29ubmVjdCQwIiwicmVmcmVzaCIsImNvbm5leGlvbiIsInNlcnZlcl9pZCIsInByZXZpb3VzX3N0YXR1cyIsInJlbWFpbmluZyQwIiwic2VydmVyc193aXRoX3N0YXR1cyIsInNlcnZlciIsIm5ld19jb25uZXhpb24iLCJzZXJ2ZXJzIiwidXJsX2ZpZWxkIiwicGFzc3dvcmRfZmllbGQiLCJzdWJtaXQkMSIsInVpX2Zvcm0iLCJ1cmwiLCJ1aV9zdGF0dXMiLCJmdXRfdG9fbHdkIiwic2VxX3NoYXJlIiwibF9zYW1lIiwicl9zYW1lIiwiciQxIiwibGliX2RpZmYiLCJzZXJ2ZXJzX2xpYnJhcmllcyIsInByZXZpb3VzX3ZhbHVlIiwidWkiLCJzdGF0dXNlcyIsInVpX2Zvcm0kMCIsIm5vd19wbGF5aW5nIiwiYXVkaW9fdXJsIiwiaXRlbV9pZCIsInNldF9wbGF5X3VybCIsInBsYXlsaXN0IiwiY3VycmVudF9pbmRleCIsInBsYXlsaXN0JDAiLCJpdGVtIiwiYWxidW1faWQiLCJzZXNzaW9uIiwiaW1hZ2VfaWQiLCJpbWdfc3JjIiwicmVzZXRfcGxheWxpc3QiLCJtYWtlIiwiYXVkaW9fZWx0Iiwic2V0X3NyYyIsIm5leHRfaW5kZXgiLCJzZXRfcG9zaXRpb25fc3RhdGUkMCIsIm9uX2Vycm9yIiwiYnRuX25leHQiLCJucCIsInRyYWNrX2NvdmVyIiwidHh0JDAiLCJ0aXRsZSIsInRyYWNrX2RldGFpbHMiLCJub3dfcGxheWluZyQwIiwibWFrZSQxMiIsIm9uX2NsaWNrJDAiLCJjb2x1bW5zIiwibWFrZSQxMyIsInJhbmdlZCIsIm9yZGVyIiwiaW1nX3VybCIsInN0YXJ0X2luZGV4IiwiaW1hZ2VfYmx1cl9oYXNoZXMiLCJwbGF5X2Zyb20iLCJwbGF5X29uX2NsaWNrIiwiY2IiLCJpbWdfdXJsJDAiLCJwbGFjZWhvbGRlciIsImRhdGFfc291cmNlIiwibWFrZV9ub3dfcGxheWluZyIsImZldGNoJDEiLCJyYW5nZWRfdmlldyIsInBsIiwicGxheWVyIiwicGxheWVyX3VpIiwiZl9zZWFyY2giLCJmX3NvcnQiLCJmX29yZGVyIiwiZl9zb3J0X29yZGVyIiwiY2hvaWNlcyIsImZfbGlicmFyaWVzIiwiZl92YWx1ZSIsInJlcXVlc3QkMiIsIm5ld192aWV3IiwiaXRlbV9jb3VudCQwIiwib3JkZXIkMCIsIm1haW5fdmlldyIsIm1haW5fbGlzdCIsImRpc3BsYXlfbm9uZSIsInN0eWxlJDMiLCJiaWdfY292ZXIiLCJhcHAiLCJpc19zdG9yYWdlX3BlcnNpc3RlbnQiLCJvbl9sb2FkIiwiYXBwJDAiXSwic291cmNlcyI6WyIvYnVpbHRpbi8rYXJyYXkuanMiLCIvYnVpbHRpbi8rbWxCeXRlcy5qcyIsIi9idWlsdGluLytzeXMuanMiLCIvYnVpbHRpbi8rYmFja3RyYWNlLmpzIiwiL2J1aWx0aW4vK3N0ZGxpYi5qcyIsIi9idWlsdGluLytqc2xpYi5qcyIsIi9idWlsdGluLytmYWlsLmpzIiwiL2J1aWx0aW4vK2llZWVfNzU0LmpzIiwiL2J1aWx0aW4vK29iai5qcyIsIi9idWlsdGluLytpbnQ2NC5qcyIsIi9idWlsdGluLytiaWdhcnJheS5qcyIsIi9idWlsdGluLytpbnRzLmpzIiwiL2J1aWx0aW4vK2hhc2guanMiLCIvYnVpbHRpbi8rbWFyc2hhbC5qcyIsIi9idWlsdGluLytjb21wYXJlLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytmc19ub2RlLmpzIiwiL2J1aWx0aW4vK2ZzLmpzIiwiL2J1aWx0aW4vK3VuaXguanMiLCIvYnVpbHRpbi8rZnNfZmFrZS5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rbWQ1LmpzIiwiL2J1aWx0aW4vK2lvLmpzIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbGV4aW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcHJpbnRleGMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzLWRhdGEvQ0NGUXVldWUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvY29tcGxpYW50X2xleHhlci5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGF0YV9zb3VyY2UvamVsbHlmaW5fYXBpLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9zdG9yZXMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3N5bmMubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2xhbmcubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3dvcmtlcl9jbGllbnQubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3NlcnZlcnMubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3BsYXllci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEF0b21pYy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0ZGxpYi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NJbnQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9yYW5kb20ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9saXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvb2JqLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2xhenkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9vcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9yZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDQ2hhci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NoYXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9pbnQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9ieXRlcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2FycmF5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbWFwLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RhY2subWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9xdWV1ZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0cmVhbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2J1ZmZlci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3ByaW50Zi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIveW9qc29uX2NvbnZfZXJyb3IubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9mdW4ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9kaWdlc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9oYXNodGJsLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0Zvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbGxiYWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNfb2Zfb2NhbWwtY29tcGlsZXIvcnVudGltZS9qc29vX3J1bnRpbWUubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvbHdkL2xpYi9sd2QvbHdkX3V0aWxzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2x3ZC9sd2RfdGFibGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZF9zZXEucHAubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2Zvcm1zL2ZpZWxkLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2Jyci1sd2QvZWx3ZC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NBcnJheS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NGbG9hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NIYXNodGJsLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0xpc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDT3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NSZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMtZGF0YS9DQ011bHRpTWFwLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2JycmVyL2RvbV9yZWN0X3JlYWRfb25seS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9icnJlci9yZXNpemVfb2JzZXJ2ZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvYnJyZXIvbWVkaWFfc2Vzc2lvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9icnJlci9icnJlci5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL2ltcG9ydC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL3V0aWxzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi9jb21tb24vdHJhbnNsYXRlZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL2VuY29kaW5ncy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29tbW9uL3BlcnNpc3RlbnQubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2NvbW1vbi9sb2dnZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2NvbW1vbi9hdHRycy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvYnV0dG9uL2J1dHRvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvY29udHJvbGxlZF9zY3JvbGwvY29udHJvbGxlZF9zY3JvbGwubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2Zvcm1zL2Zvcm0ubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL2Zvcm1zL2ZpZWxkX3RleHRpbnB1dC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvYnJyX2x3ZF91aS9saWIvZm9ybXMvZmllbGRfc2VsZWN0Lm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi9mb3Jtcy9maWVsZF9jaGVja2JveGVzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi90YWJsZS9GRkNhY2hlLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9icnJfbHdkX3VpL2xpYi90YWJsZS9zY2hlbWEubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2Jycl9sd2RfdWkvbGliL3RhYmxlL3ZpcnR1YWxfdGFibGUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvbGV4eGVyX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2Vycm9yX2luZm8ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvanNvbl9mbG9hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wYXJzZXJfdG9vbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcGFyc2VyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3ByZXR0eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wcm9jZXNzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3Rva2VuX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3JlYWRlcl9zdHJpbmdfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3lvanNvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3RkL3N0ZC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIveW9qc29uX2NvbnYubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3BweF95b2pzb25fY29udl9saWIubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RhdGFfc291cmNlL2plbGx5ZmluLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi93b3JrZXJfYXBpL3dvcmtlcl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3ZpZXcubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL2RiX3dvcmtlcl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2ltcG9ydC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vYXBwX3N0YXRlLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9sd2Rfdmlldy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vdWkubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL3VpX3BsYXlsaXN0Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9tYWluLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIv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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7O0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJcUI1T0lHOztJQ3RIQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUNVQUM7SUFJQUM7SUNIQUM7Ozs7Ozs7Ozs7Ozs7SUNISkM7SUFvQkVDO0lBR0FDO0lBc0JBQztJQUtBQztJQW1IQUM7SUN4SkFDO0lBR0FDO0lBZ0NNQztJQVFBQztJQW9DRkM7SUNYRkM7SUN6R0VDOzs7O0lDREFDO0lDb0RBQztJQ1FjQztJQUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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SSxPO0c7Rzs2QixPLGM7O0k7SSxPO0c7O0k7STs7OztJLE87Rzt5QixPLHNCLGM7MEIsaUM7bUMsTyx5Qjs4QjtHO0csSSxlO3VCLDRCOzRCLGlDOztJO0k7Rzt5QixzQjs7SSw0QjtHOztJLFk7O0ksTzs7Rzs7SSxZOztJO0k7O0c7d0IsTSxPO3lCLGMsTzs7SSxZOztJOzt3QixZO3dCLFk7MkIsVSxPOztJLFk7O0k7OzhCO3dCLDhCO3dCLHFCOztJO0ksNkIsTyx1QjtHOzs7OztvQjs7TSxVOzs7Ozs7STtHOztJO0ksVzs7STtJO0c7O0k7SSxPLHlCLFU7RztHOzs7SyxPOzZCLE8sTyxlLE8sTztJO0ksbUI7Rzt1QixPLG1COzBCLE8scUMsTzs7SSxPLE87Rzs7SSxPO2E7YTtHOztJLE87RztZQ3JtQnpCckYsYzt1QjttQixnQjt5QixrQjs7STtLLE07STtJLHVCLCtDO0k7SSxxQyw4QjtJO29CLHVEO0k7RzswQixnQzt3Qix1Qjs7STs7OzJCLGlCLG1CO0c7O0ksNkIsZ0IsbUI7RztrQix3Qjs7cUIsbUIsb0I7SSxvQixtQix1QjtJO0c7O0kscUM7Rzs7SSxzQjs7YyxlOztjLE87YTtHOztJLDRCLE8zQjNDRjkwQjtHO0c7c0IscUI7MEMsOEI7RzsrQixvQixTOztJO0ksVTs7SztLO0k7STtJO0c7K0IsTyx3QjtHO0k7STtJO0k7STtJO0k7STtJO0c7RztHO0c7RztzQixPLGtCOztJLEksUTs7Ozs7Szs7STtHO0c7RztHO0k7STtJOztJLFc7O0k7RztHO29CLHNCOzsyQixPLG9CO0k7SztNO007TTtLOzs7Ozs7Szs7Rzs7MkIsd0IscUI7STtLLEksa0I7SztLO0s7Ozs7OztLOztHO0c7dUIsTyxhO3NCLGtCOztJO0k7STtHO3lCLE8sYTtzQixpQjtHO3dCLHVCO3NCLHVCO3dCLGlDOzBCO0c7STtJO0k7STtJO0k7STtJO0k7STtJO0k7STtJO3VCLHVCO3FCLHFCO29CLG9CO0csSSwrQjtxQixtQjt1QixxQjtzQixvQjt1Qix1Qjt1Qix1QjtHO3dCLDBCO0csK0I7dUIsa0IsUzs7Ozs7O08sNkJMbUNBVztPOztNOzs7Szs7O007Ozs7OzRCOzs7VTs7OztJO0k7SSxRO0k7SSxvQjtJO0c7O0k7SSxPO0c7O0k7STtHOztJLGtCOzBCLHdCO0k7STtHOzJCLGdDOztJLDBDO0c7dUIsb0IsTyx1Qjs7SSxZLCtCO0c7O0k7SSxJLFEsdUI7STtHO3dCLHNCOztJO0k7STtJO0c7RztJO0k7STtJO0k7STtJO0k7STtJO0k7b0MsNEI7RyxtQztHLGlDO0csZ0M7RyxrQztvQiw4Qjs7STtJOzs7OztHOztJLGdDO0c7a0Msa0MsUztHOztJOzs7b0I7O007TTs7Ozs7SSxPO0c7cUIsZ0Q7eUIsZ0Q7c0IsZ0Q7dUIsZ0Q7eUIsUztzQixPLFE7RztHO0k7STtJO0c7O0ksTyxrQjtHOzRCLDBCLE87O0ksNkI7STtHO0c7RzswQjs7SSxtQyxlO0c7Rzs7STtJLFM7STs7SztLOztJLG9CO0k7Rzs7Ozs7Ozs7Ozs7Ozs7O0k7SSxvRDtJO0k7SSxxQklwQ0FkLG1CO0k7STtJO0k7STtJO0k7SSxvRDtJO0c7Rzs7STtJO0c7RztHOzt3QjtJLHNCLGtDO0c7RztHO0c7RztHO29CLGlCO0c7cUIseUI7O3dCO0ksc0IsK0I7Rzs7SSxJLGlCOzs7MEI7OztHO0c7Rzs7STtJO0c7O0k7STtJO0c7Rzs7STtJO0k7RztHO0c7RztZNkJGQTlJLFFBQVNvcEMsTUFBS0MsTUFBTUMsTUFDdEIsV0FEV0YsTUFBS0MsTUFBTUMsTUFDSztZQUV6QkM7SUFBa0I7d0JBRWY5akQsY0FBb0IsTzdCQ3ZCc2pCLGdCNkJER3RqQjtrQkFESztRQUVMNnFDO0lBQW9CLE83QkF2QnZuQixnQjZCQUd1bkI7R0FBbUM7WUFFdENrWixxQkFBcUIvakQsR0FBSSxPN0JUekJvakIsYzZCU3FCcGpCLElBQThCO1lBRW5EZ2tELHNCQUFzQmpMO0lBQ3hCOzs7Z0JBQ1c7O3FCQUVBLzRDO2lCQUFLLFdBTmQrakQscUJBTVMvakQ7OztxQkFDQTZxQztpQkFBcUIsT0Z5a0I5QnNZLFVFaGxCQVkscUJBT1NsWjs7b0JBRkFDO2dCQUFLLFdBQUxBO2VBR047ZUFObUJpTztHQU92QjtZQUVDa0wsWUFFQUM7SUFGMkIsS0FFM0JBLEtBRE07SUFFYTtLQUFBLGtCQW5CbkJKLGlCQWtCQUk7S0FDVUM7S0FBTkM7SUFDSixXQWJBSixzQkFZSUksT0FBTUQ7R0FDd0I7WUFJbENFLGlCQUtBSDtJQUxtQixLQUtuQkEsS0FKTTtlQUlOQTs7VUFBQUEsWUFESWxrRCxhQUFNLHVCQUFOQSxHRnhDSjI5Qzs7OztXRXlDQXVHLFlBRklyWixlQUFNLGtCQUFOQTs7ZUFFSnFaLFlBSElwWixlQUFNLGVBQU5BO0lBSUQsZUE5QkhnWixpQkE2QkFJOzs7OzttQkFJYTs7d0JBRUFsa0Q7b0JBQUssV0E5QmxCK2pELHFCQThCYS9qRDs7O3dCQUNBNnFDO29CQUFxQixPRmlqQmxDc1ksVUVobEJBWSxxQkErQmFsWjs7dUJBRkFDO21CQUFLLFdBQUxBO2tCQUdOO2tCQVJQb1o7Ozs7O2VKL0NBeEw7O2tCSTJEeUI7c0NBRVoxNEMsY0FBSyxZQUFMQSxHRnZEYjI5QztxQ0V3RGE5UyxnQkFBSyxPQUFMQTtzQkFGQUM7a0JBQWMsWUZ0RDNCNlMsUUVzRGE3UztpQkFHTjtpQkY0a0JQdVk7aUJFNWxCQWE7R0FrQkc7WUFPSEksV0FBV3BQLE1BQU8sV0FBUEEsTUFBZ0I7WUFFM0JxUCxXQUFXbDNCLE1BQUtHLE9BQVEsbUJBQWJILE1BQUtHLE9BQThDO0dBSWxEO0lBQVpnM0I7SUFDQUM7SUFDQUM7SUFDQUM7WUFLQUMsZUFBZTFQO0lBQ1gsK0JBRFdBO2dCQUVQO1FBQ0gyUDtJQUNMLFlBSmUzUCxNQUxmeVAsaUJBUUtFO0dBQzREO1lBRWpFQyxnQkFDQ3pRLE1BQ0EwUTtJQUVELElBREVoQyxjRjJhQWIsT0VsY0ZvQyxZQUVBQztJQXdCa0I7YUFKakJRO3NCQUkyQkE7Y0FDNUI7ZUFDRSxRRithQXhDLHVCRXBiQVEsWUFHMEJnQztlQUNmL0I7ZUFBVFI7Y0FKRk8sYUFJV0M7dUJBR1RnQyxxQkFBcUIvUTtlQUFXLFNBQVhBLFVBRVY7bUJBRE5pQixPQURnQmpCO2VBQ1IsT0FBUmlCO2NBQ1E7Y0ZnYmZ1TixzQkVsYkV1QyxzQkFIQXhDO2NBUWlCO2VBQWpCeUMsaUJBckJKTCxlQU9DdlE7ZUFlVyxVRmdhVjhOLE9FemFXYTs7O2dCQVdKbEg7Z0JBQ0dvSjsyQkFBTzdnQyxLQWlDTGhsQjttQixTQUFBQTtvQkFDSCxhQURHQSxjQUFBQTtvQkFFTSxJQUFOaWxCLFFBbkNGNGdDLE9BQU83Z0MsS0FpQ0xobEIsT0FHQWtsQixRQXBDRjJnQyxPQW1DRTVnQyxPQUZBamxCO29CQUFBQSxPQUdBa2xCO29CQUVKLE9BRklBOzt1QkFsQ0Yyd0IsT0ErQkU3MUM7bUJBOUJOLE9BREk2MUM7c0JBQUFBLG9CQXBCWGI7b0JBd0JZLFdBTk1od0I7cUJBT0csS0F6QnJCZ3dCLE1BZkRtUSxlQW1DWXRQOztxQkFNVSxLQVJIN3dCLEtBaENuQm9nQyxlQWtDWXZQOztvQkFTRixXQVRFQSxxQkFGTzd3Qjs7d0JBSmY0Z0M7c0JBbUIwQixXQXhDOUJMLGVBMkJZMVA7c0JBYWtCOzt3QkFDVmlROzsyQkFDTjs0QkFBYyxJQUFWQyxVQWZObFE7K0JBZU1rUSxZQWpCQy9nQyxLQWtCa0I7NEJBQ2YsV0FGSitnQyxVQUU0Qjs0QkFFdkIsS0FuQlhsUSxNQWxDWnVQLGVBaURrQlc7OzBCQU1IOytCQVBLRDs7Ozs7aUNBcEJoQkY7Ozs7OztxQkFnQ1MsV0E1Qk01Z0M7c0JBNkJHLEtBL0NyQmd3QixNQWZEbVEsZUFtQ1l0UDs7c0JBNEJVLEtBOUJIN3dCLEtBaENuQm9nQyxlQWtDWXZQOzttQkE4QkosT0E5QklBOztlQUZBZ1EsZUFESHBKOzt1QkE2Q0x1SixhQUFhcFI7ZUFBVyxTQUFYQSxVQVFGO2VBTFI7Z0JBRENpQixPQUZTakI7Z0JBR1YsaUJBRENpQjtnQkFDRDs7O3FCQURDQTswQkFBQUEsTUE3RVJ3UDs7O2VBaUZhO2NBRUk7Y0ZxWGZqQyxzQkU3WEU0QyxjQXhEQTdDO2NBRE4sT0FMR25PO2FBeUVHO0dBQ0g7R0FFVyxJQUFaaVIscUJBRUFDO1lBRUFDLGVBQWVYLElBQUdZO2FBQ2hCQztTQUFXbm1ELGNBQUg0RTtLQUNQLGFBRE9BLHdCQUFHNUUsTUFERXNsRCxhQUNMMWdELE9BQUc1RSxJQURFc2xEOztJQU1qQixTQUFJYztTQUFhcG1ELGNBQUg0RTtLQUNULGFBRFNBLHdCQUFHNUUsTUFOQXNsRCxhQU1IMWdELE1BTkcwZ0Q7O2FBV2JlO0tBQ1MsSUFBUEMsV0FkSk47S0FlQSxnQkFBSU87TUFDRixHQUZFRCxZQWRKTixhQVFFSSxTQU1FRTtNQUlTLElBQVBFLGVBSEZEO01BWkZKLE9BZUlLO01BSkZGLFVBSUVFO2VBRVE7SUFBQTtJQUVoQixPSmpNRXJOOztjSWlNbUI7O21CQUVab047ZUFBaUIsWUFBakJBLElBWExGOzs7ZUFVVSxNQUFBO2tCQUVMSTtjQUNILFNBQUlDLE9BQVFIO2VBQ0QsSUFBTEksYUFETUo7ZUF2QmRKLE9Bd0JRUTtlQUNKLE9BRElBO2NBRUY7Y0FHRjtlQURFbkQ7O2tCRmdVTmIsT0VyVU0rRCw4QkFReUIsT0FsQ2pDVixZQWtDNEM7dUJBRXBDTCxPQUFPYztlQUNUO2dCQUNFLFFGa1VOekQsdUJFelVNUSxZQUtPaUQ7Z0JBQ0loRDtnQkFBVFI7ZUFORk8sYUFNV0M7ZUZ3VWpCUDs7MEJFblVXeUQsV0FBUyxPQWxDcEJQLFNBa0NXTyxJQUFvQjtpQkFMdkIxRDs7ZUY0VFJMLE9FNVRpQmE7ZUFPTDtjQUEwQztjQUVwRCxZQXJCR2dELEtBV0NkO2FBV1A7aUJBakRESSxpQ0FpRHlCLE9BakR6QkEsVUFpRGtDO2FBN0NoQkc7R0E4Q1g7WUFFUFUsU0FBT3RCO1FBQTBCaEIsaUJBQVBELGlCQUFORDtJQUN0QixjQURzQkEsTUFBTUMsTUFBT0MsTUFBMUJnQjs7WUFHUHVCLGNBQWN2QixJQUFHd0I7SUFDbkIsT0pqT0UzTjs7Y0lpT21COztlQUdGLElBRFZvTixlQUNDUTtlQUNPO3dCQUZSUjtpQ0FFYXJpRDt5QkFDWixZQUZBNmlEO3VDQUlTN25ELGNBQUssU0FBTEE7eUJBSlQ2bkQsZ0JBUFJILFNBR2N0QixJQUtNcGhEOzt3QkFLZ0I7OztlQVJ4QixNQUFBO2NBWU47ZUFGQ3VpRDtlQUNDakQ7O2tCRjZSTmI7bUMsT0U3U0ZpRSxTQUdjdEI7NkJBZ0JZN2tELEdBQUU4QixHQUFNLE9BQVI5QixFQUFTO2NBRS9CLFNBQUlrbEQsT0FBT2M7ZUFDVDtnQkFDRSxRRitSTnpELHVCRXRTTVEsWUFLT2lEO2dCQUNJaEQ7Z0JBQVRSO2VBTkZPLGFBTVdDO2VGcVNqQlA7bUNFaFNXaGtELFVBQVEsZ0JBQVJBLEdBQXFCLEdBTHhCK2pEO2VGeVJSTCxPRXpSaUJhO2VBT0w7Y0FBMEM7Y0FFcEQsWUFoQkdnRCxLQU1DZDthQVdQO2lCQXBGREksaUNBb0Z5QixPQXBGekJBLFVBb0ZrQzthQTdCakJlO0dBOEJYO1lBRU5FLElBQUdwbUQsR0FBSXNvQixpQkFBMkNocEIsS0FBSXNsRDtJQUN4RCxHQURTdDhCLFNBQUdDLE1BQUhELFFBQUFxOUIsS0FBR3A5QixjQUFIbzlCO0lBQ1QsYUFEcUJVLGlCQUFIQyxLQUFHRCxnQkFBSEM7SUFDbEI7U0FEdUNDLGlCQUFaQyxZQUFZRDs7U0FBWkMsNEJBQXFCLE9BQUU7SUFDOUI7S0FBQSxRQS9ObEIxQyxZQThOTzZCO0tBQ0RjO0tBQUpDO0tBQ2dCLFVBaE9sQjVDLFlBOE5nQndDO0tBRVZLO0tBQUpDO0tBQzRCLFVBek45QjFDLGlCQXNOc0RVO0tBRzFDaUM7S0FBVkM7S0FDQXBDLFNBSkMxa0QsT0FDRDBtRCxPQURnRHBuRCxLQUdoRHduRDtJQUVLLFdBTGtCTixXQUl2QjlCO0lBRUosR0FMUStCO1FBRU1JO01BYVI7T0FIT0UsYUFWQ0Y7T0FhUixPQXBMSmxDLGdCQXdLRUQsSUFTU3FDO09BUFR6N0M7O1dBekZGKzVDLGVBdUZFWCxJQUhJK0I7OzJCQWFnQi9CLElBQU0sT0FBTkEsR0FBUTs7O09BUjVCcDVDO2NBekZGKzVDLGVBdUZFWCxJQUhJK0IsNEJBV2tCLE9BUnRCL0IsR0FRd0I7WUFUZG1DOztNQU1ERyxhQU5DSDtNQUdWdjdDLFNBMUtGcTVDLGdCQXdLRUQsSUFLU3NDOztTQUhUMTdDLGNBRkFvNUM7SUFjSixjQUFlcGhELEdBckRiMGlELFNBdUNFdEIsSUFjV3BoRCxJQUFZLFNBQWEsR0FoQnBDc2pEOztLQWlCQS9PO09BakJJOE87O1dBbENOVixjQW9DRXZCLElBRklpQztXQUlKcjdDOzJCQWlCb0JvNUMsSUFBTSxPQUFOQSxHQUFRO1VBakI1QnA1QztJQXFCSixPQVJJdXNDO0dBUUU7WUFZSm9QLE9BQUtsZ0QsTUFBTS9HLEdBQUcybEQsSUFBSVcsSUFBSUUsV0FBVVUsSUFBSyxPQXZDckNkLElBdUNXcG1ELEdBQUcybEQsSUFBSVcsSUFBSUUsV0FBakJ6L0MsTUFBMkJtZ0Q7R0FBb0M7WUFDcEVDLFVBQVVwZ0QsTUFBTS9HLEdBQUcybEQsSUFBSVcsSUFBSUUsa0JBQWUsT0F4QzFDSixJQXdDZ0JwbUQsR0FBRzJsRCxJQUFJVyxJQUFJRSxXQUFqQnovQztHQUErRDtHQWdCaEUsU0FBVHFnRDtJLE9BakJBSDs7R0E4Qk0sU0FBTkk7SSxPQTlCQUo7O0dBdUNPLFNBQVBLO0ksT0F2Q0FMOztHQXFETSxTQUFOTTtJLE9BcERBSjs7R0FxRFEsU0FBUks7SSxPQXJEQUw7O0dBeURRLFNBQVJNO0ksT0ExREFSOztHQXdFUyxTQUFUUztJLE9BeEVBVDs7R0FzRlMsU0FBVFU7SSxPQXRGQVY7O0dBeUZPLFNBQVBXO0ksT0F6RkFYOztpQztpQztpQztpQztpQztpQztZQzZHQVksUUFBU0MsVUFBVXBxRCxHQUFFQyxHQUFFSDtJQUN6QixJQUFBLE9BRHlCQSxrQkFBRkc7O1NBQ3ZCcUc7O01BQ1U7T0FBSjFGLElBQUksV0FGQ3dwRCxVQUNYOWpEO09BRU1tTSx1QkFIZXpTLEdBRWZZLE9BQUFBO01BRmVaLE1BRWZZLHNCQUZlWixHQUNyQnNHLE9BQUFBO01BRHFCdEcsTUFDckJzRyxLQUVNbU07TUFGTixXQUFBbk07a0JBQUFBO01BQUFBOzs7O0dBS0k7c0JBRU10RyxHQUFJLE9BUlptcUQsUW5Dbk1BemQsT21DMk1RMXNDLE1BQUFBLGNBQTRDO3dCQW9DeEM0cUIsS0FBWXkvQixnQkFBZXJxRDtJQUN6QyxHQURjNHFCLFNBQU1DLE1BQU5ELFFBQUEzYyxNQUFNNGMsY0FBTjVjO0lBQ2Qsc0IsY0FEY0E7NEIsYUFBWW84QyxnQ0FBZXJxRDtHQUNzQjs2QjtZQ2hhN0RzcUQsT0FBT25vRCxHQUFJLGFBQVEsb0JBQVpBLFdBQTZDO1lBcUVwRG9vRCxjQUFldnFEO0lBQ2pCLElBQUksZUFBSyxxQkFEUUEsS0FDYjs7OzZCQUFrRDs7O0dBQUk7WVZtR3REd3FEO0lBQWdCOzs7Ozs7Ozs7R0FRTDtZQVFYQztJQUErQjs4QkFDM0JocEQsMEJBakJKK29ELGFBaUJJL29EO1FBQ0E4bUI7Z0JBbEJKaWlDLGFBa0JJamlDO0dBRU87WUFFWG1pQyxnQkFBZ0IxcUQ7SUFBOEIsV0FOOUN5cUQsY0FNZ0J6cUQ7SUFBOEIsT0FBQSxXTGhPaEQ0b0M7R0tnT2lFO0dBQS9EOGhCO0dBd0JKO1lBR0lDLGFBQWNwcUQ7SUFDaEIsSUFBTSxlQURVQTs7dUJBT0o7MEJBSUE7MEJBRkE7MkJBSkM7NkJBR0U7eUJBSko7MkJBRkU7MkJBUUE7NEJBSkM7OzsyQkFNRDswQkFJRDswQkFFQTsyQkFKQzs2QkFHRTt5QkFKSjsyQkFNRTs0QkFKQzsyQkFaRDs7SUFpQk4sTUFBQTtHQUFtQjtZQUsxQnFxRCxnQkFBZ0JoSSxJQUFHL3VDLE9YalFuQnNkLEtXaVFtQnRkLE9BQUgrdUMsS0FLaEIsWUFBRTtZQUVGaUksaUJBQWlCakk7SUFDbkIsSVh2UUV4eEIsSVdzUWlCd3hCLEtYNVBqQnR4QixJVzRQaUJzeEI7Ozs7O0lBWWpCO0dBQUU7R0FFTyxJQUFBO1lBTVRrSSxlQUFlbEksSUFBSW1JLFNBQVNucEQ7SUFDOUIsR0FEOEJBO1NBRXRCaVMsUUFGc0JqUztLQUViLE9BN0JmZ3BELGdCQTJCZWhJLElBRVQvdUM7O09BRnNCalMsdUJBU3ZCLE9BQUEsV0FUY21wRCxTQUFTbnBEO1FBR2pCckIsSUFIaUJxQjtJQUk1QjtLQUVlLElBQVJvcEQsVUExRExMLGFBdURTcHFELElBSVIsT0FsQ0hxcUQsZ0JBMkJlaEksSUFNUm9JO0tBQ0o7Ozs7Z0NBQ29CLE9BQUEsV0FSSkQsU0FBU25wRDs7O0dBU1o7WUFFaEJxcEQsZ0JBQWdCckksSUFBSW1JLFNBQVNucEQ7SUFDL0IsR0FEK0JBLGtCQUVsQixPQWpDWGlwRCxpQkErQmdCakk7T0FBYWhoRCx1QkFTeEIsT0FBQSxXQVRlbXBELFNBQVNucEQ7UUFHbEJyQixJQUhrQnFCO0lBSTdCLElBbkVFK29ELGFBa0VTcHFEOzs7Z0NBS2tCLE9BQUEsV0FSVHdxRCxTQUFTbnBEOzs7SUFPdEIsT0F0Q1BpcEQsaUJBK0JnQmpJO0dBU0E7WUFlaEJzSSx1QkFBdUIzVztJQUNoQixJQUFMcU8sS1h0VUY1M0I7SVd3VUYsaUJBSHlCdXBCO0lBS2Q7S0FBUDRXLHNDQUxxQjVXO1lBS3JCNFc7WUFBQUE7S0FDQUM7O3VCLE9BekNGTixlQW9DRWxJO3VCLE9BekJGcUksZ0JBeUJFckk7UUFJQXVJO1FBQUFBO0lBUUosc0NBYnlCNVcsS0FNckI2VztHQU9xQztZQXlCdkNDLFVBQVM1cEQsR0FBRTZwRDtJQUNiO0tBQUkxN0MsTVJqV0ZzaUI7S1FrV0V4bEIsMEJBREFrRDtLQUVKLE9BSFduTyxXQUFBQTthQXRDVHlwRCx1QkF3Q0V4K0M7SUFDd0I7c0JBRXJCeXZCLE9BeldMbVgsZUFzV0U1bUMsU0FETSxPUjNWUjdLLFNRMlZFK04sS0FNbUI7YUFMbkJsRDthQUZTNCtDO0dBUUQ7WUFlVkMsVUFBUTcrQyxLQUFNLE9BdkJkMitDLGFBdUJRMytDLEtBQXVCO1kzQmpZL0I4K0MsVUFBU3hyRCxHQUFTVyxHQUFJLE9VbUJ0QnNvQixRVm5CU2pwQixHQUFTVyxHQUFlO1lBa0lqQzhxRCxZQUFVbHJEO0lBQUksSUFBSSxlQUFLLG1CQUFiQSxLQUFROzs7NkJBQXlDOzs7R0FBSTtZQUcvRG1yRCxlO2tCc0M3SU03MUMsS0FBSTFUO0lBQUksSUFBSSxvQkFBWjBULEtBQUkxVCxLQUFROzs7NEJBQTRDOzs7R0FBSTt1QkFzRnJEMFQsS0FBS3pWLEdBQUdrRztJQUNyQixJQUFJLGdCQURTdVAsS0FBUXZQLElBQ2pCOzs7O0tBRU0sSUFBSjVFLElBQUksV0FIUXRCLEdBQUdrRztLQUluQixNQUpXdVAsS0FBUXZQLEdBR2Y1RTtLQUNKLE9BRElBOztHQUVIO3FCQ2NxQnRCLEdBQUVRO0lBQzVCLEtBRDRCQSxHQUVwQjtJQUVFLElBREh5aUIsS0FIcUJ6aUIsTUFHMUJ1QixJQUgwQnZCLE1BSXRCb3NDLE1BQUksV0FKZ0I1c0MsR0FHeEIrQixJQUVBLFlBREk2cUM7SUFDQyxrQkFMbUI1c0MsR0FHbkJpakI7SUFFQTtHQUFROztJQUpmO0lBQUE7O0tBR1U7OztNQUFBLE1BQUE7TUFDUjs7Ozs7O0dBQWE7bUJBZ1BSbGlCLEdBQUVmO0lBQ1QsU0FBd0I2VyxLQUFNaFgsR0FBRWtCLEdBQUVmO0tBQ2hDLFlBRDRCSCxHQUFFa0IsSUFFNUI7S0FFUSxJQUFKZ0IsSUFBSSxXQUpzQi9CLEdBQUpILElBSzFCLFlBRElrQztLQUNDLG1CQUxxQmxDLFdBQUVrQixHQUFFZjtLQUt6QjtJQUNOO0lBTkg7S0FDRTtLQUFBO01BQUc7TUFHTyxJQUFBLElBQUEsb0JBQ1I7O01BTEo7Ozs7O0lBTUc7SUFFSCxPQVJ3QjZXLFFBRGpCOVYsR0FBRWY7R0FTRTtZQzlMUHVyRCxVQS9LV3ZyRDtJLFlBQ0w7UUFDSCtCO0lBQUssV0FBSyxXQUZGL0IsR0FFUitCOztZQUVMeXBELE9BQVF0bUMsV0FBUWxsQjtJLFlBQ1IsT0FEQWtsQjtRQUVIbmpCO0lBQUssT0FBQSxXQUZNL0IsR0FFWCtCOztZQU1MMHBELGlCQUFVLHFCQUVJO1lBdUJMQyxTQUFTMXJELEdBQUV3UjtJQUN0QixLQURzQkEsR0FFWjtRQUNIelAsSUFIZXlQO0lBR1YsT0FBQSxXQUhReFIsR0FHYitCO0dBQVE7WUEwSVg0cEQsY0FuSVluNkMsR0FBRXhSLEdBQUksT0FWWDByRCxTQVVPMXJELEdBQUZ3UixHQUFrQjtZQTZDaENvNkMsT0FBSzVyRCxHQUFFd1I7SUFDVCxLQURTQSxHQUVDO1FBQ0h6UCxJQUhFeVA7SUFHRyxPQUFBLFdBSEx4UixHQUdBK0I7R0FBUTtZQVliOHBELFFBQU05cEQsR0FBR21qQjtJQUNYLEtBRFFuakIsR0FFRSxPQUZDbWpCO1FBR0pyaEIsSUFIQzlCO0lBR0ksT0FBTDhCO0dBQU07WUF3Q1hpb0QsVUFBUXQ2QyxHQUNWLEtBRFVBLEdBRUEsY0FDSHpQLElBSEd5UCxNQUdFLFdBQUx6UCxNQUFVO1lBd0JiZ3FELFVBTFFocUQsR0FBRS9CLEdBQUksT0FHZHVyRCxVQUhVdnJELEdBQUYrQixHQUFhO0d2Q2hIckI4cEM7WXlDbU1BbWdCLFVBcE1FaHNELEdBQUVtQztJQUNSLFNBRFFBLE1BR0s7UUFEUkosSUFGR0k7SUFFSyxXQUZQbkMsR0FFRCtCO0lBQUs7R0FDVTtHQXNCdEI7WUFFSWtxRDtJQUFVLG1CQUVDLE1BQUE7UUFEUmxxRDtJQUFLLE9BQUxBO0dBQ3VCO1lBRTFCbXFELE9BQU8vcEQsR0FBRytpQjtJQUNaLFNBRFMvaUIsTUFHSSxPQUhEK2lCO1FBRVBuakIsSUFGSUk7SUFFQyxPQUFMSjtHQUNlO1lBcUJsQm9xRCxXQUFTbnNELEdBQUVtQztJQUNiLFNBRGFBLFVBRVJKLElBRlFJLE1BRUgsT0FBQSxXQUZDbkMsR0FFTitCO1FBQ0c1QixJQUhLZ0M7SUFHQSxXQUFMaEM7R0FBWTtZQThJaEJpc0QsVUFIUWpxRCxHQUFFbkMsR0FBSSxPQURkZ3NELFVBQ1Voc0QsR0FBRm1DLEdBQWE7WUFJckJrcUQsY0FIUWxxRCxHQUFFbkMsR0FBSSxPQS9JaEJtc0QsV0ErSVluc0QsR0FBRm1DLEdBQWtCOzs7Ozs7OztJQ3RLSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkNxY3hCbXFELEtBQUluc0Q7SUFDZCxJQUFJViw0QkFETTZzRDtJQUVQLFlBREM3c0QsS0FDSixzQkFGY1UsS0FHWjtRQUVJbXdDLDRCQUxRbndDLEtBQ1ZWO2FBS004c0QsTUFBTTFzRDtLQUNaLElBRFk4aUIsTUFBQTlpQjtLQUNaO01BQUcsWUFEUzhpQixLQUxabGpCLE1BT0U7OytCQVJRVSxHQUtSbXdDLE1BQ1UzdEI7bUNBTk4ycEMsS0FNTTNwQztPQU1WO01BRUEsSUFSVUMsTUFBQUQ7TUFBQUEsTUFBQUM7O0lBUUc7SUFFakIsT0FWUTJwQztHQVdUO3dCQWdCY0QsS0FBSW5zRDtJQUNuQixjQURlbXNELEtBQUluc0Q7OztnQkFBQUE7O3NDQUFBQSwyQkFBSm1zRDs7R0FJVDt5QkMzZjBDOzZCO0d6RC9DbEQ7WUFHSUUsT0FBUXpxRCxHQUFJLGVBQUpBLElBQW1CO1lBRzNCMHFELEtBT0MxckQsR0FBRW1pQixJQUFHd3BDLFFBQU96cEMsSUFBTSxXQUFsQmxpQixHQUFFbWlCLElBQUd3cEMsUUFBT3pwQyxJQUE4QjtZQUUzQzBwQztJQUFXLG1EQUNLO0lBQ1g7R0FBSztZQUtOQyxPQUNIN3FELEdBQUUrRDtJQUNMLFNBREtBO2lCQUFBQTttQ0FFYSxPQXRCaEIwbUQsT0FvQkN6cUQ7OztZQUdZOEIsY0FBTSxlQUhsQjlCLEdBR1k4Qjs7WUFDSXd6QyxjQUFIQyxnQkFBVSxlQUp2QnYxQyxHQUlhdTFDLEtBQUdEOztZQUNLRSxnQkFBSHNWLGdCQUFIclY7UUFDbUIsT0F2Qm5DaVYsWUFpQkMxcUQsR0FLZXkxQyxNQTFCaEIxNkIsYUEwQm1CK3ZDLEtBQUd0Vjs7O2tCQUxuQnp4QyxNQVVHL0UsSUFWSCtFOzs7OztZQVEwQjhpQixPQVIxQjlpQixNQVFrQmduRCxXQVJsQmhuRCxNQVFjaW5ELGtCQUFIQztRQUNkLE9BMUJBUCxLQTJCTTFyRCxlQVZMZ0IsR0FRYWlyRCxLQUFHRCxNQUFJRCxVQUFRbGtDOzs7Z0JBUjFCOWlCO1NBVW1CbW5EO1NBQUhDO1NBQUhDOztTQUFpQkM7Ozs2QmdCeENqQ3hvQztTaEJ3Q3NDK3JCLE9BVm5DN3FDO1FBV0gsT0E1QkEybUQ7aUJBMkJNMXJEO3FCQVZMZ0IsR0FVZW9yRDtzQ0FDaEIsT0FaSVAsV0FXZU0sS0FBR0QsTUFBV0c7aUJBQUt6Yzs7UUFIZDF0QixLQVByQm5kLE1BT2E0bUQsU0FQYjVtRCxNQU9VdW5EO0lBQWtCLE9BeEIvQlosS0EyQk0xckQsZUFWTGdCLEdBT1lzckQsTUFBR1gsUUFBUXpwQztHQUlnQztZQStEcERxcUMsY0FDSHhuRDtJQUNILFNBREdBO2lCQUFBQTs7TUFFZSxNQUFBOzs7WUFDSC9ELGNBQU0sV0F2R25COGEsU0F1R2E5YTs7WUFDSThCLGNBQUgrb0MsZ0JBQVUsV0FuR3hCNGYsT0FtR2M1ZixNQUFHL29DOztZQUNLd3pDLGNBQUhDLGdCQUFIeks7UUFBYSxtQkFBYkEsS0FBR3lLLE9BQUdEOzs7O0tBU1RxVixTQWRaNW1EO0tBY1FvZCxLQWRScGQ7S0FjSy9FLElBZEwrRTt5QkFjWTRtRDtLQVJNVTs7VUFRTlY7eUJnQnZIYjluQyxpQmhCdUhhOG5DLFVBQUFBO2VBZFo1bUQ7O21CQUFBQTs7VUFjaUMrbUQsa0JBQUhHLGtCQUFIMVU7TUFDNUIsV0EzR0FtVSxLQTBHTTFyRCxXQUFHbWlCLElBQUl3cEMsWUFBZXBVLEtBQUcwVSxPQUFHSDs7U0FETFEsa0JBQUhwVTtLQUFVLFdBekdwQ3dULEtBMEdNMXJELFdBQUdtaUIsSUFBSXdwQyxZQURhelQsT0FBR29VOztRQVBENVY7SUFDekIsR0ExRkhrVixXQXlGbUJTLE1BRWpCLGVBTU9scUMsS0FSbUJ1MEI7SUFJUjtLQUFBLE9BWGhCNlYsY0FPZUY7O0tBSUo3VjtLQUFIQztLQUFOK1Y7SUFDSixXQXZHRmQsS0EwR00xckQsV0FBR21pQixJaUJoRlQ4QixTakI0RU11b0MsVUFBTS9WLEtBQUdELE9BSmFFO0dBU1c7WUFFdkMrVixVQUFVMW5EO0lBQUksSUFBSSxlQWxCZHduRCxjQWtCTXhuRCxLQUFROzs7MEJBQXFDOzs7R0FBSTtZQW9DM0QybkQ7SUFBQSw4QkFDUTs2QkFDQyxpQkFDQSxrQkFDRTs7R0FBQztZQUVabGM7SUFBeUIsdUJBQ2pCcnZDLGNBQUssT0FQYnVyRCxXQU9RdnJEO1FBQ0ZuQjtJQUFlLE9BQWZBO0dBQWdCO1kwRHpMdEI0cEIsT0FBT3ZwQixHQUFJLE9BQUpBLFlBQWtDO3VCO1lDaUJ2Q3NzRCxhQUFhdHNELEdBQUksWUFBSkEsa0JBQXNEO1lBS25FdXNELFNBQU92c0QsR0FBQUEsZUFBSSxPQUE2QjtZQUsxQ3dzRDtJQUFnQjs7T0FDRDs7T0FDRDtlQUNjOztHQUEwQjtZQUl0REMsVUFBUXpzRCxHQUFHMHNELEtBRVBuOEM7SUFETixHQURhbThDO0tBTUc7TUFEUHZ0RCxJQUxJdXREO01BTUhDLG1CQWJSSCxjQVlPcnREO01BSkxrRCxXQUNFa08sUUFJSW84Qzs7U0FMTnRxRCxXQUNFa087SUFPTixrQkFUVXZRLGNBQ05xQztJQVFKO0dBQWtDO1lBTWhDdXFELFNBQVFDO2FBQ05DLFdBQVM3VSxTQUFROFU7S0FDTCxJQUFWNVUscUMsZUFET0Y7S0FFWCxPQUFBLFdBSFE0VSxVQUVKMVUsV0FEZTRVO0lBRWM7SUFHbkMsb0NBTElEO0dBSzRDO1lDeEQ5Q0UsYUFBYXJ0RCxHQUFJLE9BQUpBLGtCQUE2QztZQUt4RHN0RCxVQUFVQztJQUNaLElBSWEsWUFMREEsU0FJRSxZQUpGQTtJQUNaLGtCQURZQTtHQU1SO1lBa0JGQyxNQUFNbnREO0lBQ1I7S0FBSW90RCxvQkF6QkZILFdBd0JNanREO0tBTU0sWUFOTkE7S0FLTyxZQUxQQTtJQUVSLG9CQUZRQSwyQ0FDSm90RDtHQU9BO1lBZ0JKQyxhQUFhcnRELEdBQUVFO0lBQ2pCLGtCQXpCSWl0RCxNQXdCYWp0RDtJQUcrQixJQUFBLE9BM0I1Q2l0RCxNQXdCYWp0RCxJQUVib3REO0lBRld0dEQsZ0JBRVhzdEQ7SUFHSjtHQUE0QjtHQUtYLElBQWJDLDBCQUNBQztZQUdGQyxtQkFBbUJ6dEQsR0FBRTB0RCxRQUFPOXVEO0lBQ2YsSUFBWGl1RCxXQUFXLGdDQURlanVEO0lBQVRvQixtQkFBRTB0RCxRQUNuQmI7SUFDSjtHQUF3RTtZQUV0RWMsbUJBQW9CQyxVQUFVQyxlQUFlQyxVQUFTOXREO0lBQ3hELFNBQUkrdEQsWUFBWWxtRCxNQUFLM0g7S0FBSSxPMUN2RHZCOGpCLGEwQ3VEdUM5akIsR0FBSyxXQUE5QjJILE1BQXlCM0gsR0FBMEIsR0FBOUNBO0lBQWlEO0lBQ3ZEO0tBQVg4dEQsYUFEQUQsa0JBRGtCSDtLQUdsQkssa0JBRkFGLGtCQUQ0QkY7S0FJNUJLLGFBSEFILGtCQUQyQ0Q7S0FNekNLO2lDO2FBSkZILGdCQUNBQyxxQkFDQUM7S0FDQTdyRCxPQUNFOHJELGlCQUd3Qyx1QkFIeENBO0lBS04sa0JBWHdEbnVELHVCQUtwRHFDO0lBTUo7R0FBMkM7bUM7R0NwRWxCLElBQW5CK3JELHFCQVNFQztZQXlCQUMsUUFBUXR1RDt3QjtJQUFJLHNCLGtDQUFKQTtHQUE2RDtZQUd2RXV1RCxRQUFTNXVELEdBQ1gsT0FEV0EsYUFDOEM7WUN0RDNENnVELElBQUk1dkQsR0FBRStCLEdBQ0MsV0FESC9CLEdBQUUrQixJQUVSLE9BRlFBLEVBRVA7O1lDYUc4dEQsWUFBVTF2RDtJQUVOLDhCQUZNQTs7S0FJRixJQURITixjQUNHLFVuRCtIVndyRCxZbURoSU94ckQ7cUJBRUk4aUIsa0JBQUssZUFBTEE7eUJBQzRDOWlCLEdBQUssV0FBTEEsR0FBUztLQUFsRCxzQixPWDRKWjByRCx3Qkh6RUZwQixjY3RGT3RxRDs7SUFLRyxnQ0FSRU07O1NBU0RILGdDQUE4Q0EsR0FBSyxXQUFMQSxHQUFVO0tBQW5ELHNCLE9YeUpkdXJELHdCSHpFRnBCLGNjaEZXbnFEOztJQUVHLGdDQVhGRztrQkFhTTtRQURIaTFDO2tCQUE4Q3AxQyxHQUFLLFdBQUxBLEdBQVU7SUFBbkQsc0IsT1hzSmxCdXJELHdCSHpFRnBCLGNjN0VlL1U7R0FDUztZQUV0QjBhO0lBQVk7O1dBQ1Rqd0QsY0FBSyxPQUFBLFc3QjdCVjJvQyxlNkI2Qkszb0M7O1dBQ0NHLGNBQUssT0FBQSxXN0I5Qlh3b0MsZTZCOEJNeG9DO21CQUNEbzFDLGdCQUFLLE9BQUEsVzdCL0JWNU0sZTZCK0JLNE07O0dBQTRCO1lBRS9CMmEsTUFBUXZsQztJLEdBQUFBO1NBQVNDLE1BQVRELFFBQUFuYSxTQUFTb2E7O1NBQVRwYTtJQUNWLFNBQUkyL0Msb0JBQW9CMy9DO0tBQ3RCO01BQUk0L0M7UUFDRix1REFGb0I1L0M7TUFJaEIsUUF6Qk53L0MsWUFzQklJO2lCQUlNOzswQkFFRSxPcERuQmRodUM7U29Ea0JhcGlCO0tBQU0sT0FBTkE7SUFDMkI7SUFFeEM7S0FBQTs7WUFDS0EsY0FBSyxPQUFMQTs7UUFFZTtTQURkRztTQUNFaXdELFlBWkpEO1FBYUEsT0FGRWh3RCxJQUNFaXdEOztRQUdZLElBRGY3YSxnQkFDRzhhLGNBZkpGLG9CQURNMy9DO1FBaUJOLE9BRkMra0MsTUFDRzhhO01BQ1U7O1lBUWxCQyxLQUFNbndELEdBQUVKLEdBQUVXLEdBQUVjOzhCLFlBQUFBO2tCQUM0Q0E7S0FBTCxJQUFXZCxjQUFIWDtLQUFTLE9BQUEsV0FEOURJLEdBQ3FESixHQUFHVyxHQUFOYztJQUFvQjtJQUE5RSxzQkFBcUQ7a0JBRDNDekIsR0FBRVcsWUFDU1gsR0FBRVcsR0FBSyxXQUFQWCxHQUFFVyxHQUFXO0dBQTRDO1lBRTVFNnZELE9BQU94d0QsR0FBRVcsR0FBRWM7SUFBSSxPQUhmOHVELGNBR2tDdndELEdBQUVXLEdBQUVjLEdBQUssV0FBVHpCLEdBQUVXLEdBQUVjLEdBQWMsR0FBN0N6QixHQUFFVyxHQUFFYztHQUEwQztHQWN2RDtJQUFBO0lBQ0E7WUFFSWd2RCxjQUFVLGNBQVE7WUFFbEJDLFFBQVFsdkQsR0FBRUU7SUFDWixHQURVRixNQUNvQyxNQUFBO0lBRHBDQSxXQUFFRTs7R0FDbUQ7WUFFN0RpdkQsVUFBUW52RDtJQUFJLFlBQUpBO2dCQUEwQixNQUFBO1FBQXFCRTtJQUFLLE9BQUxBO0dBQU07WUNqRi9Ea3ZELE9BQXNCQztJQUl4QixTQUFJaFYsSUFBS2lWLE1BQVksZ0JBSkdELE1BSWZDLE1BQWlDO0lBQzFDLFdBRElqVjs7WUNWRmtWLFVBQVF2dkQsR0FBSSxjQUFKQSxHQUFnQztZQUd4Q3d2RCxVQUFRQztJQUNKLG1CQURJQTsyQkFFTHZ2RCxjQUFLLFdBQUxBO1FBQ0cyUDtJQUNKLFlBRElBO0lBQ0o7R0FDdUM7R0NMbEMsSUFBUDYvQztZQUVBQyxVQUFVei9DO0lBQ1osV0FIRXcvQyxNQUVVeC9DO2N2RHFCVjJRLFN1RG5CWSxXaENIWnVtQixlZ0NDVWwzQjtvQkFGVncvQyxNQUVVeC9DO0dBR2dCO0dBRVYsSUFBaEIwL0M7WUFFQUMsTUFBTzMvQyxLQUFJMlQ7SUFDYixzQixnQkFIRStyQyxlQUVPMS9DO2FEWlBxL0MsVUNZVzFyQztHQUNnRDtZQUUzRGlzQyxRQUFPNS9DO0lBR0QscUJBUk4wL0MsZUFLTzEvQztJQUNULGNBQ0s2L0MsZUFLTCxPRG5CRVAsVUNjR08sZUFLMEI7a0JBRnRCN3ZELHlCQUFBQTtJQUVULE9aa1BJK3FEO0dZbFAyQjtZQUU3QitFLGNBQWU5L0MsS0FBSXRSO0lBQ2YsWUFWSmt4RCxRQVNlNS9DOzJCQU1aaFEsY0FBSyxPQUFMQTs7b0NBSmlCLE9BQUEsV0FGRHRCO1FBR1BrRDtJQUNWLFNBRFVBO0lBQ1YsT0FBQSxXQUppQmxEO0dBTVY7WUFVVHF4RCxvQkFBcUIvL0MsS0FBSTJUO0lBNUJ6QmdzQyxNQTRCcUIzL0MsS0FBSTJUO0lBRWpCLElBQU5xc0MsY0FGdUJyc0MsUUFHdkJyWCx3QkFEQTBqRDtJQUVKO01BREkxakQ7O09BRWdCLElBQVoyakQseUJBRkozakQ7T0EvQkZxakQsTUE0QnFCMy9DLEtBS2ZpZ0Q7T0FDTTtNQUFvQjtJQUMxQixhQUpKM2pEO0lBSUksT0FMSjBqRDtHQU1EO1lBRURFLE1BQU9sZ0QsS0FBSXRSO0lBN0NYK3dELFVBNkNPei9DO0lBRUMsSUFBTm1nRCxRQUFNLHdCQUZEbmdELE1BR0wyVCxRQTdCRm1zQyxjQTRCRUssT0FGU3p4RDtJQUliLE9BZEVxeEQsb0JBWUVJLE9BQ0F4c0M7R0FDMEI7WUFFNUJxc0MsTUFBS2hnRCxLQUFJNFQ7SUFBVSxPQU5uQnNzQyxNQU1LbGdELHFCQUFvQyxPQUFoQzRULFVBQXVDO0dBQUM7WUNyQ2pEd3NDLFlBQVl2eEQ7YUFDVnd4RCxJQUFLbnhELEdBQW1CZ3FCLEtBQVV0bkI7S0FDcEMsR0FEMEJzbkIsU0FBTUMsTUFBTkQsUUFBQWxlLE1BQU1tZSxjQUFObmU7S0FDaEIsSUFBTnl2QixRQUFNLFdqQ2pCVnlNLGVpQ2VZcm9DLEdBQ2NtTTtLQUV4QixPQUFBLFdBRks5TCxPQUNIdTdCLE9BRGdDNzRCO0lBRXRCO0lBTU4seUIsT0FSTnl1RDtJQUlKLCtCO0dBS0M7Ozs7OztZQ0xLQyxNQUFNeHdEO0lBQ1I7c0JBQTZCQyxHQUFLLHVCQUFxQix3QkFBMUJBLEtBQW1DO3VCQUR4REQ7R0FDeUQ7R0FVM0QsSUFBUnl3RDtZQUVBQyxRQUFPdDVDLElBQUdwWDtJQUNaO0tBQW9DLE9BZDlCd3dELE1BYU14d0Q7WUFBQUE7S0FDUnltRCxvQixPdERjRWhpQztJc0RiTixLQUZTck4sSUFFYSxPQURsQnF2QztRQUM0QmtLLE9BRnZCdjVDO0lBRTZCLHdCQUFVLHdCQUFoQnU1QyxTQUQ1QmxLO0dBQzhEO1lBRWhFbUssUUFBUXh4RCxHQUFJLFdBTlpxeEQsWUFNWSxxQkFBSnJ4RCxVQUE4QztZQUV0RHl4RDtJQUMyQztLQURLcnlEO0tBQVh5QjtLQUFwQjZ3RDtLQUFURjtLQUNtQyxPdERRdkNuc0MsV3NEVGFxc0MsT0FBK0J0eUQ7SUFDbEQsaUJBRFVveUQsU0FBNkIzd0Q7O1lBcUJyQzh3RCxNQUFJQyxTQUFROXdELEdBQUV1bUQ7SUFDaEIsV0FEY3ZtRDs7O01BSVAwNUMsTUFKTzE1QztNQUNWMUI7Ozs7V0FHR283QztvQkFBMkIxNUM7WUFBSyxzQixXQUpqQzh3RDtxQkFJaUQsd0JBQXJCOXdEO1dBQTZCOztTQUgzRDFCLEl6RHZDRnFpQjs7O015RHlDS2s1QixNQUhPNzVDO01BQ1YxQjs7O3dCLFdBREV3eUQ7V0FHMEIsd0JBQXpCalg7SUFJUCxXQU5JdjdDLEdBRFlpb0Q7R0FPVDtZQUVMd0ssU0FBU3pKLE1BQUl0bkQsR0FBRXVtRCxJQUFLLE9BQVB2bUQsZ0JBQUpzbkQsT0FBTWYsTUFBQUEsR0FBb0Q7WUFLbkV5SyxRQUFRRixTQUFROXdELEdBQUV1bUQ7SUFDcEIsS0FEa0J2bUQsR0FDRyxPQUREdW1EO1FBQ1c3TSxNQURiMTVDO0lBQ2tCOzs7NEIsV0FEMUI4d0Q7ZUFDOEMsd0JBQXpCcFg7WUFEWDZNO0dBQ21EO1lBS3JFMEssUUFBUXZ5RDs7d0JBRUxzQixjQUFLLG9CQUFMQSxHQUZLdEI7dUJBR0xnN0MsZ0JBQUssZXZCMmpCUnFLLE11QjlqQlFybEQsR0FHTGc3QztRQUZBRTtJQUFLLGVBQUcsV0FESGw3QyxHQUNMazdDOztZQUlIc1g7SUFBUTtTQUF3QnZwRDtLQUFrQixlQUFBLHdCQUFsQkE7O1FBQWI0K0M7SUFBTSxPQUFOQTtHQUE0QztZQUMvRDRLLE9BQUs1SyxJQUFHem1ELEdBQUksV0FOWm14RCxRQUtBQyxPQUNLM0ssS0FBR3ptRCxHQUF5QjtZQUNqQ3N4RCxRQUFPM3hEO0lBQUksT0FEWDB4RCxPQU5BRixpQkFPOEJ4eEQsR0FBSyxXQUFMQSxHQUFRLEdBQS9CQTtHQUFzQztZQUszQzR4RCxJQUFFOUssSUFBSyxPQU5UNEssT0FNSTVLLE9BQWU7WUFDakIrSyxVQUFRL0ssSUFBR3ptRCxHQUFJLE9BUGpCcXhELE9BT1U1SyxJQUFHem1ELEdBQWE7WUMvRjFCeXhELElBQUczd0QsR0FBSXNvQixLQUFVZytCLElBQUd2akM7SUFDdEIsR0FEU3VGLFNBQUtDLE1BQUxELFFBQUFxOUIsS0FBS3A5QixjQUFMbzlCO0lBRVA7S0FERWU7c0IsT0Q2REZ1SixlQzlEb0JsdEM7U0Q4RHBCa3RDLGtCQzlET3RLO0lBSVQsT3RCMlZFNkIsUXNCL1ZHeG5ELE9BQ0QwbUQsT0FEZUo7R0FJSztZQVl0QnNLLFVBQVNwTixNQUFLQyxNQUFNQyxNQUFPLFdBQWxCRixNQUFLQyxNQUFNQyxNQUErQztZQVNuRW1OLFlBQVl2OEMsT0FBTXhXLEdBQUksT0FBQSxXQUFKQSxHQUFOd1csT0FBaUI7WUFFN0J3OEMsV0FBYXhvQyxLQUFxQ3lvQztJLEdBQXJDem9DLFNBQU9DLE1BQVBELFFBQUFoVyxPQUFPaVcsY0FBUGpXLE9ETWJxOUM7b0JDTEVybkMsS0FBb0J0b0I7SyxHQUFwQnNvQixTQUFRQyxNQUFSRCxRQUFBaFUsUUFBUWlVLGNBQVJqVSxRQURnRHk4QztxQkFFaER6SyxJQUNENW1EO01BQ1csSUFBVnN4RCxnQkFIQTE4QztNQUlKLFNBQUkyOEMsaUJBQWUsYUFEZkQsU0FDOEI7TUFDbEMsU0FBSUUsVUFBVWh5RCxHQUFJLGdCQUZkOHhELFNBRVU5eEQsR0FBcUI7TUFHakM7T0FGRWl5RDs7V0FGQUY7b0JBSUkzOEM7cUJBQ0Z3OEM7aUJBQThDcE4saUJBQVBELGlCQUFORDtzQkFDL0I0TixPQUFLOUs7Y0FDRCxZQUFBLFdBRndDNUMsTUFENUNwdkMsT0FFS2d5Qzs7OEJBTFQ0SyxVQVN5QixXQWZ1QkgsTUFTNUN6OEM7a0JBS0lyVztjQUFLLE9BUmJpekQsVUFRUWp6RDthQUM2QjthQUVyQyxPdEIzQkZtYyxRc0JvQnFDb3BDLE1BQU1DLE1BQ3JDMk47O1lBU0o7YUFERTFLO2VqQnhDSjRDO2lCaUJxQmFoM0M7MEJBcUJKcXpDO2tCQUFNLHNCLE9EUGZvSyxRQ2RhejlDOzJCQUZidStDLFlBV012OEMsT0FZR3F4QztpQkFBOEM7O2FBR25EMEwsT0RoQkp6QixXQ1dJbEo7O2FBUWE7O2tCQUVOcGpEO2NBQUssb0JBQUxBLEdBbkJQd3REOzs7a0JBb0JPbG9DO2NBQUssZXhCdWxCaEJ1NkIsTXdCM21CSTJOLFlBb0JPbG9DOztpQkFGQTBvQzthQUFLLGVBbEJaUixXQWtCT1E7WUFFbUM7WUFKNUM7YUFERTFLO2VqQjZIRnlDLHlCLCtCaUJwSkEvQztZQStCcUIsT3RCOFB2QmMsU3NCOVJzQnBuRCxPQXVCbEJxeEQsT0FDQXpLLFNBUW1CLFdBOUJ0QmxuRCxTQU1LNFU7V0F3QmdDO01BRXhDLFdBNUJJNjhDLEtBRkFGLFdBQ0FDLFdBNkJ1Qjs7WUFRdkJLLGNBQU8scUJBQThCO0dBSnhCLHVCQUliQTtZQUdGQyxVQUFXbC9DLE1BQU8sT0E5Q2xCdytDLFdBOENXeCtDLGlCQUEwQztZQ3JFckRtL0MsVUFHTU4sS0FIUTFoRDtJQUNoQixTQURnQkEsZUFFVjVQLElBRlU0UCxXQUdSMGhELGNBREZ0eEQsSUFFUTtRQUNUNmtELEtBTFdqMUM7SUFLTCwyQkFBTmkxQztHQUE0QjtZQUUvQmdOLE9BQU9wcEMsV0FBcUJrK0IsV0FBV21MLGVBQWNSO0lBQ3ZELEdBRFM3b0MsU0FBS0MsTUFBTEQsUUFBQXE5QixLQUFLcDlCLGNBQUxvOUI7SUFDVCxhQUR5QlUsaUJBQUxDLEtBQUtELGdCQUFMQztJQUNQO0tBQVQ5UTtLQUNBb2M7O2VBREFwYzt5QkFFMEIsb0RBRXNCO0tBRWhEa1IsT0Y2RUFnSyxnQkFBQUEsa0JFbEZBa0IsZUFGS2pNO0tBWUgwTCxPRmtFSmI7SUVqRUEsU0FDTXFCLGdCQUFhLGdCQWJqQnJjLFdBYW9DO0lBQ3RCO0tBQVZvYixZdkJUTngyQyxrQnVCUU15M0M7S0FERmpMLG1CQUVFZ0s7S0FKSmtCO092QmlURnpLOzthdUJoVElnSzthQUNBeks7O3FCdkJrU0pRO0t1QjNSRTJLO092QmRGMzNDOzs7a0J1QmUyQmtzQztVQUNwQixnQkFyQkw5UTtVQXFCSyx1QkFyQkxBO1NBcUI4QztLQUc1Q2xoQyxRUDJCSjQ1QyxPT3BEcURpRCxXQUNuRDNiLFNBRHFDbWM7S0F3QnJDSzs7U0FDRTE5Qzs7VUFDYSxJQUFtQi9HLGdCQUFSaW9DLG1CQUFMMmI7VUFDbkIsR0FEd0IzYjtXbEJ5RDVCa1Usc0IsT2tCMUZBK0gsVUFpQ3VCTixjQUFhNWpEO1VBQ2pCLE9BREk0akQ7U0FFZjtJQUVzQyxPdkI4UjlDOUo7O2lCdUJyVEVYOzZCQWFBcUwsV0FwQmdCekw7YUFBVUU7eUJBd0IxQndMLG9CQWJBRjtHQW1CbUU7WXhCdEJyRUcsYUFBZWx2QyxPQUFzQm12QyxvQkFDckNDO0lBQ0Y7S0FBSS9DLGNBREYrQztLQUVFQztPQ0xGaDRDOztTREVxQzgzQztrQkFJQTVMO1VBQ2pDLElBQUlwbkQsV0FENkJvbkQsS0FFN0JsbkQsSUFEQUY7VUFFUSxnQkFMZGt3RCxXQUtvQixXQVBQcnNDLE9BTVAzakI7U0FDd0I7SUFFbEMsV0FOSWd6RCxXQURBaEQ7R0FPWTtZQU1kaUQ7SUFBYXR2QztJQUFxQnV2QztJQUFVdHlEO0lBQUlzb0I7SUFBVWcrQjs7SUFDckM0TDtJQUFvQks7SUFBUzlPO0lBQU0wTztJQUMxRCxHQUZrRDdwQyxTQUFLQyxNQUFMRCxRQUFBcTlCLEtBQUtwOUIsY0FBTG85QjtJQUVsRCxhQURlVSxpQkFBWG1NLFdBQVduTSxnQkFBWG1NO0lBQ1E7S0FBUkMsZ0JBQWlCLHdCQUQrQmhQO0tBRWhEaUQsbUJBREErTCxTQUY4QzlNO0tBSTlDMEw7c0IsT3NCc0NGakIsUVBuRE03QyxTZlVtQ2dGO3dCLE9zQm9DekNwQyxxQnRCcENFcUMsa0JBRUE5TDtLQUlBZ00sYU1vRUYvSSxRTjNFa0MySSxtQkFPZWx6RCxHQUFLLFdBQUxBLEdBQVM7S0FFMUQsUUF4QkE2eUQsYUFlYWx2QyxPQUNRbXZDLG9CQUFtQ0M7S0FPM0NoYTtLQUFYaWE7S0FHQXhMLG1CQUhBd0wsWU04R0Z4SSxVTnRIMER0RDtLQVl4RDZLLE1DaVRGM0osUUQ3VDRDeG5ELE9BSTFDcXhELFdBT0F6SztJQUVKLFdBREl1SyxLQUpXaFosU0FEWHVhO0dBTW9CO1lBRXRCQztJQUFZTCxVQUFVdHlELEdBQUlzb0IsS0FBVWcrQixJQUFJa00sVUFBVWpGLFNBQVNxRixlQUMzRFQ7SUFDRixHQUY0QjdwQyxTQUFLQyxNQUFMRCxRQUFBcTlCLEtBQUtwOUIsY0FBTG85QjtJQUcxQjtLQURFZTtzQixPc0J5QkYwSixpQnRCMUJBK0I7d0IsT3NCMEJBL0IscUJ0QjNCMkR3Qyx1QkFBakNqTjtJQVE1QixPQXZCRTBNO2FBNkJFbGE7YUFkVW1hO2FBQVV0eUQ7aUJBRXBCMG1EO2FBRmtDSjthQUFJa007O2FBQVVqRjs7YUFDbEQ0RTtHQVF3RDtZQUV4RFU7SUFBZ0JQLFVBQVV0eUQsR0FBSXNvQixLQUFVZytCLElBQUlrTSxVQUFVakYsU0FBU3FGLGVBQy9EN3ZDO0lBQ0YsR0FGZ0N1RixTQUFLQyxNQUFMRCxRQUFBcTlCLEtBQUtwOUIsY0FBTG85QjtJQUV2QjtLQUFMZTtzQixPc0JjRjBKLHFCdEJoQitEd0MsdUJBQWpDak47SUFJaEMsT0E5QkUwTTthQTZCRWxhO2FBSGNtYTthQUFVdHlEO2lCQUV4QjBtRDthQUZzQ0o7YUFBSWtNOzthQUFVakY7OztHQUt2QjtZQUUvQnVGLFNBQVE5eUQsR0FBSXNvQixLQUFVZytCLElBQUdwWjtJQUMzQixHQURjNWtCLFNBQUtDLE1BQUxELFFBQUFxOUIsS0FBS3A5QixjQUFMbzlCO0lBQ0wsSUFBTGUsT3NCTkZ1SixldEJLeUIvaUIsTUFBYnlZO0lBR2QsT0FwQ0UwTTs0Qjs7YUFpQ1FyeUQ7aUJBQ04wbUQ7YUFEb0JKOzs7Ozs7R0FJRjtZeUIxRHBCeU0sUUFBTXZzQixPQUFNd3NCO0lBQVMsWUFBZnhzQixnQkFBcUNBLE9BQVMsV0FBVEEsT0FBL0J3c0IsUUFBeUQ7R0FBQztZQUV0RUMsU0FBUWp6RCxHQUFHMmxELElBQUlXLElBQW9CNE07SSxnQkFBNkJDO0tBYTNEOzs7YTFCdEJMNVYsd0I7O1UwQnVCTyxJQUFzQnovQyxhQUFQczFELGdCQUFKbGdCLGdCQUFObWdCO1VBQ0g7a0IxQkxUMVYsUzBCSVkwVixRQUFVRDsyQkFDbUJsMEQsR0FBSyxPQUFHLFdBRHBCcEIsR0FDb0IsV0FEL0JvMUMsS0FDdUJoMEMsSUFBYTtTQUFDOztNQVZsRCxJQUFnQjQ5QyxtQkFBUHRXO01BQ1AsU0FDTXpqQjtPQUNJLGlCQUhIeWpCO21CQUlPO1dBQ0hwbkM7T0FBSyxPQUFBLFdBTFRvbkMsVUFLSXBuQztNQUFxQjtNQUpoQztjMUJiUG8rQyxRMEJZY2hYO3VCQU9EdG5DO2VBQWlCLFdBTGpCNmpCO2VBS2lCLE9BQUEsV0FBWixXQVBHKzVCLFFBT1I1OUM7Y0FBeUI7S0FBRztLQVR6QztNQURFd25DO3VCLE8xQndqQkYrYixnQ0EwRkFjLEswQnBwQm1DMlA7TUFpQmpDdEM7O1VBZkFscUI7O1dBZ0JnQixJQUFTM2pCO29CQUNuQnV3QyxZQUFVcnpEO1lBQ1osV0FwQjBEa3pELFdBb0I3QyxXQUZRcHdDLE9BbEJRbXdDO1lBb0I3Qix1QkFEWWp6RDtXQUVRO1dBRXRCLE94QnJCSm1hLFdjRElrekMsUVVrQklnRztVQUk2QjtNQUVuQ0Esc0JBUkExQztNQVNBd0MsWUF4QkExc0Isd0JBd0J5QixJQUFNMHNCLGlCQUFZLE9BQVpBLEtBQWlCO01BQ2hEeE07UW5CcENGMEM7Y21Ca0NFZ0s7eUIsT3pEbEJGNXZDLEt5RGtCRTR2QztVQXpCYWhOO0tBNEJJLE94QnFTbkJnQixPd0JqVVF0bkQsR0FBRzJsRCxRQTJCVGlCLHNCMUJ5bkJGckQsSzBCMW5CRTZQLFlBRTJDOztZQ3BDN0NHLE9BQU1qOUMsSUFBR2s5QztJQUNYLE9BRFFsOUM7Y0FDRyxXdENOVGd3Qixlc0NLU2t0QjtjQUVOLFd0Q1BIbHRCLGVzQ0tTa3RCO0dBRXVCO1lBRWhDQyxPQUFPbnJDO0ksR0FBQUEsU0FBS0MsTUFBTEQsUUFBQXE5QixLQUFLcDlCLGNBQUxvOUI7aUJBQWdCVSxpQkFBTEMsS0FBS0QsZ0JBQUxDO0lBQ1g7S0FBTGh3QyxLQUxGaTlDO0tBTUVHLFNBTkZIO0tBT0VJLFFOd0NGdkUsTU0xQ0U5NEM7O0l6QnVWRm14QzsrQnlCcFZ1Qyx3QkFIckNueEM7SUFRQTtLQUNvQixlQVJwQm85QztLQUtFaE47c0IsT0o0Q0p1Sjt3QixPQUFBQTtXQUFBQSxvQklsREUzNUMsS0FES3F2QztLQWNDLGFBWE5nTzs7O01BWU92MEQ7TUFGTGl5RCwyQkFFMEIsd0JBQXJCanlELE1BUkxzbkQ7O1NBTUEySyxPQU5BM0s7SUFZRjtLQURFMEw7T3pCWkpoNEM7OztrQnlCYTZCa3NDO1VBQ3ZCLElBQUlwbkQsV0FEbUJvbkQsS0FFbkJ2akMsUUFEQTdqQjtVQUVRLGdCQW5CaEJ5MEQsVzFCaURBeGIsUTBCL0JRcDFCO1NBQ21DO0tBRXpDNmpDLG1CQU5Bd0wsWUFsQmM5TDtLQUtoQjlmLFF6QitVRmdoQixleUJ2VUk2SixXQVdBeks7SUFHTixXQXRCSXBnQixlQUZBbXRCOztZQ1BGRCxPQUFNcDlDLElBQUdrOUM7SUFDWCxPQURRbDlDLEtBQ0csV3ZDTlRnd0IsZXVDS1NrdEIsYUFBQUE7R0FDZ0Q7WUFFekRJLE9BQU90ckM7SSxHQUFBQSxTQUFLQyxNQUFMRCxRQUFBcTlCLEtBQUtwOUIsY0FBTG85QjtpQkFBZ0JVLGlCQUFMQyxLQUFLRCxnQkFBTEM7b0JBQW9DdU47S0FDeEQ7TUFBSXY5QyxLQUpGbzlDO01BS0VILFNBTEZHO01BTUVDLFFQeUNGdkUsTU8zQ0U5NEM7O0sxQndWRm14Qzs7NkIwQnJWdUMsd0JBSHJDbnhDOzs7O0tBUUE7TUFDb0IsZUFScEJpOUM7TUFLRTdNO3VCLE9MNkNKdUo7eUIsT0FBQUE7WUFBQUEsb0JLbkRFMzVDLEtBREtxdkM7TUFhSHlNO1ExQk5KaDRDOzs7bUIwQk84QmtzQztXQUN4QixJQUFJcG5ELFdBRG9Cb25ELEtBRXBCdmpDLFFBREE3akI7V0FFUSxnQkFkaEJ5MEQsTzNCa0RBeGIsUTJCckNRcDFCO1VBQzRCO01BRWxDNmpDLG1CQU5Bd0wsWUFiYzlMO01Bb0Jkd047UTVCa25CSjNROztXNEJobkJJO1lBQWFwOEM7WUFBUGdjO1lBRUE0aUMsS0w0RFI4Syx3Qks1RG1DLHdCQUYzQjF0QztZQUdBZ3hDOztzQkF0QlJKO3lCQXVCb0NJO2lCQUMxQixxQkFEMEJBLFVBSjVCaHhDO2dCQUtvRDtZQUVwRDJqQyxPTHdEUmdLLGtCSzVEUXFELFdBREFwTztXQU1ZLE8xQnlVdEIrQixnQjBCMVVVaEIsZ0NBUE8zL0M7VUFRMkI7VUE5QlU4c0Q7TUFLcERydEI7UTFCZ1hGbWhCLGdCMEI5V0lqQixXQVlBRSxzQjVCc29CSnJELEs0QnJvQkl1UTtLQWVOLFdBOUJJdHRCLGVBRkFtdEIsUUFnQ2lDOztZQ3JDbkNLLE9BQU12eUQsR0FBRzVDLEdBQUd5WCxJQUFHazlDO0lBQ2pCLE9BRGNsOUM7Y0FDSCxXeENQVGd3Qixld0NNZWt0QixXQUFUL3hELEdBQUc1QztjQUVOLFd4Q1JIeW5DLGV3Q01la3RCLFdBQVQveEQsR0FBRzVDO0dBRWlDO1lBRTFDbzFELFFBQUsvMEQ7YUFDSGcxRCxXQUFZenlELEdBQUc1QyxHQUFFa2tCLE9BQU1veEMsT0FBTUM7S0FDL0IsSUFBSTk5QyxLQU5KMDlDLE9BS2N2eUQsR0FBRzVDLE1BRFpLLE9BR0RxMEQsU0FQSlMsT0FLY3Z5RCxHQUFHNUMsTUFEWks7S0FJTCxTQUFJb00sT0FBTzhvRCxTQUFVLE9BQVZBLGNBSFFyeEMsV0FHc0M7S0FDL0M7TUFBTjR3QyxRUnFDSnZFLE1ReENJOTRDLElBRUFoTCxPQUgyQjhvRDtNQUszQkM7UTNCaVZKNU07O2dDMkJqVnVDLHdCQUpuQ254Qzs7O1VBRHFCNjlDO01BU0gsZUFQbEJaO01BSUE1Tjt1QixPTjJDSnNLO3lCLE9BQUFBO1lBQUFBLG9CTWhESTM1QztNQVdBZytDOztnQkFSQVgsd0JBU3VCLGtDQUVMO01BRWxCak4sbUJBTEE0TixZQU5BM087TUFZQXlNO1EzQmRKaDRDOzs7bUIyQmU4QmtzQztXQUN4QixJQUFJcG5ELFdBRG9Cb25ELEtBRXBCOE4sVUFEQWwxRDtXQUVRLGdCQWxCZHkwRCxPQURBcm9ELE9Ba0JNOG9EO1VBQ3FDO01BRTNDOU4saUJBTkE4TDtNQU8yQyxhQXJCM0N1QjtLQXFCSjthM0JpU0F0TTs7Ozs7O3dCQXdCQUcsZTJCalVJZCxXQU9BSjs0QkFuQkErTjs7SUFvQnVEO0lBSTdELFNBQUlFLFNBQVU5eUQsR0FBRWt5QztLQUNOLElBQUo5MEM7S0FDSixPN0JvbUJBc2tEOztlNkJubUJFO2dCQUNpQmhrRDtnQkFBSGI7Z0JBQUhjO2dCQUNZLFFBbEN2QjgwRCxXQTZCVXp5RCxHQUNSNUMsTUFHU08sR0FBR2QsR0FBR2E7Z0JBQ0Y0akI7Z0JBQUxvdUM7ZUFKUnR5RDtlQU1JLFdBRklzeUQsS0FBS3B1QztjQUVJO2NBUFA0d0I7SUFRUjtJQUVFO0tBQU42Z0IsTUFWQUQsWUE5QkdyMUQ7S0F5Q0hrMEQsTzdCMmxCRmpRLHNCNkIzbEJxQixJQUFNZ08sZ0JBQVcsT0FBWEEsSUFBZSxHQUR4Q3FEO3dCO0lBR0Y7S0FERXp4QztzQixPN0JnbUJGcWdDO1NBYUFHO1dBMUZBZDs2QjZCbGhCb0IsSUFBU3JqRCxjQUFNLE83Qi9DbkNvK0MsUTZCK0M2QnArQyxHQUF3QjthN0JnaUJyRDI5QzthNkJuaUJFeVg7SUFNSixXM0I2UUVuTiw4QkY0VkE5RCxLNkI5bUJFNlAsYUFDQXJ3QztHQUlrRDs7O2FDN0NsRGxlLEtBQUszRixHQUFJLE8zRTZLWG13QyxPMkU3S09ud0MsTUFBc0I7YUFDM0J3cEIsY0FBWSxXM0VhZC9OLGlCMkVidUQ7YUFFckR6RixJQUFJaFcsR0FBRThFLEdBQUVuRTtLQUEyQyw2QkFBN0NtRSxHQUFFbkUsR0FBSlg7S0FBUSxXM0VtQ1Z3ckQsTzJFbkNJMW1ELEdBQUY5RTtJQUFtRTthQUV2RXd3QixTQUFTeHdCO0tBQ0wsWTNFNkhOb3NELFUyRTlIV3BzRDtpQkFFRCxXQUZDQTtLQUlDOztNQURHOEU7TUFBUGtOO01BQ0FyUix1QkFET21FLEdBSEo5RTtLQUtQLGVBRklnUyx5QkFBT2xOLEdBSEo5RSxnQkFHSThFLEdBQ1BuRTtJQUNnRDthQUV0RCtrQixLQUFLMWxCLEdBQUU4RSxHQUFJLDBCQUFKQSxHQUFGOUUsTUFBMkI7SUFsQkksYUFNcEMyRixNQUNBNmpCLFVBRUF4VCxLQUVBd2EsVUFPQTlLOzs7O2FBNkJBOEQsT0FBUTdqQjtLQUNWLElBQUk0dkQsa0NBQ0FDO0tBQ0osV0FGSUQsSUFDQUMsSUFGTTd2RDtJQUdNO2FBU1Y4dkQsVUFBV0MsVUFBUzExRCxHQUFJLE9BRTVCMjFELFNBRmVELFVBQVMxMUQsR0FBd0I7YUFFaEQ0MUQsb0JBQVVGLFVBQVMxMUQ7S0FDckIsSUFEcUJzaEQsTUFBQXRoRDtLQUNyQjtNQUFNO09BQUEsZ0NBRGVzaEQ7O09BS25Ca1U7O09BR1c7UUFBQSxPQUFBLHVCQUVYSyxjQVZVSCxVQUFTcFU7O09BUVIsT0FFWHVVLG9CQVZVSCxVQUFTcFU7Ozs7O09BS0gyUTtPQUhObnREO09BQVVneEQ7V0FBQUE7T0FJbEIsV0FOUUosVUFLTXpEO09BRWQsV0FQaUIzUSxRQUtuQmtVLElBTG1CbFU7O01BR1I7T0FBTGlVLDhCQUhhalUsUUFFVHg4QyxPQUdNbXREO09BTEc4RCxVQUdiUixJQUVOQyxJQUxtQmxVO01BQUFBLE1BQUF5VTs7SUFRWTthQVIvQkosU0FBVUQsVUFBUzExRDtLLHVCQUFuQjQxRCxjQUFVRixVQUFTMTFEOzthQVVuQjYxRCxrQkFBVUgsVUFBUzExRDtLQUNyQixJQURxQnNoRCxNQUFBdGhEO0tBQ3JCO01BQU07T0FBQSxnQ0FEZXNoRDs7T0FLbkJpVTs7T0FHVztRQUFBLE9BQUEsdUJBbEJYSyxnQkFVVUYsVUFBU3BVOztPQVFSLE9BbEJYc1Usc0JBVVVGLFVBQVNwVTs7Ozs7T0FLSDJRO09BSE5udEQ7T0FBVWd4RDtXQUFBQTtPQUlsQixXQU5RSixVQUtNekQ7T0FFZCxXQUZGc0QsSUFMbUJqVSxRQUFBQTs7TUFHUjtPQUFMa1UsOEJBSGFsVSxRQUVUeDhDLE9BR01tdEQ7T0FMRzhELFVBS25CUixJQUZNQyxJQUhhbFU7TUFBQUEsTUFBQXlVOztJQVFZO2FBRTNCQyxNQUFPTixVQUFTMTFEO0tBQ3RCLElBRHNCc2hELE1BQUF0aEQ7S0FDdEI7TUFBZ0M7T0FBQSxnQ0FEVnNoRDtPQUNsQjM3QyxnQ0FEa0IyN0M7YUFDbEIzN0MsUUFEa0IyN0MsU0FDbEIzN0M7T0FDOEMsSUFGNUJvd0QsTUF0QmhCTixVQXNCT0MsVUFBU3BVO09BQUFBLE1BQUF5VTs7O01BR2pCLE9BSGlCelU7O0lBR2hCO2FBRUoyVSxPQUFPajJELEdBQUlvcEIsV0FBeUN0a0IsR0FBRW5FO0tBQ3hELEdBRGF5b0I7VUFBWUMsTUFBWkQsUUFBQThzQyxZQUFZN3NDOztVQUFaNnNDLDJCO0tBQ2I7VUFEOEMvTyxpQkFBWHVPLFdBQVd2Tzs7VUFBWHVPLDBCO0tBQzdCLHFDQURHMTFELE1BQTZDOEU7bUJBRXhDZ3hELHVCQUFBQSxnQkFHVixXQUxLOTFEO0tBT0MsdUNBUERBLE1BQTZDOEU7O1VBU3BDcXhEO01BQUFBO01BRVYsV0FYQ24yRDs7S0FjUSxJQUFMdTFELDhCQWRIdjFELE1BQTZDOEUsT0FBRW5FO0tBZWhELFdBZkt1MUQsV0FBMkN2MUQ7S0FnQmhELFdBckJGcTFELE1BSzZCTixjQWN2QkgsSUFkSHYxRCxNQUFBQTtJQWdCcUM7SUE5RGMsV0FPMUR3cEIsUUF1Q0F5c0M7O1lDekZBRyxJQUFFdnVELE1BQUt3dUQsVUFBUzcxRCxTQUFVLFdBQXhCcUgsTUFBS3d1RCxVQUFTNzFELFNBQXFDO1lBRXJEODFELFVBQVV0MkQ7SUFFVjtLQURFdTJEOzt5QkFDaUR2eEM7VUFBcEIsSUFBT3hrQjtVQUNsQyxtQjdCOFROMm5ELGtCNkIvVHdDM25ELFdBQWF3a0I7U0FDbEI7U0FIdkJobEI7O0lBS1osT0FKSXUyRDtHQUlDO1lBRUhDLFFBQU14MkQ7SUFFTjtLQURFeTJEOzsrQkFDdUIsSUFBT0oscUJBQWlCLE9BQWpCQSxTQUEwQixHQUZwRHIyRDtJQUlSLE9BQUEsVzFDZkFvbkMscUIwQ1lJcXZCO0dBR3FEO1lBTXpEQyxRQUFNMTJEO0lBQ0ksSUFBUnFTLFFBWEFta0QsUUFVSXgyRDtJQUVlLHdCQURuQnFTO0dBQzRCO1lBRTlCc2tELE9BQU8zMkQ7SUFDVDtLQUFJNDJELGFiRUFsSSxZYUhLMXVEOzs7S0FFTHltRDs7Ozs7V0FFYSx3QkFBVyxXMUM3QjFCcmYsZTBDMEJFd3ZCOztLQVFNLFdBUE5uUTtLQU9ZLE9BOUJaNlAsVUFxQkt0MkQ7SUFTTztjQUFOO2UsTzdCbVNSbW9EOzs7O0c2Qm5TK0M7R2JEN0N3RztHYzFCTyxJQUFUa0ksU1ZRQXZHLHNDdkREQXRHO1lpRWNBOE0sUUFBbUJDLFVBQ2pCM3RDO0k7S0FRMkM7TUFOdEI0dEM7TUFBUEM7TUFBYkM7TUFNQ0MsY2R5Q0ZsSTtNY3JDRW1JLGNkcUNGbkk7TWMvQkFvSSxXZG5CQTNJLFljQWlCcUk7S0FvQnJCLFNBQUlPLFNBQVMzM0QsR0FBSSxPQUFBLFczQ2hEZnluQyxlMkMrQ0Vpd0IsVUFDUzEzRCxHQUFzRDtLQUN0RDtNQUFUNDNELFdBQVMsVzNDakRYbndCLGUyQytDRWl3QjtNQUdBRyxRakM3QkZ0ZDtNaUNnQ0V1ZDtLQUdKLFNBQUlDLE9BQU9qNUQ7TXpCMEhQOHJEO2N5QjdIQWtOLFdBR09oNUQ7aUJBRUhrNUQ7U0FDTCxPekJzSENoTjtrQlJoRkZsUSxNaUN2Q01rZDsyQkFDQUM7bUJBQ0wsZ0JBRktELFNBQ0FDLGdCQUFBQTtrQkFDNkM7UUFBQTtNQUZuRDtLQUdTO0tBRVgsU0FBSUMsaUJBQWUsK0JBQXFCO0tBR3hCLElBQVpDLGdCQUhBRDtjQUlBN2hELElBQUtpaEQsT0FBUTd0QyxLQUFpQjJ1QztNQUNoQyxJQUFJQyxRQUZGRjtlQUdFRyxLQUFLRjtPQUNQO1NBQ21DLFdBSjlCZCxPQUVFYztrQkFFQTl4RDtVQUNOOzRCQUFpQ3hILEdBQUV3SDtvQnpCMEdwQ3NrRDs0QnlCN0hBa04sV0FtQmtDaDVEOytCQUV2Qms1RDt1QkFDTCxPekJzR05oTjtnQ1JoRkZsUSxNaUN2QmFrZDt5Q0FDQUM7aUNBQ0wsS0FKOEIzeEQsTUFLYSxNQUFBO2lDQUdwQztrQ0FKSGl5RCxTQUowQmp5RDt5Q0FHekIyeEQ7a0NBS0U7dUQsOEJBSkhNOztvREFGQ1AsU0FDQUMsaUJBQ0RNLFNBRENOOztnQ0FNb0Q7c0JBQUE7b0JBUHpEO21CQVFRO21CQWJQRzttQkFFQTl4RDtTQVdRO09BWGQ7TUFZUTtNQUdUO09BQUE7OzJCQUE4RHhIO1lBQWxCO2FBQWF1bUI7YUFBUGd6QzthQUN4Qiw0QkFEd0JBLGNBOUJsRE4sU0E4QjhEajVELEdBQUFBO2FBQy9DMDVEO2FBQVBDO1lBQ0osT0FEV0QsZUFBUEMsYUFEc0QzNUQsR0FBTHVtQixZQUNqRG96QyxTQURpRHB6QztXQUVBO2VBcEJ2RGd6QztXQUQ0QkQ7T0FrQnJCTTtPQUFQRDtNQW5CRk4sZUFtQkVNO01BTUUsSUFBd0NFLG9CQU5uQ0QsZ0JBTW1DQzttQkF0QjFDTCxLQXNCMENLO0tBQXVCO0tBRXBELElBQWZDO2NBQ0FDLHFCQUFzQkM7TUFDeEIsU0FBSWx2QyxPQUFPMG9DLEtBQ1QsT0FEU0Esb0JBRThCO01BRS9CO09BQU55RyxNZGhCRnZKLFVjMUNFaUk7T0EyREF1QixzQkFEQUQ7T0FFQUUscUJBREFELFlBTm9CRjtNQUFBQSxtQkFNcEJFO01BR2lCO09BQWpCRSxpQkFSQXR2QyxPQUlBbXZDO09BS0F6cEQsU2RyQkZrZ0QsVWM5Q0VnSTtPQW9FSixPQTdFbUJKO09BNkVmSCxhZHhFRmpJLFVjdUVFMS9DO01BakdKNG5EOzRCQWdHSWdDLDhCQUVBakM7TUFHRjtPQUVFa0M7U2pFcUNKNU8sU2lFdkNlLFVBTFgyTyxpQkFFQWpDO09BT0FtQyxvQkFaQUosYUFLQS9CO09BUUFvQyxtQkFEQUQsb0JBRkFEO09BS0VHO21CQWRGTDtZQVNBRTtZQUFBQTs7T0FJQXhwQjt3QjtXQUZBeXBCLG9CQUdFRTtPQU1BQzt1QkFwQkZOO1lBU0FFO1lBQUFBO09BVUFLLE9BUEFILG1CQVFFRTtNQUtzQixjQU54QkMsT0FOQTdwQixvQkFZNkI3d0MsR0FBSyxPQVpsQzZ3QyxRQVk2Qjd3QyxNQUFjO0tBQUM7Y0FFOUMyNkQsUUFBcUJoeUQsT0FBTzR2RDtNQTlENUJjLGVBSEFEO01BbUVNLElBQUpwNUQsWUFDQTQ2RCxrQmpDK1lKL3BCLE1pQ2hlRWtvQjs7T0FrRm1DLEt6QnhIckNuTixVeUJ1SElnUCw4QkFEQTU2RCxNQUZtQjJJOzttQkFHbkJpeUQ7O1lBR0sxQjtRQUNBLFlBTExsNUQsTUFGbUIySTtTQVFOLFFBbkZmcXdELFdBNkVFaDVELE1BSUtrNUQ7U0FHRCxTQUhDQSxTQUpMbDVELFNBRjBCdTREOzs7U2pDZDlCcGMsTWlDb0JTK2M7UUFKTGw1RDtRQUNBNDZELGlCakN1Wko5b0MsS2lDcFpTb25DOzt3QkFKTGw1RCxNQUZtQjJJO1FBZUwsSUFBTml6QyxVQWJSNTdDLFNBRjBCdTRELFNBZ0JsQnNDLFFqQzNFWjllLFdpQzBFWUgsTUE3RlZtZDtRQStGTSxNQTVGTkMsV0E2RUVoNUQsTUFjUTY2RDtRQWRSNzZEO1FBQ0E0NkQsaUJqQ3VaSjlvQyxLaUMxWVkrb0M7OztLQUlSO0tBR2dCO01BQWhCYjtNQUNBNVM7O1VBekhZb1I7bUJBMEhRQTtXQUNDLElBQWZzQyxlQTVEUmYscUJBeURFQztXQU1FLE9BMUZKemlELElBc0ZzQmloRCxlL0R2SXhCMzJELE8rRHdJVWk1RCxvQkFBQUE7VUFHNkQ7TUFQckVDOztVQXZIQ3RDO1VBeUhDclI7bUJBT2dDcVIsYUFBWXJSO1dBL0I5Q3VULFFBK0JrQ2xDLGFBaEliRjtXQWlJbkIsT0FENENuUjtVQUV0QztNQUdONFQsdUJBZEZELDBCQXpEQWpCO01Bd0VFL3JELGtCQURBaXREO0tBRUo7T0FESWp0RDs7UUFFTSx3QkFGTkE7c0JBSU87WUFETHE1QztRQUFtQixPQUFBLFdBQW5CQTtPQUNPO0tBQ2IsYUFMSXI1QztLQU9OLFNBQUlrdEQsWUFBWS81RDtNQUNkO09BQUk4bUQ7T0FDQXAwQyxnQkFBaUIsd0JBOUhuQmlsRCxTQTRIWTMzRDtNQUdkLHdCQURJMFMsT0FEQW8wQztLQUV1QjtLQUU3QixTQUFJa1QsU0FBT2hDO01BQ0E7T0FEdUJYO09BQWhCeDJEO09BQVN1QztPQUNyQjBqRCxLVHRISnNLO09TdUhJMStDLHdCQUFxQix3QkFsSXZCa2xEO01BbUlGLEtBSGdCLzJELFNBY04sY2hDM0xWNjlDO01nQ21MTTtPQUZDcDRDLE9BSlN6RjtPQUtSbzVEOztXQUx3QjVDO29CQU1IQTtZQUNuQixPaENrYVZuVDs7Z0NnQ2pha0RvTyxLQUFPLE85QjRJekQ5SixzQjhCNUlrRDhKLFNBQXVCO3VCQUFuRCxXQUZPK0UsUUFOSmowRCxPQUlsQmtEO1dBSW9FO01BRXZFOztjaENyTEpxNEM7Z0JFK1RBNko7OzBCOEJsSkk5MUMsT0FEQW8wQzs7OzhCaEMrZUpwQyxLZ0MzZVF1Vjs7O0tBYU47TUFERUM7UWpDeVJKbGM7VWlDMVNFZ2M7O2tCaEM3S0Z0Yjs7WWdDaU1NO2FBQXNCMzVDO2FBQUozRjthQUFIME07YUFBSmI7YUFBSHlaO2FBQUgxa0I7YUFDSSxRaEN0S2ZpRyxLZ0NxS2N5ZTthQUNpQixVaEN0Sy9CemUsS2dDcUt3QjdHOzs7NkJBQWJZLElBQU1pTCxTQUFJYSxTQUFPL0csT0FBZDJmOzRCQUFIMWtCLElBQU1pTCxTQUFJYSxPQUFHMU0sR0FBSTJGOzthQU9OLFdBUFgvRSxHQUFHMGtCLE1BQUd6WixJQUFJYSxTQUFPL0c7WUFVWCxZQVZBa0csSUFBSWE7YUFXUTtjQUFUcXVELGNBcENsQkosWUF5QmU5dUQsSUFBSWE7Y0FTTHN1RDsrQixPaEN2TGhCdGIsU2dDOEtjcDZCO2tCaEM5S2RvNkIsU0FqQkFILFFnQzBNb0J3YixTQVhJLzZEOztpQkFTUmc3RCxNaEN2TGhCdGIsU2dDOEtjcDZCLEtBQVV0bEI7WUFlWixXQWZEWSxHQVNLbzZELEtBVFlyMUQ7V0FlUDtVQWxLbkI4eUQ7TUErSUF3Qzs7VUFDRUg7O1dBcUJZLElBQVlqdkQsY0FBSDdMLGNBQUhZO1dBRWIsWUFGYUE7WUFHSzthQUFmczZELG9CQTlDVlAsWUEyQ29CLzVEO2FBQ2R5TSxTaENqTVJxeUMsU0FqQkFILFFnQ29OWTJiLGVBSGFsN0Q7O2dCQUNqQnFOLFNBRGlCck47V0FPbEIsY0FQcUI2TCxPQVVuQixPQVREd0I7V0FPZ0IsSUFBZDh0RCxtQkFuRFJSLFlBMkMwQjl1RDtXQVNDLE9oQ3pNN0I2ekMsU2dDaU1RcnlDLFFoQ2xOUmt5QyxRZ0N5TlU0YjtVQUVNO01BRWRDLGVEMU1GeEQsT0NHbUJJO01Bd01qQmhLO1FsQmxMRkg7bUJrQm9Mc0MzVTtXQUN0QixJQUFSN29DLFEvRGpOUjBTLEcrRGdOc0NtMkI7V2xCL01wQ3NVLFNrQmdOTW45QztXQUVPO1lBQVBnckQsT2xCdk5OOU4sYWtCcU5NbDlDO1lBR0Ftb0QsV25Cek9SaHVDLE9tQndPUTZ3QztZQUVFLGFBOUlSN0I7dUJBZ0ppQyxnQkFoSmpDQSxrQkE2SU1oQjtlQUVHbnpEO1dBQU8sZ0JBQVBBLEdBRkhtekQ7OEJBN0lOZ0Isa0JBNklNaEI7O1VBSUs7TUFHVDlRLEtUckpGOEs7S1NzSkYsU0FBSWpLLFVBQVU5QixJQUFLLE9kbEtqQjBKLFFjM0NFaUksYUE2TVUzUixJQUFtRDtLQUNqRTtNQUhFNlU7UTlCcUZGbFM7aUI4QnBGSTFCLFlBQ0FhLHdCaEMrYUpqRCxLZ0NoZUUyVjtNQXFERXhTLE9UMUpGK0o7TVMySkUrSTs7VUFqR0ZkO21CQWtHbUMzVDtXQUMvQixPOUIxT04zcUM7Ozs2QjhCME9rQ2tzQztxQkFDeEIsSUFJTW1ULHVCQUNBQzs4QkFDQUMsYUFBYS9CO3NCQUNmLElBQUlnQywyQkFJQW5nRDtzQkFDRCxZQVBEaWdELGdCQU9vQixXQVBwQkE7c0JBQUFBOzt5QkFFRUU7eUNBTytDLE9BRjdCLFdBZEM3VSxRQVFSNlMsS0FROEM7c0JBQzFEO3VDQUpDbitDLE1BUEZnZ0QsZ0JBR0VHO3NCQVFEO2lDQVhESCxpQkFPRWhnRCxLQU9GLFdBcEJxQnNyQyxRQVFSNlM7O3FCQVlGO3FCQUVmLFNBakJFNEIsZUFpQkU1QixLQUFPLE9BZFArQixhQWNBL0IsS0FBdUI7cUJkM0xyQ3ZKLFVjMUNFaUk7cUJBb05Va0Q7O29CQW9CYTtVQUFDO01BRXhCbFQsaUJBNUJBa1Q7S0E2QkosU0FBSUssWUFBVW5WLElBQUssT2RwTWpCMEosUWN2Q0VrSSxhQTJPVTVSLElBQW1EO0tBQ2pFO01BR007T0FGQ29WO09BQ0NDOztXQURERDtvQkFFNkJuOEQ7WUFDMUI7YUFDTXdRLFNkdk1ka2dELFVjOUNFZ0k7YUFzUFEsT0EvUE9KO2FBNlBMSCxhakV0SWQxTSxTbURsSEV5RSxVY3lQYzEvQztZQUdOLHdCQUwwQnhRLEdBQ3RCbTREO1dBSXlDOztTUHBSdkRwRSxXTzZPSWhMLFdBNkJBSixTQUNBdVQsY0FHSUUsaUJBdkNOUjs7OztTOUJxRkZsUztrQjhCL0VJWCxXQTZCQUosU0FDQXVULDBCQXBDRk47bUJBaURzQjdVLElBQU0sT2xCOVA5QmlILFVrQmlNRU0sYUE2RHNCdkgsSUFBeUM7S0FBbkQsb0IsT2ZuU2RnSjtLZXVSQTtNQWhDRXNNLHlCQTRDWTtNQUdWM0ksT1RuUUp6QixXQUlBRTtNU2dRSW1LLGFEaFJKckUsUUNPbUJLO01BMFFmaDRELFlBQWEsd0JBRGJnOEQ7TUFFQUMsbUJBREFqOEQsSUFGQW96RDtNQURGOEk7UTlCa0NGOVM7O2M4QjlCSTZTOzs7c0JBcEVGYiwyQkFrQkFXO0tBcURKLE9BUElHOztHQ3ZTTjtZQUVJQyxVQUFVcnJEO0lBQU0sTUFBQSwyQ0FBTkE7R0FBMkI7WUFFckNzckQsVUFBVTVtRDtJQUNaO0tBQUl5RyxRQURRekc7S0FFUjZtRCxPQUZRN21ELFlBQ1J5RztLQUVBcWdELFNBSFE5bUQsWUFDUnlHO0lBR0osV0FISUEsVUFDQW9nRCxNQUNBQztHQUN3QjtZQU0xQkMsV0FBV3Y4RDtJQUNiLElBQUksZUFBWSxtQkFESEEsS0FDVDs7OzZCQUNXLFdBRkZBOzs7R0FFbUI7WUFFOUJ3OEQsV0FBV2huRDtJQUNiLElBQUlsRyxNQURTa0c7SUFBQUEsaUJBQ1RsRyxRQUFBQSxnQkFEU2tHLFdBQ1RsRzs7R0FJRDtZQUVEbXRELGVBQWV2N0Q7SUFDakIsU0FEaUJBO2NBQUFBO2VBQUFBLFdBQUFBOztrQkFBQUEsV0FBQUE7O2lCQUFBQSxxQkFBQUE7SUFLQSxPQTVCZmk3RCxzREF1QmVqN0Q7R0FLbUU7WUFHbEZ3N0QsYUFBYXJ0RCxLQUFJc0UsS0FBSWdwRDtJQUNmLElBQUpqOUQsUUFEZWlVO0lBR25CLFNBQUk0ZSxTQUFTbnlCLEdBQUVjO0tBQUksc0JBQU5kLEdBRlRWLE1BRVd3QjtLQUZYeEIsT0FBQUE7O0lBRW1EO0lBRXZELFNBQUlrOUQsY0FBY2g4RCxHQUFFKzdELEdBQUksY0FBSkEsTUFBRi83RCxlQUFtQjtJQUVsQyxHQUZDZzhELGlCQUxtQkQ7S0FHbkJwcUMsU0FIV2xqQixLMUR6QmJnVyxXMER5QnFCczNDO1lBS25CQyxrQkFMbUJEO0tBR25CcHFDLFNBSFdsakIsSzFEekJiZ1csa0IwRHlCcUJzM0M7S0FHbkJwcUMsU0FIV2xqQixLMUR6QmJnVyxpQjBEeUJxQnMzQzs7WUFLbkJDLGtCQUxtQkQ7S0FHbkJwcUMsU0FIV2xqQixLMUR6QmJnVyxrQjBEeUJxQnMzQztLQUduQnBxQyxTQUhXbGpCLEsxRHpCYmdXLGtCMER5QnFCczNDO0tBR25CcHFDLFNBSFdsakIsSzFEekJiZ1csaUIwRHlCcUJzM0M7O1lBS25CQyxrQkFMbUJEO0tBR25CcHFDLFNBSFdsakIsSzFEekJiZ1csa0IwRHlCcUJzM0M7S0FHbkJwcUMsU0FIV2xqQixLMUR6QmJnVyxrQjBEeUJxQnMzQztLQUduQnBxQyxTQUhXbGpCLEsxRHpCYmdXLGtCMER5QnFCczNDO0tBR25CcHFDLFNBSFdsakIsSzFEekJiZ1csaUIwRHlCcUJzM0M7O1lBS25CQyxrQkFMbUJEO0tBR25CcHFDLFNBSFdsakIsSzFEekJiZ1csa0IwRHlCcUJzM0M7S0FHbkJwcUMsU0FIV2xqQixLMUR6QmJnVyxrQjBEeUJxQnMzQztLQUduQnBxQyxTQUhXbGpCLEsxRHpCYmdXLGtCMER5QnFCczNDO0tBR25CcHFDLFNBSFdsakIsSzFEekJiZ1csa0IwRHlCcUJzM0M7S0FHbkJwcUMsU0FIV2xqQixLMUR6QmJnVyxpQjBEeUJxQnMzQzs7O0tBR25CcHFDLFNBSFdsakIsSzFEekJiZ1csa0IwRHlCcUJzM0M7S0FHbkJwcUMsU0FIV2xqQixLMUR6QmJnVyxrQjBEeUJxQnMzQztLQUduQnBxQyxTQUhXbGpCLEsxRHpCYmdXLGtCMER5QnFCczNDO0tBR25CcHFDLFNBSFdsakIsSzFEekJiZ1csa0IwRHlCcUJzM0M7S0FHbkJwcUMsU0FIV2xqQixLMUR6QmJnVyxrQjBEeUJxQnMzQztLQUduQnBxQyxTQUhXbGpCLEsxRHpCYmdXLGlCMER5QnFCczNDOztXQUNuQmo5RDtHQXNDRjtZQUVBbTlELHVCQUF1Qnh0RCxLQUFJc0UsS0FBSW1wRCxNQUFLQztJQUN0QztLQUFJQyxTQUQ2QkY7S0FFN0JHLFFBRmtDRjtLQUdsQzF1RCxnQkFGQTJ1RCxlQUNBQztJQUVGLE9BN0NBUCxhQXlDdUJydEQsS0FBSXNFLEtBR3pCdEY7R0FDdUI7WUFFekI2dUQsZUFBZW42RCxLQUFJL0MsR0FBRWtCLEdBQUVpdkM7SUFDZCxJQUFQZ3RCLE9sRWtFRjk2Qyxja0VuRXVCOHRCO0lBRXpCLEdBRnVCanZDOztNQUlkOG1CLE1BSmM5bUI7TUFFbkIrbkQsaURBRUtqaEM7O1NBRkxpaEM7SUFLUSxPQXJGVmtUOztlQThFZXA1RDs7OzttQkFDYm82RCxvQkFDQWxVLHdCQUZpQmpwRDtHQU9tQztZQUV0RG85RCxnQkFBZ0JwOUQ7SUFDbEI7S0FBSUssMEJBRGNMO0tBRWRzbEIsTUFBSyxrQkFETGpsQjtLQUVBZDtLQUNBODlEO0tBQ0FDO0tBQ0FqbkQ7S0FFSixPQVBJaFc7S0FLUTs7U0FFWlg7O2lCQUZJMlc7Ozs7OztVQXVDRyxXQUFBLGdCQTdDV3JXLEdBUWxCTjtXQUZJMlc7O1dBZkY2bUQscUJBU2dCbDlELE9BOEN3RCxnQkE5Q3hEQSxHQVFsQk4sS0FBQUE7O1VBR2EsSUFFSndCLElBRkksZ0JBWEtsQixHQVFsQk47b0JBS1N3QjtXQVBMbVY7cUNBSkFpUCxLQUNBL2xCLE1BVUsyQixJQVZMM0IsT0FBQUE7OztTQUdBOFc7U0FnRHNCLFdBdEh4Qm9tRCxlQXNId0MsZ0JBdER4Qno4RCxHQVFsQk47U0FISTQ5RCxRQUFBQTtxQkFBQUEsa0JBQUFBO1VBRkEvOUQsT0FsQkZzOUQsdUJBaUJFdjNDLEtBQ0EvbEIsTUFDQTg5RCxPQUNBQzs7O1NBZEZKLHFCQVNnQmw5RCxNQVFsQk47OztTQTJDb0MsV0FuSGxDKzhELGVBbUhrRCxnQkFuRGxDejhELEdBUWxCTjtTQUhJNDlELFFBQUFBO1NBQ0FqbkQ7OztRQTRDZ0MsV0FsSGxDb21ELGVBa0hrRCxnQkFsRGxDejhELEdBUWxCTjtRQUhJNDlELFFBQUFBO1FBQ0FqbkQ7OztRQURBaW5ELFFBckVGYixlQWlIaUMsZ0JBakRqQno4RCxHQVFsQk47UUFGSTJXOzs7OztTQWtDRyxVQUFBLGdCQXhDV3JXLEdBUWxCTjtVQUZJMlc7O1VBZkY2bUQscUJBU2dCbDlELE9BeUNxRCxnQkF6Q3JEQSxHQVFsQk4sS0FBQUE7O1NBd0IwQixXQWhHeEIrOEQsZUFnR3dDLGdCQWhDeEJ6OEQsR0FRbEJOO1NBSkkyOUQsUUFBQUE7cUJBQUFBLGtCQUFBQSxPQUVBaG5EO1NBSEE5VyxPQTNERm05RCxhQTBERXAzQyxLQUNBL2xCLE1BQ0E4OUQ7U0FFQWhuRDs7O1FBd0JnQyxXQTlGbENvbUQsZUE4RmtELGdCQTlCbEN6OEQsR0FRbEJOO1FBSkkyOUQsUUFBQUE7UUFFQWhuRDs7O1FBdUJnQyxXQTdGbENvbUQsZUE2RmtELGdCQTdCbEN6OEQsR0FRbEJOO1FBSkkyOUQsUUFBQUE7UUFFQWhuRDs7O09BRkFnbkQsUUFwRUZaLGVBNEZpQyxnQkE1QmpCejhELEdBUWxCTjtPQUZJMlc7OztPQVVNLFlBQUEsZ0JBaEJRclcsR0FRbEJOOzs7OEJBTkk0bEIsS0FDQS9sQjtRQUdBOFc7UUFIQTlXLE9BQUFBOzs7Ozs7OzttQ0FEQStsQixLQUNBL2xCO2FBR0E4VzthQUhBOVcsT0FBQUE7OzttQ0FEQStsQixLQUNBL2xCO2FBR0E4VzthQUhBOVcsT0FBQUE7OzttQ0FEQStsQixLQUNBL2xCO2FBR0E4VzthQUhBOVcsT0FBQUE7OzttQ0FEQStsQixLQUNBL2xCO2FBR0E4VzthQUhBOVcsT0FBQUE7OzttQ0FEQStsQixLQUNBL2xCO2FBR0E4VzthQUhBOVcsT0FBQUE7OzttQ0FEQStsQixLQUNBL2xCO2FBR0E4VzthQUhBOVcsT0FBQUE7OzthQUdBOFc7Ozs7Ozs7K0JBSkFpUCxLQUNBL2xCO1NBR0E4VztTQUhBOVcsT0FBQUE7OztRQVpGMjlELHFCQVNnQmw5RCxPQTBCK0MsZ0JBMUIvQ0EsR0FRbEJOLEtBQUFBOzs7TUFBQSxXQUFBQTtrQkFBQUE7TUFBQUE7OztxQkFGSTJXLFVBZkY2bUQscUJBU2dCbDlELE1BQ2RLO1dBRUFkLFNBRkFjLHlCQUNBaWxCLFFBQ0EvbEIsU0FIY1M7R0FpRStDOztJLGE7STtHOzthN0UwRzNEdTlELGdCQUFLL25EO0tBQ1Y7S0FBQTtNQUFBLE9BQUEsdUJBQ0Nnb0Qsd0JBRlNob0Q7O0tBQ1YsT0FDQ2dvRCw4QkFGU2hvRDtJQUNtQjthQUR4QnhFLEtBQUt3RSxRLHVCQUFMK25ELFVBQUsvbkQ7YUFFVGdvRCw0QkFBcUJob0QsUUFBT2lvRDtLQUM5QixJQUQ4QkMsb0JBQUFEO0tBQzlCO01BQU07T0FEd0JFLDJCQXhPNUIvZ0Qsa0JBd080QjhnRCxtQkFBUGxvRDtlQUFPbW9EO2NBQUFBOztVOztVOztVOztVOztVOztVOztVOztVLE87O29CNkVwUTVCeEI7OEQ3RW9RcUIzbUQ7O1UsTzs7b0I2RXBRckIybUQ7OEQ3RW9RcUIzbUQ7O1UsTzs7b0I2RXBRckIybUQ7OEQ3RW9RcUIzbUQ7O1UsTzs7b0I2RXBRckIybUQ7OEQ3RW9RcUIzbUQ7O1U7O1U7O1UsTzs7VSxPOztVLE87O1UsTzs7VSxVNkV4UHJCK21ELGtCN0V3UHFCL21EOzs7O2MsTzs7YyxPOztVOztVLGUsNEJBQUFBO1UsTzs7VTs7VUE0SHZCLG1CQTVIdUJBLFFBQUFBLG1CQUFBQTtVLFc2RTdLckI0bkQ7O1U7O1U7VyxPLHVCN0UyS0lHLFlBRWlCL25EOztVLE9BRmpCK25ELGtCQUVpQi9uRDs7VTZFcFByQmduRCxXN0VvUHFCaG5EO1U7VyxPLHVCQUZqQituRCxZQUVpQi9uRDs7VSxPQUZqQituRCxrQkFFaUIvbkQ7O1UsWTtpRDtVQTBLckJvb0QsYUExS3FCcG9EO1U7VyxPLHVCQUZqQituRCxZQUVpQi9uRDs7VSxPQUZqQituRCxrQkFFaUIvbkQ7O1UsYzt1RDtVO1csTyx1QkFGakIrbkQsWUFFaUIvbkQ7O1UsT0FGakIrbkQsa0JBRWlCL25EOztVLE82RXBRckIybUQ7NEQ3RW9RcUIzbUQ7O01BdUtBLFdBdktBQSxXQUFBQTtNQUFPa29ELG9CQUFBQzs7SUF3S21CO2FBRS9DRSx3QkFBYXJvRDtLQUNkO0tBQUE7TUFBQSxPQUFBO2VBQ0Nzb0QsZ0NBRmF0b0Q7O0tBQ2QsT0FDQ3NvRCxzQ0FGYXRvRDtJQUN3QjthQURyQ29vRCxhQUFhcG9EO0ssdUJBQWJxb0Qsa0JBQWFyb0Q7O2FBRWJzb0Qsb0NBQTZCdG9ELFFBQU9pb0Q7S0FDdEMsSUFEc0NDLG9CQUFBRDtLQUN0QztNQUFNO09BRGdDRSwyQkFwWnBDL2dELGtCQW9ab0M4Z0QsbUJBQVBsb0Q7Y0FBT21vRDtjQUFBQTs7VTs7VTZFaGFwQ25CLFc3RWdhNkJobkQ7VTtXLE8sdUJBRjdCcW9ELG9CQUU2QnJvRDs7VSxPQUY3QnFvRCwwQkFFNkJyb0Q7O1UsTzZFaGI3QjJtRDs7VTtXLE8sdUI3RThhQTBCLG9CQUU2QnJvRDs7VSxPQUY3QnFvRCwwQkFFNkJyb0Q7O01Bc0JSLFdBdEJRQSxXQUFBQTtNQUFPa29ELG9CQUFBQzs7SUF1Qm1CO0ksV0FyTW5EM3NEOztHOEU3UFI7WUFFSStzRCxtQkFBbUJ2b0QsUUFBT3dvRDtJQUM1QjtLQUE0QixRRE4xQjVCLFVDS21CNW1EO0tBQ0Z5b0Q7S0FBUEM7S0FBUEM7SUFDTCxXQURLQSxPQUFPRCxPQUFPRCxPQURTRDtHQUVzQztZQ1QxREksS0FBS3g5RCxHQUFJLFdBQUpBLFFBQUx3OUQsS0FBS3g5RCxnQkFBMkM7WUFDcER5OUQsT0FBS3o5RCxHQUFJLE9BREx3OUQsS0FDQ3g5RCxXQUFjO0dBQ3BCLElBSEQwOUQsb0JBRUVELE9uRThGTW44QyxxQkFBQUE7WW1FekZScThDLHFCQUFxQjErRDtJQUNWLElBQVQyK0QsVUFEbUIzK0QsVUFBQUE7T0FDbkIyK0QsVUFDUyxTQUZVMytELE1BUHJCeStEO1NBVUlHLFlBSGlCNStEO0tBR2EscUJwRXdJbEN3aUIsY29FeElJbzhDOztJQUlJO0tBQUp6K0QsSUFBSSwyQkFQYUg7S0FRakJ5bEIsTUFBTyxxQkFEUHRsQixNQVBpQkgsSUFPakJHLElBQ3lDLDJCQVJ4Qkg7SUFTWSxjQUQ3QnlsQix1QkFBQUE7S0FDeUQscUJBRHpEQTtJQUVDLE9BRkRBO0dBR0g7WUNwQkRvNUMsWUFBWXB0QjtJQUNkLFVBRGNBO1lBQUFBOztZQUVWeGdDOztZQUFBQTs7WUFBQUE7O1lBQUFBOztZQUFBQTs7WUFBQUE7O1lBQUFBOztZQUFBQTs7WUFBQUE7O1lBQUFBOztZQUFBQTs7WUFBQUE7O1lBQUFBOztZQUFBQTtvQkFBQUE7OztZQUZVd2dDOztZQUdIdHhDLElBSEdzeEMsUUFFVnhnQyx3Q0FDTzlROzs7WUFNR3NsQixNQVRBZ3NCLFFBRVZ4Z0MsTUFPVXdVOztZQUNEMDFDLE1BVkMxcEIsUUFFVnhnQyx3Q0FRU2txRDs7OztTQUNMdDdELElBWE00eEM7U0FFVnhnQyx3Q3JFa0pGdVIsY3FFeklNM2lCOzs7O1NBRUVHLElBYkl5eEM7U0FFVnhnQyx3Q3RFNlJGNFIsZ0JzRWxSUTdpQjs7O1lBRVc4K0QsTUFmUHJ0QixRQUVWeGdDLHdDQWFpQjZ0RDs7OztTQUdaditELElBbEJLa3hDO2dCQWtCTGx4QztTQWhCTDBROztJQXdCRixzQkF4QkVBO0dBd0JlOztJQ2JuQjthQUVJOHRELFdBQVkvMUQ7Y0FHTmcyRCxZQUFZdnRCO01BQU0sVUFBTkE7Y0FBQUE7O1VBZVYsT0F5Qk53dEI7Ozs7VUFqQ2UsT0FBQTs7VUFDUixPQUFBOztVQUZLLE9BQUE7O1VBS0wsTUFBQTs7VUFHRCxPQU1OQzs7VUFITSxPQWlGTkM7O1VBbEZNLE9BOEROQzs7O2NBOUVnQjN0Qjs7Y0FHVHR4QyxJQUhTc3hDLFFBR0osT0FBQSwyQkFBTHR4Qzs7Y0FPRXNsQixNQVZPZ3NCLFFBVUYsT0FBQSwyQkFBTGhzQjs7Y0FSTDVsQixJQUZZNHhDLFFBRVAsT0FBQSwyQkFBTDV4Qzs7Y0FHRUcsSUFMVXl4QyxRQUthLE9BQUEseUNBQXZCenhDOztjQURETyxJQUpXa3hDLFFBSU4sT0FBQSwyQkFBTGx4Qzs7TUFTTCxNQUFBLDZDRC9CSnMrRCxZQ2tCb0JwdEI7S0FrQmpCO2NBQ0N4c0IsYUFBVyxPQW5CUCs1QyxZQW1CbUIsV0F0QmJoMkQsWUFzQndCO2NBQ2xDazJEO01BQ1EsSUFBTnp0QixNQUFNLFdBeEJFem9DO2dCQXdCUnlvQywyQkFBQUE7T0FFSSxPQUFBO01BQ0QsT0FFTDR0QixtQkFMRTV0QjtLQUlIO2NBQ0M0dEIsbUJBQW1CNXRCLEtBQUlyckI7TUFBTSxJQUMzQjlrQixJQTNCRTA5RCxZQTBCZXZ0QixNQUtuQjZ0QixRQUhJLFdBL0JNdDJEO2dCQWtDVnMyRDtnQkFBQUEsT0FEc0IsT0FHdEJDLGlCQU5FaitELEdBRHFCOGtCO2lCQUt2Qms1QztRQUZzQixXcEVXMUJwNUMsUW9FYk01a0IsR0FEcUI4a0I7UUFHRCxPQUFBOzs7TUFFZixNQUFBOytCRGpEWHk0QyxZQ2lESVM7S0FDRDtjQUNDQyxhQUFhbjVDO01BQU0sSUFBTkMsUUFBQUQ7TUFBTTtPQUNiLElBQUo5a0IsSUFmRjJqQixVQW1CQXdzQixNQUhJLFdBdENNem9DO2lCQXlDVnlvQztpQkFBQUEsS0FEc0IsSUFKVG5yQixZQUNYaGxCLEdBRFcra0IsUUFBQUEsUUFBQUM7a0JBS2JtckI7U0FGc0IsV3BFSTFCdnJCLFFvRU5NNWtCLEdBRFcra0I7U0FHUyxPQUFBOzs7T0FFZixNQUFBO2dDRHhEWHc0QyxZQ3dESXB0Qjs7S0FDRDtjQUNDd3RCO01BQ1EsSUFBTnh0QixNQUFNLFdBNUNFem9DO2dCQTRDUnlvQywwQkFBQUE7T0FFSSxPQUFBO01BQ0QsT0FFTCt0QixvQkFMRS90QjtLQUlIO2NBQ0MrdEIsb0JBQW9CL3RCLEtBQUlyckI7TUFBTSxJQUM1QjlrQixJQWFGbStELFlBZG9CaHVCLFNBS3BCNnRCLFFBSEksV0FuRE10MkQ7Z0JBc0RWczJEO2dCQUFBQTtRQUZ1QixXcEVUM0JwNUMsUW9FT001a0IsR0FEc0I4a0I7UUFHRCxPQUFBOztnQkFFdkJrNUMsT0FEdUIsT0FHdkJJLGtCQU5FcCtELEdBRHNCOGtCOztNQUtqQixNQUFBOytCRHJFWHk0QyxZQ3FFSVM7S0FDRDtjQUNDSSxjQUFjdDVDO01BQU0sSUFBTkMsUUFBQUQ7TUFBTTtPQUNkLElBQUo5a0IsSUFlRnErRCxvQkFYQWx1QixNQUhJLFdBMURNem9DO2lCQTZEVnlvQztpQkFBQUE7U0FGdUIsV3BFaEIzQnZyQixRb0VjTTVrQixHQURZK2tCO1NBR1MsT0FBQTs7aUJBRXZCb3JCLEtBRHVCLElBSlRuckIsWUFDWmhsQixHQURZK2tCLFFBQUFBLFFBQUFDOztPQUtQLE1BQUE7Z0NENUVYdTRDLFlDNEVJcHRCOztLQUNEO2NBQ0NndUIsWUFBWW4rRDtNQUFPLFVBQVBBLHdCQUFBQTtPQUdOLElBREM0RSxJQUZLNUUsTUFLVm13QyxNQUZJLFdBbEVJem9DO2lCQW9FUnlvQywwQkFBQUEsS0FEUyxXQUZKdnJDLEdBM0NQK2U7T0E4Q1MsTUFBQTtnQ0RuRmI0NUMsWUNtRk1wdEI7O01BRU0sTUFBQSw2Q0RyRlpvdEIsWUM4RWdCdjlEO0tBUWI7Y0FDQ3ErRDtNQUNJLElBTUpsdUIsTUFOSSxXQXpFTXpvQztnQkErRVZ5b0MsMEJBQUFBO09BSk0sSUFEQ3ZyQyxJQUtQdXJDLFFBRkU2dEIsUUFGSSxXQTNFSXQyRDtpQkE2RVJzMkQsNEJBQUFBLE9BRFMsV0FGSnA1RCxHQXBEUCtlO09BdURTLE1BQUE7Z0NENUZiNDVDLFlDNEZNUzs7TUFFTSxNQUFBLDZDRDlGWlQsWUM4RklwdEI7S0FDRDtjQUNDMnRCO01BQXVCLElBQ3JCcHlDLEtBNURGL0gsVUFzRUF3c0IsTUFUSSxXQW5GTXpvQztnQkE0RlZ5b0M7Z0JBQUFBO1FBUFMsSUFBTDFrQixLQS9ESjlILFVBbUVFcTZDLFFBSEksV0F0Rkl0MkQ7a0JBeUZSczJEO2tCQUFBQSxPQURzQixPQU14Qk0saUJBVEk3eUMsUUFIRkM7a0JBT0FzeUM7VUFGdUIsT0FBQSwrQkFMdkJ0eUMsUUFHRUQ7O1FBSUssTUFBQTtpQ0R4R2I4eEMsWUN3R01TOztnQkFHRjd0QjtRQURNLE1BQUE7O01BQ0MsTUFBQSw2Q0QzR1hvdEIsWUMyR0lwdEI7S0FDRDtjQUNDbXVCLGFBQWF4NUM7TUFBTSxJQUFOQyxRQUFBRDtNQUFNO09BQ2IsSUFBSjlrQixJQXpFRjJqQixVQTZFQXdzQixNQUhJLFdBaEdNem9DO2lCQW1HVnlvQztpQkFBQUEsS0FEc0IsSUFKVG5yQixZQUNYaGxCLEdBRFcra0IsUUFBQUEsUUFBQUM7aUJBS2JtckI7U0FGdUIsV3BFdEQzQnZyQixRb0VvRE01a0IsR0FEVytrQjtTQUdVLE9BQUE7OztPQUVoQixNQUFBO2dDRGxIWHc0QyxZQ2tISXB0Qjs7S0FDRDtjQUNDMHRCO01BQ0ksSUFRSjF0QixNQVJJLFdBdEdNem9DO2dCQThHVnlvQztpQkFBQUE7UUFETSxNQUFBOztvQkFDTkE7T0FOTSxJQURDdnJDLElBT1B1ckMsUUFIRTZ0QixRQUhJLFdBeEdJdDJEO2lCQTJHUnMyRDtpQkFBQUEsT0FEdUIsT0FNekJPLFlBVE8zNUQsT0FqRlArZTtrQkFxRkVxNkMsT0FGTSxPQUFBLDJCQUZEcDVEOztPQUlFLE1BQUE7Z0NEMUhiMjRELFlDMEhNUzs7TUFHSyxNQUFBLDZDRDdIWFQsWUM2SElwdEI7S0FDRDtjQUNDb3VCLFlBQVkzNUQsR0FBRTVFO01BQ1YsSUFFSm13QyxNQUZJLFdBakhNem9DO2dCQW1IVnlvQywyQkFBQUE7T0FETSxPQUFBLDJCQUZNdnJDLEdBQUU1RTtNQUdQLE1BQUEsNkNEbElYdTlELFlDa0lJcHRCO0tBQ0Q7S0FFSCxJQUFNLElBSUpBLE1BSkksV0F0SFF6b0M7V0F3SEZpaUM7VUFBQXRvQywwQkFBQXNvQztTQUFBdG9DLHNDQUFBQSxRQURzQjtNQUNkLE1BQUEsNEJBQVJBOztlQUVWOHVDLDBCQUFBQSxLQURPO0tBQ0EsV0F2SER1dEIsWUF1SE52dEI7SUFBNkI7YUFFN0JxdUIsT0FBUTkyRDtLQUNWLElBQU0sSUFJSnRCLE1BaklBcTNELFdBNEhRLzFEOzs7OztxQ0FFd0I7V0FDTWlJO09BQVMsV0FBVEE7OztVQUNKOHVEO01BQVEsV0FBUkE7O0tBQzNCLFdBQVByNEQ7SUFBYTtJQXZJakIsdUJBa0lJbzREOztZQzVJRkUsY0FBY25nRTtJQUFJLGVBQUpBLFVBQUFBLHVCQUFBQTtXeEVnT2R5aUI7R3dFaE9xRTtZQUVyRTI5QyxhQUFjdnRDLFVBQVM3eUI7SUFDekIsV0FEZ0I2eUIsVUFGZHN0QyxlQUV1Qm5nRTtJQUVoQixPQUFBLFdBRk82eUIsVUFGZHN0QyxjQUV1Qm5nRTtHQUVhO1lBRXBDcWdFLE9BQVF4dEMsVUFBVUcsWUFBVzF5QjtJQUMvQixJQUFJSywwQkFEMkJMLElBRS9CLE9BRElLOztTQUNKWDs7TUFDUSxJQVFKd0IsSUFSSSxnQkFIdUJsQixHQUUvQk47O2dCQVNJd0I7T0FOVSxXQUxNd3hCOzs7Ozs7aUJBV2hCeHhCO2lCQUFBQTtpQkFBQUE7O2FBTFUsV0FOTXd4Qjs7YUFVTixXQVZNQTs7YUFRTixXQVJNQTs7YUFPTixXQVBNQTs7YUFTTixXQVRNQTs7YUFJTixXQUpNQTs7Ozs7Ozs7b0JBV2hCeHhCOztRQUdVLFdBZEpxeEIsVUFjYSxnQkFkUXZ5QixHQUUvQk47OztPQVdJLFdBYmdCZ3pCO09BSmxCb3RDLGFBSVF2dEMsVUFXTnJ4Qjs7TUFUSixXQUFBeEI7a0JBQUFBO01BQUFBOzs7O0dBYUk7O2FDZEFzZ0UsZUFBZWhnRTtLQUNQLElBQU5xUCxNckRzQkpzaUI7S3FEckJlLFNBQVhzdUMsaUIsT2hFREoxdEMsU2dFQUlsakI7S0FFYSxTQUFiNndELG1CLE9yRG9LSnh0QyxXcUR0S0lyakI7Y0FHQTh3RCxpQkFBaUJuZ0U7TUFGakJpZ0U7TURISkYsT0NHSUUsWUFDQUMsY0FDaUJsZ0U7TUFBa0IsT0FGbkNpZ0U7S0FFcUY7S0FBckZFLGlCQUphbmdFO0tBS2pCLE9yRHdCQXNCLFNxRDVCSStOO0lBS2U7YUFFakIrd0QsUUFBUTF5RCxLQUFJMnlELEtBQUlDLEtBQUlqZ0U7Y0FDbEJvMEMsT0FBTzZyQjtNQUFTLE9BQXBCLFc3Q3lKQWxyQixVNkN6SldrckIsWUFERDV5RDtLQUN1QztLQUNqRCx5QkFESSttQyxTQURVNHJCLEtBQUlDLEtBQUlqZ0U7SUFFZ0I7YUFFaEMwcUQsT0FBUXVWLEtBQXNCQztLQUNwQyxVQURvQ0EsbUJBRXZCLE83Q0piM3RCLGdCNkNFYzB0QjtnQkFBc0JDOztpQ0FHMUJuZ0UsSUFIMEJtZ0UsU0FHckIsTzdDSmYxdEIsYzZDQ2N5dEIsS0FHSmxnRTs7O1lBVUFvbUIsTUFiMEIrNUM7ZUFhMUIvNUM7a0JBQUs7bUI3Q3lJZjR1QixVNkN0SmNrckI7O29CLE9BSlpGLGNBSUlyVjs7bUJBYUl2a0M7a0I3Q2ZWb3NCLGdCNkNFYzB0Qjs7V0FpQkg3NUMsTUFqQnlCODVDO09Ba0JoQyxhQURPOTVDO2lCN0NuQlhtc0IsZ0I2Q0VjMHRCO2lCQW1CTDtrQjdDbUlUbHJCLFU2Q3RKY2tyQjs7bUIsT0FKWkYsY0FJSXJWOztrQkFpQkt0a0M7OztXQUZBcG1CLElBZnlCa2dFO2NBZXpCbGdFO2lCQUNQO2tCN0NzSUorMEMsVTZDdEpja3JCOzttQixPQUpaRixjQThCQUk7O2tCQVhTbmdFO2lCN0NqQlh1eUMsZ0I2Q0VjMHRCOzs7OztXQUlMNWdFLElBSjJCNmdFO09BSUssTzdDTnpDM3RCLGdCNkNFYzB0QixLeEVrSWRqK0MsY3dFOUhTM2lCOzs7O1FBRUcsSUFEREcsSUFMeUIwZ0UsU0FNNUI1QixNQUFJLDBCQUREOStEO1FBRVAsTzdDVEoreUMsZ0I2Q0VjMHRCLEtBTU4zQjs7a0JBTjRCNEIsMEJBb0J0Qmo3Qzs7UUFHRixJQURVbTdDLG1CQUNkekYsTUFuQ05nRixlQWdDWTE2QztRQUlWLE9BQUEsVzdDOEhKOHZCLFU2Q3RKY2tyQixZQXVCTnRGLEtBdkJGalEsUUFzQmdCMFY7O09BRFEsV0FqQzVCVCxlQWdDWTE2QztPQUNnQixPQUFBLFc3Q2lJOUI4dkIsVTZDdEpja3JCOzs7V0FRRkksTUFSd0JIO09BUVEsTzdDVjVDM3RCLGdCNkNFYzB0QixLQVpaTixlQW9CVVU7OztTQUNBMWdFLElBVHdCdWdFO0tBV2hCLE83Q2JwQjN0QixnQjZDRWMwdEIsS0FTRnRnRTtJQWU0QzthQUV0RHdnRSxhQUFhRjtLQUNzQixJQURYQyxpQkFBTnozRCxpQkFDaUIsT0F2Q25DazNELGVBc0NrQmwzRDtLQUNwQixPQUFBLFc3QzJIQXNzQyxVNkM1SGVrckIsa0JBMUJUdlYsUUEwQm9Cd1Y7O2FBR3hCSSxhQUFhTCxLQUFJQztLQUNuQixPQUFBLFc3Q3dIQW5yQixVNkN6SGVrckIsWUE3QlR2VixRQTZCYXdWO0lBQ3lCO2FBRTFDSyx1QkFBdUJMO0tBQ3pCLE9BQUEsMkJBSkVJLGNBR3VCSjtJQUNhO2FBRXBDTSx3QkFBd0JyOUMsSUFBRys4QztLQUNuQixJQUFOcDBELE03Q3FISjhuQyx5QjZDdEgwQnp3QjtLQUUxQixPQUFBLFc3Q2lIQTR4QixVNkNsSElqcEMsWUFQRncwRCxjQU0yQko7SUFFYztJQWxETjs7Ozs7WUEwQ25DSTtZQUdBQztZQUdBQzs7Ozs7O1lDdERGQyxRQUFNLzlELEtBQUl3OUQ7SUFBUSxNQUFBLHlDQUFaeDlEO0dBQStCOzthQTZGakNnK0QsU0FBMENSO0tBQS9CLFVBQStCQSxtQ0FBQUEsYUFBYnZ0RCxNQUFhdXRELFNBQU4sT0FBUHZ0RDtLQUFxQixPQTdGdEQ4dEQsY0E2RjhDUDtJQUFvQzthQUk5RTEzQyxVQUVBMDNDO0tBRlksVUFFWkEsb0NBQUFBLGFBRFF2Z0UsSUFDUnVnRSxTQURhLE9BQUx2Z0U7S0FDQSxPQW5HWjhnRSxjQW1HSVA7SUFBcUM7SUE5QnpDLGlCQXdCSVEsY0FJQWw0Qzs7WUErTEFtNEMsY0FBVSxpQkFBSztHQWZWO0lBQUEsUUFlTEE7Ozs7WUNoU0pDLGdCQUFpQjN2QjtJQUNuQixVQURtQkE7WUFBQUE7O1FBR1g7O1FBQ0E7O1FBQ0U7O1FBQ087O1FBQ1I7O1FBSUs7O1FBRUw7O1FBRUU7O1FBQ0E7O1FBRUg7O1FBQ0E7O1FBQ0E7O1FBQ0E7O1FBQ0E7Z0JBQ0E7O1dBdkJXQTs7V0FFVnR4QyxJQUZVc3hDLFFBRUwsT0FBTHR4Qzs7V0FNRzhRLE1BUk93Z0MsUUFRa0IseUNBQXpCeGdDOztXQUNEd1UsTUFUUWdzQixRQVNILE9BQUxoc0I7O1dBQ0w1bEIsSUFWYTR4QyxRQVVSLE8xRTJJVGp2QixjMEUzSUkzaUI7O1dBRUVHLElBWld5eEMsUUFZTixPM0VvUlg1dUIsZ0IyRXBSTTdpQjs7V0FFVysvRCxRQWRBdHVCLFFBY08sT0FBUHN1QjttQkFHWngvRCxJQWpCWWt4QyxRQWlCUCxPQUFMbHhDOztHQU1JOzthQ29CUDhnRSxVQUFZMXJEO2NBQ1YzTSxjQUFZLE9BQWhCLHNCQURjMk0sUUFDb0I7S0FDNUIsWUFBQSxzQkFERjNNOzRCQVNJN0ksY0FBSyxXQUFMQTs7bUJBUEs7U0FDRnVIO0tBQVEsSUFDWCxJQUdKK3BDLE1BUEF6b0M7Ozs7VUFNaUNpSTtNQUFPLFdBQVBBOztlQUNqQ3dnQywwQkFBQUEsS0FGTyxXQUZBL3BDO0tBSUEsK0JEbkRYMDVELGdCQ21ESTN2QjtJQUVnQjthQW1FbEI2dkIscUJBQXNCM3JEO0tBQ2xCLElBQ0pqTyxNQS9FQTI1RCxVQTZFc0IxckQ7Y0FFdEJqTyxRQUFlLE9BQWZBO0tBRWUsSUFEVHVKLE1BRE52SixRQUVJNjVELFdSakhOckQsbUJRNkd3QnZvRCxRQUdoQjFFO0tBRU4sV0FESXN3RDtJQUNVO2FBRWRDLDBCQUEwQnJoRTtLQUNmLElBQVR3Vix3QkFEd0J4VjtLQUU1QixPQVRFbWhFLHFCQVFFM3JEO0lBQ3dCO2FBRTFCOHJELDJCQUEyQkM7S0FDaEIsSUFBVC9yRCx5QkFEeUIrckQ7S0FFN0IsT0FiRUoscUJBWUUzckQ7SUFDd0I7YUFFMUJnc0Qsd0JBQXdCQztLQUMxQjtNQUNZLElBQU5GLE01RStRTjM5QyxRNEVqUjBCNjlDLFdBR3BCbDZELE1BUEorNUQsMkJBTUlDO01BRUYsSUFGRUE7TUFFRixPQURFaDZEOzs7OztVQUlTdUo7TUFBTyx3QkFBUEE7O0lBQTZFO2FBVzFGNHdELCtCQUFtQ3IzQyxLQUFnQjdVO0tBQ3JELEdBRHFDNlUsU0FBU0MsTUFBVEQsUUFBQXMzQyxTQUFTcjNDLGNBQVRxM0M7Y0FDakM5NEQsY0FBWSxPQUFoQixzQkFEcUQyTSxRQUNuQjtLQUNsQixZQUFBLHNCQURaM007Ozs7V0FHT3RCOztVQUowQm82RDsyQkFJMUJwNkQ7O1FBR0UsSUFDSCxJQUdKK3BDLE1BVkZ6b0M7Ozs7U0FTMEMsSUFBUGlJLGNBQU8sV0FBUEE7Ozs7O21CQUNqQ3dnQywwQkFBQUEsd0JBUEsvcEM7NENEN0pYMDVELGdCQ29LTTN2Qjs7Ozs7OztrQkFYK0Jxd0I7VUFFakMvM0M7OztVQVlJdEUsZ0JBWkpzRSxZQVlJdEU7S0FFUixTQWRJc0UsY0FlQ0MsUUFmREQsVUFlUSxXQUFQQztLQUVZLElBRFQ3cEIsSUFoQko0cEIsVUFpQkV3M0MsV1JqS05yRCxtQlE4SXFEdm9ELFFBa0I3Q3hWO0tBRU4sV0FESW9oRTtJQUNVO2FBd0NkUSw0QkFBNkJDLEtBQUtyc0Q7Y0FDaEMzTSxjQUFZLE9BQWhCLHNCQURvQzJNLFFBQ0Y7Y0FDOUIzVixFQUFFSDtNQUNFLFlBQUEsc0JBRkptSjs7V0FLTWlJO09BQ0csV0FQa0Ird0Q7T0FRWixJQUFYVCxXUmxOUnJELG1CUTBNb0N2b0QsUUFNMUIxRTtPQUdOLE1BQUEsaURBRElzd0Q7OztzQkFISzc1RCxrQkFBUSxXQUFSQTtNQURFLFdBSmdCczZEO01BSWhCO0tBS2dDO0tBRS9DLE96RGpFQW53QyxLeUR3REk3eEI7SUFTUzthQUVYaWlFLDhCQUE4QjloRTtLQUNuQixJQUFUd1Ysd0JBRDRCeFY7S0FFaEMsT0FmRTRoRSw0Q0FlMEMsU0FBRSxHQUQxQ3BzRDtJQUNtRDthQUVyRHVzRCwrQkFBaUMxM0MsS0FBb0JrM0M7S0FDdkQsR0FEbUNsM0M7VUFBTUMsTUFBTkQsUUFBQXczQyxNQUFNdjNDOztVQUFOdTNDLHNCQUFnQixTQUFFO0tBQ3hDLElBQVRyc0QseUJBRG1EK3JEO0tBRXZELE9BbkJFSyw0QkFpQmlDQyxLQUMvQnJzRDtJQUNvQzthQU10Q3dzRCw0QkFBNEJQO0tBQ3BCLElBQU5GLE01RXlLSjM5QyxRNEUxSzhCNjlDO0tBRTlCLE9BVkVNO2tDQVU2QyxXQUQzQ1IsS0FDdUQsSUFEdkRBO0lBQzREO2FBRTlEVSw4QkFBOEJ6c0Q7S0FDaEMsT0E5QkVvc0QsNENBOEIwQyxTQUFFLEdBRGRwc0Q7SUFDdUI7SUEzTXpEOzs7Ozs7Ozs7Ozs7Ozs7WUF1Rkk2ckQ7WUFRQUc7WUFKQUY7OztZQXNCQUk7Ozs7OztZQXlFQUk7WUFJQUM7WUFRQUM7O1lBSUFDOzs7YUMvTkFwQyxjQUFjbmdFO0tBQUksZUFBSkEsVUFBQUEsdUJBQUFBO1k3RTZNaEJ5aUI7STZFN011RTthQUVyRTI5QyxhQUFhdDhDLElBQUc5akI7S0FDbEIsSUFEZThqQixJQUZicThDLGVBRWdCbmdFO0tBRUgsV0FGQThqQixJQUZicThDLGNBRWdCbmdFO0lBRTBCO2FBRTFDcWdFLE9BQU92OEMsSUFBR3hqQjtLQUNHLFNBQVh1eUIsZSxXQURLL087S0FFUSxTQUFia1AsaUIsTzdFb1ZKblAsYzZFdFZTQztLQUdULElBQUluakIsSUFBSixzQkFIWUwsSUFJWixPQURJSzs7VUFDSlg7O09BQ1EsSUFRSndCLElBUkksZ0JBTElsQixHQUlaTjs7aUJBU0l3QjtRQVhBd3hCOzs7Ozs7a0JBV0F4eEI7a0JBQUFBO2tCQUFBQTs7Y0FYQXd4Qjs7Y0FBQUE7O2NBQUFBOztjQUFBQTs7Y0FBQUE7O2NBQUFBOzs7Ozs7OztxQkFXQXh4Qjs7U0FaQXF4QixTQWVtQixnQkFoQlh2eUIsR0FJWk47OztRQUZJZ3pCO1FBTkZvdEMsYUFJT3Q4QyxJQWFMdGlCOztPQVRKLFdBQUF4QjttQkFBQUE7T0FBQUE7Ozs7SUFhSTthQUVGd2lFLG9CQUFvQjErQyxJQUFHKzhDLE1BQU00QixLQUFLQyxNQUFNQztLQUMzQixTQUFYOXZDLGUsV0FEa0IvTztLQUVMLFNBQWJrUCxpQixPN0VpVUpuUCxjNkVuVXNCQztjQUdsQjI4QyxpQkFBaUJuZ0U7TUFGakJ1eUI7TUFwQkZ3dEMsT0FtQm9CdjhDLElBR0R4akI7TUFBa0IsT0FGbkN1eUI7S0FFNEQ7S0FDaEUsU0FBSSt2QyxRQUFRNWlFLEdBQUksT0FGWmd6QixXNUV1R0pyUSxjNEVyR1kzaUIsSUFBZ0M7Y0FDeEM2aUUsVUFBVTFpRSxHQUFJLE9BSGQ2eUIsV0FHeUIsMEJBQWY3eUIsSUFBOEM7S0FDakQsSUFBUDJpRSw2QkFOc0NIO2NBT2xDbDJELElBQUlna0MsS0FBSXJyQjtNQUNkLFVBRGNBLG9CQVVILE9BZlQ0TjtpQkFLWTVOOzs7O1NBbUJGLElBREg3akIsSUFsQks2akIsVUFtQlIyOUMsZUFuQkl0eUI7U0FOUjVkO1NBQ0FHLFdBRjJCeXZDO1NBdUMzQk8sVUFoQ1F2eUIsTUFQd0JpeUIsVUF5QnpCbmhFO1NBdkJQeXhCLFdBRjJCeXZDO1NBRTNCenZDLFdBd0JJK3ZDO1NBRVksT0EzQmhCbHdDOztRQTZCVSxJQUREcHhCLElBdEJHMmpCLFVBdUJSNjlDLGVBdkJJeHlCO1FBTlI1ZDtRQUNBRyxXQUYyQnl2QztRQTRDM0IzekQsUUFyQ1EyaEMsTUFQd0JpeUIsVUE2QnZCamhFO1FBM0JUdXhCLFdBRjJCeXZDO1FBRTNCenZDLFdBNEJJaXdDO1FBRVksT0EvQmhCcHdDOzs7O1NBU1UsSUFESGxoQixJQUZLeVQsVUFHUjg5QyxhQUhJenlCO1NBTlI1ZDtTQUNBRyxXQUYyQnl2QztTQWlDM0JVLFdBMUJRMXlCLE1BUHdCaXlCLFVBU3pCL3dEO1NBUFBxaEIsV0FGMkJ5dkM7U0FFM0J6dkMsV0FRSWt3QztTQUVZLE9BWGhCcndDOztZQXFCVXZ5QixJQWZFOGtCO1FBZUcsT0FwQmY0TixXQW9CVTF5Qjs7O1FBUkEsSUFESkssSUFOTXlrQixVQU9SZytDLGVBUEkzeUI7UUFOUjVkO1FBQ0FHLFdBRjJCeXZDO1FBdUMzQk8sVUFoQ1F2eUIsTUFQd0JpeUIsVUFhMUIvaEU7UUFYTnF5QixXQUYyQnl2QztRQUUzQnp2QyxXQVlJb3dDO1FBRVksT0FmaEJ2d0M7O1dBaUJNbnlCLElBWE0wa0I7T0FXVSxPQWhCdEI0TixXN0VnTkp0USxlNkVoTVVoaUI7O2tDQUVFa2xCLE1BYklSLFVBYUMsT0FsQmI0TixXQWtCUXBOOztpQ0FDRHpsQixJQWRLaWxCLFVBY0EsT0FoQlp5OUMsVUFnQk8xaUU7V0FGRkgsSUFaT29sQjtPQVlGLE9BZlZ3OUMsUUFlSzVpRTs7aUNBS01zN0QsTUFqQkNsMkMsVUFpQkksT0F0QmhCNE4sV0FzQldzb0M7VUFESDJELE1BaEJJNzVDO01BZ0JDLE9BcEJicTdDLGlCQW9CUXhCO0tBU29DO2NBQzVDa0UsV0FBVzF5QixLQUFJOStCO01BQ2pCO09BQUl1eEQsYUFEU3p5QjtPQUVUemlDLFVBREFrMUQ7T0FFQUcsMkNBcEN5QlosS0FrQ3pCUztNQUdKO3dCQUFlemhFO2dCQW5DYnV4QixXQWlDRWhsQjtnQkFBQUEsU0FDQXExRDtnQkFDZ0QsT0FDbERwYixLQUxXeFgsS0FJRWh2QztlQUErQztlQUo3Q2tRO0tBSWlEO2NBQ2hFczJDLEtBQUt4WDtVQUFRaHZDLGNBQUg0RTtNQW5DVm82RCxpQkFtQ1VwNkQ7TUFwQ1Yyc0IsV0FJQTh2QztNQWdDc0MsT0EvQmxDcjJELElBK0JDZ2tDLEtBQVFodkM7O2NBQ2J1aEUsVUFBVXZ5QixLQUFJOXZDO01BQ2hCO09BQUl1aUUsYUFEUXp5QjtPQUVSemlDLFVBREFrMUQ7T0FFQUcsMkNBMUN5QlosS0F3Q3pCUztNQUdKO3dCQUFlemhFO2dCQXpDYnV4QixXQXVDRWhsQjtnQkFBQUEsU0FDQXExRDtnQkFDZ0QsT0FwQzlDNTJELElBZ0NNZ2tDLEtBSUdodkM7ZUFBOEM7ZUFKN0NkO0tBSWlEO2NBQy9EbU8sUUFBUTJoQztVQUFRNXdDLGNBQUh3RztNQXpDYm82RCxpQkF5Q2FwNkQ7V0FBR3hHLEdBSVI7VUFESCtuQyxNQUhXL25DO01BMUNoQm16QixXQUlBOHZDO01BeUNVLE9BeENOcjJELElBcUNJZ2tDLE1BNUN3Qml5QixVQStDM0I5NkI7O0tBeENEbjdCLE9BUGlCbzBEO0tBa0R6QixPQWhESTd0QyxXQUYyQnl2QztJQW1EakI7YUFFWmE7O00sT0FyREFkOztLQXFEbUIsc0I7O2FBMEJuQmUsaUJBQWlCdHpELE1BQUs0d0Q7S0FDZixJQUFMLzhDLEs3RWtOSkosUzZFbk5tQnpUO0tBRW5CLElBNUJFcXpELGdCQTJCRXgvQyxJQURvQis4QyxPN0U0UXhCNzhDLFU2RTNRSUYsS0FDMkI7V0FDN0JzbkI7VUFBQXRvQywwQkFBQXNvQztNN0V5UUZwbkIsVTZFM1FJRjtNQUVtQixNQUFBLDRCQUFyQmhoQjs7SUFBOEI7SUE3R2EsMkJBMEczQ3lnRSxvQkExQkFEOzs7YUM5RUFuRCxjQUFjbmdFO0tBQUksZUFBSkEsVUFBQUEsdUJBQUFBO1k5RTZNaEJ5aUI7SThFN011RTthQUVyRTI5QyxhQUFhendELEtBQUkzUDtLckVibkI2eUIsU3FFYWVsakIsS0FGYnd3RCxlQUVpQm5nRTtLQUVDLE9yRWZwQjZ5QixTcUVhZWxqQixLQUZid3dELGNBRWlCbmdFO0lBRThCO2FBRS9DcWdFLE9BQU8xd0QsS0FBSXJQO0tBQ0UsU0FBWGlnRSxpQixPckVsQkoxdEMsU3FFaUJTbGpCO0tBRVEsU0FBYjZ3RCxtQixPMURtSkp4dEMsVzBEckpTcmpCO0tBR1QsSUFBSWhQLElBQUosc0JBSGFMLElBSWIsT0FESUs7O1VBQ0pYOztPQUNRLElBUUp3QixJQVJJLGdCQUxLbEIsR0FJYk47O2lCQVNJd0I7UUFYQWcvRDs7Ozs7O2tCQVdBaC9EO2tCQUFBQTtrQkFBQUE7O2NBWEFnL0Q7O2NBQUFBOztjQUFBQTs7Y0FBQUE7O2NBQUFBOztjQUFBQTs7Ozs7Ozs7cUJBV0FoL0Q7O1NBWkErK0QsV0FlbUIsZ0JBaEJWamdFLEdBSWJOOzs7UUFGSXdnRTtRQU5GSixhQUlPendELEtBYUxuTzs7T0FUSixXQUFBeEI7bUJBQUFBO09BQUFBOzs7O0lBYUk7YUFFRndqRSxlQUFnQjd6RCxLQUFJa3hEO0tBQ1AsU0FBWE4saUIsT3JFckNKMXRDLFNxRW9Da0JsakI7S0FFRCxTQUFiNndELG1CLE8xRGdJSnh0QyxXMERsSWtCcmpCO2NBR2Q4d0QsaUJBQWlCbmdFO01BRmpCaWdFO01BcEJGRixPQW1CZ0Ixd0QsS0FHR3JQO01BQWtCLE9BRm5DaWdFO0tBRTZEO0tBQ2pFLFNBQUlxQyxRQUFRNWlFLEdBQUksT0FGWndnRSxhN0V1R0o3OUMsYzZFckdZM2lCLElBQWdDO2NBQ3hDNmlFLFVBQVUxaUUsR0FBSSxPQUhkcWdFLGFBR3lCLDBCQUFmcmdFLElBQThDO2NBQ3BEc00sSUFBSTJZO01BQ1YsVUFEVUEsb0JBSUMsT0FSVG83QztpQkFJUXA3Qzs7OzthQVlEN2pCLElBWkM2akI7U0FMUm03QztTQXNCQXlDLFVBTE96aEU7U0FBbUIsT0FqQjFCZy9EOztZQWtCUzkrRCxJQWJEMmpCO1FBTFJtN0M7UUF3QkF6eEQsUUFOU3JOO1FBQW9CLE9BbEI3QjgrRDs7OzthQU9PNXVELElBRkN5VDtTQUxSbTdDO1NBbUJBNEMsV0FaT3h4RDtTQUFtQixPQVAxQjR1RDs7WUFjVWpnRSxJQVRGOGtCO1FBU08sT0FiZm83QyxhQWFVbGdFOzs7WUFOSkssSUFIRXlrQjtRQUxSbTdDO1FBc0JBeUMsVUFkTXJpRTtRQUFtQixPQVJ6QjQvRDs7V0FVTTcvRCxJQUxFMGtCO09BS2MsT0FUdEJvN0MsYTlFZ05KOTlDLGU4RXZNVWhpQjs7a0NBRUVrbEIsTUFQQVIsVUFPSyxPQVhibzdDLGFBV1E1NkM7O2lDQUNEemxCLElBUkNpbEIsVUFRSSxPQVRaeTlDLFVBU08xaUU7V0FGRkgsSUFOR29sQjtPQU1FLE9BUlZ3OUMsUUFRSzVpRTs7aUNBS01zN0QsTUFYSGwyQyxVQVdRLE9BZmhCbzdDLGFBZVdsRjtVQURIMkQsTUFWQTc1QztNQVVLLE9BYmJxN0MsaUJBYVF4QjtLQUc0QztjQUNwRGtFLFdBQVd4eEQ7TUFDSCxJQUFOM0Q7TUFBZ0I7d0JBQWV2TTtnQkFuQmpDKytELGFBbUJFeHlEO2dCQUFBQTtnQkFBaUUsT0FDbkVpNkMsS0FEaUN4bUQ7ZUFBd0M7ZUFEOURrUTtLQUNrRTtjQUM3RXMyQztVQUFTeG1ELGNBQUg0RTtNQW5CTm82RCxpQkFtQk1wNkQ7TUFyQk5rNkQ7TUFxQmtDLE9BaEI5Qjl6RCxJQWdCS2hMOztjQUNUdWhFLFVBQVVyaUU7TUFDRixJQUFOcU47TUFBZ0I7d0JBQWV2TTtnQkF0QmpDKytELGFBc0JFeHlEO2dCQUFBQTtnQkFBaUUsT0FsQi9EdkIsSUFrQjZCaEw7ZUFBdUM7ZUFEOURkO0tBQ2tFO2NBQzVFbU87VUFBWWpQLGNBQUh3RztNQXRCVG82RCxpQkFzQlNwNkQ7V0FBR3hHLEdBSUo7VUFESCtuQyxNQUhPL25DO01BeEJaMGdFO01BMkJVLE9BdEJOOXpELElBc0JDbTdCOztLQUdULE9BekJRbjdCLElBTmNvMEQ7SUErQmQ7YUFnRE40QyxlQUFnQjVDO0tBQ1IsSUFBTmx4RCxNMUQ5RkpzaUI7SzBEY0V1eEMsZUFnRkU3ekQsS0FEY2t4RDtLQUVsQixPMUR6RkFqL0QsUzBEd0ZJK047SUFFZTtJQTdHMEIsZUEwRzNDOHpELDhCQS9FQUQ7O0dDNUNOO1lBRUlFLFdBQVdyZ0U7SUFBTSxNQUFBLDRDQUFOQTtHQUE0Qjs7SUFrQmhCOzs7OEI7Ozs7Ozs7OztLQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2FBV3JCc2dFLGdCQUFpQkMsWUFBeUJDLE9BQU1DO0tBQ2xELEdBRGtEQSxVQUNsQkMsU0FEa0JELFNBQzlDRSxTQUE0QkQsaUJBQTVCQzs7YUFEZUo7YUFBQUE7YUFBQUE7Y0FDZkksU0FEZUo7S0FHbkIsR0FINENDOztPQUtuQ3o2RCxPQUxtQ3k2RDtPQUd4Q0ksNENBRUs3NkQ7O1VBRkw2NkQ7S0FJTSxJQUFOQyxNQUFNLFd4RGhDVnY3Qixld0Q0QklzN0I7S0FLSixxQkFESUM7SUFDVTthQUVaQyx3QkFBd0Joa0UsR0FBRUosR0FBRThqRSxPQUFNQztLQUM5QixZQUFBLFdBRG9CM2pFLEdBQUVKOzRCQUV2QjhnRSxpQkFBUSxPQUFSQTtTQUNHK0M7S0FBeUIsT0ExQ2pDRixXQTZCRUMsZ0JBYU1DLFlBSHNCQyxPQUFNQztJQUdvQzthQUd0RU0sbUJBQW9CUCxPQUFPQyxNQUFLeGpFO0tBQ2xDLE9BUEU2akUsNkNBTWdDN2pFLEdBQVp1akUsT0FBT0M7SUFDaUQ7SUE3Qi9CLGlCQTRCN0NNOzs7SUFvRXFCOzs7Ozs7Ozs7OztLQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7YUFNckJDLFlBQVl4RDtLQUNkLFNBQVF0N0MsSUFBSTZ4QjtNQUNWLFVBRFVBLG1CQUVDO2lCQUZEQTs7O1lBS0FpRSxNQUxBakU7UUFLSyx1QkFBTGlFOztzREFMQWpFLE9BQUFBOzZCQVFVLE9BUlZBO1dBU0c5MkMsSUFUSDgyQztrQkFTUSxzQkFBTDkyQzs7O3VCQUFBQSw0QkFBQUE7aUNBQUFBOzs7O1lBT0pna0UsTUFoQkNsdEI7UUFnQk0sNEJBaEJWN3hCLEtBZ0JHKytDOzttQkFoQkNsdEIsU0FpQlFtdEIsaUJBQU5uN0Q7T0FBZSxLQUFUbTdELE1BRUwsdUJBRkRuN0Q7V0FHRit4QyxNQUhRb3BCO09BR0gsMENBSEhuN0QsV0FqQk5tYyxJQW9CSTQxQjs7OzRCQWpCUSxPQUhSL0Q7V0FjRnoyQyxJQWRFeTJDO09BY0csNEJBZFA3eEIsS0FjRTVrQjs7O1dBQ0NaLElBZkNxM0M7T0FlSTs7OztrQkFBaUIsSUFBVTMxQyxjQUFKa1g7a0JBQVUsV0FBVkEsSUFmL0I0TSxJQWVtQzlqQjtpQkFBa0I7aUJBQWxEMUI7O1VBUkcwQixJQVBGMjFDO01BT08sc0JBQU8scUJBQVozMUM7S0FjUDtLQUVQLE9BdkJROGpCLElBRE1zN0M7SUF3Qk47YUFJTmozQix5QkFBMEJqZixLQUFhazJDO0tBQ3pDLEdBRDRCbDJDLFNBQU1DLE1BQU5ELFFBQUE2NUMsTUFBTTU1QyxjQUFONDVDO0tBQzVCLEtBRDRCQSxLQUNrQyxxQ0FEckIzRDtLQUNILFdBN0JwQ3dELFlBNEJ1Q3hEO0tBQ0g7SUFBc0Q7SUFwQzdDLGVBbUM3Q2ozQjs7WUErREU2NkIsV0FBV25rRSxHQUFJLE9aekhuQm85RCxnQll5SGVwOUQsR0FBa0M7WUFDN0Nva0UsV0FBVzMxQixPQUFRLE9BQVJBLE1BQWE7WUFDeEI0MUIsWUFBWTUxQixPQUFRLE9BQVJBLE1BQWE7WUFDekI2MUIsb0JBQWlCLFlBQXdDO1lBRXpEQyxtQkFBZ0IsU0FBSztZQUNyQkMsaUJBQWMsU0FBSztZQUVuQkMscUJBQW1CLFlBQUs7WUFFeEJDLGlCQUFpQjdrRTtJQUNiLFlBQUEsb0JBRGFBOztjQUFBQTtrQ1ZwTnJCMCtELHFCVW9OcUIxK0Q7R0FPWjtZQUVMOGtFLFNBQVMza0UsR0FBSSxzQkFBTyxxQkFBWEEsSUFBOEI7WUFDdkM0a0UsUUFBUWxsRSxHQUFJLG9CQUFKQSxHQUFVO09BQ2xCbWxFO1lBQ0FDLFNBQU85a0UsR0FBSSx1QkFBSkEsR0FBYTtZQUNwQitrRSxLQUFLM2tFLEdBQUksc0JBQUpBLEdBQVc7WUFDaEI0a0UsTUFBTXZsRSxHQUFJLHNCQUFKQSxHQUFZO1lBQ2xCd2xFLEtBQUs1a0UsR0FBSSxzQkFBSkEsR0FBVztZQUNoQjZrRSxNQUFNN2tFO0lBQUssTUFBQTtHQUEyRDtZQUN0RW1PLFFBQVFuTztJQUFLLE1BQUE7R0FBNkQ7WUFFMUU4a0U7SUFBUzs7Ozs7Ozs7S0FLSyxNQUFBO1FBSlR0bEU7SUFBUyxzQkFBVEE7R0FJc0U7WUFVekV1bEUsbUJBQWlCLGFBQUc7WUFDcEJDLGlCQUFlLGFBQUc7WUFDbEJDLG9CQUFrQixhQUFHO1lBQ3JCQyxrQkFBZ0IsYUFBRztZQUNuQkM7SUFBaUIsTUFBQTtHQUEyRDtZQUM1RUM7SUFBZSxNQUFBO0dBQTJEO1lBQzFFQztJQUFtQixNQUFBO0dBQTZEO1lBQ2hGaEc7SUFBaUIsTUFBQTtHQUE2RDtZQUM5RWlHLE9BQUszbEUsR0FBSSxzQkFBSkEsR0FBVzs7O01BcERsQm1rRTtNQUNBQztNQUNBQztNQUNBQztNQUdBRTtNQURBRDtNQUdBRTtNQUVBQztNQW1CQVM7TUFUQVA7TUFEQUQ7TUFFQUU7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQTEyRDs7T0FFQTIyRDtPQVRBUDtPQURBRDtPQUVBRTtPQUNBQztPQUNBQztPQXFCRUs7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQWhHO09BQ0FpRzs7O01BcERGeEI7TUFDQUM7TUFDQUM7TUFDQUM7TUFHQUU7TUFEQUQ7TUFHQUU7TUFFQUM7TUFtQkFTO01BVEFQO01BREFEO01BRUFFO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0ExMkQ7O09BRUEyMkQ7T0FUQVA7T0FEQUQ7T0FFQUU7T0FDQUM7T0FDQUM7T0FxQkVLO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FoRztPQUNBaUc7WUFvQ0ZDLGFBQVc1bEUsR0FBSSxPWmpObkJvOUQsZ0JZaU5lcDlELEdBQWtDO1lBQzdDNmxFLGFBQVdwM0IsT0FBUSxPQUFSQSxNQUFhO1lBQ3hCcTNCLGNBQVlyM0IsT0FBUSxPQUFSQSxNQUFhO1lBQ3pCczNCLGVBQWF0M0IsT0FBUSxPQUFSQSxNQUFhO1lBRTFCdTNCLHFCQUFnQixTQUFJO1lBQ3BCQyxtQkFBYyxTQUFJO1lBRWxCQyx1QkFBbUIsWUFBSztZQUV4QkMsbUJBQWlCdG1FO0lBQ2IsWUFBQSxvQkFEYUE7O2NBQUFBO2tDVjVTckIwK0QscUJVNFNxQjErRDtHQU9aO1lBRUx1bUUsV0FBU3BtRSxHQUFJLHVCQUFKQSxHQUFhO1lBQ3RCcW1FLFVBQVEzbUUsR0FBSSxvQkFBSkEsR0FBVTtPQUNsQjRtRTtZQUNBQyxTQUFPdm1FLEdBQUksdUJBQUpBLEdBQWE7WUFDcEJ3bUUsT0FBS3BtRSxHQUFJLHNCQUFKQSxHQUFXO1lBQ2hCcW1FLFFBQU1obkUsR0FBSSxzQkFBSkEsR0FBWTtZQUNsQmluRSxPQUFLcm1FLEdBQUksc0JBQUpBLEdBQVc7WUFDaEJzbUUsUUFBTXRtRSxHQUFJLHNCQUFKQSxHQUFZO1lBQ2xCdW1FLFVBQVE3Z0UsR0FBRTVFLEdBQUksMEJBQU40RSxHQUFFNUUsSUFBbUI7WUFFN0IwbEU7SUFBUzs7Ozs7Ozs7S0FLSyxNQUFBO1FBSlRobkU7SUFBUyxzQkFBVEE7R0FJcUU7WUFVeEVpbkUscUJBQWlCLGFBQUc7WUFDcEJDLG1CQUFlLGFBQUc7WUFDbEJDLHNCQUFrQixhQUFHO1lBQ3JCQyxvQkFBZ0IsYUFBRztZQUNuQkMscUJBQWlCLGFBQUc7WUFDcEJDLG1CQUFlLGFBQUc7WUFDbEJDLHVCQUFtQixhQUFHO1lBQ3RCQyxxQkFBaUIsYUFBRztZQUNwQkMsT0FBS3RuRSxHQUFJLHNCQUFKQSxHQUFXOztJQWpUcEJ1bkU7OztVQTZQRTNCO1VBQ0FDO1VBQ0FDO1VBQ0FDO1VBR0FFO1VBREFEO1VBR0FFO1VBRUFDO1VBbUJBVTtVQVRBUjtVQURBRDtVQUVBRTtVQUNBQztVQUNBQztVQUNBQztVQUNBQztVQUNBQztVQUNBQzs7V0FFQUM7V0FUQVI7V0FEQUQ7V0FFQUU7V0FDQUM7V0FDQUM7V0FxQkVNO1dBQ0FDO1dBQ0FDO1dBQ0FDO1dBQ0FDO1dBQ0FDO1dBQ0FDO1dBQ0FDO1dBQ0FDOzs7OztTQXBERjFCO1NBQ0FDO1NBQ0FDO1NBQ0FDO1NBR0FFO1NBREFEO1NBR0FFO1NBRUFDO1NBbUJBVTtTQVRBUjtTQURBRDtTQUVBRTtTQUNBQztTQUNBQztTQUNBQztTQUNBQztTQUNBQztTQUNBQzs7VUFFQUM7VUFUQVI7VUFEQUQ7VUFFQUU7VUFDQUM7VUFDQUM7VUFxQkVNO1VBQ0FDO1VBQ0FDO1VBQ0FDO1VBQ0FDO1VBQ0FDO1VBQ0FDO1VBQ0FDO1VBQ0FDO0lBM01KRTtZQWtRRUMsYUFBV3puRTtJQUFJLHlDQUFKQTtHQUFtQjtZQUM5QjBuRSxhQUFXajVCLE9BQVEsT0FBUkEsTUFBYTtZQUN4Qms1QixjQUFZbDVCLE9BQVEsT0FBUkEsTUFBYTtZQUN6Qm01QixlQUFhbjVCLE9BQVEsT0FBUkEsTUFBYTtZQUUxQm81QixxQkFBZ0IsU0FBSTtZQUNwQkMsbUJBQWMsU0FBSTtZQUVsQkMsdUJBQW1CLFlBQUs7WUFFeEJDLG1CQUFpQm5vRTtJQUNiLFlBQUEsb0JBRGFBOztjQUFBQTtrQ1Z2WnJCMCtELHFCVXVacUIxK0Q7R0FPWjtZQUVMb29FLFdBQVNqb0UsR0FBSSx1QkFBSkEsR0FBYTtZQUN0QmtvRSxVQUFReG9FLEdBQUksdUI5RXRSaEIyaUIsYzhFc1JZM2lCLElBQTZCO09BQ3JDeW9FO1lBQ0FDLFNBQU9wb0UsR0FBSSx1QkFBSkEsR0FBZ0I7WUFDdkJxb0UsT0FBS2pvRSxHQUFJLHNCQUFKQSxHQUFXO1lBQ2hCa29FLFFBQU03b0UsR0FBSSxzQkFBSkEsR0FBWTtZQUNsQjhvRSxPQUFLbG9FLEdBQUksc0JBQUpBLEdBQVc7WUFDaEJtb0UsUUFBTW5vRSxHQUFJLHNCQUFKQSxHQUFZO1lBQ2xCb29FLFVBQVExaUUsR0FBRTVFLEdBQUksMEJBQU40RSxHQUFFNUUsSUFBbUI7WUFFN0J1bkU7SUFBUzs7a0NBS0Q3b0UsY0FBTSxzQkFBTkE7UUFKSG8xQztJQUFTLHNCL0VySmxCdnlCLGdCK0VxSlN1eUI7R0FJb0I7WUFVdkIwekIscUJBQWlCLGFBQUc7WUFDcEJDLG1CQUFlLGFBQUc7WUFDbEJDLHNCQUFrQixhQUFHO1lBQ3JCQyxvQkFBZ0IsYUFBRztZQUNuQkMscUJBQWlCLGFBQUc7WUFDcEJDLG1CQUFlLGFBQUc7WUFDbEJDLHVCQUFtQixhQUFHO1lBQ3RCQyxxQkFBaUIsYUFBRztZQUNwQkMsT0FBS25wRSxHQUFJLHNCQUFKQSxHQUFXOzs7TUFwRGxCeW5FO01BQ0FDO01BQ0FDO01BQ0FDO01BR0FFO01BREFEO01BR0FFO01BRUFDO01BbUJBVTtNQVRBUjtNQURBRDtNQUVBRTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQzs7T0FFQUM7T0FUQVI7T0FEQUQ7T0FFQUU7T0FDQUM7T0FDQUM7T0FxQkVNO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDOzs7TUFwREYxQjtNQUNBQztNQUNBQztNQUNBQztNQUdBRTtNQURBRDtNQUdBRTtNQUVBQztNQW1CQVU7TUFUQVI7TUFEQUQ7TUFFQUU7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7TUFDQUM7O09BRUFDO09BVEFSO09BREFEO09BRUFFO09BQ0FDO09BQ0FDO09BcUJFTTtPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQzsyQixPN0VoWUp2OUIsUTtHQVRBRjs7STtLLEs7SyxLO0ssSztLLEs7SyxLO0ssSTs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjs7b0M7SSxnQjtJO0c7O0ksc0I7SSx1QixvQztHOztJO0k7SSx1Qiw0QztJLEkscUIsWTs7O007OztLLGdCO0s7O007OztLLHNCO0k7OztLLFc7Szs7Ozs7OztLLFc7Szs7Ozs7OztLLFc7Szs7Ozs7OztLLFc7Szs7Ozs7O29CO0ssVztLOzs7O0c7O1k4RXREQTA5QixVQUFRbm9FLEdBQUksY0FBSkEsR0FBZ0M7WUFHeENvb0UsVUFBUTNZO0lBQ0osbUJBRElBOzJCQUVMdnZELGNBQUssV0FBTEE7UUFDRzJQO0lBQ0osWUFESUE7SUFDSjtHQUN1QztZQUV6Q3c0RCxNQUFNQyxJQUFLLE9BUFhGLFVBT01FLElBQTZCO0dBR3RCLElBQWZDO1lBQ0FDLG1CQUFpQixjQURqQkQsaUJBQzZDO1lDbEI3Q0UsaUJBQWlCOXdELEtBQVUsdUJBQVZBLEtBQXFCO1lBR3RDK3dELGNBQWMvb0UsR0FBUSxvQkFBUkEsR0FBYztZQVE1QmdwRSxpQkFBaUJDO0ksWUFFVDtRQURIam9FO0lBQUssT0FBQSxXQURPaW9FLGFBQ1pqb0U7O1lBY0xrb0UsZUFBZUQsYUFBYUU7SUFBTSxzQjlFeUJsQ2hrRCxZOEV6QmU4akQsYUFBYUU7R0FBeUQ7R0FrQnpGO0lBQUE7SUFFSUM7WUFFQUMsZ0JBQWdCQyxNQUFLQztJQUFTLE1BQUE7OENBQWRELE9BQUtDO0dBQXVEO1lBYzVFQyxpQkFBaUJEO0lBQ25CLFVBRG1CQSxzQ0FBQUEsZUFFVHZ4RCxNQUZTdXhELFdBRUYsT0FBUHZ4RDtJQUNILE9BakJMcXhELHNCQWNpQkU7R0FHNEM7WUFrQjdERSxjQUFjRjtJQUNoQixV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Rnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7OzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzs7Ozs7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7Ozs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8sYWhDK0RGenRELFVBQUFrdEQ7OzJCZ0MvREVPLGFoQytERnp0RCxVQUFBa3REOzsyQmdDL0RFTyxhaEMrREZ6dEQsVUFBQWt0RDs7MkJnQy9ERU8s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dUIsZXFFOEtVOXVCO1FBWThEO0lBRXBFa3ZDLG1CQXJCQXEyQjtJQUZGRTtNeERnS0Y1MUI7O1l3RHpJSVg7OztvQnhEeUlKVyx5QndEekpJMjFCOzs7OztReER5SkozMUI7Ozs7O3NCd0RuTEV1ekI7bUJBL0ZBcUI7SUFtSks7O2VBakNMZ0I7O2dCQXhGQS9KO29CeER3UEY3ckIsOEJ3RHRMRXkxQjtJQWtERjs7ZUFuSkVyMEM7Ozs7U3hEdVJGNGU7O0l3RHZTQTYxQjtNeER1U0E3MUI7OzJCLE9xQnBTQXVJLHNCQUlBRTs7OztJbUN1S0FxdEIsd0IxQzVKTTN2QixRQUdGQztZMEM2SkYydkI7SUFDRixrQkFMQUQ7SUFNVSxJQUFORSxtQkFwTEpIO0lBcUxBLFNBQUlwbEM7S0FDRix3Q0FDWSxhQUhWdWxDLFFBR29CLFNBQW9CO0tBRGhDO0lBQ2dDO0lBRUUsNEJBTDFDQTtJQUtKO0lBQUEseUJBTElBLE9BQ0F2bEM7R0FLbUM7R0FFekMsOEJBVklzbEM7RzVGK1ZGNzZEOztFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YiAoYSwgaSwgbGVuKSB7XG4gIHZhciBhMiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGEyWzBdPTA7XG4gIGZvcih2YXIgaTIgPSAxLCBpMT0gaSsxOyBpMiA8PSBsZW47IGkyKyssaTErKyApe1xuICAgIGEyW2kyXT1hW2kxXTtcbiAgfVxuICByZXR1cm4gYTI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYXBwZW5kIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICB2YXIgbDEgPSBhMS5sZW5ndGgsIGwyID0gYTIubGVuZ3RoO1xuICB2YXIgbCA9IGwxK2wyLTFcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsaiA9IDE7XG4gIGZvcig7aTxsMTtpKyspIGFbaV09YTFbaV07XG4gIGZvcig7aTxsO2krKyxqKyspIGFbaV09YTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NvbmNhdCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2NvbmNhdChsKSB7XG4gIHZhciBhID0gWzBdO1xuICB3aGlsZSAobCAhPT0gMCkge1xuICAgIHZhciBiID0gbFsxXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGIubGVuZ3RoOyBpKyspIGEucHVzaChiW2ldKTtcbiAgICBsID0gbFsyXTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+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+IHVuaXRcbiAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgKCkgPVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIlxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBGdW5jdGlvbmFsIHF1ZXVlcyAoZmlmbyl9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGVxdWFsID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBCYXNpY3N9ICopXG5cbltAQEB3YXJuaW5nIFwiLTM3XCJdXG5cbnR5cGUgemVybyA9IFplcm9cbnR5cGUgJ3ggc3VjYyA9IFN1Y2NcbnR5cGUgb25lID0gemVybyBzdWNjXG50eXBlIHR3byA9IHplcm8gc3VjYyBzdWNjXG50eXBlIHRocmVlID0gemVybyBzdWNjIHN1Y2Mgc3VjY1xuXG50eXBlICgrJ2EsICdsKSBkaWdpdCA9XG4gIHwgWmVybyA6ICgnYSwgemVybykgZGlnaXRcbiAgfCBPbmUgOiAnYSAtPiAoJ2EsIG9uZSkgZGlnaXRcbiAgfCBUd28gOiAnYSAqICdhIC0+ICgnYSwgdHdvKSBkaWdpdFxuICB8IFRocmVlIDogJ2EgKiAnYSAqICdhIC0+ICgnYSwgdGhyZWUpIGRpZ2l0XG5cbigqIHN0b3JlIHRoZSBzaXplIGluIGRlZXAgdmVyc2lvbiAqKVxudHlwZSArJ2EgdCA9XG4gIHwgU2hhbGxvdyA6ICgnYSwgXykgZGlnaXQgLT4gJ2EgdFxuICB8IERlZXAgOlxuICAgICAgaW50ICogKCdhLCBfIHN1Y2MpIGRpZ2l0ICogKCdhICogJ2EpIHQgbGF6eV90ICogKCdhLCBfIHN1Y2MpIGRpZ2l0XG4gICAgICAtPiAnYSB0XG5cbmxldCBlbXB0eSA6IHR5cGUgYS4gYSB0ID0gU2hhbGxvdyBaZXJvXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG5sZXQgX2VtcHR5ID0gU2hhbGxvdyBaZXJvXG5sZXQgX3NpbmdsZSB4ID0gU2hhbGxvdyAoT25lIHgpXG5sZXQgX2RvdWJsZSB4IHkgPSBTaGFsbG93IChUd28gKHgsIHkpKVxuXG5sZXQgX2RlZXAgOlxuICAgIHR5cGUgbDAgbDEuXG4gICAgaW50IC0+XG4gICAgKCdhLCBsMCBzdWNjKSBkaWdpdCAtPlxuICAgICgnYSAqICdhKSB0IGxhenlfdCAtPlxuICAgICgnYSwgbDEgc3VjYykgZGlnaXQgLT5cbiAgICAnYSB0ID1cbiBmdW4gbiBoZCBtaWRkbGUgdGwgLT4gRGVlcCAobiwgaGQsIG1pZGRsZSwgdGwpXG5cbmxldCBpc19lbXB0eSA9IGZ1bmN0aW9uXG4gIHwgU2hhbGxvdyBaZXJvIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBzaW5nbGV0b24geCA9IF9zaW5nbGUgeFxubGV0IGRvdWJsZXRvbiB4IHkgPSBfZG91YmxlIHggeVxuXG5sZXQgcmVjIGNvbnMgOiB0eXBlIGEuIGEgLT4gYSB0IC0+IGEgdCA9XG4gZnVuIHggcSAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IFplcm8gLT4gX3NpbmdsZSB4XG4gIHwgU2hhbGxvdyAoT25lIHkpIC0+IFNoYWxsb3cgKFR3byAoeCwgeSkpXG4gIHwgU2hhbGxvdyAoVHdvICh5LCB6KSkgLT4gU2hhbGxvdyAoVGhyZWUgKHgsIHksIHopKVxuICB8IFNoYWxsb3cgKFRocmVlICh5LCB6LCB6JykpIC0+XG4gICAgX2RlZXAgNCAoVHdvICh4LCB5KSkgKGxhenkgX2VtcHR5KSAoVHdvICh6LCB6JykpXG4gIHwgRGVlcCAobiwgT25lIHksIG1pZGRsZSwgdGwpIC0+IF9kZWVwIChuICsgMSkgKFR3byAoeCwgeSkpIG1pZGRsZSB0bFxuICB8IERlZXAgKG4sIFR3byAoeSwgeiksIG1pZGRsZSwgdGwpIC0+XG4gICAgX2RlZXAgKG4gKyAxKSAoVGhyZWUgKHgsIHksIHopKSBtaWRkbGUgdGxcbiAgfCBEZWVwIChuLCBUaHJlZSAoeSwgeiwgeicpLCAobGF6eSBxJyksIHRhaWwpIC0+XG4gICAgX2RlZXAgKG4gKyAxKSAoVHdvICh4LCB5KSkgKGxhenkgKGNvbnMgKHosIHonKSBxJykpIHRhaWxcblxubGV0IHJlYyBzbm9jIDogdHlwZSBhLiBhIHQgLT4gYSAtPiBhIHQgPVxuIGZ1biBxIHggLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBaZXJvIC0+IF9zaW5nbGUgeFxuICB8IFNoYWxsb3cgKE9uZSB5KSAtPiBTaGFsbG93IChUd28gKHksIHgpKVxuICB8IFNoYWxsb3cgKFR3byAoeSwgeikpIC0+IFNoYWxsb3cgKFRocmVlICh5LCB6LCB4KSlcbiAgfCBTaGFsbG93IChUaHJlZSAoeSwgeiwgeicpKSAtPlxuICAgIF9kZWVwIDQgKFR3byAoeSwgeikpIChsYXp5IF9lbXB0eSkgKFR3byAoeicsIHgpKVxuICB8IERlZXAgKG4sIGhkLCBtaWRkbGUsIE9uZSB5KSAtPiBfZGVlcCAobiArIDEpIGhkIG1pZGRsZSAoVHdvICh5LCB4KSlcbiAgfCBEZWVwIChuLCBoZCwgbWlkZGxlLCBUd28gKHksIHopKSAtPlxuICAgIF9kZWVwIChuICsgMSkgaGQgbWlkZGxlIChUaHJlZSAoeSwgeiwgeCkpXG4gIHwgRGVlcCAobiwgaGQsIChsYXp5IHEnKSwgVGhyZWUgKHksIHosIHonKSkgLT5cbiAgICBfZGVlcCAobiArIDEpIGhkIChsYXp5IChzbm9jIHEnICh5LCB6KSkpIChUd28gKHonLCB4KSlcblxubGV0IHJlYyB0YWtlX2Zyb250X2V4biA6ICdhLiAnYSB0IC0+ICdhICogJ2EgdCA9XG4gZnVuIHEgLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBaZXJvIC0+IHJhaXNlIEVtcHR5XG4gIHwgU2hhbGxvdyAoT25lIHgpIC0+IHgsIGVtcHR5XG4gIHwgU2hhbGxvdyAoVHdvICh4LCB5KSkgLT4geCwgU2hhbGxvdyAoT25lIHkpXG4gIHwgU2hhbGxvdyAoVGhyZWUgKHgsIHksIHopKSAtPiB4LCBTaGFsbG93IChUd28gKHksIHopKVxuICB8IERlZXAgKG4sIE9uZSB4LCAobGF6eSBxJyksIHRhaWwpIC0+XG4gICAgaWYgaXNfZW1wdHkgcScgdGhlblxuICAgICAgeCwgU2hhbGxvdyB0YWlsXG4gICAgZWxzZSAoXG4gICAgICBsZXQgKHksIHopLCBxJyA9IHRha2VfZnJvbnRfZXhuIHEnIGluXG4gICAgICB4LCBfZGVlcCAobiAtIDEpIChUd28gKHksIHopKSAoTGF6eS5mcm9tX3ZhbCBxJykgdGFpbFxuICAgIClcbiAgfCBEZWVwIChuLCBUd28gKHgsIHkpLCBtaWRkbGUsIHRhaWwpIC0+IHgsIF9kZWVwIChuIC0gMSkgKE9uZSB5KSBtaWRkbGUgdGFpbFxuICB8IERlZXAgKG4sIFRocmVlICh4LCB5LCB6KSwgbWlkZGxlLCB0YWlsKSAtPlxuICAgIHgsIF9kZWVwIChuIC0gMSkgKFR3byAoeSwgeikpIG1pZGRsZSB0YWlsXG5cbmxldCB0YWtlX2Zyb250IHEgPSB0cnkgU29tZSAodGFrZV9mcm9udF9leG4gcSkgd2l0aCBFbXB0eSAtPiBOb25lXG5cbmxldCB0YWtlX2Zyb250X2wgbiBxID1cbiAgaWYgbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwidGFrZV9iYWNrX2w6IGNhbm5vdCB0YWtlIG5lZ2F0aXZlIG51bWJlciBvZiBhcmd1bWVudHNcIjtcbiAgbGV0IHJlYyBhdXggYWNjIHEgbiA9XG4gICAgaWYgbiA9IDAgfHwgaXNfZW1wdHkgcSB0aGVuXG4gICAgICBMaXN0LnJldiBhY2MsIHFcbiAgICBlbHNlIChcbiAgICAgIGxldCB4LCBxJyA9IHRha2VfZnJvbnRfZXhuIHEgaW5cbiAgICAgIGF1eCAoeCA6OiBhY2MpIHEnIChuIC0gMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSBxIG5cblxubGV0IHRha2VfZnJvbnRfd2hpbGUgcCBxID1cbiAgbGV0IHJlYyBhdXggYWNjIHEgPVxuICAgIGlmIGlzX2VtcHR5IHEgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjLCBxXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCwgcScgPSB0YWtlX2Zyb250X2V4biBxIGluXG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBhdXggKHggOjogYWNjKSBxJ1xuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2MsIHFcbiAgICApXG4gIGluXG4gIGF1eCBbXSBxXG5cbmxldCByZWMgdGFrZV9iYWNrX2V4biA6ICdhLiAnYSB0IC0+ICdhIHQgKiAnYSA9XG4gZnVuIHEgLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBaZXJvIC0+IHJhaXNlIEVtcHR5XG4gIHwgU2hhbGxvdyAoT25lIHgpIC0+IGVtcHR5LCB4XG4gIHwgU2hhbGxvdyAoVHdvICh4LCB5KSkgLT4gX3NpbmdsZSB4LCB5XG4gIHwgU2hhbGxvdyAoVGhyZWUgKHgsIHksIHopKSAtPiBTaGFsbG93IChUd28gKHgsIHkpKSwgelxuICB8IERlZXAgKG4sIGhkLCAobGF6eSBxJyksIE9uZSB4KSAtPlxuICAgIGlmIGlzX2VtcHR5IHEnIHRoZW5cbiAgICAgIFNoYWxsb3cgaGQsIHhcbiAgICBlbHNlIChcbiAgICAgIGxldCBxJycsICh5LCB6KSA9IHRha2VfYmFja19leG4gcScgaW5cbiAgICAgIF9kZWVwIChuIC0gMSkgaGQgKExhenkuZnJvbV92YWwgcScnKSAoVHdvICh5LCB6KSksIHhcbiAgICApXG4gIHwgRGVlcCAobiwgaGQsIG1pZGRsZSwgVHdvICh4LCB5KSkgLT4gX2RlZXAgKG4gLSAxKSBoZCBtaWRkbGUgKE9uZSB4KSwgeVxuICB8IERlZXAgKG4sIGhkLCBtaWRkbGUsIFRocmVlICh4LCB5LCB6KSkgLT5cbiAgICBfZGVlcCAobiAtIDEpIGhkIG1pZGRsZSAoVHdvICh4LCB5KSksIHpcblxubGV0IHRha2VfYmFjayBxID0gdHJ5IFNvbWUgKHRha2VfYmFja19leG4gcSkgd2l0aCBFbXB0eSAtPiBOb25lXG5cbmxldCB0YWtlX2JhY2tfbCBuIHEgPVxuICBpZiBuIDwgMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJ0YWtlX2JhY2tfbDogY2Fubm90IHRha2UgbmVnYXRpdmUgbnVtYmVyIG9mIGFyZ3VtZW50c1wiO1xuICBsZXQgcmVjIGF1eCBhY2MgcSBuID1cbiAgICBpZiBuID0gMCB8fCBpc19lbXB0eSBxIHRoZW5cbiAgICAgIHEsIGFjY1xuICAgIGVsc2UgKFxuICAgICAgbGV0IHEnLCB4ID0gdGFrZV9iYWNrX2V4biBxIGluXG4gICAgICBhdXggKHggOjogYWNjKSBxJyAobiAtIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gcSBuXG5cbmxldCB0YWtlX2JhY2tfd2hpbGUgcCBxID1cbiAgbGV0IHJlYyBhdXggYWNjIHEgPVxuICAgIGlmIGlzX2VtcHR5IHEgdGhlblxuICAgICAgcSwgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcScsIHggPSB0YWtlX2JhY2tfZXhuIHEgaW5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIGF1eCAoeCA6OiBhY2MpIHEnXG4gICAgICBlbHNlXG4gICAgICAgIHEsIGFjY1xuICAgIClcbiAgaW5cbiAgYXV4IFtdIHFcblxuKCoqIHsyIEluZGl2aWR1YWwgZXh0cmFjdGlvbn0gKilcblxubGV0IGZpcnN0IHEgPSB0cnkgU29tZSAoZnN0ICh0YWtlX2Zyb250X2V4biBxKSkgd2l0aCBFbXB0eSAtPiBOb25lXG5sZXQgZmlyc3RfZXhuIHEgPSBmc3QgKHRha2VfZnJvbnRfZXhuIHEpXG5sZXQgbGFzdCBxID0gdHJ5IFNvbWUgKHNuZCAodGFrZV9iYWNrX2V4biBxKSkgd2l0aCBFbXB0eSAtPiBOb25lXG5sZXQgbGFzdF9leG4gcSA9IHNuZCAodGFrZV9iYWNrX2V4biBxKVxuXG5sZXQgX3NpemVfZGlnaXQgOiB0eXBlIGwuICgnYSwgbCkgZGlnaXQgLT4gaW50ID0gZnVuY3Rpb25cbiAgfCBaZXJvIC0+IDBcbiAgfCBPbmUgXyAtPiAxXG4gIHwgVHdvIF8gLT4gMlxuICB8IFRocmVlIF8gLT4gM1xuXG5sZXQgc2l6ZSA6ICdhLiAnYSB0IC0+IGludCA9IGZ1bmN0aW9uXG4gIHwgU2hhbGxvdyBkIC0+IF9zaXplX2RpZ2l0IGRcbiAgfCBEZWVwIChuLCBfLCBfLCBfKSAtPiBuXG5cbmxldCBfbnRoX2RpZ2l0IDogdHlwZSBsLiBpbnQgLT4gKCdhLCBsKSBkaWdpdCAtPiAnYSA9XG4gZnVuIGkgZCAtPlxuICBtYXRjaCBpLCBkIHdpdGhcbiAgfCBfLCBaZXJvIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IDAsIE9uZSB4IC0+IHhcbiAgfCAwLCBUd28gKHgsIF8pIC0+IHhcbiAgfCAxLCBUd28gKF8sIHgpIC0+IHhcbiAgfCAwLCBUaHJlZSAoeCwgXywgXykgLT4geFxuICB8IDEsIFRocmVlIChfLCB4LCBfKSAtPiB4XG4gIHwgMiwgVGhyZWUgKF8sIF8sIHgpIC0+IHhcbiAgfCBfLCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuXG5sZXQgcmVjIG50aF9leG4gOiAnYS4gaW50IC0+ICdhIHQgLT4gJ2EgPVxuIGZ1biBpIHEgLT5cbiAgbWF0Y2ggaSwgcSB3aXRoXG4gIHwgXywgU2hhbGxvdyBaZXJvIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IDAsIFNoYWxsb3cgKE9uZSB4KSAtPiB4XG4gIHwgMCwgU2hhbGxvdyAoVHdvICh4LCBfKSkgLT4geFxuICB8IDEsIFNoYWxsb3cgKFR3byAoXywgeCkpIC0+IHhcbiAgfCAwLCBTaGFsbG93IChUaHJlZSAoeCwgXywgXykpIC0+IHhcbiAgfCAxLCBTaGFsbG93IChUaHJlZSAoXywgeCwgXykpIC0+IHhcbiAgfCAyLCBTaGFsbG93IChUaHJlZSAoXywgXywgeCkpIC0+IHhcbiAgfCBfLCBTaGFsbG93IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgXywgRGVlcCAoXywgbCwgcSwgcikgLT5cbiAgICBpZiBpIDwgX3NpemVfZGlnaXQgbCB0aGVuXG4gICAgICBfbnRoX2RpZ2l0IGkgbFxuICAgIGVsc2UgKFxuICAgICAgbGV0IGknID0gaSAtIF9zaXplX2RpZ2l0IGwgaW5cbiAgICAgIGxldCBxJyA9IExhenkuZm9yY2UgcSBpblxuICAgICAgaWYgaScgPCAyICogc2l6ZSBxJyB0aGVuIChcbiAgICAgICAgbGV0IHgsIHkgPSBudGhfZXhuIChpJyAvIDIpIHEnIGluXG4gICAgICAgIGlmIGknIG1vZCAyID0gMCB0aGVuXG4gICAgICAgICAgeFxuICAgICAgICBlbHNlXG4gICAgICAgICAgeVxuICAgICAgKSBlbHNlXG4gICAgICAgIF9udGhfZGlnaXQgKGknIC0gKDIgKiBzaXplIHEnKSkgclxuICAgIClcblxubGV0IG50aCBpIHEgPSB0cnkgU29tZSAobnRoX2V4biBpIHEpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcbmxldCBpbml0IHEgPSB0cnkgZnN0ICh0YWtlX2JhY2tfZXhuIHEpIHdpdGggRW1wdHkgLT4gcVxubGV0IHRhaWwgcSA9IHRyeSBzbmQgKHRha2VfZnJvbnRfZXhuIHEpIHdpdGggRW1wdHkgLT4gcVxuXG5sZXQgYWRkX2l0ZXJfZnJvbnQgc2VxIHEgPVxuICBsZXQgbCA9IHJlZiBbXSBpblxuICAoKiByZXZlcnNlZCBzZXEgKilcbiAgc2VxIChmdW4geCAtPiBsIDo9IHggOjogIWwpO1xuICBMaXN0LmZvbGRfbGVmdCAoZnVuIHEgeCAtPiBjb25zIHggcSkgcSAhbFxuXG5sZXQgYWRkX2l0ZXJfYmFjayBxIHNlcSA9XG4gIGxldCBxID0gcmVmIHEgaW5cbiAgc2VxIChmdW4geCAtPiBxIDo9IHNub2MgIXEgeCk7XG4gICFxXG5cbmxldCBfZGlnaXRfdG9faXRlciA6IHR5cGUgbC4gKCdhLCBsKSBkaWdpdCAtPiAnYSBpdGVyID1cbiBmdW4gZCBrIC0+XG4gIG1hdGNoIGQgd2l0aFxuICB8IFplcm8gLT4gKClcbiAgfCBPbmUgeCAtPiBrIHhcbiAgfCBUd28gKHgsIHkpIC0+XG4gICAgayB4O1xuICAgIGsgeVxuICB8IFRocmVlICh4LCB5LCB6KSAtPlxuICAgIGsgeDtcbiAgICBrIHk7XG4gICAgayB6XG5cbmxldCByZWMgdG9faXRlciA6ICdhLiAnYSB0IC0+ICdhIGl0ZXIgPVxuIGZ1biBxIGsgLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBkIC0+IF9kaWdpdF90b19pdGVyIGQga1xuICB8IERlZXAgKF8sIGhkLCAobGF6eSBxJyksIHRhaWwpIC0+XG4gICAgX2RpZ2l0X3RvX2l0ZXIgaGQgaztcbiAgICB0b19pdGVyIHEnIChmdW4gKHgsIHkpIC0+XG4gICAgICAgIGsgeDtcbiAgICAgICAgayB5KTtcbiAgICBfZGlnaXRfdG9faXRlciB0YWlsIGtcblxubGV0IGFwcGVuZCBxMSBxMiA9XG4gIG1hdGNoIHExLCBxMiB3aXRoXG4gIHwgU2hhbGxvdyBaZXJvLCBfIC0+IHEyXG4gIHwgXywgU2hhbGxvdyBaZXJvIC0+IHExXG4gIHwgXyAtPiBhZGRfaXRlcl9iYWNrIHExICh0b19pdGVyIHEyKVxuXG5sZXQgYWRkX3NlcV9mcm9udCBzZXEgcSA9XG4gICgqIHJldmVyc2VkIHNlcSAqKVxuICBsZXQgbCA9IFNlcS5mb2xkX2xlZnQgKGZ1biBsIGVsdCAtPiBlbHQgOjogbCkgW10gc2VxIGluXG4gIExpc3QuZm9sZF9sZWZ0IChmdW4gcSB4IC0+IGNvbnMgeCBxKSBxIGxcblxubGV0IGFkZF9zZXFfYmFjayBxIHNlcSA9IFNlcS5mb2xkX2xlZnQgKGZ1biBxIHggLT4gc25vYyBxIHgpIHEgc2VxXG5cbmxldCBfZGlnaXRfdG9fc2VxIDogdHlwZSBsLiAoJ2EsIGwpIGRpZ2l0IC0+ICdhIFNlcS50ID1cbiBmdW4gZCAoKSAtPlxuICBtYXRjaCBkIHdpdGhcbiAgfCBaZXJvIC0+IFNlcS5OaWxcbiAgfCBPbmUgeCAtPiBTZXEuQ29ucyAoeCwgU2VxLmVtcHR5KVxuICB8IFR3byAoeCwgeSkgLT4gU2VxLkNvbnMgKHgsIFNlcS5yZXR1cm4geSlcbiAgfCBUaHJlZSAoeCwgeSwgeikgLT4gU2VxLkNvbnMgKHgsIGZ1biAoKSAtPiBTZXEuQ29ucyAoeSwgU2VxLnJldHVybiB6KSlcblxubGV0IHJlYyB0b19zZXEgOiAnYS4gJ2EgdCAtPiAnYSBTZXEudCA9XG4gZnVuIHEgLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBkIC0+IF9kaWdpdF90b19zZXEgZFxuICB8IERlZXAgKF8sIGhkLCAobGF6eSBxJyksIHRhaWwpIC0+XG4gICAgQ0NTZXEuYXBwZW5kIChfZGlnaXRfdG9fc2VxIGhkKVxuICAgICAgKENDU2VxLmFwcGVuZFxuICAgICAgICAgKFNlcS5mbGF0X21hcFxuICAgICAgICAgICAgKGZ1biAoeCwgeSkgKCkgLT4gU2VxLkNvbnMgKHgsIFNlcS5yZXR1cm4geSkpXG4gICAgICAgICAgICAodG9fc2VxIHEnKSlcbiAgICAgICAgIChfZGlnaXRfdG9fc2VxIHRhaWwpKVxuXG5sZXQgb2Zfc2VxIHNlcSA9IGFkZF9zZXFfZnJvbnQgc2VxIGVtcHR5XG5cbmxldCBfbWFwX2RpZ2l0IDogdHlwZSBsLiAoJ2EgLT4gJ2IpIC0+ICgnYSwgbCkgZGlnaXQgLT4gKCdiLCBsKSBkaWdpdCA9XG4gZnVuIGYgZCAtPlxuICBtYXRjaCBkIHdpdGhcbiAgfCBaZXJvIC0+IFplcm9cbiAgfCBPbmUgeCAtPiBPbmUgKGYgeClcbiAgfCBUd28gKHgsIHkpIC0+IFR3byAoZiB4LCBmIHkpXG4gIHwgVGhyZWUgKHgsIHksIHopIC0+IFRocmVlIChmIHgsIGYgeSwgZiB6KVxuXG5sZXQgcmVjIG1hcCA6ICdhICdiLiAoJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgdCA9XG4gZnVuIGYgcSAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IGQgLT4gU2hhbGxvdyAoX21hcF9kaWdpdCBmIGQpXG4gIHwgRGVlcCAoc2l6ZSwgaGQsIChsYXp5IHEnKSwgdGwpIC0+XG4gICAgbGV0IHEnJyA9IG1hcCAoZnVuICh4LCB5KSAtPiBmIHgsIGYgeSkgcScgaW5cbiAgICBfZGVlcCBzaXplIChfbWFwX2RpZ2l0IGYgaGQpIChMYXp5LmZyb21fdmFsIHEnJykgKF9tYXBfZGlnaXQgZiB0bClcblxubGV0ICggPnw9ICkgcSBmID0gbWFwIGYgcVxuXG5sZXQgX2ZvbGRfZGlnaXQgOiB0eXBlIGwuICgnYWNjIC0+ICdhIC0+ICdhY2MpIC0+ICdhY2MgLT4gKCdhLCBsKSBkaWdpdCAtPiAnYWNjXG4gICAgPVxuIGZ1biBmIGFjYyBkIC0+XG4gIG1hdGNoIGQgd2l0aFxuICB8IFplcm8gLT4gYWNjXG4gIHwgT25lIHggLT4gZiBhY2MgeFxuICB8IFR3byAoeCwgeSkgLT4gZiAoZiBhY2MgeCkgeVxuICB8IFRocmVlICh4LCB5LCB6KSAtPiBmIChmIChmIGFjYyB4KSB5KSB6XG5cbmxldCByZWMgZm9sZCA6ICdhICdiLiAoJ2IgLT4gJ2EgLT4gJ2IpIC0+ICdiIC0+ICdhIHQgLT4gJ2IgPVxuIGZ1biBmIGFjYyBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgZCAtPiBfZm9sZF9kaWdpdCBmIGFjYyBkXG4gIHwgRGVlcCAoXywgaGQsIChsYXp5IHEnKSwgdGwpIC0+XG4gICAgbGV0IGFjYyA9IF9mb2xkX2RpZ2l0IGYgYWNjIGhkIGluXG4gICAgbGV0IGFjYyA9IGZvbGQgKGZ1biBhY2MgKHgsIHkpIC0+IGYgKGYgYWNjIHgpIHkpIGFjYyBxJyBpblxuICAgIF9mb2xkX2RpZ2l0IGYgYWNjIHRsXG5cbmxldCBpdGVyIGYgcSA9IHRvX2l0ZXIgcSBmXG5sZXQgb2ZfbGlzdCBsID0gTGlzdC5mb2xkX2xlZnQgc25vYyBlbXB0eSBsXG5cbmxldCB0b19saXN0IHEgPVxuICBsZXQgbCA9IHJlZiBbXSBpblxuICB0b19pdGVyIHEgKGZ1biB4IC0+IGwgOj0geCA6OiAhbCk7XG4gIExpc3QucmV2ICFsXG5cbmxldCBvZl9pdGVyIHNlcSA9IGFkZF9pdGVyX2Zyb250IHNlcSBlbXB0eVxuXG5sZXQgcmV2IHEgPVxuICBsZXQgcScgPSByZWYgZW1wdHkgaW5cbiAgaXRlciAoZnVuIHggLT4gcScgOj0gY29ucyB4ICFxJykgcTtcbiAgIXEnXG5cbmxldCByZWMgX2VxdWFsX3NlcSBlcSBsMSBsMiA9XG4gIG1hdGNoIGwxICgpLCBsMiAoKSB3aXRoXG4gIHwgU2VxLk5pbCwgU2VxLk5pbCAtPiB0cnVlXG4gIHwgU2VxLk5pbCwgXyB8IF8sIFNlcS5OaWwgLT4gZmFsc2VcbiAgfCBTZXEuQ29ucyAoeDEsIGwxJyksIFNlcS5Db25zICh4MiwgbDInKSAtPiBlcSB4MSB4MiAmJiBfZXF1YWxfc2VxIGVxIGwxJyBsMidcblxubGV0IGVxdWFsIGVxIHExIHEyID0gX2VxdWFsX3NlcSBlcSAodG9fc2VxIHExKSAodG9fc2VxIHEyKVxuXG5sZXQgKCAtLSApIGEgYiA9XG4gIGxldCByZWMgdXBfdG8gcSBhIGIgPVxuICAgIGlmIGEgPSBiIHRoZW5cbiAgICAgIHNub2MgcSBhXG4gICAgZWxzZVxuICAgICAgdXBfdG8gKHNub2MgcSBhKSAoYSArIDEpIGJcbiAgYW5kIGRvd25fdG8gcSBhIGIgPVxuICAgIGlmIGEgPSBiIHRoZW5cbiAgICAgIHNub2MgcSBhXG4gICAgZWxzZVxuICAgICAgZG93bl90byAoc25vYyBxIGEpIChhIC0gMSkgYlxuICBpblxuICBpZiBhIDw9IGIgdGhlblxuICAgIHVwX3RvIGVtcHR5IGEgYlxuICBlbHNlXG4gICAgZG93bl90byBlbXB0eSBhIGJcblxubGV0ICggLS1eICkgYSBiID1cbiAgaWYgYSA9IGIgdGhlblxuICAgIGVtcHR5XG4gIGVsc2UgaWYgYSA8IGIgdGhlblxuICAgIGEgLS0gKGIgLSAxKVxuICBlbHNlXG4gICAgYSAtLSAoYiArIDEpXG5cbmxldCBwcCBwcF94IG91dCBkID1cbiAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgRm9ybWF0LmZwcmludGYgb3V0IFwiQFs8aG92Mj5xdWV1ZSB7XCI7XG4gIGl0ZXJcbiAgICAoZnVuIHggLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIjtAIFwiO1xuICAgICAgcHBfeCBvdXQgeClcbiAgICBkO1xuICBGb3JtYXQuZnByaW50ZiBvdXQgXCJ9QF1cIlxuIiwiIyAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiBcbiAgbW9kdWxlIExleGluZyA9IHN0cnVjdFxuICAgICgqIE92ZXJyaWRlIHRoZSBMZXhpbmcuZW5naW5lIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IHBvc2l0aW9uIHJlY29yZFxuICAgICAgIGVhY2ggdGltZSBhIHJ1bGUgaXMgbWF0Y2hlZC4gUmVkdWNlcyB0b3RhbCBwYXJzZSB0aW1lIGJ5IGFyb3VuZCAzMCUuXG4gICAgICAgSWRlYSBzdG9sZW4gZnJvbSB5b2pzb24gKilcblxuICAgIGluY2x1ZGUgTGV4aW5nXG5cbiAgICBleHRlcm5hbCBjX2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnQgPSBcImNhbWxfbGV4X2VuZ2luZVwiXG5cbiAgICBsZXQgZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICAgICAgbGV0IHJlc3VsdCA9IGNfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgICAgICgqXG4gICAgICBpZiByZXN1bHQgPj0gMCB0aGVuIGJlZ2luXG4gICAgICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICAgICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gICAgICBlbmQ7XG4gICAgICAqKVxuICAgICAgcmVzdWx0XG4gIGVuZFxuICBvcGVuIFRva2Vuc1xuXG5cbiAgbW9kdWxlIHR5cGUgTGV4ID0gc2lnXG4gICAgdmFsIHJlYWQgOiBMZXhpbmcubGV4YnVmIC0+IFRva2Vucy50b2tlblxuICBlbmRcblxuICBtb2R1bGUgTWFrZSAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgOiBMZXggPSBzdHJ1Y3RcblxuIyAzMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbmxldCBfX29jYW1sX2xleF90YWJsZXMgPSB7XG4gIExleGluZy5sZXhfYmFzZSA9XG4gICBcIlxcMDAwXFwwMDBcXDIyOVxcMjU1XFwwMTdcXDAwMFxcMjMyXFwyNTVcXDAwM1xcMDAwXFwyMzRcXDI1NVxcMTI2XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDExM1xcMDAwXFwwMDBcXDAwMFxcMDAxXFwwMDBcXDAwMVxcMDAwXFwwMDJcXDAwMFxcMTIzXFwwMDBcXDI0M1xcMjU1XFwyNDRcXDI1NVxcXG4gICAgXFwyNDVcXDI1NVxcMjQ2XFwyNTVcXDI0N1xcMjU1XFwyNDhcXDI1NVxcMjQ5XFwyNTVcXDI1MFxcMjU1XFwyNTFcXDI1NVxcMjUyXFwyNTVcXFxuICAgIFxcMDAxXFwwMDBcXDAwMlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwM1xcMDAwXFwyNTRcXDI1NVxcMDAzXFwwMDBcXDAwMVxcMDAwXFwwMTFcXDAwMFxcMjUzXFwyNTVcXDIzOVxcMjU1XFwwMDNcXDAwMFxcXG4gICAgXFwwMTBcXDAwMFxcMDExXFwwMDBcXDAwNVxcMDAwXFwyNDJcXDI1NVxcMDIwXFwwMDBcXDAxOVxcMDAwXFwwNDhcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDY3XFwwMDBcXDA2M1xcMDAwXFwwNzVcXDAwMFxcMDg0XFwwMDBcXDI0MVxcMjU1XFwwODVcXDAwMFxcMDgzXFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwNzVcXDAwMFxcMDcxXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDkzXFwwMDBcXDI0MFxcMjU1XFwwOTVcXDAwMFxcXG4gICAgXFwwOTNcXDAwMFxcMDg5XFwwMDBcXDA5NVxcMDAwXFwwODVcXDAwMFxcMDgxXFwwMDBcXDAwMVxcMDAwXFwwMzJcXDAwMFxcMTU1XFwwMDBcXFxuICAgIFxcMTg2XFwwMDBcXDIwOVxcMDAwXFwyMTlcXDAwMFxcMjI5XFwwMDBcXDI0MFxcMDAwXFwyNTBcXDAwMFxcMDE4XFwwMDFcXDA2NlxcMDAxXFxcbiAgICBcXDIzNlxcMjU1XFwyMzVcXDI1NVxcMDk0XFwwMDFcXDExN1xcMDAxXFwxNTVcXDAwMVxcMTc4XFwwMDFcXDA1M1xcMDAwXFwyMzFcXDI1NVxcXG4gICAgXFwwODhcXDAwMVxcMjUyXFwyNTVcXDI1M1xcMjU1XFwyNTRcXDI1NVxcMDE0XFwwMDBcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfYmFja3RyayA9XG4gICBcIlxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMjZcXDAwMFxcMjU1XFwyNTVcXDAyMlxcMDAwXFwyNTVcXDI1NVxcMDI2XFwwMDBcXDAxN1xcMDAwXFxcbiAgICBcXDAxN1xcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDE4XFwwMDBcXDI1NVxcMjU1XFwwMThcXDAwMFxcMjU1XFwyNTVcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAyNVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAzXFwwMDBcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfZGVmYXVsdCA9XG4gICBcIlxcMDAxXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NlxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwODlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfdHJhbnMgPVxuICAgXCJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDA0XFwwMDBcXDAwM1xcMDAwXFwwMDBcXDAwMFxcMDA0XFwwMDBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwNlxcMDAwXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDE5XFwwMDBcXDAxOFxcMDAwXFwwMDBcXDAwMFxcMDEwXFwwMDBcXDAxNVxcMDAwXFwwMTNcXDAwMFxcMDcxXFwwMDBcXDAwMlxcMDAwXFxcbiAgICBcXDAwN1xcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAxNFxcMDAwXFwwODdcXDAwMFxcMDE3XFwwMDBcXDA5M1xcMDAwXFwwMTZcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDg2XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcMDU5XFwwMDBcXDA3N1xcMDAwXFwwMDBcXDAwMFxcMDc3XFwwMDBcXDAwOVxcMDAwXFwwMzhcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwMDBcXDAwMFxcMDIxXFwwMDBcXDAwMFxcMDAwXFwwMjBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNjlcXDAwMFxcMDM0XFwwMDBcXDAzMFxcMDAwXFwwNTBcXDAwMFxcMDcwXFwwMDBcXDAyNVxcMDAwXFwwMjlcXDAwMFxcXG4gICAgXFwwMzNcXDAwMFxcMDEyXFwwMDBcXDA2MFxcMDAwXFwwNDNcXDAwMFxcMDMxXFwwMDBcXDAzNlxcMDAwXFwwMjRcXDAwMFxcMDUzXFwwMDBcXFxuICAgIFxcMDUxXFwwMDBcXDAzOFxcMDAwXFwwMjdcXDAwMFxcMDMyXFwwMDBcXDAyNlxcMDAwXFwwMjhcXDAwMFxcMDM1XFwwMDBcXDAzN1xcMDAwXFxcbiAgICBcXDA0NFxcMDAwXFwwNDJcXDAwMFxcMDQ1XFwwMDBcXDAyM1xcMDAwXFwwNDZcXDAwMFxcMDIyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNDdcXDAwMFxcMDcxXFwwMDBcXFxuICAgIFxcMDgwXFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwN1xcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDA0OFxcMDAwXFwwNzBcXDAwMFxcMDQ5XFwwMDBcXFxuICAgIFxcMDQzXFwwMDBcXDAzOFxcMDAwXFwwNTJcXDAwMFxcMDU0XFwwMDBcXDA1NVxcMDAwXFwwNTZcXDAwMFxcMDU3XFwwMDBcXDA1OFxcMDAwXFxcbiAgICBcXDA1MlxcMDAwXFwwNjNcXDAwMFxcMDYxXFwwMDBcXDA2MlxcMDAwXFwwNDBcXDAwMFxcMDY0XFwwMDBcXDA2NVxcMDAwXFwwNjZcXDAwMFxcXG4gICAgXFwwNjdcXDAwMFxcMDY4XFwwMDBcXDA2MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwMDBcXDAwMFxcMDcwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc4XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDQxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAzOVxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc1XFwwMDBcXDAwMFxcMDAwXFwwNzVcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDA1XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwOTFcXDAwMFxcMDAwXFwwMDBcXDA4MVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDkyXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OFxcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDAwMFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA5MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X2NoZWNrID1cbiAgIFwiXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwNFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDA0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwN1xcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAyXFwwMDBcXDAwMFxcMDAwXFwwOTJcXDAwMFxcMDAwXFwwMDBcXDA4NlxcMDAwXFxcbiAgICBcXDAwMlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA3XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwNzBcXDAwMFxcMjU1XFwyNTVcXDA3MFxcMDAwXFwwMDBcXDAwMFxcMDY5XFwwMDBcXFxuICAgIFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFxcbiAgICBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDA5XFwwMDBcXDAyNFxcMDAwXFwwMjVcXDAwMFxcMDM5XFwwMDBcXDAwN1xcMDAwXFwwMDBcXDAwMFxcMDI4XFwwMDBcXFxuICAgIFxcMDMyXFwwMDBcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDQyXFwwMDBcXDAzMFxcMDAwXFwwMzVcXDAwMFxcMDAwXFwwMDBcXDAxMVxcMDAwXFxcbiAgICBcXDAxMlxcMDAwXFwwMzRcXDAwMFxcMDI2XFwwMDBcXDAzMVxcMDAwXFwwMDBcXDAwMFxcMDI3XFwwMDBcXDAyNFxcMDAwXFwwMzZcXDAwMFxcXG4gICAgXFwwNDBcXDAwMFxcMDQxXFwwMDBcXDA0NFxcMDAwXFwwMDBcXDAwMFxcMDQ1XFwwMDBcXDAwMFxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDQ2XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXFxuICAgIFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwNDdcXDAwMFxcMDA4XFwwMDBcXDA0OFxcMDAwXFxcbiAgICBcXDA0OVxcMDAwXFwwNTBcXDAwMFxcMDUxXFwwMDBcXDA1M1xcMDAwXFwwNTRcXDAwMFxcMDU1XFwwMDBcXDA1NlxcMDAwXFwwNTdcXDAwMFxcXG4gICAgXFwwNThcXDAwMFxcMDU5XFwwMDBcXDA2MFxcMDAwXFwwNjFcXDAwMFxcMDEzXFwwMDBcXDA2M1xcMDAwXFwwNjRcXDAwMFxcMDY1XFwwMDBcXFxuICAgIFxcMDY2XFwwMDBcXDA2N1xcMDAwXFwwNjhcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMjU1XFwyNTVcXDAwOFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAxM1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMTNcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3M1xcMDAwXFwyNTVcXDI1NVxcMDczXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFxcbiAgICBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFxcbiAgICBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzhcXDAwMFxcMDg2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDg4XFwwMDBcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwNlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwNzhcXDAwMFxcMjU1XFwyNTVcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMDc4XFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgyXFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwyNTVcXDI1NVxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwODhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYXNlX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0X2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF90cmFuc19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY2hlY2tfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NvZGUgPVxuICAgXCJcIjtcbn1cblxubGV0IHJlYyByZWFkIGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgMFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgNTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQk9PTCB0cnVlIClcbiMgMjcxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMSAtPlxuIyA1OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBCT09MIGZhbHNlIClcbiMgMjc2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMiAtPlxuIyA2MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBOVUxMIClcbiMgMjgxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMyAtPlxuIyA2MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBPUyApXG4jIDI4NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDQgLT5cbiMgNjUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggT0UgKVxuIyAyOTEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA1IC0+XG4jIDY3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEFTIClcbiMgMjk2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNiAtPlxuIyA2OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBBRSApXG4jIDMwMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDcgLT5cbiMgNzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3R1cGxlIFRTIHRoZW4gVFNcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMDkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA4IC0+XG4jIDc2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF90dXBsZSBURSB0aGVuIFRFXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzE3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgOSAtPlxuIyA4MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdmFyaWFudCBWUyB0aGVuIFZTXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzI1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTAgLT5cbiMgODYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3ZhcmlhbnQgVkUgdGhlbiBWRVxuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMzMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDExIC0+XG4jIDkxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENPTU1BIClcbiMgMzM4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTIgLT5cbiMgOTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ09MT04gKVxuIyAzNDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMyAtPlxuIyA5NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgTkVHSU5GSU5JVFkgKVxuIyAzNDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNCAtPlxuIyA5NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgSU5GSU5JVFkgKVxuIyAzNTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNSAtPlxuIyA5OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgSU5GSU5JVFkgKVxuIyAzNTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNiAtPlxuIyAxMDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIE5BTiApXG4jIDM2MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE3IC0+XG4jIDEwMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggTGV4eGVyX3V0aWxzLnN0cmluZzJudW0gKExleGluZy5sZXhlbWUgbGV4YnVmKSB3aXRoXG4gICAgICB8IElOVCBfIGFzIHRvayAtPiBDb21wbGlhbmNlLmxleF9pbnRlZ2VyIHRva1xuICAgICAgfCBMQVJHRUlOVCBfIGFzIHRvayAtPiBDb21wbGlhbmNlLmxleF9sYXJnZWludCB0b2tcbiAgICAgIHwgdG9rIC0+IHRva1xuICAgIClcbiMgMzczIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTggLT5cbiMgMTEwIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciAoRkxPQVQgKGZsb2F0X29mX3N0cmluZyAoTGV4aW5nLmxleGVtZSBsZXhidWYpKSkgKVxuIyAzNzggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxOSAtPlxuIyAxMTIgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggU1RSSU5HIFwiXCIgKVxuIyAzODMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMCAtPlxubGV0XG4jIDExMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNcbiMgMzg5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuPSBMZXhpbmcuc3ViX2xleGVtZSBsZXhidWYgKGxleGJ1Zi5MZXhpbmcubGV4X3N0YXJ0X3BvcyArIDEpIChsZXhidWYuTGV4aW5nLmxleF9jdXJyX3BvcyArIC0xKSBpblxuIyAxMTQgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggU1RSSU5HIChMZXh4ZXJfdXRpbHMudW5lc2NhcGVfc3RyaW5nIHMpIClcbiMgMzkzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjEgLT5cbiMgMTE2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEVPRiApXG4jIDM5OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIyIC0+XG4jIDExOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCByZWFkIGxleGJ1ZiApXG4jIDQwMyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIzIC0+XG4jIDEyMCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMudXBkYXRlX3BvcyBsZXhidWY7IHJlYWQgbGV4YnVmOyApXG4jIDQwOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI0IC0+XG4jIDEyMiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggQ29tcGxpYW5jZS5jb21tZW50X2NoZWNrICgpIHdpdGhcbiAgICAgIHwgT2sgKCkgLT4gcmVhZF9jb21tZW50IGxleGJ1ZjsgcmVhZCBsZXhidWZcbiAgICAgIHwgRXJyb3IgZXJyIC0+ICBDT01QTElBTkNFX0VSUk9SIGVyclxuICAgIClcbiMgNDE3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjUgLT5cbiMgMTI4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBDb21wbGlhbmNlLmNvbW1lbnRfY2hlY2sgKCkgd2l0aFxuICAgICAgfCBPayAoKSAtPiByZWFkIGxleGJ1ZlxuICAgICAgfCBFcnJvciBlcnIgLT4gIENPTVBMSUFOQ0VfRVJST1IgZXJyXG4gICAgKVxuIyA0MjYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNiAtPlxuIyAxMzQgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpIClcbiMgNDMxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuYW5kIHJlYWRfY29tbWVudCBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgODhcbmFuZCBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZSA9XG4gIG1hdGNoIExleGluZy5lbmdpbmUgX19vY2FtbF9sZXhfdGFibGVzIF9fb2NhbWxfbGV4X3N0YXRlIGxleGJ1ZiB3aXRoXG4gICAgICB8IDAgLT5cbiMgMTM5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoICgpIClcbiMgNDQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMSAtPlxuIyAxNDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLnVwZGF0ZV9wb3MgbGV4YnVmOyByZWFkX2NvbW1lbnQgbGV4YnVmIClcbiMgNDQ4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMiAtPlxuIyAxNDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLmxleF9lcnJvciBcInVuZXhwZWN0ZWQgRU9GIGluIGNvbW1lbnRcIiApXG4jIDQ1MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDMgLT5cbiMgMTQ1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIHJlYWRfY29tbWVudCBsZXhidWYgKVxuIyA0NTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbjs7XG5cbiMgMTQ3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiBcbiAgZW5kXG5cbiMgNDY5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuIiwibW9kdWxlIFlvanNvbiA9IFN0ZC5Zb2pzb25cbm9wZW4gQnJyXG5cbnR5cGUgbWV0aG9kJyA9IEdldCB8IFBvc3RcblxubGV0IGpzdHJfb2ZfbWV0aG9kID0gZnVuY3Rpb24gR2V0IC0+IEpzdHIudiBcIkdFVFwiIHwgUG9zdCAtPiBKc3RyLnYgXCJQT1NUXCJcblxubW9kdWxlIFR5cGVzID0gc3RydWN0XG4gIHR5cGUgb3JkZXIgPSBBc2NlbmRpbmcgfCBEZXNjZW5kaW5nIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHNvcnQgPVxuICAgIHwgQWxidW1cbiAgICB8IEFsYnVtQXJ0aXN0XG4gICAgfCBBcnRpc3RcbiAgICB8IEJ1ZGdldFxuICAgIHwgQ29tbXVuaXR5UmF0aW5nXG4gICAgfCBDcml0aWNSYXRpbmdcbiAgICB8IERhdGVDcmVhdGVkXG4gICAgfCBEYXRlUGxheWVkXG4gICAgfCBQbGF5Q291bnRcbiAgICB8IFByZW1pZXJlRGF0ZVxuICAgIHwgUHJvZHVjdGlvblllYXJcbiAgICB8IFNvcnROYW1lXG4gICAgfCBSYW5kb21cbiAgICB8IFJldmVudWVcbiAgICB8IFJ1bnRpbWVcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuZW5kXG5cbnR5cGUgdXNlciA9IHtcbiAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICBzZXJ2ZXJfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIlNlcnZlck5hbWVcIl1cbiAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbn1cbltAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxubW9kdWxlIHR5cGUgUXVlcnkgPSBzaWdcbiAgdHlwZSBwYXRoX3BhcmFtc1xuICB0eXBlIHBhcmFtcyBbQEBkZXJpdmluZyB5b2pzb25dXG4gIHR5cGUgcmVzcG9uc2UgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHZhbCBtZXRob2QnIDogbWV0aG9kJ1xuICB2YWwgZW5kcG9pbnQgOiBwYXRoX3BhcmFtcyAtPiBzdHJpbmcgbGlzdFxuZW5kXG5cbm1vZHVsZSBBdXRoZW50aWNhdGVfYnlfbmFtZSA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuXG4gIHR5cGUgcGFyYW1zID0geyB1c2VybmFtZSA6IHN0cmluZzsgW0BrZXkgXCJVc2VybmFtZVwiXSBwdyA6IHN0cmluZyBbQGtleSBcIlB3XCJdIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgdXNlciA6IHVzZXI7IFtAa2V5IFwiVXNlclwiXVxuICAgIGFjY2Vzc190b2tlbiA6IHN0cmluZzsgW0BrZXkgXCJBY2Nlc3NUb2tlblwiXVxuICAgIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICBsZXQgbWV0aG9kJyA9IFBvc3RcbiAgbGV0IGVuZHBvaW50IF8gPSBbIFwiVXNlcnNcIjsgXCJBdXRoZW50aWNhdGVCeU5hbWVcIiBdXG5lbmRcblxubW9kdWxlIEl0ZW0gPSBzdHJ1Y3RcbiAgdHlwZSBpbWFnZV9ibHVyX2hhc2ggPSAoc3RyaW5nICogc3RyaW5nKSBsaXN0XG5cbiAgbGV0IGltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24geSA9XG4gICAgbGV0IGFzc29jID0gWW9qc29uLlNhZmUuVXRpbC50b19hc3NvYyB5IGluXG4gICAgTGlzdC5tYXAgKGZ1biAoa2V5LCB2KSAtPiAoa2V5LCBZb2pzb24uU2FmZS5VdGlsLnRvX3N0cmluZyB2KSkgYXNzb2NcblxuICBsZXQgeW9qc29uX29mX2ltYWdlX2JsdXJfaGFzaCBpIDogWW9qc29uLlNhZmUudCA9XG4gICAgbGV0IGFzc29jID0gTGlzdC5tYXAgKGZ1biAoa2V5LCB2KSAtPiAoa2V5LCBgU3RyaW5nIHYpKSBpIGluXG4gICAgYEFzc29jIGFzc29jXG5cbiAgdHlwZSBpbWFnZV9ibHVyX2hhc2hlcyA9IHtcbiAgICBwcmltYXJ5IDogaW1hZ2VfYmx1cl9oYXNoIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlByaW1hcnlcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgdHlwZSB0eXBlXyA9XG4gICAgfCBBZ2dyZWdhdGVGb2xkZXJcbiAgICB8IEF1ZGlvXG4gICAgfCBBdWRpb0Jvb2tcbiAgICB8IEJhc2VQbHVnaW5Gb2xkZXJcbiAgICB8IEJvb2tcbiAgICB8IEJveFNldFxuICAgIHwgQ2hhbm5lbFxuICAgIHwgQ2hhbm5lbEZvbGRlckl0ZW1cbiAgICB8IENvbGxlY3Rpb25Gb2xkZXJcbiAgICB8IEVwaXNvZGVcbiAgICB8IEZvbGRlclxuICAgIHwgR2VucmVcbiAgICB8IExpdmVUdkNoYW5uZWxcbiAgICB8IExpdmVUdlByb2dyYW1cbiAgICB8IE1hbnVhbFBsYXlsaXN0c0ZvbGRlclxuICAgIHwgTW92aWVcbiAgICB8IE11c2ljQWxidW1cbiAgICB8IE11c2ljQXJ0aXN0XG4gICAgfCBNdXNpY0dlbnJlXG4gICAgfCBNdXNpY1ZpZGVvXG4gICAgfCBQZXJzb25cbiAgICB8IFBob3RvXG4gICAgfCBQaG90b0FsYnVtXG4gICAgfCBQbGF5bGlzdFxuICAgIHwgUGxheWxpc3RzRm9sZGVyXG4gICAgfCBQcm9ncmFtXG4gICAgfCBSZWNvcmRpbmdcbiAgICB8IFNlYXNvblxuICAgIHwgU2VyaWVzXG4gICAgfCBTdHVkaW9cbiAgICB8IFRyYWlsZXJcbiAgICB8IFR2Q2hhbm5lbFxuICAgIHwgVHZQcm9ncmFtXG4gICAgfCBVc2VyUm9vdEZvbGRlclxuICAgIHwgVXNlclZpZXdcbiAgICB8IFZpZGVvXG4gICAgfCBZZWFyXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIGZpZWxkID1cbiAgICB8IEFpclRpbWVcbiAgICB8IEJhc2ljU3luY0luZm9cbiAgICB8IENhbkRlbGV0ZVxuICAgIHwgQ2FuRG93bmxvYWRcbiAgICB8IENoYW5uZWxJbWFnZVxuICAgIHwgQ2hhbm5lbEluZm9cbiAgICB8IENoYXB0ZXJzXG4gICAgfCBDaGlsZENvdW50XG4gICAgfCBDdW11bGF0aXZlUnVuVGltZVRpY2tzXG4gICAgfCBDdXN0b21SYXRpbmdcbiAgICB8IERhdGVDcmVhdGVkXG4gICAgfCBEYXRlTGFzdE1lZGlhQWRkZWRcbiAgICB8IERhdGVMYXN0UmVmcmVzaGVkXG4gICAgfCBEYXRlTGFzdFNhdmVkXG4gICAgfCBEaXNwbGF5UHJlZmVyZW5jZXNJZFxuICAgIHwgRW5hYmxlTWVkaWFTb3VyY2VEaXNwbGF5XG4gICAgfCBFdGFnXG4gICAgfCBFeHRlcm5hbEV0YWdcbiAgICB8IEV4dGVybmFsU2VyaWVzSWRcbiAgICB8IEV4dGVybmFsVXJsc1xuICAgIHwgRXh0cmFJZHNcbiAgICB8IEdlbnJlc1xuICAgIHwgSGVpZ2h0XG4gICAgfCBIb21lUGFnZVVybFxuICAgIHwgSW5oZXJpdGVkUGFyZW50YWxSYXRpbmdWYWx1ZVxuICAgIHwgSXNIRFxuICAgIHwgSXRlbUNvdW50c1xuICAgIHwgTG9jYWxUcmFpbGVyQ291bnRcbiAgICB8IE1lZGlhU291cmNlQ291bnRcbiAgICB8IE1lZGlhU291cmNlc1xuICAgIHwgTWVkaWFTdHJlYW1zXG4gICAgfCBPcmlnaW5hbFRpdGxlXG4gICAgfCBPdmVydmlld1xuICAgIHwgUGFyZW50SWRcbiAgICB8IFBhdGhcbiAgICB8IFBlb3BsZVxuICAgIHwgUGxheUFjY2Vzc1xuICAgIHwgUHJlc2VudGF0aW9uVW5pcXVlS2V5XG4gICAgfCBQcmltYXJ5SW1hZ2VBc3BlY3RSYXRpb1xuICAgIHwgUHJvZHVjdGlvbkxvY2F0aW9uc1xuICAgIHwgUHJvdmlkZXJJZHNcbiAgICB8IFJlY3Vyc2l2ZUl0ZW1Db3VudFxuICAgIHwgUmVmcmVzaFN0YXRlXG4gICAgfCBSZW1vdGVUcmFpbGVyc1xuICAgIHwgU2NyZWVuc2hvdEltYWdlVGFnc1xuICAgIHwgU2Vhc29uVXNlckRhdGFcbiAgICB8IFNlcmllc1ByZXNlbnRhdGlvblVuaXF1ZUtleVxuICAgIHwgU2VyaWVzUHJpbWFyeUltYWdlXG4gICAgfCBTZXJpZXNTdHVkaW9cbiAgICB8IFNlcnZpY2VOYW1lXG4gICAgfCBTZXR0aW5nc1xuICAgIHwgU29ydE5hbWVcbiAgICB8IFNwZWNpYWxFcGlzb2RlTnVtYmVyc1xuICAgIHwgU3BlY2lhbEZlYXR1cmVDb3VudFxuICAgIHwgU3R1ZGlvc1xuICAgIHwgU3luY0luZm9cbiAgICB8IFRhZ2xpbmVzXG4gICAgfCBUYWdzXG4gICAgfCBUaGVtZVNvbmdJZHNcbiAgICB8IFRoZW1lVmlkZW9JZHNcbiAgICB8IFdpZHRoXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICAoKiBUaGUgW1R5cGVdIGZpZWxkIGlzIGFjdHVhbGx5IGEganNvbiBzdHJpbmcgYnV0IHdlIHdhbnQgdG8gc2VlIGl0IGFzIGFcbiAgICAgdmFyaWFudCAod2hpY2ggaXMgYSBsaXN0IG9mIG9uZSBzdHJpbmcpICopXG4gIHR5cGUgdHlwZV9zdHIgPSB0eXBlX1xuXG4gIGxldCB0eXBlX3N0cl9vZl95b2pzb24gaiA9XG4gICAgbGV0IHMgPSBZb2pzb24uU2FmZS5VdGlsLnRvX3N0cmluZyBqIGluXG4gICAgdHlwZV9fb2ZfeW9qc29uIChgTGlzdCBbIGBTdHJpbmcgcyBdKVxuXG4gIGxldCB5b2pzb25fb2ZfdHlwZV9zdHIgdHMgPVxuICAgIG1hdGNoIHlvanNvbl9vZl90eXBlXyB0cyB3aXRoIGBMaXN0IFsganNvbiBdIC0+IGpzb24gfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHR5cGUgdCA9IHtcbiAgICBuYW1lIDogc3RyaW5nOyBbQGtleSBcIk5hbWVcIl1cbiAgICBzb3J0X25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiU29ydE5hbWVcIl1cbiAgICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxuICAgIHBhdGggOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiUGF0aFwiXVxuICAgIGFsYnVtX2lkIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIkFsYnVtSWRcIl1cbiAgICBwYXJlbnRfaWQgOiBzdHJpbmcgb3B0aW9uIG9wdGlvbjtcbiAgICAgICAgKCogW1BhcmVudElkXSBtaWdodCBhYnNlbnQsIFtudWxsXSwgb3IgYSBzdHJpbmcgKilcbiAgICAgICAgW0B5b2pzb24ub3B0aW9uXVxuICAgICAgICBbQGtleSBcIlBhcmVudElkXCJdXG4gICAgc2VydmVyX2lkIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlcklkXCJdXG4gICAgaW1hZ2VfYmx1cl9oYXNoZXMgOiBpbWFnZV9ibHVyX2hhc2hlczsgW0BrZXkgXCJJbWFnZUJsdXJIYXNoZXNcIl1cbiAgICB0eXBlXyA6IHR5cGVfc3RyOyBbQGtleSBcIlR5cGVcIl1cbiAgICBjb2xsZWN0aW9uX3R5cGUgOiBzdHJpbmcgb3B0aW9uO1xuICAgICAgICBbQGRlZmF1bHQgTm9uZV0gW0B5b2pzb25fZHJvcF9kZWZhdWx0ICggPSApXSBbQGtleSBcIkNvbGxlY3Rpb25UeXBlXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuZW5kXG5cbm1vZHVsZSBJdGVtcyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuXG4gIHR5cGUgcGFyYW1zID0ge1xuICAgIGlkcyA6IHN0cmluZyBsaXN0OyBbQGRlZmF1bHQgW11dIFtAeW9qc29uX2Ryb3BfZGVmYXVsdCAoID0gKV0gW0BrZXkgXCJpZHNcIl1cbiAgICBwYXJlbnRfaWQgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwicGFyZW50SWRcIl1cbiAgICB1c2VyX2lkIDogc3RyaW5nOyBbQGtleSBcInVzZXJJZFwiXVxuICAgIGZpZWxkcyA6IEl0ZW0uZmllbGQgbGlzdDtcbiAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgOiBJdGVtLnR5cGVfIGxpc3Q7IFtAa2V5IFwiaW5jbHVkZUl0ZW1UeXBlc1wiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50IG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInN0YXJ0SW5kZXhcIl1cbiAgICBsaW1pdCA6IGludCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl1cbiAgICBzb3J0X29yZGVyIDogVHlwZXMub3JkZXIgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwic29ydE9yZGVyXCJdXG4gICAgc29ydF9ieSA6IFR5cGVzLnNvcnQgbGlzdDsgW0BrZXkgXCJzb3J0QnlcIl1cbiAgICByZWN1cnNpdmUgOiBib29sO1xuICAgIGVuYWJsZV91c2VyX2RhdGEgOiBib29sOyBbQGtleSBcImVuYWJsZVVzZXJEYXRhXCJdXG4gICAgZW5hYmxlX2ltYWdlcyA6IGJvb2w7IFtAa2V5IFwiZW5hYmxlSW1hZ2VzXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgaXRlbXMgOiBJdGVtLnQgbGlzdDsgW0BrZXkgXCJJdGVtc1wiXVxuICAgIHRvdGFsX3JlY29yZF9jb3VudCA6IGludDsgW0BrZXkgXCJUb3RhbFJlY29yZENvdW50XCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQ7IFtAa2V5IFwiU3RhcnRJbmRleFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgXyA9IFsgXCJJdGVtc1wiIF1cbmVuZFxuXG5tb2R1bGUgVmlld3MgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHsgdXNlcl9pZCA6IHN0cmluZyB9XG5cbiAgdHlwZSBwYXJhbXMgPSB7XG4gICAgaW5jbHVkZV9leHRlcm5hbF9jb250ZW50IDogYm9vbDsgW0BrZXkgXCJpbmNsdWRlRXh0ZXJuYWxDb250ZW50XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgaXRlbXMgOiBJdGVtLnQgbGlzdDsgW0BrZXkgXCJJdGVtc1wiXVxuICAgIHRvdGFsX3JlY29yZF9jb3VudCA6IGludDsgW0BrZXkgXCJUb3RhbFJlY29yZENvdW50XCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQ7IFtAa2V5IFwiU3RhcnRJbmRleFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgcHAgPSBbIFwiVXNlcnNcIjsgcHAudXNlcl9pZDsgXCJWaWV3c1wiIF1cbmVuZFxuXG5tb2R1bGUgVmlydHVhbF9mb2xkZXJzID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG4gIHR5cGUgcGFyYW1zID0gdW5pdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSB2aXJ0dWFsX2ZvbGRlciA9IHtcbiAgICBuYW1lIDogc3RyaW5nOyBbQGtleSBcIk5hbWVcIl1cbiAgICBsb2NhdGlvbnMgOiBzdHJpbmcgbGlzdDsgW0BrZXkgXCJMb2NhdGlvbnNcIl1cbiAgICBpdGVtX2lkIDogc3RyaW5nOyBbQGtleSBcIkl0ZW1JZFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICB0eXBlIHJlc3BvbnNlID0gdmlydHVhbF9mb2xkZXIgbGlzdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IF8gPSBbIFwiTGlicmFyeVwiOyBcIlZpcnR1YWxGb2xkZXJzXCIgXVxuZW5kXG5cbm1vZHVsZSBTeXN0ZW0gPSBzdHJ1Y3RcbiAgbW9kdWxlIEluZm8gPSBzdHJ1Y3RcbiAgICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICAgIHR5cGUgcGFyYW1zID0gdW5pdCBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgICB0eXBlIHJlc3BvbnNlID0ge1xuICAgICAgbG9jYWxfYWRkcmVzcyA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIkxvY2FsQWRyZXNzXCJdXG4gICAgICBzZXJ2ZXJfbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJOYW1lXCJdXG4gICAgICBwcm9kdWN0X25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJQcm9kdWN0TmFtZVwiXVxuICAgICAgb3BlcmF0aW5nX3N5c3RlbSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIk9wZXJhdGluZ1N5c3RlbVwiXVxuICAgICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICB9XG4gICAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gICAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgICBsZXQgZW5kcG9pbnQgXyA9IFsgXCJTeXN0ZW1cIjsgXCJJbmZvXCIgXVxuICBlbmRcbmVuZFxuXG4oKiBGb3J3YXJkIGRlY2xhcmF0aW9uIHRvIGJlIGZpbGxlZCBieSB0aGUgYXBwICopXG5sZXQgc2Vzc2lvbl91dWlkID0gcmVmIE5vbmVcbmxldCBzZXRfc2Vzc2lvbl91dWlkIHMgPSBzZXNzaW9uX3V1aWQgOj0gU29tZSBzXG5cbmxldCBhdXRob3JpemF0aW9uID90b2tlbiAoKSA9XG4gIGxldCB0b2tlbiA9XG4gICAgbWF0Y2ggdG9rZW4gd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIHQgLT4gUHJpbnRmLnNwcmludGYgXCIsIFRva2VuPSVTXCIgdFxuICBpblxuICBsZXQgc2Vzc2lvbl91dWlkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OlwiXCIgIXNlc3Npb25fdXVpZCBpblxuICBQcmludGYuc3ByaW50ZlxuICAgIFwiTWVkaWFCcm93c2VyIENsaWVudD1cXFwiT2NhbWl4XFxcIiwgRGV2aWNlPVxcXCJGaXJlZm94XFxcIiwgRGV2aWNlSWQ9XFxcIiVzXFxcIiwgXFxcbiAgICAgVmVyc2lvbj1cXFwiMC4xXFxcIiVzXCJcbiAgICBzZXNzaW9uX3V1aWQgdG9rZW5cblxubGV0IHJlcXVlc3QgKHR5cGUgcHAgcCByKSB+YmFzZV91cmwgP3Rva2VuID9oZWFkZXJzXG4gICAgKG1vZHVsZSBRIDogUXVlcnlcbiAgICAgIHdpdGggdHlwZSBwYXRoX3BhcmFtcyA9IHBwXG4gICAgICAgYW5kIHR5cGUgcGFyYW1zID0gcFxuICAgICAgIGFuZCB0eXBlIHJlc3BvbnNlID0gcikgKHBhcmFtcyA6IHApIChwYXRoX3BhcmFtcyA6IHBwKSA6IHIgRnV0Lm9yX2Vycm9yID1cbiAgbGV0IG9wZW4gQnJyX2lvLkZldGNoIGluXG4gIGxldCBiYXNlX3VyaSA9IFVyaS52IChKc3RyLnYgYmFzZV91cmwpIGluXG4gIGxldCBiYXNlX3BhdGhfc2VnbWVudHMgPSBSZXN1bHQuZ2V0X29rIEBAIFVyaS5wYXRoX3NlZ21lbnRzIGJhc2VfdXJpIGluXG4gIGxldCBlbmRwb2ludF9wYXRoX3NlZ21lbnRzID0gTGlzdC5tYXAgSnN0ci52IChRLmVuZHBvaW50IHBhdGhfcGFyYW1zKSBpblxuICBsZXQgcGF0aF9zZWdtZW50cyA9XG4gICAgaWYgYmFzZV9wYXRoX3NlZ21lbnRzID0gWyBKc3RyLmVtcHR5IF0gdGhlbiBlbmRwb2ludF9wYXRoX3NlZ21lbnRzXG4gICAgZWxzZSBMaXN0LmNvbmNhdCBbIGJhc2VfcGF0aF9zZWdtZW50czsgZW5kcG9pbnRfcGF0aF9zZWdtZW50cyBdXG4gIGluXG4gIGxldCB1cmkgPSBVcmkud2l0aF9wYXRoX3NlZ21lbnRzIGJhc2VfdXJpIHBhdGhfc2VnbWVudHMgaW5cbiAgbGV0IHVyaSA9IFJlc3VsdC5nZXRfb2sgdXJpIGluXG4gIGxldCBhdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgaW5cbiAgbGV0IGhlYWRlcnMgPVxuICAgIEhlYWRlcnMub2ZfYXNzb2MgP2luaXQ6aGVhZGVyc1xuICAgICAgSnN0ci5cbiAgICAgICAgW1xuICAgICAgICAgICh2IFwiY29udGVudC10eXBlXCIsIHYgXCJ0ZXh0L2pzb25cIik7XG4gICAgICAgICAgKHYgXCJYLUVtYnktQXV0aG9yaXphdGlvblwiLCB2IGF1dGhvcml6YXRpb24pO1xuICAgICAgICBdXG4gIGluXG4gIGxldCBtZXRob2QnID0ganN0cl9vZl9tZXRob2QgUS5tZXRob2QnIGluXG4gIGxldCBpbml0LCB1cmwgPVxuICAgIG1hdGNoIFEubWV0aG9kJyB3aXRoXG4gICAgfCBHZXQgLT5cbiAgICAgICAgbGV0IHBhcmFtcyA9XG4gICAgICAgICAgcGFyYW1zIHw+IFEueW9qc29uX29mX3BhcmFtcyB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci52XG4gICAgICAgICAgfD4gSnNvbi5kZWNvZGUgfD4gUmVzdWx0LmdldF9vayB8PiBVcmkuUGFyYW1zLm9mX29ialxuICAgICAgICBpblxuICAgICAgICBsZXQgdXJpX3dpdGhfcGFyYW1zID0gVXJpLndpdGhfcXVlcnlfcGFyYW1zIHVyaSBwYXJhbXMgaW5cbiAgICAgICAgKFJlcXVlc3QuaW5pdCB+aGVhZGVycyB+bWV0aG9kJyAoKSwgVXJpLnRvX2pzdHIgdXJpX3dpdGhfcGFyYW1zKVxuICAgIHwgUG9zdCAtPlxuICAgICAgICBsZXQgYm9keSA9XG4gICAgICAgICAgcGFyYW1zIHw+IFEueW9qc29uX29mX3BhcmFtcyB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci52XG4gICAgICAgICAgfD4gQm9keS5vZl9qc3RyXG4gICAgICAgIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgfmJvZHkgKCksIFVyaS50b19qc3RyIHVyaSlcbiAgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KiByZXMgPSByZXF1ZXN0IEBAIFJlcXVlc3QudiB+aW5pdCB1cmwgaW5cbiAgbGV0KyBqc29uID0gUmVzcG9uc2UuYXNfYm9keSByZXMgfD4gQm9keS50ZXh0IGluXG4gIGxldCB5b2pzb24gPSBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyAoSnN0ci50b19zdHJpbmcganNvbikgaW5cbiAgdHJ5IFEucmVzcG9uc2Vfb2ZfeW9qc29uIHlvanNvblxuICB3aXRoIGUgLT5cbiAgICBDb25zb2xlLmxvZyBbIFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBkZWNvZGluZyByZXNwb25zZTogXCI7IGpzb24gXTtcbiAgICBDb25zb2xlLmxvZyBbIGUgXTtcbiAgICByYWlzZSBlXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyX2lvXG5tb2R1bGUgQXBpID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5fYXBpXG5cbigqIFByb3Bvc2l0aW9uOlxuICAgLSBVc2UgcHJpbWFyeSBrZXkgdG8gcHJvdmlkZSBmaWx0ZXJpbmdcbiAgIC0gVXNlIGluZGV4IGtleXMgdG8gcHJvdmlkZSBzb3J0c1xuXG4gICBCaWcgcHJpbWFyeSBrZXlzIGRyaXZlIHRoZSBjb3N0IG9mIFtnZXRfYWxsX2tleXNdIHVwLlxuICAgV2UgY291bGQgZGVsZWdhdGUgc29tZSBmaWx0ZXJpbmcgdG8gdGhlIGluZGV4IGtleXMgaWYgbmVjZXNzYXJ5LlxuXG4gICAgV2UgY291bGQgYWxzbyB0cmllZCB0byBwcmUtcHJvY2VzcyBvciBjb21wcmVzcyB0aGUga2V5cyAqKVxuXG5sZXQgdF90b19qdiBlbmNvZGVyIHQgPVxuICBlbmNvZGVyIHQgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIub2Zfc3RyaW5nIHw+IEJyci5Kc29uLmRlY29kZVxuICB8PiBSZXN1bHQuZ2V0X2V4blxuXG5sZXQganZfdG9fdCBkZWNvZGVyIGogPVxuICBsZXQganNvbiA9IEJyci5Kc29uLmVuY29kZSBqIGluXG4gIE9rIChKc3RyLnRvX3N0cmluZyBqc29uIHw+IFlvanNvbi5TYWZlLmZyb21fc3RyaW5nIHw+IGRlY29kZXIpXG5cbm1vZHVsZSBPcmRlcnJlZF9pdGVtcyA9IHN0cnVjdFxuICB0eXBlIHQgPSB7IGlkIDogaW50OyBpdGVtIDogc3RyaW5nIG9wdGlvbiB9IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0gaW50XG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX2ludCBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19pbnQgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcImlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2RhdGVfYWRkZWRcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gdC5pZFxuZW5kXG5cbm1vZHVsZSBJdGVtcyA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluLkFwaVxuXG4gIHR5cGUgc29ydHMgPSB7IGRhdGVfYWRkZWQgOiBpbnQ7IHZpZXdzIDogc3RyaW5nIGxpc3Q7IHNvcnRfbmFtZSA6IHN0cmluZyB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHQgPSB7IHNvcnRzIDogc29ydHM7IGl0ZW0gOiBJdGVtLnQgfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbGV0IGNvbXBhcmUgdCB0JyA9IFN0cmluZy5jb21wYXJlIHQuc29ydHMuc29ydF9uYW1lIHQnLnNvcnRzLnNvcnRfbmFtZVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSB7IGlkIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmc7IHZpZXdzIDogc3RyaW5nIGxpc3QgfVxuXG4gICAgbGV0IHRvX2p2IHsgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfSA9XG4gICAgICBsZXQgaWQgPSBKdi5vZl9zdHJpbmcgaWQgaW5cbiAgICAgIGxldCBzb3J0X25hbWUgPSBKdi5vZl9zdHJpbmcgc29ydF9uYW1lIGluXG4gICAgICBsZXQgdmlld3MgPSBKdi5vZl9saXN0IEp2Lm9mX3N0cmluZyB2aWV3cyBpblxuICAgICAgSnYub2ZfanZfYXJyYXkgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF1cblxuICAgIGxldCBvZl9qdiBqID1cbiAgICAgIG1hdGNoIEp2LnRvX2p2X2FycmF5IGogd2l0aFxuICAgICAgfCBbfCBpZDsgc29ydF9uYW1lOyB2aWV3cyB8XSAtPlxuICAgICAgICAgIGxldCBpZCA9IEp2LnRvX3N0cmluZyBpZCBpblxuICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lIGluXG4gICAgICAgICAgbGV0IHZpZXdzID0gSnYudG9fbGlzdCBKdi50b19zdHJpbmcgdmlld3MgaW5cbiAgICAgICAgICB7IGlkOyBzb3J0X25hbWU7IHZpZXdzIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguKFxuICAgICAgICBTIFt8IElkIFwiaXRlbS5JZFwiOyBJZCBcIml0ZW0uTmFtZVwiOyBJZCBcInNvcnRzLnZpZXdzXCIgfF0pXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfZGF0ZV9hZGRlZCA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9pbnQga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9faW50IGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJzb3J0cy5kYXRlX2FkZGVkXCJcbiAgZW5kXG5cbiAgbW9kdWxlIEtleV9pZCA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHN0cmluZ1xuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9zdHJpbmcga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9fc3RyaW5nIGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJpdGVtLklkXCJcbiAgZW5kXG5cbiAgbW9kdWxlIEtleV92aWV3X2tpbmQgPSBzdHJ1Y3RcbiAgICAoKiB0b2RvOiB1c2UgYSBlbnVtIGZvciBraW5kcyAqKVxuICAgIHR5cGUgdCA9IHsgdHlwZScgOiBzdHJpbmc7IHZpZXdzIDogc3RyaW5nIGxpc3QgfVxuXG4gICAgbGV0IHRvX2p2IF9rID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCB0eXBlJzsgdmlld3MgfF0gLT5cbiAgICAgICAgICB7IHR5cGUnID0gSnYudG9fc3RyaW5nIHR5cGUnOyB2aWV3cyA9IEp2Lih0b19saXN0IHRvX3N0cmluZyB2aWV3cykgfVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLlMgW3wgSWQgXCJpdGVtLlR5cGVcIjsgSWQgXCJzb3J0cy52aWV3c1wiIHxdXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdHlwZV9uYW1lID0gc3RydWN0XG4gICAgdHlwZSB0ID0geyBjb2xsZWN0aW9uX3R5cGUgOiBzdHJpbmc7IHNvcnRfbmFtZSA6IHN0cmluZyB9XG5cbiAgICBsZXQgdG9fanYgX3QgPSBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBvZl9qdiBqID1cbiAgICAgIG1hdGNoIEp2Lih0b19qdl9hcnJheSBqKSB3aXRoXG4gICAgICB8IFt8IGNvbGxlY3Rpb25fdHlwZTsgc29ydF9uYW1lIHxdIC0+XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sbGVjdGlvbl90eXBlID0gSnYudG9fc3RyaW5nIGNvbGxlY3Rpb25fdHlwZTtcbiAgICAgICAgICAgIHNvcnRfbmFtZSA9IEp2LnRvX3N0cmluZyBzb3J0X25hbWU7XG4gICAgICAgICAgfVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPVxuICAgICAgSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5Db2xsZWN0aW9uVHlwZVwiOyBJZCBcInNvcnRzLnNvcnRfbmFtZVwiIHxdXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJpdGVtc1wiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG5cbiAgbGV0IGdldF9rZXkgdCA9XG4gICAge1xuICAgICAgS2V5LnNvcnRfbmFtZSA9IHQuc29ydHMuc29ydF9uYW1lO1xuICAgICAgaWQgPSB0Lml0ZW0uSXRlbS5pZDtcbiAgICAgIHZpZXdzID0gdC5zb3J0cy52aWV3cztcbiAgICB9XG5lbmRcblxubW9kdWxlIFZpcnR1YWxfZm9sZGVyID0gc3RydWN0XG4gIG9wZW4gRGF0YV9zb3VyY2UuSmVsbHlmaW5fYXBpXG5cbiAgKCogdG9kbzogbXVsdGlzZXJ2ZXI6IHdlIHNob3VsZCBhZGQgYSBzZXJ2ZXJfaWQga2V5ICopXG4gIHR5cGUgdCA9IFZpcnR1YWxfZm9sZGVycy52aXJ0dWFsX2ZvbGRlciBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHN0cmluZ1xuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9zdHJpbmcga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9fc3RyaW5nIGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJJdGVtSWRcIlxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwidmlydHVhbF9mb2xkZXJzXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cbiAgbGV0IGdldF9rZXkgdCA9IHQuVmlydHVhbF9mb2xkZXJzLml0ZW1faWRcbmVuZFxuXG5tb2R1bGUgT3JkZXJyZWRfaXRlbXNfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChPcmRlcnJlZF9pdGVtcylcbm1vZHVsZSBJdGVtc19zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKEl0ZW1zKVxubW9kdWxlIFZpcnR1YWxfZm9sZGVyX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoVmlydHVhbF9mb2xkZXIpXG5cbm1vZHVsZSBJdGVtc0J5RGF0ZUFkZGVkID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2RhdGVfYWRkZWRcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV9kYXRlX2FkZGVkKVxuXG5tb2R1bGUgSXRlbXNCeVZpZXdBbmRLaW5kID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X3ZpZXdfYW5kX2tpbmRcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV92aWV3X2tpbmQpXG5cbm1vZHVsZSBJdGVtc0J5SWQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfaWRcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV9pZClcblxubW9kdWxlIEl0ZW1zQnlUeXBlQW5kTmFtZSA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV90eXBlX2FuZF9uYW1lXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfdHlwZV9uYW1lKVxuIiwib3BlbiEgU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJyclxub3BlbiBCcnJfaW8uSW5kZXhlZF9kYlxubW9kdWxlIFNvdXJjZSA9IERhdGFfc291cmNlLkplbGx5ZmluXG5tb2R1bGUgT0kgPSBTdG9yZXMuT3JkZXJyZWRfaXRlbXNfc3RvcmVcbm1vZHVsZSBJID0gU3RvcmVzLkl0ZW1zX3N0b3JlXG5tb2R1bGUgVkYgPSBTdG9yZXMuVmlydHVhbF9mb2xkZXJfc3RvcmVcbm9wZW4gU291cmNlLkFwaVxuXG4oKiBJdGVtcyBIaWVyYXJjaHlcblxuICAgVXNlclJvb3RGb2xkZXIgKFwiTWVkaWEgRm9sZGVyc1wiIFwiZTlkNTA3NWE1NTVjMWNiYzM5NGVlYzRjZWYyOTUyNzRcIilcbiAgICAgICAgICAgICAgICAgIChHZXRzIHRoZSByb290IGZvbGRlciBmcm9tIGEgdXNlcidzIGxpYnJhcnkuIClcbiAgIF4gQ29sbGVjdGlvbkZvbGRlciAoXCJNdXNpY0xpYlwiIFwiMTUwODQ4Y2Q0ZjQ0YjlhZTMyZWM1YTc5MzRkZTM5Y2VcIilcblxuICAgQWdncmVnYXRlRm9sZGVyIChcInJvb3RcIiBcImYyN2NhYTM3ZTUxNDIyMjVjY2VkZWQ0OGY2NTUzNTAyXCIpXG4gICBeIEZvbGRlciAoXCJtZWRpYVwiIFwiOTJmZGU3MWQwZWM1NzdiNTMxZTdiMzQyN2IyMjNiZWRcIilcbiAgIF4gRm9sZGVyKyA8LSBNdXNpY0FydGlzdCA8LSBNdXNpY0FsYnVtIDwtIEF1ZGlvXG5cbiAgIEplbGx5ZmluIGNvbnNpZGVycyB0aGF0IEZvbGRlciAoXCJtZWRpYVwiIFwiOTJmZGU3MWQwZWM1NzdiNTMxZTdiMzQyN2IyMjNiZWRcIikgPT0gQ29sbGVjdGlvbkZvbGRlciAoXCJNdXNpY0xpYlwiIFwiMTUwODQ4Y2Q0ZjQ0YjlhZTMyZWM1YTc5MzRkZTM5Y2VcIilcblxuICAgVGhpcyBlcXVhbGl0eSBjYW4gYmUgcmV0cml2ZWQgYnkgcXVlcnlpbmcgdGhlIFwiVmlydHVhbEZvbGRlcnNcIiBhbmQgbG9vayBhdFxuICAgdGhlIGxvY2F0aW9ucycgcGF0aHMuIFVuZm9ydHVuYXRlbHkgdGhpcyBpcyBub3QgYWNjZXNzaWJsZSB0byB1bnByaXZpbGVkZ2VkIHVzZXJzLi4uXG5cbiAgIFRvIGFjdHVhbGx5IGtub3cgd2hpY2ggZm9sZGVycyBhcmUgcGFydCBvZiBhIHVzZXIgdmlldyB3ZSBuZWVkIHRvIHF1ZXJ5IHRoZVxuICAgaXRlbXMgdGhhdCBoYXZlIHRoaXMgdmlldydzIGlkIGFzIGEgW3BhcmVudElkXS4gVGhlIGFjdHVhbCBbcGFyZW50SWRdIG9mXG4gICB0aGVzZSBpdGVtcyB3aWxsIGJlIGRpZmZlcmVudCBhbmQgYXJlIHRoZSBpZHMgYWN0dWFsIGZvbGRlcnMgdGhhdFxuICAgY29uc3RpdHV0ZSB0aGlzIHZpZXcuXG5cbiAgIEZvciBzaW1wbGljaXR5ICg/KSB3ZSBjb25zaWRlciB0aGF0IGFuIGl0ZW0gaXMgcGFydCBvZiBhIHZpZXcgaWYgaXRzIHBhdGggaXNcbiAgIHByZWZpeGVkIGJ5IG9uZSBvZiB0aGUgdmlldydzIHZpcnR1YWwgZm9sZGVyIGxvY2F0aW9ucy5cbiopXG5cbmxldCBjaHVua19zaXplID0gNTAwXG5sZXQgaW5jbHVkZV9pdGVtX3R5cGVzID0gWyBTb3VyY2UuQXBpLkl0ZW0uTXVzaWNBcnRpc3Q7IE11c2ljQWxidW07IEF1ZGlvIF1cblxubGV0IGZldGNoX3RvdGFsX2l0ZW1fY291bnQgc291cmNlID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyByZXMgPVxuICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgIHtcbiAgICAgICAgICAoKiB0b2RvIG1ha2Ugc29ydCBleHBsaWNpdCAoYnkgZGF0ZSBhZGRlZCBkYXRlKSopXG4gICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICBmaWVsZHMgPSBbXTtcbiAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXM7XG4gICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgIGxpbWl0ID0gU29tZSAwO1xuICAgICAgICAgIHNvcnRfb3JkZXIgPSBTb21lIEFzY2VuZGluZztcbiAgICAgICAgICBzb3J0X2J5ID0gWyBEYXRlQ3JlYXRlZCBdO1xuICAgICAgICAgIHJlY3Vyc2l2ZSA9IHRydWU7XG4gICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgKClcbiAgaW5cbiAgcmVzLnRvdGFsX3JlY29yZF9jb3VudFxuXG50eXBlIGRiX2luZm9zID0ge1xuICBsYXN0X2tleSA6IGludCBvcHRpb247XG4gIGxhc3RfdmFsdWUgOiBTdG9yZXMuT3JkZXJyZWRfaXRlbXMudCBvcHRpb247XG59XG5cbmxldCBnZXRfZGJfaW5mb3MgaWRiID1cbiAgbGV0IGluZm9zLCBzZXRfaW5mb3MgPSBGdXQuY3JlYXRlICgpIGluXG4gIGxldCB0cmFuc2FjdGlvbiA9IERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSkgXSB+bW9kZTpSZWFkb25seSBpZGIgaW5cbiAgbGV0IHN0b3JlID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gIGxldCByZXEgPSBPSS5vcGVuX2N1cnNvciB+ZGlyZWN0aW9uOlByZXYgc3RvcmUgaW5cbiAgbGV0IGxhc3Rfa2V5ID0gcmVmIE5vbmUgaW5cbiAgbGV0IF8gPVxuICAgIFJlcXVlc3Qub25fc3VjY2VzcyByZXEgfmY6KGZ1biBfIHEgLT5cbiAgICAgICAgbWF0Y2ggUmVxdWVzdC5yZXN1bHQgcSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBzZXRfaW5mb3MgeyBsYXN0X2tleSA9ICFsYXN0X2tleTsgbGFzdF92YWx1ZSA9IE5vbmUgfVxuICAgICAgICB8IFNvbWUgY3Vyc29yIC0+IChcbiAgICAgICAgICAgIGlmIE9wdGlvbi5pc19ub25lICFsYXN0X2tleSB0aGVuXG4gICAgICAgICAgICAgIGxhc3Rfa2V5IDo9IE9JLkN1cnNvcl93aXRoX3ZhbHVlLmtleSBjdXJzb3I7XG4gICAgICAgICAgICBtYXRjaCBPSS5DdXJzb3Jfd2l0aF92YWx1ZS52YWx1ZSBjdXJzb3Igd2l0aFxuICAgICAgICAgICAgfCBTb21lICh7IGl0ZW0gPSBTb21lIF87IF8gfSBhcyBpdGVtKSAtPlxuICAgICAgICAgICAgICAgIHNldF9pbmZvcyB7IGxhc3Rfa2V5ID0gIWxhc3Rfa2V5OyBsYXN0X3ZhbHVlID0gU29tZSBpdGVtIH1cbiAgICAgICAgICAgIHwgXyAtPiBPSS5DdXJzb3Jfd2l0aF92YWx1ZS5jb250aW51ZSBjdXJzb3IpKVxuICBpblxuICBpbmZvc1xuXG5sZXQgaXNfZGJfY29uc2lzdGVudCB+c291cmNlOl8gfmxhc3Rfc291cmNlX2l0ZW1fa2V5IGRiX3N5bmNfaW5mb3MgPVxuICBsZXQgbGFzdF9rZXkgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6KC0xKSBkYl9zeW5jX2luZm9zLmxhc3Rfa2V5IGluXG4gIGlmIGxhc3Rfa2V5ID4gbGFzdF9zb3VyY2VfaXRlbV9rZXkgdGhlblxuICAgICgqIFRoZXJlIGFyZSBmZXdlciBpdGVtcyBpbiB0aGUgc291cmNlIHRoYW4gZXhwZWN0ZWQgKilcbiAgICBmYWxzZVxuICBlbHNlXG4gICAgKCogVG9kbzogY2hlY2sgdGhhdCB0aGUgbGFzdCBrbm93biBpdGVtIGlzIHRoZSBzYW1lIHRoYW4gaW4gdGhlIHNvdXJjZSAqKVxuICAgIHRydWVcblxudHlwZSBzdGF0dXMgPVxuICB8IFVua25vd25cbiAgfCBJbl9zeW5jXG4gIHwgSW5jb25zaXN0ZW50XG4gIHwgTmV3X2l0ZW1zIG9mIHtcbiAgICAgIGZpcnN0X21pc3Npbmdfa2V5IDogaW50O1xuICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleSA6IGludDtcbiAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IDogaW50O1xuICAgIH1cbiAgfCBQYXJ0aWFsX2ZldGNoIG9mIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA6IGludDsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgOiBpbnQgfVxuXG50eXBlIHByb2dyZXNzID0geyB0b3RhbCA6IGludDsgcmVtYWluaW5nIDogaW50IH1cbnR5cGUgcmVwb3J0ID0geyBzdGF0dXMgOiBzdGF0dXM7IHN5bmNfcHJvZ3Jlc3MgOiBwcm9ncmVzcyBvcHRpb24gfVxuXG5sZXQgaW5pdGlhbF9yZXBvcnQgPSB7IHN0YXR1cyA9IFVua25vd247IHN5bmNfcHJvZ3Jlc3MgPSBOb25lIH1cblxubGV0IHN0YXR1c190b19zdHJpbmcgPSBmdW5jdGlvblxuICB8IFVua25vd24gLT4gXCJVbmtub3duXCJcbiAgfCBJbl9zeW5jIC0+IFwiU3luY2hyb25pemVkXCJcbiAgfCBJbmNvbnNpc3RlbnQgLT4gXCJJbmNvbnNpc3RlbnRcIlxuICB8IE5ld19pdGVtcyB7IGZpcnN0X21pc3Npbmdfa2V5OyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgLT5cbiAgICAgIEZvcm1hdC5zcHJpbnRmIFwiTmV3IGl0ZW1zOiBsYXN0OiAlaSBtaXNzaW5nOiAlaSB1bmZldGNoZWQ6ICVpXCJcbiAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgZmlyc3RfbWlzc2luZ19rZXkgZmlyc3RfdW5mZXRjaGVkX2tleVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9IC0+XG4gICAgICBGb3JtYXQuc3ByaW50ZiBcIlBhcnRpYWw6IGxhc3Q6ICVpIHVuZmV0Y2hlZDogJWlcIiBmaXJzdF91bmZldGNoZWRfa2V5XG4gICAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXlcblxubGV0IHBwX3Byb2dyZXNzIGZtdCB7IHRvdGFsOyByZW1haW5pbmcgfSA9XG4gIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiglaS8laSlcIiByZW1haW5pbmcgdG90YWxcblxubGV0IHBwX3JlcG9ydCBmbXQgeyBzdGF0dXM7IHN5bmNfcHJvZ3Jlc3MgfSA9XG4gIGxldCBzdGF0dXMgPSBzdGF0dXNfdG9fc3RyaW5nIHN0YXR1cyBpblxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlcyVhXCIgc3RhdHVzXG4gICAgKEZvcm1hdC5wcF9wcmludF9vcHRpb24gcHBfcHJvZ3Jlc3MpXG4gICAgc3luY19wcm9ncmVzc1xuXG5sZXQgbG9nX3N0YXR1cyA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93biAtPiBDb25zb2xlLmluZm8gWyBcIkRhdGFiYXNlIHN0YXR1cyBpcyB1bmtub3duXCIgXVxuICB8IEluX3N5bmMgLT4gQ29uc29sZS5pbmZvIFsgXCJEYXRhYmFzZSBpcyBzeW5jaHJvbml6ZWRcIiBdXG4gIHwgSW5jb25zaXN0ZW50IC0+IENvbnNvbGUud2FybiBbIFwiRGF0YWJhc2UgaXMgb3V0LW9mLXN5bmNcIiBdXG4gIHwgTmV3X2l0ZW1zIHsgZmlyc3RfbWlzc2luZ19rZXk7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAtPlxuICAgICAgQ29uc29sZS5pbmZvXG4gICAgICAgIFtcbiAgICAgICAgICBcIk5ldyBpdGVtcyB3ZXJlIGFkZGVkIHRvIHRoZSBzb3VyY2UuXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF9taXNzaW5nX2tleSArIDE7XG4gICAgICAgICAgXCJuZXcgaXRlbXNcIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X3VuZmV0Y2hlZF9rZXkgKyAxO1xuICAgICAgICAgIFwidW5mZXRjaGVkIGl0ZW1zXCI7XG4gICAgICAgIF1cbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgQ29uc29sZS5pbmZvXG4gICAgICAgIFtcbiAgICAgICAgICBcIlNvbWUgaXRlbXMgaGF2ZSBub3QgYmVlbiBmZXRjaGVkIHlldC5cIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X3VuZmV0Y2hlZF9rZXkgKyAxO1xuICAgICAgICAgIFwidW5mZXRjaGVkIGl0ZW1zXCI7XG4gICAgICAgIF1cblxubGV0IGNoZWNrX3N0YXR1cyB+c291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KiBkYl9pbmZvcyA9IGdldF9kYl9pbmZvcyBpZGIgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyB0b3RhbF9pdGVtX2NvdW50ID0gZmV0Y2hfdG90YWxfaXRlbV9jb3VudCBzb3VyY2UgaW5cbiAgKCogS2V5cyBzdGFydCBhdCAwLCBpdCdzIG5hdHVyYWwgdG8gY291bnQgaXRlbSBieSBzdGFydGluZyB3aXRoIDAgKilcbiAgbGV0IGxhc3Rfc291cmNlX2l0ZW1fa2V5ID0gdG90YWxfaXRlbV9jb3VudCAtIDEgaW5cbiAgaWYgbm90IChpc19kYl9jb25zaXN0ZW50IH5zb3VyY2Ugfmxhc3Rfc291cmNlX2l0ZW1fa2V5IGRiX2luZm9zKSB0aGVuXG4gICAgSW5jb25zaXN0ZW50XG4gIGVsc2VcbiAgICBtYXRjaCBkYl9pbmZvcyB3aXRoXG4gICAgfCB7IGxhc3Rfa2V5ID0gTm9uZTsgbGFzdF92YWx1ZSA9IE5vbmUgfSAtPlxuICAgICAgICAoKiBUaGUgZGIgaGFzIG5vdCB5ZXQgYmVlbiBwb3B1bGF0ZWQgd2l0aCBwbGFjZWhvbGRlcnMgKilcbiAgICAgICAgTmV3X2l0ZW1zXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlyc3RfbWlzc2luZ19rZXkgPSAwO1xuICAgICAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleSA9IDA7XG4gICAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgICAgICB9XG4gICAgfCB7IGxhc3Rfa2V5ID0gU29tZSBrZXk7IGxhc3RfdmFsdWUgPSBpdGVtIH0gd2hlbiBrZXkgPCBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICAgICAgLT5cbiAgICAgICAgKCogTmV3IGl0ZW1zIHdlcmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBzaW5jZSB0aGUgbGFzdCBzeW5jICopXG4gICAgICAgIGxldCBmaXJzdF91bmZldGNoZWRfa2V5ID1cbiAgICAgICAgICBtYXRjaCBpdGVtIHdpdGggTm9uZSAtPiAwIHwgU29tZSB7IGlkOyBfIH0gLT4gaWQgKyAxXG4gICAgICAgIGluXG4gICAgICAgIE5ld19pdGVtc1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpcnN0X21pc3Npbmdfa2V5ID0ga2V5ICsgMTtcbiAgICAgICAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXk7XG4gICAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgICAgICB9XG4gICAgfCB7IGxhc3Rfa2V5ID0gU29tZSBrZXk7IGxhc3RfdmFsdWUgPSBpdGVtIH0gd2hlbiBrZXkgPSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICAgICAgLT4gKFxuICAgICAgICBtYXRjaCBpdGVtIHdpdGhcbiAgICAgICAgfCBTb21lIHsgaWQ7IF8gfSB3aGVuIGlkID0ga2V5IC0+IEluX3N5bmNcbiAgICAgICAgfCBTb21lIHsgaWQ7IF8gfSAtPlxuICAgICAgICAgICAgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSBpZCArIDE7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA9IDA7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0pXG4gICAgfCBfIC0+IEluY29uc2lzdGVudFxuXG5sZXQgdXBkYXRlX3ZpZXdzIHNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHZpZXdzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuVmlld3MpXG4gICAgICB7IGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA9IGZhbHNlIH1cbiAgICAgIHsgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQgfVxuICBpblxuICBMaXN0Lml0ZXIgdmlld3MuaXRlbXMgfmY6KGZ1biAoaXRlbSA6IEl0ZW0udCkgLT5cbiAgICAgIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gICAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpOyAobW9kdWxlIEkpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgICAgaW5cbiAgICAgIGxldCBzX2l0ZW1zID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgIGxldCBzb3J0X25hbWUgPSBPcHRpb24udmFsdWUgaXRlbS5zb3J0X25hbWUgfmRlZmF1bHQ6aXRlbS5uYW1lIGluXG4gICAgICBJLnB1dCB7IHNvcnRzID0geyBkYXRlX2FkZGVkID0gLTE7IHZpZXdzID0gW107IHNvcnRfbmFtZSB9OyBpdGVtIH0gc19pdGVtc1xuICAgICAgfD4gaWdub3JlKTtcbiAgdmlld3NcblxubGV0IGRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aWV3cyBzb3VyY2UgKHZpZXdzIDogVmlld3MucmVzcG9uc2UpID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IHBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiB7IEl0ZW0uaWQ7IF8gfSA9XG4gICAgbGV0KyByZXMgPVxuICAgICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgICBwYXJlbnRfaWQgPSBTb21lIGlkO1xuICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICBmaWVsZHMgPSBbIFBhcmVudElkIF07XG4gICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICAgIGxpbWl0ID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9ieSA9IFtdO1xuICAgICAgICAgICAgcmVjdXJzaXZlID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAoKVxuICAgIGluXG4gICAgTGlzdC5mb2xkX2xlZnQgfmluaXQ6U3RyaW5nLlNldC5lbXB0eSByZXMuaXRlbXNcbiAgICAgIH5mOihmdW4gc2V0IHsgSXRlbS5wYXJlbnRfaWQ7IF8gfSAtPlxuICAgICAgICBtYXRjaCBwYXJlbnRfaWQgd2l0aFxuICAgICAgICB8IE5vbmUgfCBTb21lIE5vbmUgLT4gc2V0XG4gICAgICAgIHwgU29tZSAoU29tZSBwaWQpIC0+IFN0cmluZy5TZXQuYWRkIHBpZCBzZXQpXG4gIGluXG4gIGxldCBwYXRoc19vZl9wYXJlbnRzIHBhcmVudHMgPVxuICAgIGxldCsgcmVzID1cbiAgICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkcyA9IFN0cmluZy5TZXQudG9fbGlzdCBwYXJlbnRzO1xuICAgICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgZmllbGRzID0gWyBQYXRoIF07XG4gICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICAgIGxpbWl0ID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9ieSA9IFtdO1xuICAgICAgICAgICAgcmVjdXJzaXZlID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAoKVxuICAgIGluXG4gICAgTGlzdC5maWx0ZXJfbWFwIHJlcy5pdGVtcyB+ZjooZnVuIHsgSXRlbS5pZDsgcGF0aDsgXyB9IC0+XG4gICAgICAgIE9wdGlvbi5tYXAgKGZ1biBwYXRoIC0+IChpZCwgcGF0aCkpIHBhdGgpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KyByZXN1bHQgPVxuICAgIExpc3QubWFwIHZpZXdzLml0ZW1zIH5mOihmdW4gKHsgSXRlbS5pZDsgXyB9IGFzIHZpZXcpIC0+XG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCogcGFyZW50cyA9IHBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiB2aWV3IGluXG4gICAgICAgIGxldCsgcGF0aHMgPSBwYXRoc19vZl9wYXJlbnRzIHBhcmVudHMgaW5cbiAgICAgICAgKGlkLCBwYXRocykpXG4gICAgfD4gRnV0Lm9mX2xpc3RcbiAgaW5cbiAgUmVzdWx0LmZsYXR0ZW5fbCByZXN1bHRcblxubGV0IHZpZXdzX29mX3BhdGggKHZmb2xkZXJzIDogKHN0cmluZyAqIChzdHJpbmcgKiBzdHJpbmcpIGxpc3QpIGxpc3QpIHBhdGggPVxuICAoKiBXZSBsb29rIGF0IHRoZSBwcmVmaXggb2YgYSBwYXRoIHRvIGRldGVybWluZSB3aGljaCB2aXJ0dWFsX2ZvbGRlciAoYW5kIHRodXNcbiAgICAgdmlldykgaXQncyBhIHBhcnQgb2YuICopXG4gIExpc3QuZmlsdGVyX21hcCB2Zm9sZGVycyB+ZjooZnVuICh2aWV3X2lkLCBsb2NhdGlvbnMpIC0+XG4gICAgICBpZiBMaXN0LmV4aXN0cyBsb2NhdGlvbnMgfmY6KGZ1biAoXywgcHJlKSAtPiBTdHJpbmcucHJlZml4IH5wcmUgcGF0aCkgdGhlblxuICAgICAgICBTb21lIHZpZXdfaWRcbiAgICAgIGVsc2UgTm9uZSlcblxubGV0IHN5bmMgPyhyZXBvcnQgPSBmdW4gXyAtPiAoKSkgfihzb3VyY2UgOiBTb3VyY2UuY29ubmV4aW9uKSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgbWFrZV9wbGFjZWhvbGRlcnMgZmlyc3QgbGFzdCA9XG4gICAgKCogdG9kbzogZXJyb3IgaGFuZGxpbmcgKilcbiAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICBpblxuICAgIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICAgIGZvciBpID0gZmlyc3QgdG8gbGFzdCBkb1xuICAgICAgaWdub3JlIEBAIE9JLnB1dCB7IGlkID0gaTsgaXRlbSA9IE5vbmUgfSBzdG9yZVxuICAgIGRvbmVcbiAgaW5cbiAgbGV0IGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3QgbGFzdCA9XG4gICAgbGV0IG9wZW4gU291cmNlIGluXG4gICAgbGV0KiB2aWV3cyA9IHVwZGF0ZV92aWV3cyBzb3VyY2UgaWRiIGluXG4gICAgbGV0KiB2Zm9sZGVycyA9IGRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aWV3cyBzb3VyY2Ugdmlld3MgaW5cbiAgICBsZXQgKCkgPSBDb25zb2xlLmluZm8gWyBcIkZldGNoaW5nIGl0ZW1zXCI7IGZpcnN0OyBcInRvXCI7IGxhc3Q7IFwiOlwiIF0gaW5cbiAgICBsZXQgZmV0Y2hfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgdG90YWwgPSBsYXN0IC0gZmlyc3QgKyAxIGluXG4gICAgbGV0IHJlYyBlbnF1ZXVlIH5zdGFydF9pbmRleCB0b2RvID1cbiAgICAgIGlmIHRvZG8gPiAwIHRoZW4gKFxuICAgICAgICBsZXQgbGltaXQgPSBtaW4gdG9kbyBjaHVua19zaXplIGluXG4gICAgICAgIGxldCByZXEgPVxuICAgICAgICAgIEFwaS5JdGVtcy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkgKilcbiAgICAgICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgICBmaWVsZHMgPSBbIFBhcmVudElkOyBQYXRoIF07XG4gICAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcztcbiAgICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBTb21lIHN0YXJ0X2luZGV4O1xuICAgICAgICAgICAgICBsaW1pdCA9IFNvbWUgbGltaXQ7XG4gICAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBTb21lIEFzY2VuZGluZztcbiAgICAgICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICAgICAgcmVjdXJzaXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgaW5cbiAgICAgICAgUXVldWUuYWRkIHJlcSBmZXRjaF9xdWV1ZTtcbiAgICAgICAgZW5xdWV1ZSB+c3RhcnRfaW5kZXg6KHN0YXJ0X2luZGV4ICsgbGltaXQpICh0b2RvIC0gbGltaXQpKVxuICAgIGluXG4gICAgZW5xdWV1ZSB+c3RhcnRfaW5kZXg6Zmlyc3QgdG90YWw7XG4gICAgbGV0IHRvdGFsX3F1ZXJpZXMgPSBRdWV1ZS5sZW5ndGggZmV0Y2hfcXVldWUgaW5cbiAgICBsZXQgcmVjIHJ1bl9xdWV1ZSA/KHRocmVhZHMgPSAxKSBxID1cbiAgICAgIGFzc2VydCAodGhyZWFkcyA+IDApO1xuICAgICAgbGV0IHJlYyB0YWtlX24gYWNjIG4gPVxuICAgICAgICBpZiBuID0gMCB0aGVuIExpc3QucmV2IGFjY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgbWF0Y2ggUXVldWUudGFrZV9vcHQgcSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgICAgIHwgU29tZSBlbHQgLT4gdGFrZV9uIChlbHQgOjogYWNjKSAobiAtIDEpXG4gICAgICBpblxuICAgICAgbGV0IGYgcmVxID1cbiAgICAgICAgbGV0KyB7IEFwaS5JdGVtcy5zdGFydF9pbmRleDsgaXRlbXM7IF8gfSA9XG4gICAgICAgICAgcXVlcnkgc291cmNlIChtb2R1bGUgQXBpLkl0ZW1zKSByZXEgKClcbiAgICAgICAgaW5cbiAgICAgICAgbGV0ICgpID1cbiAgICAgICAgICByZXBvcnRcbiAgICAgICAgICBAQCBTb21lXG4gICAgICAgICAgICAgICB7IHRvdGFsID0gdG90YWxfcXVlcmllczsgcmVtYWluaW5nID0gUXVldWUubGVuZ3RoIGZldGNoX3F1ZXVlIH1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGlkYl9wdXQgfnN0YXJ0X2luZGV4IGl0ZW1zID1cbiAgICAgICAgICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICAgICAgICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICAgICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpOyAobW9kdWxlIEkpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHNfbGlzdCA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICAgICAgICAgIGxldCBzX2l0ZW1zID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgICAgICBMaXN0Lml0ZXJpIGl0ZW1zIH5mOihmdW4gaW5kZXggKHsgQXBpLkl0ZW0uaWQ7IHBhdGg7IF8gfSBhcyBpdGVtKSAtPlxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSBzdGFydF9pbmRleCArIGluZGV4IGluXG4gICAgICAgICAgICAgIGxldCBwYXRoID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OlwiXCIgcGF0aCBpblxuICAgICAgICAgICAgICBsZXQgdmlld3MgPSB2aWV3c19vZl9wYXRoIHZmb2xkZXJzIHBhdGggaW5cbiAgICAgICAgICAgICAgbGV0IHNvcnRfbmFtZSA9IE9wdGlvbi52YWx1ZSBpdGVtLnNvcnRfbmFtZSB+ZGVmYXVsdDppdGVtLm5hbWUgaW5cbiAgICAgICAgICAgICAgaWdub3JlIChPSS5wdXQgeyBpZCA9IGluZGV4OyBpdGVtID0gU29tZSBpZCB9IHNfbGlzdCk7XG4gICAgICAgICAgICAgIGlnbm9yZVxuICAgICAgICAgICAgICAgIChJLnB1dFxuICAgICAgICAgICAgICAgICAgIHsgc29ydHMgPSB7IGRhdGVfYWRkZWQgPSBpbmRleDsgdmlld3M7IHNvcnRfbmFtZSB9OyBpdGVtIH1cbiAgICAgICAgICAgICAgICAgICBzX2l0ZW1zKSlcbiAgICAgICAgaW5cbiAgICAgICAgaWRiX3B1dCB+c3RhcnRfaW5kZXggaXRlbXNcbiAgICAgIGluXG4gICAgICBsZXQgcmVxcyA9IHRha2VfbiBbXSB0aHJlYWRzIGluXG4gICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICBsZXQqIHJlcXMgPSBGdXQub2ZfbGlzdCAoTGlzdC5tYXAgfmYgcmVxcykgaW5cbiAgICAgIGlmIExpc3QuaXNfZW1wdHkgcmVxcyB0aGVuIEZ1dC5vayAoKSBlbHNlIHJ1bl9xdWV1ZSBxXG4gICAgaW5cbiAgICBydW5fcXVldWUgZmV0Y2hfcXVldWVcbiAgaW5cbiAgZnVuY3Rpb25cbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBtYWtlX3BsYWNlaG9sZGVycyBmaXJzdF9taXNzaW5nX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgIGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3RfdW5mZXRjaGVkX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9IC0+XG4gICAgICBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0X3VuZmV0Y2hlZF9rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgfCBJbmNvbnNpc3RlbnQgLT4gRnV0Lm9rICgpXG4gIHwgXyAtPiBGdXQub2sgKClcblxubGV0IGNoZWNrX2FuZF9zeW5jID9yZXBvcnQgfnNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQqIHN0YXR1cyA9IGNoZWNrX3N0YXR1cyB+c291cmNlIGlkYiBpblxuICBsZXQgaW5pdGlhbCA9IHsgaW5pdGlhbF9yZXBvcnQgd2l0aCBzdGF0dXMgfSBpblxuICBsZXQgcmVwb3J0JyA9XG4gICAgT3B0aW9uLm1hcFxuICAgICAgKGZ1biByZXBvcnQgLT5cbiAgICAgICAgbGV0ICgpID0gKCogU2VuZCBhIGZpcnN0IHJlcG9ydCAqKSByZXBvcnQgaW5pdGlhbCBpblxuICAgICAgICBmdW4gc3luY19wcm9ncmVzcyAtPiByZXBvcnQgeyBpbml0aWFsIHdpdGggc3luY19wcm9ncmVzcyB9KVxuICAgICAgcmVwb3J0XG4gIGluXG4gIGxldCsgKCkgPSBzeW5jID9yZXBvcnQ6cmVwb3J0JyB+c291cmNlIGlkYiBzdGF0dXMgaW5cbiAgT3B0aW9uLml0ZXJcbiAgICAoZnVuIHJlcG9ydCAtPiByZXBvcnQgeyBzdGF0dXMgPSBJbl9zeW5jOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9KVxuICAgIHJlcG9ydFxuIiwidHlwZSBsYW5nJyA9IEZyIHwgRW5cblxubW9kdWxlIENvbmZpZyA6IEJycl9sd2RfdWkuVHJhbnNsYXRlZC5Db25maWcgd2l0aCB0eXBlIGxhbmcgPSBsYW5nJyA9IHN0cnVjdFxuICB0eXBlIGxhbmcgPSBsYW5nJ1xuXG4gIGxldCBzdHJpbmdzID1cbiAgICBbXG4gICAgICAoKEZyLCBcImNsaWNrXCIpLCBcIkNsaXF1ZXogc3VyIGxlIGJvdXRvbiAhXCIpO1xuICAgICAgKChFbiwgXCJjbGlja1wiKSwgXCJDbGljayBvbiB0aGUgQnV0dG9uICFcIik7XG4gICAgXVxuXG4gIGxldCBhY3RpdmUgPSBMd2QudmFyIEZyXG5cbiAgbGV0IGdldCBsYW5nIHN0cmluZyA9XG4gICAgTGlzdC5hc3NvY19vcHQgKGxhbmcsIHN0cmluZykgc3RyaW5ncyB8PiBPcHRpb24udmFsdWUgfmRlZmF1bHQ6c3RyaW5nXG5lbmRcblxubGV0IHNldCwgX3MgPSBCcnJfbHdkX3VpLlRyYW5zbGF0ZWQubWFrZSAobW9kdWxlIENvbmZpZylcbmxldCBfcyBzIGYgPSBMd2QubWFwIChfcyBzKSB+ZlxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyXG5cbmluY2x1ZGUgRGIuV29ya2VyX2FwaS5TdGFydF9jbGllbnQgKHN0cnVjdFxuICBsZXQgdXJsID0gXCIuL2RiX3dvcmtlci5iYy5qc1wiXG5lbmQpXG5cbmxldCBzZXJ2ZXJzX3N0YXR1cyA9XG4gIGxldCB2YXIgPSBMd2QudmFyIChcIlwiLCBEYi5TeW5jLmluaXRpYWxfcmVwb3J0KSBpblxuICBsZXQgXyA9XG4gICAgbGlzdGVuIFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSB+ZjooZnVuIChpZCwgcmVwb3J0KSAtPlxuICAgICAgICBDb25zb2xlLmxvZ1xuICAgICAgICAgIFsgRm9ybWF0LmFzcHJpbnRmIFwiU2VydmVyICVzOiAlYVwiIGlkIERiLlN5bmMucHBfcmVwb3J0IHJlcG9ydCBdO1xuICAgICAgICBMd2Quc2V0IHZhciAoaWQsIHJlcG9ydCkpXG4gIGluXG4gIHZhclxuXG5sZXQgdXBkYXRlID8oZXEgPSBFcXVhbC5wb2x5KSB2YXIgbmV4dCA9XG4gIGxldCBjdXJyZW50ID0gTHdkLnBlZWsgdmFyIGluXG4gIGlmIG5vdCAoZXEgY3VycmVudCBuZXh0KSB0aGVuIEx3ZC5zZXQgdmFyIG5leHRcblxubGV0IGdldF92aWV3X2l0ZW1fY291bnQgPVxuICBsZXQgbWVtbyA6IChWaWV3LnJlcSwgaW50IEx3ZC52YXIpIEhhc2h0YmwudCA9XG4gICAgKCogdG9kbyBtZW1vcnkgbGVhayAqKSBIYXNodGJsLmNyZWF0ZSA2NFxuICBpblxuICBmdW4gdiAtPlxuICAgIGxldCBpdGVtX2NvdW50ID0gSGFzaHRibC5nZXRfb3JfYWRkIG1lbW8gfms6diB+ZjooZnVuIF8gLT4gTHdkLnZhciAwKSBpblxuICAgIEZ1dC5hd2FpdCAocXVlcnkgKENyZWF0ZV92aWV3IHYpKSAoZnVuY3Rpb25cbiAgICAgIHwgT2sgdiAtPlxuICAgICAgICAgIENvbnNvbGUuZGVidWdcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgXCJJdGVtIGNvdW50OlwiO1xuICAgICAgICAgICAgICB2LlZpZXcuaXRlbV9jb3VudDtcbiAgICAgICAgICAgICAgXCJTdGFydCBvZmZzZXQ6XCI7XG4gICAgICAgICAgICAgIHYuVmlldy5zdGFydF9vZmZzZXQ7XG4gICAgICAgICAgICBdO1xuICAgICAgICAgIHVwZGF0ZSBpdGVtX2NvdW50IHYuaXRlbV9jb3VudFxuICAgICAgfCBlcnJvciAtPlxuICAgICAgICAgIENvbnNvbGUuZGVidWcgWyBcIkVSUk9SXCI7IGVycm9yIF07XG4gICAgICAgICAgdXBkYXRlIGl0ZW1fY291bnQgMCk7XG4gICAgTHdkLmdldCBpdGVtX2NvdW50XG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcblxudHlwZSBzZXJ2ZXIgPSB7XG4gIGNvbm5leGlvbiA6IERTLmNvbm5leGlvbjtcbiAgc3RhdHVzIDogRGIuU3luYy5yZXBvcnQgTHdkLnZhcjtcbiAgcmVmcmVzaCA6IHVuaXQgTHdkLnZhcjtcbn1cblxubGV0IGNvbm5leGlvbnMgOiAoc3RyaW5nICogRFMuY29ubmV4aW9uKSBMd2Rfc2VxLnQgTHdkLnZhciA9XG4gIEJycl9sd2RfdWkuUGVyc2lzdGVudC52YXIgfmtleTpcInVpX3NlcnZlcnNcIiBMd2Rfc2VxLmVtcHR5XG5cbmxldCBjb25uZWN0IChzZXJ2ZXJfaWQsIHsgY29ubmV4aW9uOyBzdGF0dXM7IHJlZnJlc2ggfSkgPVxuICBsZXQgXyA9XG4gICAgV29ya2VyX2NsaWVudC5saXN0ZW4gU2VydmVyc19zdGF0dXNfdXBkYXRlIH5mOihmdW4gKGlkLCByZXBvcnQpIC0+XG4gICAgICAgICgqIFRPRE86IHN1YnNjcmliZSB0byBhIHNwZWNpZmljIHNlcnZlcidzIHVwZGF0ZXMgKilcbiAgICAgICAgbGV0IHByZXZpb3VzX3N0YXR1cyA9IEx3ZC5wZWVrIHN0YXR1cyBpblxuICAgICAgICBpZiBTdHJpbmcuZXF1YWwgc2VydmVyX2lkIGlkIHRoZW4gKFxuICAgICAgICAgIEx3ZC5zZXQgc3RhdHVzIHJlcG9ydDtcbiAgICAgICAgICBtYXRjaCAocHJldmlvdXNfc3RhdHVzLnN5bmNfcHJvZ3Jlc3MsIHJlcG9ydC5zeW5jX3Byb2dyZXNzKSB3aXRoXG4gICAgICAgICAgfCBTb21lIHsgcmVtYWluaW5nOyBfIH0sIFNvbWUgeyByZW1haW5pbmcgPSByZW1haW5pbmcnOyBfIH1cbiAgICAgICAgICAgIHdoZW4gcmVtYWluaW5nIDw+IHJlbWFpbmluZycgLT5cbiAgICAgICAgICAgICAgTHdkLnNldCByZWZyZXNoICgpXG4gICAgICAgICAgfCBTb21lIHsgcmVtYWluaW5nOyBfIH0sIE5vbmUgLT4gTHdkLnNldCByZWZyZXNoICgpXG4gICAgICAgICAgfCBfIC0+ICgpKSlcbiAgaW5cbiAgaWdub3JlIChXb3JrZXJfY2xpZW50LnF1ZXJ5IEBAIEFkZF9zZXJ2ZXJzIFsgKHNlcnZlcl9pZCwgY29ubmV4aW9uKSBdKVxuXG5sZXQgc2VydmVyc193aXRoX3N0YXR1cyA9XG4gIEx3ZF9zZXEubWFwXG4gICAgKGZ1biAoaWQsIGNvbm5leGlvbikgLT5cbiAgICAgIGxldCBzdGF0dXMgPSBMd2QudmFyIERiLlN5bmMuaW5pdGlhbF9yZXBvcnQgaW5cbiAgICAgIGxldCByZWZyZXNoID0gTHdkLnZhciAoKSBpblxuICAgICAgbGV0IHNlcnZlciA9IChpZCwgeyBjb25uZXhpb247IHN0YXR1czsgcmVmcmVzaCB9KSBpblxuICAgICAgY29ubmVjdCBzZXJ2ZXI7XG4gICAgICBzZXJ2ZXIpXG4gICAgKEx3ZC5nZXQgY29ubmV4aW9ucylcblxubGV0IG5ld19jb25uZXhpb24gfmJhc2VfdXJsIH51c2VybmFtZSB+cGFzc3dvcmQgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIGNvbm5leGlvbiA9IERTLmNvbm5lY3QgeyBiYXNlX3VybDsgdXNlcm5hbWU7IHBhc3N3b3JkIH0gaW5cbiAgbGV0IHNlcnZlcl9pZCA9IGNvbm5leGlvbi5hdXRoX3Jlc3BvbnNlLnNlcnZlcl9pZCBpblxuICAoKiBUT0RPIENIRUNLIFNFUlZFUiBJRCAqKVxuICBMd2QudXBkYXRlXG4gICAgKGZ1biBzZXJ2ZXJzIC0+IEx3ZF9zZXEuKGNvbmNhdCBzZXJ2ZXJzIChlbGVtZW50IChzZXJ2ZXJfaWQsIGNvbm5leGlvbikpKSlcbiAgICBjb25uZXhpb25zXG5cbm1vZHVsZSBDb25uZWN0X2Zvcm0gPSBzdHJ1Y3RcbiAgb3BlbiBCcnJfbHdkX3VpLkZvcm1zLkZvcm1cblxuICB0eXBlIHQgPSB7XG4gICAgdXJsIDogc3RyaW5nIEZpZWxkLnZhbGlkYXRpb247XG4gICAgdXNlcm5hbWUgOiBzdHJpbmcgRmllbGQudmFsaWRhdGlvbjtcbiAgICBwYXNzd29yZCA6IHN0cmluZyBGaWVsZC52YWxpZGF0aW9uO1xuICB9XG5cbiAgbGV0IGRlZmF1bHQgPSB7IHVybCA9IEVtcHR5OyB1c2VybmFtZSA9IEVtcHR5OyBwYXNzd29yZCA9IEVtcHR5IH1cblxuICBsZXQgZmllbGRzID1cbiAgICBsZXQgdXJsX2ZpZWxkID1cbiAgICAgIGZpZWxkXG4gICAgICAgIChMd2QucHVyZVxuICAgICAgICBAQCBGaWVsZC50ZXh0X2lucHV0IH5yZXF1aXJlZDp0cnVlXG4gICAgICAgICAgICAgKFNvbWUgXCJodHRwczovL2RlbW8uamVsbHlmaW4ub3JnL3N0YWJsZVwiKSlcbiAgICAgICAgKGZ1biB0IHYgLT4geyB0IHdpdGggdXJsID0gdiB9KVxuICAgIGluXG4gICAgbGV0IHVzZXJuYW1lX2ZpZWxkID1cbiAgICAgIGZpZWxkXG4gICAgICAgIChMd2QucHVyZSBAQCBGaWVsZC50ZXh0X2lucHV0IH5yZXF1aXJlZDp0cnVlIChTb21lIFwiZGVtb1wiKSlcbiAgICAgICAgKGZ1biB0IHYgLT4geyB0IHdpdGggdXNlcm5hbWUgPSB2IH0pXG4gICAgaW5cbiAgICBsZXQgcGFzc3dvcmRfZmllbGQgPVxuICAgICAgZmllbGRcbiAgICAgICAgKEx3ZC5wdXJlIEBAIEZpZWxkLnBhc3N3b3JkX2lucHV0IH5yZXF1aXJlZDpmYWxzZSBOb25lKVxuICAgICAgICAoZnVuIHQgdiAtPiB7IHQgd2l0aCBwYXNzd29yZCA9IHYgfSlcbiAgICBpblxuICAgIGxldCBzdWJtaXQgPVxuICAgICAgZmllbGQgKEx3ZC5wdXJlIEBAIEZpZWxkLnN1Ym1pdCAoYFAgXCJDb25uZWN0XCIpKSAoZnVuIHQgX3YgLT4gdClcbiAgICBpblxuICAgIEx3ZC5yZXR1cm5cbiAgICAgIChMd2Rfc2VxLm9mX2xpc3QgWyB1cmxfZmllbGQ7IHVzZXJuYW1lX2ZpZWxkOyBwYXNzd29yZF9maWVsZDsgc3VibWl0IF0pXG5lbmRcblxubGV0IHVpX2Zvcm0gKCkgPVxuICBsZXQgb3BlbiBCcnJfbHdkX3VpLkZvcm1zLkZvcm0gaW5cbiAgY3JlYXRlXG4gICAgKG1vZHVsZSBDb25uZWN0X2Zvcm0pXG4gICAgKGZ1biB0IC0+XG4gICAgICBDb25zb2xlLmxvZyBbIFwiRm9ybSBzdWJtaXR0ZWQ6XCI7IHQgXTtcbiAgICAgIG1hdGNoIHQgd2l0aFxuICAgICAgKCogRklYTUU6IHZhbGlkYXRpb24gYWxyZWFkeSBoYXBwZW5lZCwgaXQncyByZWR1bmRhbnQgdG8gaGF2ZSB0byBtYXRjaCAqKVxuICAgICAgfCB7IHVybCA9IE9rIHVybDsgdXNlcm5hbWUgPSBPayB1c2VybmFtZTsgcGFzc3dvcmQgPSBPayBwYXNzd29yZCB9IC0+XG4gICAgICAgICAgQ29uc29sZS5sb2cgWyBcIkZvcm0gc3VibWl0dGVkOlwiOyB1cmw7IHVzZXJuYW1lIF07XG4gICAgICAgICAgaWdub3JlIEBAIG5ld19jb25uZXhpb24gfmJhc2VfdXJsOnVybCB+dXNlcm5hbWUgfnBhc3N3b3JkXG4gICAgICB8IHsgdXJsID0gT2sgdXJsOyB1c2VybmFtZSA9IE9rIHVzZXJuYW1lOyBfIH0gLT5cbiAgICAgICAgICBDb25zb2xlLmxvZyBbIFwiRm9ybSBzdWJtaXR0ZWQ6XCI7IHVybDsgdXNlcm5hbWUgXTtcbiAgICAgICAgICBpZ25vcmUgQEAgbmV3X2Nvbm5leGlvbiB+YmFzZV91cmw6dXJsIH51c2VybmFtZSB+cGFzc3dvcmQ6XCJcIlxuICAgICAgfCBfIC0+ICgpKVxuXG5sZXQgdWlfc3RhdHVzIHNlcnZlciA9XG4gIGxldCBzdGF0dXMgPVxuICAgIEx3ZC5tYXAgKEx3ZC5nZXQgc2VydmVyLnN0YXR1cykgfmY6KGZ1biB7IHN0YXR1czsgc3luY19wcm9ncmVzcyB9IC0+XG4gICAgICAgIG1hdGNoIChzdGF0dXMsIHN5bmNfcHJvZ3Jlc3MpIHdpdGhcbiAgICAgICAgfCBJbl9zeW5jLCBOb25lIC0+IEVsLnR4dCcgXCJTeW5jaHJvbml6ZWRcIlxuICAgICAgICB8IF8sIFNvbWUgeyBEYi5TeW5jLnRvdGFsOyByZW1haW5pbmcgfSAtPlxuICAgICAgICAgICAgRWwudHh0J1xuICAgICAgICAgICAgQEAgUHJpbnRmLnNwcmludGYgXCJTeW5jIGluIHByb2dyZXNzOiAlaS8laVwiICh0b3RhbCAtIHJlbWFpbmluZylcbiAgICAgICAgICAgICAgICAgdG90YWxcbiAgICAgICAgfCBfIC0+IEVsLnR4dCcgXCJEZXN5bmNocm9uaXplZFwiKVxuICBpblxuICBzdGF0dXNcblxubGV0IGZ1dF90b19sd2QgfmluaXQgZiA9XG4gIGxldCB2ID0gTHdkLnZhciBpbml0IGluXG4gIGxldCAoKSA9IEZ1dC5hd2FpdCBmIChMd2Quc2V0IHYpIGluXG4gIEx3ZC5nZXQgdlxuXG5sZXQgc2VxX3NoYXJlIH5jbXAgfnByZXYgbmV4dCA9XG4gIGxldCByZWMgYXV4IHByZXYgbmV4dCA9XG4gICAgbWF0Y2ggKEx3ZF9zZXEudmlldyBwcmV2LCBMd2Rfc2VxLnZpZXcgbmV4dCkgd2l0aFxuICAgIHwgRW1wdHksIEVtcHR5IC0+IChwcmV2LCB0cnVlKVxuICAgIHwgRWxlbWVudCBpLCBFbGVtZW50IGknIHdoZW4gY21wIGkgaScgLT4gKHByZXYsIHRydWUpXG4gICAgfCBDb25jYXQgKGwsIHIpLCBDb25jYXQgKGwnLCByJykgLT5cbiAgICAgICAgbGV0IGwsIGxfc2FtZSA9IGF1eCBsIGwnIGluXG4gICAgICAgIGxldCByLCByX3NhbWUgPSBhdXggciByJyBpblxuICAgICAgICBpZiBsX3NhbWUgJiYgcl9zYW1lIHRoZW4gKHByZXYsIHRydWUpIGVsc2UgKEx3ZF9zZXEuY29uY2F0IGwgciwgZmFsc2UpXG4gICAgfCBfLCBfIC0+IChuZXh0LCBmYWxzZSlcbiAgaW5cbiAgZnN0IEBAIGF1eCBwcmV2IG5leHRcblxubGV0IHNlcnZlcnNfbGlicmFyaWVzID1cbiAgbGV0IHJlYyBsaWJfZGlmZiB+cHJldiBuZXh0ID1cbiAgICBsZXQgb3BlbiBEYi5TdG9yZXMuSXRlbXMgaW5cbiAgICBzZXFfc2hhcmUgfmNtcDooZnVuIGkgaScgLT4gU3RyaW5nLihpLml0ZW0uaWQgPSBpJy5pdGVtLmlkKSkgfnByZXYgbmV4dFxuICBpblxuICBMd2Rfc2VxLm1hcFxuICAgIChmdW4gKHNlcnZlcl9pZCwgeyByZWZyZXNoOyBfIH0pIC0+XG4gICAgICBDb25zb2xlLmxvZyBbIFwiTkVXIFJFRlwiIF07XG4gICAgICBsZXQgcHJldmlvdXNfdmFsdWUgPSByZWYgTm9uZSBpblxuICAgICAgbGV0IHYgPVxuICAgICAgICBMd2QuYmluZCAoTHdkLmdldCByZWZyZXNoKSB+ZjooZnVuICgpIC0+XG4gICAgICAgICAgICBXb3JrZXJfY2xpZW50LnF1ZXJ5IChHZXRfc2VydmVyX2xpYnJhcmllcyBzZXJ2ZXJfaWQpXG4gICAgICAgICAgICB8PiBGdXQubWFwIChSZXN1bHQuZ2V0X29yIH5kZWZhdWx0OltdKVxuICAgICAgICAgICAgfD4gRnV0Lm1hcCAoZnVuIGwgLT5cbiAgICAgICAgICAgICAgICAgICBDb25zb2xlLmxvZyBbIFwiR09UIEw9XCI7IGwgXTtcbiAgICAgICAgICAgICAgICAgICBsKVxuICAgICAgICAgICAgfD4gRnV0Lm1hcCBMd2Rfc2VxLm9mX2xpc3RcbiAgICAgICAgICAgICgqIEZJWE1FOiBUaGlzIGlzIGJhZDogd2UgY3JlYXRlIGEgbHdkIHZhciBlYWNoIHRpbWUgd2UgcmVmcmVzaFxuICAgICAgICAgICAgICAgYW5kIHRoaXEgdmFyIGhhZCBhbiBlbXB0eSBzZXEgdmFsdWUuIFRoaXMgY2F1c2VkIGZsaWNrZXJpbmdcbiAgICAgICAgICAgICAgIHdoZW4gc3luY2luZy4gSGF2aW5nIHRoZSBjb3JyZWN0IGluaXRpYWwgdmFsdWUgaXMgbm90IGEgbXVjaFxuICAgICAgICAgICAgICAgYmV0dGVyIG9wdGlvbiBzaW5jZSB0aGVyZSBhcmUgc3RpbGwgdG8gbHdkIHVwZGF0ZXMgaW5zdGVhZCBvZlxuICAgICAgICAgICAgICAgb25lLiBXZSBwcm9iYWJseSBuZWVkIHByb3BlciBwb2xsaW5nIGFuZCBhIHJvb3QuICopXG4gICAgICAgICAgICB8PiBmdXRfdG9fbHdkXG4gICAgICAgICAgICAgICAgIH5pbml0OihPcHRpb24udmFsdWUgfmRlZmF1bHQ6THdkX3NlcS5lbXB0eSAhcHJldmlvdXNfdmFsdWUpKVxuICAgICAgaW5cbiAgICAgIGxldCB2aWV3cyA9XG4gICAgICAgIEx3ZC5tYXBcbiAgICAgICAgICB+ZjooZnVuIHYgLT5cbiAgICAgICAgICAgIGxldCBuZXdfdmFsdWUgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OnZcbiAgICAgICAgICAgICAgICAoZnVuIHByZXYgLT4gbGliX2RpZmYgfnByZXYgdilcbiAgICAgICAgICAgICAgICAhcHJldmlvdXNfdmFsdWVcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBwcmV2aW91c192YWx1ZSA6PSBTb21lIG5ld192YWx1ZTtcbiAgICAgICAgICAgIG5ld192YWx1ZSlcbiAgICAgICAgICB2XG4gICAgICBpblxuICAgICAgKHNlcnZlcl9pZCwgdmlld3MpKVxuICAgIHNlcnZlcnNfd2l0aF9zdGF0dXNcblxubGV0IHVpICgpID1cbiAgbGV0IHN0YXR1c2VzID1cbiAgICBMd2Rfc2VxLm1hcCAoZnVuIChfLCBzZXJ2ZXIpIC0+IHVpX3N0YXR1cyBzZXJ2ZXIpIHNlcnZlcnNfd2l0aF9zdGF0dXNcbiAgaW5cbiAgbGV0IHVpX2Zvcm0gPVxuICAgIEx3ZC5tYXAgc2VydmVyc193aXRoX3N0YXR1cyB+ZjooZnVuIHMgLT5cbiAgICAgICAgbWF0Y2ggTHdkX3NlcS52aWV3IHMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IEx3ZF9zZXEuZWxlbWVudCBAQCBFbHdkLmRpdiBbIGBSICh1aV9mb3JtICgpKSBdXG4gICAgICAgIHwgXyAtPiBMd2Rfc2VxLmVtcHR5KVxuICBpblxuICBFbHdkLmRpdiBbIGBTIChMd2Rfc2VxLmxpZnQgdWlfZm9ybSk7IGBTIChMd2Rfc2VxLmxpZnQgc3RhdHVzZXMpIF1cbiIsIm9wZW4hIEltcG9ydFxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG50eXBlIHBsYXlzdGF0ZSA9IHtcbiAgcGxheWxpc3QgOiBEYi5WaWV3LnJhbmdlZCBvcHRpb24gTHdkLnZhcjtcbiAgY3VycmVudF9pbmRleCA6IGludCBMd2QudmFyO1xufVxuXG50eXBlIHQgPSBFbHdkLnQgTHdkLnRcblxubGV0IHBsYXlzdGF0ZSA9IHsgcGxheWxpc3QgPSBMd2QudmFyIE5vbmU7IGN1cnJlbnRfaW5kZXggPSBMd2QudmFyIDAgfVxuXG50eXBlIG5vd19wbGF5aW5nID0geyBpdGVtIDogRFMuQXBpLkl0ZW0udDsgdXJsIDogc3RyaW5nIH1cblxubGV0IG5vd19wbGF5aW5nID0gTHdkLnZhciBOb25lXG5cbigqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vamVsbHlmaW4vamVsbHlmaW4vYmxvYi80Nzg2OTAxYmI3OTZjM2U5MTJmMTNiNjg2NTcxZmRlOGQxNmY0OWM1L3Rlc3RzL0plbGx5ZmluLk1vZGVsLlRlc3RzL1Rlc3QlMjBEYXRhL0RldmljZVByb2ZpbGUtRmlyZWZveC5qc29uICopXG5cbigqKiBQbGF5YmFjayBpc3N1ZSB3aXRoIGFsYWMgZmlsZXMgKGFuZCBwcm9iYWJseSBhbGwgY29kZWNzIG5vbi1uYXRpdmVseVxuICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyKVxuICAgIC0gU29tZSBjbGllbnRzIChzb25peGQpIGdpdmUgdXAsIG1wdiBiYXNlZCBwbGF5ZXJzIHdvcmsuXG4gICAgLSBUaGUgb2ZmaWNpYWwgY2xpZW50IG1hbmFnZSB0byBwbGF5IHRoZSBmaWxlIGJ1dCBnaXZlcyBhIGJsb2IgdG8gdGhlIGF1ZGlvXG4gICAgICBwbGF5ZXIgaW5zdGVhZCBvZiBhIGhscyB1cmwgYXMgaXQgZG9lcyBmb3Igb3RoZXIgZmlsZXMuXG4gICAgLSBKZWxseWZpbiBzaG91bGQgdXNlIHRoZSBkZXZpY2UgaWQgYW5kIGFzc29jaWF0ZWQgY2FwYWJpbGl0aWVzIHRvXG4gICAgICBhdXRvbWF0aWNhbGx5IHRyYW5zY29kZSwgc2hvdWxkbid0IGl0ID9cblxuKilcbmxldCBhdWRpb191cmwgKHNlcnZlciA6IERTLmNvbm5leGlvbikgaXRlbV9pZCA9XG4gIFByaW50Zi5zcHJpbnRmXG4gICAgXCIlcy9BdWRpby8lcy91bml2ZXJzYWw/YXBpX2tleT0lcyZhdWRpb0NvZGVjPWFhYyZjb250YWluZXI9b3B1cyxtcDMsYWFjLG00YSxtNGIsZmxhYyx3YXYsb2dnJnRyYW5zY29kaW5nQ29udGFpbmVyPXRzJnRyYW5zY29kaW5nUHJvdG9jb2w9aGxzXCJcbiAgICBzZXJ2ZXIuYmFzZV91cmwgaXRlbV9pZCBzZXJ2ZXIuYXV0aF9yZXNwb25zZS5hY2Nlc3NfdG9rZW5cblxubW9kdWxlIFBsYXliYWNrX2NvbnRyb2xsZXIgKFAgOiBzaWdcbiAgdmFsIGZldGNoIDpcbiAgICBWaWV3LnJhbmdlZCAtPlxuICAgIGludCBhcnJheSAtPlxuICAgIChEYi5TdG9yZXMuSXRlbXMudCBvcHRpb24gYXJyYXksIERiLldvcmtlcl9hcGkuZXJyb3IpIEZ1dC5yZXN1bHRcbmVuZCkgPVxuc3RydWN0XG4gIGxldCBzZXRfcGxheV91cmwgcGxheWxpc3QgY3VycmVudF9pbmRleCA9XG4gICAgbWF0Y2ggcGxheWxpc3Qgd2l0aFxuICAgIHwgTm9uZSAtPiBGdXQub2sgKClcbiAgICB8IFNvbWUgcGxheWxpc3QgLT5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgbGV0KyBpdGVtID1cbiAgICAgICAgICBsZXQrIHJlc3VsdCA9IFAuZmV0Y2ggcGxheWxpc3QgW3wgY3VycmVudF9pbmRleCB8XSBpblxuICAgICAgICAgIG1hdGNoIHJlc3VsdCB3aXRoXG4gICAgICAgICAgfCBbfCBTb21lIHsgRGIuU3RvcmVzLkl0ZW1zLml0ZW07IF8gfSB8XSAtPlxuICAgICAgICAgICAgICBsZXQgeyBEUy5BcGkuSXRlbS5zZXJ2ZXJfaWQ7IGlkOyBhbGJ1bV9pZDsgbmFtZTsgXyB9ID0gaXRlbSBpblxuICAgICAgICAgICAgICBsZXQgc2VydmVycyA9IEx3ZF9zZXEudG9fbGlzdCAoTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zKSBpblxuICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID0gTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzIGluXG4gICAgICAgICAgICAgIGxldCB1cmwgPSBhdWRpb191cmwgY29ubmV4aW9uIGlkIGluXG4gICAgICAgICAgICAgIGxldCAoKSA9IENvbnNvbGUubG9nIFsgXCJOb3cgcGxheWluZzpcIjsgbmFtZTsgSnYub2Zfc3RyaW5nIHVybCBdIGluXG4gICAgICAgICAgICAgIGxldCAoKSA9XG4gICAgICAgICAgICAgICAgbGV0IG9wZW4gQnJyX2lvLk1lZGlhLlNlc3Npb24gaW5cbiAgICAgICAgICAgICAgICBsZXQgc2Vzc2lvbiA9IG9mX25hdmlnYXRvciBHLm5hdmlnYXRvciBpblxuICAgICAgICAgICAgICAgIGxldCBpbWFnZV9pZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDppZCBhbGJ1bV9pZCBpblxuICAgICAgICAgICAgICAgIGxldCBpbWdfc3JjID1cbiAgICAgICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICAgICAgICAgIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9NTAwJmZvcm1hdD1KcGdcIlxuICAgICAgICAgICAgICAgICAgICBjb25uZXhpb24uYmFzZV91cmwgaW1hZ2VfaWRcbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IG5hbWUgaW5cbiAgICAgICAgICAgICAgICBsZXQgYWxidW0gPSBcIlwiIGluXG4gICAgICAgICAgICAgICAgbGV0IGFydGlzdCA9IFwiXCIgaW5cbiAgICAgICAgICAgICAgICBsZXQgYXJ0d29yayA9XG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBNZWRpYV9tZXRhZGF0YS5zcmMgPSBpbWdfc3JjO1xuICAgICAgICAgICAgICAgICAgICAgIHNpemVzID0gXCI1MDB4NTAwXCI7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZScgPSBcImltYWdlL2pwZWdcIjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIHNldF9tZXRhZGF0YSBzZXNzaW9uIHsgdGl0bGU7IGFydGlzdDsgYWxidW07IGFydHdvcmsgfVxuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICB7IGl0ZW07IHVybCB9XG4gICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICBpblxuICAgICAgICBMd2Quc2V0IG5vd19wbGF5aW5nIChTb21lIGl0ZW0pXG5cbiAgbGV0IHJlc2V0X3BsYXlsaXN0IHBsYXlsaXN0ID1cbiAgICBpZ25vcmUgQEAgc2V0X3BsYXlfdXJsIChTb21lIHBsYXlsaXN0KSAwO1xuICAgIEx3ZC5zZXQgcGxheXN0YXRlLnBsYXlsaXN0IChTb21lIHBsYXlsaXN0KTtcbiAgICBMd2Quc2V0IHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IDBcblxuICBsZXQgbWFrZSAoKSA9XG4gICAgbGV0IGF1ZGlvX2VsdCA9XG4gICAgICBFbC5hdWRpb1xuICAgICAgICB+YXQ6XG4gICAgICAgICAgW1xuICAgICAgICAgICAgQXQudiAoSnN0ci52IFwiY29udHJvbHNcIikgKEpzdHIudiBcInRydWVcIik7XG4gICAgICAgICAgICBBdC52IChKc3RyLnYgXCJhdXRvcGxheVwiKSAoSnN0ci52IFwidHJ1ZVwiKTtcbiAgICAgICAgICAgIEF0LnYgKEpzdHIudiBcInByZWxvYWRcIikgKEpzdHIudiBcImF1dG9cIik7XG4gICAgICAgICAgXVxuICAgICAgICBbXVxuICAgIGluXG4gICAgbGV0IHNldF9zcmMgdXJsID0gRWwuc2V0X2F0IChKc3RyLnYgXCJzcmNcIikgKFNvbWUgKEpzdHIudiB1cmwpKSBhdWRpb19lbHQgaW5cbiAgICBsZXQgX2F1dG9fcGxheSA9XG4gICAgICAoKiBXZSBjYW5ub3QgcmVseSBvbiB0aGUgbWFpbiBbTHdkXSBvYnNlcnZlciBmb3IgcGxheWJhY2sgY29udHJvbCBiZWNhdXNlXG4gICAgICAgICBpdCBpcyB0aWVkIHRvIHRoZSBbcmVxdWVzdEFuaW1hdGlvbkZyYW1lc10gY2FsbGJhY2suIFRoaXMgcHJldmVudCB0aGVcbiAgICAgICAgIHBsYXllciB0byBzdGFydCBwbGF5aW5nIHRoZSBuZXh0IHNvbmcgaWYgdGhlIHRhYiBpcyBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICAgICopXG4gICAgICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIChMd2QuZ2V0IG5vd19wbGF5aW5nKSBpblxuICAgICAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+XG4gICAgICAgICAgbWF0Y2ggTHdkLnF1aWNrX3NhbXBsZSByb290IHdpdGhcbiAgICAgICAgICB8IFNvbWUgeyB1cmw7IF8gfSAtPiBzZXRfc3JjIHVybFxuICAgICAgICAgIHwgTm9uZSAtPiAoKSk7XG4gICAgICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG4gICAgaW5cbiAgICBsZXQgbmV4dCAoKSA9XG4gICAgICBsZXQgcGxheWxpc3QgPSBMd2QucGVlayBwbGF5c3RhdGUucGxheWxpc3QgaW5cbiAgICAgIGxldCBjdXJyZW50X2luZGV4ID0gTHdkLnBlZWsgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggaW5cbiAgICAgIGxldCBuZXh0X2luZGV4ID0gY3VycmVudF9pbmRleCArIDEgaW5cbiAgICAgIGlnbm9yZSBAQCBzZXRfcGxheV91cmwgcGxheWxpc3QgbmV4dF9pbmRleDtcbiAgICAgIEx3ZC5zZXQgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggbmV4dF9pbmRleFxuICAgIGluXG4gICAgbGV0IHByZXYgKCkgPVxuICAgICAgbGV0IHBsYXlsaXN0ID0gTHdkLnBlZWsgcGxheXN0YXRlLnBsYXlsaXN0IGluXG4gICAgICBsZXQgY3VycmVudF9pbmRleCA9IEx3ZC5wZWVrIHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IGluXG4gICAgICBsZXQgbmV4dF9pbmRleCA9IG1heCAwIChjdXJyZW50X2luZGV4IC0gMSkgaW5cbiAgICAgIGlnbm9yZSBAQCBzZXRfcGxheV91cmwgcGxheWxpc3QgbmV4dF9pbmRleDtcbiAgICAgIEx3ZC5zZXQgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggbmV4dF9pbmRleFxuICAgIGluXG4gICAgbGV0IHNldF9wb3NpdGlvbl9zdGF0ZSA9XG4gICAgICAoKiBFbmFibGUgY29udHJvbCBmcm9tIE9TICopXG4gICAgICBsZXQgb3BlbiBCcnJfaW8uTWVkaWEuU2Vzc2lvbiBpblxuICAgICAgbGV0IHNlc3Npb24gPSBvZl9uYXZpZ2F0b3IgRy5uYXZpZ2F0b3IgaW5cbiAgICAgIGxldCBzZXRfcG9zaXRpb25fc3RhdGUgKCkgPVxuICAgICAgICBsZXQgZHVyYXRpb24gPSBFbC5wcm9wIChFbC5Qcm9wLmZsb2F0IChKc3RyLnYgXCJkdXJhdGlvblwiKSkgYXVkaW9fZWx0IGluXG4gICAgICAgIGlmIG5vdCAoRmxvYXQuaXNfbmFuIGR1cmF0aW9uKSB0aGVuXG4gICAgICAgICAgbGV0IHBsYXliYWNrX3JhdGUgPVxuICAgICAgICAgICAgRWwucHJvcCAoRWwuUHJvcC5mbG9hdCAoSnN0ci52IFwicGxheWJhY2tSYXRlXCIpKSBhdWRpb19lbHRcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBwb3NpdGlvbiA9XG4gICAgICAgICAgICBFbC5wcm9wIChFbC5Qcm9wLmZsb2F0IChKc3RyLnYgXCJjdXJyZW50VGltZVwiKSkgYXVkaW9fZWx0XG4gICAgICAgICAgaW5cbiAgICAgICAgICBzZXRfcG9zaXRpb25fc3RhdGUgfmR1cmF0aW9uIH5wbGF5YmFja19yYXRlIH5wb3NpdGlvbiBzZXNzaW9uXG4gICAgICBpblxuICAgICAgc2V0X2FjdGlvbl9oYW5kbGVyIHNlc3Npb24gQWN0aW9uLm5leHRfdHJhY2sgbmV4dDtcbiAgICAgIHNldF9hY3Rpb25faGFuZGxlciBzZXNzaW9uIEFjdGlvbi5wcmV2aW91c190cmFjayBwcmV2O1xuICAgICAgc2V0X3Bvc2l0aW9uX3N0YXRlXG4gICAgaW5cbiAgICBsZXQgb25fZXJyb3IgZXYgPVxuICAgICAgRXYuc3RvcF9pbW1lZGlhdGVfcHJvcGFnYXRpb24gZXY7XG4gICAgICBFdi5wcmV2ZW50X2RlZmF1bHQgZXY7XG4gICAgICBDb25zb2xlLmxvZ1xuICAgICAgICBbXG4gICAgICAgICAgXCJBIHBsYXliYWNrIGVycm9yIGhhcHBlbmVkLiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGNvZGVjIFxcXG4gICAgICAgICAgIHVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLlwiO1xuICAgICAgICAgIGV2O1xuICAgICAgICBdO1xuICAgICAgbmV4dCAoKVxuICAgIGluXG4gICAgbGV0IG5leHQgXyA9IG5leHQgKCkgaW5cbiAgICBsZXQgKCkgPVxuICAgICAgbGV0IHRhcmdldCA9IEVsLmFzX3RhcmdldCBhdWRpb19lbHQgaW5cbiAgICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXYuZW5kZWQgbmV4dCB0YXJnZXQ7XG4gICAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2LmVycm9yIG9uX2Vycm9yIHRhcmdldDtcbiAgICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXYucGxheSAoZnVuIF8gLT4gc2V0X3Bvc2l0aW9uX3N0YXRlICgpKSB0YXJnZXRcbiAgICBpblxuICAgIGxldCBidG5fbmV4dCA9XG4gICAgICBCcnJfbHdkX3VpLkJ1dHRvbi52IH5ldjpbIGBQIChFbHdkLmhhbmRsZXIgRXYuY2xpY2sgbmV4dCkgXSAoYFAgXCJORVhUXCIpXG4gICAgaW5cbiAgICBsZXQgb3BlbiBCcnJfbHdkX3VpIGluXG4gICAgbGV0IG5vd19wbGF5aW5nID1cbiAgICAgIGxldCB0cmFja19jb3ZlciA9XG4gICAgICAgIGxldCBzdHlsZSA9XG4gICAgICAgICAgTHdkLm1hcCAoTHdkLmdldCBub3dfcGxheWluZykgfmY6KGZ1biBucCAtPlxuICAgICAgICAgICAgICBsZXQgc3JjID1cbiAgICAgICAgICAgICAgICBtYXRjaCBucCB3aXRoXG4gICAgICAgICAgICAgICAgfCBOb25lIC0+IFwidHJhY2sucG5nXCJcbiAgICAgICAgICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZDsgYWxidW1faWQ7IHNlcnZlcl9pZDsgXyB9OyBfIH0gLT5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlX2lkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmlkIGFsYnVtX2lkIGluXG4gICAgICAgICAgICAgICAgICAgIGxldCBzZXJ2ZXJzID1cbiAgICAgICAgICAgICAgICAgICAgICBMd2Rfc2VxLnRvX2xpc3QgKEx3ZC5wZWVrIFNlcnZlcnMuY29ubmV4aW9ucylcbiAgICAgICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5leGlvbiA6IERTLmNvbm5leGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzXG4gICAgICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgICAgICgqIHRvZG86IHRoaXMgaXMgZG9uZSBpbiBtdWx0aXBsZSBwbGFjZXMsIHdlIHNob3VsZCBmYWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBvdXQuICopXG4gICAgICAgICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmXG4gICAgICAgICAgICAgICAgICAgICAgXCIlcy9JdGVtcy8lcy9JbWFnZXMvUHJpbWFyeT93aWR0aD01MDAmZm9ybWF0PUpwZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uLmJhc2VfdXJsIGltYWdlX2lkXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCVTKVwiIHNyYylcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGF0ID1cbiAgICAgICAgICBBdHRycy4oXG4gICAgICAgICAgICBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwibm93LXBsYXlpbmctY292ZXJcIikgW11cbiAgICAgICAgICAgIHw+IGFkZCBBdC5OYW1lLnN0eWxlIChgUiBzdHlsZSkpXG4gICAgICAgIGluXG4gICAgICAgIGxldCBvbl9jbGljayA9XG4gICAgICAgICAgRWx3ZC5oYW5kbGVyIEV2LmNsaWNrIChmdW4gXyAtPlxuICAgICAgICAgICAgICAobWF0Y2ggTHdkLnBlZWsgQXBwX3N0YXRlLmFjdGl2ZV9sYXlvdXQgd2l0aFxuICAgICAgICAgICAgICB8IEtpb3NrIC0+IE1haW5cbiAgICAgICAgICAgICAgfCBNYWluIC0+IEtpb3NrKVxuICAgICAgICAgICAgICB8PiBMd2Quc2V0IEFwcF9zdGF0ZS5hY3RpdmVfbGF5b3V0KVxuICAgICAgICBpblxuICAgICAgICBFbHdkLmRpdiB+YXQgfmV2OlsgYFAgb25fY2xpY2sgXSBbXVxuICAgICAgaW5cbiAgICAgIGxldCB0cmFja19kZXRhaWxzID1cbiAgICAgICAgbGV0IGF0ID0gQXR0cnMuYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcIm5vdy1wbGF5aW5nLWRldGFpbHNcIikgW10gaW5cbiAgICAgICAgbGV0IHRpdGxlID1cbiAgICAgICAgICBsZXQgdHh0ID1cbiAgICAgICAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgbm93X3BsYXlpbmcpIH5mOihmdW5jdGlvblxuICAgICAgICAgICAgICB8IE5vbmUgLT4gRWwudHh0JyBcIk5vdGhpbmcgcGxheWluZ1wiXG4gICAgICAgICAgICAgIHwgU29tZSB7IGl0ZW0gPSB7IG5hbWU7IF8gfTsgXyB9IC0+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+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIGx6dlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW0xhenldOiBkZWZlcnJlZCBjb21wdXRhdGlvbnMgKilcblxuXG4oKlxuICAgV0FSTklORzogc29tZSBwdXJwbGUgbWFnaWMgaXMgZ29pbmcgb24gaGVyZS4gIERvIG5vdCB0YWtlIHRoaXMgZmlsZVxuICAgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcHJvZ3JhbSBpbiBPQ2FtbC5cbiopXG5cblxuKCogV2UgbWFrZSB1c2Ugb2YgdHdvIHNwZWNpYWwgdGFncyBwcm92aWRlZCBieSB0aGUgcnVudGltZTpcbiAgIFtsYXp5X3RhZ10gYW5kIFtmb3J3YXJkX3RhZ10uXG5cbiAgIEEgdmFsdWUgb2YgdHlwZSBbJ2EgTGF6eS50XSBjYW4gYmUgb25lIG9mIHRocmVlIHRoaW5nczpcbiAgIDEuIEEgYmxvY2sgb2Ygc2l6ZSAxIHdpdGggdGFnIFtsYXp5X3RhZ10uICBJdHMgZmllbGQgaXMgYSBjbG9zdXJlIG9mXG4gICAgICB0eXBlIFt1bml0IC0+ICdhXSB0aGF0IGNvbXB1dGVzIHRoZSB2YWx1ZS5cbiAgIDIuIEEgYmxvY2sgb2Ygc2l6ZSAxIHdpdGggdGFnIFtmb3J3YXJkX3RhZ10uICBJdHMgZmllbGQgaXMgdGhlIHZhbHVlXG4gICAgICBvZiB0eXBlIFsnYV0gdGhhdCB3YXMgY29tcHV0ZWQuXG4gICAzLiBBbnl0aGluZyBlbHNlIGV4Y2VwdCBhIGZsb2F0LiAgVGhpcyBoYXMgdHlwZSBbJ2FdIGFuZCBpcyB0aGUgdmFsdWVcbiAgICAgIHRoYXQgd2FzIGNvbXB1dGVkLlxuICAgRXhjZXB0aW9ucyBhcmUgc3RvcmVkIGluIGZvcm1hdCAoMSkuXG4gICBUaGUgR0Mgd2lsbCBtYWdpY2FsbHkgY2hhbmdlIHRoaW5ncyBmcm9tICgyKSB0byAoMykgYWNjb3JkaW5nIHRvIGl0c1xuICAgZmFuY3kuXG5cbiAgIElmIE9DYW1sIHdhcyBjb25maWd1cmVkIHdpdGggdGhlIC1mbGF0LWZsb2F0LWFycmF5IG9wdGlvbiAod2hpY2ggaXNcbiAgIGN1cnJlbnRseSB0aGUgZGVmYXVsdCksIHRoZSBmb2xsb3dpbmcgaXMgYWxzbyB0cnVlOlxuICAgV2UgY2Fubm90IHVzZSByZXByZXNlbnRhdGlvbiAoMykgZm9yIGEgW2Zsb2F0IExhenkudF0gYmVjYXVzZVxuICAgW2NhbWxfbWFrZV9hcnJheV0gYXNzdW1lcyB0aGF0IG9ubHkgYSBbZmxvYXRdIHZhbHVlIGNhbiBoYXZlIHRhZ1xuICAgW0RvdWJsZV90YWddLlxuXG4gICBXZSBoYXZlIHRvIHVzZSB0aGUgYnVpbHQtaW4gdHlwZSBjb25zdHJ1Y3RvciBbbGF6eV90XSB0b1xuICAgbGV0IHRoZSBjb21waWxlciBpbXBsZW1lbnQgdGhlIHNwZWNpYWwgdHlwaW5nIGFuZCBjb21waWxhdGlvblxuICAgcnVsZXMgZm9yIHRoZSBbbGF6eV0ga2V5d29yZC5cbiopXG5cbnR5cGUgJ2EgdCA9ICdhIENhbWxpbnRlcm5hbExhenkudFxuXG5leGNlcHRpb24gVW5kZWZpbmVkID0gQ2FtbGludGVybmFsTGF6eS5VbmRlZmluZWRcblxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogJ2EgLT4gJ2EgbGF6eV90ID0gXCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkXCJcblxuZXh0ZXJuYWwgZm9yY2UgOiAnYSB0IC0+ICdhID0gXCIlbGF6eV9mb3JjZVwiXG5cblxubGV0IGZvcmNlX3ZhbCA9IENhbWxpbnRlcm5hbExhenkuZm9yY2VfdmFsXG5cbmxldCBmcm9tX2Z1biAoZiA6IHVuaXQgLT4gJ2FyZykgPVxuICBsZXQgeCA9IE9iai5uZXdfYmxvY2sgT2JqLmxhenlfdGFnIDEgaW5cbiAgT2JqLnNldF9maWVsZCB4IDAgKE9iai5yZXByIGYpO1xuICAoT2JqLm9iaiB4IDogJ2FyZyB0KVxuXG5sZXQgZnJvbV92YWwgKHYgOiAnYXJnKSA9XG4gIGxldCB0ID0gT2JqLnRhZyAoT2JqLnJlcHIgdikgaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB8fCB0ID0gT2JqLmxhenlfdGFnIHx8IHQgPSBPYmouZG91YmxlX3RhZyB0aGVuIGJlZ2luXG4gICAgbWFrZV9mb3J3YXJkIHZcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICAoT2JqLm1hZ2ljIHYgOiAnYXJnIHQpXG4gIGVuZFxuXG5cbmxldCBpc192YWwgKGwgOiAnYXJnIHQpID0gT2JqLnRhZyAoT2JqLnJlcHIgbCkgPD4gT2JqLmxhenlfdGFnXG5cbmxldCBsYXp5X2Zyb21fZnVuID0gZnJvbV9mdW5cblxubGV0IGxhenlfZnJvbV92YWwgPSBmcm9tX3ZhbFxuXG5sZXQgbGF6eV9pc192YWwgPSBpc192YWxcblxuXG5sZXQgbWFwIGYgeCA9XG4gIGxhenkgKGYgKGZvcmNlIHgpKVxuXG5sZXQgbWFwX3ZhbCBmIHggPVxuICBpZiBpc192YWwgeFxuICB0aGVuIGxhenlfZnJvbV92YWwgKGYgKGZvcmNlIHgpKVxuICBlbHNlIGxhenkgKGYgKGZvcmNlIHgpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+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+IE1vcmUgKHYsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBzIEVuZClcbiAgZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISsnYSB0XG4gICAgdmFsIGVtcHR5OiAnYSB0XG4gICAgdmFsIGlzX2VtcHR5OiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgbWVtOiAga2V5IC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBhZGQ6IGtleSAtPiAnYSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgdXBkYXRlOiBrZXkgLT4gKCdhIG9wdGlvbiAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBzaW5nbGV0b246IGtleSAtPiAnYSAtPiAnYSB0XG4gICAgdmFsIHJlbW92ZToga2V5IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBtZXJnZTpcbiAgICAgICAgICAoa2V5IC0+ICdhIG9wdGlvbiAtPiAnYiBvcHRpb24gLT4gJ2Mgb3B0aW9uKSAtPiAnYSB0IC0+ICdiIHQgLT4gJ2MgdFxuICAgIHZhbCB1bmlvbjogKGtleSAtPiAnYSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGNvbXBhcmU6ICgnYSAtPiAnYSAtPiBpbnQpIC0+ICdhIHQgLT4gJ2EgdCAtPiBpbnRcbiAgICB2YWwgZXF1YWw6ICgnYSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGZvcl9hbGw6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGV4aXN0czogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgZmlsdGVyOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBmaWx0ZXJfbWFwOiAoa2V5IC0+ICdhIC0+ICdiIG9wdGlvbikgLT4gJ2EgdCAtPiAnYiB0XG4gICAgdmFsIHBhcnRpdGlvbjogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+ICdhIHQgKiAnYSB0XG4gICAgdmFsIGNhcmRpbmFsOiAnYSB0IC0+IGludFxuICAgIHZhbCBiaW5kaW5nczogJ2EgdCAtPiAoa2V5ICogJ2EpIGxpc3RcbiAgICB2YWwgbWluX2JpbmRpbmc6ICdhIHQgLT4gKGtleSAqICdhKVxuICAgIHZhbCBtaW5fYmluZGluZ19vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgbWF4X2JpbmRpbmc6ICdhIHQgLT4gKGtleSAqICdhKVxuICAgIHZhbCBtYXhfYmluZGluZ19vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgY2hvb3NlOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgY2hvb3NlX29wdDogJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBzcGxpdDoga2V5IC0+ICdhIHQgLT4gJ2EgdCAqICdhIG9wdGlvbiAqICdhIHRcbiAgICB2YWwgZmluZDoga2V5IC0+ICdhIHQgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6IGtleSAtPiAnYSB0IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4ga2V5ICogJ2FcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiBrZXkgKiAnYVxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgbWFwOiAoJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCBtYXBpOiAoa2V5IC0+ICdhIC0+ICdiKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3Jldl9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2Zyb20gOiBrZXkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID0gc3RydWN0XG5cbiAgICB0eXBlIGtleSA9IE9yZC50XG5cbiAgICB0eXBlICdhIHQgPVxuICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIG9mIHtsOidhIHQ7IHY6a2V5OyBkOidhOyByOidhIHQ7IGg6aW50fVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgbGV0IGNyZWF0ZSBsIHggZCByID1cbiAgICAgIGxldCBobCA9IGhlaWdodCBsIGFuZCBociA9IGhlaWdodCByIGluXG4gICAgICBOb2Rle2w7IHY9eDsgZDsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgbGV0IHNpbmdsZXRvbiB4IGQgPSBOb2Rle2w9RW1wdHk7IHY9eDsgZDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgbGV0IGJhbCBsIHggZCByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyBkPWxkOyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiBsZCAoY3JlYXRlIGxyIHggZCByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgZD1scmQ7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBsZCBscmwpIGxydiBscmQgKGNyZWF0ZSBscnIgeCBkIHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IGQ9cmQ7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB4IGQgcmwpIHJ2IHJkIHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyBkPXJsZDsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHggZCBybGwpIHJsdiBybGQgKGNyZWF0ZSBybHIgcnYgcmQgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdj14OyBkOyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgYWRkIHggZGF0YSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9kZXtsPUVtcHR5OyB2PXg7IGQ9ZGF0YTsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSBhcyBtIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBpZiBkID09IGRhdGEgdGhlbiBtIGVsc2UgTm9kZXtsOyB2PXg7IGQ9ZGF0YTsgcjsgaH1cbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGRhdGEgbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSBhZGQgeCBkYXRhIHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIGRcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGQwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZDAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGQwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZDAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIGRcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIG1pbl9iaW5kaW5nID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHY7IGR9IC0+ICh2LCBkKVxuICAgICAgfCBOb2RlIHtsfSAtPiBtaW5fYmluZGluZyBsXG5cbiAgICBsZXQgcmVjIG1pbl9iaW5kaW5nX29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgdjsgZH0gLT4gU29tZSAodiwgZClcbiAgICAgIHwgTm9kZSB7bH0tPiBtaW5fYmluZGluZ19vcHQgbFxuXG4gICAgbGV0IHJlYyBtYXhfYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHt2OyBkOyByPUVtcHR5fSAtPiAodiwgZClcbiAgICAgIHwgTm9kZSB7cn0gLT4gbWF4X2JpbmRpbmcgclxuXG4gICAgbGV0IHJlYyBtYXhfYmluZGluZ19vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGUge3Y7IGQ7IHI9RW1wdHl9IC0+IFNvbWUgKHYsIGQpXG4gICAgICB8IE5vZGUge3J9IC0+IG1heF9iaW5kaW5nX29wdCByXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLnJlbW92ZV9taW5fZWx0XCJcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiYWwgKHJlbW92ZV9taW5fYmluZGluZyBsKSB2IGQgclxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT5cbiAgICAgICAgICBsZXQgKHgsIGQpID0gbWluX2JpbmRpbmcgdDIgaW5cbiAgICAgICAgICBiYWwgdDEgeCBkIChyZW1vdmVfbWluX2JpbmRpbmcgdDIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCAoTm9kZSB7bDsgdjsgZDsgcn0gYXMgbSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gcmVtb3ZlIHggciBpbiBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyB1cGRhdGUgeCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBmIE5vbmUgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBFbXB0eVxuICAgICAgICAgIHwgU29tZSBkYXRhIC0+IE5vZGV7bD1FbXB0eTsgdj14OyBkPWRhdGE7IHI9RW1wdHk7IGg9MX1cbiAgICAgICAgICBlbmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gYXMgbSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBiZWdpblxuICAgICAgICAgICAgbWF0Y2ggZiAoU29tZSBkKSB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gbWVyZ2UgbCByXG4gICAgICAgICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgICAgICAgIGlmIGQgPT0gZGF0YSB0aGVuIG0gZWxzZSBOb2Rle2w7IHY9eDsgZD1kYXRhOyByOyBofVxuICAgICAgICAgIGVuZCBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IHVwZGF0ZSB4IGYgbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSB1cGRhdGUgeCBmIHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaXRlciBmIGw7IGYgdiBkOyBpdGVyIGYgclxuXG4gICAgbGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gLT5cbiAgICAgICAgICBsZXQgbCcgPSBtYXAgZiBsIGluXG4gICAgICAgICAgbGV0IGQnID0gZiBkIGluXG4gICAgICAgICAgbGV0IHInID0gbWFwIGYgciBpblxuICAgICAgICAgIE5vZGV7bD1sJzsgdjsgZD1kJzsgcj1yJzsgaH1cblxuICAgIGxldCByZWMgbWFwaSBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSAtPlxuICAgICAgICAgIGxldCBsJyA9IG1hcGkgZiBsIGluXG4gICAgICAgICAgbGV0IGQnID0gZiB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBtYXBpIGYgciBpblxuICAgICAgICAgIE5vZGV7bD1sJzsgdjsgZD1kJzsgcj1yJzsgaH1cblxuICAgIGxldCByZWMgZm9sZCBmIG0gYWNjdSA9XG4gICAgICBtYXRjaCBtIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGZvbGQgZiByIChmIHYgZCAoZm9sZCBmIGwgYWNjdSkpXG5cbiAgICBsZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHRydWVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gcCB2IGQgJiYgZm9yX2FsbCBwIGwgJiYgZm9yX2FsbCBwIHJcblxuICAgIGxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBwIHYgZCB8fCBleGlzdHMgcCBsIHx8IGV4aXN0cyBwIHJcblxuICAgICgqIEJld2FyZTogdGhvc2UgdHdvIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgYWRkZWQgayBpcyAqc3RyaWN0bHkqXG4gICAgICAgc21hbGxlciAob3IgYmlnZ2VyKSB0aGFuIGFsbCB0aGUgcHJlc2VudCBrZXlzIGluIHRoZSB0cmVlOyBpdFxuICAgICAgIGRvZXMgbm90IHRlc3QgZm9yIGVxdWFsaXR5IHdpdGggdGhlIGN1cnJlbnQgbWluIChvciBtYXgpIGtleS5cblxuICAgICAgIEluZGVlZCwgdGhleSBhcmUgb25seSB1c2VkIGR1cmluZyB0aGUgXCJqb2luXCIgb3BlcmF0aW9uIHdoaWNoXG4gICAgICAgcmVzcGVjdHMgdGhpcyBwcmVjb25kaXRpb24uXG4gICAgKilcblxuICAgIGxldCByZWMgYWRkX21pbl9iaW5kaW5nIGsgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiBrIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgYmFsIChhZGRfbWluX2JpbmRpbmcgayB4IGwpIHYgZCByXG5cbiAgICBsZXQgcmVjIGFkZF9tYXhfYmluZGluZyBrIHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24gayB4XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgIGJhbCBsIHYgZCAoYWRkX21heF9iaW5kaW5nIGsgeCByKVxuXG4gICAgKCogU2FtZSBhcyBjcmVhdGUgYW5kIGJhbCwgYnV0IG5vIGFzc3VtcHRpb25zIGFyZSBtYWRlIG9uIHRoZVxuICAgICAgIHJlbGF0aXZlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCByZWMgam9pbiBsIHYgZCByID1cbiAgICAgIG1hdGNoIChsLCByKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gYWRkX21pbl9iaW5kaW5nIHYgZCByXG4gICAgICB8IChfLCBFbXB0eSkgLT4gYWRkX21heF9iaW5kaW5nIHYgZCBsXG4gICAgICB8IChOb2Rle2w9bGw7IHY9bHY7IGQ9bGQ7IHI9bHI7IGg9bGh9LFxuICAgICAgICAgTm9kZXtsPXJsOyB2PXJ2OyBkPXJkOyByPXJyOyBoPXJofSkgLT5cbiAgICAgICAgICBpZiBsaCA+IHJoICsgMiB0aGVuIGJhbCBsbCBsdiBsZCAoam9pbiBsciB2IGQgcikgZWxzZVxuICAgICAgICAgIGlmIHJoID4gbGggKyAyIHRoZW4gYmFsIChqb2luIGwgdiBkIHJsKSBydiByZCByciBlbHNlXG4gICAgICAgICAgY3JlYXRlIGwgdiBkIHJcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBObyBhc3N1bXB0aW9uIG9uIHRoZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT5cbiAgICAgICAgICBsZXQgKHgsIGQpID0gbWluX2JpbmRpbmcgdDIgaW5cbiAgICAgICAgICBqb2luIHQxIHggZCAocmVtb3ZlX21pbl9iaW5kaW5nIHQyKVxuXG4gICAgbGV0IGNvbmNhdF9vcl9qb2luIHQxIHYgZCB0MiA9XG4gICAgICBtYXRjaCBkIHdpdGhcbiAgICAgIHwgU29tZSBkIC0+IGpvaW4gdDEgdiBkIHQyXG4gICAgICB8IE5vbmUgLT4gY29uY2F0IHQxIHQyXG5cbiAgICBsZXQgcmVjIHNwbGl0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIChFbXB0eSwgTm9uZSwgRW1wdHkpXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIChsLCBTb21lIGQsIHIpXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgKGxsLCBwcmVzLCBybCkgPSBzcGxpdCB4IGwgaW4gKGxsLCBwcmVzLCBqb2luIHJsIHYgZCByKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobHIsIHByZXMsIHJyKSA9IHNwbGl0IHggciBpbiAoam9pbiBsIHYgZCBsciwgcHJlcywgcnIpXG5cbiAgICBsZXQgcmVjIG1lcmdlIGYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIEVtcHR5KSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZSB7bD1sMTsgdj12MTsgZD1kMTsgcj1yMTsgaD1oMX0sIF8pIHdoZW4gaDEgPj0gaGVpZ2h0IHMyIC0+XG4gICAgICAgICAgbGV0IChsMiwgZDIsIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgY29uY2F0X29yX2pvaW4gKG1lcmdlIGYgbDEgbDIpIHYxIChmIHYxIChTb21lIGQxKSBkMikgKG1lcmdlIGYgcjEgcjIpXG4gICAgICB8IChfLCBOb2RlIHtsPWwyOyB2PXYyOyBkPWQyOyByPXIyfSkgLT5cbiAgICAgICAgICBsZXQgKGwxLCBkMSwgcjEpID0gc3BsaXQgdjIgczEgaW5cbiAgICAgICAgICBjb25jYXRfb3Jfam9pbiAobWVyZ2UgZiBsMSBsMikgdjIgKGYgdjIgZDEgKFNvbWUgZDIpKSAobWVyZ2UgZiByMSByMilcbiAgICAgIHwgXyAtPlxuICAgICAgICAgIGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHJlYyB1bmlvbiBmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgIHwgKEVtcHR5LCBzKSB8IChzLCBFbXB0eSkgLT4gc1xuICAgICAgfCAoTm9kZSB7bD1sMTsgdj12MTsgZD1kMTsgcj1yMTsgaD1oMX0sXG4gICAgICAgICBOb2RlIHtsPWwyOyB2PXYyOyBkPWQyOyByPXIyOyBoPWgyfSkgLT5cbiAgICAgICAgICBpZiBoMSA+PSBoMiB0aGVuXG4gICAgICAgICAgICBsZXQgKGwyLCBkMiwgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICAgIGxldCBsID0gdW5pb24gZiBsMSBsMiBhbmQgciA9IHVuaW9uIGYgcjEgcjIgaW5cbiAgICAgICAgICAgIG1hdGNoIGQyIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiBqb2luIGwgdjEgZDEgclxuICAgICAgICAgICAgfCBTb21lIGQyIC0+IGNvbmNhdF9vcl9qb2luIGwgdjEgKGYgdjEgZDEgZDIpIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGwxLCBkMSwgcjEpID0gc3BsaXQgdjIgczEgaW5cbiAgICAgICAgICAgIGxldCBsID0gdW5pb24gZiBsMSBsMiBhbmQgciA9IHVuaW9uIGYgcjEgcjIgaW5cbiAgICAgICAgICAgIG1hdGNoIGQxIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiBqb2luIGwgdjIgZDIgclxuICAgICAgICAgICAgfCBTb21lIGQxIC0+IGNvbmNhdF9vcl9qb2luIGwgdjIgKGYgdjIgZDEgZDIpIHJcblxuICAgIGxldCByZWMgZmlsdGVyIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSBhcyBtIC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgbCcgPSBmaWx0ZXIgcCBsIGluXG4gICAgICAgICAgbGV0IHB2ZCA9IHAgdiBkIGluXG4gICAgICAgICAgbGV0IHInID0gZmlsdGVyIHAgciBpblxuICAgICAgICAgIGlmIHB2ZCB0aGVuIGlmIGw9PWwnICYmIHI9PXInIHRoZW4gbSBlbHNlIGpvaW4gbCcgdiBkIHInXG4gICAgICAgICAgZWxzZSBjb25jYXQgbCcgcidcblxuICAgIGxldCByZWMgZmlsdGVyX21hcCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtmXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlcl9tYXAgZiBsIGluXG4gICAgICAgICAgbGV0IGZ2ZCA9IGYgdiBkIGluXG4gICAgICAgICAgbGV0IHInID0gZmlsdGVyX21hcCBmIHIgaW5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBmdmQgd2l0aFxuICAgICAgICAgICAgfCBTb21lIGQnIC0+IGpvaW4gbCcgdiBkJyByJ1xuICAgICAgICAgICAgfCBOb25lIC0+IGNvbmNhdCBsJyByJ1xuICAgICAgICAgIGVuZFxuXG4gICAgbGV0IHJlYyBwYXJ0aXRpb24gcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IChFbXB0eSwgRW1wdHkpXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgKGx0LCBsZikgPSBwYXJ0aXRpb24gcCBsIGluXG4gICAgICAgICAgbGV0IHB2ZCA9IHAgdiBkIGluXG4gICAgICAgICAgbGV0IChydCwgcmYpID0gcGFydGl0aW9uIHAgciBpblxuICAgICAgICAgIGlmIHB2ZFxuICAgICAgICAgIHRoZW4gKGpvaW4gbHQgdiBkIHJ0LCBjb25jYXQgbGYgcmYpXG4gICAgICAgICAgZWxzZSAoY29uY2F0IGx0IHJ0LCBqb2luIGxmIHYgZCByZilcblxuICAgIHR5cGUgJ2EgZW51bWVyYXRpb24gPSBFbmQgfCBNb3JlIG9mIGtleSAqICdhICogJ2EgdCAqICdhIGVudW1lcmF0aW9uXG5cbiAgICBsZXQgcmVjIGNvbnNfZW51bSBtIGUgPVxuICAgICAgbWF0Y2ggbSB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gY29uc19lbnVtIGwgKE1vcmUodiwgZCwgciwgZSkpXG5cbiAgICBsZXQgY29tcGFyZSBjbXAgbTEgbTIgPVxuICAgICAgbGV0IHJlYyBjb21wYXJlX2F1eCBlMSBlMiA9XG4gICAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAgIChFbmQsIEVuZCkgLT4gMFxuICAgICAgICB8IChFbmQsIF8pICAtPiAtMVxuICAgICAgICB8IChfLCBFbmQpIC0+IDFcbiAgICAgICAgfCAoTW9yZSh2MSwgZDEsIHIxLCBlMSksIE1vcmUodjIsIGQyLCByMiwgZTIpKSAtPlxuICAgICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgICAgaWYgYyA8PiAwIHRoZW4gYyBlbHNlXG4gICAgICAgICAgICBsZXQgYyA9IGNtcCBkMSBkMiBpblxuICAgICAgICAgICAgaWYgYyA8PiAwIHRoZW4gYyBlbHNlXG4gICAgICAgICAgICBjb21wYXJlX2F1eCAoY29uc19lbnVtIHIxIGUxKSAoY29uc19lbnVtIHIyIGUyKVxuICAgICAgaW4gY29tcGFyZV9hdXggKGNvbnNfZW51bSBtMSBFbmQpIChjb25zX2VudW0gbTIgRW5kKVxuXG4gICAgbGV0IGVxdWFsIGNtcCBtMSBtMiA9XG4gICAgICBsZXQgcmVjIGVxdWFsX2F1eCBlMSBlMiA9XG4gICAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAgIChFbmQsIEVuZCkgLT4gdHJ1ZVxuICAgICAgICB8IChFbmQsIF8pICAtPiBmYWxzZVxuICAgICAgICB8IChfLCBFbmQpIC0+IGZhbHNlXG4gICAgICAgIHwgKE1vcmUodjEsIGQxLCByMSwgZTEpLCBNb3JlKHYyLCBkMiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICAgIE9yZC5jb21wYXJlIHYxIHYyID0gMCAmJiBjbXAgZDEgZDIgJiZcbiAgICAgICAgICAgIGVxdWFsX2F1eCAoY29uc19lbnVtIHIxIGUxKSAoY29uc19lbnVtIHIyIGUyKVxuICAgICAgaW4gZXF1YWxfYXV4IChjb25zX2VudW0gbTEgRW5kKSAoY29uc19lbnVtIG0yIEVuZClcblxuICAgIGxldCByZWMgY2FyZGluYWwgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGUge2w7IHJ9IC0+IGNhcmRpbmFsIGwgKyAxICsgY2FyZGluYWwgclxuXG4gICAgbGV0IHJlYyBiaW5kaW5nc19hdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gYmluZGluZ3NfYXV4ICgodiwgZCkgOjogYmluZGluZ3NfYXV4IGFjY3UgcikgbFxuXG4gICAgbGV0IGJpbmRpbmdzIHMgPVxuICAgICAgYmluZGluZ3NfYXV4IFtdIHNcblxuICAgIGxldCBjaG9vc2UgPSBtaW5fYmluZGluZ1xuXG4gICAgbGV0IGNob29zZV9vcHQgPSBtaW5fYmluZGluZ19vcHRcblxuICAgIGxldCBhZGRfc2VxIGkgbSA9XG4gICAgICBTZXEuZm9sZF9sZWZ0IChmdW4gbSAoayx2KSAtPiBhZGQgayB2IG0pIG0gaVxuXG4gICAgbGV0IG9mX3NlcSBpID0gYWRkX3NlcSBpIGVtcHR5XG5cbiAgICBsZXQgcmVjIHNlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKGssdix0LHJlc3QpIC0+IFNlcS5Db25zICgoayx2KSwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgbSA9XG4gICAgICBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSBtIEVuZClcblxuICAgIGxldCByZWMgc25vY19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IGQ7IHJ9IC0+IHNub2NfZW51bSByIChNb3JlKHYsIGQsIGwsIGUpKVxuXG4gICAgbGV0IHJlYyByZXZfc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoayx2LHQscmVzdCkgLT5cbiAgICAgICAgICBTZXEuQ29ucyAoKGssdiksIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3Jldl9zZXEgYyA9XG4gICAgICByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gYyBFbmQpXG5cbiAgICBsZXQgdG9fc2VxX2Zyb20gbG93IG0gPVxuICAgICAgbGV0IHJlYyBhdXggbG93IG0gYyA9IG1hdGNoIG0gd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGNcbiAgICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBffSAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggT3JkLmNvbXBhcmUgdiBsb3cgd2l0aFxuICAgICAgICAgICAgICB8IDAgLT4gTW9yZSAodiwgZCwgciwgYylcbiAgICAgICAgICAgICAgfCBuIHdoZW4gbjwwIC0+IGF1eCBsb3cgciBjXG4gICAgICAgICAgICAgIHwgXyAtPiBhdXggbG93IGwgKE1vcmUgKHYsIGQsIHIsIGMpKVxuICAgICAgICAgICAgZW5kXG4gICAgICBpblxuICAgICAgc2VxX29mX2VudW1fIChhdXggbG93IG0gRW5kKVxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9IHsgbXV0YWJsZSBjIDogJ2EgbGlzdDsgbXV0YWJsZSBsZW4gOiBpbnQ7IH1cblxuZXhjZXB0aW9uIEVtcHR5XG5cbmxldCBjcmVhdGUgKCkgPSB7IGMgPSBbXTsgbGVuID0gMDsgfVxuXG5sZXQgY2xlYXIgcyA9IHMuYyA8LSBbXTsgcy5sZW4gPC0gMFxuXG5sZXQgY29weSBzID0geyBjID0gcy5jOyBsZW4gPSBzLmxlbjsgfVxuXG5sZXQgcHVzaCB4IHMgPSBzLmMgPC0geCA6OiBzLmM7IHMubGVuIDwtIHMubGVuICsgMVxuXG5sZXQgcG9wIHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgaGRcbiAgfCBbXSAgICAgLT4gcmFpc2UgRW1wdHlcblxubGV0IHBvcF9vcHQgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+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+IGUgaW5cbiAgc3RhdGUucHBfbWFya19vcGVuX3RhZyA8LSBzdHJpbmdpZnkgbW90IFwiXCI7XG4gIHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBtY3QgXCJcIjtcbiAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgPC0gc3RyaW5naWZ5IHBvdCAoKTtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBwY3QgKClcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBmbXQgKCkgPVxuICBsZXQgZnVucyA9IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgZm10ICgpIGluXG4gIGxldCBtYXJrX29wZW5fdGFnIHMgPSBmdW5zLm1hcmtfb3Blbl9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBtYXJrX2Nsb3NlX3RhZyBzID0gZnVucy5tYXJrX2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X29wZW5fdGFnIHMgPSBmdW5zLnByaW50X29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgcHJpbnRfY2xvc2VfdGFnIHMgPSBmdW5zLnByaW50X2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAge21hcmtfb3Blbl90YWc7IG1hcmtfY2xvc2VfdGFnOyBwcmludF9vcGVuX3RhZzsgcHJpbnRfY2xvc2VfdGFnfVxuXG5sZXQgc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEhlbHBlcnMgZm9yIEZvcm1hdH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcblxuaW5jbHVkZSBGb3JtYXRcblxudHlwZSB0ID0gRm9ybWF0LmZvcm1hdHRlclxudHlwZSAtJ2EgcHJpbnRlciA9IHQgLT4gJ2EgLT4gdW5pdFxuXG4oKiogezIgQ29tYmluYXRvcnN9ICopXG5cbmxldCBzaWxlbnQgX2ZtdCBfID0gKClcbmxldCByZXR1cm4gZm10X3N0ciBvdXQgKCkgPSBGb3JtYXQuZnByaW50ZiBvdXQgXCIlKCUpXCIgZm10X3N0clxubGV0IHVuaXQgZm10ICgpID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBmbXQgXCIoKVwiXG5sZXQgaW50IGZtdCBpID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBmbXQgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBzdHJpbmcgPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nXG5sZXQgYm9vbCA9IEZvcm1hdC5wcF9wcmludF9ib29sXG5sZXQgZmxvYXQzIGZtdCBmID0gRm9ybWF0LmZwcmludGYgZm10IFwiJS4zZlwiIGZcbmxldCBmbG9hdCBmbXQgZiA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBjaGFyID0gRm9ybWF0LnBwX3ByaW50X2NoYXJcbmxldCBpbnQzMiBmbXQgbiA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVsZFwiIG5cbmxldCBpbnQ2NCBmbXQgbiA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVMZFwiIG5cbmxldCBuYXRpdmVpbnQgZm10IG4gPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlbmRcIiBuXG5sZXQgc3RyaW5nX3F1b3RlZCBmbXQgcyA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIlxcXCIlc1xcXCJcIiBzXG5sZXQgZmx1c2ggPSBGb3JtYXQucHBfcHJpbnRfZmx1c2hcbmxldCBzcGFjZSA9IEZvcm1hdC5wcF9wcmludF9zcGFjZVxubGV0IGN1dCA9IEZvcm1hdC5wcF9wcmludF9jdXRcbmxldCBicmVhayBmbXQgKG0sIG4pID0gRm9ybWF0LnBwX3ByaW50X2JyZWFrIGZtdCBtIG5cbmxldCBuZXdsaW5lID0gRm9ybWF0LnBwX2ZvcmNlX25ld2xpbmVcbmxldCBzdWJzdHJpbmcgb3V0IChzLCBpLCBsZW4pIDogdW5pdCA9IHN0cmluZyBvdXQgKFN0cmluZy5zdWIgcyBpIGxlbilcbmxldCB0ZXh0ID0gRm9ybWF0LnBwX3ByaW50X3RleHRcblxubGV0IHN0cmluZ19saW5lcyBvdXQgKHMgOiBzdHJpbmcpIDogdW5pdCA9XG4gIGZwcmludGYgb3V0IFwiQFs8dj5cIjtcbiAgbGV0IGkgPSByZWYgMCBpblxuICBsZXQgbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICB3aGlsZSAhaSA8IG4gZG9cbiAgICBsZXQgaiA9IHRyeSBTdHJpbmcuaW5kZXhfZnJvbSBzICFpICdcXG4nIHdpdGggTm90X2ZvdW5kIC0+IG4gaW5cbiAgICBpZiAhaSA+IDAgdGhlbiBmcHJpbnRmIG91dCBcIkAsXCI7XG4gICAgc3Vic3RyaW5nIG91dCAocywgIWksIGogLSAhaSk7XG4gICAgaSA6PSBqICsgMVxuICBkb25lO1xuICBmcHJpbnRmIG91dCBcIkBdXCJcblxubGV0IGxpc3QgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHAgZm10IGwgPVxuICBsZXQgcmVjIHBwX2xpc3QgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCB4IDo6IChfIDo6IF8gYXMgbCkgLT5cbiAgICAgIHBwIGZtdCB4O1xuICAgICAgc2VwIGZtdCAoKTtcbiAgICAgIHBwX2xpc3QgbFxuICAgIHwgWyB4IF0gLT4gcHAgZm10IHhcbiAgICB8IFtdIC0+ICgpXG4gIGluXG4gIHBwX2xpc3QgbFxuXG5sZXQgYXJyYXkgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHAgZm10IGEgPVxuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgaSA+IDAgdGhlbiBzZXAgZm10ICgpO1xuICAgIHBwIGZtdCBhLihpKVxuICBkb25lXG5cbmxldCBhcnJheWkgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHAgZm10IGEgPVxuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgaSA+IDAgdGhlbiBzZXAgZm10ICgpO1xuICAgIHBwIGZtdCAoaSwgYS4oaSkpXG4gIGRvbmVcblxubGV0IHNlcSA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcCBmbXQgc2VxID1cbiAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgQ0NTZXEuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgc2VwIGZtdCAoKTtcbiAgICAgIHBwIGZtdCB4KVxuICAgIHNlcVxuXG5sZXQgaXRlciA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcCBmbXQgc2VxID1cbiAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgc2VxIChmdW4geCAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgc2VwIGZtdCAoKTtcbiAgICAgIHBwIGZtdCB4KVxuXG5sZXQgb3B0IHBwIGZtdCB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCBcIm5vbmVcIlxuICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJzb21lICVhXCIgcHAgeFxuXG5sZXQgcGFpciA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcGEgcHBiIGZtdCAoYSwgYikgPVxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYSVhJWFcIiBwcGEgYSBzZXAgKCkgcHBiIGJcblxubGV0IHRyaXBsZSA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcGEgcHBiIHBwYyBmbXQgKGEsIGIsIGMpID1cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWElYSVhJWElYVwiIHBwYSBhIHNlcCAoKSBwcGIgYiBzZXAgKCkgcHBjIGNcblxubGV0IHF1YWQgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHBhIHBwYiBwcGMgcHBkIGZtdCAoYSwgYiwgYywgZCkgPVxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYSVhJWElYSVhJWElYVwiIHBwYSBhIHNlcCAoKSBwcGIgYiBzZXAgKCkgcHBjIGMgc2VwICgpIHBwZFxuICAgIGRcblxubGV0IGFwcGVuZCBwcGEgcHBiIGZtdCAoKSA9XG4gIHBwYSBmbXQgKCk7XG4gIHBwYiBmbXQgKClcblxubGV0IGFwcGVuZF9sIHBwbCBmbXQgKCkgPSBMaXN0Lml0ZXIgKGZ1biBwcCAtPiBwcCBmbXQgKCkpIHBwbFxuXG5sZXQgd2l0aGluIGEgYiBwIG91dCB4ID1cbiAgc3RyaW5nIG91dCBhO1xuICBwIG91dCB4O1xuICBzdHJpbmcgb3V0IGJcblxubGV0IG1hcCBmIHBwIGZtdCB4ID1cbiAgcHAgZm10IChmIHgpO1xuICAoKVxuXG5sZXQgdmJveCA/KGkgPSAwKSBwcCBvdXQgeCA9XG4gIEZvcm1hdC5wcF9vcGVuX3Zib3ggb3V0IGk7XG4gIHBwIG91dCB4O1xuICBGb3JtYXQucHBfY2xvc2VfYm94IG91dCAoKVxuXG5sZXQgaG92Ym94ID8oaSA9IDApIHBwIG91dCB4ID1cbiAgRm9ybWF0LnBwX29wZW5faG92Ym94IG91dCBpO1xuICBwcCBvdXQgeDtcbiAgRm9ybWF0LnBwX2Nsb3NlX2JveCBvdXQgKClcblxubGV0IGh2Ym94ID8oaSA9IDApIHBwIG91dCB4ID1cbiAgRm9ybWF0LnBwX29wZW5faHZib3ggb3V0IGk7XG4gIHBwIG91dCB4O1xuICBGb3JtYXQucHBfY2xvc2VfYm94IG91dCAoKVxuXG5sZXQgaGJveCBwcCBvdXQgeCA9XG4gIEZvcm1hdC5wcF9vcGVuX2hib3ggb3V0ICgpO1xuICBwcCBvdXQgeDtcbiAgRm9ybWF0LnBwX2Nsb3NlX2JveCBvdXQgKClcblxubGV0IG9mX3RvX3N0cmluZyBmIG91dCB4ID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKGYgeClcbmxldCBleG4gPSBvZl90b19zdHJpbmcgUHJpbnRleGMudG9fc3RyaW5nXG5sZXQgY29uc3QgcHAgeCBvdXQgKCkgPSBwcCBvdXQgeFxuXG5sZXQgc29tZSBwcCBvdXQgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gcHAgb3V0IHhcblxubGV0IGNvbnN0X3N0cmluZyBzIG91dCBfID0gc3RyaW5nIG91dCBzXG5sZXQgb3BhcXVlIG91dCBfID0gc3RyaW5nIG91dCBcIm9wYXF1ZVwiXG5sZXQgbGF6eV9mb3JjZSBwcCBvdXQgKGxhenkgeCkgPSBwcCBvdXQgeFxuXG5sZXQgbGF6eV9vciA/KGRlZmF1bHQgPSByZXR1cm4gXCI8bGF6eT5cIikgcHAgb3V0IHggPVxuICBpZiBMYXp5LmlzX3ZhbCB4IHRoZW5cbiAgICBwcCBvdXQgKExhenkuZm9yY2UgeClcbiAgZWxzZVxuICAgIGRlZmF1bHQgb3V0ICgpXG5cbigqKiB7MiBJT30gKilcblxubGV0IG91dHB1dCBmbXQgcHAgeCA9IHBwIGZtdCB4XG5cbmxldCB0b19zdHJpbmcgcHAgeCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCBmbXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgcHAgZm10IHg7XG4gIEZvcm1hdC5wcF9wcmludF9mbHVzaCBmbXQgKCk7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGZwcmludGYgPSBGb3JtYXQuZnByaW50ZlxubGV0IHN0ZG91dCA9IEZvcm1hdC5zdGRfZm9ybWF0dGVyXG5sZXQgc3RkZXJyID0gRm9ybWF0LmVycl9mb3JtYXR0ZXJcbmxldCBvZl9jaGFuID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbFxuXG5sZXQgd2l0aF9vdXRfY2hhbiBvYyBmID1cbiAgbGV0IGZtdCA9IG9mX2NoYW4gb2MgaW5cbiAgdHJ5XG4gICAgbGV0IHggPSBmIGZtdCBpblxuICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBmbXQgKCk7XG4gICAgeFxuICB3aXRoIGUgLT5cbiAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggZm10ICgpO1xuICAgIHJhaXNlIGVcblxubGV0IHRlZSBhIGIgPVxuICBsZXQgZmEgPSBGb3JtYXQucHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIGEgKCkgaW5cbiAgbGV0IGZiID0gRm9ybWF0LnBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBiICgpIGluXG4gIEZvcm1hdC5tYWtlX2Zvcm1hdHRlclxuICAgIChmdW4gc3RyIGkgbGVuIC0+XG4gICAgICBmYS5Gb3JtYXQub3V0X3N0cmluZyBzdHIgaSBsZW47XG4gICAgICBmYi5Gb3JtYXQub3V0X3N0cmluZyBzdHIgaSBsZW4pXG4gICAgKGZ1biAoKSAtPlxuICAgICAgZmEuRm9ybWF0Lm91dF9mbHVzaCAoKTtcbiAgICAgIGZiLkZvcm1hdC5vdXRfZmx1c2ggKCkpXG5cbmxldCB0b19maWxlIGZpbGVuYW1lIGZvcm1hdCA9XG4gIGxldCBvYyA9IG9wZW5fb3V0IGZpbGVuYW1lIGluXG4gIGxldCBmbXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX291dF9jaGFubmVsIG9jIGluXG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gZm10IC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggZm10ICgpO1xuICAgICAgY2xvc2Vfb3V0X25vZXJyIG9jKVxuICAgIGZtdCBmb3JtYXRcblxubW9kdWxlIEFOU0lfY29kZXMgPSBzdHJ1Y3RcbiAgdHlwZSBjb2xvciA9XG4gICAgWyBgQmxhY2sgfCBgUmVkIHwgYFllbGxvdyB8IGBHcmVlbiB8IGBCbHVlIHwgYE1hZ2VudGEgfCBgQ3lhbiB8IGBXaGl0ZSBdXG5cbiAgbGV0IGludF9vZl9jb2xvcl8gPSBmdW5jdGlvblxuICAgIHwgYEJsYWNrIC0+IDBcbiAgICB8IGBSZWQgLT4gMVxuICAgIHwgYEdyZWVuIC0+IDJcbiAgICB8IGBZZWxsb3cgLT4gM1xuICAgIHwgYEJsdWUgLT4gNFxuICAgIHwgYE1hZ2VudGEgLT4gNVxuICAgIHwgYEN5YW4gLT4gNlxuICAgIHwgYFdoaXRlIC0+IDdcblxuICB0eXBlIHN0eWxlID1cbiAgICBbIGBGRyBvZiBjb2xvciAoKiBmb3JlZ3JvdW5kICopXG4gICAgfCBgQkcgb2YgY29sb3IgKCogYmFja2dyb3VuZCAqKVxuICAgIHwgYEJvbGRcbiAgICB8IGBSZXNldCBdXG5cbiAgbGV0IGNvZGVfb2Zfc3R5bGUgOiBzdHlsZSAtPiBpbnQgPSBmdW5jdGlvblxuICAgIHwgYEZHIGMgLT4gMzAgKyBpbnRfb2ZfY29sb3JfIGNcbiAgICB8IGBCRyBjIC0+IDQwICsgaW50X29mX2NvbG9yXyBjXG4gICAgfCBgQm9sZCAtPiAxXG4gICAgfCBgUmVzZXQgLT4gMFxuXG4gIGxldCBzdHJpbmdfb2Zfc3R5bGUgYSA9IFByaW50Zi5zcHJpbnRmIFwiXFx4MWJbJWRtXCIgKGNvZGVfb2Zfc3R5bGUgYSlcbiAgbGV0IGNsZWFyX2xpbmUgPSBcIlxceDFiWzJLXFxyXCJcbiAgbGV0IHJlc2V0ID0gc3RyaW5nX29mX3N0eWxlIGBSZXNldFxuXG4gIGxldCBzdHJpbmdfb2Zfc3R5bGVfbGlzdCA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXNldFxuICAgIHwgWyBhIF0gLT4gc3RyaW5nX29mX3N0eWxlIGFcbiAgICB8IFsgYTsgYiBdIC0+XG4gICAgICBQcmludGYuc3ByaW50ZiBcIlxceDFiWyVkOyVkbVwiIChjb2RlX29mX3N0eWxlIGEpIChjb2RlX29mX3N0eWxlIGIpXG4gICAgfCBbIGE7IGI7IGMgXSAtPlxuICAgICAgUHJpbnRmLnNwcmludGYgXCJcXHgxYlslZDslZDslZG1cIiAoY29kZV9vZl9zdHlsZSBhKSAoY29kZV9vZl9zdHlsZSBiKVxuICAgICAgICAoY29kZV9vZl9zdHlsZSBjKVxuICAgIHwgbCAtPlxuICAgICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgICAgIGxldCBwcF9udW0gYyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoc3RyaW5nX29mX2ludCAoY29kZV9vZl9zdHlsZSBjKSkgaW5cbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIlxceDFiW1wiO1xuICAgICAgTGlzdC5pdGVyaVxuICAgICAgICAoZnVuIGkgYyAtPlxuICAgICAgICAgIGlmIGkgPiAwIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnOyc7XG4gICAgICAgICAgcHBfbnVtIGMpXG4gICAgICAgIGw7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJtXCI7XG4gICAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgZXhjZXB0aW9uIE5vX3N1Y2hfc3R5bGVcblxuICAoKiBwYXJzZSBhIHN0cmluZyB0YWcuICopXG4gIGxldCBzdHlsZV9vZl90YWdfIHMgPVxuICAgIG1hdGNoIFN0cmluZy50cmltIHMgd2l0aFxuICAgIHwgXCJyZXNldFwiIC0+IFsgYFJlc2V0IF1cbiAgICB8IFwiYmxhY2tcIiAtPiBbIGBGRyBgQmxhY2sgXVxuICAgIHwgXCJyZWRcIiAtPiBbIGBGRyBgUmVkIF1cbiAgICB8IFwiZ3JlZW5cIiAtPiBbIGBGRyBgR3JlZW4gXVxuICAgIHwgXCJ5ZWxsb3dcIiAtPiBbIGBGRyBgWWVsbG93IF1cbiAgICB8IFwiYmx1ZVwiIC0+IFsgYEZHIGBCbHVlIF1cbiAgICB8IFwibWFnZW50YVwiIC0+IFsgYEZHIGBNYWdlbnRhIF1cbiAgICB8IFwiY3lhblwiIC0+IFsgYEZHIGBDeWFuIF1cbiAgICB8IFwid2hpdGVcIiAtPiBbIGBGRyBgV2hpdGUgXVxuICAgIHwgXCJib2xkXCIgLT4gWyBgQm9sZCBdXG4gICAgfCBcIkJsYWNrXCIgLT4gWyBgRkcgYEJsYWNrOyBgQm9sZCBdXG4gICAgfCBcIlJlZFwiIC0+IFsgYEZHIGBSZWQ7IGBCb2xkIF1cbiAgICB8IFwiR3JlZW5cIiAtPiBbIGBGRyBgR3JlZW47IGBCb2xkIF1cbiAgICB8IFwiWWVsbG93XCIgLT4gWyBgRkcgYFllbGxvdzsgYEJvbGQgXVxuICAgIHwgXCJCbHVlXCIgLT4gWyBgRkcgYEJsdWU7IGBCb2xkIF1cbiAgICB8IFwiTWFnZW50YVwiIC0+IFsgYEZHIGBNYWdlbnRhOyBgQm9sZCBdXG4gICAgfCBcIkN5YW5cIiAtPiBbIGBGRyBgQ3lhbjsgYEJvbGQgXVxuICAgIHwgXCJXaGl0ZVwiIC0+IFsgYEZHIGBXaGl0ZTsgYEJvbGQgXVxuICAgIHwgXyAtPiByYWlzZSBOb19zdWNoX3N0eWxlXG5lbmRcblxubGV0IGNvbG9yX2VuYWJsZWQgPSByZWYgZmFsc2VcblxubGV0IG1hcmtfb3Blbl9zdHlsZSBzdCBzdHlsZSA9XG4gIFN0YWNrLnB1c2ggc3R5bGUgc3Q7XG4gIGlmICFjb2xvcl9lbmFibGVkIHRoZW5cbiAgICBBTlNJX2NvZGVzLnN0cmluZ19vZl9zdHlsZV9saXN0IHN0eWxlXG4gIGVsc2VcbiAgICBcIlwiXG5cbmxldCBtYXJrX2Nsb3NlX3N0eWxlIHN0IDogc3RyaW5nID1cbiAgbGV0IHN0eWxlID1cbiAgICB0cnlcbiAgICAgIGlnbm9yZSAoU3RhY2sucG9wIHN0KTtcbiAgICAgICgqIHBvcCBjdXJyZW50IHN0eWxlIChpZiB3ZWxsLXNjb3BlZCDigKYpICopXG4gICAgICBTdGFjay50b3Agc3RcbiAgICAgICgqIGxvb2sgYXQgcHJldmlvdXMgc3R5bGUgKilcbiAgICB3aXRoIFN0YWNrLkVtcHR5IC0+IFsgYFJlc2V0IF1cbiAgaW5cbiAgaWYgIWNvbG9yX2VuYWJsZWQgdGhlblxuICAgIEFOU0lfY29kZXMuc3RyaW5nX29mX3N0eWxlX2xpc3Qgc3R5bGVcbiAgZWxzZVxuICAgIFwiXCJcblxudHlwZSBzdGFnICs9IFN0eWxlIG9mIEFOU0lfY29kZXMuc3R5bGUgbGlzdFxuXG5sZXQgcHBfb3Blbl90YWcgb3V0IHMgPSBwcF9vcGVuX3N0YWcgb3V0IChTdHJpbmdfdGFnIHMpXG5sZXQgcHBfY2xvc2VfdGFnIG91dCAoKSA9IHBwX2Nsb3NlX3N0YWcgb3V0ICgpXG5cbigqIGVpdGhlciBwcmludHMgdGhlIHRhZyBvZiBbc10gb3IgZGVsZWdhdGUgdG8gW29yX2Vsc2VdICopXG5sZXQgbWFya19vcGVuX3N0YWcgc3Qgfm9yX2Vsc2UgKHRhZyA6IHN0YWcpIDogc3RyaW5nID1cbiAgbWF0Y2ggdGFnIHdpdGhcbiAgfCBTdHlsZSBzdHlsZSAtPiBtYXJrX29wZW5fc3R5bGUgc3Qgc3R5bGVcbiAgfCBTdHJpbmdfdGFnIHMgLT5cbiAgICBsZXQgb3BlbiBBTlNJX2NvZGVzIGluXG4gICAgKHRyeVxuICAgICAgIGxldCBzdHlsZSA9IHN0eWxlX29mX3RhZ18gcyBpblxuICAgICAgIG1hcmtfb3Blbl9zdHlsZSBzdCBzdHlsZVxuICAgICB3aXRoIE5vX3N1Y2hfc3R5bGUgLT4gb3JfZWxzZSB0YWcpXG4gIHwgXyAtPiBvcl9lbHNlIHRhZ1xuXG5sZXQgbWFya19jbG9zZV9zdGFnIHN0IH5vcl9lbHNlICh0YWcgOiBzdGFnKSA6IHN0cmluZyA9XG4gIG1hdGNoIHRhZyB3aXRoXG4gIHwgU3R5bGUgXyAtPiBtYXJrX2Nsb3NlX3N0eWxlIHN0XG4gIHwgU3RyaW5nX3RhZyBzIC0+XG4gICAgbGV0IG9wZW4gQU5TSV9jb2RlcyBpblxuICAgICgqIGNoZWNrIGlmIGl0J3MgaW5kZWVkIGFib3V0IGNvbG9yICopXG4gICAgKG1hdGNoIHN0eWxlX29mX3RhZ18gcyB3aXRoXG4gICAgfCBfIC0+IG1hcmtfY2xvc2Vfc3R5bGUgc3RcbiAgICB8IGV4Y2VwdGlvbiBOb19zdWNoX3N0eWxlIC0+IG9yX2Vsc2UgdGFnKVxuICB8IF8gLT4gb3JfZWxzZSB0YWdcblxubGV0IHdpdGhfc3R5bGluZyBzdGwgb3V0IGYgPVxuICBwcF9vcGVuX3N0YWcgb3V0IChTdHlsZSBzdGwpO1xuICB0cnlcbiAgICBsZXQgeCA9IGYgKCkgaW5cbiAgICBwcF9jbG9zZV9zdGFnIG91dCAoKTtcbiAgICB4XG4gIHdpdGggZSAtPlxuICAgIHBwX2Nsb3NlX3N0YWcgb3V0ICgpO1xuICAgIHJhaXNlIGVcblxubGV0IHN0eWxpbmcgc3RsIHBwIG91dCB4ID0gd2l0aF9zdHlsaW5nIHN0bCBvdXQgQEAgZnVuICgpIC0+IHBwIG91dCB4XG5cbigqIGFkZCBjb2xvciBoYW5kbGluZyB0byBmb3JtYXR0ZXIgW3BwZl0gKilcbmxldCBzZXRfY29sb3JfdGFnX2hhbmRsaW5nIHBwZiA9XG4gIGxldCBzdCA9IFN0YWNrLmNyZWF0ZSAoKSBpblxuICAoKiBzdGFjayBvZiBzdHlsZXMgKilcbiAgcHBfc2V0X21hcmtfdGFncyBwcGYgdHJ1ZTtcbiAgKCogZW5hYmxlIHRhZ3MgKilcbiAgbGV0IGZ1bnMgPSBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHBwZiAoKSBpblxuICBsZXQgZnVucycgPVxuICAgIHtcbiAgICAgIGZ1bnMgd2l0aFxuICAgICAgbWFya19vcGVuX3N0YWcgPSBtYXJrX29wZW5fc3RhZyBzdCB+b3JfZWxzZTpmdW5zLm1hcmtfb3Blbl9zdGFnO1xuICAgICAgbWFya19jbG9zZV9zdGFnID0gbWFya19jbG9zZV9zdGFnIHN0IH5vcl9lbHNlOmZ1bnMubWFya19jbG9zZV9zdGFnO1xuICAgIH1cbiAgaW5cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBwcGYgZnVucydcblxubGV0IHNldF9jb2xvcl9kZWZhdWx0ID1cbiAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgZnVuIGIgLT5cbiAgICBpZiBiICYmIG5vdCAhY29sb3JfZW5hYmxlZCB0aGVuIChcbiAgICAgIGNvbG9yX2VuYWJsZWQgOj0gdHJ1ZTtcbiAgICAgIGlmICFmaXJzdCB0aGVuIChcbiAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgIHNldF9jb2xvcl90YWdfaGFuZGxpbmcgc3Rkb3V0O1xuICAgICAgICBzZXRfY29sb3JfdGFnX2hhbmRsaW5nIHN0ZGVyclxuICAgICAgKVxuICAgICkgZWxzZSBpZiAobm90IGIpICYmICFjb2xvcl9lbmFibGVkIHRoZW5cbiAgICAgIGNvbG9yX2VuYWJsZWQgOj0gZmFsc2VcblxubGV0IHdpdGhfY29sb3IgcyBwcCBvdXQgeCA9XG4gIHBwX29wZW5fdGFnIG91dCBzO1xuICBwcCBvdXQgeDtcbiAgcHBfY2xvc2VfdGFnIG91dCAoKVxuXG5sZXQgd2l0aF9jb2xvcmYgcyBvdXQgZm10ID1cbiAgcHBfb3Blbl90YWcgb3V0IHM7XG4gIEZvcm1hdC5rZnByaW50ZiAoZnVuIG91dCAtPiBwcF9jbG9zZV90YWcgb3V0ICgpKSBvdXQgZm10XG5cbigqIGM6IHdoZXRoZXIgY29sb3JzIGFyZSBlbmFibGVkICopXG5sZXQgc3ByaW50Zl8gYyBmb3JtYXQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIGlmIGMgJiYgIWNvbG9yX2VuYWJsZWQgdGhlbiBzZXRfY29sb3JfdGFnX2hhbmRsaW5nIGZtdDtcbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBfZm10IC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggZm10ICgpO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZilcbiAgICBmbXQgZm9ybWF0XG5cbmxldCB3aXRoX2NvbG9yX2tzZiB+ZiBzIGZtdCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCBvdXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgaWYgIWNvbG9yX2VuYWJsZWQgdGhlbiBzZXRfY29sb3JfdGFnX2hhbmRsaW5nIG91dDtcbiAgcHBfb3Blbl90YWcgb3V0IHM7XG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gb3V0IC0+XG4gICAgICBwcF9jbG9zZV90YWcgb3V0ICgpO1xuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGYgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmbXRcblxubGV0IHdpdGhfY29sb3Jfc2YgcyBmbXQgPSB3aXRoX2NvbG9yX2tzZiB+ZjooZnVuIHMgLT4gcykgcyBmbXRcbmxldCBzcHJpbnRmIGZtdCA9IHNwcmludGZfIHRydWUgZm10XG5sZXQgc3ByaW50Zl9ub19jb2xvciBmbXQgPSBzcHJpbnRmXyBmYWxzZSBmbXRcbmxldCBzcHJpbnRmX2R5bl9jb2xvciB+Y29sb3JzIGZtdCA9IHNwcmludGZfIGNvbG9ycyBmbXRcblxubGV0IGZwcmludGZfZHluX2NvbG9yIH5jb2xvcnMgb3V0IGZtdCA9XG4gIGxldCBvbGRfdGFncyA9IEZvcm1hdC5wcF9nZXRfbWFya190YWdzIG91dCAoKSBpblxuICBGb3JtYXQucHBfc2V0X21hcmtfdGFncyBvdXQgY29sb3JzO1xuICAoKiBlbmFibGUvZGlzYWJsZSB0YWdzICopXG4gIEZvcm1hdC5rZnByaW50ZiAoZnVuIG91dCAtPiBGb3JtYXQucHBfc2V0X21hcmtfdGFncyBvdXQgb2xkX3RhZ3MpIG91dCBmbXRcblxubGV0IGtzcHJpbnRmID9tYXJnaW4gfmYgZm10ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBpZiAhY29sb3JfZW5hYmxlZCB0aGVuIHNldF9jb2xvcl90YWdfaGFuZGxpbmcgb3V0O1xuICAobWF0Y2ggbWFyZ2luIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBtIC0+IHBwX3NldF9tYXJnaW4gb3V0IG0pO1xuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIF8gLT5cbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBvdXQgKCk7XG4gICAgICBmIChCdWZmZXIuY29udGVudHMgYnVmKSlcbiAgICBvdXQgZm10XG5cbm1vZHVsZSBEdW1wID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9ICdhIHByaW50ZXJcblxuICBsZXQgdW5pdCA9IHVuaXRcbiAgbGV0IGludCA9IGludFxuICBsZXQgc3RyaW5nID0gc3RyaW5nX3F1b3RlZFxuICBsZXQgYm9vbCA9IGJvb2xcbiAgbGV0IGZsb2F0ID0gZmxvYXRcbiAgbGV0IGNoYXIgPSBjaGFyXG4gIGxldCBpbnQzMiA9IGludDMyXG4gIGxldCBpbnQ2NCA9IGludDY0XG4gIGxldCBuYXRpdmVpbnQgPSBuYXRpdmVpbnRcbiAgbGV0IGxpc3QgcHAgPSB3aXRoaW4gXCJbXCIgXCJdXCIgKGhvdmJveCAobGlzdCB+c2VwOihyZXR1cm4gXCI7QCxcIikgcHApKVxuICBsZXQgYXJyYXkgcHAgPSB3aXRoaW4gXCJbfFwiIFwifF1cIiAoaG92Ym94IChhcnJheSB+c2VwOihyZXR1cm4gXCI7QCxcIikgcHApKVxuXG4gIGxldCBvcHRpb24gcHAgb3V0IHggPVxuICAgIG1hdGNoIHggd2l0aFxuICAgIHwgTm9uZSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIk5vbmVcIlxuICAgIHwgU29tZSB4IC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIlNvbWUgJWFcIiBwcCB4XG5cbiAgbGV0IHBhaXIgcDEgcDIgPSB3aXRoaW4gXCIoXCIgXCIpXCIgKGhvdmJveCAocGFpciBwMSBwMikpXG4gIGxldCB0cmlwbGUgcDEgcDIgcDMgPSB3aXRoaW4gXCIoXCIgXCIpXCIgKGhvdmJveCAodHJpcGxlIHAxIHAyIHAzKSlcbiAgbGV0IHF1YWQgcDEgcDIgcDMgcDQgPSB3aXRoaW4gXCIoXCIgXCIpXCIgKGhvdmJveCAocXVhZCBwMSBwMiBwMyBwNCkpXG5cbiAgbGV0IHJlc3VsdCcgcG9rIHBlcnJvciBvdXQgPSBmdW5jdGlvblxuICAgIHwgT2sgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQFtPayAlYUBdKVwiIHBvayB4XG4gICAgfCBFcnJvciBlIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIihAW0Vycm9yICVhQF0pXCIgcGVycm9yIGVcblxuICBsZXQgcmVzdWx0IHBvayA9IHJlc3VsdCcgcG9rIHN0cmluZ1xuICBsZXQgdG9fc3RyaW5nID0gdG9fc3RyaW5nXG5lbmRcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoICsrICkgPSBhcHBlbmRcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFJlZ2lzdGVyaW5nIE9DYW1sIHZhbHVlcyB3aXRoIHRoZSBDIHJ1bnRpbWUgZm9yIGxhdGVyIGNhbGxiYWNrcyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiBPYmoudCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCByZWdpc3RlciBuYW1lIHYgPVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBuYW1lIChPYmoucmVwciB2KVxuXG5sZXQgcmVnaXN0ZXJfZXhjZXB0aW9uIG5hbWUgKGV4biA6IGV4bikgPVxuICBsZXQgZXhuID0gT2JqLnJlcHIgZXhuIGluXG4gIGxldCBzbG90ID0gaWYgT2JqLnRhZyBleG4gPSBPYmoub2JqZWN0X3RhZyB0aGVuIGV4biBlbHNlIE9iai5maWVsZCBleG4gMCBpblxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBuYW1lIHNsb3RcbiIsIm1vZHVsZSBKcyA9IHN0cnVjdFxuICB0eXBlIHRcblxuICB0eXBlICdhIGpzX2FycmF5ID0gdFxuXG4gIHR5cGUgKCdhLCAnYikgbWV0aF9jYWxsYmFjayA9IHRcblxuICBleHRlcm5hbCBzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX3N0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgYnl0ZXN0cmluZyA6IHN0cmluZyAtPiB0ID0gXCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19ieXRlc3RyaW5nIDogdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcIlxuXG4gIGV4dGVybmFsIGJvb2wgOiBib29sIC0+IHQgPSBcImNhbWxfanNfZnJvbV9ib29sXCJcblxuICBleHRlcm5hbCB0b19ib29sIDogdCAtPiBib29sID0gXCJjYW1sX2pzX3RvX2Jvb2xcIlxuXG4gIGV4dGVybmFsIGFycmF5IDogJ2EgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2FycmF5XCJcblxuICBleHRlcm5hbCB0b19hcnJheSA6IHQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfanNfdG9fYXJyYXlcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9mbG9hdCA6IGZsb2F0IC0+IHQgPSBcImNhbWxfanNfZnJvbV9mbG9hdFwiXG5cbiAgZXh0ZXJuYWwgZmxvYXRfb2ZfbnVtYmVyIDogdCAtPiBmbG9hdCA9IFwiY2FtbF9qc190b19mbG9hdFwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX2ludDMyIDogaW50MzIgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2ludDMyXCJcblxuICBleHRlcm5hbCBpbnQzMl9vZl9udW1iZXIgOiB0IC0+IGludDMyID0gXCJjYW1sX2pzX3RvX2ludDMyXCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfbmF0aXZlaW50IDogbmF0aXZlaW50IC0+IHQgPSBcImNhbWxfanNfZnJvbV9uYXRpdmVpbnRcIlxuXG4gIGV4dGVybmFsIG5hdGl2ZWludF9vZl9udW1iZXIgOiB0IC0+IG5hdGl2ZWludCA9IFwiY2FtbF9qc190b19uYXRpdmVpbnRcIlxuXG4gIGV4dGVybmFsIHR5cGVvZiA6IHQgLT4gdCA9IFwiY2FtbF9qc190eXBlb2ZcIlxuXG4gIGV4dGVybmFsIGluc3RhbmNlb2YgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19pbnN0YW5jZW9mXCJcblxuICBleHRlcm5hbCBkZWJ1Z2dlciA6IHVuaXQgLT4gdW5pdCA9IFwiZGVidWdnZXJcIlxuXG4gIGV4dGVybmFsIGdldCA6IHQgLT4gdCAtPiB0ID0gXCJjYW1sX2pzX2dldFwiXG5cbiAgZXh0ZXJuYWwgc2V0IDogdCAtPiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19zZXRcIlxuXG4gIGV4dGVybmFsIGRlbGV0ZSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2pzX2RlbGV0ZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbCA6IHQgLT4gdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfY2FsbFwiXG5cbiAgZXh0ZXJuYWwgZnVuX2NhbGwgOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19mdW5fY2FsbFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsIDogdCAtPiBzdHJpbmcgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX21ldGhfY2FsbFwiXG5cbiAgZXh0ZXJuYWwgbmV3X29iaiA6IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX25ld1wiXG5cbiAgZXh0ZXJuYWwgbmV3X29ial9hcnIgOiB0IC0+IHQganNfYXJyYXkgLT4gdCA9IFwiY2FtbF9vanNfbmV3X2FyclwiXG5cbiAgZXh0ZXJuYWwgb2JqIDogKHN0cmluZyAqIHQpIGFycmF5IC0+IHQgPSBcImNhbWxfanNfb2JqZWN0XCJcblxuICBleHRlcm5hbCBlcXVhbHMgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcblxuICBleHRlcm5hbCBwdXJlX2V4cHIgOiAodW5pdCAtPiAnYSkgLT4gJ2EgPSBcImNhbWxfanNfcHVyZV9leHByXCJcblxuICBleHRlcm5hbCBldmFsX3N0cmluZyA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19ldmFsX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwganNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19leHByXCJcblxuICBleHRlcm5hbCBwdXJlX2pzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfcHVyZV9qc19leHByXCJcblxuICBleHRlcm5hbCBjYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlXCJcblxuICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgKHQganNfYXJyYXkgLT4gJ2IpIC0+ICgnYywgdCBqc19hcnJheSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3RcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICgnYiAtPiB0IGpzX2FycmF5IC0+ICdhKSAtPiAoJ2IsIHQganNfYXJyYXkgLT4gJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICBleHRlcm5hbCB3cmFwX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9tZXRoX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrXCJcbmVuZFxuXG5tb2R1bGUgU3lzID0gc3RydWN0XG4gIHR5cGUgJ2EgY2FsbGJhY2sgPSAnYVxuXG4gIGV4dGVybmFsIGNyZWF0ZV9maWxlIDogbmFtZTpzdHJpbmcgLT4gY29udGVudDpzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF9jcmVhdGVfZmlsZVwiXG5cbiAgZXh0ZXJuYWwgcmVhZF9maWxlIDogbmFtZTpzdHJpbmcgLT4gc3RyaW5nID0gXCJjYW1sX3JlYWRfZmlsZV9jb250ZW50XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9vdXRwdXQnIDogb3V0X2NoYW5uZWwgLT4gKGpzX3N0cmluZzpKcy50IC0+IHVuaXQpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX2lucHV0JyA6IGluX2NoYW5uZWwgLT4gKHVuaXQgLT4gc3RyaW5nKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsXCJcblxuICBleHRlcm5hbCBtb3VudF9wb2ludCA6IHVuaXQgLT4gc3RyaW5nIGxpc3QgPSBcImNhbWxfbGlzdF9tb3VudF9wb2ludFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfYXV0b2xvYWQgOiBzdHJpbmcgLT4gKHN0cmluZyAtPiBzdHJpbmcgLT4gc3RyaW5nIG9wdGlvbikgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21vdW50X2F1dG9sb2FkXCJcblxuICBleHRlcm5hbCB1bm1vdW50IDogc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfdW5tb3VudFwiXG5cbiAgdHlwZSByZWRpcmVjdGlvblxuXG4gIGV4dGVybmFsIHJlZGlyZWN0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiBpbnRvOm91dF9jaGFubmVsIC0+IHJlZGlyZWN0aW9uXG4gICAgPSBcImNhbWxfbWxfY2hhbm5lbF9yZWRpcmVjdFwiXG5cbiAgZXh0ZXJuYWwgcmVzdG9yZV9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gcmVkaXJlY3Rpb24gLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVwiXG5cbiAgbW9kdWxlIENvbmZpZyA9IHN0cnVjdFxuICAgIGV4dGVybmFsIHVzZV9qc19zdHJpbmcgOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXCJcblxuICAgIGV4dGVybmFsIGVmZmVjdHMgOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfanNvb19mbGFnc19lZmZlY3RzXCJcbiAgZW5kXG5cbiAgbGV0IHZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uc1xuXG4gIGxldCBnaXRfdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5naXRfdmVyc2lvblxuZW5kXG5cbm1vZHVsZSBFcnJvciA6IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgcmFpc2VfIDogdCAtPiAnYVxuXG4gIHZhbCBhdHRhY2hfanNfYmFja3RyYWNlIDogZXhuIC0+IGZvcmNlOmJvb2wgLT4gZXhuXG4gICgqKiBBdHRhY2ggYSBKYXZhc1NjcmlwdCBlcnJvciB0byBhbiBPQ2FtbCBleGNlcHRpb24uICBpZiBbZm9yY2UgPSBmYWxzZV0gYW5kIGFcbiAgICBKYXZhc1NjcmlwdCBlcnJvciBpcyBhbHJlYWR5IGF0dGFjaGVkLCBpdCB3aWxsIGRvIG5vdGhpbmcuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHRvXG4gICAgc3RvcmUgYW5kIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IEphdmFTY3JpcHQgc3RhY2sgdHJhY2VzLlxuXG4gICAgQXR0YWNoaW5nIEphdmFzU2NyaXB0IGVycm9ycyB3aWxsIGhhcHBlbiBhdXRvbWF0aWNhbGx5IHdoZW4gY29tcGlsaW5nIHdpdGhcbiAgICBbLS1lbmFibGUgd2l0aC1qcy1lcnJvcl0uICopXG5cbiAgdmFsIG9mX2V4biA6IGV4biAtPiB0IG9wdGlvblxuICAoKiogRXh0cmFjdCBhIEphdmFTY3JpcHQgZXJyb3IgYXR0YWNoZWQgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLCBpZiBhbnkuICBUaGlzIGlzIHVzZWZ1bCB0b1xuICAgICAgaW5zcGVjdCBhbiBldmVudHVhbCBzdGFjayBzdHJhY2UsIGVzcGVjaWFsbHkgd2hlbiBzb3VyY2VtYXAgaXMgZW5hYmxlZC4gKilcblxuICBleGNlcHRpb24gRXhuIG9mIHRcbiAgKCoqIFRoZSBbRXJyb3JdIGV4Y2VwdGlvbiB3cmFwIGphdmFzY3JpcHQgZXhjZXB0aW9ucyB3aGVuIGNhdWdodCBieSBPQ2FtbCBjb2RlLlxuICAgICAgSW4gY2FzZSB0aGUgamF2YXNjcmlwdCBleGNlcHRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIGphdmFzY3JpcHQgW0Vycm9yXSxcbiAgICAgIGl0IHdpbGwgYmUgc2VyaWFsaXplZCBhbmQgd3JhcHBlZCBpbnRvIGEgW0ZhaWx1cmVdIGV4Y2VwdGlvbi5cbiAgKilcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHRcblxuICBleGNlcHRpb24gRXhuIG9mIHRcblxuICBsZXQgXyA9IENhbGxiYWNrLnJlZ2lzdGVyX2V4Y2VwdGlvbiBcImpzRXJyb3JcIiAoRXhuIChPYmoubWFnaWMgW3x8XSkpXG5cbiAgbGV0IHJhaXNlXyA6IHQgLT4gJ2EgPSBKcy5qc19leHByIFwiKGZ1bmN0aW9uIChleG4pIHsgdGhyb3cgZXhuIH0pXCJcblxuICBleHRlcm5hbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb24gPSBcImNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvblwiXG5cbiAgZXh0ZXJuYWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4biA9IFwiY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2VcIlxuZW5kXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyLTYwXCJdXG5cbm1vZHVsZSBGb3JfY29tcGF0aWJpbGl0eV9vbmx5ID0gc3RydWN0XG4gICgqIEFkZCBwcmltaXRpdmVzIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIEV4aXN0aW5nIHVzZXJzIG1pZ2h0XG4gICAgIGRlcGVuZCBvbiBpdCAoZS5nLiBnZW5fanNfYXBpKSwgd2UgZG9udCB3YW50IHRoZSBvY2FtbCBjb21waWxlclxuICAgICB0byBjb21wbGFpbiBhYm91dCB0aGVzZXMgbWlzc2luZyBwcmltaXRpdmVzLiAqKVxuXG4gIGV4dGVybmFsIGNhbWxfanNfZnJvbV9zdHJpbmcgOiBzdHJpbmcgLT4gSnMudCA9IFwiY2FtbF9qc19mcm9tX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19ieXRlX3N0cmluZyA6IEpzLnQgLT4gc3RyaW5nID0gXCJjYW1sX2pzX3RvX2J5dGVfc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2pzX3RvX3N0cmluZyA6IEpzLnQgLT4gc3RyaW5nID0gXCJjYW1sX2pzX3RvX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X29mX2pzX2FycmF5IDogJ2EgSnMuanNfYXJyYXkgLT4gJ2EgbGlzdCA9IFwiY2FtbF9saXN0X29mX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCBjYW1sX2xpc3RfdG9fanNfYXJyYXkgOiAnYSBsaXN0IC0+ICdhIEpzLmpzX2FycmF5ID0gXCJjYW1sX2xpc3RfdG9fanNfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHZhcmlhYmxlIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX3ZhclwiXG5lbmRcblxubW9kdWxlIFR5cGVkX2FycmF5ID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdHlwZWRBcnJheSA9IEpzLnRcblxuICB0eXBlIGFycmF5QnVmZmVyID0gSnMudFxuXG4gIHR5cGUgdWludDhBcnJheSA9IEpzLnRcblxuICBleHRlcm5hbCBraW5kIDogKCdhLCAnYikgdHlwZWRBcnJheSAtPiAoJ2EsICdiKSBCaWdhcnJheS5raW5kXG4gICAgPSBcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgZnJvbV9nZW5hcnJheSA6XG4gICAgKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnQgLT4gKCdhLCAnYikgdHlwZWRBcnJheVxuICAgID0gXCJjYW1sX2JhX3RvX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCB0b19nZW5hcnJheSA6XG4gICAgKCdhLCAnYikgdHlwZWRBcnJheSAtPiAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudFxuICAgID0gXCJjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXlcIlxuXG4gIG1vZHVsZSBCaWdzdHJpbmcgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSAoY2hhciwgQmlnYXJyYXkuaW50OF91bnNpZ25lZF9lbHQsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5BcnJheTEudFxuXG4gICAgZXh0ZXJuYWwgdG9fYXJyYXlCdWZmZXIgOiB0IC0+IGFycmF5QnVmZmVyID0gXCJiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIHRvX3VpbnQ4QXJyYXkgOiB0IC0+IHVpbnQ4QXJyYXkgPSBcImJpZ3N0cmluZ190b190eXBlZF9hcnJheVwiXG5cbiAgICBleHRlcm5hbCBvZl9hcnJheUJ1ZmZlciA6IGFycmF5QnVmZmVyIC0+IHQgPSBcImJpZ3N0cmluZ19vZl9hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfdWludDhBcnJheSA6IHVpbnQ4QXJyYXkgLT4gdCA9IFwiYmlnc3RyaW5nX29mX3R5cGVkX2FycmF5XCJcbiAgZW5kXG5cbiAgZXh0ZXJuYWwgb2ZfdWludDhBcnJheSA6IHVpbnQ4QXJyYXkgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9hcnJheVwiXG5lbmRcblxubW9kdWxlIEludDY0ID0gc3RydWN0XG4gIGV4dGVybmFsIGNyZWF0ZV9pbnQ2NF9sb19taV9oaSA6IGludCAtPiBpbnQgLT4gaW50IC0+IEludDY0LnRcbiAgICA9IFwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGlcIlxuZW5kXG4iLCIoKiogQ3JlYXRlLW9ubHkgdmVyc2lvbiBvZiBbT2JqLnRdICopXG5tb2R1bGUgQW55IDogc2lnXG4gIHR5cGUgdFxuICB2YWwgYW55IDogJ2EgLT4gdFxuZW5kID0gc3RydWN0XG4gIHR5cGUgdCA9IE9iai50XG4gIGxldCBhbnkgPSBPYmoucmVwclxuZW5kXG5cbnR5cGUgJ2EgZXZhbCA9XG4gIHwgRXZhbF9ub25lXG4gIHwgRXZhbF9wcm9ncmVzc1xuICB8IEV2YWxfc29tZSBvZiAnYVxuXG50eXBlICdhIHRfID1cbiAgfCBQdXJlIG9mICdhXG4gIHwgT3BlcmF0b3IgOiB7XG4gICAgICBtdXRhYmxlIHZhbHVlIDogJ2EgZXZhbDsgKCogY2FjaGVkIHZhbHVlICopXG4gICAgICBtdXRhYmxlIHRyYWNlIDogdHJhY2U7ICgqIGxpc3Qgb2YgcGFyZW50cyB0aGlzIGNhbiBpbnZhbGlkYXRlICopXG4gICAgICBtdXRhYmxlIHRyYWNlX2lkeCA6IHRyYWNlX2lkeDsgKCogbGlzdCBvZiBkaXJlY3QgY2hpbGRyZW4gdGhhdCBjYW4gaW52YWxpZGF0ZSB0aGlzICopXG4gICAgICBkZXNjOiAnYSBkZXNjO1xuICAgIH0gLT4gJ2EgdF9cbiAgfCBSb290IDoge1xuICAgICAgbXV0YWJsZSB2YWx1ZSA6ICdhIGV2YWw7ICgqIGNhY2hlZCB2YWx1ZSAqKVxuICAgICAgbXV0YWJsZSB0cmFjZV9pZHggOiB0cmFjZV9pZHg7ICgqIGxpc3Qgb2YgZGlyZWN0IGNoaWxkcmVuIHRoYXQgY2FuIGludmFsaWRhdGUgdGhpcyAqKVxuICAgICAgbXV0YWJsZSBvbl9pbnZhbGlkYXRlIDogJ2EgLT4gdW5pdDtcbiAgICAgIG11dGFibGUgYWNxdWlyZWQgOiBib29sO1xuICAgICAgY2hpbGQgOiAnYSB0XztcbiAgICB9IC0+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+XG4gICAgaXRlciBmIHQuY2hpbGRcblxubGV0IGxlZnRfbW9zdCA6ICdhIHJvdyAtPiAnYSByb3cgb3B0aW9uID0gXG4gIGxldCByZWMgYXV4IGFjYyA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gYWNjXG4gIHwgTm9kZSBuIGFzIHNlbGYgLT4gYXV4IChTb21lIHNlbGYpIG4ubGVmdFxuICBpblxuICBmdW4gciAtPiBhdXggTm9uZSByXG5cbmxldCByZWMgcmlnaHRfbW9zdCA6ICdhIHJvdyAtPiAnYSByb3cgb3B0aW9uID0gXG4gIGxldCByZWMgYXV4IGFjYyA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gYWNjXG4gIHwgTm9kZSBuIGFzIHNlbGYgLT4gYXV4IChTb21lIHNlbGYpIG4ucmlnaHRcbiAgaW5cbiAgZnVuIHIgLT4gYXV4IE5vbmUgclxuXG5sZXQgZmlyc3QgOiAnYSB0IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCByb290IC0+IGxlZnRfbW9zdCByb290LmNoaWxkXG5cbmxldCBsYXN0IDogJ2EgdCAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3Qgcm9vdCAtPiByaWdodF9tb3N0IHJvb3QuY2hpbGRcblxubGV0IG5leHQgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gTm9uZVxuICB8IE5vZGUgbiBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggbGVmdF9tb3N0IG4ucmlnaHQgd2l0aFxuICAgIHwgU29tZSBfIGFzIHggLT4geFxuICAgIHwgTm9uZSAtPlxuICAgICAgbGV0IHJlYyB3YWxrX3Jvb3Qgc2VsZiA9IGZ1bmN0aW9uXG4gICAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBSb290IF8gLT4gTm9uZVxuICAgICAgICB8IE5vZGUgbicgYXMgcGFyZW50IC0+XG4gICAgICAgICAgaWYgbicubGVmdCA9PSBzZWxmIHRoZW4gU29tZSBwYXJlbnQgZWxzZSAoXG4gICAgICAgICAgICBhc3NlcnQgKG4nLnJpZ2h0ID09IHNlbGYpO1xuICAgICAgICAgICAgd2Fsa19yb290IHBhcmVudCBuJy5wYXJlbnRcbiAgICAgICAgICApXG4gICAgICBpblxuICAgICAgd2Fsa19yb290IHNlbGYgbi5wYXJlbnRcblxubGV0IHByZXYgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gTm9uZVxuICB8IE5vZGUgbiBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggcmlnaHRfbW9zdCBuLmxlZnQgd2l0aFxuICAgIHwgU29tZSBfIGFzIHggLT4geFxuICAgIHwgTm9uZSAtPlxuICAgICAgbGV0IHJlYyB3YWxrX3Jvb3Qgc2VsZiA9IGZ1bmN0aW9uXG4gICAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBSb290IF8gLT4gTm9uZVxuICAgICAgICB8IE5vZGUgbicgYXMgcGFyZW50IC0+XG4gICAgICAgICAgaWYgbicucmlnaHQgPT0gc2VsZiB0aGVuIFNvbWUgcGFyZW50IGVsc2UgKFxuICAgICAgICAgICAgYXNzZXJ0IChuJy5sZWZ0ID09IHNlbGYpO1xuICAgICAgICAgICAgd2Fsa19yb290IHBhcmVudCBuJy5wYXJlbnRcbiAgICAgICAgICApXG4gICAgICBpblxuICAgICAgd2Fsa19yb290IHNlbGYgbi5wYXJlbnRcbiIsIlxudHlwZSAhKydhIHQgPVxuXG5cbiAgfCBOaWxcbiAgfCBMZWFmIG9mIHsgbXV0YWJsZSBtYXJrOiBpbnQ7IHY6ICdhOyB9XG4gIHwgSm9pbiBvZiB7IG11dGFibGUgbWFyazogaW50OyBsOiAnYSB0OyByOiAnYSB0OyB9XG5cbnR5cGUgJ2Egc2VxID0gJ2EgdFxuXG5sZXQgZW1wdHkgPSBOaWxcblxubGV0IGVsZW1lbnQgdiA9IExlYWYgeyBtYXJrID0gMDsgdiB9XG5cbmxldCBtYXNrX2JpdHMgPSAyXG5cbmxldCBtYXhpIGEgYiA6IGludCA9IGlmIGIgPiBhIHRoZW4gYiBlbHNlIGFcblxubGV0IHJhbmsgPSBmdW5jdGlvblxuICB8IE5pbCAtPiAwXG4gIHwgTGVhZiB0IC0+XG4gICAgaWYgdC5tYXJrIDw+IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJMd2Rfc2VxLnJhbms6IG5vZGUgaXMgbWFya2VkXCI7XG4gICAgMFxuICB8IEpvaW4gdCAtPlxuICAgIGlmIHQubWFyayBsYW5kIG1hc2tfYml0cyA8PiAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiTHdkX3NlcS5yYW5rOiBub2RlIGlzIG1hcmtlZFwiO1xuICAgIHQubWFyayBsc3IgbWFza19iaXRzXG5cbmxldCBjb25jYXQgYSBiID0gbWF0Y2ggYSwgYiB3aXRoXG4gIHwgTmlsLCB4IHwgeCwgTmlsIC0+IHhcbiAgfCBsLCByIC0+IEpvaW4geyBtYXJrID0gKG1heGkgKHJhbmsgbCkgKHJhbmsgcikgKyAxKSBsc2wgbWFza19iaXRzOyBsOyByIH1cblxudHlwZSAoJ2EsICdiKSB2aWV3ID1cbiAgfCBFbXB0eVxuICB8IEVsZW1lbnQgb2YgJ2FcbiAgfCBDb25jYXQgb2YgJ2IgKiAnYlxuXG5sZXQgdmlldyA9IGZ1bmN0aW9uXG4gIHwgTmlsICAgIC0+IEVtcHR5XG4gIHwgTGVhZiB0IC0+IEVsZW1lbnQgdC52XG4gIHwgSm9pbiB0IC0+IENvbmNhdCAodC5sLCB0LnIpXG5cbm1vZHVsZSBCYWxhbmNlZCA6IHNpZ1xuICB0eXBlICdhIHQgPSBwcml2YXRlICdhIHNlcVxuICB2YWwgZW1wdHkgOiAnYSB0XG4gIHZhbCBlbGVtZW50IDogJ2EgLT4gJ2EgdFxuICB2YWwgY29uY2F0IDogJ2EgdCAtPiAnYSB0IC0+ICdhIHRcblxuICB2YWwgdmlldyA6ICdhIHQgLT4gKCdhLCAnYSB0KSB2aWV3XG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2Egc2VxXG5cbiAgbGV0IGVtcHR5ID0gZW1wdHlcbiAgbGV0IGVsZW1lbnQgPSBlbGVtZW50XG5cbiAgbGV0IGNoZWNrIGwgciA9IGFicyAobCAtIHIpIDw9IDFcblxuICBsZXQgcmVjIG5vZGVfbGVmdCBsIHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1sIG1yIHRoZW4gY29uY2F0IGwgciBlbHNlIG1hdGNoIGwgd2l0aFxuICAgICAgfCBOaWwgfCBMZWFmIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IEpvaW4gdCAtPlxuICAgICAgICBpZiBjaGVjayAocmFuayB0LmwpIG1sXG4gICAgICAgIHRoZW4gY29uY2F0IHQubCAobm9kZV9sZWZ0IHQuciByKVxuICAgICAgICBlbHNlIG1hdGNoIHQuciB3aXRoXG4gICAgICAgICAgfCBOaWwgfCBMZWFmIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBKb2luIHRyIC0+XG4gICAgICAgICAgICBsZXQgdHJyID0gbm9kZV9sZWZ0IHRyLnIgciBpblxuICAgICAgICAgICAgaWYgY2hlY2sgKDEgKyBtYXhpIChyYW5rIHQubCkgKHJhbmsgdHIubCkpIChyYW5rIHRycilcbiAgICAgICAgICAgIHRoZW4gY29uY2F0IChjb25jYXQgdC5sIHRyLmwpIHRyclxuICAgICAgICAgICAgZWxzZSBjb25jYXQgdC5sIChjb25jYXQgdHIubCB0cnIpXG5cbiAgbGV0IHJlYyBub2RlX3JpZ2h0IGwgciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbXIgbWwgdGhlbiBjb25jYXQgbCByIGVsc2UgbWF0Y2ggciB3aXRoXG4gICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgSm9pbiB0IC0+XG4gICAgICAgIGlmIGNoZWNrIChyYW5rIHQucikgbXJcbiAgICAgICAgdGhlbiBjb25jYXQgKG5vZGVfcmlnaHQgbCB0LmwpIHQuclxuICAgICAgICBlbHNlIG1hdGNoIHQubCB3aXRoXG4gICAgICAgICAgfCBOaWwgfCBMZWFmIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBKb2luIHRsIC0+XG4gICAgICAgICAgICBsZXQgdGxsID0gbm9kZV9yaWdodCBsIHRsLmwgaW5cbiAgICAgICAgICAgIGlmIGNoZWNrICgxICsgbWF4aSAocmFuayB0bC5yKSAocmFuayB0LnIpKSAocmFuayB0bGwpXG4gICAgICAgICAgICB0aGVuIGNvbmNhdCB0bGwgKGNvbmNhdCB0bC5yIHQucilcbiAgICAgICAgICAgIGVsc2UgY29uY2F0IChjb25jYXQgdGxsIHRsLnIpIHQuclxuXG4gIGxldCBjb25jYXQgbCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtbCBtclxuICAgIHRoZW4gY29uY2F0IGwgclxuICAgIGVsc2UgaWYgbWwgPD0gbXJcbiAgICB0aGVuIG5vZGVfcmlnaHQgbCByXG4gICAgZWxzZSBub2RlX2xlZnQgbCByXG5cbiAgbGV0IHZpZXcgPSB2aWV3XG5lbmRcblxubW9kdWxlIE1hcmtpbmcgOiBzaWdcbiAgdHlwZSBtYXJrID0gKCpwcml2YXRlKikgaW50XG4gIHZhbCBpc19zaGFyZWQgOiBtYXJrIC0+IGJvb2xcbiAgdmFsIGlzX25vdF9zaGFyZWQgOiBtYXJrIC0+IGJvb2xcbiAgdmFsIGlzX25vbmUgOiBtYXJrIC0+IGJvb2xcbiAgdmFsIGlzX2JvdGggOiBtYXJrIC0+IGJvb2xcbiAgdmFsIGlzX29sZCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfbmV3IDogbWFyayAtPiBib29sXG4gICgqdmFsIGhhc19vbGQgOiBtYXJrIC0+IGJvb2wqKVxuICAoKnZhbCBoYXNfbmV3IDogbWFyayAtPiBib29sKilcbiAgdmFsIHNldF9ib3RoIDogbWFyayAtPiBtYXJrXG4gIHZhbCB1bm1hcmsgOiBtYXJrIC0+IG1hcmtcbiAgdmFsIGdldF9pbmRleCA6IG1hcmsgLT4gaW50XG4gIHZhbCB3aXRoX2luZGV4X25ldyA6IGludCAtPiBtYXJrXG5cbiAgdHlwZSBzdGF0c1xuICB2YWwgbWFya2VkIDogc3RhdHMgLT4gaW50XG4gIHZhbCBzaGFyZWQgOiBzdGF0cyAtPiBpbnRcbiAgdmFsIGJsb2NrZWQgOiBzdGF0cyAtPiBpbnRcblxuICB0eXBlIHRyYXZlcnNhbFxuICB2YWwgb2xkX3N0YXRzIDogdHJhdmVyc2FsIC0+IHN0YXRzXG4gIHZhbCBuZXdfc3RhdHMgOiB0cmF2ZXJzYWwgLT4gc3RhdHNcblxuICB2YWwgdW5zYWZlX3RyYXZlcnNlIDogb2xkX3Jvb3Q6XyBzZXEgLT4gbmV3X3Jvb3Q6XyBzZXEgLT4gdHJhdmVyc2FsXG5cbiAgdmFsIHJlc3RvcmUgOiBfIHNlcSAtPiB1bml0XG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSBtYXJrID0gaW50XG5cbiAgbGV0IG1hc2tfbm9uZSA9IDBcbiAgbGV0IG1hc2tfb2xkICA9IDFcbiAgbGV0IG1hc2tfbmV3ICA9IDJcbiAgbGV0IG1hc2tfYm90aCA9IDNcblxuICBsZXQgaXNfc2hhcmVkIG0gPSBtID0gLTFcbiAgbGV0IGlzX25vdF9zaGFyZWQgbSA9IG0gPD4gLTFcbiAgbGV0IGlzX25vbmUgbSA9IG0gbGFuZCBtYXNrX2JvdGggPSBtYXNrX25vbmVcbiAgbGV0IGlzX2JvdGggbSA9IG0gbGFuZCBtYXNrX2JvdGggPSBtYXNrX2JvdGhcbiAgbGV0IGlzX29sZCAgbSA9IG0gbGFuZCBtYXNrX2JvdGggPSBtYXNrX29sZFxuICBsZXQgaXNfbmV3ICBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfbmV3XG4gICgqbGV0IGhhc19vbGQgbSA9IG0gbGFuZCBtYXNrX29sZCA8PiAwKilcbiAgKCpsZXQgaGFzX25ldyBtID0gbSBsYW5kIG1hc2tfbmV3IDw+IDAqKVxuICBsZXQgc2V0X2JvdGggbSA9IG0gbG9yIG1hc2tfYm90aFxuXG4gIGxldCBnZXRfaW5kZXggbSA9IG0gbHNyIG1hc2tfYml0c1xuICBsZXQgd2l0aF9pbmRleF9uZXcgaW5kZXggPSAoaW5kZXggbHNsIG1hc2tfYml0cykgbG9yIG1hc2tfbmV3XG5cbiAgbGV0IHVubWFyayBtID0gbSBsYW5kIGxub3QgbWFza19ib3RoXG5cbiAgdHlwZSBzdGF0cyA9IHtcbiAgICBtdXRhYmxlIG1hcmtlZDogaW50O1xuICAgIG11dGFibGUgc2hhcmVkOiBpbnQ7XG4gICAgbXV0YWJsZSBibG9ja2VkOiBpbnQ7XG4gIH1cbiAgbGV0IG1hcmtlZCBzID0gcy5tYXJrZWRcbiAgbGV0IHNoYXJlZCBzID0gcy5zaGFyZWRcbiAgbGV0IGJsb2NrZWQgcyA9IHMuYmxvY2tlZFxuXG4gIGxldCBta19zdGF0cyAoKSA9IHsgbWFya2VkID0gMDsgc2hhcmVkID0gMDsgYmxvY2tlZCA9IDAgfVxuXG4gIGxldCBuZXdfbWFya2VkIHN0YXRzID0gc3RhdHMubWFya2VkIDwtIHN0YXRzLm1hcmtlZCArIDFcbiAgbGV0IG5ld19zaGFyZWQgc3RhdHMgPSBzdGF0cy5zaGFyZWQgPC0gc3RhdHMuc2hhcmVkICsgMVxuICBsZXQgbmV3X2Jsb2NrZWQgc3RhdHMgPSBzdGF0cy5ibG9ja2VkIDwtIHN0YXRzLmJsb2NrZWQgKyAxXG5cbiAgbGV0IHJlYyBibG9jayBzdGF0cyBtYXNrID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgTGVhZiB0JyAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IG1hc2tfYm90aCAmJiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IDBcbiAgICAgIHRoZW4gKFxuICAgICAgICBpZiBtYXJrIGxhbmQgbWFzayA9IDAgdGhlbiBuZXdfbWFya2VkIHN0YXRzIGVsc2UgYXNzZXJ0IGZhbHNlO1xuICAgICAgICBuZXdfYmxvY2tlZCBzdGF0cztcbiAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrX2JvdGhcbiAgICAgIClcbiAgICB8IEpvaW4gdCcgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiBtYXNrX2JvdGggJiYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiAwXG4gICAgICB0aGVuIChcbiAgICAgICAgaWYgbWFyayBsYW5kIG1hc2sgPSAwIHRoZW4gbmV3X21hcmtlZCBzdGF0cyBlbHNlIGFzc2VydCBmYWxzZTtcbiAgICAgICAgbmV3X2Jsb2NrZWQgc3RhdHM7XG4gICAgICAgIHQnLm1hcmsgPC0gbWFyayBsb3IgbWFza19ib3RoO1xuICAgICAgICBibG9jayBzdGF0cyBtYXNrIHQnLmw7XG4gICAgICAgIGJsb2NrIHN0YXRzIG1hc2sgdCcucjtcbiAgICAgIClcblxuICBsZXQgZW5xdWV1ZSBzdGF0cyBxIG1hc2sgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBMZWFmIHQnIC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgbGFuZCBtYXNrID0gMCB0aGVuIChcbiAgICAgICAgKCogTm90IHlldCBzZWVuICopXG4gICAgICAgIG5ld19tYXJrZWQgc3RhdHM7XG4gICAgICAgIGlmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gMCB0aGVuIChcbiAgICAgICAgICAoKiBOZXdseSBzaGFyZWQsIGNsZWFyIG1hc2sgKilcbiAgICAgICAgICB0Jy5tYXJrIDwtIC0xO1xuICAgICAgICAgIG5ld19ibG9ja2VkIHN0YXRzO1xuICAgICAgICAgIG5ld19zaGFyZWQgc3RhdHM7XG4gICAgICAgICkgZWxzZVxuICAgICAgICAgIHQnLm1hcmsgPC0gbWFyayBsb3IgbWFzaztcbiAgICAgICk7XG4gICAgICBpZiBtYXJrIDw+IC0xICYmIG1hcmsgbGFuZCBtYXNrX2JvdGggPSBtYXNrX2JvdGggdGhlbiAoXG4gICAgICAgIHQnLm1hcmsgPC0gLTE7XG4gICAgICAgIG5ld19zaGFyZWQgc3RhdHNcbiAgICAgIClcbiAgICB8IEpvaW4gdCcgYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrIGxhbmQgbWFzayA9IDAgdGhlbiAoXG4gICAgICAgICgqIE5vdCB5ZXQgc2VlbiAqKVxuICAgICAgICBuZXdfbWFya2VkIHN0YXRzO1xuICAgICAgICBpZiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IDAgdGhlbiAoXG4gICAgICAgICAgKCogTmV3bHkgc2hhcmVkLCBjbGVhciBtYXNrICopXG4gICAgICAgICAgdCcubWFyayA8LSAtMTtcbiAgICAgICAgICBuZXdfYmxvY2tlZCBzdGF0cztcbiAgICAgICAgICBuZXdfc2hhcmVkIHN0YXRzO1xuICAgICAgICAgIGJsb2NrIHN0YXRzIG1hc2sgdCcubDtcbiAgICAgICAgICBibG9jayBzdGF0cyBtYXNrIHQnLnI7XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogRmlyc3QgbWFyayAqKVxuICAgICAgICAgIHQnLm1hcmsgPC0gbWFyayBsb3IgbWFzaztcbiAgICAgICAgICBRdWV1ZS5wdXNoIHQgcVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaWYgbWFyayA8PiAtMSAmJiBtYXJrIGxhbmQgbWFza19ib3RoID0gbWFza19ib3RoIHRoZW4gKFxuICAgICAgICB0Jy5tYXJrIDwtIC0xO1xuICAgICAgICBuZXdfc2hhcmVkIHN0YXRzXG4gICAgICApXG5cbiAgbGV0IGRlcXVldWUgc3RhdHMgcSBtYXNrID1cbiAgICBtYXRjaCBRdWV1ZS5wb3AgcSB3aXRoXG4gICAgfCBKb2luIHQgLT5cbiAgICAgIGlmIHQubWFyayBsYW5kIG1hc2tfYm90aCA9IG1hc2sgdGhlbiAoXG4gICAgICAgIGVucXVldWUgc3RhdHMgcSBtYXNrIHQubDtcbiAgICAgICAgZW5xdWV1ZSBzdGF0cyBxIG1hc2sgdC5yO1xuICAgICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICBsZXQgdHJhdmVyc2UxIHN0YXRzIHEgbWFzayA9XG4gICAgd2hpbGUgbm90IChRdWV1ZS5pc19lbXB0eSBxKSBkb1xuICAgICAgZGVxdWV1ZSBzdGF0cyBxIG1hc2tcbiAgICBkb25lXG5cbiAgbGV0IHJlYyB0cmF2ZXJzZSBzb2xkIHNuZXcgcW9sZCBxbmV3ID1cbiAgICBpZiBRdWV1ZS5pc19lbXB0eSBxb2xkIHRoZW5cbiAgICAgIHRyYXZlcnNlMSBzbmV3IHFuZXcgbWFza19uZXdcbiAgICBlbHNlIGlmIFF1ZXVlLmlzX2VtcHR5IHFuZXcgdGhlblxuICAgICAgdHJhdmVyc2UxIHNvbGQgcW9sZCBtYXNrX29sZFxuICAgIGVsc2UgKFxuICAgICAgZGVxdWV1ZSBzb2xkIHFvbGQgbWFza19vbGQ7XG4gICAgICBkZXF1ZXVlIHNuZXcgcW5ldyBtYXNrX25ldztcbiAgICAgIHRyYXZlcnNlIHNvbGQgc25ldyBxb2xkIHFuZXdcbiAgICApXG5cbiAgdHlwZSB0cmF2ZXJzYWwgPSB7XG4gICAgb2xkX3N0YXRzOiBzdGF0cztcbiAgICBuZXdfc3RhdHM6IHN0YXRzO1xuICB9XG5cbiAgbGV0IG9sZF9zdGF0cyB0ciA9IHRyLm9sZF9zdGF0c1xuICBsZXQgbmV3X3N0YXRzIHRyID0gdHIubmV3X3N0YXRzXG5cbiAgbGV0IHVuc2FmZV90cmF2ZXJzZSB+b2xkX3Jvb3Qgfm5ld19yb290ID1cbiAgICBsZXQgb2xkX3N0YXRzID0gbWtfc3RhdHMgKCkgaW5cbiAgICBsZXQgbmV3X3N0YXRzID0gbWtfc3RhdHMgKCkgaW5cbiAgICBsZXQgb2xkX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgbGV0IG5ld19xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGVucXVldWUgb2xkX3N0YXRzIG9sZF9xdWV1ZSBtYXNrX29sZCBvbGRfcm9vdDtcbiAgICBlbnF1ZXVlIG5ld19zdGF0cyBuZXdfcXVldWUgbWFza19uZXcgbmV3X3Jvb3Q7XG4gICAgdHJhdmVyc2Ugb2xkX3N0YXRzIG5ld19zdGF0cyBvbGRfcXVldWUgbmV3X3F1ZXVlO1xuICAgIHtvbGRfc3RhdHM7IG5ld19zdGF0c31cblxuICBsZXQgcmVzdG9yZSA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IExlYWYgdCAtPiB0Lm1hcmsgPC0gMFxuICAgIHwgSm9pbiB0IC0+XG4gICAgICB0Lm1hcmsgPC0gKG1heGkgKHJhbmsgdC5sKSAocmFuayB0LnIpICsgMSkgbHNsIG1hc2tfYml0c1xuZW5kXG5cbigqIE1hcmtzIGdvIHRocm91Z2ggbWFueSBzdGF0ZXMuXG5cbiAgIEEgbWFyayBpcyB1c3VhbGx5IHNwbGl0IGluIHR3byBwYXJ0czpcbiAgIC0gdGhlIG1hc2ssIG1hZGUgb2YgdGhlIHR3byBsZWFzdCBzaWduaWZpY2FudCBiaXRzXG4gICAtIHRoZSBpbmRleCBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1lZCBvZiBhbGwgdGhlIHJlbWFpbmluZyBiaXRzXG5cbiAgIFRoZSBleGNlcHRpb24gaXMgdGhlIGRpc3Rpbmd1aXNoZWQgbWFzayB3aXRoIHZhbHVlIC0xIChhbGwgYml0cyBzZXQgdG8gMSlcbiAgIHRoYXQgZGVub3RlIGEgXCJsb2NrZWRcIiBub2RlLlxuXG4gICBXaGVuIHRoZSBtYXNrIGlzIDAsIHRoZSBpbmRleCBkZW5vdGVzIHRoZSByYW5rIG9mIHRoZSBub2RlOiB0aGUgZGVwdGggb2ZcbiAgIHRoZSB0cmVlIHJvb3RlZCBhdCB0aGlzIG5vZGUuXG4gICBXaGVuIHRoZSBtYXNrIGlzIG5vbi16ZXJvLCB0aGUgaW5kZXggbWVhbmluZyBpcyBsZWZ0IHRvIHRoZSB0cmF2ZXJzYWxcbiAgIGFsZ29yaXRobS5cbiAgIFJlc3RvcmluZyB0aGUgbWFyayBzZXRzIHRoZSBtYXNrIHRvIDAgYW5kIHRoZSBpbmRleHQgdG8gdGhlIHJhbmssXG4gICBidXQgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSBjaGlsZHJlbiBvZiB0aGUgbm9kZSBhcmUgdGhlbXNlbHZlcyByZXN0b3JlZC5cbiopXG5cbm1vZHVsZSBSZWR1Y2VyID0gc3RydWN0XG4gIHR5cGUgKCsnYSwgJ2IpIHhmb3JtID1cbiAgICB8IFhFbXB0eVxuICAgIHwgWExlYWYgb2YgeyBhOiAnYSB0OyBtdXRhYmxlIGI6ICdiIG9wdGlvbjsgfVxuICAgIHwgWEpvaW4gb2YgeyBhOiAnYSB0OyBtdXRhYmxlIGI6ICdiIG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgbDogKCdhLCAnYikgeGZvcm07IHI6ICgnYSwgJ2IpIHhmb3JtOyB9XG5cbiAgdHlwZSAoJ2EsICdiKSB1bm1hcmtfc3RhdGUgPSB7XG4gICAgZHJvcHBlZCA6ICdiIG9wdGlvbiBhcnJheTtcbiAgICBtdXRhYmxlIGRyb3BwZWRfbGVhZiA6IGludDtcbiAgICBtdXRhYmxlIGRyb3BwZWRfam9pbiA6IGludDtcbiAgICBzaGFyZWQgOiAnYSBzZXEgYXJyYXk7XG4gICAgc2hhcmVkX3ggOiAoJ2EsICdiKSB4Zm9ybSBsaXN0IGFycmF5O1xuICAgIG11dGFibGUgc2hhcmVkX2luZGV4OiBpbnQ7XG4gIH1cblxuICBsZXQgbmV4dF9zaGFyZWRfaW5kZXggc3QgPVxuICAgIGxldCByZXN1bHQgPSBzdC5zaGFyZWRfaW5kZXggaW5cbiAgICBzdC5zaGFyZWRfaW5kZXggPC0gcmVzdWx0ICsgMTtcbiAgICByZXN1bHRcblxuICBsZXQgcmVjIHVuYmxvY2sgPSBmdW5jdGlvblxuICAgIHwgWEVtcHR5IC0+ICgpXG4gICAgfCBYTGVhZiB7YSA9IE5pbCB8IEpvaW4gXzsgX30gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBYSm9pbiB7YSA9IE5pbCB8IExlYWYgXzsgX30gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBYTGVhZiB7YSA9IExlYWYgdCc7IF99IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfbm90X3NoYXJlZCBtYXJrICYmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW5cbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgIHwgWEpvaW4ge2EgPSBKb2luIHQnOyBsOyByOyBffSAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX25vdF9zaGFyZWQgbWFyayAmJiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICB1bmJsb2NrIGw7XG4gICAgICAgIHVuYmxvY2sgclxuICAgICAgKVxuXG4gIGxldCByZWMgdW5tYXJrX29sZCBzdCA9IGZ1bmN0aW9uXG4gICAgfCBYRW1wdHkgLT4gKClcbiAgICB8IFhMZWFmIHthID0gTmlsIHwgSm9pbiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFhKb2luIHthID0gTmlsIHwgTGVhZiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFhMZWFmIHthID0gTGVhZiB0JyBhcyBhOyBifSBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfb2xkIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBkcm9wcGVkX2xlYWYgPSBzdC5kcm9wcGVkX2xlYWYgaW5cbiAgICAgICAgaWYgZHJvcHBlZF9sZWFmID4gLTEgdGhlbiAoXG4gICAgICAgICAgc3QuZHJvcHBlZC4oZHJvcHBlZF9sZWFmKSA8LSBiO1xuICAgICAgICAgIHN0LmRyb3BwZWRfbGVhZiA8LSBkcm9wcGVkX2xlYWYgKyAxO1xuICAgICAgICAgIGFzc2VydCAoc3QuZHJvcHBlZF9sZWFmIDw9IHN0LmRyb3BwZWRfam9pbik7XG4gICAgICAgICk7XG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFya1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfc2hhcmVkIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG5leHRfc2hhcmVkX2luZGV4IHN0IGluXG4gICAgICAgIHN0LnNoYXJlZC4oaW5kZXgpIDwtIGE7XG4gICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0gW3RdO1xuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcud2l0aF9pbmRleF9uZXcgaW5kZXg7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19uZXcgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gTWFya2luZy5nZXRfaW5kZXggbWFyayBpblxuICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIHQgOjogc3Quc2hhcmVkX3guKGluZGV4KTtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICgqdCcubWFyayA8LSBtYXJrIGxhbmQgbG5vdCBib3RoX21hc2sqKVxuICAgICAgKVxuICAgIHwgWEpvaW4ge2EgPSBKb2luIHQnIGFzIGE7IGw7IHI7IGJ9IGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19zaGFyZWQgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbmV4dF9zaGFyZWRfaW5kZXggc3QgaW5cbiAgICAgICAgc3Quc2hhcmVkLihpbmRleCkgPC0gYTtcbiAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSBbdF07XG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy53aXRoX2luZGV4X25ldyBpbmRleDtcbiAgICAgICAgdW5ibG9jayBsO1xuICAgICAgICB1bmJsb2NrIHI7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19vbGQgbWFyayB0aGVuIChcbiAgICAgICAgaWYgc3QuZHJvcHBlZF9qb2luID4gLTEgdGhlbiAoXG4gICAgICAgICAgbGV0IGRyb3BwZWRfam9pbiA9IHN0LmRyb3BwZWRfam9pbiAtIDEgaW5cbiAgICAgICAgICBzdC5kcm9wcGVkLihkcm9wcGVkX2pvaW4pIDwtIGI7XG4gICAgICAgICAgc3QuZHJvcHBlZF9qb2luIDwtIGRyb3BwZWRfam9pbjtcbiAgICAgICAgICBhc3NlcnQgKHN0LmRyb3BwZWRfbGVhZiA8PSBzdC5kcm9wcGVkX2pvaW4pO1xuICAgICAgICApO1xuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgIHVubWFya19vbGQgc3QgbDtcbiAgICAgICAgdW5tYXJrX29sZCBzdCByO1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfbmV3IG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG1hcmsgbHNyIG1hc2tfYml0cyBpblxuICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIHQgOjogc3Quc2hhcmVkX3guKGluZGV4KTtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICApXG5cbiAgbGV0IHByZXBhcmVfc2hhcmVkIHN0ID1cbiAgICBmb3IgaSA9IDAgdG8gc3Quc2hhcmVkX2luZGV4IC0gMSBkb1xuICAgICAgYmVnaW4gbWF0Y2ggc3Quc2hhcmVkLihpKSB3aXRoXG4gICAgICAgIHwgTmlsIC0+ICgpXG4gICAgICAgIHwgTGVhZiB0IC0+IHQubWFyayA8LSBNYXJraW5nLnNldF9ib3RoIHQubWFya1xuICAgICAgICB8IEpvaW4gdCAtPiB0Lm1hcmsgPC0gTWFya2luZy5zZXRfYm90aCB0Lm1hcmtcbiAgICAgIGVuZDtcbiAgICAgIG1hdGNoIHN0LnNoYXJlZF94LihpKSB3aXRoXG4gICAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBbX10gLT4gKClcbiAgICAgIHwgeHMgLT4gc3Quc2hhcmVkX3guKGkpIDwtIExpc3QucmV2IHhzXG4gICAgZG9uZVxuXG4gIGxldCByZWMgdW5tYXJrX25ldyBzdCA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gWEVtcHR5XG4gICAgfCBMZWFmIHQnIGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19ub3Rfc2hhcmVkIG1hcmsgJiYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG1hcmsgbHNyIG1hc2tfYml0cyBpblxuICAgICAgICBtYXRjaCBzdC5zaGFyZWRfeC4oaW5kZXgpIHdpdGhcbiAgICAgICAgfCBbXSAtPiBYTGVhZiB7YSA9IHQ7IGIgPSBOb25lfVxuICAgICAgICB8IHggOjogeHMgLT4gc3Quc2hhcmVkX3guKGluZGV4KSA8LSB4czsgeFxuICAgICAgKSBlbHNlIChcbiAgICAgICAgdCcubWFyayA8LSAwO1xuICAgICAgICBYTGVhZiB7YSA9IHQ7IGIgPSBOb25lfVxuICAgICAgKVxuICAgIHwgSm9pbiB0JyBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgPSAtMSB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbmV4dF9zaGFyZWRfaW5kZXggc3QgaW5cbiAgICAgICAgdCcubWFyayA8LSAwO1xuICAgICAgICBzdC5zaGFyZWQuKGluZGV4KSA8LSB0O1xuICAgICAgICBsZXQgbCA9IHVubWFya19uZXcgc3QgdCcubCBpblxuICAgICAgICBsZXQgciA9IHVubWFya19uZXcgc3QgdCcuciBpblxuICAgICAgICBYSm9pbiB7YSA9IHQ7IGIgPSBOb25lOyBsOyByfVxuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBtYXJrIGxzciBtYXNrX2JpdHMgaW5cbiAgICAgICAgbWF0Y2ggc3Quc2hhcmVkX3guKGluZGV4KSB3aXRoXG4gICAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgeCA6OiB4cyAtPlxuICAgICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0geHM7XG4gICAgICAgICAgaWYgeHMgPT0gW10gdGhlbiB0Jy5tYXJrIDwtIDA7XG4gICAgICAgICAgeFxuICAgICAgKSBlbHNlIChcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayB0Jy5tYXJrO1xuICAgICAgICBsZXQgbCA9IHVubWFya19uZXcgc3QgdCcubCBpblxuICAgICAgICBsZXQgciA9IHVubWFya19uZXcgc3QgdCcuciBpblxuICAgICAgICBYSm9pbiB7YSA9IHQ7IGIgPSBOb25lOyBsOyByfVxuICAgICAgKVxuXG4gIHR5cGUgJ2IgZHJvcHBlZCA9IHtcbiAgICBsZWF2ZXM6IGludDtcbiAgICB0YWJsZTogJ2Igb3B0aW9uIGFycmF5O1xuICAgIGV4dHJhX2xlYWY6ICdiIGxpc3Q7XG4gICAgZXh0cmFfam9pbjogJ2IgbGlzdDtcbiAgfVxuXG4gIGxldCBub19kcm9wcGVkID1cbiAgICB7IGxlYXZlcyA9IDA7IHRhYmxlID0gW3x8XTsgZXh0cmFfbGVhZiA9IFtdOyBleHRyYV9qb2luID0gW10gfVxuXG4gIGxldCBkaWZmIGdldF9kcm9wcGVkIHhvbGQgdG5ldyA9IG1hdGNoIHhvbGQsIHRuZXcgd2l0aFxuICAgIHwgWEVtcHR5LCBOaWwgLT4gbm9fZHJvcHBlZCwgWEVtcHR5XG4gICAgfCAoWExlYWYge2E7IF99IHwgWEpvaW4ge2E7IF99KSwgXyB3aGVuIGEgPT0gdG5ldyAtPiBub19kcm9wcGVkLCB4b2xkXG4gICAgfCBfIC0+XG4gICAgICBsZXQgdHJhdmVyc2FsID1cbiAgICAgICAgTWFya2luZy51bnNhZmVfdHJhdmVyc2VcbiAgICAgICAgICB+b2xkX3Jvb3Q6KG1hdGNoIHhvbGQgd2l0aFxuICAgICAgICAgICAgICB8IFhFbXB0eSAtPiBlbXB0eVxuICAgICAgICAgICAgICB8IChYTGVhZiB7YTsgX30gfCBYSm9pbiB7YTsgX30pIC0+IGFcbiAgICAgICAgICAgIClcbiAgICAgICAgICB+bmV3X3Jvb3Q6dG5ld1xuICAgICAgaW5cbiAgICAgIGxldCBzb2xkID0gTWFya2luZy5vbGRfc3RhdHMgdHJhdmVyc2FsIGluXG4gICAgICBsZXQgc25ldyA9IE1hcmtpbmcubmV3X3N0YXRzIHRyYXZlcnNhbCBpblxuICAgICAgbGV0IG5iX2Ryb3BwZWQgPVxuICAgICAgICBNYXJraW5nLm1hcmtlZCBzb2xkIC0gKE1hcmtpbmcuYmxvY2tlZCBzb2xkICsgTWFya2luZy5ibG9ja2VkIHNuZXcpXG4gICAgICBpblxuICAgICAgbGV0IG5iX3NoYXJlZCA9XG4gICAgICAgIE1hcmtpbmcuc2hhcmVkIHNvbGQgKyBNYXJraW5nLnNoYXJlZCBzbmV3XG4gICAgICBpblxuICAgICAgbGV0IHN0ID0ge1xuICAgICAgICBkcm9wcGVkID0gaWYgZ2V0X2Ryb3BwZWQgdGhlbiBBcnJheS5tYWtlIG5iX2Ryb3BwZWQgTm9uZSBlbHNlIFt8fF07XG4gICAgICAgIGRyb3BwZWRfbGVhZiA9IGlmIGdldF9kcm9wcGVkIHRoZW4gMCBlbHNlIC0gMTtcbiAgICAgICAgZHJvcHBlZF9qb2luID0gaWYgZ2V0X2Ryb3BwZWQgdGhlbiBuYl9kcm9wcGVkIGVsc2UgLSAxO1xuICAgICAgICBzaGFyZWQgPSBBcnJheS5tYWtlIG5iX3NoYXJlZCBOaWw7XG4gICAgICAgIHNoYXJlZF94ID0gQXJyYXkubWFrZSBuYl9zaGFyZWQgW107XG4gICAgICAgIHNoYXJlZF9pbmRleCA9IDA7XG4gICAgICB9IGluXG4gICAgICAoKlByaW50Zi5lcHJpbnRmIFwic29sZC5zaGFyZWQ6JWQgc29sZC5tYXJrZWQ6JWQgc29sZC5ibG9ja2VkOiVkXFxuJSFcIlxuICAgICAgICBzb2xkLnNoYXJlZCBzb2xkLm1hcmtlZCBzb2xkLmJsb2NrZWQ7XG4gICAgICBQcmludGYuZXByaW50ZiBcInNuZXcuc2hhcmVkOiVkIHNuZXcubWFya2VkOiVkIHNuZXcuYmxvY2tlZDolZFxcbiUhXCJcbiAgICAgICAgc25ldy5zaGFyZWQgc25ldy5tYXJrZWQgc25ldy5ibG9ja2VkOyopXG4gICAgICB1bm1hcmtfb2xkIHN0IHhvbGQ7XG4gICAgICBhc3NlcnQgKHN0LmRyb3BwZWRfbGVhZiA9IHN0LmRyb3BwZWRfam9pbik7XG4gICAgICBwcmVwYXJlX3NoYXJlZCBzdDtcbiAgICAgIGxldCByZXN1bHQgPSB1bm1hcmtfbmV3IHN0IHRuZXcgaW5cbiAgICAgICgqUHJpbnRmLmVwcmludGYgXCJuZXdfY29tcHV0ZWQ6JWQlIVxcblwiICFuZXdfY29tcHV0ZWQ7KilcbiAgICAgIGZvciBpID0gc3Quc2hhcmVkX2luZGV4IC0gMSBkb3dudG8gMCBkb1xuICAgICAgICBNYXJraW5nLnJlc3RvcmUgc3Quc2hhcmVkLihpKVxuICAgICAgZG9uZTtcbiAgICAgIGlmIGdldF9kcm9wcGVkIHRoZW4gKFxuICAgICAgICBsZXQgeGxlYWYgPSByZWYgW10gaW5cbiAgICAgICAgbGV0IHhqb2luID0gcmVmIFtdIGluXG4gICAgICAgIGZvciBpID0gMCB0byBzdC5zaGFyZWRfaW5kZXggLSAxIGRvXG4gICAgICAgICAgTGlzdC5pdGVyIChmdW5jdGlvblxuICAgICAgICAgICAgICB8IFhMZWFmIHsgYiA9IFNvbWUgYjsgX30gLT4geGxlYWYgOj0gYiA6OiAheGxlYWZcbiAgICAgICAgICAgICAgfCBYSm9pbiB7IGIgPSBTb21lIGI7IF99IC0+IHhqb2luIDo9IGIgOjogIXhqb2luXG4gICAgICAgICAgICAgIHwgXyAtPiAoKVxuICAgICAgICAgICAgKSBzdC5zaGFyZWRfeC4oaSlcbiAgICAgICAgZG9uZTtcbiAgICAgICAgKHsgbGVhdmVzID0gc3QuZHJvcHBlZF9sZWFmO1xuICAgICAgICAgICB0YWJsZSA9IHN0LmRyb3BwZWQ7XG4gICAgICAgICAgIGV4dHJhX2xlYWYgPSAheGxlYWY7XG4gICAgICAgICAgIGV4dHJhX2pvaW4gPSAheGpvaW4gfSwgcmVzdWx0KVxuICAgICAgKSBlbHNlXG4gICAgICAgIG5vX2Ryb3BwZWQsIHJlc3VsdFxuXG4gIHR5cGUgKCdhLCAnYikgbWFwX3JlZHVjZSA9IHtcbiAgICBtYXA6ICdhIC0+ICdiO1xuICAgIHJlZHVjZTogJ2IgLT4gJ2IgLT4gJ2I7XG4gIH1cblxuICBsZXQgZXZhbCBtYXBfcmVkdWNlID0gZnVuY3Rpb25cbiAgICB8IFhFbXB0eSAtPiBOb25lXG4gICAgfCBvdGhlciAtPlxuICAgICAgbGV0IHJlYyBhdXggPSBmdW5jdGlvblxuICAgICAgICB8IFhFbXB0eSB8IFhMZWFmIHthID0gTmlsIHwgSm9pbiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBYTGVhZiB7YiA9IFNvbWUgYjsgX30gfCBYSm9pbiB7YiA9IFNvbWUgYjsgX30gLT4gYlxuICAgICAgICB8IFhMZWFmICh7YSA9IExlYWYgdCc7XyB9IGFzIHQpIC0+XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IG1hcF9yZWR1Y2UubWFwIHQnLnYgaW5cbiAgICAgICAgICB0LmIgPC0gU29tZSByZXN1bHQ7XG4gICAgICAgICAgcmVzdWx0XG4gICAgICAgIHwgWEpvaW4gdCAtPlxuICAgICAgICAgIGxldCBsID0gYXV4IHQubCBhbmQgciA9IGF1eCB0LnIgaW5cbiAgICAgICAgICBsZXQgcmVzdWx0ID0gbWFwX3JlZHVjZS5yZWR1Y2UgbCByIGluXG4gICAgICAgICAgdC5iIDwtIFNvbWUgcmVzdWx0O1xuICAgICAgICAgIHJlc3VsdFxuICAgICAgaW5cbiAgICAgIFNvbWUgKGF1eCBvdGhlcilcblxuICB0eXBlICgnYSwgJ2IpIHJlZHVjZXIgPSAoJ2EsICdiKSBtYXBfcmVkdWNlICogKCdhLCAnYikgeGZvcm1cblxuICBsZXQgbWFrZSB+bWFwIH5yZWR1Y2UgPSAoe21hcDsgcmVkdWNlfSwgWEVtcHR5KVxuXG4gIGxldCByZWR1Y2UgKG1hcF9yZWR1Y2UsIHRyZWUgOiBfIHJlZHVjZXIpID1cbiAgICBldmFsIG1hcF9yZWR1Y2UgdHJlZVxuXG4gIGxldCB1cGRhdGUgKG1hcF9yZWR1Y2UsIG9sZF90cmVlIDogXyByZWR1Y2VyKSBuZXdfdHJlZSA6IF8gcmVkdWNlciA9XG4gICAgbGV0IF8sIHRyZWUgPSBkaWZmIGZhbHNlIG9sZF90cmVlIG5ld190cmVlIGluXG4gICAgKG1hcF9yZWR1Y2UsIHRyZWUpXG5cbiAgbGV0IHVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQgKG1hcF9yZWR1Y2UsIG9sZF90cmVlIDogXyByZWR1Y2VyKSBuZXdfdHJlZVxuICAgIDogXyBkcm9wcGVkICogXyByZWR1Y2VyID1cbiAgICBsZXQgZHJvcHBlZCwgdHJlZSA9IGRpZmYgdHJ1ZSBvbGRfdHJlZSBuZXdfdHJlZSBpblxuICAgIChkcm9wcGVkLCAobWFwX3JlZHVjZSwgdHJlZSkpXG5cbiAgbGV0IGZvbGRfZHJvcHBlZCBraW5kIGYgZHJvcHBlZCBhY2MgPVxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgbGV0IHN0YXJ0LCBib3VuZCA9IG1hdGNoIGtpbmQgd2l0aFxuICAgICAgfCBgQWxsICAgIC0+IDAsIEFycmF5Lmxlbmd0aCBkcm9wcGVkLnRhYmxlXG4gICAgICB8IGBNYXAgICAgLT4gMCwgZHJvcHBlZC5sZWF2ZXNcbiAgICAgIHwgYFJlZHVjZSAtPiBkcm9wcGVkLmxlYXZlcywgQXJyYXkubGVuZ3RoIGRyb3BwZWQudGFibGVcbiAgICBpblxuICAgIGZvciBpID0gc3RhcnQgdG8gYm91bmQgLSAxIGRvXG4gICAgICBtYXRjaCBkcm9wcGVkLnRhYmxlLihpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSB4IC0+IGFjYyA6PSBmIHggIWFjY1xuICAgIGRvbmU7XG4gICAgYmVnaW4gbWF0Y2gga2luZCB3aXRoXG4gICAgICB8IGBBbGwgfCBgTWFwIC0+XG4gICAgICAgIExpc3QuaXRlciAoZnVuIHggLT4gYWNjIDo9IGYgeCAhYWNjKSBkcm9wcGVkLmV4dHJhX2xlYWZcbiAgICAgIHwgYFJlZHVjZSAtPiAoKVxuICAgIGVuZDtcbiAgICBiZWdpbiBtYXRjaCBraW5kIHdpdGhcbiAgICAgIHwgYEFsbCB8IGBSZWR1Y2UgLT5cbiAgICAgICAgTGlzdC5pdGVyIChmdW4geCAtPiBhY2MgOj0gZiB4ICFhY2MpIGRyb3BwZWQuZXh0cmFfam9pblxuICAgICAgfCBgTWFwIC0+ICgpXG4gICAgZW5kO1xuICAgICFhY2NcbmVuZFxuXG4oKiBMd2QgaW50ZXJmYWNlICopXG5cbmxldCByZWMgcHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2UgPSBmdW5jdGlvblxuICB8IE5pbCAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiB0IC0+IG1hcCB0LnZcbiAgfCBKb2luIHQgLT5cbiAgICByZWR1Y2VcbiAgICAgIChwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSB0LmwpXG4gICAgICAocHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2UgdC5yKVxuXG5sZXQgZm9sZCB+bWFwIH5yZWR1Y2Ugc2VxID1cbiAgbWF0Y2ggTHdkLmlzX3B1cmUgc2VxIHdpdGhcbiAgfCBTb21lIE5pbCAtPiBMd2QucHVyZSBOb25lXG4gIHwgU29tZSBvdGhlciAtPiBMd2QucHVyZSAoU29tZSAocHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2Ugb3RoZXIpKVxuICB8IE5vbmUgLT5cbiAgICBsZXQgcmVkdWNlciA9IHJlZiAoUmVkdWNlci5tYWtlIH5tYXAgfnJlZHVjZSkgaW5cbiAgICBMd2QubWFwIHNlcSB+ZjpiZWdpbiBmdW4gc2VxIC0+XG4gICAgICBsZXQgcmVkdWNlcicgPSBSZWR1Y2VyLnVwZGF0ZSAhcmVkdWNlciBzZXEgaW5cbiAgICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgICBSZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJ1xuICAgIGVuZFxuXG5sZXQgZm9sZF9tb25vaWQgbWFwICh6ZXJvLCByZWR1Y2UpIHNlcSA9XG4gIG1hdGNoIEx3ZC5pc19wdXJlIHNlcSB3aXRoXG4gIHwgU29tZSBOaWwgLT4gTHdkLnB1cmUgemVyb1xuICB8IFNvbWUgb3RoZXIgLT4gTHdkLnB1cmUgKHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlIG90aGVyKVxuICB8IE5vbmUgLT5cbiAgICBsZXQgcmVkdWNlciA9IHJlZiAoUmVkdWNlci5tYWtlIH5tYXAgfnJlZHVjZSkgaW5cbiAgICBMd2QubWFwIHNlcSB+ZjpiZWdpbiBmdW4gc2VxIC0+XG4gICAgICBsZXQgcmVkdWNlcicgPSBSZWR1Y2VyLnVwZGF0ZSAhcmVkdWNlciBzZXEgaW5cbiAgICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgICBtYXRjaCBSZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJyB3aXRoXG4gICAgICB8IE5vbmUgLT4gemVyb1xuICAgICAgfCBTb21lIHggLT4geFxuICAgIGVuZFxuXG5sZXQgbW9ub2lkID0gKGVtcHR5LCBjb25jYXQpXG5cbmxldCB0cmFuc2Zvcm1fbGlzdCBscyBmID1cbiAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgZiBtb25vaWQgbHNcblxubGV0IG9mX2xpc3QgbHMgPSB0cmFuc2Zvcm1fbGlzdCBscyBlbGVtZW50XG5cbmxldCByZWMgb2Zfc3ViX2FycmF5IGYgYXJyIGkgaiA9XG4gIGlmIGogPCBpIHRoZW4gZW1wdHlcbiAgZWxzZSBpZiBqID0gaSB0aGVuIGYgYXJyLihpKVxuICBlbHNlXG4gICAgbGV0IGsgPSBpICsgKGogLSBpKSAvIDIgaW5cbiAgICBjb25jYXQgKG9mX3N1Yl9hcnJheSBmIGFyciBpIGspIChvZl9zdWJfYXJyYXkgZiBhcnIgKGsgKyAxKSBqKVxuXG5sZXQgdHJhbnNmb3JtX2FycmF5IGFyciBmID0gb2Zfc3ViX2FycmF5IGYgYXJyIDAgKEFycmF5Lmxlbmd0aCBhcnIgLSAxKVxuXG5sZXQgb2ZfYXJyYXkgYXJyID0gdHJhbnNmb3JtX2FycmF5IGFyciBlbGVtZW50XG5cbmxldCB0b19saXN0IHggPVxuICBsZXQgcmVjIGZvbGQgeCBhY2MgPSBtYXRjaCB4IHdpdGhcbiAgICB8IE5pbCAtPiBhY2NcbiAgICB8IExlYWYgdCAtPiB0LnYgOjogYWNjXG4gICAgfCBKb2luIHQgLT4gZm9sZCB0LmwgKGZvbGQgdC5yIGFjYylcbiAgaW5cbiAgZm9sZCB4IFtdXG5cbmxldCB0b19hcnJheSB4ID1cbiAgbGV0IHJlYyBjb3VudCA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gMFxuICAgIHwgTGVhZiBfIC0+IDFcbiAgICB8IEpvaW4gdCAtPiBjb3VudCB0LmwgKyBjb3VudCB0LnJcbiAgaW5cbiAgbWF0Y2ggY291bnQgeCB3aXRoXG4gIHwgMCAtPiBbfHxdXG4gIHwgbiAtPlxuICAgIGxldCByZWMgZmlyc3QgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IExlYWYgdCAtPiB0LnZcbiAgICAgIHwgSm9pbiB0IC0+IGZpcnN0IHQubFxuICAgIGluXG4gICAgbGV0IGZpcnN0ID0gZmlyc3QgeCBpblxuICAgIGxldCBhcnIgPSBBcnJheS5tYWtlIG4gZmlyc3QgaW5cbiAgICBsZXQgcmVjIGZvbGQgaSA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiBpXG4gICAgICB8IExlYWYgdCAtPiBhcnIuKGkpIDwtIHQudjsgaSArIDFcbiAgICAgIHwgSm9pbiB0IC0+XG4gICAgICAgIGxldCBpID0gZm9sZCBpIHQubCBpblxuICAgICAgICBsZXQgaSA9IGZvbGQgaSB0LnIgaW5cbiAgICAgICAgaVxuICAgIGluXG4gICAgbGV0IF8gOiBpbnQgPSBmb2xkIDAgeCBpblxuICAgIGFyclxuXG5sZXQgbHdkX2VtcHR5IDogJ2EgdCBMd2QudCA9IEx3ZC5wdXJlIE5pbFxubGV0IGx3ZF9tb25vaWQgOiAnYS4gJ2EgdCBMd2QudCBMd2RfdXRpbHMubW9ub2lkID1cbiAgKGx3ZF9lbXB0eSwgZnVuIHggeSAtPiBMd2QubWFwMiB+Zjpjb25jYXQgeCB5KVxuXG5sZXQgbWFwIGYgc2VxID1cbiAgZm9sZF9tb25vaWQgKGZ1biB4IC0+IGVsZW1lbnQgKGYgeCkpIG1vbm9pZCBzZXFcblxubGV0IGZpbHRlciBmIHNlcSA9XG4gIGZvbGRfbW9ub2lkIChmdW4geCAtPiBpZiBmIHggdGhlbiBlbGVtZW50IHggZWxzZSBlbXB0eSkgbW9ub2lkIHNlcVxuXG5sZXQgZmlsdGVyX21hcCBmIHNlcSA9XG4gIGxldCBzZWxlY3QgeCA9IG1hdGNoIGYgeCB3aXRoXG4gICAgfCBTb21lIHkgLT4gZWxlbWVudCB5XG4gICAgfCBOb25lIC0+IGVtcHR5XG4gIGluXG4gIGZvbGRfbW9ub2lkIHNlbGVjdCBtb25vaWQgc2VxXG5cbmxldCBiaW5kIChzZXEgOiAnYSBzZXEgTHdkLnQpIChmIDogJ2EgLT4gJ2Igc2VxIEx3ZC50KSAgOiAnYiBzZXEgTHdkLnQgPVxuICBMd2Quam9pbiAoZm9sZF9tb25vaWQgZiBsd2RfbW9ub2lkIHNlcSlcblxubGV0IHNlcV9iaW5kIChzZXEgOiAnYSBzZXEgTHdkLnQpIChmIDogJ2EgLT4gJ2Igc2VxKSAgOiAnYiBzZXEgTHdkLnQgPVxuICBmb2xkX21vbm9pZCBmIG1vbm9pZCBzZXFcblxubGV0IGxpZnQgKHNlcSA6ICdhIEx3ZC50IHNlcSBMd2QudCkgOiAnYSBzZXEgTHdkLnQgPVxuICBiaW5kIHNlcSAoTHdkLm1hcCB+ZjplbGVtZW50KVxuXG5tb2R1bGUgQmFsYW5jZWRUcmVlIDogc2lnXG4gIHR5cGUgJ2EgdCA9XG4gICAgfCBMZWFmXG4gICAgfCBOb2RlIG9mIHtcbiAgICAgICAgcmFuazogaW50O1xuICAgICAgICBsOiAnYSB0O1xuICAgICAgICB4OiBpbnQgKiAnYSBzZXE7XG4gICAgICAgIHI6ICdhIHQ7XG4gICAgICAgIG11dGFibGUgc2VxOiAnYSBzZXE7XG4gICAgICB9XG4gIHZhbCBsZWFmIDogJ2EgdFxuICAoKnZhbCBub2RlIDogJ2EgdCAtPiBpbnQgKiAnYSBzZXEgLT4gJ2EgdCAtPiAnYSB0KilcblxuICB2YWwgaW5zZXJ0IDogY21wOignYSAtPiAnYSAtPiBpbnQpIC0+IGludCAtPiAnYSBzZXEgLT4gJ2EgdCAtPiAnYSB0XG4gICgqdmFsIHVuaW9uIDogY21wOignYSAtPiAnYSAtPiBpbnQpIC0+ICdhIHQgLT4gJ2EgdCAtPiAnYSB0KilcbmVuZCA9IHN0cnVjdFxuICB0eXBlICdhIHQgPVxuICAgIHwgTGVhZlxuICAgIHwgTm9kZSBvZiB7XG4gICAgICAgIHJhbms6IGludDtcbiAgICAgICAgbDogJ2EgdDtcbiAgICAgICAgeDogaW50ICogJ2Egc2VxO1xuICAgICAgICByOiAnYSB0O1xuICAgICAgICBtdXRhYmxlIHNlcTogJ2Egc2VxO1xuICAgICAgfVxuXG4gIGxldCBsZWFmID0gTGVhZlxuXG4gIGxldCByYW5rID0gZnVuY3Rpb25cbiAgICB8IExlYWYgLT4gMFxuICAgIHwgTm9kZSB0IC0+IHQucmFua1xuXG4gIGxldCBjaGVjayBsIHIgPSBhYnMgKGwgLSByKSA8PSAxXG5cbiAgbGV0IG5vZGUgbCB4IHIgPVxuICAgIE5vZGUge2w7IHg7IHI7IHNlcSA9IGVtcHR5OyByYW5rID0gbWF4aSAocmFuayBsKSAocmFuayByKSArIDF9XG5cbiAgbGV0IHJlYyBub2RlX2xlZnQgbCB4IHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1sIG1yIHRoZW4gbm9kZSBsIHggciBlbHNlIG1hdGNoIGwgd2l0aFxuICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBOb2RlIHQgLT5cbiAgICAgICAgaWYgY2hlY2sgKHJhbmsgdC5sKSBtbFxuICAgICAgICB0aGVuIG5vZGUgdC5sIHQueCAobm9kZV9sZWZ0IHQuciB4IHIpXG4gICAgICAgIGVsc2UgbWF0Y2ggdC5yIHdpdGhcbiAgICAgICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBOb2RlIHRyIC0+XG4gICAgICAgICAgICBsZXQgdHJyID0gbm9kZV9sZWZ0IHRyLnIgeCByIGluXG4gICAgICAgICAgICBpZiBjaGVjayAoMSArIG1heGkgKHJhbmsgdC5sKSAocmFuayB0ci5sKSkgKHJhbmsgdHJyKVxuICAgICAgICAgICAgdGhlbiBub2RlIChub2RlIHQubCB0LnggdHIubCkgdHIueCB0cnJcbiAgICAgICAgICAgIGVsc2Ugbm9kZSB0LmwgdC54IChub2RlIHRyLmwgdHIueCB0cnIpXG5cbiAgbGV0IHJlYyBub2RlX3JpZ2h0IGwgeCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtciBtbCB0aGVuIG5vZGUgbCB4IHIgZWxzZSBtYXRjaCByIHdpdGhcbiAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTm9kZSB0IC0+XG4gICAgICAgIGlmIGNoZWNrIChyYW5rIHQucikgbXJcbiAgICAgICAgdGhlbiBub2RlIChub2RlX3JpZ2h0IGwgeCB0LmwpIHQueCB0LnJcbiAgICAgICAgZWxzZSBtYXRjaCB0Lmwgd2l0aFxuICAgICAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IE5vZGUgdGwgLT5cbiAgICAgICAgICAgIGxldCB0bGwgPSBub2RlX3JpZ2h0IGwgeCB0bC5sIGluXG4gICAgICAgICAgICBpZiBjaGVjayAoMSArIG1heGkgKHJhbmsgdGwucikgKHJhbmsgdC5yKSkgKHJhbmsgdGxsKVxuICAgICAgICAgICAgdGhlbiBub2RlIHRsbCB0bC54IChub2RlIHRsLnIgdC54IHQucilcbiAgICAgICAgICAgIGVsc2Ugbm9kZSAobm9kZSB0bGwgdGwueCB0bC5yKSB0LnggdC5yXG5cbiAgbGV0IG5vZGUgbCB4IHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1sIG1yXG4gICAgdGhlbiBub2RlIGwgeCByXG4gICAgZWxzZSBpZiBtbCA8PSBtclxuICAgIHRoZW4gbm9kZV9yaWdodCBsIHggclxuICAgIGVsc2Ugbm9kZV9sZWZ0IGwgeCByXG5cbiAgbGV0IHJlYyBqb2luIGwgciA9IG1hdGNoIGwsIHIgd2l0aFxuICAgIHwgTGVhZiwgdCB8IHQsIExlYWYgLT4gdFxuICAgIHwgTm9kZSB0bCwgTm9kZSB0ciAtPlxuICAgICAgaWYgdGwucmFuayA8PSB0ci5yYW5rIHRoZW5cbiAgICAgICAgbm9kZSAoam9pbiBsIHRyLmwpIHRyLnggdHIuclxuICAgICAgZWxzZVxuICAgICAgICBub2RlIHRsLmwgdGwueCAoam9pbiB0bC5yIHIpXG5cbiAgbGV0IGdldF9lbGVtZW50ID0gZnVuY3Rpb25cbiAgICB8IE5pbCB8IEpvaW4gXyAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IExlYWYge3Y7X30gLT4gdlxuXG4gICgqbGV0IHJlYyBzcGxpdCB+Y21wIGsgPSBmdW5jdGlvblxuICAgIHwgTGVhZiAtPiBMZWFmLCAwLCBMZWFmXG4gICAgfCBOb2RlIHQgLT5cbiAgICAgIGxldCBjID0gY21wIGsgKGdldF9lbGVtZW50IChzbmQgKHQueCkpKSBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICBsZXQgbCcsIHYnLCByJyA9IHNwbGl0IH5jbXAgayB0LmwgaW5cbiAgICAgICAgbCcsIHYnLCBqb2luIHInIHQuclxuICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgIGxldCBsJywgdicsIHInID0gc3BsaXQgfmNtcCBrIHQuciBpblxuICAgICAgICBqb2luIHQubCBsJywgdicsIHInXG4gICAgICBlbHNlXG4gICAgICAgICh0LmwsIGZzdCB0LngsIHQucilcblxuICBsZXQgcmVjIHVuaW9uIH5jbXAgdDEgdDIgPVxuICAgIG1hdGNoIHQxLCB0MiB3aXRoXG4gICAgfCBMZWFmLCB0IHwgdCwgTGVhZiAtPiB0XG4gICAgfCBOb2RlIHQxLCB0MiAgLT5cbiAgICAgIGxldCBtMSwgazEgPSB0MS54IGluXG4gICAgICBsZXQgbDIsIG0yLCByMiA9IHNwbGl0IH5jbXAgKGdldF9lbGVtZW50IGsxKSB0MiBpblxuICAgICAgbGV0IGwnID0gdW5pb24gfmNtcCB0MS5sIGwyIGluXG4gICAgICBsZXQgcicgPSB1bmlvbiB+Y21wIHQxLnIgcjIgaW5cbiAgICAgIGxldCBtID0gbTEgKyBtMiBpblxuICAgICAgaWYgbSA9IDAgdGhlblxuICAgICAgICBqb2luIGwnIHInXG4gICAgICBlbHNlIChcbiAgICAgICAgYXNzZXJ0IChtID4gMCk7XG4gICAgICAgIG5vZGUgbCcgKG0sIGsxKSByJztcbiAgICAgIClcbiAgICAqKVxuXG4gIGxldCBpbnNlcnQgfmNtcCBtMSBzIHQgPVxuICAgIGFzc2VydCAobTEgPD4gMCk7XG4gICAgbGV0IHJlYyBhdXggPSBmdW5jdGlvblxuICAgICAgfCBMZWFmIC0+IG5vZGUgTGVhZiAobTEsIHMpIExlYWZcbiAgICAgIHwgTm9kZSB0IC0+XG4gICAgICAgIGxldCBtMiwgeCA9IHQueCBpblxuICAgICAgICBsZXQgYyA9IGNtcCAoZ2V0X2VsZW1lbnQgcykgKGdldF9lbGVtZW50IHgpIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICBsZXQgbSA9IG0xICsgbTIgaW5cbiAgICAgICAgICBpZiBtID0gMCB0aGVuXG4gICAgICAgICAgICBqb2luIHQubCB0LnJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBub2RlIHQubCAobSwgeCkgdC5yXG4gICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgIGxldCBsJyA9IGF1eCB0LmwgaW5cbiAgICAgICAgICBub2RlIGwnIHQueCB0LnJcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxldCByJyA9IGF1eCB0LnIgaW5cbiAgICAgICAgICBub2RlIHQubCB0LnggcidcbiAgICBpblxuICAgIGF1eCB0XG5lbmRcblxubGV0IHJlYyBzZXFfb2ZfdHJlZSA9IGZ1bmN0aW9uXG4gIHwgQmFsYW5jZWRUcmVlLkxlYWYgLT4gZW1wdHlcbiAgfCBCYWxhbmNlZFRyZWUuTm9kZSB0IC0+XG4gICAgbWF0Y2ggdC5zZXEgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICBsZXQgc2wgPSBzZXFfb2ZfdHJlZSB0LmwgaW5cbiAgICAgIGxldCBzciA9IHNlcV9vZl90cmVlIHQuciBpblxuICAgICAgYXNzZXJ0IChmc3QgdC54ID4gMCk7XG4gICAgICBsZXQgc2VxID0gY29uY2F0IHNsIChjb25jYXQgKHNuZCB0LngpIHNyKSBpblxuICAgICAgdC5zZXEgPC0gc2VxO1xuICAgICAgc2VxXG4gICAgfCBzZXEgLT4gc2VxXG5cbmxldCBzb3J0X3VuaXEgY21wIHNlcSA9XG4gIGxldCBwcmV2aW91c19zZXEgPSByZWYgZW1wdHkgaW5cbiAgbGV0IHByZXZpb3VzX3RyZWUgPSByZWYgQmFsYW5jZWRUcmVlLmxlYWYgaW5cbiAgbGV0IGYgbmV3X3NlcSA9XG4gICAgbGV0IG9sZF9zZXEgPSAhcHJldmlvdXNfc2VxIGluXG4gICAgbGV0IG9sZF90cmVlID0gIXByZXZpb3VzX3RyZWUgaW5cbiAgICBsZXQgXyA9IE1hcmtpbmcudW5zYWZlX3RyYXZlcnNlIH5vbGRfcm9vdDpvbGRfc2VxIH5uZXdfcm9vdDpuZXdfc2VxIGluXG4gICAgbGV0IHJlYyB1bmJsb2NrID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+ICgpXG4gICAgICB8IExlYWYgdCAtPiB0Lm1hcmsgPC0gTWFya2luZy51bm1hcmsgdC5tYXJrXG4gICAgICB8IEpvaW4gdCBhcyBzZXEgLT5cbiAgICAgICAgbGV0IG1hcmsgPSB0Lm1hcmsgaW5cbiAgICAgICAgdW5ibG9jayB0Lmw7XG4gICAgICAgIHVuYmxvY2sgdC5yO1xuICAgICAgICBpZiBNYXJraW5nLmlzX3NoYXJlZCBtYXJrIHRoZW4gKFxuICAgICAgICAgIE1hcmtpbmcucmVzdG9yZSBzZXE7XG4gICAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgICB0Lm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgKSBlbHNlXG4gICAgICAgICAgYXNzZXJ0IChNYXJraW5nLmlzX25vbmUgbWFyaylcbiAgICBpblxuICAgIGxldCByZWMgdW5tYXJrX25ldyB0cmVlID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+IHRyZWVcbiAgICAgIHwgTGVhZiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICB0Lm1hcmsgPC0gMDtcbiAgICAgICAgaWYgTWFya2luZy5pc19uZXcgbWFyayB0aGVuXG4gICAgICAgICAgQmFsYW5jZWRUcmVlLmluc2VydCB+Y21wICgrMSkgc2VxIHRyZWVcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgYXNzZXJ0IChNYXJraW5nLmlzX2JvdGggbWFyayB8fCBNYXJraW5nLmlzX25vbmUgbWFyayk7XG4gICAgICAgICAgdHJlZVxuICAgICAgICApXG4gICAgICB8IEpvaW4gdCBhcyBzZXEgLT5cbiAgICAgICAgbGV0IG1hcmsgPSB0Lm1hcmsgaW5cbiAgICAgICAgaWYgTWFya2luZy5pc19uZXcgbWFyayB0aGVuIChcbiAgICAgICAgICB0Lm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgICB1bm1hcmtfbmV3ICh1bm1hcmtfbmV3IHRyZWUgdC5sKSB0LnJcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICB1bmJsb2NrIHNlcTtcbiAgICAgICAgICB0cmVlXG4gICAgICAgIClcbiAgICBpblxuICAgIGxldCByZWMgdW5tYXJrX29sZCB0cmVlID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+IHRyZWVcbiAgICAgIHwgTGVhZiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICB0Lm1hcmsgPC0gMDtcbiAgICAgICAgaWYgTWFya2luZy5pc19vbGQgbWFyayB0aGVuXG4gICAgICAgICAgQmFsYW5jZWRUcmVlLmluc2VydCB+Y21wICgtMSkgc2VxIHRyZWVcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgYXNzZXJ0IChNYXJraW5nLmlzX2JvdGggbWFyayB8fCBNYXJraW5nLmlzX25vbmUgbWFyayk7XG4gICAgICAgICAgdHJlZVxuICAgICAgICApXG4gICAgICB8IEpvaW4gdCBhcyBzZXEgLT5cbiAgICAgICAgbGV0IG1hcmsgPSB0Lm1hcmsgaW5cbiAgICAgICAgaWYgTWFya2luZy5pc19vbGQgbWFyayB0aGVuIChcbiAgICAgICAgICB0Lm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgICB1bm1hcmtfb2xkICh1bm1hcmtfb2xkIHRyZWUgdC5sKSB0LnJcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICB1bmJsb2NrIHNlcTtcbiAgICAgICAgICB0cmVlXG4gICAgICAgIClcbiAgICBpblxuICAgIGxldCBuZXdfdHJlZSA9IHVubWFya19vbGQgKHVubWFya19uZXcgb2xkX3RyZWUgbmV3X3NlcSkgb2xkX3NlcSBpblxuICAgIHByZXZpb3VzX3NlcSA6PSBuZXdfc2VxO1xuICAgIHByZXZpb3VzX3RyZWUgOj0gbmV3X3RyZWU7XG4gICAgc2VxX29mX3RyZWUgbmV3X3RyZWVcbiAgaW5cbiAgTHdkLm1hcCBzZXEgfmZcbiIsIm9wZW4hIEltcG9ydFxub3BlbiBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2Rcbm1vZHVsZSBBID0gQXR0cnNcblxudHlwZSAnYSB2YWxpZGF0aW9uID0gT2sgb2YgJ2EgfCBFcnJvciBvZiBzdHJpbmcgfCBFbXB0eVxudHlwZSBsYWJlbCA9IEVsd2QudCBFbHdkLmNvbFxudHlwZSAnYSBkZXNjID0geyBuYW1lIDogc3RyaW5nOyBkZWZhdWx0IDogJ2E7IGxhYmVsIDogbGFiZWwgfVxuXG4oKiBBIGZvcm0gZmllbGQgaXMgY29tcG9zZWQgb2Y6XG4gICAtIEFuIGh0bWwgaW5wdXQgZWxlbWVudCB3aXRoIHBvdGVudGlhbCB2YWxpZGF0aW9uIHZpYSBhdHRyaWJ1dGVzXG4gICAtIEEgdmFsaWRhdGlvbiBmdW5jdGlvbiB0aGF0IHJlcGxhY2Ugb3IgY29tcGxldGUgdGhlIHN0YW5kYXJkIHZhbGlkYXRpb25cbiAgIC0gQSBmdW5jdGlvbiB0aGF0IHJldGlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCAqKVxudHlwZSAnYSB0ID0ge1xuICBlbHQgOiBFbHdkLnQgTHdkLnQ7XG4gIHZhbHVlIDogJ2Egb3B0aW9uIEx3ZC52YXI7XG4gIHZhbGlkYXRlIDogJ2EgLT4gJ2EgdmFsaWRhdGlvbjtcbn1cblxubGV0IGdldF92YWx1ZSB0ID1cbiAgbGV0IGp2ID0gRWwudG9fanYgdCBpblxuICBKdi5nZXQganYgXCJ2YWx1ZVwiXG5cbmxldCBtYWtlX2hhbmRsZXIgfih2YWx1ZSA6IEp2LnQgLT4gJ2EpIH4odmFsdWVfY2hhbmdlX2V2ZW50IDogXyBFdi50eXBlJylcbiAgICBkZWZhdWx0X3ZhbHVlID1cbiAgbGV0IHZhciA9IEx3ZC52YXIgZGVmYXVsdF92YWx1ZSBpblxuICBsZXQgb25fY2hhbmdlID1cbiAgICBFbHdkLmhhbmRsZXIgdmFsdWVfY2hhbmdlX2V2ZW50IChmdW4gZXYgLT5cbiAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgIGxldCB2ID0gSnYuZ2V0IHQgXCJ2YWx1ZVwiIGluXG4gICAgICAgIEx3ZC5zZXQgdmFyIChTb21lICh2YWx1ZSB2KSkpXG4gIGluXG4gIChvbl9jaGFuZ2UsIHZhcilcblxuKCogVE9ETzogaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gc3BsaXQgdGhlIHZhbGlkYXRpb24gYXBydCBmcm9tIHRoZSBmaWVsZFxuICAgY3JlYXRpb24uIFZhbGlkYXRpb24gbWFrZSBtb3JlIHNlbnNlIGluIHRoZSBjYXNlIG9mIGEgZm9ybS4gVGhlcmUgaXMgYW5cbiAgIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdGV4dCBpbnB1dHMgaW4gYEZpZWxkX3RleHRpbnB1dGAgdGhhdCBzaG91bGRcbiAgIGJlIHVzZWQgaW5zdGVhZC4gKilcbmxldCBtYWtlX2lucHV0IH4odmFsdWUgOiBKdi50IC0+ICdhKSA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXZcbiAgICA/KHJlcXVpcmVkID0gZmFsc2UpIH52YWx1ZV9jaGFuZ2VfZXZlbnQgP3BhdHRlcm4gfnR5cGUnIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgdHlwZScgPSBBdC50eXBlJyAoSnN0ci52IHR5cGUnKSBpblxuICBsZXQgYXQgPSBgUCB0eXBlJyA6OiBhdCBpblxuICBsZXQgYXQgPVxuICAgIGF0IHw+IEEuYWRkX2Jvb2wgQXQucmVxdWlyZWQgcmVxdWlyZWQgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGF0dGVybiBwYXR0ZXJuXG4gIGluXG4gIGxldCB2YWxpZGF0ZSA9IE9wdGlvbi52YWx1ZSB2YWxpZGF0ZSB+ZGVmYXVsdDooZnVuIHYgLT4gT2sgdikgaW5cbiAgbGV0IG9uX2NoYW5nZSwgdmFsdWUgPVxuICAgIG1ha2VfaGFuZGxlciB+dmFsdWUgfnZhbHVlX2NoYW5nZV9ldmVudCBkZWZhdWx0X3ZhbHVlXG4gIGluXG4gIGxldCBldiA9IGBQIG9uX2NoYW5nZSA6OiBPcHRpb24udG9fbGlzdCBldiBpblxuICBsZXQgZWx0ID0gRWx3ZC5pbnB1dCA/ZCB+YXQgfmV2ICgpIGluXG4gIHsgZWx0OyB2YWx1ZTsgdmFsaWRhdGUgfVxuXG5sZXQgdGV4dF9pbnB1dCA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXYgP3JlcXVpcmVkID9wYXR0ZXJuID9wbGFjZWhvbGRlclxuICAgIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgYXQgPVxuICAgIGF0XG4gICAgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGxhY2Vob2xkZXIgcGxhY2Vob2xkZXJcbiAgICB8PiBBLmFkZF9vcHQgQXQuTmFtZS52YWx1ZSBkZWZhdWx0X3ZhbHVlXG4gIGluXG4gIGxldCB2YWx1ZSA9IEp2LnRvX3N0cmluZyBpblxuICBtYWtlX2lucHV0IH52YWx1ZSA/dmFsaWRhdGUgP2QgfmF0ID9ldiA/cmVxdWlyZWQgP3BhdHRlcm5cbiAgICB+dmFsdWVfY2hhbmdlX2V2ZW50OkV2LmtleXVwIH50eXBlJzpcInRleHRcIiBkZWZhdWx0X3ZhbHVlXG5cbmxldCBwYXNzd29yZF9pbnB1dCA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXYgP3JlcXVpcmVkID9wYXR0ZXJuID9wbGFjZWhvbGRlclxuICAgIF92YWx1ZSA9XG4gIGxldCBhdCA9IGF0IHw+IEEuYWRkX29wdCBBdC5OYW1lLnBsYWNlaG9sZGVyIHBsYWNlaG9sZGVyIGluXG4gIGxldCB2YWx1ZSA9IEp2LnRvX3N0cmluZyBpblxuICBtYWtlX2lucHV0IH52YWx1ZSB+dmFsdWVfY2hhbmdlX2V2ZW50OkV2LmtleXVwID92YWxpZGF0ZSA/ZCB+YXQgP2V2ID9yZXF1aXJlZFxuICAgID9wYXR0ZXJuIH50eXBlJzpcInBhc3N3b3JkXCIgTm9uZVxuXG5sZXQgc3VibWl0ID9kID8oYXQgPSBbXSkgP2V2IHRleHQgPVxuICBsZXQgYXQgPSBBLmFkZCBBdC5OYW1lLnZhbHVlIHRleHQgYXQgaW5cbiAgKCogVE9ETyB0aGlzIHNob3VsZCBiZSBtb3JlIHByZWNpc2UuIFN1Ym1pdCBpbnB1dHMgYXJlIGRpZmZlcmVudC4gKilcbiAgbWFrZV9pbnB1dCB+dmFsdWU6aWdub3JlIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYuY2hhbmdlID9kIH5hdCA/ZXZcbiAgICB+dHlwZSc6XCJzdWJtaXRcIiBOb25lXG4iLCJvcGVuIEJyclxub3BlbiBFbFxuXG50eXBlIHQgPSBFbC50XG5cbnR5cGUgJ2EgY29sID0gW1xuICB8IGBQIG9mICdhXG4gICgqKiBQdXJlIGVsZW1lbnQgKilcbiAgfCBgUiBvZiAnYSBMd2QudFxuICAoKiogUmVhY3RpdmUgZWxlbWVudCAqKVxuICB8IGBTIG9mICdhIEx3ZF9zZXEudCBMd2QudFxuICAoKiogUmVhY3RpdmUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgKilcbl0gbGlzdFxuKCoqIERlc2NyaWJpbmcgY29sbGVjdGlvbnMgb2YgZWxlbWVudHMgKilcblxudHlwZSBoYW5kbGVyID0gSGFuZGxlciA6IHtcbiAgICBvcHRzOiBFdi5saXN0ZW5fb3B0cyBvcHRpb247XG4gICAgdHlwZSc6ICdhIEV2LnR5cGUnO1xuICAgIGZ1bmM6ICdhIEV2LnQgLT4gdW5pdDtcbiAgfSAtPiBoYW5kbGVyXG5cbmxldCBoYW5kbGVyID9vcHRzIHR5cGUnIGZ1bmMgPVxuICBIYW5kbGVyIHtvcHRzOyB0eXBlJzsgZnVuY31cblxubGV0IGlzX3B1cmVfZWxlbWVudCA9IGZ1bmN0aW9uXG4gIHwgYFAgXyAtPiB0cnVlXG4gIHwgYFIgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcbiAgfCBgUyB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgZXh0cmFjdF9wdXJlX2VsZW1lbnQgeCA9IE9wdGlvbi5nZXQgKEx3ZC5pc19wdXJlIHgpXG5cbmxldCBleHRyYWN0X3B1cmVfZWxlbWVudHMgeHMgPVxuICBMaXN0LmZsYXR0ZW4gKFxuICAgIExpc3QubWFwIChmdW5jdGlvblxuICAgICAgICB8IGBQIHggLT4gW3hdXG4gICAgICAgIHwgYFIgeCAtPiBbZXh0cmFjdF9wdXJlX2VsZW1lbnQgeF1cbiAgICAgICAgfCBgUyB4IC0+IEx3ZF9zZXEudG9fbGlzdCAoZXh0cmFjdF9wdXJlX2VsZW1lbnQgeClcbiAgICAgICkgeHNcbiAgKVxuXG5sZXQgcHJlcGFyZV9jb2wgOiBfIGNvbCAtPiBfID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXSwgW11cbiAgfCBjb2wgLT5cbiAgICBsZXQgcHVyZSwgaW1wdXJlID0gTGlzdC5wYXJ0aXRpb24gaXNfcHVyZV9lbGVtZW50IGNvbCBpblxuICAgIGV4dHJhY3RfcHVyZV9lbGVtZW50cyBwdXJlLCBpbXB1cmVcblxuKCoqIFJlYWN0aXZlIHNlcXVlbmNlIG9mIGVsZW1lbnRzICopXG5cbmxldCBjb25zdW1lX2NoaWxkcmVuID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXSwgTm9uZVxuICB8IFtgUCB4XSAtPiBbeF0sIE5vbmVcbiAgfCBbYFMgeF0gLT4gW10sIFNvbWUgeFxuICB8IFtgUiB4XSAtPiBbXSwgU29tZSAoTHdkLm1hcCB+ZjpMd2Rfc2VxLmVsZW1lbnQgeClcbiAgfCBjb2wgLT5cbiAgICBpZiBMaXN0LmZvcl9hbGwgaXNfcHVyZV9lbGVtZW50IGNvbFxuICAgIHRoZW5cbiAgICAgIExpc3QuZmxhdHRlbiAoXG4gICAgICAgIExpc3QubWFwIChmdW5jdGlvblxuICAgICAgICAgICAgfCBgUCB4IC0+IFt4XVxuICAgICAgICAgICAgfCBgUiB4IC0+IFtleHRyYWN0X3B1cmVfZWxlbWVudCB4XVxuICAgICAgICAgICAgfCBgUyB4IC0+IEx3ZF9zZXEudG9fbGlzdCAoZXh0cmFjdF9wdXJlX2VsZW1lbnQgeClcbiAgICAgICAgICApXG4gICAgICAgICAgY29sXG4gICAgICApLCBOb25lXG4gICAgZWxzZSBbXSwgU29tZSAoXG4gICAgICAgIEx3ZF91dGlscy5tYXBfcmVkdWNlIChmdW5jdGlvblxuICAgICAgICAgICAgfCBgUCB4IC0+IEx3ZC5wdXJlIChMd2Rfc2VxLmVsZW1lbnQgeClcbiAgICAgICAgICAgIHwgYFIgeCAtPiBMd2QubWFwIH5mOkx3ZF9zZXEuZWxlbWVudCB4XG4gICAgICAgICAgICB8IGBTIHggLT4geFxuICAgICAgICAgICkgTHdkX3NlcS5sd2RfbW9ub2lkXG4gICAgICAgICAgY29sXG4gICAgICApXG5cbnR5cGUgY2hpbGRfdHJlZSA9XG4gIHwgTGVhZiBvZiBFbC50XG4gIHwgSW5uZXIgb2YgeyBtdXRhYmxlIGJvdW5kOiBKdi50O1xuICAgICAgICAgICAgICAgbGVmdDogY2hpbGRfdHJlZTsgcmlnaHQ6IGNoaWxkX3RyZWU7IH1cblxubGV0IGNoaWxkX25vZGUgbm9kZSA9IExlYWYgbm9kZVxuXG5sZXQgY2hpbGRfam9pbiBsZWZ0IHJpZ2h0ID0gSW5uZXIgeyBib3VuZCA9IEp2Lm51bGw7IGxlZnQ7IHJpZ2h0IH1cblxubGV0IGp2X3BhcmVudE5vZGUgPSBKc3RyLnYgXCJwYXJlbnROb2RlXCJcbmxldCBqdl9uZXh0U2libGluZyA9IEpzdHIudiBcIm5leHRTaWJsaW5nXCJcbmxldCBqdl9hcHBlbmQgPSBKc3RyLnYgXCJhcHBlbmRcIlxubGV0IGp2X2JlZm9yZSA9IEpzdHIudiBcImJlZm9yZVwiXG5sZXQganZfcmVtb3ZlID0gSnN0ci52IFwicmVtb3ZlXCJcbmxldCBqdl9jb250YWlucyA9IEpzdHIudiBcImNvbnRhaW5zXCJcblxubGV0IGp2X3RvUmVtb3ZlID1cbiAgSnN0ci52IFwibHdkLXRvLXJlbW92ZVwiICgqIEhBQ0sgQ291bGQgYmUgdHVybmVkIGludG8gYSBKYXZhc2NyaXB0IHN5bWJvbCAqKVxuXG5sZXQgY29udGFpbnNfZm9jdXMgbm9kZSA9XG4gIG1hdGNoIEJyci5Eb2N1bWVudC5hY3RpdmVfZWwgKEJyci5FbC5kb2N1bWVudCBub2RlKSB3aXRoXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgZWwgLT5cbiAgICBKdi50b19ib29sIChKdi5jYWxsJyAoRWwudG9fanYgbm9kZSkganZfY29udGFpbnMgW3xFbC50b19qdiBlbHxdKVxuXG5sZXQgdXBkYXRlX2NoaWxkcmVuXG4gICAgKHNlbGYgOiBFbC50KVxuICAgIChjaGlsZHJlbiA6IEVsLnQgTHdkX3NlcS50IEx3ZC50KSA6IEVsLnQgTHdkLnQgPVxuICBsZXQgcmVkdWNlciA9XG4gICAgcmVmIChMd2Rfc2VxLlJlZHVjZXIubWFrZSB+bWFwOmNoaWxkX25vZGUgfnJlZHVjZTpjaGlsZF9qb2luKVxuICBpblxuICBMd2QubWFwIGNoaWxkcmVuIH5mOmJlZ2luIGZ1biBjaGlsZHJlbiAtPlxuICAgIGxldCBkcm9wcGVkLCByZWR1Y2VyJyA9XG4gICAgICBMd2Rfc2VxLlJlZHVjZXIudXBkYXRlX2FuZF9nZXRfZHJvcHBlZCAhcmVkdWNlciBjaGlsZHJlbiBpblxuICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgbGV0IHNjaGVkdWxlX2Zvcl9yZW1vdmFsIGNoaWxkICgpID0gbWF0Y2ggY2hpbGQgd2l0aFxuICAgICAgfCBMZWFmIG5vZGUgLT4gSnYuc2V0JyAoRWwudG9fanYgbm9kZSkganZfdG9SZW1vdmUgSnYudHJ1ZSc7XG4gICAgICB8IElubmVyIF8gLT4gKClcbiAgICBpblxuICAgIEx3ZF9zZXEuUmVkdWNlci5mb2xkX2Ryb3BwZWQgYE1hcCBzY2hlZHVsZV9mb3JfcmVtb3ZhbCBkcm9wcGVkICgpO1xuICAgIGxldCBwcmVzZXJ2ZV9mb2N1cyA9IGNvbnRhaW5zX2ZvY3VzIHNlbGYgaW5cbiAgICBiZWdpbiBtYXRjaCBMd2Rfc2VxLlJlZHVjZXIucmVkdWNlIHJlZHVjZXInIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIHRyZWUgLT5cbiAgICAgICAgbGV0IHJlYyB1cGRhdGUgYWNjID0gZnVuY3Rpb25cbiAgICAgICAgICB8IExlYWYgbm9kZSAtPlxuICAgICAgICAgICAgbGV0IG5vZGUnID0gRWwudG9fanYgbm9kZSBpblxuICAgICAgICAgICAgSnYuZGVsZXRlJyBub2RlJyBqdl90b1JlbW92ZTtcbiAgICAgICAgICAgICgqQnJyLkNvbnNvbGUubG9nIFtcIlVwZGF0aW5nIFwiOyBub2RlXTsqKVxuICAgICAgICAgICAgaWYgSnYuZ2V0JyBub2RlJyBqdl9wYXJlbnROb2RlICE9IEVsLnRvX2p2IHNlbGYgdGhlbiAoXG4gICAgICAgICAgICAgIGlmIEp2LmlzX251bGwgYWNjXG4gICAgICAgICAgICAgIHRoZW4gaWdub3JlIChKdi5jYWxsJyAoRWwudG9fanYgc2VsZikganZfYXBwZW5kIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICAgZWxzZSBpZ25vcmUgKEp2LmNhbGwnIGFjYyBqdl9iZWZvcmUgW3xub2RlJ3xdKVxuICAgICAgICAgICAgKSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgKCogQ2hlY2sgaWYgdGhlcmUgaXMgbm90IGFueSB3b3JrIHRvIGRvICopXG4gICAgICAgICAgICAgIEp2LmdldCcgbm9kZScganZfbmV4dFNpYmxpbmcgIT0gYWNjICYmXG4gICAgICAgICAgICAgICgqIENoZWNrIGlmIHdlIGFyZSBpbiB0aGUgZm9jdXMgY2FzZSBhbmQgdHJ5IHRvIFwiYnViYmxlIHNvcnRcIiB0b1xuICAgICAgICAgICAgICAgICBwcmVzZXJ2ZSBmb2N1cyAqKVxuICAgICAgICAgICAgICBub3QgKFxuICAgICAgICAgICAgICAgIHByZXNlcnZlX2ZvY3VzICYmIGNvbnRhaW5zX2ZvY3VzIG5vZGUgJiZcbiAgICAgICAgICAgICAgICBsZXQgcmVjIHNoaWZ0X3NpYmxpbmdzICgpID1cbiAgICAgICAgICAgICAgICAgIGxldCBzaWJsaW5nID0gSnYuZ2V0JyBub2RlJyBqdl9uZXh0U2libGluZyBpblxuICAgICAgICAgICAgICAgICAgaWYgc2libGluZyA9PSBhY2MgdGhlbiB0cnVlXG4gICAgICAgICAgICAgICAgICBlbHNlIGlmIEp2LmlzX251bGwgc2libGluZyB0aGVuIGZhbHNlXG4gICAgICAgICAgICAgICAgICBlbHNlIChcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlIChKdi5jYWxsJyBub2RlJyBqdl9iZWZvcmUgW3xzaWJsaW5nfF0pO1xuICAgICAgICAgICAgICAgICAgICBzaGlmdF9zaWJsaW5ncyAoKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgc2hpZnRfc2libGluZ3MgKClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB0aGVuIChcbiAgICAgICAgICAgICAgaWYgSnYuaXNfbnVsbCBhY2NcbiAgICAgICAgICAgICAgdGhlbiBpZ25vcmUgKEp2LmNhbGwnIChFbC50b19qdiBzZWxmKSBqdl9hcHBlbmQgW3xub2RlJ3xdKVxuICAgICAgICAgICAgICBlbHNlIGlnbm9yZSAoSnYuY2FsbCcgYWNjIGp2X2JlZm9yZSBbfG5vZGUnfF0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbm9kZSdcbiAgICAgICAgICB8IElubmVyIHQgLT5cbiAgICAgICAgICAgIGlmIEp2LmlzX251bGwgdC5ib3VuZCB0aGVuIChcbiAgICAgICAgICAgICAgbGV0IGFjYyA9IHVwZGF0ZSBhY2MgdC5yaWdodCBpblxuICAgICAgICAgICAgICBsZXQgYWNjID0gdXBkYXRlIGFjYyB0LmxlZnQgaW5cbiAgICAgICAgICAgICAgdC5ib3VuZCA8LSBhY2M7XG4gICAgICAgICAgICAgIGFjY1xuICAgICAgICAgICAgKSBlbHNlXG4gICAgICAgICAgICAgIHQuYm91bmRcbiAgICAgICAgaW5cbiAgICAgICAgaWdub3JlICh1cGRhdGUgSnYubnVsbCB0cmVlKVxuICAgIGVuZDtcbiAgICBsZXQgcmVtb3ZlX2NoaWxkIGNoaWxkICgpID0gbWF0Y2ggY2hpbGQgd2l0aFxuICAgICAgfCBMZWFmIG5vZGUgLT5cbiAgICAgICAgbGV0IG5vZGUgPSBFbC50b19qdiBub2RlIGluXG4gICAgICAgIGlmIEp2LmlzX3NvbWUgKEp2LmdldCcgbm9kZSBqdl90b1JlbW92ZSkgdGhlbiAoXG4gICAgICAgICAgKCpCcnIuQ29uc29sZS5sb2cgW1wiUmVtb3ZpbmcgXCI7IG5vZGVdOyopXG4gICAgICAgICAgSnYuZGVsZXRlJyBub2RlIGp2X3RvUmVtb3ZlO1xuICAgICAgICAgIGlnbm9yZSAoSnYuY2FsbCcgbm9kZSBqdl9yZW1vdmUgW3x8XSlcbiAgICAgICAgKVxuICAgICAgfCBJbm5lciBfIC0+ICgpXG4gICAgaW5cbiAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXAgcmVtb3ZlX2NoaWxkIGRyb3BwZWQgKCk7XG4gICAgc2VsZlxuICBlbmRcblxubGV0IHB1cmVfdW5pdCA9IEx3ZC5wdXJlICgpXG5cbmxldCBkdW1teV9rdl9hdCA9IChKc3RyLmVtcHR5LCBKc3RyLmVtcHR5KVxuXG5sZXQgYXR0YWNoX2F0dHJpYnMgZWwgYXR0cmlicyA9XG4gIGxldCBzZXRfa3YgKGssIHYpID1cbiAgICBpZiBKc3RyLmVxdWFsIGsgQXQuTmFtZS5jbGFzcydcbiAgICB0aGVuIEVsLnNldF9jbGFzcyB2IHRydWUgZWxcbiAgICBlbHNlIEVsLnNldF9hdCBrIChTb21lIHYpIGVsXG4gIGluXG4gIGxldCB1bnNldF9rdiAoaywgdikgPVxuICAgIGlmIEpzdHIuZXF1YWwgayBBdC5OYW1lLmNsYXNzJ1xuICAgIHRoZW4gRWwuc2V0X2NsYXNzIHYgZmFsc2UgZWxcbiAgICBlbHNlIEVsLnNldF9hdCBrIE5vbmUgZWxcbiAgaW5cbiAgbGV0IHNldF9sd2RfYXQgKCkgPVxuICAgIGxldCBwcmV2ID0gcmVmIGR1bW15X2t2X2F0IGluXG4gICAgZnVuIGF0IC0+XG4gICAgICBpZiAhcHJldiAhPSBkdW1teV9rdl9hdCB0aGVuXG4gICAgICAgIHVuc2V0X2t2ICFwcmV2O1xuICAgICAgbGV0IHBhaXIgPSBBdC50b19wYWlyIGF0IGluXG4gICAgICBzZXRfa3YgcGFpcjtcbiAgICAgIHByZXYgOj0gcGFpclxuICBpblxuICBMd2RfdXRpbHMubWFwX3JlZHVjZSAoZnVuY3Rpb25cbiAgICAgIHwgYFAgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgYFIgYXQgLT4gTHdkLm1hcCB+Zjooc2V0X2x3ZF9hdCAoKSkgYXRcbiAgICAgIHwgYFMgYXRzIC0+XG4gICAgICAgIGxldCBzZXRfYXQnIGF0ID1cbiAgICAgICAgICBsZXQga3YgPSBBdC50b19wYWlyIGF0IGluXG4gICAgICAgICAgc2V0X2t2IGt2O1xuICAgICAgICAgIGt2XG4gICAgICAgIGluXG4gICAgICAgIGxldCByZWR1Y2VyID1cbiAgICAgICAgICByZWYgKEx3ZF9zZXEuUmVkdWNlci5tYWtlXG4gICAgICAgICAgICAgICAgIH5tYXA6c2V0X2F0J1xuICAgICAgICAgICAgICAgICB+cmVkdWNlOihmdW4gXyBfIC0+IGR1bW15X2t2X2F0KSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVwZGF0ZSBhdHMgPVxuICAgICAgICAgIGxldCBkcm9wcGVkLCByZWR1Y2VyJyA9XG4gICAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIudXBkYXRlX2FuZF9nZXRfZHJvcHBlZCAhcmVkdWNlciBhdHNcbiAgICAgICAgICBpblxuICAgICAgICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgICAgICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwXG4gICAgICAgICAgICAoZnVuIGt2ICgpIC0+IHVuc2V0X2t2IGt2KVxuICAgICAgICAgICAgZHJvcHBlZCAoKTtcbiAgICAgICAgICBpZ25vcmUgKEx3ZF9zZXEuUmVkdWNlci5yZWR1Y2UgcmVkdWNlcic6IF8gb3B0aW9uKVxuICAgICAgICBpblxuICAgICAgICBMd2QubWFwIH5mOnVwZGF0ZSBhdHNcbiAgICApIChwdXJlX3VuaXQsIGZ1biBfIF8gLT4gcHVyZV91bml0KVxuICAgIGF0dHJpYnNcblxubGV0IGxpc3RlbiBlbCAoSGFuZGxlciB7b3B0czsgdHlwZSc7IGZ1bmN9KSA9XG4gIEV2Lmxpc3RlbiA/b3B0cyB0eXBlJyBmdW5jIChFbC5hc190YXJnZXQgZWwpXG5cbmxldCBhdHRhY2hfZXZlbnRzIGVsIGV2ZW50cyA9XG4gIEx3ZF91dGlscy5tYXBfcmVkdWNlIChmdW5jdGlvblxuICAgICAgfCBgUCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBgUiBhdCAtPlxuICAgICAgICBsZXQgY2FjaGVkID0gcmVmIE5vbmUgaW5cbiAgICAgICAgTHdkLm1hcCB+ZjooZnVuIGggLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoICFjYWNoZWQgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICAgICAgfCBTb21lIGwgLT4gRXYudW5saXN0ZW4gbFxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY2FjaGVkIDo9IFNvbWUgKGxpc3RlbiBlbCBoKVxuICAgICAgICAgICkgYXRcbiAgICAgIHwgYFMgYXRzIC0+XG4gICAgICAgIGxldCByZWR1Y2VyID1cbiAgICAgICAgICByZWYgKEx3ZF9zZXEuUmVkdWNlci5tYWtlXG4gICAgICAgICAgICAgICAgIH5tYXA6KGxpc3RlbiBlbClcbiAgICAgICAgICAgICAgICAgfnJlZHVjZTooZnVuIHggX3kgLT4geCkpXG4gICAgICAgIGluXG4gICAgICAgIGxldCB1cGRhdGUgYXRzID1cbiAgICAgICAgICBsZXQgZHJvcHBlZCwgcmVkdWNlcicgPVxuICAgICAgICAgICAgTHdkX3NlcS5SZWR1Y2VyLnVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQgIXJlZHVjZXIgYXRzXG4gICAgICAgICAgaW5cbiAgICAgICAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci5mb2xkX2Ryb3BwZWQgYE1hcFxuICAgICAgICAgICAgKGZ1biBsICgpIC0+IEV2LnVubGlzdGVuIGwpXG4gICAgICAgICAgICBkcm9wcGVkICgpO1xuICAgICAgICAgIGlnbm9yZSAoTHdkX3NlcS5SZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJzogXyBvcHRpb24pXG4gICAgICAgIGluXG4gICAgICAgIEx3ZC5tYXAgfmY6dXBkYXRlIGF0c1xuICAgICkgKHB1cmVfdW5pdCwgZnVuIF8gXyAtPiBwdXJlX3VuaXQpXG4gICAgZXZlbnRzXG5cbmxldCB2ID9kID8oYXQ9W10pID8oZXY9W10pID8ob25fY3JlYXRlID0gZnVuIF8gLT4gKCkpIHRhZyBjaGlsZHJlbiA9XG4gIGxldCBhdCwgaW1wdXJlX2F0ID0gcHJlcGFyZV9jb2wgYXQgaW5cbiAgbGV0IGV2LCBpbXB1cmVfZXYgPSBwcmVwYXJlX2NvbCBldiBpblxuICBsZXQgY2hpbGRyZW4sIGltcHVyZV9jaGlsZHJlbiA9IGNvbnN1bWVfY2hpbGRyZW4gY2hpbGRyZW4gaW5cbiAgbGV0IGVsID0gRWwudiA/ZCB+YXQgdGFnIGNoaWxkcmVuIGluXG4gIGxldCAoKSA9IG9uX2NyZWF0ZSBlbCBpblxuICBsZXQgcmVzdWx0ID1cbiAgICBtYXRjaCBpbXB1cmVfYXQsIGltcHVyZV9jaGlsZHJlbiB3aXRoXG4gICAgfCBbXSwgTm9uZSAtPiBMd2QucHVyZSBlbFxuICAgIHwgW10sIFNvbWUgY2hpbGRyZW4gLT5cbiAgICAgIHVwZGF0ZV9jaGlsZHJlbiBlbCBjaGlsZHJlblxuICAgIHwgYXQsIE5vbmUgLT5cbiAgICAgIEx3ZC5tYXAgfmY6KGZ1biAoKSAtPiBlbCkgKGF0dGFjaF9hdHRyaWJzIGVsIGF0KVxuICAgIHwgYXQsIFNvbWUgY2hpbGRyZW4gLT5cbiAgICAgIEx3ZC5tYXAyIH5mOihmdW4gKCkgZWwgLT4gZWwpXG4gICAgICAgIChhdHRhY2hfYXR0cmlicyBlbCBhdClcbiAgICAgICAgKHVwZGF0ZV9jaGlsZHJlbiBlbCBjaGlsZHJlbilcbiAgaW5cbiAgTGlzdC5pdGVyIChmdW4gaCAtPiBpZ25vcmUgKGxpc3RlbiBlbCBoKSkgZXY7XG4gIGxldCByZXN1bHQgPVxuICAgIG1hdGNoIGltcHVyZV9ldiB3aXRoXG4gICAgfCBbXSAtPiByZXN1bHRcbiAgICB8IGV2cyAtPlxuICAgICAgTHdkLm1hcDIgfmY6KGZ1biAoKSBlbCAtPiBlbClcbiAgICAgICAgKGF0dGFjaF9ldmVudHMgZWwgZXZzKVxuICAgICAgICByZXN1bHRcbiAgaW5cbiAgcmVzdWx0XG5cbigqKiB7MTplbHMgRWxlbWVudCBjb25zdHJ1Y3RvcnN9ICopXG5cbnR5cGUgY29ucyA9ICA/ZDpkb2N1bWVudCAtPiA/YXQ6QXQudCBjb2wgLT4gP2V2OmhhbmRsZXIgY29sIC0+ID9vbl9jcmVhdGU6KHQgLT4gdW5pdCkgLT4gdCBjb2wgLT4gdCBMd2QudFxuKCoqIFRoZSB0eXBlIGZvciBlbGVtZW50IGNvbnN0cnVjdG9ycy4gVGhpcyBpcyBzaW1wbHkgeyF2fSB3aXRoIGFcbiAgICBwcmUtYXBwbGllZCBlbGVtZW50IG5hbWUuICopXG5cbnR5cGUgdm9pZF9jb25zID0gP2Q6ZG9jdW1lbnQgLT4gP2F0OkF0LnQgY29sIC0+ID9ldjpoYW5kbGVyIGNvbCAtPiA/b25fY3JlYXRlOih0IC0+IHVuaXQpIC0+IHVuaXQgLT4gdCBMd2QudFxuKCoqIFRoZSB0eXBlIGZvciB2b2lkIGVsZW1lbnQgY29uc3RydWN0b3JzLiBUaGlzIGlzIHNpbXBseSB7IXZ9XG4gICAgd2l0aCBhIHByZS1hcHBsaWVkIGVsZW1lbnQgbmFtZSBhbmQgd2l0aG91dCBjaGlsZHJlbi4gKilcblxubGV0IGNvbnMgbmFtZSA/ZCA/YXQgP2V2ID9vbl9jcmVhdGUgY3MgPSB2ID9kID9hdCA/ZXYgP29uX2NyZWF0ZSBuYW1lIGNzXG5sZXQgdm9pZF9jb25zIG5hbWUgP2QgP2F0ID9ldiA/b25fY3JlYXRlICgpID0gdiA/ZCA/YXQgP2V2ID9vbl9jcmVhdGUgbmFtZSBbXVxuXG5sZXQgYSA9IGNvbnMgTmFtZS5hXG5sZXQgYWJiciA9IGNvbnMgTmFtZS5hYmJyXG5sZXQgYWRkcmVzcyA9IGNvbnMgTmFtZS5hZGRyZXNzXG5sZXQgYXJlYSA9IHZvaWRfY29ucyBOYW1lLmFyZWFcbmxldCBhcnRpY2xlID0gY29ucyBOYW1lLmFydGljbGVcbmxldCBhc2lkZSA9IGNvbnMgTmFtZS5hc2lkZVxubGV0IGF1ZGlvID0gY29ucyBOYW1lLmF1ZGlvXG5sZXQgYiA9IGNvbnMgTmFtZS5iXG5sZXQgYmFzZSA9IHZvaWRfY29ucyBOYW1lLmJhc2VcbmxldCBiZGkgPSBjb25zIE5hbWUuYmRpXG5sZXQgYmRvID0gY29ucyBOYW1lLmJkb1xubGV0IGJsb2NrcXVvdGUgPSBjb25zIE5hbWUuYmxvY2txdW90ZVxubGV0IGJvZHkgPSBjb25zIE5hbWUuYm9keVxubGV0IGJyID0gdm9pZF9jb25zIE5hbWUuYnJcbmxldCBidXR0b24gPSBjb25zIE5hbWUuYnV0dG9uXG5sZXQgY2FudmFzID0gY29ucyBOYW1lLmNhbnZhc1xubGV0IGNhcHRpb24gPSBjb25zIE5hbWUuY2FwdGlvblxubGV0IGNpdGUgPSBjb25zIE5hbWUuY2l0ZVxubGV0IGNvZGUgPSBjb25zIE5hbWUuY29kZVxubGV0IGNvbCA9IHZvaWRfY29ucyBOYW1lLmNvbFxubGV0IGNvbGdyb3VwID0gY29ucyBOYW1lLmNvbGdyb3VwXG5sZXQgY29tbWFuZCA9IGNvbnMgTmFtZS5jb21tYW5kXG5sZXQgZGF0YWxpc3QgPSBjb25zIE5hbWUuZGF0YWxpc3RcbmxldCBkZCA9IGNvbnMgTmFtZS5kZFxubGV0IGRlbCA9IGNvbnMgTmFtZS5kZWxcbmxldCBkZXRhaWxzID0gY29ucyBOYW1lLmRldGFpbHNcbmxldCBkZm4gPSBjb25zIE5hbWUuZGZuXG5sZXQgZGl2ID0gY29ucyBOYW1lLmRpdlxubGV0IGRsID0gY29ucyBOYW1lLmRsXG5sZXQgZHQgPSBjb25zIE5hbWUuZHRcbmxldCBlbSA9IGNvbnMgTmFtZS5lbVxubGV0IGVtYmVkID0gdm9pZF9jb25zIE5hbWUuZW1iZWRcbmxldCBmaWVsZHNldCA9IGNvbnMgTmFtZS5maWVsZHNldFxubGV0IGZpZ2NhcHRpb24gPSBjb25zIE5hbWUuZmlnY2FwdGlvblxubGV0IGZpZ3VyZSA9IGNvbnMgTmFtZS5maWd1cmVcbmxldCBmb290ZXIgPSBjb25zIE5hbWUuZm9vdGVyXG5sZXQgZm9ybSA9IGNvbnMgTmFtZS5mb3JtXG5sZXQgaDEgPSBjb25zIE5hbWUuaDFcbmxldCBoMiA9IGNvbnMgTmFtZS5oMlxubGV0IGgzID0gY29ucyBOYW1lLmgzXG5sZXQgaDQgPSBjb25zIE5hbWUuaDRcbmxldCBoNSA9IGNvbnMgTmFtZS5oNVxubGV0IGg2ID0gY29ucyBOYW1lLmg2XG5sZXQgaGVhZCA9IGNvbnMgTmFtZS5oZWFkXG5sZXQgaGVhZGVyID0gY29ucyBOYW1lLmhlYWRlclxubGV0IGhncm91cCA9IGNvbnMgTmFtZS5oZ3JvdXBcbmxldCBociA9IHZvaWRfY29ucyBOYW1lLmhyXG5sZXQgaHRtbCA9IGNvbnMgTmFtZS5odG1sXG5sZXQgaSA9IGNvbnMgTmFtZS5pXG5sZXQgaWZyYW1lID0gY29ucyBOYW1lLmlmcmFtZVxubGV0IGltZyA9IHZvaWRfY29ucyBOYW1lLmltZ1xubGV0IGlucHV0ID0gdm9pZF9jb25zIE5hbWUuaW5wdXRcbmxldCBpbnMgPSBjb25zIE5hbWUuaW5zXG5sZXQga2JkID0gY29ucyBOYW1lLmtiZFxubGV0IGtleWdlbiA9IGNvbnMgTmFtZS5rZXlnZW5cbmxldCBsYWJlbCA9IGNvbnMgTmFtZS5sYWJlbFxubGV0IGxlZ2VuZCA9IGNvbnMgTmFtZS5sZWdlbmRcbmxldCBsaSA9IGNvbnMgTmFtZS5saVxubGV0IGxpbmsgPSB2b2lkX2NvbnMgTmFtZS5saW5rXG5sZXQgbWFwID0gY29ucyBOYW1lLm1hcFxubGV0IG1hcmsgPSBjb25zIE5hbWUubWFya1xubGV0IG1lbnUgPSBjb25zIE5hbWUubWVudVxubGV0IG1ldGEgPSB2b2lkX2NvbnMgTmFtZS5tZXRhXG5sZXQgbWV0ZXIgPSBjb25zIE5hbWUubWV0ZXJcbmxldCBuYXYgPSBjb25zIE5hbWUubmF2XG5sZXQgbm9zY3JpcHQgPSBjb25zIE5hbWUubm9zY3JpcHRcbmxldCBvYmplY3QnID0gY29ucyBOYW1lLm9iamVjdCdcbmxldCBvbCA9IGNvbnMgTmFtZS5vbFxubGV0IG9wdGdyb3VwID0gY29ucyBOYW1lLm9wdGdyb3VwXG5sZXQgb3B0aW9uID0gY29ucyBOYW1lLm9wdGlvblxubGV0IG91dHB1dCA9IGNvbnMgTmFtZS5vdXRwdXRcbmxldCBwID0gY29ucyBOYW1lLnBcbmxldCBwYXJhbSA9IHZvaWRfY29ucyBOYW1lLnBhcmFtXG5sZXQgcHJlID0gY29ucyBOYW1lLnByZVxubGV0IHByb2dyZXNzID0gY29ucyBOYW1lLnByb2dyZXNzXG5sZXQgcSA9IGNvbnMgTmFtZS5xXG5sZXQgcnAgPSBjb25zIE5hbWUucnBcbmxldCBydCA9IGNvbnMgTmFtZS5ydFxubGV0IHJ1YnkgPSBjb25zIE5hbWUucnVieVxubGV0IHMgPSBjb25zIE5hbWUuc1xubGV0IHNhbXAgPSBjb25zIE5hbWUuc2FtcFxubGV0IHNjcmlwdCA9IGNvbnMgTmFtZS5zY3JpcHRcbmxldCBzZWN0aW9uID0gY29ucyBOYW1lLnNlY3Rpb25cbmxldCBzZWxlY3QgPSBjb25zIE5hbWUuc2VsZWN0XG5sZXQgc21hbGwgPSBjb25zIE5hbWUuc21hbGxcbmxldCBzb3VyY2UgPSB2b2lkX2NvbnMgTmFtZS5zb3VyY2VcbmxldCBzcGFuID0gY29ucyBOYW1lLnNwYW5cbmxldCBzdHJvbmcgPSBjb25zIE5hbWUuc3Ryb25nXG5sZXQgc3R5bGUgPSBjb25zIE5hbWUuc3R5bGVcbmxldCBzdWIgPSBjb25zIE5hbWUuc3ViXG5sZXQgc3VtbWFyeSA9IGNvbnMgTmFtZS5zdW1tYXJ5XG5sZXQgc3VwID0gY29ucyBOYW1lLnN1cFxubGV0IHRhYmxlID0gY29ucyBOYW1lLnRhYmxlXG5sZXQgdGJvZHkgPSBjb25zIE5hbWUudGJvZHlcbmxldCB0ZCA9IGNvbnMgTmFtZS50ZFxubGV0IHRleHRhcmVhID0gY29ucyBOYW1lLnRleHRhcmVhXG5sZXQgdGZvb3QgPSBjb25zIE5hbWUudGZvb3RcbmxldCB0aCA9IGNvbnMgTmFtZS50aFxubGV0IHRoZWFkID0gY29ucyBOYW1lLnRoZWFkXG5sZXQgdGltZSA9IGNvbnMgTmFtZS50aW1lXG5sZXQgdGl0bGUgPSBjb25zIE5hbWUudGl0bGVcbmxldCB0ciA9IGNvbnMgTmFtZS50clxubGV0IHRyYWNrID0gdm9pZF9jb25zIE5hbWUudHJhY2tcbmxldCB1ID0gY29ucyBOYW1lLnVcbmxldCB1bCA9IGNvbnMgTmFtZS51bFxubGV0IHZhciA9IGNvbnMgTmFtZS52YXJcbmxldCB2aWRlbyA9IGNvbnMgTmFtZS52aWRlb1xubGV0IHdiciA9IHZvaWRfY29ucyBOYW1lLndiclxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEFycmF5IHV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+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+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIE11bHRpbWFwfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG5tb2R1bGUgdHlwZSBTID0gc2lnXG4gIHR5cGUga2V5XG4gIHR5cGUgdmFsdWVcbiAgdHlwZSB0XG5cbiAgdmFsIGVtcHR5IDogdFxuICAoKiogRW1wdHkgbXVsdGltYXAgKilcblxuICB2YWwgaXNfZW1wdHkgOiB0IC0+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+IGFkZCBtIGEgYikgbSBzZXFcbiAgbGV0IGl0ZXJfbGVmdCBtID0gTWFwTC5rZXlzIG0ubGVmdFxuICBsZXQgaXRlcl9yaWdodCBtID0gTWFwUi5rZXlzIG0ucmlnaHRcbmVuZFxuIiwidHlwZSB0ID0gSnYudFxuXG5leHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxubGV0IHggdCA9IEp2LmdldCB0IFwieFwiIHw+IEp2LnRvX2ludFxubGV0IHkgdCA9IEp2LmdldCB0IFwieVwiIHw+IEp2LnRvX2ludFxubGV0IHdpZHRoIHQgPSBKdi5nZXQgdCBcIndpZHRoXCIgfD4gSnYudG9faW50XG5sZXQgaGVpZ2h0IHQgPSBKdi5nZXQgdCBcImhlaWdodFwiIHw+IEp2LnRvX2ludFxubGV0IHRvcCB0ID0gSnYuZ2V0IHQgXCJ0b3BcIiB8PiBKdi50b19pbnRcbmxldCByaWdodCB0ID0gSnYuZ2V0IHQgXCJyaWdodFwiIHw+IEp2LnRvX2ludFxubGV0IGJvdHRvbSB0ID0gSnYuZ2V0IHQgXCJib3R0b21cIiB8PiBKdi50b19pbnRcbmxldCBsZWZ0IHQgPSBKdi5nZXQgdCBcImxlZnRcIiB8PiBKdi50b19pbnRcbiIsIm9wZW4gQnJyXG5cbnR5cGUgdCA9IEp2LnRcblxuZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbm1vZHVsZSBFbnRyeSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgdHlwZSBib3hfc2l6ZSA9IHsgYmxvY2tfc2l6ZSA6IGludDsgaW5saW5lX3NpemUgOiBpbnQgfVxuXG4gIGxldCBib3hfc2l6ZV9vZl9qdiBqdiA9XG4gICAge1xuICAgICAgYmxvY2tfc2l6ZSA9IEp2LmdldCBqdiBcImJsb2NrU2l6ZVwiIHw+IEp2LnRvX2ludDtcbiAgICAgIGlubGluZV9zaXplID0gSnYuZ2V0IGp2IFwiaW5saW5lU2l6ZVwiIHw+IEp2LnRvX2ludDtcbiAgICB9XG5cbiAgbGV0IGJvcmRlcl9ib3hfc2l6ZSB0ID0gSnYuZ2V0IHQgXCJib3JkZXJCb3hTaXplXCIgfD4gSnYudG9fYXJyYXkgYm94X3NpemVfb2ZfanZcblxuICBsZXQgY29udGVudF9ib3hfc2l6ZSB0ID1cbiAgICBKdi5nZXQgdCBcImNvbnRlbnRCb3hTaXplXCIgfD4gSnYudG9fYXJyYXkgYm94X3NpemVfb2ZfanZcblxuICBsZXQgY29udGVudF9yZWN0IHQgPSBKdi5nZXQgdCBcImNvbnRlbnRSZWN0XCIgfD4gRG9tX3JlY3RfcmVhZF9vbmx5Lm9mX2p2XG5cbiAgbGV0IGRldmljZV9waXhlbF9jb250ZW50X2JveF9zaXplIHQgPVxuICAgIEp2LmdldCB0IFwiZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZVwiIHw+IEp2LnRvX2FycmF5IGJveF9zaXplX29mX2p2XG5cbiAgbGV0IHRhcmdldCB0ID0gSnYuZ2V0IHQgXCJ0YXJnZXRcIiB8PiBFbC5vZl9qdlxuZW5kXG5cbnR5cGUgYm94ID0gQ29udGVudF9ib3ggfCBCb3JkZXJfYm94IHwgRGV2aWNlX3BpeGVsX2NvbnRlbnRfYm94XG5cbmxldCBzdHJpbmdfb2ZfYm94ID0gZnVuY3Rpb25cbiAgfCBDb250ZW50X2JveCAtPiBcImNvbnRlbnQtYm94XCJcbiAgfCBCb3JkZXJfYm94IC0+IFwiYm9yZGVyLWJveFwiXG4gIHwgRGV2aWNlX3BpeGVsX2NvbnRlbnRfYm94IC0+IFwiZGV2aWNlLXBpeGVsLWNvbnRlbnQtYm94XCJcblxubGV0IGRpc2Nvbm5lY3QgdCA9IGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJkaXNjb25uZWN0XCIgW3x8XVxuXG5sZXQgb2JzZXJ2ZSB0ID9ib3ggdGFyZ2V0ID1cbiAgbGV0IGFyZ3MgPVxuICAgIGxldCB0YXJnZXQgPSBFbC50b19qdiB0YXJnZXQgaW5cbiAgICBtYXRjaCBib3ggd2l0aFxuICAgIHwgTm9uZSAtPiBbfCB0YXJnZXQgfF1cbiAgICB8IFNvbWUgYiAtPlxuICAgICAgICBsZXQgYm94ID0gSnYub2JqIFt8IChcImJveFwiLCBKdi5vZl9zdHJpbmcgKHN0cmluZ19vZl9ib3ggYikpIHxdIGluXG4gICAgICAgIFt8IHRhcmdldDsgYm94IHxdXG4gIGluXG4gIEp2LmNhbGwgdCBcIm9ic2VydmVcIiBhcmdzIHw+IGlnbm9yZVxuXG5sZXQgdW5vYnNlcnZlIHQgdGFyZ2V0ID1cbiAgbGV0IHRhcmdldCA9IEVsLnRvX2p2IHRhcmdldCBpblxuICBpZ25vcmUgQEAgSnYuY2FsbCB0IFwiZGlzY29ubmVjdFwiIFt8IHRhcmdldCB8XVxuXG5sZXQgY3JlYXRlIH5jYWxsYmFjayA9XG4gIGxldCBjYWxsYmFjayBlbnRyaWVzIG9ic2VydmVyID1cbiAgICBsZXQgZW50cmllcyA9IEp2LnRvX2xpc3QgRW50cnkub2ZfanYgZW50cmllcyBpblxuICAgIGNhbGxiYWNrIGVudHJpZXMgKG9mX2p2IG9ic2VydmVyKVxuICBpblxuICBsZXQgYXJncyA9IFt8IEp2LnJlcHIgY2FsbGJhY2sgfF0gaW5cbiAgSnYubmV3JyAoSnYuZ2V0IEp2Lmdsb2JhbCBcIlJlc2l6ZU9ic2VydmVyXCIpIGFyZ3NcbiIsIm9wZW4gQnJyXG5cbnR5cGUgdCA9IEp2LnRcblxuZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBvZl9uYXZpZ2F0b3IgbiA9IEp2LmdldCAoTmF2aWdhdG9yLnRvX2p2IG4pIFwibWVkaWFTZXNzaW9uXCJcblxubW9kdWxlIE1lZGlhX21ldGFkYXRhID0gc3RydWN0XG4gIHR5cGUgaW1nID0geyBzcmMgOiBzdHJpbmc7IHNpemVzIDogc3RyaW5nOyB0eXBlJyA6IHN0cmluZyB9XG5cbiAgbGV0IGltZ190b19qdiBpbWcgPVxuICAgIEp2Lm9ialxuICAgICAgW3xcbiAgICAgICAgKFwic3JjXCIsIEp2Lm9mX3N0cmluZyBpbWcuc3JjKTtcbiAgICAgICAgKFwic2l6ZXNcIiwgSnYub2Zfc3RyaW5nIGltZy5zaXplcyk7XG4gICAgICAgIChcInR5cGVcIiwgSnYub2Zfc3RyaW5nIGltZy50eXBlJyk7XG4gICAgICB8XVxuXG4gIGxldCBtYXliZV9zdHJpbmcganYgcHJvcCA9XG4gICAgbWF0Y2ggSnYuZmluZCBqdiBwcm9wIHdpdGggTm9uZSAtPiBcInVua25vd25cIiB8IFNvbWUganYgLT4gSnYudG9fc3RyaW5nIGp2XG5cbiAgbGV0IGltZ19vZl9qdiBqdiA9XG4gICAgbGV0IHNyYyA9IG1heWJlX3N0cmluZyBqdiBcInNyY1wiIGluXG4gICAgbGV0IHNpemVzID0gbWF5YmVfc3RyaW5nIGp2IFwic2l6ZXNcIiBpblxuICAgIGxldCB0eXBlJyA9IG1heWJlX3N0cmluZyBqdiBcInR5cGVcIiBpblxuICAgIHsgc3JjOyBzaXplczsgdHlwZScgfVxuXG4gIHR5cGUgdCA9IHtcbiAgICB0aXRsZSA6IHN0cmluZztcbiAgICBhcnRpc3QgOiBzdHJpbmc7XG4gICAgYWxidW0gOiBzdHJpbmc7XG4gICAgYXJ0d29yayA6IGltZyBsaXN0O1xuICB9XG5cbiAgbGV0IHRvX2p2IHQgPVxuICAgIGxldCBhcnR3b3JrID0gSnYub2ZfbGlzdCBpbWdfdG9fanYgdC5hcnR3b3JrIGluXG4gICAgSnYub2JqXG4gICAgICBbfFxuICAgICAgICAoXCJ0aXRsZVwiLCBKdi5vZl9zdHJpbmcgdC50aXRsZSk7XG4gICAgICAgIChcImFydGlzdFwiLCBKdi5vZl9zdHJpbmcgdC5hcnRpc3QpO1xuICAgICAgICAoXCJhbGJ1bVwiLCBKdi5vZl9zdHJpbmcgdC5hbGJ1bSk7XG4gICAgICAgIChcImFydHdvcmtcIiwgYXJ0d29yayk7XG4gICAgICB8XVxuXG4gIGxldCBvZl9qdiBqdiA9XG4gICAgbGV0IHRpdGxlID0gbWF5YmVfc3RyaW5nIGp2IFwidGl0bGVcIiBpblxuICAgIGxldCBhcnRpc3QgPSBtYXliZV9zdHJpbmcganYgXCJhcnRpc3RcIiBpblxuICAgIGxldCBhbGJ1bSA9IG1heWJlX3N0cmluZyBqdiBcImFsYnVtXCIgaW5cbiAgICBsZXQgYXJ0d29yayA9XG4gICAgICBtYXRjaCBKdi5maW5kIGp2IFwiYXJ0d29ya1wiIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBbXVxuICAgICAgfCBTb21lIGp2IC0+IEp2LnRvX2xpc3QgaW1nX29mX2p2IGp2XG4gICAgaW5cbiAgICB7IHRpdGxlOyBhcnRpc3Q7IGFsYnVtOyBhcnR3b3JrIH1cbmVuZFxuXG5sZXQgbWV0YWRhdGEgdCA9IEp2LmdldCB0IFwibWV0YWRhdGFcIiB8PiBKdi50b19vcHRpb24gTWVkaWFfbWV0YWRhdGEub2ZfanZcblxubGV0IHNldF9tZXRhZGF0YSB0IHYgPVxuICBDb25zb2xlLmxvZyBbIFwiU2V0IG1ldGFkYXRhXCI7IE1lZGlhX21ldGFkYXRhLnRvX2p2IHYgXTtcbiAgbGV0IG1ldGFkYXRhID1cbiAgICBKdi5uZXcnIChKdi5nZXQgSnYuZ2xvYmFsIFwiTWVkaWFNZXRhZGF0YVwiKSBbfCBNZWRpYV9tZXRhZGF0YS50b19qdiB2IHxdXG4gIGluXG4gIEp2LnNldCB0IFwibWV0YWRhdGFcIiBtZXRhZGF0YVxuXG5tb2R1bGUgQWN0aW9uID0gc3RydWN0XG4gIHR5cGUgdCA9IEpzdHIudFxuXG4gIGxldCBuZXh0X3RyYWNrID0gSnN0ci52IFwibmV4dHRyYWNrXCJcbiAgbGV0IHByZXZpb3VzX3RyYWNrID0gSnN0ci52IFwicHJldmlvdXN0cmFja1wiXG5lbmRcblxubGV0IHNldF9hY3Rpb25faGFuZGxlciB0IGFjdGlvbiBmID1cbiAgbGV0IGNhbGxiYWNrID0gSnYuY2FsbGJhY2sgfmFyaXR5OjEgZiBpblxuICBKdi5jYWxsIHQgXCJzZXRBY3Rpb25IYW5kbGVyXCIgW3wgSnYub2ZfanN0ciBhY3Rpb247IGNhbGxiYWNrIHxdIHw+IGlnbm9yZVxuXG5sZXQgc2V0X3Bvc2l0aW9uX3N0YXRlID9kdXJhdGlvbiA/cGxheWJhY2tfcmF0ZSA/cG9zaXRpb24gdCA9XG4gIGxldCBtYXliZV9mbG9hdCBuYW1lIHYgPSBPcHRpb24ubWFwIChmdW4gdiAtPiAobmFtZSwgSnYub2ZfZmxvYXQgdikpIHYgaW5cbiAgbGV0IGR1cmF0aW9uID0gbWF5YmVfZmxvYXQgXCJkdXJhdGlvblwiIGR1cmF0aW9uIGluXG4gIGxldCBwbGF5YmFja19yYXRlID0gbWF5YmVfZmxvYXQgXCJwbGF5YmFja1JhdGVcIiBwbGF5YmFja19yYXRlIGluXG4gIGxldCBwb3NpdGlvbiA9IG1heWJlX2Zsb2F0IFwicG9zaXRpb25cIiBwb3NpdGlvbiBpblxuICBsZXQgYXJncyA9XG4gICAgbGV0IHN0YXRlX2RpY3QgPVxuICAgICAgTGlzdC5maWx0ZXJfbWFwIEZ1bi5pZCBbIGR1cmF0aW9uOyBwbGF5YmFja19yYXRlOyBwb3NpdGlvbiBdXG4gICAgaW5cbiAgICBtYXRjaCBzdGF0ZV9kaWN0IHdpdGggW10gLT4gW3x8XSB8IHNkIC0+IFt8IEp2Lm9iaiAoQXJyYXkub2ZfbGlzdCBzZCkgfF1cbiAgaW5cbiAgSnYuY2FsbCB0IFwic2V0UG9zaXRpb25TdGF0ZVwiIGFyZ3MgfD4gaWdub3JlXG4iLCJtb2R1bGUgSnYgPSBKdlxubW9kdWxlIEpzdHIgPSBKc3RyXG5cbm1vZHVsZSBCcnIgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBCcnJcblxuICBtb2R1bGUgRWwgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgUyA9IFN0eWxlXG4gICAgaW5jbHVkZSBFbFxuICAgIG1vZHVsZSBTdHlsZSA9IFNcbiAgZW5kXG5cbiAgbW9kdWxlIEV2ID0gc3RydWN0XG4gICAgaW5jbHVkZSBFdlxuXG4gICAgbW9kdWxlIFN1Ym1pdCA9IHN0cnVjdFxuICAgICAgdHlwZSAnYSBldmVudCA9ICdhIHRcbiAgICAgIHR5cGUgdCA9IEp2LnRcbiAgICBlbmRcblxuICAgIGxldCBzdWJtaXQgPSBUeXBlLnZvaWQgKEpzdHIudiBcInN1Ym1pdFwiKVxuICBlbmRcblxuICBtb2R1bGUgQXQgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIEF0XG5cbiAgICBtb2R1bGUgTmFtZSA9IHN0cnVjdFxuICAgICAgaW5jbHVkZSBOYW1lXG5cbiAgICAgIGxldCBwYXR0ZXJuID0gSnN0ci52IFwicGF0dGVyblwiXG4gICAgZW5kXG5cbiAgICBsZXQgZHJhZ2dhYmxlIHMgPSB2IE5hbWUuZHJhZ2dhYmxlIHNcbiAgZW5kXG5lbmRcblxubW9kdWxlIEJycl9pbyA9IHN0cnVjdFxuICBpbmNsdWRlIEJycl9pb1xuICBtb2R1bGUgSW5kZXhlZF9kYiA9IEluZGV4ZWRfZGJcblxuICBtb2R1bGUgTWVkaWEgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1lZGlhXG4gICAgbW9kdWxlIFNlc3Npb24gPSBNZWRpYV9zZXNzaW9uXG4gIGVuZFxuXG4gIG1vZHVsZSBTdG9yYWdlID0gc3RydWN0XG4gICAgaW5jbHVkZSBTdG9yYWdlXG5cbiAgICBtb2R1bGUgTWFuYWdlciA9IHN0cnVjdFxuICAgICAgKCogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1N0b3JhZ2VNYW5hZ2VyICopXG4gICAgICB0eXBlIHQgPSBKdi50XG5cbiAgICAgIGluY2x1ZGUgKEp2LklkIDogSnYuQ09OViB3aXRoIHR5cGUgdCA6PSB0KVxuXG4gICAgICBsZXQgcGVyc2lzdCB0ID0gSnYuY2FsbCB0IFwicGVyc2lzdFwiIFt8fF0gfD4gRnV0Lm9mX3Byb21pc2Ugfm9rOkp2LnRvX2Jvb2xcbiAgICBlbmRcblxuICAgIGxldCBtYW5hZ2VyIChuIDogQnJyLk5hdmlnYXRvci50KSA9XG4gICAgICBKdi5nZXQgKEJyci5OYXZpZ2F0b3IudG9fanYgbikgXCJzdG9yYWdlXCIgfD4gTWFuYWdlci5vZl9qdlxuICBlbmRcbmVuZFxuXG5tb2R1bGUgQnJyX3dlYndvcmtlcnMgPSBCcnJfd2Vid29ya2Vyc1xubW9kdWxlIEJycl93ZWJtaWRpID0gQnJyX3dlYm1pZGlcbm1vZHVsZSBCcnJfd2ViZ3B1ID0gQnJyX3dlYmdwdVxubW9kdWxlIEJycl93ZWJjcnlwdG8gPSBCcnJfd2ViY3J5cHRvXG5tb2R1bGUgQnJyX3dlYmF1ZGlvID0gQnJyX3dlYmF1ZGlvXG5tb2R1bGUgQnJyX2NhbnZhcyA9IEJycl9jYW52YXNcbm1vZHVsZSBGdXQgPSBGdXRcbm1vZHVsZSBJbnRlcnNlY3Rpb25fb2JzZXJ2ZXIgPSBJbnRlcnNlY3Rpb25fb2JzZXJ2ZXJcbm1vZHVsZSBNdXRhdGlvbl9vYnNlcnZlciA9IE11dGF0aW9uX29ic2VydmVyXG5tb2R1bGUgUmVzaXplX29ic2VydmVyID0gUmVzaXplX29ic2VydmVyXG5tb2R1bGUgRG9tX3JlY3RfcmVhZF9vbmx5ID0gRG9tX3JlY3RfcmVhZF9vbmx5XG4iLCJpbmNsdWRlIENvbnRhaW5lcnNMYWJlbHNcbm1vZHVsZSBCcnIgPSBCcnJlci5CcnJcblxuKCoqIFt0ZWUgZiB4XSBhcHBsaWVzIFtmXSB0byBbeF0gYW5kIHJldHVybnMgW3hdICopXG5sZXQgdGVlIGYgeCA9XG4gIGxldCAoKSA9IGYgeCBpblxuICB4XG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcbiAgbW9kdWxlIFNldCA9IFNldC5NYWtlIChTdHJpbmcpXG5lbmRcblxubW9kdWxlIEx3ZCA9IHN0cnVjdFxuICBpbmNsdWRlIEx3ZFxuZW5kXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcblxudHlwZSAnYSBvbmVfbWF5YmVfcmVhY3RpdmUgPSBbIGBQIG9mICdhIHwgYFIgb2YgJ2EgTHdkLnQgXVxudHlwZSAnYSBtYXliZV9yZWFjdGl2ZSA9IFsgJ2Egb25lX21heWJlX3JlYWN0aXZlIHwgYFMgb2YgJ2EgTHdkX3NlcS50IEx3ZC50IF1cblxubGV0IGlzX3B1cmVfZWxlbWVudCA9IGZ1bmN0aW9uXG4gIHwgYFAgXyAtPiB0cnVlXG4gIHwgYFIgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcbiAgfCBgUyB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgcHVyZSB0ID0gYFAgdFxubGV0IHJlYWN0aXZlIHQgPSBgUiB0XG5sZXQgc2VxdWVuY2UgdCA9IGBTIHRcblxubW9kdWxlIFVuaXQgPSBzdHJ1Y3RcbiAgKCoqIENvbnZlcnNpb24gYmV0d2VlbiBDU1MgdW5pdHMuIFZlcnkgZWFybHkgV0lQLiAqKVxuICB0eXBlIHQgPSBQeCBvZiBmbG9hdCB8IFJlbSBvZiBmbG9hdCB8IEVtIG9mIGZsb2F0XG5cbiAgbGV0IG9mX3N0cmluZyBzID1cbiAgICAoKiBUT0RPOiBwcm9wZXIgcGFyc2luZyAqKVxuICAgIG1hdGNoIFN0cmluZy5jaG9wX3N1ZmZpeCB+c3VmOlwicHhcIiBzIHdpdGhcbiAgICB8IFNvbWUgaSAtPiAoXG4gICAgICAgIG1hdGNoIEludC5vZl9zdHJpbmcgaSB3aXRoXG4gICAgICAgIHwgU29tZSBpIC0+IFNvbWUgKFB4IChmbG9hdF9vZl9pbnQgaSkpXG4gICAgICAgIHwgTm9uZSAtPiBGbG9hdC5vZl9zdHJpbmdfb3B0IGkgfD4gT3B0aW9uLm1hcCAoZnVuIGkgLT4gUHggaSkpXG4gICAgfCBOb25lIC0+IChcbiAgICAgICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJyZW1cIiBzIHdpdGhcbiAgICAgICAgfCBTb21lIGYgLT4gRmxvYXQub2Zfc3RyaW5nX29wdCBmIHw+IE9wdGlvbi5tYXAgKGZ1biBmIC0+IFJlbSBmKVxuICAgICAgICB8IE5vbmUgLT4gKFxuICAgICAgICAgICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJlbVwiIHMgd2l0aFxuICAgICAgICAgICAgfCBTb21lIGYgLT4gRmxvYXQub2Zfc3RyaW5nX29wdCBmIHw+IE9wdGlvbi5tYXAgKGZ1biBmIC0+IFJlbSBmKVxuICAgICAgICAgICAgfCBOb25lIC0+IE5vbmUpKVxuXG4gIGxldCB0b19zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBQcmludGYuc3ByaW50ZiBcIiVmcHhcIiBpXG4gICAgfCBSZW0gZiAtPiBQcmludGYuc3ByaW50ZiBcIiVmcmVtXCIgZlxuICAgIHwgRW0gZiAtPiBQcmludGYuc3ByaW50ZiBcIiVmZW1cIiBmXG5cbiAgbGV0IHRvX3B4ID8ocGFyZW50ID0gRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSA9XG4gICAgbGV0IGdldF9mb250X3NpemVfaW5fcHggcGFyZW50ID1cbiAgICAgIGxldCBmb250X3NpemUgPVxuICAgICAgICBFbC5jb21wdXRlZF9zdHlsZSAoSnN0ci52IFwiZm9udC1zaXplXCIpIHBhcmVudCB8PiBKc3RyLnRvX3N0cmluZ1xuICAgICAgaW5cbiAgICAgIG1hdGNoIG9mX3N0cmluZyBmb250X3NpemUgd2l0aFxuICAgICAgfCBOb25lIC0+IDE2LlxuICAgICAgfCBTb21lIChQeCBpKSAtPiBpXG4gICAgICB8IFNvbWUgXyAtPiBmYWlsd2l0aCBcIm5vdCBpbXBsZW1lbnRlZFwiXG4gICAgaW5cbiAgICBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBpXG4gICAgfCBSZW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCAoRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSBpblxuICAgICAgICBmICouIGZvbnRfc2l6ZVxuICAgIHwgRW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCBwYXJlbnQgaW5cbiAgICAgICAgZiAqLiBmb250X3NpemVcbmVuZFxuXG5sZXQgbGlzdGVuIH5mIHQgPVxuICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIHQgaW5cbiAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+IGYgKEx3ZC5xdWlja19zYW1wbGUgcm9vdCkpO1xuICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG5cbmxldCBtYXAzIH5mIGEgYiBjID1cbiAgTHdkLm1hcDIgYSBiIH5mOihmdW4gYSBiIC0+IChhLCBiKSkgfD4gTHdkLm1hcDIgYyB+ZjooZnVuIGMgKGEsIGIpIC0+IGYgYSBiIGMpXG5cbmxldCB0cmlwbGUgYSBiIGMgPSBtYXAzIGEgYiBjIH5mOihmdW4gYSBiIGMgLT4gKGEsIGIsIGMpKVxuXG5tb2R1bGUgRm9yd2FyZF9yZWYgOiBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgZXhjZXB0aW9uIE5vdF9zZXRcbiAgZXhjZXB0aW9uIEFscmVhZHlfc2V0XG5cbiAgdmFsIG1ha2UgOiB1bml0IC0+ICdhIHRcbiAgdmFsIHNldF9leG4gOiAnYSB0IC0+ICdhIC0+IHVuaXRcbiAgdmFsIGdldF9leG4gOiAnYSB0IC0+ICdhXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2Egb3B0aW9uIHJlZlxuXG4gIGV4Y2VwdGlvbiBOb3Rfc2V0XG4gIGV4Y2VwdGlvbiBBbHJlYWR5X3NldFxuXG4gIGxldCBtYWtlICgpID0gcmVmIE5vbmVcblxuICBsZXQgc2V0X2V4biB0IHYgPVxuICAgIG1hdGNoICF0IHdpdGggTm9uZSAtPiB0IDo9IFNvbWUgdiB8IFNvbWUgXyAtPiByYWlzZSBBbHJlYWR5X3NldFxuXG4gIGxldCBnZXRfZXhuIHQgPSBtYXRjaCAhdCB3aXRoIE5vbmUgLT4gcmFpc2UgTm90X3NldCB8IFNvbWUgdiAtPiB2XG5lbmRcbiIsIm1vZHVsZSB0eXBlIENvbmZpZyA9IHNpZ1xuICB0eXBlIGxhbmdcblxuICAoKiB2YWwgZGVmYXVsdCA6IGxhbmcgKilcbiAgdmFsIGFjdGl2ZSA6IGxhbmcgTHdkLnZhclxuICB2YWwgZ2V0IDogbGFuZyAtPiBzdHJpbmcgLT4gc3RyaW5nXG5lbmRcblxubGV0IG1ha2UgKHR5cGUgYSkgKG1vZHVsZSBDIDogQ29uZmlnIHdpdGggdHlwZSBsYW5nID0gYSkgPVxuICBsZXQgZ2V0IHN0cmluZyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBDLmFjdGl2ZSkgfmY6KGZ1biBsYW5nIC0+IEpzdHIudiBAQCBDLmdldCBsYW5nIHN0cmluZylcbiAgaW5cbiAgbGV0IHNldCAobGFuZyA6IGEpID0gTHdkLnNldCBDLmFjdGl2ZSBsYW5nIGluXG4gIChzZXQsIGdldClcbiIsIm9wZW4gSW1wb3J0XG5cbmxldCB0b19qc3RyIHQgPSBKdi5yZXByIHQgfD4gQnJyLkpzb24uZW5jb2RlXG5sZXQgdG9fanYgdCA9IHRvX2pzdHIgdCB8PiBKdi5vZl9qc3RyXG5cbmxldCBvZl9qc3RyIGpzdHIgPVxuICBtYXRjaCBCcnIuSnNvbi5kZWNvZGUganN0ciB3aXRoXG4gIHwgT2sgdiAtPiBPayAoT2JqLm1hZ2ljIHYpXG4gIHwgRXJyb3IgZXJyIC0+XG4gICAgICBCcnIuQ29uc29sZS5lcnJvciBbIGVyciBdO1xuICAgICAgRXJyb3IgKGBNc2cgXCJGYWlsZWQgdG8gdW5tYXJzaGFsIGRhdGFcIilcblxubGV0IG9mX2p2IGp2ID0gSnYudG9fanN0ciBqdiB8PiBvZl9qc3RyXG4iLCJvcGVuIEltcG9ydFxubW9kdWxlIEI2NCA9IEJhc2U2NFxub3BlbiEgQnJyXG5tb2R1bGUgU3RvcmFnZSA9IEJycl9pby5TdG9yYWdlXG5cbmxldCBrZXlzID0gSGFzaHRibC5jcmVhdGUgNjRcblxubGV0IGNoZWNrX2tleSBrZXkgPVxuICBpZiBIYXNodGJsLm1lbSBrZXlzIGtleSB0aGVuXG4gICAgZmFpbHdpdGggQEAgUHJpbnRmLnNwcmludGYgXCJNdWx0aXBsZSBwZXJzaXRlbnQgdmFyIGFyZSB1c2luZyB0aGUga2V5ICVzXCIga2V5XG4gIGVsc2UgSGFzaHRibC5hZGQga2V5cyBrZXkgKClcblxubGV0IGxvY2FsX3N0b3JhZ2UgPSBTdG9yYWdlLmxvY2FsIEcud2luZG93XG5cbmxldCBzdG9yZSB+a2V5IHZhbHVlID1cbiAgRW5jb2RpbmdzLnRvX2pzdHIgdmFsdWUgfD4gU3RvcmFnZS5zZXRfaXRlbSBsb2NhbF9zdG9yYWdlIGtleVxuXG5sZXQgZmV0Y2ggfmtleSA9XG4gIGxldCBvcGVuIFJlc3VsdC5JbmZpeCBpblxuICBsZXQqIGVuY29kZWRfdmFsdWUgPVxuICAgIG1hdGNoIFN0b3JhZ2UuZ2V0X2l0ZW0gbG9jYWxfc3RvcmFnZSBrZXkgd2l0aFxuICAgIHwgTm9uZSAtPiBFcnJvciBgTm90X2ZvdW5kXG4gICAgfCBTb21lIHYgLT4gT2sgdlxuICBpblxuICBFbmNvZGluZ3Mub2ZfanN0ciBlbmNvZGVkX3ZhbHVlXG5cbmxldCBpbml0aWFsX3ZhbHVlIH5rZXkgZiA9XG4gIG1hdGNoIGZldGNoIH5rZXkgd2l0aFxuICB8IEVycm9yIGBOb3RfZm91bmQgLT4gZiAoKVxuICB8IEVycm9yIChgTXNnIG1zZykgLT5cbiAgICAgIENvbnNvbGUud2FybiBbIG1zZyBdO1xuICAgICAgZiAoKVxuICB8IE9rIHYgLT4gdlxuXG5sZXQgaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmID1cbiAgbWF0Y2ggZmV0Y2ggfmtleSB3aXRoXG4gIHwgRXJyb3IgYE5vdF9mb3VuZCAtPiBmICgpXG4gIHwgRXJyb3IgKGBNc2cgbXNnKSAtPlxuICAgICAgQ29uc29sZS53YXJuIFsgbXNnIF07XG4gICAgICBmICgpXG4gIHwgT2sgdiAtPiBGdXQub2sgQEAgdlxuXG5sZXQgbWFrZV9wZXJzaXN0ZW50X3ZhciB+a2V5IHZhbHVlID1cbiAgaWdub3JlIEBAIHN0b3JlIH5rZXkgdmFsdWU7XG4gIGxldCB2YXIgPSBMd2QudmFyIHZhbHVlIGluXG4gIGxldCByb290ID0gTHdkLm9ic2VydmUgKEx3ZC5nZXQgdmFyKSBpblxuICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgIGxldCBuZXdfdmFsdWUgPSBMd2QucXVpY2tfc2FtcGxlIHJvb3QgaW5cbiAgICAgIGlnbm9yZSBAQCBzdG9yZSB+a2V5IG5ld192YWx1ZSk7XG4gIGxldCBfID0gTHdkLnF1aWNrX3NhbXBsZSByb290IGluXG4gIHZhclxuXG5sZXQgdmFyX2YgfmtleSBmID1cbiAgbGV0ICgpID0gY2hlY2tfa2V5IGtleSBpblxuICBsZXQga2V5ID0gSnN0ci52IGtleSBpblxuICBsZXQgdmFsdWUgPSBpbml0aWFsX3ZhbHVlIH5rZXkgZiBpblxuICBtYWtlX3BlcnNpc3RlbnRfdmFyIH5rZXkgdmFsdWVcblxubGV0IHZhciB+a2V5IGRlZmF1bHQgPSB2YXJfZiB+a2V5IChmdW4gKCkgLT4gZGVmYXVsdClcblxubGV0IHZhcl9mdXQgKHR5cGUgYSBiKSB+a2V5IChmIDogdW5pdCAtPiAoYSwgYikgRnV0LnJlc3VsdCkgOlxuICAgIChhIEx3ZC52YXIsIGIpIEZ1dC5yZXN1bHQgPVxuICBsZXQgKCkgPSBjaGVja19rZXkga2V5IGluXG4gIGxldCBrZXkgPSBKc3RyLnYga2V5IGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgKHZhbHVlIDogYSkgPSAoaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmIDogKGEsIGIpIEZ1dC5yZXN1bHQpIGluXG4gIG1ha2VfcGVyc2lzdGVudF92YXIgfmtleSB2YWx1ZVxuIiwib3BlbiBJbXBvcnRcblxub3BlbiBCcnJcblxudHlwZSBzZWN0aW9uID0gLi5cbnR5cGUgYWN0aXZlID0gQWxsIHwgT25seSBvZiBzZWN0aW9uIGxpc3RcbnR5cGUgbGV2ZWxzID0gTG9nIHwgRXJyb3IgfCBJbmZvIHwgRGVidWdcblxubGV0IGxvZ2dlciA9IGZ1bmN0aW9uXG4gIHwgTG9nIC0+IENvbnNvbGUubG9nXG4gIHwgRXJyb3IgLT4gQ29uc29sZS5lcnJvclxuICB8IEluZm8gLT4gQ29uc29sZS5pbmZvXG4gIHwgRGVidWcgLT4gQ29uc29sZS5kZWJ1Z1xuXG50eXBlIHQgPSB7XG4gIGxvZyA6IENvbnNvbGUubG9nO1xuICBlcnJvciA6IENvbnNvbGUubG9nO1xuICBpbmZvIDogQ29uc29sZS5sb2c7XG4gIGRlYnVnIDogQ29uc29sZS5sb2c7XG59XG5cbmxldCBmb3Jfc2VjdGlvbiBzID1cbiAgbGV0IGxvZyAobCA6IENvbnNvbGUubG9nKSA/KGZtdCA9IFwiXCIpIG1zZyA9XG4gICAgbGV0IGZtdCA9IFByaW50Zi5zcHJpbnRmIFwiWyVzXSAlc1wiIHMgZm10IGluXG4gICAgbCAoZm10IDo6IG1zZylcbiAgaW5cbiAge1xuICAgIGxvZyA9IGxvZyBDb25zb2xlLmxvZztcbiAgICBlcnJvciA9IGxvZyBDb25zb2xlLmVycm9yO1xuICAgIGluZm8gPSBsb2cgQ29uc29sZS5pbmZvO1xuICAgIGRlYnVnID0gbG9nIENvbnNvbGUuZGVidWc7XG4gIH1cbiIsIm9wZW4gSW1wb3J0XG5cbm1vZHVsZSBDbGFzc2VzID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nLlNldFxuXG4gIHR5cGUgbm9ucmVjIHQgPSB0XG4gIHR5cGUgbW9kaWZpZXIgPSBBZGQgb2Ygc3RyaW5nIGxpc3QgfCBSZXBsYWNlIG9mIHN0cmluZyBsaXN0XG5cbiAgbGV0IG1ha2UgbCA9IG9mX2xpc3QgbFxuICBsZXQgdXBkYXRlIHQgPSBmdW5jdGlvbiBBZGQgbCAtPiBhZGRfbGlzdCB0IGwgfCBSZXBsYWNlIGwgLT4gb2ZfbGlzdCBsXG5cbiAgbGV0IHRvX3N0cmluZyB0ID1cbiAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4gYyAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgICAgUHJpbnRmLmJwcmludGYgYiBcIiVzXCIgYylcbiAgICAgICAgZWxzZSBQcmludGYuYnByaW50ZiBiIFwiICVzXCIgYylcbiAgICAgIHQ7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcblxuICBsZXQgYXRfb2Zfc3RyaW5nIGMgPSBCcnIuQXQuY2xhc3MnIEBAIEpzdHIudiBjXG5cbiAgbW9kdWxlIFAgPSBzdHJ1Y3RcbiAgICBsZXQgdG9fYXQgdCA9XG4gICAgICBMaXN0Lm1hcCAodG9fbGlzdCB0KSB+ZjooZnVuIGMgLT4gYFAgKEJyci5BdC5jbGFzcycgQEAgSnN0ci52IGMpKVxuICBlbmRcbmVuZFxuXG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgdCA9IHsgY2xhc3NlcyA6IENsYXNzZXMudDsgYXR0cnMgOiBBdC50IEVsd2QuY29sIH1cbigqKiBDbGFzc2VzIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBidXQgYXJlIGV2ZW50dWFsbHkgdHJhbnNsYXRlZCB0byBBdC50ICopXG5cbmxldCBlbXB0eSA9IHsgY2xhc3NlcyA9IENsYXNzZXMuZW1wdHk7IGF0dHJzID0gW10gfVxuXG5sZXQgdG9fYXQgP2lkIHQgPVxuICBsZXQgYXQgPSBMaXN0LnJldl9hcHBlbmQgdC5hdHRycyBAQCBDbGFzc2VzLlAudG9fYXQgdC5jbGFzc2VzIGluXG4gIG1hdGNoIGlkIHdpdGggTm9uZSAtPiBhdCB8IFNvbWUgaWQgLT4gYFAgKEF0LmlkIChKc3RyLnYgaWQpKSA6OiBhdFxuXG5sZXQgY2xhc3NlcyBsID0geyBlbXB0eSB3aXRoIGNsYXNzZXMgPSBDbGFzc2VzLm9mX2xpc3QgbCB9XG5cbmxldCB1bmlvbiB7IGNsYXNzZXM7IGF0dHJzIH0geyBjbGFzc2VzID0gYzsgYXR0cnMgPSBhIH0gPVxuICB7IGNsYXNzZXMgPSBDbGFzc2VzLnVuaW9uIGNsYXNzZXMgYzsgYXR0cnMgPSBMaXN0LnJldl9hcHBlbmQgYXR0cnMgYSB9XG5cbm1vZHVsZSBCdWlsZGVyID0gc3RydWN0XG4gIHR5cGUgYXQgPSBDIG9mIHN0cmluZyB8IEF0IG9mIEF0LnRcblxuICBsZXQgKCArICkgdCA9IGZ1bmN0aW9uXG4gICAgfCBDIGNsYXNzbmFtZSAtPlxuICAgICAgICBsZXQgY2xhc3NlcyA9IENsYXNzZXMuYWRkIGNsYXNzbmFtZSB0LmNsYXNzZXMgaW5cbiAgICAgICAgeyB0IHdpdGggY2xhc3NlcyB9XG4gICAgfCBBdCBhdCAtPlxuICAgICAgICBsZXQgYXR0cnMgPSBgUCBhdCA6OiB0LmF0dHJzIGluXG4gICAgICAgIHsgdCB3aXRoIGF0dHJzIH1cblxuICBsZXQgd2l0aF9pZCBzIHQgPVxuICAgIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICAgIHRvX2F0IHsgdCB3aXRoIGF0dHJzIH1cbmVuZFxuXG4oKiBuZXcgQVBJICopXG5cbmxldCBhZGQgYXRfbmFtZSB2IGF0ID1cbiAgbGV0IGEgPVxuICAgIG1hdGNoIHYgd2l0aFxuICAgIHwgYFAgdiAtPiBgUCAoQXQudiBhdF9uYW1lIEBAIEpzdHIudiB2KVxuICAgIHwgYFIgdiAtPiBgUiAoTHdkLm1hcCB2IH5mOihmdW4gdiAtPiBBdC52IGF0X25hbWUgQEAgSnN0ci52IHYpKVxuICAgIHwgYFMgXyAtPiBmYWlsd2l0aCBcIlRPRE8gbm90IGltcGxlbWVudGVkXCJcbiAgaW5cbiAgYSA6OiBhdFxuXG5sZXQgYWRkX2Jvb2wgYXRfIHYgYXQgPSBtYXRjaCB2IHdpdGggZmFsc2UgLT4gYXQgfCB0cnVlIC0+IGBQIGF0XyA6OiBhdFxuXG5sZXQgYWRkX3N0ciBhdF9uYW1lIHYgYXQgPVxuICBtYXRjaCB2IHdpdGggXCJcIiAtPiBhdCB8IHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikgOjogYXRcblxubGV0IGFkZF9vcHQgYXRfbmFtZSB2IGF0ID1cbiAgbWF0Y2ggdiB3aXRoIE5vbmUgLT4gYXQgfCBTb21lIHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikgOjogYXRcblxudHlwZSBhdCA9IEMgb2Ygc3RyaW5nIHwgQSBvZiBBdC50XG50eXBlICdhdCB0JyA9ICdhdCBFbHdkLmNvbFxuXG5sZXQgbWFwX2NvbCBmID0gZnVuY3Rpb25cbiAgfCBgUCB2IC0+IGBQIChmIHYpXG4gIHwgYFIgdiAtPiBgUiAoTHdkLm1hcCB2IH5mKVxuICB8IGBTIHYgLT4gYFMgKEx3ZF9zZXEubWFwIGYgdilcblxubGV0IG9mX2F0ID0gZnVuY3Rpb24gQSBhdCAtPiBhdCB8IEMgbmFtZSAtPiBBdC5jbGFzcycgKEpzdHIudiBuYW1lKVxubGV0IGNvbnMgYXQgdCA9IG1hcF9jb2wgb2ZfYXQgYXQgOjogdFxubGV0IGNsYXNzXyBuID0gY29ucyAobWFwX2NvbCAoZnVuIG4gLT4gQyBuKSBuKSBbXVxuXG5tb2R1bGUgTyA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyBhdCA9IGF0ID0gQyBvZiBzdHJpbmcgfCBBIG9mIEF0LnRcblxuICBsZXQgdiBhdCA9IGNvbnMgYXQgW11cbiAgbGV0ICggQDo6ICkgYXQgdCA9IGNvbnMgYXQgdFxuZW5kXG5cbmxldCB3aXRoX2lkIHMgdCA9XG4gIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICB0b19hdCB7IHQgd2l0aCBhdHRycyB9XG4iLCJvcGVuISBJbXBvcnRcbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxubGV0IHYgP2QgPyhhdCA9IFtdKSA/ZXYgdmFsdWUgPVxuICBsZXQgYXQgPVxuICAgIEF0dHJzLmFkZCBBdC5OYW1lLnR5cGUnIChgUCBcImJ1dHRvblwiKSBhdCB8PiBBdHRycy5hZGQgQXQuTmFtZS52YWx1ZSB2YWx1ZVxuICBpblxuICBFbHdkLmlucHV0ID9kIH5hdCA/ZXYgKClcblxudHlwZSAnYSB1cGRhdGUgPSBOb25lIHwgTmV4dCB8IFNldCBvZiAnYVxuXG50eXBlICdzdGF0ZSBoYW5kbGVyX3dpdGhfc3RhdGUgPVxuICB8IEhhbmRsZXJfd2l0aF9zdGF0ZSA6IHtcbiAgICAgIG9wdHMgOiBFdi5saXN0ZW5fb3B0cyBvcHRpb247XG4gICAgICB0eXBlJyA6ICdhIEV2LnR5cGUnO1xuICAgICAgZnVuYyA6ICdzdGF0ZSAtPiAnYSBFdi50IC0+ICdzdGF0ZSB1cGRhdGU7XG4gICAgfVxuICAgICAgLT4gJ3N0YXRlIGhhbmRsZXJfd2l0aF9zdGF0ZVxuXG5sZXQgaGFuZGxlciA/b3B0cyB0eXBlJyBmdW5jID0gSGFuZGxlcl93aXRoX3N0YXRlIHsgb3B0czsgdHlwZSc7IGZ1bmMgfVxuXG5tb2R1bGUgdHlwZSBTdGF0ZSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgZGVmYXVsdCA6IHRcbiAgdmFsIG5leHQgOiB0IC0+IHRcbmVuZFxuXG5sZXQgYXBwbHlfc3RhdGUgc3RhdGUgZiA9IGYgc3RhdGVcblxubGV0IHdpdGhfc3RhdGUgPyhiYXNlID0gQXR0cnMuZW1wdHkpICh0eXBlIHQpIChtb2R1bGUgUyA6IFN0YXRlIHdpdGggdHlwZSB0ID0gdClcbiAgICA/KHN0YXRlID0gUy5kZWZhdWx0KSA/ZCA/KGF0IDogKFMudCAtPiBBdHRycy50KSBvcHRpb24pXG4gICAgPyhldiA6IHQgaGFuZGxlcl93aXRoX3N0YXRlIEVsd2QuY29sIG9wdGlvbilcbiAgICAoY29udGVudCA6IFMudCAtPiBFbC50IEVsd2QuY29sKSA9XG4gIGxldCB2X3N0YXRlID0gTHdkLnZhciBzdGF0ZSBpblxuICBsZXQgZ2V0X3N0YXRlICgpID0gTHdkLmdldCB2X3N0YXRlIGluXG4gIGxldCBzZXRfc3RhdGUgdCA9IEx3ZC5zZXQgdl9zdGF0ZSB0IGluXG4gIGxldCBlbHQgPVxuICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgIGxldCQqIHN0YXRlID0gZ2V0X3N0YXRlICgpIGluXG4gICAgbGV0IHdpdGhfc3RhdGUgKEhhbmRsZXJfd2l0aF9zdGF0ZSB7IG9wdHM7IHR5cGUnOyBmdW5jIH0pID1cbiAgICAgIGxldCBmdW5jIGV2ID1cbiAgICAgICAgbWF0Y2ggZnVuYyBzdGF0ZSBldiB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICB8IFNldCBzIC0+IHNldF9zdGF0ZSBzXG4gICAgICAgIHwgTmV4dCAtPiBzZXRfc3RhdGUgQEAgUy5uZXh0IHN0YXRlXG4gICAgICBpblxuICAgICAgRWx3ZC5oYW5kbGVyID9vcHRzIHR5cGUnIGZ1bmNcbiAgICBpblxuICAgIGxldCBhdCA9XG4gICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmJhc2VcbiAgICAgICAgKGZ1biBhdCAtPiBBdHRycy51bmlvbiBiYXNlIEBAIGFwcGx5X3N0YXRlIHN0YXRlIGF0KVxuICAgICAgICBhdFxuICAgIGluXG4gICAgbGV0IGF0ID0gQXR0cnMudG9fYXQgYXQgaW5cbiAgICBsZXQgZXYgPVxuICAgICAgT3B0aW9uLm1hcFxuICAgICAgICAoTGlzdC5tYXAgfmY6KGZ1bmN0aW9uXG4gICAgICAgICAgfCBgUCBoIC0+IGBQICh3aXRoX3N0YXRlIGgpXG4gICAgICAgICAgfCBgUiBoIC0+IGBSIChMd2QubWFwIGggfmY6d2l0aF9zdGF0ZSlcbiAgICAgICAgICB8IGBTIGggLT4gYFMgKEx3ZF9zZXEubWFwIHdpdGhfc3RhdGUgaCkpKVxuICAgICAgICBldlxuICAgIGluXG4gICAgRWx3ZC5idXR0b24gP2QgfmF0ID9ldiAoY29udGVudCBzdGF0ZSlcbiAgaW5cbiAgKGVsdCwgZ2V0X3N0YXRlLCBzZXRfc3RhdGUpXG5cbnR5cGUgdHdvX3N0YXRlID0gT24gfCBPZmZcblxubW9kdWxlIFR3b19zdGF0ZSA9IHN0cnVjdFxuICB0eXBlIHQgPSB0d29fc3RhdGVcblxuICBsZXQgZGVmYXVsdCA9IE9uXG4gIGxldCBuZXh0ID0gZnVuY3Rpb24gT24gLT4gT2ZmIHwgT2ZmIC0+IE9uXG5lbmRcblxubGV0IHR3b19zdGF0ZSA/YmFzZSA9IHdpdGhfc3RhdGUgP2Jhc2UgKG1vZHVsZSBUd29fc3RhdGUpXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG50eXBlIHRhcmdldCA9IFBvcyBvZiBpbnQgfCBFbCBvZiBFbHdkLnRcbnR5cGUgdCA9IHsgZWx0IDogRWx3ZC50IEx3ZC50OyBzY3JvbGxfcG9zaXRpb24gOiB0YXJnZXQgb3B0aW9uIEx3ZC52YXIgfVxuXG4oKiBUT0RPOiBtYWtlIGEgcHJvcGVyIGJpbmRpbmcgKilcbmxldCBqc19zY3JvbGwgZWx0IHRhcmdldCA9XG4gIG1hdGNoIHRhcmdldCB3aXRoXG4gIHwgUG9zIHggLT5cbiAgICAgIGxldCBlbHQgPSBFbC50b19qdiBlbHQgaW5cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIGVsdCBcInNjcm9sbFwiIFt8IEp2Lm9mX2ludCAwOyBKdi5vZl9pbnQgeCB8XVxuICB8IEVsIGVsIC0+IEVsLnNjcm9sbF9pbnRvX3ZpZXcgZWxcblxubGV0IG1ha2UgPyhhdCA9IFtdKSA/KGV2ID0gW10pID9vbl9jcmVhdGUgfnNjcm9sbF90YXJnZXQgZWx0ID1cbiAgbGV0IGFjdGl2ZSA9IEx3ZC52YXIgdHJ1ZSBpblxuICBsZXQgYWN0aXZlX2NsYXNzID1cbiAgICBMd2QubWFwIChMd2QuZ2V0IGFjdGl2ZSkgfmY6KGZ1bmN0aW9uXG4gICAgICB8IGZhbHNlIC0+IEF0dHJzLkEgQXQudm9pZFxuICAgICAgfCB0cnVlIC0+IEF0dHJzLkEgKEF0LmNsYXNzJyAoSnN0ci52IFwibG9ja2VkXCIpKSlcbiAgaW5cbiAgbGV0IGF0ID1cbiAgICBBdHRycy5PLihcbiAgICAgIGBQIChDIFwibHdkdWktY29udHJvbGxlZC1zY3JvbGwtd3JhcHBlclwiKSBAOjogYFIgYWN0aXZlX2NsYXNzIEA6OiBhdClcbiAgaW5cbiAgbGV0IGNvbnRyb2xzID1cbiAgICBsZXQgYXQgPSBBdHRycy5jbGFzc18gKGBQIFwibHdkdWktY29udHJvbGxlZC1zY3JvbGwtY29udHJvbHNcIikgaW5cbiAgICBsZXQgZXYgPVxuICAgICAgbGV0IG9uX2NsaWNrIF8gPSBMd2Quc2V0IGFjdGl2ZSB0cnVlIGluXG4gICAgICBsZXQgaGFuZGxlciA9IEVsd2QuaGFuZGxlciBFdi5jbGljayBvbl9jbGljayBpblxuICAgICAgWyBgUCBoYW5kbGVyIF1cbiAgICBpblxuICAgIEVsd2QuZGl2IH5hdCB+ZXYgWyBgUiAoRWx3ZC5idXR0b24gWyBgUCAoRWwudHh0JyBcIlNob3cgcGxheWluZ1wiKSBdKSBdXG4gIGluXG4gIGxldCBvbl93aGVlbCA9XG4gICAgRWx3ZC5oYW5kbGVyIEV2LndoZWVsIChmdW4gX2V2IC0+XG4gICAgICAgIGlmIEx3ZC5wZWVrIGFjdGl2ZSB0aGVuIEx3ZC5zZXQgYWN0aXZlIGZhbHNlKVxuICBpblxuICBsZXQgZWx0ID1cbiAgICBsZXQgc3RhdGUgPSBVdGlscy50cmlwbGUgZWx0IChMd2QuZ2V0IGFjdGl2ZSkgc2Nyb2xsX3RhcmdldCBpblxuICAgIEx3ZC5tYXAgc3RhdGUgfmY6KGZ1biAoZWx0LCBhY3RpdmUsIHBvcykgLT5cbiAgICAgICAgaWYgYWN0aXZlIHRoZW4gT3B0aW9uLml0ZXIgKGpzX3Njcm9sbCBlbHQpIHBvcztcbiAgICAgICAgZWx0KVxuICBpblxuICBFbHdkLmRpdiB+YXQgfmV2OihgUCBvbl93aGVlbCA6OiBldikgP29uX2NyZWF0ZSBbIGBSIGVsdDsgYFIgY29udHJvbHMgXVxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyZXIuQnJyXG5vcGVuIEJycl9sd2Rcbm1vZHVsZSBGaWVsZCA9IEZpZWxkXG5cbnR5cGUgKCd0LCAnYSkgZm9ybV9zZXR0ZXIgPSAndCAtPiAnYSBGaWVsZC52YWxpZGF0aW9uIC0+ICd0XG5cbnR5cGUgJ3JlcyBmb3JtX2ZpZWxkID1cbiAgfCBGIDogJ2EgRmllbGQudCAqICgnZm9ybSwgJ2EpIGZvcm1fc2V0dGVyIC0+ICdmb3JtIGZvcm1fZmllbGRcblxubW9kdWxlIHR5cGUgRm9ybSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgZGVmYXVsdCA6IHRcbiAgdmFsIGZpZWxkcyA6IHQgZm9ybV9maWVsZCBMd2QudCBMd2Rfc2VxLnQgTHdkLnRcbmVuZFxuXG5sZXQgZmllbGQgZmllbGQgc2V0dGVyID0gTHdkLm1hcCBmaWVsZCB+ZjooZnVuIGZpZWxkIC0+IEYgKGZpZWxkLCBzZXR0ZXIpKVxuXG5sZXQgY3JlYXRlID9kID9hdCA/ZXYgKHR5cGUgdCkgKG1vZHVsZSBGb3JtIDogRm9ybSB3aXRoIHR5cGUgdCA9IHQpIG9uX3N1Ym1pdCA6XG4gICAgRWx3ZC50IEx3ZC50ID1cbiAgbGV0IGZpZWxkcyA9XG4gICAgTHdkX3NlcS5saWZ0IEZvcm0uZmllbGRzXG4gICAgfD4gTHdkX3NlcS5mb2xkX21vbm9pZFxuICAgICAgICAgKGZ1biAoRiAoZmllbGQsIG1hcHBlcikpIC0+XG4gICAgICAgICAgICggTHdkX3NlcS5lbGVtZW50IGZpZWxkLmVsdCxcbiAgICAgICAgICAgICBsZXQgdmFsdWUgKCkgPVxuICAgICAgICAgICAgICAgbWF0Y2ggTHdkLnBlZWsgZmllbGQudmFsdWUgd2l0aFxuICAgICAgICAgICAgICAgfCBOb25lIC0+IEZpZWxkLkVtcHR5XG4gICAgICAgICAgICAgICB8IFNvbWUgdiAtPiBmaWVsZC52YWxpZGF0ZSB2XG4gICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICBmdW4gdCAtPiBtYXBwZXIgdCBAQCB2YWx1ZSAoKSApKVxuICAgICAgICAgKCAoTHdkX3NlcS5lbXB0eSwgRnVuLmlkKSxcbiAgICAgICAgICAgZnVuIChlbHRzLCBmKSAoZWx0cycsIGYnKSAtPlxuICAgICAgICAgICAgIChMd2Rfc2VxLmNvbmNhdCBlbHRzIGVsdHMnLCBmdW4gdCAtPiBmJyAoZiB0KSkgKVxuICBpblxuICBsZXQgaGFuZGxlciA9XG4gICAgTHdkLm1hcCBmaWVsZHMgfmY6KGZ1biAoXywgdmFsdWUpIC0+XG4gICAgICAgIGxldCBvbl9zdWJtaXQgZSA9XG4gICAgICAgICAgb25fc3VibWl0IEBAIHZhbHVlIEZvcm0uZGVmYXVsdDtcbiAgICAgICAgICBFdi5wcmV2ZW50X2RlZmF1bHQgZVxuICAgICAgICBpblxuICAgICAgICBFbHdkLmhhbmRsZXIgRXYuc3VibWl0IG9uX3N1Ym1pdClcbiAgaW5cbiAgbGV0IG9uX3N1Ym1pdCA9IGBSIGhhbmRsZXIgaW5cbiAgbGV0IGVsdHMgPSBMd2QubWFwIGZpZWxkcyB+ZjooZnVuIChlbHRzLCBfKSAtPiBlbHRzKSBpblxuICBsZXQgZXYgPSBPcHRpb24ubWFwX29yIH5kZWZhdWx0Olsgb25fc3VibWl0IF0gKExpc3QuY29ucyBvbl9zdWJtaXQpIGV2IGluXG4gIEVsd2QuZm9ybSA/ZCA/YXQgfmV2IFsgYFMgKEx3ZF9zZXEubGlmdCBlbHRzKSBdXG4iLCJvcGVuISBJbXBvcnRcbm9wZW4hIEJycmVyXG5vcGVuISBCcnJcbm9wZW4hIEJycl9sd2RcblxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHtcbiAgZmllbGQgOiBFbHdkLnQgTHdkLnQ7XG4gIGxhYmVsIDogRWx3ZC50IEx3ZC50O1xuICB2YWx1ZSA6ICdhIEx3ZC50O1xufVxuXG5sZXQgbmFtZSB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLS1pZFwiIGJhc2VfbmFtZVxuICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJXNcIiBiYXNlX25hbWVcblxubGV0IG1ha2UgPyhhdCA9IFtdKSA/KGV2ID0gW10pIChkZXNjIDogc3RyaW5nIG9wdGlvbiBGaWVsZC5kZXNjKSA9XG4gIGxldCBpZCA9IG5hbWUgfmlkOnRydWUgZGVzYy5uYW1lIGluXG4gIGxldCBuYW1lID0gbmFtZSB+aWQ6ZmFsc2UgZGVzYy5uYW1lIGluXG4gIGxldCB2YXIgPSBQZXJzaXN0ZW50LnZhciB+a2V5OmlkIGRlc2MuZGVmYXVsdCBpblxuICBsZXQgbGFiZWwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGRlc2MubGFiZWwgaW5cbiAgbGV0IGZpZWxkID1cbiAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgYXRcbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJ0ZXh0XCIpXG4gICAgaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbWF0Y2ggTHdkLnBlZWsgdmFyIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IGBQIChBdC52YWx1ZSBAQCBKc3RyLnYgdikgOjogYXRcbiAgICAgIHwgTm9uZSAtPiBhdFxuICAgIGluXG4gICAgbGV0IG9uX2NoYW5nZSA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYua2V5dXAgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCB2YWx1ZSA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChTb21lIChKdi50b19zdHJpbmcgdmFsdWUpKSlcbiAgICBpblxuICAgIGxldCBldiA9IGBQIG9uX2NoYW5nZSA6OiBldiBpblxuICAgIEVsd2QuaW5wdXQgfmF0IH5ldiAoKVxuICBpblxuICB7IGZpZWxkOyBsYWJlbDsgdmFsdWUgPSBMd2QuZ2V0IHZhciB9XG4iLCJvcGVuISBJbXBvcnRcbm9wZW4hIEJycmVyXG5vcGVuISBCcnJcbm9wZW4hIEJycl9sd2RcblxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHtcbiAgZmllbGQgOiBFbHdkLnQgTHdkLnQ7XG4gIGxhYmVsIDogRWx3ZC50IEx3ZC50O1xuICB2YWx1ZSA6ICdhIEx3ZC50O1xufVxuXG5sZXQgbmFtZSB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLS1pZFwiIGJhc2VfbmFtZSBlbHNlIGJhc2VfbmFtZVxuXG5sZXQgbWFrZSA/KGF0ID0gW10pID8oZXYgPSBbXSkgKGRlc2MgOiBzdHJpbmcgRmllbGQuZGVzYykgb3B0aW9ucyA9XG4gIGxldCBpZCA9IG5hbWUgfmlkOnRydWUgZGVzYy5uYW1lIGluXG4gIGxldCBuYW1lID0gbmFtZSB+aWQ6ZmFsc2UgZGVzYy5uYW1lIGluXG4gIGxldCB2YXIgPSBQZXJzaXN0ZW50LnZhciB+a2V5OmlkIGRlc2MuZGVmYXVsdCBpblxuICBsZXQgbGFiZWwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGRlc2MubGFiZWwgaW5cbiAgbGV0IGZpZWxkID1cbiAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgYXRcbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJ0ZXh0XCIpXG4gICAgaW5cbiAgICBsZXQgb25fY2hhbmdlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5jaGFuZ2UgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCB2YWx1ZSA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChKdi50b19zdHJpbmcgdmFsdWUpKVxuICAgIGluXG4gICAgbGV0IGV2ID0gYFAgb25fY2hhbmdlIDo6IGV2IGluXG4gICAgbGV0IG9wdGlvbnMgPVxuICAgICAgTHdkX3NlcS5tYXBcbiAgICAgICAgKGZ1biAodmFsdWUsIG5hbWUpIC0+XG4gICAgICAgICAgbGV0IG9wZW4gQXR0cnMuTyBpblxuICAgICAgICAgIGxldCBhdCA9IHYgKGBQIChBIChBdC52YWx1ZSBAQCBKc3RyLnYgdmFsdWUpKSkgaW5cbiAgICAgICAgICBsZXQgc2VsZWN0ZWQgPVxuICAgICAgICAgICAgTHdkLm1hcCAoTHdkLmdldCB2YXIpIH5mOihmdW4gc2VsZWN0ZWQgLT5cbiAgICAgICAgICAgICAgICBBIChBdC5pZicgKEVxdWFsLnBvbHkgc2VsZWN0ZWQgdmFsdWUpIEF0LnNlbGVjdGVkKSlcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBhdCA9IGBSIHNlbGVjdGVkIEA6OiBhdCBpblxuICAgICAgICAgIEVsd2Qub3B0aW9uIH5hdCBbIGBQIChFbC50eHQnIG5hbWUpIF0pXG4gICAgICAgIG9wdGlvbnNcbiAgICBpblxuICAgIEVsd2Quc2VsZWN0IH5hdCB+ZXYgWyBgUyAoTHdkX3NlcS5saWZ0IG9wdGlvbnMpIF1cbiAgaW5cbiAgeyBmaWVsZDsgbGFiZWw7IHZhbHVlID0gTHdkLmdldCB2YXIgfVxuIiwib3BlbiEgSW1wb3J0XG5vcGVuISBCcnJcbm9wZW4hIEJycl9sd2RcblxudHlwZSBjaGVja2VkID0gYm9vbFxudHlwZSBsYWJlbCA9IEVsd2QudCBFbHdkLmNvbFxudHlwZSAndmFsdWUgZGVzYyA9IENoZWNrIG9mICd2YWx1ZSAqIGxhYmVsICogY2hlY2tlZFxuKCogVE9ETyB8IEdyb3VwIG9mIGxhYmVsICogJ3ZhbHVlIGRlc2MgbGlzdCAqKVxuXG50eXBlICd2YWx1ZSB0ID0geyBuYW1lIDogc3RyaW5nOyBkZXNjIDogJ3ZhbHVlIGRlc2MgTHdkX3NlcS50IEx3ZC50IH1cbnR5cGUgJ2EgcmVhY3RpdmVfZmllbGQgPSB7IGZpZWxkIDogRWx3ZC50IEx3ZC50OyB2YWx1ZSA6ICdhIEx3ZC50IH1cblxubGV0IG5hbWUgfmcgfm4gfmlkIGJhc2VfbmFtZSA9XG4gIGlmIGlkIHRoZW4gUHJpbnRmLnNwcmludGYgXCIlcy0laS0laS1pZFwiIGJhc2VfbmFtZSBnIG5cbiAgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVzLSVpLSVpXCIgYmFzZV9uYW1lIGcgblxuXG5sZXQgbWFrZSB0ID1cbiAgbGV0IG1ha2VfY2hlY2sgfmcgfm4gdmFsdWUgbGFiZWwgY2hlY2tlZCA9XG4gICAgbGV0IGlkID0gbmFtZSB+ZyB+biB+aWQ6dHJ1ZSB0Lm5hbWUgaW5cbiAgICBsZXQgbmFtZSA9IG5hbWUgfmcgfm4gfmlkOmZhbHNlIHQubmFtZSBpblxuICAgIGxldCByZXN1bHQgY2hlY2tlZCA9IGlmIGNoZWNrZWQgdGhlbiBTb21lIHZhbHVlIGVsc2UgTm9uZSBpblxuICAgIGxldCB2YXIgPSBQZXJzaXN0ZW50LnZhciB+a2V5OmlkIChyZXN1bHQgY2hlY2tlZCkgaW5cbiAgICBsZXQgbGJsID0gRWx3ZC5sYWJlbCB+YXQ6WyBgUCAoQXQuZm9yJyAoSnN0ci52IGlkKSkgXSBsYWJlbCBpblxuICAgIGxldCBhdCA9XG4gICAgICBsZXQgb3BlbiBBdHRycyBpblxuICAgICAgYWRkIEF0Lk5hbWUuaWQgKGBQIGlkKSBbXVxuICAgICAgfD4gYWRkIEF0Lk5hbWUubmFtZSAoYFAgbmFtZSlcbiAgICAgIHw+IGFkZCBBdC5OYW1lLnR5cGUnIChgUCBcImNoZWNrYm94XCIpXG4gICAgaW5cbiAgICBsZXQgY2hlY2tlZCA9XG4gICAgICBMd2QubWFwIChMd2QuZ2V0IHZhcikgfmY6KGZ1bmN0aW9uXG4gICAgICAgIHwgU29tZSBfIC0+IEF0LmNoZWNrZWRcbiAgICAgICAgfCBOb25lIC0+IEF0LnZvaWQpXG4gICAgaW5cbiAgICBsZXQgYXQgPSBgUiBjaGVja2VkIDo6IGF0IGluXG4gICAgbGV0IG9uX2NoYW5nZSA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuY2hhbmdlIChmdW4gZXYgLT5cbiAgICAgICAgICBsZXQgdCA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgaW5cbiAgICAgICAgICBsZXQgY2hlY2tlZCA9IEp2LmdldCB0IFwiY2hlY2tlZFwiIGluXG4gICAgICAgICAgTHdkLnNldCB2YXIgKHJlc3VsdCAoSnYudG9fYm9vbCBjaGVja2VkKSkpXG4gICAgaW5cbiAgICBsZXQgZXYgPSBbIGBQIG9uX2NoYW5nZSBdIGluXG4gICAgKEVsd2QuKGRpdiBbIGBSIChpbnB1dCB+YXQgfmV2ICgpKTsgYFIgbGJsIF0pLCBMd2QuZ2V0IHZhcilcbiAgaW5cbiAgKCogPGZpZWxkc2V0PjxsZWdlbmQ+ICopXG4gICgqIDxmaWVsZHNldD48bGVnZW5kPiAqKVxuICBsZXQgbWFrZV9hbGwgfmcgZGVzYyA9XG4gICAgbGV0IG4gPSByZWYgMCBpblxuICAgIEx3ZF9zZXEubWFwXG4gICAgICAoZnVuY3Rpb25cbiAgICAgICAgfCBDaGVjayAodiwgbCwgYykgLT5cbiAgICAgICAgICAgIGxldCBlbHQsIHZhbHVlID0gbWFrZV9jaGVjayB+ZyB+bjohbiB2IGwgYyBpblxuICAgICAgICAgICAgaW5jciBuO1xuICAgICAgICAgICAgKGVsdCwgdmFsdWUpKVxuICAgICAgZGVzY1xuICBpblxuICBsZXQgYWxsID0gbWFrZV9hbGwgfmc6MCB0LmRlc2MgaW5cbiAgbGV0IGVsdHMgPSBMd2Rfc2VxLm1hcCAoZnVuIChlbHQsIF8pIC0+IGVsdCkgYWxsIGluXG4gIGxldCB2YWx1ZSA9XG4gICAgTHdkX3NlcS5mb2xkX21vbm9pZCAoZnVuIChfLCB2KSAtPiBMd2Rfc2VxLmVsZW1lbnQgdikgTHdkX3NlcS5tb25vaWQgYWxsXG4gICAgfD4gTHdkX3NlcS5saWZ0IHw+IEx3ZF9zZXEuZmlsdGVyX21hcCBGdW4uaWRcbiAgaW5cbiAgeyBmaWVsZCA9IEVsd2QuZGl2IFsgYFMgKEx3ZF9zZXEubGlmdCBlbHRzKSBdOyB2YWx1ZSB9XG5cbigqIGxldCByZWMgbWFrZV9hbGwgfmcgfm4gKGFjY19lbHQsIGFjY192YWx1ZSkgZGVzYyA9XG4gICAgIG1hdGNoIGRlc2Mgd2l0aFxuICAgICB8IENoZWNrICh2LCBsLCBjKSA6OiB0bCAtPlxuICAgICAgICAgbGV0IGVsdCwgdmFsdWUgPSBtYWtlX2NoZWNrIH5nIH5uIHYgbCBjIGluXG4gICAgICAgICBsZXQgYWNjX2VsdCA9IEx3ZF9zZXEuY29uY2F0IGFjY19lbHQgQEAgTHdkX3NlcS5lbGVtZW50IGVsdCBpblxuICAgICAgICAgbGV0IGFjY192YWx1ZSA9XG4gICAgICAgICAgIEx3ZC5tYXAyIGFjY192YWx1ZSB2YWx1ZSB+ZjooZnVuIGFjYyAtPiBmdW5jdGlvblxuICAgICAgICAgICAgIHwgTm9uZSAtPiBhY2MgfCBTb21lIHYgLT4gdiA6OiBhY2MpXG4gICAgICAgICBpblxuICAgICAgICAgbWFrZV9hbGwgfmcgfm46KG4gKyAxKSAoYWNjX2VsdCwgYWNjX3ZhbHVlKSB0bFxuICAgICB8IF8gLT4gKEx3ZC5wdXJlIGFjY19lbHQsIGFjY192YWx1ZSlcbiAgIGluXG4gICBsZXQgZWx0cywgdmFsdWUgPSBtYWtlX2FsbCB+ZzowIH5uOjAgKEx3ZF9zZXEuZW1wdHksIEx3ZC5wdXJlIFtdKSB0LmRlc2MgaW5cbiAgIHsgZmllbGQgPSBFbHdkLmRpdiBbIGBTIChMd2Rfc2VxLmxpZnQgZWx0cykgXTsgdmFsdWUgfSAqKVxuIiwiKCogVGhlIGltcGxlbWVudGF0aW9uIGlzIGluc3BpcmVkIGJ5IFNpZXZlOlxuICAgLSBodHRwczovL2NhY2hlbW9uLmdpdGh1Yi5pby9TSUVWRS13ZWJzaXRlL1xuICAgLSBodHRwczovL2p1bmNoZW5neWFuZy5jb20vcHVibGljYXRpb24vbnNkaTI0LVNJRVZFLnBkZlxuXG4gICBTaWV2ZSB1c2VzIGEgZG91Ymx5LWxpbmtlZCBsaXN0IGFuZCBhIFwiaGFkIHBvaW50ZXJcIi5cbiAgIFdlIHVzZSBhIEZJRk8gYW5kIHJlcGxhY2UgdGhlIGhhbmQgYnkgYW5vdGhlciBGSUZPLlxuXG4gICBUaGUgaWRlYSB3YXMgc3VnZ2VzdGVkIGJ5IEBhcnQtdyAqKVxuXG4oKiBBIFtSQV9xdWV1ZV0gcGFpcnMgYSBbUXVldWUudF0gd2l0aCBhIFtIYXNodGJsLnRdIHRvIGVuYWJsZSBlZmZpY2llbnQgcmFuZG9tXG4gICBhY2Nlc3MgdG8gZWxlbWVudHMgb2YgdGhlIHF1ZXVlLiAqKVxubW9kdWxlIFJBX3F1ZXVlIChLZXkgOiBNYXAuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBRdWV1ZSA9IENDRlF1ZXVlXG4gIG1vZHVsZSBNYXAgPSBNYXAuTWFrZSAoS2V5KVxuXG4gIHR5cGUgJ3YgdCA9IHsgcXVldWUgOiBLZXkudCBRdWV1ZS50OyBlbHRzIDogJ3YgTWFwLnQgfVxuXG4gIGxldCBzaXplIHQgPSBRdWV1ZS5zaXplIHQucXVldWVcbiAgbGV0IGNyZWF0ZSAoKSA9IHsgcXVldWUgPSBRdWV1ZS5lbXB0eTsgZWx0cyA9IE1hcC5lbXB0eSB9XG4gIGxldCBlbXB0eSA9IHsgcXVldWUgPSBRdWV1ZS5lbXB0eTsgZWx0cyA9IE1hcC5lbXB0eSB9XG4gIGxldCBhZGQgdCBrIHggPSB7IHF1ZXVlID0gUXVldWUuY29ucyBrIHQucXVldWU7IGVsdHMgPSBNYXAuYWRkIGsgeCB0LmVsdHMgfVxuXG4gIGxldCB0YWtlX29wdCB0ID1cbiAgICBtYXRjaCBRdWV1ZS50YWtlX2JhY2sgdC5xdWV1ZSB3aXRoXG4gICAgfCBOb25lIC0+ICh0LCBOb25lKVxuICAgIHwgU29tZSAocXVldWUsIGspIC0+XG4gICAgICAgIGxldCB4ID0gTWFwLmZpbmQgayB0LmVsdHMgaW5cbiAgICAgICAgKHsgcXVldWU7IGVsdHMgPSBNYXAucmVtb3ZlIGsgdC5lbHRzIH0sIFNvbWUgKGssIHgpKVxuXG4gIGxldCBmaW5kIHQgayA9IE1hcC5maW5kX29wdCBrIHQuZWx0c1xuZW5kXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgdHlwZSBrZXlcbiAgKCoqIFRoZSB0eXBlIG9mIHRoZSBjYWNoZSBrZXlzLiAqKVxuXG4gIHR5cGUgKyEnYSB0XG4gICgqKiBUaGUgdHlwZSBvZiBjYWNoZXMgZnJvbSB0eXBlIFtrZXldIHRvIHR5cGUgWydhXS4gKilcblxuICB2YWwgY3JlYXRlIDogc2l6ZTppbnQgLT4gJ2EgdFxuICAoKiogQ3JlYXRlcyBhbiBlbXB0eSBjYWNoZS4gKilcblxuICB2YWwgaW5zZXJ0IDpcbiAgICAnYSB0IC0+XG4gICAgP29uX2luc2VydDooJ2EgLT4gdW5pdCkgLT5cbiAgICA/b25fZXZpY3Q6KCdhIC0+IHVuaXQpIC0+XG4gICAga2V5IC0+XG4gICAgJ2EgLT5cbiAgICAnYSB0ICogYm9vbFxuZW5kXG5cbm1vZHVsZSBNYWtlIChLZXkgOiBNYXAuT3JkZXJlZFR5cGUpIDogUyB3aXRoIHR5cGUga2V5ID0gS2V5LnQgPSBzdHJ1Y3RcbiAgbW9kdWxlIFJBX3F1ZXVlID0gUkFfcXVldWUgKEtleSlcblxuICB0eXBlIGtleSA9IEtleS50XG4gIHR5cGUgJ2EgZWx0ID0geyBlbHQgOiAnYTsgdmlzaXRlZCA6IGJvb2wgcmVmIH1cbiAgdHlwZSAnYSB0ID0geyBxMSA6ICdhIGVsdCBSQV9xdWV1ZS50OyBxMiA6ICdhIGVsdCBSQV9xdWV1ZS50OyBzaXplIDogaW50IH1cblxuICBsZXQgY3JlYXRlIH5zaXplID1cbiAgICBsZXQgcTEgPSBSQV9xdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgcTIgPSBSQV9xdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICB7IHExOyBxMjsgc2l6ZSB9XG5cbiAgKCoqIFtldmljdF9vbmUgdF0gZmlyc3QgdHJpZXMgdG8gZXZpY3QgdGhlIGxhc3QgZWxlbWVudCBvZiBbdC5xMl0uXG4gICAgSWYgdGhhdCBsYXN0IGVsZW1lbnQgaGFzIGJlZW4gdmlzaXRlZCwgaXQgaXMgbW92ZWQgdG8gdGhlIGhlYWQgb2YgW3QucTFdLlxuICAgIExvb3AgdW50aWwgYW4gZWxlbWVudCBpcyBldmljdGVkIG9yIFt0LnEyXSBpcyBlbXB0eS5cbiAgICBJZiBbdC5xMl0gaXMgZW1wdHkgd2UgcGVyZm9ybSB0aGUgc2FtZSBwcm9jZXNzIGJ5IGludmVyc2luZyB0aGUgcm9sZXMgb2ZcbiAgICBbdC5xMl0gYW5kIFt0LnExXS5cblxuICAgIC8hXFwgVGhpcyBmdW5jdGlvbiB3aWxsIGxvb3AgaWYgYm90aCBxdWV1ZXMgYXJlIGVtcHR5LiAqKVxuICBsZXQgcmVjIGV2aWN0X29uZSB+b25fZXZpY3QgdCA9IGV2aWN0X3EyIH5vbl9ldmljdCB0XG5cbiAgYW5kIGV2aWN0X3EyIH5vbl9ldmljdCB0ID1cbiAgICBtYXRjaCBSQV9xdWV1ZS50YWtlX29wdCB0LnEyIHdpdGhcbiAgICB8IHEyLCBTb21lIChrLCB7IGVsdDsgdmlzaXRlZCB9KSB3aGVuICF2aXNpdGVkIC0+XG4gICAgICAgIGxldCBxMSA9IFJBX3F1ZXVlLmFkZCB0LnExIGsgeyBlbHQ7IHZpc2l0ZWQgPSByZWYgZmFsc2UgfSBpblxuICAgICAgICBldmljdF9xMiB+b25fZXZpY3QgeyB0IHdpdGggcTE7IHEyIH1cbiAgICB8IHEyLCBTb21lIChfaywgeyBlbHQ7IF8gfSkgLT5cbiAgICAgICAgb25fZXZpY3QgZWx0O1xuICAgICAgICB7IHQgd2l0aCBxMiB9XG4gICAgfCBfLCBOb25lIC0+IGV2aWN0X3ExIH5vbl9ldmljdCB0XG5cbiAgYW5kIGV2aWN0X3ExIH5vbl9ldmljdCB0ID1cbiAgICBtYXRjaCBSQV9xdWV1ZS50YWtlX29wdCB0LnExIHdpdGhcbiAgICB8IHExLCBTb21lIChrLCB7IGVsdDsgdmlzaXRlZCB9KSB3aGVuICF2aXNpdGVkIC0+XG4gICAgICAgIGxldCBxMiA9IFJBX3F1ZXVlLmFkZCB0LnEyIGsgeyBlbHQ7IHZpc2l0ZWQgPSByZWYgZmFsc2UgfSBpblxuICAgICAgICBldmljdF9xMSB+b25fZXZpY3QgeyB0IHdpdGggcTE7IHEyIH1cbiAgICB8IHExLCBTb21lIChfaywgeyBlbHQ7IF8gfSkgLT5cbiAgICAgICAgb25fZXZpY3QgZWx0O1xuICAgICAgICB7IHQgd2l0aCBxMSB9XG4gICAgfCBfLCBOb25lIC0+IGV2aWN0X3EyIH5vbl9ldmljdCB0XG5cbiAgbGV0IHJlYyBldmljdCB+b25fZXZpY3QgdCA9XG4gICAgbGV0IHNpemUgPSBSQV9xdWV1ZS5zaXplIHQucTEgKyBSQV9xdWV1ZS5zaXplIHQucTIgaW5cbiAgICBpZiBzaXplID4gMCAmJiBzaXplID4gdC5zaXplIHRoZW4gZXZpY3Qgfm9uX2V2aWN0IChldmljdF9vbmUgfm9uX2V2aWN0IHQpXG4gICAgZWxzZSB0XG5cbiAgbGV0IGluc2VydCB0ID8ob25faW5zZXJ0ID0gaWdub3JlKSA/KG9uX2V2aWN0ID0gaWdub3JlKSBrIHggPVxuICAgIG1hdGNoIFJBX3F1ZXVlLmZpbmQgdC5xMSBrIHdpdGhcbiAgICB8IFNvbWUgeyBlbHQ7IHZpc2l0ZWQgfSAtPlxuICAgICAgICAoKiBJZiB0aGUgZWx0IGlzIGFscmVhZHkgaW4gcTEgd2UgbWFyayBpdCBhcyB2aXNpdGVkICopXG4gICAgICAgIHZpc2l0ZWQgOj0gdHJ1ZTtcbiAgICAgICAgKHQsIGZhbHNlKVxuICAgIHwgTm9uZSAtPiAoXG4gICAgICAgIG1hdGNoIFJBX3F1ZXVlLmZpbmQgdC5xMiBrIHdpdGhcbiAgICAgICAgKCogSWYgdGhlIGVsdCBpcyBhbHJlYWR5IGluIHEyIHdlIG1hcmsgaXQgYXMgdmlzaXRlZCAqKVxuICAgICAgICB8IFNvbWUgeyBlbHQ7IHZpc2l0ZWQgfSAtPlxuICAgICAgICAgICAgdmlzaXRlZCA6PSB0cnVlO1xuICAgICAgICAgICAgKHQsIGZhbHNlKVxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICgqIElmIHRoZSBlbHQgd2FzIG5vdCB5ZXQgaW4gdGhlIGNhY2hlIHdlIGFkZCBpdCB0byBxMSAqKVxuICAgICAgICAgICAgbGV0IHExID0gUkFfcXVldWUuYWRkIHQucTEgayB7IGVsdCA9IHg7IHZpc2l0ZWQgPSByZWYgZmFsc2UgfSBpblxuICAgICAgICAgICAgb25faW5zZXJ0IHg7XG4gICAgICAgICAgICAoZXZpY3Qgfm9uX2V2aWN0IHsgdCB3aXRoIHExIH0sIHRydWUpKVxuZW5kXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG5tb2R1bGUgQ29sdW1ucyA9IHN0cnVjdFxuICB0eXBlIGNvbHVtbiA9IHsgbmFtZSA6IHN0cmluZzsgY3NzX3NpemUgOiBzdHJpbmc7IGNvbnRlbnQgOiBFbHdkLnQgRWx3ZC5jb2wgfVxuICB0eXBlIHQgPSBjb2x1bW4gYXJyYXlcblxuICBsZXQgdiBuYW1lIGNzc19zaXplIGNvbnRlbnQgPSB7IG5hbWU7IGNzc19zaXplOyBjb250ZW50IH1cblxuICBsZXQgdG9faGVhZGVyIHQgPVxuICAgIGxldCBjZWxscyA9XG4gICAgICBBcnJheS5mb2xkX3JpZ2h0IHQgfmluaXQ6W10gfmY6KGZ1biB7IGNvbnRlbnQ7IF8gfSBhY2MgLT5cbiAgICAgICAgICBgUiAoRWx3ZC5kaXYgY29udGVudCkgOjogYWNjKVxuICAgIGluXG4gICAgY2VsbHNcblxuICBsZXQgc3R5bGUgdCA9XG4gICAgbGV0IHRlbXBsYXRlID1cbiAgICAgIEFycmF5LnRvX3N0cmluZyB+c2VwOlwiIFwiIChmdW4geyBjc3Nfc2l6ZTsgXyB9IC0+IGNzc19zaXplKSB0XG4gICAgaW5cbiAgICBQcmludGYuc3ByaW50ZiBcIiVzOiAlcztcIiBcImdyaWQtdGVtcGxhdGUtY29sdW1uc1wiIHRlbXBsYXRlXG5lbmRcblxudHlwZSB0ID0geyBjb2x1bW5zIDogQ29sdW1ucy50IH1cbnR5cGUgZml4ZWRfcm93X2hlaWdodCA9IHsgdGFibGUgOiB0OyByb3dfaGVpZ2h0IDogVXRpbHMuVW5pdC50IH1cblxubGV0IHN0eWxlIHQgPVxuICBsZXQgc3R5bGUgPSBDb2x1bW5zLnN0eWxlIHQudGFibGUuY29sdW1ucyBpblxuICBTdHJpbmcuY29uY2F0IH5zZXA6XCIgXCIgWyBzdHlsZSBdXG5cbmxldCBoZWFkZXIgdCA9XG4gIGxldCByb3dfaGVpZ2h0ID0gVXRpbHMuVW5pdC50b19zdHJpbmcgdC5yb3dfaGVpZ2h0IGluXG4gIGxldCBhdCA9XG4gICAgW1xuICAgICAgYFAgKEF0LnN0eWxlIChKc3RyLnYgQEAgUHJpbnRmLnNwcmludGYgXCJoZWlnaHQ6ICVzXCIgcm93X2hlaWdodCkpO1xuICAgICAgYFAgKEF0LmNsYXNzJyAoSnN0ci52IFwibHdkdWktbGF6eS10YWJsZS1oZWFkZXJcIikpO1xuICAgICAgYFAgKEF0LmNsYXNzJyAoSnN0ci52IFwibHdkdWktdmlydHVhbC10YWJsZS1yb3dcIikpO1xuICAgIF1cbiAgaW5cbiAgRWx3ZC5kaXYgfmF0IEBAIENvbHVtbnMudG9faGVhZGVyIHQudGFibGUuY29sdW1uc1xuXG5sZXQgXyA9IFV0aWxzLlVuaXQudG9fcHggKFJlbSA0LilcbiIsIigqKiBBIHZpcnR1YWwgdGFibGUgdGhhdCBjYW4gaGFuZGxlIGxhcmdlIGRhdGFzZXQuXG5cbiAgICBUT0RPOiB0aGlzIGlzIGNsZWFybHkgb3Zlci1lbmdpbmVlcmVkOiB0aGUgbGFyZ2UgbHdkIHRhYmxlIHRoYXQgcmVkdWNlcyB0b1xuICAgIHJvd3MgYW5kIHBsYWNlaG9sZGVycyB3aXRoIGEgbW9ub2lkIGlzIGVsZWdhbnQgYnUgZG9lcyBub3Qgc2NhbGUgd2VsbC4gSXRcbiAgICBtaWdodCBiZSBwb3NzaWJsZSB0byBvcHRpbWl6ZSBpdCAoZXNwZWNpYWxseSB0aGUgXCJ1bmlxdWV1ZVwiIExSVSB0aGluZ3kpLFxuICAgIGJ1dCBoYXZpbmcgdG9vIGxhcmdlIGEgbHdkX3RhYmxlIGlzIHByb2JhYmx5IGEgaGFyZCBsaW1pdC4gKilcblxub3BlbiBJbXBvcnRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyXG5vcGVuIEJycl9sd2Rcbm1vZHVsZSBGUmVmID0gVXRpbHMuRm9yd2FyZF9yZWZcblxubGV0IGxvZ2dlciA9IExvZ2dlci5mb3Jfc2VjdGlvbiBcInZpcnR1YWwgdGFibGVcIlxuXG50eXBlICdhIHJvd19kYXRhID0ge1xuICBpbmRleCA6IGludDtcbiAgY29udGVudCA6ICdhIG9wdGlvbjtcbiAgcmVuZGVyIDogKGludCAtPiAnYSAtPiBFbHdkLnQgRWx3ZC5jb2wpIEx3ZC50O1xufVxuXG50eXBlICgnZGF0YSwgJ2Vycm9yKSBkYXRhX3NvdXJjZSA9IHtcbiAgdG90YWxfaXRlbXMgOiBpbnQgTHdkLnQ7XG4gIGZldGNoIDogKGludCBhcnJheSAtPiAoJ2RhdGEgb3B0aW9uIGFycmF5LCAnZXJyb3IpIEZ1dC5yZXN1bHQpIEx3ZC50O1xuICByZW5kZXIgOiAoaW50IC0+ICdkYXRhIC0+IEVsd2QudCBFbHdkLmNvbCkgTHdkLnQ7XG59XG5cbigqIFRoZSB2aXJ0dWFsIHRhYmxlIGlzIGEgY29tcGxleCByZWFjdGl2ZSBjb21wb25lbnQuIFByaW1hcmlseSwgaXQgcmVhY3RzIHRvXG4gICBjaGFuZ2VzIG9mIHRoZSBbZGF0YV9zb3VyY2VdIHNvIHRoYXQgY29udGVudCBpbiB0aGUgdGFibGUgaXMgcHJvcGVybHlcbiAgIHJlZnJlc2hlZCB3aGVuIGl0IGRvZXMuIEFkZGl0aW9ubmFseSBpdCBuZWVkcyB0byByZWFjdCB0byBtdWx0aXBsZSBkb21cbiAgIGV2ZW50cywgbm90YWJseSB2ZXJ0aWNhbCByZXNpemUgb2YgdGhlIGNvbnRhaW5lciBhbmQgc2Nyb2xsIGV2ZW50cywgdG8gZW5zdXJlXG4gICB0aGF0IHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIHRhbGJlIGlzIGFsd2F5cyBwb3B1bGF0ZWQgd2l0aCByb3dzLiAqKVxubW9kdWxlIENhY2hlID0gRkZDYWNoZS5NYWtlIChJbnQpXG5cbmxldCBtYWtlICh0eXBlIGRhdGEpIH4odWlfdGFibGUgOiBTY2hlbWEuZml4ZWRfcm93X2hlaWdodClcbiAgICA/KHBsYWNlaG9sZGVyIDogaW50IC0+IEVsd2QudCBFbHdkLmNvbCA9IGZ1biBfIC0+IFtdKVxuICAgID8oc2Nyb2xsX3RhcmdldCA6IGludCBMd2QudCBvcHRpb24pXG4gICAgKHsgdG90YWxfaXRlbXM7IGZldGNoOyByZW5kZXIgfSA6IChkYXRhLCBfKSBkYXRhX3NvdXJjZSkgPVxuICBpZ25vcmUgcGxhY2Vob2xkZXI7XG5cbiAgbGV0IG1vZHVsZSBTdGF0ZSA9IHN0cnVjdFxuICAgICgqIFRoZSB3cmFwcGVyX2RpdiByZWYgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIGNvcnJlY3QgZWxlbWVudCBhc1xuICAgICAgIHNvb24gYXMgaXQgaXMgY3JlYXRlZC4gSXQgaXMgbm90IHJlYWN0aXZlIHBlciBzZS4gKilcbiAgICBsZXQgY29udGVudF9kaXYgOiBFbC50IFV0aWxzLkZvcndhcmRfcmVmLnQgPSBVdGlscy5Gb3J3YXJkX3JlZi5tYWtlICgpXG5cbiAgICAoKiBUaGUgd3JhcHBlcl9kaXYgcmVmIHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBjb3JyZWN0IGVsZW1lbnQgYXNcbiAgICAgICBzb29uIGFzIGl0IGlzIGNyZWF0ZWQuIEl0IGlzIG5vdCByZWFjdGl2ZSBwZXIgc2UuICopXG4gICAgbGV0IHdyYXBwZXJfZGl2IDogRWwudCBVdGlscy5Gb3J3YXJkX3JlZi50ID0gVXRpbHMuRm9yd2FyZF9yZWYubWFrZSAoKVxuXG4gICAgKCogVGhlIGhlaWdodCBvZiB0aGUgd2luZG93IGlzIGEgcmVhY3RpdmUgdmFsdWUgdGhhdCBtaWdodCBjaGFuZ2UgZHVyaW5nXG4gICAgICAgZXhlY3V0aW9uIHdoZW4gdGhlIGJyb3dzZXIgaXMgcmVzaXplZCBvciBvdGhlciBsYXlvdXQgY2hhbmdlcyBhcmUgbWFkZS4gKilcbiAgICBsZXQgd2luZG93X2hlaWdodCA6IGludCBvcHRpb24gTHdkLnZhciA9IEx3ZC52YXIgTm9uZVxuICBlbmQgaW5cbiAgbGV0IHJvd19zaXplID0gdWlfdGFibGUucm93X2hlaWdodCB8PiBVdGlscy5Vbml0LnRvX3N0cmluZyBpblxuICBsZXQgaGVpZ2h0X24gbiA9IFByaW50Zi5zcHJpbnRmIFwiaGVpZ2h0OiBjYWxjKCVzICogJWkpO1wiIHJvd19zaXplIG4gaW5cbiAgbGV0IGhlaWdodCA9IFByaW50Zi5zcHJpbnRmIFwiaGVpZ2h0OiAlcyAhaW1wb3J0YW50O1wiIHJvd19zaXplIGluXG4gIGxldCB0YWJsZSA6IGRhdGEgcm93X2RhdGEgTHdkX3RhYmxlLnQgPSBMd2RfdGFibGUubWFrZSAoKSBpblxuICAoKiBUaGUgW3Jvd19pbmRleF0gdGFibGUgaXMgdXNlZCB0byBwcm92aWRlIGZhc3QgcmFuZG9tIGFjY2VzcyB0byB0aGUgdGFibGUnc1xuICAgICByb3dzIGluIHRoZSBvYnNlcnZlcidzIGNhbGxiYWNrICopXG4gIGxldCByb3dfaW5kZXggOiAoaW50LCBkYXRhIHJvd19kYXRhIEx3ZF90YWJsZS5yb3cpIEhhc2h0YmwudCA9XG4gICAgSGFzaHRibC5jcmVhdGUgMjA0OFxuICBpblxuICBsZXQgdW5sb2FkIGkgPVxuICAgIGxldCBvcGVuIE9wdGlvbi5JbmZpeCBpblxuICAgIChsZXQqIHJvdyA9IEhhc2h0YmwuZ2V0IHJvd19pbmRleCBpIGluXG4gICAgIGxldCsgcm93X2RhdGEgPSBMd2RfdGFibGUuZ2V0IHJvdyBpblxuICAgICBMd2RfdGFibGUuc2V0IHJvdyB7IHJvd19kYXRhIHdpdGggY29udGVudCA9IE5vbmUgfSlcbiAgICB8PiBpZ25vcmVcbiAgaW5cbiAgbGV0IG5ld19jYWNoZSAoKSA9IENhY2hlLmNyZWF0ZSB+c2l6ZTo1MCBpblxuICAoKiBUaGUgY2FjaGUgaXMgc29tZSBzb3J0IG9mIExSVSB0byBrZWVwIGxpdmUgdGhlIGNvbnRlbnQgb2YgcmVjZW50bHkgc2VlblxuICAgICByb3dzICopXG4gIGxldCBjYWNoZV9yZWYgPSByZWYgKG5ld19jYWNoZSAoKSkgaW5cbiAgbGV0IGFkZCB+ZmV0Y2ggPyhtYXhfaXRlbXMgPSAyMDApIGluZGV4ZXMgPVxuICAgIGxldCBjYWNoZSA9ICFjYWNoZV9yZWYgaW5cbiAgICBsZXQgbG9hZCBpbmRleGVzID1cbiAgICAgIChsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgIGxldCsgKGRhdGEgOiBkYXRhIG9wdGlvbiBhcnJheSkgPSBmZXRjaCBpbmRleGVzIGluXG4gICAgICAgQXJyYXkuaXRlcjIgaW5kZXhlcyBkYXRhIH5mOihmdW4gaSBkYXRhIC0+XG4gICAgICAgICAgIChsZXQgb3BlbiBPcHRpb24uSW5maXggaW5cbiAgICAgICAgICAgIGxldCogcm93ID0gSGFzaHRibC5nZXQgcm93X2luZGV4IGkgaW5cbiAgICAgICAgICAgIGxldCsgcm93X2RhdGEgPSBMd2RfdGFibGUuZ2V0IHJvdyBpblxuICAgICAgICAgICAgbGV0IGRhdGEgPVxuICAgICAgICAgICAgICBtYXRjaCBkYXRhIHdpdGggU29tZSBkYXRhIC0+IGRhdGEgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICgqIHRvZG86IGxldCB1c2VycyBwcm92aWRlIGNvbXBhcmlzb24gKilcbiAgICAgICAgICAgIGlmIG5vdCAoRXF1YWwucG9seSByb3dfZGF0YS5jb250ZW50IEBAIFNvbWUgZGF0YSkgdGhlblxuICAgICAgICAgICAgICBMd2RfdGFibGUuc2V0IHJvdyB7IHJvd19kYXRhIHdpdGggY29udGVudCA9IFNvbWUgZGF0YSB9KVxuICAgICAgICAgICB8PiBpZ25vcmUpKVxuICAgICAgfD4gaWdub3JlXG4gICAgaW5cbiAgICBsZXQgY2FjaGUsIHRvX2xvYWQgPVxuICAgICAgTGlzdC5mb2xkX2xlZnQgfmluaXQ6KGNhY2hlLCBbXSkgaW5kZXhlcyB+ZjooZnVuIChjYWNoZSwgYWNjKSBpIC0+XG4gICAgICAgICAgbGV0IGNhY2hlLCBpbnNlcnRlZCA9IENhY2hlLmluc2VydCB+b25fZXZpY3Q6dW5sb2FkIGNhY2hlIGkgaSBpblxuICAgICAgICAgIGlmIGluc2VydGVkIHRoZW4gKGNhY2hlLCBpIDo6IGFjYykgZWxzZSAoY2FjaGUsIGFjYykpXG4gICAgaW5cbiAgICBjYWNoZV9yZWYgOj0gY2FjaGU7XG4gICAgbWF0Y2ggQXJyYXkub2ZfbGlzdCB0b19sb2FkIHdpdGggW3x8XSAtPiAoKSB8IHRvX2xvYWQgLT4gbG9hZCB0b19sb2FkXG4gIGluXG4gIGxldCB0YWJsZV9oZWlnaHQgPSBMd2QudmFyIE5vbmUgaW5cbiAgbGV0IGNvbXB1dGVfdmlzaWJsZV9yb3dzIH5sYXN0X3Njcm9sbF95ID1cbiAgICBsZXQgaGVpZ2h0IGVsdCA9XG4gICAgICBsZXQganYgPSBFbC50b19qdiBlbHQgaW5cbiAgICAgIEp2LmdldCBqdiBcIm9mZnNldEhlaWdodFwiIHw+IEp2LnRvX2Zsb2F0XG4gICAgaW5cbiAgICBsZXQgZGl2ID0gRlJlZi5nZXRfZXhuIFN0YXRlLndyYXBwZXJfZGl2IGluXG4gICAgbGV0IHNjcm9sbF95ID0gRWwuc2Nyb2xsX3kgZGl2IGluXG4gICAgbGV0IGRpcmVjdGlvbiA9IGlmIHNjcm9sbF95ID4uICFsYXN0X3Njcm9sbF95IHRoZW4gYERvd24gZWxzZSBgVXAgaW5cbiAgICBsZXQgKCkgPSBsYXN0X3Njcm9sbF95IDo9IHNjcm9sbF95IGluXG4gICAgbGV0IHZpc2libGVfaGVpZ2h0ID0gaGVpZ2h0IGRpdiBpblxuICAgIGxldCBwYXJlbnQgPSBVdGlscy5Gb3J3YXJkX3JlZi5nZXRfZXhuIFN0YXRlLmNvbnRlbnRfZGl2IGluXG4gICAgbGV0IHJvd19oZWlnaHQgPSBVdGlscy5Vbml0LnRvX3B4IH5wYXJlbnQgdWlfdGFibGUucm93X2hlaWdodCBpblxuICAgIGxvZ2dlci5kZWJ1ZyBbIFwiVmlzaWJsZSBoZWlnaHQ6XCI7IHZpc2libGVfaGVpZ2h0OyBcIlJvdyBoZWlnaHRcIjsgcm93X2hlaWdodCBdO1xuICAgIGxldCBudW1iZXJfb2ZfdmlzaWJsZV9yb3dzID1cbiAgICAgIEludC5vZl9mbG9hdCAoY2VpbCAodmlzaWJsZV9oZWlnaHQgLy4gcm93X2hlaWdodCkpXG4gICAgaW5cbiAgICBsZXQgYmxlZWRpbmcgPSBudW1iZXJfb2ZfdmlzaWJsZV9yb3dzIGluXG4gICAgbGV0IHNjcm9sbF95ID0gc2Nyb2xsX3kgaW5cbiAgICBsZXQgZmlyc3RfdmlzaWJsZV9yb3cgPSBpbnRfb2ZfZmxvYXQgKHNjcm9sbF95IC8uIHJvd19oZWlnaHQpIGluXG4gICAgbGV0IGxhc3RfdmlzaWJsZV9yb3cgPSBmaXJzdF92aXNpYmxlX3JvdyArIG51bWJlcl9vZl92aXNpYmxlX3Jvd3MgaW5cbiAgICBsZXQgZmlyc3QgPVxuICAgICAgbGV0IGJsZWVkaW5nID1cbiAgICAgICAgbWF0Y2ggZGlyZWN0aW9uIHdpdGggYFVwIC0+IGJsZWVkaW5nIHwgXyAtPiBibGVlZGluZyAvIDJcbiAgICAgIGluXG4gICAgICBmaXJzdF92aXNpYmxlX3JvdyAtIGJsZWVkaW5nIHw+IG1heCAwXG4gICAgaW5cbiAgICBsZXQgbGFzdCA9XG4gICAgICBsZXQgYmxlZWRpbmcgPVxuICAgICAgICBtYXRjaCBkaXJlY3Rpb24gd2l0aCBgRG93biAtPiBibGVlZGluZyB8IF8gLT4gYmxlZWRpbmcgLyAyXG4gICAgICBpblxuICAgICAgbGFzdF92aXNpYmxlX3JvdyArIGJsZWVkaW5nXG4gICAgaW5cbiAgICBMaXN0LmluaXQgKGxhc3QgLSBmaXJzdCkgfmY6KGZ1biBpIC0+IGZpcnN0ICsgaSlcbiAgaW5cbiAgbGV0IHByZXBhcmUgfnRvdGFsX2l0ZW1zOnRvdGFsIH5yZW5kZXIgPVxuICAgIGxldCAoKSA9IGNhY2hlX3JlZiA6PSBuZXdfY2FjaGUgKCkgaW5cbiAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgbGV0IGN1cnJlbnRfcm93ID0gcmVmIChMd2RfdGFibGUuZmlyc3QgdGFibGUpIGluXG4gICAgd2hpbGUgT3B0aW9uLmlzX3NvbWUgIWN1cnJlbnRfcm93IHx8ICFpIDw9IHRvdGFsIC0gMSBkb1xuICAgICAgbWF0Y2ggIWN1cnJlbnRfcm93IHdpdGhcbiAgICAgIHwgU29tZSByb3cgLT5cbiAgICAgICAgICBpZiAhaSA8PSB0b3RhbCAtIDEgdGhlblxuICAgICAgICAgICAgbGV0ICgpID0gSGFzaHRibC5yZXBsYWNlIHJvd19pbmRleCAhaSByb3cgaW5cbiAgICAgICAgICAgIEx3ZF90YWJsZS5zZXQgcm93IHsgaW5kZXggPSAhaTsgY29udGVudCA9IE5vbmU7IHJlbmRlciB9XG4gICAgICAgICAgZWxzZSBMd2RfdGFibGUudW5zZXQgcm93O1xuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICBjdXJyZW50X3JvdyA6PSBMd2RfdGFibGUubmV4dCByb3dcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgIGlmICFpIDw9IHRvdGFsIC0gMSB0aGVuIChcbiAgICAgICAgICAgIGxldCBzZXQgPSB7IGluZGV4ID0gIWk7IGNvbnRlbnQgPSBOb25lOyByZW5kZXIgfSBpblxuICAgICAgICAgICAgbGV0IHJvdyA9IEx3ZF90YWJsZS5hcHBlbmQgfnNldCB0YWJsZSBpblxuICAgICAgICAgICAgSGFzaHRibC5hZGQgcm93X2luZGV4ICFpIHJvdztcbiAgICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICAgIGN1cnJlbnRfcm93IDo9IEx3ZF90YWJsZS5uZXh0IHJvdylcbiAgICBkb25lXG4gIGluXG4gIGxldCBwb3B1bGF0ZV9vbl9zY3JvbGwgPVxuICAgIGxldCBsYXN0X3Njcm9sbF95ID0gcmVmIDAuIGluXG4gICAgbGV0IHVwZGF0ZSA9XG4gICAgICBMd2QubWFwIGZldGNoIH5mOihmdW4gZmV0Y2ggKCkgLT5cbiAgICAgICAgICBsZXQgdmlzaWJsZV9yb3dzID0gY29tcHV0ZV92aXNpYmxlX3Jvd3Mgfmxhc3Rfc2Nyb2xsX3kgaW5cbiAgICAgICAgICAoKiB0b2RvOiBXZSBkbyB3YXkgdG9vIG11Y2ggd29yayBhbmQgcmVidWlsZCB0aGUgcXVldWUgZWFjaFxuICAgICAgICAgICAgIHRpbWUuLi4gaXQncyB2ZXJ5IGluZWZpY2llbnQgKilcbiAgICAgICAgICBhZGQgfmZldGNoIH5tYXhfaXRlbXM6KDQgKiBMaXN0Lmxlbmd0aCB2aXNpYmxlX3Jvd3MpIHZpc2libGVfcm93cylcbiAgICBpblxuICAgIEx3ZC5tYXAyIHRvdGFsX2l0ZW1zIHVwZGF0ZSB+ZjooZnVuIHRvdGFsX2l0ZW1zIHVwZGF0ZSAtPlxuICAgICAgICBwcmVwYXJlIH50b3RhbF9pdGVtcyB+cmVuZGVyO1xuICAgICAgICB1cGRhdGUpXG4gIGluXG4gIGxldCAoKSA9XG4gICAgbGV0IHJlcG9wdWxhdGVfZGVwcyA9IEx3ZC5wYWlyIHBvcHVsYXRlX29uX3Njcm9sbCAoTHdkLmdldCB0YWJsZV9oZWlnaHQpIGluXG4gICAgbGV0IHJvb3QgPSBMd2Qub2JzZXJ2ZSByZXBvcHVsYXRlX2RlcHMgaW5cbiAgICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgICAgbWF0Y2ggTHdkLnF1aWNrX3NhbXBsZSByb290IHdpdGhcbiAgICAgICAgfCB1cGRhdGUsIFNvbWUgX2ggLT4gdXBkYXRlICgpXG4gICAgICAgIHwgXyAtPiAoKSk7XG4gICAgTHdkLnF1aWNrX3NhbXBsZSByb290IHw+IGlnbm9yZVxuICBpblxuICBsZXQgbWFrZV9zcGFjZXIgbiA9XG4gICAgbGV0IGF0ID0gWyBBdC5jbGFzcycgKEpzdHIudiBcInJvd19zcGFjZXJcIikgXSBpblxuICAgIGxldCBzdHlsZSA9IEF0LnN0eWxlIChKc3RyLnYgQEAgaGVpZ2h0X24gbikgaW5cbiAgICBFbC5kaXYgfmF0OihzdHlsZSA6OiBhdCkgW11cbiAgaW5cbiAgbGV0IHJlbmRlciBfcm93IHsgY29udGVudDsgaW5kZXg7IHJlbmRlciB9ID1cbiAgICBsZXQgYXQgPSBBdHRycy5hZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwibHdkdWktdmlydHVhbC10YWJsZS1yb3dcIikgW10gaW5cbiAgICBsZXQgc3R5bGUgPSBgUCAoQXQuc3R5bGUgKEpzdHIudiBoZWlnaHQpKSBpblxuICAgIG1hdGNoIGNvbnRlbnQgd2l0aFxuICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgIGxldCByZW5kZXJlZF9yb3cgPVxuICAgICAgICAgIEx3ZC5tYXAgcmVuZGVyIH5mOihmdW4gcmVuZGVyIC0+XG4gICAgICAgICAgICAgIEx3ZF9zZXEub2ZfbGlzdFxuICAgICAgICAgICAgICAgIChMaXN0Lm1hcCAocmVuZGVyIGluZGV4IGRhdGEpIH5mOihmdW4gZWx0IC0+IEVsd2QuZGl2IFsgZWx0IF0pKSlcbiAgICAgICAgaW5cbiAgICAgICAgKCAwLFxuICAgICAgICAgIEx3ZF9zZXEuZWxlbWVudFxuICAgICAgICAgIEBAIEVsd2QuZGl2IH5hdDooc3R5bGUgOjogYXQpIFsgYFMgKEx3ZF9zZXEubGlmdCByZW5kZXJlZF9yb3cpIF0sXG4gICAgICAgICAgMCApXG4gICAgfCBOb25lIC0+ICgxLCBMd2Rfc2VxLmVtcHR5LCAwKVxuICBpblxuICBsZXQgdGFibGVfYm9keSA9XG4gICAgbGV0IHJvd3MgPVxuICAgICAgTHdkX3RhYmxlLm1hcF9yZWR1Y2UgcmVuZGVyXG4gICAgICAgICggKDAsIEx3ZF9zZXEuZW1wdHksIDApLFxuICAgICAgICAgIGZ1biAobiwgcywgbSkgKHAsIHMnLCBxKSAtPlxuICAgICAgICAgICAgbWF0Y2ggKEx3ZF9zZXEudmlldyBzLCBMd2Rfc2VxLnZpZXcgcycpIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHksIEVtcHR5IC0+XG4gICAgICAgICAgICAgICAgKCogU2luY2UgcyBpcyBlbXB0eSBpdCBkb2VzIG5vdCBtYXR0ZXIgb24gd2hpY2hcbiAgICAgICAgICAgICAgICAgICBcInNpZGVcIiBvZiBpdCB0aGUgc3BhY2VzIGFyZSBhY2N1bXVsYXRlZC4gKilcbiAgICAgICAgICAgICAgICAobiArIG0gKyBwICsgcSwgcywgMClcbiAgICAgICAgICAgIHwgRW1wdHksIF8gLT4gKG4gKyBtICsgcCwgcycsIHEpXG4gICAgICAgICAgICB8IF8sIEVtcHR5IC0+IChuLCBzLCBtICsgcCArIHEpXG4gICAgICAgICAgICB8IF8sIF8gLT5cbiAgICAgICAgICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgICAgICAgICBpZiBtICsgcCA+IDAgdGhlblxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BhY2VyID0gTHdkLnB1cmUgQEAgbWFrZV9zcGFjZXIgKG0gKyBwKSBpblxuICAgICAgICAgICAgICAgICAgICBMd2Rfc2VxLihjb25jYXQgcyBAQCBjb25jYXQgKGVsZW1lbnQgc3BhY2VyKSBzJylcbiAgICAgICAgICAgICAgICAgIGVsc2UgTHdkX3NlcS5jb25jYXQgcyBzJ1xuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgKG4sIHMsIHEpIClcbiAgICAgICAgdGFibGVcbiAgICBpblxuICAgIEx3ZC5tYXAgcm93cyB+ZjooZnVuIChuLCBzLCBtKSAtPlxuICAgICAgICBsZXQgcmVzdWx0ID1cbiAgICAgICAgICBpZiBuID4gMCB0aGVuXG4gICAgICAgICAgICBsZXQgZmlyc3Rfc3BhY2VyID0gTHdkLnB1cmUgQEAgbWFrZV9zcGFjZXIgbiBpblxuICAgICAgICAgICAgTHdkX3NlcS4oY29uY2F0IChlbGVtZW50IGZpcnN0X3NwYWNlcikgcylcbiAgICAgICAgICBlbHNlIHNcbiAgICAgICAgaW5cbiAgICAgICAgaWYgbSA+IDAgdGhlblxuICAgICAgICAgIGxldCBsYXN0X3NwYWNlciA9IEx3ZC5wdXJlIEBAIG1ha2Vfc3BhY2VyIG0gaW5cbiAgICAgICAgICBMd2Rfc2VxLihjb25jYXQgcmVzdWx0IChlbGVtZW50IGxhc3Rfc3BhY2VyKSlcbiAgICAgICAgZWxzZSByZXN1bHQpXG4gIGluXG4gIGxldCB0YWJsZV9oZWFkZXIgPSBTY2hlbWEuaGVhZGVyIHVpX3RhYmxlIGluXG4gIGxldCBvYnNlcnZlciA9XG4gICAgKCogV2Ugb2JzZXJ2ZSB0aGUgc2l6ZSBvZiB0aGUgdGFibGUgdG8gcmUtcG9wdWxhdGUgaWYgbmVjZXNzYXJ5ICopXG4gICAgUmVzaXplX29ic2VydmVyLmNyZWF0ZSB+Y2FsbGJhY2s6KGZ1biBlbnRyaWVzIF8gLT5cbiAgICAgICAgbGV0IGVudHJ5ID0gTGlzdC5oZCBlbnRyaWVzIGluXG4gICAgICAgIGxldCBkaXYgPSBSZXNpemVfb2JzZXJ2ZXIuRW50cnkudGFyZ2V0IGVudHJ5IGluXG4gICAgICAgIGxldCByZWN0ID0gUmVzaXplX29ic2VydmVyLkVudHJ5LmNvbnRlbnRfcmVjdCBlbnRyeSBpblxuICAgICAgICBsZXQgaGVpZ2h0ID0gRG9tX3JlY3RfcmVhZF9vbmx5LmhlaWdodCByZWN0IGluXG4gICAgICAgIG1hdGNoIEx3ZC5wZWVrIHRhYmxlX2hlaWdodCB3aXRoXG4gICAgICAgIHwgU29tZSBoIHdoZW4gaCA8PiBoZWlnaHQgLT4gTHdkLnNldCB0YWJsZV9oZWlnaHQgKFNvbWUgaGVpZ2h0KVxuICAgICAgICB8IE5vbmUgLT4gTHdkLnNldCB0YWJsZV9oZWlnaHQgKFNvbWUgaGVpZ2h0KVxuICAgICAgICB8IF8gLT4gKCkpXG4gIGluXG4gIGxldCByb3dzID1cbiAgICBsZXQgYXQgPSBBdHRycy5PLih2IChgUCAoQyBcImx3ZHVpLWxhenktdGFibGUtY29udGVudFwiKSkpIGluXG4gICAgbGV0IG9uX2NyZWF0ZSBlbCA9IFV0aWxzLkZvcndhcmRfcmVmLnNldF9leG4gU3RhdGUuY29udGVudF9kaXYgZWwgaW5cbiAgICBFbHdkLmRpdiB+YXQgfm9uX2NyZWF0ZSBbIGBTIChMd2Rfc2VxLmxpZnQgdGFibGVfYm9keSkgXVxuICBpblxuICBsZXQgd3JhcHBlciA9XG4gICAgbGV0IGF0ID0gQXR0cnMuTy4odiAoYFAgKEMgXCJsd2R1aS1sYXp5LXRhYmxlLWNvbnRlbnQtd3JhcHBlclwiKSkpIGluXG4gICAgbGV0IHNjcm9sbF9oYW5kbGVyID1cbiAgICAgIEx3ZC5tYXAgcG9wdWxhdGVfb25fc2Nyb2xsIH5mOihmdW4gdXBkYXRlIC0+XG4gICAgICAgICAgRWx3ZC5oYW5kbGVyIEV2LnNjcm9sbCAoZnVuIF9ldiAtPlxuICAgICAgICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgICAgICAgIGlnbm9yZVxuICAgICAgICAgICAgICBAQFxuICAgICAgICAgICAgICBsZXQgc2Nyb2xsX2hhbmRsZXIgPVxuICAgICAgICAgICAgICAgIGxldCBsYXN0X3VwZGF0ZSA9IHJlZiAwLiBpblxuICAgICAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gcmVmICgtMSkgaW5cbiAgICAgICAgICAgICAgICBsZXQgcmVzZXRfdGlja2VyIGRpdiA9XG4gICAgICAgICAgICAgICAgICBsZXQgZGVib3VuY2luZ19pbnRlcnZhbCA9IDgwMCBpblxuICAgICAgICAgICAgICAgICAgKCogV2UgdXNlIFtsYXN0X3VwZGF0ZV0gdG8gaGF2ZSByZWd1bGFyIGRlYm91bmNlZCB1cGRhdGVzIGFuZCB0aGVcbiAgICAgICAgICAgICAgICAgICAgIFt0aW1lb3V0XSB0byBlbnN1cmUgdGhhdCB0aGUgbGFzdCBzY3JvbGwgZXZlbnQgaXMgYWx3YXlzIHRha2VuIGludG9cbiAgICAgICAgICAgICAgICAgICAgIGFjY291bnQgZXZlbiBpdCBpdCBoYXBwZW5zIGR1cmluZyB0aGUgZGVib3VuY2luZyBpbnRlcnZhbC4gKilcbiAgICAgICAgICAgICAgICAgIGxldCBub3cgPSBQZXJmb3JtYW5jZS5ub3dfbXMgRy5wZXJmb3JtYW5jZSBpblxuICAgICAgICAgICAgICAgICAgaWYgIXRpbWVvdXQgPj0gMCB0aGVuIEcuc3RvcF90aW1lciAhdGltZW91dDtcbiAgICAgICAgICAgICAgICAgIHRpbWVvdXQgOj1cbiAgICAgICAgICAgICAgICAgICAgRy5zZXRfdGltZW91dCB+bXM6ZGVib3VuY2luZ19pbnRlcnZhbCAoZnVuICgpIC0+IHVwZGF0ZSBkaXYpO1xuICAgICAgICAgICAgICAgICAgaWYgbm93IC0uICFsYXN0X3VwZGF0ZSA+LiBmbG9hdF9vZl9pbnQgZGVib3VuY2luZ19pbnRlcnZhbFxuICAgICAgICAgICAgICAgICAgdGhlbiAoXG4gICAgICAgICAgICAgICAgICAgIGxhc3RfdXBkYXRlIDo9IG5vdztcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIGRpdilcbiAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgIGZ1biBkaXYgLT4gcmVzZXRfdGlja2VyIGRpdlxuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICBsZXQgZGl2ID0gVXRpbHMuRm9yd2FyZF9yZWYuZ2V0X2V4biBTdGF0ZS53cmFwcGVyX2RpdiBpblxuICAgICAgICAgICAgICBzY3JvbGxfaGFuZGxlciAoKSkpXG4gICAgaW5cbiAgICBsZXQgZXYgPSBbIGBSIHNjcm9sbF9oYW5kbGVyIF0gaW5cbiAgICBsZXQgb25fY3JlYXRlIGVsID0gVXRpbHMuRm9yd2FyZF9yZWYuc2V0X2V4biBTdGF0ZS53cmFwcGVyX2RpdiBlbCBpblxuICAgIChtYXRjaCBzY3JvbGxfdGFyZ2V0IHdpdGhcbiAgICB8IFNvbWUgc2Nyb2xsX3RhcmdldCAtPlxuICAgICAgICBsZXQgc2Nyb2xsX3RhcmdldCA9XG4gICAgICAgICAgTHdkLm1hcCBzY3JvbGxfdGFyZ2V0IH5mOihmdW4gaSAtPlxuICAgICAgICAgICAgICBsZXQgcm93X2hlaWdodCA9XG4gICAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IFV0aWxzLkZvcndhcmRfcmVmLmdldF9leG4gU3RhdGUuY29udGVudF9kaXYgaW5cbiAgICAgICAgICAgICAgICBJbnQub2ZfZmxvYXQgKFV0aWxzLlVuaXQudG9fcHggfnBhcmVudCB1aV90YWJsZS5yb3dfaGVpZ2h0KVxuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICBTb21lIChDb250cm9sbGVkX3Njcm9sbC5Qb3MgKGkgKiByb3dfaGVpZ2h0KSkpXG4gICAgICAgIGluXG4gICAgICAgIENvbnRyb2xsZWRfc2Nyb2xsLm1ha2UgfmF0IH5ldiB+b25fY3JlYXRlIH5zY3JvbGxfdGFyZ2V0IHJvd3NcbiAgICB8IE5vbmUgLT4gRWx3ZC5kaXYgfmF0IH5ldiB+b25fY3JlYXRlIFsgYFIgcm93cyBdKVxuICAgIHw+IEx3ZC5tYXAgfmY6KHRlZSAoZnVuIGVsIC0+IFJlc2l6ZV9vYnNlcnZlci5vYnNlcnZlIG9ic2VydmVyIGVsKSlcbiAgaW5cbiAgbGV0IHRhYmxlID1cbiAgICBsZXQgYXQgPSBBdHRycy50b19hdCBAQCBBdHRycy5jbGFzc2VzIFsgXCJsd2R1aS1sYXp5LXRhYmxlXCIgXSBpblxuICAgIGxldCBncmlkX3N0eWxlID0gU2NoZW1hLnN0eWxlIHVpX3RhYmxlIGluXG4gICAgbGV0IHMgPSBBdC5zdHlsZSAoSnN0ci52IEBAIGdyaWRfc3R5bGUpIGluXG4gICAgbGV0IGF0ID0gYFAgcyA6OiBhdCBpblxuICAgIEVsd2QuZGl2IH5hdCBbIGBSIHRhYmxlX2hlYWRlcjsgYFIgd3JhcHBlciBdXG4gIGluXG4gIHRhYmxlXG5cbigqKiAjIyMjIyMjKiojKioqKioqIyUlIz09PSsrKyojIyMlIyMjIyMjIyMjIyMqKyMjPSMjIysrKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyojIyMjKioqKiUlIyM9PT09PT09PT09PSsjPT09LT09PT09PT0qIz0jIyMrKysrKysrKysrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMqIyMjIyMqKiojJSMjPT09PT09LS0tPT0rIz09LS0tPT09PT09KiM9IyMjKysrKysrKysrKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIz09PT0tLS0tPT0tPSM9LS09PT09PT09PSojPSojIyUjKysrKyslJSUrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjJSM9PT09LT09PT0tLT0jPT09PT09PT09PT0qIz0qIyMlIysrPSsjKiolJSsrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMqPS0tLS0tLS0tLS09Iz09PT09PT09PT09KyM9KyMjKyUjJSorJSslJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMrPS0tLS0tLS0tPT0tLS0tLSM9PT09LT09LS0tLSsjPSsjIyorJSMlJSsjIyUlKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIys9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09LT0rIz0rIyMjKysrIyolKyMrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIz0tLS0tLS0tLS09IyMjIz0jPS0tIz0rKz09PT0tLT09PSM9KyMjIyorKyslJSsrJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjKj09PT09PS0tPT0qKiMjIyMjIys9PT09PSs9KysrKysrKiMjPSsjIyMqKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz0tLS0tLT09KyorIyMjKiMjIyMjIz0jPT0tLS0tPT09PT0rIz0rIyMjKioqKisrKysrKysrSVMrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyM9PS09LT0qIys9IyslKyM9PT0jPT09Iz09LS09PT09PT09PSM9KyMjIyoqKisrKysrKysrKysrK1RISVMrKysrKytcbiMjIyMjIyMjIyMjIyMjPS0jKiMrKiMjPSMjIyMqKyM9Kys9PSM9PT09PT09PT09PSsjPSsjIyMqKioqKioqKysrQSsrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz09IyMjPSMjIyMjIyMjIyMjIysjKisjPT09PT09PT09PT09IysrIyMjKioqKioqKioqKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjPSorIyojIyMjIyMjIyMjIyMjIyM9Iz09PT09PT09PT09PSMrKyMjIyoqKioqKioqKioqKk1PTk9JRCs/KysrKytcbiMjIyMjIyMjIyMjIyMjIyM9PSMjIyMjIyMjIyM9PT09IyMqPSM9PT09PT09IyoqPT0jKysjIyMqKioqKioqKioqKioqKioqKisrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIz09KyMjIyMjIyMjIyMjIyMjPT0jPT09PT0jIyM9PT09IysrIyMjKioqKioqKioqKioqKioqKioqKioqKisrK1xuIyMjIyMjIyMjIyMjIyMjIyMjPT0jIyMrIyMjIyMjIyMjKyMjIyorPT0jIyM9PT09PSMrKyMjKysrKioqKioqKioqKioqKioqKioqKioqKitcbiMjIyMjIyMjIyMjIyMjKyUlJSUjIyMjIyMjIysjIyMjKj09KyM9PSsjIyMjIyMjIyMjIyMjIyorKyoqKioqKioqKioqKioqKioqKioqKioqXG4jIyMjIyMjIyMjIyMjIysrKysrPSslIyUjKiMjIyojJSUlJSsjPSsjIyMjIyMjIyMjKiMjIysjPSMjKiMqKioqKioqKioqKioqKioqKioqKlxuIyMjIyMjIyMjIyMjIyMqIz09Kz09PT0jIz09PSMjIyUlJSUlJSUjIyMjIyMjIyMjIyMjPSMrIyMjIyMjKioqKisrKj09KyoqKioqKioqKipcbiMjIyMjKz0rIyMjIyMjIyMjIyM9Kz09Kz09PT0jIyMqKyMlJSUlIyMjIyMjIyMjIyMqKysjIyMjIyMjIz09Kis9PT09PT0rKyoqKioqKioqXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyo9PT09PT09IyMjIyMrIyUlKiMjIyMjIyMjKj09IysrIyMjIyMjKj09PT09PT09PT09PT09PT0qKioqKlxuIyMjIyMjIyMjIyMjKyMjIyMjKyMjIyM9PT0rPSMjIyMjIyMrIyMjIyMjIyM9PT09PSMrKyMjIys9PT09PT09PT09PT09PT09PT09KyoqKilcbiIsIm9wZW4gTGV4aW5nXG5cbmV4Y2VwdGlvbiBMZXhfZXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBsZXhfZXJyb3IgZXJyID0gcmFpc2UgKExleF9lcnJvciBlcnIpXG5cbmxldCBlcnJvcl9wb3MgbGV4YnVmID0gXG4gIGxldCBzdGFydCA9IGxleGJ1Zi5sZXhfc3RhcnRfcCBpblxuICBsZXQgY251bSA9IGxleGJ1Zi5sZXhfbGFzdF9wb3MgLSBzdGFydC5wb3NfYm9sIGluXG4gIGxldCBlbnVtID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIHN0YXJ0LnBvc19ib2wgaW5cbiAgKHN0YXJ0LnBvc19sbnVtLCBjbnVtLCBlbnVtKVxuXG5sZXQgZXJyb3JfcG9zX21zZyAobGV4YnVmIDogTGV4aW5nLmxleGJ1ZikgPVxuICBsZXQgKGxpbmUsIGNudW0sIGVudW0pID0gZXJyb3JfcG9zIGxleGJ1ZiBpblxuICAgIFByaW50Zi5zcHJpbnRmIFwibGluZSAlZCBjaGFycyAlZC0lZFwiIGxpbmUgY251bSBlbnVtXG5cbmxldCBzdHJpbmcybnVtIHMgPVxuICB0cnkgKFRva2Vucy5JTlQgKGludF9vZl9zdHJpbmcgcykpIHdpdGhcbiAgfCBGYWlsdXJlIF8gLT4gVG9rZW5zLkxBUkdFSU5UIHNcblxubGV0IHVwZGF0ZV9wb3MgbGV4YnVmID1cbiAgbGV0IHBvcyA9IGxleGJ1Zi5sZXhfc3RhcnRfcCBpblxuICBsZXhidWYubGV4X3N0YXJ0X3AgPC1cbiAgICB7IHBvcyB3aXRoIHBvc19ib2wgPSBsZXhidWYubGV4X3N0YXJ0X3BvcztcbiAgICAgICAgICAgICAgIHBvc19sbnVtID0gcG9zLnBvc19sbnVtICsgMVxuICAgIH1cblxubGV0IGludF9vZl9oZXhjaGFyIGMgPVxuICBtYXRjaCBjIHdpdGhcbiAgfCAnMCcuLic5JyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJzAnXG4gIHwgJ2EnLi4nZicgLT4gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdhJyArIDEwXG4gIHwgJ0EnLi4nRicgLT4gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdBJyArIDEwXG4gIHwgYyAtPiBsZXhfZXJyb3IgKFwiaW52YWxpZCBoZXggY2hhciBpbiB1bmljb2RlIGVzY2FwZTogJ1wiIF4gKFN0cmluZy5tYWtlIDEgYykgXiBcIidcIilcblxuXG5sZXQgdXRmOF9vZl9jb2RlIGJ1ZiBpZHggdSA9XG4gIGxldCBpID0gcmVmIGlkeCBpblxuXG4gIGxldCBhZGRfY2hhciBiIGMgPSBCeXRlcy51bnNhZmVfc2V0IGIgIWkgYzsgaSA6PSAhaSArIDEgaW5cblxuICBsZXQgbWF4X3VzZWRfYml0cyBuIHUgPSAodSBsc3IgbikgPSAwIGluXG5cbiAgaWYgbWF4X3VzZWRfYml0cyA3IHUgdGhlblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgdSlcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDExIHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTEwMDAwMDAgbG9yICgodSBsc3IgNikgbGFuZCAwYjAwMDExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpXG4gIGVuZFxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMTYgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTEwMDAwMCBsb3IgKCh1IGxzciAxMikgbGFuZCAwYjAwMDAxMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgIDYpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAodSAgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSlcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAyMSB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTEwMDAwIGxvciAoKHUgbHNyIDE4KSBsYW5kIDBiMDAwMDAxMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxMikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgIDYpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAodSAgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSk7XG4gIGVuZFxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMjYgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTExMTAwMCBsb3IgKCh1IGxzciAyNCkgbGFuZCAwYjAwMDAwMDExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kXG4gIGVsc2UgYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTExMTAwIGxvciAoKHUgbHNyIDMwKSBsYW5kIDBiMDAwMDAwMDEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAyNCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kO1xuICAhaVxuXG5sZXQgdXRmOF9vZl9zdXJyb2dhdGVfcGFpciBidWYgaWR4IGhpZ2ggbG93ID1cbiAgbGV0IGhpZ2ggPSBoaWdoIC0gMHhEODAwIGluXG4gIGxldCBsb3cgPSBsb3cgLSAweERDMDAgaW5cbiAgbGV0IGNvZGUgPSAweDEwMDAwICsgKChoaWdoIGxzbCAxMCkgbG9yIGxvdykgaW5cbiAgICB1dGY4X29mX2NvZGUgYnVmIGlkeCBjb2RlXG5cbmxldCBlc2NhcGluZ19lcnJvciBtc2cgcyBjIG9mZiA9XG4gIGxldCBvZmZzID0gc3RyaW5nX29mX2ludCBvZmYgaW5cbiAgbGV0IGNzID1cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8IFNvbWUgYyAtPiBcIiAnXCIgXiAoU3RyaW5nLm1ha2UgMSBjKSBeIFwiJyBcIlxuICAgIHwgTm9uZSAtPiBcIlwiXG4gIGluXG4gICAgbGV4X2Vycm9yIChtc2cgXiBcIiBhdCBvZmZzZXQgXCIgXiBvZmZzIF4gY3MgXiBcIjogXCIgXiBzKVxuXG5sZXQgdW5lc2NhcGVfc3RyaW5nIHMgPVxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgcycgPSBCeXRlcy5jcmVhdGUgbCBpblxuICBsZXQgaiA9IHJlZiAwIGluXG4gIGxldCB1MSA9IHJlZiAwIGluXG4gIGxldCB1MiA9IHJlZiAwIGluXG4gIGxldCBzdGF0ZSA9IHJlZiBgQ2hhciBpblxuXG4gIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgIG1hdGNoICFzdGF0ZSB3aXRoXG4gICAgfCBgQ2hhciAtPiBiZWdpblxuICAgICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgICAgfCAnXFxcXCcgLT4gc3RhdGUgOj0gYEVzY2FwZVxuICAgICAgICAgfCBjIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogYzsgaiA6PSAhaiArIDFcbiAgICAgICBlbmQ7XG4gICAgfCBgRXNjYXBlIC0+IGJlZ2luXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICAgfCAnXCInICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcIic7ICAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ1xcXFwnIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xcXFwnOyAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJy8nICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICcvJzsgICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnYicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xcYic7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnZicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xcMDEyJzsgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnbicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xcbic7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAncicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xccic7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAndCcgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xcdCc7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAndScgIC0+IHN0YXRlIDo9IGBVMV9oMVxuICAgICAgIHwgXyAgICAtPiBlc2NhcGluZ19lcnJvciBcImludmFsaWQgZXNjYXBlIGluIHN0cmluZ1wiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVuZDtcbiAgICB8IGBVMV9oMSAtPiB1MSA6PSBpbnRfb2ZfaGV4Y2hhciBzLltpXTsgIHN0YXRlIDo9IGBVMV9oMlxuICAgIHwgYFUxX2gyIC0+IHUxIDo9ICghdTEgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUxX2gzXG4gICAgfCBgVTFfaDMgLT4gdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTFfaDRcbiAgICB8IGBVMV9oNCAtPlxuICAgICAgdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7XG4gICAgICBpZiAhdTEgPj0gMHhEODAwICYmICF1MSA8PSAweERCRkYgdGhlblxuICAgICAgICBzdGF0ZSA6PSBgVTJfYnNcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgaiA6PSB1dGY4X29mX2NvZGUgcycgIWogIXUxO1xuICAgICAgICBzdGF0ZSA6PSBgQ2hhclxuICAgICAgZW5kXG4gICAgfCBgVTJfYnMgLT5cbiAgICAgIGlmIHMuW2ldIDw+ICdcXFxcJyB0aGVuXG4gICAgICAgIGVzY2FwaW5nX2Vycm9yIFwiZXhwZWN0ZWQgbG93IHN1cnJvZ2F0ZSBlc2NhcGUgY2hhciAoXFxcXClcIiBzIChTb21lIHMuW2ldKSBpXG4gICAgICBlbHNlXG4gICAgICAgIHN0YXRlIDo9IGBVMl91XG4gICAgfCBgVTJfdSAtPlxuICAgICAgaWYgcy5baV0gPD4gJ3UnIHRoZW5cbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJleHBlY3RlZCBsb3cgc3Vycm9nYXRlIGVzY2FwZSBzZXF1ZW5jZSAodSlcIiBzIChTb21lIHMuW2ldKSBpXG4gICAgICBlbHNlXG4gICAgICAgIHN0YXRlIDo9IGBVMl9oMVxuICAgIHwgYFUyX2gxIC0+IHUyIDo9IGludF9vZl9oZXhjaGFyIHMuW2ldOyAgc3RhdGUgOj0gYFUyX2gyXG4gICAgfCBgVTJfaDIgLT4gdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTJfaDNcbiAgICB8IGBVMl9oMyAtPiB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMl9oNFxuICAgIHwgYFUyX2g0IC0+XG4gICAgICBzdGF0ZSA6PSBgQ2hhcjtcbiAgICAgIHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pO1xuICAgICAgaWYgIXUyID49IDB4REMwMCAmJiAhdTIgPD0gMHhERkZGIHRoZW5cbiAgICAgICAgaiA6PSB1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIHMnICFqICF1MSAhdTIgXG4gICAgICBlbHNlXG4gICAgICAgIGVzY2FwaW5nX2Vycm9yIFwiaW52YWxpZCBsb3cgc3Vycm9nYXRlIGZvciBjb2RlIHBvaW50IGJleW9uZCBVK0ZGRkYnXCIgcyBOb25lIGlcbiAgZG9uZTtcbiAgYmVnaW5cbiAgICBtYXRjaCAhc3RhdGUgd2l0aFxuICAgIHwgYENoYXIgLT4gKClcbiAgICB8IF8gLT4gZXNjYXBpbmdfZXJyb3IgXCJlbmQgb2Ygc3RyaW5nIGluIGVzY2FwZSBzZXF1ZW5jZVwiIHMgTm9uZSBsXG4gIGVuZDtcbiAgaWYgIWogPD4gbCB0aGVuIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgKEJ5dGVzLnN1YiBzJyAwICFqKSBlbHNlIHNcblxuIiwiKCogY29udGFpbnMgdGhlIGxpbmUgYW5kIGNoYXJhY3RlciBzcGFuIG9mIHdoZXJlIHRoZSBlcnJvciBvY2N1cmVkICopXG5cbnR5cGUgdCA9IHtcbiAgbGluZSA6IGludFxuOyBzdGFydF9jaGFyIDogaW50XG47IGVuZF9jaGFyIDogaW50XG47IG1zZyA6IHN0cmluZ1xufVxuXG5leGNlcHRpb24gSnNvbl9lcnJvcl9pbmZvIG9mIHRcblxubGV0IGNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZW1zZyA9XG4gIGxldCAoZWxpbmUsIHNjaGFyLCBlY2hhcikgPSBMZXh4ZXJfdXRpbHMuZXJyb3JfcG9zIGxleGJ1ZiBpblxuICB7IGxpbmUgPSBlbGluZTsgc3RhcnRfY2hhciA9IHNjaGFyOyBlbmRfY2hhciA9IGVjaGFyOyBtc2cgPSBlbXNnIH1cblxubGV0IHRvX3N0cmluZyBpbmZvID1cbiAgbGV0IGxvYyA9IFByaW50Zi5zcHJpbnRmIFwibGluZSAlZCBjaGFycyAlZC0lZFwiIGluZm8ubGluZSBpbmZvLnN0YXJ0X2NoYXIgaW5mby5lbmRfY2hhciBpblxuICBpbmZvLm1zZyBeIFwiIGF0IFwiIF4gbG9jXG4iLCJleHRlcm5hbCBmb3JtYXRfZmxvYXQgOiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5cbigqIERldGVybWluZSB0aGUgc2l6ZSBvZiBhbiBpbnRlZ2VyLCBoYW5kbGVzIDMwYml0LCA2MmJpdCBhbmQgSnNvbyB1c2luZyAzMmJpdCBpbnRzICopXG5sZXQgbWF4X2pzb25faW50ID1cbiAgbGV0IHJlYyBsb2cyIG4gPSBpZiBuIDw9IDEgdGhlbiAwIGVsc2UgMSArIGxvZzIobiBhc3IgMSkgaW5cbiAgbGV0IGJpdHMgbiA9IGxvZzIgbiArIDEgaW5cbiAgaWYgYml0cyBtYXhfaW50ID4gNTMgdGhlbiAoMSBsc2wgNTMpIC0gMSBlbHNlIG1heF9pbnRcblxubGV0IG1heF9qc29uX2ludF9hc19mbG9hdCA9IGZsb2F0X29mX2ludCBtYXhfanNvbl9pbnRcblxubGV0IHN0cmluZ19vZl9mbG9hdF9qc29uIGYgPVxuICBsZXQgaXNfaW50ID0gKGZsb2F0X29mX2ludCAoaW50X29mX2Zsb2F0IGYpKSA9IGYgaW5cbiAgaWYgaXNfaW50ICYmIGFic19mbG9hdCBmIDw9IG1heF9qc29uX2ludF9hc19mbG9hdCB0aGVuIGJlZ2luICgqIElFRUUgbWF4IGludCBpbiBhIGZsb2F0IHdoZW4gaW4gNjRiaXQgaW50IG1vZGUqKVxuICAgIGxldCBpbnRfdmFsdWUgPSBpbnRfb2ZfZmxvYXQgZiBpbiAoc3RyaW5nX29mX2ludCBpbnRfdmFsdWUpIF4gXCIuMFwiXG4gIGVuZFxuICBlbHNlIGJlZ2luXG4gICAgKCogJS4xN2cgb2Z0ZW4gY3JlYXRlcyBvdmVybHkgbG9uZyBvdXRwdXQsIGF0dGVtcHQgdG8gY29udmVydCBhdCBsb3dlciBwcmVjZXNzaW9uIGZpcnN0ICopXG4gICAgbGV0IHMgPSBmb3JtYXRfZmxvYXQgXCIlLjE2Z1wiIGYgaW5cbiAgICBsZXQgcyA9IGlmIGZsb2F0X29mX3N0cmluZyBzID0gZiB0aGVuIHMgZWxzZSBmb3JtYXRfZmxvYXQgXCIlLjE3Z1wiIGYgaW5cbiAgICBpZiBub3QgKFN0cmluZy5jb250YWlucyBzICcuJyB8fCBTdHJpbmcuY29udGFpbnMgcyAnZScpIHRoZW4gcyBeIFwiLjBcIlxuICAgIGVsc2Ugc1xuICBlbmRcbiIsIlxubGV0IHRva2VuX2Vycm9yIHRvayA9XG4gIGxldCBvcGVuIFRva2VucyBpblxuICBsZXQgZXJyID0gbWF0Y2ggdG9rIHdpdGhcbiAgICB8IFNUUklORyBzIC0+IFwidW5leHBlY3RlZCBzdHJpbmcgJ1wiIF4gcyBeIFwiJ1wiXG4gICAgfCBPUyAtPiBcInVuZXhwZWN0ZWQgJ3snXCJcbiAgICB8IE9FIC0+IFwidW5leHBlY3RlZCAnfSdcIlxuICAgIHwgTlVMTCAtPiBcInVuZXhwZWN0ZWQgbnVsbCB2YWx1ZVwiXG4gICAgfCBORUdJTkZJTklUWSAtPiBcInVuZXhwZWN0ZWQgbmVnYXRpdmUgaW5maW5pdHlcIlxuICAgIHwgTkFOIC0+IFwidW5leHBlY3RlZCBOb3QtYS1OdW1iZXJcIlxuICAgIHwgTEVYX0VSUk9SIHMgLT4gc1xuICAgIHwgTEFSR0VJTlQgcyAtPiBcInVuZXhwZWN0ZWQgbGFyZ2UgaW50ZWdlciAnXCIgXiBzIF4gXCInXCJcbiAgICB8IElOVCBpIC0+IFwidW5leHBlY3RlZCBpbnRlZ2VyICdcIiBeIChzdHJpbmdfb2ZfaW50IGkpIF4gXCInXCJcbiAgICB8IElORklOSVRZIC0+IFwidW5leHBlY3RlZCBpbmZpbml0eVwiXG4gICAgfCBGTE9BVCBmIC0+IFwidW5leHBlY3RlZCBmbG9hdCAnXCIgXiAoc3RyaW5nX29mX2Zsb2F0IGYpIF4gXCInXCJcbiAgICB8IEVPRiAtPiBcInVuZXhwZWN0ZWQgZW5kLW9mLWlucHV0XCJcbiAgICB8IENPTVBMSUFOQ0VfRVJST1IgcyAtPiBcImNvbXBsaWFuY2UgZXJyb3IgJ1wiIF4gcyBeIFwiJ1wiXG4gICAgfCBDT01NQSAtPiBcInVuZXhwZWN0ZWQgJywnXCJcbiAgICB8IENPTE9OIC0+IFwidW5leHBlY3RlZCAnOidcIlxuICAgIHwgQk9PTCBiIC0+IFwidW5leHBlY3RlZCBib29sZWFuICdcIiBeIChpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCIpIF4gXCInXCJcbiAgICB8IEFTIC0+IFwidW5leHBlY3RlZCAnWydcIlxuICAgIHwgQUUgLT4gXCJ1bmV4cGVjdGVkICddJ1wiXG4gICAgfCBUUyAtPiBcInVuZXhwZWN0ZWQgJygnXCJcbiAgICB8IFRFIC0+IFwidW5leHBlY3RlZCAnKSdcIlxuICAgIHwgVlMgLT4gXCJ1bmV4cGVjdGVkICc8J1wiXG4gICAgfCBWRSAtPiBcInVuZXhwZWN0ZWQgJz4nXCJcbiAgaW5cbiAgICBgU3ludGF4X2Vycm9yIGVyclxuIiwibW9kdWxlIHR5cGUgUGFyc2VyID0gc2lnXG4gIG1vZHVsZSBDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TXG5cbiAgdmFsIGRlY29kZVxuICAgIDogIHJlYWRlciA6ICh1bml0IC0+IFRva2Vucy50b2tlbilcbiAgICAtPiAoQ29tcGxpYW5jZS5qc29uIG9wdGlvbiwgc3RyaW5nKSByZXN1bHRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgOiBQYXJzZXJcbiAgd2l0aCBtb2R1bGUgQ29tcGxpYW5jZSA9IENvbXBsaWFuY2Vcbj0gc3RydWN0XG5cbiAgbW9kdWxlIENvbXBsaWFuY2UgPSBDb21wbGlhbmNlXG5cbiAgZXhjZXB0aW9uIFBhcnNlX2Vycm9yIG9mIFtgRW9mIHwgYFN5bnRheF9lcnJvciBvZiBzdHJpbmddXG5cbiAgbGV0IGpzb25fdmFsdWUgfnJlYWRlciA9IFxuICAgIGxldCBvcGVuIFRva2VucyBpblxuICAgIGxldCBvcGVuIFBhcnNlcl90b29scyBpblxuICAgIGxldCByZWMgdG9rZW5fdmFsdWUgdG9rID0gYmVnaW5cbiAgICAgIG1hdGNoIHRvayB3aXRoXG4gICAgICB8IElOVCBpIC0+IENvbXBsaWFuY2UuaW50ZWdlciBpXG4gICAgICB8IFNUUklORyBzIC0+IENvbXBsaWFuY2Uuc3RyaW5nIHNcbiAgICAgIHwgQk9PTCBiIC0+IENvbXBsaWFuY2UuYm9vbCBiXG4gICAgICB8IEZMT0FUIGYgLT4gQ29tcGxpYW5jZS5udW1iZXIgKGBGbG9hdCBmKVxuICAgICAgfCBJTkZJTklUWSAtPiBDb21wbGlhbmNlLm51bWJlciBgSW5maW5pdHlcbiAgICAgIHwgTkVHSU5GSU5JVFkgLT4gQ29tcGxpYW5jZS5udW1iZXIgYE5lZ2luZmluaXR5XG4gICAgICB8IE5BTiAtPiBDb21wbGlhbmNlLm51bWJlciBgTmFuXG4gICAgICB8IE5VTEwgLT4gQ29tcGxpYW5jZS5udWxsXG4gICAgICB8IExBUkdFSU5UIHMgLT4gQ29tcGxpYW5jZS5sYXJnZWludCBzXG4gICAgICB8IEVPRiAtPiByYWlzZSAoUGFyc2VfZXJyb3IgYEVvZilcbiAgICAgIHwgQ09NTUEgfCBDT0xPTiB8IEFFIHwgT0UgfCBURSB8IFZFIHwgTEVYX0VSUk9SIF8gfCBDT01QTElBTkNFX0VSUk9SIF8gLT5cbiAgICAgICAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgICAgfCBBUyAtPiBhcnJheV92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBPUyAtPiBvYmplY3RfdmFsdWVfc3RhcnQgKClcbiAgICAgIHwgVFMgLT4gdHVwbGVfdmFsdWVfc3RhcnQgKClcbiAgICAgIHwgVlMgLT4gdmFyaWFudF92YWx1ZV9zdGFydCAoKVxuICAgIGVuZFxuICAgIGFuZCB2YWx1ZSAoKSA9IHRva2VuX3ZhbHVlIChyZWFkZXIgKCkpXG4gICAgYW5kIGFycmF5X3ZhbHVlX3N0YXJ0ICgpID0gYmVnaW5cbiAgICAgIGxldCB0b2sgPSByZWFkZXIgKCkgaW5cbiAgICAgIG1hdGNoIHRvayB3aXRoXG4gICAgICB8IEFFIC0+IENvbXBsaWFuY2UubGlzdCBbXVxuICAgICAgfCBfIC0+IGFycmF5X3ZhbHVlc19zdGFydCB0b2sgW11cbiAgICBlbmRcbiAgICBhbmQgYXJyYXlfdmFsdWVzX3N0YXJ0IHRvayBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB0b2tlbl92YWx1ZSB0b2sgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEFFIC0+IENvbXBsaWFuY2UubGlzdCAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IGFycmF5X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBhcnJheV92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEFFIC0+IENvbXBsaWFuY2UubGlzdCAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IGFycmF5X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHRvayA9IHJlYWRlciAoKSBpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyBbXVxuICAgICAgfCBfIC0+IG9iamVjdF92YWx1ZXNfc3RhcnQgdG9rIFtdXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZXNfc3RhcnQgdG9rIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IGNvbG9uX3ZhbHVlIHRvayAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IG9iamVjdF92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSBrZXlfY29sb25fdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IE9FIC0+IENvbXBsaWFuY2UuYXNzb2MgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiBvYmplY3RfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGNvbG9uX3ZhbHVlIHYgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IFNUUklORyBrIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICAgIHwgQ09MT04gLT4gKGssIHZhbHVlICgpKVxuICAgICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICAgIGVuZFxuICAgICAgfCB0b2sgLT4gIHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQga2V5X2NvbG9uX3ZhbHVlICgpID0gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFNUUklORyBrIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICAgIHwgQ09MT04gLT4gKGssIHZhbHVlICgpKVxuICAgICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICAgIGVuZFxuICAgICAgfCB0b2sgLT4gIHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdHVwbGVfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHYxID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IENPTU1BIC0+IGJlZ2luXG4gICAgICAgIGxldCB2MiA9IHZhbHVlICgpIGluXG4gICAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICAgIHwgVEUgLT4gQ29tcGxpYW5jZS50dXBsZSBbdjE7IHYyXVxuICAgICAgICB8IENPTU1BIC0+IHR1cGxlX3ZhbHVlcyBbdjI7IHYxXVxuICAgICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICAgIGVuZFxuICAgICAgfCBURSAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKGBTeW50YXhfZXJyb3IgXCJ0dXBsZSBtdXN0IGhhdmUgYXQgbGVhc3QgMiBlbGVtZW50c1wiKSlcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdHVwbGVfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHZhbHVlICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBURSAtPiBDb21wbGlhbmNlLnR1cGxlIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gdHVwbGVfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIHZhcmlhbnRfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBWRSAtPiBDb21wbGlhbmNlLnZhcmlhbnQgayBOb25lXG4gICAgICAgIHwgQ09MT04gLT4gdmFyaWFudF9lbmQgayAoU29tZSAodmFsdWUgKCkpKVxuICAgICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICAgIGVuZFxuICAgICAgfCBWRSAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKGBTeW50YXhfZXJyb3IgXCJ2YXJpYW50IG11c3QgaGF2ZSBhdCBsZWFzdCBhIHN0cmluZ1wiKSlcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdmFyaWFudF9lbmQgayB2ID0gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFZFIC0+IENvbXBsaWFuY2UudmFyaWFudCBrIHZcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBpblxuICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIGBFb2YpIC0+IE5vbmVcbiAgICB8IGV4Y2VwdGlvbiBleG5fIC0+IHJhaXNlIGV4bl9cbiAgICB8IEVPRiAtPiBOb25lXG4gICAgfCB0b2sgLT4gU29tZSAodG9rZW5fdmFsdWUgdG9rKVxuXG4gIGxldCBkZWNvZGUgfnJlYWRlciA9IFxuICAgIG1hdGNoIGpzb25fdmFsdWUgfnJlYWRlciB3aXRoXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIGBFb2YpIC0+IEVycm9yIFwiVW5leHBlY3RlZCBlbmQtb2YtaW5wdXRcIlxuICAgIHwgZXhjZXB0aW9uIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBlcnIpKSAtPiBFcnJvciBlcnJcbiAgICB8IGV4Y2VwdGlvbiAoTGV4eGVyX3V0aWxzLkxleF9lcnJvciBlcnIpIC0+IEVycm9yIGVyclxuICAgIHwgcmVzIC0+IE9rIHJlc1xuXG5lbmRcbiIsImxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxubGV0IGFkZF9oZXhfYnl0ZSB+YWRkX2NoYXIgaSA9XG4gIGFkZF9jaGFyIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gIGFkZF9jaGFyIChuaWJibGVfdG9faGV4IChpIGxhbmQgMHgwZikpXG5cbmxldCBlc2NhcGUgfmFkZF9jaGFyIH5hZGRfc3RyaW5nIHMgPVxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgIHwgJ1xcYicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXGJcIlxuICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgIHwgJ1xccicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHJcIlxuICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgIHwgJ1xceDdGJyBhcyBjIC0+XG4gICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIH5hZGRfY2hhciAoaW50X29mX2NoYXIgYylcbiAgICB8IF8gICAgICAtPiBhZGRfY2hhciBzLltpXVxuICBkb25lXG4gXG4iLCJtb2R1bGUgdHlwZSBJbnRmID0gc2lnXG4gIHZhbCBwcmV0dHlfcHJpbnQgOiBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgcHJldHR5X3ByaW50X3RvX3N0cmluZyA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIGxldCB0b19qc29uX3N0cmluZyBzID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgYWRkX3F1b3RlX3N0cmluZyBzID0gYWRkX2NoYXIgJ1wiJzsgVXRpbHMuZXNjYXBlIH5hZGRfY2hhciB+YWRkX3N0cmluZyBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgYWRkX3F1b3RlX3N0cmluZyBzO1xuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBsZXQgcHBfbGlzdCBzZXAgcHB4IG91dCBsID1cbiAgICBsZXQgcHBfc2VwIG91dCAoKSA9IEZvcm1hdC5mcHJpbnRmIG91dCBcIiVzQCBcIiBzZXAgaW5cbiAgICBGb3JtYXQucHBfcHJpbnRfbGlzdCB+cHBfc2VwIHBweCBvdXQgbFxuXG4gIGxldCByZWMgZm9ybWF0IChvdXQ6Rm9ybWF0LmZvcm1hdHRlcikganNvbiA6IHVuaXQgPVxuICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgTnVsbCAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IEZvcm1hdC5wcF9wcmludF9ib29sIG91dCBiXG4gICAgICB8IGBJbnQgaSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoc3RyaW5nX29mX2ludCBpKVxuICAgICAgfCBgRmxvYXQgZiAtPlxuICAgICAgICBsZXQgcyA9IENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmIGluXG4gICAgICAgIEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0ICh0b19qc29uX3N0cmluZyBzKVxuICAgICAgfCBgSW50bGl0IHNcbiAgICAgIHwgYEZsb2F0bGl0IHNcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IHNcbiAgICAgIHwgYExpc3QgW10gLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJbXVwiXG4gICAgICB8IGBMaXN0IGwgLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiW0A7PDEgMD5AWzxob3Y+JWFAXUA7PDEgLTI+XVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdCkgbFxuICAgICAgfCBgQXNzb2MgW10gLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJ7fVwiXG4gICAgICB8IGBBc3NvYyBsIC0+XG4gICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIntAOzwxIDA+JWFAOzwxIC0yPn1cIiAocHBfbGlzdCBcIixcIiBmb3JtYXRfZmllbGQpIGxcbiAgICAgIHwgYFR1cGxlIGwgLT5cbiAgICAgICAgaWYgbCA9IFtdIHRoZW4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCIoKVwiXG4gICAgICAgIGVsc2UgRm9ybWF0LmZwcmludGYgb3V0IFwiKEAsJWFAOzwwIC0yPilcIiAocHBfbGlzdCBcIixcIiBmb3JtYXQpIGxcbiAgICAgIHwgYFZhcmlhbnQgKHMsIE5vbmUpIC0+XG4gICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIjwlcz5cIiAodG9fanNvbl9zdHJpbmcgcylcbiAgICAgIHwgYFZhcmlhbnQgKHMsIFNvbWUganNvbikgLT5cbiAgICAgICAgbGV0IHMgPSB0b19qc29uX3N0cmluZyBzIGluXG4gICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIjxAWzxodjI+JXM6ICVhQF0+XCIgcyBmb3JtYXQganNvblxuXG4gIGFuZCBmb3JtYXRfZmllbGQgb3V0IChuYW1lLCBqc29uKSA9XG4gICAgRm9ybWF0LmZwcmludGYgb3V0IFwiQFs8aHYyPiVzOiAlYUBdXCIgKHRvX2pzb25fc3RyaW5nIG5hbWUpIGZvcm1hdCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludCBvdXQganNvbiA9XG4gICAgRm9ybWF0LmZwcmludGYgb3V0IFwiQFs8aHYyPiVhQF1cIiBmb3JtYXQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIGpzb24gPVxuICAgIEZvcm1hdC5hc3ByaW50ZiBcIiVhXCIgcHJldHR5X3ByaW50IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MganNvbiA9XG4gICAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgaW5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYUA/XCIgcHJldHR5X3ByaW50IGpzb25cblxuZW5kXG4iLCJsZXQgZXJyb3IgbXNnIF9qc29uID0gcmFpc2UgKEZhaWx1cmUgbXNnKVxuXG5tb2R1bGUgSW50ZXJuYWwgPSBzdHJ1Y3RcbiAgbW9kdWxlIHR5cGUgUyA9IHNpZ1xuICAgIHR5cGUganNvblxuICAgIHZhbCBudWxsIDogdW5pdCAtPiBqc29uXG4gIGVuZFxuXG4gIG1vZHVsZSB0eXBlIEludGVybmFsX3N0cmljdF9pbnRmID0gc2lnXG4gICAgdHlwZSBqc29uXG5cbiAgICB2YWwgbWVtYmVyIDogc3RyaW5nIC0+IFs+IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdCBdIC0+IGpzb25cbiAgICB2YWwgaW5kZXggOiBpbnQgLT4gWz4gYExpc3Qgb2YganNvbiBsaXN0IF0gLT4ganNvblxuICAgIHZhbCBtYXAgOiAoanNvbiAtPiBqc29uKSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXVxuICAgIHZhbCB0b19hc3NvYyA6IFs+IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdCBdIC0+IChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgdmFsIHRvX2Jvb2wgOiBbPiBgQm9vbCBvZiBib29sIF0gLT4gYm9vbFxuICAgIHZhbCB0b19mbG9hdCA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX3N0cmluZyA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIF0gLT4gc3RyaW5nXG4gICAgdmFsIHRvX3N0cmluZ19vcHRpb24gOiBbPiBgU3RyaW5nIG9mIHN0cmluZyB8IGBOdWxsIF0gLT4gc3RyaW5nIG9wdGlvblxuICAgIHZhbCB0b19vcHRpb24gOiAoKFs+IGBOdWxsIF0gYXMgJ2EpIC0+IGpzb24pIC0+ICdhIC0+IGpzb24gb3B0aW9uXG4gICAgdmFsIHRvX2xpc3QgOiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uIGxpc3RcbiAgICB2YWwgdG9fYm9vbF9vcHRpb24gOiBbPiBgQm9vbCBvZiBib29sIHwgYE51bGwgXSAtPiBib29sIG9wdGlvblxuICAgIHZhbCB0b19mbG9hdF9vcHRpb24gOiBbPiBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCB0b19udW1iZXIgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19udW1iZXJfb3B0aW9uIDogWz4gYEZsb2F0IG9mIGZsb2F0IHwgYE51bGwgXSAtPiBmbG9hdCBvcHRpb25cbiAgICB2YWwgY29udmVydF9lYWNoIDogKGpzb24gLT4ganNvbikgLT4gWz4gYExpc3Qgb2YganNvbiBsaXN0IF0gLT4ganNvbiBsaXN0XG4gICAgdmFsIHJldl9maWx0ZXJfbWFwIDogKCdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgZmlsdGVyX21hcCA6ICgnYSAtPiAnYSBvcHRpb24pIC0+ICdhIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXZfZmxhdHRlbiA6ICdhIGxpc3QgLT4gWz4gYExpc3Qgb2YgJ2EgbGlzdCBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmbGF0dGVuIDogWz4gYExpc3Qgb2YgJ2EgbGlzdCBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfaW5kZXggOiBpbnQgLT4gWz4gYExpc3Qgb2YganNvbiBsaXN0IF0gbGlzdCAtPiBqc29uIGxpc3RcbiAgICB2YWwgZmlsdGVyX2xpc3QgOiBbPiBgTGlzdCBvZiAnYSBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfYXNzb2MgOiBbPiBgQXNzb2Mgb2YgJ2EgXSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgZmlsdGVyX2Jvb2wgOiBbPiBgQm9vbCBvZiBib29sIF0gbGlzdCAtPiBib29sIGxpc3RcbiAgICB2YWwgZmlsdGVyX2Zsb2F0IDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gICAgdmFsIGZpbHRlcl9zdHJpbmcgIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgXSBsaXN0IC0+IHN0cmluZyBsaXN0XG4gICAgdmFsIGZpbHRlcl9tZW1iZXIgOiBzdHJpbmcgLT4gWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gbGlzdCAtPiBqc29uIGxpc3RcbiAgICB2YWwgZmlsdGVyX251bWJlciA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIGxpc3QgLT4gZmxvYXQgbGlzdFxuICAgIHZhbCBrZXlzIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCBdIC0+IHN0cmluZyBsaXN0XG4gICAgdmFsIHZhbHVlcyA6IFs+IGBBc3NvYyBvZiAoc3RyaW5nICogJ2EpIGxpc3QgXSAtPiAnYSBsaXN0XG4gICAgdmFsIGNvbWJpbmUgOiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdIC0+IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF0gLT4gWz4gYEFzc29jIG9mICdhIGxpc3QgXVxuICAgIHZhbCBzb3J0IDogKFs+IGBBc3NvYyBvZiAoc3RyaW5nICogJ2EpIGxpc3QgfCBgTGlzdCBvZiAnYSBsaXN0IF0gYXMgJ2EpIC0+ICdhXG4gIGVuZFxuXG4gIG1vZHVsZSBTaGFyZWQgPSBzdHJ1Y3RcbiAgICBsZXQgcmVjIHJldl9maWx0ZXJfbWFwIGYgYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGFjY1xuICAgICAgfCBoZDo6dGwgLT5cbiAgICAgICAgbWF0Y2ggZiBoZCB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiByZXZfZmlsdGVyX21hcCBmIGFjYyB0bFxuICAgICAgICB8IFNvbWUgdiAtPiByZXZfZmlsdGVyX21hcCBmICh2OjphY2MpIHRsXG5cbiAgICBsZXQgZmlsdGVyX21hcCBmIGwgPSBMaXN0LnJldiAocmV2X2ZpbHRlcl9tYXAgZiBbXSBsKVxuXG4gICAgbGV0IHJlYyByZXZfZmxhdHRlbiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYWNjXG4gICAgICB8IGhkOjp0bCAtPlxuICAgICAgICBtYXRjaCBoZCB3aXRoXG4gICAgICAgIHwgYExpc3QgbDIgLT4gcmV2X2ZsYXR0ZW4gKExpc3QucmV2X2FwcGVuZCBsMiBhY2MpIHRsXG4gICAgICAgIHwgXyAtPiByZXZfZmxhdHRlbiBhY2MgdGxcblxuICAgIGxldCBmbGF0dGVuIGwgPSBMaXN0LnJldiAocmV2X2ZsYXR0ZW4gW10gbClcblxuICBlbmRcblxuICBtb2R1bGUgU3RyaWN0KE0gOiBTKSA6IEludGVybmFsX3N0cmljdF9pbnRmXG4gICAgd2l0aCB0eXBlIGpzb24gPSBNLmpzb25cbiAgPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBNLmpzb25cblxuICAgIGxldCBhc3NvYyBuYW1lIG9iaiA6IGpzb24gPSB0cnkgTGlzdC5hc3NvYyBuYW1lIG9iaiB3aXRoIE5vdF9mb3VuZCAtPiBNLm51bGwgKClcblxuICAgIGxldCBtZW1iZXIgbmFtZSB2IDoganNvbiA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYEFzc29jIG9iaiAtPiBhc3NvYyBuYW1lIG9ialxuICAgICAgfCBqc29uIC0+IGVycm9yIChcIkV4cGVjdGVkIGBBc3NvYyB0byBmaW5kIG5hbWUgJ1wiIF4gbmFtZSBeIFwiJyBpblwiKSBqc29uXG5cbiAgICBsZXQgaW5kZXggaSB2IDoganNvbiA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gICAgICAgICAgbGV0IGknID0gaWYgaSA8IDAgdGhlbiBsZW4gKyBpIGVsc2UgaSBpblxuICAgICAgICAgIGlmIGknIDwgMCB8fCBpJyA+PSBsZW4gdGhlbiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCAoc3RyaW5nX29mX2ludCBpIF4gXCIgb3V0IG9mIGJvdW5kc1wiKSlcbiAgICAgICAgICBlbHNlIExpc3QubnRoIGwgaSdcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkNhbid0IGluZGV4IG5vbmUgYExpc3QgdHlwZSBcIiBqc29uXG5cbiAgICBsZXQgbWFwIGYgdiA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgZiBsKVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiQ2FuJ3QgbWFwIG92ZXIgbm9uZSBgTGlzdCB0eXBlIFwiIGpzb25cblxuICAgIGxldCB0b19hc3NvYyA9IGZ1bmN0aW9uIHwgYEFzc29jIG9iaiAtPiBvYmogfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEFzc29jXCIganNvblxuICAgIGxldCB0b19ib29sID0gZnVuY3Rpb24gfCBgQm9vbCBiIC0+IGIgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEJvb2xcIiBqc29uXG4gICAgbGV0IHRvX2Zsb2F0ID0gZnVuY3Rpb24gfCBgRmxvYXQgZiAtPiBmIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19zdHJpbmcgPSBmdW5jdGlvblxuICAgICAgfCBgU3RyaW5nIHMgLT4gc1xuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYFN0cmluZ1wiIGpzb25cblxuICAgIGxldCB0b19zdHJpbmdfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYFN0cmluZyBzIC0+IFNvbWUgc1xuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgU3RyaW5nIG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX29wdGlvbiBmIHYgOiBqc29uIG9wdGlvbiA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCB2IC0+IFNvbWUgKGYgdilcblxuICAgIGxldCB0b19saXN0IHYgOiBqc29uIGxpc3QgPVxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IGBMaXN0IGwgLT4gbFxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYExpc3RcIiBqc29uXG5cbiAgICBsZXQgdG9fZmxvYXRfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBGbG9hdCBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCB0b19ib29sX29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBCb29sIGIgLT4gU29tZSBiXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBCb29sIG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX251bWJlciA9IGZ1bmN0aW9uXG4gICAgICB8IGBGbG9hdCBmIC0+IGZcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXJfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBGbG9hdCBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCBjb252ZXJ0X2VhY2ggZiA9IGZ1bmN0aW9uXG4gICAgICB8IGBMaXN0IGwgLT4gTGlzdC5tYXAgZiBsXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgTGlzdFwiIGpzb25cblxuICAgIGxldCByZXZfZmlsdGVyX21hcCA9IFNoYXJlZC5yZXZfZmlsdGVyX21hcFxuICAgIGxldCBmaWx0ZXJfbWFwID0gU2hhcmVkLmZpbHRlcl9tYXBcblxuICAgIGxldCByZXZfZmxhdHRlbiA9IFNoYXJlZC5yZXZfZmxhdHRlblxuICAgIGxldCBmbGF0dGVuID0gU2hhcmVkLmZsYXR0ZW5cblxuICAgIGxldCBmaWx0ZXJfaW5kZXggaSBsID1cbiAgICAgIGZpbHRlcl9tYXAgKGZ1bmN0aW9uIHwgYExpc3QgbCAtPiAodHJ5IFNvbWUgKExpc3QubnRoIGwgaSkgd2l0aCBfIC0+IE5vbmUpIHwgXyAtPiBOb25lKSBsXG5cbiAgICBsZXQgZmlsdGVyX2xpc3QgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBMaXN0IGwgLT4gU29tZSBsIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9hc3NvYyBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEFzc29jIGwgLT4gU29tZSBsIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9ib29sIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQm9vbCBiIC0+IFNvbWUgYiB8IF8gLT4gTm9uZSkgbFxuICAgIGxldCBmaWx0ZXJfZmxvYXQgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBGbG9hdCBmIC0+IFNvbWUgZiB8IF8gLT4gTm9uZSkgbFxuICAgIGxldCBmaWx0ZXJfc3RyaW5nIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgU3RyaW5nIHMgLT4gU29tZSBzIHwgXyAtPiBOb25lKSBsXG5cbiAgICBsZXQgZmlsdGVyX21lbWJlciBrIGwgPVxuICAgICAgZmlsdGVyX21hcCAoZnVuY3Rpb24gYEFzc29jIGwgLT4gKHRyeSBTb21lIChMaXN0LmFzc29jIGsgbCkgd2l0aCBfIC0+IE5vbmUpIHwgXyAtPiBOb25lKSBsXG5cbiAgICBsZXQgZmlsdGVyX251bWJlciBsID1cbiAgICAgIGZpbHRlcl9tYXAgKFxuICAgICAgICBmdW5jdGlvblxuICAgICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgICB8IF8gLT4gTm9uZVxuICAgICAgKSBsXG5cbiAgICBsZXQga2V5cyBvID0gdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChrZXksIF8pIC0+IGtleSlcblxuICAgIGxldCB2YWx1ZXMgbyA9IHRvX2Fzc29jIG8gfD4gTGlzdC5tYXAgKGZ1biAoXywgdmFsdWUpIC0+IHZhbHVlKVxuXG4gICAgbGV0IGNvbWJpbmUgZmlyc3Qgc2Vjb25kID1cbiAgICAgIG1hdGNoIChmaXJzdCwgc2Vjb25kKSB3aXRoXG4gICAgICB8IChgQXNzb2MgYSwgYEFzc29jIGIpIC0+IGBBc3NvYyAoYSBAIGIpXG4gICAgICB8IChfLCBfKSAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkV4cGVjdGVkIHR3byBvYmplY3RzXCIpXG5cbiAgICBsZXQgcmVjIHNvcnQganNvbiA9XG4gICAgICBtYXRjaCBqc29uIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT5cbiAgICAgICAgbGV0IG8gPSBMaXN0LnJldiAoTGlzdC5yZXZfbWFwIChmdW4gKGssIHYpIC0+IChrLCBzb3J0IHYpKSBvKSBpblxuICAgICAgICBgQXNzb2MgKChMaXN0LnN0YWJsZV9zb3J0IChmdW4gKGsxLCBfKSAoazIsIF8pIC0+IFN0cmluZy5jb21wYXJlIGsxIGsyKSkgbylcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBgTGlzdCAoTGlzdC5yZXYgKExpc3QucmV2X21hcCBzb3J0IGwpKVxuICAgICAgfCBlbCAtPiAgZWxcbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfYmFzaWNfaW50ZiA9IHNpZ1xuXG4gICAgdmFsIHRvX251bWJlciA6IFs+IGBJbnQgb2YgaW50IHwgYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fbnVtYmVyX29wdGlvbiA6IFs+IGBJbnQgb2YgaW50IHwgYEZsb2F0IG9mIGZsb2F0IHwgYE51bGwgXSAtPiBmbG9hdCBvcHRpb25cbiAgICB2YWwgdG9faW50IDogWz4gYEludCBvZiBpbnQgXSAtPiBpbnRcbiAgICB2YWwgdG9faW50X29wdGlvbiA6IFs+IGBJbnQgb2YgaW50IHwgYE51bGwgXSAtPiBpbnQgb3B0aW9uXG4gICAgdmFsIGZpbHRlcl9pbnQgOiBbPiBgSW50IG9mIGludCBdIGxpc3QgLT4gaW50IGxpc3RcbiAgICB2YWwgZmlsdGVyX251bWJlciA6IFs+IGBJbnQgb2YgaW50IHwgYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gIGVuZFxuXG4gIG1vZHVsZSBCYXNpYyhNIDogUykgOiBJbnRlcm5hbF9iYXNpY19pbnRmID0gc3RydWN0XG5cbiAgICBsZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IGZsb2F0IGlcbiAgICAgIHwgYEZsb2F0IGYgLT4gZlxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEludCBvciBgRmxvYXRcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyX29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBJbnQgaSAtPiBTb21lIChmbG9hdCBpKVxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEludCwgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX2ludCA9IGZ1bmN0aW9uIHwgYEludCBpIC0+IGkgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEludFwiIGpzb25cblxuICAgIGxldCB0b19pbnRfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IFNvbWUgaVxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IGZpbHRlcl9pbnQgbCA9IFNoYXJlZC5maWx0ZXJfbWFwIChmdW5jdGlvbiBgSW50IGkgLT4gU29tZSBpIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9udW1iZXIgbCA9XG4gICAgICBTaGFyZWQuZmlsdGVyX21hcCAoXG4gICAgICAgIGZ1bmN0aW9uXG4gICAgICAgIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gICAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICApIGxcbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfZXh0ZW5kZWRfaW50ZiA9IHNpZ1xuICAgIHZhbCBzb3J0IDogKFs+IGBBc3NvYyBvZiAoc3RyaW5nICogJ2EpIGxpc3QgfCBgTGlzdCBvZiAnYSBsaXN0IHxcbiAgICAgICAgICAgICAgICAgICBgVHVwbGUgb2YgJ2EgbGlzdCB8IGBWYXJpYW50IG9mICdiICogJ2Egb3B0aW9uIF0gYXMgJ2EpIC0+ICdhXG4gIGVuZFxuXG4gIG1vZHVsZSBFeHRlbmRlZChNIDogUykgOiBJbnRlcm5hbF9leHRlbmRlZF9pbnRmID0gc3RydWN0XG5cbiAgICBsZXQgcmVjIHNvcnQganNvbiA9XG4gICAgICBtYXRjaCBqc29uIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT5cbiAgICAgICAgbGV0IG8gPSBMaXN0LnJldiAoTGlzdC5yZXZfbWFwIChmdW4gKGssIHYpIC0+IChrLCBzb3J0IHYpKSBvKSBpblxuICAgICAgICBgQXNzb2MgKChMaXN0LnN0YWJsZV9zb3J0IChmdW4gKGsxLCBfKSAoazIsIF8pIC0+IFN0cmluZy5jb21wYXJlIGsxIGsyKSkgbylcbiAgICAgIHwgYFR1cGxlIGxcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBgTGlzdCAoTGlzdC5yZXYgKExpc3QucmV2X21hcCBzb3J0IGwpKVxuICAgICAgfCBgVmFyaWFudCAoaywgU29tZSB2KSBhcyB2MSAtPlxuICAgICAgICBsZXQgdicgPSBzb3J0IHYgaW4gaWYgdicgPT0gdiB0aGVuIHYxIGVsc2UgYFZhcmlhbnQgKGssIFNvbWUgdicpXG4gICAgICB8IGVsIC0+ICBlbFxuICBlbmRcblxuZW5kXG5cbm1vZHVsZSBTdHJpY3QgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLlN0cmljdC5qc29uXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbmVuZFxuXG5tb2R1bGUgQmFzaWMgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkJhc2ljLmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG5lbmRcblxubW9kdWxlIEV4dGVuZGVkID0gc3RydWN0XG4gIG1vZHVsZSBNID0gc3RydWN0XG4gICAgdHlwZSBqc29uID0gSnNvbi5FeHRlbmRlZC5qc29uXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuICBpbmNsdWRlIEludGVybmFsLkV4dGVuZGVkKE0pXG5lbmRcblxubW9kdWxlIFlvanNvbl9zYWZlID0gc3RydWN0XG4gIG1vZHVsZSBNID0gc3RydWN0XG4gICAgdHlwZSBqc29uID1cbiAgICAgIFtcbiAgICAgIHwgYE51bGxcbiAgICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgICAgfCBgSW50IG9mIGludFxuICAgICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgICAgfCBgRmxvYXQgb2YgZmxvYXRcbiAgICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICAgIF1cblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5FeHRlbmRlZChNKVxuZW5kXG4iLCJsZXQgdG9rZW5fdG9fc3RyaW5nICh0b2s6VG9rZW5zLnRva2VuKSA9XG4gIG1hdGNoIHRvayB3aXRoXG4gIHwgU1RSSU5HIHMgLT4gc1xuICB8IE9TIC0+IFwie1wiXG4gIHwgT0UgLT4gXCJ9XCJcbiAgfCBOVUxMIC0+IFwiTnVsbFwiXG4gIHwgTkVHSU5GSU5JVFkgLT4gXCItSW5maW5pdHlcIlxuICB8IE5BTiAtPiBcIk5BTlwiXG4gIHwgTEVYX0VSUk9SIGVyciAtPiBcImlucHV0IGVycm9yICdcIiBeIGVyciBeIFwiJ1wiXG4gIHwgTEFSR0VJTlQgcyAtPiBzXG4gIHwgSU5UIGkgLT4gc3RyaW5nX29mX2ludCBpXG4gIHwgSU5GSU5JVFkgLT4gXCJJbmZpbml0eVwiXG4gIHwgRkxPQVQgZiAtPiBzdHJpbmdfb2ZfZmxvYXQgZlxuICB8IEVPRiAtPiBcImVuZC1vZi1maWxlXCJcbiAgfCBDT01QTElBTkNFX0VSUk9SIGVyciAtPiBlcnJcbiAgfCBDT01NQSAtPiBcIixcIlxuICB8IENPTE9OIC0+IFwiOlwiXG4gIHwgQk9PTCBiIC0+IGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIlxuICB8IEFTIC0+IFwiW1wiXG4gIHwgQUUgLT4gXCJdXCJcbiAgfCBWUyAtPiBcIjxcIlxuICB8IFZFIC0+IFwiPlwiXG4gIHwgVFMgLT4gXCIoXCJcbiAgfCBURSAtPiBcIilcIlxuIiwibW9kdWxlIHR5cGUgUmVhZGVyX3N0cmluZ19maWxlID0gc2lnXG4gIHR5cGUganNvblxuXG4gIHZhbCBqc29uX29mX3N0cmluZyA6IHN0cmluZyAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2Zfc3RyaW5nX2V4biA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBqc29uX29mX2ZpbGUgOiBzdHJpbmcgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2ZpbGVfZXhuIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfY2hhbm5lbCA6IGluX2NoYW5uZWwgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2NoYW5uZWxfZXhuIDogaW5fY2hhbm5lbCAtPiBqc29uXG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9mdW5jdGlvbl9leG4gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4ganNvblxuICB2YWwganNvbl9vZl9sZXhidWYgOiBMZXhpbmcubGV4YnVmIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXhuIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uXG4gIHZhbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4ganNvblxuICB2YWwgb2ZfZmlsZSA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBvZl9jaGFubmVsIDogaW5fY2hhbm5lbCAtPiBqc29uXG4gIHZhbCBvZl9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uXG5cbiAgdmFsIGpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfY2hhbm5lbF9lcnJvcl9pbmZvIDogaW5fY2hhbm5lbCAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb25fZXJyb3JfaW5mbyA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm8gOiBMZXhpbmcubGV4YnVmIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgOiA/c3RyZWFtOmJvb2wgLT4gTGV4aW5nLmxleGJ1ZiAtPiAoanNvbiBvcHRpb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG5cbiAgdmFsIHN0cmVhbV9mcm9tX3N0cmluZyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9jaGFubmVsIDogP2ZpbjoodW5pdCAtPiB1bml0KSAtPiBpbl9jaGFubmVsIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2ZpbGUgOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fbGV4YnVmIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uIFN0cmVhbS50XG5cbiAgdmFsIHN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyA6ID9maW46KHVuaXQgLT4gdW5pdCkgLT4gaW5fY2hhbm5lbCAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZnVuY3Rpb25fZXJyb3JfaW5mbyA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyA6IExleGluZy5sZXhidWYgLT4ganNvbiBTdHJlYW0udFxuZW5kXG5cbm1vZHVsZSBNYWtlIChMZXh4ZXIgOiBDb21wbGlhbnRfbGV4eGVyLkxleCApIChQYXJzZXIgOiBQYXJzZXIuUGFyc2VyKSA6IFJlYWRlcl9zdHJpbmdfZmlsZVxuICB3aXRoIHR5cGUganNvbiA9IFBhcnNlci5Db21wbGlhbmNlLmpzb25cbj0gc3RydWN0XG4gIHR5cGUganNvbiA9IFBhcnNlci5Db21wbGlhbmNlLmpzb25cblxuICBsZXQgcmVhZF9qc29uJyB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICB8IE9rIE5vbmUgLT4gRXJyb3IgXCJlbXB0eSBpbnB1dFwiXG4gICAgfCBPayAoU29tZSByZXMpIC0+IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBFT0YgLT4gT2sgcmVzXG4gICAgICB8IGV4Y2VwdGlvbiBMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVyciAtPiBFcnJvciBlcnJcbiAgICAgIHwgdG9rIC0+IEVycm9yIChcImp1bmsgYWZ0ZXIgZW5kIG9mIEpTT04gdmFsdWU6IFwiIF4gKFRva2VuX3V0aWxzLnRva2VuX3RvX3N0cmluZyB0b2spKVxuICAgICAgZW5kXG4gICAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxuICBsZXQgcmVhZF9qc29uIH5sZXhidWYgPVxuICAgIG1hdGNoIHJlYWRfanNvbicgfmxleGJ1ZiB3aXRoXG4gICAgfCBPayBfIGFzIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBzIGluXG4gICAgICBFcnJvciAoRXJyb3JfaW5mby50b19zdHJpbmcgZXJyX2luZm8pXG5cbiAgbGV0IGpzb25fb2Zfc3RyaW5nIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2Zfc3RyaW5nX2V4biBzID1cbiAgICBtYXRjaCBqc29uX29mX3N0cmluZyBzIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQgb2Zfc3RyaW5nIHMgPSBqc29uX29mX3N0cmluZ19leG4gc1xuXG4gIGxldCBqc29uX29mX2ZpbGUgZmlsZW5hbWUgPVxuICAgIHRyeSBiZWdpblxuICAgICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgICAgbGV0IHJlcyA9IHJlYWRfanNvbiB+bGV4YnVmIGluXG4gICAgICAgIGNsb3NlX2luIGluYztcbiAgICAgICAgcmVzXG4gICAgZW5kXG4gICAgd2l0aCBTeXNfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX29mX2ZpbGVfZXhuIGZpbGVuYW1lID1cbiAgICBtYXRjaCBqc29uX29mX2ZpbGUgZmlsZW5hbWUgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBqc29uX29mX2NoYW5uZWwgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb24gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2NoYW5uZWxfZXhuIGluYyA9XG4gICAgbWF0Y2gganNvbl9vZl9jaGFubmVsIGluYyB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfZnVuY3Rpb24gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb24gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1ZiBsZXhidWYgPVxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmX2V4biBsZXhidWYgPVxuICAgIG1hdGNoIGpzb25fb2ZfbGV4YnVmIGxleGJ1ZiB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfZnVuY3Rpb25fZXhuIGYgPVxuICAgIG1hdGNoIGpzb25fb2ZfZnVuY3Rpb24gZiB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IG9mX2ZpbGUgPSBqc29uX29mX2ZpbGVfZXhuXG4gIGxldCBvZl9jaGFubmVsID0ganNvbl9vZl9jaGFubmVsX2V4blxuICBsZXQgb2ZfZnVuY3Rpb24gPSBqc29uX29mX2Z1bmN0aW9uX2V4blxuXG4gICgqIEVycm9yX2luZm8udCByZXR1cm5pbmcgZnVuY3Rpb25zICopXG5cbiAgbGV0IHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWYgPVxuICAgIG1hdGNoIHJlYWRfanNvbicgfmxleGJ1ZiB3aXRoXG4gICAgfCBPayBfIGFzIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIGVyciAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIGVyciBpblxuICAgICAgRXJyb3IgZXJyX2luZm9cblxuICBsZXQganNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbF9lcnJvcl9pbmZvIGluYyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSA9XG4gICAgdHJ5IGJlZ2luXG4gICAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgICAgbGV0IHJlcyA9IGpzb25fb2ZfY2hhbm5lbF9lcnJvcl9pbmZvIGluYyBpblxuICAgICAgICBjbG9zZV9pbiBpbmM7XG4gICAgICAgIHJlc1xuICAgIGVuZFxuICAgIHdpdGggU3lzX2Vycm9yIGVyciAtPiBFcnJvciB7IEVycm9yX2luZm8ubGluZSA9IDA7IHN0YXJ0X2NoYXIgPSAwOyBlbmRfY2hhciA9IDA7IG1zZyA9IGVyciB9XG5cbiAgbGV0IGpzb25fb2ZfZnVuY3Rpb25fZXJyb3JfaW5mbyBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mbyBsZXhidWYgPVxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICAoKiBJbnRlcm5hbCBjb21wYXRpYmlsaXR5IGZ1bmN0aW9uIHN1cHBvcnRpbmcgdGhlIHN0cmVhbSBmbGFnICopXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0ID8oc3RyZWFtID0gZmFsc2UpIGxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCByZXMgPSBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgIHwgT2sgTm9uZSAtPiBpZiBzdHJlYW0gdGhlbiBPayBOb25lIGVsc2UgRXJyb3IgXCJlbXB0eSBpbnB1dFwiXG4gICAgfCBPayAoU29tZSByZXMpIC0+IGJlZ2luXG4gICAgICBtYXRjaCBzdHJlYW0gd2l0aFxuICAgICAgfCB0cnVlIC0+IE9rIChTb21lIHJlcylcbiAgICAgIHwgZmFsc2UgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBFT0YgLT4gT2sgKFNvbWUgcmVzKVxuICAgICAgICB8IGV4Y2VwdGlvbiBMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVyciAtPiBFcnJvciBlcnJcbiAgICAgICAgfCB0b2sgLT4gRXJyb3IgKFwianVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTogXCIgXiAoVG9rZW5fdXRpbHMudG9rZW5fdG9fc3RyaW5nIHRvaykpXG4gICAgICAgIGVuZFxuICAgICAgZW5kXG4gICAgfCBFcnJvciBzIC0+IEVycm9yIHNcbiAgICBpblxuICAgIG1hdGNoIHJlcyB3aXRoXG4gICAgfCBPayByZXMgLT4gT2sgcmVzXG4gICAgfCBFcnJvciBzIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgcyBpblxuICAgICAgRXJyb3IgZXJyX2luZm9cblxuXG4gICgqIFN0cmVhbS50IHJldHVybmluZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX3N0cmVhbSB+ZmluIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBsZXQgZiBfaSA9XG4gICAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgICAgfCBPayBOb25lIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgfCBPayAoU29tZSByZXMpIC0+IFNvbWUgcmVzXG4gICAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICBsZXQgKCkgPSBmaW4gKCkgaW5cbiAgICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIGVyciBpblxuICAgICAgICBsZXQgbXNnID0gRXJyb3JfaW5mby50b19zdHJpbmcgZXJyX2luZm8gaW5cbiAgICAgICAgcmFpc2UgKEZhaWx1cmUgbXNnKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmcgcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fY2hhbm5lbCA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW4gfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9mdW5jdGlvbiBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGUgZmlsZW5hbWUgPVxuICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgc3RyZWFtX2Zyb21fY2hhbm5lbCB+ZmluOihmdW4gKCkgLT4gY2xvc2VfaW4gaW5jKSBpbmNcblxuICBsZXQgc3RyZWFtX2Zyb21fbGV4YnVmIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICAoKiBTdHJlYW0udCBKc29uX2Vycm9yX2luZm8gcmFpc2luZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW4gfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgICB8IE9rIE5vbmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IE9rIChTb21lIHJlcykgLT4gU29tZSByZXNcbiAgICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIGxldCAoKSA9IGZpbiAoKSBpblxuICAgICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICAgIHJhaXNlIChFcnJvcl9pbmZvLkpzb25fZXJyb3JfaW5mbyBlcnJfaW5mbylcbiAgICBpblxuICAgIFN0cmVhbS5mcm9tIGZcblxuICBsZXQgc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gPyhmaW4gPSBmdW4gKCkgLT4gKCkpIGluYyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW4gfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9mdW5jdGlvbl9lcnJvcl9pbmZvIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8gZmlsZW5hbWUgPVxuICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpbmMpIGluY1xuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyBsZXhidWYgPVxuICAgIHJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuZW5kXG4iLCJtb2R1bGUgdHlwZSBJbnRmID0gc2lnXG4gIHZhbCBqc29uX3RvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fZmlsZV9leG4gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBqc29uX3RvX2NoYW5uZWwgOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbF9leG4gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBqc29uX3RvX2ZpbGVfaHVtIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2ZpbGVfaHVtX2V4biA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbF9odW0gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbF9odW1fZXhuIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2ZpbGVfaHVtIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fY2hhbm5lbCA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2NoYW5uZWxfaHVtIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IEludGYgPSBzdHJ1Y3RcblxuICBsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbiAgbGV0IGFkZF9oZXhfYnl0ZSBvYyBpID1cbiAgICBvdXRwdXRfY2hhciBvYyAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICAgIG91dHB1dF9jaGFyIG9jIChuaWJibGVfdG9faGV4IChpIGxhbmQgMHgwZikpXG5cbiAgbGV0IGVzY2FwZSBvYyBzID1cbiAgICBsZXQgYWRkX2NoYXIgPSBvdXRwdXRfY2hhciBvYyBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gb3V0cHV0X3N0cmluZyBvYyBpblxuICAgIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICAgIHwgJ1xcXFwnICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFxcXCJcbiAgICAgIHwgJ1xcYicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXGJcIlxuICAgICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgICB8ICdcXG4nICAgLT4gYWRkX3N0cmluZyBcIlxcXFxuXCJcbiAgICAgIHwgJ1xccicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHJcIlxuICAgICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgICB8ICdcXHgwMCcuLidcXHgxRidcbiAgICAgIHwgJ1xceDdGJyBhcyBjIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgb2MgKGludF9vZl9jaGFyIGMpXG4gICAgICB8IF8gICAgICAtPiBhZGRfY2hhciBzLltpXVxuICAgIGRvbmVcbiAgIFxuICBsZXQganNvbl90b19jaGFubmVsX2ZtdCBvYyBqc29uIH5lb2wgfmluY3IgfnBzZXAgPSBcbiAgICBsZXQgYWRkX2NoYXIgPSBvdXRwdXRfY2hhciBvYyBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gb3V0cHV0X3N0cmluZyBvYyBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgb2MgczsgYWRkX2NoYXIgJ1wiJyBpblxuICAgIGxldCBhZGRfaW50IGkgPSBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfaW50IGkpIGluXG4gICAgbGV0IGFkZF9mbG9hdCBmID0gYWRkX3N0cmluZyAoQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYpIGluXG4gICAgbGV0IHBzZXAgPSBcIjpcIiBeIHBzZXAgaW5cbiAgICBsZXQgcmVjIGZtdCBvZmYgdmFsdWUgPVxuICAgICAgbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgICBhZGRfY2hhciAneyc7IGFkZF9zdHJpbmcgZW9sOyBqc29uX2Fzc29jIChvZmYgKyBpbmNyKSBvO1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICdbJzsgYWRkX3N0cmluZyBlb2w7IGpzb25fbGlzdCAob2ZmICsgaW5jcikgbDtcbiAgICAgICAgYWRkX3N0cmluZyBlb2w7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICcoJzsgYWRkX3N0cmluZyBlb2w7IGpzb25fbGlzdCAob2ZmICsgaW5jcikgdDtcbiAgICAgICAgYWRkX3N0cmluZyBlb2w7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnKSdcbiAgICAgIHwgYFZhcmlhbnQgdiAtPlxuICAgICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgICBhZGRfY2hhciAnPCc7IGFkZF9zdHJpbmcgZW9sOyAgdmFyaWFudCAob2ZmICsgaW5jcikgdjtcbiAgICAgICAgYWRkX3N0cmluZyBlb2w7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBvZmYgbyA9XG4gICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcIiBeIGVvbCBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IHBhaXIgb2ZmIHYgKSBvXG4gICAgYW5kIHBhaXIgb2ZmIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX3N0cmluZyBwc2VwOyBmbXQgb2ZmIHZcbiAgICBhbmQganNvbl9saXN0IG9mZiBsID1cbiAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFwiIF4gZW9sIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgZm10IG9mZiB2ICkgbFxuICAgIGFuZCB2YXJpYW50IG9mZiAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfc3RyaW5nIHBzZXA7IGZtdCAob2ZmICsgaW5jcikgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQgMCBqc29uO1xuICAgIGFkZF9zdHJpbmcgZW9sXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbCcgPSBqc29uX3RvX2NoYW5uZWxfZm10IH5lb2w6XCJcIiB+aW5jcjowIH5wc2VwOlwiXCJcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW0nID0ganNvbl90b19jaGFubmVsX2ZtdCB+ZW9sOlwiXFxuXCIgfmluY3I6MiB+cHNlcDpcIiBcIlxuXG4gIGxldCBqc29uX3RvX2NoYW5uZWwgb2MganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2NoYW5uZWwnIG9jIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfaHVtIG9jIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19jaGFubmVsX2h1bScgb2MganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9leG4gPSBqc29uX3RvX2NoYW5uZWwnXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfaHVtX2V4biA9IGpzb25fdG9fY2hhbm5lbF9odW0nXG5cbiAgbGV0IGpzb25fdG9fZmlsZSBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICBsZXQgcmVzID0ganNvbl90b19jaGFubmVsIG9jIGpzb24gaW5cbiAgICBjbG9zZV9vdXQgb2M7XG4gICAgcmVzXG5cbiAgbGV0IGpzb25fdG9fZmlsZV9odW0gZmlsZSBqc29uID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gICAgbGV0IHJlcyA9IGpzb25fdG9fY2hhbm5lbF9odW0gb2MganNvbiBpblxuICAgIGNsb3NlX291dCBvYztcbiAgICByZXNcblxuICBsZXQganNvbl90b19maWxlX2V4biBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKGpzb25fdG9fY2hhbm5lbCcgb2MganNvbjsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cblxuICBsZXQganNvbl90b19maWxlX2h1bV9leG4gZmlsZSBqc29uID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gICAgdHJ5IChqc29uX3RvX2NoYW5uZWxfaHVtJyBvYyBqc29uOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCB0b19maWxlID0ganNvbl90b19maWxlX2V4blxuICBsZXQgdG9fZmlsZV9odW0gPSBqc29uX3RvX2ZpbGVfaHVtX2V4blxuICBsZXQgdG9fY2hhbm5lbCA9IGpzb25fdG9fY2hhbm5lbF9leG5cbiAgbGV0IHRvX2NoYW5uZWxfaHVtID0ganNvbl90b19jaGFubmVsX2h1bV9leG5cblxuICBsZXQgc3RyZWFtX3RvX2NoYW5uZWwgb2Mgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4ganNvbl90b19jaGFubmVsX2V4biBvYyBqc29uOyBvdXRwdXRfY2hhciBvYyAnXFxuJykgc3RyZWFtXG5cbiAgbGV0IHN0cmVhbV90b19maWxlIGZpbGUgc3RyZWFtID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gICAgdHJ5IChzdHJlYW1fdG9fY2hhbm5lbCBvYyBzdHJlYW07IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5lbmRcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIGpzb25fdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAoc3RyaW5nLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19zdHJpbmdfZXhuIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHRvX3N0cmluZyA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBqc29uX3RvX3N0cmluZ19odW0gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IChzdHJpbmcsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX3N0cmluZ19odW1fZXhuIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHRvX3N0cmluZ19odW0gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwganNvbl90b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19idWZmZXJfZXhuIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9odW0gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19idWZmZXJfaHVtX2V4biA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fYnVmZmVyIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19idWZmZXJfaHVtIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiBzdHJpbmdcbiAgdmFsIHN0cmVhbV90b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHVuaXRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgOiBJbnRmID0gc3RydWN0XG5cbiAgbGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG4gIGxldCBhZGRfaGV4X2J5dGUgYnVmIGkgPVxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIChuaWJibGVfdG9faGV4IChpIGxhbmQgMHgwZikpXG5cbiAgbGV0IGVzY2FwZSBidWYgcyA9XG4gICAgbGV0IGFkZF9jaGFyID0gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGluXG4gICAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSBidWYgKGludF9vZl9jaGFyIGMpXG4gICAgICB8IF8gICAgICAtPiBhZGRfY2hhciBzLltpXVxuICAgIGRvbmVcbiAgIFxuICBsZXQganNvbl90b19idWZmZXInIGJ1ZiBqc29uID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgYWRkX3F1b3RlX3N0cmluZyBzID0gYWRkX2NoYXIgJ1wiJzsgZXNjYXBlIGJ1ZiBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcmVjIGZtdCB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+IGFkZF9jaGFyICd7JzsganNvbl9hc3NvYyBvOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPiBhZGRfY2hhciAnWyc7IGpzb25fbGlzdCBsOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+IGFkZF9jaGFyICcoJzsganNvbl9saXN0IHQ7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+IGFkZF9jaGFyICc8JzsgIHZhcmlhbnQgdjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2MgbyA9XG4gICAgICBsZXQgc2VwID0gcmVmIFwiXCIgaW4gTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBcIixcIjsgcGFpciB2ICkgb1xuICAgIGFuZCBwYWlyIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX2NoYXIgJzonOyBmbXQgdlxuICAgIGFuZCBqc29uX2xpc3QgbCA9XG4gICAgICBsZXQgc2VwID0gcmVmIFwiXCIgaW4gTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBcIixcIjsgZm10IHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgKGssIGopID1cbiAgICAgIGFkZF9xdW90ZV9zdHJpbmcgaztcbiAgICAgIG1hdGNoIGogd2l0aFxuICAgICAgfCBTb21lIGogLT4gYWRkX2NoYXIgJzonOyBmbXQgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQganNvblxuXG4gIGxldCBqc29uX3RvX2J1ZmZlcl9odW0nIGJ1ZiBqc29uID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgYWRkX3F1b3RlX3N0cmluZyBzID0gYWRkX2NoYXIgJ1wiJzsgZXNjYXBlIGJ1ZiBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcmVjIGZtdCBsZHIgdmFsdWUgPVxuICAgICAgbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwie1xcblwiOyBqc29uX2Fzc29jIChsZHIgXiBcIiAgXCIpIG87XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIltcXG5cIjsganNvbl9saXN0IChsZHIgXiBcIiAgXCIpIGw7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ10nXG4gICAgICB8IGBOdWxsIC0+IGFkZF9zdHJpbmcgXCJudWxsXCJcbiAgICAgIHwgYEJvb2wgYiAtPiBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfYm9vbCBiKVxuICAgICAgfCBgSW50IGkgLT4gYWRkX2ludCBpXG4gICAgICB8IGBJbnRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYEZsb2F0IGYgLT4gYWRkX2Zsb2F0IGZcbiAgICAgIHwgYEZsb2F0bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmcgcyAtPiBhZGRfcXVvdGVfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgVHVwbGUgdCAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiKFxcblwiOyBqc29uX2xpc3QgKGxkciBeIFwiICBcIikgdDtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnKSdcbiAgICAgIHwgYFZhcmlhbnQgdiAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiPFwiOyAgdmFyaWFudCAobGRyIF4gXCIgIFwiKSB2O1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIGxkciBvID1cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXFxuXCIgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBwYWlyIGxkciB2ICkgb1xuICAgIGFuZCBwYWlyIGxkciAoaywgdikgPSBhZGRfcXVvdGVfc3RyaW5nIGs7IGFkZF9zdHJpbmcgXCI6IFwiOyBmbXQgbGRyIHZcbiAgICBhbmQganNvbl9saXN0IGxkciBsID1cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXFxuXCIgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBmbXQgbGRyICB2ICkgbFxuICAgIGFuZCB2YXJpYW50IGxkciAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfc3RyaW5nIFwiOiBcIjsgZm10IChsZHIgXiBcIiAgXCIpIGpcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgIGluXG4gICAgZm10IFwiXCIganNvbjtcbiAgICBhZGRfY2hhciAnXFxuJ1xuXG4gIGxldCBqc29uX3RvX3N0cmluZycganNvbiA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAganNvbl90b19idWZmZXInIGJ1ZiBqc29uO1xuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBsZXQganNvbl90b19zdHJpbmcganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX3N0cmluZycganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyIGJ1ZiBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fYnVmZmVyJyBidWYganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2V4biA9IGpzb25fdG9fc3RyaW5nJ1xuICBsZXQgdG9fc3RyaW5nID0ganNvbl90b19zdHJpbmcnXG4gIGxldCBqc29uX3RvX2J1ZmZlcl9leG4gPSBqc29uX3RvX2J1ZmZlcidcbiAgbGV0IHRvX2J1ZmZlciA9IGpzb25fdG9fYnVmZmVyJ1xuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW0nIGpzb24gPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGpzb25fdG9fYnVmZmVyX2h1bScgYnVmIGpzb247XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW0ganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX3N0cmluZ19odW0nIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX2J1ZmZlcl9odW0gYnVmIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19idWZmZXInIGJ1ZiBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19zdHJpbmdfaHVtX2V4biA9IGpzb25fdG9fc3RyaW5nX2h1bSdcbiAgbGV0IHRvX3N0cmluZ19odW0gPSBqc29uX3RvX3N0cmluZ19odW0nXG4gIGxldCBqc29uX3RvX2J1ZmZlcl9odW1fZXhuID0ganNvbl90b19idWZmZXJfaHVtJ1xuICBsZXQgdG9fYnVmZmVyX2h1bSA9IGpzb25fdG9fYnVmZmVyX2h1bSdcblxuICBsZXQgc3RyZWFtX3RvX3N0cmluZyBzdHJlYW0gPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCAoKSA9IFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19idWZmZXIgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbSBpblxuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBsZXQgc3RyZWFtX3RvX2J1ZmZlciBidWYgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fYnVmZmVyIGJ1ZiBqc29uOyBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nKSBzdHJlYW1cblxuZW5kXG4iLCJleGNlcHRpb24gSnNvbl9lcnJvciBvZiBzdHJpbmdcblxubGV0IGpzb25fZXJyb3IgbXNnID0gcmFpc2UgKEpzb25fZXJyb3IgbXNnKVxuXG50eXBlIGxleGVyX3N0YXRlID0ge1xuICBidWYgOiBCdWZmZXIudDtcbiAgbXV0YWJsZSBsbnVtIDogaW50O1xuICBtdXRhYmxlIGJvbCA6IGludDtcbiAgbXV0YWJsZSBmbmFtZSA6IHN0cmluZyBvcHRpb247XG59XG5cbmxldCBpbml0X2xleGVyID9idWY6XyA/Zm5hbWUgPyhsbnVtID0gMSkgKCkgPVxuICB7XG4gICAgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiAgKCogdW51c2VkICopXG4gIDsgbG51bSA9IGxudW1cbiAgOyBib2wgPSAwXG4gIDsgZm5hbWUgPSBmbmFtZVxuICB9XG5cbm1vZHVsZSBDb21tb25fcmVhZGVyIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBtb2R1bGUgSW50ZXJuYWxfcmVhZGVyID0gc3RydWN0XG4gICAgbW9kdWxlIExleHhlciA9IENvbXBsaWFudF9sZXh4ZXIuTWFrZShDb21wbGlhbmNlKVxuICAgIG1vZHVsZSBQYXJzZXIgPSBQYXJzZXIuTWFrZShDb21wbGlhbmNlKVxuICAgIGluY2x1ZGUgUmVhZGVyX3N0cmluZ19maWxlLk1ha2UgKExleHhlcikgKFBhcnNlcilcbiAgZW5kXG5cbiAgdHlwZSBqc29uID0gSW50ZXJuYWxfcmVhZGVyLmpzb25cbiAgdHlwZSB0ID0ganNvblxuICB0eXBlIGpzb25fbGluZSA9IFsgYEpzb24gb2YgdCB8IGBFeG4gb2YgZXhuIF1cblxuICAoKiBIZWxwZXIgZnVuY3Rpb25zICopXG4gIGxldCBlcnJvcl90b19zdHJpbmcgKGVycm9yX2luZm86RXJyb3JfaW5mby50KSBmbmFtZSBsbnVtID1cbiAgICBsZXQgbG51bSA9IG1hdGNoIGxudW0gd2l0aCBTb21lIGxudW0gLT4gbG51bSB8IE5vbmUgLT4gMSBpblxuICAgIGxldCBpbmZvID0geyBlcnJvcl9pbmZvIHdpdGggbGluZSA9IGxudW0gKyBlcnJvcl9pbmZvLmxpbmUgLSAxIH0gaW5cbiAgICBsZXQgZm5hbWUgPSBtYXRjaCBmbmFtZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gXCJMaW5lXCJcbiAgICAgIHwgU29tZSBuYW1lIC0+IFwiRmlsZSBcIiBeIG5hbWUgXiBcIiwgbGluZVwiXG4gICAgaW5cbiAgICBsZXQgbG9jID0gUHJpbnRmLnNwcmludGYgXCIlcyAlZCBjaGFycyAlZC0lZDogXCIgZm5hbWUgaW5mby5saW5lIGluZm8uc3RhcnRfY2hhciBpbmZvLmVuZF9jaGFyIGluXG4gICAgbG9jIF4gaW5mby5tc2dcblxuICBsZXQgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgZiBhIGZuYW1lIGxudW0gPVxuICAgIG1hdGNoIGYgYSB3aXRoXG4gICAgfCBPayBqc29uIC0+IGpzb25cbiAgICB8IEVycm9yIGVycm9yX2luZm8gLT4ganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycm9yX2luZm8gZm5hbWUgbG51bSlcblxuICAoKiBSZWFkZXJzICopXG4gIGxldCBmcm9tX3N0cmluZyA/YnVmOl8gP2ZuYW1lID9sbnVtIHMgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIHMgZm5hbWUgbG51bVxuXG4gIGxldCBmcm9tX2NoYW5uZWwgP2J1ZjpfID9mbmFtZSA/bG51bSBpbl9jaGFubmVsID1cbiAgICBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBJbnRlcm5hbF9yZWFkZXIuanNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5fY2hhbm5lbCBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fZmlsZSA/YnVmOl8gP2ZuYW1lID9sbnVtIGZpbGVuYW1lID1cbiAgICBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBJbnRlcm5hbF9yZWFkZXIuanNvbl9vZl9maWxlX2Vycm9yX2luZm8gZmlsZW5hbWUgZm5hbWUgbG51bVxuXG4gIGxldCBmcm9tX2xleGJ1ZiBsZXhzdGF0ZSA/c3RyZWFtIGxleGJ1ZiA9XG4gICAgbGV0IGZuYW1lID0gbGV4c3RhdGUuZm5hbWUgaW5cbiAgICBsZXQgbG51bSA9IFNvbWUgbGV4c3RhdGUubG51bSBpblxuICAgIG1hdGNoIEludGVybmFsX3JlYWRlci5qc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA/c3RyZWFtIGxleGJ1ZiB3aXRoXG4gICAgfCBPayAoU29tZSBqc29uKSAtPiBqc29uXG4gICAgfCBPayBOb25lIC0+IGpzb25fZXJyb3IgXCJCbGFuayBpbnB1dCBkYXRhXCJcbiAgICB8IEVycm9yIGVycm9yX2luZm8gLT4ganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycm9yX2luZm8gZm5hbWUgbG51bSlcblxuICBsZXQgcmVhZF90IGxleHN0YXRlIGxleGJ1ZiA9IGZyb21fbGV4YnVmIGxleHN0YXRlIGxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgc3RyZWFtX2YgYSBmbmFtZSBsbnVtID1cbiAgICBsZXQgc3RyZWFtID0gc3RyZWFtX2YgYSBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFN0cmVhbS5uZXh0IHN0cmVhbSB3aXRoXG4gICAgICB8IHYgLT4gU29tZSB2XG4gICAgICB8IGV4Y2VwdGlvbiBTdHJlYW0uRmFpbHVyZSAtPiBOb25lXG4gICAgICB8IGV4Y2VwdGlvbiBFcnJvcl9pbmZvLkpzb25fZXJyb3JfaW5mbyBlcnJfaW5mbyAtPlxuICAgICAgICBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyX2luZm8gZm5hbWUgbG51bSlcbiAgICBpblxuICAgIFN0cmVhbS5mcm9tIGZcblxuICBsZXQgc3RyZWFtX2Zyb21fc3RyaW5nID9idWY6XyA/Zm5hbWUgP2xudW0gcyA9XG4gICAgc3RyZWFtX2FwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5zdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyBzIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fY2hhbm5lbCA/YnVmOl8gPyhmaW4gPSBmdW4gKCkgLT4gKCkpID9mbmFtZSA/bG51bSBpbl9jaGFubmVsID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgKEludGVybmFsX3JlYWRlci5zdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gfmZpbikgaW5fY2hhbm5lbCBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGUgP2J1ZjpfID9mbmFtZSA/bG51bSBmaWxlbmFtZSA9XG4gICAgc3RyZWFtX2FwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5zdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8gZmlsZW5hbWUgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWYgbGV4c3RhdGUgPyhmaW4gPSBmdW4gKCkgLT4gKCkpIGxleGJ1ZiA9XG4gICAgbGV0IHN0cmVhbSA9IEludGVybmFsX3JlYWRlci5zdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyBsZXhidWYgaW5cbiAgICBsZXQgZiBfaSA9XG4gICAgICBtYXRjaCBTdHJlYW0ubmV4dCBzdHJlYW0gd2l0aFxuICAgICAgfCB2IC0+IFNvbWUgdlxuICAgICAgfCBleGNlcHRpb24gU3RyZWFtLkZhaWx1cmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IGV4Y2VwdGlvbiBFcnJvcl9pbmZvLkpzb25fZXJyb3JfaW5mbyBlcnJfaW5mbyAtPlxuICAgICAgICBmaW4gKCk7IGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJfaW5mbyBsZXhzdGF0ZS5mbmFtZSAoU29tZSBsZXhzdGF0ZS5sbnVtKSlcbiAgICBpblxuICAgIFN0cmVhbS5mcm9tIGZcblxuXG4gIGxldCBsaW5lc3RyZWFtX2Zyb21fY2hhbm5lbCA/YnVmOl8gPyhmaW4gPSBmdW4gKCkgLT4gKCkpID9mbmFtZSA/KGxudW0gPSAxKSBpYyA9XG4gICAgbGV0IGYgaSA9XG4gICAgICB0cnlcbiAgICAgICAgbGV0IGxudW0gPSBsbnVtICsgaSBpblxuICAgICAgICBsZXQgbGluZSA9IGlucHV0X2xpbmUgaWMgaW4gU29tZSAoYEpzb24gKGZyb21fc3RyaW5nID9mbmFtZSB+bG51bSBsaW5lKSlcbiAgICAgIHdpdGhcbiAgICAgICAgfCBFbmRfb2ZfZmlsZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgICAgfCBleG5fIC0+IGZpbiAoKTsgU29tZSAoYEV4biBleG5fKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBsaW5lc3RyZWFtX2Zyb21fZmlsZSA/YnVmOl8gP2ZuYW1lOl8gP2xudW06XyBmaWxlbmFtZSA9XG4gICAgbGV0IGljID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgIGxpbmVzdHJlYW1fZnJvbV9jaGFubmVsIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpYykgaWNcbmVuZFxuXG5tb2R1bGUgQ29tbW9uX3dyaXRlciAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbW9kdWxlIEludGVybmFsX3dyaXRlciA9IHN0cnVjdFxuICAgIGluY2x1ZGUgV3JpdGVyX3N0cmluZy5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBXcml0ZXJfZmlsZS5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBQcmV0dHkuTWFrZShDb21wbGlhbmNlKVxuICBlbmRcblxuICBsZXQgdG9fc3RhbmRhcmQganNvbiA9XG4gICAgbGV0IHJlYyBtYXAgbm9kZSA9XG4gICAgICBtYXRjaCBub2RlIHdpdGhcbiAgICAgIHwgYE51bGwgLT4gYE51bGxcbiAgICAgIHwgYEJvb2wgXyBhcyB2IC0+IHZcbiAgICAgIHwgYEludCBfIGFzIHYgLT4gdiAgKCogaW50IGlzIG9rIG9uIG91dHB1dCAqKVxuICAgICAgfCBgSW50bGl0IHYgLT4gYFN0cmluZyB2XG4gICAgICB8IGBGbG9hdCBfIGFzIHYgLT4gdlxuICAgICAgfCBgRmxvYXRsaXQgdiAtPiBgRmxvYXQgKGZsb2F0X29mX3N0cmluZyB2KVxuICAgICAgfCBgU3RyaW5nIF8gYXMgdiAtPiB2XG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBiZWdpblxuICAgICAgICBtYXRjaCBTdHJpbmcubGVuZ3RoIHMgd2l0aFxuICAgICAgICB8IDAgfCAxIC0+IGBTdHJpbmcgcyAgICAgICAgICgqIG1hbGZvcm1lZCwgc2hvdWxkIGhhdmUgZG91YmxlLXF1b3RlcyBhdCBzdGFydCBhbmQgZW5kICopXG4gICAgICAgIHwgXyAtPiBgU3RyaW5nIChTdHJpbmcuc3ViIHMgMSAoU3RyaW5nLmxlbmd0aCBzIC0gMikpXG4gICAgICAgIGVuZFxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgbClcbiAgICAgIHwgYEFzc29jIGEgLT4gYEFzc29jIChMaXN0Lm1hcCAoZnVuIChpZCwgdikgLT4gKGlkLCBtYXAgdikpIGEpXG4gICAgICB8IGBUdXBsZSB0cGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCB0cGwpXG4gICAgICB8IGBWYXJpYW50IChuYW1lLCBqb3B0KSAtPiBiZWdpblxuICAgICAgICAgbWF0Y2ggam9wdCB3aXRoXG4gICAgICAgICB8IE5vbmUgLT4gYFN0cmluZyBuYW1lXG4gICAgICAgICB8IFNvbWUgdiAtPiBgTGlzdCBbIGBTdHJpbmcgbmFtZTsgKG1hcCB2KSBdXG4gICAgICAgIGVuZFxuICAgIGluXG4gICAgbWFwIGpzb25cblxuICAoKiBXcml0ZXJzICopXG5cbiAgbGV0IHRvX3N0cmluZyA/YnVmOl8gP2xlbjpfID8oc3RkID0gZmFsc2UpIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19zdHJpbmcgKHRvX3N0YW5kYXJkIGpzb24pIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX3N0cmluZyBqc29uXG5cbiAgbGV0IHRvX2NoYW5uZWwgP2J1ZjpfID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBvdXRfY2hhbm5lbCBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fY2hhbm5lbCBvdXRfY2hhbm5lbCAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci50b19jaGFubmVsIG91dF9jaGFubmVsIGpzb25cblxuICBsZXQgdG9fZmlsZSA/bGVuOl8gPyhzdGQgPSBmYWxzZSkgZmlsZW5hbWUganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX2ZpbGUgZmlsZW5hbWUgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fZmlsZSBmaWxlbmFtZSBqc29uXG5cbiAgbGV0IHRvX291dGJ1ZiA/KHN0ZCA9IGZhbHNlKSBidWYganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX2J1ZmZlciBidWYgKHRvX3N0YW5kYXJkIGpzb24pIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2J1ZmZlciBidWYganNvblxuXG4gIGxldCB0b19vdXRwdXQgP2J1ZjpfID9sZW46XyA/c3RkIG91dCBqc29uID1cbiAgICBsZXQgc3RyID0gdG9fc3RyaW5nID9zdGQganNvbiBpblxuICAgIG91dCNvdXRwdXQgc3RyIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4gIGxldCBzdHJlYW1fdG9fc3RyaW5nID9idWY6XyA/bGVuOl8gP3N0ZCBzdHJlYW0gPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCAoKSA9IFN0cmVhbS5pdGVyXG4gICAgICAoZnVuIGpzb24gLT4gdG9fb3V0YnVmID9zdGQgYnVmIGpzb247ICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nKSBzdHJlYW1cbiAgICBpblxuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBsZXQgc3RyZWFtX3RvX2NoYW5uZWwgP2J1ZjpfID9sZW46XyA/c3RkIG9jIHN0cmVhbSA9XG4gICAgU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2NoYW5uZWwgP3N0ZCBvYyBqc29uOyBvdXRwdXRfY2hhciBvYyAnXFxuJykgc3RyZWFtXG5cbiAgbGV0IHN0cmVhbV90b19maWxlID9sZW46XyA/c3RkIGZpbGVuYW1lIHN0cmVhbSA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZW5hbWUgaW5cbiAgICB0cnkgKHN0cmVhbV90b19jaGFubmVsID9zdGQgb2Mgc3RyZWFtOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCBzdHJlYW1fdG9fb3V0YnVmID9zdGQgYnVmIHN0cmVhbSA9XG4gICAgU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX291dGJ1ZiA/c3RkIGJ1ZiBqc29uOyBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nKSBzdHJlYW1cblxuICBsZXQgd3JpdGVfdCBidWYganNvbiA9IHRvX291dGJ1ZiBidWYganNvblxuXG4gICgqIFByZXR0eSBwcmludGVycyAqKVxuICBsZXQgcHJldHR5X3ByaW50ID8oc3RkID0gZmFsc2UpIG91dCBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50IG91dCAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnQgb3V0IGpzb25cblxuICBsZXQgcHJldHR5X3RvX3N0cmluZyA/KHN0ZCA9IGZhbHNlKSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX3N0cmluZyAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fc3RyaW5nIGpzb25cblxuICBsZXQgcHJldHR5X3RvX2NoYW5uZWwgPyhzdGQgPSBmYWxzZSkgb2MganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19jaGFubmVsIG9jICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19jaGFubmVsIG9jIGpzb25cblxuICAoKiBVdGlsaXRpZXMgKilcbiAgbGV0IHNob3cganNvbiA9IFV0aWxpdGllcy5qc29uX3RvX3N0cmluZ19yZXByIGpzb25cbiAgbGV0IHBwIG91dCBqc29uID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHNob3cganNvbilcbmVuZFxuXG5tb2R1bGUgQmFzaWMgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbXBsaWFuY2UgPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkJhc2ljLmpzb25cbiAgICB0eXBlIGpzb25fc3RyZWFtID0gSnNvbl9zdHJlYW0uQmFzaWMuanNvblxuXG4gICAgb3BlbiBUb2tlbnNcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBMZXh4ZXJfdXRpbHMudW5lc2NhcGVfc3RyaW5nIHNcbiAgICBsZXQgbGV4X251bWJlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9pbnRlZ2VyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2xhcmdlaW50IF8gPSBDT01QTElBTkNFX0VSUk9SIFwiSW50ZWdlciBvdXQgb2YgYm91bmRzXCJcblxuICAgIGxldCBsZXhfdmFyaWFudCBfID0gZmFsc2VcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSBmYWxzZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgRmxvYXQgKGZsb2F0X29mX3N0cmluZyBzKVxuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50IGlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZyBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgX2wgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgbGV0IHZhcmlhbnQgX2wgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdCBmXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0ICgxLjAgLy4gMC4wKVxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdCAoLTEuMCAvLiAwLjApXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0ICgwLjAgLy4gMC4wKVxuICAgIHwgYEZsb2F0bGl0IF8gLT4gIHJhaXNlIChGYWlsdXJlIFwiZmxvYXRsaXQgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHR1cGxlX2VuZCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB2YXJpYW50X3N0YXJ0ICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ2YXJpYW50cyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdmFyaWFudF9lbmQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCBuYW1lIHMgPSBgTmFtZSBzXG4gICAgZW5kXG4gIGVuZFxuXG4gIGluY2x1ZGUgQ29tbW9uX3JlYWRlcihDb21wbGlhbmNlKVxuICBpbmNsdWRlIENvbW1vbl93cml0ZXIoQ29tcGxpYW5jZSlcblxuICBsZXQgcHJldHRpZnkgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHByZXR0eV90b19zdHJpbmcgP3N0ZFxuICBsZXQgY29tcGFjdCA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gdG9fc3RyaW5nID9zdGRcblxuICBsZXQgZXF1YWwgPSBVdGlsaXRpZXMuZXF1YWxcbiAgbGV0IHNvcnQgPSBQcm9jZXNzLkJhc2ljLnNvcnRcblxuICBtb2R1bGUgVXRpbCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgUHJvY2Vzcy5CYXNpY1xuICBlbmRcbmVuZFxuXG5tb2R1bGUgU2FmZSA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9XG4gICAgICBbXG4gICAgICB8IGBOdWxsXG4gICAgICB8IGBCb29sIG9mIGJvb2xcbiAgICAgIHwgYEludCBvZiBpbnRcbiAgICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICAgIHwgYEZsb2F0IG9mIGZsb2F0XG4gICAgICB8IGBTdHJpbmcgb2Ygc3RyaW5nXG4gICAgICB8IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdFxuICAgICAgfCBgTGlzdCBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgICAgfCBgVmFyaWFudCBvZiAoc3RyaW5nICoganNvbiBvcHRpb24pXG4gICAgICBdXG5cbiAgICB0eXBlIGpzb25fc3RyZWFtID0gSnNvbl9zdHJlYW0uRXh0ZW5kZWQuanNvbiAgKCogeW9qc29uIGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0IHN0cmVhbWluZyAqKVxuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgc1xuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgdG9rZW4gPSB0b2tlblxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSB0cnVlXG4gICAgbGV0IGxleF90dXBsZSBfID0gdHJ1ZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgSW50bGl0IHNcbiAgICBsZXQgaW50ZWdlciBpID0gYEludCBpXG4gICAgbGV0IG51bGwgPSBgTnVsbFxuICAgIGxldCBzdHJpbmcgcyA9IGBTdHJpbmcgc1xuICAgIGxldCBib29sIGIgPSBgQm9vbCBiXG4gICAgbGV0IGFzc29jIGEgPSBgQXNzb2MgYVxuICAgIGxldCBsaXN0IGwgPSBgTGlzdCBsXG4gICAgbGV0IHR1cGxlIGwgPSBgVHVwbGUgbFxuICAgIGxldCB2YXJpYW50IGsgdiA9IGBWYXJpYW50IChrLCB2KVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0IGZcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXQgKDEuMCAvLiAwLjApXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0ICgtMS4wIC8uIDAuMClcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXQgKDAuMCAvLiAwLjApXG4gICAgfCBgRmxvYXRsaXQgXyAtPiAgcmFpc2UgKEZhaWx1cmUgXCJmbG9hdGxpdCBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBzYWZlIG1vZGVcIilcblxuICAgIG1vZHVsZSBTdHJlYW0gPSBzdHJ1Y3RcbiAgICAgIGxldCBudW1iZXIgPSBudW1iZXJcbiAgICAgIGxldCBsYXJnZWludCA9IGxhcmdlaW50XG4gICAgICBsZXQgaW50ZWdlciA9IGludGVnZXJcbiAgICAgIGxldCBudWxsID0gbnVsbFxuICAgICAgbGV0IHN0cmluZyA9IHN0cmluZ1xuICAgICAgbGV0IGJvb2wgPSBib29sXG5cbiAgICAgIGxldCBhcnJheV9zdGFydCAoKSA9IGBBc1xuICAgICAgbGV0IGFycmF5X2VuZCAoKSA9IGBBZVxuICAgICAgbGV0IG9iamVjdF9zdGFydCAoKSA9IGBPc1xuICAgICAgbGV0IG9iamVjdF9lbmQgKCkgPSBgT2VcbiAgICAgIGxldCB0dXBsZV9zdGFydCAoKSA9IGBUc1xuICAgICAgbGV0IHR1cGxlX2VuZCAoKSA9IGBUZVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSBgVnNcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IGBWZVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuRXh0ZW5kZWQuc29ydFxuXG4gIGxldCB0b19iYXNpYyBqc29uIDogQmFzaWMuanNvbiA9XG4gICAgbGV0IHJlYyBtYXAgbm9kZSA9XG4gICAgICBtYXRjaCBub2RlIHdpdGhcbiAgICAgIHwgYE51bGwgLT4gYE51bGxcbiAgICAgIHwgYEJvb2wgXyBhcyB2IC0+IHZcbiAgICAgIHwgYEludCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50bGl0IHYgLT4gYFN0cmluZyB2XG4gICAgICB8IGBGbG9hdCBfIGFzIHYgLT4gdlxuICAgICAgfCBgU3RyaW5nIF8gYXMgdiAtPiB2XG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCBsKVxuICAgICAgfCBgQXNzb2MgYSAtPiBgQXNzb2MgKExpc3QubWFwIChmdW4gKGlkLCB2KSAtPiAoaWQsIG1hcCB2KSkgYSlcbiAgICAgIHwgYFR1cGxlIHRwbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIHRwbClcbiAgICAgIHwgYFZhcmlhbnQgKG5hbWUsIGpvcHQpIC0+XG4gICAgICAgICBtYXRjaCBqb3B0IHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBgU3RyaW5nIG5hbWVcbiAgICAgICAgIHwgU29tZSB2IC0+IGBMaXN0IFsgYFN0cmluZyBuYW1lOyAobWFwIHYpIF1cbiAgICBpblxuICAgIG1hcCBqc29uXG5cbiAgbW9kdWxlIFV0aWwgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIFByb2Nlc3MuWW9qc29uX3NhZmVcbiAgZW5kXG5lbmRcblxubW9kdWxlIFJhdyA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuXG4gIHR5cGUganNvbiA9XG4gICAgW1xuICAgIHwgYE51bGxcbiAgICB8IGBCb29sIG9mIGJvb2xcbiAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgfCBgRmxvYXRsaXQgb2Ygc3RyaW5nXG4gICAgfCBgU3RyaW5nbGl0IG9mIHN0cmluZ1xuICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgfCBgTGlzdCBvZiBqc29uIGxpc3RcbiAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICBdXG5cbiAgICB0eXBlIGpzb25fc3RyZWFtID0gSnNvbl9zdHJlYW0uRXh0ZW5kZWQuanNvbiAoKiB5b2pzb24gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nICopXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gXCJcXFwiXCIgXiBzIF4gXCJcXFwiXCJcbiAgICBsZXQgbGV4X251bWJlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9pbnRlZ2VyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2xhcmdlaW50IHRva2VuID0gdG9rZW5cblxuICAgIGxldCBsZXhfdmFyaWFudCBfID0gdHJ1ZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IHRydWVcblxuICAgIGxldCBjb21tZW50X2NoZWNrICgpID0gT2sgKClcblxuICAgIGxldCBudW1iZXJfdG9fc3RyaW5nIGYgPVxuICAgICAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgZiB3aXRoXG4gICAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT5cbiAgICAgICAgSnNvbl9mbG9hdC5zdHJpbmdfb2ZfZmxvYXRfanNvbiBmXG4gICAgICB8IEZQX2luZmluaXRlIC0+XG4gICAgICAgIGlmIGYgPCAwLiB0aGVuIFwiLUluZmluaXR5XCIgZWxzZSBcIkluZmluaXR5XCJcbiAgICAgIHwgRlBfbmFuIC0+XG4gICAgICAgIFwiTmFOXCJcblxuICAgIGxldCBsYXJnZWludCBzID0gYEludGxpdCBzXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnRsaXQgKHN0cmluZ19vZl9pbnQgaSlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZ2xpdCBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgbCA9IGBUdXBsZSBsXG4gICAgbGV0IHZhcmlhbnQgayB2ID0gYFZhcmlhbnQgKGssIHYpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXRsaXQgKHN0cmluZ19vZl9mbG9hdCBmKVxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdGxpdCBcIkluZmluaXR5XCJcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXRsaXQgXCItSW5maW5pdHlcIlxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdGxpdCBcIk5hTlwiXG4gICAgfCBgRmxvYXRsaXQgZiAtPiAgYEZsb2F0bGl0IGZcblxuICAgIG1vZHVsZSBTdHJlYW0gPSBzdHJ1Y3RcbiAgICAgIGxldCBudW1iZXIgPSBudW1iZXJcbiAgICAgIGxldCBsYXJnZWludCA9IGxhcmdlaW50XG4gICAgICBsZXQgaW50ZWdlciA9IGludGVnZXJcbiAgICAgIGxldCBudWxsID0gbnVsbFxuICAgICAgbGV0IHN0cmluZyA9IHN0cmluZ1xuICAgICAgbGV0IGJvb2wgPSBib29sXG5cbiAgICAgIGxldCBhcnJheV9zdGFydCAoKSA9IGBBc1xuICAgICAgbGV0IGFycmF5X2VuZCAoKSA9IGBBZVxuICAgICAgbGV0IG9iamVjdF9zdGFydCAoKSA9IGBPc1xuICAgICAgbGV0IG9iamVjdF9lbmQgKCkgPSBgT2VcbiAgICAgIGxldCB0dXBsZV9zdGFydCAoKSA9IGBUc1xuICAgICAgbGV0IHR1cGxlX2VuZCAoKSA9IGBUZVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSBgVnNcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IGBWZVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuRXh0ZW5kZWQuc29ydFxuZW5kXG4iLCJpbmNsdWRlIENvbnRhaW5lcnNMYWJlbHNcblxubW9kdWxlIFN0cmluZyA9IHN0cnVjdFxuICBpbmNsdWRlIFN0cmluZ1xuICBtb2R1bGUgU2V0ID0gU2V0Lk1ha2UgKFN0cmluZylcbmVuZFxuXG5tb2R1bGUgWW9qc29uID0gc3RydWN0XG4gIGluY2x1ZGUgSnNvbnh0LllvanNvblxuZW5kXG5cbm1vZHVsZSBFbmNvZGluZ3MgPSBzdHJ1Y3RcbiAgbGV0IHRvX2pzdHIgdCA9IEp2LnJlcHIgdCB8PiBCcnIuSnNvbi5lbmNvZGVcbiAgbGV0IHRvX2p2IHQgPSB0b19qc3RyIHQgfD4gSnYub2ZfanN0clxuXG4gIGxldCBvZl9qc3RyIGpzdHIgPVxuICAgIG1hdGNoIEJyci5Kc29uLmRlY29kZSBqc3RyIHdpdGhcbiAgICB8IE9rIHYgLT4gT2sgKE9iai5tYWdpYyB2KVxuICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIEJyci5Db25zb2xlLmVycm9yIFsgZXJyIF07XG4gICAgICAgIEVycm9yIChgTXNnIFwiRmFpbGVkIHRvIHVubWFyc2hhbCBkYXRhXCIpXG5cbiAgbGV0IG9mX2p2IGp2ID0gSnYudG9fanN0ciBqdiB8PiBvZl9qc3RyXG5lbmRcblxubGV0IHJhbmRvbV9zdGF0ZSA9IFJhbmRvbS5nZXRfc3RhdGUgKClcbmxldCBuZXdfdXVpZF92NCAoKSA9IFV1aWRtLnY0X2dlbiByYW5kb21fc3RhdGUgKClcblxuKCoqIFt0ZWUgZiB4XSBhcHBsaWVzIFtmXSB0byBbeF0gYW5kIHJldHVybnMgW3hdICopXG5sZXQgdGVlIGYgeCA9XG4gIGxldCAoKSA9IGYgeCBpblxuICB4XG4iLCJvcGVuIFN0ZExhYmVsc1xub3BlbiBNb3JlTGFiZWxzXG5vcGVuISBZb2pzb25cblxudHlwZSB0ID0gWW9qc29uLlNhZmUudFxuXG5sZXQgeW9qc29uX29mX3VuaXQgKCkgOiB0ID0gYE51bGxcbmxldCB5b2pzb25fb2ZfYm9vbCBiIDogdCA9IGBCb29sIGJcbmxldCB5b2pzb25fb2Zfc3RyaW5nIHN0ciA6IHQgPSBgU3RyaW5nIHN0clxubGV0IHlvanNvbl9vZl9ieXRlcyBieXRlcyA6IHQgPSBgU3RyaW5nIChCeXRlcy50b19zdHJpbmcgYnl0ZXMpXG5sZXQgeW9qc29uX29mX2NoYXIgYyA6IHQgPSBgU3RyaW5nIChTdHJpbmcubWFrZSAxIGMpXG5sZXQgeW9qc29uX29mX2ludCBuIDogdCA9IGBJbnQgblxubGV0IHlvanNvbl9vZl9mbG9hdCBuIDogdCA9IGBGbG9hdCBuXG5sZXQgeW9qc29uX29mX2ludDMyIChuIDogSW50MzIudCkgOiB0ID0gYEludGxpdCAoSW50MzIudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX2ludDY0IChuIDogSW50NjQudCkgOiB0ID0gYEludGxpdCAoSW50NjQudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX25hdGl2ZWludCBuIDogdCA9IGBJbnRsaXQgKE5hdGl2ZWludC50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfcmVmIHlvanNvbl9vZl9fYSByZiA9IHlvanNvbl9vZl9fYSAhcmZcbmxldCB5b2pzb25fb2ZfbGF6eV90IHlvanNvbl9vZl9fYSBsdiA9IHlvanNvbl9vZl9fYSAoTGF6eS5mb3JjZSBsdilcblxubGV0IHlvanNvbl9vZl9vcHRpb24geW9qc29uX29mX19hID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geW9qc29uX29mX19hIHhcbiAgfCBOb25lIC0+IGBOdWxsXG47O1xuXG5sZXQgeW9qc29uX29mX3BhaXIgeW9qc29uX29mX19hIHlvanNvbl9vZl9fYiAoYSwgYikgPVxuICBgTGlzdCBbIHlvanNvbl9vZl9fYSBhOyB5b2pzb25fb2ZfX2IgYiBdXG47O1xuXG5sZXQgeW9qc29uX29mX3RyaXBsZSB5b2pzb25fb2ZfX2EgeW9qc29uX29mX19iIHlvanNvbl9vZl9fYyAoYSwgYiwgYykgPVxuICBgTGlzdCBbIHlvanNvbl9vZl9fYSBhOyB5b2pzb25fb2ZfX2IgYjsgeW9qc29uX29mX19jIGMgXVxuOztcblxuKCogTGlzdC5yZXYgKExpc3QucmV2X21hcCAuLi4pIGlzIHRhaWwgcmVjdXJzaXZlLCB0aGUgT0NhbWwgc3RhbmRhcmRcbiAgIGxpYnJhcnkgTGlzdC5tYXAgaXMgTk9ULiAqKVxubGV0IHlvanNvbl9vZl9saXN0IHlvanNvbl9vZl9fYSBsc3QgPSBgTGlzdCAoTGlzdC5yZXYgKExpc3QucmV2X21hcCB+Zjp5b2pzb25fb2ZfX2EgbHN0KSlcblxubGV0IHlvanNvbl9vZl9hcnJheSB5b2pzb25fb2ZfX2EgYXIgPVxuICBsZXQgbHN0X3JlZiA9IHJlZiBbXSBpblxuICBmb3IgaSA9IEFycmF5Lmxlbmd0aCBhciAtIDEgZG93bnRvIDAgZG9cbiAgICBsc3RfcmVmIDo9IHlvanNvbl9vZl9fYSBhci4oaSkgOjogIWxzdF9yZWZcbiAgZG9uZTtcbiAgYExpc3QgIWxzdF9yZWZcbjs7XG5cbmxldCB5b2pzb25fb2ZfaGFzaHRibCB5b2pzb25fb2Zfa2V5IHlvanNvbl9vZl92YWwgaHRibCA9XG4gIGxldCBjb2xsIH5rZXk6ayB+ZGF0YTp2IGFjYyA9IGBMaXN0IFsgeW9qc29uX29mX2tleSBrOyB5b2pzb25fb2ZfdmFsIHYgXSA6OiBhY2MgaW5cbiAgYExpc3QgKEhhc2h0YmwuZm9sZCBodGJsIH5pbml0OltdIH5mOmNvbGwpXG47O1xuXG5sZXQgeW9qc29uX29mX29wYXF1ZSBfID0gYFN0cmluZyBcIjxvcGFxdWU+XCJcbmxldCB5b2pzb25fb2ZfZnVuIF8gPSBgU3RyaW5nIFwiPGZ1bj5cIlxuXG5leGNlcHRpb24gT2ZfeW9qc29uX2Vycm9yIG9mIGV4biAqIHRcblxubGV0IHJlY29yZF9jaGVja19leHRyYV9maWVsZHMgPSByZWYgdHJ1ZVxubGV0IG9mX3lvanNvbl9lcnJvcl9leG4gZXhjIHlvanNvbiA9IHJhaXNlIChPZl95b2pzb25fZXJyb3IgKGV4YywgeW9qc29uKSlcbmxldCBvZl95b2pzb25fZXJyb3Igd2hhdCB5b2pzb24gPSByYWlzZSAoT2ZfeW9qc29uX2Vycm9yIChGYWlsdXJlIHdoYXQsIHlvanNvbikpXG5cbmxldCB1bml0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBOdWxsIC0+ICgpXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJ1bml0X29mX3lvanNvbjogYE51bGwgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYm9vbF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgQm9vbCB2IC0+IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImJvb2xfb2ZfeW9qc29uOiB0cnVlL2ZhbHNlIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IHN0cmluZ19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPiBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInN0cmluZ19vZl95b2pzb246IHN0cmluZyBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBieXRlc19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPiBCeXRlcy5vZl9zdHJpbmcgc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJieXRlc19vZl95b2pzb246IHN0cmluZyBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBjaGFyX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+XG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzdHIgPD4gMVxuICAgIHRoZW4gb2ZfeW9qc29uX2Vycm9yIFwiY2hhcl9vZl95b2pzb246IHN0cmluZyBtdXN0IGNvbnRhaW4gb25lIGNoYXJhY3RlciBvbmx5XCIgeW9qc29uO1xuICAgIHN0ci5bMF1cbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImNoYXJfb2ZfeW9qc29uOiBzdHJpbmcgb2Ygc2l6ZSBvbmUgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnQgdiAtPiB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGZsb2F0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBGbG9hdCB2IC0+IHZcbiAgfCBgSW50IGkgLT4gZmxvYXRfb2ZfaW50IGlcbiAgfCBgSW50bGl0IHN0ciAtPiBmbG9hdF9vZl9zdHJpbmcgc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJmbG9hdF9vZl95b2pzb246IGZsb2F0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludDMyX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IEludDMyLm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gSW50MzIub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludDMyX29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnQ2NF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBJbnQ2NC5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IEludDY0Lm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnQ2NF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgbmF0aXZlaW50X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IE5hdGl2ZWludC5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IE5hdGl2ZWludC5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwibmF0aXZlaW50X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCByZWZfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPSByZWYgKGFfX29mX3lvanNvbiB5b2pzb24pXG5sZXQgbGF6eV90X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID0gTGF6eS5mcm9tX3ZhbCAoYV9fb2ZfeW9qc29uIHlvanNvbilcblxubGV0IG9wdGlvbl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYE51bGwgLT4gTm9uZVxuICB8IGVsIC0+IFNvbWUgKGFfX29mX3lvanNvbiBlbClcbjs7XG5cbmxldCBwYWlyX29mX3lvanNvbiBhX19vZl95b2pzb24gYl9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgWyBhX3lvanNvbjsgYl95b2pzb24gXSAtPlxuICAgIGxldCBhID0gYV9fb2ZfeW9qc29uIGFfeW9qc29uIGluXG4gICAgbGV0IGIgPSBiX19vZl95b2pzb24gYl95b2pzb24gaW5cbiAgICBhLCBiXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJwYWlyX29mX3lvanNvbjogaW52YWxpZCBmb3JtYXRcIiB5b2pzb25cbjs7XG5cbmxldCB0cmlwbGVfb2ZfeW9qc29uIGFfX29mX3lvanNvbiBiX19vZl95b2pzb24gY19fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgWyBhX3lvanNvbjsgYl95b2pzb247IGNfeW9qc29uIF0gLT5cbiAgICBsZXQgYSA9IGFfX29mX3lvanNvbiBhX3lvanNvbiBpblxuICAgIGxldCBiID0gYl9fb2ZfeW9qc29uIGJfeW9qc29uIGluXG4gICAgbGV0IGMgPSBjX19vZl95b2pzb24gY195b2pzb24gaW5cbiAgICBhLCBiLCBjXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJ0cmlwbGVfb2ZfeW9qc29uOiBpbnZhbGlkIGZvcm1hdFwiIHlvanNvblxuOztcblxubGV0IGxpc3Rfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IGxzdCAtPlxuICAgIGxldCByZXZfbHN0ID0gTGlzdC5yZXZfbWFwIGxzdCB+ZjphX19vZl95b2pzb24gaW5cbiAgICBMaXN0LnJldiByZXZfbHN0XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJsaXN0X29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBhcnJheV9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgW10gLT4gW3x8XVxuICB8IGBMaXN0IChoIDo6IHQpIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIHQgKyAxIGluXG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgbGVuIChhX19vZl95b2pzb24gaCkgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+IHJlc1xuICAgICAgfCBoIDo6IHQgLT5cbiAgICAgICAgcmVzLihpKSA8LSBhX19vZl95b2pzb24gaDtcbiAgICAgICAgbG9vcCAoaSArIDEpIHRcbiAgICBpblxuICAgIGxvb3AgMSB0XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJhcnJheV9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaGFzaHRibF9vZl95b2pzb24ga2V5X29mX3lvanNvbiB2YWxfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgbHN0IC0+XG4gICAgbGV0IGh0YmwgPSBIYXNodGJsLmNyZWF0ZSAwIGluXG4gICAgbGV0IGFjdCA9IGZ1bmN0aW9uXG4gICAgICB8IGBMaXN0IFsga195b2pzb247IHZfeW9qc29uIF0gLT5cbiAgICAgICAgSGFzaHRibC5hZGQgaHRibCB+a2V5OihrZXlfb2ZfeW9qc29uIGtfeW9qc29uKSB+ZGF0YToodmFsX29mX3lvanNvbiB2X3lvanNvbilcbiAgICAgIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJoYXNodGJsX29mX3lvanNvbjogdHVwbGUgbGlzdCBuZWVkZWRcIiB5b2pzb25cbiAgICBpblxuICAgIExpc3QuaXRlciBsc3QgfmY6YWN0O1xuICAgIGh0YmxcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImhhc2h0Ymxfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IG9wYXF1ZV9vZl95b2pzb24geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIFwib3BhcXVlX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgb3BhcXVlIHZhbHVlc1wiIHlvanNvblxuOztcblxubGV0IGZ1bl9vZl95b2pzb24geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIFwiZnVuX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgZnVuY3Rpb24gdmFsdWVzXCIgeW9qc29uXG47O1xuXG5tb2R1bGUgUHJpbWl0aXZlcyA9IHN0cnVjdFxuICBsZXQgeW9qc29uX29mX2FycmF5ID0geW9qc29uX29mX2FycmF5XG4gIGxldCBhcnJheV9vZl95b2pzb24gPSBhcnJheV9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9ib29sID0geW9qc29uX29mX2Jvb2xcbiAgbGV0IGJvb2xfb2ZfeW9qc29uID0gYm9vbF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9jaGFyID0geW9qc29uX29mX2NoYXJcbiAgbGV0IGNoYXJfb2ZfeW9qc29uID0gY2hhcl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9mbG9hdCA9IHlvanNvbl9vZl9mbG9hdFxuICBsZXQgZmxvYXRfb2ZfeW9qc29uID0gZmxvYXRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50ID0geW9qc29uX29mX2ludFxuICBsZXQgaW50X29mX3lvanNvbiA9IGludF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQzMiA9IHlvanNvbl9vZl9pbnQzMlxuICBsZXQgaW50MzJfb2ZfeW9qc29uID0gaW50MzJfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50NjQgPSB5b2pzb25fb2ZfaW50NjRcbiAgbGV0IGludDY0X29mX3lvanNvbiA9IGludDY0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2xpc3QgPSB5b2pzb25fb2ZfbGlzdFxuICBsZXQgbGlzdF9vZl95b2pzb24gPSBsaXN0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX25hdGl2ZWludCA9IHlvanNvbl9vZl9uYXRpdmVpbnRcbiAgbGV0IG5hdGl2ZWludF9vZl95b2pzb24gPSBuYXRpdmVpbnRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2Zfb3B0aW9uID0geW9qc29uX29mX29wdGlvblxuICBsZXQgb3B0aW9uX29mX3lvanNvbiA9IG9wdGlvbl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9yZWYgPSB5b2pzb25fb2ZfcmVmXG4gIGxldCByZWZfb2ZfeW9qc29uID0gcmVmX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3N0cmluZyA9IHlvanNvbl9vZl9zdHJpbmdcbiAgbGV0IHN0cmluZ19vZl95b2pzb24gPSBzdHJpbmdfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfYnl0ZXMgPSB5b2pzb25fb2ZfYnl0ZXNcbiAgbGV0IGJ5dGVzX29mX3lvanNvbiA9IGJ5dGVzX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3VuaXQgPSB5b2pzb25fb2ZfdW5pdFxuICBsZXQgdW5pdF9vZl95b2pzb24gPSB1bml0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2xhenlfdCA9IHlvanNvbl9vZl9sYXp5X3RcbiAgbGV0IGxhenlfdF9vZl95b2pzb24gPSBsYXp5X3Rfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaGFzaHRibCA9IHlvanNvbl9vZl9oYXNodGJsXG4gIGxldCBoYXNodGJsX29mX3lvanNvbiA9IGhhc2h0Ymxfb2ZfeW9qc29uXG5lbmRcbiIsIm1vZHVsZSBZb2pzb25fY29udl9lcnJvciA9IFlvanNvbl9jb252X2Vycm9yXG5tb2R1bGUgWW9qc29uX2NvbnYgPSBZb2pzb25fY29udlxubW9kdWxlIFlvanNvbmFibGUgPSBZb2pzb25hYmxlX2ludGZcbm1vZHVsZSBZb2pzb24gPSBZb2pzb25cblxubW9kdWxlIE9wdGlvbiA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBvcHRpb24gPVxuICAgIHwgTm9uZVxuICAgIHwgU29tZSBvZiAnYVxuZW5kXG5cbmV4dGVybmFsIGlnbm9yZSA6IF8gLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5leHRlcm5hbCBwb2x5X2VxdWFsIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcblxubGV0ICggISApIDogJ2EgcmVmIC0+ICdhID0gZnVuIHggLT4gIXhcbiIsIm1vZHVsZSBBcGkgPSBKZWxseWZpbl9hcGlcblxudHlwZSBjcmVkZW50aWFscyA9IHsgYmFzZV91cmwgOiBzdHJpbmc7IHVzZXJuYW1lIDogc3RyaW5nOyBwYXNzd29yZCA6IHN0cmluZyB9XG5cbnR5cGUgY29ubmV4aW9uID0ge1xuICBiYXNlX3VybCA6IHN0cmluZztcbiAgYXV0aF9yZXNwb25zZSA6IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS5yZXNwb25zZTtcbn1cblxubGV0IGdldF90b2tlbiB0ID0gdC5hdXRoX3Jlc3BvbnNlLkFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS5hY2Nlc3NfdG9rZW5cblxubGV0IGNvbm5lY3QgY3JlZGVudGlhbHMgPVxuICBsZXQgbW9kdWxlIEF1dGggPSBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IHsgYmFzZV91cmw7IHVzZXJuYW1lOyBwYXNzd29yZCB9ID0gY3JlZGVudGlhbHMgaW5cbiAgbGV0IGF1dGggPSB7IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS51c2VybmFtZTsgcHcgPSBwYXNzd29yZCB9IGluXG4gIGxldCsgYXV0aF9yZXNwb25zZSA9IEFwaS5yZXF1ZXN0IH5iYXNlX3VybCAobW9kdWxlIEF1dGgpIGF1dGggKCkgaW5cbiAgeyBiYXNlX3VybDsgYXV0aF9yZXNwb25zZSB9XG5cbmxldCBxdWVyeSB0ID1cbiAgbGV0IHRva2VuID0gZ2V0X3Rva2VuIHQgaW5cbiAgbGV0IGJhc2VfdXJsID0gdC5iYXNlX3VybCBpblxuICBKZWxseWZpbl9hcGkucmVxdWVzdCB+YmFzZV91cmwgfnRva2VuXG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJcblxudHlwZSB0YWcgPSBCbG9jayBvZiBpbnQgfCBJbnQgb2YgaW50XG5cbmxldCB0YWdfb2YgdiA9XG4gICgqIHdvdyB3b3cgd293LiBpcyB0aGF0IG9rYXl5aXNoID8qKVxuICBsZXQgb2JqID0gT2JqLnJlcHIgdiBpblxuICBpZiBPYmouaXNfYmxvY2sgb2JqIHRoZW4gQmxvY2sgKE9iai50YWcgb2JqKSBlbHNlIEludCAoT2JqLm1hZ2ljIG9iailcblxubW9kdWxlIHR5cGUgUXVlcmllcyA9IHNpZ1xuICB0eXBlICdhIHF1ZXJ5XG4gIHR5cGUgJ2EgZXZlbnRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoUSA6IFF1ZXJpZXMpID0gc3RydWN0XG4gIHR5cGUgZXJyb3IgPSBbIGBKdiBvZiBKdi5FcnJvci50IHwgYE1zZyBvZiBzdHJpbmcgXVxuICB0eXBlICdhIHF1ZXJ5ID0gJ2EgUS5xdWVyeVxuICB0eXBlICdhIGV2ZW50ID0gJ2EgUS5ldmVudFxuICB0eXBlICdhIHdpdGhfdXVpZCA9IHsgdXVpZCA6IHN0cmluZzsgZGF0YSA6ICdhIH1cbiAgdHlwZSAnYSBtZXNzYWdlID0gQW5zd2VyIG9mICdhIHdpdGhfdXVpZCB8IEV2ZW50IG9mICgnYSBldmVudCAqICdhKVxuICB0eXBlIGxpc3RlbmVyID0gc3RyaW5nXG5cbiAgKCogdG9kbzpjaGVjayB0aGF0IHRoZSB3b3JrZXIgYW5kIHRoZSBjbGllbnQgc2hhcmUgdGhlIHNhbWUgYXBpPyAqKVxuXG4gIG1vZHVsZSBTdGFydF9jbGllbnQgKFAgOiBzaWdcbiAgICB2YWwgdXJsIDogc3RyaW5nXG4gIGVuZCkgPVxuICBzdHJ1Y3RcbiAgICBsZXQgZnV0dXJlcyA6IChzdHJpbmcsIEp2LnQgLT4gdW5pdCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNjRcbiAgICBsZXQgbGlzdGVuZXJzIDogKHRhZywgSnYudCAtPiB1bml0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGxldCB3b3JrZXIgPSBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuY3JlYXRlIEBAIEpzdHIub2Zfc3RyaW5nIFAudXJsXG5cbiAgICBsZXQgcXVlcnkgKHR5cGUgYSkgKHF1ZXJ5IDogYSBxdWVyeSkgOiAoYSwgZXJyb3IpIEZ1dC5yZXN1bHQgPVxuICAgICAgbGV0IHV1aWQgPSBuZXdfdXVpZF92NCAoKSB8PiBVdWlkbS50b19zdHJpbmcgaW5cbiAgICAgIGxldCBmdXQsIHNldCA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgICAgIGxldCBzZXQganYgPSBzZXQgQEAgRW5jb2RpbmdzLm9mX2p2IGp2IGluXG4gICAgICBsZXQgcXVlcnkgPSB7IHV1aWQ7IGRhdGEgPSBxdWVyeSB9IHw+IEVuY29kaW5ncy50b19qc3RyIGluXG4gICAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIucG9zdCB3b3JrZXIgKEp2Lm9mX2pzdHIgcXVlcnkpO1xuICAgICAgSGFzaHRibC5hZGQgZnV0dXJlcyB1dWlkIHNldDtcbiAgICAgIGZ1dFxuXG4gICAgbGV0IGxpc3RlbiAodHlwZSBhKSAoZXZlbnQgOiBhIGV2ZW50KSB+KGYgOiBhIC0+IHVuaXQpIDogbGlzdGVuZXIgPVxuICAgICAgbGV0IHV1aWQgPSBuZXdfdXVpZF92NCAoKSB8PiBVdWlkbS50b19zdHJpbmcgaW5cbiAgICAgIGxldCBzZXQganYgPSBmIChPYmoubWFnaWMganYpIGluXG4gICAgICBIYXNodGJsLmFkZCBsaXN0ZW5lcnMgKHRhZ19vZiBldmVudCkgc2V0O1xuICAgICAgdXVpZFxuXG4gICAgbGV0IG9uX21lc3NhZ2UgZXYgPVxuICAgICAgbGV0IG1lc3NhZ2UgPSBFdi5hc190eXBlIGV2IGluXG4gICAgICBsZXQgb3BlbiBSZXN1bHQgaW5cbiAgICAgIGlnbm9yZSAoKiBUT0RPOiBoYW5kbGVyIGVycm9ycyAqKVxuICAgICAgQEBcbiAgICAgIGxldCsgbWVzc2FnZSA9XG4gICAgICAgIEJycl9pby5NZXNzYWdlLkV2LmRhdGEgbWVzc2FnZSB8PiBKdi50b19qc3RyIHw+IEVuY29kaW5ncy5vZl9qc3RyXG4gICAgICBpblxuICAgICAgbWF0Y2ggbWVzc2FnZSB3aXRoXG4gICAgICB8IEV2ZW50IChlLCB2KSAtPlxuICAgICAgICAgIEhhc2h0YmwuZmluZF9hbGwgbGlzdGVuZXJzICh0YWdfb2YgZSkgfD4gTGlzdC5pdGVyIH5mOihmdW4gZiAtPiBmIHYpXG4gICAgICB8IEFuc3dlciB7IHV1aWQ7IGRhdGEgfSAtPlxuICAgICAgICAgIGxldCBmID0gSGFzaHRibC5maW5kIGZ1dHVyZXMgdXVpZCBpblxuICAgICAgICAgIEhhc2h0YmwucmVtb3ZlIGZ1dHVyZXMgdXVpZDtcbiAgICAgICAgICBmIGRhdGFcblxuICAgIGxldCBfID1cbiAgICAgIEV2Lmxpc3RlbiBCcnJfaW8uTWVzc2FnZS5Fdi5tZXNzYWdlIG9uX21lc3NhZ2VcbiAgICAgIEBAIEJycl93ZWJ3b3JrZXJzLldvcmtlci5hc190YXJnZXQgd29ya2VyXG4gIGVuZFxuXG4gIG1vZHVsZSB0eXBlIFdvcmtlcl9pbXBsID0gZnVuY3RvciAoKSAtPiBzaWdcbiAgICB2YWwgb25fcXVlcnkgOiAnYSBxdWVyeSAtPiAoJ2EsIGVycm9yKSBGdXQucmVzdWx0XG4gIGVuZFxuXG4gIGxldCBkaXNwYXRjaF9ldmVudCAodHlwZSBhKSAoZSA6IGEgZXZlbnQpICh2IDogYSkgPVxuICAgICgqIGxldCBkYXRhID0gRW5jb2RpbmdzLm1hcnNoYWxfdG9fanN0ciB8PiBKdi5vZl9qc3RyIGluICopXG4gICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLkcucG9zdCAoRW5jb2RpbmdzLnRvX2pzdHIgKEV2ZW50IChlLCB2KSkgfD4gSnYub2ZfanN0cilcblxuICAoKiogRXhlY3V0ZSBXJ3MgYm9keSBhbmQgY29uZmlndXJlIG1lc3NhZ2luZyAqKVxuICBtb2R1bGUgTWFrZV93b3JrZXIgKFcgOiBXb3JrZXJfaW1wbCkgPSBzdHJ1Y3RcbiAgICBvcGVuIEJyclxuICAgIG1vZHVsZSBXID0gVyAoKVxuXG4gICAgbGV0IG9uX21lc3NhZ2UgZXYgPVxuICAgICAgbGV0IG1lc3NhZ2UgPSBFdi5hc190eXBlIGV2IGluXG4gICAgICBsZXQgb3BlbiBSZXN1bHQgaW5cbiAgICAgIGlnbm9yZSAoKiBUT0RPOiBoYW5kbGVyIGVycm9ycyAqKVxuICAgICAgQEBcbiAgICAgIGxldCsgKHsgdXVpZDsgZGF0YSB9IDogJ2EgcXVlcnkgd2l0aF91dWlkKSA9XG4gICAgICAgIEJycl9pby5NZXNzYWdlLkV2LmRhdGEgbWVzc2FnZSB8PiBKdi50b19qc3RyIHw+IEVuY29kaW5ncy5vZl9qc3RyXG4gICAgICBpblxuICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgIGxldCsgcmVzdWx0ID0gVy5vbl9xdWVyeSBkYXRhIGluXG4gICAgICBsZXQgZGF0YSA9IEVuY29kaW5ncy50b19qc3RyIHJlc3VsdCB8PiBKdi5vZl9qc3RyIGluXG4gICAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuRy5wb3N0XG4gICAgICAgIChFbmNvZGluZ3MudG9fanN0ciAoQW5zd2VyIHsgdXVpZDsgZGF0YSB9KSB8PiBKdi5vZl9qc3RyKVxuXG4gICAgbGV0IF8gPSBFdi5saXN0ZW4gQnJyX2lvLk1lc3NhZ2UuRXYubWVzc2FnZSBvbl9tZXNzYWdlIEcudGFyZ2V0XG4gIGVuZFxuZW5kXG4iLCJvcGVuIFN0ZFxuXG4oKiogU29tZSBzb3J0cyByZXF1aXJlIGEgY3VzdG9tIG9yZGVyaW5nIHdoaWNoIGlzIGRvbmUgdXNpbmcgYSB0YWJsZSBvZiBpbmRleGVzLiBGb3IgZXhhbXBsZSwgdG8gZ2V0IGEgcmFuZG9tIHNvcnQgd2Ugc2ltcGxlIHNodWZmbGUgYW4gYXJyYXkgd2hpY2ggc2l6ZSBpcyB0aGUgb25lIG9mIHRoZSByZXN1bHQuICopXG5tb2R1bGUgT3JkZXIgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSW5pdGlhbCB8IEFzYyB8IERlc2MgfCBDdXN0b20gb2YgaW50IGFycmF5XG5cbiAgbGV0IHJhbmRvbSB+c2l6ZSA9XG4gICAgbGV0IHRibCA9IEFycmF5LmluaXQgc2l6ZSB+ZjpGdW4uaWQgaW5cbiAgICBsZXQgKCkgPSBBcnJheS5zaHVmZmxlIHRibCBpblxuICAgIEN1c3RvbSB0YmxcblxuICBsZXQgb2Zfc3RyaW5nIH5zaXplID0gZnVuY3Rpb25cbiAgICB8IFwicmFuZG9tXCIgLT4gcmFuZG9tIH5zaXplXG4gICAgfCBcImFzY1wiIC0+IEFzY1xuICAgIHwgXCJkZXNjXCIgLT4gRGVzY1xuICAgIHwgXyAtPiBJbml0aWFsXG5cbiAgbGV0IGFwcGx5IHQgfnNpemUgaSA9XG4gICAgbWF0Y2ggdCB3aXRoXG4gICAgfCBJbml0aWFsIHwgQXNjIC0+IGlcbiAgICB8IERlc2MgLT4gc2l6ZSAtIDEgLSBpXG4gICAgfCBDdXN0b20gYSAtPiAoKiB0b2RvIGNoZWNrIGJvdW5kcyAqKSBhLihpKVxuZW5kXG5cbm1vZHVsZSBTb3J0ID0gc3RydWN0XG4gIHR5cGUgdCA9IERhdGVfYWRkZWQgfCBOYW1lXG5cbiAgbGV0IG9mX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBcImRhdGVfYWRkZWRcIiAtPiBEYXRlX2FkZGVkXG4gICAgfCBcIm5hbWVcIiAtPiBOYW1lXG4gICAgfCBfIC0+IERhdGVfYWRkZWRcbmVuZFxuXG50eXBlICdhIHNlbGVjdGlvbiA9IEFsbCB8IE9ubHkgb2YgJ2EgbGlzdFxudHlwZSBraW5kID0gQXVkaW9cbnR5cGUgZmlsdGVyID0gU2VhcmNoIG9mIHN0cmluZ1xuXG50eXBlIHJlcSA9IHtcbiAga2luZCA6IGtpbmQ7XG4gIHNyY192aWV3cyA6IHN0cmluZyBzZWxlY3Rpb247XG4gIHNvcnQgOiBTb3J0LnQ7XG4gIGZpbHRlcnMgOiBmaWx0ZXIgbGlzdDtcbn1cblxudHlwZSB0ID0geyByZXF1ZXN0IDogcmVxOyBzdGFydF9vZmZzZXQgOiBpbnQ7IGl0ZW1fY291bnQgOiBpbnQgfVxudHlwZSByYW5nZWQgPSB7IHZpZXcgOiB0OyBmaXJzdCA6IGludDsgbGFzdCA6IGludDsgb3JkZXIgOiBPcmRlci50IH1cblxubGV0IGl0ZW1fY291bnQgdCA9IHQuaXRlbV9jb3VudCAtIHQuc3RhcnRfb2Zmc2V0XG5cbmxldCByZXEga2luZCA/KHNyY192aWV3cyA9IEFsbCkgPyhzb3J0ID0gU29ydC5EYXRlX2FkZGVkKSA/KGZpbHRlcnMgPSBbXSkgKCkgPVxuICB7IGtpbmQ7IHNyY192aWV3czsgc29ydDsgZmlsdGVycyB9XG5cbmxldCBoYXNoIHJlcSA9IEhhc2h0YmwuaGFzaCAocmVxLnNyY192aWV3cywgcmVxLmZpbHRlcnMpXG4iLCJvcGVuISBTdGRcbm1vZHVsZSBEUyA9IERhdGFfc291cmNlLkplbGx5ZmluXG5tb2R1bGUgQXBpID0gRFMuQXBpXG5cbnR5cGUgc2VydmVyID0gc3RyaW5nICogRFMuY29ubmV4aW9uXG5cbm1vZHVsZSBRdWVyaWVzID0gc3RydWN0XG4gIHR5cGUgJ2EgcXVlcnkgPVxuICAgIHwgU2V0X3Nlc3Npb25fdXVpZCA6IHN0cmluZyAtPiB1bml0IHF1ZXJ5XG4gICAgfCBBZGRfc2VydmVycyA6IHNlcnZlciBsaXN0IC0+IHVuaXQgcXVlcnlcbiAgICB8IEdldF9hbGwgOiB1bml0IC0+IEFwaS5JdGVtLnQgbGlzdCBxdWVyeVxuICAgIHwgR2V0X2xpYnJhcmllcyA6IHVuaXQgLT4gU3RvcmVzLkl0ZW1zLnQgbGlzdCBxdWVyeVxuICAgIHwgR2V0X3NlcnZlcl9saWJyYXJpZXMgOiBzdHJpbmcgLT4gU3RvcmVzLkl0ZW1zLnQgbGlzdCBxdWVyeVxuICAgIHwgQ3JlYXRlX3ZpZXcgOiBWaWV3LnJlcSAtPiBWaWV3LnQgcXVlcnlcbiAgICB8IEdldCA6XG4gICAgICAgIFZpZXcudCAqIFZpZXcuT3JkZXIudCAqIGludCBhcnJheVxuICAgICAgICAtPiBTdG9yZXMuSXRlbXMudCBvcHRpb24gYXJyYXkgcXVlcnlcblxuICB0eXBlICdhIGV2ZW50ID0gU2VydmVyc19zdGF0dXNfdXBkYXRlIDogKHN0cmluZyAqIFN5bmMucmVwb3J0KSBldmVudFxuZW5kXG5cbmluY2x1ZGUgV29ya2VyX2FwaS5NYWtlIChRdWVyaWVzKVxuIiwiaW5jbHVkZSBTdGRcbm1vZHVsZSBEUyA9IERhdGFfc291cmNlLkplbGx5ZmluXG5tb2R1bGUgRWx3ZCA9IEJycl9sd2QuRWx3ZFxubW9kdWxlIFVpX3V0aWxzID0gQnJyX2x3ZF91aS5VdGlsc1xubW9kdWxlIFZpZXcgPSBEYi5WaWV3XG5tb2R1bGUgQXR0cnMgPSBCcnJfbHdkX3VpLkF0dHJzXG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcbiAgbW9kdWxlIE1NYXAgPSBDQ011bHRpTWFwLk1ha2UgKFN0cmluZylcbiAgbW9kdWxlIEl0ZW1zX011bHRpTWFwID0gTU1hcCAoRGIuU3RvcmVzLkl0ZW1zKVxuZW5kXG5cbm1vZHVsZSBVdGlscyA9IHN0cnVjdFxuICBsZXQgd2l0aF90aW1pbmcgPyhuYW1lID0gXCJcIikgZiA9XG4gICAgbGV0IHQgPSBCcnIuUGVyZm9ybWFuY2Uubm93X21zIEJyci5HLnBlcmZvcm1hbmNlIGluXG4gICAgbGV0IHJlcyA9IGYgKCkgaW5cbiAgICBCcnIuQ29uc29sZS5sb2dcbiAgICAgIFsgbmFtZTsgXCJ0b29rXCI7IEJyci5QZXJmb3JtYW5jZS5ub3dfbXMgQnJyLkcucGVyZm9ybWFuY2UgLS4gdCBdO1xuICAgIHJlc1xuZW5kXG4iLCJvcGVuIEltcG9ydFxuXG50eXBlIGxheW91dCA9IE1haW4gfCBLaW9za1xuXG5sZXQgYWN0aXZlX2xheW91dCA9IEx3ZC52YXIgTWFpblxuIiwib3BlbiBJbXBvcnRcblxudHlwZSBvcmRlcmVkID0ge1xuICByZXF1ZXN0IDogVmlldy5yZXEgTHdkLnQ7XG4gIGl0ZW1fY291bnQgOiBpbnQgTHdkLnQ7XG4gIHN0YXJ0X29mZnNldCA6IGludCBMd2QudDtcbiAgb3JkZXIgOiBWaWV3Lk9yZGVyLnQgTHdkLnQ7XG59XG5cbmxldCB0b192aWV3IHZpZXcgPVxuICBVaV91dGlscy5tYXAzIHZpZXcucmVxdWVzdCB2aWV3LnN0YXJ0X29mZnNldCB2aWV3Lml0ZW1fY291bnRcbiAgICB+ZjooZnVuIHJlcXVlc3Qgc3RhcnRfb2Zmc2V0IGl0ZW1fY291bnQgLT5cbiAgICAgIHsgVmlldy5yZXF1ZXN0OyBzdGFydF9vZmZzZXQ7IGl0ZW1fY291bnQgfSlcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJycmVyXG5vcGVuIEJycl9sd2RfdWlcblxubW9kdWxlIFR3b19zdGF0ZV9idXR0b24gPSBzdHJ1Y3RcbiAgbGV0IGJhc2UgPSBBdHRycy5jbGFzc2VzIFsgXCJidXR0b25cIiBdXG5cbiAgbGV0IGF0ID0gZnVuY3Rpb25cbiAgICB8IEJ1dHRvbi5PbiAtPiBBdHRycy5jbGFzc2VzIFsgXCJvblwiIF1cbiAgICB8IE9mZiAtPiBBdHRycy5jbGFzc2VzIFsgXCJvZmZcIiBdXG5cbiAgbGV0IG1ha2Ugfm9uX2NsaWNrID1cbiAgICBsZXQgb25fY2xpY2sgPSBCdXR0b24uaGFuZGxlciBCcnIuRXYuY2xpY2sgb25fY2xpY2sgaW5cbiAgICBCdXR0b24udHdvX3N0YXRlIH5iYXNlIH5hdCB+ZXY6WyBgUCBvbl9jbGljayBdXG5lbmRcblxub3BlbiBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2RcblxubW9kdWxlIERyYWdnYWJsZV90YWJsZSA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBSb3cgPSBzaWdcbiAgICB0eXBlIHRcblxuICAgIHZhbCByZW5kZXIgOiB0IC0+IEVsLnQgbGlzdFxuICBlbmRcblxuICAoKiogQ29sdW1ucyBkZWNsYXJhdGlvbiAqKVxuICBtb2R1bGUgQ29sdW1ucyA9IHN0cnVjdFxuICAgIHR5cGUgY29sdW1uID0geyBuYW1lIDogc3RyaW5nOyBjc3Nfc2l6ZSA6IHN0cmluZyB9XG4gICAgdHlwZSB0ID0gY29sdW1uIGFycmF5XG5cbiAgICBsZXQgY29sdW1uIG5hbWUgY3NzX3NpemUgPSB7IG5hbWU7IGNzc19zaXplIH1cblxuICAgIGxldCB0b19zdHlsZSB0ID1cbiAgICAgIEFycmF5LnRvX3N0cmluZyB+c2VwOlwiIFwiIChmdW4geyBjc3Nfc2l6ZTsgXyB9IC0+IGNzc19zaXplKSB0XG5cbiAgICBsZXQgdG9faGVhZGVyIHQgPVxuICAgICAgbGV0IGNlbGxzID1cbiAgICAgICAgQXJyYXkuZm9sZF9yaWdodCB0IH5pbml0OltdIH5mOihmdW4geyBuYW1lOyBfIH0gYWNjIC0+XG4gICAgICAgICAgICBFbC5kaXYgWyBFbC50eHQnIG5hbWUgXSA6OiBhY2MpXG4gICAgICBpblxuICAgICAgRWwuZGl2IGNlbGxzXG5cbiAgICBsZXQgc2V0IGVsdCB0ID1cbiAgICAgIGxldCB2YWx1ZSA9IEpzdHIudiBAQCB0b19zdHlsZSB0IGluXG4gICAgICBFbC5zZXRfaW5saW5lX3N0eWxlIEVsLlN0eWxlLmdyaWRfdGVtcGxhdGVfY29sdW1ucyB2YWx1ZSBlbHRcbiAgZW5kXG5cbiAgbGV0IGdyaWQgPSBBdHRycy5jbGFzc2VzIFsgXCJkcmFnZ2FibGUtdGFibGVcIiBdXG5cbiAgbGV0IHJlbmRlcl9yb3cgKHR5cGUgdCkgKG1vZHVsZSBSb3cgOiBSb3cgd2l0aCB0eXBlIHQgPSB0KSB+c2hhcmVkX2RyYWdfZGF0YVxuICAgICAgfm4gKHRfcm93IDogdCBMd2RfdGFibGUucm93KSByb3cgPVxuICAgIGxldCBhZGRfaGludCB+dG9wIGVsID1cbiAgICAgIGxldCBjID0gaWYgdG9wIHRoZW4gXCJob3Zlci10b3BcIiBlbHNlIFwiaG92ZXItYm90dG9tXCIgaW5cbiAgICAgIEVsLnNldF9jbGFzcyAoSnN0ci52IGMpIHRydWUgZWxcbiAgICBpblxuICAgIGxldCByZW1vdmVfaGludHMgZWwgPVxuICAgICAgTGlzdC5pdGVyIFsgXCJob3Zlci10b3BcIjsgXCJob3Zlci1ib3R0b21cIiBdIH5mOihmdW4gYyAtPlxuICAgICAgICAgIEVsLnNldF9jbGFzcyAoSnN0ci52IGMpIGZhbHNlIGVsKVxuICAgIGluXG4gICAgbGV0IGlzX29uX3RvcCBlID1cbiAgICAgIGxldCBtb3VzZV9ldiA9IEV2LkRyYWcuYXNfbW91c2UgQEAgRXYuYXNfdHlwZSBlIGluXG4gICAgICBsZXQgb2Zmc2V0X3kgPSBFdi5Nb3VzZS5vZmZzZXRfeSBtb3VzZV9ldiBpblxuICAgICAgbGV0IHRhcmdldCA9IEV2LmN1cnJlbnRfdGFyZ2V0IGUgfD4gRXYudGFyZ2V0X3RvX2p2IHw+IEVsLm9mX2p2IGluXG4gICAgICBsZXQgc2l6ZV9oID0gRWwuaW5uZXJfaCB0YXJnZXQgaW5cbiAgICAgIG9mZnNldF95IDwuIHNpemVfaCAvLiAyLlxuICAgIGluXG4gICAgbGV0IGdldF9ldl90YXJnZXQgZSA9IEV2LmN1cnJlbnRfdGFyZ2V0IGUgfD4gRXYudGFyZ2V0X3RvX2p2IHw+IEVsLm9mX2p2IGluXG4gICAgTHdkX3NlcS5lbGVtZW50XG4gICAgQEBcbiAgICBsZXQgY2VsbHMgPSBSb3cucmVuZGVyIHJvdyBpblxuICAgIGFzc2VydCAoTGlzdC5sZW5ndGggY2VsbHMgPSBuKTtcbiAgICBsZXQgb25fZHJhZ19zdGFydCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJhZ3N0YXJ0IChmdW4gXyAtPlxuICAgICAgICAgIERvY3VtZW50LmJvZHkgRy5kb2N1bWVudCB8PiBFbC5zZXRfY2xhc3MgKEpzdHIudiBcImRyYWdnaW5nXCIpIHRydWU7XG4gICAgICAgICAgTHdkLnNldCBzaGFyZWRfZHJhZ19kYXRhIEBAIFNvbWUgdF9yb3cpXG4gICAgaW5cbiAgICBsZXQgb25fZHJhZ19vdmVyID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnb3ZlciAoZnVuIGUgLT5cbiAgICAgICAgICBsZXQgdGFyZ2V0ID0gZ2V0X2V2X3RhcmdldCBlIGluXG4gICAgICAgICAgcmVtb3ZlX2hpbnRzIHRhcmdldDtcbiAgICAgICAgICBsZXQgdG9wID0gaXNfb25fdG9wIGUgaW5cbiAgICAgICAgICBsZXQgbm9vcCA9XG4gICAgICAgICAgICBsZXQgb3BlbiBPcHRpb24gaW5cbiAgICAgICAgICAgIGxldCsgcm93ID0gTHdkLnBlZWsgc2hhcmVkX2RyYWdfZGF0YSBpblxuICAgICAgICAgICAgbGV0IGVxdWFsX3ByZXYgcm93ID1cbiAgICAgICAgICAgICAgT3B0aW9uLm1hcF9vciB+ZGVmYXVsdDpmYWxzZSAoRXF1YWwucGh5c2ljYWwgcm93KVxuICAgICAgICAgICAgICAgIChMd2RfdGFibGUucHJldiB0X3JvdylcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBsZXQgZXF1YWxfbmV4dCByb3cgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmZhbHNlIChFcXVhbC5waHlzaWNhbCByb3cpXG4gICAgICAgICAgICAgICAgKEx3ZF90YWJsZS5uZXh0IHRfcm93KVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIEVxdWFsLnBoeXNpY2FsIHRfcm93IHJvd1xuICAgICAgICAgICAgfHwgKHRvcCAmJiBlcXVhbF9wcmV2IHJvdylcbiAgICAgICAgICAgIHx8ICgobm90IHRvcCkgJiYgZXF1YWxfbmV4dCByb3cpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBpZiBub3QgKE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpmYWxzZSBub29wKSB0aGVuIChcbiAgICAgICAgICAgIGFkZF9oaW50IH50b3AgdGFyZ2V0O1xuICAgICAgICAgICAgKCogPiBJZiB0aGUgbW91c2UgaXMgcmVsZWFzZWQgb3ZlciBhbiBlbGVtZW50IHRoYXQgaXMgYSB2YWxpZCBkcm9wIHRhcmdldCxcbiAgICAgICAgICAgICAgID4gdGhhdCBpcywgb25lIHRoYXQgY2FuY2VsbGVkIHRoZSBsYXN0IGRyYWdlbnRlciBvciBkcmFnb3ZlciBldmVudCxcbiAgICAgICAgICAgICAgID4gdGhlbiB0aGUgZHJvcCB3aWxsIGJlIHN1Y2Nlc3NmdWwuXG4gICAgICAgICAgICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTF9EcmFnX2FuZF9Ecm9wX0FQSS9EcmFnX29wZXJhdGlvbnMjc3BlY2lmeWluZ19kcm9wX3RhcmdldHMgKilcbiAgICAgICAgICAgIEV2LnByZXZlbnRfZGVmYXVsdCBlKSlcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX2xlYXZlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnbGVhdmUgKGZ1biBlIC0+IHJlbW92ZV9oaW50cyBAQCBnZXRfZXZfdGFyZ2V0IGUpXG4gICAgaW5cbiAgICBsZXQgb25fZHJhZ19lbmQgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdlbmQgKGZ1biBfIC0+XG4gICAgICAgICAgRG9jdW1lbnQuYm9keSBHLmRvY3VtZW50IHw+IEVsLnNldF9jbGFzcyAoSnN0ci52IFwiZHJhZ2dpbmdcIikgZmFsc2UpXG4gICAgaW5cbiAgICBsZXQgb25fZHJvcCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJvcCAoZnVuIGUgLT5cbiAgICAgICAgICByZW1vdmVfaGludHMgQEAgZ2V0X2V2X3RhcmdldCBlO1xuICAgICAgICAgIGxldCBfID1cbiAgICAgICAgICAgIGxldCBvcGVuIE9wdGlvbiBpblxuICAgICAgICAgICAgbGV0KiByb3cgPSBMd2QucGVlayBzaGFyZWRfZHJhZ19kYXRhIGluXG4gICAgICAgICAgICBsZXQrIHNldCA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgICAgICBpZiBpc19vbl90b3AgZSB0aGVuIGlnbm9yZSBAQCBMd2RfdGFibGUuYmVmb3JlIH5zZXQgdF9yb3dcbiAgICAgICAgICAgIGVsc2UgaWdub3JlIEBAIEx3ZF90YWJsZS5hZnRlciB+c2V0IHRfcm93O1xuICAgICAgICAgICAgTHdkX3RhYmxlLnJlbW92ZSByb3dcbiAgICAgICAgICBpblxuICAgICAgICAgIEx3ZC5zZXQgc2hhcmVkX2RyYWdfZGF0YSBOb25lKVxuICAgIGluXG4gICAgRWx3ZC5kaXZcbiAgICAgIH5hdDpbIGBQIChBdC5kcmFnZ2FibGUgQEAgSnN0ci52IFwidHJ1ZVwiKSBdXG4gICAgICB+ZXY6XG4gICAgICAgIFtcbiAgICAgICAgICBgUCBvbl9kcmFnX3N0YXJ0O1xuICAgICAgICAgIGBQIG9uX2RyYWdfb3ZlcjtcbiAgICAgICAgICBgUCBvbl9kcmFnX2xlYXZlO1xuICAgICAgICAgIGBQIG9uX2RyYWdfZW5kO1xuICAgICAgICAgIGBQIG9uX2Ryb3A7XG4gICAgICAgIF1cbiAgICAgIChMaXN0Lm1hcCBjZWxscyB+ZjooZnVuIGMgLT4gYFAgYykpXG5cbiAgbGV0IG1ha2UgKHR5cGUgdCkgKG1vZHVsZSBSb3cgOiBSb3cgd2l0aCB0eXBlIHQgPSB0KSB+Y29sdW1uc1xuICAgICAgPyh0YWJsZSA6IHQgTHdkX3RhYmxlLnQgPSBMd2RfdGFibGUubWFrZSAoKSlcbiAgICAgID8oc2hhcmVkX2RyYWdfZGF0YSA6IHQgTHdkX3RhYmxlLnJvdyBvcHRpb24gTHdkLnZhciA9IEx3ZC52YXIgTm9uZSkgKCkgPVxuICAgIGxldCBhdCA9IEF0dHJzLnRvX2F0IGdyaWQgaW5cbiAgICBsZXQgdGFibGVfaGVhZGVyID0gQ29sdW1ucy50b19oZWFkZXIgY29sdW1ucyBpblxuICAgIGxldCB0YWJsZV9ib2R5ID1cbiAgICAgIEx3ZF90YWJsZS5tYXBfcmVkdWNlXG4gICAgICAgIChyZW5kZXJfcm93IChtb2R1bGUgUm93KSB+c2hhcmVkX2RyYWdfZGF0YSB+bjooQXJyYXkubGVuZ3RoIGNvbHVtbnMpKVxuICAgICAgICBMd2Rfc2VxLm1vbm9pZCB0YWJsZVxuICAgIGluXG4gICAgbGV0IGVsdCA9XG4gICAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICAgIGxldCQgZWx0ID1cbiAgICAgICAgRWx3ZC5kaXYgfmF0IFsgYFAgdGFibGVfaGVhZGVyOyBgUyAoTHdkX3NlcS5saWZ0IHRhYmxlX2JvZHkpIF1cbiAgICAgIGluXG4gICAgICBsZXQgKCkgPSBDb2x1bW5zLnNldCBlbHQgY29sdW1ucyBpblxuICAgICAgZWx0XG4gICAgaW5cbiAgICAoZWx0LCB0YWJsZSlcbmVuZFxuXG5sZXQgcGxheWxpc3RfY29sdW1ucyA9XG4gIERyYWdnYWJsZV90YWJsZS5Db2x1bW5zLlxuICAgIFt8IGNvbHVtbiBcIkZpcnN0Q09sXCIgXCIyNTZweFwiOyBjb2x1bW4gXCJTZWNvbmRcIiBcIjI1NnB4XCIgfF1cblxubW9kdWxlIFBsYXlsaXN0X3JvdyA9IHN0cnVjdFxuICB0eXBlIHQgPSBzdHJpbmcgKiBzdHJpbmdcblxuICBsZXQgcmVuZGVyIChsLCByKSA9IFsgRWwuZGl2IFsgRWwudHh0JyBsIF07IEVsLmRpdiBbIEVsLnR4dCcgciBdIF1cbmVuZFxuXG5sZXQgbWFrZV90YWJsZSByb3dzID1cbiAgbGV0IHRhYmxlID0gTHdkX3RhYmxlLm1ha2UgKCkgaW5cbiAgTGlzdC5pdGVyIHJvd3MgfmY6KGZ1biBzZXQgLT4gaWdub3JlIEBAIEx3ZF90YWJsZS5hcHBlbmQgfnNldCB0YWJsZSk7XG4gIHRhYmxlXG5cbmxldCBkcmFnZ2FibGVfdGFibGUgP3NoYXJlZF9kcmFnX2RhdGEgKCkgPVxuICBEcmFnZ2FibGVfdGFibGUubWFrZVxuICAgIChtb2R1bGUgUGxheWxpc3Rfcm93KVxuICAgIH5jb2x1bW5zOnBsYXlsaXN0X2NvbHVtbnMgP3NoYXJlZF9kcmFnX2RhdGFcbiAgICB+dGFibGU6XG4gICAgICAobWFrZV90YWJsZVxuICAgICAgICAgW1xuICAgICAgICAgICAoXCJ0b3RvXCIsIFwicjFcIik7XG4gICAgICAgICAgIChcInRhdGFcIiwgXCJyMlwiKTtcbiAgICAgICAgICAgKFwidGl0aVwiLCBcInIzXCIpO1xuICAgICAgICAgICAoXCJ0YVwiLCBcInI0XCIpO1xuICAgICAgICAgICAoXCJ0dVwiLCBcInI1XCIpO1xuICAgICAgICAgXSlcbiAgICAoKVxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyZXIuQnJyXG5vcGVuISBCcnJfbHdkX3VpXG5vcGVuISBCcnJfbHdkXG5tb2R1bGUgQXBpID0gRFMuQXBpXG5cbigqKiBBcHBsaWNhdGlvbiBwYXJ0ICopXG5cbigqKiBDb2x1bW5zIGRlY2xhcmF0aW9uICopXG5sZXQgY29sdW1ucyAoKSA9XG4gIFRhYmxlLkNvbHVtbnMuXG4gICAgW3xcbiAgICAgIHYgXCJPcmRlclwiIFwiNXJlbVwiIEBAIFsgYFAgKEVsLnR4dCcgXCIjXCIpIF07XG4gICAgICB2IFwiQ292ZXJcIiBcIjVyZW1cIiBAQCBbIGBQIChFbC50eHQnIFwiQ292ZXJcIikgXTtcbiAgICAgIHYgXCJUaXRsZVwiIFwiMWZyXCIgQEAgWyBgUCAoRWwudHh0JyBcIlRpdGxlXCIpIF07XG4gICAgfF1cblxubGV0IG1ha2UgfnJlc2V0X3BsYXlsaXN0IH5mZXRjaCA/c2Nyb2xsX3RhcmdldCAodmlldyA6IEx3ZF92aWV3Lm9yZGVyZWQpID1cbiAgbGV0IHJhbmdlZCA9XG4gICAgTHdkLm1hcDIgKEx3ZF92aWV3LnRvX3ZpZXcgdmlldykgdmlldy5vcmRlciB+ZjooZnVuIHZpZXcgb3JkZXIgLT5cbiAgICAgICAgeyBWaWV3LnZpZXc7IGZpcnN0ID0gMDsgbGFzdCA9IDA7IG9yZGVyIH0pXG4gIGluXG4gIGxldCBpbWdfdXJsIHNlcnZlcl9pZCBpdGVtX2lkID1cbiAgICBsZXQgc2VydmVycyA9XG4gICAgICAoKiBzaG91bGQgdGhpcyBiZSByZWFjdGl2ZSA/ICopXG4gICAgICBMd2QucGVlayBTZXJ2ZXJzLmNvbm5leGlvbnMgfD4gTHdkX3NlcS50b19saXN0XG4gICAgaW5cbiAgICBsZXQgdXJsID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID0gTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzIGluXG4gICAgICAgIFByaW50Zi5zcHJpbnRmIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9NTBcIiBjb25uZXhpb24uYmFzZV91cmxcbiAgICAgICAgICBpdGVtX2lkXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBcInNlcnZlci1lcnJvci5wbmdcIlxuICAgIGluXG4gICAgQXQuc3JjIChKc3RyLnYgdXJsKVxuICBpblxuICBsZXQgcmVuZGVyIChyYW5nZWQgOiBWaWV3LnJhbmdlZCBMd2QudCkgc3RhcnRfaW5kZXhcbiAgICAgIHtcbiAgICAgICAgRGIuU3RvcmVzLkl0ZW1zLml0ZW0gPVxuICAgICAgICAgIHsgQXBpLkl0ZW0uaWQ7IG5hbWU7IGFsYnVtX2lkOyBzZXJ2ZXJfaWQ7IGltYWdlX2JsdXJfaGFzaGVzOyBfIH07XG4gICAgICAgIF87XG4gICAgICB9ID1cbiAgICBsZXQgcGxheV9mcm9tIChyYW5nZWQgOiBWaWV3LnJhbmdlZCBMd2QudCkgPVxuICAgICAgTHdkLm1hcCByYW5nZWQgfmY6KGZ1biByYW5nZWQgXyAtPlxuICAgICAgICAgIGlnbm9yZVxuICAgICAgICAgICAgKHJlc2V0X3BsYXlsaXN0XG4gICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgIHJhbmdlZCB3aXRoXG4gICAgICAgICAgICAgICAgIHZpZXcgPVxuICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgIHJhbmdlZC52aWV3IHdpdGhcbiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X29mZnNldCA9IHJhbmdlZC52aWV3LnN0YXJ0X29mZnNldCArIHN0YXJ0X2luZGV4O1xuICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICB9KSlcbiAgICBpblxuICAgIGxldCBwbGF5X29uX2NsaWNrID1cbiAgICAgIEx3ZC5tYXAgKHBsYXlfZnJvbSByYW5nZWQpIH5mOihmdW4gY2IgLT4gRWx3ZC5oYW5kbGVyIEV2LmNsaWNrIGNiKVxuICAgIGluXG4gICAgbGV0IGltZ191cmwgPVxuICAgICAgbWF0Y2ggKGltYWdlX2JsdXJfaGFzaGVzLCBhbGJ1bV9pZCkgd2l0aFxuICAgICAgfCB7IHByaW1hcnkgPSBOb25lIH0sIF8gfCBfLCBOb25lIC0+XG4gICAgICAgICAgTHdkLnJldHVybiAoQXQuc3JjIChKc3RyLnYgXCJ0cmFjay5wbmdcIikpXG4gICAgICB8IF8sIFNvbWUgaWQgLT4gTHdkLnJldHVybiAoaW1nX3VybCBzZXJ2ZXJfaWQgaWQpXG4gICAgaW5cbiAgICBsZXQgc3RhdHVzID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgUGxheWVyLm5vd19wbGF5aW5nKSB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBTb21lIHsgaXRlbSA9IHsgaWQgPSBpdGVtX2lkOyBfIH07IF8gfSB3aGVuIFN0cmluZy5lcXVhbCBpdGVtX2lkIGlkIC0+XG4gICAgICAgICAgICBFbC5kaXYgfmF0OlsgQXQuY2xhc3MnIChKc3RyLnYgXCJwbGF5aW5nXCIpIF0gWyBFbC50eHQnIFwifD5cIiBdXG4gICAgICAgIHwgU29tZSBfIHwgTm9uZSAtPiBFbC5kaXYgWyBFbC50eHQnIChzdHJpbmdfb2ZfaW50IChzdGFydF9pbmRleCArIDEpKSBdKVxuICAgIGluXG4gICAgW1xuICAgICAgYFIgc3RhdHVzO1xuICAgICAgYFJcbiAgICAgICAgKEVsd2QuZGl2XG4gICAgICAgICAgIH5ldjpbIGBSIHBsYXlfb25fY2xpY2sgXVxuICAgICAgICAgICBbIGBSIChFbHdkLmltZyB+YXQ6WyBgUiBpbWdfdXJsOyBgUCAoQXQud2lkdGggNTApIF0gKCkpIF0pO1xuICAgICAgYFAgKEVsLmRpdiBbIEVsLnNwYW4gWyBFbC50eHQnIG5hbWUgXSBdKTtcbiAgICBdXG4gIGluXG4gIGxldCBwbGFjZWhvbGRlciBfaSA9IFtdIGluXG4gIGxldCB1aV90YWJsZSA9XG4gICAgeyBUYWJsZS50YWJsZSA9IHsgY29sdW1ucyA9IGNvbHVtbnMgKCkgfTsgcm93X2hlaWdodCA9IEVtIDQuIH1cbiAgaW5cbiAgbGV0IGRhdGFfc291cmNlID1cbiAgICBsZXQgdG90YWxfaXRlbXMgPSB2aWV3Lml0ZW1fY291bnQgaW5cbiAgICBsZXQgZmV0Y2ggPSBMd2QubWFwIHJhbmdlZCB+ZjooZnVuIHJhbmdlZCBpIC0+IGZldGNoIHJhbmdlZCBpKSBpblxuICAgIGxldCByZW5kZXIgPSBMd2QucHVyZSAocmVuZGVyIHJhbmdlZCkgaW5cbiAgICB7IFRhYmxlLlZpcnR1YWwudG90YWxfaXRlbXM7IGZldGNoOyByZW5kZXIgfVxuICBpblxuICBUYWJsZS5WaXJ0dWFsLm1ha2UgfnVpX3RhYmxlIH5wbGFjZWhvbGRlciA/c2Nyb2xsX3RhcmdldCBkYXRhX3NvdXJjZVxuXG5sZXQgbWFrZV9ub3dfcGxheWluZyB+cmVzZXRfcGxheWxpc3QgfmZldGNoIHZpZXcgPVxuICBsZXQgc2Nyb2xsX3RhcmdldCA9IEx3ZC5nZXQgUGxheWVyLnBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IGluXG4gIG1ha2UgfnNjcm9sbF90YXJnZXQgfnJlc2V0X3BsYXlsaXN0IH5mZXRjaCB2aWV3XG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJcblxuKCogVGhlIHNlc3Npb24gdXVpZCBpcyBzdG9yZWQgdG8gdGhlIGxvY2FsIHN0b3JhZ2UgYW5kIHVzZWQgdG8gaWRlbnRpZnkgYSB1c2VyXG4gICBzZXNzaW9uLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IEplbGx5ZmluIGF1dGhvcml6YXRpb24gc2NoZW1lLiAqKVxuKCogVGhlIG9mZmljaWFsIGNsaWVudCBkb2VzIGl0IGxpa2UgdGhpczpcblxuICAgZnVuY3Rpb24gZ2VuZXJhdGVEZXZpY2VJZCgpIHtcbiAgICAgICBjb25zdCBrZXlzID0gW107XG5cbiAgICAgICBrZXlzLnB1c2gobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICAga2V5cy5wdXNoKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcbiAgICAgICBpZiAod2luZG93LmJ0b2EpIHtcbiAgICAgICAgICAgcmV0dXJuIGJ0b2Eoa2V5cy5qb2luKCd8JykpLnJlcGxhY2VBbGwoJz0nLCAnMScpO1xuICAgICAgIH1cblxuICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgIH1cbiopXG5sZXQgc2Vzc2lvbl91dWlkID1cbiAgKCogV2UgbmV2ZXIgcmVhY3QgdG8gdGhpcyB2YXIgd2UgY291bGQgcmVwbGFjZSBpdCAqKVxuICBCcnJfbHdkX3VpLlBlcnNpc3RlbnQudmFyX2YgfmtleTpcInNlc3Npb25fdXVpZFwiIChmdW4gKCkgLT5cbiAgICAgIFN0ZC5uZXdfdXVpZF92NCAoKSB8PiBVdWlkbS50b19zdHJpbmcpXG5cbmxldCBfID1cbiAgbGV0IHV1aWQgPSBMd2QucGVlayBzZXNzaW9uX3V1aWQgaW5cbiAgRGF0YV9zb3VyY2UuSmVsbHlmaW5fYXBpLnNldF9zZXNzaW9uX3V1aWQgdXVpZDtcbiAgV29ya2VyX2NsaWVudC5xdWVyeSAoU2V0X3Nlc3Npb25fdXVpZCAoTHdkLnBlZWsgc2Vzc2lvbl91dWlkKSlcblxubGV0IGZldGNoIHJhbmdlZF92aWV3IGkgPVxuICBXb3JrZXJfY2xpZW50LihxdWVyeSAoR2V0IChyYW5nZWRfdmlldy5WaWV3LnZpZXcsIHJhbmdlZF92aWV3Lm9yZGVyLCBpKSkpXG5cbm1vZHVsZSBQID0gUGxheWVyLlBsYXliYWNrX2NvbnRyb2xsZXIgKHN0cnVjdFxuICBsZXQgZmV0Y2ggPSBmZXRjaFxuZW5kKVxuXG5sZXQgYXBwID1cbiAgbGV0IG9wZW4gQnJyX2x3ZF91aS5Gb3JtcyBpblxuICBsZXQgcGxheWxpc3QgPSBCcnJfbHdkX3VpLlBlcnNpc3RlbnQudmFyIH5rZXk6XCJ0b3RvMVwiIDAgaW5cbiAgbGV0IG9uX2NsaWNrIF8gXyA9XG4gICAgTHdkLnNldCBwbGF5bGlzdCAoTHdkLnBlZWsgcGxheWxpc3QgKyAxKTtcbiAgICBMYW5nLnNldCBMYW5nLkVuO1xuICAgIEJycl9sd2RfdWkuQnV0dG9uLk5leHRcbiAgaW5cbiAgbGV0IF9idG5fbWl4LCBfLCBfID1cbiAgICBVaS5Ud29fc3RhdGVfYnV0dG9uLm1ha2Ugfm9uX2NsaWNrIChmdW4gXyAtPlxuICAgICAgICBbXG4gICAgICAgICAgYFJcbiAgICAgICAgICAgIChMd2QubWFwIChMd2QuZ2V0IHBsYXlsaXN0KSB+ZjooZnVuIHBsIC0+XG4gICAgICAgICAgICAgICAgIEVsLnR4dCcgKFwiY2xpY2tcIiBeIHN0cmluZ19vZl9pbnQgcGwpKSk7XG4gICAgICAgIF0pXG4gIGluXG4gIGxldCBzdGF0dXMgPVxuICAgIEVsd2QuZGl2XG4gICAgICB+YXQ6WyBgUCAoQXQuc3R5bGUgKEpzdHIudiBcImdyaWQtY29sdW1uOjEvLTFcIikpIF1cbiAgICAgIFsgYFAgKEVsLmgxIFsgRWwudHh0JyBcIldlbGNvbWUgdG8gT0NBTUlYXCIgXSk7IGBSIChTZXJ2ZXJzLnVpICgpKSBdXG4gIGluXG4gIGxldCBwbGF5ZXJfdWkgPVxuICAgIGxldCBwbGF5ZXIgPSBQLm1ha2UgKCkgaW5cbiAgICBFbHdkLmRpdiB+YXQ6WyBgUCAoQXQuc3R5bGUgKEpzdHIudiBcImdyaWQtY29sdW1uOjEvLTFcIikpIF0gWyBgUiBwbGF5ZXIgXVxuICBpblxuICBsZXQgZl9zZWFyY2ggPVxuICAgIGxldCBvcGVuIEZpZWxkX3RleHRpbnB1dCBpblxuICAgIG1ha2UgeyBuYW1lID0gXCJwb3VldFwiOyBkZWZhdWx0ID0gTm9uZTsgbGFiZWwgPSBbXSB9XG4gIGluXG4gIGxldCBmX3NvcnQgPVxuICAgIGxldCBvcGVuIEZpZWxkX3NlbGVjdCBpblxuICAgIGxldCBvcHRpb25zID1cbiAgICAgIEx3ZC5wdXJlXG4gICAgICAgIChMd2Rfc2VxLm9mX2xpc3QgWyAoXCJkYXRlX2FkZGVkXCIsIFwiRGF0ZSBhZGRlZFwiKTsgKFwibmFtZVwiLCBcIk5hbWVcIikgXSlcbiAgICBpblxuICAgIG1ha2UgeyBuYW1lID0gXCJ2aWV3LXNvcnRcIjsgZGVmYXVsdCA9IFwiZGF0ZV9hZGRlZFwiOyBsYWJlbCA9IFtdIH0gb3B0aW9uc1xuICBpblxuICBsZXQgZl9vcmRlciA9XG4gICAgbGV0IG9wZW4gRmllbGRfc2VsZWN0IGluXG4gICAgbGV0IG9wdGlvbnMgPVxuICAgICAgTHdkLnB1cmVcbiAgICAgICAgKEx3ZF9zZXEub2ZfbGlzdFxuICAgICAgICAgICBbIChcImFzY1wiLCBcIkFzY1wiKTsgKFwiZGVzY1wiLCBcIkRlc2NcIik7IChcInJhbmRvbVwiLCBcIlJhbmRvbVwiKSBdKVxuICAgIGluXG4gICAgbWFrZSB7IG5hbWUgPSBcInZpZXctb3JkZXJcIjsgZGVmYXVsdCA9IFwiZGVzY1wiOyBsYWJlbCA9IFtdIH0gb3B0aW9uc1xuICBpblxuICBsZXQgZl9zb3J0X29yZGVyID0gTHdkLnBhaXIgZl9zb3J0LnZhbHVlIGZfb3JkZXIudmFsdWUgaW5cbiAgbGV0IGZpbHRlcnMsIGZfdmFsdWUgPVxuICAgIGxldCBmX2xpYnJhcmllcyA9XG4gICAgICBsZXQgb3BlbiBGaWVsZF9jaGVja2JveGVzIGluXG4gICAgICBsZXQgY2hvaWNlcyA9XG4gICAgICAgIEx3ZF9zZXEuZm9sZF9tb25vaWRcbiAgICAgICAgICAoZnVuIChfLCBsKSAtPlxuICAgICAgICAgICAgTHdkX3NlcS5tYXBcbiAgICAgICAgICAgICAgKGZ1biAobCA6IERiLlN0b3Jlcy5JdGVtcy50KSAtPlxuICAgICAgICAgICAgICAgIENoZWNrIChsLml0ZW0uaWQsIFsgYFAgKEVsLnR4dCcgbC5pdGVtLm5hbWUpIF0sIHRydWUpKVxuICAgICAgICAgICAgICBsKVxuICAgICAgICAgIChMd2QucmV0dXJuIEx3ZF9zZXEuZW1wdHksIEx3ZC5tYXAyIH5mOkx3ZF9zZXEuY29uY2F0KVxuICAgICAgICAgIFNlcnZlcnMuc2VydmVyc19saWJyYXJpZXNcbiAgICAgIGluXG4gICAgICBtYWtlIHsgbmFtZSA9IFwicG91ZXRcIjsgZGVzYyA9IEx3ZC5qb2luIGNob2ljZXMgfVxuICAgIGluXG4gICAgbGV0IGZpbHRlcnMgPVxuICAgICAgRWx3ZC5kaXZcbiAgICAgICAgW1xuICAgICAgICAgIGBSIGZfc29ydC5maWVsZDtcbiAgICAgICAgICBgUiBmX29yZGVyLmZpZWxkO1xuICAgICAgICAgIGBSIGZfc2VhcmNoLmZpZWxkO1xuICAgICAgICAgIGBSIGZfbGlicmFyaWVzLmZpZWxkO1xuICAgICAgICBdXG4gICAgaW5cbiAgICAoZmlsdGVycywgZl9saWJyYXJpZXMudmFsdWUpXG4gIGluXG4gIGxldCBtYWluX3ZpZXcgPVxuICAgIGxldCBwcmV2aW91c192YWx1ZSA9IHJlZiBOb25lIGluXG4gICAgbGV0IHJlcXVlc3QgPVxuICAgICAgVWlfdXRpbHMubWFwMyBmX3ZhbHVlIGZfc2VhcmNoLnZhbHVlIGZfc29ydF9vcmRlciB+ZjooZnVuIGwgdCAocywgbykgLT5cbiAgICAgICAgICBsZXQgZmlsdGVycyA9IE9wdGlvbi5tYXAgKGZ1biBzIC0+IFsgRGIuVmlldy5TZWFyY2ggcyBdKSB0IGluXG4gICAgICAgICAgQ29uc29sZS5sb2dcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgXCJVcGRhdGluZyBtYWluIHZpZXc6XCI7XG4gICAgICAgICAgICAgIEp2Lm9mX29wdGlvbiB+bm9uZTooSnYub2Zfc3RyaW5nIFwiXFxcIlxcXCJcIikgSnYub2Zfc3RyaW5nIHQ7XG4gICAgICAgICAgICAgICgqIEp2Lm9mX2xpc3QgSnYub2Zfc3RyaW5nIGw7ICopXG4gICAgICAgICAgICAgIEp2Lm9mX3N0cmluZyBzO1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICAgIGxldCBzb3J0ID0gRGIuVmlldy5Tb3J0Lm9mX3N0cmluZyBzIGluXG4gICAgICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgICBsZXQgbmV3X3ZpZXcgPVxuICAgICAgICAgICAgRGIuVmlldy4oXG4gICAgICAgICAgICAgIHJlcSBBdWRpbyB+c3JjX3ZpZXdzOihPbmx5IChMd2Rfc2VxLnRvX2xpc3QgbCkpIH5zb3J0ID9maWx0ZXJzICgpKVxuICAgICAgICAgIGluXG4gICAgICAgICAgT3B0aW9uLm1hcF9vciB+ZGVmYXVsdDpuZXdfdmlld1xuICAgICAgICAgICAgKGZ1biBvbGQgLT5cbiAgICAgICAgICAgICAgaWYgRXF1YWwucG9seSBvbGQgbmV3X3ZpZXcgdGhlbiBvbGRcbiAgICAgICAgICAgICAgZWxzZSAoXG4gICAgICAgICAgICAgICAgcHJldmlvdXNfdmFsdWUgOj0gU29tZSBuZXdfdmlldztcbiAgICAgICAgICAgICAgICBuZXdfdmlldykpXG4gICAgICAgICAgICAhcHJldmlvdXNfdmFsdWUpXG4gICAgaW5cbiAgICBsZXQgaXRlbV9jb3VudCA9XG4gICAgICBMd2QubWFwIHJlcXVlc3QgfmY6KGZ1biByZXEgLT4gV29ya2VyX2NsaWVudC5nZXRfdmlld19pdGVtX2NvdW50IHJlcSlcbiAgICBpblxuICAgIGxldCBpdGVtX2NvdW50ID0gKCogRklYTUUgKikgTHdkLmpvaW4gaXRlbV9jb3VudCBpblxuICAgIGxldCBvcmRlciA9XG4gICAgICBMd2QubWFwMiBpdGVtX2NvdW50IGZfc29ydF9vcmRlciB+ZjooZnVuIGl0ZW1fY291bnQgKF8sIG9yZGVyKSAtPlxuICAgICAgICAgIGxldCBzaXplID0gaXRlbV9jb3VudCBpblxuICAgICAgICAgIGxldCBvcmRlciA9IFZpZXcuT3JkZXIub2Zfc3RyaW5nIH5zaXplIG9yZGVyIGluXG4gICAgICAgICAgb3JkZXIpXG4gICAgaW5cbiAgICB7IEx3ZF92aWV3LnJlcXVlc3Q7IGl0ZW1fY291bnQ7IHN0YXJ0X29mZnNldCA9IEx3ZC5wdXJlIDA7IG9yZGVyIH1cbiAgaW5cblxuICBsZXQgbWFpbl9saXN0ID1cbiAgICBVaV9wbGF5bGlzdC5tYWtlIH5yZXNldF9wbGF5bGlzdDpQLnJlc2V0X3BsYXlsaXN0IH5mZXRjaCBtYWluX3ZpZXdcbiAgaW5cbiAgbGV0IG5vd19wbGF5aW5nID1cbiAgICBsZXQgcGxheWxpc3QgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIucGxheXN0YXRlLnBsYXlsaXN0KSB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBOb25lIC0+IEVsd2Quc3BhbiBbIGBQIChFbC50eHQnIFwiTm90aGluZyBwbGF5aW5nXCIpIF1cbiAgICAgICAgfCBTb21lIHBsYXlsaXN0IC0+XG4gICAgICAgICAgICBsZXQgdmlldyA9XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBMd2Rfdmlldy5yZXF1ZXN0ID0gTHdkLnB1cmUgcGxheWxpc3Qudmlldy5yZXF1ZXN0O1xuICAgICAgICAgICAgICAgIGl0ZW1fY291bnQgPSBMd2QucHVyZSBwbGF5bGlzdC52aWV3Lml0ZW1fY291bnQ7XG4gICAgICAgICAgICAgICAgc3RhcnRfb2Zmc2V0ID0gTHdkLnB1cmUgcGxheWxpc3Qudmlldy5zdGFydF9vZmZzZXQ7XG4gICAgICAgICAgICAgICAgb3JkZXIgPSBMd2QucHVyZSBwbGF5bGlzdC5vcmRlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIFVpX3BsYXlsaXN0Lm1ha2Vfbm93X3BsYXlpbmcgfnJlc2V0X3BsYXlsaXN0OlAucmVzZXRfcGxheWxpc3QgfmZldGNoXG4gICAgICAgICAgICAgIHZpZXcpXG4gICAgaW5cbiAgICAoKnRvZG86IGRvIHdlIG5lZWQgdGhhdCBqb2luID8qKVxuICAgIEx3ZC5qb2luIHBsYXlsaXN0XG4gIGluXG4gIGxldCBiaWdfY292ZXIgPVxuICAgIGxldCBvcGVuIEF0dHJzLk8gaW5cbiAgICBsZXQgZGlzcGxheV9ub25lID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgQXBwX3N0YXRlLmFjdGl2ZV9sYXlvdXQpIH5mOihmdW5jdGlvblxuICAgICAgICB8IE1haW4gLT4gQXQuY2xhc3MnIChKc3RyLnYgXCJkaXNwbGF5LW5vbmVcIilcbiAgICAgICAgfCBLaW9zayAtPiBBdC52b2lkKVxuICAgIGluXG4gICAgbGV0IHN0eWxlID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgUGxheWVyLm5vd19wbGF5aW5nKSB+ZjooZnVuIG5wIC0+XG4gICAgICAgICAgbGV0IHNyYyA9XG4gICAgICAgICAgICBtYXRjaCBucCB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gXCJ0cmFjay5wbmdcIlxuICAgICAgICAgICAgfCBTb21lIHsgaXRlbSA9IHsgaWQ7IGFsYnVtX2lkOyBzZXJ2ZXJfaWQ7IF8gfTsgXyB9IC0+XG4gICAgICAgICAgICAgICAgbGV0IGltYWdlX2lkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmlkIGFsYnVtX2lkIGluXG4gICAgICAgICAgICAgICAgbGV0IHNlcnZlcnMgPSBMd2Rfc2VxLnRvX2xpc3QgKEx3ZC5wZWVrIFNlcnZlcnMuY29ubmV4aW9ucykgaW5cbiAgICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID0gTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzIGluXG4gICAgICAgICAgICAgICAgKCogdG9kbzogdGhpcyBpcyBkb25lIGluIG11bHRpcGxlIHBsYWNlcywgd2Ugc2hvdWxkIGZhY3RvclxuICAgICAgICAgICAgICAgICAgIHRoYXQgb3V0LiAqKVxuICAgICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9ODAwJmZvcm1hdD1KcGdcIlxuICAgICAgICAgICAgICAgICAgY29ubmV4aW9uLmJhc2VfdXJsIGltYWdlX2lkXG4gICAgICAgICAgaW5cbiAgICAgICAgICBBdC5zdHlsZSAoSnN0ci52IChQcmludGYuc3ByaW50ZiBcImJhY2tncm91bmQtaW1hZ2U6IHVybCglUylcIiBzcmMpKSlcbiAgICBpblxuICAgIGxldCBhdCA9IFsgYFIgZGlzcGxheV9ub25lOyBgUCAoQXQuY2xhc3MnIChKc3RyLnYgXCJiaWctY292ZXJcIikpIF0gaW5cbiAgICBFbHdkLmRpdiB+YXQgWyBgUiAoRWx3ZC5kaXYgfmF0OlsgYFIgc3R5bGUgXSBbXSkgXVxuICBpblxuICBFbHdkLmRpdlxuICAgIH5hdDpCcnJfbHdkX3VpLkF0dHJzLih0b19hdCB+aWQ6XCJtYWluLWxheW91dFwiIEBAIGNsYXNzZXMgW10pXG4gICAgW1xuICAgICAgYFIgc3RhdHVzO1xuICAgICAgYFJcbiAgICAgICAgKEVsd2QuZGl2XG4gICAgICAgICAgIH5hdDpbIGBQIChBdC5jbGFzcycgKEpzdHIudiBcIml0ZW0tbGlzdFwiKSkgXVxuICAgICAgICAgICBbIGBSIGJpZ19jb3ZlcjsgYFIgZmlsdGVyczsgYFIgKEVsd2QuZGl2IFsgYFIgbWFpbl9saXN0IF0pIF0pO1xuICAgICAgYFJcbiAgICAgICAgKEVsd2QuZGl2IH5hdDpbIGBQIChBdC5jbGFzcycgKEpzdHIudiBcInBsYXlsaXN0XCIpKSBdIFsgYFIgbm93X3BsYXlpbmcgXSk7XG4gICAgICBgUiBwbGF5ZXJfdWk7XG4gICAgXVxuXG5sZXQgaXNfc3RvcmFnZV9wZXJzaXN0ZW50ID1cbiAgQnJyX2lvLlN0b3JhZ2UuKG1hbmFnZXIgRy5uYXZpZ2F0b3IgfD4gTWFuYWdlci5wZXJzaXN0KVxuXG5sZXQgXyA9XG4gIGxldCBvbl9sb2FkIF8gPVxuICAgIENvbnNvbGUubG9nIFsgXCJQZXJzaXN0ID9cIjsgaXNfc3RvcmFnZV9wZXJzaXN0ZW50IF07XG4gICAgbGV0IGFwcCA9IEx3ZC5vYnNlcnZlIEBAIGFwcCBpblxuICAgIGxldCBvbl9pbnZhbGlkYXRlIF8gPVxuICAgICAgaWdub3JlIEBAIEcucmVxdWVzdF9hbmltYXRpb25fZnJhbWVcbiAgICAgIEBAIGZ1biBfIC0+IGlnbm9yZSBAQCBMd2QucXVpY2tfc2FtcGxlIGFwcFxuICAgIGluXG4gICAgRWwuYXBwZW5kX2NoaWxkcmVuIChEb2N1bWVudC5ib2R5IEcuZG9jdW1lbnQpIFsgTHdkLnF1aWNrX3NhbXBsZSBhcHAgXTtcbiAgICBMd2Quc2V0X29uX2ludmFsaWRhdGUgYXBwIG9uX2ludmFsaWRhdGVcbiAgaW5cbiAgRXYubGlzdGVuIEV2LmRvbV9jb250ZW50X2xvYWRlZCBvbl9sb2FkIChXaW5kb3cuYXNfdGFyZ2V0IEcud2luZG93KVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFbnN1cmUgdGhhdCBbYXRfZXhpdF0gZnVuY3Rpb25zIGFyZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSBwcm9ncmFtICopXG5cbmxldCBfID0gZG9fYXRfZXhpdCgpXG4iXX0= diff --git a/main.css b/main.css index 0e23b5a..db9d392 100644 --- a/main.css +++ b/main.css @@ -20,6 +20,6 @@ body { } #main-layout { - width: 100wv; - height: 100wh; + width: 100vw; + height: 100vh; }